From 33387c9e3506b2a78f2a97ceb78df23162283d92 Mon Sep 17 00:00:00 2001 From: fmarinofiuba Date: Thu, 25 Jan 2024 09:48:28 -0300 Subject: [PATCH 01/17] more changes --- build/uil.js | 2348 +++++++++++++++--------------------- build/uil.min.js | 2 +- build/uil.module.js | 2 +- examples.html | 217 ++++ examples/uil_3d.html | 2 +- examples/uil_3d_3.html | 6 +- examples/uil_lumicles.html | 116 ++ examples/uil_vr_test.html | 376 ++++++ index.html | 221 +--- package.json | 2 +- run_build.bat | 1 + run_dev.bat | 1 + src/core/Gui.js | 45 + src/core/Roots.js | 65 +- src/core/add.js | 2 + utils/rollup.config.dev.js | 166 +++ 16 files changed, 1935 insertions(+), 1637 deletions(-) create mode 100644 examples.html create mode 100644 examples/uil_lumicles.html create mode 100644 examples/uil_vr_test.html create mode 100644 run_build.bat create mode 100644 run_dev.bat create mode 100644 utils/rollup.config.dev.js diff --git a/build/uil.js b/build/uil.js index d3e74d9..11988d4 100644 --- a/build/uil.js +++ b/build/uil.js @@ -7,12 +7,15 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.UIL = {})); -}(this, (function (exports) { 'use strict'; +})(this, (function (exports) { 'use strict'; /** * @author lth / https://github.com/lo-th */ - const REVISION = '4.3.0'; // INTENAL FUNCTION + + const REVISION = '4.3.0'; + + // INTENAL FUNCTION const R = { ui: [], @@ -26,6 +29,7 @@ forceZone: false, isEventsInit: false, isLeave: false, + addDOMEventListeners: true, downTime: 0, prevTime: 0, //prevDefault: ['contextmenu', 'wheel'], @@ -76,12 +80,10 @@ }, remove: function (o) { let i = R.ui.indexOf(o); - if (i !== -1) { R.removeListen(o); R.ui.splice(i, 1); } - if (R.ui.length === 0) { R.removeEvents(); } @@ -89,12 +91,12 @@ // ---------------------- // EVENTS // ---------------------- + initEvents: function () { if (R.isEventsInit) return; let dom = document.body; R.isMobile = R.testMobile(); R.now = R.getTime(); - if (!R.isMobile) { dom.addEventListener('wheel', R, { passive: false @@ -102,16 +104,21 @@ } else { dom.style.touchAction = 'none'; } + console.log("R.addDOMEventListeners " + R.addDOMEventListeners); + if (R.addDOMEventListeners) { + dom.addEventListener('pointercancel', R); + dom.addEventListener('pointerleave', R); + //dom.addEventListener( 'pointerout', R ) - dom.addEventListener('pointercancel', R); - dom.addEventListener('pointerleave', R); //dom.addEventListener( 'pointerout', R ) + dom.addEventListener('pointermove', R); + dom.addEventListener('pointerdown', R); + dom.addEventListener('pointerup', R); + dom.addEventListener('keydown', R, false); + dom.addEventListener('keyup', R, false); + } + window.addEventListener('resize', R.resize, false); - dom.addEventListener('pointermove', R); - dom.addEventListener('pointerdown', R); - dom.addEventListener('pointerup', R); - dom.addEventListener('keydown', R, false); - dom.addEventListener('keyup', R, false); - window.addEventListener('resize', R.resize, false); //window.onblur = R.out; + //window.onblur = R.out; //window.onfocus = R.in; R.isEventsInit = true; @@ -120,31 +127,30 @@ removeEvents: function () { if (!R.isEventsInit) return; let dom = document.body; - if (!R.isMobile) { dom.removeEventListener('wheel', R); } + if (R.addDOMEventListeners) { + dom.removeEventListener('pointercancel', R); + dom.removeEventListener('pointerleave', R); + //dom.removeEventListener( 'pointerout', R ); - dom.removeEventListener('pointercancel', R); - dom.removeEventListener('pointerleave', R); //dom.removeEventListener( 'pointerout', R ); - - dom.removeEventListener('pointermove', R); - dom.removeEventListener('pointerdown', R); - dom.removeEventListener('pointerup', R); - dom.removeEventListener('keydown', R); - dom.removeEventListener('keyup', R); + dom.removeEventListener('pointermove', R); + dom.removeEventListener('pointerdown', R); + dom.removeEventListener('pointerup', R); + dom.removeEventListener('keydown', R); + dom.removeEventListener('keyup', R); + } window.removeEventListener('resize', R.resize); R.isEventsInit = false; }, resize: function () { let i = R.ui.length, - u; - + u; while (i--) { u = R.ui[i]; if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); } - R.needReZone = true; R.needResize = false; }, @@ -153,18 +159,22 @@ R.clearOldID(); }, in: function () { - console.log('im am in'); // R.clearOldID(); + console.log('im am in'); + // R.clearOldID(); }, // ---------------------- // HANDLE EVENTS // ---------------------- + fakeUp: function () { this.handleEvent({ type: 'pointerup' }); }, handleEvent: function (event) { + //console.log("Roots.handleEvent "+event.type) //if(!event.type) return; + if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); if (R.needResize) R.resize(); R.findZone(R.forceZone); @@ -178,45 +188,44 @@ e.clientX = (ptype === 'touch' ? event.pageX : event.clientX) || 0; e.clientY = (ptype === 'touch' ? event.pageY : event.clientY) || 0; e.type = event.type; - if (R.eventOut.indexOf(event.type) !== -1) { leave = true; e.type = 'mouseup'; } - if (event.type === 'pointerleave') R.isLeave = true; if (event.type === 'pointerdown') e.type = 'mousedown'; if (event.type === 'pointerup') e.type = 'mouseup'; - if (event.type === 'pointermove') { if (R.isLeave) { // if user resize outside this document R.isLeave = false; R.resize(); } - e.type = 'mousemove'; - } // double click test - + } + // double click test if (e.type === 'mousedown') { R.downTime = R.now(); - let time = R.downTime - R.prevTime; // double click on imput + let time = R.downTime - R.prevTime; + // double click on imput if (time < 200) { R.selectAll(); return false; } - R.prevTime = R.downTime; R.forceZone = false; - } // for imput - + } - if (e.type === 'mousedown') R.clearInput(); // mouse lock + // for imput + if (e.type === 'mousedown') R.clearInput(); + // mouse lock if (e.type === 'mousedown') R.lock = true; - if (e.type === 'mouseup') R.lock = false; //if( R.current !== null && R.current.neverlock ) R.lock = false; + if (e.type === 'mouseup') R.lock = false; + + //if( R.current !== null && R.current.neverlock ) R.lock = false; /*if( e.type === 'mousedown' && event.button === 1){ R.cursor() @@ -224,35 +233,35 @@ e.stopPropagation(); }*/ + //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) + if (R.isMobile && e.type === 'mousedown') R.findID(e); if (e.type === 'mousemove' && !R.lock) R.findID(e); - if (R.ID !== null) { if (R.ID.isCanvasOnly) { e.clientX = R.ID.mouse.x; e.clientY = R.ID.mouse.y; - } //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 + } + //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 R.ID.handleEvent(e); } - if (R.isMobile && e.type === 'mouseup') R.clearOldID(); if (leave) R.clearOldID(); }, // ---------------------- // ID // ---------------------- + findID: function (e) { let i = R.ui.length, - next = -1, - u, - x, - y; - + next = -1, + u, + x, + y; while (i--) { u = R.ui[i]; - if (u.isCanvasOnly) { x = u.mouse.x; y = u.mouse.y; @@ -260,20 +269,16 @@ x = e.clientX; y = e.clientY; } - if (R.onZone(u, x, y)) { next = i; - if (next !== R.current) { R.clearOldID(); R.current = next; R.ID = u; } - break; } } - if (next === -1) R.clearOldID(); }, clearOldID: function () { @@ -286,25 +291,26 @@ // ---------------------- // GUI / GROUP FUNCTION // ---------------------- + calcUis: (uis, zone, py, group = false) => { //console.log('calc_uis') + let i = uis.length, - u, - px = 0, - n = 0, - tw, - m; + u, + px = 0, + n = 0, + tw, + m; let height = 0; - while (i--) { u = uis[n]; n++; if (!group && u.isGroup) u.calcUis(); - m = u.margin; //div = u.marginDiv + m = u.margin; + //div = u.marginDiv u.zone.w = u.w; u.zone.h = u.h + m; - if (!u.autoWidth) { if (px === 0) height += u.h + m; u.zone.x = zone.x + px; @@ -314,10 +320,9 @@ tw = R.getWidth(u); if (tw) u.zone.w = u.w = tw;else if (u.fw) u.zone.w = u.w = u.fw; px += u.zone.w; - if (px >= zone.w) { - py += u.h + m; //if(div) py += m * 0.5 - + py += u.h + m; + //if(div) py += m * 0.5 px = 0; } } else { @@ -328,73 +333,77 @@ height += u.h + m; } } - return height; }, findTarget: function (uis, e) { let i = uis.length; - while (i--) { if (R.onZone(uis[i], e.clientX, e.clientY)) return i; } - return -1; }, // ---------------------- // ZONE // ---------------------- + findZone: function (force) { if (!R.needReZone && !force) return; var i = R.ui.length, - u; - + u; while (i--) { u = R.ui[i]; R.getZone(u); if (u.isGui) u.calcUis(); } - R.needReZone = false; }, onZone: function (o, x, y) { if (x === undefined || y === undefined) return false; let z = o.zone; let mx = x - z.x; // - o.dx; + let my = y - z.y; - let my = y - z.y; //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 //if( o.group !== null ) mx -= o.dx - let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; //if( o.marginDiv ) my -= o.margin * 0.5 + let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; + + //if( o.marginDiv ) my -= o.margin * 0.5 if (over) o.local.set(mx, my);else o.local.neg(); return over; }, getWidth: function (o) { //return o.getDom().offsetWidth - return o.getDom().clientWidth; //let r = o.getDom().getBoundingClientRect(); + return o.getDom().clientWidth; + + //let r = o.getDom().getBoundingClientRect(); //return (r.width) //return Math.floor(r.width) }, getZone: function (o) { if (o.isCanvasOnly) return; - let r = o.getDom().getBoundingClientRect(); //if( !r.width ) return + let r = o.getDom().getBoundingClientRect(); + + //if( !r.width ) return //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; - o.zone = { x: r.left, y: r.top, w: r.width, h: r.height - }; //console.log(o.name, o.zone) + }; + + //console.log(o.name, o.zone) }, // ---------------------- // CURSOR // ---------------------- + cursor: function (name) { name = name ? name : 'auto'; - if (name !== R.oldCursor) { document.body.style.cursor = name; R.oldCursor = name; @@ -403,18 +412,22 @@ // ---------------------- // CANVAS // ---------------------- + toCanvas: function (o, w, h, force) { - if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); // prevent exesive redraw + if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); + + // prevent exesive redraw if (force && R.tmpTime !== null) { clearTimeout(R.tmpTime); R.tmpTime = null; } - if (R.tmpTime !== null) return; if (R.lock) R.tmpTime = setTimeout(function () { R.tmpTime = null; - }, 10); /// + }, 10); + + /// let isNewSize = false; if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; @@ -423,42 +436,41 @@ let htmlString = R.xmlserializer.serializeToString(o.content); let svg = '' + htmlString + ''; - img.onload = function () { let ctx = o.canvas.getContext("2d"); - if (isNewSize) { o.canvas.width = w; o.canvas.height = h; } else { ctx.clearRect(0, 0, w, h); } - ctx.drawImage(this, 0, 0); o.onDraw(); }; - - img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); - + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); + //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); img.crossOrigin = ''; }, // ---------------------- // INPUT // ---------------------- + setHidden: function () { if (R.hiddenImput === null) { //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; + R.hiddenImput = document.createElement('input'); - R.hiddenImput.type = 'text'; //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); + R.hiddenImput.type = 'text'; + //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); - R.hiddenSizer = document.createElement('div'); //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; + R.hiddenSizer = document.createElement('div'); + //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; document.body.appendChild(R.hiddenImput); document.body.appendChild(R.hiddenSizer); } - let hide = R.debugInput ? '' : 'opacity:0; zIndex:0;'; let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;' + hide; R.hiddenImput.style.cssText = css + 'bottom:10px;' + (R.debugInput ? '' : 'transform:scale(0);'); @@ -474,37 +486,31 @@ }, clickPos: function (x) { let i = R.str.length, - l = 0, - n = 0; - + l = 0, + n = 0; while (i--) { l += R.textWidth(R.str[n]); if (l >= x) break; n++; } - return n; }, upInput: function (x, down) { if (R.parent === null) return false; let up = false; - if (down) { let id = R.clickPos(x); R.moveX = id; - if (R.startX === -1) { R.startX = id; R.cursorId = id; R.inputRange = [R.startX, R.startX]; } else { let isSelection = R.moveX !== R.startX; - if (isSelection) { if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX];else R.inputRange = [R.startX, R.moveX]; } } - up = true; } else { if (R.startX !== -1) { @@ -516,7 +522,6 @@ up = true; } } - if (up) R.selectParent(); return up; }, @@ -547,11 +552,12 @@ if (R.parent === null) return; if (!R.firstImput) R.parent.validate(true); R.clearHidden(); - R.parent.unselect(); //R.input.style.background = 'none'; + R.parent.unselect(); + //R.input.style.background = 'none'; R.input.style.background = R.parent.colors.back; - R.input.style.borderColor = R.parent.colors.border; //R.input.style.color = R.parent.colors.text; - + R.input.style.borderColor = R.parent.colors.border; + //R.input.style.color = R.parent.colors.text; R.parent.isEdit = false; R.input = null; R.parent = null; @@ -562,25 +568,28 @@ R.input = Input; R.parent = parent; R.input.style.background = R.parent.colors.backoff; - R.input.style.borderColor = R.parent.colors.select; //R.input.style.color = R.parent.colors.textSelect; - + R.input.style.borderColor = R.parent.colors.select; + //R.input.style.color = R.parent.colors.textSelect; R.str = R.input.textContent; R.setHidden(); }, keydown: function (e) { if (R.parent === null) return; let keyCode = e.which; - e.shiftKey; //console.log( keyCode ) + e.shiftKey; - R.firstImput = false; + //console.log( keyCode ) + R.firstImput = false; if (R.hasFocus) { // hack to fix touch event bug in iOS Safari window.focus(); R.hiddenImput.focus(); } + R.parent.isEdit = true; + + // e.preventDefault(); - R.parent.isEdit = true; // e.preventDefault(); // add support for Ctrl/Cmd+A selection //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { //R.selectText(); @@ -590,7 +599,11 @@ if (keyCode === 13) { //enter - R.clearInput(); //} else if( keyCode === 9 ){ //tab key + + R.clearInput(); + + //} else if( keyCode === 9 ){ //tab key + // R.input.textContent = ''; } else { if (R.input.isNum) { @@ -611,8 +624,9 @@ else R.input.textContent = R.str; R.cursorId = R.hiddenImput.selectionStart; R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; - R.selectParent(); //if( R.parent.allway ) + R.selectParent(); + //if( R.parent.allway ) R.parent.validate(); }, // ---------------------- @@ -620,13 +634,13 @@ // LISTENING // // ---------------------- + loop: function () { if (R.isLoop) requestAnimationFrame(R.loop); R.update(); }, update: function () { let i = R.listens.length; - while (i--) R.listens[i].listening(); }, removeListen: function (proto) { @@ -638,12 +652,10 @@ let id = R.listens.indexOf(proto); if (id !== -1) return false; R.listens.push(proto); - if (!R.isLoop) { R.isLoop = true; R.loop(); } - return true; } }; @@ -688,8 +700,10 @@ // ---------------------- // COLOR // ---------------------- + defineColor: (o, cc = T.colors) => { - let color = { ...cc + let color = { + ...cc }; let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize']; let changeText = false; @@ -698,51 +712,41 @@ if (o.weight) o.fontWeight = o.weight; if (o.fontColor) o.text = o.fontColor; if (o.color) o.text = o.color; - if (o.text) { color.text = o.text; - if (!o.fontColor && !o.color) { color.title = T.ColorLuma(o.text, -0.25); color.titleoff = T.ColorLuma(o.text, -0.5); } - color.textOver = T.ColorLuma(o.text, 0.25); color.textSelect = T.ColorLuma(o.text, 0.5); } - if (o.button) { color.button = o.button; color.border = T.ColorLuma(o.button, 0.1); color.overoff = T.ColorLuma(o.button, 0.2); } - if (o.select) { color.select = o.select; color.over = T.ColorLuma(o.select, -0.1); } - if (o.itemBg) o.back = o.itemBg; - if (o.back) { color.back = o.back; color.backoff = T.ColorLuma(o.back, -0.1); } - if (o.fontSelect) color.textSelect = o.fontSelect; - if (o.groupBorder) color.gborder = o.groupBorder; //if( o.transparent ) o.bg = 'none' - //if( o.bg ) color.background = color.backgroundOver = o.bg + if (o.groupBorder) color.gborder = o.groupBorder; + //if( o.transparent ) o.bg = 'none' + //if( o.bg ) color.background = color.backgroundOver = o.bg if (o.bgOver) color.backgroundOver = o.bgOver; - for (let m in color) { if (o[m] !== undefined) color[m] = o[m]; } - for (let m in o) { if (textChange.indexOf(m) !== -1) changeText = true; } - if (changeText) T.defineText(color); return color; }, @@ -754,6 +758,7 @@ radius: 2, showOver: 1, //groupOver : 1, + content: 'none', background: 'rgba(50,50,50,0.15)', backgroundOver: 'rgba(50,50,50,0.3)', @@ -787,12 +792,14 @@ hide: 'rgba(0,0,0,0)' }, // style css + css: { basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', button: 'display:flex; align-items:center; justify-content:center; text-align:center;', middle: 'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' }, // svg path + svgs: { g1: 'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', g2: 'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', @@ -819,11 +826,9 @@ save: 'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', extern: 'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z' }, - rezone() { Roots.needReZone = true; }, - getImput: function () { return Roots.input ? true : false; }, @@ -831,12 +836,12 @@ for (var o in data) { if (T.colors[o]) T.colors[o] = data[o]; } - T.setText(); }, // ---------------------- // custom text // ---------------------- + defineText: function (o) { T.setText(o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight); }, @@ -847,11 +852,11 @@ if (shadow === undefined) shadow = cc.fontShadow; if (weight === undefined) weight = cc.fontWeight; if (color === undefined) color = cc.text; - if (isNaN(size)) { if (size.search('em') === -1) size += 'px'; - } else size += 'px'; //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' + } else size += 'px'; + //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' T.css.txt = T.css.basic + T.css.middle + ' font-family:' + font + '; font-weight:' + weight + '; font-size:' + size + '; color:' + cc.text + '; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; if (shadow !== 'none') T.css.txt += ' text-shadow: 1px 1px 1px ' + shadow + ';'; @@ -859,16 +864,20 @@ T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; }, // note + //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container /*cloneColor: function () { let cc = Object.assign({}, T.colors ); return cc; },*/ + // intern function + cloneCss: function () { //let cc = Object.assign({}, T.css ); - return { ...T.css + return { + ...T.css }; }, clone: function (o) { @@ -891,19 +900,20 @@ get: function (dom, id) { if (id === undefined) return dom; // root else if (!isNaN(id)) return dom.childNodes[id]; // first child - else if (id instanceof Array) { - if (id.length === 2) return dom.childNodes[id[0]].childNodes[id[1]]; - if (id.length === 3) return dom.childNodes[id[0]].childNodes[id[1]].childNodes[id[2]]; - } + else if (id instanceof Array) { + if (id.length === 2) return dom.childNodes[id[0]].childNodes[id[1]]; + if (id.length === 3) return dom.childNodes[id[0]].childNodes[id[1]].childNodes[id[2]]; + } }, dom: function (type, css, obj, dom, id) { type = type || 'div'; - if (T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1) { // is svg element + if (type === 'svg') { dom = document.createElementNS(T.svgns, 'svg'); T.set(dom, obj); + /* } else if ( type === 'use' ) { dom = document.createElementNS( T.svgns, 'use' ); T.set( dom, obj ); @@ -915,9 +925,9 @@ } } else { // is html element + if (dom === undefined) dom = document.createElementNS(T.htmls, type);else dom = dom.appendChild(document.createElementNS(T.htmls, type)); } - if (css) dom.style.cssText = css; if (id === undefined) return dom;else return dom.childNodes[id || 0]; }, @@ -930,7 +940,6 @@ }, clear: function (dom) { T.purge(dom); - while (dom.firstChild) { if (dom.firstChild.firstChild) T.clear(dom.firstChild); dom.removeChild(dom.firstChild); @@ -938,23 +947,18 @@ }, purge: function (dom) { let a = dom.attributes, - i, - n; - + i, + n; if (a) { i = a.length; - while (i--) { n = a[i].name; if (typeof dom[n] === 'function') dom[n] = null; } } - a = dom.childNodes; - if (a) { i = a.length; - while (i--) { T.purge(dom.childNodes[i]); } @@ -963,6 +967,7 @@ // ---------------------- // SVG Effects function // ---------------------- + addSVGGlowEffect: function () { if (document.getElementById('UILGlow') !== null) return; let svgFilter = T.initUILEffects(); @@ -979,20 +984,17 @@ result: 'uilBlur' }); let feMerge = T.addAttributes(filter, 'feMerge', {}); - for (let i = 0; i <= 3; i++) { T.addAttributes(feMerge, 'feMergeNode', { in: 'uilBlur' }); } - T.addAttributes(feMerge, 'feMergeNode', { in: 'SourceGraphic' }); }, initUILEffects: function () { let svgFilter = document.getElementById('UILSVGEffects'); - if (svgFilter === null) { svgFilter = T.dom('svg', undefined, { id: 'UILSVGEffects', @@ -1001,34 +1003,33 @@ }); document.body.appendChild(svgFilter); } - return svgFilter; }, // ---------------------- // Color function // ---------------------- + ColorLuma: function (hex, l) { //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; - if (hex === 'n') hex = '#000'; // validate hex string - hex = String(hex).replace(/[^0-9a-f]/gi, ''); + if (hex === 'n') hex = '#000'; + // validate hex string + hex = String(hex).replace(/[^0-9a-f]/gi, ''); if (hex.length < 6) { hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; } + l = l || 0; - l = l || 0; // convert to decimal and change luminosity - + // convert to decimal and change luminosity let rgb = "#", - c, - i; - + c, + i; for (i = 0; i < 3; i++) { c = parseInt(hex.substr(i * 2, 2), 16); c = Math.round(Math.min(Math.max(0, c + c * l), 255)).toString(16); rgb += ("00" + c).substr(c.length); } - return rgb; }, findDeepInver: function (c) { @@ -1036,11 +1037,9 @@ }, lerpColor: function (c1, c2, factor) { let newColor = {}; - for (let i = 0; i < 3; i++) { newColor[i] = c1[i] + (c2[i] - c1[i]) * factor; } - return newColor; }, hexToHtml: function (v) { @@ -1078,7 +1077,9 @@ let r = Math.round(c[0] * 255).toString(16); let g = Math.round(c[1] * 255).toString(16); let b = Math.round(c[2] * 255).toString(16); - return '#' + T.pad(r) + T.pad(g) + T.pad(b); // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); + return '#' + T.pad(r) + T.pad(g) + T.pad(b); + + // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); }, hueToRgb: function (p, q, t) { if (t < 0) t += 1; @@ -1090,31 +1091,29 @@ }, rgbToHsl: function (c) { let r = c[0], - g = c[1], - b = c[2], - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h = 0, - s = 0, - l = (min + max) / 2; + g = c[1], + b = c[2], + min = Math.min(r, g, b), + max = Math.max(r, g, b), + delta = max - min, + h = 0, + s = 0, + l = (min + max) / 2; if (l > 0 && l < 1) s = delta / (l < 0.5 ? 2 * l : 2 - 2 * l); - if (delta > 0) { if (max == r && max != g) h += (g - b) / delta; if (max == g && max != b) h += 2 + (b - r) / delta; if (max == b && max != r) h += 4 + (r - g) / delta; h /= 6; } - return [h, s, l]; }, hslToRgb: function (c) { let p, - q, - h = c[0], - s = c[1], - l = c[2]; + q, + h = c[0], + s = c[1], + l = c[2]; if (s === 0) return [l, l, l];else { q = l <= 0.5 ? l * (s + 1) : l + s - l * s; p = l * 2 - q; @@ -1124,14 +1123,14 @@ // ---------------------- // SVG MODEL // ---------------------- + makeGradiant: function (type, settings, parent, colors) { T.dom(type, null, settings, parent, 0); let n = parent.childNodes[0].childNodes.length - 1, - c; - + c; for (let i = 0; i < colors.length; i++) { - c = colors[i]; //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); - + c = colors[i]; + //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); T.dom('stop', null, { offset: c[0] + '%', 'stop-color': c[1], @@ -1139,7 +1138,6 @@ }, parent, [0, n]); } }, - /*makeGraph: function () { let w = 128; let radius = 34; @@ -1152,6 +1150,7 @@ //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 T.graph = svg; },*/ + makePad: function (model) { let ww = 256; let svg = T.dom('svg', T.css.basic + 'position:relative;', { @@ -1162,7 +1161,7 @@ }); let w = 200; let d = (ww - w) * 0.5, - m = 20; + m = 20; Tools.dom('rect', '', { x: d, y: d, @@ -1170,7 +1169,6 @@ height: w, fill: T.colors.back }, svg); // 0 - Tools.dom('rect', '', { x: d + m * 0.5, y: d + m * 0.5, @@ -1179,7 +1177,6 @@ fill: T.colors.button }, svg); // 1 // Pointer - Tools.dom('line', '', { x1: d + m * 0.5, y1: ww * 0.5, @@ -1188,7 +1185,6 @@ stroke: T.colors.back, 'stroke-width': 2 }, svg); // 2 - Tools.dom('line', '', { x1: ww * 0.5, x2: ww * 0.5, @@ -1197,7 +1193,6 @@ stroke: T.colors.back, 'stroke-width': 2 }, svg); // 3 - Tools.dom('circle', '', { cx: ww * 0.5, cy: ww * 0.5, @@ -1206,7 +1201,6 @@ 'stroke-width': 5, fill: 'none' }, svg); // 4 - T.pad2d = svg; }, makeKnob: function (model) { @@ -1226,7 +1220,6 @@ stroke: 'rgba(0,0,0,0.3)', 'stroke-width': 8 }, svg); //0 - T.dom('path', '', { d: '', stroke: T.colors.text, @@ -1234,7 +1227,6 @@ fill: 'none', 'stroke-linecap': 'round' }, svg); //1 - T.dom('circle', '', { cx: 64, cy: 64, @@ -1243,7 +1235,6 @@ 'stroke-width': 7, fill: 'none' }, svg); //2 - T.dom('path', '', { d: '', stroke: 'rgba(255,255,255,0.3)', @@ -1252,7 +1243,6 @@ 'stroke-linecap': 'round', 'stroke-opacity': 0.5 }, svg); //3 - T.knob = svg; }, makeCircular: function (model) { @@ -1272,7 +1262,6 @@ 'stroke-width': 10, fill: 'none' }, svg); //0 - T.dom('path', '', { d: '', stroke: T.colors.text, @@ -1280,13 +1269,13 @@ fill: 'none', 'stroke-linecap': 'butt' }, svg); //1 - T.circular = svg; }, makeJoystick: function (model) { //+' background:#f00;' + let w = 128, - ccc; + ccc; let radius = Math.floor((w - 30) * 0.5); let innerRadius = Math.floor(radius * 0.6); let svg = T.dom('svg', T.css.basic + 'position:relative;', { @@ -1297,7 +1286,6 @@ }); T.dom('defs', null, {}, svg); T.dom('g', null, {}, svg); - if (model === 0) { // gradian background ccc = [[40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0]]; @@ -1308,8 +1296,9 @@ r: '50%', fx: '50%', fy: '50%' - }, svg, ccc); // gradian shadow + }, svg, ccc); + // gradian shadow ccc = [[60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0]]; T.makeGradiant('radialGradient', { id: 'gradS', @@ -1318,8 +1307,9 @@ r: '50%', fx: '50%', fy: '50%' - }, svg, ccc); // gradian stick + }, svg, ccc); + // gradian stick let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; ccc = [[30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1]]; @@ -1339,7 +1329,9 @@ r: '50%', fx: '50%', fy: '50%' - }, svg, ccc); // graph + }, svg, ccc); + + // graph T.dom('circle', '', { cx: 64, @@ -1347,14 +1339,12 @@ r: radius, fill: 'url(#grad)' }, svg); //2 - T.dom('circle', '', { cx: 64 + 5, cy: 64 + 10, r: innerRadius + 10, fill: 'url(#gradS)' }, svg); //3 - T.dom('circle', '', { cx: 64, cy: 64, @@ -1382,14 +1372,12 @@ stroke: 'rgba(100,100,100,0.25)', 'stroke-width': '4' }, svg); //2 - T.dom('circle', '', { cx: 64, cy: 64, r: innerRadius + 14, fill: 'url(#gradX)' }, svg); //3 - T.dom('circle', '', { cx: 64, cy: 64, @@ -1413,15 +1401,13 @@ T.dom('defs', null, {}, svg); T.dom('g', null, {}, svg); let s = 30; //stroke - let r = (w - s) * 0.5; let mid = w * 0.5; let n = 24, - nudge = 8 / r / n * Math.PI, - a1 = 0; + nudge = 8 / r / n * Math.PI, + a1 = 0; let am, tan, d2, a2, ar, i, j, path, ccc; let color = []; - for (i = 0; i <= n; ++i) { d2 = i / n; a2 = d2 * T.TwoPI; @@ -1429,14 +1415,11 @@ tan = 1 / Math.cos((a2 - a1) * 0.5); ar = [Math.sin(a1), -Math.cos(a1), Math.sin(am) * tan, -Math.cos(am) * tan, Math.sin(a2), -Math.cos(a2)]; color[1] = T.rgbToHex(T.hslToRgb([d2, 1, 0.5])); - if (i > 0) { j = 6; - while (j--) { ar[j] = (ar[j] * r + mid).toFixed(2); } - path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; ccc = [[0, color[0], 1], [100, color[1], 1]]; T.makeGradiant('linearGradient', { @@ -1454,12 +1437,12 @@ 'stroke-linecap': "butt" }, svg, 1); } - a1 = a2 - nudge; color[0] = color[1]; } - let tw = 84.90; // black / white + let tw = 84.90; + // black / white ccc = [[0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1]]; T.makeGradiant('linearGradient', { id: 'GL0', @@ -1482,26 +1465,22 @@ 'transform-origin': '128px 128px', 'transform': 'rotate(0)' }, svg); //2 - T.dom('polygon', '', { points: '78.95 43.1 78.95 212.85 226 128', fill: 'red' }, svg, 2); // 2,0 - T.dom('polygon', '', { points: '78.95 43.1 78.95 212.85 226 128', fill: 'url(#GL1)', 'stroke-width': 1, stroke: 'url(#GL1)' }, svg, 2); //2,1 - T.dom('polygon', '', { points: '78.95 43.1 78.95 212.85 226 128', fill: 'url(#GL0)', 'stroke-width': 1, stroke: 'url(#GL0)' }, svg, 2); //2,2 - T.dom('path', '', { d: 'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill: 'none', @@ -1522,43 +1501,35 @@ T.colorRing = svg; }, icon: function (type, color, w) { - w = w || 40; //color = color || '#DEDEDE'; - - let viewBox = '0 0 256 256'; //let viewBox = '0 0 '+ w +' '+ w; - + w = w || 40; + //color = color || '#DEDEDE'; + let viewBox = '0 0 256 256'; + //let viewBox = '0 0 '+ w +' '+ w; let t = [""]; - switch (type) { case 'logo': t[1] = ""; break; - case 'donate': t[1] = ""; break; - case 'neo': t[1] = ""; break; - case 'phy': t[1] = ""; break; - case 'config': t[1] = ""; break; - case 'github': t[1] = ""; break; - case 'save': t[1] = ""; break; } - t[2] = ""; return t.join("\n"); }, @@ -1612,13 +1583,14 @@ const Tools = T; ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile + class Files { //----------------------------- // FILE TYPE //----------------------------- + static autoTypes(type) { let t = []; - switch (type) { case 'svg': t = [{ @@ -1627,7 +1599,6 @@ } }]; break; - case 'wav': t = [{ accept: { @@ -1635,7 +1606,6 @@ } }]; break; - case 'mp3': t = [{ accept: { @@ -1643,7 +1613,6 @@ } }]; break; - case 'mp4': t = [{ accept: { @@ -1651,7 +1620,6 @@ } }]; break; - case 'bin': case 'hex': t = [{ @@ -1661,7 +1629,6 @@ } }]; break; - case 'text': t = [{ description: 'Text Files', @@ -1671,7 +1638,6 @@ } }]; break; - case 'json': t = [{ description: 'JSON Files', @@ -1679,9 +1645,7 @@ 'application/json': ['.json'] } }]; //text/plain - break; - case 'js': t = [{ description: 'JavaScript Files', @@ -1690,7 +1654,6 @@ } }]; break; - case 'image': t = [{ description: 'Images', @@ -1699,7 +1662,6 @@ } }]; break; - case 'icon': t = [{ description: 'Icons', @@ -1708,7 +1670,6 @@ } }]; break; - case 'lut': t = [{ description: 'Lut', @@ -1718,29 +1679,30 @@ }]; break; } - return t; - } //----------------------------- + } + + //----------------------------- // LOAD //----------------------------- - static async load(o = {}) { if (typeof window.showOpenFilePicker !== 'function') { window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; } - try { let type = o.type || ''; const options = { excludeAcceptAllOption: type ? true : false, - multiple: false //startIn:'./assets' - + multiple: false + //startIn:'./assets' }; - options.types = Files.autoTypes(type); // create a new handle + options.types = Files.autoTypes(type); + // create a new handle const handle = await window.showOpenFilePicker(options); - const file = await handle[0].getFile(); //let content = await file.text() + const file = await handle[0].getFile(); + //let content = await file.text() if (!file) return null; let fname = file.name; @@ -1749,25 +1711,19 @@ const dataBuf = ['sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf']; const reader = new FileReader(); if (dataUrl.indexOf(ftype) !== -1) reader.readAsDataURL(file);else if (dataBuf.indexOf(ftype) !== -1) reader.readAsArrayBuffer(file);else reader.readAsText(file); - reader.onload = function (e) { let content = e.target.result; - switch (type) { case 'image': let img = new Image(); - img.onload = function () { if (o.callback) o.callback(img, fname, ftype); }; - img.src = content; break; - case 'json': if (o.callback) o.callback(JSON.parse(content), fname, ftype); break; - default: if (o.callback) o.callback(content, fname, ftype); break; @@ -1778,7 +1734,6 @@ if (o.always && o.callback) o.callback(null); } } - static showOpenFilePickerPolyfill(options) { return new Promise(resolve => { const input = document.createElement("input"); @@ -1796,19 +1751,18 @@ }); input.click(); }); - } //----------------------------- + } + + //----------------------------- // SAVE //----------------------------- - static async save(o = {}) { let usePoly = false; - if (typeof window.showSaveFilePicker !== 'function') { window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; usePoly = true; } - try { let type = o.type || ''; const options = { @@ -1817,24 +1771,27 @@ }; options.types = Files.autoTypes(type); options.finalType = Object.keys(options.types[0].accept)[0]; - options.suggestedName += options.types[0].accept[options.finalType][0]; // create a new handle + options.suggestedName += options.types[0].accept[options.finalType][0]; + // create a new handle const handle = await window.showSaveFilePicker(options); - if (usePoly) return; // create a FileSystemWritableFileStream to write to + if (usePoly) return; + // create a FileSystemWritableFileStream to write to const file = await handle.createWritable(); let blob = new Blob([options.data], { type: options.finalType - }); // write our file + }); - await file.write(blob); // close the file and write the contents to disk. + // write our file + await file.write(blob); + // close the file and write the contents to disk. await file.close(); } catch (e) { console.log(e); } } - static showSaveFilePickerPolyfill(options) { return new Promise(resolve => { const a = document.createElement("a"); @@ -1848,28 +1805,26 @@ }); a.click(); }); - } //----------------------------- + } + + //----------------------------- // FOLDER not possible in poly //----------------------------- - static async getFolder() { try { const handle = await window.showDirectoryPicker(); const files = []; - for await (const entry of handle.values()) { const file = await entry.getFile(); files.push(file); } - console.log(files); return files; } catch (e) { console.log(e); } } - } class V2 { @@ -1877,82 +1832,68 @@ this.x = x; this.y = y; } - set(x, y) { this.x = x; this.y = y; return this; } - divide(v) { this.x /= v.x; this.y /= v.y; return this; } - multiply(v) { this.x *= v.x; this.y *= v.y; return this; } - multiplyScalar(scalar) { this.x *= scalar; this.y *= scalar; return this; } - divideScalar(scalar) { return this.multiplyScalar(1 / scalar); } - length() { return Math.sqrt(this.x * this.x + this.y * this.y); } - angle() { // computes the angle in radians with respect to the positive x-axis + var angle = Math.atan2(this.y, this.x); if (angle < 0) angle += 2 * Math.PI; return angle; } - addScalar(s) { this.x += s; this.y += s; return this; } - negate() { this.x *= -1; this.y *= -1; return this; } - neg() { this.x = -1; this.y = -1; return this; } - isZero() { return this.x === 0 && this.y === 0; } - copy(v) { this.x = v.x; this.y = v.y; return this; } - equals(v) { return v.x === this.x && v.y === this.y; } - nearEquals(v, n) { return v.x.toFixed(n) === this.x.toFixed(n) && v.y.toFixed(n) === this.y.toFixed(n); } - lerp(v, alpha) { if (v === null) { this.x -= this.x * alpha; @@ -1961,10 +1902,8 @@ this.x += (v.x - this.x) * alpha; this.y += (v.y - this.y) * alpha; } - return this; } - } /** @@ -1974,12 +1913,15 @@ class Proto { constructor(o = {}) { // disable mouse controle - this.lock = o.lock || false; // for button + this.lock = o.lock || false; - this.neverlock = false; // only simple space + // for button + this.neverlock = false; - this.isSpace = o.isSpace || false; // if is on gui or group + // only simple space + this.isSpace = o.isSpace || false; + // if is on gui or group this.main = o.main || null; this.isUI = o.isUI || false; this.group = o.group || null; @@ -2004,292 +1946,287 @@ }; this.local = new V2().neg(); this.isCanvasOnly = false; - this.isSelect = false; // percent of title + this.isSelect = false; + // percent of title this.p = o.p !== undefined ? o.p : Tools.size.p; this.w = this.isUI ? this.main.size.w : Tools.size.w; if (o.w !== undefined) this.w = o.w; this.h = this.isUI ? this.main.size.h : Tools.size.h; if (o.h !== undefined) this.h = o.h; - if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h;else this.lock = true; // decale for canvas only + if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h;else this.lock = true; + // decale for canvas only this.fw = o.fw || 0; this.autoWidth = o.auto || true; // auto width or flex - this.isOpen = false; //false// open statu - // radius for toolbox + // radius for toolbox this.radius = o.radius || this.colors.radius; - this.transition = o.transition || Tools.transition; // only for number + this.transition = o.transition || Tools.transition; + // only for number this.isNumber = false; this.noNeg = o.noNeg || false; - this.allEqual = o.allEqual || false; // only most simple + this.allEqual = o.allEqual || false; - this.mono = false; // stop listening for edit slide text + // only most simple + this.mono = false; - this.isEdit = false; // no title + // stop listening for edit slide text + this.isEdit = false; + // no title this.simple = o.simple || false; - if (this.simple) this.sa = 0; // define obj size + if (this.simple) this.sa = 0; - this.setSize(this.w); // title size + // define obj size + this.setSize(this.w); + // title size if (o.sa !== undefined) this.sa = o.sa; if (o.sb !== undefined) this.sb = o.sb; - if (this.simple) this.sb = this.w - this.sa; // last number size for slide + if (this.simple) this.sb = this.w - this.sa; - this.sc = o.sc === undefined ? 47 : o.sc; // for listening object + // last number size for slide + this.sc = o.sc === undefined ? 47 : o.sc; + // for listening object this.objectLink = null; this.isSend = false; this.objectKey = null; this.txt = o.name || ''; this.name = o.rename || this.txt; - this.target = o.target || null; // callback + this.target = o.target || null; + // callback this.callback = o.callback === undefined ? null : o.callback; this.endCallback = null; this.openCallback = o.openCallback === undefined ? null : o.openCallback; - this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; // if no callback take one from group or gui + this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; + // if no callback take one from group or gui if (this.callback === null && this.isUI && this.main.callback !== null) { this.callback = this.group ? this.group.callback : this.main.callback; - } // elements - + } - this.c = []; // style + // elements + this.c = []; + // style this.s = []; this.useFlex = this.isUI ? this.main.useFlex : false; let flexible = this.useFlex ? 'display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;' : 'float:left;'; this.c[0] = Tools.dom('div', this.css.basic + flexible + 'position:relative; height:20px;'); - this.s[0] = this.c[0].style; // bottom margin + this.s[0] = this.c[0].style; + // bottom margin this.margin = this.colors.sy; this.mtop = 0; let marginDiv = Tools.isDivid(this.margin); - if (this.isUI && this.margin) { this.s[0].boxSizing = 'content-box'; - if (marginDiv) { - this.mtop = this.margin * 0.5; //this.s[0].borderTop = '${this.mtop}px solid transparent' + this.mtop = this.margin * 0.5; + //this.s[0].borderTop = '${this.mtop}px solid transparent' //console.log(`${this.mtop}px solid transparent`) - this.s[0].borderTop = this.mtop + 'px solid transparent'; this.s[0].borderBottom = this.mtop + 'px solid transparent'; } else { this.s[0].borderBottom = this.margin + 'px solid transparent'; } - } // with title - + } + // with title if (!this.simple) { this.c[1] = Tools.dom('div', this.css.txt + this.css.middle); this.s[1] = this.c[1].style; this.c[1].textContent = this.name; this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; } - if (o.pos) { this.s[0].position = 'absolute'; - for (let p in o.pos) { this.s[0][p] = o.pos[p]; } - this.mono = true; } - if (o.css) this.s[0].cssText = o.css; - } // ---------------------- + } + + // ---------------------- // make the node // ---------------------- - init() { this.ytop = this.top + this.mtop; this.zone.h = this.h + this.margin; this.zone.w = this.w; let s = this.s; // style cache - let c = this.c; // div cach s[0].height = this.h + 'px'; if (this.isUI) s[0].background = this.colors.background; - if (!this.autoWidth && this.useFlex) { s[0].flex = '1 0 auto'; s[0].minWidth = this.minw + 'px'; s[0].textAlign = 'center'; } else { if (this.isUI) s[0].width = '100%'; - } //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; - + } + //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; if (c[1] !== undefined && this.autoWidth) { s[1] = c[1].style; s[1].top = 1 + 'px'; s[1].height = this.h - 2 + 'px'; } - let frag = Tools.frag; - for (let i = 1, lng = c.length; i !== lng; i++) { if (c[i] !== undefined) { frag.appendChild(c[i]); s[i] = c[i].style; } } - let pp = this.target !== null ? this.target : this.isUI ? this.main.inner : document.body; if (this.ontop) pp.insertAdjacentElement('afterbegin', c[0]);else pp.appendChild(c[0]); c[0].appendChild(frag); - this.rSize(); // ! solo proto + this.rSize(); + // ! solo proto if (!this.isUI) { this.c[0].style.pointerEvents = 'auto'; Roots.add(this); } } - addTransition() { if (this.baseH && this.transition && this.isUI) { this.c[0].style.transition = 'height ' + this.transition + 's ease-out'; } - } // from Tools + } + // from Tools dom(type, css, obj, dom, id) { return Tools.dom(type, css, obj, dom, id); } - setSvg(dom, type, value, id, id2) { Tools.setSvg(dom, type, value, id, id2); } - setCss(dom, css) { Tools.setCss(dom, css); } - clamp(value, min, max) { return Tools.clamp(value, min, max); } - getColorRing() { if (!Tools.colorRing) Tools.makeColorRing(); return Tools.clone(Tools.colorRing); } - getJoystick(model) { if (!Tools['joystick_' + model]) Tools.makeJoystick(model); return Tools.clone(Tools['joystick_' + model]); } - getCircular(model) { if (!Tools.circular) Tools.makeCircular(model); return Tools.clone(Tools.circular); } - getKnob(model) { if (!Tools.knob) Tools.makeKnob(model); return Tools.clone(Tools.knob); } - getPad2d(model) { if (!Tools.pad2d) Tools.makePad(model); return Tools.clone(Tools.pad2d); - } // from Roots + } + // from Roots cursor(name) { Roots.cursor(name); - } ///////// + } + ///////// update() {} + reset() {} - reset() {} ///////// - + ///////// content() { return this.c[0]; } - getDom() { return this.c[0]; } - uiout() { if (this.lock) return; if (!this.overEffect) return; if (this.s) this.s[0].background = this.colors.background; } - uiover() { if (this.lock) return; if (!this.overEffect) return; if (this.s) this.s[0].background = this.colors.backgroundOver; } - rename(s) { if (this.c[1] !== undefined) this.c[1].textContent = s; } - listen() { this.isListen = Roots.addListen(this); return this; } - listening() { if (this.objectLink === null) return; if (this.isSend) return; if (this.isEdit) return; this.setValue(this.objectLink[this.objectKey]); } - setValue(v) { - if (this.isNumber) this.value = this.numValue(v); //else if( v instanceof Array && v.length === 1 ) v = v[0]; + if (this.isNumber) this.value = this.numValue(v); + //else if( v instanceof Array && v.length === 1 ) v = v[0]; else this.value = v; this.update(); - } // ---------------------- + } + + // ---------------------- // update every change // ---------------------- - onChange(f) { if (this.isSpace) return; this.callback = f || null; return this; - } // ---------------------- + } + + // ---------------------- // update only on end // ---------------------- - onFinishChange(f) { if (this.isSpace) return; this.callback = null; this.endCallback = f; return this; - } // ---------------------- + } + + // ---------------------- // event on open close // ---------------------- - onOpen(f) { this.openCallback = f; return this; } - onClose(f) { this.closeCallback = f; return this; - } // ---------------------- + } + + // ---------------------- // send back value // ---------------------- - send(v) { v = v || this.value; if (v instanceof Array && v.length === 1) v = v[0]; @@ -2298,27 +2235,25 @@ if (this.callback) this.callback(v, this.objectKey); this.isSend = false; } - sendEnd(v) { v = v || this.value; if (v instanceof Array && v.length === 1) v = v[0]; if (this.endCallback) this.endCallback(v); if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - } // ---------------------- + } + + // ---------------------- // clear node // ---------------------- - dispose() { if (this.isListen) Roots.removeListen(this); Tools.clear(this.c[0]); - if (this.target !== null) { if (this.group !== null) this.group.clearOne(this);else this.target.removeChild(this.c[0]); } else { if (this.isUI) this.main.clearOne(this);else document.body.removeChild(this.c[0]); } - if (!this.isUI) Roots.remove(this); this.c = null; this.s = null; @@ -2326,191 +2261,173 @@ this.target = null; this.isListen = false; } + clear() {} - clear() {} // ---------------------- + // ---------------------- // change size // ---------------------- - getWidth() { let nw = Roots.getWidth(this); if (nw) this.w = nw; } - setSize(sx) { if (!this.autoWidth) return; this.w = sx; - if (this.simple) { this.sb = this.w - this.sa; } else { - let pp = this.w * (this.p / 100); //this.sa = Math.floor( pp + 10 ) + let pp = this.w * (this.p / 100); + //this.sa = Math.floor( pp + 10 ) //this.sb = Math.floor( this.w - pp - 20 ) - this.sa = Math.floor(pp + 8); this.sb = Math.floor(this.w - pp - 16); } } - rSize() { if (!this.autoWidth) return; if (!this.isUI) this.s[0].width = this.w + 'px'; if (!this.simple) this.s[1].width = this.sa + 'px'; - } // ---------------------- + } + + // ---------------------- // for numeric value // ---------------------- - setTypeNumber(o) { this.isNumber = true; this.value = 0; - if (o.value !== undefined) { if (typeof o.value === 'string') this.value = o.value * 1;else this.value = o.value; } - this.min = o.min === undefined ? -Infinity : o.min; this.max = o.max === undefined ? Infinity : o.max; this.precision = o.precision === undefined ? 2 : o.precision; let s; - switch (this.precision) { case 0: s = 1; break; - case 1: s = 0.1; break; - case 2: s = 0.01; break; - case 3: s = 0.001; break; - case 4: s = 0.0001; break; - case 5: s = 0.00001; break; - case 6: s = 0.000001; break; } - this.step = o.step === undefined ? s : o.step; this.range = this.max - this.min; this.value = this.numValue(this.value); } - numValue(n) { if (this.noNeg) n = Math.abs(n); return Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1; - } // ---------------------- + } + + // ---------------------- // EVENTS DEFAULT // ---------------------- - handleEvent(e) { if (this.lock) return; if (this.neverlock) Roots.lock = false; - if (!this[e.type]) return console.error(e.type, 'this type of event no existe !'); // TODO !!!! + if (!this[e.type]) return console.error(e.type, 'this type of event no existe !'); + + // TODO !!!! + //if( this.marginDiv ) z.d -= this.margin * 0.5 + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 return this[e.type](e); } - wheel(e) { return false; } - mousedown(e) { return false; } - mousemove(e) { return false; } - mouseup(e) { return false; } - keydown(e) { return false; } - keyup(e) { return false; - } // ---------------------- + } + + // ---------------------- // object referency // ---------------------- - setReferency(obj, key) { this.objectLink = obj; this.objectKey = key; } - display(v = false) { this.s[0].visibility = v ? 'visible' : 'hidden'; - } // ---------------------- + } + + // ---------------------- // resize height // ---------------------- - open() { if (this.isOpen) return; this.isOpen = true; Roots.needResize = true; if (this.openCallback) this.openCallback(); } - close() { if (!this.isOpen) return; this.isOpen = false; Roots.needResize = true; if (this.closeCallback) this.closeCallback(); } - needZone() { Roots.needReZone = true; } - rezone() { Roots.needReZone = true; - } // ---------------------- + } + + // ---------------------- // INPUT // ---------------------- - select() {} - unselect() {} - setInput(Input) { Roots.setInput(Input, this); } - upInput(x, down) { return Roots.upInput(x, down); - } // ---------------------- + } + + // ---------------------- // special item // ---------------------- - selected(b) { this.isSelect = b || false; } - } class Bool extends Proto { @@ -2524,7 +2441,6 @@ this.inh = o.inh || Math.floor(this.h * 0.8); this.inw = o.inw || 36; let cc = this.colors; - if (this.model === 0) { let t = Math.floor(this.h * 0.5) - (this.inh - 2) * 0.5; this.c[2] = this.dom('div', this.css.basic + 'background:' + cc.inputBg + '; height:' + (this.inh - 2) + 'px; width:' + this.inw + 'px; top:' + t + 'px; border-radius:10px; border:2px solid ' + cc.back); @@ -2534,68 +2450,61 @@ if (this.c[1] !== undefined) this.c[1].textContent = ''; this.c[2] = this.dom('div', this.css.txt + this.css.button + 'top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.borderSize + 'px solid ' + cc.border + '; border-radius:' + this.radius + 'px;'); } - this.stat = -1; this.init(); this.update(); - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - mousedown(e) { this.value = !this.value; this.update(true); return this.mousemove(e); } - mousemove(e) { this.cursor('pointer'); return this.mode(true); } - reset() { this.cursor(); return this.mode(); - } // ---------------------- + } + + // ---------------------- // MODE // ---------------------- - mode(over) { let change = false; let cc = this.colors, - s = this.s, - n, - v = this.value; + s = this.s, + n, + v = this.value; if (over) n = v ? 4 : 3;else n = v ? 2 : 1; - if (this.stat !== n) { this.stat = n; - if (this.model !== 0) { switch (n) { case 1: s[2].color = cc.text; s[2].background = cc.button; break; - case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; - case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; - case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; } - this.c[2].innerHTML = v ? this.onName : this.name; } else { switch (n) { @@ -2604,47 +2513,40 @@ s[3].background = cc.button; break; // off out - case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break; // on over - case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break; // off over - case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break; // on out } - s[3].marginLeft = v ? '17px' : '2px'; this.c[1].textContent = v ? this.onName : this.name; } - change = true; } - return change; - } // ---------------------- + } + // ---------------------- update(up) { this.mode(); if (up) this.send(); } - rSize() { super.rSize(); let s = this.s; let w = this.w - 10 - this.inw; - if (this.model === 0) { s[2].left = w + 'px'; s[3].left = w + 'px'; @@ -2653,7 +2555,6 @@ s[2].width = this.sb + 'px'; } } - } class Button extends Proto { @@ -2665,8 +2566,9 @@ if (o.values) this.values = o.values; if (!o.values && !o.value) this.txt = ''; this.onName = o.onName || null; - this.on = false; // force button width + this.on = false; + // force button width this.bw = o.forceWidth || 0; if (o.bw) this.bw = o.bw; this.space = o.space || 3; @@ -2678,8 +2580,7 @@ this.tmp = []; this.stat = []; let sel, - cc = this.colors; - + cc = this.colors; for (let i = 0; i < this.lng; i++) { sel = false; if (this.values[i] === this.value && this.isSelectable) sel = true; @@ -2689,156 +2590,132 @@ this.c[i + 2].innerHTML = this.values[i]; this.stat[i] = sel ? 3 : 1; } - if (this.txt === '') this.p = 0; - if (!o.value && !o.values || this.p === 0) { if (this.c[1] !== undefined) this.c[1].textContent = ''; } - this.init(); } - onOff() { this.on = !this.on; this.label(this.on ? this.onName : this.value); } - testZone(e) { let l = this.local; if (l.x === -1 && l.y === -1) return -1; let i = this.lng; let t = this.tmp; - while (i--) { if (l.x > t[i][0] && l.x < t[i][2]) return i; } - return -1; - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - mouseup(e) { if (!this.isDown) return false; this.isDown = false; - if (this.res !== -1) { if (this.value === this.values[this.res] && this.unselectable) this.value = '';else this.value = this.values[this.res]; if (this.onName !== null) this.onOff(); this.send(); } - return this.mousemove(e); } - mousedown(e) { if (this.isDown) return false; this.isDown = true; return this.mousemove(e); } - mousemove(e) { let up = false; this.res = this.testZone(e); - if (this.res !== -1) { this.cursor('pointer'); up = this.modes(this.isDown ? 3 : 2, this.res); } else { up = this.reset(); } - return up; - } // ---------------------- + } + // ---------------------- modes(N = 1, id = -1) { let i = this.lng, - w, - n, - r = false; - + w, + n, + r = false; while (i--) { n = N; w = this.isSelectable ? this.values[i] === this.value : false; - if (i === id) { if (w && n === 2) n = 3; } else { n = 1; if (w) n = 4; - } //if( this.mode( n, i ) ) r = true - + } + //if( this.mode( n, i ) ) r = true r = this.mode(n, i); } - return r; } - mode(n, id) { //if(!this.s) return false + let change = false; let cc = this.colors, - s = this.s; + s = this.s; let i = id + 2; - if (this.stat[id] !== n) { this.stat[id] = n; - switch (n) { case 1: s[i].color = cc.text; s[i].background = cc.button; break; - case 2: s[i].color = cc.textOver; s[i].background = cc.overoff; break; - case 3: s[i].color = cc.textOver; s[i].background = cc.over; break; - case 4: s[i].color = cc.textSelect; s[i].background = cc.select; break; } - change = true; } - return change; - } // ---------------------- + } + // ---------------------- reset() { this.res = -1; this.cursor(); return this.modes(); } - label(string, n) { n = n || 2; this.c[n].textContent = string; } - switchValues(n, string) { this.c[n + 2].innerHTML = this.values[n] = string; } - icon(string, y = 0, n = 2) { //if(y) this.s[n].margin = ( y ) +'px 0px'; this.s[n].padding = y + 'px 0px'; this.c[n].innerHTML = string; return this; } - rSize() { super.rSize(); let s = this.s; @@ -2847,15 +2724,12 @@ let i = this.lng; let sx = this.colors.sx; //this.space; //let size = Math.floor( ( w-(dc*(i-1)) ) / i ); - let size = (w - sx * (i - 1)) / i; - if (this.bw) { - size = this.bw < size ? this.bw : size; //d = Math.floor((this.w-( (size * i) + (dc * (i-1)) ))*0.5) - + size = this.bw < size ? this.bw : size; + //d = Math.floor((this.w-( (size * i) + (dc * (i-1)) ))*0.5) d = (this.w - (size * i + sx * (i - 1))) * 0.5; } - while (i--) { //this.tmp[i] = [ Math.floor( d + ( size * i ) + ( dc * i )), size ]; this.tmp[i] = [d + size * i + sx * i, size]; @@ -2864,7 +2738,6 @@ s[i + 2].width = this.tmp[i][1] + 'px'; } } - } class Circular extends Proto { @@ -2883,18 +2756,18 @@ this.h = o.h || this.w + 10; this.c[0].style.width = this.w + 'px'; this.c[0].style.display = 'block'; - if (this.c[1] !== undefined) { this.c[1].style.width = '100%'; this.c[1].style.justifyContent = 'center'; this.top = 10; this.h += 10; } - this.percent = 0; this.cmode = 0; let cc = this.colors; - this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); // svg + this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); + + // svg this.c[3] = this.getCircular(); this.setSvg(this.c[3], 'stroke', cc.back, 0); @@ -2910,53 +2783,49 @@ this.init(); this.update(); } - mode(mode) { if (this.cmode === mode) return false; let cc = this.colors; let color; - switch (mode) { case 0: // base + this.s[2].color = cc.text; this.setSvg(this.c[3], 'stroke', cc.back, 0); color = this.model > 0 ? Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)) : cc.text; this.setSvg(this.c[3], 'stroke', color, 1); break; - case 1: // down + this.s[2].color = cc.textOver; this.setSvg(this.c[3], 'stroke', cc.backoff, 0); color = this.model > 0 ? Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)) : cc.textOver; this.setSvg(this.c[3], 'stroke', color, 1); break; } - this.cmode = mode; return true; } - reset() { this.isDown = false; } - testZone(e) { let l = this.local; if (l.x === -1 && l.y === -1) return ''; if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'circular'; - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - mouseup(e) { this.isDown = false; this.sendEnd(); return this.mode(0); } - mousedown(e) { this.isDown = true; this.old = this.value; @@ -2964,27 +2833,25 @@ this.mousemove(e); return this.mode(1); } - mousemove(e) { - if (!this.isDown) return; //console.log('over') + if (!this.isDown) return; + + //console.log('over') let off = this.offset; off.x = this.w * 0.5 - (e.clientX - this.zone.x); off.y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); this.r = off.angle() - this.pi90; this.r = (this.r % this.twoPi + this.twoPi) % this.twoPi; - if (this.oldr !== null) { let dif = this.r - this.oldr; this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; if (dif > 6) this.r = 0; if (dif < -6) this.r = this.twoPi; } - let steps = 1 / this.twoPi; let value = this.r * steps; let n = this.range * value + this.min - this.old; - if (n >= this.step || n <= this.step) { n = ~~(n / this.step); this.value = this.numValue(this.old + n * this.step); @@ -2993,28 +2860,24 @@ this.oldr = this.r; } } - wheel(e) { let name = this.testZone(e); - if (name === 'circular') { let v = this.value - this.step * e.delta; - if (v > this.max) { v = this.isCyclic ? this.min : this.max; } else if (v < this.min) { v = this.isCyclic ? this.max : this.min; } - this.setValue(v); this.old = v; this.update(true); return true; } - return false; - } // ---------------------- + } + // ---------------------- makePath() { let r = 40; @@ -3025,59 +2888,60 @@ let big = a > Math.PI ? 1 : 0; return "M " + (r + d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; } - update(up) { this.c[2].textContent = this.value; this.percent = (this.value - this.min) / this.range; this.setSvg(this.c[3], 'd', this.makePath(), 1); - if (this.model > 0) { let cc = this.colors; let color = Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)); this.setSvg(this.c[3], 'stroke', color, 1); } - if (up) this.send(); } - } class Color extends Proto { constructor(o = {}) { - super(o); //this.autoHeight = true; + super(o); + + //this.autoHeight = true; this.ctype = o.ctype || 'hex'; this.wfixe = 256; this.cw = this.sb > 256 ? 256 : this.sb; - if (o.cw != undefined) this.cw = o.cw; // color up or down + if (o.cw != undefined) this.cw = o.cw; + // color up or down this.side = o.side || 'down'; this.up = this.side === 'down' ? 0 : 1; this.baseH = this.h; this.offset = new V2(); this.decal = new V2(); this.pp = new V2(); - let cc = this.colors; // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) + let cc = this.colors; + + // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) + + this.c[2] = this.dom('div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h - 2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};`); + //this.s[2] = this.c[2].style; - this.c[2] = this.dom('div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h - 2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};`); //this.s[2] = this.c[2].style; //this.s[2].textShadow = 'none' /*if( this.up ){ this.s[2].top = 'auto'; this.s[2].bottom = '2px'; }*/ - //this.c[0].style.textAlign = 'center'; + //this.c[0].style.textAlign = 'center'; this.c[0].style.display = 'block'; this.c[3] = this.getColorRing(); this.c[3].style.visibility = 'hidden'; this.hsl = null; this.value = '#ffffff'; - if (o.value !== undefined) { if (o.value instanceof Array) this.value = Tools.rgbToHex(o.value);else if (!isNaN(o.value)) this.value = Tools.hexToHtml(o.value);else this.value = o.value; } - this.bcolor = null; this.isDown = false; this.fistDown = false; @@ -3090,55 +2954,51 @@ this.setColor(this.value); if (o.open !== undefined) this.open(); } - testZone(mx, my) { let l = this.local; if (l.x === -1 && l.y === -1) return ''; - if (this.up && this.isOpen) { if (l.y > this.wfixe) return 'title';else return 'color'; } else { if (l.y < this.baseH + 2) return 'title';else if (this.isOpen) return 'color'; } - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - mouseup(e) { this.isDown = false; this.d = 256; } - mousedown(e) { - let name = this.testZone(e.clientX, e.clientY); //if( !name ) return; + let name = this.testZone(e.clientX, e.clientY); + //if( !name ) return; if (name === 'title') { if (!this.isOpen) this.open();else this.close(); return true; } - if (name === 'color') { this.isDown = true; this.fistDown = true; this.mousemove(e); } } - mousemove(e) { let name = this.testZone(e.clientX, e.clientY); let off, - d, - hue, - sat, - lum, - rad, - x, - y, - rr, - T = Tools; + d, + hue, + sat, + lum, + rad, + x, + y, + rr, + T = Tools; if (name === 'title') this.cursor('pointer'); - if (name === 'color') { off = this.offset; off.x = e.clientX - (this.zone.x + this.decal.x + this.mid); @@ -3147,21 +3007,21 @@ rr = off.angle(); if (rr < 0) rr += 2 * T.PI; if (d < 128) this.cursor('crosshair');else if (!this.isDown) this.cursor(); - if (this.isDown) { if (this.fistDown) { this.d = d; this.fistDown = false; } - if (this.d < 128) { if (this.d > this.tr) { // outside hue + hue = (rr + T.pi90) / T.TwoPI; this.hue = (hue + 1) % 1; this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); } else { // triangle + x = off.x * this.ratio; y = off.y * this.ratio; let rr = this.hue * T.TwoPI + T.PI; @@ -3169,12 +3029,11 @@ rad = Math.atan2(-y, x); if (rad < 0) rad += 2 * T.PI; let rad0 = (rad + T.pi90 + T.TwoPI + rr) % T.TwoPI, - rad1 = rad0 % (2 / 3 * T.PI) - T.pi60, - a = 0.5 * this.tr, - b = Math.tan(rad1) * a, - r = Math.sqrt(x * x + y * y), - maxR = Math.sqrt(a * a + b * b); - + rad1 = rad0 % (2 / 3 * T.PI) - T.pi60, + a = 0.5 * this.tr, + b = Math.tan(rad1) * a, + r = Math.sqrt(x * x + y * y), + maxR = Math.sqrt(a * a + b * b); if (r > maxR) { let dx = Math.tan(rad1) * r; let rad2 = Math.atan(dx / maxR); @@ -3184,7 +3043,6 @@ b = Math.tan(rad1) * a; r = maxR = Math.sqrt(a * a + b * b); } - lum = Math.sin(rad0) * r / this.tsl + 0.5; let w = 1 - Math.abs(lum - 0.5) * 2; sat = (Math.cos(rad0) * r + this.tr / 2) / (1.5 * this.tr) / w; @@ -3194,39 +3052,36 @@ } } } - } // ---------------------- + } + // ---------------------- setHeight() { this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; this.s[0].height = this.h + 'px'; this.zone.h = this.h; } - parentHeight(t) { if (this.group !== null) this.group.calc(t);else if (this.isUI) this.main.calc(t); } - open() { super.open(); this.setHeight(); if (this.up) this.zone.y -= this.wfixe + 5; let t = this.h - this.baseH; - this.s[3].visibility = 'visible'; //this.s[3].display = 'block'; - + this.s[3].visibility = 'visible'; + //this.s[3].display = 'block'; this.parentHeight(t); } - close() { super.close(); if (this.up) this.zone.y += this.wfixe + 5; let t = this.h - this.baseH; this.setHeight(); - this.s[3].visibility = 'hidden'; //this.s[3].display = 'none'; - + this.s[3].visibility = 'hidden'; + //this.s[3].display = 'none'; this.parentHeight(-t); } - update(up) { let cc = Tools.rgbToHex(Tools.hslToRgb([this.hsl[0], 1, 0.5])); this.moveMarkers(); @@ -3242,16 +3097,13 @@ if (this.ctype === 'hex') this.send(Tools.htmlToHex(this.value)); if (this.ctype === 'html') this.send(); } - setValue(v) { if (v instanceof Array) this.value = Tools.rgbToHex(v);else if (!isNaN(v)) this.value = Tools.hexToHtml(v);else this.value = v; this.setColor(this.value); this.update(); } - setColor(color) { let unpack = Tools.unpack(color); - if (this.bcolor !== color && unpack) { this.bcolor = color; this.rgb = unpack; @@ -3259,10 +3111,8 @@ this.hue = this.hsl[0]; this.update(); } - return this; } - setHSL(hsl) { this.hsl = hsl; this.rgb = Tools.hslToRgb(hsl); @@ -3270,7 +3120,6 @@ this.update(true); return this; } - moveMarkers() { let p = this.pp; let T = Tools; @@ -3290,11 +3139,13 @@ let vx = Math.cos(h + third) * r; let vy = -Math.sin(h + third) * r; let mx = (sx + vx) / 2, - my = (sy + vy) / 2; + my = (sy + vy) / 2; a = (1 - 2 * Math.abs(l - .5)) * s; let x = sx + (vx - sx) * l + (hx - mx) * a; let y = sy + (vy - sy) * l + (hy - my) * a; - p.set(x, y).addScalar(128); //let ff = (1-l)*255; + p.set(x, y).addScalar(128); + + //let ff = (1-l)*255; // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); this.setSvg(this.c[3], 'transform', 'rotate(' + angle + ' )', 2); @@ -3304,42 +3155,45 @@ this.setSvg(this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3); this.setSvg(this.c[3], 'fill', this.bcolor, 3); } - rSize() { //Proto.prototype.rSize.call( this ); super.rSize(); let s = this.s; s[2].width = this.sb + 'px'; - s[2].left = this.sa + 'px'; //console.log(this.sb) + s[2].left = this.sa + 'px'; + + //console.log(this.sb) this.cw = this.sb > 256 ? 256 : this.sb; this.rSizeColor(this.cw); - this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); //s[3].left = this.decal.x + 'px'; + this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + //s[3].left = this.decal.x + 'px'; } - rSizeColor(w) { if (w === this.wfixe) return; this.wfixe = w; - let s = this.s; //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + let s = this.s; + //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; this.mid = Math.floor(this.wfixe * 0.5); this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.wfixe + ' ' + this.wfixe); s[3].width = this.wfixe + 'px'; - s[3].height = this.wfixe + 'px'; //s[3].left = this.decal.x + 'px'; - + s[3].height = this.wfixe + 'px'; + //s[3].left = this.decal.x + 'px'; s[3].top = this.decal.y + 'px'; this.ratio = 256 / this.wfixe; this.square = 1 / (60 * (this.wfixe / 256)); this.setHeight(); } - } class Fps extends Proto { constructor(o = {}) { super(o); - this.round = Math.round; //this.autoHeight = true; + this.round = Math.round; + + //this.autoHeight = true; this.baseH = this.h; this.hplus = o.hplus || 50; @@ -3348,7 +3202,9 @@ this.precision = o.precision || 0; this.custom = o.custom || false; this.names = o.names || ['FPS', 'MS']; - let cc = o.cc || ['220,220,220', '255,255,0']; // this.divid = [ 100, 100, 100 ]; + let cc = o.cc || ['220,220,220', '255,255,0']; + + // this.divid = [ 100, 100, 100 ]; // this.multy = [ 30, 30, 30 ]; this.adding = o.adding || false; @@ -3357,33 +3213,30 @@ this.values = []; this.points = []; this.textDisplay = []; - if (!this.custom) { this.now = Roots.getTime(); this.startTime = 0; //this.now() - this.prevTime = 0; //this.startTime; - this.frames = 0; this.ms = 0; this.fps = 0; this.mem = 0; this.mm = 0; - this.isMem = self.performance && self.performance.memory ? true : false; // this.divid = [ 100, 200, 1 ]; + this.isMem = self.performance && self.performance.memory ? true : false; + + // this.divid = [ 100, 200, 1 ]; // this.multy = [ 30, 30, 30 ]; if (this.isMem) { this.names.push('MEM'); cc.push('0,255,255'); } - this.txt = o.name || 'Fps'; } - let fltop = Math.floor(this.h * 0.5) - 3; const ccc = this.colors; - this.c[1].textContent = this.txt; //this.c[1].innerHTML = ' ' + this.txt - + this.c[1].textContent = this.txt; + //this.c[1].innerHTML = ' ' + this.txt this.c[0].style.cursor = 'pointer'; this.c[0].style.pointerEvents = 'auto'; let panelCss = 'display:none; left:10px; top:' + this.h + 'px; height:' + (this.hplus - 8) + 'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid ' + ccc.border + ';'; @@ -3392,46 +3245,47 @@ this.c[2].setAttribute('viewBox', '0 0 ' + this.res + ' 50'); this.c[2].setAttribute('height', '100%'); this.c[2].setAttribute('width', '100%'); - this.c[2].setAttribute('preserveAspectRatio', 'none'); //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + this.c[2].setAttribute('preserveAspectRatio', 'none'); + + //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - // arrow + // arrow this.c[3] = this.dom('path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:' + fltop + 'px;', { d: this.svgs.g1, fill: ccc.text, stroke: 'none' - }); //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); - // result test + }); + //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); - this.c[4] = this.dom('div', this.css.txt + 'position:absolute; left:10px; top:' + (this.h + 2) + 'px; display:none; width:100%; text-align:center;'); // bottom line + // result test + this.c[4] = this.dom('div', this.css.txt + 'position:absolute; left:10px; top:' + (this.h + 2) + 'px; display:none; width:100%; text-align:center;'); + // bottom line if (o.bottomLine) this.c[4] = this.dom('div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); this.isShow = false; - let s = this.s; //s[1].marginLeft = '10px'; + let s = this.s; + //s[1].marginLeft = '10px'; s[1].lineHeight = this.h - 4; - s[1].color = ccc.text; //s[1].paddingLeft = '18px'; + s[1].color = ccc.text; + //s[1].paddingLeft = '18px'; //s[1].fontWeight = 'bold'; if (this.radius !== 0) s[0].borderRadius = this.radius + 'px'; if (this.colors.gborder !== 'none') s[0].border = '1px solid ' + ccc.gborder; let j = 0; - for (j = 0; j < this.names.length; j++) { let base = []; let i = this.res + 1; - while (i--) base.push(50); - this.range[j] = 1 / this.range[j] * 49; this.points.push(base); - this.values.push(0); // this.dom( 'path', null, { fill:'rgba('+cc[j]+',0.5)', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - + this.values.push(0); + // this.dom( 'path', null, { fill:'rgba('+cc[j]+',0.5)', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); this.textDisplay.push(" " + this.names[j] + " "); } - j = this.names.length; - while (j--) { this.dom('path', null, { fill: 'rgba(' + cc[j] + ',' + this.alpha + ')', @@ -3440,16 +3294,20 @@ 'vector-effect': 'non-scaling-stroke' }, this.c[2]); } + this.init(); - this.init(); //if( this.isShow ) this.show(); - } // ---------------------- + //if( this.isShow ) this.show(); + } + + // ---------------------- // EVENTS // ---------------------- - mousedown(e) { if (this.isShow) this.close();else this.open(); - } // ---------------------- + } + + // ---------------------- /*mode: function ( mode ) { let s = this.s; @@ -3469,42 +3327,33 @@ } },*/ - tick(v) { this.values = v; if (!this.isShow) return; this.drawGraph(); this.upText(); } - makePath(point) { let p = ''; p += 'M ' + -1 + ' ' + 50; - for (let i = 0; i < this.res + 1; i++) { p += ' L ' + i + ' ' + point[i]; } - p += ' L ' + (this.res + 1) + ' ' + 50; return p; } - upText(val) { let v = val || this.values, - t = ''; - + t = ''; for (let j = 0, lng = this.names.length; j < lng; j++) t += this.textDisplay[j] + v[j].toFixed(this.precision) + ''; - this.c[4].innerHTML = t; } - drawGraph() { let svg = this.c[2]; let i = this.names.length, - v, - old = 0, - n = 0; - + v, + old = 0, + n = 0; while (i--) { if (this.adding) v = (this.values[n] + old) * this.range[n];else v = this.values[n] * this.range[n]; this.points[n].shift(); @@ -3514,55 +3363,47 @@ n++; } } - open() { super.open(); this.h = this.hplus + this.baseH; this.setSvg(this.c[3], 'd', this.svgs.g2); - if (this.group !== null) { this.group.calc(this.hplus); } else if (this.isUI) this.main.calc(this.hplus); - this.s[0].height = this.h + 'px'; this.s[2].display = 'block'; this.s[4].display = 'block'; this.isShow = true; if (!this.custom) Roots.addListen(this); } - close() { super.close(); this.h = this.baseH; this.setSvg(this.c[3], 'd', this.svgs.g1); - if (this.group !== null) { this.group.calc(-this.hplus); } else if (this.isUI) this.main.calc(-this.hplus); - this.s[0].height = this.h + 'px'; this.s[2].display = 'none'; this.s[4].display = 'none'; this.isShow = false; if (!this.custom) Roots.removeListen(this); this.c[4].innerHTML = ''; - } ///// AUTO FPS ////// + } + ///// AUTO FPS ////// begin() { this.startTime = this.now(); } - end() { let time = this.now(); this.ms = time - this.startTime; this.frames++; - if (time > this.prevTime + 1000) { this.fps = this.round(this.frames * 1000 / (time - this.prevTime)); this.prevTime = time; this.frames = 0; - if (this.isMem) { let heapSize = performance.memory.usedJSHeapSize; let heapSizeLimit = performance.memory.jsHeapSizeLimit; @@ -3570,17 +3411,14 @@ this.mm = heapSize / heapSizeLimit; } } - this.values = [this.fps, this.ms, this.mm]; this.drawGraph(); this.upText([this.fps, this.ms, this.mem]); return time; } - listening() { if (!this.custom) this.startTime = this.end(); } - rSize() { let s = this.s; let w = this.w; @@ -3591,7 +3429,6 @@ s[2].width = w - 20 + 'px'; s[4].width = w - 20 + 'px'; } - } class Graph extends Proto { @@ -3602,7 +3439,9 @@ this.precision = o.precision !== undefined ? o.precision : 2; this.multiplicator = o.multiplicator || 1; this.neg = o.neg || false; - this.line = o.line !== undefined ? o.line : true; //if(this.neg)this.multiplicator*=2; + this.line = o.line !== undefined ? o.line : true; + + //if(this.neg)this.multiplicator*=2; this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; this.isNumber = false; @@ -3611,28 +3450,29 @@ this.rh = this.h - 10; this.top = 0; this.c[0].style.width = this.w + 'px'; - if (this.c[1] !== undefined) { // with title - this.c[1].style.width = this.w + 'px'; + this.c[1].style.width = this.w + 'px'; if (!this.autoWidth) { this.c[1].style.width = '100%'; this.c[1].style.justifyContent = 'center'; - } //this.c[1].style.background = '#ff0000'; - //this.c[1].style.textAlign = 'center'; - + } + //this.c[1].style.background = '#ff0000'; + //this.c[1].style.textAlign = 'center'; this.top = 10; this.h += 10; } - this.gh = this.rh - 28; - this.gw = this.w - 28; //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); - //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' + this.gw = this.w - 28; + + //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); - this.c[2] = this.dom('div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:' + (this.h - 20) + 'px; left:14px; width:' + this.gw + 'px; color:' + this.colors.text); //this.c[2].textContent = this.value; + //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' + this.c[2] = this.dom('div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:' + (this.h - 20) + 'px; left:14px; width:' + this.gw + 'px; color:' + this.colors.text); + //this.c[2].textContent = this.value; this.c[2].innerHTML = this.valueToHtml(); let svg = this.dom('svg', this.css.basic, { viewBox: '0 0 ' + this.w + ' ' + this.rh, @@ -3666,7 +3506,6 @@ let t = []; this.cMode = []; this.v = []; - for (let i = 0; i < this.lng; i++) { t[i] = [14 + i * this.iw + i * 4, this.iw]; t[i][2] = t[i][0] + t[i][1]; @@ -3681,107 +3520,91 @@ 'fill-opacity': 0.3 }, svg); } - this.tmp = t; - this.c[3] = svg; //console.log(this.w) + this.c[3] = svg; - this.init(); + //console.log(this.w) + this.init(); if (this.c[1] !== undefined) { this.c[1].style.top = 0 + 'px'; this.c[1].style.height = 20 + 'px'; this.s[1].lineHeight = 20 - 5 + 'px'; } - this.update(false); } - setValue(value) { this.value = value; this.lng = this.value.length; - for (var i = 0; i < this.lng; i++) { if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5;else this.v[i] = value[i] / this.multiplicator; } - this.update(); } - valueToHtml() { let i = this.lng, - n = 0, - r = ''; + n = 0, + r = '
'; let w = 100 / this.lng; let style = 'width:' + w + '%;'; //' text-align:center;' - while (i--) { if (n === this.lng - 1) r += '
' + this.value[n] + '
';else r += '' + this.value[n] + ''; n++; } - return r; } - updateSVG() { if (this.line) this.setSvg(this.c[3], 'd', this.makePath(), 0); - for (let i = 0; i < this.lng; i++) { this.setSvg(this.c[3], 'height', this.v[i] * this.gh, i + 2); this.setSvg(this.c[3], 'y', 14 + (this.gh - this.v[i] * this.gh), i + 2); if (this.neg) this.value[i] = ((this.v[i] * 2 - 1) * this.multiplicator).toFixed(this.precision) * 1;else this.value[i] = (this.v[i] * this.multiplicator).toFixed(this.precision) * 1; - } //this.c[2].textContent = this.value; - + } + //this.c[2].textContent = this.value; this.c[2].innerHTML = this.valueToHtml(); } - testZone(e) { let l = this.local; if (l.x === -1 && l.y === -1) return ''; let i = this.lng; let t = this.tmp; - if (l.y > this.top && l.y < this.h - 20) { while (i--) { if (l.x > t[i][0] && l.x < t[i][2]) return i; } } - return ''; } - mode(n, name) { if (n === this.cMode[name]) return false; let a; - switch (n) { case 0: a = 0.3; break; - case 1: a = 0.6; break; - case 2: a = 1; break; } - this.reset(); this.setSvg(this.c[3], 'fill-opacity', a, name + 2); this.cMode[name] = n; return true; - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - reset() { - let nup = false; //this.isDown = false; + let nup = false; + //this.isDown = false; let i = this.lng; - while (i--) { if (this.cMode[i] !== 0) { this.cMode[i] = 0; @@ -3789,52 +3612,48 @@ nup = true; } } - return nup; } - mouseup(e) { this.isDown = false; if (this.current !== -1) return this.reset(); } - mousedown(e) { this.isDown = true; return this.mousemove(e); } - mousemove(e) { let nup = false; let name = this.testZone(e); - if (name === '') { - nup = this.reset(); //this.cursor(); + nup = this.reset(); + //this.cursor(); } else { - nup = this.mode(this.isDown ? 2 : 1, name); //this.cursor( this.current !== -1 ? 'move' : 'pointer' ); - + nup = this.mode(this.isDown ? 2 : 1, name); + //this.cursor( this.current !== -1 ? 'move' : 'pointer' ); if (this.isDown) { this.v[name] = this.clamp(1 - (e.clientY - this.zone.y - this.ytop - 10) / this.gh, 0, 1); this.update(true); } } - return nup; - } // ---------------------- + } + // ---------------------- update(up) { this.updateSVG(); if (up) this.send(); } - makePath() { let p = "", - h, - w, - wn, - wm, - ow, - oh; //let g = this.iw*0.5 + h, + w, + wn, + wm, + ow, + oh; + //let g = this.iw*0.5 for (let i = 0; i < this.lng; i++) { h = 14 + (this.gh - this.v[i] * this.gh); @@ -3846,10 +3665,8 @@ ow = wn; oh = h; } - return p; } - rSize() { super.rSize(); let s = this.s; @@ -3859,15 +3676,12 @@ let iw = (gw - 4 * (this.lng - 1)) / this.lng; let t = []; s[2].width = gw + 'px'; - for (let i = 0; i < this.lng; i++) { t[i] = [14 + i * iw + i * 4, iw]; t[i][2] = t[i][0] + t[i][1]; } - this.tmp = t; } - } class Empty extends Proto { @@ -3878,7 +3692,6 @@ super(o); this.init(); } - } class Group extends Proto { @@ -3891,7 +3704,8 @@ this.current = -1; this.proto = null; this.isEmpty = true; - this.decal = o.group ? 8 : 0; //this.dd = o.group ? o.group.decal + 8 : 0 + this.decal = o.group ? 8 : 0; + //this.dd = o.group ? o.group.decal + 8 : 0 this.baseH = this.h; this.spaceY = new Empty({ @@ -3915,7 +3729,6 @@ this.setBG(o.bg); if (o.open) this.open(); } - setBG(bg) { const cc = this.colors; const s = this.s; @@ -3925,111 +3738,99 @@ s[0].background = 'none'; s[1].background = cc.groups; s[2].background = cc.groups; - if (cc.gborder !== 'none') { s[1].border = cc.borderSize + 'px solid ' + cc.gborder; } - if (this.radius !== 0) { s[1].borderRadius = this.radius + 'px'; s[2].borderRadius = this.radius + 'px'; } + /*let i = this.uis.length; while(i--){ this.uis[i].setBG( 'none' ); //this.uis[i].setBG( this.colors.background ); }*/ - } - testZone(e) { let l = this.local; if (l.x === -1 && l.y === -1) return ''; let name = ''; if (l.y < this.baseH + this.margin) name = 'title';else { if (this.isOpen) name = 'content'; - } //console.log(name) + } + + //console.log(name) return name; } - clearTarget() { if (this.current === -1) return false; - if (this.proto.s) { // if no s target is delete !! this.proto.uiout(); this.proto.reset(); } - this.proto = null; this.current = -1; this.cursor(); return true; } - reset() { this.clearTarget(); - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - handleEvent(e) { let type = e.type; let change = false; let protoChange = false; let name = this.testZone(e); if (!name) return; - switch (name) { case 'content': //this.cursor() + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - if (Roots.isMobile && type === 'mousedown') this.getNext(e, change); + if (Roots.isMobile && type === 'mousedown') this.getNext(e, change); if (this.proto) { //e.clientY -= this.margin protoChange = this.proto.handleEvent(e); } - if (!Roots.lock) this.getNext(e, change); break; - case 'title': //this.cursor( this.isOpen ? 'n-resize':'s-resize' ); this.cursor('pointer'); - if (type === 'mousedown') { if (this.isOpen) this.close();else this.open(); } - break; } - if (this.isDown) change = true; if (protoChange) change = true; return change; } - getNext(e, change) { let next = Roots.findTarget(this.uis, e); - if (next !== this.current) { this.clearTarget(); this.current = next; } - if (next !== -1) { this.proto = this.uis[this.current]; this.proto.uiover(); } - } // ---------------------- + } + // ---------------------- add() { let a = arguments; - if (typeof a[1] === 'object') { a[1].isUI = this.isUI; a[1].target = this.c[2]; @@ -4047,83 +3848,85 @@ a[2].group = this; } } - let u = this.ADD.apply(this, a); - if (u.isGroup) { //o.add = add; u.dx = 8; - } //u.dx += 4 + } + + //u.dx += 4 //console.log(this.decal) //u.zone.d -= 8 + Roots.forceZone = true; + //u.margin += this.margin - - Roots.forceZone = true; //u.margin += this.margin //console.log( u.margin ) //Roots.needReZone = true + //Roots.resize() //console.log(Roots.needResize) this.uis.push(u); this.isEmpty = false; return u; - } // remove one node + } + // remove one node remove(n) { if (n.dispose) n.dispose(); - } // clear all iner + } + // clear all iner dispose() { this.clear(); if (this.isUI) this.main.calc(); super.dispose(); } - clear() { this.empty(); } - empty() { this.close(); let i = this.uis.length, - item; - + item; while (i--) { item = this.uis.pop(); this.c[2].removeChild(item.c[0]); - item.clear(true); //this.uis[i].clear() - } + item.clear(true); + //this.uis[i].clear() + } this.isEmpty = true; this.h = this.baseH; - } // clear one element + } + // clear one element clearOne(n) { let id = this.uis.indexOf(n); - if (id !== -1) { this.calc(-(this.uis[id].h + this.margin)); this.c[2].removeChild(this.uis[id].c[0]); this.uis.splice(id, 1); - if (this.uis.length === 0) { this.isEmpty = true; this.close(); } } } - open() { super.open(); this.setSvg(this.c[3], 'd', this.svgs.g2); - this.rSizeContent(); //let t = this.h - this.baseH + this.rSizeContent(); + + //let t = this.h - this.baseH const s = this.s; - const cc = this.colors; //s[2].top = (this.h-1) + 'px' + const cc = this.colors; + //s[2].top = (this.h-1) + 'px' s[2].top = this.h + this.mtop + 'px'; s[4].background = cc.groups; //'#0f0' @@ -4135,7 +3938,6 @@ s[2].borderBottomLeftRadius = this.radius + 'px'; s[2].borderBottomRightRadius = this.radius + 'px'; } - if (cc.gborder !== 'none') { s[4].borderLeft = cc.borderSize + 'px solid ' + cc.gborder; s[4].borderRight = cc.borderSize + 'px solid ' + cc.gborder; @@ -4143,61 +3945,56 @@ s[2].borderTop = 'none'; s[1].borderBottom = cc.borderSize + 'px solid rgba(0,0,0,0)'; } + this.parentHeight(); - this.parentHeight(); //Roots.isLeave = true + //Roots.isLeave = true //Roots.needResize = true } - close() { - super.close(); //let t = this.h - this.baseH + super.close(); + + //let t = this.h - this.baseH this.setSvg(this.c[3], 'd', this.svgs.g1); this.h = this.baseH; const s = this.s; const cc = this.colors; - s[0].height = this.h + 'px'; //s[1].height = (this.h-2) + 'px' + s[0].height = this.h + 'px'; + //s[1].height = (this.h-2) + 'px' //s[2].top = this.h + 'px' - s[2].top = this.h + this.mtop + 'px'; s[4].background = 'none'; - if (cc.gborder !== 'none') { s[4].border = 'none'; s[2].border = 'none'; s[1].border = cc.borderSize + 'px solid ' + cc.gborder; } - if (this.radius) s[1].borderRadius = this.radius + 'px'; this.parentHeight(); } - calcUis() { - if (!this.isOpen || this.isEmpty) this.h = this.baseH; //else this.h = Roots.calcUis( this.uis, this.zone, this.zone.y + this.baseH ) + this.baseH; + if (!this.isOpen || this.isEmpty) this.h = this.baseH; + //else this.h = Roots.calcUis( this.uis, this.zone, this.zone.y + this.baseH ) + this.baseH; else this.h = Roots.calcUis([...this.uis, this.spaceY], this.zone, this.zone.y + this.baseH + this.margin, true) + this.baseH; this.s[0].height = this.h + 'px'; this.s[2].height = this.h - this.baseH + 'px'; } - parentHeight(t) { if (this.group !== null) this.group.calc(t);else if (this.isUI) this.main.calc(t); } - calc(y) { if (!this.isOpen) return; if (this.isUI) this.main.calc();else this.calcUis(); this.s[0].height = this.h + 'px'; this.s[2].height = this.h + 'px'; } - rSizeContent() { let i = this.uis.length; - while (i--) { this.uis[i].setSize(this.w); this.uis[i].rSize(); } } - rSize() { super.rSize(); let s = this.s; @@ -4208,8 +4005,9 @@ s[1].left = this.decal + 'px'; s[2].left = this.decal + 'px'; if (this.isOpen) this.rSizeContent(); - } // + } + // /* uiout() { @@ -4228,8 +4026,6 @@ } */ - - } class Joystick extends Proto { @@ -4247,21 +4043,21 @@ this.tmp = new V2(); this.interval = null; this.c[0].style.display = 'block'; - this.haveText = o.text !== undefined ? o.text : true; //this.radius = this.w * 0.5; - //this.distance = this.radius*0.25; + this.haveText = o.text !== undefined ? o.text : true; + //this.radius = this.w * 0.5; + //this.distance = this.radius*0.25; this.distance = this.diam * 0.5 * 0.25; this.h = o.h || this.w + (this.haveText ? 10 : 0); this.c[0].style.width = this.w + 'px'; - if (this.c[1] !== undefined) { // with title + this.c[1].style.width = '100%'; this.c[1].style.justifyContent = 'center'; this.top = 10; this.h += 10; } - let cc = this.colors; this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); this.c[2].textContent = this.haveText ? this.value : ''; @@ -4278,10 +4074,8 @@ this.init(); this.update(false); } - mode(mode) { let cc = this.colors; - switch (mode) { case 0: // base @@ -4289,33 +4083,31 @@ this.setSvg(this.c[3], 'fill', 'url(#gradIn)', 4); this.setSvg(this.c[3], 'stroke', '#000', 4); } else { - this.setSvg(this.c[3], 'stroke', cc.joyOut, 2); //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.1)', 3 ); - + this.setSvg(this.c[3], 'stroke', cc.joyOut, 2); + //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.1)', 3 ); this.setSvg(this.c[3], 'stroke', cc.joyOut, 4); this.setSvg(this.c[3], 'fill', 'none', 4); } - break; - case 1: // over if (this.model === 0) { this.setSvg(this.c[3], 'fill', 'url(#gradIn2)', 4); this.setSvg(this.c[3], 'stroke', 'rgba(0,0,0,0)', 4); } else { - this.setSvg(this.c[3], 'stroke', cc.joyOver, 2); //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.3)', 3 ); - + this.setSvg(this.c[3], 'stroke', cc.joyOver, 2); + //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.3)', 3 ); this.setSvg(this.c[3], 'stroke', cc.joySelect, 4); this.setSvg(this.c[3], 'fill', cc.joyOver, 4); } - break; } - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - addInterval() { if (this.interval !== null) this.stopInterval(); if (this.pos.isZero()) return; @@ -4323,57 +4115,49 @@ this.update(); }.bind(this), 10); } - stopInterval() { if (this.interval === null) return; clearInterval(this.interval); this.interval = null; } - reset() { this.addInterval(); this.mode(0); } - mouseup(e) { this.addInterval(); this.isDown = false; } - mousedown(e) { this.isDown = true; this.mousemove(e); this.mode(2); } - mousemove(e) { this.mode(1); - if (!this.isDown) return; //this.tmp.x = this.radius - ( e.clientX - this.zone.x ); + if (!this.isDown) return; + + //this.tmp.x = this.radius - ( e.clientX - this.zone.x ); //this.tmp.y = this.radius - ( e.clientY - this.zone.y - this.top ); this.tmp.x = this.w * 0.5 - (e.clientX - this.zone.x); this.tmp.y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); let distance = this.tmp.length(); - if (distance > this.distance) { let angle = Math.atan2(this.tmp.x, this.tmp.y); this.tmp.x = Math.sin(angle) * this.distance; this.tmp.y = Math.cos(angle) * this.distance; } - this.pos.copy(this.tmp).divideScalar(this.distance).negate(); this.update(); } - setValue(v) { if (v === undefined) v = [0, 0]; this.pos.set(v[0] || 0, v[1] || 0); this.updateSVG(); } - update(up) { if (up === undefined) up = true; - if (this.interval !== null) { if (!this.isDown) { this.pos.lerp(null, 0.3); @@ -4382,18 +4166,16 @@ if (this.isUI && this.main.isCanvas) this.main.draw(); } } - this.updateSVG(); if (up) this.send(); if (this.pos.isZero()) this.stopInterval(); } - updateSVG() { //let x = this.radius - ( -this.pos.x * this.distance ); //let y = this.radius - ( -this.pos.y * this.distance ); + let x = this.diam * 0.5 - -this.pos.x * this.distance; let y = this.diam * 0.5 - -this.pos.y * this.distance; - if (this.model === 0) { let sx = x + this.pos.x * 5 + 5; let sy = y + this.pos.y * 5 + 10; @@ -4403,19 +4185,16 @@ this.setSvg(this.c[3], 'cx', x * this.ratio, 3); this.setSvg(this.c[3], 'cy', y * this.ratio, 3); } - this.setSvg(this.c[3], 'cx', x * this.ratio, 4); this.setSvg(this.c[3], 'cy', y * this.ratio, 4); this.value[0] = (this.pos.x * this.multiplicator).toFixed(this.precision) * 1; this.value[1] = (this.pos.y * this.multiplicator).toFixed(this.precision) * 1; if (this.haveText) this.c[2].textContent = this.value; } - clear() { this.stopInterval(); super.clear(); } - } class Knob extends Proto { @@ -4435,14 +4214,12 @@ this.h = o.h || this.w + 10; this.c[0].style.width = this.w + 'px'; this.c[0].style.display = 'block'; - if (this.c[1] !== undefined) { this.c[1].style.width = '100%'; this.c[1].style.justifyContent = 'center'; this.top = 10; this.h += 10; } - this.percent = 0; this.cmode = 0; let cc = this.colors; @@ -4459,7 +4236,6 @@ left: 0, top: this.top }); - if (this.model > 0) { Tools.dom('path', '', { d: '', @@ -4474,53 +4250,47 @@ this.setSvg(this.c[3], 'style', 'filter: url("#UILGlow");', 4); } } - this.r = 0; this.init(); this.update(); } - mode(mode) { let cc = this.colors; if (this.cmode === mode) return false; - switch (mode) { case 0: // base this.s[2].color = cc.text; - this.setSvg(this.c[3], 'fill', cc.button, 0); //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); - + this.setSvg(this.c[3], 'fill', cc.button, 0); + //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); this.setSvg(this.c[3], 'stroke', cc.text, 1); break; - case 1: // down this.s[2].color = cc.textOver; - this.setSvg(this.c[3], 'fill', cc.select, 0); //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); - + this.setSvg(this.c[3], 'fill', cc.select, 0); + //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); this.setSvg(this.c[3], 'stroke', cc.textOver, 1); break; } - this.cmode = mode; return true; } - testZone(e) { let l = this.local; if (l.x === -1 && l.y === -1) return ''; if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'knob'; - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - mouseup(e) { this.isDown = false; this.sendEnd(); return this.mode(0); } - mousedown(e) { this.isDown = true; this.old = this.value; @@ -4528,10 +4298,11 @@ this.mousemove(e); return this.mode(1); } - mousemove(e) { if (!this.isDown) return; - let off = this.offset; //off.x = this.radius - ( e.clientX - this.zone.x ); + let off = this.offset; + + //off.x = this.radius - ( e.clientX - this.zone.x ); //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); off.x = this.w * 0.5 - (e.clientX - this.zone.x); @@ -4543,7 +4314,6 @@ let steps = 1 / this.cirRange; let value = (this.r + this.mPI) * steps; let n = this.range * value + this.min - this.old; - if (n >= this.step || n <= this.step) { n = Math.floor(n / this.step); this.value = this.numValue(this.old + n * this.step); @@ -4552,40 +4322,35 @@ this.oldr = this.r; } } - wheel(e) { let name = this.testZone(e); - if (name === 'knob') { let v = this.value - this.step * e.delta; - if (v > this.max) { v = this.isCyclic ? this.min : this.max; } else if (v < this.min) { v = this.isCyclic ? this.max : this.min; } - this.setValue(v); this.old = v; this.update(true); return true; } - return false; } - makeGrad() { let d = '', - step, - range, - a, - x, - y, - x2, - y2, - r = 64; + step, + range, + a, + x, + y, + x2, + y2, + r = 64; let startangle = Math.PI + this.mPI; - let endangle = Math.PI - this.mPI; //let step = this.step>5 ? this.step : 1; + let endangle = Math.PI - this.mPI; + //let step = this.step>5 ? this.step : 1; if (this.step > 5) { range = this.range / this.step; @@ -4594,7 +4359,6 @@ step = (startangle - endangle) / r * 2; range = r * 0.5; } - for (let i = 0; i <= range; ++i) { a = startangle - step * i; x = r + Math.sin(a) * (r - 20); @@ -4603,10 +4367,8 @@ y2 = r + Math.cos(a) * (r - 24); d += 'M' + x + ' ' + y + ' L' + x2 + ' ' + y2 + ' '; } - return d; } - update(up) { this.c[2].textContent = this.value; this.percent = (this.value - this.min) / this.range; @@ -4619,7 +4381,6 @@ let x2 = 20 * sin + 64; let y2 = -(20 * cos) + 64; this.setSvg(this.c[3], 'd', 'M ' + x1 + ' ' + y1 + ' L ' + x2 + ' ' + y2, 1); - if (this.model > 0) { let x1 = 36 * Math.sin(sa) + 64; let y1 = 36 * Math.cos(sa) + 64; @@ -4630,18 +4391,18 @@ let color = Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(this.colors.text, -0.75)), Tools.unpack(this.colors.text), this.percent)); this.setSvg(this.c[3], 'stroke', color, 4); } - if (up) this.send(); } - } class List extends Proto { constructor(o = {}) { - super(o); // TODO not work + super(o); - this.hideCurrent = false; // images + // TODO not work + this.hideCurrent = false; + // images this.path = o.path || ''; this.format = o.format || ''; this.isWithImage = this.path !== '' ? true : false; @@ -4649,8 +4410,9 @@ this.tmpImage = {}; this.tmpUrl = []; this.m = o.m !== undefined ? o.m : 5; - let align = o.align || 'left'; // scroll size + let align = o.align || 'left'; + // scroll size let ss = o.scrollSize || 10; this.ss = ss + 1; this.sMode = 0; @@ -4675,34 +4437,31 @@ this.c[3].style.color = cc.text; this.list = []; this.refObject = null; - if (o.list) { if (o.list instanceof Array) { this.list = o.list; } else if (o.list instanceof Object) { this.refObject = o.list; - for (let g in this.refObject) this.list.push(g); } } - this.items = []; this.prevName = ''; this.tmpId = 0; this.baseH = this.h; this.itemHeight = o.itemHeight || this.h; //(this.h-3); - // force full list + // force full list this.full = o.full || false; this.py = 0; this.ww = this.sb; this.scroll = false; this.isDown = false; - this.current = null; // list up or down + this.current = null; + // list up or down this.side = o.side || 'down'; this.up = this.side === 'down' ? 0 : 1; - if (this.up) { this.c[2].style.top = 'auto'; this.c[3].style.top = 'auto'; @@ -4713,22 +4472,18 @@ } else { this.c[2].style.top = this.baseH + 'px'; } - this.listIn = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); this.listIn.name = 'list'; this.topList = 0; this.c[2].appendChild(this.listIn); this.c[2].appendChild(this.scrollerBack); this.c[2].appendChild(this.scroller); - if (o.value !== undefined) { if (!isNaN(o.value)) this.value = this.list[o.value];else this.value = o.value; } else { this.value = this.list[0]; } - this.isOpenOnStart = o.open || false; - if (this.listOnly) { this.baseH = 5; this.c[3].style.display = 'none'; @@ -4736,15 +4491,17 @@ this.c[2].style.top = this.baseH + 'px'; this.isOpenOnStart = true; } - this.miniCanvas = o.miniCanvas || false; this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; - this.imageSize = o.imageSize || [20, 20]; // dragout function + this.imageSize = o.imageSize || [20, 20]; + // dragout function this.drag = o.drag || false; this.dragout = o.dragout || false; this.dragstart = o.dragstart || null; - this.dragend = o.dragend || null; //this.c[0].style.background = '#FF0000' + this.dragend = o.dragend || null; + + //this.c[0].style.background = '#FF0000' ///if( this.isWithImage ) this.preloadImage(); this.setList(this.list); @@ -4752,22 +4509,19 @@ if (this.isWithImage) this.preloadImage(); if (this.isOpenOnStart) this.open(true); this.baseH += this.mtop; - } // image list + } + // image list preloadImage() { this.preLoadComplete = false; this.tmpImage = {}; - for (let i = 0; i < this.list.length; i++) this.tmpUrl.push(this.list[i]); - this.loadOne(); } - nextImg() { if (this.c === null) return; this.tmpUrl.shift(); - if (this.tmpUrl.length === 0) { this.preLoadComplete = true; this.addImages(); @@ -4776,7 +4530,6 @@ if( this.isOpenOnStart ) this.open();*/ } else this.loadOne(); } - loadOne() { let self = this; let name = this.tmpUrl[0]; @@ -4789,13 +4542,13 @@ self.tmpImage[name] = img; self.nextImg(); }); - } // + } + // testZone(e) { let l = this.local; if (l.x === -1 && l.y === -1) return ''; - if (this.up && this.isOpen) { if (l.y > this.h - this.baseH) return 'title';else { if (this.scroll && l.x > this.sa + this.sb - this.ss) return 'scroll'; @@ -4809,28 +4562,25 @@ } } } - return ''; } - testItems(y) { let name = ''; let items = this.items; + /*if(this.hideCurrent){ //items = [...this.items] items = this.items.slice(this.tmpId) }*/ let i = items.length, - item, - a, - b; - + item, + a, + b; while (i--) { item = items[i]; a = item.posy + this.topList; b = item.posy + this.itemHeight + 1 + this.topList; - if (y >= a && y <= b) { name = 'item' + i; this.modeItem(0); @@ -4839,28 +4589,23 @@ return name; } } - return name; } - modeItem(mode) { if (!this.current) return; if (this.current.select && mode === 0) mode = 2; let cc = this.colors; - switch (mode) { case 0: // base this.current.style.background = cc.back; this.current.style.color = cc.text; break; - case 1: // over this.current.style.background = cc.over; this.current.style.color = cc.textOver; break; - case 2: // edit / down this.current.style.background = cc.select; @@ -4868,41 +4613,35 @@ break; } } - unSelected() { if (!this.current) return; this.modeItem(0); this.current = null; } - selected() { if (!this.current) return; this.resetItems(); this.modeItem(2); this.current.select = true; } - resetItems() { let i = this.items.length; - while (i--) { this.items[i].select = false; this.items[i].style.background = this.colors.back; this.items[i].style.color = this.colors.text; } } - hideActive() { - if (!this.hideCurrent) return; //if( !this.current ) return - + if (!this.hideCurrent) return; + //if( !this.current ) return if (this.current) this.tmpId = this.current.id; - this.resetHide(); //this.items[this.tmpId].style.height = 0+'px' + this.resetHide(); + //this.items[this.tmpId].style.height = 0+'px' } - resetHide() { console.log(this.tmpId); let i = this.items.length; - while (i--) { if (i === this.tmpId) { this.items[i].style.height = 0 + 'px'; @@ -4910,32 +4649,30 @@ } else { this.items[i].style.height = this.itemHeight + 'px'; this.items[i].posy = (this.itemHeight + 1) * (i - 1); - } //this.items[i].style.display = 'flex' + } + //this.items[i].style.display = 'flex' /*this.items[i].select = false this.items[i].style.background = this.colors.back; this.items[i].style.color = this.colors.text;*/ - } - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - mouseup(e) { this.isDown = false; } - mousedown(e) { let name = this.testZone(e); if (!name) return false; - if (name === 'scroll') { this.isDown = true; this.mousemove(e); } else if (name === 'title') { this.modeTitle(2); - if (!this.listOnly) { this.hideActive(); if (!this.isOpen) this.open();else this.close(); @@ -4943,27 +4680,26 @@ } else { // is item if (this.current) { - this.value = this.list[this.current.id]; //this.tmpId = this.current.id + this.value = this.list[this.current.id]; + //this.tmpId = this.current.id - if (this.isSelectable) this.selected(); //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); + if (this.isSelectable) this.selected(); + //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); this.send(this.value); - if (!this.listOnly) { this.close(); - this.setTopItem(); //this.hideActive() + this.setTopItem(); + //this.hideActive() } } } - return true; } - mousemove(e) { let nup = false; let name = this.testZone(e); if (!name) return nup; - if (name === 'title') { this.unSelected(); this.modeTitle(1); @@ -4971,101 +4707,88 @@ } else if (name === 'scroll') { this.cursor('s-resize'); this.modeScroll(1); - if (this.isDown) { - this.modeScroll(2); //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - + this.modeScroll(2); + //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); let top = this.zone.y + this.baseH - 2; this.update(e.clientY - top - this.sh * 0.5); - } //if(this.isDown) this.listmove(e); - + } + //if(this.isDown) this.listmove(e); } else { // is item this.modeTitle(0); this.modeScroll(0); this.cursor('pointer'); } - if (name !== this.prevName) nup = true; this.prevName = name; return nup; } - wheel(e) { let name = this.testZone(e); if (name === 'title') return false; this.py += e.delta * 10; this.update(this.py); return true; - } // ---------------------- + } + // ---------------------- reset() { this.prevName = ''; this.unSelected(); this.modeTitle(0); - this.modeScroll(0); //console.log('this is reset') - } + this.modeScroll(0); + //console.log('this is reset') + } modeScroll(mode) { if (mode === this.sMode) return; let s = this.scroller.style; let cc = this.colors; - switch (mode) { case 0: // base s.background = cc.text; break; - case 1: // over s.background = cc.select; break; - case 2: // edit / down s.background = cc.select; break; } - this.sMode = mode; } - modeTitle(mode) { if (mode === this.tMode) return; let s = this.s; let cc = this.colors; - switch (mode) { case 0: // base s[3].color = cc.text; s[3].background = cc.button; break; - case 1: // over s[3].color = cc.textOver; s[3].background = cc.overoff; break; - case 2: // edit / down s[3].color = cc.textSelect; s[3].background = cc.overoff; break; } - this.tMode = mode; } - clearList() { while (this.listIn.children.length) this.listIn.removeChild(this.listIn.lastChild); - this.items = []; } - setList(list) { this.clearList(); this.list = list; @@ -5081,12 +4804,10 @@ this.c[2].style.height = this.maxHeight + 'px'; this.scrollerBack.style.height = this.maxHeight + 'px'; this.scroller.style.height = this.sh + 'px'; - if (this.max > this.maxHeight) { this.ww = this.sb - this.ss; this.scroll = true; } - if (this.miniCanvas) { this.tmpCanvas = document.createElement('canvas'); this.tmpCanvas.width = this.imageSize[0]; @@ -5095,9 +4816,7 @@ this.tmpCtx.fillStyle = this.canvasBg; this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); } - let item, n; //, l = this.sb; - for (let i = 0; i < this.length; i++) { n = this.list[i]; item = this.dom('div', this.css.item + 'padding:0px ' + (this.m + 1) + 'px; width:' + this.ww + 'px; height:' + this.itemHeight + 'px; line-height:' + (this.itemHeight - 2) + 'px; color:' + this.colors.text + '; background:' + this.colors.back + ';'); @@ -5107,13 +4826,15 @@ item.posy = (this.itemHeight + 1) * i; this.listIn.appendChild(item); this.items.push(item); - if (n === this.value) this.current = item; //if( this.isWithImage ) item.appendChild( this.tmpImage[n] ); + if (n === this.value) this.current = item; + //if( this.isWithImage ) item.appendChild( this.tmpImage[n] ); if (!this.isWithImage) item.textContent = n; - if (this.miniCanvas) { let c = new Image(); - c.src = this.tmpCanvas.toDataURL(); //item.style.marginLeft = (this.imageSize[0]+8)+'px' + c.src = this.tmpCanvas.toDataURL(); + + //item.style.marginLeft = (this.imageSize[0]+8)+'px' /*let c = document.createElement('canvas') c.width = this.imageSize[0] @@ -5121,72 +4842,62 @@ let ctx = c.getContext("2d") ctx.fillStyle = this.canvasBg ctx.fillRect(0, 0, this.imageSize[0], this.imageSize[1])*/ + //c.style.cssText = 'position:relative; pointer-events:none; display:inline-block; float:left; margin-left:0px; margin-right:5px; top:2px' // c.style.cssText =' flex-shrink: 0;' - c.style.cssText = 'margin-right:4px;'; //c.style.cssText = 'display:flex; align-content: flex-start; flex-wrap: wrap;' - //item.style.float = 'right' + c.style.cssText = 'margin-right:4px;'; + //c.style.cssText = 'display:flex; align-content: flex-start; flex-wrap: wrap;' + //item.style.float = 'right' item.appendChild(c); this.tmpImage[n] = c; } - if (this.dragout) { item.img = this.tmpImage[n]; item.style.pointerEvents = 'auto'; item.draggable = "true"; - item.addEventListener('dragstart', this.dragstart || function () { - /*console.log('drag start')*/ - }); - item.addEventListener('drag', this.drag || function () { - /*console.log('drag start')*/ - }); //item.addEventListener('dragover', this); + item.addEventListener('dragstart', this.dragstart || function () {/*console.log('drag start')*/}); + item.addEventListener('drag', this.drag || function () {/*console.log('drag start')*/}); + //item.addEventListener('dragover', this); //item.addEventListener('dragenter', this); - item.addEventListener('dragleave', function () { Roots.fakeUp(); }); - item.addEventListener('dragend', this.dragend || function () { - /*console.log('drag end')*/ - }.bind(this)); //item.addEventListener('drop', function(){console.log('drop')}) + item.addEventListener('dragend', this.dragend || function () {/*console.log('drag end')*/}.bind(this)); + //item.addEventListener('drop', function(){console.log('drop')}) } } - this.setTopItem(); if (this.isSelectable) this.selected(); } - drawImage(name, image, x, y, w, h) { this.tmpCtx.clearRect(0, 0, this.imageSize[0], this.imageSize[1]); this.tmpCtx.drawImage(image, x, y, w, h, 0, 0, this.imageSize[0], this.imageSize[1]); this.tmpImage[name].src = this.tmpCanvas.toDataURL(); + /*let c = this.tmpImage[name] let ctx = c.getContext("2d") ctx.drawImage(image, x, y, w, h, 0, 0, this.imageSize[0], this.imageSize[1])*/ } - addImages() { let lng = this.list.length; - for (let i = 0; i < lng; i++) { this.items[i].appendChild(this.tmpImage[this.list[i]]); } - this.setTopItem(); } - setValue(value) { - if (!isNaN(value)) this.value = this.list[value];else this.value = value; //this.tmpId = value + if (!isNaN(value)) this.value = this.list[value];else this.value = value; + + //this.tmpId = value this.setTopItem(); } - setTopItem() { if (this.staticTop) return; - if (this.isWithImage) { if (!this.preLoadComplete) return; - if (!this.c[3].children.length) { this.canvas = document.createElement('canvas'); this.canvas.width = this.imageSize[0]; @@ -5197,11 +4908,9 @@ this.c[3].style.justifyContent = 'left'; this.c[3].appendChild(this.canvas); } - this.tmpImage[this.value]; this.ctx.drawImage(this.tmpImage[this.value], 0, 0, this.imageSize[2], this.imageSize[3], 0, 0, this.imageSize[0], this.imageSize[1]); } else this.c[3].textContent = this.value; - if (this.miniCanvas) { if (!this.c[3].children.length) { this.canvas = document.createElement('canvas'); @@ -5213,11 +4922,11 @@ this.c[3].style.justifyContent = 'left'; this.c[3].appendChild(this.canvas); } - this.ctx.drawImage(this.tmpImage[this.value], 0, 0); } - } // ----- LIST + } + // ----- LIST update(y) { if (!this.scroll) return; @@ -5228,16 +4937,13 @@ this.scroller.style.top = Math.floor(y) + 'px'; this.py = y; } - parentHeight(t) { if (this.group !== null) this.group.calc(t);else if (this.isUI) this.main.calc(t); } - open(first) { super.open(); this.update(0); this.h = this.maxHeight + this.baseH + 5; - if (!this.scroll) { this.topList = 0; this.h = this.baseH + 5 + this.max; @@ -5247,23 +4953,19 @@ this.scroller.style.display = 'block'; this.scrollerBack.style.display = 'block'; } - this.s[0].height = this.h + 'px'; this.s[2].display = 'block'; - if (this.up) { this.zone.y -= this.h - (this.baseH - 10); this.setSvg(this.c[4], 'd', this.svgs.g1); } else { this.setSvg(this.c[4], 'd', this.svgs.g2); } - this.rSizeContent(); let t = this.h - this.baseH; this.zone.h = this.h; if (!first) this.parentHeight(t); } - close() { super.close(); if (this.up) this.zone.y += this.h - (this.baseH - 10); @@ -5274,21 +4976,21 @@ this.setSvg(this.c[4], 'd', this.svgs.g1); this.zone.h = this.h; this.parentHeight(-t); - } // ----- + } + // ----- text(txt) { this.c[3].textContent = txt; } - rSizeContent() { let i = this.length; - while (i--) this.listIn.children[i].style.width = this.ww + 'px'; } - rSize() { - super.rSize(); //Proto.prototype.rSize.call( this ); + super.rSize(); + + //Proto.prototype.rSize.call( this ); let s = this.s; let w = this.sb; @@ -5303,7 +5005,6 @@ if (this.max > this.maxHeight) this.ww = w - this.ss; if (this.isOpen) this.rSizeContent(); } - } class Numeric extends Proto { @@ -5318,15 +5019,12 @@ this.isSingle = true; this.isAngle = false; this.isVector = false; - if (o.isAngle) { this.isAngle = true; this.multy = Tools.torad; this.invmulty = Tools.todeg; } - this.isDrag = o.drag || false; - if (o.value !== undefined) { if (!isNaN(o.value)) { this.value = [o.value]; @@ -5343,7 +5041,6 @@ this.isVector = true; } } - this.lng = this.value.length; this.tmp = []; this.current = -1; @@ -5353,12 +5050,12 @@ d: 0, v: 0 }; - let cc = this.colors; // bg + let cc = this.colors; + // bg this.c[2] = this.dom('div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h - 8) + 'px;'); this.cMode = []; let i = this.lng; - while (i--) { if (this.isAngle) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed(this.precision); this.c[3 + i] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border + '; border-radius:' + this.radius + 'px;'); @@ -5367,39 +5064,36 @@ this.c[3 + i].style.color = this.colors.text; this.c[3 + i].isNum = true; this.cMode[i] = 0; - } // selection - + } + // selection this.selectId = 3 + this.lng; - this.c[this.selectId] = this.dom('div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h - 4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); // cursor + this.c[this.selectId] = this.dom('div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h - 4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + // cursor this.cursorId = 4 + this.lng; this.c[this.cursorId] = this.dom('div', this.css.basic + 'top:2px; height:' + (this.h - 4) + 'px; width:0px; background:' + cc.text + ';'); this.init(); } - testZone(e) { let l = this.local; if (l.x === -1 && l.y === -1) return ''; let i = this.lng; let t = this.tmp; - while (i--) { if (l.x > t[i][0] && l.x < t[i][2]) return i; } - return ''; - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - mousedown(e) { let name = this.testZone(e); - if (!this.isDown) { this.isDown = true; - if (name !== '') { this.current = name; this.prev = { @@ -5410,13 +5104,10 @@ }; this.setInput(this.c[3 + this.current]); } - return this.mousemove(e); } - return false; } - mouseup(e) { if (this.isDown) { this.isDown = false; @@ -5428,10 +5119,8 @@ }; return this.mousemove(e); } - return false; } - mousemove(e) { let nup = false; let x = 0; @@ -5439,7 +5128,6 @@ if (name === '') this.cursor();else { if (!this.isDrag) this.cursor('text');else this.cursor(this.current !== -1 ? 'move' : 'pointer'); } - if (this.isDrag) { if (this.current !== -1) { this.prev.d += e.clientX - this.prev.x - (e.clientY - this.prev.y); @@ -5456,16 +5144,15 @@ if (this.current !== -1) x -= this.tmp[this.current][0]; return this.upInput(x, this.isDown); } - return nup; - } // ---------------------- + } + // ---------------------- reset() { let nup = false; return nup; } - setValue(v) { if (this.isVector) { if (v.x !== undefined) this.value[0] = v.x; @@ -5475,31 +5162,23 @@ } else { this.value = this.isSingle ? [v] : v; } - this.update(); } - sameStr(str) { let i = this.value.length; - while (i--) this.c[3 + i].textContent = str; } - update(up) { let i = this.value.length; - while (i--) { this.value[i] = this.numValue(this.value[i] * this.invmulty); this.c[3 + i].textContent = this.value[i]; } - if (up) this.send(); } - send(v) { v = v || this.value; this.isSend = true; - if (this.objectLink !== null) { if (this.isVector) { this.objectLink[this.objectKey].fromArray(v); @@ -5507,14 +5186,14 @@ this.objectLink[this.objectKey] = v; } } - if (this.callback) this.callback(v, this.objectKey); this.isSend = false; - } // ---------------------- + } + + // ---------------------- // INPUT // ---------------------- - select(c, e, w, t) { let s = this.s; let d = this.current !== -1 ? this.tmp[this.current][0] + 5 : 0; @@ -5524,7 +5203,6 @@ s[this.selectId].width = w + 'px'; this.c[this.selectId].innerHTML = t; } - unselect() { let s = this.s; if (!s) return; @@ -5532,12 +5210,10 @@ s[this.selectId].width = 0 + 'px'; s[this.cursorId].width = 0 + 'px'; } - validate(force) { let ar = []; let i = this.lng; if (this.allway) force = true; - while (i--) { if (!isNaN(this.c[3 + i].textContent)) { let nx = this.numValue(this.c[3 + i].textContent); @@ -5547,26 +5223,23 @@ // not number this.c[3 + i].textContent = this.value[i]; } - ar[i] = this.value[i] * this.multy; } - if (!force) return; this.send(this.isSingle ? ar[0] : ar); - } // ---------------------- + } + + // ---------------------- // REZISE // ---------------------- - rSize() { super.rSize(); let sx = this.colors.sx; let ss = sx * (this.lng - 1); let w = (this.sb - ss) / this.lng; //(( this.sb + sx ) / this.lng )-sx - let s = this.s; let i = this.lng; - while (i--) { //this.tmp[i] = [ Math.floor( this.sa + ( w * i )+( 5 * i )), w ]; this.tmp[i] = [this.sa + w * i + sx * i, w]; @@ -5575,7 +5248,6 @@ s[3 + i].width = this.tmp[i][1] + 'px'; } } - } class Slide extends Proto { @@ -5583,7 +5255,9 @@ super(o); this.setTypeNumber(o); this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; //this.defaultBorderColor = this.colors.hide; + if (o.mode !== undefined) this.model = o.mode; + + //this.defaultBorderColor = this.colors.hide; this.isDown = false; this.isOver = false; @@ -5591,27 +5265,26 @@ this.isDeg = o.isDeg || false; this.isCyclic = o.cyclic || false; this.firstImput = false; - let cc = this.colors; //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - - this.c[2] = this.dom('div', this.css.txtselect + 'border:none; background:none; width:47px; color:' + cc.text + ';'); //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); + let cc = this.colors; + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + this.c[2] = this.dom('div', this.css.txtselect + 'border:none; background:none; width:47px; color:' + cc.text + ';'); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); this.c[3] = this.dom('div', this.css.basic + ' top:0; height:' + this.h + 'px;'); this.c[4] = this.dom('div', this.css.basic + 'background:' + cc.back + '; top:2px; height:' + (this.h - 4) + 'px;'); this.c[5] = this.dom('div', this.css.basic + 'left:4px; top:5px; height:' + (this.h - 10) + 'px; background:' + cc.text + ';'); - this.c[2].isNum = true; //this.c[2].style.height = (this.h-4) + 'px'; + this.c[2].isNum = true; + //this.c[2].style.height = (this.h-4) + 'px'; //this.c[2].style.lineHeight = (this.h-8) + 'px'; - this.c[2].style.height = this.h - 2 + 'px'; this.c[2].style.lineHeight = this.h - 10 + 'px'; - if (this.model !== 0) { let r1 = 4, - h1 = 4, - h2 = 8, - ww = this.h - 6, - ra = 16; - + h1 = 4, + h2 = 8, + ww = this.h - 6, + ra = 16; if (this.model === 2) { r1 = 0; h1 = 2; @@ -5619,121 +5292,106 @@ ra = 2; ww = (this.h - 6) * 0.5; } - if (this.model === 3) this.c[5].style.visible = 'none'; this.c[4].style.borderRadius = r1 + 'px'; this.c[4].style.height = h2 + 'px'; this.c[4].style.top = this.h * 0.5 - h1 + 'px'; this.c[5].style.borderRadius = r1 * 0.5 + 'px'; this.c[5].style.height = h1 + 'px'; - this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + 'px'; //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); + this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + 'px'; + //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); this.c[6] = this.dom('div', this.css.basic + 'border-radius:' + ra + 'px; margin-left:' + -ww * 0.5 + 'px; background:' + cc.text + '; left:4px; top:3px; height:' + (this.h - 6) + 'px; width:' + ww + 'px;'); } - this.init(); } - testZone(e) { let l = this.local; if (l.x === -1 && l.y === -1) return ''; if (l.x >= this.txl) return 'text';else if (l.x >= this.sa) return 'scroll';else return ''; - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - mouseup(e) { if (this.isDown) this.isDown = false; } - mousedown(e) { let name = this.testZone(e); if (!name) return false; - if (name === 'scroll') { this.isDown = true; this.old = this.value; this.mousemove(e); } + /*if( name === 'text' ){ this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); }*/ - return true; } - mousemove(e) { let nup = false; let name = this.testZone(e); - if (name === 'scroll') { this.mode(1); - this.cursor('w-resize'); //} else if(name === 'text'){ + this.cursor('w-resize'); + //} else if(name === 'text'){ //this.cursor('pointer'); } else { this.cursor(); } - if (this.isDown) { let n = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww * this.range + this.min - this.old; - if (n >= this.step || n <= this.step) { n = Math.floor(n / this.step); this.value = this.numValue(this.old + n * this.step); this.update(true); this.old = this.value; } - nup = true; } - return nup; } - wheel(e) { let name = this.testZone(e); - if (name === 'scroll') { let v = this.value - this.step * e.delta; - if (v > this.max) { v = this.isCyclic ? this.min : this.max; } else if (v < this.min) { v = this.isCyclic ? this.max : this.min; } - this.setValue(v); this.old = v; this.update(true); return true; } - return false; - } //keydown: function ( e ) { return true; }, - // ---------------------- + } + + //keydown: function ( e ) { return true; }, + // ---------------------- validate() { let n = this.c[2].textContent; - if (!isNaN(n)) { this.value = this.numValue(n); this.update(true); } else this.c[2].textContent = this.value + (this.isDeg ? '°' : ''); } - reset() { //this.clearInput(); this.isDown = false; this.mode(0); } - mode(mode) { let s = this.s; let cc = this.colors; - switch (mode) { case 0: // base @@ -5742,9 +5400,7 @@ s[4].background = cc.back; s[5].background = cc.text; if (this.model !== 0) s[6].background = cc.text; //cc.button; - break; - case 1: // scroll over //s[2].border = '1px dashed ' + this.colors.hide; @@ -5752,11 +5408,9 @@ s[4].background = cc.back; s[5].background = cc.textOver; if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; - break; } } - update(up) { let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); if (this.model !== 3) this.s[5].width = ww + 'px'; @@ -5764,19 +5418,20 @@ this.c[2].textContent = this.value + (this.isDeg ? '°' : ''); if (up) this.send(); } - rSize() { super.rSize(); let w = this.sb - this.sc; this.ww = w - 6; let tx = this.sc; if (this.isUI || !this.simple) tx = this.sc + 10; - this.txl = this.w - tx + 2; //let ty = Math.floor(this.h * 0.5) - 8; + this.txl = this.w - tx + 2; + + //let ty = Math.floor(this.h * 0.5) - 8; let s = this.s; s[2].width = this.sc - 6 + 'px'; - s[2].left = this.txl + 4 + 'px'; //s[2].top = ty + 'px'; - + s[2].left = this.txl + 4 + 'px'; + //s[2].top = ty + 'px'; s[3].left = this.sa + 'px'; s[3].width = w + 'px'; s[4].left = this.sa + 'px'; @@ -5784,7 +5439,6 @@ s[5].left = this.sa + 3 + 'px'; this.update(); } - } class TextInput extends Proto { @@ -5796,58 +5450,59 @@ this.allway = o.allway || false; this.editable = o.edit !== undefined ? o.edit : true; this.isDown = false; - let cc = this.colors; // text + let cc = this.colors; + // text this.c[2] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border + '; border-radius:' + this.radius + 'px;'); - this.c[2].textContent = this.value; // selection + this.c[2].textContent = this.value; - this.c[3] = this.dom('div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h - 4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); // cursor + // selection + this.c[3] = this.dom('div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h - 4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - this.c[4] = this.dom('div', this.css.basic + 'top:2px; height:' + (this.h - 4) + 'px; width:0px; background:' + cc.text + ';'); // fake + // cursor + this.c[4] = this.dom('div', this.css.basic + 'top:2px; height:' + (this.h - 4) + 'px; width:0px; background:' + cc.text + ';'); + // fake this.c[5] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; border:none; justify-content: center; font-style: italic; color:' + cc.border + ';'); if (this.value === '') this.c[5].textContent = this.placeHolder; this.init(); } - testZone(e) { let l = this.local; if (l.x === -1 && l.y === -1) return ''; if (l.x >= this.sa) return 'text'; return ''; - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - mouseup(e) { if (!this.editable) return; - if (this.isDown) { this.isDown = false; return this.mousemove(e); } - return false; } - mousedown(e) { if (!this.editable) return; let name = this.testZone(e); - if (!this.isDown) { this.isDown = true; if (name === 'text') this.setInput(this.c[2]); return this.mousemove(e); } - return false; } - mousemove(e) { if (!this.editable) return; - let name = this.testZone(e); //let l = this.local; + let name = this.testZone(e); + + //let l = this.local; //if( l.x === -1 && l.y === -1 ){ return;} + //if( l.x >= this.sa ) this.cursor('text'); //else this.cursor(); @@ -5856,19 +5511,20 @@ if (this.isDown) x = e.clientX - this.zone.x; return this.upInput(x - this.sa - 3, this.isDown); } - update() { this.c[2].textContent = this.value; - } // ---------------------- + } + // ---------------------- reset() { this.cursor(); - } // ---------------------- + } + + // ---------------------- // INPUT // ---------------------- - select(c, e, w, t) { let s = this.s; let d = this.sa + 5; @@ -5878,7 +5534,6 @@ s[3].width = w + 'px'; this.c[3].innerHTML = t; } - unselect() { let s = this.s; if (!s) return; @@ -5886,18 +5541,18 @@ this.c[3].innerHTML = 't'; s[4].width = 0 + 'px'; } - validate(force) { if (this.allway) force = true; this.value = this.c[2].textContent; if (this.value !== '') this.c[5].textContent = '';else this.c[5].textContent = this.placeHolder; if (!force) return; this.send(); - } // ---------------------- + } + + // ---------------------- // REZISE // ---------------------- - rSize() { super.rSize(); let s = this.s; @@ -5906,7 +5561,6 @@ s[5].left = this.sa + 'px'; s[5].width = this.sb + 'px'; } - } class Title extends Proto { @@ -5914,42 +5568,34 @@ super(o); let prefix = o.prefix || ''; this.c[2] = this.dom('div', this.css.txt + 'justify-content:right; width:60px; line-height:' + (this.h - 8) + 'px; color:' + this.colors.text); - if (this.h === 31) { this.s[0].height = this.h + 'px'; this.s[1].top = 8 + 'px'; this.c[2].style.top = 8 + 'px'; } - let s = this.s; - s[1].justifyContent = o.align || 'left'; //s[1].textAlign = o.align || 'left'; - + s[1].justifyContent = o.align || 'left'; + //s[1].textAlign = o.align || 'left'; s[1].fontWeight = o.fontWeight || 'bold'; this.c[1].textContent = this.txt.substring(0, 1).toUpperCase() + this.txt.substring(1).replace("-", " "); this.c[2].textContent = prefix; this.init(); } - text(txt) { this.c[1].textContent = txt; } - text2(txt) { this.c[2].textContent = txt; } - rSize() { super.rSize(); this.s[1].width = this.w + 'px'; //- 50 + 'px'; - this.s[2].left = this.w + 'px'; //- ( 50 + 26 ) + 'px'; } - setColor(c) { this.s[1].color = c; this.s[2].color = c; } - } class Select extends Proto { @@ -5957,12 +5603,12 @@ super(o); this.value = o.value || ''; this.isDown = false; + this.onActif = o.onActif || function () {}; - this.onActif = o.onActif || function () {}; //let prefix = o.prefix || ''; - - + //let prefix = o.prefix || ''; const cc = this.colors; - this.c[2] = this.dom('div', this.css.txt + this.css.button + ' top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.buttonBorder + '; border-radius:15px; width:30px; left:10px;'); //this.c[2].style.color = this.fontColor; + this.c[2] = this.dom('div', this.css.txt + this.css.button + ' top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.buttonBorder + '; border-radius:15px; width:30px; left:10px;'); + //this.c[2].style.color = this.fontColor; this.c[3] = this.dom('div', this.css.txtselect + 'height:' + (this.h - 4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder + '; border-radius:' + this.radius + 'px;'); this.c[3].textContent = this.value; @@ -5976,75 +5622,65 @@ this.isActif = false; this.init(); } - testZone(e) { let l = this.local; if (l.x === -1 && l.y === -1) return ''; if (l.x > this.sa && l.x < this.sa + 30) return 'over'; return '0'; - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - mouseup(e) { if (this.isDown) { //this.value = false; - this.isDown = false; //this.send(); - + this.isDown = false; + //this.send(); return this.mousemove(e); } - return false; } - mousedown(e) { let name = this.testZone(e); if (!name) return false; - this.isDown = true; //this.value = this.values[ name-2 ]; + this.isDown = true; + //this.value = this.values[ name-2 ]; //this.send(); - return this.mousemove(e); } - mousemove(e) { let up = false; let name = this.testZone(e); - if (name === 'over') { this.cursor('pointer'); up = this.mode(this.isDown ? 3 : 2); } else { up = this.reset(); } - return up; - } // ---------------------- + } + // ---------------------- apply(v) { v = v || ''; - if (v !== this.value) { this.value = v; this.c[3].textContent = this.value; this.send(); } - this.mode(1); } - update() { this.mode(3); } - mode(n) { let change = false; let cc = this.colors; - if (this.stat !== n) { if (n === 1) this.isActif = false; - if (n === 3) { if (!this.isActif) { this.isActif = true; @@ -6054,51 +5690,41 @@ this.isActif = false; } } - if (n === 2 && this.isActif) n = 4; this.stat = n; - switch (n) { case 1: this.s[2].color = cc.text; this.s[2].background = cc.button; break; // base - case 2: this.s[2].color = cc.textOver; this.s[2].background = cc.overoff; break; // over - case 3: this.s[2].color = cc.textOver; this.s[2].background = cc.action; break; // down - case 4: this.s[2].color = cc.textSelect; this.s[2].background = cc.action; break; // actif } - change = true; } - return change; } - reset() { this.cursor(); return this.mode(this.isActif ? 4 : 1); } - text(txt) { this.c[3].textContent = txt; } - rSize() { super.rSize(); let s = this.s; @@ -6107,7 +5733,6 @@ s[3].width = this.sb - 40 + 'px'; s[4].left = this.sa + 8 + 'px'; } - } class Bitmap extends Proto { @@ -6131,58 +5756,53 @@ this.stat = 1; this.init(); } - testZone(e) { let l = this.local; if (l.x === -1 && l.y === -1) return ''; if (l.x > this.sa && l.x < this.sa + 30) return 'over'; return '0'; - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - mouseup(e) { if (this.isDown) { //this.value = false; - this.isDown = false; //this.send(); - + this.isDown = false; + //this.send(); return this.mousemove(e); } - return false; } - mousedown(e) { let name = this.testZone(e); if (!name) return false; - if (name === 'over') { this.isDown = true; Files.load({ callback: this.changeBitmap.bind(this) }); - } //this.value = this.values[ name-2 ]; - //this.send(); - + } + //this.value = this.values[ name-2 ]; + //this.send(); return this.mousemove(e); } - mousemove(e) { let up = false; let name = this.testZone(e); - if (name === 'over') { this.cursor('pointer'); up = this.mode(this.isDown ? 3 : 2); } else { up = this.reset(); } - return up; - } // ---------------------- + } + // ---------------------- changeBitmap(img, fname) { if (img) { @@ -6192,77 +5812,63 @@ this.img = null; this.apply('null'); } - } // ---------------------- + } + // ---------------------- apply(v) { v = v || ''; - if (v !== this.value) { this.value = v; this.c[3].textContent = this.value; - if (this.img !== null) { if (this.objectLink !== null) this.objectLink[this.val] = v; if (this.callback) this.callback(this.value, this.img, this.name); } } - this.mode(1); } - update() { this.mode(3); } - mode(n) { let change = false; let cc = this.colors; - if (this.stat !== n) { this.stat = n; - switch (n) { case 1: this.s[2].color = cc.text; this.s[2].background = cc.button; break; // base - case 2: this.s[2].color = cc.textOver; this.s[2].background = cc.overoff; break; // over - case 3: this.s[2].color = cc.textOver; this.s[2].background = cc.over; break; // down - case 4: this.s[2].color = cc.textSelect; this.s[2].background = cc.select; break; // actif } - change = true; } - return change; } - reset() { this.cursor(); return this.mode(this.isActif ? 4 : 1); } - text(txt) { this.c[3].textContent = txt; } - rSize() { super.rSize(); let s = this.s; @@ -6271,7 +5877,6 @@ s[3].width = this.sb - 40 + 'px'; s[4].left = this.sa + 8 + 'px'; } - } //import { Proto } from '../core/Proto.js'; @@ -6280,7 +5885,6 @@ if (o.selectable === undefined) o.selectable = true; super(o); } - } class Item extends Proto { @@ -6300,97 +5904,87 @@ }); this.s[1].marginLeft = 20 + 'px'; this.init(); - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - mousemove(e) { - this.cursor('pointer'); //up = this.modes( this.isDown ? 3 : 2, name ); - } + this.cursor('pointer'); + //up = this.modes( this.isDown ? 3 : 2, name ); + } mousedown(e) { if (this.isUI) this.main.resetItem(); this.selected(true); this.send(); return true; } - uiout() { if (this.isSelect) this.mode(3);else this.mode(1); } - uiover() { if (this.isSelect) this.mode(4);else this.mode(2); } - update() {} + /*rSize () { super.rSize(); }*/ - mode(n) { let change = false; - if (this.status !== n) { this.status = n; let s = this.s, - cc = this.colors; - + cc = this.colors; switch (n) { case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; - case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; - case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; - case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; } - change = true; } - return change; } - reset() { - this.cursor(); // return this.mode( 1 ); + this.cursor(); + // return this.mode( 1 ); } - selected(b) { if (this.isSelect) this.mode(1); this.isSelect = b || false; if (this.isSelect) this.mode(3); } - } class Grid extends Proto { constructor(o = {}) { super(o); + /*this.values = o.values || []; if( typeof this.values === 'string' ) this.values = [ this.values ];*/ this.values = []; - if (o.values) { if (o.values instanceof Array) { this.values = o.values; @@ -6398,11 +5992,9 @@ this.values = [o.values]; } else if (o.values instanceof Object) { this.refObject = o.values; - for (let g in this.refObject) this.values.push(g); } } - this.lng = this.values.length; this.value = o.value || null; let cc = this.colors; @@ -6415,14 +6007,14 @@ this.grid = [2, Math.round(this.lng * 0.5)]; this.h = this.grid[1] * this.bsize[1] + this.grid[1] * this.spaces[1]; //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); - this.c[1].textContent = ''; //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); - + this.c[1].textContent = ''; + //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); this.c[2] = this.dom('table', this.css.basic + 'width:100%; border-spacing: ' + (this.spaces[0] - 2) + 'px ' + this.spaces[1] + 'px; border:none;'); let n = 0, - b, - td, - tr, - sel; + b, + td, + tr, + sel; this.res = -1; this.isDown = false; this.neverlock = true; @@ -6430,15 +6022,12 @@ this.stat = []; this.tmpX = []; this.tmpY = []; - for (let i = 0; i < this.grid[1]; i++) { tr = this.c[2].insertRow(); tr.style.cssText = 'pointer-events:none;'; - for (let j = 0; j < this.grid[0]; j++) { td = tr.insertCell(); td.style.cssText = 'pointer-events:none;'; - if (this.values[n]) { sel = false; if (this.values[n] === this.value && this.isSelectable) sel = true; @@ -6455,16 +6044,13 @@ b.style.cssText = this.css.txt + 'position:static; width:' + this.bsize[0] + 'px; height:' + this.bsize[1] + 'px; text-align:center; left:auto; right:auto; background:none;'; td.appendChild(b); } - if (j === 0) b.style.cssText += 'float:right;';else b.style.cssText += 'float:left;'; n++; } } - this.s[0].border = 'none'; this.init(); } - testZone(e) { let l = this.local; if (l.x === -1 && l.y === -1) return -1; @@ -6475,143 +6061,119 @@ let c = -1; let line = -1; let i = this.grid[0]; - while (i--) { if (l.x > tx[i][0] && l.x < tx[i][1]) c = i; } - i = this.grid[1]; - while (i--) { if (l.y > ty[i][0] && l.y < ty[i][1]) line = i; } - if (c !== -1 && line !== -1) { id = c + line * 2; if (id > this.lng - 1) id = -1; } - return id; - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - mouseup(e) { if (!this.isDown) return false; this.isDown = false; - if (this.res !== -1) { this.value = this.values[this.res]; this.send(); } - return this.mousemove(e); } - mousedown(e) { if (this.isDown) return false; this.isDown = true; return this.mousemove(e); } - mousemove(e) { let up = false; this.res = this.testZone(e); - if (this.res !== -1) { this.cursor('pointer'); up = this.modes(this.isDown ? 3 : 2, this.res); } else { up = this.reset(); } - return up; - } // ---------------------- + } + + // ---------------------- // MODE // ----------------------- - modes(N = 1, id = -1) { let i = this.lng, - w, - n, - r = false; - + w, + n, + r = false; while (i--) { n = N; w = this.isSelectable ? this.values[i] === this.value : false; - if (i === id) { if (w && n === 2) n = 3; } else { n = 1; if (w) n = 4; } - if (this.mode(n, i)) r = true; } - return r; } - mode(n, id) { let change = false; let cc = this.colors, - s = this.buttons; + s = this.buttons; let i = id; - if (this.stat[id] !== n) { this.stat[id] = n; - switch (n) { case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; - case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; - case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; - case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; } - change = true; } - return change; - } // ---------------------- + } + // ---------------------- reset() { this.res = -1; this.cursor(); return this.modes(); } - label(string, n) { this.buttons[n].textContent = string; } - icon(string, y, n) { this.buttons[n].style.padding = (y || 0) + 'px 0px'; this.buttons[n].innerHTML = string; } - testW() { let vw = this.spaces[0] * 3 + this.bsizeMax * 2, - rz = false; - + rz = false; if (vw > this.w) { this.bsize[0] = (this.w - this.spaces[0] * 3) * 0.5; rz = true; @@ -6621,20 +6183,16 @@ rz = true; } } - if (!rz) return; let i = this.buttons.length; - while (i--) this.buttons[i].style.width = this.bsize[0] + 'px'; } - rSize() { super.rSize(); this.testW(); let mid; this.tmpX = []; this.tmpY = []; - for (let j = 0; j < this.grid[0]; j++) { if (j === 0) { mid = this.w * 0.5 - this.spaces[0] * 0.5; @@ -6644,15 +6202,12 @@ this.tmpX.push([mid, mid + this.bsize[0]]); } } - mid = this.spaces[1]; - for (let i = 0; i < this.grid[1]; i++) { this.tmpY.push([mid, mid + this.bsize[1]]); mid += this.bsize[1] + this.spaces[1]; } } - } class Pad2D extends Proto { @@ -6660,8 +6215,9 @@ super(o); this.autoWidth = false; this.minw = this.w; - this.diam = o.diam || this.w; //this.margin = 15; + this.diam = o.diam || this.w; + //this.margin = 15; this.pos = new V2(0, 0); this.maxPos = 90; this.model = o.stype || 0; @@ -6669,10 +6225,13 @@ this.min = o.min === undefined ? -1 : o.min; this.max = o.max === undefined ? 1 : o.max; this.range = (this.max - this.min) * 0.5; - this.cmode = 0; //console.log(this.range) + this.cmode = 0; + + //console.log(this.range) this.c[0].style.display = 'block'; this.precision = o.precision === undefined ? 2 : o.precision; + /*this.bounds = {}; this.bounds.x1 = o.x1 || -1; this.bounds.x2 = o.x2 || 1; @@ -6685,21 +6244,27 @@ this.value = Array.isArray(o.value) && o.value.length == 2 ? o.value : [0, 0]; this.h = o.h || this.w + 10; - this.c[0].style.width = this.w + 'px'; // Title + this.c[0].style.width = this.w + 'px'; + // Title if (this.c[1] !== undefined) { // with title + this.c[1].style.width = '100%'; this.c[1].style.justifyContent = 'center'; this.top = 10; this.h += 10; - } //this.top -= this.margin + } + //this.top -= this.margin - let cc = this.colors; // Value + let cc = this.colors; + // Value this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); - this.c[2].textContent = this.value; // Pad + this.c[2].textContent = this.value; + + // Pad let pad = this.getPad2d(); this.setSvg(pad, 'fill', cc.back, 0); @@ -6718,22 +6283,21 @@ this.init(); this.setValue(); } - testZone(e) { let l = this.local; if (l.x === -1 && l.y === -1) return ''; if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'pad'; + /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { return 'pad'; }*/ + //return ''; } - mouseup(e) { this.isDown = false; return this.mode(0); } - mousedown(e) { if (this.testZone(e) === 'pad') { this.isDown = true; @@ -6741,7 +6305,6 @@ return this.mode(1); } } - mousemove(e) { if (!this.isDown) return; let x = this.w * 0.5 - (e.clientX - this.zone.x); @@ -6750,26 +6313,28 @@ x = -(x * r); y = -(y * r); x = Tools.clamp(x, -this.maxPos, this.maxPos); - y = Tools.clamp(y, -this.maxPos, this.maxPos); //let x = e.clientX - this.zone.x; + y = Tools.clamp(y, -this.maxPos, this.maxPos); + + //let x = e.clientX - this.zone.x; //let y = e.clientY - this.zone.y - this.top; /*if( x < this.margin ) x = this.margin; if( x > this.w - this.margin ) x = this.w - this.margin; if( y < this.margin ) y = this.margin; if( y > this.w - this.margin ) y = this.w - this.margin;*/ + //console.log(x,y) this.setPos([x, y]); this.update(true); } - mode(mode) { if (this.cmode === mode) return false; let cc = this.colors; - switch (mode) { case 0: // base + this.s[2].color = cc.text; this.setSvg(this.c[3], 'fill', cc.back, 0); this.setSvg(this.c[3], 'fill', cc.button, 1); @@ -6777,9 +6342,9 @@ this.setSvg(this.c[3], 'stroke', cc.back, 3); this.setSvg(this.c[3], 'stroke', cc.text, 4); break; - case 1: // down + this.s[2].color = cc.textSelect; this.setSvg(this.c[3], 'fill', cc.backoff, 0); this.setSvg(this.c[3], 'fill', cc.overoff, 1); @@ -6788,18 +6353,16 @@ this.setSvg(this.c[3], 'stroke', cc.textSelect, 4); break; } - this.cmode = mode; return true; } - update(up) { //if( up === undefined ) up = true; + this.c[2].textContent = this.value; this.updateSVG(); if (up) this.send(); } - updateSVG() { if (this.model == 1) { this.setSvg(this.c[3], 'y1', this.pos.y, 2); @@ -6807,21 +6370,20 @@ this.setSvg(this.c[3], 'x1', this.pos.x, 3); this.setSvg(this.c[3], 'x2', this.pos.x, 3); } - this.setSvg(this.c[3], 'cx', this.pos.x, 4); this.setSvg(this.c[3], 'cy', this.pos.y, 4); } - setPos(p) { //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; + this.pos.set(p[0] + 128, p[1] + 128); let r = 1 / this.maxPos; this.value[0] = (p[0] * r * this.range).toFixed(this.precision); this.value[1] = (p[1] * r * this.range).toFixed(this.precision); } - setValue(v, up = false) { if (v === undefined) v = this.value; + /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; @@ -6829,10 +6391,13 @@ this.value[0] = Math.min(this.max, Math.max(this.min, v[0])).toFixed(this.precision) * 1; this.value[1] = Math.min(this.max, Math.max(this.min, v[1])).toFixed(this.precision) * 1; - this.pos.set(this.value[0] / this.range * this.maxPos + 128, this.value[1] / this.range * this.maxPos + 128); //console.log(this.pos) + this.pos.set(this.value[0] / this.range * this.maxPos + 128, this.value[1] / this.range * this.maxPos + 128); + + //console.log(this.pos) this.update(up); } + /*lerp( s1, s2, d1, d2, c = true ) { let s = ( d2 - d1 ) / ( s2 - s1 ); return c ? ( v ) => { @@ -6841,131 +6406,106 @@ return ( v - s1 ) * s + d1 } }*/ - - } const add = function () { let a = arguments; let type, - o, - ref = false, - n = null; - + o, + ref = false, + n = null; if (typeof a[0] === 'string') { type = a[0]; o = a[1] || {}; } else if (typeof a[0] === 'object') { // like dat gui + ref = true; if (a[2] === undefined) [].push.call(a, {}); type = a[2].type ? a[2].type : autoType(a[0][a[1]], a[2]); o = a[2]; o.name = a[1]; - + if (o.hasOwnProperty("displayName")) o.name = o.displayName; if (type === 'list' && !o.list) { o.list = a[0][a[1]]; } else o.value = a[0][a[1]]; } - let name = type.toLowerCase(); - if (name === 'group') { - o.add = add; //o.dx = 8 + o.add = add; + //o.dx = 8 } - switch (name) { case 'bool': case 'boolean': n = new Bool(o); break; - case 'button': n = new Button(o); break; - case 'circular': n = new Circular(o); break; - case 'color': n = new Color(o); break; - case 'fps': n = new Fps(o); break; - case 'graph': n = new Graph(o); break; - case 'group': n = new Group(o); break; - case 'joystick': n = new Joystick(o); break; - case 'knob': n = new Knob(o); break; - case 'list': n = new List(o); break; - case 'numeric': case 'number': n = new Numeric(o); break; - case 'slide': n = new Slide(o); break; - case 'textInput': case 'string': n = new TextInput(o); break; - case 'title': case 'text': n = new Title(o); break; - case 'select': n = new Select(o); break; - case 'bitmap': n = new Bitmap(o); break; - case 'selector': n = new Selector(o); break; - case 'empty': case 'space': n = new Empty(o); break; - case 'item': n = new Item(o); break; - case 'grid': n = new Grid(o); break; - case 'pad2d': case 'pad': n = new Pad2D(o); break; } - if (n !== null) { Roots.needResize = true; if (ref) n.setReferency(a[0], a[1]); @@ -6993,54 +6533,67 @@ class Gui { constructor(o = {}) { this.isGui = true; - this.name = 'gui'; // for 3d + this.name = 'gui'; + // for 3d this.canvas = null; this.screen = null; - this.plane = o.plane || null; // color + this.plane = o.plane || null; + // color if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors);else this.colors = Tools.defineColor(o); //this.cleanning = false - // style + if (o.colors) this.setConfig(o.colors);else this.colors = Tools.defineColor(o); + + //this.cleanning = false + // style this.css = Tools.cloneCss(); this.isReset = true; - this.tmpAdd = null; //this.tmpH = 0 + this.tmpAdd = null; + //this.tmpH = 0 this.isCanvas = o.isCanvas || false; this.isCanvasOnly = false; + + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") ? o.addDOMEventListeners : true; this.callback = o.callback === undefined ? null : o.callback; this.forceHeight = o.maxHeight || 0; this.lockHeight = o.lockHeight || false; this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - this.cn = ''; // size define + this.cn = ''; + // size define this.size = Tools.size; if (o.p !== undefined) this.size.p = o.p; if (o.w !== undefined) this.size.w = o.w; if (o.h !== undefined) this.size.h = o.h; if (o.s !== undefined) this.size.s = o.s; - this.size.h = this.size.h < 11 ? 11 : this.size.h; // local mouse and zone + this.size.h = this.size.h < 11 ? 11 : this.size.h; + // local mouse and zone this.local = new V2().neg(); this.zone = { x: 0, y: 0, w: this.size.w, h: 0 - }; // virtual mouse + }; + // virtual mouse this.mouse = new V2().neg(); - this.h = 0; //this.prevY = -1; - + this.h = 0; + //this.prevY = -1; this.sw = 0; this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); // bottom and close height + this.marginDiv = Tools.isDivid(this.margin); + // bottom and close height this.isWithClose = o.close !== undefined ? o.close : true; this.bh = !this.isWithClose ? 0 : this.size.h; - this.autoResize = o.autoResize === undefined ? true : o.autoResize; // default position + this.autoResize = o.autoResize === undefined ? true : o.autoResize; + // default position this.isCenter = o.center || false; this.cssGui = o.css !== undefined ? o.css : this.isCenter ? '' : 'right:10px;'; this.isOpen = o.open !== undefined ? o.open : true; @@ -7056,144 +6609,170 @@ this.isNewTarget = false; let cc = this.colors; this.content = Tools.dom('div', this.css.basic + ' width:0px; height:auto; top:0px; background:' + cc.content + '; ' + this.cssGui); - this.innerContent = Tools.dom('div', this.css.basic + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - - this.content.appendChild(this.innerContent); //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.innerContent = Tools.dom('div', this.css.basic + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') this.useFlex = true; let flexible = this.useFlex ? 'display:flex; flex-flow: row wrap;' : ''; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom('div', this.css.basic + flexible + 'width:100%; left:0; '); - this.innerContent.appendChild(this.inner); // scroll + this.innerContent.appendChild(this.inner); + // scroll this.scrollBG = Tools.dom('div', this.css.basic + 'right:0; top:0; width:' + (this.size.s - 1) + 'px; height:10px; display:none; background:' + cc.background + ';'); this.content.appendChild(this.scrollBG); this.scroll = Tools.dom('div', this.css.basic + 'background:' + cc.button + '; right:2px; top:0; width:' + (this.size.s - 4) + 'px; height:10px;'); - this.scrollBG.appendChild(this.scroll); // bottom button + this.scrollBG.appendChild(this.scroll); + // bottom button this.bottomText = o.bottomText || ['open', 'close']; let r = cc.radius; this.bottom = Tools.dom('div', this.css.txt + 'width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:' + r + 'px; border-bottom-left-radius:' + r + 'px; justify-content:center; height:' + this.bh + 'px; line-height:' + (this.bh - 5) + 'px; color:' + cc.text + ';'); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); this.bottom.textContent = this.isOpen ? this.bottomText[1] : this.bottomText[0]; - this.bottom.style.background = cc.background; // + this.bottom.style.background = cc.background; + + // this.parent = o.parent !== undefined ? o.parent : null; this.parent = o.target !== undefined ? o.target : this.parent; - if (this.parent === null && !this.isCanvas) { this.parent = document.body; } - if (this.parent !== null) this.parent.appendChild(this.content); if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - if (!this.isCanvasOnly) { this.content.style.pointerEvents = 'auto'; } else { this.content.style.left = '0px'; this.content.style.right = 'auto'; o.transition = 0; - } // height transition - + } + // height transition this.transition = o.transition !== undefined ? o.transition : Tools.transition; if (this.transition) setTimeout(this.addTransition.bind(this), 1000); this.setWidth(); if (this.isCanvas) this.makeCanvas(); Roots.add(this); } - + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN + }); + } + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN + }); + } + triggerMouseUp(x, y) { + /* + clientX,clientY are no used when isCanvas==true + */ + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN + }); + } setTop(t, h) { this.content.style.top = t + 'px'; if (h !== undefined) this.forceHeight = h; this.calc(); Roots.needReZone = true; } - addTransition() { if (this.transition && !this.isCanvas) { this.innerContent.style.transition = 'height ' + this.transition + 's ease-out'; this.content.style.transition = 'height ' + this.transition + 's ease-out'; - this.bottom.style.transition = 'top ' + this.transition + 's ease-out'; //this.bottom.addEventListener("transitionend", Roots.resize, true); + this.bottom.style.transition = 'top ' + this.transition + 's ease-out'; + //this.bottom.addEventListener("transitionend", Roots.resize, true); } - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } // ---------------------- + } + + // ---------------------- // CANVAS // ---------------------- - onDraw() {} - makeCanvas() { this.canvas = document.createElementNS('http://www.w3.org/1999/xhtml', "canvas"); this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; //console.log( this.canvas.width, this.canvas.height ) - } + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + //console.log( this.canvas.width, this.canvas.height ) + } draw(force) { if (this.canvas === null) return; let w = this.zone.w; let h = this.forceHeight ? this.forceHeight : this.zone.h; Roots.toCanvas(this, w, h, force); - } ////// + } + ////// getDom() { return this.content; } - noMouse() { this.mouse.neg(); } - setMouse(uv, flip = true) { - if (flip) this.mouse.set(Math.round(uv.x * this.canvas.width), this.canvas.height - Math.round(uv.y * this.canvas.height));else this.mouse.set(Math.round(uv.x * this.canvas.width), Math.round(uv.y * this.canvas.height)); //this.mouse.set( m.x, m.y ); - } + if (flip) this.mouse.set(Math.round(uv.x * this.canvas.width), this.canvas.height - Math.round(uv.y * this.canvas.height));else this.mouse.set(Math.round(uv.x * this.canvas.width), Math.round(uv.y * this.canvas.height)); + //this.mouse.set( m.x, m.y ); + //console.log("setMouse "+uv.x+" "+uv.y) + } setConfig(o) { // reset to default text Tools.setText(); this.colors = Tools.defineColor(o); } - setColors(o) { for (let c in o) { if (this.colors[c]) this.colors[c] = o[c]; } } - setText(size, color, font, shadow) { Tools.setText(size, color, font, shadow); } - hide(b) { this.content.style.visibility = b ? 'hidden' : 'visible'; } - display(v = false) { this.content.style.visibility = v ? 'visible' : 'hidden'; } - onChange(f) { this.callback = f || null; return this; - } // ---------------------- + } + + // ---------------------- // STYLES // ---------------------- - mode(n) { let needChange = false; let cc = this.colors; - if (n !== this.cn) { this.cn = n; - switch (n) { case 'def': Roots.cursor(); @@ -7201,18 +6780,17 @@ this.bottom.style.background = cc.background; this.bottom.style.color = cc.text; break; - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; case 'scrollOver': Roots.cursor('ns-resize'); this.scroll.style.background = cc.select; break; - case 'scrollDown': this.scroll.style.background = cc.select; break; - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; case 'bottomOver': Roots.cursor('pointer'); this.bottom.style.background = cc.backgroundOver; @@ -7220,35 +6798,35 @@ break; //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; } - needChange = true; } - return needChange; - } // ---------------------- + } + + // ---------------------- // TARGET // ---------------------- - clearTarget() { if (this.current === -1) return false; - if (this.proto.s) { // if no s target is delete !! this.proto.uiout(); this.proto.reset(); } - this.proto = null; - this.current = -1; ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + this.current = -1; + + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); Roots.cursor(); return true; - } // ---------------------- + } + + // ---------------------- // ZONE TEST // ---------------------- - testZone(e) { let l = this.local; if (l.x === -1 && l.y === -1) return ''; @@ -7257,27 +6835,28 @@ let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = 'bottom';else name = l.x > s ? 'scroll' : 'content'; return name; - } // ---------------------- + } + + // ---------------------- // EVENTS // ---------------------- - handleEvent(e) { //if( this.cleanning ) return + + //console.log("Gui.handleEvent") + //console.log(e); let type = e.type; let change = false; let protoChange = false; let name = this.testZone(e); if (type === 'mouseup' && this.isDown) this.isDown = false; if (type === 'mousedown' && !this.isDown) this.isDown = true; - if (this.isDown && this.isNewTarget) { Roots.clearInput(); this.isNewTarget = false; } - if (!name) return; - switch (name) { case 'content': e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; @@ -7285,28 +6864,22 @@ if (this.proto) protoChange = this.proto.handleEvent(e); if (type === 'mousemove') change = this.mode('def'); if (type === 'wheel' && !protoChange && this.isScroll) change = this.onWheel(e); - if (!Roots.lock) { this.getNext(e, change); } - break; - case 'bottom': this.clearTarget(); if (type === 'mousemove') change = this.mode('bottomOver'); - if (type === 'mousedown') { this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen ? this.bottomText[1] : this.bottomText[0]; //this.setHeight(); - + this.bottom.textContent = this.isOpen ? this.bottomText[1] : this.bottomText[0]; + //this.setHeight(); this.calc(); this.mode('def'); change = true; } - break; - case 'scroll': this.clearTarget(); if (type === 'mousemove') change = this.mode('scrollOver'); @@ -7315,58 +6888,60 @@ if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); break; } - if (this.isDown) change = true; if (protoChange) change = true; if (type === 'keyup') change = true; if (type === 'keydown') change = true; if (change) this.draw(); } - getNext(e, change) { let next = Roots.findTarget(this.uis, e); - if (next !== this.current) { this.clearTarget(); this.current = next; this.isNewTarget = true; } - if (next !== -1) { this.proto = this.uis[this.current]; this.proto.uiover(); } } - onWheel(e) { this.oy += 20 * e.delta; this.update(this.oy); return true; - } // ---------------------- + } + + // ---------------------- // RESET // ---------------------- - reset(force) { - if (this.isReset) return; //this.resetItem(); + if (this.isReset) return; + + //this.resetItem(); this.mouse.neg(); - this.isDown = false; //Roots.clearInput(); + this.isDown = false; + //Roots.clearInput(); let r = this.mode('def'); let r2 = this.clearTarget(); if (r || r2) this.draw(true); - this.isReset = true; //Roots.lock = false; - } // ---------------------- + this.isReset = true; + + //Roots.lock = false; + } + + // ---------------------- // ADD NODE // ---------------------- - add() { //if(this.cleanning) this.cleanning = false + let a = arguments; let ontop = false; - if (typeof a[1] === 'object') { a[1].isUI = true; a[1].main = this; @@ -7377,107 +6952,101 @@ main: this });else { a[2].isUI = true; - a[2].main = this; //ontop = a[1].ontop ? a[1].ontop : false; - + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; ontop = a[2].ontop ? a[2].ontop : false; } } - let u = add.apply(this, a); if (u === null) return; if (ontop) this.uis.unshift(u);else this.uis.push(u); this.calc(); this.isEmpty = false; return u; - } // remove one node + } + // remove one node remove(n) { if (n.dispose) n.dispose(); - } // call after uis clear + } + // call after uis clear clearOne(n) { let id = this.uis.indexOf(n); - if (id !== -1) { //this.calc( - (this.uis[ id ].h + 1 ) ); this.inner.removeChild(this.uis[id].c[0]); this.uis.splice(id, 1); this.calc(); } - } // clear all gui + } + // clear all gui empty() { //this.cleanning = true + //this.close(); - let i = this.uis.length, - item; + let i = this.uis.length, + item; while (i--) { item = this.uis.pop(); this.inner.removeChild(item.c[0]); item.dispose(); } - this.uis = []; this.isEmpty = true; this.calc(); } - clear() { this.empty(); } - clear2() { setTimeout(this.empty.bind(this), 0); } - dispose() { this.clear(); if (this.parent !== null) this.parent.removeChild(this.content); Roots.remove(this); - } // ---------------------- + } + + // ---------------------- // ITEMS SPECIAL // ---------------------- - resetItem() { if (!this.isItemMode) return; let i = this.uis.length; - while (i--) this.uis[i].selected(); } - setItem(name) { if (!this.isItemMode) return; name = name || ''; this.resetItem(); - if (!name) { this.update(0); return; } - let i = this.uis.length; - while (i--) { if (this.uis[i].value === name) { this.uis[i].selected(true); if (this.isScroll) this.update(i * (this.uis[i].h + this.margin) * this.ratio); } } - } // ---------------------- + } + + // ---------------------- // SCROLL // ---------------------- - upScroll(b) { this.sw = b ? this.size.s : 0; this.oy = b ? this.oy : 0; this.scrollBG.style.display = b ? 'block' : 'none'; - if (b) { this.total = this.h; this.maxView = this.maxHeight; @@ -7488,42 +7057,37 @@ this.scrollBG.style.height = this.maxView + 'px'; this.scroll.style.height = this.sh + 'px'; } - this.setItemWidth(this.zone.w - this.sw); this.update(this.oy); } - update(y) { y = Tools.clamp(y, 0, this.range); this.decal = Math.floor(y / this.ratio); this.inner.style.top = -this.decal + 'px'; this.scroll.style.top = Math.floor(y) + 'px'; this.oy = y; - } // ---------------------- + } + + // ---------------------- // RESIZE FUNCTION // ---------------------- - calcUis() { return Roots.calcUis(this.uis, this.zone, this.zone.y); } - calc() { clearTimeout(this.tmp); this.tmp = setTimeout(this.setHeight.bind(this), 10); } - setHeight() { if (this.tmp) clearTimeout(this.tmp); this.zone.h = this.bh; this.isScroll = false; - if (this.isOpen) { this.h = this.calcUis(); let hhh = this.forceHeight ? this.forceHeight + this.zone.y : window.innerHeight; this.maxHeight = hhh - this.zone.y - this.bh; let diff = this.h - this.maxHeight; - if (diff > 1) { this.isScroll = true; this.zone.h = this.maxHeight + this.bh; @@ -7531,7 +7095,6 @@ this.zone.h = this.h + this.bh; } } - this.upScroll(this.isScroll); this.innerContent.style.height = this.zone.h - this.bh + 'px'; this.content.style.height = this.zone.h + 'px'; @@ -7539,11 +7102,9 @@ if (this.forceHeight && this.lockHeight) this.content.style.height = this.forceHeight + 'px'; if (this.isCanvas) this.draw(true); } - rezone() { Roots.needReZone = true; } - setWidth(w) { if (w) this.zone.w = w; this.zone.w = Math.floor(this.zone.w); @@ -7551,16 +7112,13 @@ if (this.isCenter) this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + 'px'; this.setItemWidth(this.zone.w - this.sw); } - setItemWidth(w) { let i = this.uis.length; - while (i--) { this.uis[i].setSize(w); this.uis[i].rSize(); } } - } exports.Files = Files; @@ -7571,4 +7129,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); -}))); +})); diff --git a/build/uil.min.js b/build/uil.min.js index 04c65b1..a35f045 100644 --- a/build/uil.min.js +++ b/build/uil.min.js @@ -3,4 +3,4 @@ * Copyright 2010-2021 Uil.js Authors * SPDX-License-Identifier: MIT */ -!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?s(exports):"function"==typeof define&&define.amd?define(["exports"],s):s((t="undefined"!=typeof globalThis?globalThis:t||self).UIL={})}(this,(function(t){"use strict";const s={ui:[],dom:null,ID:null,lock:!1,wlock:!1,current:-1,needReZone:!0,needResize:!1,forceZone:!1,isEventsInit:!1,isLeave:!1,downTime:0,prevTime:0,prevDefault:["contextmenu"],pointerEvent:["pointerdown","pointermove","pointerup"],eventOut:["pointercancel","pointerout","pointerleave"],xmlserializer:null,tmpTime:null,tmpImage:null,oldCursor:"auto",input:null,parent:null,firstImput:!0,hiddenImput:null,hiddenSizer:null,hasFocus:!1,startInput:!1,inputRange:[0,0],cursorId:0,str:"",pos:0,startX:-1,moveX:-1,debugInput:!1,isLoop:!1,listens:[],e:{type:null,clientX:0,clientY:0,keyCode:NaN,key:null,delta:0},isMobile:!1,now:null,getTime:function(){return self.performance&&self.performance.now?self.performance.now.bind(performance):Date.now},add:function(t){s.ui.push(t),s.getZone(t),s.isEventsInit||s.initEvents()},testMobile:function(){let t=navigator.userAgent;return!!(t.match(/Android/i)||t.match(/webOS/i)||t.match(/iPhone/i)||t.match(/iPad/i)||t.match(/iPod/i)||t.match(/BlackBerry/i)||t.match(/Windows Phone/i))},remove:function(t){let i=s.ui.indexOf(t);-1!==i&&(s.removeListen(t),s.ui.splice(i,1)),0===s.ui.length&&s.removeEvents()},initEvents:function(){if(s.isEventsInit)return;let t=document.body;s.isMobile=s.testMobile(),s.now=s.getTime(),s.isMobile?t.style.touchAction="none":t.addEventListener("wheel",s,{passive:!1}),t.addEventListener("pointercancel",s),t.addEventListener("pointerleave",s),t.addEventListener("pointermove",s),t.addEventListener("pointerdown",s),t.addEventListener("pointerup",s),t.addEventListener("keydown",s,!1),t.addEventListener("keyup",s,!1),window.addEventListener("resize",s.resize,!1),s.isEventsInit=!0,s.dom=t},removeEvents:function(){if(!s.isEventsInit)return;let t=document.body;s.isMobile||t.removeEventListener("wheel",s),t.removeEventListener("pointercancel",s),t.removeEventListener("pointerleave",s),t.removeEventListener("pointermove",s),t.removeEventListener("pointerdown",s),t.removeEventListener("pointerup",s),t.removeEventListener("keydown",s),t.removeEventListener("keyup",s),window.removeEventListener("resize",s.resize),s.isEventsInit=!1},resize:function(){let t,i=s.ui.length;for(;i--;)t=s.ui[i],t.isGui&&!t.isCanvasOnly&&t.autoResize&&t.calc();s.needReZone=!0,s.needResize=!1},out:function(){console.log("im am out"),s.clearOldID()},in:function(){console.log("im am in")},fakeUp:function(){this.handleEvent({type:"pointerup"})},handleEvent:function(t){-1!==s.prevDefault.indexOf(t.type)&&t.preventDefault(),s.needResize&&s.resize(),s.findZone(s.forceZone);let i=s.e,e=!1;"keydown"===t.type&&s.keydown(t),"keyup"===t.type&&s.keyup(t),"wheel"===t.type?i.delta=t.deltaY>0?1:-1:i.delta=0;let h=t.pointerType;if(i.clientX=("touch"===h?t.pageX:t.clientX)||0,i.clientY=("touch"===h?t.pageY:t.clientY)||0,i.type=t.type,-1!==s.eventOut.indexOf(t.type)&&(e=!0,i.type="mouseup"),"pointerleave"===t.type&&(s.isLeave=!0),"pointerdown"===t.type&&(i.type="mousedown"),"pointerup"===t.type&&(i.type="mouseup"),"pointermove"===t.type&&(s.isLeave&&(s.isLeave=!1,s.resize()),i.type="mousemove"),"mousedown"===i.type){if(s.downTime=s.now(),s.downTime-s.prevTime<200)return s.selectAll(),!1;s.prevTime=s.downTime,s.forceZone=!1}"mousedown"===i.type&&s.clearInput(),"mousedown"===i.type&&(s.lock=!0),"mouseup"===i.type&&(s.lock=!1),s.isMobile&&"mousedown"===i.type&&s.findID(i),"mousemove"!==i.type||s.lock||s.findID(i),null!==s.ID&&(s.ID.isCanvasOnly&&(i.clientX=s.ID.mouse.x,i.clientY=s.ID.mouse.y),s.ID.handleEvent(i)),s.isMobile&&"mouseup"===i.type&&s.clearOldID(),e&&s.clearOldID()},findID:function(t){let i,e,h,o=s.ui.length,n=-1;for(;o--;)if(i=s.ui[o],i.isCanvasOnly?(e=i.mouse.x,h=i.mouse.y):(e=t.clientX,h=t.clientY),s.onZone(i,e,h)){n=o,n!==s.current&&(s.clearOldID(),s.current=n,s.ID=i);break}-1===n&&s.clearOldID()},clearOldID:function(){s.ID&&(s.current=-1,s.ID.reset(),s.ID=null,s.cursor())},calcUis:(t,i,e,h=!1)=>{let o,n,r,l=t.length,a=0,c=0,d=0;for(;l--;)o=t[c],c++,!h&&o.isGroup&&o.calcUis(),r=o.margin,o.zone.w=o.w,o.zone.h=o.h+r,o.autoWidth?(a=0,o.zone.x=i.x+o.dx,o.zone.y=e,e+=o.h+r,d+=o.h+r):(0===a&&(d+=o.h+r),o.zone.x=i.x+a,o.zone.y=e,n=s.getWidth(o),n?o.zone.w=o.w=n:o.fw&&(o.zone.w=o.w=o.fw),a+=o.zone.w,a>=i.w&&(e+=o.h+r,a=0));return d},findTarget:function(t,i){let e=t.length;for(;e--;)if(s.onZone(t[e],i.clientX,i.clientY))return e;return-1},findZone:function(t){if(s.needReZone||t){for(var i,e=s.ui.length;e--;)i=s.ui[e],s.getZone(i),i.isGui&&i.calcUis();s.needReZone=!1}},onZone:function(t,s,i){if(void 0===s||void 0===i)return!1;let e=t.zone,h=s-e.x,o=i-e.y,n=h>=0&&o>=0&&h<=e.w&&o<=e.h;return n?t.local.set(h,o):t.local.neg(),n},getWidth:function(t){return t.getDom().clientWidth},getZone:function(t){if(t.isCanvasOnly)return;let s=t.getDom().getBoundingClientRect();t.zone={x:s.left,y:s.top,w:s.width,h:s.height}},cursor:function(t){(t=t||"auto")!==s.oldCursor&&(document.body.style.cursor=t,s.oldCursor=t)},toCanvas:function(t,i,e,h){if(s.xmlserializer||(s.xmlserializer=new XMLSerializer),h&&null!==s.tmpTime&&(clearTimeout(s.tmpTime),s.tmpTime=null),null!==s.tmpTime)return;s.lock&&(s.tmpTime=setTimeout((function(){s.tmpTime=null}),10));let o=!1;i===t.canvas.width&&e===t.canvas.height||(o=!0),null===s.tmpImage&&(s.tmpImage=new Image);let n=s.tmpImage,r=s.xmlserializer.serializeToString(t.content),l=''+r+"";n.onload=function(){let s=t.canvas.getContext("2d");o?(t.canvas.width=i,t.canvas.height=e):s.clearRect(0,0,i,e),s.drawImage(this,0,0),t.onDraw()},n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(l),n.crossOrigin=""},setHidden:function(){null===s.hiddenImput&&(s.hiddenImput=document.createElement("input"),s.hiddenImput.type="text",s.hiddenSizer=document.createElement("div"),document.body.appendChild(s.hiddenImput),document.body.appendChild(s.hiddenSizer));let t=s.debugInput?"":"opacity:0; zIndex:0;",i=s.parent.css.txtselect+"padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;"+t;s.hiddenImput.style.cssText=i+"bottom:10px;"+(s.debugInput?"":"transform:scale(0);"),s.hiddenSizer.style.cssText=i+"bottom:40px;",s.hiddenImput.style.width=s.input.clientWidth+"px",s.hiddenImput.value=s.str,s.hiddenSizer.innerHTML=s.str,s.hasFocus=!0},clearHidden:function(t){null!==s.hiddenImput&&(s.hasFocus=!1)},clickPos:function(t){let i=s.str.length,e=0,h=0;for(;i--&&(e+=s.textWidth(s.str[h]),!(e>=t));)h++;return h},upInput:function(t,i){if(null===s.parent)return!1;let e=!1;if(i){let i=s.clickPos(t);if(s.moveX=i,-1===s.startX)s.startX=i,s.cursorId=i,s.inputRange=[s.startX,s.startX];else{s.moveX!==s.startX&&(s.startX>s.moveX?s.inputRange=[s.moveX,s.startX]:s.inputRange=[s.startX,s.moveX])}e=!0}else-1!==s.startX&&(s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.startX=-1,e=!0);return e&&s.selectParent(),e},selectAll:function(){s.parent&&(s.str=s.input.textContent,s.inputRange=[0,s.str.length],s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.cursorId=s.inputRange[1],s.selectParent())},selectParent:function(){var t=s.textWidth(s.str.substring(0,s.cursorId)),i=s.textWidth(s.str.substring(0,s.inputRange[0])),e=s.textWidth(s.str.substring(s.inputRange[0],s.inputRange[1]));s.parent.select(t,i,e,s.hiddenSizer.innerHTML)},textWidth:function(t){return null===s.hiddenSizer?0:(t=t.replace(/ /g," "),s.hiddenSizer.innerHTML=t,s.hiddenSizer.clientWidth)},clearInput:function(){null!==s.parent&&(s.firstImput||s.parent.validate(!0),s.clearHidden(),s.parent.unselect(),s.input.style.background=s.parent.colors.back,s.input.style.borderColor=s.parent.colors.border,s.parent.isEdit=!1,s.input=null,s.parent=null,s.str="",s.firstImput=!0)},setInput:function(t,i){s.clearInput(),s.input=t,s.parent=i,s.input.style.background=s.parent.colors.backoff,s.input.style.borderColor=s.parent.colors.select,s.str=s.input.textContent,s.setHidden()},keydown:function(t){if(null===s.parent)return;let i=t.which;t.shiftKey,s.firstImput=!1,s.hasFocus&&(window.focus(),s.hiddenImput.focus()),s.parent.isEdit=!0,13===i?s.clearInput():s.input.isNum?t.keyCode>47&&t.keyCode<58||t.keyCode>95&&t.keyCode<106||190===t.keyCode||110===t.keyCode||8===t.keyCode||109===t.keyCode?s.hiddenImput.readOnly=!1:s.hiddenImput.readOnly=!0:s.hiddenImput.readOnly=!1},keyup:function(t){null!==s.parent&&(s.str=s.hiddenImput.value,s.parent.allEqual?s.parent.sameStr(s.str):s.input.textContent=s.str,s.cursorId=s.hiddenImput.selectionStart,s.inputRange=[s.hiddenImput.selectionStart,s.hiddenImput.selectionEnd],s.selectParent(),s.parent.validate())},loop:function(){s.isLoop&&requestAnimationFrame(s.loop),s.update()},update:function(){let t=s.listens.length;for(;t--;)s.listens[t].listening()},removeListen:function(t){let i=s.listens.indexOf(t);-1!==i&&s.listens.splice(i,1),0===s.listens.length&&(s.isLoop=!1)},addListen:function(t){return-1===s.listens.indexOf(t)&&(s.listens.push(t),s.isLoop||(s.isLoop=!0,s.loop()),!0)}},i=s,e={transition:.2,frag:document.createDocumentFragment(),colorRing:null,joystick_0:null,joystick_1:null,circular:null,knob:null,pad2d:null,svgns:"http://www.w3.org/2000/svg",links:"http://www.w3.org/1999/xlink",htmls:"http://www.w3.org/1999/xhtml",DOM_SIZE:["height","width","top","left","bottom","right","margin-left","margin-right","margin-top","margin-bottom"],SVG_TYPE_D:["pattern","defs","transform","stop","animate","radialGradient","linearGradient","animateMotion","use","filter","feColorMatrix"],SVG_TYPE_G:["svg","rect","circle","path","polygon","text","g","line","foreignObject"],PI:Math.PI,TwoPI:2*Math.PI,pi90:.5*Math.PI,pi60:Math.PI/3,torad:Math.PI/180,todeg:180/Math.PI,clamp:(t,s,i)=>t=(t=ti?i:t,isDivid:t=>.5*t===Math.floor(.5*t),size:{w:240,h:20,p:30,s:8},defineColor:(t,s=e.colors)=>{let i={...s},h=["fontFamily","fontWeight","fontShadow","fontSize"],o=!1;t.font&&(t.fontFamily=t.font),t.shadow&&(t.fontShadow=t.shadow),t.weight&&(t.fontWeight=t.weight),t.fontColor&&(t.text=t.fontColor),t.color&&(t.text=t.color),t.text&&(i.text=t.text,t.fontColor||t.color||(i.title=e.ColorLuma(t.text,-.25),i.titleoff=e.ColorLuma(t.text,-.5)),i.textOver=e.ColorLuma(t.text,.25),i.textSelect=e.ColorLuma(t.text,.5)),t.button&&(i.button=t.button,i.border=e.ColorLuma(t.button,.1),i.overoff=e.ColorLuma(t.button,.2)),t.select&&(i.select=t.select,i.over=e.ColorLuma(t.select,-.1)),t.itemBg&&(t.back=t.itemBg),t.back&&(i.back=t.back,i.backoff=e.ColorLuma(t.back,-.1)),t.fontSelect&&(i.textSelect=t.fontSelect),t.groupBorder&&(i.gborder=t.groupBorder),t.bgOver&&(i.backgroundOver=t.bgOver);for(let s in i)void 0!==t[s]&&(i[s]=t[s]);for(let s in t)-1!==h.indexOf(s)&&(o=!0);return o&&e.defineText(i),i},colors:{sx:4,sy:2,radius:2,showOver:1,content:"none",background:"rgba(50,50,50,0.15)",backgroundOver:"rgba(50,50,50,0.3)",title:"#CCC",titleoff:"#BBB",text:"#DDD",textOver:"#EEE",textSelect:"#FFF",back:"rgba(0,0,0,0.2)",backoff:"rgba(0,0,0,0.3)",border:"#4c4c4c",borderSize:1,gborder:"none",groups:"none",button:"#3c3c3c",overoff:"#5c5c5c",over:"#024699",select:"#308AFF",action:"#FF3300",fontFamily:"Consolas, monospace",fontWeight:"normal",fontShadow:"none",fontSize:12,joyOver:"rgba(48,138,255,0.25)",joyOut:"rgba(100,100,100,0.5)",joySelect:"#308AFF",hide:"rgba(0,0,0,0)"},css:{basic:"position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; -o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;",button:"display:flex; align-items:center; justify-content:center; text-align:center;",middle:"display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;"},svgs:{g1:"M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z",g2:"M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z",group:"M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z",arrow:"M 3 8 L 8 5 3 2 3 8 Z",arrowDown:"M 5 8 L 8 3 2 3 5 8 Z",arrowUp:"M 5 2 L 2 7 8 7 5 2 Z",solid:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z",body:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z",vehicle:"M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z",articulation:"M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z",character:"M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z",terrain:"M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z",joint:"M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z",ray:"M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z",collision:"M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z",map:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",material:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",texture:"M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z",object:"M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z",none:"M 9 5 L 5 5 5 9 9 9 9 5 Z",cursor:"M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z",load:"M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z",save:"M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z",extern:"M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z"},rezone(){i.needReZone=!0},getImput:function(){return!!i.input},setStyle:function(t){for(var s in t)e.colors[s]&&(e.colors[s]=t[s]);e.setText()},defineText:function(t){e.setText(t.fontSize,t.text,t.fontFamily,t.fontShadow,t.fontWeight)},setText:function(t,s,i,h,o){let n=e.colors;void 0===i&&(i=n.fontFamily),void 0===t&&(t=n.fontSize),void 0===h&&(h=n.fontShadow),void 0===o&&(o=n.fontWeight),void 0===s&&(s=n.text),isNaN(t)?-1===t.search("em")&&(t+="px"):t+="px",e.css.txt=e.css.basic+e.css.middle+" font-family:"+i+"; font-weight:"+o+"; font-size:"+t+"; color:"+n.text+"; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;","none"!==h&&(e.css.txt+=" text-shadow: 1px 1px 1px "+h+";"),e.css.txtselect=e.css.txt+"padding:0px 4px; border:1px dashed "+n.border+";",e.css.item=e.css.txt+"padding:0px 4px; position:relative; margin-bottom:1px; "},cloneCss:function(){return{...e.css}},clone:function(t){return t.cloneNode(!0)},setSvg:function(t,s,i,e,h){-1===e?t.setAttributeNS(null,s,i):void 0!==h?t.childNodes[e||0].childNodes[h||0].setAttributeNS(null,s,i):t.childNodes[e||0].setAttributeNS(null,s,i)},setCss:function(t,s){for(let i in s)-1!==e.DOM_SIZE.indexOf(i)?t.style[i]=s[i]+"px":t.style[i]=s[i]},set:function(t,s){for(let i in s)"txt"===i&&(t.textContent=s[i]),"link"===i?t.setAttributeNS(e.links,"xlink:href",s[i]):t.setAttributeNS(null,i,s[i])},get:function(t,s){if(void 0===s)return t;if(!isNaN(s))return t.childNodes[s];if(s instanceof Array){if(2===s.length)return t.childNodes[s[0]].childNodes[s[1]];if(3===s.length)return t.childNodes[s[0]].childNodes[s[1]].childNodes[s[2]]}},dom:function(t,s,i,h,o){return t=t||"div",-1!==e.SVG_TYPE_D.indexOf(t)||-1!==e.SVG_TYPE_G.indexOf(t)?"svg"===t?(h=document.createElementNS(e.svgns,"svg"),e.set(h,i)):(void 0===h&&(h=document.createElementNS(e.svgns,"svg")),e.addAttributes(h,t,i,o)):h=void 0===h?document.createElementNS(e.htmls,t):h.appendChild(document.createElementNS(e.htmls,t)),s&&(h.style.cssText=s),void 0===o?h:h.childNodes[o||0]},addAttributes:function(t,s,i,h){let o=document.createElementNS(e.svgns,s);return e.set(o,i),e.get(t,h).appendChild(o),-1!==e.SVG_TYPE_G.indexOf(s)&&(o.style.pointerEvents="none"),o},clear:function(t){for(e.purge(t);t.firstChild;)t.firstChild.firstChild&&e.clear(t.firstChild),t.removeChild(t.firstChild)},purge:function(t){let s,i,h=t.attributes;if(h)for(s=h.length;s--;)i=h[s].name,"function"==typeof t[i]&&(t[i]=null);if(h=t.childNodes,h)for(s=h.length;s--;)e.purge(t.childNodes[s])},addSVGGlowEffect:function(){if(null!==document.getElementById("UILGlow"))return;let t=e.initUILEffects(),s=e.addAttributes(t,"filter",{id:"UILGlow",x:"-20%",y:"-20%",width:"140%",height:"140%"});e.addAttributes(s,"feGaussianBlur",{in:"SourceGraphic",stdDeviation:"3",result:"uilBlur"});let i=e.addAttributes(s,"feMerge",{});for(let t=0;t<=3;t++)e.addAttributes(i,"feMergeNode",{in:"uilBlur"});e.addAttributes(i,"feMergeNode",{in:"SourceGraphic"})},initUILEffects:function(){let t=document.getElementById("UILSVGEffects");return null===t&&(t=e.dom("svg",void 0,{id:"UILSVGEffects",width:"0",height:"0"}),document.body.appendChild(t)),t},ColorLuma:function(t,s){"n"===t&&(t="#000"),(t=String(t).replace(/[^0-9a-f]/gi,"")).length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),s=s||0;let i,e,h="#";for(e=0;e<3;e++)i=parseInt(t.substr(2*e,2),16),i=Math.round(Math.min(Math.max(0,i+i*s),255)).toString(16),h+=("00"+i).substr(i.length);return h},findDeepInver:function(t){return.3*t[0]+.59*t[1]+.11*t[2]<=.6},lerpColor:function(t,s,i){let e={};for(let h=0;h<3;h++)e[h]=t[h]+(s[h]-t[h])*i;return e},hexToHtml:function(t){return"#"+("000000"+(t=void 0===t?0:t).toString(16)).substr(-6)},htmlToHex:function(t){return t.toUpperCase().replace("#","0x")},u255:function(t,s){return parseInt(t.substring(s,s+2),16)/255},u16:function(t,s){return parseInt(t.substring(s,s+1),16)/15},unpack:function(t){return 7==t.length?[e.u255(t,1),e.u255(t,3),e.u255(t,5)]:4==t.length?[e.u16(t,1),e.u16(t,2),e.u16(t,3)]:void 0},p255:function(t){let s=Math.round(255*t).toString(16);return s.length<2&&(s="0"+s),s},pack:function(t){return"#"+e.p255(t[0])+e.p255(t[1])+e.p255(t[2])},htmlRgb:function(t){return"rgb("+Math.round(255*t[0])+","+Math.round(255*t[1])+","+Math.round(255*t[2])+")"},pad:function(t){return 1==t.length&&(t="0"+t),t},rgbToHex:function(t){let s=Math.round(255*t[0]).toString(16),i=Math.round(255*t[1]).toString(16),h=Math.round(255*t[2]).toString(16);return"#"+e.pad(s)+e.pad(i)+e.pad(h)},hueToRgb:function(t,s,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(s-t)*i:i<.5?s:i<2/3?t+6*(s-t)*(2/3-i):t},rgbToHsl:function(t){let s=t[0],i=t[1],e=t[2],h=Math.min(s,i,e),o=Math.max(s,i,e),n=o-h,r=0,l=0,a=(h+o)/2;return a>0&&a<1&&(l=n/(a<.5?2*a:2-2*a)),n>0&&(o==s&&o!=i&&(r+=(i-e)/n),o==i&&o!=e&&(r+=2+(e-s)/n),o==e&&o!=s&&(r+=4+(s-i)/n),r/=6),[r,l,a]},hslToRgb:function(t){let s,i,h=t[0],o=t[1],n=t[2];return 0===o?[n,n,n]:(i=n<=.5?n*(o+1):n+o-n*o,s=2*n-i,[e.hueToRgb(s,i,h+.33333),e.hueToRgb(s,i,h),e.hueToRgb(s,i,h-.33333)])},makeGradiant:function(t,s,i,h){e.dom(t,null,s,i,0);let o,n=i.childNodes[0].childNodes.length-1;for(let t=0;t0){for(a=6;a--;)r[a]=(113*r[a]+u).toFixed(2);c=" M"+r[0]+" "+r[1]+" Q"+r[2]+" "+r[3]+" "+r[4]+" "+r[5],d=[[0,g[0],1],[100,g[1],1]],e.makeGradiant("linearGradient",{id:"G"+l,x1:r[0],y1:r[1],x2:r[4],y2:r[5],gradientUnits:"userSpaceOnUse"},s,d),e.dom("path","",{d:c,"stroke-width":30,stroke:"url(#G"+l+")","stroke-linecap":"butt"},s,1)}m=n-p,g[0]=g[1]}d=[[0,"#FFFFFF",1],[50,"#FFFFFF",0],[50,"#000000",0],[100,"#000000",1]],e.makeGradiant("linearGradient",{id:"GL0",x1:0,y1:u-84.9,x2:0,y2:212.9,gradientUnits:"userSpaceOnUse"},s,d),d=[[0,"#7f7f7f",1],[50,"#7f7f7f",.5],[100,"#7f7f7f",0]],e.makeGradiant("linearGradient",{id:"GL1",x1:78.95,y1:0,x2:226,y2:0,gradientUnits:"userSpaceOnUse"},s,d),e.dom("g",null,{"transform-origin":"128px 128px",transform:"rotate(0)"},s),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"red"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL1)","stroke-width":1,stroke:"url(#GL1)"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL0)","stroke-width":1,stroke:"url(#GL0)"},s,2),e.dom("path","",{d:"M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z",fill:"none","stroke-width":2,stroke:"#000"},s,2),e.dom("circle","",{cx:128,cy:128,r:6,"stroke-width":2,stroke:"#000",fill:"none"},s),e.colorRing=s},icon:function(t,s,i){i=i||40;let h=[""];switch(t){case"logo":h[1]="";break;case"donate":h[1]="";break;case"neo":h[1]="";break;case"phy":h[1]="";break;case"config":h[1]="";break;case"github":h[1]="";break;case"save":h[1]=""}return h[2]="",h.join("\n")},logoFill_d:"\n\t\tM 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 \n\t\tL 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 \n\t\tM 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 \n\t\tQ 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z\n\t\t",logo_github:"\n\t\tM 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 \n\t\t159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 \n\t\t216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 \n\t\t166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 \n\t\t82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z\n\t\t",logo_neo:"\n\t\tM 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 \n\t\t60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 \n\t\t186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 \n\t\t67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L \n\t\t134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z\n\t\t",logo_phy:"\n\t\tM 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 \n\t\tQ 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95\n\t\t",logo_config:"\n\t\tM 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 \n\t\tL 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 \n\t\tQ 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75\n\t\t",logo_donate:"\n\t\tM 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 \n\t\t106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 \n\t\t112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 \n\t\t154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 \n\t\t194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 \n\t\tQ 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 \n\t\t83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 \n\t\t94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 \n\t\t149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M \n\t\t66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 \n\t\t72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 \n\t\t54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 \n\t\t197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 \n\t\t200.9 187.5 200.9 187.5 195.35 Z\n\t\t"};e.setText();const h=e;class o{static autoTypes(t){let s=[];switch(t){case"svg":s=[{accept:{"image/svg+xml":".svg"}}];break;case"wav":s=[{accept:{"audio/wav":".wav"}}];break;case"mp3":s=[{accept:{"audio/mpeg":".mp3"}}];break;case"mp4":s=[{accept:{"video/mp4":".mp4"}}];break;case"bin":case"hex":s=[{description:"Binary Files",accept:{"application/octet-stream":[".bin",".hex"]}}];break;case"text":s=[{description:"Text Files",accept:{"text/plain":[".txt",".text"],"text/html":[".html",".htm"]}}];break;case"json":s=[{description:"JSON Files",accept:{"application/json":[".json"]}}];break;case"js":s=[{description:"JavaScript Files",accept:{"text/javascript":[".js"]}}];break;case"image":s=[{description:"Images",accept:{"image/*":[".png",".gif",".jpeg",".jpg"]}}];break;case"icon":s=[{description:"Icons",accept:{"image/x-ico":[".ico"]}}];break;case"lut":s=[{description:"Lut",accept:{"text/plain":[".cube",".3dl"]}}]}return s}static async load(t={}){"function"!=typeof window.showOpenFilePicker&&(window.showOpenFilePicker=o.showOpenFilePickerPolyfill);try{let s=t.type||"";const i={excludeAcceptAllOption:!!s,multiple:!1};i.types=o.autoTypes(s);const e=await window.showOpenFilePicker(i),h=await e[0].getFile();if(!h)return null;let n=h.name,r=n.substring(n.lastIndexOf(".")+1,n.length);const l=["png","jpg","jpeg","mp4","webm","ogg","mp3"],a=["sea","z","hex","bvh","BVH","glb","gltf"],c=new FileReader;-1!==l.indexOf(r)?c.readAsDataURL(h):-1!==a.indexOf(r)?c.readAsArrayBuffer(h):c.readAsText(h),c.onload=function(i){let e=i.target.result;switch(s){case"image":let s=new Image;s.onload=function(){t.callback&&t.callback(s,n,r)},s.src=e;break;case"json":t.callback&&t.callback(JSON.parse(e),n,r);break;default:t.callback&&t.callback(e,n,r)}}}catch(s){console.log(s),t.always&&t.callback&&t.callback(null)}}static showOpenFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("input");i.type="file",i.multiple=t.multiple,i.accept=t.types.map((t=>t.accept)).flatMap((t=>Object.keys(t).flatMap((s=>t[s])))).join(","),i.addEventListener("change",(()=>{s([...i.files].map((t=>({getFile:async()=>new Promise((s=>{s(t)}))}))))})),i.click()}))}static async save(t={}){let s=!1;"function"!=typeof window.showSaveFilePicker&&(window.showSaveFilePicker=o.showSaveFilePickerPolyfill,s=!0);try{let i=t.type||"";const e={suggestedName:t.name||"hello",data:t.data||""};e.types=o.autoTypes(i),e.finalType=Object.keys(e.types[0].accept)[0],e.suggestedName+=e.types[0].accept[e.finalType][0];const h=await window.showSaveFilePicker(e);if(s)return;const n=await h.createWritable();let r=new Blob([e.data],{type:e.finalType});await n.write(r),await n.close()}catch(t){console.log(t)}}static showSaveFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("a");i.download=t.suggestedName||"my-file.txt";let e=new Blob([t.data],{type:t.finalType});i.href=URL.createObjectURL(e),i.addEventListener("click",(()=>{s(setTimeout((()=>URL.revokeObjectURL(i.href)),1e3))})),i.click()}))}static async getFolder(){try{const t=await window.showDirectoryPicker(),s=[];for await(const i of t.values()){const t=await i.getFile();s.push(t)}return console.log(s),s}catch(t){console.log(t)}}}class n{constructor(t=0,s=0){this.x=t,this.y=s}set(t,s){return this.x=t,this.y=s,this}divide(t){return this.x/=t.x,this.y/=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divideScalar(t){return this.multiplyScalar(1/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}angle(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t}addScalar(t){return this.x+=t,this.y+=t,this}negate(){return this.x*=-1,this.y*=-1,this}neg(){return this.x=-1,this.y=-1,this}isZero(){return 0===this.x&&0===this.y}copy(t){return this.x=t.x,this.y=t.y,this}equals(t){return t.x===this.x&&t.y===this.y}nearEquals(t,s){return t.x.toFixed(s)===this.x.toFixed(s)&&t.y.toFixed(s)===this.y.toFixed(s)}lerp(t,s){return null===t?(this.x-=this.x*s,this.y-=this.y*s):(this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s),this}}class r{constructor(t={}){this.lock=t.lock||!1,this.neverlock=!1,this.isSpace=t.isSpace||!1,this.main=t.main||null,this.isUI=t.isUI||!1,this.group=t.group||null,this.isListen=!1,this.top=0,this.ytop=0,this.dx=t.dx||0,this.isSelectable=void 0!==t.selectable&&t.selectable,this.unselectable=void 0!==t.unselect?t.unselect:this.isSelectable,this.ontop=!!t.ontop&&t.ontop,this.css=this.main?this.main.css:h.css,this.colors=h.defineColor(t,this.main?this.group?this.group.colors:this.main.colors:h.colors),this.overEffect=this.colors.showOver,this.svgs=h.svgs,this.zone={x:0,y:0,w:0,h:0,d:0},this.local=(new n).neg(),this.isCanvasOnly=!1,this.isSelect=!1,this.p=void 0!==t.p?t.p:h.size.p,this.w=this.isUI?this.main.size.w:h.size.w,void 0!==t.w&&(this.w=t.w),this.h=this.isUI?this.main.size.h:h.size.h,void 0!==t.h&&(this.h=t.h),this.isSpace?this.lock=!0:this.h=this.h<11?11:this.h,this.fw=t.fw||0,this.autoWidth=t.auto||!0,this.isOpen=!1,this.radius=t.radius||this.colors.radius,this.transition=t.transition||h.transition,this.isNumber=!1,this.noNeg=t.noNeg||!1,this.allEqual=t.allEqual||!1,this.mono=!1,this.isEdit=!1,this.simple=t.simple||!1,this.simple&&(this.sa=0),this.setSize(this.w),void 0!==t.sa&&(this.sa=t.sa),void 0!==t.sb&&(this.sb=t.sb),this.simple&&(this.sb=this.w-this.sa),this.sc=void 0===t.sc?47:t.sc,this.objectLink=null,this.isSend=!1,this.objectKey=null,this.txt=t.name||"",this.name=t.rename||this.txt,this.target=t.target||null,this.callback=void 0===t.callback?null:t.callback,this.endCallback=null,this.openCallback=void 0===t.openCallback?null:t.openCallback,this.closeCallback=void 0===t.closeCallback?null:t.closeCallback,null===this.callback&&this.isUI&&null!==this.main.callback&&(this.callback=this.group?this.group.callback:this.main.callback),this.c=[],this.s=[],this.useFlex=!!this.isUI&&this.main.useFlex;let s=this.useFlex?"display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;":"float:left;";this.c[0]=h.dom("div",this.css.basic+s+"position:relative; height:20px;"),this.s[0]=this.c[0].style,this.margin=this.colors.sy,this.mtop=0;let i=h.isDivid(this.margin);if(this.isUI&&this.margin&&(this.s[0].boxSizing="content-box",i?(this.mtop=.5*this.margin,this.s[0].borderTop=this.mtop+"px solid transparent",this.s[0].borderBottom=this.mtop+"px solid transparent"):this.s[0].borderBottom=this.margin+"px solid transparent"),this.simple||(this.c[1]=h.dom("div",this.css.txt+this.css.middle),this.s[1]=this.c[1].style,this.c[1].textContent=this.name,this.s[1].color=this.lock?this.colors.titleoff:this.colors.title),t.pos){this.s[0].position="absolute";for(let s in t.pos)this.s[0][s]=t.pos[s];this.mono=!0}t.css&&(this.s[0].cssText=t.css)}init(){this.ytop=this.top+this.mtop,this.zone.h=this.h+this.margin,this.zone.w=this.w;let t=this.s,s=this.c;t[0].height=this.h+"px",this.isUI&&(t[0].background=this.colors.background),!this.autoWidth&&this.useFlex?(t[0].flex="1 0 auto",t[0].minWidth=this.minw+"px",t[0].textAlign="center"):this.isUI&&(t[0].width="100%"),void 0!==s[1]&&this.autoWidth&&(t[1]=s[1].style,t[1].top="1px",t[1].height=this.h-2+"px");let e=h.frag;for(let i=1,h=s.length;i!==h;i++)void 0!==s[i]&&(e.appendChild(s[i]),t[i]=s[i].style);let o=null!==this.target?this.target:this.isUI?this.main.inner:document.body;this.ontop?o.insertAdjacentElement("afterbegin",s[0]):o.appendChild(s[0]),s[0].appendChild(e),this.rSize(),this.isUI||(this.c[0].style.pointerEvents="auto",i.add(this))}addTransition(){this.baseH&&this.transition&&this.isUI&&(this.c[0].style.transition="height "+this.transition+"s ease-out")}dom(t,s,i,e,o){return h.dom(t,s,i,e,o)}setSvg(t,s,i,e,o){h.setSvg(t,s,i,e,o)}setCss(t,s){h.setCss(t,s)}clamp(t,s,i){return h.clamp(t,s,i)}getColorRing(){return h.colorRing||h.makeColorRing(),h.clone(h.colorRing)}getJoystick(t){return h["joystick_"+t]||h.makeJoystick(t),h.clone(h["joystick_"+t])}getCircular(t){return h.circular||h.makeCircular(t),h.clone(h.circular)}getKnob(t){return h.knob||h.makeKnob(t),h.clone(h.knob)}getPad2d(t){return h.pad2d||h.makePad(t),h.clone(h.pad2d)}cursor(t){i.cursor(t)}update(){}reset(){}content(){return this.c[0]}getDom(){return this.c[0]}uiout(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.background)}uiover(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.backgroundOver)}rename(t){void 0!==this.c[1]&&(this.c[1].textContent=t)}listen(){return this.isListen=i.addListen(this),this}listening(){null!==this.objectLink&&(this.isSend||this.isEdit||this.setValue(this.objectLink[this.objectKey]))}setValue(t){this.isNumber?this.value=this.numValue(t):this.value=t,this.update()}onChange(t){if(!this.isSpace)return this.callback=t||null,this}onFinishChange(t){if(!this.isSpace)return this.callback=null,this.endCallback=t,this}onOpen(t){return this.openCallback=t,this}onClose(t){return this.closeCallback=t,this}send(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.isSend=!0,null!==this.objectLink&&(this.objectLink[this.objectKey]=t),this.callback&&this.callback(t,this.objectKey),this.isSend=!1}sendEnd(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.endCallback&&this.endCallback(t),null!==this.objectLink&&(this.objectLink[this.objectKey]=t)}dispose(){this.isListen&&i.removeListen(this),h.clear(this.c[0]),null!==this.target?null!==this.group?this.group.clearOne(this):this.target.removeChild(this.c[0]):this.isUI?this.main.clearOne(this):document.body.removeChild(this.c[0]),this.isUI||i.remove(this),this.c=null,this.s=null,this.callback=null,this.target=null,this.isListen=!1}clear(){}getWidth(){let t=i.getWidth(this);t&&(this.w=t)}setSize(t){if(this.autoWidth)if(this.w=t,this.simple)this.sb=this.w-this.sa;else{let t=this.w*(this.p/100);this.sa=Math.floor(t+8),this.sb=Math.floor(this.w-t-16)}}rSize(){this.autoWidth&&(this.isUI||(this.s[0].width=this.w+"px"),this.simple||(this.s[1].width=this.sa+"px"))}setTypeNumber(t){let s;switch(this.isNumber=!0,this.value=0,void 0!==t.value&&("string"==typeof t.value?this.value=1*t.value:this.value=t.value),this.min=void 0===t.min?-1/0:t.min,this.max=void 0===t.max?1/0:t.max,this.precision=void 0===t.precision?2:t.precision,this.precision){case 0:s=1;break;case 1:s=.1;break;case 2:s=.01;break;case 3:s=.001;break;case 4:s=1e-4;break;case 5:s=1e-5;break;case 6:s=1e-6}this.step=void 0===t.step?s:t.step,this.range=this.max-this.min,this.value=this.numValue(this.value)}numValue(t){return this.noNeg&&(t=Math.abs(t)),1*Math.min(this.max,Math.max(this.min,t)).toFixed(this.precision)}handleEvent(t){if(!this.lock)return this.neverlock&&(i.lock=!1),this[t.type]?this[t.type](t):console.error(t.type,"this type of event no existe !")}wheel(t){return!1}mousedown(t){return!1}mousemove(t){return!1}mouseup(t){return!1}keydown(t){return!1}keyup(t){return!1}setReferency(t,s){this.objectLink=t,this.objectKey=s}display(t=!1){this.s[0].visibility=t?"visible":"hidden"}open(){this.isOpen||(this.isOpen=!0,i.needResize=!0,this.openCallback&&this.openCallback())}close(){this.isOpen&&(this.isOpen=!1,i.needResize=!0,this.closeCallback&&this.closeCallback())}needZone(){i.needReZone=!0}rezone(){i.needReZone=!0}select(){}unselect(){}setInput(t){i.setInput(t,this)}upInput(t,s){return i.upInput(t,s)}selected(t){this.isSelect=t||!1}}class l extends r{constructor(t={}){super(t),this.value=t.value||!1,this.model=void 0!==t.mode?t.mode:0,this.onName=t.rename||this.txt,t.onName&&(t.onname=t.onName),t.onname&&(this.onName=t.onname),this.inh=t.inh||Math.floor(.8*this.h),this.inw=t.inw||36;let s=this.colors;if(0===this.model){let t=Math.floor(.5*this.h)-.5*(this.inh-2);this.c[2]=this.dom("div",this.css.basic+"background:"+s.inputBg+"; height:"+(this.inh-2)+"px; width:"+this.inw+"px; top:"+t+"px; border-radius:10px; border:2px solid "+s.back),this.c[3]=this.dom("div",this.css.basic+"height:"+(this.inh-6)+"px; width:16px; top:"+(t+2)+"px; border-radius:10px; background:"+s.button+";")}else this.p=0,void 0!==this.c[1]&&(this.c[1].textContent=""),this.c[2]=this.dom("div",this.css.txt+this.css.button+"top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.borderSize+"px solid "+s.border+"; border-radius:"+this.radius+"px;");this.stat=-1,this.init(),this.update()}mousedown(t){return this.value=!this.value,this.update(!0),this.mousemove(t)}mousemove(t){return this.cursor("pointer"),this.mode(!0)}reset(){return this.cursor(),this.mode()}mode(t){let s,i=!1,e=this.colors,h=this.s,o=this.value;if(s=t?o?4:3:o?2:1,this.stat!==s){if(this.stat=s,0!==this.model){switch(s){case 1:h[2].color=e.text,h[2].background=e.button;break;case 2:h[2].color=e.textSelect,h[2].background=e.select;break;case 3:h[2].color=e.textOver,h[2].background=e.overoff;break;case 4:h[2].color=e.textOver,h[2].background=e.over}this.c[2].innerHTML=o?this.onName:this.name}else{switch(s){case 1:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.button;break;case 2:h[2].background=h[2].borderColor=e.back,h[3].background=e.textOver;break;case 3:h[2].background=h[2].borderColor=e.back,h[3].background=e.overoff;break;case 4:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.textSelect}h[3].marginLeft=o?"17px":"2px",this.c[1].textContent=o?this.onName:this.name}i=!0}return i}update(t){this.mode(),t&&this.send()}rSize(){super.rSize();let t=this.s,s=this.w-10-this.inw;0===this.model?(t[2].left=s+"px",t[3].left=s+"px"):(t[2].left=this.sa+"px",t[2].width=this.sb+"px")}}class a extends r{constructor(t={}){super(t),this.value="",void 0!==t.value&&(this.value=t.value),this.values=t.value||this.txt,t.values&&(this.values=t.values),t.values||t.value||(this.txt=""),this.onName=t.onName||null,this.on=!1,this.bw=t.forceWidth||0,t.bw&&(this.bw=t.bw),this.space=t.space||3,"string"==typeof this.values&&(this.values=[this.values]),this.isDown=!1,this.neverlock=!0,this.res=0,this.lng=this.values.length,this.tmp=[],this.stat=[];let s,i=this.colors;for(let t=0;te[i][0]&&s.x0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.text,this.setSvg(this.c[3],"stroke",s,1);break;case 1:this.s[2].color=i.textOver,this.setSvg(this.c[3],"stroke",i.backoff,0),s=this.model>0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.textOver,this.setSvg(this.c[3],"stroke",s,1)}return this.cmode=t,!0}reset(){this.isDown=!1}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"circular"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;if(s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=s.angle()-this.pi90,this.r=(this.r%this.twoPi+this.twoPi)%this.twoPi,null!==this.oldr){let t=this.r-this.oldr;this.r=Math.abs(t)>Math.PI?this.oldr:this.r,t>6&&(this.r=0),t<-6&&(this.r=this.twoPi)}let i=1/this.twoPi,e=this.r*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=~~(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("circular"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:sMath.PI?1:0)+" 1 "+i+","+e}update(t){if(this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range,this.setSvg(this.c[3],"d",this.makePath(),1),this.model>0){let t=this.colors,s=h.pack(h.lerpColor(h.unpack(h.ColorLuma(t.text,-.75)),h.unpack(t.text),this.percent));this.setSvg(this.c[3],"stroke",s,1)}t&&this.send()}}class d extends r{constructor(t={}){super(t),this.ctype=t.ctype||"hex",this.wfixe=256,this.cw=this.sb>256?256:this.sb,null!=t.cw&&(this.cw=t.cw),this.side=t.side||"down",this.up="down"===this.side?0:1,this.baseH=this.h,this.offset=new n,this.decal=new n,this.pp=new n;let s=this.colors;this.c[2]=this.dom("div",`${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${s.borderSize}px solid ${s.border};`),this.c[0].style.display="block",this.c[3]=this.getColorRing(),this.c[3].style.visibility="hidden",this.hsl=null,this.value="#ffffff",void 0!==t.value&&(t.value instanceof Array?this.value=h.rgbToHex(t.value):isNaN(t.value)?this.value=t.value:this.value=h.hexToHtml(t.value)),this.bcolor=null,this.isDown=!1,this.fistDown=!1,this.notext=t.notext||!1,this.tr=98,this.tsl=Math.sqrt(3)*this.tr,this.hue=0,this.d=256,this.init(),this.setColor(this.value),void 0!==t.open&&this.open()}testZone(t,s){let i=this.local;return-1===i.x&&-1===i.y?"":this.up&&this.isOpen?i.y>this.wfixe?"title":"color":i.ythis.tr)e=(c+u.pi90)/u.TwoPI,this.hue=(e+1)%1,this.setHSL([(e+1)%1,this.hsl[1],this.hsl[2]]);else{l=s.x*this.ratio,a=s.y*this.ratio;let t=this.hue*u.TwoPI+u.PI;t<0&&(t+=2*u.PI),r=Math.atan2(-a,l),r<0&&(r+=2*u.PI);let i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,h=.5*this.tr,c=Math.tan(e)*h,d=Math.sqrt(l*l+a*a),p=Math.sqrt(h*h+c*c);if(d>p){let s=Math.tan(e)*d,o=Math.atan(s/p);o>u.pi60?o=u.pi60:o<-u.pi60&&(o=-u.pi60),r+=o-e,i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,c=Math.tan(e)*h,d=p=Math.sqrt(h*h+c*c)}n=Math.sin(i)*d/this.tsl+.5;let m=1-2*Math.abs(n-.5);o=(Math.cos(i)*d+this.tr/2)/(1.5*this.tr)/m,o=u.clamp(o,0,1),this.setHSL([this.hsl[0],o,n])}}setHeight(){this.h=this.isOpen?this.wfixe+this.baseH+5:this.baseH,this.s[0].height=this.h+"px",this.zone.h=this.h}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(){super.open(),this.setHeight(),this.up&&(this.zone.y-=this.wfixe+5);let t=this.h-this.baseH;this.s[3].visibility="visible",this.parentHeight(t)}close(){super.close(),this.up&&(this.zone.y+=this.wfixe+5);let t=this.h-this.baseH;this.setHeight(),this.s[3].visibility="hidden",this.parentHeight(-t)}update(t){let s=h.rgbToHex(h.hslToRgb([this.hsl[0],1,.5]));this.moveMarkers(),this.value=this.bcolor,this.setSvg(this.c[3],"fill",s,2,0),this.s[2].background=this.bcolor,this.notext||(this.c[2].textContent=h.htmlToHex(this.bcolor)),this.invert=h.findDeepInver(this.rgb),this.s[2].color=this.invert?"#fff":"#000",t&&("array"===this.ctype&&this.send(this.rgb),"rgb"===this.ctype&&this.send(h.htmlRgb(this.rgb)),"hex"===this.ctype&&this.send(h.htmlToHex(this.value)),"html"===this.ctype&&this.send())}setValue(t){t instanceof Array?this.value=h.rgbToHex(t):isNaN(t)?this.value=t:this.value=h.hexToHtml(t),this.setColor(this.value),this.update()}setColor(t){let s=h.unpack(t);return this.bcolor!==t&&s&&(this.bcolor=t,this.rgb=s,this.hsl=h.rgbToHsl(this.rgb),this.hue=this.hsl[0],this.update()),this}setHSL(t){return this.hsl=t,this.rgb=h.hslToRgb(t),this.bcolor=h.rgbToHex(this.rgb),this.update(!0),this}moveMarkers(){let t=this.pp,s=h;this.invert;let i=this.hsl[0]*s.TwoPI,e=2/3*s.PI,o=this.tr,n=this.hsl[0],r=this.hsl[1],l=this.hsl[2],a=(i-s.pi90)*s.todeg;n=-i+s.pi90;let c=Math.cos(n)*o,d=-Math.sin(n)*o,u=Math.cos(n-e)*o,p=-Math.sin(n-e)*o,m=Math.cos(n+e)*o,g=-Math.sin(n+e)*o,x=(u+m)/2,v=(p+g)/2;i=(1-2*Math.abs(l-.5))*r;let b=u+(m-u)*l+(c-x)*i,f=p+(g-p)*l+(d-v)*i;t.set(b,f).addScalar(128),this.setSvg(this.c[3],"transform","rotate("+a+" )",2),this.setSvg(this.c[3],"cx",t.x,3),this.setSvg(this.c[3],"cy",t.y,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",2,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",3),this.setSvg(this.c[3],"fill",this.bcolor,3)}rSize(){super.rSize();let t=this.s;t[2].width=this.sb+"px",t[2].left=this.sa+"px",this.cw=this.sb>256?256:this.sb,this.rSizeColor(this.cw),this.decal.x=Math.floor(.5*(this.w-this.wfixe))}rSizeColor(t){if(t===this.wfixe)return;this.wfixe=t;let s=this.s;this.decal.y="up"===this.side?2:this.baseH+2,this.mid=Math.floor(.5*this.wfixe),this.setSvg(this.c[3],"viewBox","0 0 "+this.wfixe+" "+this.wfixe),s[3].width=this.wfixe+"px",s[3].height=this.wfixe+"px",s[3].top=this.decal.y+"px",this.ratio=256/this.wfixe,this.square=1/(this.wfixe/256*60),this.setHeight()}}class u extends r{constructor(t={}){super(t),this.round=Math.round,this.baseH=this.h,this.hplus=t.hplus||50,this.res=t.res||40,this.l=1,this.precision=t.precision||0,this.custom=t.custom||!1,this.names=t.names||["FPS","MS"];let s=t.cc||["220,220,220","255,255,0"];this.adding=t.adding||!1,this.range=t.range||[165,100,100],this.alpha=t.alpha||.25,this.values=[],this.points=[],this.textDisplay=[],this.custom||(this.now=i.getTime(),this.startTime=0,this.prevTime=0,this.frames=0,this.ms=0,this.fps=0,this.mem=0,this.mm=0,this.isMem=!(!self.performance||!self.performance.memory),this.isMem&&(this.names.push("MEM"),s.push("0,255,255")),this.txt=t.name||"Fps");let e=Math.floor(.5*this.h)-3;const h=this.colors;this.c[1].textContent=this.txt,this.c[0].style.cursor="pointer",this.c[0].style.pointerEvents="auto";let o="display:none; left:10px; top:"+this.h+"px; height:"+(this.hplus-8)+"px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid "+h.border+";";0!==this.radius&&(o+="border-radius:"+this.radius+"px;"),this.c[2]=this.dom("path",this.css.basic+o,{}),this.c[2].setAttribute("viewBox","0 0 "+this.res+" 50"),this.c[2].setAttribute("height","100%"),this.c[2].setAttribute("width","100%"),this.c[2].setAttribute("preserveAspectRatio","none"),this.c[3]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; left:0; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.c[4]=this.dom("div",this.css.txt+"position:absolute; left:10px; top:"+(this.h+2)+"px; display:none; width:100%; text-align:center;"),t.bottomLine&&(this.c[4]=this.dom("div",this.css.basic+"width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);")),this.isShow=!1;let n=this.s;n[1].lineHeight=this.h-4,n[1].color=h.text,0!==this.radius&&(n[0].borderRadius=this.radius+"px"),"none"!==this.colors.gborder&&(n[0].border="1px solid "+h.gborder);let r=0;for(r=0;r "+this.names[r]+" ")}for(r=this.names.length;r--;)this.dom("path",null,{fill:"rgba("+s[r]+","+this.alpha+")","stroke-width":1,stroke:"rgba("+s[r]+",1)","vector-effect":"non-scaling-stroke"},this.c[2]);this.init()}mousedown(t){this.isShow?this.close():this.open()}tick(t){this.values=t,this.isShow&&(this.drawGraph(),this.upText())}makePath(t){let s="";s+="M -1 50";for(let i=0;i";this.c[4].innerHTML=i}drawGraph(){let t,s=this.c[2],i=this.names.length,e=0,h=0;for(;i--;)t=this.adding?(this.values[h]+e)*this.range[h]:this.values[h]*this.range[h],this.points[h].shift(),this.points[h].push(50-t),this.setSvg(s,"d",this.makePath(this.points[h]),i+1),e+=this.values[h],h++}open(){super.open(),this.h=this.hplus+this.baseH,this.setSvg(this.c[3],"d",this.svgs.g2),null!==this.group?this.group.calc(this.hplus):this.isUI&&this.main.calc(this.hplus),this.s[0].height=this.h+"px",this.s[2].display="block",this.s[4].display="block",this.isShow=!0,this.custom||i.addListen(this)}close(){super.close(),this.h=this.baseH,this.setSvg(this.c[3],"d",this.svgs.g1),null!==this.group?this.group.calc(-this.hplus):this.isUI&&this.main.calc(-this.hplus),this.s[0].height=this.h+"px",this.s[2].display="none",this.s[4].display="none",this.isShow=!1,this.custom||i.removeListen(this),this.c[4].innerHTML=""}begin(){this.startTime=this.now()}end(){let t=this.now();if(this.ms=t-this.startTime,this.frames++,t>this.prevTime+1e3&&(this.fps=this.round(1e3*this.frames/(t-this.prevTime)),this.prevTime=t,this.frames=0,this.isMem)){let t=performance.memory.usedJSHeapSize,s=performance.memory.jsHeapSizeLimit;this.mem=this.round(954e-9*t),this.mm=t/s}return this.values=[this.fps,this.ms,this.mm],this.drawGraph(),this.upText([this.fps,this.ms,this.mem]),t}listening(){this.custom||(this.startTime=this.end())}rSize(){let t=this.s,s=this.w;t[3].left=this.sa+this.sb-6+"px",t[0].width=s+"px",t[1].width=s+"px",t[2].left="10px",t[2].width=s-20+"px",t[4].width=s-20+"px"}}class p extends r{constructor(t={}){super(t),this.value=void 0!==t.value?t.value:[0,0,0],this.lng=this.value.length,this.precision=void 0!==t.precision?t.precision:2,this.multiplicator=t.multiplicator||1,this.neg=t.neg||!1,this.line=void 0===t.line||t.line,this.autoWidth=void 0===t.autoWidth||t.autoWidth,this.isNumber=!1,this.isDown=!1,this.h=t.h||138,this.rh=this.h-10,this.top=0,this.c[0].style.width=this.w+"px",void 0!==this.c[1]&&(this.c[1].style.width=this.w+"px",this.autoWidth||(this.c[1].style.width="100%",this.c[1].style.justifyContent="center"),this.top=10,this.h+=10),this.gh=this.rh-28,this.gw=this.w-28,this.c[2]=this.dom("div",this.css.txt+"display:block; text-align:center; padding:0px 0px; top:"+(this.h-20)+"px; left:14px; width:"+this.gw+"px;\tcolor:"+this.colors.text),this.c[2].innerHTML=this.valueToHtml();let s=this.dom("svg",this.css.basic,{viewBox:"0 0 "+this.w+" "+this.rh,width:this.w,height:this.rh,preserveAspectRatio:"none"});this.setCss(s,{width:this.w,height:this.rh,left:0,top:this.top}),this.dom("path","",{d:"",stroke:this.colors.text,"stroke-width":2,fill:"none","stroke-linecap":"butt"},s),this.dom("rect","",{x:10,y:10,width:this.gw+8,height:this.gh+8,stroke:"rgba(0,0,0,0.3)","stroke-width":1,fill:"none"},s),this.iw=(this.gw-4*(this.lng-1))/this.lng;let i=[];this.cMode=[],this.v=[];for(let t=0;t',e="width:"+100/this.lng+"%;";for(;t--;)s===this.lng-1?i+=""+this.value[s]+"":i+=""+this.value[s]+"",s++;return i}updateSVG(){this.line&&this.setSvg(this.c[3],"d",this.makePath(),0);for(let t=0;tthis.top&&s.ye[i][0]&&s.xthis.distance){let t=Math.atan2(this.tmp.x,this.tmp.y);this.tmp.x=Math.sin(t)*this.distance,this.tmp.y=Math.cos(t)*this.distance}this.pos.copy(this.tmp).divideScalar(this.distance).negate(),this.update()}setValue(t){void 0===t&&(t=[0,0]),this.pos.set(t[0]||0,t[1]||0),this.updateSVG()}update(t){void 0===t&&(t=!0),null!==this.interval&&(this.isDown||(this.pos.lerp(null,.3),this.pos.x=Math.abs(this.pos.x)<.01?0:this.pos.x,this.pos.y=Math.abs(this.pos.y)<.01?0:this.pos.y,this.isUI&&this.main.isCanvas&&this.main.draw())),this.updateSVG(),t&&this.send(),this.pos.isZero()&&this.stopInterval()}updateSVG(){let t=.5*this.diam- -this.pos.x*this.distance,s=.5*this.diam- -this.pos.y*this.distance;if(0===this.model){let i=t+5*this.pos.x+5,e=s+5*this.pos.y+10;this.setSvg(this.c[3],"cx",i*this.ratio,3),this.setSvg(this.c[3],"cy",e*this.ratio,3)}else this.setSvg(this.c[3],"cx",t*this.ratio,3),this.setSvg(this.c[3],"cy",s*this.ratio,3);this.setSvg(this.c[3],"cx",t*this.ratio,4),this.setSvg(this.c[3],"cy",s*this.ratio,4),this.value[0]=1*(this.pos.x*this.multiplicator).toFixed(this.precision),this.value[1]=1*(this.pos.y*this.multiplicator).toFixed(this.precision),this.haveText&&(this.c[2].textContent=this.value)}clear(){this.stopInterval(),super.clear()}}class v extends r{constructor(t={}){super(t),this.isCyclic=t.cyclic||!1,this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.autoWidth=!1,this.setTypeNumber(t),this.minw=this.w,this.diam=t.diam||this.w,this.mPI=.8*Math.PI,this.toDeg=180/Math.PI,this.cirRange=2*this.mPI,this.offset=new n,this.h=t.h||this.w+10,this.c[0].style.width=this.w+"px",this.c[0].style.display="block",void 0!==this.c[1]&&(this.c[1].style.width="100%",this.c[1].style.justifyContent="center",this.top=10,this.h+=10),this.percent=0,this.cmode=0;let s=this.colors;this.c[2]=this.dom("div",this.css.txt+"justify-content:center; top:"+(this.h-20)+"px; width:100%; color:"+s.text),this.c[3]=this.getKnob(),this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1),this.setSvg(this.c[3],"stroke",s.text,3),this.setSvg(this.c[3],"d",this.makeGrad(),3),this.setSvg(this.c[3],"viewBox","0 0 "+this.diam+" "+this.diam),this.setCss(this.c[3],{width:this.diam,height:this.diam,left:0,top:this.top}),this.model>0&&(h.dom("path","",{d:"",stroke:s.text,"stroke-width":2,fill:"none","stroke-linecap":"round"},this.c[3]),2==this.model&&(h.addSVGGlowEffect(),this.setSvg(this.c[3],"style",'filter: url("#UILGlow");',4))),this.r=0,this.init(),this.update()}mode(t){let s=this.colors;if(this.cmode===t)return!1;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1);break;case 1:this.s[2].color=s.textOver,this.setSvg(this.c[3],"fill",s.select,0),this.setSvg(this.c[3],"stroke",s.textOver,1)}return this.cmode=t,!0}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"knob"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=-Math.atan2(s.x,s.y),null!==this.oldr&&(this.r=Math.abs(this.r-this.oldr)>Math.PI?this.oldr:this.r),this.r=this.r>this.mPI?this.mPI:this.r,this.r=this.r<-this.mPI?-this.mPI:this.r;let i=1/this.cirRange,e=(this.r+this.mPI)*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=Math.floor(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("knob"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s5?(s=this.range/this.step,t=(a-c)/s):(t=(a-c)/l*2,s=32);for(let c=0;c<=s;++c)i=a-t*c,e=l+44*Math.sin(i),h=l+44*Math.cos(i),o=l+40*Math.sin(i),n=l+40*Math.cos(i),r+="M"+e+" "+h+" L"+o+" "+n+" ";return r}update(t){this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range;let s=Math.PI+this.mPI,i=this.percent*this.cirRange-this.mPI,e=Math.sin(i),o=Math.cos(i),n=25*e+64,r=-25*o+64,l=20*e+64,a=-20*o+64;if(this.setSvg(this.c[3],"d","M "+n+" "+r+" L "+l+" "+a,1),this.model>0){let t=36*Math.sin(s)+64,n=36*Math.cos(s)+64,r=36*e+64,l=-36*o+64,a=i<=Math.PI-this.mPI?0:1;this.setSvg(this.c[3],"d","M "+t+","+n+" A 36,36 1 "+a+" 1 "+r+","+l,4);let c=h.pack(h.lerpColor(h.unpack(h.ColorLuma(this.colors.text,-.75)),h.unpack(this.colors.text),this.percent));this.setSvg(this.c[3],"stroke",c,4)}t&&this.send()}}class b extends r{constructor(t={}){super(t),this.hideCurrent=!1,this.path=t.path||"",this.format=t.format||"",this.isWithImage=""!==this.path,this.preLoadComplete=!1,this.tmpImage={},this.tmpUrl=[],this.m=void 0!==t.m?t.m:5;let s=t.align||"left",i=t.scrollSize||10;this.ss=i+1,this.sMode=0,this.tMode=0,this.listOnly=t.listOnly||!1,this.staticTop=t.staticTop||!1,this.isSelectable=this.listOnly,void 0!==t.select&&(t.selectable=t.select),void 0!==t.selectable&&(this.isSelectable=t.selectable),""===this.txt&&(this.p=0);let e=Math.floor(.5*this.h)-3,h=this.colors;if(this.c[2]=this.dom("div",this.css.basic+"top:0; display:none; border-radius:"+this.radius+"px;"),this.c[3]=this.dom("div",this.css.item+"padding:0px "+this.m+"px; margin-bottom:0px; position:absolute; justify-content:"+s+"; text-align:"+s+"; line-height:"+(this.h-4)+"px; top:1px; background:"+h.button+"; height:"+(this.h-2)+"px; border:1px solid "+h.border+"; border-radius:"+this.radius+"px;"),this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.scrollerBack=this.dom("div",this.css.basic+"right:0px; width:"+i+"px; background:"+h.back+"; display:none;"),this.scroller=this.dom("div",this.css.basic+"right:"+.5*(i-.25*i)+"px; width:"+.25*i+"px; background:"+h.text+"; display:none; "),this.c[3].style.color=h.text,this.list=[],this.refObject=null,t.list)if(t.list instanceof Array)this.list=t.list;else if(t.list instanceof Object){this.refObject=t.list;for(let t in this.refObject)this.list.push(t)}this.items=[],this.prevName="",this.tmpId=0,this.baseH=this.h,this.itemHeight=t.itemHeight||this.h,this.full=t.full||!1,this.py=0,this.ww=this.sb,this.scroll=!1,this.isDown=!1,this.current=null,this.side=t.side||"down",this.up="down"===this.side?0:1,this.up?(this.c[2].style.top="auto",this.c[3].style.top="auto",this.c[4].style.top="auto",this.c[2].style.bottom=this.h-2+"px",this.c[3].style.bottom="1px",this.c[4].style.bottom=e+"px"):this.c[2].style.top=this.baseH+"px",this.listIn=this.dom("div",this.css.basic+"left:0; top:0; width:100%; background:none;"),this.listIn.name="list",this.topList=0,this.c[2].appendChild(this.listIn),this.c[2].appendChild(this.scrollerBack),this.c[2].appendChild(this.scroller),void 0!==t.value?isNaN(t.value)?this.value=t.value:this.value=this.list[t.value]:this.value=this.list[0],this.isOpenOnStart=t.open||!1,this.listOnly&&(this.baseH=5,this.c[3].style.display="none",this.c[4].style.display="none",this.c[2].style.top=this.baseH+"px",this.isOpenOnStart=!0),this.miniCanvas=t.miniCanvas||!1,this.canvasBg=t.canvasBg||"rgba(0,0,0,0)",this.imageSize=t.imageSize||[20,20],this.drag=t.drag||!1,this.dragout=t.dragout||!1,this.dragstart=t.dragstart||null,this.dragend=t.dragend||null,this.setList(this.list),this.init(),this.isWithImage&&this.preloadImage(),this.isOpenOnStart&&this.open(!0),this.baseH+=this.mtop}preloadImage(){this.preLoadComplete=!1,this.tmpImage={};for(let t=0;tthis.h-this.baseH)return"title";if(this.scroll&&s.x>this.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}else{if(s.ythis.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}}return""}testItems(t){let s,i,e,h="",o=this.items,n=o.length;for(;n--;)if(s=o[n],i=s.posy+this.topList,e=s.posy+this.itemHeight+1+this.topList,t>=i&&t<=e)return h="item"+n,this.modeItem(0),this.current=s,this.modeItem(1),h;return h}modeItem(t){if(!this.current)return;this.current.select&&0===t&&(t=2);let s=this.colors;switch(t){case 0:this.current.style.background=s.back,this.current.style.color=s.text;break;case 1:this.current.style.background=s.over,this.current.style.color=s.textOver;break;case 2:this.current.style.background=s.select,this.current.style.color=s.textSelect}}unSelected(){this.current&&(this.modeItem(0),this.current=null)}selected(){this.current&&(this.resetItems(),this.modeItem(2),this.current.select=!0)}resetItems(){let t=this.items.length;for(;t--;)this.items[t].select=!1,this.items[t].style.background=this.colors.back,this.items[t].style.color=this.colors.text}hideActive(){this.hideCurrent&&(this.current&&(this.tmpId=this.current.id),this.resetHide())}resetHide(){console.log(this.tmpId);let t=this.items.length;for(;t--;)t===this.tmpId?(this.items[t].style.height="0px",this.items[t].posy=-1):(this.items[t].style.height=this.itemHeight+"px",this.items[t].posy=(this.itemHeight+1)*(t-1))}mouseup(t){this.isDown=!1}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s?(this.isDown=!0,this.mousemove(t)):"title"===s?(this.modeTitle(2),this.listOnly||(this.hideActive(),this.isOpen?this.close():this.open())):this.current&&(this.value=this.list[this.current.id],this.isSelectable&&this.selected(),this.send(this.value),this.listOnly||(this.close(),this.setTopItem())),!0)}mousemove(t){let s=!1,i=this.testZone(t);if(!i)return s;if("title"===i)this.unSelected(),this.modeTitle(1),this.cursor("pointer");else if("scroll"===i){if(this.cursor("s-resize"),this.modeScroll(1),this.isDown){this.modeScroll(2);let s=this.zone.y+this.baseH-2;this.update(t.clientY-s-.5*this.sh)}}else this.modeTitle(0),this.modeScroll(0),this.cursor("pointer");return i!==this.prevName&&(s=!0),this.prevName=i,s}wheel(t){return"title"!==this.testZone(t)&&(this.py+=10*t.delta,this.update(this.py),!0)}reset(){this.prevName="",this.unSelected(),this.modeTitle(0),this.modeScroll(0)}modeScroll(t){if(t===this.sMode)return;let s=this.scroller.style,i=this.colors;switch(t){case 0:s.background=i.text;break;case 1:case 2:s.background=i.select}this.sMode=t}modeTitle(t){if(t===this.tMode)return;let s=this.s,i=this.colors;switch(t){case 0:s[3].color=i.text,s[3].background=i.button;break;case 1:s[3].color=i.textOver,s[3].background=i.overoff;break;case 2:s[3].color=i.textSelect,s[3].background=i.overoff}this.tMode=t}clearList(){for(;this.listIn.children.length;)this.listIn.removeChild(this.listIn.lastChild);this.items=[]}setList(t){this.clearList(),this.list=t,this.length=this.list.length;let s,e,h=this.hideCurrent?this.length-1:this.length;this.maxItem=this.full?h:5,this.maxItem=hthis.maxHeight&&(this.ww=this.sb-this.ss,this.scroll=!0),this.miniCanvas&&(this.tmpCanvas=document.createElement("canvas"),this.tmpCanvas.width=this.imageSize[0],this.tmpCanvas.height=this.imageSize[1],this.tmpCtx=this.tmpCanvas.getContext("2d"),this.tmpCtx.fillStyle=this.canvasBg,this.tmpCtx.fillRect(0,0,this.imageSize[0],this.imageSize[1]));for(let t=0;tthis.range?this.range:t,this.topList=-Math.floor(t/this.ratio),this.listIn.style.top=this.topList+"px",this.scroller.style.top=Math.floor(t)+"px",this.py=t)}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(t){super.open(),this.update(0),this.h=this.maxHeight+this.baseH+5,this.scroll?(this.scroller.style.display="block",this.scrollerBack.style.display="block"):(this.topList=0,this.h=this.baseH+5+this.max,this.scroller.style.display="none",this.scrollerBack.style.display="none"),this.s[0].height=this.h+"px",this.s[2].display="block",this.up?(this.zone.y-=this.h-(this.baseH-10),this.setSvg(this.c[4],"d",this.svgs.g1)):this.setSvg(this.c[4],"d",this.svgs.g2),this.rSizeContent();let s=this.h-this.baseH;this.zone.h=this.h,t||this.parentHeight(s)}close(){super.close(),this.up&&(this.zone.y+=this.h-(this.baseH-10));let t=this.h-this.baseH;this.h=this.baseH,this.s[0].height=this.h+"px",this.s[2].display="none",this.setSvg(this.c[4],"d",this.svgs.g1),this.zone.h=this.h,this.parentHeight(-t)}text(t){this.c[3].textContent=t}rSizeContent(){let t=this.length;for(;t--;)this.listIn.children[t].style.width=this.ww+"px"}rSize(){super.rSize();let t=this.s,s=this.sb,i=this.sa;void 0!==t[2]&&(t[2].width=s+"px",t[2].left=i+"px",t[3].width=s+"px",t[3].left=i+"px",t[4].left=i+s-15+"px",this.ww=s,this.max>this.maxHeight&&(this.ww=s-this.ss),this.isOpen&&this.rSizeContent())}}class f extends r{constructor(t={}){super(t),this.setTypeNumber(t),this.allway=t.allway||!1,this.isDown=!1,this.value=[0],this.multy=1,this.invmulty=1,this.isSingle=!0,this.isAngle=!1,this.isVector=!1,t.isAngle&&(this.isAngle=!0,this.multy=h.torad,this.invmulty=h.todeg),this.isDrag=t.drag||!1,void 0!==t.value&&(isNaN(t.value)?t.value instanceof Array?(this.value=t.value,this.isSingle=!1):t.value instanceof Object&&(this.value=[],void 0!==t.value.x&&(this.value[0]=t.value.x),void 0!==t.value.y&&(this.value[1]=t.value.y),void 0!==t.value.z&&(this.value[2]=t.value.z),void 0!==t.value.w&&(this.value[3]=t.value.w),this.isSingle=!1,this.isVector=!0):this.value=[t.value]),this.lng=this.value.length,this.tmp=[],this.current=-1,this.prev={x:0,y:0,d:0,v:0};let s=this.colors;this.c[2]=this.dom("div",this.css.basic+" background:"+s.select+"; top:4px; width:0px; height:"+(this.h-8)+"px;"),this.cMode=[];let i=this.lng;for(;i--;)this.isAngle&&(this.value[i]=(180*this.value[i]/Math.PI).toFixed(this.precision)),this.c[3+i]=this.dom("div",this.css.txtselect+"top:1px; height:"+(this.h-2)+"px; color:"+s.text+"; background:"+s.back+"; borderColor:"+s.border+"; border-radius:"+this.radius+"px;"),t.center&&(this.c[2+i].style.textAlign="center"),this.c[3+i].textContent=this.value[i],this.c[3+i].style.color=this.colors.text,this.c[3+i].isNum=!0,this.cMode[i]=0;this.selectId=3+this.lng,this.c[this.selectId]=this.dom("div",this.css.txtselect+"position:absolute; top:2px; height:"+(this.h-4)+"px; padding:0px 0px; width:0px; color:"+s.textSelect+"; background:"+s.select+"; border:none; border-radius:0px;"),this.cursorId=4+this.lng,this.c[this.cursorId]=this.dom("div",this.css.basic+"top:2px; height:"+(this.h-4)+"px; width:0px; background:"+s.text+";"),this.init()}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";let i=this.lng,e=this.tmp;for(;i--;)if(s.x>e[i][0]&&s.x=this.txl?"text":s.x>=this.sa?"scroll":""}mouseup(t){this.isDown&&(this.isDown=!1)}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s&&(this.isDown=!0,this.old=this.value,this.mousemove(t)),!0)}mousemove(t){let s=!1;if("scroll"===this.testZone(t)?(this.mode(1),this.cursor("w-resize")):this.cursor(),this.isDown){let i=(t.clientX-(this.zone.x+this.sa)-3)/this.ww*this.range+this.min-this.old;(i>=this.step||i<=this.step)&&(i=Math.floor(i/this.step),this.value=this.numValue(this.old+i*this.step),this.update(!0),this.old=this.value),s=!0}return s}wheel(t){if("scroll"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s=this.sa?"text":""}mouseup(t){if(this.editable)return!!this.isDown&&(this.isDown=!1,this.mousemove(t))}mousedown(t){if(!this.editable)return;let s=this.testZone(t);return!this.isDown&&(this.isDown=!0,"text"===s&&this.setInput(this.c[2]),this.mousemove(t))}mousemove(t){if(!this.editable)return;let s=0;return"text"===this.testZone(t)?this.cursor("text"):this.cursor(),this.isDown&&(s=t.clientX-this.zone.x),this.upInput(s-this.sa-3,this.isDown)}update(){this.c[2].textContent=this.value}reset(){this.cursor()}select(t,s,i,e){let h=this.s,o=this.sa+5;h[4].width="1px",h[4].left=o+s+"px",h[3].left=o+s+"px",h[3].width=i+"px",this.c[3].innerHTML=e}unselect(){let t=this.s;t&&(t[3].width="0px",this.c[3].innerHTML="t",t[4].width="0px")}validate(t){this.allway&&(t=!0),this.value=this.c[2].textContent,""!==this.value?this.c[5].textContent="":this.c[5].textContent=this.placeHolder,t&&this.send()}rSize(){super.rSize();let t=this.s;t[2].left=this.sa+"px",t[2].width=this.sb+"px",t[5].left=this.sa+"px",t[5].width=this.sb+"px"}}class k extends r{constructor(t={}){super(t);let s=t.prefix||"";this.c[2]=this.dom("div",this.css.txt+"justify-content:right; width:60px; line-height:"+(this.h-8)+"px; color:"+this.colors.text),31===this.h&&(this.s[0].height=this.h+"px",this.s[1].top="8px",this.c[2].style.top="8px");let i=this.s;i[1].justifyContent=t.align||"left",i[1].fontWeight=t.fontWeight||"bold",this.c[1].textContent=this.txt.substring(0,1).toUpperCase()+this.txt.substring(1).replace("-"," "),this.c[2].textContent=s,this.init()}text(t){this.c[1].textContent=t}text2(t){this.c[2].textContent=t}rSize(){super.rSize(),this.s[1].width=this.w+"px",this.s[2].left=this.w+"px"}setColor(t){this.s[1].color=t,this.s[2].color=t}}class S extends r{constructor(t={}){super(t),this.value=t.value||"",this.isDown=!1,this.onActif=t.onActif||function(){};const s=this.colors;this.c[2]=this.dom("div",this.css.txt+this.css.button+" top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.buttonBorder+"; border-radius:15px; width:30px; left:10px;"),this.c[3]=this.dom("div",this.css.txtselect+"height:"+(this.h-4)+"px; background:"+s.inputBg+"; borderColor:"+s.inputBorder+"; border-radius:"+this.radius+"px;"),this.c[3].textContent=this.value;let i=Math.floor(.5*this.h)-7;this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:14px; height:14px; left:5px; top:"+i+"px;",{d:this.svgs.cursor,fill:s.text,stroke:"none"}),this.stat=1,this.isActif=!1,this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>this.sa&&s.xthis.sa&&s.xi[r][0]&&s.xe[r][0]&&s.ythis.lng-1&&(h=-1)),h}mouseup(t){return!!this.isDown&&(this.isDown=!1,-1!==this.res&&(this.value=this.values[this.res],this.send()),this.mousemove(t))}mousedown(t){return!this.isDown&&(this.isDown=!0,this.mousemove(t))}mousemove(t){let s=!1;return this.res=this.testZone(t),-1!==this.res?(this.cursor("pointer"),s=this.modes(this.isDown?3:2,this.res)):s=this.reset(),s}modes(t=1,s=-1){let i,e,h=this.lng,o=!1;for(;h--;)e=t,i=!!this.isSelectable&&this.values[h]===this.value,h===s?i&&2===e&&(e=3):(e=1,i&&(e=4)),this.mode(e,h)&&(o=!0);return o}mode(t,s){let i=!1,e=this.colors,h=this.buttons,o=s;if(this.stat[s]!==t){switch(this.stat[s]=t,t){case 1:h[o].style.color=e.text,h[o].style.background=e.button;break;case 2:h[o].style.color=e.textOver,h[o].style.background=e.overoff;break;case 3:h[o].style.color=e.textOver,h[o].style.background=e.over;break;case 4:h[o].style.color=e.textSelect,h[o].style.background=e.select}i=!0}return i}reset(){return this.res=-1,this.cursor(),this.modes()}label(t,s){this.buttons[s].textContent=t}icon(t,s,i){this.buttons[i].style.padding=(s||0)+"px 0px",this.buttons[i].innerHTML=t}testW(){let t=!1;if(3*this.spaces[0]+2*this.bsizeMax>this.w?(this.bsize[0]=.5*(this.w-3*this.spaces[0]),t=!0):this.bsize[0]!==this.bsizeMax&&(this.bsize[0]=this.bsizeMax,t=!0),!t)return;let s=this.buttons.length;for(;s--;)this.buttons[s].style.width=this.bsize[0]+"px"}rSize(){let t;super.rSize(),this.testW(),this.tmpX=[],this.tmpY=[];for(let s=0;sthis.h-this.c[2].offsetHeight?"text":"pad"}mouseup(t){return this.isDown=!1,this.mode(0)}mousedown(t){if("pad"===this.testZone(t))return this.isDown=!0,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=.5*this.w-(t.clientX-this.zone.x),i=.5*this.diam-(t.clientY-this.zone.y-this.ytop),e=256/this.diam;s=-s*e,i=-i*e,s=h.clamp(s,-this.maxPos,this.maxPos),i=h.clamp(i,-this.maxPos,this.maxPos),this.setPos([s,i]),this.update(!0)}mode(t){if(this.cmode===t)return!1;let s=this.colors;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.back,0),this.setSvg(this.c[3],"fill",s.button,1),this.setSvg(this.c[3],"stroke",s.back,2),this.setSvg(this.c[3],"stroke",s.back,3),this.setSvg(this.c[3],"stroke",s.text,4);break;case 1:this.s[2].color=s.textSelect,this.setSvg(this.c[3],"fill",s.backoff,0),this.setSvg(this.c[3],"fill",s.overoff,1),this.setSvg(this.c[3],"stroke",s.backoff,2),this.setSvg(this.c[3],"stroke",s.backoff,3),this.setSvg(this.c[3],"stroke",s.textSelect,4)}return this.cmode=t,!0}update(t){this.c[2].textContent=this.value,this.updateSVG(),t&&this.send()}updateSVG(){1==this.model&&(this.setSvg(this.c[3],"y1",this.pos.y,2),this.setSvg(this.c[3],"y2",this.pos.y,2),this.setSvg(this.c[3],"x1",this.pos.x,3),this.setSvg(this.c[3],"x2",this.pos.x,3)),this.setSvg(this.c[3],"cx",this.pos.x,4),this.setSvg(this.c[3],"cy",this.pos.y,4)}setPos(t){this.pos.set(t[0]+128,t[1]+128);let s=1/this.maxPos;this.value[0]=(t[0]*s*this.range).toFixed(this.precision),this.value[1]=(t[1]*s*this.range).toFixed(this.precision)}setValue(t,s=!1){void 0===t&&(t=this.value),this.value[0]=1*Math.min(this.max,Math.max(this.min,t[0])).toFixed(this.precision),this.value[1]=1*Math.min(this.max,Math.max(this.min,t[1])).toFixed(this.precision),this.pos.set(this.value[0]/this.range*this.maxPos+128,this.value[1]/this.range*this.maxPos+128),this.update(s)}}const T=function(){let t,s,e=arguments,h=!1,o=null;"string"==typeof e[0]?(t=e[0],s=e[1]||{}):"object"==typeof e[0]&&(h=!0,void 0===e[2]&&[].push.call(e,{}),t=e[2].type?e[2].type:O(e[0][e[1]],e[2]),s=e[2],s.name=e[1],"list"!==t||s.list?s.value=e[0][e[1]]:s.list=e[0][e[1]]);let n=t.toLowerCase();switch("group"===n&&(s.add=T),n){case"bool":case"boolean":o=new l(s);break;case"button":o=new a(s);break;case"circular":o=new c(s);break;case"color":o=new d(s);break;case"fps":o=new u(s);break;case"graph":o=new p(s);break;case"group":o=new g(s);break;case"joystick":o=new x(s);break;case"knob":o=new v(s);break;case"list":o=new b(s);break;case"numeric":case"number":o=new f(s);break;case"slide":o=new w(s);break;case"textInput":case"string":o=new y(s);break;case"title":case"text":o=new k(s);break;case"select":o=new S(s);break;case"bitmap":o=new I(s);break;case"selector":o=new M(s);break;case"empty":case"space":o=new m(s);break;case"item":o=new C(s);break;case"grid":o=new L(s);break;case"pad2d":case"pad":o=new z(s)}if(null!==o)return i.needResize=!0,h&&o.setReferency(e[0],e[1]),o},O=function(t,s){let i="slide";return"boolean"==typeof t?i="bool":"string"==typeof t?i="#"===t.substring(0,1)?"color":"string":"number"==typeof t?i=s.ctype?"color":"slide":"array"==typeof t&&t instanceof Array?"number"==typeof t[0]?i="number":"string"==typeof t[0]&&(i="list"):"object"==typeof t&&t instanceof Object&&(i=void 0!==t.x?"number":"list"),i};t.Files=o,t.Gui=class{constructor(t={}){this.isGui=!0,this.name="gui",this.canvas=null,this.screen=null,this.plane=t.plane||null,t.config&&(t.colors=t.config),t.colors?this.setConfig(t.colors):this.colors=h.defineColor(t),this.css=h.cloneCss(),this.isReset=!0,this.tmpAdd=null,this.isCanvas=t.isCanvas||!1,this.isCanvasOnly=!1,this.callback=void 0===t.callback?null:t.callback,this.forceHeight=t.maxHeight||0,this.lockHeight=t.lockHeight||!1,this.isItemMode=void 0!==t.itemMode&&t.itemMode,this.cn="",this.size=h.size,void 0!==t.p&&(this.size.p=t.p),void 0!==t.w&&(this.size.w=t.w),void 0!==t.h&&(this.size.h=t.h),void 0!==t.s&&(this.size.s=t.s),this.size.h=this.size.h<11?11:this.size.h,this.local=(new n).neg(),this.zone={x:0,y:0,w:this.size.w,h:0},this.mouse=(new n).neg(),this.h=0,this.sw=0,this.margin=this.colors.sy,this.marginDiv=h.isDivid(this.margin),this.isWithClose=void 0===t.close||t.close,this.bh=this.isWithClose?this.size.h:0,this.autoResize=void 0===t.autoResize||t.autoResize,this.isCenter=t.center||!1,this.cssGui=void 0!==t.css?t.css:this.isCenter?"":"right:10px;",this.isOpen=void 0===t.open||t.open,this.isDown=!1,this.isScroll=!1,this.uis=[],this.current=-1,this.proto=null,this.isEmpty=!0,this.decal=0,this.ratio=1,this.oy=0,this.isNewTarget=!1;let s=this.colors;this.content=h.dom("div",this.css.basic+" width:0px; height:auto; top:0px; background:"+s.content+"; "+this.cssGui),this.innerContent=h.dom("div",this.css.basic+"width:100%; top:0; left:0; height:auto; overflow:hidden;"),this.content.appendChild(this.innerContent),this.useFlex=!0;let e=this.useFlex?"display:flex; flex-flow: row wrap;":"";this.inner=h.dom("div",this.css.basic+e+"width:100%; left:0; "),this.innerContent.appendChild(this.inner),this.scrollBG=h.dom("div",this.css.basic+"right:0; top:0; width:"+(this.size.s-1)+"px; height:10px; display:none; background:"+s.background+";"),this.content.appendChild(this.scrollBG),this.scroll=h.dom("div",this.css.basic+"background:"+s.button+"; right:2px; top:0; width:"+(this.size.s-4)+"px; height:10px;"),this.scrollBG.appendChild(this.scroll),this.bottomText=t.bottomText||["open","close"];let o=s.radius;this.bottom=h.dom("div",this.css.txt+"width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:"+o+"px; border-bottom-left-radius:"+o+"px; justify-content:center; height:"+this.bh+"px; line-height:"+(this.bh-5)+"px; color:"+s.text+";"),this.content.appendChild(this.bottom),this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.bottom.style.background=s.background,this.parent=void 0!==t.parent?t.parent:null,this.parent=void 0!==t.target?t.target:this.parent,null!==this.parent||this.isCanvas||(this.parent=document.body),null!==this.parent&&this.parent.appendChild(this.content),this.isCanvas&&null===this.parent&&(this.isCanvasOnly=!0),this.isCanvasOnly?(this.content.style.left="0px",this.content.style.right="auto",t.transition=0):this.content.style.pointerEvents="auto",this.transition=void 0!==t.transition?t.transition:h.transition,this.transition&&setTimeout(this.addTransition.bind(this),1e3),this.setWidth(),this.isCanvas&&this.makeCanvas(),i.add(this)}setTop(t,s){this.content.style.top=t+"px",void 0!==s&&(this.forceHeight=s),this.calc(),i.needReZone=!0}addTransition(){this.transition&&!this.isCanvas&&(this.innerContent.style.transition="height "+this.transition+"s ease-out",this.content.style.transition="height "+this.transition+"s ease-out",this.bottom.style.transition="top "+this.transition+"s ease-out");let t=this.uis.length;for(;t--;)this.uis[t].addTransition()}onDraw(){}makeCanvas(){this.canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),this.canvas.width=this.zone.w,this.canvas.height=this.forceHeight?this.forceHeight:this.zone.h}draw(t){if(null===this.canvas)return;let s=this.zone.w,e=this.forceHeight?this.forceHeight:this.zone.h;i.toCanvas(this,s,e,t)}getDom(){return this.content}noMouse(){this.mouse.neg()}setMouse(t,s=!0){s?this.mouse.set(Math.round(t.x*this.canvas.width),this.canvas.height-Math.round(t.y*this.canvas.height)):this.mouse.set(Math.round(t.x*this.canvas.width),Math.round(t.y*this.canvas.height))}setConfig(t){h.setText(),this.colors=h.defineColor(t)}setColors(t){for(let s in t)this.colors[s]&&(this.colors[s]=t[s])}setText(t,s,i,e){h.setText(t,s,i,e)}hide(t){this.content.style.visibility=t?"hidden":"visible"}display(t=!1){this.content.style.visibility=t?"visible":"hidden"}onChange(t){return this.callback=t||null,this}mode(t){let s=!1,e=this.colors;if(t!==this.cn){switch(this.cn=t,t){case"def":i.cursor(),this.scroll.style.background=e.button,this.bottom.style.background=e.background,this.bottom.style.color=e.text;break;case"scrollOver":i.cursor("ns-resize"),this.scroll.style.background=e.select;break;case"scrollDown":this.scroll.style.background=e.select;break;case"bottomOver":i.cursor("pointer"),this.bottom.style.background=e.backgroundOver,this.bottom.style.color=e.textOver}s=!0}return s}clearTarget(){return-1!==this.current&&(this.proto.s&&(this.proto.uiout(),this.proto.reset()),this.proto=null,this.current=-1,i.cursor(),!0)}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";this.isReset=!1;let i="",e=this.isScroll?this.zone.w-this.size.s:this.zone.w;return i=s.y>this.zone.h-this.bh&&s.ye?"scroll":"content",i}handleEvent(t){let s=t.type,e=!1,h=!1,o=this.testZone(t);if("mouseup"===s&&this.isDown&&(this.isDown=!1),"mousedown"!==s||this.isDown||(this.isDown=!0),this.isDown&&this.isNewTarget&&(i.clearInput(),this.isNewTarget=!1),o){switch(o){case"content":t.clientY=this.isScroll?t.clientY+this.decal:t.clientY,i.isMobile&&"mousedown"===s&&this.getNext(t,e),this.proto&&(h=this.proto.handleEvent(t)),"mousemove"===s&&(e=this.mode("def")),"wheel"===s&&!h&&this.isScroll&&(e=this.onWheel(t)),i.lock||this.getNext(t,e);break;case"bottom":this.clearTarget(),"mousemove"===s&&(e=this.mode("bottomOver")),"mousedown"===s&&(this.isOpen=!this.isOpen,this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.calc(),this.mode("def"),e=!0);break;case"scroll":this.clearTarget(),"mousemove"===s&&(e=this.mode("scrollOver")),"mousedown"===s&&(e=this.mode("scrollDown")),"wheel"===s&&(e=this.onWheel(t)),this.isDown&&this.update(t.clientY-this.zone.y-.5*this.sh)}this.isDown&&(e=!0),h&&(e=!0),"keyup"===s&&(e=!0),"keydown"===s&&(e=!0),e&&this.draw()}}getNext(t,s){let e=i.findTarget(this.uis,t);e!==this.current&&(this.clearTarget(),this.current=e,this.isNewTarget=!0),-1!==e&&(this.proto=this.uis[this.current],this.proto.uiover())}onWheel(t){return this.oy+=20*t.delta,this.update(this.oy),!0}reset(t){if(this.isReset)return;this.mouse.neg(),this.isDown=!1;let s=this.mode("def"),i=this.clearTarget();(s||i)&&this.draw(!0),this.isReset=!0}add(){let t=arguments,s=!1;"object"==typeof t[1]?(t[1].isUI=!0,t[1].main=this,s=!!t[1].ontop&&t[1].ontop):"string"==typeof t[1]&&(void 0===t[2]?[].push.call(t,{isUI:!0,main:this}):(t[2].isUI=!0,t[2].main=this,s=!!t[2].ontop&&t[2].ontop));let i=T.apply(this,t);if(null!==i)return s?this.uis.unshift(i):this.uis.push(i),this.calc(),this.isEmpty=!1,i}remove(t){t.dispose&&t.dispose()}clearOne(t){let s=this.uis.indexOf(t);-1!==s&&(this.inner.removeChild(this.uis[s].c[0]),this.uis.splice(s,1),this.calc())}empty(){let t,s=this.uis.length;for(;s--;)t=this.uis.pop(),this.inner.removeChild(t.c[0]),t.dispose();this.uis=[],this.isEmpty=!0,this.calc()}clear(){this.empty()}clear2(){setTimeout(this.empty.bind(this),0)}dispose(){this.clear(),null!==this.parent&&this.parent.removeChild(this.content),i.remove(this)}resetItem(){if(!this.isItemMode)return;let t=this.uis.length;for(;t--;)this.uis[t].selected()}setItem(t){if(!this.isItemMode)return;if(t=t||"",this.resetItem(),!t)return void this.update(0);let s=this.uis.length;for(;s--;)this.uis[s].value===t&&(this.uis[s].selected(!0),this.isScroll&&this.update(s*(this.uis[s].h+this.margin)*this.ratio))}upScroll(t){this.sw=t?this.size.s:0,this.oy=t?this.oy:0,this.scrollBG.style.display=t?"block":"none",t&&(this.total=this.h,this.maxView=this.maxHeight,this.ratio=this.maxView/this.total,this.sh=this.maxView*this.ratio,this.range=this.maxView-this.sh,this.oy=h.clamp(this.oy,0,this.range),this.scrollBG.style.height=this.maxView+"px",this.scroll.style.height=this.sh+"px"),this.setItemWidth(this.zone.w-this.sw),this.update(this.oy)}update(t){t=h.clamp(t,0,this.range),this.decal=Math.floor(t/this.ratio),this.inner.style.top=-this.decal+"px",this.scroll.style.top=Math.floor(t)+"px",this.oy=t}calcUis(){return i.calcUis(this.uis,this.zone,this.zone.y)}calc(){clearTimeout(this.tmp),this.tmp=setTimeout(this.setHeight.bind(this),10)}setHeight(){if(this.tmp&&clearTimeout(this.tmp),this.zone.h=this.bh,this.isScroll=!1,this.isOpen){this.h=this.calcUis();let t=this.forceHeight?this.forceHeight+this.zone.y:window.innerHeight;this.maxHeight=t-this.zone.y-this.bh,this.h-this.maxHeight>1?(this.isScroll=!0,this.zone.h=this.maxHeight+this.bh):this.zone.h=this.h+this.bh}this.upScroll(this.isScroll),this.innerContent.style.height=this.zone.h-this.bh+"px",this.content.style.height=this.zone.h+"px",this.bottom.style.top=this.zone.h-this.bh+"px",this.forceHeight&&this.lockHeight&&(this.content.style.height=this.forceHeight+"px"),this.isCanvas&&this.draw(!0)}rezone(){i.needReZone=!0}setWidth(t){t&&(this.zone.w=t),this.zone.w=Math.floor(this.zone.w),this.content.style.width=this.zone.w+"px",this.isCenter&&(this.content.style.marginLeft=-Math.floor(.5*this.zone.w)+"px"),this.setItemWidth(this.zone.w-this.sw)}setItemWidth(t){let s=this.uis.length;for(;s--;)this.uis[s].setSize(t),this.uis[s].rSize()}},t.REVISION="4.3.0",t.Tools=h,t.add=T,Object.defineProperty(t,"__esModule",{value:!0})})); +!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?s(exports):"function"==typeof define&&define.amd?define(["exports"],s):s((t="undefined"!=typeof globalThis?globalThis:t||self).UIL={})}(this,(function(t){"use strict";const s={ui:[],dom:null,ID:null,lock:!1,wlock:!1,current:-1,needReZone:!0,needResize:!1,forceZone:!1,isEventsInit:!1,isLeave:!1,addDOMEventListeners:!0,downTime:0,prevTime:0,prevDefault:["contextmenu"],pointerEvent:["pointerdown","pointermove","pointerup"],eventOut:["pointercancel","pointerout","pointerleave"],xmlserializer:null,tmpTime:null,tmpImage:null,oldCursor:"auto",input:null,parent:null,firstImput:!0,hiddenImput:null,hiddenSizer:null,hasFocus:!1,startInput:!1,inputRange:[0,0],cursorId:0,str:"",pos:0,startX:-1,moveX:-1,debugInput:!1,isLoop:!1,listens:[],e:{type:null,clientX:0,clientY:0,keyCode:NaN,key:null,delta:0},isMobile:!1,now:null,getTime:function(){return self.performance&&self.performance.now?self.performance.now.bind(performance):Date.now},add:function(t){s.ui.push(t),s.getZone(t),s.isEventsInit||s.initEvents()},testMobile:function(){let t=navigator.userAgent;return!!(t.match(/Android/i)||t.match(/webOS/i)||t.match(/iPhone/i)||t.match(/iPad/i)||t.match(/iPod/i)||t.match(/BlackBerry/i)||t.match(/Windows Phone/i))},remove:function(t){let i=s.ui.indexOf(t);-1!==i&&(s.removeListen(t),s.ui.splice(i,1)),0===s.ui.length&&s.removeEvents()},initEvents:function(){if(s.isEventsInit)return;let t=document.body;s.isMobile=s.testMobile(),s.now=s.getTime(),s.isMobile?t.style.touchAction="none":t.addEventListener("wheel",s,{passive:!1}),console.log("R.addDOMEventListeners "+s.addDOMEventListeners),s.addDOMEventListeners&&(t.addEventListener("pointercancel",s),t.addEventListener("pointerleave",s),t.addEventListener("pointermove",s),t.addEventListener("pointerdown",s),t.addEventListener("pointerup",s),t.addEventListener("keydown",s,!1),t.addEventListener("keyup",s,!1)),window.addEventListener("resize",s.resize,!1),s.isEventsInit=!0,s.dom=t},removeEvents:function(){if(!s.isEventsInit)return;let t=document.body;s.isMobile||t.removeEventListener("wheel",s),s.addDOMEventListeners&&(t.removeEventListener("pointercancel",s),t.removeEventListener("pointerleave",s),t.removeEventListener("pointermove",s),t.removeEventListener("pointerdown",s),t.removeEventListener("pointerup",s),t.removeEventListener("keydown",s),t.removeEventListener("keyup",s)),window.removeEventListener("resize",s.resize),s.isEventsInit=!1},resize:function(){let t,i=s.ui.length;for(;i--;)t=s.ui[i],t.isGui&&!t.isCanvasOnly&&t.autoResize&&t.calc();s.needReZone=!0,s.needResize=!1},out:function(){console.log("im am out"),s.clearOldID()},in:function(){console.log("im am in")},fakeUp:function(){this.handleEvent({type:"pointerup"})},handleEvent:function(t){-1!==s.prevDefault.indexOf(t.type)&&t.preventDefault(),s.needResize&&s.resize(),s.findZone(s.forceZone);let i=s.e,e=!1;"keydown"===t.type&&s.keydown(t),"keyup"===t.type&&s.keyup(t),"wheel"===t.type?i.delta=t.deltaY>0?1:-1:i.delta=0;let h=t.pointerType;if(i.clientX=("touch"===h?t.pageX:t.clientX)||0,i.clientY=("touch"===h?t.pageY:t.clientY)||0,i.type=t.type,-1!==s.eventOut.indexOf(t.type)&&(e=!0,i.type="mouseup"),"pointerleave"===t.type&&(s.isLeave=!0),"pointerdown"===t.type&&(i.type="mousedown"),"pointerup"===t.type&&(i.type="mouseup"),"pointermove"===t.type&&(s.isLeave&&(s.isLeave=!1,s.resize()),i.type="mousemove"),"mousedown"===i.type){if(s.downTime=s.now(),s.downTime-s.prevTime<200)return s.selectAll(),!1;s.prevTime=s.downTime,s.forceZone=!1}"mousedown"===i.type&&s.clearInput(),"mousedown"===i.type&&(s.lock=!0),"mouseup"===i.type&&(s.lock=!1),s.isMobile&&"mousedown"===i.type&&s.findID(i),"mousemove"!==i.type||s.lock||s.findID(i),null!==s.ID&&(s.ID.isCanvasOnly&&(i.clientX=s.ID.mouse.x,i.clientY=s.ID.mouse.y),s.ID.handleEvent(i)),s.isMobile&&"mouseup"===i.type&&s.clearOldID(),e&&s.clearOldID()},findID:function(t){let i,e,h,o=s.ui.length,n=-1;for(;o--;)if(i=s.ui[o],i.isCanvasOnly?(e=i.mouse.x,h=i.mouse.y):(e=t.clientX,h=t.clientY),s.onZone(i,e,h)){n=o,n!==s.current&&(s.clearOldID(),s.current=n,s.ID=i);break}-1===n&&s.clearOldID()},clearOldID:function(){s.ID&&(s.current=-1,s.ID.reset(),s.ID=null,s.cursor())},calcUis:(t,i,e,h=!1)=>{let o,n,r,l=t.length,a=0,c=0,d=0;for(;l--;)o=t[c],c++,!h&&o.isGroup&&o.calcUis(),r=o.margin,o.zone.w=o.w,o.zone.h=o.h+r,o.autoWidth?(a=0,o.zone.x=i.x+o.dx,o.zone.y=e,e+=o.h+r,d+=o.h+r):(0===a&&(d+=o.h+r),o.zone.x=i.x+a,o.zone.y=e,n=s.getWidth(o),n?o.zone.w=o.w=n:o.fw&&(o.zone.w=o.w=o.fw),a+=o.zone.w,a>=i.w&&(e+=o.h+r,a=0));return d},findTarget:function(t,i){let e=t.length;for(;e--;)if(s.onZone(t[e],i.clientX,i.clientY))return e;return-1},findZone:function(t){if(s.needReZone||t){for(var i,e=s.ui.length;e--;)i=s.ui[e],s.getZone(i),i.isGui&&i.calcUis();s.needReZone=!1}},onZone:function(t,s,i){if(void 0===s||void 0===i)return!1;let e=t.zone,h=s-e.x,o=i-e.y,n=h>=0&&o>=0&&h<=e.w&&o<=e.h;return n?t.local.set(h,o):t.local.neg(),n},getWidth:function(t){return t.getDom().clientWidth},getZone:function(t){if(t.isCanvasOnly)return;let s=t.getDom().getBoundingClientRect();t.zone={x:s.left,y:s.top,w:s.width,h:s.height}},cursor:function(t){(t=t||"auto")!==s.oldCursor&&(document.body.style.cursor=t,s.oldCursor=t)},toCanvas:function(t,i,e,h){if(s.xmlserializer||(s.xmlserializer=new XMLSerializer),h&&null!==s.tmpTime&&(clearTimeout(s.tmpTime),s.tmpTime=null),null!==s.tmpTime)return;s.lock&&(s.tmpTime=setTimeout((function(){s.tmpTime=null}),10));let o=!1;i===t.canvas.width&&e===t.canvas.height||(o=!0),null===s.tmpImage&&(s.tmpImage=new Image);let n=s.tmpImage,r=s.xmlserializer.serializeToString(t.content),l=''+r+"";n.onload=function(){let s=t.canvas.getContext("2d");o?(t.canvas.width=i,t.canvas.height=e):s.clearRect(0,0,i,e),s.drawImage(this,0,0),t.onDraw()},n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(l),n.crossOrigin=""},setHidden:function(){null===s.hiddenImput&&(s.hiddenImput=document.createElement("input"),s.hiddenImput.type="text",s.hiddenSizer=document.createElement("div"),document.body.appendChild(s.hiddenImput),document.body.appendChild(s.hiddenSizer));let t=s.debugInput?"":"opacity:0; zIndex:0;",i=s.parent.css.txtselect+"padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;"+t;s.hiddenImput.style.cssText=i+"bottom:10px;"+(s.debugInput?"":"transform:scale(0);"),s.hiddenSizer.style.cssText=i+"bottom:40px;",s.hiddenImput.style.width=s.input.clientWidth+"px",s.hiddenImput.value=s.str,s.hiddenSizer.innerHTML=s.str,s.hasFocus=!0},clearHidden:function(t){null!==s.hiddenImput&&(s.hasFocus=!1)},clickPos:function(t){let i=s.str.length,e=0,h=0;for(;i--&&(e+=s.textWidth(s.str[h]),!(e>=t));)h++;return h},upInput:function(t,i){if(null===s.parent)return!1;let e=!1;if(i){let i=s.clickPos(t);if(s.moveX=i,-1===s.startX)s.startX=i,s.cursorId=i,s.inputRange=[s.startX,s.startX];else{s.moveX!==s.startX&&(s.startX>s.moveX?s.inputRange=[s.moveX,s.startX]:s.inputRange=[s.startX,s.moveX])}e=!0}else-1!==s.startX&&(s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.startX=-1,e=!0);return e&&s.selectParent(),e},selectAll:function(){s.parent&&(s.str=s.input.textContent,s.inputRange=[0,s.str.length],s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.cursorId=s.inputRange[1],s.selectParent())},selectParent:function(){var t=s.textWidth(s.str.substring(0,s.cursorId)),i=s.textWidth(s.str.substring(0,s.inputRange[0])),e=s.textWidth(s.str.substring(s.inputRange[0],s.inputRange[1]));s.parent.select(t,i,e,s.hiddenSizer.innerHTML)},textWidth:function(t){return null===s.hiddenSizer?0:(t=t.replace(/ /g," "),s.hiddenSizer.innerHTML=t,s.hiddenSizer.clientWidth)},clearInput:function(){null!==s.parent&&(s.firstImput||s.parent.validate(!0),s.clearHidden(),s.parent.unselect(),s.input.style.background=s.parent.colors.back,s.input.style.borderColor=s.parent.colors.border,s.parent.isEdit=!1,s.input=null,s.parent=null,s.str="",s.firstImput=!0)},setInput:function(t,i){s.clearInput(),s.input=t,s.parent=i,s.input.style.background=s.parent.colors.backoff,s.input.style.borderColor=s.parent.colors.select,s.str=s.input.textContent,s.setHidden()},keydown:function(t){if(null===s.parent)return;let i=t.which;t.shiftKey,s.firstImput=!1,s.hasFocus&&(window.focus(),s.hiddenImput.focus()),s.parent.isEdit=!0,13===i?s.clearInput():s.input.isNum?t.keyCode>47&&t.keyCode<58||t.keyCode>95&&t.keyCode<106||190===t.keyCode||110===t.keyCode||8===t.keyCode||109===t.keyCode?s.hiddenImput.readOnly=!1:s.hiddenImput.readOnly=!0:s.hiddenImput.readOnly=!1},keyup:function(t){null!==s.parent&&(s.str=s.hiddenImput.value,s.parent.allEqual?s.parent.sameStr(s.str):s.input.textContent=s.str,s.cursorId=s.hiddenImput.selectionStart,s.inputRange=[s.hiddenImput.selectionStart,s.hiddenImput.selectionEnd],s.selectParent(),s.parent.validate())},loop:function(){s.isLoop&&requestAnimationFrame(s.loop),s.update()},update:function(){let t=s.listens.length;for(;t--;)s.listens[t].listening()},removeListen:function(t){let i=s.listens.indexOf(t);-1!==i&&s.listens.splice(i,1),0===s.listens.length&&(s.isLoop=!1)},addListen:function(t){return-1===s.listens.indexOf(t)&&(s.listens.push(t),s.isLoop||(s.isLoop=!0,s.loop()),!0)}},i=s,e={transition:.2,frag:document.createDocumentFragment(),colorRing:null,joystick_0:null,joystick_1:null,circular:null,knob:null,pad2d:null,svgns:"http://www.w3.org/2000/svg",links:"http://www.w3.org/1999/xlink",htmls:"http://www.w3.org/1999/xhtml",DOM_SIZE:["height","width","top","left","bottom","right","margin-left","margin-right","margin-top","margin-bottom"],SVG_TYPE_D:["pattern","defs","transform","stop","animate","radialGradient","linearGradient","animateMotion","use","filter","feColorMatrix"],SVG_TYPE_G:["svg","rect","circle","path","polygon","text","g","line","foreignObject"],PI:Math.PI,TwoPI:2*Math.PI,pi90:.5*Math.PI,pi60:Math.PI/3,torad:Math.PI/180,todeg:180/Math.PI,clamp:(t,s,i)=>t=(t=ti?i:t,isDivid:t=>.5*t===Math.floor(.5*t),size:{w:240,h:20,p:30,s:8},defineColor:(t,s=e.colors)=>{let i={...s},h=["fontFamily","fontWeight","fontShadow","fontSize"],o=!1;t.font&&(t.fontFamily=t.font),t.shadow&&(t.fontShadow=t.shadow),t.weight&&(t.fontWeight=t.weight),t.fontColor&&(t.text=t.fontColor),t.color&&(t.text=t.color),t.text&&(i.text=t.text,t.fontColor||t.color||(i.title=e.ColorLuma(t.text,-.25),i.titleoff=e.ColorLuma(t.text,-.5)),i.textOver=e.ColorLuma(t.text,.25),i.textSelect=e.ColorLuma(t.text,.5)),t.button&&(i.button=t.button,i.border=e.ColorLuma(t.button,.1),i.overoff=e.ColorLuma(t.button,.2)),t.select&&(i.select=t.select,i.over=e.ColorLuma(t.select,-.1)),t.itemBg&&(t.back=t.itemBg),t.back&&(i.back=t.back,i.backoff=e.ColorLuma(t.back,-.1)),t.fontSelect&&(i.textSelect=t.fontSelect),t.groupBorder&&(i.gborder=t.groupBorder),t.bgOver&&(i.backgroundOver=t.bgOver);for(let s in i)void 0!==t[s]&&(i[s]=t[s]);for(let s in t)-1!==h.indexOf(s)&&(o=!0);return o&&e.defineText(i),i},colors:{sx:4,sy:2,radius:2,showOver:1,content:"none",background:"rgba(50,50,50,0.15)",backgroundOver:"rgba(50,50,50,0.3)",title:"#CCC",titleoff:"#BBB",text:"#DDD",textOver:"#EEE",textSelect:"#FFF",back:"rgba(0,0,0,0.2)",backoff:"rgba(0,0,0,0.3)",border:"#4c4c4c",borderSize:1,gborder:"none",groups:"none",button:"#3c3c3c",overoff:"#5c5c5c",over:"#024699",select:"#308AFF",action:"#FF3300",fontFamily:"Consolas, monospace",fontWeight:"normal",fontShadow:"none",fontSize:12,joyOver:"rgba(48,138,255,0.25)",joyOut:"rgba(100,100,100,0.5)",joySelect:"#308AFF",hide:"rgba(0,0,0,0)"},css:{basic:"position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; -o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;",button:"display:flex; align-items:center; justify-content:center; text-align:center;",middle:"display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;"},svgs:{g1:"M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z",g2:"M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z",group:"M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z",arrow:"M 3 8 L 8 5 3 2 3 8 Z",arrowDown:"M 5 8 L 8 3 2 3 5 8 Z",arrowUp:"M 5 2 L 2 7 8 7 5 2 Z",solid:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z",body:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z",vehicle:"M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z",articulation:"M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z",character:"M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z",terrain:"M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z",joint:"M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z",ray:"M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z",collision:"M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z",map:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",material:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",texture:"M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z",object:"M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z",none:"M 9 5 L 5 5 5 9 9 9 9 5 Z",cursor:"M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z",load:"M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z",save:"M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z",extern:"M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z"},rezone(){i.needReZone=!0},getImput:function(){return!!i.input},setStyle:function(t){for(var s in t)e.colors[s]&&(e.colors[s]=t[s]);e.setText()},defineText:function(t){e.setText(t.fontSize,t.text,t.fontFamily,t.fontShadow,t.fontWeight)},setText:function(t,s,i,h,o){let n=e.colors;void 0===i&&(i=n.fontFamily),void 0===t&&(t=n.fontSize),void 0===h&&(h=n.fontShadow),void 0===o&&(o=n.fontWeight),void 0===s&&(s=n.text),isNaN(t)?-1===t.search("em")&&(t+="px"):t+="px",e.css.txt=e.css.basic+e.css.middle+" font-family:"+i+"; font-weight:"+o+"; font-size:"+t+"; color:"+n.text+"; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;","none"!==h&&(e.css.txt+=" text-shadow: 1px 1px 1px "+h+";"),e.css.txtselect=e.css.txt+"padding:0px 4px; border:1px dashed "+n.border+";",e.css.item=e.css.txt+"padding:0px 4px; position:relative; margin-bottom:1px; "},cloneCss:function(){return{...e.css}},clone:function(t){return t.cloneNode(!0)},setSvg:function(t,s,i,e,h){-1===e?t.setAttributeNS(null,s,i):void 0!==h?t.childNodes[e||0].childNodes[h||0].setAttributeNS(null,s,i):t.childNodes[e||0].setAttributeNS(null,s,i)},setCss:function(t,s){for(let i in s)-1!==e.DOM_SIZE.indexOf(i)?t.style[i]=s[i]+"px":t.style[i]=s[i]},set:function(t,s){for(let i in s)"txt"===i&&(t.textContent=s[i]),"link"===i?t.setAttributeNS(e.links,"xlink:href",s[i]):t.setAttributeNS(null,i,s[i])},get:function(t,s){if(void 0===s)return t;if(!isNaN(s))return t.childNodes[s];if(s instanceof Array){if(2===s.length)return t.childNodes[s[0]].childNodes[s[1]];if(3===s.length)return t.childNodes[s[0]].childNodes[s[1]].childNodes[s[2]]}},dom:function(t,s,i,h,o){return t=t||"div",-1!==e.SVG_TYPE_D.indexOf(t)||-1!==e.SVG_TYPE_G.indexOf(t)?"svg"===t?(h=document.createElementNS(e.svgns,"svg"),e.set(h,i)):(void 0===h&&(h=document.createElementNS(e.svgns,"svg")),e.addAttributes(h,t,i,o)):h=void 0===h?document.createElementNS(e.htmls,t):h.appendChild(document.createElementNS(e.htmls,t)),s&&(h.style.cssText=s),void 0===o?h:h.childNodes[o||0]},addAttributes:function(t,s,i,h){let o=document.createElementNS(e.svgns,s);return e.set(o,i),e.get(t,h).appendChild(o),-1!==e.SVG_TYPE_G.indexOf(s)&&(o.style.pointerEvents="none"),o},clear:function(t){for(e.purge(t);t.firstChild;)t.firstChild.firstChild&&e.clear(t.firstChild),t.removeChild(t.firstChild)},purge:function(t){let s,i,h=t.attributes;if(h)for(s=h.length;s--;)i=h[s].name,"function"==typeof t[i]&&(t[i]=null);if(h=t.childNodes,h)for(s=h.length;s--;)e.purge(t.childNodes[s])},addSVGGlowEffect:function(){if(null!==document.getElementById("UILGlow"))return;let t=e.initUILEffects(),s=e.addAttributes(t,"filter",{id:"UILGlow",x:"-20%",y:"-20%",width:"140%",height:"140%"});e.addAttributes(s,"feGaussianBlur",{in:"SourceGraphic",stdDeviation:"3",result:"uilBlur"});let i=e.addAttributes(s,"feMerge",{});for(let t=0;t<=3;t++)e.addAttributes(i,"feMergeNode",{in:"uilBlur"});e.addAttributes(i,"feMergeNode",{in:"SourceGraphic"})},initUILEffects:function(){let t=document.getElementById("UILSVGEffects");return null===t&&(t=e.dom("svg",void 0,{id:"UILSVGEffects",width:"0",height:"0"}),document.body.appendChild(t)),t},ColorLuma:function(t,s){"n"===t&&(t="#000"),(t=String(t).replace(/[^0-9a-f]/gi,"")).length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),s=s||0;let i,e,h="#";for(e=0;e<3;e++)i=parseInt(t.substr(2*e,2),16),i=Math.round(Math.min(Math.max(0,i+i*s),255)).toString(16),h+=("00"+i).substr(i.length);return h},findDeepInver:function(t){return.3*t[0]+.59*t[1]+.11*t[2]<=.6},lerpColor:function(t,s,i){let e={};for(let h=0;h<3;h++)e[h]=t[h]+(s[h]-t[h])*i;return e},hexToHtml:function(t){return"#"+("000000"+(t=void 0===t?0:t).toString(16)).substr(-6)},htmlToHex:function(t){return t.toUpperCase().replace("#","0x")},u255:function(t,s){return parseInt(t.substring(s,s+2),16)/255},u16:function(t,s){return parseInt(t.substring(s,s+1),16)/15},unpack:function(t){return 7==t.length?[e.u255(t,1),e.u255(t,3),e.u255(t,5)]:4==t.length?[e.u16(t,1),e.u16(t,2),e.u16(t,3)]:void 0},p255:function(t){let s=Math.round(255*t).toString(16);return s.length<2&&(s="0"+s),s},pack:function(t){return"#"+e.p255(t[0])+e.p255(t[1])+e.p255(t[2])},htmlRgb:function(t){return"rgb("+Math.round(255*t[0])+","+Math.round(255*t[1])+","+Math.round(255*t[2])+")"},pad:function(t){return 1==t.length&&(t="0"+t),t},rgbToHex:function(t){let s=Math.round(255*t[0]).toString(16),i=Math.round(255*t[1]).toString(16),h=Math.round(255*t[2]).toString(16);return"#"+e.pad(s)+e.pad(i)+e.pad(h)},hueToRgb:function(t,s,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(s-t)*i:i<.5?s:i<2/3?t+6*(s-t)*(2/3-i):t},rgbToHsl:function(t){let s=t[0],i=t[1],e=t[2],h=Math.min(s,i,e),o=Math.max(s,i,e),n=o-h,r=0,l=0,a=(h+o)/2;return a>0&&a<1&&(l=n/(a<.5?2*a:2-2*a)),n>0&&(o==s&&o!=i&&(r+=(i-e)/n),o==i&&o!=e&&(r+=2+(e-s)/n),o==e&&o!=s&&(r+=4+(s-i)/n),r/=6),[r,l,a]},hslToRgb:function(t){let s,i,h=t[0],o=t[1],n=t[2];return 0===o?[n,n,n]:(i=n<=.5?n*(o+1):n+o-n*o,s=2*n-i,[e.hueToRgb(s,i,h+.33333),e.hueToRgb(s,i,h),e.hueToRgb(s,i,h-.33333)])},makeGradiant:function(t,s,i,h){e.dom(t,null,s,i,0);let o,n=i.childNodes[0].childNodes.length-1;for(let t=0;t0){for(a=6;a--;)r[a]=(113*r[a]+u).toFixed(2);c=" M"+r[0]+" "+r[1]+" Q"+r[2]+" "+r[3]+" "+r[4]+" "+r[5],d=[[0,g[0],1],[100,g[1],1]],e.makeGradiant("linearGradient",{id:"G"+l,x1:r[0],y1:r[1],x2:r[4],y2:r[5],gradientUnits:"userSpaceOnUse"},s,d),e.dom("path","",{d:c,"stroke-width":30,stroke:"url(#G"+l+")","stroke-linecap":"butt"},s,1)}m=n-p,g[0]=g[1]}d=[[0,"#FFFFFF",1],[50,"#FFFFFF",0],[50,"#000000",0],[100,"#000000",1]],e.makeGradiant("linearGradient",{id:"GL0",x1:0,y1:u-84.9,x2:0,y2:212.9,gradientUnits:"userSpaceOnUse"},s,d),d=[[0,"#7f7f7f",1],[50,"#7f7f7f",.5],[100,"#7f7f7f",0]],e.makeGradiant("linearGradient",{id:"GL1",x1:78.95,y1:0,x2:226,y2:0,gradientUnits:"userSpaceOnUse"},s,d),e.dom("g",null,{"transform-origin":"128px 128px",transform:"rotate(0)"},s),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"red"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL1)","stroke-width":1,stroke:"url(#GL1)"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL0)","stroke-width":1,stroke:"url(#GL0)"},s,2),e.dom("path","",{d:"M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z",fill:"none","stroke-width":2,stroke:"#000"},s,2),e.dom("circle","",{cx:128,cy:128,r:6,"stroke-width":2,stroke:"#000",fill:"none"},s),e.colorRing=s},icon:function(t,s,i){i=i||40;let h=[""];switch(t){case"logo":h[1]="";break;case"donate":h[1]="";break;case"neo":h[1]="";break;case"phy":h[1]="";break;case"config":h[1]="";break;case"github":h[1]="";break;case"save":h[1]=""}return h[2]="",h.join("\n")},logoFill_d:"\n\t\tM 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 \n\t\tL 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 \n\t\tM 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 \n\t\tQ 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z\n\t\t",logo_github:"\n\t\tM 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 \n\t\t159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 \n\t\t216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 \n\t\t166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 \n\t\t82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z\n\t\t",logo_neo:"\n\t\tM 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 \n\t\t60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 \n\t\t186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 \n\t\t67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L \n\t\t134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z\n\t\t",logo_phy:"\n\t\tM 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 \n\t\tQ 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95\n\t\t",logo_config:"\n\t\tM 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 \n\t\tL 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 \n\t\tQ 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75\n\t\t",logo_donate:"\n\t\tM 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 \n\t\t106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 \n\t\t112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 \n\t\t154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 \n\t\t194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 \n\t\tQ 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 \n\t\t83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 \n\t\t94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 \n\t\t149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M \n\t\t66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 \n\t\t72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 \n\t\t54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 \n\t\t197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 \n\t\t200.9 187.5 200.9 187.5 195.35 Z\n\t\t"};e.setText();const h=e;class o{static autoTypes(t){let s=[];switch(t){case"svg":s=[{accept:{"image/svg+xml":".svg"}}];break;case"wav":s=[{accept:{"audio/wav":".wav"}}];break;case"mp3":s=[{accept:{"audio/mpeg":".mp3"}}];break;case"mp4":s=[{accept:{"video/mp4":".mp4"}}];break;case"bin":case"hex":s=[{description:"Binary Files",accept:{"application/octet-stream":[".bin",".hex"]}}];break;case"text":s=[{description:"Text Files",accept:{"text/plain":[".txt",".text"],"text/html":[".html",".htm"]}}];break;case"json":s=[{description:"JSON Files",accept:{"application/json":[".json"]}}];break;case"js":s=[{description:"JavaScript Files",accept:{"text/javascript":[".js"]}}];break;case"image":s=[{description:"Images",accept:{"image/*":[".png",".gif",".jpeg",".jpg"]}}];break;case"icon":s=[{description:"Icons",accept:{"image/x-ico":[".ico"]}}];break;case"lut":s=[{description:"Lut",accept:{"text/plain":[".cube",".3dl"]}}]}return s}static async load(t={}){"function"!=typeof window.showOpenFilePicker&&(window.showOpenFilePicker=o.showOpenFilePickerPolyfill);try{let s=t.type||"";const i={excludeAcceptAllOption:!!s,multiple:!1};i.types=o.autoTypes(s);const e=await window.showOpenFilePicker(i),h=await e[0].getFile();if(!h)return null;let n=h.name,r=n.substring(n.lastIndexOf(".")+1,n.length);const l=["png","jpg","jpeg","mp4","webm","ogg","mp3"],a=["sea","z","hex","bvh","BVH","glb","gltf"],c=new FileReader;-1!==l.indexOf(r)?c.readAsDataURL(h):-1!==a.indexOf(r)?c.readAsArrayBuffer(h):c.readAsText(h),c.onload=function(i){let e=i.target.result;switch(s){case"image":let s=new Image;s.onload=function(){t.callback&&t.callback(s,n,r)},s.src=e;break;case"json":t.callback&&t.callback(JSON.parse(e),n,r);break;default:t.callback&&t.callback(e,n,r)}}}catch(s){console.log(s),t.always&&t.callback&&t.callback(null)}}static showOpenFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("input");i.type="file",i.multiple=t.multiple,i.accept=t.types.map((t=>t.accept)).flatMap((t=>Object.keys(t).flatMap((s=>t[s])))).join(","),i.addEventListener("change",(()=>{s([...i.files].map((t=>({getFile:async()=>new Promise((s=>{s(t)}))}))))})),i.click()}))}static async save(t={}){let s=!1;"function"!=typeof window.showSaveFilePicker&&(window.showSaveFilePicker=o.showSaveFilePickerPolyfill,s=!0);try{let i=t.type||"";const e={suggestedName:t.name||"hello",data:t.data||""};e.types=o.autoTypes(i),e.finalType=Object.keys(e.types[0].accept)[0],e.suggestedName+=e.types[0].accept[e.finalType][0];const h=await window.showSaveFilePicker(e);if(s)return;const n=await h.createWritable();let r=new Blob([e.data],{type:e.finalType});await n.write(r),await n.close()}catch(t){console.log(t)}}static showSaveFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("a");i.download=t.suggestedName||"my-file.txt";let e=new Blob([t.data],{type:t.finalType});i.href=URL.createObjectURL(e),i.addEventListener("click",(()=>{s(setTimeout((()=>URL.revokeObjectURL(i.href)),1e3))})),i.click()}))}static async getFolder(){try{const t=await window.showDirectoryPicker(),s=[];for await(const i of t.values()){const t=await i.getFile();s.push(t)}return console.log(s),s}catch(t){console.log(t)}}}class n{constructor(t=0,s=0){this.x=t,this.y=s}set(t,s){return this.x=t,this.y=s,this}divide(t){return this.x/=t.x,this.y/=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divideScalar(t){return this.multiplyScalar(1/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}angle(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t}addScalar(t){return this.x+=t,this.y+=t,this}negate(){return this.x*=-1,this.y*=-1,this}neg(){return this.x=-1,this.y=-1,this}isZero(){return 0===this.x&&0===this.y}copy(t){return this.x=t.x,this.y=t.y,this}equals(t){return t.x===this.x&&t.y===this.y}nearEquals(t,s){return t.x.toFixed(s)===this.x.toFixed(s)&&t.y.toFixed(s)===this.y.toFixed(s)}lerp(t,s){return null===t?(this.x-=this.x*s,this.y-=this.y*s):(this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s),this}}class r{constructor(t={}){this.lock=t.lock||!1,this.neverlock=!1,this.isSpace=t.isSpace||!1,this.main=t.main||null,this.isUI=t.isUI||!1,this.group=t.group||null,this.isListen=!1,this.top=0,this.ytop=0,this.dx=t.dx||0,this.isSelectable=void 0!==t.selectable&&t.selectable,this.unselectable=void 0!==t.unselect?t.unselect:this.isSelectable,this.ontop=!!t.ontop&&t.ontop,this.css=this.main?this.main.css:h.css,this.colors=h.defineColor(t,this.main?this.group?this.group.colors:this.main.colors:h.colors),this.overEffect=this.colors.showOver,this.svgs=h.svgs,this.zone={x:0,y:0,w:0,h:0,d:0},this.local=(new n).neg(),this.isCanvasOnly=!1,this.isSelect=!1,this.p=void 0!==t.p?t.p:h.size.p,this.w=this.isUI?this.main.size.w:h.size.w,void 0!==t.w&&(this.w=t.w),this.h=this.isUI?this.main.size.h:h.size.h,void 0!==t.h&&(this.h=t.h),this.isSpace?this.lock=!0:this.h=this.h<11?11:this.h,this.fw=t.fw||0,this.autoWidth=t.auto||!0,this.isOpen=!1,this.radius=t.radius||this.colors.radius,this.transition=t.transition||h.transition,this.isNumber=!1,this.noNeg=t.noNeg||!1,this.allEqual=t.allEqual||!1,this.mono=!1,this.isEdit=!1,this.simple=t.simple||!1,this.simple&&(this.sa=0),this.setSize(this.w),void 0!==t.sa&&(this.sa=t.sa),void 0!==t.sb&&(this.sb=t.sb),this.simple&&(this.sb=this.w-this.sa),this.sc=void 0===t.sc?47:t.sc,this.objectLink=null,this.isSend=!1,this.objectKey=null,this.txt=t.name||"",this.name=t.rename||this.txt,this.target=t.target||null,this.callback=void 0===t.callback?null:t.callback,this.endCallback=null,this.openCallback=void 0===t.openCallback?null:t.openCallback,this.closeCallback=void 0===t.closeCallback?null:t.closeCallback,null===this.callback&&this.isUI&&null!==this.main.callback&&(this.callback=this.group?this.group.callback:this.main.callback),this.c=[],this.s=[],this.useFlex=!!this.isUI&&this.main.useFlex;let s=this.useFlex?"display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;":"float:left;";this.c[0]=h.dom("div",this.css.basic+s+"position:relative; height:20px;"),this.s[0]=this.c[0].style,this.margin=this.colors.sy,this.mtop=0;let i=h.isDivid(this.margin);if(this.isUI&&this.margin&&(this.s[0].boxSizing="content-box",i?(this.mtop=.5*this.margin,this.s[0].borderTop=this.mtop+"px solid transparent",this.s[0].borderBottom=this.mtop+"px solid transparent"):this.s[0].borderBottom=this.margin+"px solid transparent"),this.simple||(this.c[1]=h.dom("div",this.css.txt+this.css.middle),this.s[1]=this.c[1].style,this.c[1].textContent=this.name,this.s[1].color=this.lock?this.colors.titleoff:this.colors.title),t.pos){this.s[0].position="absolute";for(let s in t.pos)this.s[0][s]=t.pos[s];this.mono=!0}t.css&&(this.s[0].cssText=t.css)}init(){this.ytop=this.top+this.mtop,this.zone.h=this.h+this.margin,this.zone.w=this.w;let t=this.s,s=this.c;t[0].height=this.h+"px",this.isUI&&(t[0].background=this.colors.background),!this.autoWidth&&this.useFlex?(t[0].flex="1 0 auto",t[0].minWidth=this.minw+"px",t[0].textAlign="center"):this.isUI&&(t[0].width="100%"),void 0!==s[1]&&this.autoWidth&&(t[1]=s[1].style,t[1].top="1px",t[1].height=this.h-2+"px");let e=h.frag;for(let i=1,h=s.length;i!==h;i++)void 0!==s[i]&&(e.appendChild(s[i]),t[i]=s[i].style);let o=null!==this.target?this.target:this.isUI?this.main.inner:document.body;this.ontop?o.insertAdjacentElement("afterbegin",s[0]):o.appendChild(s[0]),s[0].appendChild(e),this.rSize(),this.isUI||(this.c[0].style.pointerEvents="auto",i.add(this))}addTransition(){this.baseH&&this.transition&&this.isUI&&(this.c[0].style.transition="height "+this.transition+"s ease-out")}dom(t,s,i,e,o){return h.dom(t,s,i,e,o)}setSvg(t,s,i,e,o){h.setSvg(t,s,i,e,o)}setCss(t,s){h.setCss(t,s)}clamp(t,s,i){return h.clamp(t,s,i)}getColorRing(){return h.colorRing||h.makeColorRing(),h.clone(h.colorRing)}getJoystick(t){return h["joystick_"+t]||h.makeJoystick(t),h.clone(h["joystick_"+t])}getCircular(t){return h.circular||h.makeCircular(t),h.clone(h.circular)}getKnob(t){return h.knob||h.makeKnob(t),h.clone(h.knob)}getPad2d(t){return h.pad2d||h.makePad(t),h.clone(h.pad2d)}cursor(t){i.cursor(t)}update(){}reset(){}content(){return this.c[0]}getDom(){return this.c[0]}uiout(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.background)}uiover(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.backgroundOver)}rename(t){void 0!==this.c[1]&&(this.c[1].textContent=t)}listen(){return this.isListen=i.addListen(this),this}listening(){null!==this.objectLink&&(this.isSend||this.isEdit||this.setValue(this.objectLink[this.objectKey]))}setValue(t){this.isNumber?this.value=this.numValue(t):this.value=t,this.update()}onChange(t){if(!this.isSpace)return this.callback=t||null,this}onFinishChange(t){if(!this.isSpace)return this.callback=null,this.endCallback=t,this}onOpen(t){return this.openCallback=t,this}onClose(t){return this.closeCallback=t,this}send(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.isSend=!0,null!==this.objectLink&&(this.objectLink[this.objectKey]=t),this.callback&&this.callback(t,this.objectKey),this.isSend=!1}sendEnd(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.endCallback&&this.endCallback(t),null!==this.objectLink&&(this.objectLink[this.objectKey]=t)}dispose(){this.isListen&&i.removeListen(this),h.clear(this.c[0]),null!==this.target?null!==this.group?this.group.clearOne(this):this.target.removeChild(this.c[0]):this.isUI?this.main.clearOne(this):document.body.removeChild(this.c[0]),this.isUI||i.remove(this),this.c=null,this.s=null,this.callback=null,this.target=null,this.isListen=!1}clear(){}getWidth(){let t=i.getWidth(this);t&&(this.w=t)}setSize(t){if(this.autoWidth)if(this.w=t,this.simple)this.sb=this.w-this.sa;else{let t=this.w*(this.p/100);this.sa=Math.floor(t+8),this.sb=Math.floor(this.w-t-16)}}rSize(){this.autoWidth&&(this.isUI||(this.s[0].width=this.w+"px"),this.simple||(this.s[1].width=this.sa+"px"))}setTypeNumber(t){let s;switch(this.isNumber=!0,this.value=0,void 0!==t.value&&("string"==typeof t.value?this.value=1*t.value:this.value=t.value),this.min=void 0===t.min?-1/0:t.min,this.max=void 0===t.max?1/0:t.max,this.precision=void 0===t.precision?2:t.precision,this.precision){case 0:s=1;break;case 1:s=.1;break;case 2:s=.01;break;case 3:s=.001;break;case 4:s=1e-4;break;case 5:s=1e-5;break;case 6:s=1e-6}this.step=void 0===t.step?s:t.step,this.range=this.max-this.min,this.value=this.numValue(this.value)}numValue(t){return this.noNeg&&(t=Math.abs(t)),1*Math.min(this.max,Math.max(this.min,t)).toFixed(this.precision)}handleEvent(t){if(!this.lock)return this.neverlock&&(i.lock=!1),this[t.type]?this[t.type](t):console.error(t.type,"this type of event no existe !")}wheel(t){return!1}mousedown(t){return!1}mousemove(t){return!1}mouseup(t){return!1}keydown(t){return!1}keyup(t){return!1}setReferency(t,s){this.objectLink=t,this.objectKey=s}display(t=!1){this.s[0].visibility=t?"visible":"hidden"}open(){this.isOpen||(this.isOpen=!0,i.needResize=!0,this.openCallback&&this.openCallback())}close(){this.isOpen&&(this.isOpen=!1,i.needResize=!0,this.closeCallback&&this.closeCallback())}needZone(){i.needReZone=!0}rezone(){i.needReZone=!0}select(){}unselect(){}setInput(t){i.setInput(t,this)}upInput(t,s){return i.upInput(t,s)}selected(t){this.isSelect=t||!1}}class l extends r{constructor(t={}){super(t),this.value=t.value||!1,this.model=void 0!==t.mode?t.mode:0,this.onName=t.rename||this.txt,t.onName&&(t.onname=t.onName),t.onname&&(this.onName=t.onname),this.inh=t.inh||Math.floor(.8*this.h),this.inw=t.inw||36;let s=this.colors;if(0===this.model){let t=Math.floor(.5*this.h)-.5*(this.inh-2);this.c[2]=this.dom("div",this.css.basic+"background:"+s.inputBg+"; height:"+(this.inh-2)+"px; width:"+this.inw+"px; top:"+t+"px; border-radius:10px; border:2px solid "+s.back),this.c[3]=this.dom("div",this.css.basic+"height:"+(this.inh-6)+"px; width:16px; top:"+(t+2)+"px; border-radius:10px; background:"+s.button+";")}else this.p=0,void 0!==this.c[1]&&(this.c[1].textContent=""),this.c[2]=this.dom("div",this.css.txt+this.css.button+"top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.borderSize+"px solid "+s.border+"; border-radius:"+this.radius+"px;");this.stat=-1,this.init(),this.update()}mousedown(t){return this.value=!this.value,this.update(!0),this.mousemove(t)}mousemove(t){return this.cursor("pointer"),this.mode(!0)}reset(){return this.cursor(),this.mode()}mode(t){let s,i=!1,e=this.colors,h=this.s,o=this.value;if(s=t?o?4:3:o?2:1,this.stat!==s){if(this.stat=s,0!==this.model){switch(s){case 1:h[2].color=e.text,h[2].background=e.button;break;case 2:h[2].color=e.textSelect,h[2].background=e.select;break;case 3:h[2].color=e.textOver,h[2].background=e.overoff;break;case 4:h[2].color=e.textOver,h[2].background=e.over}this.c[2].innerHTML=o?this.onName:this.name}else{switch(s){case 1:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.button;break;case 2:h[2].background=h[2].borderColor=e.back,h[3].background=e.textOver;break;case 3:h[2].background=h[2].borderColor=e.back,h[3].background=e.overoff;break;case 4:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.textSelect}h[3].marginLeft=o?"17px":"2px",this.c[1].textContent=o?this.onName:this.name}i=!0}return i}update(t){this.mode(),t&&this.send()}rSize(){super.rSize();let t=this.s,s=this.w-10-this.inw;0===this.model?(t[2].left=s+"px",t[3].left=s+"px"):(t[2].left=this.sa+"px",t[2].width=this.sb+"px")}}class a extends r{constructor(t={}){super(t),this.value="",void 0!==t.value&&(this.value=t.value),this.values=t.value||this.txt,t.values&&(this.values=t.values),t.values||t.value||(this.txt=""),this.onName=t.onName||null,this.on=!1,this.bw=t.forceWidth||0,t.bw&&(this.bw=t.bw),this.space=t.space||3,"string"==typeof this.values&&(this.values=[this.values]),this.isDown=!1,this.neverlock=!0,this.res=0,this.lng=this.values.length,this.tmp=[],this.stat=[];let s,i=this.colors;for(let t=0;te[i][0]&&s.x0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.text,this.setSvg(this.c[3],"stroke",s,1);break;case 1:this.s[2].color=i.textOver,this.setSvg(this.c[3],"stroke",i.backoff,0),s=this.model>0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.textOver,this.setSvg(this.c[3],"stroke",s,1)}return this.cmode=t,!0}reset(){this.isDown=!1}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"circular"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;if(s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=s.angle()-this.pi90,this.r=(this.r%this.twoPi+this.twoPi)%this.twoPi,null!==this.oldr){let t=this.r-this.oldr;this.r=Math.abs(t)>Math.PI?this.oldr:this.r,t>6&&(this.r=0),t<-6&&(this.r=this.twoPi)}let i=1/this.twoPi,e=this.r*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=~~(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("circular"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:sMath.PI?1:0)+" 1 "+i+","+e}update(t){if(this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range,this.setSvg(this.c[3],"d",this.makePath(),1),this.model>0){let t=this.colors,s=h.pack(h.lerpColor(h.unpack(h.ColorLuma(t.text,-.75)),h.unpack(t.text),this.percent));this.setSvg(this.c[3],"stroke",s,1)}t&&this.send()}}class d extends r{constructor(t={}){super(t),this.ctype=t.ctype||"hex",this.wfixe=256,this.cw=this.sb>256?256:this.sb,null!=t.cw&&(this.cw=t.cw),this.side=t.side||"down",this.up="down"===this.side?0:1,this.baseH=this.h,this.offset=new n,this.decal=new n,this.pp=new n;let s=this.colors;this.c[2]=this.dom("div",`${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${s.borderSize}px solid ${s.border};`),this.c[0].style.display="block",this.c[3]=this.getColorRing(),this.c[3].style.visibility="hidden",this.hsl=null,this.value="#ffffff",void 0!==t.value&&(t.value instanceof Array?this.value=h.rgbToHex(t.value):isNaN(t.value)?this.value=t.value:this.value=h.hexToHtml(t.value)),this.bcolor=null,this.isDown=!1,this.fistDown=!1,this.notext=t.notext||!1,this.tr=98,this.tsl=Math.sqrt(3)*this.tr,this.hue=0,this.d=256,this.init(),this.setColor(this.value),void 0!==t.open&&this.open()}testZone(t,s){let i=this.local;return-1===i.x&&-1===i.y?"":this.up&&this.isOpen?i.y>this.wfixe?"title":"color":i.ythis.tr)e=(c+u.pi90)/u.TwoPI,this.hue=(e+1)%1,this.setHSL([(e+1)%1,this.hsl[1],this.hsl[2]]);else{l=s.x*this.ratio,a=s.y*this.ratio;let t=this.hue*u.TwoPI+u.PI;t<0&&(t+=2*u.PI),r=Math.atan2(-a,l),r<0&&(r+=2*u.PI);let i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,h=.5*this.tr,c=Math.tan(e)*h,d=Math.sqrt(l*l+a*a),p=Math.sqrt(h*h+c*c);if(d>p){let s=Math.tan(e)*d,o=Math.atan(s/p);o>u.pi60?o=u.pi60:o<-u.pi60&&(o=-u.pi60),r+=o-e,i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,c=Math.tan(e)*h,d=p=Math.sqrt(h*h+c*c)}n=Math.sin(i)*d/this.tsl+.5;let m=1-2*Math.abs(n-.5);o=(Math.cos(i)*d+this.tr/2)/(1.5*this.tr)/m,o=u.clamp(o,0,1),this.setHSL([this.hsl[0],o,n])}}setHeight(){this.h=this.isOpen?this.wfixe+this.baseH+5:this.baseH,this.s[0].height=this.h+"px",this.zone.h=this.h}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(){super.open(),this.setHeight(),this.up&&(this.zone.y-=this.wfixe+5);let t=this.h-this.baseH;this.s[3].visibility="visible",this.parentHeight(t)}close(){super.close(),this.up&&(this.zone.y+=this.wfixe+5);let t=this.h-this.baseH;this.setHeight(),this.s[3].visibility="hidden",this.parentHeight(-t)}update(t){let s=h.rgbToHex(h.hslToRgb([this.hsl[0],1,.5]));this.moveMarkers(),this.value=this.bcolor,this.setSvg(this.c[3],"fill",s,2,0),this.s[2].background=this.bcolor,this.notext||(this.c[2].textContent=h.htmlToHex(this.bcolor)),this.invert=h.findDeepInver(this.rgb),this.s[2].color=this.invert?"#fff":"#000",t&&("array"===this.ctype&&this.send(this.rgb),"rgb"===this.ctype&&this.send(h.htmlRgb(this.rgb)),"hex"===this.ctype&&this.send(h.htmlToHex(this.value)),"html"===this.ctype&&this.send())}setValue(t){t instanceof Array?this.value=h.rgbToHex(t):isNaN(t)?this.value=t:this.value=h.hexToHtml(t),this.setColor(this.value),this.update()}setColor(t){let s=h.unpack(t);return this.bcolor!==t&&s&&(this.bcolor=t,this.rgb=s,this.hsl=h.rgbToHsl(this.rgb),this.hue=this.hsl[0],this.update()),this}setHSL(t){return this.hsl=t,this.rgb=h.hslToRgb(t),this.bcolor=h.rgbToHex(this.rgb),this.update(!0),this}moveMarkers(){let t=this.pp,s=h;this.invert;let i=this.hsl[0]*s.TwoPI,e=2/3*s.PI,o=this.tr,n=this.hsl[0],r=this.hsl[1],l=this.hsl[2],a=(i-s.pi90)*s.todeg;n=-i+s.pi90;let c=Math.cos(n)*o,d=-Math.sin(n)*o,u=Math.cos(n-e)*o,p=-Math.sin(n-e)*o,m=Math.cos(n+e)*o,g=-Math.sin(n+e)*o,x=(u+m)/2,v=(p+g)/2;i=(1-2*Math.abs(l-.5))*r;let b=u+(m-u)*l+(c-x)*i,f=p+(g-p)*l+(d-v)*i;t.set(b,f).addScalar(128),this.setSvg(this.c[3],"transform","rotate("+a+" )",2),this.setSvg(this.c[3],"cx",t.x,3),this.setSvg(this.c[3],"cy",t.y,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",2,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",3),this.setSvg(this.c[3],"fill",this.bcolor,3)}rSize(){super.rSize();let t=this.s;t[2].width=this.sb+"px",t[2].left=this.sa+"px",this.cw=this.sb>256?256:this.sb,this.rSizeColor(this.cw),this.decal.x=Math.floor(.5*(this.w-this.wfixe))}rSizeColor(t){if(t===this.wfixe)return;this.wfixe=t;let s=this.s;this.decal.y="up"===this.side?2:this.baseH+2,this.mid=Math.floor(.5*this.wfixe),this.setSvg(this.c[3],"viewBox","0 0 "+this.wfixe+" "+this.wfixe),s[3].width=this.wfixe+"px",s[3].height=this.wfixe+"px",s[3].top=this.decal.y+"px",this.ratio=256/this.wfixe,this.square=1/(this.wfixe/256*60),this.setHeight()}}class u extends r{constructor(t={}){super(t),this.round=Math.round,this.baseH=this.h,this.hplus=t.hplus||50,this.res=t.res||40,this.l=1,this.precision=t.precision||0,this.custom=t.custom||!1,this.names=t.names||["FPS","MS"];let s=t.cc||["220,220,220","255,255,0"];this.adding=t.adding||!1,this.range=t.range||[165,100,100],this.alpha=t.alpha||.25,this.values=[],this.points=[],this.textDisplay=[],this.custom||(this.now=i.getTime(),this.startTime=0,this.prevTime=0,this.frames=0,this.ms=0,this.fps=0,this.mem=0,this.mm=0,this.isMem=!(!self.performance||!self.performance.memory),this.isMem&&(this.names.push("MEM"),s.push("0,255,255")),this.txt=t.name||"Fps");let e=Math.floor(.5*this.h)-3;const h=this.colors;this.c[1].textContent=this.txt,this.c[0].style.cursor="pointer",this.c[0].style.pointerEvents="auto";let o="display:none; left:10px; top:"+this.h+"px; height:"+(this.hplus-8)+"px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid "+h.border+";";0!==this.radius&&(o+="border-radius:"+this.radius+"px;"),this.c[2]=this.dom("path",this.css.basic+o,{}),this.c[2].setAttribute("viewBox","0 0 "+this.res+" 50"),this.c[2].setAttribute("height","100%"),this.c[2].setAttribute("width","100%"),this.c[2].setAttribute("preserveAspectRatio","none"),this.c[3]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; left:0; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.c[4]=this.dom("div",this.css.txt+"position:absolute; left:10px; top:"+(this.h+2)+"px; display:none; width:100%; text-align:center;"),t.bottomLine&&(this.c[4]=this.dom("div",this.css.basic+"width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);")),this.isShow=!1;let n=this.s;n[1].lineHeight=this.h-4,n[1].color=h.text,0!==this.radius&&(n[0].borderRadius=this.radius+"px"),"none"!==this.colors.gborder&&(n[0].border="1px solid "+h.gborder);let r=0;for(r=0;r "+this.names[r]+" ")}for(r=this.names.length;r--;)this.dom("path",null,{fill:"rgba("+s[r]+","+this.alpha+")","stroke-width":1,stroke:"rgba("+s[r]+",1)","vector-effect":"non-scaling-stroke"},this.c[2]);this.init()}mousedown(t){this.isShow?this.close():this.open()}tick(t){this.values=t,this.isShow&&(this.drawGraph(),this.upText())}makePath(t){let s="";s+="M -1 50";for(let i=0;i";this.c[4].innerHTML=i}drawGraph(){let t,s=this.c[2],i=this.names.length,e=0,h=0;for(;i--;)t=this.adding?(this.values[h]+e)*this.range[h]:this.values[h]*this.range[h],this.points[h].shift(),this.points[h].push(50-t),this.setSvg(s,"d",this.makePath(this.points[h]),i+1),e+=this.values[h],h++}open(){super.open(),this.h=this.hplus+this.baseH,this.setSvg(this.c[3],"d",this.svgs.g2),null!==this.group?this.group.calc(this.hplus):this.isUI&&this.main.calc(this.hplus),this.s[0].height=this.h+"px",this.s[2].display="block",this.s[4].display="block",this.isShow=!0,this.custom||i.addListen(this)}close(){super.close(),this.h=this.baseH,this.setSvg(this.c[3],"d",this.svgs.g1),null!==this.group?this.group.calc(-this.hplus):this.isUI&&this.main.calc(-this.hplus),this.s[0].height=this.h+"px",this.s[2].display="none",this.s[4].display="none",this.isShow=!1,this.custom||i.removeListen(this),this.c[4].innerHTML=""}begin(){this.startTime=this.now()}end(){let t=this.now();if(this.ms=t-this.startTime,this.frames++,t>this.prevTime+1e3&&(this.fps=this.round(1e3*this.frames/(t-this.prevTime)),this.prevTime=t,this.frames=0,this.isMem)){let t=performance.memory.usedJSHeapSize,s=performance.memory.jsHeapSizeLimit;this.mem=this.round(954e-9*t),this.mm=t/s}return this.values=[this.fps,this.ms,this.mm],this.drawGraph(),this.upText([this.fps,this.ms,this.mem]),t}listening(){this.custom||(this.startTime=this.end())}rSize(){let t=this.s,s=this.w;t[3].left=this.sa+this.sb-6+"px",t[0].width=s+"px",t[1].width=s+"px",t[2].left="10px",t[2].width=s-20+"px",t[4].width=s-20+"px"}}class p extends r{constructor(t={}){super(t),this.value=void 0!==t.value?t.value:[0,0,0],this.lng=this.value.length,this.precision=void 0!==t.precision?t.precision:2,this.multiplicator=t.multiplicator||1,this.neg=t.neg||!1,this.line=void 0===t.line||t.line,this.autoWidth=void 0===t.autoWidth||t.autoWidth,this.isNumber=!1,this.isDown=!1,this.h=t.h||138,this.rh=this.h-10,this.top=0,this.c[0].style.width=this.w+"px",void 0!==this.c[1]&&(this.c[1].style.width=this.w+"px",this.autoWidth||(this.c[1].style.width="100%",this.c[1].style.justifyContent="center"),this.top=10,this.h+=10),this.gh=this.rh-28,this.gw=this.w-28,this.c[2]=this.dom("div",this.css.txt+"display:block; text-align:center; padding:0px 0px; top:"+(this.h-20)+"px; left:14px; width:"+this.gw+"px;\tcolor:"+this.colors.text),this.c[2].innerHTML=this.valueToHtml();let s=this.dom("svg",this.css.basic,{viewBox:"0 0 "+this.w+" "+this.rh,width:this.w,height:this.rh,preserveAspectRatio:"none"});this.setCss(s,{width:this.w,height:this.rh,left:0,top:this.top}),this.dom("path","",{d:"",stroke:this.colors.text,"stroke-width":2,fill:"none","stroke-linecap":"butt"},s),this.dom("rect","",{x:10,y:10,width:this.gw+8,height:this.gh+8,stroke:"rgba(0,0,0,0.3)","stroke-width":1,fill:"none"},s),this.iw=(this.gw-4*(this.lng-1))/this.lng;let i=[];this.cMode=[],this.v=[];for(let t=0;t',e="width:"+100/this.lng+"%;";for(;t--;)s===this.lng-1?i+=""+this.value[s]+"":i+=""+this.value[s]+"",s++;return i}updateSVG(){this.line&&this.setSvg(this.c[3],"d",this.makePath(),0);for(let t=0;tthis.top&&s.ye[i][0]&&s.xthis.distance){let t=Math.atan2(this.tmp.x,this.tmp.y);this.tmp.x=Math.sin(t)*this.distance,this.tmp.y=Math.cos(t)*this.distance}this.pos.copy(this.tmp).divideScalar(this.distance).negate(),this.update()}setValue(t){void 0===t&&(t=[0,0]),this.pos.set(t[0]||0,t[1]||0),this.updateSVG()}update(t){void 0===t&&(t=!0),null!==this.interval&&(this.isDown||(this.pos.lerp(null,.3),this.pos.x=Math.abs(this.pos.x)<.01?0:this.pos.x,this.pos.y=Math.abs(this.pos.y)<.01?0:this.pos.y,this.isUI&&this.main.isCanvas&&this.main.draw())),this.updateSVG(),t&&this.send(),this.pos.isZero()&&this.stopInterval()}updateSVG(){let t=.5*this.diam- -this.pos.x*this.distance,s=.5*this.diam- -this.pos.y*this.distance;if(0===this.model){let i=t+5*this.pos.x+5,e=s+5*this.pos.y+10;this.setSvg(this.c[3],"cx",i*this.ratio,3),this.setSvg(this.c[3],"cy",e*this.ratio,3)}else this.setSvg(this.c[3],"cx",t*this.ratio,3),this.setSvg(this.c[3],"cy",s*this.ratio,3);this.setSvg(this.c[3],"cx",t*this.ratio,4),this.setSvg(this.c[3],"cy",s*this.ratio,4),this.value[0]=1*(this.pos.x*this.multiplicator).toFixed(this.precision),this.value[1]=1*(this.pos.y*this.multiplicator).toFixed(this.precision),this.haveText&&(this.c[2].textContent=this.value)}clear(){this.stopInterval(),super.clear()}}class v extends r{constructor(t={}){super(t),this.isCyclic=t.cyclic||!1,this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.autoWidth=!1,this.setTypeNumber(t),this.minw=this.w,this.diam=t.diam||this.w,this.mPI=.8*Math.PI,this.toDeg=180/Math.PI,this.cirRange=2*this.mPI,this.offset=new n,this.h=t.h||this.w+10,this.c[0].style.width=this.w+"px",this.c[0].style.display="block",void 0!==this.c[1]&&(this.c[1].style.width="100%",this.c[1].style.justifyContent="center",this.top=10,this.h+=10),this.percent=0,this.cmode=0;let s=this.colors;this.c[2]=this.dom("div",this.css.txt+"justify-content:center; top:"+(this.h-20)+"px; width:100%; color:"+s.text),this.c[3]=this.getKnob(),this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1),this.setSvg(this.c[3],"stroke",s.text,3),this.setSvg(this.c[3],"d",this.makeGrad(),3),this.setSvg(this.c[3],"viewBox","0 0 "+this.diam+" "+this.diam),this.setCss(this.c[3],{width:this.diam,height:this.diam,left:0,top:this.top}),this.model>0&&(h.dom("path","",{d:"",stroke:s.text,"stroke-width":2,fill:"none","stroke-linecap":"round"},this.c[3]),2==this.model&&(h.addSVGGlowEffect(),this.setSvg(this.c[3],"style",'filter: url("#UILGlow");',4))),this.r=0,this.init(),this.update()}mode(t){let s=this.colors;if(this.cmode===t)return!1;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1);break;case 1:this.s[2].color=s.textOver,this.setSvg(this.c[3],"fill",s.select,0),this.setSvg(this.c[3],"stroke",s.textOver,1)}return this.cmode=t,!0}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"knob"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=-Math.atan2(s.x,s.y),null!==this.oldr&&(this.r=Math.abs(this.r-this.oldr)>Math.PI?this.oldr:this.r),this.r=this.r>this.mPI?this.mPI:this.r,this.r=this.r<-this.mPI?-this.mPI:this.r;let i=1/this.cirRange,e=(this.r+this.mPI)*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=Math.floor(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("knob"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s5?(s=this.range/this.step,t=(a-c)/s):(t=(a-c)/l*2,s=32);for(let c=0;c<=s;++c)i=a-t*c,e=l+44*Math.sin(i),h=l+44*Math.cos(i),o=l+40*Math.sin(i),n=l+40*Math.cos(i),r+="M"+e+" "+h+" L"+o+" "+n+" ";return r}update(t){this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range;let s=Math.PI+this.mPI,i=this.percent*this.cirRange-this.mPI,e=Math.sin(i),o=Math.cos(i),n=25*e+64,r=-25*o+64,l=20*e+64,a=-20*o+64;if(this.setSvg(this.c[3],"d","M "+n+" "+r+" L "+l+" "+a,1),this.model>0){let t=36*Math.sin(s)+64,n=36*Math.cos(s)+64,r=36*e+64,l=-36*o+64,a=i<=Math.PI-this.mPI?0:1;this.setSvg(this.c[3],"d","M "+t+","+n+" A 36,36 1 "+a+" 1 "+r+","+l,4);let c=h.pack(h.lerpColor(h.unpack(h.ColorLuma(this.colors.text,-.75)),h.unpack(this.colors.text),this.percent));this.setSvg(this.c[3],"stroke",c,4)}t&&this.send()}}class b extends r{constructor(t={}){super(t),this.hideCurrent=!1,this.path=t.path||"",this.format=t.format||"",this.isWithImage=""!==this.path,this.preLoadComplete=!1,this.tmpImage={},this.tmpUrl=[],this.m=void 0!==t.m?t.m:5;let s=t.align||"left",i=t.scrollSize||10;this.ss=i+1,this.sMode=0,this.tMode=0,this.listOnly=t.listOnly||!1,this.staticTop=t.staticTop||!1,this.isSelectable=this.listOnly,void 0!==t.select&&(t.selectable=t.select),void 0!==t.selectable&&(this.isSelectable=t.selectable),""===this.txt&&(this.p=0);let e=Math.floor(.5*this.h)-3,h=this.colors;if(this.c[2]=this.dom("div",this.css.basic+"top:0; display:none; border-radius:"+this.radius+"px;"),this.c[3]=this.dom("div",this.css.item+"padding:0px "+this.m+"px; margin-bottom:0px; position:absolute; justify-content:"+s+"; text-align:"+s+"; line-height:"+(this.h-4)+"px; top:1px; background:"+h.button+"; height:"+(this.h-2)+"px; border:1px solid "+h.border+"; border-radius:"+this.radius+"px;"),this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.scrollerBack=this.dom("div",this.css.basic+"right:0px; width:"+i+"px; background:"+h.back+"; display:none;"),this.scroller=this.dom("div",this.css.basic+"right:"+.5*(i-.25*i)+"px; width:"+.25*i+"px; background:"+h.text+"; display:none; "),this.c[3].style.color=h.text,this.list=[],this.refObject=null,t.list)if(t.list instanceof Array)this.list=t.list;else if(t.list instanceof Object){this.refObject=t.list;for(let t in this.refObject)this.list.push(t)}this.items=[],this.prevName="",this.tmpId=0,this.baseH=this.h,this.itemHeight=t.itemHeight||this.h,this.full=t.full||!1,this.py=0,this.ww=this.sb,this.scroll=!1,this.isDown=!1,this.current=null,this.side=t.side||"down",this.up="down"===this.side?0:1,this.up?(this.c[2].style.top="auto",this.c[3].style.top="auto",this.c[4].style.top="auto",this.c[2].style.bottom=this.h-2+"px",this.c[3].style.bottom="1px",this.c[4].style.bottom=e+"px"):this.c[2].style.top=this.baseH+"px",this.listIn=this.dom("div",this.css.basic+"left:0; top:0; width:100%; background:none;"),this.listIn.name="list",this.topList=0,this.c[2].appendChild(this.listIn),this.c[2].appendChild(this.scrollerBack),this.c[2].appendChild(this.scroller),void 0!==t.value?isNaN(t.value)?this.value=t.value:this.value=this.list[t.value]:this.value=this.list[0],this.isOpenOnStart=t.open||!1,this.listOnly&&(this.baseH=5,this.c[3].style.display="none",this.c[4].style.display="none",this.c[2].style.top=this.baseH+"px",this.isOpenOnStart=!0),this.miniCanvas=t.miniCanvas||!1,this.canvasBg=t.canvasBg||"rgba(0,0,0,0)",this.imageSize=t.imageSize||[20,20],this.drag=t.drag||!1,this.dragout=t.dragout||!1,this.dragstart=t.dragstart||null,this.dragend=t.dragend||null,this.setList(this.list),this.init(),this.isWithImage&&this.preloadImage(),this.isOpenOnStart&&this.open(!0),this.baseH+=this.mtop}preloadImage(){this.preLoadComplete=!1,this.tmpImage={};for(let t=0;tthis.h-this.baseH)return"title";if(this.scroll&&s.x>this.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}else{if(s.ythis.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}}return""}testItems(t){let s,i,e,h="",o=this.items,n=o.length;for(;n--;)if(s=o[n],i=s.posy+this.topList,e=s.posy+this.itemHeight+1+this.topList,t>=i&&t<=e)return h="item"+n,this.modeItem(0),this.current=s,this.modeItem(1),h;return h}modeItem(t){if(!this.current)return;this.current.select&&0===t&&(t=2);let s=this.colors;switch(t){case 0:this.current.style.background=s.back,this.current.style.color=s.text;break;case 1:this.current.style.background=s.over,this.current.style.color=s.textOver;break;case 2:this.current.style.background=s.select,this.current.style.color=s.textSelect}}unSelected(){this.current&&(this.modeItem(0),this.current=null)}selected(){this.current&&(this.resetItems(),this.modeItem(2),this.current.select=!0)}resetItems(){let t=this.items.length;for(;t--;)this.items[t].select=!1,this.items[t].style.background=this.colors.back,this.items[t].style.color=this.colors.text}hideActive(){this.hideCurrent&&(this.current&&(this.tmpId=this.current.id),this.resetHide())}resetHide(){console.log(this.tmpId);let t=this.items.length;for(;t--;)t===this.tmpId?(this.items[t].style.height="0px",this.items[t].posy=-1):(this.items[t].style.height=this.itemHeight+"px",this.items[t].posy=(this.itemHeight+1)*(t-1))}mouseup(t){this.isDown=!1}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s?(this.isDown=!0,this.mousemove(t)):"title"===s?(this.modeTitle(2),this.listOnly||(this.hideActive(),this.isOpen?this.close():this.open())):this.current&&(this.value=this.list[this.current.id],this.isSelectable&&this.selected(),this.send(this.value),this.listOnly||(this.close(),this.setTopItem())),!0)}mousemove(t){let s=!1,i=this.testZone(t);if(!i)return s;if("title"===i)this.unSelected(),this.modeTitle(1),this.cursor("pointer");else if("scroll"===i){if(this.cursor("s-resize"),this.modeScroll(1),this.isDown){this.modeScroll(2);let s=this.zone.y+this.baseH-2;this.update(t.clientY-s-.5*this.sh)}}else this.modeTitle(0),this.modeScroll(0),this.cursor("pointer");return i!==this.prevName&&(s=!0),this.prevName=i,s}wheel(t){return"title"!==this.testZone(t)&&(this.py+=10*t.delta,this.update(this.py),!0)}reset(){this.prevName="",this.unSelected(),this.modeTitle(0),this.modeScroll(0)}modeScroll(t){if(t===this.sMode)return;let s=this.scroller.style,i=this.colors;switch(t){case 0:s.background=i.text;break;case 1:case 2:s.background=i.select}this.sMode=t}modeTitle(t){if(t===this.tMode)return;let s=this.s,i=this.colors;switch(t){case 0:s[3].color=i.text,s[3].background=i.button;break;case 1:s[3].color=i.textOver,s[3].background=i.overoff;break;case 2:s[3].color=i.textSelect,s[3].background=i.overoff}this.tMode=t}clearList(){for(;this.listIn.children.length;)this.listIn.removeChild(this.listIn.lastChild);this.items=[]}setList(t){this.clearList(),this.list=t,this.length=this.list.length;let s,e,h=this.hideCurrent?this.length-1:this.length;this.maxItem=this.full?h:5,this.maxItem=hthis.maxHeight&&(this.ww=this.sb-this.ss,this.scroll=!0),this.miniCanvas&&(this.tmpCanvas=document.createElement("canvas"),this.tmpCanvas.width=this.imageSize[0],this.tmpCanvas.height=this.imageSize[1],this.tmpCtx=this.tmpCanvas.getContext("2d"),this.tmpCtx.fillStyle=this.canvasBg,this.tmpCtx.fillRect(0,0,this.imageSize[0],this.imageSize[1]));for(let t=0;tthis.range?this.range:t,this.topList=-Math.floor(t/this.ratio),this.listIn.style.top=this.topList+"px",this.scroller.style.top=Math.floor(t)+"px",this.py=t)}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(t){super.open(),this.update(0),this.h=this.maxHeight+this.baseH+5,this.scroll?(this.scroller.style.display="block",this.scrollerBack.style.display="block"):(this.topList=0,this.h=this.baseH+5+this.max,this.scroller.style.display="none",this.scrollerBack.style.display="none"),this.s[0].height=this.h+"px",this.s[2].display="block",this.up?(this.zone.y-=this.h-(this.baseH-10),this.setSvg(this.c[4],"d",this.svgs.g1)):this.setSvg(this.c[4],"d",this.svgs.g2),this.rSizeContent();let s=this.h-this.baseH;this.zone.h=this.h,t||this.parentHeight(s)}close(){super.close(),this.up&&(this.zone.y+=this.h-(this.baseH-10));let t=this.h-this.baseH;this.h=this.baseH,this.s[0].height=this.h+"px",this.s[2].display="none",this.setSvg(this.c[4],"d",this.svgs.g1),this.zone.h=this.h,this.parentHeight(-t)}text(t){this.c[3].textContent=t}rSizeContent(){let t=this.length;for(;t--;)this.listIn.children[t].style.width=this.ww+"px"}rSize(){super.rSize();let t=this.s,s=this.sb,i=this.sa;void 0!==t[2]&&(t[2].width=s+"px",t[2].left=i+"px",t[3].width=s+"px",t[3].left=i+"px",t[4].left=i+s-15+"px",this.ww=s,this.max>this.maxHeight&&(this.ww=s-this.ss),this.isOpen&&this.rSizeContent())}}class f extends r{constructor(t={}){super(t),this.setTypeNumber(t),this.allway=t.allway||!1,this.isDown=!1,this.value=[0],this.multy=1,this.invmulty=1,this.isSingle=!0,this.isAngle=!1,this.isVector=!1,t.isAngle&&(this.isAngle=!0,this.multy=h.torad,this.invmulty=h.todeg),this.isDrag=t.drag||!1,void 0!==t.value&&(isNaN(t.value)?t.value instanceof Array?(this.value=t.value,this.isSingle=!1):t.value instanceof Object&&(this.value=[],void 0!==t.value.x&&(this.value[0]=t.value.x),void 0!==t.value.y&&(this.value[1]=t.value.y),void 0!==t.value.z&&(this.value[2]=t.value.z),void 0!==t.value.w&&(this.value[3]=t.value.w),this.isSingle=!1,this.isVector=!0):this.value=[t.value]),this.lng=this.value.length,this.tmp=[],this.current=-1,this.prev={x:0,y:0,d:0,v:0};let s=this.colors;this.c[2]=this.dom("div",this.css.basic+" background:"+s.select+"; top:4px; width:0px; height:"+(this.h-8)+"px;"),this.cMode=[];let i=this.lng;for(;i--;)this.isAngle&&(this.value[i]=(180*this.value[i]/Math.PI).toFixed(this.precision)),this.c[3+i]=this.dom("div",this.css.txtselect+"top:1px; height:"+(this.h-2)+"px; color:"+s.text+"; background:"+s.back+"; borderColor:"+s.border+"; border-radius:"+this.radius+"px;"),t.center&&(this.c[2+i].style.textAlign="center"),this.c[3+i].textContent=this.value[i],this.c[3+i].style.color=this.colors.text,this.c[3+i].isNum=!0,this.cMode[i]=0;this.selectId=3+this.lng,this.c[this.selectId]=this.dom("div",this.css.txtselect+"position:absolute; top:2px; height:"+(this.h-4)+"px; padding:0px 0px; width:0px; color:"+s.textSelect+"; background:"+s.select+"; border:none; border-radius:0px;"),this.cursorId=4+this.lng,this.c[this.cursorId]=this.dom("div",this.css.basic+"top:2px; height:"+(this.h-4)+"px; width:0px; background:"+s.text+";"),this.init()}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";let i=this.lng,e=this.tmp;for(;i--;)if(s.x>e[i][0]&&s.x=this.txl?"text":s.x>=this.sa?"scroll":""}mouseup(t){this.isDown&&(this.isDown=!1)}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s&&(this.isDown=!0,this.old=this.value,this.mousemove(t)),!0)}mousemove(t){let s=!1;if("scroll"===this.testZone(t)?(this.mode(1),this.cursor("w-resize")):this.cursor(),this.isDown){let i=(t.clientX-(this.zone.x+this.sa)-3)/this.ww*this.range+this.min-this.old;(i>=this.step||i<=this.step)&&(i=Math.floor(i/this.step),this.value=this.numValue(this.old+i*this.step),this.update(!0),this.old=this.value),s=!0}return s}wheel(t){if("scroll"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s=this.sa?"text":""}mouseup(t){if(this.editable)return!!this.isDown&&(this.isDown=!1,this.mousemove(t))}mousedown(t){if(!this.editable)return;let s=this.testZone(t);return!this.isDown&&(this.isDown=!0,"text"===s&&this.setInput(this.c[2]),this.mousemove(t))}mousemove(t){if(!this.editable)return;let s=0;return"text"===this.testZone(t)?this.cursor("text"):this.cursor(),this.isDown&&(s=t.clientX-this.zone.x),this.upInput(s-this.sa-3,this.isDown)}update(){this.c[2].textContent=this.value}reset(){this.cursor()}select(t,s,i,e){let h=this.s,o=this.sa+5;h[4].width="1px",h[4].left=o+s+"px",h[3].left=o+s+"px",h[3].width=i+"px",this.c[3].innerHTML=e}unselect(){let t=this.s;t&&(t[3].width="0px",this.c[3].innerHTML="t",t[4].width="0px")}validate(t){this.allway&&(t=!0),this.value=this.c[2].textContent,""!==this.value?this.c[5].textContent="":this.c[5].textContent=this.placeHolder,t&&this.send()}rSize(){super.rSize();let t=this.s;t[2].left=this.sa+"px",t[2].width=this.sb+"px",t[5].left=this.sa+"px",t[5].width=this.sb+"px"}}class k extends r{constructor(t={}){super(t);let s=t.prefix||"";this.c[2]=this.dom("div",this.css.txt+"justify-content:right; width:60px; line-height:"+(this.h-8)+"px; color:"+this.colors.text),31===this.h&&(this.s[0].height=this.h+"px",this.s[1].top="8px",this.c[2].style.top="8px");let i=this.s;i[1].justifyContent=t.align||"left",i[1].fontWeight=t.fontWeight||"bold",this.c[1].textContent=this.txt.substring(0,1).toUpperCase()+this.txt.substring(1).replace("-"," "),this.c[2].textContent=s,this.init()}text(t){this.c[1].textContent=t}text2(t){this.c[2].textContent=t}rSize(){super.rSize(),this.s[1].width=this.w+"px",this.s[2].left=this.w+"px"}setColor(t){this.s[1].color=t,this.s[2].color=t}}class S extends r{constructor(t={}){super(t),this.value=t.value||"",this.isDown=!1,this.onActif=t.onActif||function(){};const s=this.colors;this.c[2]=this.dom("div",this.css.txt+this.css.button+" top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.buttonBorder+"; border-radius:15px; width:30px; left:10px;"),this.c[3]=this.dom("div",this.css.txtselect+"height:"+(this.h-4)+"px; background:"+s.inputBg+"; borderColor:"+s.inputBorder+"; border-radius:"+this.radius+"px;"),this.c[3].textContent=this.value;let i=Math.floor(.5*this.h)-7;this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:14px; height:14px; left:5px; top:"+i+"px;",{d:this.svgs.cursor,fill:s.text,stroke:"none"}),this.stat=1,this.isActif=!1,this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>this.sa&&s.xthis.sa&&s.xi[r][0]&&s.xe[r][0]&&s.ythis.lng-1&&(h=-1)),h}mouseup(t){return!!this.isDown&&(this.isDown=!1,-1!==this.res&&(this.value=this.values[this.res],this.send()),this.mousemove(t))}mousedown(t){return!this.isDown&&(this.isDown=!0,this.mousemove(t))}mousemove(t){let s=!1;return this.res=this.testZone(t),-1!==this.res?(this.cursor("pointer"),s=this.modes(this.isDown?3:2,this.res)):s=this.reset(),s}modes(t=1,s=-1){let i,e,h=this.lng,o=!1;for(;h--;)e=t,i=!!this.isSelectable&&this.values[h]===this.value,h===s?i&&2===e&&(e=3):(e=1,i&&(e=4)),this.mode(e,h)&&(o=!0);return o}mode(t,s){let i=!1,e=this.colors,h=this.buttons,o=s;if(this.stat[s]!==t){switch(this.stat[s]=t,t){case 1:h[o].style.color=e.text,h[o].style.background=e.button;break;case 2:h[o].style.color=e.textOver,h[o].style.background=e.overoff;break;case 3:h[o].style.color=e.textOver,h[o].style.background=e.over;break;case 4:h[o].style.color=e.textSelect,h[o].style.background=e.select}i=!0}return i}reset(){return this.res=-1,this.cursor(),this.modes()}label(t,s){this.buttons[s].textContent=t}icon(t,s,i){this.buttons[i].style.padding=(s||0)+"px 0px",this.buttons[i].innerHTML=t}testW(){let t=!1;if(3*this.spaces[0]+2*this.bsizeMax>this.w?(this.bsize[0]=.5*(this.w-3*this.spaces[0]),t=!0):this.bsize[0]!==this.bsizeMax&&(this.bsize[0]=this.bsizeMax,t=!0),!t)return;let s=this.buttons.length;for(;s--;)this.buttons[s].style.width=this.bsize[0]+"px"}rSize(){let t;super.rSize(),this.testW(),this.tmpX=[],this.tmpY=[];for(let s=0;sthis.h-this.c[2].offsetHeight?"text":"pad"}mouseup(t){return this.isDown=!1,this.mode(0)}mousedown(t){if("pad"===this.testZone(t))return this.isDown=!0,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=.5*this.w-(t.clientX-this.zone.x),i=.5*this.diam-(t.clientY-this.zone.y-this.ytop),e=256/this.diam;s=-s*e,i=-i*e,s=h.clamp(s,-this.maxPos,this.maxPos),i=h.clamp(i,-this.maxPos,this.maxPos),this.setPos([s,i]),this.update(!0)}mode(t){if(this.cmode===t)return!1;let s=this.colors;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.back,0),this.setSvg(this.c[3],"fill",s.button,1),this.setSvg(this.c[3],"stroke",s.back,2),this.setSvg(this.c[3],"stroke",s.back,3),this.setSvg(this.c[3],"stroke",s.text,4);break;case 1:this.s[2].color=s.textSelect,this.setSvg(this.c[3],"fill",s.backoff,0),this.setSvg(this.c[3],"fill",s.overoff,1),this.setSvg(this.c[3],"stroke",s.backoff,2),this.setSvg(this.c[3],"stroke",s.backoff,3),this.setSvg(this.c[3],"stroke",s.textSelect,4)}return this.cmode=t,!0}update(t){this.c[2].textContent=this.value,this.updateSVG(),t&&this.send()}updateSVG(){1==this.model&&(this.setSvg(this.c[3],"y1",this.pos.y,2),this.setSvg(this.c[3],"y2",this.pos.y,2),this.setSvg(this.c[3],"x1",this.pos.x,3),this.setSvg(this.c[3],"x2",this.pos.x,3)),this.setSvg(this.c[3],"cx",this.pos.x,4),this.setSvg(this.c[3],"cy",this.pos.y,4)}setPos(t){this.pos.set(t[0]+128,t[1]+128);let s=1/this.maxPos;this.value[0]=(t[0]*s*this.range).toFixed(this.precision),this.value[1]=(t[1]*s*this.range).toFixed(this.precision)}setValue(t,s=!1){void 0===t&&(t=this.value),this.value[0]=1*Math.min(this.max,Math.max(this.min,t[0])).toFixed(this.precision),this.value[1]=1*Math.min(this.max,Math.max(this.min,t[1])).toFixed(this.precision),this.pos.set(this.value[0]/this.range*this.maxPos+128,this.value[1]/this.range*this.maxPos+128),this.update(s)}}const T=function(){let t,s,e=arguments,h=!1,o=null;"string"==typeof e[0]?(t=e[0],s=e[1]||{}):"object"==typeof e[0]&&(h=!0,void 0===e[2]&&[].push.call(e,{}),t=e[2].type?e[2].type:O(e[0][e[1]],e[2]),s=e[2],s.name=e[1],s.hasOwnProperty("displayName")&&(s.name=s.displayName),"list"!==t||s.list?s.value=e[0][e[1]]:s.list=e[0][e[1]]);let n=t.toLowerCase();switch("group"===n&&(s.add=T),n){case"bool":case"boolean":o=new l(s);break;case"button":o=new a(s);break;case"circular":o=new c(s);break;case"color":o=new d(s);break;case"fps":o=new u(s);break;case"graph":o=new p(s);break;case"group":o=new g(s);break;case"joystick":o=new x(s);break;case"knob":o=new v(s);break;case"list":o=new b(s);break;case"numeric":case"number":o=new f(s);break;case"slide":o=new w(s);break;case"textInput":case"string":o=new y(s);break;case"title":case"text":o=new k(s);break;case"select":o=new S(s);break;case"bitmap":o=new M(s);break;case"selector":o=new I(s);break;case"empty":case"space":o=new m(s);break;case"item":o=new C(s);break;case"grid":o=new L(s);break;case"pad2d":case"pad":o=new z(s)}if(null!==o)return i.needResize=!0,h&&o.setReferency(e[0],e[1]),o},O=function(t,s){let i="slide";return"boolean"==typeof t?i="bool":"string"==typeof t?i="#"===t.substring(0,1)?"color":"string":"number"==typeof t?i=s.ctype?"color":"slide":"array"==typeof t&&t instanceof Array?"number"==typeof t[0]?i="number":"string"==typeof t[0]&&(i="list"):"object"==typeof t&&t instanceof Object&&(i=void 0!==t.x?"number":"list"),i};t.Files=o,t.Gui=class{constructor(t={}){this.isGui=!0,this.name="gui",this.canvas=null,this.screen=null,this.plane=t.plane||null,t.config&&(t.colors=t.config),t.colors?this.setConfig(t.colors):this.colors=h.defineColor(t),this.css=h.cloneCss(),this.isReset=!0,this.tmpAdd=null,this.isCanvas=t.isCanvas||!1,this.isCanvasOnly=!1,i.addDOMEventListeners=!t.hasOwnProperty("addDOMEventListeners")||t.addDOMEventListeners,this.callback=void 0===t.callback?null:t.callback,this.forceHeight=t.maxHeight||0,this.lockHeight=t.lockHeight||!1,this.isItemMode=void 0!==t.itemMode&&t.itemMode,this.cn="",this.size=h.size,void 0!==t.p&&(this.size.p=t.p),void 0!==t.w&&(this.size.w=t.w),void 0!==t.h&&(this.size.h=t.h),void 0!==t.s&&(this.size.s=t.s),this.size.h=this.size.h<11?11:this.size.h,this.local=(new n).neg(),this.zone={x:0,y:0,w:this.size.w,h:0},this.mouse=(new n).neg(),this.h=0,this.sw=0,this.margin=this.colors.sy,this.marginDiv=h.isDivid(this.margin),this.isWithClose=void 0===t.close||t.close,this.bh=this.isWithClose?this.size.h:0,this.autoResize=void 0===t.autoResize||t.autoResize,this.isCenter=t.center||!1,this.cssGui=void 0!==t.css?t.css:this.isCenter?"":"right:10px;",this.isOpen=void 0===t.open||t.open,this.isDown=!1,this.isScroll=!1,this.uis=[],this.current=-1,this.proto=null,this.isEmpty=!0,this.decal=0,this.ratio=1,this.oy=0,this.isNewTarget=!1;let s=this.colors;this.content=h.dom("div",this.css.basic+" width:0px; height:auto; top:0px; background:"+s.content+"; "+this.cssGui),this.innerContent=h.dom("div",this.css.basic+"width:100%; top:0; left:0; height:auto; overflow:hidden;"),this.content.appendChild(this.innerContent),this.useFlex=!0;let e=this.useFlex?"display:flex; flex-flow: row wrap;":"";this.inner=h.dom("div",this.css.basic+e+"width:100%; left:0; "),this.innerContent.appendChild(this.inner),this.scrollBG=h.dom("div",this.css.basic+"right:0; top:0; width:"+(this.size.s-1)+"px; height:10px; display:none; background:"+s.background+";"),this.content.appendChild(this.scrollBG),this.scroll=h.dom("div",this.css.basic+"background:"+s.button+"; right:2px; top:0; width:"+(this.size.s-4)+"px; height:10px;"),this.scrollBG.appendChild(this.scroll),this.bottomText=t.bottomText||["open","close"];let o=s.radius;this.bottom=h.dom("div",this.css.txt+"width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:"+o+"px; border-bottom-left-radius:"+o+"px; justify-content:center; height:"+this.bh+"px; line-height:"+(this.bh-5)+"px; color:"+s.text+";"),this.content.appendChild(this.bottom),this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.bottom.style.background=s.background,this.parent=void 0!==t.parent?t.parent:null,this.parent=void 0!==t.target?t.target:this.parent,null!==this.parent||this.isCanvas||(this.parent=document.body),null!==this.parent&&this.parent.appendChild(this.content),this.isCanvas&&null===this.parent&&(this.isCanvasOnly=!0),this.isCanvasOnly?(this.content.style.left="0px",this.content.style.right="auto",t.transition=0):this.content.style.pointerEvents="auto",this.transition=void 0!==t.transition?t.transition:h.transition,this.transition&&setTimeout(this.addTransition.bind(this),1e3),this.setWidth(),this.isCanvas&&this.makeCanvas(),i.add(this)}triggerMouseDown(t,s){i.handleEvent({type:"pointerdown",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}triggerMouseMove(){i.handleEvent({type:"pointermove",clientX:-1,clientY:-1,delta:0,key:null,keyCode:NaN})}triggerMouseUp(t,s){i.handleEvent({type:"pointerup",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}setTop(t,s){this.content.style.top=t+"px",void 0!==s&&(this.forceHeight=s),this.calc(),i.needReZone=!0}addTransition(){this.transition&&!this.isCanvas&&(this.innerContent.style.transition="height "+this.transition+"s ease-out",this.content.style.transition="height "+this.transition+"s ease-out",this.bottom.style.transition="top "+this.transition+"s ease-out");let t=this.uis.length;for(;t--;)this.uis[t].addTransition()}onDraw(){}makeCanvas(){this.canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),this.canvas.width=this.zone.w,this.canvas.height=this.forceHeight?this.forceHeight:this.zone.h}draw(t){if(null===this.canvas)return;let s=this.zone.w,e=this.forceHeight?this.forceHeight:this.zone.h;i.toCanvas(this,s,e,t)}getDom(){return this.content}noMouse(){this.mouse.neg()}setMouse(t,s=!0){s?this.mouse.set(Math.round(t.x*this.canvas.width),this.canvas.height-Math.round(t.y*this.canvas.height)):this.mouse.set(Math.round(t.x*this.canvas.width),Math.round(t.y*this.canvas.height))}setConfig(t){h.setText(),this.colors=h.defineColor(t)}setColors(t){for(let s in t)this.colors[s]&&(this.colors[s]=t[s])}setText(t,s,i,e){h.setText(t,s,i,e)}hide(t){this.content.style.visibility=t?"hidden":"visible"}display(t=!1){this.content.style.visibility=t?"visible":"hidden"}onChange(t){return this.callback=t||null,this}mode(t){let s=!1,e=this.colors;if(t!==this.cn){switch(this.cn=t,t){case"def":i.cursor(),this.scroll.style.background=e.button,this.bottom.style.background=e.background,this.bottom.style.color=e.text;break;case"scrollOver":i.cursor("ns-resize"),this.scroll.style.background=e.select;break;case"scrollDown":this.scroll.style.background=e.select;break;case"bottomOver":i.cursor("pointer"),this.bottom.style.background=e.backgroundOver,this.bottom.style.color=e.textOver}s=!0}return s}clearTarget(){return-1!==this.current&&(this.proto.s&&(this.proto.uiout(),this.proto.reset()),this.proto=null,this.current=-1,i.cursor(),!0)}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";this.isReset=!1;let i="",e=this.isScroll?this.zone.w-this.size.s:this.zone.w;return i=s.y>this.zone.h-this.bh&&s.ye?"scroll":"content",i}handleEvent(t){let s=t.type,e=!1,h=!1,o=this.testZone(t);if("mouseup"===s&&this.isDown&&(this.isDown=!1),"mousedown"!==s||this.isDown||(this.isDown=!0),this.isDown&&this.isNewTarget&&(i.clearInput(),this.isNewTarget=!1),o){switch(o){case"content":t.clientY=this.isScroll?t.clientY+this.decal:t.clientY,i.isMobile&&"mousedown"===s&&this.getNext(t,e),this.proto&&(h=this.proto.handleEvent(t)),"mousemove"===s&&(e=this.mode("def")),"wheel"===s&&!h&&this.isScroll&&(e=this.onWheel(t)),i.lock||this.getNext(t,e);break;case"bottom":this.clearTarget(),"mousemove"===s&&(e=this.mode("bottomOver")),"mousedown"===s&&(this.isOpen=!this.isOpen,this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.calc(),this.mode("def"),e=!0);break;case"scroll":this.clearTarget(),"mousemove"===s&&(e=this.mode("scrollOver")),"mousedown"===s&&(e=this.mode("scrollDown")),"wheel"===s&&(e=this.onWheel(t)),this.isDown&&this.update(t.clientY-this.zone.y-.5*this.sh)}this.isDown&&(e=!0),h&&(e=!0),"keyup"===s&&(e=!0),"keydown"===s&&(e=!0),e&&this.draw()}}getNext(t,s){let e=i.findTarget(this.uis,t);e!==this.current&&(this.clearTarget(),this.current=e,this.isNewTarget=!0),-1!==e&&(this.proto=this.uis[this.current],this.proto.uiover())}onWheel(t){return this.oy+=20*t.delta,this.update(this.oy),!0}reset(t){if(this.isReset)return;this.mouse.neg(),this.isDown=!1;let s=this.mode("def"),i=this.clearTarget();(s||i)&&this.draw(!0),this.isReset=!0}add(){let t=arguments,s=!1;"object"==typeof t[1]?(t[1].isUI=!0,t[1].main=this,s=!!t[1].ontop&&t[1].ontop):"string"==typeof t[1]&&(void 0===t[2]?[].push.call(t,{isUI:!0,main:this}):(t[2].isUI=!0,t[2].main=this,s=!!t[2].ontop&&t[2].ontop));let i=T.apply(this,t);if(null!==i)return s?this.uis.unshift(i):this.uis.push(i),this.calc(),this.isEmpty=!1,i}remove(t){t.dispose&&t.dispose()}clearOne(t){let s=this.uis.indexOf(t);-1!==s&&(this.inner.removeChild(this.uis[s].c[0]),this.uis.splice(s,1),this.calc())}empty(){let t,s=this.uis.length;for(;s--;)t=this.uis.pop(),this.inner.removeChild(t.c[0]),t.dispose();this.uis=[],this.isEmpty=!0,this.calc()}clear(){this.empty()}clear2(){setTimeout(this.empty.bind(this),0)}dispose(){this.clear(),null!==this.parent&&this.parent.removeChild(this.content),i.remove(this)}resetItem(){if(!this.isItemMode)return;let t=this.uis.length;for(;t--;)this.uis[t].selected()}setItem(t){if(!this.isItemMode)return;if(t=t||"",this.resetItem(),!t)return void this.update(0);let s=this.uis.length;for(;s--;)this.uis[s].value===t&&(this.uis[s].selected(!0),this.isScroll&&this.update(s*(this.uis[s].h+this.margin)*this.ratio))}upScroll(t){this.sw=t?this.size.s:0,this.oy=t?this.oy:0,this.scrollBG.style.display=t?"block":"none",t&&(this.total=this.h,this.maxView=this.maxHeight,this.ratio=this.maxView/this.total,this.sh=this.maxView*this.ratio,this.range=this.maxView-this.sh,this.oy=h.clamp(this.oy,0,this.range),this.scrollBG.style.height=this.maxView+"px",this.scroll.style.height=this.sh+"px"),this.setItemWidth(this.zone.w-this.sw),this.update(this.oy)}update(t){t=h.clamp(t,0,this.range),this.decal=Math.floor(t/this.ratio),this.inner.style.top=-this.decal+"px",this.scroll.style.top=Math.floor(t)+"px",this.oy=t}calcUis(){return i.calcUis(this.uis,this.zone,this.zone.y)}calc(){clearTimeout(this.tmp),this.tmp=setTimeout(this.setHeight.bind(this),10)}setHeight(){if(this.tmp&&clearTimeout(this.tmp),this.zone.h=this.bh,this.isScroll=!1,this.isOpen){this.h=this.calcUis();let t=this.forceHeight?this.forceHeight+this.zone.y:window.innerHeight;this.maxHeight=t-this.zone.y-this.bh,this.h-this.maxHeight>1?(this.isScroll=!0,this.zone.h=this.maxHeight+this.bh):this.zone.h=this.h+this.bh}this.upScroll(this.isScroll),this.innerContent.style.height=this.zone.h-this.bh+"px",this.content.style.height=this.zone.h+"px",this.bottom.style.top=this.zone.h-this.bh+"px",this.forceHeight&&this.lockHeight&&(this.content.style.height=this.forceHeight+"px"),this.isCanvas&&this.draw(!0)}rezone(){i.needReZone=!0}setWidth(t){t&&(this.zone.w=t),this.zone.w=Math.floor(this.zone.w),this.content.style.width=this.zone.w+"px",this.isCenter&&(this.content.style.marginLeft=-Math.floor(.5*this.zone.w)+"px"),this.setItemWidth(this.zone.w-this.sw)}setItemWidth(t){let s=this.uis.length;for(;s--;)this.uis[s].setSize(t),this.uis[s].rSize()}},t.REVISION="4.3.0",t.Tools=h,t.add=T,Object.defineProperty(t,"__esModule",{value:!0})})); diff --git a/build/uil.module.js b/build/uil.module.js index 6ef7ed9..287818d 100644 --- a/build/uil.module.js +++ b/build/uil.module.js @@ -3,4 +3,4 @@ * Copyright 2010-2021 Uil.js Authors * SPDX-License-Identifier: MIT */ -const t="4.3.0",s={ui:[],dom:null,ID:null,lock:!1,wlock:!1,current:-1,needReZone:!0,needResize:!1,forceZone:!1,isEventsInit:!1,isLeave:!1,downTime:0,prevTime:0,prevDefault:["contextmenu"],pointerEvent:["pointerdown","pointermove","pointerup"],eventOut:["pointercancel","pointerout","pointerleave"],xmlserializer:null,tmpTime:null,tmpImage:null,oldCursor:"auto",input:null,parent:null,firstImput:!0,hiddenImput:null,hiddenSizer:null,hasFocus:!1,startInput:!1,inputRange:[0,0],cursorId:0,str:"",pos:0,startX:-1,moveX:-1,debugInput:!1,isLoop:!1,listens:[],e:{type:null,clientX:0,clientY:0,keyCode:NaN,key:null,delta:0},isMobile:!1,now:null,getTime:function(){return self.performance&&self.performance.now?self.performance.now.bind(performance):Date.now},add:function(t){s.ui.push(t),s.getZone(t),s.isEventsInit||s.initEvents()},testMobile:function(){let t=navigator.userAgent;return!!(t.match(/Android/i)||t.match(/webOS/i)||t.match(/iPhone/i)||t.match(/iPad/i)||t.match(/iPod/i)||t.match(/BlackBerry/i)||t.match(/Windows Phone/i))},remove:function(t){let i=s.ui.indexOf(t);-1!==i&&(s.removeListen(t),s.ui.splice(i,1)),0===s.ui.length&&s.removeEvents()},initEvents:function(){if(s.isEventsInit)return;let t=document.body;s.isMobile=s.testMobile(),s.now=s.getTime(),s.isMobile?t.style.touchAction="none":t.addEventListener("wheel",s,{passive:!1}),t.addEventListener("pointercancel",s),t.addEventListener("pointerleave",s),t.addEventListener("pointermove",s),t.addEventListener("pointerdown",s),t.addEventListener("pointerup",s),t.addEventListener("keydown",s,!1),t.addEventListener("keyup",s,!1),window.addEventListener("resize",s.resize,!1),s.isEventsInit=!0,s.dom=t},removeEvents:function(){if(!s.isEventsInit)return;let t=document.body;s.isMobile||t.removeEventListener("wheel",s),t.removeEventListener("pointercancel",s),t.removeEventListener("pointerleave",s),t.removeEventListener("pointermove",s),t.removeEventListener("pointerdown",s),t.removeEventListener("pointerup",s),t.removeEventListener("keydown",s),t.removeEventListener("keyup",s),window.removeEventListener("resize",s.resize),s.isEventsInit=!1},resize:function(){let t,i=s.ui.length;for(;i--;)t=s.ui[i],t.isGui&&!t.isCanvasOnly&&t.autoResize&&t.calc();s.needReZone=!0,s.needResize=!1},out:function(){console.log("im am out"),s.clearOldID()},in:function(){console.log("im am in")},fakeUp:function(){this.handleEvent({type:"pointerup"})},handleEvent:function(t){-1!==s.prevDefault.indexOf(t.type)&&t.preventDefault(),s.needResize&&s.resize(),s.findZone(s.forceZone);let i=s.e,e=!1;"keydown"===t.type&&s.keydown(t),"keyup"===t.type&&s.keyup(t),"wheel"===t.type?i.delta=t.deltaY>0?1:-1:i.delta=0;let h=t.pointerType;if(i.clientX=("touch"===h?t.pageX:t.clientX)||0,i.clientY=("touch"===h?t.pageY:t.clientY)||0,i.type=t.type,-1!==s.eventOut.indexOf(t.type)&&(e=!0,i.type="mouseup"),"pointerleave"===t.type&&(s.isLeave=!0),"pointerdown"===t.type&&(i.type="mousedown"),"pointerup"===t.type&&(i.type="mouseup"),"pointermove"===t.type&&(s.isLeave&&(s.isLeave=!1,s.resize()),i.type="mousemove"),"mousedown"===i.type){if(s.downTime=s.now(),s.downTime-s.prevTime<200)return s.selectAll(),!1;s.prevTime=s.downTime,s.forceZone=!1}"mousedown"===i.type&&s.clearInput(),"mousedown"===i.type&&(s.lock=!0),"mouseup"===i.type&&(s.lock=!1),s.isMobile&&"mousedown"===i.type&&s.findID(i),"mousemove"!==i.type||s.lock||s.findID(i),null!==s.ID&&(s.ID.isCanvasOnly&&(i.clientX=s.ID.mouse.x,i.clientY=s.ID.mouse.y),s.ID.handleEvent(i)),s.isMobile&&"mouseup"===i.type&&s.clearOldID(),e&&s.clearOldID()},findID:function(t){let i,e,h,o=s.ui.length,n=-1;for(;o--;)if(i=s.ui[o],i.isCanvasOnly?(e=i.mouse.x,h=i.mouse.y):(e=t.clientX,h=t.clientY),s.onZone(i,e,h)){n=o,n!==s.current&&(s.clearOldID(),s.current=n,s.ID=i);break}-1===n&&s.clearOldID()},clearOldID:function(){s.ID&&(s.current=-1,s.ID.reset(),s.ID=null,s.cursor())},calcUis:(t,i,e,h=!1)=>{let o,n,r,l=t.length,a=0,c=0,d=0;for(;l--;)o=t[c],c++,!h&&o.isGroup&&o.calcUis(),r=o.margin,o.zone.w=o.w,o.zone.h=o.h+r,o.autoWidth?(a=0,o.zone.x=i.x+o.dx,o.zone.y=e,e+=o.h+r,d+=o.h+r):(0===a&&(d+=o.h+r),o.zone.x=i.x+a,o.zone.y=e,n=s.getWidth(o),n?o.zone.w=o.w=n:o.fw&&(o.zone.w=o.w=o.fw),a+=o.zone.w,a>=i.w&&(e+=o.h+r,a=0));return d},findTarget:function(t,i){let e=t.length;for(;e--;)if(s.onZone(t[e],i.clientX,i.clientY))return e;return-1},findZone:function(t){if(s.needReZone||t){for(var i,e=s.ui.length;e--;)i=s.ui[e],s.getZone(i),i.isGui&&i.calcUis();s.needReZone=!1}},onZone:function(t,s,i){if(void 0===s||void 0===i)return!1;let e=t.zone,h=s-e.x,o=i-e.y,n=h>=0&&o>=0&&h<=e.w&&o<=e.h;return n?t.local.set(h,o):t.local.neg(),n},getWidth:function(t){return t.getDom().clientWidth},getZone:function(t){if(t.isCanvasOnly)return;let s=t.getDom().getBoundingClientRect();t.zone={x:s.left,y:s.top,w:s.width,h:s.height}},cursor:function(t){(t=t||"auto")!==s.oldCursor&&(document.body.style.cursor=t,s.oldCursor=t)},toCanvas:function(t,i,e,h){if(s.xmlserializer||(s.xmlserializer=new XMLSerializer),h&&null!==s.tmpTime&&(clearTimeout(s.tmpTime),s.tmpTime=null),null!==s.tmpTime)return;s.lock&&(s.tmpTime=setTimeout((function(){s.tmpTime=null}),10));let o=!1;i===t.canvas.width&&e===t.canvas.height||(o=!0),null===s.tmpImage&&(s.tmpImage=new Image);let n=s.tmpImage,r=s.xmlserializer.serializeToString(t.content),l=''+r+"";n.onload=function(){let s=t.canvas.getContext("2d");o?(t.canvas.width=i,t.canvas.height=e):s.clearRect(0,0,i,e),s.drawImage(this,0,0),t.onDraw()},n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(l),n.crossOrigin=""},setHidden:function(){null===s.hiddenImput&&(s.hiddenImput=document.createElement("input"),s.hiddenImput.type="text",s.hiddenSizer=document.createElement("div"),document.body.appendChild(s.hiddenImput),document.body.appendChild(s.hiddenSizer));let t=s.debugInput?"":"opacity:0; zIndex:0;",i=s.parent.css.txtselect+"padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;"+t;s.hiddenImput.style.cssText=i+"bottom:10px;"+(s.debugInput?"":"transform:scale(0);"),s.hiddenSizer.style.cssText=i+"bottom:40px;",s.hiddenImput.style.width=s.input.clientWidth+"px",s.hiddenImput.value=s.str,s.hiddenSizer.innerHTML=s.str,s.hasFocus=!0},clearHidden:function(t){null!==s.hiddenImput&&(s.hasFocus=!1)},clickPos:function(t){let i=s.str.length,e=0,h=0;for(;i--&&(e+=s.textWidth(s.str[h]),!(e>=t));)h++;return h},upInput:function(t,i){if(null===s.parent)return!1;let e=!1;if(i){let i=s.clickPos(t);if(s.moveX=i,-1===s.startX)s.startX=i,s.cursorId=i,s.inputRange=[s.startX,s.startX];else{s.moveX!==s.startX&&(s.startX>s.moveX?s.inputRange=[s.moveX,s.startX]:s.inputRange=[s.startX,s.moveX])}e=!0}else-1!==s.startX&&(s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.startX=-1,e=!0);return e&&s.selectParent(),e},selectAll:function(){s.parent&&(s.str=s.input.textContent,s.inputRange=[0,s.str.length],s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.cursorId=s.inputRange[1],s.selectParent())},selectParent:function(){var t=s.textWidth(s.str.substring(0,s.cursorId)),i=s.textWidth(s.str.substring(0,s.inputRange[0])),e=s.textWidth(s.str.substring(s.inputRange[0],s.inputRange[1]));s.parent.select(t,i,e,s.hiddenSizer.innerHTML)},textWidth:function(t){return null===s.hiddenSizer?0:(t=t.replace(/ /g," "),s.hiddenSizer.innerHTML=t,s.hiddenSizer.clientWidth)},clearInput:function(){null!==s.parent&&(s.firstImput||s.parent.validate(!0),s.clearHidden(),s.parent.unselect(),s.input.style.background=s.parent.colors.back,s.input.style.borderColor=s.parent.colors.border,s.parent.isEdit=!1,s.input=null,s.parent=null,s.str="",s.firstImput=!0)},setInput:function(t,i){s.clearInput(),s.input=t,s.parent=i,s.input.style.background=s.parent.colors.backoff,s.input.style.borderColor=s.parent.colors.select,s.str=s.input.textContent,s.setHidden()},keydown:function(t){if(null===s.parent)return;let i=t.which;t.shiftKey,s.firstImput=!1,s.hasFocus&&(window.focus(),s.hiddenImput.focus()),s.parent.isEdit=!0,13===i?s.clearInput():s.input.isNum?t.keyCode>47&&t.keyCode<58||t.keyCode>95&&t.keyCode<106||190===t.keyCode||110===t.keyCode||8===t.keyCode||109===t.keyCode?s.hiddenImput.readOnly=!1:s.hiddenImput.readOnly=!0:s.hiddenImput.readOnly=!1},keyup:function(t){null!==s.parent&&(s.str=s.hiddenImput.value,s.parent.allEqual?s.parent.sameStr(s.str):s.input.textContent=s.str,s.cursorId=s.hiddenImput.selectionStart,s.inputRange=[s.hiddenImput.selectionStart,s.hiddenImput.selectionEnd],s.selectParent(),s.parent.validate())},loop:function(){s.isLoop&&requestAnimationFrame(s.loop),s.update()},update:function(){let t=s.listens.length;for(;t--;)s.listens[t].listening()},removeListen:function(t){let i=s.listens.indexOf(t);-1!==i&&s.listens.splice(i,1),0===s.listens.length&&(s.isLoop=!1)},addListen:function(t){return-1===s.listens.indexOf(t)&&(s.listens.push(t),s.isLoop||(s.isLoop=!0,s.loop()),!0)}},i=s,e={transition:.2,frag:document.createDocumentFragment(),colorRing:null,joystick_0:null,joystick_1:null,circular:null,knob:null,pad2d:null,svgns:"http://www.w3.org/2000/svg",links:"http://www.w3.org/1999/xlink",htmls:"http://www.w3.org/1999/xhtml",DOM_SIZE:["height","width","top","left","bottom","right","margin-left","margin-right","margin-top","margin-bottom"],SVG_TYPE_D:["pattern","defs","transform","stop","animate","radialGradient","linearGradient","animateMotion","use","filter","feColorMatrix"],SVG_TYPE_G:["svg","rect","circle","path","polygon","text","g","line","foreignObject"],PI:Math.PI,TwoPI:2*Math.PI,pi90:.5*Math.PI,pi60:Math.PI/3,torad:Math.PI/180,todeg:180/Math.PI,clamp:(t,s,i)=>t=(t=ti?i:t,isDivid:t=>.5*t===Math.floor(.5*t),size:{w:240,h:20,p:30,s:8},defineColor:(t,s=e.colors)=>{let i={...s},h=["fontFamily","fontWeight","fontShadow","fontSize"],o=!1;t.font&&(t.fontFamily=t.font),t.shadow&&(t.fontShadow=t.shadow),t.weight&&(t.fontWeight=t.weight),t.fontColor&&(t.text=t.fontColor),t.color&&(t.text=t.color),t.text&&(i.text=t.text,t.fontColor||t.color||(i.title=e.ColorLuma(t.text,-.25),i.titleoff=e.ColorLuma(t.text,-.5)),i.textOver=e.ColorLuma(t.text,.25),i.textSelect=e.ColorLuma(t.text,.5)),t.button&&(i.button=t.button,i.border=e.ColorLuma(t.button,.1),i.overoff=e.ColorLuma(t.button,.2)),t.select&&(i.select=t.select,i.over=e.ColorLuma(t.select,-.1)),t.itemBg&&(t.back=t.itemBg),t.back&&(i.back=t.back,i.backoff=e.ColorLuma(t.back,-.1)),t.fontSelect&&(i.textSelect=t.fontSelect),t.groupBorder&&(i.gborder=t.groupBorder),t.bgOver&&(i.backgroundOver=t.bgOver);for(let s in i)void 0!==t[s]&&(i[s]=t[s]);for(let s in t)-1!==h.indexOf(s)&&(o=!0);return o&&e.defineText(i),i},colors:{sx:4,sy:2,radius:2,showOver:1,content:"none",background:"rgba(50,50,50,0.15)",backgroundOver:"rgba(50,50,50,0.3)",title:"#CCC",titleoff:"#BBB",text:"#DDD",textOver:"#EEE",textSelect:"#FFF",back:"rgba(0,0,0,0.2)",backoff:"rgba(0,0,0,0.3)",border:"#4c4c4c",borderSize:1,gborder:"none",groups:"none",button:"#3c3c3c",overoff:"#5c5c5c",over:"#024699",select:"#308AFF",action:"#FF3300",fontFamily:"Consolas, monospace",fontWeight:"normal",fontShadow:"none",fontSize:12,joyOver:"rgba(48,138,255,0.25)",joyOut:"rgba(100,100,100,0.5)",joySelect:"#308AFF",hide:"rgba(0,0,0,0)"},css:{basic:"position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; -o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;",button:"display:flex; align-items:center; justify-content:center; text-align:center;",middle:"display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;"},svgs:{g1:"M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z",g2:"M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z",group:"M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z",arrow:"M 3 8 L 8 5 3 2 3 8 Z",arrowDown:"M 5 8 L 8 3 2 3 5 8 Z",arrowUp:"M 5 2 L 2 7 8 7 5 2 Z",solid:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z",body:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z",vehicle:"M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z",articulation:"M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z",character:"M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z",terrain:"M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z",joint:"M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z",ray:"M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z",collision:"M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z",map:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",material:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",texture:"M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z",object:"M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z",none:"M 9 5 L 5 5 5 9 9 9 9 5 Z",cursor:"M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z",load:"M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z",save:"M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z",extern:"M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z"},rezone(){i.needReZone=!0},getImput:function(){return!!i.input},setStyle:function(t){for(var s in t)e.colors[s]&&(e.colors[s]=t[s]);e.setText()},defineText:function(t){e.setText(t.fontSize,t.text,t.fontFamily,t.fontShadow,t.fontWeight)},setText:function(t,s,i,h,o){let n=e.colors;void 0===i&&(i=n.fontFamily),void 0===t&&(t=n.fontSize),void 0===h&&(h=n.fontShadow),void 0===o&&(o=n.fontWeight),void 0===s&&(s=n.text),isNaN(t)?-1===t.search("em")&&(t+="px"):t+="px",e.css.txt=e.css.basic+e.css.middle+" font-family:"+i+"; font-weight:"+o+"; font-size:"+t+"; color:"+n.text+"; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;","none"!==h&&(e.css.txt+=" text-shadow: 1px 1px 1px "+h+";"),e.css.txtselect=e.css.txt+"padding:0px 4px; border:1px dashed "+n.border+";",e.css.item=e.css.txt+"padding:0px 4px; position:relative; margin-bottom:1px; "},cloneCss:function(){return{...e.css}},clone:function(t){return t.cloneNode(!0)},setSvg:function(t,s,i,e,h){-1===e?t.setAttributeNS(null,s,i):void 0!==h?t.childNodes[e||0].childNodes[h||0].setAttributeNS(null,s,i):t.childNodes[e||0].setAttributeNS(null,s,i)},setCss:function(t,s){for(let i in s)-1!==e.DOM_SIZE.indexOf(i)?t.style[i]=s[i]+"px":t.style[i]=s[i]},set:function(t,s){for(let i in s)"txt"===i&&(t.textContent=s[i]),"link"===i?t.setAttributeNS(e.links,"xlink:href",s[i]):t.setAttributeNS(null,i,s[i])},get:function(t,s){if(void 0===s)return t;if(!isNaN(s))return t.childNodes[s];if(s instanceof Array){if(2===s.length)return t.childNodes[s[0]].childNodes[s[1]];if(3===s.length)return t.childNodes[s[0]].childNodes[s[1]].childNodes[s[2]]}},dom:function(t,s,i,h,o){return t=t||"div",-1!==e.SVG_TYPE_D.indexOf(t)||-1!==e.SVG_TYPE_G.indexOf(t)?"svg"===t?(h=document.createElementNS(e.svgns,"svg"),e.set(h,i)):(void 0===h&&(h=document.createElementNS(e.svgns,"svg")),e.addAttributes(h,t,i,o)):h=void 0===h?document.createElementNS(e.htmls,t):h.appendChild(document.createElementNS(e.htmls,t)),s&&(h.style.cssText=s),void 0===o?h:h.childNodes[o||0]},addAttributes:function(t,s,i,h){let o=document.createElementNS(e.svgns,s);return e.set(o,i),e.get(t,h).appendChild(o),-1!==e.SVG_TYPE_G.indexOf(s)&&(o.style.pointerEvents="none"),o},clear:function(t){for(e.purge(t);t.firstChild;)t.firstChild.firstChild&&e.clear(t.firstChild),t.removeChild(t.firstChild)},purge:function(t){let s,i,h=t.attributes;if(h)for(s=h.length;s--;)i=h[s].name,"function"==typeof t[i]&&(t[i]=null);if(h=t.childNodes,h)for(s=h.length;s--;)e.purge(t.childNodes[s])},addSVGGlowEffect:function(){if(null!==document.getElementById("UILGlow"))return;let t=e.initUILEffects(),s=e.addAttributes(t,"filter",{id:"UILGlow",x:"-20%",y:"-20%",width:"140%",height:"140%"});e.addAttributes(s,"feGaussianBlur",{in:"SourceGraphic",stdDeviation:"3",result:"uilBlur"});let i=e.addAttributes(s,"feMerge",{});for(let t=0;t<=3;t++)e.addAttributes(i,"feMergeNode",{in:"uilBlur"});e.addAttributes(i,"feMergeNode",{in:"SourceGraphic"})},initUILEffects:function(){let t=document.getElementById("UILSVGEffects");return null===t&&(t=e.dom("svg",void 0,{id:"UILSVGEffects",width:"0",height:"0"}),document.body.appendChild(t)),t},ColorLuma:function(t,s){"n"===t&&(t="#000"),(t=String(t).replace(/[^0-9a-f]/gi,"")).length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),s=s||0;let i,e,h="#";for(e=0;e<3;e++)i=parseInt(t.substr(2*e,2),16),i=Math.round(Math.min(Math.max(0,i+i*s),255)).toString(16),h+=("00"+i).substr(i.length);return h},findDeepInver:function(t){return.3*t[0]+.59*t[1]+.11*t[2]<=.6},lerpColor:function(t,s,i){let e={};for(let h=0;h<3;h++)e[h]=t[h]+(s[h]-t[h])*i;return e},hexToHtml:function(t){return"#"+("000000"+(t=void 0===t?0:t).toString(16)).substr(-6)},htmlToHex:function(t){return t.toUpperCase().replace("#","0x")},u255:function(t,s){return parseInt(t.substring(s,s+2),16)/255},u16:function(t,s){return parseInt(t.substring(s,s+1),16)/15},unpack:function(t){return 7==t.length?[e.u255(t,1),e.u255(t,3),e.u255(t,5)]:4==t.length?[e.u16(t,1),e.u16(t,2),e.u16(t,3)]:void 0},p255:function(t){let s=Math.round(255*t).toString(16);return s.length<2&&(s="0"+s),s},pack:function(t){return"#"+e.p255(t[0])+e.p255(t[1])+e.p255(t[2])},htmlRgb:function(t){return"rgb("+Math.round(255*t[0])+","+Math.round(255*t[1])+","+Math.round(255*t[2])+")"},pad:function(t){return 1==t.length&&(t="0"+t),t},rgbToHex:function(t){let s=Math.round(255*t[0]).toString(16),i=Math.round(255*t[1]).toString(16),h=Math.round(255*t[2]).toString(16);return"#"+e.pad(s)+e.pad(i)+e.pad(h)},hueToRgb:function(t,s,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(s-t)*i:i<.5?s:i<2/3?t+6*(s-t)*(2/3-i):t},rgbToHsl:function(t){let s=t[0],i=t[1],e=t[2],h=Math.min(s,i,e),o=Math.max(s,i,e),n=o-h,r=0,l=0,a=(h+o)/2;return a>0&&a<1&&(l=n/(a<.5?2*a:2-2*a)),n>0&&(o==s&&o!=i&&(r+=(i-e)/n),o==i&&o!=e&&(r+=2+(e-s)/n),o==e&&o!=s&&(r+=4+(s-i)/n),r/=6),[r,l,a]},hslToRgb:function(t){let s,i,h=t[0],o=t[1],n=t[2];return 0===o?[n,n,n]:(i=n<=.5?n*(o+1):n+o-n*o,s=2*n-i,[e.hueToRgb(s,i,h+.33333),e.hueToRgb(s,i,h),e.hueToRgb(s,i,h-.33333)])},makeGradiant:function(t,s,i,h){e.dom(t,null,s,i,0);let o,n=i.childNodes[0].childNodes.length-1;for(let t=0;t0){for(a=6;a--;)r[a]=(113*r[a]+u).toFixed(2);c=" M"+r[0]+" "+r[1]+" Q"+r[2]+" "+r[3]+" "+r[4]+" "+r[5],d=[[0,g[0],1],[100,g[1],1]],e.makeGradiant("linearGradient",{id:"G"+l,x1:r[0],y1:r[1],x2:r[4],y2:r[5],gradientUnits:"userSpaceOnUse"},s,d),e.dom("path","",{d:c,"stroke-width":30,stroke:"url(#G"+l+")","stroke-linecap":"butt"},s,1)}m=n-p,g[0]=g[1]}d=[[0,"#FFFFFF",1],[50,"#FFFFFF",0],[50,"#000000",0],[100,"#000000",1]],e.makeGradiant("linearGradient",{id:"GL0",x1:0,y1:u-84.9,x2:0,y2:212.9,gradientUnits:"userSpaceOnUse"},s,d),d=[[0,"#7f7f7f",1],[50,"#7f7f7f",.5],[100,"#7f7f7f",0]],e.makeGradiant("linearGradient",{id:"GL1",x1:78.95,y1:0,x2:226,y2:0,gradientUnits:"userSpaceOnUse"},s,d),e.dom("g",null,{"transform-origin":"128px 128px",transform:"rotate(0)"},s),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"red"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL1)","stroke-width":1,stroke:"url(#GL1)"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL0)","stroke-width":1,stroke:"url(#GL0)"},s,2),e.dom("path","",{d:"M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z",fill:"none","stroke-width":2,stroke:"#000"},s,2),e.dom("circle","",{cx:128,cy:128,r:6,"stroke-width":2,stroke:"#000",fill:"none"},s),e.colorRing=s},icon:function(t,s,i){i=i||40;let h=[""];switch(t){case"logo":h[1]="";break;case"donate":h[1]="";break;case"neo":h[1]="";break;case"phy":h[1]="";break;case"config":h[1]="";break;case"github":h[1]="";break;case"save":h[1]=""}return h[2]="",h.join("\n")},logoFill_d:"\n M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 \n L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 \n M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 \n Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z\n ",logo_github:"\n M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 \n 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 \n 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 \n 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 \n 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z\n ",logo_neo:"\n M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 \n 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 \n 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 \n 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L \n 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z\n ",logo_phy:"\n M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 \n Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95\n ",logo_config:"\n M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 \n L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 \n Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75\n ",logo_donate:"\n M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 \n 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 \n 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 \n 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 \n 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 \n Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 \n 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 \n 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 \n 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M \n 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 \n 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 \n 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 \n 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 \n 200.9 187.5 200.9 187.5 195.35 Z\n "};e.setText();const h=e;class o{static autoTypes(t){let s=[];switch(t){case"svg":s=[{accept:{"image/svg+xml":".svg"}}];break;case"wav":s=[{accept:{"audio/wav":".wav"}}];break;case"mp3":s=[{accept:{"audio/mpeg":".mp3"}}];break;case"mp4":s=[{accept:{"video/mp4":".mp4"}}];break;case"bin":case"hex":s=[{description:"Binary Files",accept:{"application/octet-stream":[".bin",".hex"]}}];break;case"text":s=[{description:"Text Files",accept:{"text/plain":[".txt",".text"],"text/html":[".html",".htm"]}}];break;case"json":s=[{description:"JSON Files",accept:{"application/json":[".json"]}}];break;case"js":s=[{description:"JavaScript Files",accept:{"text/javascript":[".js"]}}];break;case"image":s=[{description:"Images",accept:{"image/*":[".png",".gif",".jpeg",".jpg"]}}];break;case"icon":s=[{description:"Icons",accept:{"image/x-ico":[".ico"]}}];break;case"lut":s=[{description:"Lut",accept:{"text/plain":[".cube",".3dl"]}}]}return s}static async load(t={}){"function"!=typeof window.showOpenFilePicker&&(window.showOpenFilePicker=o.showOpenFilePickerPolyfill);try{let s=t.type||"";const i={excludeAcceptAllOption:!!s,multiple:!1};i.types=o.autoTypes(s);const e=await window.showOpenFilePicker(i),h=await e[0].getFile();if(!h)return null;let n=h.name,r=n.substring(n.lastIndexOf(".")+1,n.length);const l=["png","jpg","jpeg","mp4","webm","ogg","mp3"],a=["sea","z","hex","bvh","BVH","glb","gltf"],c=new FileReader;-1!==l.indexOf(r)?c.readAsDataURL(h):-1!==a.indexOf(r)?c.readAsArrayBuffer(h):c.readAsText(h),c.onload=function(i){let e=i.target.result;switch(s){case"image":let s=new Image;s.onload=function(){t.callback&&t.callback(s,n,r)},s.src=e;break;case"json":t.callback&&t.callback(JSON.parse(e),n,r);break;default:t.callback&&t.callback(e,n,r)}}}catch(s){console.log(s),t.always&&t.callback&&t.callback(null)}}static showOpenFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("input");i.type="file",i.multiple=t.multiple,i.accept=t.types.map((t=>t.accept)).flatMap((t=>Object.keys(t).flatMap((s=>t[s])))).join(","),i.addEventListener("change",(()=>{s([...i.files].map((t=>({getFile:async()=>new Promise((s=>{s(t)}))}))))})),i.click()}))}static async save(t={}){let s=!1;"function"!=typeof window.showSaveFilePicker&&(window.showSaveFilePicker=o.showSaveFilePickerPolyfill,s=!0);try{let i=t.type||"";const e={suggestedName:t.name||"hello",data:t.data||""};e.types=o.autoTypes(i),e.finalType=Object.keys(e.types[0].accept)[0],e.suggestedName+=e.types[0].accept[e.finalType][0];const h=await window.showSaveFilePicker(e);if(s)return;const n=await h.createWritable();let r=new Blob([e.data],{type:e.finalType});await n.write(r),await n.close()}catch(t){console.log(t)}}static showSaveFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("a");i.download=t.suggestedName||"my-file.txt";let e=new Blob([t.data],{type:t.finalType});i.href=URL.createObjectURL(e),i.addEventListener("click",(()=>{s(setTimeout((()=>URL.revokeObjectURL(i.href)),1e3))})),i.click()}))}static async getFolder(){try{const t=await window.showDirectoryPicker(),s=[];for await(const i of t.values()){const t=await i.getFile();s.push(t)}return console.log(s),s}catch(t){console.log(t)}}}class n{constructor(t=0,s=0){this.x=t,this.y=s}set(t,s){return this.x=t,this.y=s,this}divide(t){return this.x/=t.x,this.y/=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divideScalar(t){return this.multiplyScalar(1/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}angle(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t}addScalar(t){return this.x+=t,this.y+=t,this}negate(){return this.x*=-1,this.y*=-1,this}neg(){return this.x=-1,this.y=-1,this}isZero(){return 0===this.x&&0===this.y}copy(t){return this.x=t.x,this.y=t.y,this}equals(t){return t.x===this.x&&t.y===this.y}nearEquals(t,s){return t.x.toFixed(s)===this.x.toFixed(s)&&t.y.toFixed(s)===this.y.toFixed(s)}lerp(t,s){return null===t?(this.x-=this.x*s,this.y-=this.y*s):(this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s),this}}class r{constructor(t={}){this.lock=t.lock||!1,this.neverlock=!1,this.isSpace=t.isSpace||!1,this.main=t.main||null,this.isUI=t.isUI||!1,this.group=t.group||null,this.isListen=!1,this.top=0,this.ytop=0,this.dx=t.dx||0,this.isSelectable=void 0!==t.selectable&&t.selectable,this.unselectable=void 0!==t.unselect?t.unselect:this.isSelectable,this.ontop=!!t.ontop&&t.ontop,this.css=this.main?this.main.css:h.css,this.colors=h.defineColor(t,this.main?this.group?this.group.colors:this.main.colors:h.colors),this.overEffect=this.colors.showOver,this.svgs=h.svgs,this.zone={x:0,y:0,w:0,h:0,d:0},this.local=(new n).neg(),this.isCanvasOnly=!1,this.isSelect=!1,this.p=void 0!==t.p?t.p:h.size.p,this.w=this.isUI?this.main.size.w:h.size.w,void 0!==t.w&&(this.w=t.w),this.h=this.isUI?this.main.size.h:h.size.h,void 0!==t.h&&(this.h=t.h),this.isSpace?this.lock=!0:this.h=this.h<11?11:this.h,this.fw=t.fw||0,this.autoWidth=t.auto||!0,this.isOpen=!1,this.radius=t.radius||this.colors.radius,this.transition=t.transition||h.transition,this.isNumber=!1,this.noNeg=t.noNeg||!1,this.allEqual=t.allEqual||!1,this.mono=!1,this.isEdit=!1,this.simple=t.simple||!1,this.simple&&(this.sa=0),this.setSize(this.w),void 0!==t.sa&&(this.sa=t.sa),void 0!==t.sb&&(this.sb=t.sb),this.simple&&(this.sb=this.w-this.sa),this.sc=void 0===t.sc?47:t.sc,this.objectLink=null,this.isSend=!1,this.objectKey=null,this.txt=t.name||"",this.name=t.rename||this.txt,this.target=t.target||null,this.callback=void 0===t.callback?null:t.callback,this.endCallback=null,this.openCallback=void 0===t.openCallback?null:t.openCallback,this.closeCallback=void 0===t.closeCallback?null:t.closeCallback,null===this.callback&&this.isUI&&null!==this.main.callback&&(this.callback=this.group?this.group.callback:this.main.callback),this.c=[],this.s=[],this.useFlex=!!this.isUI&&this.main.useFlex;let s=this.useFlex?"display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;":"float:left;";this.c[0]=h.dom("div",this.css.basic+s+"position:relative; height:20px;"),this.s[0]=this.c[0].style,this.margin=this.colors.sy,this.mtop=0;let i=h.isDivid(this.margin);if(this.isUI&&this.margin&&(this.s[0].boxSizing="content-box",i?(this.mtop=.5*this.margin,this.s[0].borderTop=this.mtop+"px solid transparent",this.s[0].borderBottom=this.mtop+"px solid transparent"):this.s[0].borderBottom=this.margin+"px solid transparent"),this.simple||(this.c[1]=h.dom("div",this.css.txt+this.css.middle),this.s[1]=this.c[1].style,this.c[1].textContent=this.name,this.s[1].color=this.lock?this.colors.titleoff:this.colors.title),t.pos){this.s[0].position="absolute";for(let s in t.pos)this.s[0][s]=t.pos[s];this.mono=!0}t.css&&(this.s[0].cssText=t.css)}init(){this.ytop=this.top+this.mtop,this.zone.h=this.h+this.margin,this.zone.w=this.w;let t=this.s,s=this.c;t[0].height=this.h+"px",this.isUI&&(t[0].background=this.colors.background),!this.autoWidth&&this.useFlex?(t[0].flex="1 0 auto",t[0].minWidth=this.minw+"px",t[0].textAlign="center"):this.isUI&&(t[0].width="100%"),void 0!==s[1]&&this.autoWidth&&(t[1]=s[1].style,t[1].top="1px",t[1].height=this.h-2+"px");let e=h.frag;for(let i=1,h=s.length;i!==h;i++)void 0!==s[i]&&(e.appendChild(s[i]),t[i]=s[i].style);let o=null!==this.target?this.target:this.isUI?this.main.inner:document.body;this.ontop?o.insertAdjacentElement("afterbegin",s[0]):o.appendChild(s[0]),s[0].appendChild(e),this.rSize(),this.isUI||(this.c[0].style.pointerEvents="auto",i.add(this))}addTransition(){this.baseH&&this.transition&&this.isUI&&(this.c[0].style.transition="height "+this.transition+"s ease-out")}dom(t,s,i,e,o){return h.dom(t,s,i,e,o)}setSvg(t,s,i,e,o){h.setSvg(t,s,i,e,o)}setCss(t,s){h.setCss(t,s)}clamp(t,s,i){return h.clamp(t,s,i)}getColorRing(){return h.colorRing||h.makeColorRing(),h.clone(h.colorRing)}getJoystick(t){return h["joystick_"+t]||h.makeJoystick(t),h.clone(h["joystick_"+t])}getCircular(t){return h.circular||h.makeCircular(t),h.clone(h.circular)}getKnob(t){return h.knob||h.makeKnob(t),h.clone(h.knob)}getPad2d(t){return h.pad2d||h.makePad(t),h.clone(h.pad2d)}cursor(t){i.cursor(t)}update(){}reset(){}content(){return this.c[0]}getDom(){return this.c[0]}uiout(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.background)}uiover(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.backgroundOver)}rename(t){void 0!==this.c[1]&&(this.c[1].textContent=t)}listen(){return this.isListen=i.addListen(this),this}listening(){null!==this.objectLink&&(this.isSend||this.isEdit||this.setValue(this.objectLink[this.objectKey]))}setValue(t){this.isNumber?this.value=this.numValue(t):this.value=t,this.update()}onChange(t){if(!this.isSpace)return this.callback=t||null,this}onFinishChange(t){if(!this.isSpace)return this.callback=null,this.endCallback=t,this}onOpen(t){return this.openCallback=t,this}onClose(t){return this.closeCallback=t,this}send(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.isSend=!0,null!==this.objectLink&&(this.objectLink[this.objectKey]=t),this.callback&&this.callback(t,this.objectKey),this.isSend=!1}sendEnd(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.endCallback&&this.endCallback(t),null!==this.objectLink&&(this.objectLink[this.objectKey]=t)}dispose(){this.isListen&&i.removeListen(this),h.clear(this.c[0]),null!==this.target?null!==this.group?this.group.clearOne(this):this.target.removeChild(this.c[0]):this.isUI?this.main.clearOne(this):document.body.removeChild(this.c[0]),this.isUI||i.remove(this),this.c=null,this.s=null,this.callback=null,this.target=null,this.isListen=!1}clear(){}getWidth(){let t=i.getWidth(this);t&&(this.w=t)}setSize(t){if(this.autoWidth)if(this.w=t,this.simple)this.sb=this.w-this.sa;else{let t=this.w*(this.p/100);this.sa=Math.floor(t+8),this.sb=Math.floor(this.w-t-16)}}rSize(){this.autoWidth&&(this.isUI||(this.s[0].width=this.w+"px"),this.simple||(this.s[1].width=this.sa+"px"))}setTypeNumber(t){let s;switch(this.isNumber=!0,this.value=0,void 0!==t.value&&("string"==typeof t.value?this.value=1*t.value:this.value=t.value),this.min=void 0===t.min?-1/0:t.min,this.max=void 0===t.max?1/0:t.max,this.precision=void 0===t.precision?2:t.precision,this.precision){case 0:s=1;break;case 1:s=.1;break;case 2:s=.01;break;case 3:s=.001;break;case 4:s=1e-4;break;case 5:s=1e-5;break;case 6:s=1e-6}this.step=void 0===t.step?s:t.step,this.range=this.max-this.min,this.value=this.numValue(this.value)}numValue(t){return this.noNeg&&(t=Math.abs(t)),1*Math.min(this.max,Math.max(this.min,t)).toFixed(this.precision)}handleEvent(t){if(!this.lock)return this.neverlock&&(i.lock=!1),this[t.type]?this[t.type](t):console.error(t.type,"this type of event no existe !")}wheel(t){return!1}mousedown(t){return!1}mousemove(t){return!1}mouseup(t){return!1}keydown(t){return!1}keyup(t){return!1}setReferency(t,s){this.objectLink=t,this.objectKey=s}display(t=!1){this.s[0].visibility=t?"visible":"hidden"}open(){this.isOpen||(this.isOpen=!0,i.needResize=!0,this.openCallback&&this.openCallback())}close(){this.isOpen&&(this.isOpen=!1,i.needResize=!0,this.closeCallback&&this.closeCallback())}needZone(){i.needReZone=!0}rezone(){i.needReZone=!0}select(){}unselect(){}setInput(t){i.setInput(t,this)}upInput(t,s){return i.upInput(t,s)}selected(t){this.isSelect=t||!1}}class l extends r{constructor(t={}){super(t),this.value=t.value||!1,this.model=void 0!==t.mode?t.mode:0,this.onName=t.rename||this.txt,t.onName&&(t.onname=t.onName),t.onname&&(this.onName=t.onname),this.inh=t.inh||Math.floor(.8*this.h),this.inw=t.inw||36;let s=this.colors;if(0===this.model){let t=Math.floor(.5*this.h)-.5*(this.inh-2);this.c[2]=this.dom("div",this.css.basic+"background:"+s.inputBg+"; height:"+(this.inh-2)+"px; width:"+this.inw+"px; top:"+t+"px; border-radius:10px; border:2px solid "+s.back),this.c[3]=this.dom("div",this.css.basic+"height:"+(this.inh-6)+"px; width:16px; top:"+(t+2)+"px; border-radius:10px; background:"+s.button+";")}else this.p=0,void 0!==this.c[1]&&(this.c[1].textContent=""),this.c[2]=this.dom("div",this.css.txt+this.css.button+"top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.borderSize+"px solid "+s.border+"; border-radius:"+this.radius+"px;");this.stat=-1,this.init(),this.update()}mousedown(t){return this.value=!this.value,this.update(!0),this.mousemove(t)}mousemove(t){return this.cursor("pointer"),this.mode(!0)}reset(){return this.cursor(),this.mode()}mode(t){let s,i=!1,e=this.colors,h=this.s,o=this.value;if(s=t?o?4:3:o?2:1,this.stat!==s){if(this.stat=s,0!==this.model){switch(s){case 1:h[2].color=e.text,h[2].background=e.button;break;case 2:h[2].color=e.textSelect,h[2].background=e.select;break;case 3:h[2].color=e.textOver,h[2].background=e.overoff;break;case 4:h[2].color=e.textOver,h[2].background=e.over}this.c[2].innerHTML=o?this.onName:this.name}else{switch(s){case 1:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.button;break;case 2:h[2].background=h[2].borderColor=e.back,h[3].background=e.textOver;break;case 3:h[2].background=h[2].borderColor=e.back,h[3].background=e.overoff;break;case 4:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.textSelect}h[3].marginLeft=o?"17px":"2px",this.c[1].textContent=o?this.onName:this.name}i=!0}return i}update(t){this.mode(),t&&this.send()}rSize(){super.rSize();let t=this.s,s=this.w-10-this.inw;0===this.model?(t[2].left=s+"px",t[3].left=s+"px"):(t[2].left=this.sa+"px",t[2].width=this.sb+"px")}}class a extends r{constructor(t={}){super(t),this.value="",void 0!==t.value&&(this.value=t.value),this.values=t.value||this.txt,t.values&&(this.values=t.values),t.values||t.value||(this.txt=""),this.onName=t.onName||null,this.on=!1,this.bw=t.forceWidth||0,t.bw&&(this.bw=t.bw),this.space=t.space||3,"string"==typeof this.values&&(this.values=[this.values]),this.isDown=!1,this.neverlock=!0,this.res=0,this.lng=this.values.length,this.tmp=[],this.stat=[];let s,i=this.colors;for(let t=0;te[i][0]&&s.x0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.text,this.setSvg(this.c[3],"stroke",s,1);break;case 1:this.s[2].color=i.textOver,this.setSvg(this.c[3],"stroke",i.backoff,0),s=this.model>0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.textOver,this.setSvg(this.c[3],"stroke",s,1)}return this.cmode=t,!0}reset(){this.isDown=!1}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"circular"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;if(s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=s.angle()-this.pi90,this.r=(this.r%this.twoPi+this.twoPi)%this.twoPi,null!==this.oldr){let t=this.r-this.oldr;this.r=Math.abs(t)>Math.PI?this.oldr:this.r,t>6&&(this.r=0),t<-6&&(this.r=this.twoPi)}let i=1/this.twoPi,e=this.r*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=~~(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("circular"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:sMath.PI?1:0)+" 1 "+i+","+e}update(t){if(this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range,this.setSvg(this.c[3],"d",this.makePath(),1),this.model>0){let t=this.colors,s=h.pack(h.lerpColor(h.unpack(h.ColorLuma(t.text,-.75)),h.unpack(t.text),this.percent));this.setSvg(this.c[3],"stroke",s,1)}t&&this.send()}}class d extends r{constructor(t={}){super(t),this.ctype=t.ctype||"hex",this.wfixe=256,this.cw=this.sb>256?256:this.sb,null!=t.cw&&(this.cw=t.cw),this.side=t.side||"down",this.up="down"===this.side?0:1,this.baseH=this.h,this.offset=new n,this.decal=new n,this.pp=new n;let s=this.colors;this.c[2]=this.dom("div",`${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${s.borderSize}px solid ${s.border};`),this.c[0].style.display="block",this.c[3]=this.getColorRing(),this.c[3].style.visibility="hidden",this.hsl=null,this.value="#ffffff",void 0!==t.value&&(t.value instanceof Array?this.value=h.rgbToHex(t.value):isNaN(t.value)?this.value=t.value:this.value=h.hexToHtml(t.value)),this.bcolor=null,this.isDown=!1,this.fistDown=!1,this.notext=t.notext||!1,this.tr=98,this.tsl=Math.sqrt(3)*this.tr,this.hue=0,this.d=256,this.init(),this.setColor(this.value),void 0!==t.open&&this.open()}testZone(t,s){let i=this.local;return-1===i.x&&-1===i.y?"":this.up&&this.isOpen?i.y>this.wfixe?"title":"color":i.ythis.tr)e=(c+u.pi90)/u.TwoPI,this.hue=(e+1)%1,this.setHSL([(e+1)%1,this.hsl[1],this.hsl[2]]);else{l=s.x*this.ratio,a=s.y*this.ratio;let t=this.hue*u.TwoPI+u.PI;t<0&&(t+=2*u.PI),r=Math.atan2(-a,l),r<0&&(r+=2*u.PI);let i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,h=.5*this.tr,c=Math.tan(e)*h,d=Math.sqrt(l*l+a*a),p=Math.sqrt(h*h+c*c);if(d>p){let s=Math.tan(e)*d,o=Math.atan(s/p);o>u.pi60?o=u.pi60:o<-u.pi60&&(o=-u.pi60),r+=o-e,i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,c=Math.tan(e)*h,d=p=Math.sqrt(h*h+c*c)}n=Math.sin(i)*d/this.tsl+.5;let m=1-2*Math.abs(n-.5);o=(Math.cos(i)*d+this.tr/2)/(1.5*this.tr)/m,o=u.clamp(o,0,1),this.setHSL([this.hsl[0],o,n])}}setHeight(){this.h=this.isOpen?this.wfixe+this.baseH+5:this.baseH,this.s[0].height=this.h+"px",this.zone.h=this.h}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(){super.open(),this.setHeight(),this.up&&(this.zone.y-=this.wfixe+5);let t=this.h-this.baseH;this.s[3].visibility="visible",this.parentHeight(t)}close(){super.close(),this.up&&(this.zone.y+=this.wfixe+5);let t=this.h-this.baseH;this.setHeight(),this.s[3].visibility="hidden",this.parentHeight(-t)}update(t){let s=h.rgbToHex(h.hslToRgb([this.hsl[0],1,.5]));this.moveMarkers(),this.value=this.bcolor,this.setSvg(this.c[3],"fill",s,2,0),this.s[2].background=this.bcolor,this.notext||(this.c[2].textContent=h.htmlToHex(this.bcolor)),this.invert=h.findDeepInver(this.rgb),this.s[2].color=this.invert?"#fff":"#000",t&&("array"===this.ctype&&this.send(this.rgb),"rgb"===this.ctype&&this.send(h.htmlRgb(this.rgb)),"hex"===this.ctype&&this.send(h.htmlToHex(this.value)),"html"===this.ctype&&this.send())}setValue(t){t instanceof Array?this.value=h.rgbToHex(t):isNaN(t)?this.value=t:this.value=h.hexToHtml(t),this.setColor(this.value),this.update()}setColor(t){let s=h.unpack(t);return this.bcolor!==t&&s&&(this.bcolor=t,this.rgb=s,this.hsl=h.rgbToHsl(this.rgb),this.hue=this.hsl[0],this.update()),this}setHSL(t){return this.hsl=t,this.rgb=h.hslToRgb(t),this.bcolor=h.rgbToHex(this.rgb),this.update(!0),this}moveMarkers(){let t=this.pp,s=h;this.invert;let i=this.hsl[0]*s.TwoPI,e=2/3*s.PI,o=this.tr,n=this.hsl[0],r=this.hsl[1],l=this.hsl[2],a=(i-s.pi90)*s.todeg;n=-i+s.pi90;let c=Math.cos(n)*o,d=-Math.sin(n)*o,u=Math.cos(n-e)*o,p=-Math.sin(n-e)*o,m=Math.cos(n+e)*o,g=-Math.sin(n+e)*o,x=(u+m)/2,v=(p+g)/2;i=(1-2*Math.abs(l-.5))*r;let b=u+(m-u)*l+(c-x)*i,f=p+(g-p)*l+(d-v)*i;t.set(b,f).addScalar(128),this.setSvg(this.c[3],"transform","rotate("+a+" )",2),this.setSvg(this.c[3],"cx",t.x,3),this.setSvg(this.c[3],"cy",t.y,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",2,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",3),this.setSvg(this.c[3],"fill",this.bcolor,3)}rSize(){super.rSize();let t=this.s;t[2].width=this.sb+"px",t[2].left=this.sa+"px",this.cw=this.sb>256?256:this.sb,this.rSizeColor(this.cw),this.decal.x=Math.floor(.5*(this.w-this.wfixe))}rSizeColor(t){if(t===this.wfixe)return;this.wfixe=t;let s=this.s;this.decal.y="up"===this.side?2:this.baseH+2,this.mid=Math.floor(.5*this.wfixe),this.setSvg(this.c[3],"viewBox","0 0 "+this.wfixe+" "+this.wfixe),s[3].width=this.wfixe+"px",s[3].height=this.wfixe+"px",s[3].top=this.decal.y+"px",this.ratio=256/this.wfixe,this.square=1/(this.wfixe/256*60),this.setHeight()}}class u extends r{constructor(t={}){super(t),this.round=Math.round,this.baseH=this.h,this.hplus=t.hplus||50,this.res=t.res||40,this.l=1,this.precision=t.precision||0,this.custom=t.custom||!1,this.names=t.names||["FPS","MS"];let s=t.cc||["220,220,220","255,255,0"];this.adding=t.adding||!1,this.range=t.range||[165,100,100],this.alpha=t.alpha||.25,this.values=[],this.points=[],this.textDisplay=[],this.custom||(this.now=i.getTime(),this.startTime=0,this.prevTime=0,this.frames=0,this.ms=0,this.fps=0,this.mem=0,this.mm=0,this.isMem=!(!self.performance||!self.performance.memory),this.isMem&&(this.names.push("MEM"),s.push("0,255,255")),this.txt=t.name||"Fps");let e=Math.floor(.5*this.h)-3;const h=this.colors;this.c[1].textContent=this.txt,this.c[0].style.cursor="pointer",this.c[0].style.pointerEvents="auto";let o="display:none; left:10px; top:"+this.h+"px; height:"+(this.hplus-8)+"px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid "+h.border+";";0!==this.radius&&(o+="border-radius:"+this.radius+"px;"),this.c[2]=this.dom("path",this.css.basic+o,{}),this.c[2].setAttribute("viewBox","0 0 "+this.res+" 50"),this.c[2].setAttribute("height","100%"),this.c[2].setAttribute("width","100%"),this.c[2].setAttribute("preserveAspectRatio","none"),this.c[3]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; left:0; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.c[4]=this.dom("div",this.css.txt+"position:absolute; left:10px; top:"+(this.h+2)+"px; display:none; width:100%; text-align:center;"),t.bottomLine&&(this.c[4]=this.dom("div",this.css.basic+"width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);")),this.isShow=!1;let n=this.s;n[1].lineHeight=this.h-4,n[1].color=h.text,0!==this.radius&&(n[0].borderRadius=this.radius+"px"),"none"!==this.colors.gborder&&(n[0].border="1px solid "+h.gborder);let r=0;for(r=0;r "+this.names[r]+" ")}for(r=this.names.length;r--;)this.dom("path",null,{fill:"rgba("+s[r]+","+this.alpha+")","stroke-width":1,stroke:"rgba("+s[r]+",1)","vector-effect":"non-scaling-stroke"},this.c[2]);this.init()}mousedown(t){this.isShow?this.close():this.open()}tick(t){this.values=t,this.isShow&&(this.drawGraph(),this.upText())}makePath(t){let s="";s+="M -1 50";for(let i=0;i";this.c[4].innerHTML=i}drawGraph(){let t,s=this.c[2],i=this.names.length,e=0,h=0;for(;i--;)t=this.adding?(this.values[h]+e)*this.range[h]:this.values[h]*this.range[h],this.points[h].shift(),this.points[h].push(50-t),this.setSvg(s,"d",this.makePath(this.points[h]),i+1),e+=this.values[h],h++}open(){super.open(),this.h=this.hplus+this.baseH,this.setSvg(this.c[3],"d",this.svgs.g2),null!==this.group?this.group.calc(this.hplus):this.isUI&&this.main.calc(this.hplus),this.s[0].height=this.h+"px",this.s[2].display="block",this.s[4].display="block",this.isShow=!0,this.custom||i.addListen(this)}close(){super.close(),this.h=this.baseH,this.setSvg(this.c[3],"d",this.svgs.g1),null!==this.group?this.group.calc(-this.hplus):this.isUI&&this.main.calc(-this.hplus),this.s[0].height=this.h+"px",this.s[2].display="none",this.s[4].display="none",this.isShow=!1,this.custom||i.removeListen(this),this.c[4].innerHTML=""}begin(){this.startTime=this.now()}end(){let t=this.now();if(this.ms=t-this.startTime,this.frames++,t>this.prevTime+1e3&&(this.fps=this.round(1e3*this.frames/(t-this.prevTime)),this.prevTime=t,this.frames=0,this.isMem)){let t=performance.memory.usedJSHeapSize,s=performance.memory.jsHeapSizeLimit;this.mem=this.round(954e-9*t),this.mm=t/s}return this.values=[this.fps,this.ms,this.mm],this.drawGraph(),this.upText([this.fps,this.ms,this.mem]),t}listening(){this.custom||(this.startTime=this.end())}rSize(){let t=this.s,s=this.w;t[3].left=this.sa+this.sb-6+"px",t[0].width=s+"px",t[1].width=s+"px",t[2].left="10px",t[2].width=s-20+"px",t[4].width=s-20+"px"}}class p extends r{constructor(t={}){super(t),this.value=void 0!==t.value?t.value:[0,0,0],this.lng=this.value.length,this.precision=void 0!==t.precision?t.precision:2,this.multiplicator=t.multiplicator||1,this.neg=t.neg||!1,this.line=void 0===t.line||t.line,this.autoWidth=void 0===t.autoWidth||t.autoWidth,this.isNumber=!1,this.isDown=!1,this.h=t.h||138,this.rh=this.h-10,this.top=0,this.c[0].style.width=this.w+"px",void 0!==this.c[1]&&(this.c[1].style.width=this.w+"px",this.autoWidth||(this.c[1].style.width="100%",this.c[1].style.justifyContent="center"),this.top=10,this.h+=10),this.gh=this.rh-28,this.gw=this.w-28,this.c[2]=this.dom("div",this.css.txt+"display:block; text-align:center; padding:0px 0px; top:"+(this.h-20)+"px; left:14px; width:"+this.gw+"px; color:"+this.colors.text),this.c[2].innerHTML=this.valueToHtml();let s=this.dom("svg",this.css.basic,{viewBox:"0 0 "+this.w+" "+this.rh,width:this.w,height:this.rh,preserveAspectRatio:"none"});this.setCss(s,{width:this.w,height:this.rh,left:0,top:this.top}),this.dom("path","",{d:"",stroke:this.colors.text,"stroke-width":2,fill:"none","stroke-linecap":"butt"},s),this.dom("rect","",{x:10,y:10,width:this.gw+8,height:this.gh+8,stroke:"rgba(0,0,0,0.3)","stroke-width":1,fill:"none"},s),this.iw=(this.gw-4*(this.lng-1))/this.lng;let i=[];this.cMode=[],this.v=[];for(let t=0;t',e="width:"+100/this.lng+"%;";for(;t--;)s===this.lng-1?i+=""+this.value[s]+"":i+=""+this.value[s]+"",s++;return i}updateSVG(){this.line&&this.setSvg(this.c[3],"d",this.makePath(),0);for(let t=0;tthis.top&&s.ye[i][0]&&s.xthis.distance){let t=Math.atan2(this.tmp.x,this.tmp.y);this.tmp.x=Math.sin(t)*this.distance,this.tmp.y=Math.cos(t)*this.distance}this.pos.copy(this.tmp).divideScalar(this.distance).negate(),this.update()}setValue(t){void 0===t&&(t=[0,0]),this.pos.set(t[0]||0,t[1]||0),this.updateSVG()}update(t){void 0===t&&(t=!0),null!==this.interval&&(this.isDown||(this.pos.lerp(null,.3),this.pos.x=Math.abs(this.pos.x)<.01?0:this.pos.x,this.pos.y=Math.abs(this.pos.y)<.01?0:this.pos.y,this.isUI&&this.main.isCanvas&&this.main.draw())),this.updateSVG(),t&&this.send(),this.pos.isZero()&&this.stopInterval()}updateSVG(){let t=.5*this.diam- -this.pos.x*this.distance,s=.5*this.diam- -this.pos.y*this.distance;if(0===this.model){let i=t+5*this.pos.x+5,e=s+5*this.pos.y+10;this.setSvg(this.c[3],"cx",i*this.ratio,3),this.setSvg(this.c[3],"cy",e*this.ratio,3)}else this.setSvg(this.c[3],"cx",t*this.ratio,3),this.setSvg(this.c[3],"cy",s*this.ratio,3);this.setSvg(this.c[3],"cx",t*this.ratio,4),this.setSvg(this.c[3],"cy",s*this.ratio,4),this.value[0]=1*(this.pos.x*this.multiplicator).toFixed(this.precision),this.value[1]=1*(this.pos.y*this.multiplicator).toFixed(this.precision),this.haveText&&(this.c[2].textContent=this.value)}clear(){this.stopInterval(),super.clear()}}class v extends r{constructor(t={}){super(t),this.isCyclic=t.cyclic||!1,this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.autoWidth=!1,this.setTypeNumber(t),this.minw=this.w,this.diam=t.diam||this.w,this.mPI=.8*Math.PI,this.toDeg=180/Math.PI,this.cirRange=2*this.mPI,this.offset=new n,this.h=t.h||this.w+10,this.c[0].style.width=this.w+"px",this.c[0].style.display="block",void 0!==this.c[1]&&(this.c[1].style.width="100%",this.c[1].style.justifyContent="center",this.top=10,this.h+=10),this.percent=0,this.cmode=0;let s=this.colors;this.c[2]=this.dom("div",this.css.txt+"justify-content:center; top:"+(this.h-20)+"px; width:100%; color:"+s.text),this.c[3]=this.getKnob(),this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1),this.setSvg(this.c[3],"stroke",s.text,3),this.setSvg(this.c[3],"d",this.makeGrad(),3),this.setSvg(this.c[3],"viewBox","0 0 "+this.diam+" "+this.diam),this.setCss(this.c[3],{width:this.diam,height:this.diam,left:0,top:this.top}),this.model>0&&(h.dom("path","",{d:"",stroke:s.text,"stroke-width":2,fill:"none","stroke-linecap":"round"},this.c[3]),2==this.model&&(h.addSVGGlowEffect(),this.setSvg(this.c[3],"style",'filter: url("#UILGlow");',4))),this.r=0,this.init(),this.update()}mode(t){let s=this.colors;if(this.cmode===t)return!1;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1);break;case 1:this.s[2].color=s.textOver,this.setSvg(this.c[3],"fill",s.select,0),this.setSvg(this.c[3],"stroke",s.textOver,1)}return this.cmode=t,!0}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"knob"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=-Math.atan2(s.x,s.y),null!==this.oldr&&(this.r=Math.abs(this.r-this.oldr)>Math.PI?this.oldr:this.r),this.r=this.r>this.mPI?this.mPI:this.r,this.r=this.r<-this.mPI?-this.mPI:this.r;let i=1/this.cirRange,e=(this.r+this.mPI)*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=Math.floor(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("knob"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s5?(s=this.range/this.step,t=(a-c)/s):(t=(a-c)/l*2,s=32);for(let c=0;c<=s;++c)i=a-t*c,e=l+44*Math.sin(i),h=l+44*Math.cos(i),o=l+40*Math.sin(i),n=l+40*Math.cos(i),r+="M"+e+" "+h+" L"+o+" "+n+" ";return r}update(t){this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range;let s=Math.PI+this.mPI,i=this.percent*this.cirRange-this.mPI,e=Math.sin(i),o=Math.cos(i),n=25*e+64,r=-25*o+64,l=20*e+64,a=-20*o+64;if(this.setSvg(this.c[3],"d","M "+n+" "+r+" L "+l+" "+a,1),this.model>0){let t=36*Math.sin(s)+64,n=36*Math.cos(s)+64,r=36*e+64,l=-36*o+64,a=i<=Math.PI-this.mPI?0:1;this.setSvg(this.c[3],"d","M "+t+","+n+" A 36,36 1 "+a+" 1 "+r+","+l,4);let c=h.pack(h.lerpColor(h.unpack(h.ColorLuma(this.colors.text,-.75)),h.unpack(this.colors.text),this.percent));this.setSvg(this.c[3],"stroke",c,4)}t&&this.send()}}class b extends r{constructor(t={}){super(t),this.hideCurrent=!1,this.path=t.path||"",this.format=t.format||"",this.isWithImage=""!==this.path,this.preLoadComplete=!1,this.tmpImage={},this.tmpUrl=[],this.m=void 0!==t.m?t.m:5;let s=t.align||"left",i=t.scrollSize||10;this.ss=i+1,this.sMode=0,this.tMode=0,this.listOnly=t.listOnly||!1,this.staticTop=t.staticTop||!1,this.isSelectable=this.listOnly,void 0!==t.select&&(t.selectable=t.select),void 0!==t.selectable&&(this.isSelectable=t.selectable),""===this.txt&&(this.p=0);let e=Math.floor(.5*this.h)-3,h=this.colors;if(this.c[2]=this.dom("div",this.css.basic+"top:0; display:none; border-radius:"+this.radius+"px;"),this.c[3]=this.dom("div",this.css.item+"padding:0px "+this.m+"px; margin-bottom:0px; position:absolute; justify-content:"+s+"; text-align:"+s+"; line-height:"+(this.h-4)+"px; top:1px; background:"+h.button+"; height:"+(this.h-2)+"px; border:1px solid "+h.border+"; border-radius:"+this.radius+"px;"),this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.scrollerBack=this.dom("div",this.css.basic+"right:0px; width:"+i+"px; background:"+h.back+"; display:none;"),this.scroller=this.dom("div",this.css.basic+"right:"+.5*(i-.25*i)+"px; width:"+.25*i+"px; background:"+h.text+"; display:none; "),this.c[3].style.color=h.text,this.list=[],this.refObject=null,t.list)if(t.list instanceof Array)this.list=t.list;else if(t.list instanceof Object){this.refObject=t.list;for(let t in this.refObject)this.list.push(t)}this.items=[],this.prevName="",this.tmpId=0,this.baseH=this.h,this.itemHeight=t.itemHeight||this.h,this.full=t.full||!1,this.py=0,this.ww=this.sb,this.scroll=!1,this.isDown=!1,this.current=null,this.side=t.side||"down",this.up="down"===this.side?0:1,this.up?(this.c[2].style.top="auto",this.c[3].style.top="auto",this.c[4].style.top="auto",this.c[2].style.bottom=this.h-2+"px",this.c[3].style.bottom="1px",this.c[4].style.bottom=e+"px"):this.c[2].style.top=this.baseH+"px",this.listIn=this.dom("div",this.css.basic+"left:0; top:0; width:100%; background:none;"),this.listIn.name="list",this.topList=0,this.c[2].appendChild(this.listIn),this.c[2].appendChild(this.scrollerBack),this.c[2].appendChild(this.scroller),void 0!==t.value?isNaN(t.value)?this.value=t.value:this.value=this.list[t.value]:this.value=this.list[0],this.isOpenOnStart=t.open||!1,this.listOnly&&(this.baseH=5,this.c[3].style.display="none",this.c[4].style.display="none",this.c[2].style.top=this.baseH+"px",this.isOpenOnStart=!0),this.miniCanvas=t.miniCanvas||!1,this.canvasBg=t.canvasBg||"rgba(0,0,0,0)",this.imageSize=t.imageSize||[20,20],this.drag=t.drag||!1,this.dragout=t.dragout||!1,this.dragstart=t.dragstart||null,this.dragend=t.dragend||null,this.setList(this.list),this.init(),this.isWithImage&&this.preloadImage(),this.isOpenOnStart&&this.open(!0),this.baseH+=this.mtop}preloadImage(){this.preLoadComplete=!1,this.tmpImage={};for(let t=0;tthis.h-this.baseH)return"title";if(this.scroll&&s.x>this.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}else{if(s.ythis.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}}return""}testItems(t){let s,i,e,h="",o=this.items,n=o.length;for(;n--;)if(s=o[n],i=s.posy+this.topList,e=s.posy+this.itemHeight+1+this.topList,t>=i&&t<=e)return h="item"+n,this.modeItem(0),this.current=s,this.modeItem(1),h;return h}modeItem(t){if(!this.current)return;this.current.select&&0===t&&(t=2);let s=this.colors;switch(t){case 0:this.current.style.background=s.back,this.current.style.color=s.text;break;case 1:this.current.style.background=s.over,this.current.style.color=s.textOver;break;case 2:this.current.style.background=s.select,this.current.style.color=s.textSelect}}unSelected(){this.current&&(this.modeItem(0),this.current=null)}selected(){this.current&&(this.resetItems(),this.modeItem(2),this.current.select=!0)}resetItems(){let t=this.items.length;for(;t--;)this.items[t].select=!1,this.items[t].style.background=this.colors.back,this.items[t].style.color=this.colors.text}hideActive(){this.hideCurrent&&(this.current&&(this.tmpId=this.current.id),this.resetHide())}resetHide(){console.log(this.tmpId);let t=this.items.length;for(;t--;)t===this.tmpId?(this.items[t].style.height="0px",this.items[t].posy=-1):(this.items[t].style.height=this.itemHeight+"px",this.items[t].posy=(this.itemHeight+1)*(t-1))}mouseup(t){this.isDown=!1}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s?(this.isDown=!0,this.mousemove(t)):"title"===s?(this.modeTitle(2),this.listOnly||(this.hideActive(),this.isOpen?this.close():this.open())):this.current&&(this.value=this.list[this.current.id],this.isSelectable&&this.selected(),this.send(this.value),this.listOnly||(this.close(),this.setTopItem())),!0)}mousemove(t){let s=!1,i=this.testZone(t);if(!i)return s;if("title"===i)this.unSelected(),this.modeTitle(1),this.cursor("pointer");else if("scroll"===i){if(this.cursor("s-resize"),this.modeScroll(1),this.isDown){this.modeScroll(2);let s=this.zone.y+this.baseH-2;this.update(t.clientY-s-.5*this.sh)}}else this.modeTitle(0),this.modeScroll(0),this.cursor("pointer");return i!==this.prevName&&(s=!0),this.prevName=i,s}wheel(t){return"title"!==this.testZone(t)&&(this.py+=10*t.delta,this.update(this.py),!0)}reset(){this.prevName="",this.unSelected(),this.modeTitle(0),this.modeScroll(0)}modeScroll(t){if(t===this.sMode)return;let s=this.scroller.style,i=this.colors;switch(t){case 0:s.background=i.text;break;case 1:case 2:s.background=i.select}this.sMode=t}modeTitle(t){if(t===this.tMode)return;let s=this.s,i=this.colors;switch(t){case 0:s[3].color=i.text,s[3].background=i.button;break;case 1:s[3].color=i.textOver,s[3].background=i.overoff;break;case 2:s[3].color=i.textSelect,s[3].background=i.overoff}this.tMode=t}clearList(){for(;this.listIn.children.length;)this.listIn.removeChild(this.listIn.lastChild);this.items=[]}setList(t){this.clearList(),this.list=t,this.length=this.list.length;let s,e,h=this.hideCurrent?this.length-1:this.length;this.maxItem=this.full?h:5,this.maxItem=hthis.maxHeight&&(this.ww=this.sb-this.ss,this.scroll=!0),this.miniCanvas&&(this.tmpCanvas=document.createElement("canvas"),this.tmpCanvas.width=this.imageSize[0],this.tmpCanvas.height=this.imageSize[1],this.tmpCtx=this.tmpCanvas.getContext("2d"),this.tmpCtx.fillStyle=this.canvasBg,this.tmpCtx.fillRect(0,0,this.imageSize[0],this.imageSize[1]));for(let t=0;tthis.range?this.range:t,this.topList=-Math.floor(t/this.ratio),this.listIn.style.top=this.topList+"px",this.scroller.style.top=Math.floor(t)+"px",this.py=t)}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(t){super.open(),this.update(0),this.h=this.maxHeight+this.baseH+5,this.scroll?(this.scroller.style.display="block",this.scrollerBack.style.display="block"):(this.topList=0,this.h=this.baseH+5+this.max,this.scroller.style.display="none",this.scrollerBack.style.display="none"),this.s[0].height=this.h+"px",this.s[2].display="block",this.up?(this.zone.y-=this.h-(this.baseH-10),this.setSvg(this.c[4],"d",this.svgs.g1)):this.setSvg(this.c[4],"d",this.svgs.g2),this.rSizeContent();let s=this.h-this.baseH;this.zone.h=this.h,t||this.parentHeight(s)}close(){super.close(),this.up&&(this.zone.y+=this.h-(this.baseH-10));let t=this.h-this.baseH;this.h=this.baseH,this.s[0].height=this.h+"px",this.s[2].display="none",this.setSvg(this.c[4],"d",this.svgs.g1),this.zone.h=this.h,this.parentHeight(-t)}text(t){this.c[3].textContent=t}rSizeContent(){let t=this.length;for(;t--;)this.listIn.children[t].style.width=this.ww+"px"}rSize(){super.rSize();let t=this.s,s=this.sb,i=this.sa;void 0!==t[2]&&(t[2].width=s+"px",t[2].left=i+"px",t[3].width=s+"px",t[3].left=i+"px",t[4].left=i+s-15+"px",this.ww=s,this.max>this.maxHeight&&(this.ww=s-this.ss),this.isOpen&&this.rSizeContent())}}class f extends r{constructor(t={}){super(t),this.setTypeNumber(t),this.allway=t.allway||!1,this.isDown=!1,this.value=[0],this.multy=1,this.invmulty=1,this.isSingle=!0,this.isAngle=!1,this.isVector=!1,t.isAngle&&(this.isAngle=!0,this.multy=h.torad,this.invmulty=h.todeg),this.isDrag=t.drag||!1,void 0!==t.value&&(isNaN(t.value)?t.value instanceof Array?(this.value=t.value,this.isSingle=!1):t.value instanceof Object&&(this.value=[],void 0!==t.value.x&&(this.value[0]=t.value.x),void 0!==t.value.y&&(this.value[1]=t.value.y),void 0!==t.value.z&&(this.value[2]=t.value.z),void 0!==t.value.w&&(this.value[3]=t.value.w),this.isSingle=!1,this.isVector=!0):this.value=[t.value]),this.lng=this.value.length,this.tmp=[],this.current=-1,this.prev={x:0,y:0,d:0,v:0};let s=this.colors;this.c[2]=this.dom("div",this.css.basic+" background:"+s.select+"; top:4px; width:0px; height:"+(this.h-8)+"px;"),this.cMode=[];let i=this.lng;for(;i--;)this.isAngle&&(this.value[i]=(180*this.value[i]/Math.PI).toFixed(this.precision)),this.c[3+i]=this.dom("div",this.css.txtselect+"top:1px; height:"+(this.h-2)+"px; color:"+s.text+"; background:"+s.back+"; borderColor:"+s.border+"; border-radius:"+this.radius+"px;"),t.center&&(this.c[2+i].style.textAlign="center"),this.c[3+i].textContent=this.value[i],this.c[3+i].style.color=this.colors.text,this.c[3+i].isNum=!0,this.cMode[i]=0;this.selectId=3+this.lng,this.c[this.selectId]=this.dom("div",this.css.txtselect+"position:absolute; top:2px; height:"+(this.h-4)+"px; padding:0px 0px; width:0px; color:"+s.textSelect+"; background:"+s.select+"; border:none; border-radius:0px;"),this.cursorId=4+this.lng,this.c[this.cursorId]=this.dom("div",this.css.basic+"top:2px; height:"+(this.h-4)+"px; width:0px; background:"+s.text+";"),this.init()}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";let i=this.lng,e=this.tmp;for(;i--;)if(s.x>e[i][0]&&s.x=this.txl?"text":s.x>=this.sa?"scroll":""}mouseup(t){this.isDown&&(this.isDown=!1)}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s&&(this.isDown=!0,this.old=this.value,this.mousemove(t)),!0)}mousemove(t){let s=!1;if("scroll"===this.testZone(t)?(this.mode(1),this.cursor("w-resize")):this.cursor(),this.isDown){let i=(t.clientX-(this.zone.x+this.sa)-3)/this.ww*this.range+this.min-this.old;(i>=this.step||i<=this.step)&&(i=Math.floor(i/this.step),this.value=this.numValue(this.old+i*this.step),this.update(!0),this.old=this.value),s=!0}return s}wheel(t){if("scroll"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s=this.sa?"text":""}mouseup(t){if(this.editable)return!!this.isDown&&(this.isDown=!1,this.mousemove(t))}mousedown(t){if(!this.editable)return;let s=this.testZone(t);return!this.isDown&&(this.isDown=!0,"text"===s&&this.setInput(this.c[2]),this.mousemove(t))}mousemove(t){if(!this.editable)return;let s=0;return"text"===this.testZone(t)?this.cursor("text"):this.cursor(),this.isDown&&(s=t.clientX-this.zone.x),this.upInput(s-this.sa-3,this.isDown)}update(){this.c[2].textContent=this.value}reset(){this.cursor()}select(t,s,i,e){let h=this.s,o=this.sa+5;h[4].width="1px",h[4].left=o+s+"px",h[3].left=o+s+"px",h[3].width=i+"px",this.c[3].innerHTML=e}unselect(){let t=this.s;t&&(t[3].width="0px",this.c[3].innerHTML="t",t[4].width="0px")}validate(t){this.allway&&(t=!0),this.value=this.c[2].textContent,""!==this.value?this.c[5].textContent="":this.c[5].textContent=this.placeHolder,t&&this.send()}rSize(){super.rSize();let t=this.s;t[2].left=this.sa+"px",t[2].width=this.sb+"px",t[5].left=this.sa+"px",t[5].width=this.sb+"px"}}class k extends r{constructor(t={}){super(t);let s=t.prefix||"";this.c[2]=this.dom("div",this.css.txt+"justify-content:right; width:60px; line-height:"+(this.h-8)+"px; color:"+this.colors.text),31===this.h&&(this.s[0].height=this.h+"px",this.s[1].top="8px",this.c[2].style.top="8px");let i=this.s;i[1].justifyContent=t.align||"left",i[1].fontWeight=t.fontWeight||"bold",this.c[1].textContent=this.txt.substring(0,1).toUpperCase()+this.txt.substring(1).replace("-"," "),this.c[2].textContent=s,this.init()}text(t){this.c[1].textContent=t}text2(t){this.c[2].textContent=t}rSize(){super.rSize(),this.s[1].width=this.w+"px",this.s[2].left=this.w+"px"}setColor(t){this.s[1].color=t,this.s[2].color=t}}class S extends r{constructor(t={}){super(t),this.value=t.value||"",this.isDown=!1,this.onActif=t.onActif||function(){};const s=this.colors;this.c[2]=this.dom("div",this.css.txt+this.css.button+" top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.buttonBorder+"; border-radius:15px; width:30px; left:10px;"),this.c[3]=this.dom("div",this.css.txtselect+"height:"+(this.h-4)+"px; background:"+s.inputBg+"; borderColor:"+s.inputBorder+"; border-radius:"+this.radius+"px;"),this.c[3].textContent=this.value;let i=Math.floor(.5*this.h)-7;this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:14px; height:14px; left:5px; top:"+i+"px;",{d:this.svgs.cursor,fill:s.text,stroke:"none"}),this.stat=1,this.isActif=!1,this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>this.sa&&s.xthis.sa&&s.xi[r][0]&&s.xe[r][0]&&s.ythis.lng-1&&(h=-1)),h}mouseup(t){return!!this.isDown&&(this.isDown=!1,-1!==this.res&&(this.value=this.values[this.res],this.send()),this.mousemove(t))}mousedown(t){return!this.isDown&&(this.isDown=!0,this.mousemove(t))}mousemove(t){let s=!1;return this.res=this.testZone(t),-1!==this.res?(this.cursor("pointer"),s=this.modes(this.isDown?3:2,this.res)):s=this.reset(),s}modes(t=1,s=-1){let i,e,h=this.lng,o=!1;for(;h--;)e=t,i=!!this.isSelectable&&this.values[h]===this.value,h===s?i&&2===e&&(e=3):(e=1,i&&(e=4)),this.mode(e,h)&&(o=!0);return o}mode(t,s){let i=!1,e=this.colors,h=this.buttons,o=s;if(this.stat[s]!==t){switch(this.stat[s]=t,t){case 1:h[o].style.color=e.text,h[o].style.background=e.button;break;case 2:h[o].style.color=e.textOver,h[o].style.background=e.overoff;break;case 3:h[o].style.color=e.textOver,h[o].style.background=e.over;break;case 4:h[o].style.color=e.textSelect,h[o].style.background=e.select}i=!0}return i}reset(){return this.res=-1,this.cursor(),this.modes()}label(t,s){this.buttons[s].textContent=t}icon(t,s,i){this.buttons[i].style.padding=(s||0)+"px 0px",this.buttons[i].innerHTML=t}testW(){let t=!1;if(3*this.spaces[0]+2*this.bsizeMax>this.w?(this.bsize[0]=.5*(this.w-3*this.spaces[0]),t=!0):this.bsize[0]!==this.bsizeMax&&(this.bsize[0]=this.bsizeMax,t=!0),!t)return;let s=this.buttons.length;for(;s--;)this.buttons[s].style.width=this.bsize[0]+"px"}rSize(){let t;super.rSize(),this.testW(),this.tmpX=[],this.tmpY=[];for(let s=0;sthis.h-this.c[2].offsetHeight?"text":"pad"}mouseup(t){return this.isDown=!1,this.mode(0)}mousedown(t){if("pad"===this.testZone(t))return this.isDown=!0,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=.5*this.w-(t.clientX-this.zone.x),i=.5*this.diam-(t.clientY-this.zone.y-this.ytop),e=256/this.diam;s=-s*e,i=-i*e,s=h.clamp(s,-this.maxPos,this.maxPos),i=h.clamp(i,-this.maxPos,this.maxPos),this.setPos([s,i]),this.update(!0)}mode(t){if(this.cmode===t)return!1;let s=this.colors;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.back,0),this.setSvg(this.c[3],"fill",s.button,1),this.setSvg(this.c[3],"stroke",s.back,2),this.setSvg(this.c[3],"stroke",s.back,3),this.setSvg(this.c[3],"stroke",s.text,4);break;case 1:this.s[2].color=s.textSelect,this.setSvg(this.c[3],"fill",s.backoff,0),this.setSvg(this.c[3],"fill",s.overoff,1),this.setSvg(this.c[3],"stroke",s.backoff,2),this.setSvg(this.c[3],"stroke",s.backoff,3),this.setSvg(this.c[3],"stroke",s.textSelect,4)}return this.cmode=t,!0}update(t){this.c[2].textContent=this.value,this.updateSVG(),t&&this.send()}updateSVG(){1==this.model&&(this.setSvg(this.c[3],"y1",this.pos.y,2),this.setSvg(this.c[3],"y2",this.pos.y,2),this.setSvg(this.c[3],"x1",this.pos.x,3),this.setSvg(this.c[3],"x2",this.pos.x,3)),this.setSvg(this.c[3],"cx",this.pos.x,4),this.setSvg(this.c[3],"cy",this.pos.y,4)}setPos(t){this.pos.set(t[0]+128,t[1]+128);let s=1/this.maxPos;this.value[0]=(t[0]*s*this.range).toFixed(this.precision),this.value[1]=(t[1]*s*this.range).toFixed(this.precision)}setValue(t,s=!1){void 0===t&&(t=this.value),this.value[0]=1*Math.min(this.max,Math.max(this.min,t[0])).toFixed(this.precision),this.value[1]=1*Math.min(this.max,Math.max(this.min,t[1])).toFixed(this.precision),this.pos.set(this.value[0]/this.range*this.maxPos+128,this.value[1]/this.range*this.maxPos+128),this.update(s)}}const T=function(){let t,s,e=arguments,h=!1,o=null;"string"==typeof e[0]?(t=e[0],s=e[1]||{}):"object"==typeof e[0]&&(h=!0,void 0===e[2]&&[].push.call(e,{}),t=e[2].type?e[2].type:O(e[0][e[1]],e[2]),s=e[2],s.name=e[1],"list"!==t||s.list?s.value=e[0][e[1]]:s.list=e[0][e[1]]);let n=t.toLowerCase();switch("group"===n&&(s.add=T),n){case"bool":case"boolean":o=new l(s);break;case"button":o=new a(s);break;case"circular":o=new c(s);break;case"color":o=new d(s);break;case"fps":o=new u(s);break;case"graph":o=new p(s);break;case"group":o=new g(s);break;case"joystick":o=new x(s);break;case"knob":o=new v(s);break;case"list":o=new b(s);break;case"numeric":case"number":o=new f(s);break;case"slide":o=new w(s);break;case"textInput":case"string":o=new y(s);break;case"title":case"text":o=new k(s);break;case"select":o=new S(s);break;case"bitmap":o=new I(s);break;case"selector":o=new C(s);break;case"empty":case"space":o=new m(s);break;case"item":o=new M(s);break;case"grid":o=new L(s);break;case"pad2d":case"pad":o=new z(s)}if(null!==o)return i.needResize=!0,h&&o.setReferency(e[0],e[1]),o},O=function(t,s){let i="slide";return"boolean"==typeof t?i="bool":"string"==typeof t?i="#"===t.substring(0,1)?"color":"string":"number"==typeof t?i=s.ctype?"color":"slide":"array"==typeof t&&t instanceof Array?"number"==typeof t[0]?i="number":"string"==typeof t[0]&&(i="list"):"object"==typeof t&&t instanceof Object&&(i=void 0!==t.x?"number":"list"),i};class D{constructor(t={}){this.isGui=!0,this.name="gui",this.canvas=null,this.screen=null,this.plane=t.plane||null,t.config&&(t.colors=t.config),t.colors?this.setConfig(t.colors):this.colors=h.defineColor(t),this.css=h.cloneCss(),this.isReset=!0,this.tmpAdd=null,this.isCanvas=t.isCanvas||!1,this.isCanvasOnly=!1,this.callback=void 0===t.callback?null:t.callback,this.forceHeight=t.maxHeight||0,this.lockHeight=t.lockHeight||!1,this.isItemMode=void 0!==t.itemMode&&t.itemMode,this.cn="",this.size=h.size,void 0!==t.p&&(this.size.p=t.p),void 0!==t.w&&(this.size.w=t.w),void 0!==t.h&&(this.size.h=t.h),void 0!==t.s&&(this.size.s=t.s),this.size.h=this.size.h<11?11:this.size.h,this.local=(new n).neg(),this.zone={x:0,y:0,w:this.size.w,h:0},this.mouse=(new n).neg(),this.h=0,this.sw=0,this.margin=this.colors.sy,this.marginDiv=h.isDivid(this.margin),this.isWithClose=void 0===t.close||t.close,this.bh=this.isWithClose?this.size.h:0,this.autoResize=void 0===t.autoResize||t.autoResize,this.isCenter=t.center||!1,this.cssGui=void 0!==t.css?t.css:this.isCenter?"":"right:10px;",this.isOpen=void 0===t.open||t.open,this.isDown=!1,this.isScroll=!1,this.uis=[],this.current=-1,this.proto=null,this.isEmpty=!0,this.decal=0,this.ratio=1,this.oy=0,this.isNewTarget=!1;let s=this.colors;this.content=h.dom("div",this.css.basic+" width:0px; height:auto; top:0px; background:"+s.content+"; "+this.cssGui),this.innerContent=h.dom("div",this.css.basic+"width:100%; top:0; left:0; height:auto; overflow:hidden;"),this.content.appendChild(this.innerContent),this.useFlex=!0;let e=this.useFlex?"display:flex; flex-flow: row wrap;":"";this.inner=h.dom("div",this.css.basic+e+"width:100%; left:0; "),this.innerContent.appendChild(this.inner),this.scrollBG=h.dom("div",this.css.basic+"right:0; top:0; width:"+(this.size.s-1)+"px; height:10px; display:none; background:"+s.background+";"),this.content.appendChild(this.scrollBG),this.scroll=h.dom("div",this.css.basic+"background:"+s.button+"; right:2px; top:0; width:"+(this.size.s-4)+"px; height:10px;"),this.scrollBG.appendChild(this.scroll),this.bottomText=t.bottomText||["open","close"];let o=s.radius;this.bottom=h.dom("div",this.css.txt+"width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:"+o+"px; border-bottom-left-radius:"+o+"px; justify-content:center; height:"+this.bh+"px; line-height:"+(this.bh-5)+"px; color:"+s.text+";"),this.content.appendChild(this.bottom),this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.bottom.style.background=s.background,this.parent=void 0!==t.parent?t.parent:null,this.parent=void 0!==t.target?t.target:this.parent,null!==this.parent||this.isCanvas||(this.parent=document.body),null!==this.parent&&this.parent.appendChild(this.content),this.isCanvas&&null===this.parent&&(this.isCanvasOnly=!0),this.isCanvasOnly?(this.content.style.left="0px",this.content.style.right="auto",t.transition=0):this.content.style.pointerEvents="auto",this.transition=void 0!==t.transition?t.transition:h.transition,this.transition&&setTimeout(this.addTransition.bind(this),1e3),this.setWidth(),this.isCanvas&&this.makeCanvas(),i.add(this)}setTop(t,s){this.content.style.top=t+"px",void 0!==s&&(this.forceHeight=s),this.calc(),i.needReZone=!0}addTransition(){this.transition&&!this.isCanvas&&(this.innerContent.style.transition="height "+this.transition+"s ease-out",this.content.style.transition="height "+this.transition+"s ease-out",this.bottom.style.transition="top "+this.transition+"s ease-out");let t=this.uis.length;for(;t--;)this.uis[t].addTransition()}onDraw(){}makeCanvas(){this.canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),this.canvas.width=this.zone.w,this.canvas.height=this.forceHeight?this.forceHeight:this.zone.h}draw(t){if(null===this.canvas)return;let s=this.zone.w,e=this.forceHeight?this.forceHeight:this.zone.h;i.toCanvas(this,s,e,t)}getDom(){return this.content}noMouse(){this.mouse.neg()}setMouse(t,s=!0){s?this.mouse.set(Math.round(t.x*this.canvas.width),this.canvas.height-Math.round(t.y*this.canvas.height)):this.mouse.set(Math.round(t.x*this.canvas.width),Math.round(t.y*this.canvas.height))}setConfig(t){h.setText(),this.colors=h.defineColor(t)}setColors(t){for(let s in t)this.colors[s]&&(this.colors[s]=t[s])}setText(t,s,i,e){h.setText(t,s,i,e)}hide(t){this.content.style.visibility=t?"hidden":"visible"}display(t=!1){this.content.style.visibility=t?"visible":"hidden"}onChange(t){return this.callback=t||null,this}mode(t){let s=!1,e=this.colors;if(t!==this.cn){switch(this.cn=t,t){case"def":i.cursor(),this.scroll.style.background=e.button,this.bottom.style.background=e.background,this.bottom.style.color=e.text;break;case"scrollOver":i.cursor("ns-resize"),this.scroll.style.background=e.select;break;case"scrollDown":this.scroll.style.background=e.select;break;case"bottomOver":i.cursor("pointer"),this.bottom.style.background=e.backgroundOver,this.bottom.style.color=e.textOver}s=!0}return s}clearTarget(){return-1!==this.current&&(this.proto.s&&(this.proto.uiout(),this.proto.reset()),this.proto=null,this.current=-1,i.cursor(),!0)}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";this.isReset=!1;let i="",e=this.isScroll?this.zone.w-this.size.s:this.zone.w;return i=s.y>this.zone.h-this.bh&&s.ye?"scroll":"content",i}handleEvent(t){let s=t.type,e=!1,h=!1,o=this.testZone(t);if("mouseup"===s&&this.isDown&&(this.isDown=!1),"mousedown"!==s||this.isDown||(this.isDown=!0),this.isDown&&this.isNewTarget&&(i.clearInput(),this.isNewTarget=!1),o){switch(o){case"content":t.clientY=this.isScroll?t.clientY+this.decal:t.clientY,i.isMobile&&"mousedown"===s&&this.getNext(t,e),this.proto&&(h=this.proto.handleEvent(t)),"mousemove"===s&&(e=this.mode("def")),"wheel"===s&&!h&&this.isScroll&&(e=this.onWheel(t)),i.lock||this.getNext(t,e);break;case"bottom":this.clearTarget(),"mousemove"===s&&(e=this.mode("bottomOver")),"mousedown"===s&&(this.isOpen=!this.isOpen,this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.calc(),this.mode("def"),e=!0);break;case"scroll":this.clearTarget(),"mousemove"===s&&(e=this.mode("scrollOver")),"mousedown"===s&&(e=this.mode("scrollDown")),"wheel"===s&&(e=this.onWheel(t)),this.isDown&&this.update(t.clientY-this.zone.y-.5*this.sh)}this.isDown&&(e=!0),h&&(e=!0),"keyup"===s&&(e=!0),"keydown"===s&&(e=!0),e&&this.draw()}}getNext(t,s){let e=i.findTarget(this.uis,t);e!==this.current&&(this.clearTarget(),this.current=e,this.isNewTarget=!0),-1!==e&&(this.proto=this.uis[this.current],this.proto.uiover())}onWheel(t){return this.oy+=20*t.delta,this.update(this.oy),!0}reset(t){if(this.isReset)return;this.mouse.neg(),this.isDown=!1;let s=this.mode("def"),i=this.clearTarget();(s||i)&&this.draw(!0),this.isReset=!0}add(){let t=arguments,s=!1;"object"==typeof t[1]?(t[1].isUI=!0,t[1].main=this,s=!!t[1].ontop&&t[1].ontop):"string"==typeof t[1]&&(void 0===t[2]?[].push.call(t,{isUI:!0,main:this}):(t[2].isUI=!0,t[2].main=this,s=!!t[2].ontop&&t[2].ontop));let i=T.apply(this,t);if(null!==i)return s?this.uis.unshift(i):this.uis.push(i),this.calc(),this.isEmpty=!1,i}remove(t){t.dispose&&t.dispose()}clearOne(t){let s=this.uis.indexOf(t);-1!==s&&(this.inner.removeChild(this.uis[s].c[0]),this.uis.splice(s,1),this.calc())}empty(){let t,s=this.uis.length;for(;s--;)t=this.uis.pop(),this.inner.removeChild(t.c[0]),t.dispose();this.uis=[],this.isEmpty=!0,this.calc()}clear(){this.empty()}clear2(){setTimeout(this.empty.bind(this),0)}dispose(){this.clear(),null!==this.parent&&this.parent.removeChild(this.content),i.remove(this)}resetItem(){if(!this.isItemMode)return;let t=this.uis.length;for(;t--;)this.uis[t].selected()}setItem(t){if(!this.isItemMode)return;if(t=t||"",this.resetItem(),!t)return void this.update(0);let s=this.uis.length;for(;s--;)this.uis[s].value===t&&(this.uis[s].selected(!0),this.isScroll&&this.update(s*(this.uis[s].h+this.margin)*this.ratio))}upScroll(t){this.sw=t?this.size.s:0,this.oy=t?this.oy:0,this.scrollBG.style.display=t?"block":"none",t&&(this.total=this.h,this.maxView=this.maxHeight,this.ratio=this.maxView/this.total,this.sh=this.maxView*this.ratio,this.range=this.maxView-this.sh,this.oy=h.clamp(this.oy,0,this.range),this.scrollBG.style.height=this.maxView+"px",this.scroll.style.height=this.sh+"px"),this.setItemWidth(this.zone.w-this.sw),this.update(this.oy)}update(t){t=h.clamp(t,0,this.range),this.decal=Math.floor(t/this.ratio),this.inner.style.top=-this.decal+"px",this.scroll.style.top=Math.floor(t)+"px",this.oy=t}calcUis(){return i.calcUis(this.uis,this.zone,this.zone.y)}calc(){clearTimeout(this.tmp),this.tmp=setTimeout(this.setHeight.bind(this),10)}setHeight(){if(this.tmp&&clearTimeout(this.tmp),this.zone.h=this.bh,this.isScroll=!1,this.isOpen){this.h=this.calcUis();let t=this.forceHeight?this.forceHeight+this.zone.y:window.innerHeight;this.maxHeight=t-this.zone.y-this.bh,this.h-this.maxHeight>1?(this.isScroll=!0,this.zone.h=this.maxHeight+this.bh):this.zone.h=this.h+this.bh}this.upScroll(this.isScroll),this.innerContent.style.height=this.zone.h-this.bh+"px",this.content.style.height=this.zone.h+"px",this.bottom.style.top=this.zone.h-this.bh+"px",this.forceHeight&&this.lockHeight&&(this.content.style.height=this.forceHeight+"px"),this.isCanvas&&this.draw(!0)}rezone(){i.needReZone=!0}setWidth(t){t&&(this.zone.w=t),this.zone.w=Math.floor(this.zone.w),this.content.style.width=this.zone.w+"px",this.isCenter&&(this.content.style.marginLeft=-Math.floor(.5*this.zone.w)+"px"),this.setItemWidth(this.zone.w-this.sw)}setItemWidth(t){let s=this.uis.length;for(;s--;)this.uis[s].setSize(t),this.uis[s].rSize()}}export{o as Files,D as Gui,t as REVISION,h as Tools,T as add}; +const t="4.3.0",s={ui:[],dom:null,ID:null,lock:!1,wlock:!1,current:-1,needReZone:!0,needResize:!1,forceZone:!1,isEventsInit:!1,isLeave:!1,addDOMEventListeners:!0,downTime:0,prevTime:0,prevDefault:["contextmenu"],pointerEvent:["pointerdown","pointermove","pointerup"],eventOut:["pointercancel","pointerout","pointerleave"],xmlserializer:null,tmpTime:null,tmpImage:null,oldCursor:"auto",input:null,parent:null,firstImput:!0,hiddenImput:null,hiddenSizer:null,hasFocus:!1,startInput:!1,inputRange:[0,0],cursorId:0,str:"",pos:0,startX:-1,moveX:-1,debugInput:!1,isLoop:!1,listens:[],e:{type:null,clientX:0,clientY:0,keyCode:NaN,key:null,delta:0},isMobile:!1,now:null,getTime:function(){return self.performance&&self.performance.now?self.performance.now.bind(performance):Date.now},add:function(t){s.ui.push(t),s.getZone(t),s.isEventsInit||s.initEvents()},testMobile:function(){let t=navigator.userAgent;return!!(t.match(/Android/i)||t.match(/webOS/i)||t.match(/iPhone/i)||t.match(/iPad/i)||t.match(/iPod/i)||t.match(/BlackBerry/i)||t.match(/Windows Phone/i))},remove:function(t){let i=s.ui.indexOf(t);-1!==i&&(s.removeListen(t),s.ui.splice(i,1)),0===s.ui.length&&s.removeEvents()},initEvents:function(){if(s.isEventsInit)return;let t=document.body;s.isMobile=s.testMobile(),s.now=s.getTime(),s.isMobile?t.style.touchAction="none":t.addEventListener("wheel",s,{passive:!1}),console.log("R.addDOMEventListeners "+s.addDOMEventListeners),s.addDOMEventListeners&&(t.addEventListener("pointercancel",s),t.addEventListener("pointerleave",s),t.addEventListener("pointermove",s),t.addEventListener("pointerdown",s),t.addEventListener("pointerup",s),t.addEventListener("keydown",s,!1),t.addEventListener("keyup",s,!1)),window.addEventListener("resize",s.resize,!1),s.isEventsInit=!0,s.dom=t},removeEvents:function(){if(!s.isEventsInit)return;let t=document.body;s.isMobile||t.removeEventListener("wheel",s),s.addDOMEventListeners&&(t.removeEventListener("pointercancel",s),t.removeEventListener("pointerleave",s),t.removeEventListener("pointermove",s),t.removeEventListener("pointerdown",s),t.removeEventListener("pointerup",s),t.removeEventListener("keydown",s),t.removeEventListener("keyup",s)),window.removeEventListener("resize",s.resize),s.isEventsInit=!1},resize:function(){let t,i=s.ui.length;for(;i--;)t=s.ui[i],t.isGui&&!t.isCanvasOnly&&t.autoResize&&t.calc();s.needReZone=!0,s.needResize=!1},out:function(){console.log("im am out"),s.clearOldID()},in:function(){console.log("im am in")},fakeUp:function(){this.handleEvent({type:"pointerup"})},handleEvent:function(t){-1!==s.prevDefault.indexOf(t.type)&&t.preventDefault(),s.needResize&&s.resize(),s.findZone(s.forceZone);let i=s.e,e=!1;"keydown"===t.type&&s.keydown(t),"keyup"===t.type&&s.keyup(t),"wheel"===t.type?i.delta=t.deltaY>0?1:-1:i.delta=0;let h=t.pointerType;if(i.clientX=("touch"===h?t.pageX:t.clientX)||0,i.clientY=("touch"===h?t.pageY:t.clientY)||0,i.type=t.type,-1!==s.eventOut.indexOf(t.type)&&(e=!0,i.type="mouseup"),"pointerleave"===t.type&&(s.isLeave=!0),"pointerdown"===t.type&&(i.type="mousedown"),"pointerup"===t.type&&(i.type="mouseup"),"pointermove"===t.type&&(s.isLeave&&(s.isLeave=!1,s.resize()),i.type="mousemove"),"mousedown"===i.type){if(s.downTime=s.now(),s.downTime-s.prevTime<200)return s.selectAll(),!1;s.prevTime=s.downTime,s.forceZone=!1}"mousedown"===i.type&&s.clearInput(),"mousedown"===i.type&&(s.lock=!0),"mouseup"===i.type&&(s.lock=!1),s.isMobile&&"mousedown"===i.type&&s.findID(i),"mousemove"!==i.type||s.lock||s.findID(i),null!==s.ID&&(s.ID.isCanvasOnly&&(i.clientX=s.ID.mouse.x,i.clientY=s.ID.mouse.y),s.ID.handleEvent(i)),s.isMobile&&"mouseup"===i.type&&s.clearOldID(),e&&s.clearOldID()},findID:function(t){let i,e,h,o=s.ui.length,n=-1;for(;o--;)if(i=s.ui[o],i.isCanvasOnly?(e=i.mouse.x,h=i.mouse.y):(e=t.clientX,h=t.clientY),s.onZone(i,e,h)){n=o,n!==s.current&&(s.clearOldID(),s.current=n,s.ID=i);break}-1===n&&s.clearOldID()},clearOldID:function(){s.ID&&(s.current=-1,s.ID.reset(),s.ID=null,s.cursor())},calcUis:(t,i,e,h=!1)=>{let o,n,r,l=t.length,a=0,c=0,d=0;for(;l--;)o=t[c],c++,!h&&o.isGroup&&o.calcUis(),r=o.margin,o.zone.w=o.w,o.zone.h=o.h+r,o.autoWidth?(a=0,o.zone.x=i.x+o.dx,o.zone.y=e,e+=o.h+r,d+=o.h+r):(0===a&&(d+=o.h+r),o.zone.x=i.x+a,o.zone.y=e,n=s.getWidth(o),n?o.zone.w=o.w=n:o.fw&&(o.zone.w=o.w=o.fw),a+=o.zone.w,a>=i.w&&(e+=o.h+r,a=0));return d},findTarget:function(t,i){let e=t.length;for(;e--;)if(s.onZone(t[e],i.clientX,i.clientY))return e;return-1},findZone:function(t){if(s.needReZone||t){for(var i,e=s.ui.length;e--;)i=s.ui[e],s.getZone(i),i.isGui&&i.calcUis();s.needReZone=!1}},onZone:function(t,s,i){if(void 0===s||void 0===i)return!1;let e=t.zone,h=s-e.x,o=i-e.y,n=h>=0&&o>=0&&h<=e.w&&o<=e.h;return n?t.local.set(h,o):t.local.neg(),n},getWidth:function(t){return t.getDom().clientWidth},getZone:function(t){if(t.isCanvasOnly)return;let s=t.getDom().getBoundingClientRect();t.zone={x:s.left,y:s.top,w:s.width,h:s.height}},cursor:function(t){(t=t||"auto")!==s.oldCursor&&(document.body.style.cursor=t,s.oldCursor=t)},toCanvas:function(t,i,e,h){if(s.xmlserializer||(s.xmlserializer=new XMLSerializer),h&&null!==s.tmpTime&&(clearTimeout(s.tmpTime),s.tmpTime=null),null!==s.tmpTime)return;s.lock&&(s.tmpTime=setTimeout((function(){s.tmpTime=null}),10));let o=!1;i===t.canvas.width&&e===t.canvas.height||(o=!0),null===s.tmpImage&&(s.tmpImage=new Image);let n=s.tmpImage,r=s.xmlserializer.serializeToString(t.content),l=''+r+"";n.onload=function(){let s=t.canvas.getContext("2d");o?(t.canvas.width=i,t.canvas.height=e):s.clearRect(0,0,i,e),s.drawImage(this,0,0),t.onDraw()},n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(l),n.crossOrigin=""},setHidden:function(){null===s.hiddenImput&&(s.hiddenImput=document.createElement("input"),s.hiddenImput.type="text",s.hiddenSizer=document.createElement("div"),document.body.appendChild(s.hiddenImput),document.body.appendChild(s.hiddenSizer));let t=s.debugInput?"":"opacity:0; zIndex:0;",i=s.parent.css.txtselect+"padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;"+t;s.hiddenImput.style.cssText=i+"bottom:10px;"+(s.debugInput?"":"transform:scale(0);"),s.hiddenSizer.style.cssText=i+"bottom:40px;",s.hiddenImput.style.width=s.input.clientWidth+"px",s.hiddenImput.value=s.str,s.hiddenSizer.innerHTML=s.str,s.hasFocus=!0},clearHidden:function(t){null!==s.hiddenImput&&(s.hasFocus=!1)},clickPos:function(t){let i=s.str.length,e=0,h=0;for(;i--&&(e+=s.textWidth(s.str[h]),!(e>=t));)h++;return h},upInput:function(t,i){if(null===s.parent)return!1;let e=!1;if(i){let i=s.clickPos(t);if(s.moveX=i,-1===s.startX)s.startX=i,s.cursorId=i,s.inputRange=[s.startX,s.startX];else{s.moveX!==s.startX&&(s.startX>s.moveX?s.inputRange=[s.moveX,s.startX]:s.inputRange=[s.startX,s.moveX])}e=!0}else-1!==s.startX&&(s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.startX=-1,e=!0);return e&&s.selectParent(),e},selectAll:function(){s.parent&&(s.str=s.input.textContent,s.inputRange=[0,s.str.length],s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.cursorId=s.inputRange[1],s.selectParent())},selectParent:function(){var t=s.textWidth(s.str.substring(0,s.cursorId)),i=s.textWidth(s.str.substring(0,s.inputRange[0])),e=s.textWidth(s.str.substring(s.inputRange[0],s.inputRange[1]));s.parent.select(t,i,e,s.hiddenSizer.innerHTML)},textWidth:function(t){return null===s.hiddenSizer?0:(t=t.replace(/ /g," "),s.hiddenSizer.innerHTML=t,s.hiddenSizer.clientWidth)},clearInput:function(){null!==s.parent&&(s.firstImput||s.parent.validate(!0),s.clearHidden(),s.parent.unselect(),s.input.style.background=s.parent.colors.back,s.input.style.borderColor=s.parent.colors.border,s.parent.isEdit=!1,s.input=null,s.parent=null,s.str="",s.firstImput=!0)},setInput:function(t,i){s.clearInput(),s.input=t,s.parent=i,s.input.style.background=s.parent.colors.backoff,s.input.style.borderColor=s.parent.colors.select,s.str=s.input.textContent,s.setHidden()},keydown:function(t){if(null===s.parent)return;let i=t.which;t.shiftKey,s.firstImput=!1,s.hasFocus&&(window.focus(),s.hiddenImput.focus()),s.parent.isEdit=!0,13===i?s.clearInput():s.input.isNum?t.keyCode>47&&t.keyCode<58||t.keyCode>95&&t.keyCode<106||190===t.keyCode||110===t.keyCode||8===t.keyCode||109===t.keyCode?s.hiddenImput.readOnly=!1:s.hiddenImput.readOnly=!0:s.hiddenImput.readOnly=!1},keyup:function(t){null!==s.parent&&(s.str=s.hiddenImput.value,s.parent.allEqual?s.parent.sameStr(s.str):s.input.textContent=s.str,s.cursorId=s.hiddenImput.selectionStart,s.inputRange=[s.hiddenImput.selectionStart,s.hiddenImput.selectionEnd],s.selectParent(),s.parent.validate())},loop:function(){s.isLoop&&requestAnimationFrame(s.loop),s.update()},update:function(){let t=s.listens.length;for(;t--;)s.listens[t].listening()},removeListen:function(t){let i=s.listens.indexOf(t);-1!==i&&s.listens.splice(i,1),0===s.listens.length&&(s.isLoop=!1)},addListen:function(t){return-1===s.listens.indexOf(t)&&(s.listens.push(t),s.isLoop||(s.isLoop=!0,s.loop()),!0)}},i=s,e={transition:.2,frag:document.createDocumentFragment(),colorRing:null,joystick_0:null,joystick_1:null,circular:null,knob:null,pad2d:null,svgns:"http://www.w3.org/2000/svg",links:"http://www.w3.org/1999/xlink",htmls:"http://www.w3.org/1999/xhtml",DOM_SIZE:["height","width","top","left","bottom","right","margin-left","margin-right","margin-top","margin-bottom"],SVG_TYPE_D:["pattern","defs","transform","stop","animate","radialGradient","linearGradient","animateMotion","use","filter","feColorMatrix"],SVG_TYPE_G:["svg","rect","circle","path","polygon","text","g","line","foreignObject"],PI:Math.PI,TwoPI:2*Math.PI,pi90:.5*Math.PI,pi60:Math.PI/3,torad:Math.PI/180,todeg:180/Math.PI,clamp:(t,s,i)=>t=(t=ti?i:t,isDivid:t=>.5*t===Math.floor(.5*t),size:{w:240,h:20,p:30,s:8},defineColor:(t,s=e.colors)=>{let i={...s},h=["fontFamily","fontWeight","fontShadow","fontSize"],o=!1;t.font&&(t.fontFamily=t.font),t.shadow&&(t.fontShadow=t.shadow),t.weight&&(t.fontWeight=t.weight),t.fontColor&&(t.text=t.fontColor),t.color&&(t.text=t.color),t.text&&(i.text=t.text,t.fontColor||t.color||(i.title=e.ColorLuma(t.text,-.25),i.titleoff=e.ColorLuma(t.text,-.5)),i.textOver=e.ColorLuma(t.text,.25),i.textSelect=e.ColorLuma(t.text,.5)),t.button&&(i.button=t.button,i.border=e.ColorLuma(t.button,.1),i.overoff=e.ColorLuma(t.button,.2)),t.select&&(i.select=t.select,i.over=e.ColorLuma(t.select,-.1)),t.itemBg&&(t.back=t.itemBg),t.back&&(i.back=t.back,i.backoff=e.ColorLuma(t.back,-.1)),t.fontSelect&&(i.textSelect=t.fontSelect),t.groupBorder&&(i.gborder=t.groupBorder),t.bgOver&&(i.backgroundOver=t.bgOver);for(let s in i)void 0!==t[s]&&(i[s]=t[s]);for(let s in t)-1!==h.indexOf(s)&&(o=!0);return o&&e.defineText(i),i},colors:{sx:4,sy:2,radius:2,showOver:1,content:"none",background:"rgba(50,50,50,0.15)",backgroundOver:"rgba(50,50,50,0.3)",title:"#CCC",titleoff:"#BBB",text:"#DDD",textOver:"#EEE",textSelect:"#FFF",back:"rgba(0,0,0,0.2)",backoff:"rgba(0,0,0,0.3)",border:"#4c4c4c",borderSize:1,gborder:"none",groups:"none",button:"#3c3c3c",overoff:"#5c5c5c",over:"#024699",select:"#308AFF",action:"#FF3300",fontFamily:"Consolas, monospace",fontWeight:"normal",fontShadow:"none",fontSize:12,joyOver:"rgba(48,138,255,0.25)",joyOut:"rgba(100,100,100,0.5)",joySelect:"#308AFF",hide:"rgba(0,0,0,0)"},css:{basic:"position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; -o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;",button:"display:flex; align-items:center; justify-content:center; text-align:center;",middle:"display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;"},svgs:{g1:"M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z",g2:"M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z",group:"M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z",arrow:"M 3 8 L 8 5 3 2 3 8 Z",arrowDown:"M 5 8 L 8 3 2 3 5 8 Z",arrowUp:"M 5 2 L 2 7 8 7 5 2 Z",solid:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z",body:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z",vehicle:"M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z",articulation:"M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z",character:"M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z",terrain:"M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z",joint:"M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z",ray:"M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z",collision:"M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z",map:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",material:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",texture:"M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z",object:"M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z",none:"M 9 5 L 5 5 5 9 9 9 9 5 Z",cursor:"M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z",load:"M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z",save:"M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z",extern:"M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z"},rezone(){i.needReZone=!0},getImput:function(){return!!i.input},setStyle:function(t){for(var s in t)e.colors[s]&&(e.colors[s]=t[s]);e.setText()},defineText:function(t){e.setText(t.fontSize,t.text,t.fontFamily,t.fontShadow,t.fontWeight)},setText:function(t,s,i,h,o){let n=e.colors;void 0===i&&(i=n.fontFamily),void 0===t&&(t=n.fontSize),void 0===h&&(h=n.fontShadow),void 0===o&&(o=n.fontWeight),void 0===s&&(s=n.text),isNaN(t)?-1===t.search("em")&&(t+="px"):t+="px",e.css.txt=e.css.basic+e.css.middle+" font-family:"+i+"; font-weight:"+o+"; font-size:"+t+"; color:"+n.text+"; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;","none"!==h&&(e.css.txt+=" text-shadow: 1px 1px 1px "+h+";"),e.css.txtselect=e.css.txt+"padding:0px 4px; border:1px dashed "+n.border+";",e.css.item=e.css.txt+"padding:0px 4px; position:relative; margin-bottom:1px; "},cloneCss:function(){return{...e.css}},clone:function(t){return t.cloneNode(!0)},setSvg:function(t,s,i,e,h){-1===e?t.setAttributeNS(null,s,i):void 0!==h?t.childNodes[e||0].childNodes[h||0].setAttributeNS(null,s,i):t.childNodes[e||0].setAttributeNS(null,s,i)},setCss:function(t,s){for(let i in s)-1!==e.DOM_SIZE.indexOf(i)?t.style[i]=s[i]+"px":t.style[i]=s[i]},set:function(t,s){for(let i in s)"txt"===i&&(t.textContent=s[i]),"link"===i?t.setAttributeNS(e.links,"xlink:href",s[i]):t.setAttributeNS(null,i,s[i])},get:function(t,s){if(void 0===s)return t;if(!isNaN(s))return t.childNodes[s];if(s instanceof Array){if(2===s.length)return t.childNodes[s[0]].childNodes[s[1]];if(3===s.length)return t.childNodes[s[0]].childNodes[s[1]].childNodes[s[2]]}},dom:function(t,s,i,h,o){return t=t||"div",-1!==e.SVG_TYPE_D.indexOf(t)||-1!==e.SVG_TYPE_G.indexOf(t)?"svg"===t?(h=document.createElementNS(e.svgns,"svg"),e.set(h,i)):(void 0===h&&(h=document.createElementNS(e.svgns,"svg")),e.addAttributes(h,t,i,o)):h=void 0===h?document.createElementNS(e.htmls,t):h.appendChild(document.createElementNS(e.htmls,t)),s&&(h.style.cssText=s),void 0===o?h:h.childNodes[o||0]},addAttributes:function(t,s,i,h){let o=document.createElementNS(e.svgns,s);return e.set(o,i),e.get(t,h).appendChild(o),-1!==e.SVG_TYPE_G.indexOf(s)&&(o.style.pointerEvents="none"),o},clear:function(t){for(e.purge(t);t.firstChild;)t.firstChild.firstChild&&e.clear(t.firstChild),t.removeChild(t.firstChild)},purge:function(t){let s,i,h=t.attributes;if(h)for(s=h.length;s--;)i=h[s].name,"function"==typeof t[i]&&(t[i]=null);if(h=t.childNodes,h)for(s=h.length;s--;)e.purge(t.childNodes[s])},addSVGGlowEffect:function(){if(null!==document.getElementById("UILGlow"))return;let t=e.initUILEffects(),s=e.addAttributes(t,"filter",{id:"UILGlow",x:"-20%",y:"-20%",width:"140%",height:"140%"});e.addAttributes(s,"feGaussianBlur",{in:"SourceGraphic",stdDeviation:"3",result:"uilBlur"});let i=e.addAttributes(s,"feMerge",{});for(let t=0;t<=3;t++)e.addAttributes(i,"feMergeNode",{in:"uilBlur"});e.addAttributes(i,"feMergeNode",{in:"SourceGraphic"})},initUILEffects:function(){let t=document.getElementById("UILSVGEffects");return null===t&&(t=e.dom("svg",void 0,{id:"UILSVGEffects",width:"0",height:"0"}),document.body.appendChild(t)),t},ColorLuma:function(t,s){"n"===t&&(t="#000"),(t=String(t).replace(/[^0-9a-f]/gi,"")).length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),s=s||0;let i,e,h="#";for(e=0;e<3;e++)i=parseInt(t.substr(2*e,2),16),i=Math.round(Math.min(Math.max(0,i+i*s),255)).toString(16),h+=("00"+i).substr(i.length);return h},findDeepInver:function(t){return.3*t[0]+.59*t[1]+.11*t[2]<=.6},lerpColor:function(t,s,i){let e={};for(let h=0;h<3;h++)e[h]=t[h]+(s[h]-t[h])*i;return e},hexToHtml:function(t){return"#"+("000000"+(t=void 0===t?0:t).toString(16)).substr(-6)},htmlToHex:function(t){return t.toUpperCase().replace("#","0x")},u255:function(t,s){return parseInt(t.substring(s,s+2),16)/255},u16:function(t,s){return parseInt(t.substring(s,s+1),16)/15},unpack:function(t){return 7==t.length?[e.u255(t,1),e.u255(t,3),e.u255(t,5)]:4==t.length?[e.u16(t,1),e.u16(t,2),e.u16(t,3)]:void 0},p255:function(t){let s=Math.round(255*t).toString(16);return s.length<2&&(s="0"+s),s},pack:function(t){return"#"+e.p255(t[0])+e.p255(t[1])+e.p255(t[2])},htmlRgb:function(t){return"rgb("+Math.round(255*t[0])+","+Math.round(255*t[1])+","+Math.round(255*t[2])+")"},pad:function(t){return 1==t.length&&(t="0"+t),t},rgbToHex:function(t){let s=Math.round(255*t[0]).toString(16),i=Math.round(255*t[1]).toString(16),h=Math.round(255*t[2]).toString(16);return"#"+e.pad(s)+e.pad(i)+e.pad(h)},hueToRgb:function(t,s,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(s-t)*i:i<.5?s:i<2/3?t+6*(s-t)*(2/3-i):t},rgbToHsl:function(t){let s=t[0],i=t[1],e=t[2],h=Math.min(s,i,e),o=Math.max(s,i,e),n=o-h,r=0,l=0,a=(h+o)/2;return a>0&&a<1&&(l=n/(a<.5?2*a:2-2*a)),n>0&&(o==s&&o!=i&&(r+=(i-e)/n),o==i&&o!=e&&(r+=2+(e-s)/n),o==e&&o!=s&&(r+=4+(s-i)/n),r/=6),[r,l,a]},hslToRgb:function(t){let s,i,h=t[0],o=t[1],n=t[2];return 0===o?[n,n,n]:(i=n<=.5?n*(o+1):n+o-n*o,s=2*n-i,[e.hueToRgb(s,i,h+.33333),e.hueToRgb(s,i,h),e.hueToRgb(s,i,h-.33333)])},makeGradiant:function(t,s,i,h){e.dom(t,null,s,i,0);let o,n=i.childNodes[0].childNodes.length-1;for(let t=0;t0){for(a=6;a--;)r[a]=(113*r[a]+u).toFixed(2);c=" M"+r[0]+" "+r[1]+" Q"+r[2]+" "+r[3]+" "+r[4]+" "+r[5],d=[[0,g[0],1],[100,g[1],1]],e.makeGradiant("linearGradient",{id:"G"+l,x1:r[0],y1:r[1],x2:r[4],y2:r[5],gradientUnits:"userSpaceOnUse"},s,d),e.dom("path","",{d:c,"stroke-width":30,stroke:"url(#G"+l+")","stroke-linecap":"butt"},s,1)}m=n-p,g[0]=g[1]}d=[[0,"#FFFFFF",1],[50,"#FFFFFF",0],[50,"#000000",0],[100,"#000000",1]],e.makeGradiant("linearGradient",{id:"GL0",x1:0,y1:u-84.9,x2:0,y2:212.9,gradientUnits:"userSpaceOnUse"},s,d),d=[[0,"#7f7f7f",1],[50,"#7f7f7f",.5],[100,"#7f7f7f",0]],e.makeGradiant("linearGradient",{id:"GL1",x1:78.95,y1:0,x2:226,y2:0,gradientUnits:"userSpaceOnUse"},s,d),e.dom("g",null,{"transform-origin":"128px 128px",transform:"rotate(0)"},s),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"red"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL1)","stroke-width":1,stroke:"url(#GL1)"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL0)","stroke-width":1,stroke:"url(#GL0)"},s,2),e.dom("path","",{d:"M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z",fill:"none","stroke-width":2,stroke:"#000"},s,2),e.dom("circle","",{cx:128,cy:128,r:6,"stroke-width":2,stroke:"#000",fill:"none"},s),e.colorRing=s},icon:function(t,s,i){i=i||40;let h=[""];switch(t){case"logo":h[1]="";break;case"donate":h[1]="";break;case"neo":h[1]="";break;case"phy":h[1]="";break;case"config":h[1]="";break;case"github":h[1]="";break;case"save":h[1]=""}return h[2]="",h.join("\n")},logoFill_d:"\n M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 \n L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 \n M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 \n Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z\n ",logo_github:"\n M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 \n 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 \n 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 \n 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 \n 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z\n ",logo_neo:"\n M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 \n 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 \n 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 \n 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L \n 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z\n ",logo_phy:"\n M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 \n Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95\n ",logo_config:"\n M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 \n L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 \n Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75\n ",logo_donate:"\n M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 \n 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 \n 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 \n 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 \n 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 \n Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 \n 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 \n 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 \n 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M \n 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 \n 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 \n 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 \n 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 \n 200.9 187.5 200.9 187.5 195.35 Z\n "};e.setText();const h=e;class o{static autoTypes(t){let s=[];switch(t){case"svg":s=[{accept:{"image/svg+xml":".svg"}}];break;case"wav":s=[{accept:{"audio/wav":".wav"}}];break;case"mp3":s=[{accept:{"audio/mpeg":".mp3"}}];break;case"mp4":s=[{accept:{"video/mp4":".mp4"}}];break;case"bin":case"hex":s=[{description:"Binary Files",accept:{"application/octet-stream":[".bin",".hex"]}}];break;case"text":s=[{description:"Text Files",accept:{"text/plain":[".txt",".text"],"text/html":[".html",".htm"]}}];break;case"json":s=[{description:"JSON Files",accept:{"application/json":[".json"]}}];break;case"js":s=[{description:"JavaScript Files",accept:{"text/javascript":[".js"]}}];break;case"image":s=[{description:"Images",accept:{"image/*":[".png",".gif",".jpeg",".jpg"]}}];break;case"icon":s=[{description:"Icons",accept:{"image/x-ico":[".ico"]}}];break;case"lut":s=[{description:"Lut",accept:{"text/plain":[".cube",".3dl"]}}]}return s}static async load(t={}){"function"!=typeof window.showOpenFilePicker&&(window.showOpenFilePicker=o.showOpenFilePickerPolyfill);try{let s=t.type||"";const i={excludeAcceptAllOption:!!s,multiple:!1};i.types=o.autoTypes(s);const e=await window.showOpenFilePicker(i),h=await e[0].getFile();if(!h)return null;let n=h.name,r=n.substring(n.lastIndexOf(".")+1,n.length);const l=["png","jpg","jpeg","mp4","webm","ogg","mp3"],a=["sea","z","hex","bvh","BVH","glb","gltf"],c=new FileReader;-1!==l.indexOf(r)?c.readAsDataURL(h):-1!==a.indexOf(r)?c.readAsArrayBuffer(h):c.readAsText(h),c.onload=function(i){let e=i.target.result;switch(s){case"image":let s=new Image;s.onload=function(){t.callback&&t.callback(s,n,r)},s.src=e;break;case"json":t.callback&&t.callback(JSON.parse(e),n,r);break;default:t.callback&&t.callback(e,n,r)}}}catch(s){console.log(s),t.always&&t.callback&&t.callback(null)}}static showOpenFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("input");i.type="file",i.multiple=t.multiple,i.accept=t.types.map((t=>t.accept)).flatMap((t=>Object.keys(t).flatMap((s=>t[s])))).join(","),i.addEventListener("change",(()=>{s([...i.files].map((t=>({getFile:async()=>new Promise((s=>{s(t)}))}))))})),i.click()}))}static async save(t={}){let s=!1;"function"!=typeof window.showSaveFilePicker&&(window.showSaveFilePicker=o.showSaveFilePickerPolyfill,s=!0);try{let i=t.type||"";const e={suggestedName:t.name||"hello",data:t.data||""};e.types=o.autoTypes(i),e.finalType=Object.keys(e.types[0].accept)[0],e.suggestedName+=e.types[0].accept[e.finalType][0];const h=await window.showSaveFilePicker(e);if(s)return;const n=await h.createWritable();let r=new Blob([e.data],{type:e.finalType});await n.write(r),await n.close()}catch(t){console.log(t)}}static showSaveFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("a");i.download=t.suggestedName||"my-file.txt";let e=new Blob([t.data],{type:t.finalType});i.href=URL.createObjectURL(e),i.addEventListener("click",(()=>{s(setTimeout((()=>URL.revokeObjectURL(i.href)),1e3))})),i.click()}))}static async getFolder(){try{const t=await window.showDirectoryPicker(),s=[];for await(const i of t.values()){const t=await i.getFile();s.push(t)}return console.log(s),s}catch(t){console.log(t)}}}class n{constructor(t=0,s=0){this.x=t,this.y=s}set(t,s){return this.x=t,this.y=s,this}divide(t){return this.x/=t.x,this.y/=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divideScalar(t){return this.multiplyScalar(1/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}angle(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t}addScalar(t){return this.x+=t,this.y+=t,this}negate(){return this.x*=-1,this.y*=-1,this}neg(){return this.x=-1,this.y=-1,this}isZero(){return 0===this.x&&0===this.y}copy(t){return this.x=t.x,this.y=t.y,this}equals(t){return t.x===this.x&&t.y===this.y}nearEquals(t,s){return t.x.toFixed(s)===this.x.toFixed(s)&&t.y.toFixed(s)===this.y.toFixed(s)}lerp(t,s){return null===t?(this.x-=this.x*s,this.y-=this.y*s):(this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s),this}}class r{constructor(t={}){this.lock=t.lock||!1,this.neverlock=!1,this.isSpace=t.isSpace||!1,this.main=t.main||null,this.isUI=t.isUI||!1,this.group=t.group||null,this.isListen=!1,this.top=0,this.ytop=0,this.dx=t.dx||0,this.isSelectable=void 0!==t.selectable&&t.selectable,this.unselectable=void 0!==t.unselect?t.unselect:this.isSelectable,this.ontop=!!t.ontop&&t.ontop,this.css=this.main?this.main.css:h.css,this.colors=h.defineColor(t,this.main?this.group?this.group.colors:this.main.colors:h.colors),this.overEffect=this.colors.showOver,this.svgs=h.svgs,this.zone={x:0,y:0,w:0,h:0,d:0},this.local=(new n).neg(),this.isCanvasOnly=!1,this.isSelect=!1,this.p=void 0!==t.p?t.p:h.size.p,this.w=this.isUI?this.main.size.w:h.size.w,void 0!==t.w&&(this.w=t.w),this.h=this.isUI?this.main.size.h:h.size.h,void 0!==t.h&&(this.h=t.h),this.isSpace?this.lock=!0:this.h=this.h<11?11:this.h,this.fw=t.fw||0,this.autoWidth=t.auto||!0,this.isOpen=!1,this.radius=t.radius||this.colors.radius,this.transition=t.transition||h.transition,this.isNumber=!1,this.noNeg=t.noNeg||!1,this.allEqual=t.allEqual||!1,this.mono=!1,this.isEdit=!1,this.simple=t.simple||!1,this.simple&&(this.sa=0),this.setSize(this.w),void 0!==t.sa&&(this.sa=t.sa),void 0!==t.sb&&(this.sb=t.sb),this.simple&&(this.sb=this.w-this.sa),this.sc=void 0===t.sc?47:t.sc,this.objectLink=null,this.isSend=!1,this.objectKey=null,this.txt=t.name||"",this.name=t.rename||this.txt,this.target=t.target||null,this.callback=void 0===t.callback?null:t.callback,this.endCallback=null,this.openCallback=void 0===t.openCallback?null:t.openCallback,this.closeCallback=void 0===t.closeCallback?null:t.closeCallback,null===this.callback&&this.isUI&&null!==this.main.callback&&(this.callback=this.group?this.group.callback:this.main.callback),this.c=[],this.s=[],this.useFlex=!!this.isUI&&this.main.useFlex;let s=this.useFlex?"display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;":"float:left;";this.c[0]=h.dom("div",this.css.basic+s+"position:relative; height:20px;"),this.s[0]=this.c[0].style,this.margin=this.colors.sy,this.mtop=0;let i=h.isDivid(this.margin);if(this.isUI&&this.margin&&(this.s[0].boxSizing="content-box",i?(this.mtop=.5*this.margin,this.s[0].borderTop=this.mtop+"px solid transparent",this.s[0].borderBottom=this.mtop+"px solid transparent"):this.s[0].borderBottom=this.margin+"px solid transparent"),this.simple||(this.c[1]=h.dom("div",this.css.txt+this.css.middle),this.s[1]=this.c[1].style,this.c[1].textContent=this.name,this.s[1].color=this.lock?this.colors.titleoff:this.colors.title),t.pos){this.s[0].position="absolute";for(let s in t.pos)this.s[0][s]=t.pos[s];this.mono=!0}t.css&&(this.s[0].cssText=t.css)}init(){this.ytop=this.top+this.mtop,this.zone.h=this.h+this.margin,this.zone.w=this.w;let t=this.s,s=this.c;t[0].height=this.h+"px",this.isUI&&(t[0].background=this.colors.background),!this.autoWidth&&this.useFlex?(t[0].flex="1 0 auto",t[0].minWidth=this.minw+"px",t[0].textAlign="center"):this.isUI&&(t[0].width="100%"),void 0!==s[1]&&this.autoWidth&&(t[1]=s[1].style,t[1].top="1px",t[1].height=this.h-2+"px");let e=h.frag;for(let i=1,h=s.length;i!==h;i++)void 0!==s[i]&&(e.appendChild(s[i]),t[i]=s[i].style);let o=null!==this.target?this.target:this.isUI?this.main.inner:document.body;this.ontop?o.insertAdjacentElement("afterbegin",s[0]):o.appendChild(s[0]),s[0].appendChild(e),this.rSize(),this.isUI||(this.c[0].style.pointerEvents="auto",i.add(this))}addTransition(){this.baseH&&this.transition&&this.isUI&&(this.c[0].style.transition="height "+this.transition+"s ease-out")}dom(t,s,i,e,o){return h.dom(t,s,i,e,o)}setSvg(t,s,i,e,o){h.setSvg(t,s,i,e,o)}setCss(t,s){h.setCss(t,s)}clamp(t,s,i){return h.clamp(t,s,i)}getColorRing(){return h.colorRing||h.makeColorRing(),h.clone(h.colorRing)}getJoystick(t){return h["joystick_"+t]||h.makeJoystick(t),h.clone(h["joystick_"+t])}getCircular(t){return h.circular||h.makeCircular(t),h.clone(h.circular)}getKnob(t){return h.knob||h.makeKnob(t),h.clone(h.knob)}getPad2d(t){return h.pad2d||h.makePad(t),h.clone(h.pad2d)}cursor(t){i.cursor(t)}update(){}reset(){}content(){return this.c[0]}getDom(){return this.c[0]}uiout(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.background)}uiover(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.backgroundOver)}rename(t){void 0!==this.c[1]&&(this.c[1].textContent=t)}listen(){return this.isListen=i.addListen(this),this}listening(){null!==this.objectLink&&(this.isSend||this.isEdit||this.setValue(this.objectLink[this.objectKey]))}setValue(t){this.isNumber?this.value=this.numValue(t):this.value=t,this.update()}onChange(t){if(!this.isSpace)return this.callback=t||null,this}onFinishChange(t){if(!this.isSpace)return this.callback=null,this.endCallback=t,this}onOpen(t){return this.openCallback=t,this}onClose(t){return this.closeCallback=t,this}send(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.isSend=!0,null!==this.objectLink&&(this.objectLink[this.objectKey]=t),this.callback&&this.callback(t,this.objectKey),this.isSend=!1}sendEnd(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.endCallback&&this.endCallback(t),null!==this.objectLink&&(this.objectLink[this.objectKey]=t)}dispose(){this.isListen&&i.removeListen(this),h.clear(this.c[0]),null!==this.target?null!==this.group?this.group.clearOne(this):this.target.removeChild(this.c[0]):this.isUI?this.main.clearOne(this):document.body.removeChild(this.c[0]),this.isUI||i.remove(this),this.c=null,this.s=null,this.callback=null,this.target=null,this.isListen=!1}clear(){}getWidth(){let t=i.getWidth(this);t&&(this.w=t)}setSize(t){if(this.autoWidth)if(this.w=t,this.simple)this.sb=this.w-this.sa;else{let t=this.w*(this.p/100);this.sa=Math.floor(t+8),this.sb=Math.floor(this.w-t-16)}}rSize(){this.autoWidth&&(this.isUI||(this.s[0].width=this.w+"px"),this.simple||(this.s[1].width=this.sa+"px"))}setTypeNumber(t){let s;switch(this.isNumber=!0,this.value=0,void 0!==t.value&&("string"==typeof t.value?this.value=1*t.value:this.value=t.value),this.min=void 0===t.min?-1/0:t.min,this.max=void 0===t.max?1/0:t.max,this.precision=void 0===t.precision?2:t.precision,this.precision){case 0:s=1;break;case 1:s=.1;break;case 2:s=.01;break;case 3:s=.001;break;case 4:s=1e-4;break;case 5:s=1e-5;break;case 6:s=1e-6}this.step=void 0===t.step?s:t.step,this.range=this.max-this.min,this.value=this.numValue(this.value)}numValue(t){return this.noNeg&&(t=Math.abs(t)),1*Math.min(this.max,Math.max(this.min,t)).toFixed(this.precision)}handleEvent(t){if(!this.lock)return this.neverlock&&(i.lock=!1),this[t.type]?this[t.type](t):console.error(t.type,"this type of event no existe !")}wheel(t){return!1}mousedown(t){return!1}mousemove(t){return!1}mouseup(t){return!1}keydown(t){return!1}keyup(t){return!1}setReferency(t,s){this.objectLink=t,this.objectKey=s}display(t=!1){this.s[0].visibility=t?"visible":"hidden"}open(){this.isOpen||(this.isOpen=!0,i.needResize=!0,this.openCallback&&this.openCallback())}close(){this.isOpen&&(this.isOpen=!1,i.needResize=!0,this.closeCallback&&this.closeCallback())}needZone(){i.needReZone=!0}rezone(){i.needReZone=!0}select(){}unselect(){}setInput(t){i.setInput(t,this)}upInput(t,s){return i.upInput(t,s)}selected(t){this.isSelect=t||!1}}class l extends r{constructor(t={}){super(t),this.value=t.value||!1,this.model=void 0!==t.mode?t.mode:0,this.onName=t.rename||this.txt,t.onName&&(t.onname=t.onName),t.onname&&(this.onName=t.onname),this.inh=t.inh||Math.floor(.8*this.h),this.inw=t.inw||36;let s=this.colors;if(0===this.model){let t=Math.floor(.5*this.h)-.5*(this.inh-2);this.c[2]=this.dom("div",this.css.basic+"background:"+s.inputBg+"; height:"+(this.inh-2)+"px; width:"+this.inw+"px; top:"+t+"px; border-radius:10px; border:2px solid "+s.back),this.c[3]=this.dom("div",this.css.basic+"height:"+(this.inh-6)+"px; width:16px; top:"+(t+2)+"px; border-radius:10px; background:"+s.button+";")}else this.p=0,void 0!==this.c[1]&&(this.c[1].textContent=""),this.c[2]=this.dom("div",this.css.txt+this.css.button+"top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.borderSize+"px solid "+s.border+"; border-radius:"+this.radius+"px;");this.stat=-1,this.init(),this.update()}mousedown(t){return this.value=!this.value,this.update(!0),this.mousemove(t)}mousemove(t){return this.cursor("pointer"),this.mode(!0)}reset(){return this.cursor(),this.mode()}mode(t){let s,i=!1,e=this.colors,h=this.s,o=this.value;if(s=t?o?4:3:o?2:1,this.stat!==s){if(this.stat=s,0!==this.model){switch(s){case 1:h[2].color=e.text,h[2].background=e.button;break;case 2:h[2].color=e.textSelect,h[2].background=e.select;break;case 3:h[2].color=e.textOver,h[2].background=e.overoff;break;case 4:h[2].color=e.textOver,h[2].background=e.over}this.c[2].innerHTML=o?this.onName:this.name}else{switch(s){case 1:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.button;break;case 2:h[2].background=h[2].borderColor=e.back,h[3].background=e.textOver;break;case 3:h[2].background=h[2].borderColor=e.back,h[3].background=e.overoff;break;case 4:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.textSelect}h[3].marginLeft=o?"17px":"2px",this.c[1].textContent=o?this.onName:this.name}i=!0}return i}update(t){this.mode(),t&&this.send()}rSize(){super.rSize();let t=this.s,s=this.w-10-this.inw;0===this.model?(t[2].left=s+"px",t[3].left=s+"px"):(t[2].left=this.sa+"px",t[2].width=this.sb+"px")}}class a extends r{constructor(t={}){super(t),this.value="",void 0!==t.value&&(this.value=t.value),this.values=t.value||this.txt,t.values&&(this.values=t.values),t.values||t.value||(this.txt=""),this.onName=t.onName||null,this.on=!1,this.bw=t.forceWidth||0,t.bw&&(this.bw=t.bw),this.space=t.space||3,"string"==typeof this.values&&(this.values=[this.values]),this.isDown=!1,this.neverlock=!0,this.res=0,this.lng=this.values.length,this.tmp=[],this.stat=[];let s,i=this.colors;for(let t=0;te[i][0]&&s.x0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.text,this.setSvg(this.c[3],"stroke",s,1);break;case 1:this.s[2].color=i.textOver,this.setSvg(this.c[3],"stroke",i.backoff,0),s=this.model>0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.textOver,this.setSvg(this.c[3],"stroke",s,1)}return this.cmode=t,!0}reset(){this.isDown=!1}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"circular"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;if(s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=s.angle()-this.pi90,this.r=(this.r%this.twoPi+this.twoPi)%this.twoPi,null!==this.oldr){let t=this.r-this.oldr;this.r=Math.abs(t)>Math.PI?this.oldr:this.r,t>6&&(this.r=0),t<-6&&(this.r=this.twoPi)}let i=1/this.twoPi,e=this.r*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=~~(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("circular"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:sMath.PI?1:0)+" 1 "+i+","+e}update(t){if(this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range,this.setSvg(this.c[3],"d",this.makePath(),1),this.model>0){let t=this.colors,s=h.pack(h.lerpColor(h.unpack(h.ColorLuma(t.text,-.75)),h.unpack(t.text),this.percent));this.setSvg(this.c[3],"stroke",s,1)}t&&this.send()}}class d extends r{constructor(t={}){super(t),this.ctype=t.ctype||"hex",this.wfixe=256,this.cw=this.sb>256?256:this.sb,null!=t.cw&&(this.cw=t.cw),this.side=t.side||"down",this.up="down"===this.side?0:1,this.baseH=this.h,this.offset=new n,this.decal=new n,this.pp=new n;let s=this.colors;this.c[2]=this.dom("div",`${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${s.borderSize}px solid ${s.border};`),this.c[0].style.display="block",this.c[3]=this.getColorRing(),this.c[3].style.visibility="hidden",this.hsl=null,this.value="#ffffff",void 0!==t.value&&(t.value instanceof Array?this.value=h.rgbToHex(t.value):isNaN(t.value)?this.value=t.value:this.value=h.hexToHtml(t.value)),this.bcolor=null,this.isDown=!1,this.fistDown=!1,this.notext=t.notext||!1,this.tr=98,this.tsl=Math.sqrt(3)*this.tr,this.hue=0,this.d=256,this.init(),this.setColor(this.value),void 0!==t.open&&this.open()}testZone(t,s){let i=this.local;return-1===i.x&&-1===i.y?"":this.up&&this.isOpen?i.y>this.wfixe?"title":"color":i.ythis.tr)e=(c+u.pi90)/u.TwoPI,this.hue=(e+1)%1,this.setHSL([(e+1)%1,this.hsl[1],this.hsl[2]]);else{l=s.x*this.ratio,a=s.y*this.ratio;let t=this.hue*u.TwoPI+u.PI;t<0&&(t+=2*u.PI),r=Math.atan2(-a,l),r<0&&(r+=2*u.PI);let i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,h=.5*this.tr,c=Math.tan(e)*h,d=Math.sqrt(l*l+a*a),p=Math.sqrt(h*h+c*c);if(d>p){let s=Math.tan(e)*d,o=Math.atan(s/p);o>u.pi60?o=u.pi60:o<-u.pi60&&(o=-u.pi60),r+=o-e,i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,c=Math.tan(e)*h,d=p=Math.sqrt(h*h+c*c)}n=Math.sin(i)*d/this.tsl+.5;let m=1-2*Math.abs(n-.5);o=(Math.cos(i)*d+this.tr/2)/(1.5*this.tr)/m,o=u.clamp(o,0,1),this.setHSL([this.hsl[0],o,n])}}setHeight(){this.h=this.isOpen?this.wfixe+this.baseH+5:this.baseH,this.s[0].height=this.h+"px",this.zone.h=this.h}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(){super.open(),this.setHeight(),this.up&&(this.zone.y-=this.wfixe+5);let t=this.h-this.baseH;this.s[3].visibility="visible",this.parentHeight(t)}close(){super.close(),this.up&&(this.zone.y+=this.wfixe+5);let t=this.h-this.baseH;this.setHeight(),this.s[3].visibility="hidden",this.parentHeight(-t)}update(t){let s=h.rgbToHex(h.hslToRgb([this.hsl[0],1,.5]));this.moveMarkers(),this.value=this.bcolor,this.setSvg(this.c[3],"fill",s,2,0),this.s[2].background=this.bcolor,this.notext||(this.c[2].textContent=h.htmlToHex(this.bcolor)),this.invert=h.findDeepInver(this.rgb),this.s[2].color=this.invert?"#fff":"#000",t&&("array"===this.ctype&&this.send(this.rgb),"rgb"===this.ctype&&this.send(h.htmlRgb(this.rgb)),"hex"===this.ctype&&this.send(h.htmlToHex(this.value)),"html"===this.ctype&&this.send())}setValue(t){t instanceof Array?this.value=h.rgbToHex(t):isNaN(t)?this.value=t:this.value=h.hexToHtml(t),this.setColor(this.value),this.update()}setColor(t){let s=h.unpack(t);return this.bcolor!==t&&s&&(this.bcolor=t,this.rgb=s,this.hsl=h.rgbToHsl(this.rgb),this.hue=this.hsl[0],this.update()),this}setHSL(t){return this.hsl=t,this.rgb=h.hslToRgb(t),this.bcolor=h.rgbToHex(this.rgb),this.update(!0),this}moveMarkers(){let t=this.pp,s=h;this.invert;let i=this.hsl[0]*s.TwoPI,e=2/3*s.PI,o=this.tr,n=this.hsl[0],r=this.hsl[1],l=this.hsl[2],a=(i-s.pi90)*s.todeg;n=-i+s.pi90;let c=Math.cos(n)*o,d=-Math.sin(n)*o,u=Math.cos(n-e)*o,p=-Math.sin(n-e)*o,m=Math.cos(n+e)*o,g=-Math.sin(n+e)*o,x=(u+m)/2,v=(p+g)/2;i=(1-2*Math.abs(l-.5))*r;let b=u+(m-u)*l+(c-x)*i,f=p+(g-p)*l+(d-v)*i;t.set(b,f).addScalar(128),this.setSvg(this.c[3],"transform","rotate("+a+" )",2),this.setSvg(this.c[3],"cx",t.x,3),this.setSvg(this.c[3],"cy",t.y,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",2,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",3),this.setSvg(this.c[3],"fill",this.bcolor,3)}rSize(){super.rSize();let t=this.s;t[2].width=this.sb+"px",t[2].left=this.sa+"px",this.cw=this.sb>256?256:this.sb,this.rSizeColor(this.cw),this.decal.x=Math.floor(.5*(this.w-this.wfixe))}rSizeColor(t){if(t===this.wfixe)return;this.wfixe=t;let s=this.s;this.decal.y="up"===this.side?2:this.baseH+2,this.mid=Math.floor(.5*this.wfixe),this.setSvg(this.c[3],"viewBox","0 0 "+this.wfixe+" "+this.wfixe),s[3].width=this.wfixe+"px",s[3].height=this.wfixe+"px",s[3].top=this.decal.y+"px",this.ratio=256/this.wfixe,this.square=1/(this.wfixe/256*60),this.setHeight()}}class u extends r{constructor(t={}){super(t),this.round=Math.round,this.baseH=this.h,this.hplus=t.hplus||50,this.res=t.res||40,this.l=1,this.precision=t.precision||0,this.custom=t.custom||!1,this.names=t.names||["FPS","MS"];let s=t.cc||["220,220,220","255,255,0"];this.adding=t.adding||!1,this.range=t.range||[165,100,100],this.alpha=t.alpha||.25,this.values=[],this.points=[],this.textDisplay=[],this.custom||(this.now=i.getTime(),this.startTime=0,this.prevTime=0,this.frames=0,this.ms=0,this.fps=0,this.mem=0,this.mm=0,this.isMem=!(!self.performance||!self.performance.memory),this.isMem&&(this.names.push("MEM"),s.push("0,255,255")),this.txt=t.name||"Fps");let e=Math.floor(.5*this.h)-3;const h=this.colors;this.c[1].textContent=this.txt,this.c[0].style.cursor="pointer",this.c[0].style.pointerEvents="auto";let o="display:none; left:10px; top:"+this.h+"px; height:"+(this.hplus-8)+"px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid "+h.border+";";0!==this.radius&&(o+="border-radius:"+this.radius+"px;"),this.c[2]=this.dom("path",this.css.basic+o,{}),this.c[2].setAttribute("viewBox","0 0 "+this.res+" 50"),this.c[2].setAttribute("height","100%"),this.c[2].setAttribute("width","100%"),this.c[2].setAttribute("preserveAspectRatio","none"),this.c[3]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; left:0; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.c[4]=this.dom("div",this.css.txt+"position:absolute; left:10px; top:"+(this.h+2)+"px; display:none; width:100%; text-align:center;"),t.bottomLine&&(this.c[4]=this.dom("div",this.css.basic+"width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);")),this.isShow=!1;let n=this.s;n[1].lineHeight=this.h-4,n[1].color=h.text,0!==this.radius&&(n[0].borderRadius=this.radius+"px"),"none"!==this.colors.gborder&&(n[0].border="1px solid "+h.gborder);let r=0;for(r=0;r "+this.names[r]+" ")}for(r=this.names.length;r--;)this.dom("path",null,{fill:"rgba("+s[r]+","+this.alpha+")","stroke-width":1,stroke:"rgba("+s[r]+",1)","vector-effect":"non-scaling-stroke"},this.c[2]);this.init()}mousedown(t){this.isShow?this.close():this.open()}tick(t){this.values=t,this.isShow&&(this.drawGraph(),this.upText())}makePath(t){let s="";s+="M -1 50";for(let i=0;i";this.c[4].innerHTML=i}drawGraph(){let t,s=this.c[2],i=this.names.length,e=0,h=0;for(;i--;)t=this.adding?(this.values[h]+e)*this.range[h]:this.values[h]*this.range[h],this.points[h].shift(),this.points[h].push(50-t),this.setSvg(s,"d",this.makePath(this.points[h]),i+1),e+=this.values[h],h++}open(){super.open(),this.h=this.hplus+this.baseH,this.setSvg(this.c[3],"d",this.svgs.g2),null!==this.group?this.group.calc(this.hplus):this.isUI&&this.main.calc(this.hplus),this.s[0].height=this.h+"px",this.s[2].display="block",this.s[4].display="block",this.isShow=!0,this.custom||i.addListen(this)}close(){super.close(),this.h=this.baseH,this.setSvg(this.c[3],"d",this.svgs.g1),null!==this.group?this.group.calc(-this.hplus):this.isUI&&this.main.calc(-this.hplus),this.s[0].height=this.h+"px",this.s[2].display="none",this.s[4].display="none",this.isShow=!1,this.custom||i.removeListen(this),this.c[4].innerHTML=""}begin(){this.startTime=this.now()}end(){let t=this.now();if(this.ms=t-this.startTime,this.frames++,t>this.prevTime+1e3&&(this.fps=this.round(1e3*this.frames/(t-this.prevTime)),this.prevTime=t,this.frames=0,this.isMem)){let t=performance.memory.usedJSHeapSize,s=performance.memory.jsHeapSizeLimit;this.mem=this.round(954e-9*t),this.mm=t/s}return this.values=[this.fps,this.ms,this.mm],this.drawGraph(),this.upText([this.fps,this.ms,this.mem]),t}listening(){this.custom||(this.startTime=this.end())}rSize(){let t=this.s,s=this.w;t[3].left=this.sa+this.sb-6+"px",t[0].width=s+"px",t[1].width=s+"px",t[2].left="10px",t[2].width=s-20+"px",t[4].width=s-20+"px"}}class p extends r{constructor(t={}){super(t),this.value=void 0!==t.value?t.value:[0,0,0],this.lng=this.value.length,this.precision=void 0!==t.precision?t.precision:2,this.multiplicator=t.multiplicator||1,this.neg=t.neg||!1,this.line=void 0===t.line||t.line,this.autoWidth=void 0===t.autoWidth||t.autoWidth,this.isNumber=!1,this.isDown=!1,this.h=t.h||138,this.rh=this.h-10,this.top=0,this.c[0].style.width=this.w+"px",void 0!==this.c[1]&&(this.c[1].style.width=this.w+"px",this.autoWidth||(this.c[1].style.width="100%",this.c[1].style.justifyContent="center"),this.top=10,this.h+=10),this.gh=this.rh-28,this.gw=this.w-28,this.c[2]=this.dom("div",this.css.txt+"display:block; text-align:center; padding:0px 0px; top:"+(this.h-20)+"px; left:14px; width:"+this.gw+"px; color:"+this.colors.text),this.c[2].innerHTML=this.valueToHtml();let s=this.dom("svg",this.css.basic,{viewBox:"0 0 "+this.w+" "+this.rh,width:this.w,height:this.rh,preserveAspectRatio:"none"});this.setCss(s,{width:this.w,height:this.rh,left:0,top:this.top}),this.dom("path","",{d:"",stroke:this.colors.text,"stroke-width":2,fill:"none","stroke-linecap":"butt"},s),this.dom("rect","",{x:10,y:10,width:this.gw+8,height:this.gh+8,stroke:"rgba(0,0,0,0.3)","stroke-width":1,fill:"none"},s),this.iw=(this.gw-4*(this.lng-1))/this.lng;let i=[];this.cMode=[],this.v=[];for(let t=0;t',e="width:"+100/this.lng+"%;";for(;t--;)s===this.lng-1?i+=""+this.value[s]+"":i+=""+this.value[s]+"",s++;return i}updateSVG(){this.line&&this.setSvg(this.c[3],"d",this.makePath(),0);for(let t=0;tthis.top&&s.ye[i][0]&&s.xthis.distance){let t=Math.atan2(this.tmp.x,this.tmp.y);this.tmp.x=Math.sin(t)*this.distance,this.tmp.y=Math.cos(t)*this.distance}this.pos.copy(this.tmp).divideScalar(this.distance).negate(),this.update()}setValue(t){void 0===t&&(t=[0,0]),this.pos.set(t[0]||0,t[1]||0),this.updateSVG()}update(t){void 0===t&&(t=!0),null!==this.interval&&(this.isDown||(this.pos.lerp(null,.3),this.pos.x=Math.abs(this.pos.x)<.01?0:this.pos.x,this.pos.y=Math.abs(this.pos.y)<.01?0:this.pos.y,this.isUI&&this.main.isCanvas&&this.main.draw())),this.updateSVG(),t&&this.send(),this.pos.isZero()&&this.stopInterval()}updateSVG(){let t=.5*this.diam- -this.pos.x*this.distance,s=.5*this.diam- -this.pos.y*this.distance;if(0===this.model){let i=t+5*this.pos.x+5,e=s+5*this.pos.y+10;this.setSvg(this.c[3],"cx",i*this.ratio,3),this.setSvg(this.c[3],"cy",e*this.ratio,3)}else this.setSvg(this.c[3],"cx",t*this.ratio,3),this.setSvg(this.c[3],"cy",s*this.ratio,3);this.setSvg(this.c[3],"cx",t*this.ratio,4),this.setSvg(this.c[3],"cy",s*this.ratio,4),this.value[0]=1*(this.pos.x*this.multiplicator).toFixed(this.precision),this.value[1]=1*(this.pos.y*this.multiplicator).toFixed(this.precision),this.haveText&&(this.c[2].textContent=this.value)}clear(){this.stopInterval(),super.clear()}}class v extends r{constructor(t={}){super(t),this.isCyclic=t.cyclic||!1,this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.autoWidth=!1,this.setTypeNumber(t),this.minw=this.w,this.diam=t.diam||this.w,this.mPI=.8*Math.PI,this.toDeg=180/Math.PI,this.cirRange=2*this.mPI,this.offset=new n,this.h=t.h||this.w+10,this.c[0].style.width=this.w+"px",this.c[0].style.display="block",void 0!==this.c[1]&&(this.c[1].style.width="100%",this.c[1].style.justifyContent="center",this.top=10,this.h+=10),this.percent=0,this.cmode=0;let s=this.colors;this.c[2]=this.dom("div",this.css.txt+"justify-content:center; top:"+(this.h-20)+"px; width:100%; color:"+s.text),this.c[3]=this.getKnob(),this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1),this.setSvg(this.c[3],"stroke",s.text,3),this.setSvg(this.c[3],"d",this.makeGrad(),3),this.setSvg(this.c[3],"viewBox","0 0 "+this.diam+" "+this.diam),this.setCss(this.c[3],{width:this.diam,height:this.diam,left:0,top:this.top}),this.model>0&&(h.dom("path","",{d:"",stroke:s.text,"stroke-width":2,fill:"none","stroke-linecap":"round"},this.c[3]),2==this.model&&(h.addSVGGlowEffect(),this.setSvg(this.c[3],"style",'filter: url("#UILGlow");',4))),this.r=0,this.init(),this.update()}mode(t){let s=this.colors;if(this.cmode===t)return!1;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1);break;case 1:this.s[2].color=s.textOver,this.setSvg(this.c[3],"fill",s.select,0),this.setSvg(this.c[3],"stroke",s.textOver,1)}return this.cmode=t,!0}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"knob"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=-Math.atan2(s.x,s.y),null!==this.oldr&&(this.r=Math.abs(this.r-this.oldr)>Math.PI?this.oldr:this.r),this.r=this.r>this.mPI?this.mPI:this.r,this.r=this.r<-this.mPI?-this.mPI:this.r;let i=1/this.cirRange,e=(this.r+this.mPI)*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=Math.floor(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("knob"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s5?(s=this.range/this.step,t=(a-c)/s):(t=(a-c)/l*2,s=32);for(let c=0;c<=s;++c)i=a-t*c,e=l+44*Math.sin(i),h=l+44*Math.cos(i),o=l+40*Math.sin(i),n=l+40*Math.cos(i),r+="M"+e+" "+h+" L"+o+" "+n+" ";return r}update(t){this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range;let s=Math.PI+this.mPI,i=this.percent*this.cirRange-this.mPI,e=Math.sin(i),o=Math.cos(i),n=25*e+64,r=-25*o+64,l=20*e+64,a=-20*o+64;if(this.setSvg(this.c[3],"d","M "+n+" "+r+" L "+l+" "+a,1),this.model>0){let t=36*Math.sin(s)+64,n=36*Math.cos(s)+64,r=36*e+64,l=-36*o+64,a=i<=Math.PI-this.mPI?0:1;this.setSvg(this.c[3],"d","M "+t+","+n+" A 36,36 1 "+a+" 1 "+r+","+l,4);let c=h.pack(h.lerpColor(h.unpack(h.ColorLuma(this.colors.text,-.75)),h.unpack(this.colors.text),this.percent));this.setSvg(this.c[3],"stroke",c,4)}t&&this.send()}}class b extends r{constructor(t={}){super(t),this.hideCurrent=!1,this.path=t.path||"",this.format=t.format||"",this.isWithImage=""!==this.path,this.preLoadComplete=!1,this.tmpImage={},this.tmpUrl=[],this.m=void 0!==t.m?t.m:5;let s=t.align||"left",i=t.scrollSize||10;this.ss=i+1,this.sMode=0,this.tMode=0,this.listOnly=t.listOnly||!1,this.staticTop=t.staticTop||!1,this.isSelectable=this.listOnly,void 0!==t.select&&(t.selectable=t.select),void 0!==t.selectable&&(this.isSelectable=t.selectable),""===this.txt&&(this.p=0);let e=Math.floor(.5*this.h)-3,h=this.colors;if(this.c[2]=this.dom("div",this.css.basic+"top:0; display:none; border-radius:"+this.radius+"px;"),this.c[3]=this.dom("div",this.css.item+"padding:0px "+this.m+"px; margin-bottom:0px; position:absolute; justify-content:"+s+"; text-align:"+s+"; line-height:"+(this.h-4)+"px; top:1px; background:"+h.button+"; height:"+(this.h-2)+"px; border:1px solid "+h.border+"; border-radius:"+this.radius+"px;"),this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.scrollerBack=this.dom("div",this.css.basic+"right:0px; width:"+i+"px; background:"+h.back+"; display:none;"),this.scroller=this.dom("div",this.css.basic+"right:"+.5*(i-.25*i)+"px; width:"+.25*i+"px; background:"+h.text+"; display:none; "),this.c[3].style.color=h.text,this.list=[],this.refObject=null,t.list)if(t.list instanceof Array)this.list=t.list;else if(t.list instanceof Object){this.refObject=t.list;for(let t in this.refObject)this.list.push(t)}this.items=[],this.prevName="",this.tmpId=0,this.baseH=this.h,this.itemHeight=t.itemHeight||this.h,this.full=t.full||!1,this.py=0,this.ww=this.sb,this.scroll=!1,this.isDown=!1,this.current=null,this.side=t.side||"down",this.up="down"===this.side?0:1,this.up?(this.c[2].style.top="auto",this.c[3].style.top="auto",this.c[4].style.top="auto",this.c[2].style.bottom=this.h-2+"px",this.c[3].style.bottom="1px",this.c[4].style.bottom=e+"px"):this.c[2].style.top=this.baseH+"px",this.listIn=this.dom("div",this.css.basic+"left:0; top:0; width:100%; background:none;"),this.listIn.name="list",this.topList=0,this.c[2].appendChild(this.listIn),this.c[2].appendChild(this.scrollerBack),this.c[2].appendChild(this.scroller),void 0!==t.value?isNaN(t.value)?this.value=t.value:this.value=this.list[t.value]:this.value=this.list[0],this.isOpenOnStart=t.open||!1,this.listOnly&&(this.baseH=5,this.c[3].style.display="none",this.c[4].style.display="none",this.c[2].style.top=this.baseH+"px",this.isOpenOnStart=!0),this.miniCanvas=t.miniCanvas||!1,this.canvasBg=t.canvasBg||"rgba(0,0,0,0)",this.imageSize=t.imageSize||[20,20],this.drag=t.drag||!1,this.dragout=t.dragout||!1,this.dragstart=t.dragstart||null,this.dragend=t.dragend||null,this.setList(this.list),this.init(),this.isWithImage&&this.preloadImage(),this.isOpenOnStart&&this.open(!0),this.baseH+=this.mtop}preloadImage(){this.preLoadComplete=!1,this.tmpImage={};for(let t=0;tthis.h-this.baseH)return"title";if(this.scroll&&s.x>this.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}else{if(s.ythis.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}}return""}testItems(t){let s,i,e,h="",o=this.items,n=o.length;for(;n--;)if(s=o[n],i=s.posy+this.topList,e=s.posy+this.itemHeight+1+this.topList,t>=i&&t<=e)return h="item"+n,this.modeItem(0),this.current=s,this.modeItem(1),h;return h}modeItem(t){if(!this.current)return;this.current.select&&0===t&&(t=2);let s=this.colors;switch(t){case 0:this.current.style.background=s.back,this.current.style.color=s.text;break;case 1:this.current.style.background=s.over,this.current.style.color=s.textOver;break;case 2:this.current.style.background=s.select,this.current.style.color=s.textSelect}}unSelected(){this.current&&(this.modeItem(0),this.current=null)}selected(){this.current&&(this.resetItems(),this.modeItem(2),this.current.select=!0)}resetItems(){let t=this.items.length;for(;t--;)this.items[t].select=!1,this.items[t].style.background=this.colors.back,this.items[t].style.color=this.colors.text}hideActive(){this.hideCurrent&&(this.current&&(this.tmpId=this.current.id),this.resetHide())}resetHide(){console.log(this.tmpId);let t=this.items.length;for(;t--;)t===this.tmpId?(this.items[t].style.height="0px",this.items[t].posy=-1):(this.items[t].style.height=this.itemHeight+"px",this.items[t].posy=(this.itemHeight+1)*(t-1))}mouseup(t){this.isDown=!1}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s?(this.isDown=!0,this.mousemove(t)):"title"===s?(this.modeTitle(2),this.listOnly||(this.hideActive(),this.isOpen?this.close():this.open())):this.current&&(this.value=this.list[this.current.id],this.isSelectable&&this.selected(),this.send(this.value),this.listOnly||(this.close(),this.setTopItem())),!0)}mousemove(t){let s=!1,i=this.testZone(t);if(!i)return s;if("title"===i)this.unSelected(),this.modeTitle(1),this.cursor("pointer");else if("scroll"===i){if(this.cursor("s-resize"),this.modeScroll(1),this.isDown){this.modeScroll(2);let s=this.zone.y+this.baseH-2;this.update(t.clientY-s-.5*this.sh)}}else this.modeTitle(0),this.modeScroll(0),this.cursor("pointer");return i!==this.prevName&&(s=!0),this.prevName=i,s}wheel(t){return"title"!==this.testZone(t)&&(this.py+=10*t.delta,this.update(this.py),!0)}reset(){this.prevName="",this.unSelected(),this.modeTitle(0),this.modeScroll(0)}modeScroll(t){if(t===this.sMode)return;let s=this.scroller.style,i=this.colors;switch(t){case 0:s.background=i.text;break;case 1:case 2:s.background=i.select}this.sMode=t}modeTitle(t){if(t===this.tMode)return;let s=this.s,i=this.colors;switch(t){case 0:s[3].color=i.text,s[3].background=i.button;break;case 1:s[3].color=i.textOver,s[3].background=i.overoff;break;case 2:s[3].color=i.textSelect,s[3].background=i.overoff}this.tMode=t}clearList(){for(;this.listIn.children.length;)this.listIn.removeChild(this.listIn.lastChild);this.items=[]}setList(t){this.clearList(),this.list=t,this.length=this.list.length;let s,e,h=this.hideCurrent?this.length-1:this.length;this.maxItem=this.full?h:5,this.maxItem=hthis.maxHeight&&(this.ww=this.sb-this.ss,this.scroll=!0),this.miniCanvas&&(this.tmpCanvas=document.createElement("canvas"),this.tmpCanvas.width=this.imageSize[0],this.tmpCanvas.height=this.imageSize[1],this.tmpCtx=this.tmpCanvas.getContext("2d"),this.tmpCtx.fillStyle=this.canvasBg,this.tmpCtx.fillRect(0,0,this.imageSize[0],this.imageSize[1]));for(let t=0;tthis.range?this.range:t,this.topList=-Math.floor(t/this.ratio),this.listIn.style.top=this.topList+"px",this.scroller.style.top=Math.floor(t)+"px",this.py=t)}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(t){super.open(),this.update(0),this.h=this.maxHeight+this.baseH+5,this.scroll?(this.scroller.style.display="block",this.scrollerBack.style.display="block"):(this.topList=0,this.h=this.baseH+5+this.max,this.scroller.style.display="none",this.scrollerBack.style.display="none"),this.s[0].height=this.h+"px",this.s[2].display="block",this.up?(this.zone.y-=this.h-(this.baseH-10),this.setSvg(this.c[4],"d",this.svgs.g1)):this.setSvg(this.c[4],"d",this.svgs.g2),this.rSizeContent();let s=this.h-this.baseH;this.zone.h=this.h,t||this.parentHeight(s)}close(){super.close(),this.up&&(this.zone.y+=this.h-(this.baseH-10));let t=this.h-this.baseH;this.h=this.baseH,this.s[0].height=this.h+"px",this.s[2].display="none",this.setSvg(this.c[4],"d",this.svgs.g1),this.zone.h=this.h,this.parentHeight(-t)}text(t){this.c[3].textContent=t}rSizeContent(){let t=this.length;for(;t--;)this.listIn.children[t].style.width=this.ww+"px"}rSize(){super.rSize();let t=this.s,s=this.sb,i=this.sa;void 0!==t[2]&&(t[2].width=s+"px",t[2].left=i+"px",t[3].width=s+"px",t[3].left=i+"px",t[4].left=i+s-15+"px",this.ww=s,this.max>this.maxHeight&&(this.ww=s-this.ss),this.isOpen&&this.rSizeContent())}}class f extends r{constructor(t={}){super(t),this.setTypeNumber(t),this.allway=t.allway||!1,this.isDown=!1,this.value=[0],this.multy=1,this.invmulty=1,this.isSingle=!0,this.isAngle=!1,this.isVector=!1,t.isAngle&&(this.isAngle=!0,this.multy=h.torad,this.invmulty=h.todeg),this.isDrag=t.drag||!1,void 0!==t.value&&(isNaN(t.value)?t.value instanceof Array?(this.value=t.value,this.isSingle=!1):t.value instanceof Object&&(this.value=[],void 0!==t.value.x&&(this.value[0]=t.value.x),void 0!==t.value.y&&(this.value[1]=t.value.y),void 0!==t.value.z&&(this.value[2]=t.value.z),void 0!==t.value.w&&(this.value[3]=t.value.w),this.isSingle=!1,this.isVector=!0):this.value=[t.value]),this.lng=this.value.length,this.tmp=[],this.current=-1,this.prev={x:0,y:0,d:0,v:0};let s=this.colors;this.c[2]=this.dom("div",this.css.basic+" background:"+s.select+"; top:4px; width:0px; height:"+(this.h-8)+"px;"),this.cMode=[];let i=this.lng;for(;i--;)this.isAngle&&(this.value[i]=(180*this.value[i]/Math.PI).toFixed(this.precision)),this.c[3+i]=this.dom("div",this.css.txtselect+"top:1px; height:"+(this.h-2)+"px; color:"+s.text+"; background:"+s.back+"; borderColor:"+s.border+"; border-radius:"+this.radius+"px;"),t.center&&(this.c[2+i].style.textAlign="center"),this.c[3+i].textContent=this.value[i],this.c[3+i].style.color=this.colors.text,this.c[3+i].isNum=!0,this.cMode[i]=0;this.selectId=3+this.lng,this.c[this.selectId]=this.dom("div",this.css.txtselect+"position:absolute; top:2px; height:"+(this.h-4)+"px; padding:0px 0px; width:0px; color:"+s.textSelect+"; background:"+s.select+"; border:none; border-radius:0px;"),this.cursorId=4+this.lng,this.c[this.cursorId]=this.dom("div",this.css.basic+"top:2px; height:"+(this.h-4)+"px; width:0px; background:"+s.text+";"),this.init()}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";let i=this.lng,e=this.tmp;for(;i--;)if(s.x>e[i][0]&&s.x=this.txl?"text":s.x>=this.sa?"scroll":""}mouseup(t){this.isDown&&(this.isDown=!1)}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s&&(this.isDown=!0,this.old=this.value,this.mousemove(t)),!0)}mousemove(t){let s=!1;if("scroll"===this.testZone(t)?(this.mode(1),this.cursor("w-resize")):this.cursor(),this.isDown){let i=(t.clientX-(this.zone.x+this.sa)-3)/this.ww*this.range+this.min-this.old;(i>=this.step||i<=this.step)&&(i=Math.floor(i/this.step),this.value=this.numValue(this.old+i*this.step),this.update(!0),this.old=this.value),s=!0}return s}wheel(t){if("scroll"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s=this.sa?"text":""}mouseup(t){if(this.editable)return!!this.isDown&&(this.isDown=!1,this.mousemove(t))}mousedown(t){if(!this.editable)return;let s=this.testZone(t);return!this.isDown&&(this.isDown=!0,"text"===s&&this.setInput(this.c[2]),this.mousemove(t))}mousemove(t){if(!this.editable)return;let s=0;return"text"===this.testZone(t)?this.cursor("text"):this.cursor(),this.isDown&&(s=t.clientX-this.zone.x),this.upInput(s-this.sa-3,this.isDown)}update(){this.c[2].textContent=this.value}reset(){this.cursor()}select(t,s,i,e){let h=this.s,o=this.sa+5;h[4].width="1px",h[4].left=o+s+"px",h[3].left=o+s+"px",h[3].width=i+"px",this.c[3].innerHTML=e}unselect(){let t=this.s;t&&(t[3].width="0px",this.c[3].innerHTML="t",t[4].width="0px")}validate(t){this.allway&&(t=!0),this.value=this.c[2].textContent,""!==this.value?this.c[5].textContent="":this.c[5].textContent=this.placeHolder,t&&this.send()}rSize(){super.rSize();let t=this.s;t[2].left=this.sa+"px",t[2].width=this.sb+"px",t[5].left=this.sa+"px",t[5].width=this.sb+"px"}}class k extends r{constructor(t={}){super(t);let s=t.prefix||"";this.c[2]=this.dom("div",this.css.txt+"justify-content:right; width:60px; line-height:"+(this.h-8)+"px; color:"+this.colors.text),31===this.h&&(this.s[0].height=this.h+"px",this.s[1].top="8px",this.c[2].style.top="8px");let i=this.s;i[1].justifyContent=t.align||"left",i[1].fontWeight=t.fontWeight||"bold",this.c[1].textContent=this.txt.substring(0,1).toUpperCase()+this.txt.substring(1).replace("-"," "),this.c[2].textContent=s,this.init()}text(t){this.c[1].textContent=t}text2(t){this.c[2].textContent=t}rSize(){super.rSize(),this.s[1].width=this.w+"px",this.s[2].left=this.w+"px"}setColor(t){this.s[1].color=t,this.s[2].color=t}}class S extends r{constructor(t={}){super(t),this.value=t.value||"",this.isDown=!1,this.onActif=t.onActif||function(){};const s=this.colors;this.c[2]=this.dom("div",this.css.txt+this.css.button+" top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.buttonBorder+"; border-radius:15px; width:30px; left:10px;"),this.c[3]=this.dom("div",this.css.txtselect+"height:"+(this.h-4)+"px; background:"+s.inputBg+"; borderColor:"+s.inputBorder+"; border-radius:"+this.radius+"px;"),this.c[3].textContent=this.value;let i=Math.floor(.5*this.h)-7;this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:14px; height:14px; left:5px; top:"+i+"px;",{d:this.svgs.cursor,fill:s.text,stroke:"none"}),this.stat=1,this.isActif=!1,this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>this.sa&&s.xthis.sa&&s.xi[r][0]&&s.xe[r][0]&&s.ythis.lng-1&&(h=-1)),h}mouseup(t){return!!this.isDown&&(this.isDown=!1,-1!==this.res&&(this.value=this.values[this.res],this.send()),this.mousemove(t))}mousedown(t){return!this.isDown&&(this.isDown=!0,this.mousemove(t))}mousemove(t){let s=!1;return this.res=this.testZone(t),-1!==this.res?(this.cursor("pointer"),s=this.modes(this.isDown?3:2,this.res)):s=this.reset(),s}modes(t=1,s=-1){let i,e,h=this.lng,o=!1;for(;h--;)e=t,i=!!this.isSelectable&&this.values[h]===this.value,h===s?i&&2===e&&(e=3):(e=1,i&&(e=4)),this.mode(e,h)&&(o=!0);return o}mode(t,s){let i=!1,e=this.colors,h=this.buttons,o=s;if(this.stat[s]!==t){switch(this.stat[s]=t,t){case 1:h[o].style.color=e.text,h[o].style.background=e.button;break;case 2:h[o].style.color=e.textOver,h[o].style.background=e.overoff;break;case 3:h[o].style.color=e.textOver,h[o].style.background=e.over;break;case 4:h[o].style.color=e.textSelect,h[o].style.background=e.select}i=!0}return i}reset(){return this.res=-1,this.cursor(),this.modes()}label(t,s){this.buttons[s].textContent=t}icon(t,s,i){this.buttons[i].style.padding=(s||0)+"px 0px",this.buttons[i].innerHTML=t}testW(){let t=!1;if(3*this.spaces[0]+2*this.bsizeMax>this.w?(this.bsize[0]=.5*(this.w-3*this.spaces[0]),t=!0):this.bsize[0]!==this.bsizeMax&&(this.bsize[0]=this.bsizeMax,t=!0),!t)return;let s=this.buttons.length;for(;s--;)this.buttons[s].style.width=this.bsize[0]+"px"}rSize(){let t;super.rSize(),this.testW(),this.tmpX=[],this.tmpY=[];for(let s=0;sthis.h-this.c[2].offsetHeight?"text":"pad"}mouseup(t){return this.isDown=!1,this.mode(0)}mousedown(t){if("pad"===this.testZone(t))return this.isDown=!0,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=.5*this.w-(t.clientX-this.zone.x),i=.5*this.diam-(t.clientY-this.zone.y-this.ytop),e=256/this.diam;s=-s*e,i=-i*e,s=h.clamp(s,-this.maxPos,this.maxPos),i=h.clamp(i,-this.maxPos,this.maxPos),this.setPos([s,i]),this.update(!0)}mode(t){if(this.cmode===t)return!1;let s=this.colors;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.back,0),this.setSvg(this.c[3],"fill",s.button,1),this.setSvg(this.c[3],"stroke",s.back,2),this.setSvg(this.c[3],"stroke",s.back,3),this.setSvg(this.c[3],"stroke",s.text,4);break;case 1:this.s[2].color=s.textSelect,this.setSvg(this.c[3],"fill",s.backoff,0),this.setSvg(this.c[3],"fill",s.overoff,1),this.setSvg(this.c[3],"stroke",s.backoff,2),this.setSvg(this.c[3],"stroke",s.backoff,3),this.setSvg(this.c[3],"stroke",s.textSelect,4)}return this.cmode=t,!0}update(t){this.c[2].textContent=this.value,this.updateSVG(),t&&this.send()}updateSVG(){1==this.model&&(this.setSvg(this.c[3],"y1",this.pos.y,2),this.setSvg(this.c[3],"y2",this.pos.y,2),this.setSvg(this.c[3],"x1",this.pos.x,3),this.setSvg(this.c[3],"x2",this.pos.x,3)),this.setSvg(this.c[3],"cx",this.pos.x,4),this.setSvg(this.c[3],"cy",this.pos.y,4)}setPos(t){this.pos.set(t[0]+128,t[1]+128);let s=1/this.maxPos;this.value[0]=(t[0]*s*this.range).toFixed(this.precision),this.value[1]=(t[1]*s*this.range).toFixed(this.precision)}setValue(t,s=!1){void 0===t&&(t=this.value),this.value[0]=1*Math.min(this.max,Math.max(this.min,t[0])).toFixed(this.precision),this.value[1]=1*Math.min(this.max,Math.max(this.min,t[1])).toFixed(this.precision),this.pos.set(this.value[0]/this.range*this.maxPos+128,this.value[1]/this.range*this.maxPos+128),this.update(s)}}const T=function(){let t,s,e=arguments,h=!1,o=null;"string"==typeof e[0]?(t=e[0],s=e[1]||{}):"object"==typeof e[0]&&(h=!0,void 0===e[2]&&[].push.call(e,{}),t=e[2].type?e[2].type:O(e[0][e[1]],e[2]),s=e[2],s.name=e[1],s.hasOwnProperty("displayName")&&(s.name=s.displayName),"list"!==t||s.list?s.value=e[0][e[1]]:s.list=e[0][e[1]]);let n=t.toLowerCase();switch("group"===n&&(s.add=T),n){case"bool":case"boolean":o=new l(s);break;case"button":o=new a(s);break;case"circular":o=new c(s);break;case"color":o=new d(s);break;case"fps":o=new u(s);break;case"graph":o=new p(s);break;case"group":o=new g(s);break;case"joystick":o=new x(s);break;case"knob":o=new v(s);break;case"list":o=new b(s);break;case"numeric":case"number":o=new f(s);break;case"slide":o=new w(s);break;case"textInput":case"string":o=new y(s);break;case"title":case"text":o=new k(s);break;case"select":o=new S(s);break;case"bitmap":o=new M(s);break;case"selector":o=new I(s);break;case"empty":case"space":o=new m(s);break;case"item":o=new C(s);break;case"grid":o=new L(s);break;case"pad2d":case"pad":o=new z(s)}if(null!==o)return i.needResize=!0,h&&o.setReferency(e[0],e[1]),o},O=function(t,s){let i="slide";return"boolean"==typeof t?i="bool":"string"==typeof t?i="#"===t.substring(0,1)?"color":"string":"number"==typeof t?i=s.ctype?"color":"slide":"array"==typeof t&&t instanceof Array?"number"==typeof t[0]?i="number":"string"==typeof t[0]&&(i="list"):"object"==typeof t&&t instanceof Object&&(i=void 0!==t.x?"number":"list"),i};class D{constructor(t={}){this.isGui=!0,this.name="gui",this.canvas=null,this.screen=null,this.plane=t.plane||null,t.config&&(t.colors=t.config),t.colors?this.setConfig(t.colors):this.colors=h.defineColor(t),this.css=h.cloneCss(),this.isReset=!0,this.tmpAdd=null,this.isCanvas=t.isCanvas||!1,this.isCanvasOnly=!1,i.addDOMEventListeners=!t.hasOwnProperty("addDOMEventListeners")||t.addDOMEventListeners,this.callback=void 0===t.callback?null:t.callback,this.forceHeight=t.maxHeight||0,this.lockHeight=t.lockHeight||!1,this.isItemMode=void 0!==t.itemMode&&t.itemMode,this.cn="",this.size=h.size,void 0!==t.p&&(this.size.p=t.p),void 0!==t.w&&(this.size.w=t.w),void 0!==t.h&&(this.size.h=t.h),void 0!==t.s&&(this.size.s=t.s),this.size.h=this.size.h<11?11:this.size.h,this.local=(new n).neg(),this.zone={x:0,y:0,w:this.size.w,h:0},this.mouse=(new n).neg(),this.h=0,this.sw=0,this.margin=this.colors.sy,this.marginDiv=h.isDivid(this.margin),this.isWithClose=void 0===t.close||t.close,this.bh=this.isWithClose?this.size.h:0,this.autoResize=void 0===t.autoResize||t.autoResize,this.isCenter=t.center||!1,this.cssGui=void 0!==t.css?t.css:this.isCenter?"":"right:10px;",this.isOpen=void 0===t.open||t.open,this.isDown=!1,this.isScroll=!1,this.uis=[],this.current=-1,this.proto=null,this.isEmpty=!0,this.decal=0,this.ratio=1,this.oy=0,this.isNewTarget=!1;let s=this.colors;this.content=h.dom("div",this.css.basic+" width:0px; height:auto; top:0px; background:"+s.content+"; "+this.cssGui),this.innerContent=h.dom("div",this.css.basic+"width:100%; top:0; left:0; height:auto; overflow:hidden;"),this.content.appendChild(this.innerContent),this.useFlex=!0;let e=this.useFlex?"display:flex; flex-flow: row wrap;":"";this.inner=h.dom("div",this.css.basic+e+"width:100%; left:0; "),this.innerContent.appendChild(this.inner),this.scrollBG=h.dom("div",this.css.basic+"right:0; top:0; width:"+(this.size.s-1)+"px; height:10px; display:none; background:"+s.background+";"),this.content.appendChild(this.scrollBG),this.scroll=h.dom("div",this.css.basic+"background:"+s.button+"; right:2px; top:0; width:"+(this.size.s-4)+"px; height:10px;"),this.scrollBG.appendChild(this.scroll),this.bottomText=t.bottomText||["open","close"];let o=s.radius;this.bottom=h.dom("div",this.css.txt+"width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:"+o+"px; border-bottom-left-radius:"+o+"px; justify-content:center; height:"+this.bh+"px; line-height:"+(this.bh-5)+"px; color:"+s.text+";"),this.content.appendChild(this.bottom),this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.bottom.style.background=s.background,this.parent=void 0!==t.parent?t.parent:null,this.parent=void 0!==t.target?t.target:this.parent,null!==this.parent||this.isCanvas||(this.parent=document.body),null!==this.parent&&this.parent.appendChild(this.content),this.isCanvas&&null===this.parent&&(this.isCanvasOnly=!0),this.isCanvasOnly?(this.content.style.left="0px",this.content.style.right="auto",t.transition=0):this.content.style.pointerEvents="auto",this.transition=void 0!==t.transition?t.transition:h.transition,this.transition&&setTimeout(this.addTransition.bind(this),1e3),this.setWidth(),this.isCanvas&&this.makeCanvas(),i.add(this)}triggerMouseDown(t,s){i.handleEvent({type:"pointerdown",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}triggerMouseMove(){i.handleEvent({type:"pointermove",clientX:-1,clientY:-1,delta:0,key:null,keyCode:NaN})}triggerMouseUp(t,s){i.handleEvent({type:"pointerup",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}setTop(t,s){this.content.style.top=t+"px",void 0!==s&&(this.forceHeight=s),this.calc(),i.needReZone=!0}addTransition(){this.transition&&!this.isCanvas&&(this.innerContent.style.transition="height "+this.transition+"s ease-out",this.content.style.transition="height "+this.transition+"s ease-out",this.bottom.style.transition="top "+this.transition+"s ease-out");let t=this.uis.length;for(;t--;)this.uis[t].addTransition()}onDraw(){}makeCanvas(){this.canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),this.canvas.width=this.zone.w,this.canvas.height=this.forceHeight?this.forceHeight:this.zone.h}draw(t){if(null===this.canvas)return;let s=this.zone.w,e=this.forceHeight?this.forceHeight:this.zone.h;i.toCanvas(this,s,e,t)}getDom(){return this.content}noMouse(){this.mouse.neg()}setMouse(t,s=!0){s?this.mouse.set(Math.round(t.x*this.canvas.width),this.canvas.height-Math.round(t.y*this.canvas.height)):this.mouse.set(Math.round(t.x*this.canvas.width),Math.round(t.y*this.canvas.height))}setConfig(t){h.setText(),this.colors=h.defineColor(t)}setColors(t){for(let s in t)this.colors[s]&&(this.colors[s]=t[s])}setText(t,s,i,e){h.setText(t,s,i,e)}hide(t){this.content.style.visibility=t?"hidden":"visible"}display(t=!1){this.content.style.visibility=t?"visible":"hidden"}onChange(t){return this.callback=t||null,this}mode(t){let s=!1,e=this.colors;if(t!==this.cn){switch(this.cn=t,t){case"def":i.cursor(),this.scroll.style.background=e.button,this.bottom.style.background=e.background,this.bottom.style.color=e.text;break;case"scrollOver":i.cursor("ns-resize"),this.scroll.style.background=e.select;break;case"scrollDown":this.scroll.style.background=e.select;break;case"bottomOver":i.cursor("pointer"),this.bottom.style.background=e.backgroundOver,this.bottom.style.color=e.textOver}s=!0}return s}clearTarget(){return-1!==this.current&&(this.proto.s&&(this.proto.uiout(),this.proto.reset()),this.proto=null,this.current=-1,i.cursor(),!0)}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";this.isReset=!1;let i="",e=this.isScroll?this.zone.w-this.size.s:this.zone.w;return i=s.y>this.zone.h-this.bh&&s.ye?"scroll":"content",i}handleEvent(t){let s=t.type,e=!1,h=!1,o=this.testZone(t);if("mouseup"===s&&this.isDown&&(this.isDown=!1),"mousedown"!==s||this.isDown||(this.isDown=!0),this.isDown&&this.isNewTarget&&(i.clearInput(),this.isNewTarget=!1),o){switch(o){case"content":t.clientY=this.isScroll?t.clientY+this.decal:t.clientY,i.isMobile&&"mousedown"===s&&this.getNext(t,e),this.proto&&(h=this.proto.handleEvent(t)),"mousemove"===s&&(e=this.mode("def")),"wheel"===s&&!h&&this.isScroll&&(e=this.onWheel(t)),i.lock||this.getNext(t,e);break;case"bottom":this.clearTarget(),"mousemove"===s&&(e=this.mode("bottomOver")),"mousedown"===s&&(this.isOpen=!this.isOpen,this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.calc(),this.mode("def"),e=!0);break;case"scroll":this.clearTarget(),"mousemove"===s&&(e=this.mode("scrollOver")),"mousedown"===s&&(e=this.mode("scrollDown")),"wheel"===s&&(e=this.onWheel(t)),this.isDown&&this.update(t.clientY-this.zone.y-.5*this.sh)}this.isDown&&(e=!0),h&&(e=!0),"keyup"===s&&(e=!0),"keydown"===s&&(e=!0),e&&this.draw()}}getNext(t,s){let e=i.findTarget(this.uis,t);e!==this.current&&(this.clearTarget(),this.current=e,this.isNewTarget=!0),-1!==e&&(this.proto=this.uis[this.current],this.proto.uiover())}onWheel(t){return this.oy+=20*t.delta,this.update(this.oy),!0}reset(t){if(this.isReset)return;this.mouse.neg(),this.isDown=!1;let s=this.mode("def"),i=this.clearTarget();(s||i)&&this.draw(!0),this.isReset=!0}add(){let t=arguments,s=!1;"object"==typeof t[1]?(t[1].isUI=!0,t[1].main=this,s=!!t[1].ontop&&t[1].ontop):"string"==typeof t[1]&&(void 0===t[2]?[].push.call(t,{isUI:!0,main:this}):(t[2].isUI=!0,t[2].main=this,s=!!t[2].ontop&&t[2].ontop));let i=T.apply(this,t);if(null!==i)return s?this.uis.unshift(i):this.uis.push(i),this.calc(),this.isEmpty=!1,i}remove(t){t.dispose&&t.dispose()}clearOne(t){let s=this.uis.indexOf(t);-1!==s&&(this.inner.removeChild(this.uis[s].c[0]),this.uis.splice(s,1),this.calc())}empty(){let t,s=this.uis.length;for(;s--;)t=this.uis.pop(),this.inner.removeChild(t.c[0]),t.dispose();this.uis=[],this.isEmpty=!0,this.calc()}clear(){this.empty()}clear2(){setTimeout(this.empty.bind(this),0)}dispose(){this.clear(),null!==this.parent&&this.parent.removeChild(this.content),i.remove(this)}resetItem(){if(!this.isItemMode)return;let t=this.uis.length;for(;t--;)this.uis[t].selected()}setItem(t){if(!this.isItemMode)return;if(t=t||"",this.resetItem(),!t)return void this.update(0);let s=this.uis.length;for(;s--;)this.uis[s].value===t&&(this.uis[s].selected(!0),this.isScroll&&this.update(s*(this.uis[s].h+this.margin)*this.ratio))}upScroll(t){this.sw=t?this.size.s:0,this.oy=t?this.oy:0,this.scrollBG.style.display=t?"block":"none",t&&(this.total=this.h,this.maxView=this.maxHeight,this.ratio=this.maxView/this.total,this.sh=this.maxView*this.ratio,this.range=this.maxView-this.sh,this.oy=h.clamp(this.oy,0,this.range),this.scrollBG.style.height=this.maxView+"px",this.scroll.style.height=this.sh+"px"),this.setItemWidth(this.zone.w-this.sw),this.update(this.oy)}update(t){t=h.clamp(t,0,this.range),this.decal=Math.floor(t/this.ratio),this.inner.style.top=-this.decal+"px",this.scroll.style.top=Math.floor(t)+"px",this.oy=t}calcUis(){return i.calcUis(this.uis,this.zone,this.zone.y)}calc(){clearTimeout(this.tmp),this.tmp=setTimeout(this.setHeight.bind(this),10)}setHeight(){if(this.tmp&&clearTimeout(this.tmp),this.zone.h=this.bh,this.isScroll=!1,this.isOpen){this.h=this.calcUis();let t=this.forceHeight?this.forceHeight+this.zone.y:window.innerHeight;this.maxHeight=t-this.zone.y-this.bh,this.h-this.maxHeight>1?(this.isScroll=!0,this.zone.h=this.maxHeight+this.bh):this.zone.h=this.h+this.bh}this.upScroll(this.isScroll),this.innerContent.style.height=this.zone.h-this.bh+"px",this.content.style.height=this.zone.h+"px",this.bottom.style.top=this.zone.h-this.bh+"px",this.forceHeight&&this.lockHeight&&(this.content.style.height=this.forceHeight+"px"),this.isCanvas&&this.draw(!0)}rezone(){i.needReZone=!0}setWidth(t){t&&(this.zone.w=t),this.zone.w=Math.floor(this.zone.w),this.content.style.width=this.zone.w+"px",this.isCenter&&(this.content.style.marginLeft=-Math.floor(.5*this.zone.w)+"px"),this.setItemWidth(this.zone.w-this.sw)}setItemWidth(t){let s=this.uis.length;for(;s--;)this.uis[s].setSize(t),this.uis[s].rSize()}}export{o as Files,D as Gui,t as REVISION,h as Tools,T as add}; diff --git a/examples.html b/examples.html new file mode 100644 index 0000000..6e10b81 --- /dev/null +++ b/examples.html @@ -0,0 +1,217 @@ + + + + UIL + + + + + + + + + + +
+ +
+ + + + + diff --git a/examples/uil_3d.html b/examples/uil_3d.html index 4fbf25b..187b992 100644 --- a/examples/uil_3d.html +++ b/examples/uil_3d.html @@ -8,7 +8,7 @@ diff --git a/examples/uil_3d_3.html b/examples/uil_3d_3.html index 1e1b236..7cf4031 100644 --- a/examples/uil_3d_3.html +++ b/examples/uil_3d_3.html @@ -184,7 +184,7 @@ // canvas GUI element let cw = 300, ch = 600; ui = new UIL.Gui( { w:cw, maxHeight:ch, parent:null, isCanvas:true, close:false } ).onChange( function( v ){ debug.innerHTML = v; } ); - + window.ui=ui; ui.onDraw = function (){ if( screen === null ){ @@ -238,6 +238,10 @@ } + window.fakeAction1=function(){ + + } + \ No newline at end of file diff --git a/examples/uil_lumicles.html b/examples/uil_lumicles.html new file mode 100644 index 0000000..2a4fe21 --- /dev/null +++ b/examples/uil_lumicles.html @@ -0,0 +1,116 @@ + + + + Uil to Three + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/examples/uil_vr_test.html b/examples/uil_vr_test.html new file mode 100644 index 0000000..b5d3ac0 --- /dev/null +++ b/examples/uil_vr_test.html @@ -0,0 +1,376 @@ + + + + Uil to Three + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/index.html b/index.html index 2016d82..7abe5ae 100644 --- a/index.html +++ b/index.html @@ -1,216 +1,19 @@ - + - UIL - - - - - - - +Page Title - -
- -
- - - - + \ No newline at end of file diff --git a/package.json b/package.json index 8d52809..85b2942 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ }, "scripts": { "build": "rollup -c utils/rollup.config.js", - "dev": "concurrently --names \"ROLLUP,HTTP\" -c \"bgBlue.bold,bgGreen.bold\" \"rollup -c utils/rollup.config.js -w -m inline\" \"servez -p 8111 --index\"", + "dev": "concurrently --names \"ROLLUP,HTTP\" -c \"bgBlue.bold,bgGreen.bold\" \"rollup -c utils/rollup.config.dev.js -w -m inline\" \"servez -p 8211 --index\"", "start": "concurrently --names \"ROLLUP,HTTP\" -c \"bgBlue.bold,bgGreen.bold\" \"rollup -c utils/rollup.config.js -w -m inline\" \"http-server -c-1 -p 8111 -o index.html\"" }, "keywords": [ diff --git a/run_build.bat b/run_build.bat new file mode 100644 index 0000000..10da9ff --- /dev/null +++ b/run_build.bat @@ -0,0 +1 @@ +npm run build \ No newline at end of file diff --git a/run_dev.bat b/run_dev.bat new file mode 100644 index 0000000..b896a08 --- /dev/null +++ b/run_dev.bat @@ -0,0 +1 @@ +npm run dev \ No newline at end of file diff --git a/src/core/Gui.js b/src/core/Gui.js index 8a89d7b..fb15001 100644 --- a/src/core/Gui.js +++ b/src/core/Gui.js @@ -39,6 +39,9 @@ export class Gui { this.isCanvas = o.isCanvas || false this.isCanvasOnly = false + + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners=(o.hasOwnProperty("addDOMEventListeners"))?o.addDOMEventListeners:true; this.callback = o.callback === undefined ? null : o.callback @@ -164,6 +167,43 @@ export class Gui { } + triggerMouseDown(x,y){ + Roots.handleEvent({ + type:"pointerdown", + clientX:x, + clientY:y, + delta:0, + key:null, + keyCode:NaN + }) + } + + + triggerMouseMove(){ + Roots.handleEvent({ + type:"pointermove", + clientX:-1, + clientY:-1, + delta:0, + key:null, + keyCode:NaN + }) + } + triggerMouseUp(x,y){ + /* + + clientX,clientY are no used when isCanvas==true + */ + Roots.handleEvent({ + type:"pointerup", + clientX:x, + clientY:y, + delta:0, + key:null, + keyCode:NaN + }) + } + setTop( t, h ) { this.content.style.top = t + 'px'; @@ -228,12 +268,15 @@ export class Gui { } + + setMouse ( uv, flip = true ) { if(flip) this.mouse.set( Math.round( uv.x * this.canvas.width ), this.canvas.height - Math.round( uv.y * this.canvas.height ) ); else this.mouse.set( Math.round( uv.x * this.canvas.width ), Math.round( uv.y * this.canvas.height ) ); //this.mouse.set( m.x, m.y ); + //console.log("setMouse "+uv.x+" "+uv.y) } setConfig ( o ) { @@ -377,6 +420,8 @@ export class Gui { //if( this.cleanning ) return + //console.log("Gui.handleEvent") + //console.log(e); let type = e.type; let change = false; diff --git a/src/core/Roots.js b/src/core/Roots.js index b2c4b10..eb442cb 100644 --- a/src/core/Roots.js +++ b/src/core/Roots.js @@ -23,6 +23,7 @@ const R = { forceZone:false, isEventsInit: false, isLeave:false, + addDOMEventListeners:true, downTime:0, prevTime:0, @@ -128,17 +129,20 @@ const R = { } - dom.addEventListener( 'pointercancel', R ) - dom.addEventListener( 'pointerleave', R ) - //dom.addEventListener( 'pointerout', R ) - - dom.addEventListener( 'pointermove', R ) - dom.addEventListener( 'pointerdown', R ) - dom.addEventListener( 'pointerup', R ) - + console.log("R.addDOMEventListeners "+R.addDOMEventListeners) + if (R.addDOMEventListeners){ + dom.addEventListener( 'pointercancel', R ) + dom.addEventListener( 'pointerleave', R ) + //dom.addEventListener( 'pointerout', R ) + + dom.addEventListener( 'pointermove', R ) + dom.addEventListener( 'pointerdown', R ) + dom.addEventListener( 'pointerup', R ) + - dom.addEventListener( 'keydown', R, false ) - dom.addEventListener( 'keyup', R, false ) + dom.addEventListener( 'keydown', R, false ) + dom.addEventListener( 'keyup', R, false ) + } window.addEventListener( 'resize', R.resize , false ) //window.onblur = R.out; @@ -160,18 +164,19 @@ const R = { dom.removeEventListener( 'wheel', R ) } - - dom.removeEventListener( 'pointercancel', R ); - dom.removeEventListener( 'pointerleave', R ); - //dom.removeEventListener( 'pointerout', R ); - - dom.removeEventListener( 'pointermove', R ); - dom.removeEventListener( 'pointerdown', R ); - dom.removeEventListener( 'pointerup', R ); - + if (R.addDOMEventListeners){ + dom.removeEventListener( 'pointercancel', R ); + dom.removeEventListener( 'pointerleave', R ); + //dom.removeEventListener( 'pointerout', R ); + + dom.removeEventListener( 'pointermove', R ); + dom.removeEventListener( 'pointerdown', R ); + dom.removeEventListener( 'pointerup', R ); + - dom.removeEventListener( 'keydown', R ); - dom.removeEventListener( 'keyup', R ); + dom.removeEventListener( 'keydown', R ); + dom.removeEventListener( 'keyup', R ); + } window.removeEventListener( 'resize', R.resize ); R.isEventsInit = false; @@ -221,8 +226,9 @@ const R = { handleEvent: function ( event ) { + //console.log("Roots.handleEvent "+event.type) //if(!event.type) return; - + if( R.prevDefault.indexOf( event.type ) !== -1 ) event.preventDefault(); if( R.needResize ) R.resize() @@ -262,7 +268,7 @@ const R = { } e.type = 'mousemove'; } - + // double click test if( e.type === 'mousedown' ) { R.downTime = R.now() @@ -281,7 +287,7 @@ const R = { // mouse lock if( e.type === 'mousedown' ) R.lock = true; if( e.type === 'mouseup' ) R.lock = false; - + //if( R.current !== null && R.current.neverlock ) R.lock = false; /*if( e.type === 'mousedown' && event.button === 1){ @@ -290,11 +296,14 @@ const R = { e.stopPropagation(); }*/ + //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) + if( R.isMobile && e.type === 'mousedown' ) R.findID( e ); if( e.type === 'mousemove' && !R.lock ) R.findID( e ); if( R.ID !== null ){ + if( R.ID.isCanvasOnly ) { e.clientX = R.ID.mouse.x; @@ -303,11 +312,11 @@ const R = { } //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 - + R.ID.handleEvent( e ); } - + if( R.isMobile && e.type === 'mouseup' ) R.clearOldID(); if( leave ) R.clearOldID(); @@ -319,7 +328,7 @@ const R = { // ---------------------- findID: function ( e ) { - + let i = R.ui.length, next = -1, u, x, y; while( i-- ){ @@ -353,7 +362,7 @@ const R = { } if( next === -1 ) R.clearOldID(); - + }, clearOldID: function () { diff --git a/src/core/add.js b/src/core/add.js index 9a27dbf..2350755 100644 --- a/src/core/add.js +++ b/src/core/add.js @@ -42,6 +42,8 @@ export const add = function () { o = a[2]; o.name = a[1]; + if (o.hasOwnProperty("displayName")) o.name = o.displayName; + if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } else o.value = a[0][a[1]]; diff --git a/utils/rollup.config.dev.js b/utils/rollup.config.dev.js new file mode 100644 index 0000000..203dc76 --- /dev/null +++ b/utils/rollup.config.dev.js @@ -0,0 +1,166 @@ +import babel from '@rollup/plugin-babel'; +import { terser } from 'rollup-plugin-terser'; + +/*export default [ + { + input: 'src/Uil.js', + plugins: [ + buble( { + transforms: { + arrow: false, + classes: true + } + } ) + ], + output: [ + { + format: 'umd', + name: 'UIL', + file: 'build/uil.js', + indent: '\t' + } + ] + }, + { + input: 'src/Uil.js', + plugins: [ + ], + output: [ + { + format: 'esm', + file: 'build/uil.module.js', + indent: '\t' + } + ] + } +];*/ + +function babelCleanup() { + + const doubleSpaces = / {2}/g; + + return { + + transform( code ) { + + code = code.replace( doubleSpaces, '\t' ); + + return { + code: code, + map: null + }; + + } + + }; + +} + + +function header() { + + return { + + renderChunk( code ) { + + return `/** + * @license + * Copyright 2010-2021 Uil.js Authors + * SPDX-License-Identifier: MIT + */ +${ code }`; + + } + + }; + +} + + + +const babelrc = { + presets: [ + [ + '@babel/preset-env', + { + modules: false, + // the supported browsers of the three.js browser bundle + // https://browsersl.ist/?q=%3E0.3%25%2C+not+dead + targets: '>1%', + loose: true, + bugfixes: true, + } + ] + ], + plugins: [ + [ + "@babel/plugin-proposal-class-properties", + { + "loose": true + } + ] + ] +}; + +export default [ + { + input: 'src/Uil.js', + plugins: [ + /* + terser(), + header() + */ + ], + output: [ + { + format: 'esm', + file: 'build/uil.module.js' + } + ] + }, + { + input: 'src/Uil.js', + plugins: [ + /* + babel( { + babelHelpers: 'bundled', + compact: false, + babelrc: false, + ...babelrc + } ), + babelCleanup(), + header() + */ + ], + output: [ + { + format: 'umd', + name: 'UIL', + file: 'build/uil.js', + indent: '\t' + } + ] + }, + { + input: 'src/Uil.js', + plugins: [ + /* + babel( { + babelHelpers: 'bundled', + babelrc: false, + ...babelrc + } ), + babelCleanup(), + header() + */ + ], + output: [ + { + format: 'umd', + name: 'UIL', + file: 'build/uil.min.js' + } + ] + } + +]; \ No newline at end of file From b84288f6f967e3488e66e5733aef948e8a72708b Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Sat, 19 Oct 2024 19:59:00 -0300 Subject: [PATCH 02/17] implemented easing on sliders --- build/readme.md | 0 build/uil.js | 16054 ++++++++++++++++++++--------------- build/uil.min.js | 9070 +++++++++++++++++++- build/uil.module.js | 9056 +++++++++++++++++++- examples/uil_lumicles.html | 33 +- examples/uil_vr_test.html | 10 + package.json | 1 + src/core/Gui.js | 1333 ++- src/core/Proto.js | 1149 ++- src/core/Roots.js | 1508 ++-- src/proto/Slide.js | 468 +- 11 files changed, 29309 insertions(+), 9373 deletions(-) create mode 100644 build/readme.md diff --git a/build/readme.md b/build/readme.md new file mode 100644 index 0000000..e69de29 diff --git a/build/uil.js b/build/uil.js index 11988d4..72dfdf0 100644 --- a/build/uil.js +++ b/build/uil.js @@ -1,7124 +1,9055 @@ -/** - * @license - * Copyright 2010-2021 Uil.js Authors - * SPDX-License-Identifier: MIT - */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.UIL = {})); })(this, (function (exports) { 'use strict'; - /** - * @author lth / https://github.com/lo-th - */ - - const REVISION = '4.3.0'; - - // INTENAL FUNCTION - - const R = { - ui: [], - dom: null, - ID: null, - lock: false, - wlock: false, - current: -1, - needReZone: true, - needResize: false, - forceZone: false, - isEventsInit: false, - isLeave: false, - addDOMEventListeners: true, - downTime: 0, - prevTime: 0, - //prevDefault: ['contextmenu', 'wheel'], - prevDefault: ['contextmenu'], - pointerEvent: ['pointerdown', 'pointermove', 'pointerup'], - eventOut: ['pointercancel', 'pointerout', 'pointerleave'], - xmlserializer: null, - tmpTime: null, - tmpImage: null, - oldCursor: 'auto', - input: null, - parent: null, - firstImput: true, - hiddenImput: null, - hiddenSizer: null, - hasFocus: false, - startInput: false, - inputRange: [0, 0], - cursorId: 0, - str: '', - pos: 0, - startX: -1, - moveX: -1, - debugInput: false, - isLoop: false, - listens: [], - e: { - type: null, - clientX: 0, - clientY: 0, - keyCode: NaN, - key: null, - delta: 0 - }, - isMobile: false, - now: null, - getTime: function () { - return self.performance && self.performance.now ? self.performance.now.bind(performance) : Date.now; - }, - add: function (o) { - R.ui.push(o); - R.getZone(o); - if (!R.isEventsInit) R.initEvents(); - }, - testMobile: function () { - let n = navigator.userAgent; - if (n.match(/Android/i) || n.match(/webOS/i) || n.match(/iPhone/i) || n.match(/iPad/i) || n.match(/iPod/i) || n.match(/BlackBerry/i) || n.match(/Windows Phone/i)) return true;else return false; - }, - remove: function (o) { - let i = R.ui.indexOf(o); - if (i !== -1) { - R.removeListen(o); - R.ui.splice(i, 1); - } - if (R.ui.length === 0) { - R.removeEvents(); - } - }, - // ---------------------- - // EVENTS - // ---------------------- - - initEvents: function () { - if (R.isEventsInit) return; - let dom = document.body; - R.isMobile = R.testMobile(); - R.now = R.getTime(); - if (!R.isMobile) { - dom.addEventListener('wheel', R, { - passive: false - }); - } else { - dom.style.touchAction = 'none'; - } - console.log("R.addDOMEventListeners " + R.addDOMEventListeners); - if (R.addDOMEventListeners) { - dom.addEventListener('pointercancel', R); - dom.addEventListener('pointerleave', R); - //dom.addEventListener( 'pointerout', R ) - - dom.addEventListener('pointermove', R); - dom.addEventListener('pointerdown', R); - dom.addEventListener('pointerup', R); - dom.addEventListener('keydown', R, false); - dom.addEventListener('keyup', R, false); - } - window.addEventListener('resize', R.resize, false); - - //window.onblur = R.out; - //window.onfocus = R.in; - - R.isEventsInit = true; - R.dom = dom; - }, - removeEvents: function () { - if (!R.isEventsInit) return; - let dom = document.body; - if (!R.isMobile) { - dom.removeEventListener('wheel', R); - } - if (R.addDOMEventListeners) { - dom.removeEventListener('pointercancel', R); - dom.removeEventListener('pointerleave', R); - //dom.removeEventListener( 'pointerout', R ); - - dom.removeEventListener('pointermove', R); - dom.removeEventListener('pointerdown', R); - dom.removeEventListener('pointerup', R); - dom.removeEventListener('keydown', R); - dom.removeEventListener('keyup', R); - } - window.removeEventListener('resize', R.resize); - R.isEventsInit = false; - }, - resize: function () { - let i = R.ui.length, - u; - while (i--) { - u = R.ui[i]; - if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); - } - R.needReZone = true; - R.needResize = false; - }, - out: function () { - console.log('im am out'); - R.clearOldID(); - }, - in: function () { - console.log('im am in'); - // R.clearOldID(); - }, - // ---------------------- - // HANDLE EVENTS - // ---------------------- - - fakeUp: function () { - this.handleEvent({ - type: 'pointerup' - }); - }, - handleEvent: function (event) { - //console.log("Roots.handleEvent "+event.type) - //if(!event.type) return; - - if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); - if (R.needResize) R.resize(); - R.findZone(R.forceZone); - let e = R.e; - let leave = false; - if (event.type === 'keydown') R.keydown(event); - if (event.type === 'keyup') R.keyup(event); - if (event.type === 'wheel') e.delta = event.deltaY > 0 ? 1 : -1;else e.delta = 0; - let ptype = event.pointerType; // mouse, pen, touch - - e.clientX = (ptype === 'touch' ? event.pageX : event.clientX) || 0; - e.clientY = (ptype === 'touch' ? event.pageY : event.clientY) || 0; - e.type = event.type; - if (R.eventOut.indexOf(event.type) !== -1) { - leave = true; - e.type = 'mouseup'; - } - if (event.type === 'pointerleave') R.isLeave = true; - if (event.type === 'pointerdown') e.type = 'mousedown'; - if (event.type === 'pointerup') e.type = 'mouseup'; - if (event.type === 'pointermove') { - if (R.isLeave) { - // if user resize outside this document - R.isLeave = false; - R.resize(); - } - e.type = 'mousemove'; - } - - // double click test - if (e.type === 'mousedown') { - R.downTime = R.now(); - let time = R.downTime - R.prevTime; - - // double click on imput - if (time < 200) { - R.selectAll(); - return false; - } - R.prevTime = R.downTime; - R.forceZone = false; - } - - // for imput - if (e.type === 'mousedown') R.clearInput(); - - // mouse lock - if (e.type === 'mousedown') R.lock = true; - if (e.type === 'mouseup') R.lock = false; - - //if( R.current !== null && R.current.neverlock ) R.lock = false; - - /*if( e.type === 'mousedown' && event.button === 1){ - R.cursor() - e.preventDefault(); - e.stopPropagation(); - }*/ - - //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) - - if (R.isMobile && e.type === 'mousedown') R.findID(e); - if (e.type === 'mousemove' && !R.lock) R.findID(e); - if (R.ID !== null) { - if (R.ID.isCanvasOnly) { - e.clientX = R.ID.mouse.x; - e.clientY = R.ID.mouse.y; - } - - //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 - - R.ID.handleEvent(e); - } - if (R.isMobile && e.type === 'mouseup') R.clearOldID(); - if (leave) R.clearOldID(); - }, - // ---------------------- - // ID - // ---------------------- - - findID: function (e) { - let i = R.ui.length, - next = -1, - u, - x, - y; - while (i--) { - u = R.ui[i]; - if (u.isCanvasOnly) { - x = u.mouse.x; - y = u.mouse.y; - } else { - x = e.clientX; - y = e.clientY; - } - if (R.onZone(u, x, y)) { - next = i; - if (next !== R.current) { - R.clearOldID(); - R.current = next; - R.ID = u; - } - break; - } - } - if (next === -1) R.clearOldID(); - }, - clearOldID: function () { - if (!R.ID) return; - R.current = -1; - R.ID.reset(); - R.ID = null; - R.cursor(); - }, - // ---------------------- - // GUI / GROUP FUNCTION - // ---------------------- - - calcUis: (uis, zone, py, group = false) => { - //console.log('calc_uis') - - let i = uis.length, - u, - px = 0, - n = 0, - tw, - m; - let height = 0; - while (i--) { - u = uis[n]; - n++; - if (!group && u.isGroup) u.calcUis(); - m = u.margin; - //div = u.marginDiv - - u.zone.w = u.w; - u.zone.h = u.h + m; - if (!u.autoWidth) { - if (px === 0) height += u.h + m; - u.zone.x = zone.x + px; - u.zone.y = py; // + u.mtop - //if(div) u.zone.y += m * 0.5 - - tw = R.getWidth(u); - if (tw) u.zone.w = u.w = tw;else if (u.fw) u.zone.w = u.w = u.fw; - px += u.zone.w; - if (px >= zone.w) { - py += u.h + m; - //if(div) py += m * 0.5 - px = 0; - } - } else { - px = 0; - u.zone.x = zone.x + u.dx; - u.zone.y = py; - py += u.h + m; - height += u.h + m; - } - } - return height; - }, - findTarget: function (uis, e) { - let i = uis.length; - while (i--) { - if (R.onZone(uis[i], e.clientX, e.clientY)) return i; - } - return -1; - }, - // ---------------------- - // ZONE - // ---------------------- - - findZone: function (force) { - if (!R.needReZone && !force) return; - var i = R.ui.length, - u; - while (i--) { - u = R.ui[i]; - R.getZone(u); - if (u.isGui) u.calcUis(); - } - R.needReZone = false; - }, - onZone: function (o, x, y) { - if (x === undefined || y === undefined) return false; - let z = o.zone; - let mx = x - z.x; // - o.dx; - let my = y - z.y; - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 - //if( o.group !== null ) mx -= o.dx - - let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; - - //if( o.marginDiv ) my -= o.margin * 0.5 - - if (over) o.local.set(mx, my);else o.local.neg(); - return over; - }, - getWidth: function (o) { - //return o.getDom().offsetWidth - return o.getDom().clientWidth; - - //let r = o.getDom().getBoundingClientRect(); - //return (r.width) - //return Math.floor(r.width) - }, - getZone: function (o) { - if (o.isCanvasOnly) return; - let r = o.getDom().getBoundingClientRect(); - - //if( !r.width ) return - //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; - //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; - o.zone = { - x: r.left, - y: r.top, - w: r.width, - h: r.height - }; - - //console.log(o.name, o.zone) - }, - // ---------------------- - // CURSOR - // ---------------------- - - cursor: function (name) { - name = name ? name : 'auto'; - if (name !== R.oldCursor) { - document.body.style.cursor = name; - R.oldCursor = name; - } - }, - // ---------------------- - // CANVAS - // ---------------------- - - toCanvas: function (o, w, h, force) { - if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); - - // prevent exesive redraw - - if (force && R.tmpTime !== null) { - clearTimeout(R.tmpTime); - R.tmpTime = null; - } - if (R.tmpTime !== null) return; - if (R.lock) R.tmpTime = setTimeout(function () { - R.tmpTime = null; - }, 10); - - /// - - let isNewSize = false; - if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; - if (R.tmpImage === null) R.tmpImage = new Image(); - let img = R.tmpImage; //new Image(); - - let htmlString = R.xmlserializer.serializeToString(o.content); - let svg = '' + htmlString + ''; - img.onload = function () { - let ctx = o.canvas.getContext("2d"); - if (isNewSize) { - o.canvas.width = w; - o.canvas.height = h; - } else { - ctx.clearRect(0, 0, w, h); - } - ctx.drawImage(this, 0, 0); - o.onDraw(); - }; - img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); - //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); - img.crossOrigin = ''; - }, - // ---------------------- - // INPUT - // ---------------------- - - setHidden: function () { - if (R.hiddenImput === null) { - //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' - //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' - //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; - - R.hiddenImput = document.createElement('input'); - R.hiddenImput.type = 'text'; - //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); - - R.hiddenSizer = document.createElement('div'); - //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; - - document.body.appendChild(R.hiddenImput); - document.body.appendChild(R.hiddenSizer); - } - let hide = R.debugInput ? '' : 'opacity:0; zIndex:0;'; - let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;' + hide; - R.hiddenImput.style.cssText = css + 'bottom:10px;' + (R.debugInput ? '' : 'transform:scale(0);'); - R.hiddenSizer.style.cssText = css + 'bottom:40px;'; - R.hiddenImput.style.width = R.input.clientWidth + 'px'; - R.hiddenImput.value = R.str; - R.hiddenSizer.innerHTML = R.str; - R.hasFocus = true; - }, - clearHidden: function (p) { - if (R.hiddenImput === null) return; - R.hasFocus = false; - }, - clickPos: function (x) { - let i = R.str.length, - l = 0, - n = 0; - while (i--) { - l += R.textWidth(R.str[n]); - if (l >= x) break; - n++; - } - return n; - }, - upInput: function (x, down) { - if (R.parent === null) return false; - let up = false; - if (down) { - let id = R.clickPos(x); - R.moveX = id; - if (R.startX === -1) { - R.startX = id; - R.cursorId = id; - R.inputRange = [R.startX, R.startX]; - } else { - let isSelection = R.moveX !== R.startX; - if (isSelection) { - if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX];else R.inputRange = [R.startX, R.moveX]; - } - } - up = true; - } else { - if (R.startX !== -1) { - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.startX = -1; - up = true; - } - } - if (up) R.selectParent(); - return up; - }, - selectAll: function () { - if (!R.parent) return; - R.str = R.input.textContent; - R.inputRange = [0, R.str.length]; - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.cursorId = R.inputRange[1]; - R.selectParent(); - }, - selectParent: function () { - var c = R.textWidth(R.str.substring(0, R.cursorId)); - var e = R.textWidth(R.str.substring(0, R.inputRange[0])); - var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); - R.parent.select(c, e, s, R.hiddenSizer.innerHTML); - }, - textWidth: function (text) { - if (R.hiddenSizer === null) return 0; - text = text.replace(/ /g, ' '); - R.hiddenSizer.innerHTML = text; - return R.hiddenSizer.clientWidth; - }, - clearInput: function () { - if (R.parent === null) return; - if (!R.firstImput) R.parent.validate(true); - R.clearHidden(); - R.parent.unselect(); - - //R.input.style.background = 'none'; - R.input.style.background = R.parent.colors.back; - R.input.style.borderColor = R.parent.colors.border; - //R.input.style.color = R.parent.colors.text; - R.parent.isEdit = false; - R.input = null; - R.parent = null; - R.str = '', R.firstImput = true; - }, - setInput: function (Input, parent) { - R.clearInput(); - R.input = Input; - R.parent = parent; - R.input.style.background = R.parent.colors.backoff; - R.input.style.borderColor = R.parent.colors.select; - //R.input.style.color = R.parent.colors.textSelect; - R.str = R.input.textContent; - R.setHidden(); - }, - keydown: function (e) { - if (R.parent === null) return; - let keyCode = e.which; - e.shiftKey; - - //console.log( keyCode ) - - R.firstImput = false; - if (R.hasFocus) { - // hack to fix touch event bug in iOS Safari - window.focus(); - R.hiddenImput.focus(); - } - R.parent.isEdit = true; - - // e.preventDefault(); - - // add support for Ctrl/Cmd+A selection - //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { - //R.selectText(); - //e.preventDefault(); - //return self.render(); - //} - - if (keyCode === 13) { - //enter - - R.clearInput(); - - //} else if( keyCode === 9 ){ //tab key - - // R.input.textContent = ''; - } else { - if (R.input.isNum) { - if (e.keyCode > 47 && e.keyCode < 58 || e.keyCode > 95 && e.keyCode < 106 || e.keyCode === 190 || e.keyCode === 110 || e.keyCode === 8 || e.keyCode === 109) { - R.hiddenImput.readOnly = false; - } else { - R.hiddenImput.readOnly = true; - } - } else { - R.hiddenImput.readOnly = false; - } - } - }, - keyup: function (e) { - if (R.parent === null) return; - R.str = R.hiddenImput.value; - if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value - else R.input.textContent = R.str; - R.cursorId = R.hiddenImput.selectionStart; - R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; - R.selectParent(); - - //if( R.parent.allway ) - R.parent.validate(); - }, - // ---------------------- - // - // LISTENING - // - // ---------------------- - - loop: function () { - if (R.isLoop) requestAnimationFrame(R.loop); - R.update(); - }, - update: function () { - let i = R.listens.length; - while (i--) R.listens[i].listening(); - }, - removeListen: function (proto) { - let id = R.listens.indexOf(proto); - if (id !== -1) R.listens.splice(id, 1); - if (R.listens.length === 0) R.isLoop = false; - }, - addListen: function (proto) { - let id = R.listens.indexOf(proto); - if (id !== -1) return false; - R.listens.push(proto); - if (!R.isLoop) { - R.isLoop = true; - R.loop(); - } - return true; - } - }; + /** + * @author lth / https://github.com/lo-th + */ + + const REVISION = "4.3.0"; + + // INTENAL FUNCTION + + const R = { + ui: [], + + dom: null, + + ID: null, + lock: false, + wlock: false, + current: -1, + + needReZone: true, + needResize: false, + forceZone: false, + isEventsInit: false, + isLeave: false, + addDOMEventListeners: true, + + downTime: 0, + prevTime: 0, + + //prevDefault: ['contextmenu', 'wheel'], + prevDefault: ["contextmenu"], + pointerEvent: ["pointerdown", "pointermove", "pointerup"], + eventOut: ["pointercancel", "pointerout", "pointerleave"], + + xmlserializer: null, + tmpTime: null, + tmpImage: null, + + oldCursor: "auto", + + input: null, + parent: null, + firstImput: true, + + hiddenImput: null, + hiddenSizer: null, + hasFocus: false, + startInput: false, + inputRange: [0, 0], + cursorId: 0, + str: "", + pos: 0, + startX: -1, + moveX: -1, + + debugInput: false, + + isLoop: false, + listens: [], + + e: { + type: null, + clientX: 0, + clientY: 0, + keyCode: NaN, + key: null, + delta: 0, + }, + + isMobile: false, + + now: null, + needsUpdate: false, + + getTime: function () { + return self.performance && self.performance.now + ? self.performance.now.bind(performance) + : Date.now; + }, + + add: function (o) { + // R.ui[0] is de GUI object that is added first by the constructor + R.ui.push(o); + R.getZone(o); + + if (!R.isEventsInit) R.initEvents(); + }, + + testMobile: function () { + let n = navigator.userAgent; + if ( + n.match(/Android/i) || + n.match(/webOS/i) || + n.match(/iPhone/i) || + n.match(/iPad/i) || + n.match(/iPod/i) || + n.match(/BlackBerry/i) || + n.match(/Windows Phone/i) + ) + return true; + else return false; + }, + + remove: function (o) { + let i = R.ui.indexOf(o); + + if (i !== -1) { + R.removeListen(o); + R.ui.splice(i, 1); + } + + if (R.ui.length === 0) { + R.removeEvents(); + } + }, + + // ---------------------- + // EVENTS + // ---------------------- + + initEvents: function () { + if (R.isEventsInit) return; + + let dom = document.body; + + R.isMobile = R.testMobile(); + R.now = R.getTime(); + + if (!R.isMobile) { + dom.addEventListener("wheel", R, { passive: false }); + } else { + dom.style.touchAction = "none"; + } + + console.log("R.addDOMEventListeners " + R.addDOMEventListeners); + if (R.addDOMEventListeners) { + dom.addEventListener("pointercancel", R); + dom.addEventListener("pointerleave", R); + //dom.addEventListener( 'pointerout', R ) + + dom.addEventListener("pointermove", R); + dom.addEventListener("pointerdown", R); + dom.addEventListener("pointerup", R); + + dom.addEventListener("keydown", R, false); + dom.addEventListener("keyup", R, false); + } + window.addEventListener("resize", R.resize, false); + + //window.onblur = R.out; + //window.onfocus = R.in; + + R.isEventsInit = true; + R.dom = dom; + }, + + removeEvents: function () { + if (!R.isEventsInit) return; + + let dom = document.body; + + if (!R.isMobile) { + dom.removeEventListener("wheel", R); + } + + if (R.addDOMEventListeners) { + dom.removeEventListener("pointercancel", R); + dom.removeEventListener("pointerleave", R); + //dom.removeEventListener( 'pointerout', R ); + + dom.removeEventListener("pointermove", R); + dom.removeEventListener("pointerdown", R); + dom.removeEventListener("pointerup", R); + + dom.removeEventListener("keydown", R); + dom.removeEventListener("keyup", R); + } + window.removeEventListener("resize", R.resize); + + R.isEventsInit = false; + }, + + resize: function () { + let i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); + } + + R.needReZone = true; + R.needResize = false; + }, + + out: function () { + console.log("im am out"); + R.clearOldID(); + }, + + in: function () { + console.log("im am in"); + // R.clearOldID(); + }, + + // ---------------------- + // HANDLE EVENTS + // ---------------------- + + fakeUp: function () { + this.handleEvent({ type: "pointerup" }); + }, + + handleEvent: function (event) { + //console.log("Roots.handleEvent "+event.type) + //if(!event.type) return; + + if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); + + if (R.needResize) R.resize(); + + R.findZone(R.forceZone); + + let e = R.e; + let leave = false; + + if (event.type === "keydown") R.keydown(event); + if (event.type === "keyup") R.keyup(event); + + if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; + else e.delta = 0; + + let ptype = event.pointerType; // mouse, pen, touch + + e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; + e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; + + e.type = event.type; + + if (R.eventOut.indexOf(event.type) !== -1) { + leave = true; + e.type = "mouseup"; + } + + if (event.type === "pointerleave") R.isLeave = true; + + if (event.type === "pointerdown") e.type = "mousedown"; + if (event.type === "pointerup") e.type = "mouseup"; + if (event.type === "pointermove") { + if (R.isLeave) { + // if user resize outside this document + R.isLeave = false; + R.resize(); + } + e.type = "mousemove"; + } + + // double click test + if (e.type === "mousedown") { + R.downTime = R.now(); + let time = R.downTime - R.prevTime; + + // double click on imput + if (time < 200) { + R.selectAll(); + return false; + } + + R.prevTime = R.downTime; + R.forceZone = false; + } + + // for imput + if (e.type === "mousedown") R.clearInput(); + + // mouse lock + if (e.type === "mousedown") R.lock = true; + if (e.type === "mouseup") R.lock = false; + + //if( R.current !== null && R.current.neverlock ) R.lock = false; + + /*if( e.type === 'mousedown' && event.button === 1){ + R.cursor() + e.preventDefault(); + e.stopPropagation(); + }*/ + + //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) + + if (R.isMobile && e.type === "mousedown") R.findID(e); + if (e.type === "mousemove" && !R.lock) R.findID(e); + + if (R.ID !== null) { + if (R.ID.isCanvasOnly) { + e.clientX = R.ID.mouse.x; + e.clientY = R.ID.mouse.y; + } + + //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 + + R.ID.handleEvent(e); + } + + if (R.isMobile && e.type === "mouseup") R.clearOldID(); + if (leave) R.clearOldID(); + }, + + // ---------------------- + // ID + // ---------------------- + + findID: function (e) { + let i = R.ui.length, + next = -1, + u, + x, + y; + + while (i--) { + u = R.ui[i]; + + if (u.isCanvasOnly) { + x = u.mouse.x; + y = u.mouse.y; + } else { + x = e.clientX; + y = e.clientY; + } + + if (R.onZone(u, x, y)) { + next = i; + + if (next !== R.current) { + R.clearOldID(); + R.current = next; + R.ID = u; + } + break; + } + } + + if (next === -1) R.clearOldID(); + }, + + clearOldID: function () { + if (!R.ID) return; + R.current = -1; + R.ID.reset(); + R.ID = null; + R.cursor(); + }, + + // ---------------------- + // GUI / GROUP FUNCTION + // ---------------------- + + calcUis: (uis, zone, py, group = false) => { + //console.log('calc_uis') + + let i = uis.length, + u, + px = 0, + n = 0, + tw, + m; + + let height = 0; + + while (i--) { + u = uis[n]; + n++; + + if (!group && u.isGroup) u.calcUis(); + + m = u.margin; + //div = u.marginDiv + + u.zone.w = u.w; + u.zone.h = u.h + m; + + if (!u.autoWidth) { + if (px === 0) height += u.h + m; + + u.zone.x = zone.x + px; + u.zone.y = py; // + u.mtop + //if(div) u.zone.y += m * 0.5 + + tw = R.getWidth(u); + if (tw) u.zone.w = u.w = tw; + else if (u.fw) u.zone.w = u.w = u.fw; + + px += u.zone.w; + + if (px >= zone.w) { + py += u.h + m; + //if(div) py += m * 0.5 + px = 0; + } + } else { + px = 0; + + u.zone.x = zone.x + u.dx; + u.zone.y = py; + py += u.h + m; + + height += u.h + m; + } + } + + return height; + }, + + findTarget: function (uis, e) { + let i = uis.length; + + while (i--) { + if (R.onZone(uis[i], e.clientX, e.clientY)) return i; + } + + return -1; + }, + + // ---------------------- + // ZONE + // ---------------------- + + findZone: function (force) { + if (!R.needReZone && !force) return; + + var i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + R.getZone(u); + if (u.isGui) u.calcUis(); + } + + R.needReZone = false; + }, + + onZone: function (o, x, y) { + if (x === undefined || y === undefined) return false; + + let z = o.zone; + let mx = x - z.x; // - o.dx; + let my = y - z.y; + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 + //if( o.group !== null ) mx -= o.dx + + let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; + + //if( o.marginDiv ) my -= o.margin * 0.5 + + if (over) o.local.set(mx, my); + else o.local.neg(); + + return over; + }, + + getWidth: function (o) { + //return o.getDom().offsetWidth + return o.getDom().clientWidth; + + //let r = o.getDom().getBoundingClientRect(); + //return (r.width) + //return Math.floor(r.width) + }, + + getZone: function (o) { + if (o.isCanvasOnly) return; + let r = o.getDom().getBoundingClientRect(); + + //if( !r.width ) return + //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; + //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; + o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; + + //console.log(o.name, o.zone) + }, + + // ---------------------- + // CURSOR + // ---------------------- + + cursor: function (name) { + name = name ? name : "auto"; + if (name !== R.oldCursor) { + document.body.style.cursor = name; + R.oldCursor = name; + } + }, + + // ---------------------- + // CANVAS + // ---------------------- + + toCanvas: function (o, w, h, force) { + if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); + + // prevent exesive redraw + + if (force && R.tmpTime !== null) { + clearTimeout(R.tmpTime); + R.tmpTime = null; + } + + if (R.tmpTime !== null) return; + + if (R.lock) + R.tmpTime = setTimeout(function () { + R.tmpTime = null; + }, 10); + + /// + + let isNewSize = false; + if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; + + if (R.tmpImage === null) R.tmpImage = new Image(); + + let img = R.tmpImage; //new Image(); + + let htmlString = R.xmlserializer.serializeToString(o.content); + + let svg = + '' + + htmlString + + ""; + + img.onload = function () { + let ctx = o.canvas.getContext("2d"); + + if (isNewSize) { + o.canvas.width = w; + o.canvas.height = h; + } else { + ctx.clearRect(0, 0, w, h); + } + ctx.drawImage(this, 0, 0); + + o.onDraw(); + }; + + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); + //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); + img.crossOrigin = ""; + R.needsUpdate = false; + }, + + // ---------------------- + // INPUT + // ---------------------- + + setHidden: function () { + if (R.hiddenImput === null) { + //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' + //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' + //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; + + R.hiddenImput = document.createElement("input"); + R.hiddenImput.type = "text"; + //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); + + R.hiddenSizer = document.createElement("div"); + //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; + + document.body.appendChild(R.hiddenImput); + document.body.appendChild(R.hiddenSizer); + } + + let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; + let css = + R.parent.css.txtselect + + "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + + hide; + R.hiddenImput.style.cssText = + css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); + R.hiddenSizer.style.cssText = css + "bottom:40px;"; + + R.hiddenImput.style.width = R.input.clientWidth + "px"; + R.hiddenImput.value = R.str; + R.hiddenSizer.innerHTML = R.str; + + R.hasFocus = true; + }, + + clearHidden: function (p) { + if (R.hiddenImput === null) return; + R.hasFocus = false; + }, + + clickPos: function (x) { + let i = R.str.length, + l = 0, + n = 0; + while (i--) { + l += R.textWidth(R.str[n]); + if (l >= x) break; + n++; + } + return n; + }, + + upInput: function (x, down) { + if (R.parent === null) return false; + + let up = false; + + if (down) { + let id = R.clickPos(x); + + R.moveX = id; + + if (R.startX === -1) { + R.startX = id; + R.cursorId = id; + R.inputRange = [R.startX, R.startX]; + } else { + let isSelection = R.moveX !== R.startX; + + if (isSelection) { + if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; + else R.inputRange = [R.startX, R.moveX]; + } + } + + up = true; + } else { + if (R.startX !== -1) { + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.startX = -1; + + up = true; + } + } + + if (up) R.selectParent(); + + return up; + }, + + selectAll: function () { + if (!R.parent) return; + + R.str = R.input.textContent; + R.inputRange = [0, R.str.length]; + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.cursorId = R.inputRange[1]; + R.selectParent(); + }, + + selectParent: function () { + var c = R.textWidth(R.str.substring(0, R.cursorId)); + var e = R.textWidth(R.str.substring(0, R.inputRange[0])); + var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); + + R.parent.select(c, e, s, R.hiddenSizer.innerHTML); + }, + + textWidth: function (text) { + if (R.hiddenSizer === null) return 0; + text = text.replace(/ /g, " "); + R.hiddenSizer.innerHTML = text; + return R.hiddenSizer.clientWidth; + }, + + clearInput: function () { + if (R.parent === null) return; + if (!R.firstImput) R.parent.validate(true); + + R.clearHidden(); + R.parent.unselect(); + + //R.input.style.background = 'none'; + R.input.style.background = R.parent.colors.back; + R.input.style.borderColor = R.parent.colors.border; + //R.input.style.color = R.parent.colors.text; + R.parent.isEdit = false; + + R.input = null; + R.parent = null; + (R.str = ""), (R.firstImput = true); + }, + + setInput: function (Input, parent) { + R.clearInput(); + + R.input = Input; + R.parent = parent; + + R.input.style.background = R.parent.colors.backoff; + R.input.style.borderColor = R.parent.colors.select; + //R.input.style.color = R.parent.colors.textSelect; + R.str = R.input.textContent; + + R.setHidden(); + }, + + keydown: function (e) { + if (R.parent === null) return; + + let keyCode = e.which; + e.shiftKey; + + //console.log( keyCode ) + + R.firstImput = false; + + if (R.hasFocus) { + // hack to fix touch event bug in iOS Safari + window.focus(); + R.hiddenImput.focus(); + } + + R.parent.isEdit = true; + + // e.preventDefault(); + + // add support for Ctrl/Cmd+A selection + //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { + //R.selectText(); + //e.preventDefault(); + //return self.render(); + //} + + if (keyCode === 13) { + //enter + + R.clearInput(); + + //} else if( keyCode === 9 ){ //tab key + + // R.input.textContent = ''; + } else { + if (R.input.isNum) { + if ( + (e.keyCode > 47 && e.keyCode < 58) || + (e.keyCode > 95 && e.keyCode < 106) || + e.keyCode === 190 || + e.keyCode === 110 || + e.keyCode === 8 || + e.keyCode === 109 + ) { + R.hiddenImput.readOnly = false; + } else { + R.hiddenImput.readOnly = true; + } + } else { + R.hiddenImput.readOnly = false; + } + } + }, + + keyup: function (e) { + if (R.parent === null) return; + + R.str = R.hiddenImput.value; + + if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value + else R.input.textContent = R.str; + + R.cursorId = R.hiddenImput.selectionStart; + R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; + + R.selectParent(); + + //if( R.parent.allway ) + R.parent.validate(); + }, + + // ---------------------- + // + // LISTENING + // + // ---------------------- + + loop: function () { + // modified by Fedemarino + if (R.isLoop) requestAnimationFrame(R.loop); + R.needsUpdate = R.update(); + // if there is a change in a value generated externally, the GUI needs to be redrawn + if (R.ui[0]) R.ui[0].draw(); + }, + + update: function () { + // modified by Fedemarino + let i = R.listens.length; + let needsUpdate = false; + while (i--) { + //check if the value of the object has changed + let hasChanged = R.listens[i].listening(); + if (hasChanged) needsUpdate = true; + } + return needsUpdate; + }, + + removeListen: function (proto) { + let id = R.listens.indexOf(proto); + if (id !== -1) R.listens.splice(id, 1); + if (R.listens.length === 0) R.isLoop = false; + }, + + addListen: function (proto) { + let id = R.listens.indexOf(proto); + + if (id !== -1) return false; + + R.listens.push(proto); + + if (!R.isLoop) { + R.isLoop = true; + R.loop(); + } + + return true; + }, + }; + const Roots = R; - /** - * @author lth / https://github.com/lo-th - */ - const T = { - transition: 0.2, - frag: document.createDocumentFragment(), - colorRing: null, - joystick_0: null, - joystick_1: null, - circular: null, - knob: null, - pad2d: null, - svgns: "http://www.w3.org/2000/svg", - links: "http://www.w3.org/1999/xlink", - htmls: "http://www.w3.org/1999/xhtml", - DOM_SIZE: ['height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], - SVG_TYPE_D: ['pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix'], - SVG_TYPE_G: ['svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject'], - PI: Math.PI, - TwoPI: Math.PI * 2, - pi90: Math.PI * 0.5, - pi60: Math.PI / 3, - torad: Math.PI / 180, - todeg: 180 / Math.PI, - clamp: (v, min, max) => { - v = v < min ? min : v; - v = v > max ? max : v; - return v; - }, - isDivid: v => v * 0.5 === Math.floor(v * 0.5), - size: { - w: 240, - h: 20, - p: 30, - s: 8 - }, - // ---------------------- - // COLOR - // ---------------------- - - defineColor: (o, cc = T.colors) => { - let color = { - ...cc - }; - let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize']; - let changeText = false; - if (o.font) o.fontFamily = o.font; - if (o.shadow) o.fontShadow = o.shadow; - if (o.weight) o.fontWeight = o.weight; - if (o.fontColor) o.text = o.fontColor; - if (o.color) o.text = o.color; - if (o.text) { - color.text = o.text; - if (!o.fontColor && !o.color) { - color.title = T.ColorLuma(o.text, -0.25); - color.titleoff = T.ColorLuma(o.text, -0.5); - } - color.textOver = T.ColorLuma(o.text, 0.25); - color.textSelect = T.ColorLuma(o.text, 0.5); - } - if (o.button) { - color.button = o.button; - color.border = T.ColorLuma(o.button, 0.1); - color.overoff = T.ColorLuma(o.button, 0.2); - } - if (o.select) { - color.select = o.select; - color.over = T.ColorLuma(o.select, -0.1); - } - if (o.itemBg) o.back = o.itemBg; - if (o.back) { - color.back = o.back; - color.backoff = T.ColorLuma(o.back, -0.1); - } - if (o.fontSelect) color.textSelect = o.fontSelect; - if (o.groupBorder) color.gborder = o.groupBorder; - - //if( o.transparent ) o.bg = 'none' - //if( o.bg ) color.background = color.backgroundOver = o.bg - if (o.bgOver) color.backgroundOver = o.bgOver; - for (let m in color) { - if (o[m] !== undefined) color[m] = o[m]; - } - for (let m in o) { - if (textChange.indexOf(m) !== -1) changeText = true; - } - if (changeText) T.defineText(color); - return color; - }, - colors: { - sx: 4, - //4 - sy: 2, - //2 - radius: 2, - showOver: 1, - //groupOver : 1, - - content: 'none', - background: 'rgba(50,50,50,0.15)', - backgroundOver: 'rgba(50,50,50,0.3)', - title: '#CCC', - titleoff: '#BBB', - text: '#DDD', - textOver: '#EEE', - textSelect: '#FFF', - back: 'rgba(0,0,0,0.2)', - backoff: 'rgba(0,0,0,0.3)', - // input and button border - border: '#4c4c4c', - borderSize: 1, - gborder: 'none', - groups: 'none', - button: '#3c3c3c', - overoff: '#5c5c5c', - over: '#024699', - select: '#308AFF', - action: '#FF3300', - //fontFamily: 'Tahoma', - fontFamily: 'Consolas, monospace', - //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", - fontWeight: 'normal', - fontShadow: 'none', - //'#000', - fontSize: 12, - joyOver: 'rgba(48,138,255,0.25)', - joyOut: 'rgba(100,100,100,0.5)', - joySelect: '#308AFF', - hide: 'rgba(0,0,0,0)' - }, - // style css - - css: { - basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', - button: 'display:flex; align-items:center; justify-content:center; text-align:center;', - middle: 'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' - }, - // svg path - - svgs: { - g1: 'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', - g2: 'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', - group: 'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', - arrow: 'M 3 8 L 8 5 3 2 3 8 Z', - arrowDown: 'M 5 8 L 8 3 2 3 5 8 Z', - arrowUp: 'M 5 2 L 2 7 8 7 5 2 Z', - solid: 'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', - body: 'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', - vehicle: 'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', - articulation: 'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', - character: 'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', - terrain: 'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', - joint: 'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', - ray: 'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', - collision: 'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', - map: 'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - material: 'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - texture: 'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', - object: 'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', - none: 'M 9 5 L 5 5 5 9 9 9 9 5 Z', - cursor: 'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', - load: 'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', - save: 'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', - extern: 'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z' - }, - rezone() { - Roots.needReZone = true; - }, - getImput: function () { - return Roots.input ? true : false; - }, - setStyle: function (data) { - for (var o in data) { - if (T.colors[o]) T.colors[o] = data[o]; - } - T.setText(); - }, - // ---------------------- - // custom text - // ---------------------- - - defineText: function (o) { - T.setText(o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight); - }, - setText: function (size, color, font, shadow, weight) { - let cc = T.colors; - if (font === undefined) font = cc.fontFamily; - if (size === undefined) size = cc.fontSize; - if (shadow === undefined) shadow = cc.fontShadow; - if (weight === undefined) weight = cc.fontWeight; - if (color === undefined) color = cc.text; - if (isNaN(size)) { - if (size.search('em') === -1) size += 'px'; - } else size += 'px'; - - //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' - - T.css.txt = T.css.basic + T.css.middle + ' font-family:' + font + '; font-weight:' + weight + '; font-size:' + size + '; color:' + cc.text + '; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; - if (shadow !== 'none') T.css.txt += ' text-shadow: 1px 1px 1px ' + shadow + ';'; - T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; - T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; - }, - // note - - //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container - - /*cloneColor: function () { - let cc = Object.assign({}, T.colors ); - return cc; - },*/ - - // intern function - - cloneCss: function () { - //let cc = Object.assign({}, T.css ); - return { - ...T.css - }; - }, - clone: function (o) { - return o.cloneNode(true); - }, - setSvg: function (dom, type, value, id, id2) { - if (id === -1) dom.setAttributeNS(null, type, value);else if (id2 !== undefined) dom.childNodes[id || 0].childNodes[id2 || 0].setAttributeNS(null, type, value);else dom.childNodes[id || 0].setAttributeNS(null, type, value); - }, - setCss: function (dom, css) { - for (let r in css) { - if (T.DOM_SIZE.indexOf(r) !== -1) dom.style[r] = css[r] + 'px';else dom.style[r] = css[r]; - } - }, - set: function (g, o) { - for (let att in o) { - if (att === 'txt') g.textContent = o[att]; - if (att === 'link') g.setAttributeNS(T.links, 'xlink:href', o[att]);else g.setAttributeNS(null, att, o[att]); - } - }, - get: function (dom, id) { - if (id === undefined) return dom; // root - else if (!isNaN(id)) return dom.childNodes[id]; // first child - else if (id instanceof Array) { - if (id.length === 2) return dom.childNodes[id[0]].childNodes[id[1]]; - if (id.length === 3) return dom.childNodes[id[0]].childNodes[id[1]].childNodes[id[2]]; - } - }, - dom: function (type, css, obj, dom, id) { - type = type || 'div'; - if (T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1) { - // is svg element - - if (type === 'svg') { - dom = document.createElementNS(T.svgns, 'svg'); - T.set(dom, obj); - - /* } else if ( type === 'use' ) { - dom = document.createElementNS( T.svgns, 'use' ); - T.set( dom, obj ); - */ - } else { - // create new svg if not def - if (dom === undefined) dom = document.createElementNS(T.svgns, 'svg'); - T.addAttributes(dom, type, obj, id); - } - } else { - // is html element - - if (dom === undefined) dom = document.createElementNS(T.htmls, type);else dom = dom.appendChild(document.createElementNS(T.htmls, type)); - } - if (css) dom.style.cssText = css; - if (id === undefined) return dom;else return dom.childNodes[id || 0]; - }, - addAttributes: function (dom, type, o, id) { - let g = document.createElementNS(T.svgns, type); - T.set(g, o); - T.get(dom, id).appendChild(g); - if (T.SVG_TYPE_G.indexOf(type) !== -1) g.style.pointerEvents = 'none'; - return g; - }, - clear: function (dom) { - T.purge(dom); - while (dom.firstChild) { - if (dom.firstChild.firstChild) T.clear(dom.firstChild); - dom.removeChild(dom.firstChild); - } - }, - purge: function (dom) { - let a = dom.attributes, - i, - n; - if (a) { - i = a.length; - while (i--) { - n = a[i].name; - if (typeof dom[n] === 'function') dom[n] = null; - } - } - a = dom.childNodes; - if (a) { - i = a.length; - while (i--) { - T.purge(dom.childNodes[i]); - } - } - }, - // ---------------------- - // SVG Effects function - // ---------------------- - - addSVGGlowEffect: function () { - if (document.getElementById('UILGlow') !== null) return; - let svgFilter = T.initUILEffects(); - let filter = T.addAttributes(svgFilter, 'filter', { - id: 'UILGlow', - x: '-20%', - y: '-20%', - width: '140%', - height: '140%' - }); - T.addAttributes(filter, 'feGaussianBlur', { - in: 'SourceGraphic', - stdDeviation: '3', - result: 'uilBlur' - }); - let feMerge = T.addAttributes(filter, 'feMerge', {}); - for (let i = 0; i <= 3; i++) { - T.addAttributes(feMerge, 'feMergeNode', { - in: 'uilBlur' - }); - } - T.addAttributes(feMerge, 'feMergeNode', { - in: 'SourceGraphic' - }); - }, - initUILEffects: function () { - let svgFilter = document.getElementById('UILSVGEffects'); - if (svgFilter === null) { - svgFilter = T.dom('svg', undefined, { - id: 'UILSVGEffects', - width: '0', - height: '0' - }); - document.body.appendChild(svgFilter); - } - return svgFilter; - }, - // ---------------------- - // Color function - // ---------------------- - - ColorLuma: function (hex, l) { - //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; - - if (hex === 'n') hex = '#000'; - - // validate hex string - hex = String(hex).replace(/[^0-9a-f]/gi, ''); - if (hex.length < 6) { - hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; - } - l = l || 0; - - // convert to decimal and change luminosity - let rgb = "#", - c, - i; - for (i = 0; i < 3; i++) { - c = parseInt(hex.substr(i * 2, 2), 16); - c = Math.round(Math.min(Math.max(0, c + c * l), 255)).toString(16); - rgb += ("00" + c).substr(c.length); - } - return rgb; - }, - findDeepInver: function (c) { - return c[0] * 0.3 + c[1] * .59 + c[2] * .11 <= 0.6; - }, - lerpColor: function (c1, c2, factor) { - let newColor = {}; - for (let i = 0; i < 3; i++) { - newColor[i] = c1[i] + (c2[i] - c1[i]) * factor; - } - return newColor; - }, - hexToHtml: function (v) { - v = v === undefined ? 0x000000 : v; - return "#" + ("000000" + v.toString(16)).substr(-6); - }, - htmlToHex: function (v) { - return v.toUpperCase().replace("#", "0x"); - }, - u255: function (c, i) { - return parseInt(c.substring(i, i + 2), 16) / 255; - }, - u16: function (c, i) { - return parseInt(c.substring(i, i + 1), 16) / 15; - }, - unpack: function (c) { - if (c.length == 7) return [T.u255(c, 1), T.u255(c, 3), T.u255(c, 5)];else if (c.length == 4) return [T.u16(c, 1), T.u16(c, 2), T.u16(c, 3)]; - }, - p255: function (c) { - let h = Math.round(c * 255).toString(16); - if (h.length < 2) h = '0' + h; - return h; - }, - pack: function (c) { - return '#' + T.p255(c[0]) + T.p255(c[1]) + T.p255(c[2]); - }, - htmlRgb: function (c) { - return 'rgb(' + Math.round(c[0] * 255) + ',' + Math.round(c[1] * 255) + ',' + Math.round(c[2] * 255) + ')'; - }, - pad: function (n) { - if (n.length == 1) n = '0' + n; - return n; - }, - rgbToHex: function (c) { - let r = Math.round(c[0] * 255).toString(16); - let g = Math.round(c[1] * 255).toString(16); - let b = Math.round(c[2] * 255).toString(16); - return '#' + T.pad(r) + T.pad(g) + T.pad(b); - - // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); - }, - hueToRgb: function (p, q, t) { - if (t < 0) t += 1; - if (t > 1) t -= 1; - if (t < 1 / 6) return p + (q - p) * 6 * t; - if (t < 1 / 2) return q; - if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t); - return p; - }, - rgbToHsl: function (c) { - let r = c[0], - g = c[1], - b = c[2], - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h = 0, - s = 0, - l = (min + max) / 2; - if (l > 0 && l < 1) s = delta / (l < 0.5 ? 2 * l : 2 - 2 * l); - if (delta > 0) { - if (max == r && max != g) h += (g - b) / delta; - if (max == g && max != b) h += 2 + (b - r) / delta; - if (max == b && max != r) h += 4 + (r - g) / delta; - h /= 6; - } - return [h, s, l]; - }, - hslToRgb: function (c) { - let p, - q, - h = c[0], - s = c[1], - l = c[2]; - if (s === 0) return [l, l, l];else { - q = l <= 0.5 ? l * (s + 1) : l + s - l * s; - p = l * 2 - q; - return [T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333)]; - } - }, - // ---------------------- - // SVG MODEL - // ---------------------- - - makeGradiant: function (type, settings, parent, colors) { - T.dom(type, null, settings, parent, 0); - let n = parent.childNodes[0].childNodes.length - 1, - c; - for (let i = 0; i < colors.length; i++) { - c = colors[i]; - //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); - T.dom('stop', null, { - offset: c[0] + '%', - 'stop-color': c[1], - 'stop-opacity': c[2] - }, parent, [0, n]); - } - }, - /*makeGraph: function () { - let w = 128; - let radius = 34; - let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 - //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 - //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 - - //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 - //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 - T.graph = svg; - },*/ - - makePad: function (model) { - let ww = 256; - let svg = T.dom('svg', T.css.basic + 'position:relative;', { - viewBox: '0 0 ' + ww + ' ' + ww, - width: ww, - height: ww, - preserveAspectRatio: 'none' - }); - let w = 200; - let d = (ww - w) * 0.5, - m = 20; - Tools.dom('rect', '', { - x: d, - y: d, - width: w, - height: w, - fill: T.colors.back - }, svg); // 0 - Tools.dom('rect', '', { - x: d + m * 0.5, - y: d + m * 0.5, - width: w - m, - height: w - m, - fill: T.colors.button - }, svg); // 1 - // Pointer - Tools.dom('line', '', { - x1: d + m * 0.5, - y1: ww * 0.5, - x2: d + (w - m * 0.5), - y2: ww * 0.5, - stroke: T.colors.back, - 'stroke-width': 2 - }, svg); // 2 - Tools.dom('line', '', { - x1: ww * 0.5, - x2: ww * 0.5, - y1: d + m * 0.5, - y2: d + (w - m * 0.5), - stroke: T.colors.back, - 'stroke-width': 2 - }, svg); // 3 - Tools.dom('circle', '', { - cx: ww * 0.5, - cy: ww * 0.5, - r: 5, - stroke: T.colors.text, - 'stroke-width': 5, - fill: 'none' - }, svg); // 4 - T.pad2d = svg; - }, - makeKnob: function (model) { - let w = 128; - let radius = 34; - let svg = T.dom('svg', T.css.basic + 'position:relative;', { - viewBox: '0 0 ' + w + ' ' + w, - width: w, - height: w, - preserveAspectRatio: 'none' - }); - T.dom('circle', '', { - cx: 64, - cy: 64, - r: radius, - fill: T.colors.button, - stroke: 'rgba(0,0,0,0.3)', - 'stroke-width': 8 - }, svg); //0 - T.dom('path', '', { - d: '', - stroke: T.colors.text, - 'stroke-width': 4, - fill: 'none', - 'stroke-linecap': 'round' - }, svg); //1 - T.dom('circle', '', { - cx: 64, - cy: 64, - r: radius + 7, - stroke: 'rgba(0,0,0,0.1)', - 'stroke-width': 7, - fill: 'none' - }, svg); //2 - T.dom('path', '', { - d: '', - stroke: 'rgba(255,255,255,0.3)', - 'stroke-width': 2, - fill: 'none', - 'stroke-linecap': 'round', - 'stroke-opacity': 0.5 - }, svg); //3 - T.knob = svg; - }, - makeCircular: function (model) { - let w = 128; - let radius = 40; - let svg = T.dom('svg', T.css.basic + 'position:relative;', { - viewBox: '0 0 ' + w + ' ' + w, - width: w, - height: w, - preserveAspectRatio: 'none' - }); - T.dom('circle', '', { - cx: 64, - cy: 64, - r: radius, - stroke: 'rgba(0,0,0,0.1)', - 'stroke-width': 10, - fill: 'none' - }, svg); //0 - T.dom('path', '', { - d: '', - stroke: T.colors.text, - 'stroke-width': 7, - fill: 'none', - 'stroke-linecap': 'butt' - }, svg); //1 - T.circular = svg; - }, - makeJoystick: function (model) { - //+' background:#f00;' - - let w = 128, - ccc; - let radius = Math.floor((w - 30) * 0.5); - let innerRadius = Math.floor(radius * 0.6); - let svg = T.dom('svg', T.css.basic + 'position:relative;', { - viewBox: '0 0 ' + w + ' ' + w, - width: w, - height: w, - preserveAspectRatio: 'none' - }); - T.dom('defs', null, {}, svg); - T.dom('g', null, {}, svg); - if (model === 0) { - // gradian background - ccc = [[40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0]]; - T.makeGradiant('radialGradient', { - id: 'grad', - cx: '50%', - cy: '50%', - r: '50%', - fx: '50%', - fy: '50%' - }, svg, ccc); - - // gradian shadow - ccc = [[60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0]]; - T.makeGradiant('radialGradient', { - id: 'gradS', - cx: '50%', - cy: '50%', - r: '50%', - fx: '50%', - fy: '50%' - }, svg, ccc); - - // gradian stick - let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; - let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; - ccc = [[30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1]]; - T.makeGradiant('radialGradient', { - id: 'gradIn', - cx: '50%', - cy: '50%', - r: '50%', - fx: '50%', - fy: '50%' - }, svg, ccc); - ccc = [[30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1]]; - T.makeGradiant('radialGradient', { - id: 'gradIn2', - cx: '50%', - cy: '50%', - r: '50%', - fx: '50%', - fy: '50%' - }, svg, ccc); - - // graph - - T.dom('circle', '', { - cx: 64, - cy: 64, - r: radius, - fill: 'url(#grad)' - }, svg); //2 - T.dom('circle', '', { - cx: 64 + 5, - cy: 64 + 10, - r: innerRadius + 10, - fill: 'url(#gradS)' - }, svg); //3 - T.dom('circle', '', { - cx: 64, - cy: 64, - r: innerRadius, - fill: 'url(#gradIn)' - }, svg); //4 - - T.joystick_0 = svg; - } else { - // gradian shadow - ccc = [[69, 'rgb(0,0,0)', 0], [70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0]]; - T.makeGradiant('radialGradient', { - id: 'gradX', - cx: '50%', - cy: '50%', - r: '50%', - fx: '50%', - fy: '50%' - }, svg, ccc); - T.dom('circle', '', { - cx: 64, - cy: 64, - r: radius, - fill: 'none', - stroke: 'rgba(100,100,100,0.25)', - 'stroke-width': '4' - }, svg); //2 - T.dom('circle', '', { - cx: 64, - cy: 64, - r: innerRadius + 14, - fill: 'url(#gradX)' - }, svg); //3 - T.dom('circle', '', { - cx: 64, - cy: 64, - r: innerRadius, - fill: 'none', - stroke: 'rgb(100,100,100)', - 'stroke-width': '4' - }, svg); //4 - - T.joystick_1 = svg; - } - }, - makeColorRing: function () { - let w = 256; - let svg = T.dom('svg', T.css.basic + 'position:relative;', { - viewBox: '0 0 ' + w + ' ' + w, - width: w, - height: w, - preserveAspectRatio: 'none' - }); - T.dom('defs', null, {}, svg); - T.dom('g', null, {}, svg); - let s = 30; //stroke - let r = (w - s) * 0.5; - let mid = w * 0.5; - let n = 24, - nudge = 8 / r / n * Math.PI, - a1 = 0; - let am, tan, d2, a2, ar, i, j, path, ccc; - let color = []; - for (i = 0; i <= n; ++i) { - d2 = i / n; - a2 = d2 * T.TwoPI; - am = (a1 + a2) * 0.5; - tan = 1 / Math.cos((a2 - a1) * 0.5); - ar = [Math.sin(a1), -Math.cos(a1), Math.sin(am) * tan, -Math.cos(am) * tan, Math.sin(a2), -Math.cos(a2)]; - color[1] = T.rgbToHex(T.hslToRgb([d2, 1, 0.5])); - if (i > 0) { - j = 6; - while (j--) { - ar[j] = (ar[j] * r + mid).toFixed(2); - } - path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; - ccc = [[0, color[0], 1], [100, color[1], 1]]; - T.makeGradiant('linearGradient', { - id: 'G' + i, - x1: ar[0], - y1: ar[1], - x2: ar[4], - y2: ar[5], - gradientUnits: "userSpaceOnUse" - }, svg, ccc); - T.dom('path', '', { - d: path, - 'stroke-width': s, - stroke: 'url(#G' + i + ')', - 'stroke-linecap': "butt" - }, svg, 1); - } - a1 = a2 - nudge; - color[0] = color[1]; - } - let tw = 84.90; - - // black / white - ccc = [[0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1]]; - T.makeGradiant('linearGradient', { - id: 'GL0', - x1: 0, - y1: mid - tw, - x2: 0, - y2: mid + tw, - gradientUnits: "userSpaceOnUse" - }, svg, ccc); - ccc = [[0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0]]; - T.makeGradiant('linearGradient', { - id: 'GL1', - x1: mid - 49.05, - y1: 0, - x2: mid + 98, - y2: 0, - gradientUnits: "userSpaceOnUse" - }, svg, ccc); - T.dom('g', null, { - 'transform-origin': '128px 128px', - 'transform': 'rotate(0)' - }, svg); //2 - T.dom('polygon', '', { - points: '78.95 43.1 78.95 212.85 226 128', - fill: 'red' - }, svg, 2); // 2,0 - T.dom('polygon', '', { - points: '78.95 43.1 78.95 212.85 226 128', - fill: 'url(#GL1)', - 'stroke-width': 1, - stroke: 'url(#GL1)' - }, svg, 2); //2,1 - T.dom('polygon', '', { - points: '78.95 43.1 78.95 212.85 226 128', - fill: 'url(#GL0)', - 'stroke-width': 1, - stroke: 'url(#GL0)' - }, svg, 2); //2,2 - T.dom('path', '', { - d: 'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', - fill: 'none', - 'stroke-width': 2, - stroke: '#000' - }, svg, 2); //2,3 - //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 - - T.dom('circle', '', { - cx: 128, - cy: 128, - r: 6, - 'stroke-width': 2, - stroke: '#000', - fill: 'none' - }, svg); //3 - - T.colorRing = svg; - }, - icon: function (type, color, w) { - w = w || 40; - //color = color || '#DEDEDE'; - let viewBox = '0 0 256 256'; - //let viewBox = '0 0 '+ w +' '+ w; - let t = [""]; - switch (type) { - case 'logo': - t[1] = ""; - break; - case 'donate': - t[1] = ""; - break; - case 'neo': - t[1] = ""; - break; - case 'phy': - t[1] = ""; - break; - case 'config': - t[1] = ""; - break; - case 'github': - t[1] = ""; - break; - case 'save': - t[1] = ""; - break; - } - t[2] = ""; - return t.join("\n"); - }, - logoFill_d: ` - M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 - L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 - M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 - Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z - `, - logo_github: ` - M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 - 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 - 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 - 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 - 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z - `, - logo_neo: ` - M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 - 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 - 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 - 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L - 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z - `, - logo_phy: ` - M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 - Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 - `, - logo_config: ` - M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 - L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 - Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 - `, - logo_donate: ` - M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 - 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 - 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 - 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 - 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 - Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 - 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 - 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 - 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M - 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 - 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 - 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 - 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 - 200.9 187.5 200.9 187.5 195.35 Z - ` - }; - T.setText(); + /** + * @author lth / https://github.com/lo-th + */ + + const T = { + + transition: 0.2, + + frag: document.createDocumentFragment(), + + colorRing: null, + joystick_0: null, + joystick_1: null, + circular: null, + knob: null, + pad2d: null, + + svgns: "http://www.w3.org/2000/svg", + links: "http://www.w3.org/1999/xlink", + htmls: "http://www.w3.org/1999/xhtml", + + DOM_SIZE: [ 'height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], + SVG_TYPE_D: [ 'pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix' ], + SVG_TYPE_G: [ 'svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject' ], + + PI: Math.PI, + TwoPI: Math.PI*2, + pi90: Math.PI * 0.5, + pi60: Math.PI/3, + + torad: Math.PI / 180, + todeg: 180 / Math.PI, + + clamp: ( v, min, max ) => { + + v = v < min ? min : v; + v = v > max ? max : v; + return v; + + }, + + isDivid: ( v ) => ( v*0.5 === Math.floor(v*0.5) ), + + size: { w: 240, h: 20, p: 30, s: 8 }, + + // ---------------------- + // COLOR + // ---------------------- + + defineColor: ( o, cc = T.colors ) => { + + let color = { ...cc }; + + let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize' ]; + let changeText = false; + + if( o.font ) o.fontFamily = o.font; + if( o.shadow ) o.fontShadow = o.shadow; + if( o.weight ) o.fontWeight = o.weight; + + if( o.fontColor ) o.text = o.fontColor; + if( o.color ) o.text = o.color; + + if( o.text ){ + color.text = o.text; + if( !o.fontColor && !o.color ){ + color.title = T.ColorLuma( o.text, -0.25 ); + color.titleoff = T.ColorLuma( o.text, -0.5 ); + } + color.textOver = T.ColorLuma( o.text, 0.25 ); + color.textSelect = T.ColorLuma( o.text, 0.5 ); + } + + if( o.button ){ + color.button = o.button; + color.border = T.ColorLuma( o.button, 0.1 ); + color.overoff = T.ColorLuma( o.button, 0.2 ); + } + + if( o.select ){ + color.select = o.select; + color.over = T.ColorLuma( o.select, -0.1 ); + } + + if( o.itemBg ) o.back = o.itemBg; + + if( o.back ){ + color.back = o.back; + color.backoff = T.ColorLuma( o.back, -0.1 ); + } + + if( o.fontSelect ) color.textSelect = o.fontSelect; + if( o.groupBorder ) color.gborder = o.groupBorder; + + //if( o.transparent ) o.bg = 'none' + //if( o.bg ) color.background = color.backgroundOver = o.bg + if( o.bgOver ) color.backgroundOver = o.bgOver; + + for( let m in color ){ + if(o[m]!==undefined) color[m] = o[m]; + } + + for( let m in o ){ + if( textChange.indexOf(m) !== -1 ) changeText = true; + } + + if( changeText ) T.defineText( color ); + + return color + + }, + + colors: { + + sx: 4,//4 + sy: 2,//2 + radius:2, + + showOver : 1, + //groupOver : 1, + + content:'none', + background: 'rgba(50,50,50,0.15)', + backgroundOver: 'rgba(50,50,50,0.3)', + + title : '#CCC', + titleoff : '#BBB', + text : '#DDD', + textOver : '#EEE', + textSelect : '#FFF', + + back:'rgba(0,0,0,0.2)', + backoff:'rgba(0,0,0,0.3)', + + // input and button border + border : '#4c4c4c', + borderSize : 1, + + gborder : 'none', + groups : 'none', + + + button : '#3c3c3c', + overoff : '#5c5c5c', + over : '#024699', + select : '#308AFF', + action: '#FF3300', + + //fontFamily: 'Tahoma', + fontFamily: 'Consolas, monospace', + //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", + fontWeight: 'normal', + fontShadow: 'none',//'#000', + fontSize:12, + + joyOver:'rgba(48,138,255,0.25)', + joyOut: 'rgba(100,100,100,0.5)', + joySelect: '#308AFF', + + + hide: 'rgba(0,0,0,0)', + + }, + + // style css + + css : { + + basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', + button:'display:flex; align-items:center; justify-content:center; text-align:center;', + middle:'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' + }, + + // svg path + + svgs: { + + g1:'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', + g2:'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', + + group:'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', + arrow:'M 3 8 L 8 5 3 2 3 8 Z', + + arrowDown:'M 5 8 L 8 3 2 3 5 8 Z', + arrowUp:'M 5 2 L 2 7 8 7 5 2 Z', + + solid:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', + body:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', + vehicle:'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', + articulation:'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', + character:'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', + terrain:'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', + joint:'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', + ray:'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', + collision:'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', + map:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + material:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + texture:'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', + object:'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', + none:'M 9 5 L 5 5 5 9 9 9 9 5 Z', + cursor:'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', + load:'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', + save:'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', + extern:'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z', + + }, + + rezone () { + Roots.needReZone = true; + }, + + getImput: function(){ + + return Roots.input ? true : false + + }, + + setStyle : function ( data ){ + + for ( var o in data ){ + if( T.colors[o] ) T.colors[o] = data[o]; + } + + T.setText(); + + }, + + // ---------------------- + // custom text + // ---------------------- + + defineText: function( o ){ + + T.setText( o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight ); + + }, + + setText: function( size, color, font, shadow, weight ){ + + let cc = T.colors; + + if( font === undefined ) font = cc.fontFamily; + if( size === undefined ) size = cc.fontSize; + if( shadow === undefined ) shadow = cc.fontShadow; + if( weight === undefined ) weight = cc.fontWeight; + if( color === undefined ) color = cc.text; + + if( isNaN(size) ){ if( size.search('em')===-1 ) size += 'px';} + else size += 'px'; + + + //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' + + T.css.txt = T.css.basic + T.css.middle + ' font-family:'+ font +'; font-weight:'+weight+'; font-size:'+size+'; color:'+cc.text+'; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; + if( shadow !== 'none' ) T.css.txt += ' text-shadow: 1px 1px 1px '+shadow+';'; + + T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; + T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; + + }, + + + // note + + //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container + + /*cloneColor: function () { + + let cc = Object.assign({}, T.colors ); + return cc; + + },*/ + + // intern function + + cloneCss: function () { + + //let cc = Object.assign({}, T.css ); + return { ...T.css }; + + }, + + clone: function ( o ) { + + return o.cloneNode( true ); + + }, + + setSvg: function( dom, type, value, id, id2 ){ + + if( id === -1 ) dom.setAttributeNS( null, type, value ); + else if( id2 !== undefined ) dom.childNodes[ id || 0 ].childNodes[ id2 || 0 ].setAttributeNS( null, type, value ); + else dom.childNodes[ id || 0 ].setAttributeNS( null, type, value ); + + }, + + setCss: function( dom, css ){ + + for( let r in css ){ + if( T.DOM_SIZE.indexOf(r) !== -1 ) dom.style[r] = css[r] + 'px'; + else dom.style[r] = css[r]; + } + + }, + + set: function( g, o ){ + + for( let att in o ){ + if( att === 'txt' ) g.textContent = o[ att ]; + if( att === 'link' ) g.setAttributeNS( T.links, 'xlink:href', o[ att ] ); + else g.setAttributeNS( null, att, o[ att ] ); + } + + }, + + get: function( dom, id ){ + + if( id === undefined ) return dom; // root + else if( !isNaN( id ) ) return dom.childNodes[ id ]; // first child + else if( id instanceof Array ){ + if(id.length === 2) return dom.childNodes[ id[0] ].childNodes[ id[1] ]; + if(id.length === 3) return dom.childNodes[ id[0] ].childNodes[ id[1] ].childNodes[ id[2] ]; + } + + }, + + dom : function ( type, css, obj, dom, id ) { + + type = type || 'div'; + + if( T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1 ){ // is svg element + + if( type ==='svg' ){ + + dom = document.createElementNS( T.svgns, 'svg' ); + T.set( dom, obj ); + + /* } else if ( type === 'use' ) { + + dom = document.createElementNS( T.svgns, 'use' ); + T.set( dom, obj ); + */ + } else { + // create new svg if not def + if( dom === undefined ) dom = document.createElementNS( T.svgns, 'svg' ); + T.addAttributes( dom, type, obj, id ); + + } + + } else { // is html element + + if( dom === undefined ) dom = document.createElementNS( T.htmls, type ); + else dom = dom.appendChild( document.createElementNS( T.htmls, type ) ); + + } + + if( css ) dom.style.cssText = css; + + if( id === undefined ) return dom; + else return dom.childNodes[ id || 0 ]; + + }, + + addAttributes : function( dom, type, o, id ){ + + let g = document.createElementNS( T.svgns, type ); + T.set( g, o ); + T.get( dom, id ).appendChild( g ); + if( T.SVG_TYPE_G.indexOf(type) !== -1 ) g.style.pointerEvents = 'none'; + return g; + + }, + + clear : function( dom ){ + + T.purge( dom ); + while (dom.firstChild) { + if ( dom.firstChild.firstChild ) T.clear( dom.firstChild ); + dom.removeChild( dom.firstChild ); + } + + }, + + purge : function ( dom ) { + + let a = dom.attributes, i, n; + if (a) { + i = a.length; + while(i--){ + n = a[i].name; + if (typeof dom[n] === 'function') dom[n] = null; + } + } + a = dom.childNodes; + if (a) { + i = a.length; + while(i--){ + T.purge( dom.childNodes[i] ); + } + } + + }, + + // ---------------------- + // SVG Effects function + // ---------------------- + + addSVGGlowEffect: function () { + + if ( document.getElementById( 'UILGlow') !== null ) return; + + let svgFilter = T.initUILEffects(); + + let filter = T.addAttributes( svgFilter, 'filter', { id: 'UILGlow', x: '-20%', y: '-20%', width: '140%', height: '140%' } ); + T.addAttributes( filter, 'feGaussianBlur', { in: 'SourceGraphic', stdDeviation: '3', result: 'uilBlur' } ); + let feMerge = T.addAttributes( filter, 'feMerge', { } ); + + for( let i = 0; i <= 3; i++ ) { + + T.addAttributes( feMerge, 'feMergeNode', { in: 'uilBlur' } ); + + } + + T.addAttributes( feMerge, 'feMergeNode', { in: 'SourceGraphic' } ); + + }, + + initUILEffects: function () { + + let svgFilter = document.getElementById( 'UILSVGEffects'); + + if ( svgFilter === null ) { + + svgFilter = T.dom( 'svg', undefined , { id: 'UILSVGEffects', width: '0', height: '0' } ); + document.body.appendChild( svgFilter ); + + } + + return svgFilter; + + }, + + // ---------------------- + // Color function + // ---------------------- + + ColorLuma : function ( hex, l ) { + + //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; + + if( hex === 'n' ) hex = '#000'; + + // validate hex string + hex = String(hex).replace(/[^0-9a-f]/gi, ''); + if (hex.length < 6) { + hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; + } + l = l || 0; + + // convert to decimal and change luminosity + let rgb = "#", c, i; + for (i = 0; i < 3; i++) { + c = parseInt(hex.substr(i*2,2), 16); + c = Math.round(Math.min(Math.max(0, c + (c * l)), 255)).toString(16); + rgb += ("00"+c).substr(c.length); + } + + return rgb; + + }, + + findDeepInver: function ( c ) { + + return (c[0] * 0.3 + c[1] * .59 + c[2] * .11) <= 0.6; + + }, + + lerpColor: function( c1, c2, factor ) { + let newColor = {}; + for ( let i = 0; i < 3; i++ ) { + newColor[i] = c1[ i ] + ( c2[ i ] - c1[ i ] ) * factor; + } + return newColor; + }, + + hexToHtml: function ( v ) { + v = v === undefined ? 0x000000 : v; + return "#" + ("000000" + v.toString(16)).substr(-6); + + }, + + htmlToHex: function ( v ) { + + return v.toUpperCase().replace("#", "0x"); + + }, + + u255: function (c, i) { + + return parseInt(c.substring(i, i + 2), 16) / 255; + + }, + + u16: function ( c, i ) { + + return parseInt(c.substring(i, i + 1), 16) / 15; + + }, + + unpack: function( c ){ + + if (c.length == 7) return [ T.u255(c, 1), T.u255(c, 3), T.u255(c, 5) ]; + else if (c.length == 4) return [ T.u16(c,1), T.u16(c,2), T.u16(c,3) ]; + + }, + + p255: function ( c ) { + let h = Math.round( ( c * 255 ) ).toString( 16 ); + if ( h.length < 2 ) h = '0' + h; + return h; + }, + + pack: function ( c ) { + + return '#' + T.p255( c[ 0 ] ) + T.p255( c[ 1 ] ) + T.p255( c[ 2 ] ); + + }, + + htmlRgb: function( c ){ + + return 'rgb(' + Math.round(c[0] * 255) + ','+ Math.round(c[1] * 255) + ','+ Math.round(c[2] * 255) + ')'; + + }, + + pad: function( n ){ + if(n.length == 1)n = '0' + n; + return n; + }, + + rgbToHex : function( c ){ + + let r = Math.round(c[0] * 255).toString(16); + let g = Math.round(c[1] * 255).toString(16); + let b = Math.round(c[2] * 255).toString(16); + return '#' + T.pad(r) + T.pad(g) + T.pad(b); + + // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); + + }, + + hueToRgb: function( p, q, t ){ + + if ( t < 0 ) t += 1; + if ( t > 1 ) t -= 1; + if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; + if ( t < 1 / 2 ) return q; + if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); + return p; + + }, + + rgbToHsl: function ( c ) { + + let r = c[0], g = c[1], b = c[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h = 0, s = 0, l = (min + max) / 2; + if (l > 0 && l < 1) s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); + if (delta > 0) { + if (max == r && max != g) h += (g - b) / delta; + if (max == g && max != b) h += (2 + (b - r) / delta); + if (max == b && max != r) h += (4 + (r - g) / delta); + h /= 6; + } + return [ h, s, l ]; + + }, + + hslToRgb: function ( c ) { + + let p, q, h = c[0], s = c[1], l = c[2]; + + if ( s === 0 ) return [ l, l, l ]; + else { + q = l <= 0.5 ? l * (s + 1) : l + s - ( l * s ); + p = l * 2 - q; + return [ T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333) ]; + } + + }, + + // ---------------------- + // SVG MODEL + // ---------------------- + + makeGradiant: function ( type, settings, parent, colors ) { + + T.dom( type, null, settings, parent, 0 ); + + let n = parent.childNodes[0].childNodes.length - 1, c; + + for( let i = 0; i < colors.length; i++ ){ + + c = colors[i]; + //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); + T.dom( 'stop', null, { offset:c[0]+'%', 'stop-color':c[1], 'stop-opacity':c[2] }, parent, [0,n] ); + + } + + }, + + /*makeGraph: function () { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 + //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 + //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + + //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 + //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.graph = svg; + + },*/ + + makePad: function ( model ) { + + let ww = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+ww+' '+ww, width:ww, height:ww, preserveAspectRatio:'none' } ); + let w = 200; + let d = (ww-w)*0.5, m = 20; + Tools.dom( 'rect', '', { x: d, y: d, width: w, height: w, fill:T.colors.back }, svg ); // 0 + Tools.dom( 'rect', '', { x: d+m*0.5, y: d+m*0.5, width: w - m , height: w - m, fill:T.colors.button }, svg ); // 1 + // Pointer + Tools.dom( 'line', '', { x1: d+(m*0.5), y1: ww *0.5, x2: d+(w-m*0.5), y2: ww * 0.5, stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 2 + Tools.dom( 'line', '', { x1: ww * 0.5, x2: ww * 0.5, y1: d+(m*0.5), y2: d+(w-m*0.5), stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 3 + Tools.dom( 'circle', '', { cx: ww * 0.5, cy: ww * 0.5, r:5, stroke: T.colors.text, 'stroke-width': 5, fill:'none' }, svg ); // 4 + T.pad2d = svg; + + }, + + makeKnob: function ( model ) { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'round' }, svg );//1 + T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.1)', 'stroke-width':7 , fill:'none'}, svg );//2 + T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.knob = svg; + + }, + + makeCircular: function ( model ) { + + let w = 128; + let radius = 40; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, stroke:'rgba(0,0,0,0.1)', 'stroke-width':10, fill:'none' }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':7, fill:'none', 'stroke-linecap':'butt' }, svg );//1 + T.circular = svg; + + }, + + makeJoystick: function ( model ) { + + //+' background:#f00;' + + let w = 128, ccc; + let radius = Math.floor((w-30)*0.5); + let innerRadius = Math.floor(radius*0.6); + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + if( model === 0 ){ + + + + // gradian background + ccc = [ [40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'grad', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian shadow + ccc = [ [60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradS', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian stick + let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; + let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; + + ccc = [ [30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + ccc = [ [30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn2', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // graph + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'url(#grad)' }, svg );//2 + T.dom( 'circle', '', { cx:64+5, cy:64+10, r:innerRadius+10, fill:'url(#gradS)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'url(#gradIn)' }, svg );//4 + + T.joystick_0 = svg; + + } else { + // gradian shadow + ccc = [ [69, 'rgb(0,0,0)', 0],[70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradX', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'none', stroke:'rgba(100,100,100,0.25)', 'stroke-width':'4' }, svg );//2 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius+14, fill:'url(#gradX)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'none', stroke:'rgb(100,100,100)', 'stroke-width':'4' }, svg );//4 + + T.joystick_1 = svg; + } + + + + }, + + makeColorRing: function () { + + let w = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + let s = 30;//stroke + let r =( w-s )*0.5; + let mid = w*0.5; + let n = 24, nudge = 8 / r / n * Math.PI, a1 = 0; + let am, tan, d2, a2, ar, i, j, path, ccc; + let color = []; + + for ( i = 0; i <= n; ++i) { + + d2 = i / n; + a2 = d2 * T.TwoPI; + am = (a1 + a2) * 0.5; + tan = 1 / Math.cos((a2 - a1) * 0.5); + + ar = [ + Math.sin(a1), -Math.cos(a1), + Math.sin(am) * tan, -Math.cos(am) * tan, + Math.sin(a2), -Math.cos(a2) + ]; + + color[1] = T.rgbToHex( T.hslToRgb([d2, 1, 0.5]) ); + + if (i > 0) { + + j = 6; + while(j--){ + ar[j] = ((ar[j]*r)+mid).toFixed(2); + } + + path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; + + ccc = [ [0,color[0],1], [100,color[1],1] ]; + T.makeGradiant( 'linearGradient', { id:'G'+i, x1:ar[0], y1:ar[1], x2:ar[4], y2:ar[5], gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'path', '', { d:path, 'stroke-width':s, stroke:'url(#G'+i+')', 'stroke-linecap':"butt" }, svg, 1 ); + + } + a1 = a2 - nudge; + color[0] = color[1]; + } + + let tw = 84.90; + + // black / white + ccc = [ [0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1] ]; + T.makeGradiant( 'linearGradient', { id:'GL0', x1:0, y1:mid-tw, x2:0, y2:mid+tw, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + ccc = [ [0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0] ]; + T.makeGradiant( 'linearGradient', { id:'GL1', x1:mid-49.05, y1:0, x2:mid+98, y2:0, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'g', null, { 'transform-origin': '128px 128px', 'transform':'rotate(0)' }, svg );//2 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'red' }, svg, 2 );// 2,0 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL1)','stroke-width':1, stroke:'url(#GL1)' }, svg, 2 );//2,1 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL0)','stroke-width':1, stroke:'url(#GL0)' }, svg, 2 );//2,2 + T.dom( 'path', '', { d:'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill:'none','stroke-width':2, stroke:'#000' }, svg, 2 );//2,3 + //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 + + T.dom( 'circle', '', { cx:128, cy:128, r:6, 'stroke-width':2, stroke:'#000', fill:'none' }, svg );//3 + + T.colorRing = svg; + + }, + + icon: function ( type, color, w ){ + + w = w || 40; + //color = color || '#DEDEDE'; + let viewBox = '0 0 256 256'; + //let viewBox = '0 0 '+ w +' '+ w; + let t = [""]; + switch(type){ + case 'logo': + t[1]=""; + break; + case 'donate': + t[1]=""; + break; + case 'neo': + t[1]=""; + break; + case 'phy': + t[1]=""; + break; + case 'config': + t[1]=""; + break; + case 'github': + t[1]=""; + break; + case 'save': + t[1]=""; + break; + } + t[2] = ""; + return t.join("\n"); + + }, + + logoFill_d:` + M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 + L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 + M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 + Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z + `, + + logo_github:` + M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 + 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 + 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 + 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 + 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z + `, + + logo_neo:` + M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 + 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 + 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 + 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L + 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z + `, + + logo_phy:` + M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 + Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 + `, + + logo_config:` + M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 + L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 + Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 + `, + + logo_donate:` + M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 + 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 + 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 + 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 + 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 + Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 + 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 + 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 + 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M + 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 + 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 + 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 + 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 + 200.9 187.5 200.9 187.5 195.35 Z + `, + + }; + + T.setText(); + const Tools = T; - ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile - - class Files { - //----------------------------- - // FILE TYPE - //----------------------------- - - static autoTypes(type) { - let t = []; - switch (type) { - case 'svg': - t = [{ - accept: { - 'image/svg+xml': '.svg' - } - }]; - break; - case 'wav': - t = [{ - accept: { - 'audio/wav': '.wav' - } - }]; - break; - case 'mp3': - t = [{ - accept: { - 'audio/mpeg': '.mp3' - } - }]; - break; - case 'mp4': - t = [{ - accept: { - 'video/mp4': '.mp4' - } - }]; - break; - case 'bin': - case 'hex': - t = [{ - description: 'Binary Files', - accept: { - 'application/octet-stream': ['.bin', '.hex'] - } - }]; - break; - case 'text': - t = [{ - description: 'Text Files', - accept: { - 'text/plain': ['.txt', '.text'], - 'text/html': ['.html', '.htm'] - } - }]; - break; - case 'json': - t = [{ - description: 'JSON Files', - accept: { - 'application/json': ['.json'] - } - }]; //text/plain - break; - case 'js': - t = [{ - description: 'JavaScript Files', - accept: { - 'text/javascript': ['.js'] - } - }]; - break; - case 'image': - t = [{ - description: 'Images', - accept: { - 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] - } - }]; - break; - case 'icon': - t = [{ - description: 'Icons', - accept: { - 'image/x-ico': ['.ico'] - } - }]; - break; - case 'lut': - t = [{ - description: 'Lut', - accept: { - 'text/plain': ['.cube', '.3dl'] - } - }]; - break; - } - return t; - } - - //----------------------------- - // LOAD - //----------------------------- - - static async load(o = {}) { - if (typeof window.showOpenFilePicker !== 'function') { - window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; - } - try { - let type = o.type || ''; - const options = { - excludeAcceptAllOption: type ? true : false, - multiple: false - //startIn:'./assets' - }; - options.types = Files.autoTypes(type); - - // create a new handle - const handle = await window.showOpenFilePicker(options); - const file = await handle[0].getFile(); - //let content = await file.text() - - if (!file) return null; - let fname = file.name; - let ftype = fname.substring(fname.lastIndexOf('.') + 1, fname.length); - const dataUrl = ['png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3']; - const dataBuf = ['sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf']; - const reader = new FileReader(); - if (dataUrl.indexOf(ftype) !== -1) reader.readAsDataURL(file);else if (dataBuf.indexOf(ftype) !== -1) reader.readAsArrayBuffer(file);else reader.readAsText(file); - reader.onload = function (e) { - let content = e.target.result; - switch (type) { - case 'image': - let img = new Image(); - img.onload = function () { - if (o.callback) o.callback(img, fname, ftype); - }; - img.src = content; - break; - case 'json': - if (o.callback) o.callback(JSON.parse(content), fname, ftype); - break; - default: - if (o.callback) o.callback(content, fname, ftype); - break; - } - }; - } catch (e) { - console.log(e); - if (o.always && o.callback) o.callback(null); - } - } - static showOpenFilePickerPolyfill(options) { - return new Promise(resolve => { - const input = document.createElement("input"); - input.type = "file"; - input.multiple = options.multiple; - input.accept = options.types.map(type => type.accept).flatMap(inst => Object.keys(inst).flatMap(key => inst[key])).join(","); - input.addEventListener("change", () => { - resolve([...input.files].map(file => { - return { - getFile: async () => new Promise(resolve => { - resolve(file); - }) - }; - })); - }); - input.click(); - }); - } - - //----------------------------- - // SAVE - //----------------------------- - - static async save(o = {}) { - let usePoly = false; - if (typeof window.showSaveFilePicker !== 'function') { - window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; - usePoly = true; - } - try { - let type = o.type || ''; - const options = { - suggestedName: o.name || 'hello', - data: o.data || '' - }; - options.types = Files.autoTypes(type); - options.finalType = Object.keys(options.types[0].accept)[0]; - options.suggestedName += options.types[0].accept[options.finalType][0]; - - // create a new handle - const handle = await window.showSaveFilePicker(options); - if (usePoly) return; - - // create a FileSystemWritableFileStream to write to - const file = await handle.createWritable(); - let blob = new Blob([options.data], { - type: options.finalType - }); - - // write our file - await file.write(blob); - - // close the file and write the contents to disk. - await file.close(); - } catch (e) { - console.log(e); - } - } - static showSaveFilePickerPolyfill(options) { - return new Promise(resolve => { - const a = document.createElement("a"); - a.download = options.suggestedName || "my-file.txt"; - let blob = new Blob([options.data], { - type: options.finalType - }); - a.href = URL.createObjectURL(blob); - a.addEventListener("click", () => { - resolve(setTimeout(() => URL.revokeObjectURL(a.href), 1000)); - }); - a.click(); - }); - } - - //----------------------------- - // FOLDER not possible in poly - //----------------------------- - - static async getFolder() { - try { - const handle = await window.showDirectoryPicker(); - const files = []; - for await (const entry of handle.values()) { - const file = await entry.getFile(); - files.push(file); - } - console.log(files); - return files; - } catch (e) { - console.log(e); - } - } + ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile + + + class Files { + + //----------------------------- + // FILE TYPE + //----------------------------- + + static autoTypes( type ) { + + let t = []; + + switch( type ){ + case 'svg': + t = [ { accept: { 'image/svg+xml': '.svg'} }, ]; + break; + case 'wav': + t = [ { accept: { 'audio/wav': '.wav'} }, ]; + break; + case 'mp3': + t = [ { accept: { 'audio/mpeg': '.mp3'} }, ]; + break; + case 'mp4': + t = [ { accept: { 'video/mp4': '.mp4'} }, ]; + break; + case 'bin': case 'hex': + t = [ { description: 'Binary Files', accept: { 'application/octet-stream': ['.bin', '.hex'] } }, ]; + break; + case 'text': + t = [ { description: 'Text Files', accept: { 'text/plain': ['.txt', '.text'], 'text/html': ['.html', '.htm'] } }, ]; + break; + case 'json': + t = [ { description: 'JSON Files', accept: { 'application/json': ['.json'] } }, ];//text/plain + break; + case 'js': + t = [ { description: 'JavaScript Files', accept: { 'text/javascript': ['.js'] } }, ]; + break; + case 'image': + t = [ { description: 'Images', accept: { 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] } }, ]; + break; + case 'icon': + t = [ { description: 'Icons', accept: { 'image/x-ico': ['.ico'] } }, ]; + break; + case 'lut': + t = [ { description: 'Lut', accept: { 'text/plain': ['.cube', '.3dl'] } }, ]; + break; + + } + + return t + + } + + + //----------------------------- + // LOAD + //----------------------------- + + static async load( o = {} ) { + + if (typeof window.showOpenFilePicker !== 'function') { + window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; + } + + try { + + let type = o.type || ''; + + const options = { + excludeAcceptAllOption: type ? true : false, + multiple: false, + //startIn:'./assets' + }; + + options.types = Files.autoTypes( type ); + + // create a new handle + const handle = await window.showOpenFilePicker( options ); + const file = await handle[0].getFile(); + //let content = await file.text() + + if( !file ) return null + + let fname = file.name; + let ftype = fname.substring( fname.lastIndexOf('.')+1, fname.length ); + + const dataUrl = [ 'png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3' ]; + const dataBuf = [ 'sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf' ]; + const reader = new FileReader(); + + if( dataUrl.indexOf( ftype ) !== -1 ) reader.readAsDataURL( file ); + else if( dataBuf.indexOf( ftype ) !== -1 ) reader.readAsArrayBuffer( file ); + else reader.readAsText( file ); + + reader.onload = function(e) { + + let content = e.target.result; + + switch(type){ + case 'image': + let img = new Image; + img.onload = function() { + if( o.callback ) o.callback( img, fname, ftype ); + }; + img.src = content; + break; + case 'json': + if( o.callback ) o.callback( JSON.parse( content ), fname, ftype ); + break; + default: + if( o.callback ) o.callback( content, fname, ftype ); + break; + } + + }; + + } catch(e) { + + console.log(e); + if( o.always && o.callback ) o.callback( null ); + + } + + } + + static showOpenFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const input = document.createElement("input"); + input.type = "file"; + input.multiple = options.multiple; + input.accept = options.types + .map((type) => type.accept) + .flatMap((inst) => Object.keys(inst).flatMap((key) => inst[key])) + .join(","); + + input.addEventListener("change", () => { + resolve( + [...input.files].map((file) => { + return { + getFile: async () => + new Promise((resolve) => { + resolve(file); + }), + }; + }) + ); + }); + + input.click(); + }) + } + + + //----------------------------- + // SAVE + //----------------------------- + + static async save( o = {} ) { + + let usePoly = false; + + if (typeof window.showSaveFilePicker !== 'function') { + window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; + usePoly = true; + } + + try { + + let type = o.type || ''; + + const options = { + suggestedName: o.name || 'hello', + data: o.data || '' + }; + + options.types = Files.autoTypes( type ); + options.finalType = Object.keys( options.types[0].accept )[0]; + options.suggestedName += options.types[0].accept[options.finalType][0]; + + + // create a new handle + const handle = await window.showSaveFilePicker( options ); + + if( usePoly ) return + + // create a FileSystemWritableFileStream to write to + const file = await handle.createWritable(); + + let blob = new Blob([ options.data ], { type: options.finalType }); + + // write our file + await file.write(blob); + + // close the file and write the contents to disk. + await file.close(); + + } catch(e) { + + console.log(e); + + } + + } + + static showSaveFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const a = document.createElement("a"); + a.download = options.suggestedName || "my-file.txt"; + let blob = new Blob([ options.data ], { type:options.finalType }); + a.href = URL.createObjectURL( blob ); + + a.addEventListener("click", () => { + resolve( + setTimeout( () => URL.revokeObjectURL(a.href), 1000 ) + ); + }); + a.click(); + }) + } + + + //----------------------------- + // FOLDER not possible in poly + //----------------------------- + + static async getFolder() { + + try { + + const handle = await window.showDirectoryPicker(); + const files = []; + for await (const entry of handle.values()) { + const file = await entry.getFile(); + files.push(file); + } + + console.log(files); + return files; + + } catch(e) { + + console.log(e); + + } + + } + + + + + + + + + + } - class V2 { - constructor(x = 0, y = 0) { - this.x = x; - this.y = y; - } - set(x, y) { - this.x = x; - this.y = y; - return this; - } - divide(v) { - this.x /= v.x; - this.y /= v.y; - return this; - } - multiply(v) { - this.x *= v.x; - this.y *= v.y; - return this; - } - multiplyScalar(scalar) { - this.x *= scalar; - this.y *= scalar; - return this; - } - divideScalar(scalar) { - return this.multiplyScalar(1 / scalar); - } - length() { - return Math.sqrt(this.x * this.x + this.y * this.y); - } - angle() { - // computes the angle in radians with respect to the positive x-axis - - var angle = Math.atan2(this.y, this.x); - if (angle < 0) angle += 2 * Math.PI; - return angle; - } - addScalar(s) { - this.x += s; - this.y += s; - return this; - } - negate() { - this.x *= -1; - this.y *= -1; - return this; - } - neg() { - this.x = -1; - this.y = -1; - return this; - } - isZero() { - return this.x === 0 && this.y === 0; - } - copy(v) { - this.x = v.x; - this.y = v.y; - return this; - } - equals(v) { - return v.x === this.x && v.y === this.y; - } - nearEquals(v, n) { - return v.x.toFixed(n) === this.x.toFixed(n) && v.y.toFixed(n) === this.y.toFixed(n); - } - lerp(v, alpha) { - if (v === null) { - this.x -= this.x * alpha; - this.y -= this.y * alpha; - } else { - this.x += (v.x - this.x) * alpha; - this.y += (v.y - this.y) * alpha; - } - return this; - } + class V2 { + + constructor( x = 0, y = 0 ) { + + this.x = x; + this.y = y; + + } + + set ( x, y ) { + + this.x = x; + this.y = y; + return this; + + } + + divide ( v ) { + + this.x /= v.x; + this.y /= v.y; + return this; + + } + + multiply ( v ) { + + this.x *= v.x; + this.y *= v.y; + return this; + + } + + multiplyScalar ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + return this; + + } + + divideScalar ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + } + + length () { + + return Math.sqrt( this.x * this.x + this.y * this.y ); + + } + + angle () { + + // computes the angle in radians with respect to the positive x-axis + + var angle = Math.atan2( this.y, this.x ); + + if ( angle < 0 ) angle += 2 * Math.PI; + + return angle; + + } + + addScalar ( s ) { + + this.x += s; + this.y += s; + return this; + + } + + negate () { + + this.x *= -1; + this.y *= -1; + return this; + + } + + neg () { + + this.x = -1; + this.y = -1; + return this; + + } + + isZero () { + + return ( this.x === 0 && this.y === 0 ); + + } + + copy ( v ) { + + this.x = v.x; + this.y = v.y; + + return this; + + } + + equals ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) ); + + } + + nearEquals ( v, n ) { + + return ( ( v.x.toFixed(n) === this.x.toFixed(n) ) && ( v.y.toFixed(n) === this.y.toFixed(n) ) ); + + } + + lerp ( v, alpha ) { + + if( v === null ){ + this.x -= this.x * alpha; + this.y -= this.y * alpha; + } else { + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + } + + return this; + + } + } - /** - * @author lth / https://github.com/lo-th - */ - - class Proto { - constructor(o = {}) { - // disable mouse controle - this.lock = o.lock || false; - - // for button - this.neverlock = false; - - // only simple space - this.isSpace = o.isSpace || false; - - // if is on gui or group - this.main = o.main || null; - this.isUI = o.isUI || false; - this.group = o.group || null; - this.isListen = false; - this.top = 0; - this.ytop = 0; - this.dx = o.dx || 0; - this.isSelectable = o.selectable !== undefined ? o.selectable : false; - this.unselectable = o.unselect !== undefined ? o.unselect : this.isSelectable; - this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' - - this.css = this.main ? this.main.css : Tools.css; - this.colors = Tools.defineColor(o, this.main ? this.group ? this.group.colors : this.main.colors : Tools.colors); - this.overEffect = this.colors.showOver; - this.svgs = Tools.svgs; - this.zone = { - x: 0, - y: 0, - w: 0, - h: 0, - d: 0 - }; - this.local = new V2().neg(); - this.isCanvasOnly = false; - this.isSelect = false; - - // percent of title - this.p = o.p !== undefined ? o.p : Tools.size.p; - this.w = this.isUI ? this.main.size.w : Tools.size.w; - if (o.w !== undefined) this.w = o.w; - this.h = this.isUI ? this.main.size.h : Tools.size.h; - if (o.h !== undefined) this.h = o.h; - if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h;else this.lock = true; - - // decale for canvas only - this.fw = o.fw || 0; - this.autoWidth = o.auto || true; // auto width or flex - this.isOpen = false; //false// open statu - - // radius for toolbox - this.radius = o.radius || this.colors.radius; - this.transition = o.transition || Tools.transition; - - // only for number - this.isNumber = false; - this.noNeg = o.noNeg || false; - this.allEqual = o.allEqual || false; - - // only most simple - this.mono = false; - - // stop listening for edit slide text - this.isEdit = false; - - // no title - this.simple = o.simple || false; - if (this.simple) this.sa = 0; - - // define obj size - this.setSize(this.w); - - // title size - if (o.sa !== undefined) this.sa = o.sa; - if (o.sb !== undefined) this.sb = o.sb; - if (this.simple) this.sb = this.w - this.sa; - - // last number size for slide - this.sc = o.sc === undefined ? 47 : o.sc; - - // for listening object - this.objectLink = null; - this.isSend = false; - this.objectKey = null; - this.txt = o.name || ''; - this.name = o.rename || this.txt; - this.target = o.target || null; - - // callback - this.callback = o.callback === undefined ? null : o.callback; - this.endCallback = null; - this.openCallback = o.openCallback === undefined ? null : o.openCallback; - this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; - - // if no callback take one from group or gui - if (this.callback === null && this.isUI && this.main.callback !== null) { - this.callback = this.group ? this.group.callback : this.main.callback; - } - - // elements - this.c = []; - - // style - this.s = []; - this.useFlex = this.isUI ? this.main.useFlex : false; - let flexible = this.useFlex ? 'display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;' : 'float:left;'; - this.c[0] = Tools.dom('div', this.css.basic + flexible + 'position:relative; height:20px;'); - this.s[0] = this.c[0].style; - - // bottom margin - this.margin = this.colors.sy; - this.mtop = 0; - let marginDiv = Tools.isDivid(this.margin); - if (this.isUI && this.margin) { - this.s[0].boxSizing = 'content-box'; - if (marginDiv) { - this.mtop = this.margin * 0.5; - //this.s[0].borderTop = '${this.mtop}px solid transparent' - //console.log(`${this.mtop}px solid transparent`) - this.s[0].borderTop = this.mtop + 'px solid transparent'; - this.s[0].borderBottom = this.mtop + 'px solid transparent'; - } else { - this.s[0].borderBottom = this.margin + 'px solid transparent'; - } - } - - // with title - if (!this.simple) { - this.c[1] = Tools.dom('div', this.css.txt + this.css.middle); - this.s[1] = this.c[1].style; - this.c[1].textContent = this.name; - this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; - } - if (o.pos) { - this.s[0].position = 'absolute'; - for (let p in o.pos) { - this.s[0][p] = o.pos[p]; - } - this.mono = true; - } - if (o.css) this.s[0].cssText = o.css; - } - - // ---------------------- - // make the node - // ---------------------- - - init() { - this.ytop = this.top + this.mtop; - this.zone.h = this.h + this.margin; - this.zone.w = this.w; - let s = this.s; // style cache - let c = this.c; // div cach - - s[0].height = this.h + 'px'; - if (this.isUI) s[0].background = this.colors.background; - if (!this.autoWidth && this.useFlex) { - s[0].flex = '1 0 auto'; - s[0].minWidth = this.minw + 'px'; - s[0].textAlign = 'center'; - } else { - if (this.isUI) s[0].width = '100%'; - } - - //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; - if (c[1] !== undefined && this.autoWidth) { - s[1] = c[1].style; - s[1].top = 1 + 'px'; - s[1].height = this.h - 2 + 'px'; - } - let frag = Tools.frag; - for (let i = 1, lng = c.length; i !== lng; i++) { - if (c[i] !== undefined) { - frag.appendChild(c[i]); - s[i] = c[i].style; - } - } - let pp = this.target !== null ? this.target : this.isUI ? this.main.inner : document.body; - if (this.ontop) pp.insertAdjacentElement('afterbegin', c[0]);else pp.appendChild(c[0]); - c[0].appendChild(frag); - this.rSize(); - - // ! solo proto - if (!this.isUI) { - this.c[0].style.pointerEvents = 'auto'; - Roots.add(this); - } - } - addTransition() { - if (this.baseH && this.transition && this.isUI) { - this.c[0].style.transition = 'height ' + this.transition + 's ease-out'; - } - } - - // from Tools - - dom(type, css, obj, dom, id) { - return Tools.dom(type, css, obj, dom, id); - } - setSvg(dom, type, value, id, id2) { - Tools.setSvg(dom, type, value, id, id2); - } - setCss(dom, css) { - Tools.setCss(dom, css); - } - clamp(value, min, max) { - return Tools.clamp(value, min, max); - } - getColorRing() { - if (!Tools.colorRing) Tools.makeColorRing(); - return Tools.clone(Tools.colorRing); - } - getJoystick(model) { - if (!Tools['joystick_' + model]) Tools.makeJoystick(model); - return Tools.clone(Tools['joystick_' + model]); - } - getCircular(model) { - if (!Tools.circular) Tools.makeCircular(model); - return Tools.clone(Tools.circular); - } - getKnob(model) { - if (!Tools.knob) Tools.makeKnob(model); - return Tools.clone(Tools.knob); - } - getPad2d(model) { - if (!Tools.pad2d) Tools.makePad(model); - return Tools.clone(Tools.pad2d); - } - - // from Roots - - cursor(name) { - Roots.cursor(name); - } - - ///////// - - update() {} - reset() {} - - ///////// - - content() { - return this.c[0]; - } - getDom() { - return this.c[0]; - } - uiout() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.background; - } - uiover() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.backgroundOver; - } - rename(s) { - if (this.c[1] !== undefined) this.c[1].textContent = s; - } - listen() { - this.isListen = Roots.addListen(this); - return this; - } - listening() { - if (this.objectLink === null) return; - if (this.isSend) return; - if (this.isEdit) return; - this.setValue(this.objectLink[this.objectKey]); - } - setValue(v) { - if (this.isNumber) this.value = this.numValue(v); - //else if( v instanceof Array && v.length === 1 ) v = v[0]; - else this.value = v; - this.update(); - } - - // ---------------------- - // update every change - // ---------------------- - - onChange(f) { - if (this.isSpace) return; - this.callback = f || null; - return this; - } - - // ---------------------- - // update only on end - // ---------------------- - - onFinishChange(f) { - if (this.isSpace) return; - this.callback = null; - this.endCallback = f; - return this; - } - - // ---------------------- - // event on open close - // ---------------------- - - onOpen(f) { - this.openCallback = f; - return this; - } - onClose(f) { - this.closeCallback = f; - return this; - } - - // ---------------------- - // send back value - // ---------------------- - - send(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - this.isSend = true; - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - if (this.callback) this.callback(v, this.objectKey); - this.isSend = false; - } - sendEnd(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - if (this.endCallback) this.endCallback(v); - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - } - - // ---------------------- - // clear node - // ---------------------- - - dispose() { - if (this.isListen) Roots.removeListen(this); - Tools.clear(this.c[0]); - if (this.target !== null) { - if (this.group !== null) this.group.clearOne(this);else this.target.removeChild(this.c[0]); - } else { - if (this.isUI) this.main.clearOne(this);else document.body.removeChild(this.c[0]); - } - if (!this.isUI) Roots.remove(this); - this.c = null; - this.s = null; - this.callback = null; - this.target = null; - this.isListen = false; - } - clear() {} - - // ---------------------- - // change size - // ---------------------- - - getWidth() { - let nw = Roots.getWidth(this); - if (nw) this.w = nw; - } - setSize(sx) { - if (!this.autoWidth) return; - this.w = sx; - if (this.simple) { - this.sb = this.w - this.sa; - } else { - let pp = this.w * (this.p / 100); - //this.sa = Math.floor( pp + 10 ) - //this.sb = Math.floor( this.w - pp - 20 ) - this.sa = Math.floor(pp + 8); - this.sb = Math.floor(this.w - pp - 16); - } - } - rSize() { - if (!this.autoWidth) return; - if (!this.isUI) this.s[0].width = this.w + 'px'; - if (!this.simple) this.s[1].width = this.sa + 'px'; - } - - // ---------------------- - // for numeric value - // ---------------------- - - setTypeNumber(o) { - this.isNumber = true; - this.value = 0; - if (o.value !== undefined) { - if (typeof o.value === 'string') this.value = o.value * 1;else this.value = o.value; - } - this.min = o.min === undefined ? -Infinity : o.min; - this.max = o.max === undefined ? Infinity : o.max; - this.precision = o.precision === undefined ? 2 : o.precision; - let s; - switch (this.precision) { - case 0: - s = 1; - break; - case 1: - s = 0.1; - break; - case 2: - s = 0.01; - break; - case 3: - s = 0.001; - break; - case 4: - s = 0.0001; - break; - case 5: - s = 0.00001; - break; - case 6: - s = 0.000001; - break; - } - this.step = o.step === undefined ? s : o.step; - this.range = this.max - this.min; - this.value = this.numValue(this.value); - } - numValue(n) { - if (this.noNeg) n = Math.abs(n); - return Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1; - } - - // ---------------------- - // EVENTS DEFAULT - // ---------------------- - - handleEvent(e) { - if (this.lock) return; - if (this.neverlock) Roots.lock = false; - if (!this[e.type]) return console.error(e.type, 'this type of event no existe !'); - - // TODO !!!! - - //if( this.marginDiv ) z.d -= this.margin * 0.5 - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 - - return this[e.type](e); - } - wheel(e) { - return false; - } - mousedown(e) { - return false; - } - mousemove(e) { - return false; - } - mouseup(e) { - return false; - } - keydown(e) { - return false; - } - keyup(e) { - return false; - } - - // ---------------------- - // object referency - // ---------------------- - - setReferency(obj, key) { - this.objectLink = obj; - this.objectKey = key; - } - display(v = false) { - this.s[0].visibility = v ? 'visible' : 'hidden'; - } - - // ---------------------- - // resize height - // ---------------------- - - open() { - if (this.isOpen) return; - this.isOpen = true; - Roots.needResize = true; - if (this.openCallback) this.openCallback(); - } - close() { - if (!this.isOpen) return; - this.isOpen = false; - Roots.needResize = true; - if (this.closeCallback) this.closeCallback(); - } - needZone() { - Roots.needReZone = true; - } - rezone() { - Roots.needReZone = true; - } - - // ---------------------- - // INPUT - // ---------------------- - - select() {} - unselect() {} - setInput(Input) { - Roots.setInput(Input, this); - } - upInput(x, down) { - return Roots.upInput(x, down); - } - - // ---------------------- - // special item - // ---------------------- - - selected(b) { - this.isSelect = b || false; - } + /** + * @author lth / https://github.com/lo-th + */ + + class Proto { + constructor(o = {}) { + // disable mouse controle + this.lock = o.lock || false; + + // for button + this.neverlock = false; + + // only simple space + this.isSpace = o.isSpace || false; + + // if is on gui or group + this.main = o.main || null; + this.isUI = o.isUI || false; + this.group = o.group || null; + + this.isListen = false; + + this.top = 0; + this.ytop = 0; + + this.dx = o.dx || 0; + + this.isSelectable = o.selectable !== undefined ? o.selectable : false; + this.unselectable = + o.unselect !== undefined ? o.unselect : this.isSelectable; + + this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' + + this.css = this.main ? this.main.css : Tools.css; + + this.colors = Tools.defineColor( + o, + this.main + ? this.group + ? this.group.colors + : this.main.colors + : Tools.colors + ); + + this.overEffect = this.colors.showOver; + + this.svgs = Tools.svgs; + + this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; + this.local = new V2().neg(); + + this.isCanvasOnly = false; + this.isSelect = false; + + // percent of title + this.p = o.p !== undefined ? o.p : Tools.size.p; + + this.w = this.isUI ? this.main.size.w : Tools.size.w; + if (o.w !== undefined) this.w = o.w; + + this.h = this.isUI ? this.main.size.h : Tools.size.h; + if (o.h !== undefined) this.h = o.h; + if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; + else this.lock = true; + + // decale for canvas only + this.fw = o.fw || 0; + + this.autoWidth = o.auto || true; // auto width or flex + this.isOpen = false; //false// open statu + + // radius for toolbox + this.radius = o.radius || this.colors.radius; + + this.transition = o.transition || Tools.transition; + + // only for number + this.isNumber = false; + this.noNeg = o.noNeg || false; + this.allEqual = o.allEqual || false; + + // only most simple + this.mono = false; + + // stop listening for edit slide text + this.isEdit = false; + + // no title + this.simple = o.simple || false; + if (this.simple) this.sa = 0; + + // define obj size + this.setSize(this.w); + + // title size + if (o.sa !== undefined) this.sa = o.sa; + if (o.sb !== undefined) this.sb = o.sb; + if (this.simple) this.sb = this.w - this.sa; + + // last number size for slide + this.sc = o.sc === undefined ? 47 : o.sc; + + // for listening object + this.objectLink = null; + this.isSend = false; + this.objectKey = null; + + this.txt = o.name || ""; + this.name = o.rename || this.txt; + this.target = o.target || null; + + // callback + this.callback = o.callback === undefined ? null : o.callback; + this.endCallback = null; + this.openCallback = o.openCallback === undefined ? null : o.openCallback; + this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; + + // if no callback take one from group or gui + if (this.callback === null && this.isUI && this.main.callback !== null) { + this.callback = this.group ? this.group.callback : this.main.callback; + } + + // elements + this.c = []; + + // style + this.s = []; + + this.useFlex = this.isUI ? this.main.useFlex : false; + let flexible = this.useFlex + ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" + : "float:left;"; + + this.c[0] = Tools.dom( + "div", + this.css.basic + flexible + "position:relative; height:20px;" + ); + + this.s[0] = this.c[0].style; + + // bottom margin + this.margin = this.colors.sy; + this.mtop = 0; + let marginDiv = Tools.isDivid(this.margin); + + if (this.isUI && this.margin) { + this.s[0].boxSizing = "content-box"; + if (marginDiv) { + this.mtop = this.margin * 0.5; + //this.s[0].borderTop = '${this.mtop}px solid transparent' + //console.log(`${this.mtop}px solid transparent`) + this.s[0].borderTop = this.mtop + "px solid transparent"; + this.s[0].borderBottom = this.mtop + "px solid transparent"; + } else { + this.s[0].borderBottom = this.margin + "px solid transparent"; + } + } + + // with title + if (!this.simple) { + this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); + this.s[1] = this.c[1].style; + this.c[1].textContent = this.name; + this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; + } + + if (o.pos) { + this.s[0].position = "absolute"; + for (let p in o.pos) { + this.s[0][p] = o.pos[p]; + } + this.mono = true; + } + + if (o.css) this.s[0].cssText = o.css; + } + + // ---------------------- + // make the node + // ---------------------- + + init() { + this.ytop = this.top + this.mtop; + + this.zone.h = this.h + this.margin; + this.zone.w = this.w; + + let s = this.s; // style cache + let c = this.c; // div cach + + s[0].height = this.h + "px"; + + if (this.isUI) s[0].background = this.colors.background; + + if (!this.autoWidth && this.useFlex) { + s[0].flex = "1 0 auto"; + s[0].minWidth = this.minw + "px"; + s[0].textAlign = "center"; + } else { + if (this.isUI) s[0].width = "100%"; + } + + //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; + if (c[1] !== undefined && this.autoWidth) { + s[1] = c[1].style; + s[1].top = 1 + "px"; + s[1].height = this.h - 2 + "px"; + } + + let frag = Tools.frag; + + for (let i = 1, lng = c.length; i !== lng; i++) { + if (c[i] !== undefined) { + frag.appendChild(c[i]); + s[i] = c[i].style; + } + } + + let pp = + this.target !== null + ? this.target + : this.isUI + ? this.main.inner + : document.body; + + if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); + else pp.appendChild(c[0]); + + c[0].appendChild(frag); + + this.rSize(); + + // ! solo proto + if (!this.isUI) { + this.c[0].style.pointerEvents = "auto"; + Roots.add(this); + } + } + + addTransition() { + if (this.baseH && this.transition && this.isUI) { + this.c[0].style.transition = "height " + this.transition + "s ease-out"; + } + } + + // from Tools + + dom(type, css, obj, dom, id) { + return Tools.dom(type, css, obj, dom, id); + } + + setSvg(dom, type, value, id, id2) { + Tools.setSvg(dom, type, value, id, id2); + } + + setCss(dom, css) { + Tools.setCss(dom, css); + } + + clamp(value, min, max) { + return Tools.clamp(value, min, max); + } + + getColorRing() { + if (!Tools.colorRing) Tools.makeColorRing(); + return Tools.clone(Tools.colorRing); + } + + getJoystick(model) { + if (!Tools["joystick_" + model]) Tools.makeJoystick(model); + return Tools.clone(Tools["joystick_" + model]); + } + + getCircular(model) { + if (!Tools.circular) Tools.makeCircular(model); + return Tools.clone(Tools.circular); + } + + getKnob(model) { + if (!Tools.knob) Tools.makeKnob(model); + return Tools.clone(Tools.knob); + } + + getPad2d(model) { + if (!Tools.pad2d) Tools.makePad(model); + return Tools.clone(Tools.pad2d); + } + + // from Roots + + cursor(name) { + Roots.cursor(name); + } + + ///////// + + update() {} + + reset() {} + + ///////// + + content() { + return this.c[0]; + } + + getDom() { + return this.c[0]; + } + + uiout() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.background; + } + + uiover() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.backgroundOver; + } + + rename(s) { + if (this.c[1] !== undefined) this.c[1].textContent = s; + } + + listen() { + this.isListen = Roots.addListen(this); + return this; + } + + listening() { + // modified by Fedemarino + if (this.objectLink === null) return; + if (this.isSend) return; + if (this.isEdit) return; + // check if value has changed + let hasChanged = this.setValue(this.objectLink[this.objectKey]); + return hasChanged; + } + + setValue(v) { + const old = this.value; + if (this.isNumber) this.value = this.numValue(v); + //else if( v instanceof Array && v.length === 1 ) v = v[0]; + else this.value = v; + this.update(); + let hasChanged = false; + if (old !== this.value) { + hasChanged = true; + } + + return hasChanged; + } + + // ---------------------- + // update every change + // ---------------------- + + onChange(f) { + if (this.isSpace) return; + this.callback = f || null; + return this; + } + + // ---------------------- + // update only on end + // ---------------------- + + onFinishChange(f) { + if (this.isSpace) return; + this.callback = null; + this.endCallback = f; + return this; + } + + // ---------------------- + // event on open close + // ---------------------- + + onOpen(f) { + this.openCallback = f; + return this; + } + + onClose(f) { + this.closeCallback = f; + return this; + } + + // ---------------------- + // send back value + // ---------------------- + + send(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + this.isSend = true; + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + if (this.callback) this.callback(v, this.objectKey); + this.isSend = false; + } + + sendEnd(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + if (this.endCallback) this.endCallback(v); + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + } + + // ---------------------- + // clear node + // ---------------------- + + dispose() { + if (this.isListen) Roots.removeListen(this); + + Tools.clear(this.c[0]); + + if (this.target !== null) { + if (this.group !== null) this.group.clearOne(this); + else this.target.removeChild(this.c[0]); + } else { + if (this.isUI) this.main.clearOne(this); + else document.body.removeChild(this.c[0]); + } + + if (!this.isUI) Roots.remove(this); + + this.c = null; + this.s = null; + this.callback = null; + this.target = null; + this.isListen = false; + } + + clear() {} + + // ---------------------- + // change size + // ---------------------- + + getWidth() { + let nw = Roots.getWidth(this); + if (nw) this.w = nw; + } + + setSize(sx) { + if (!this.autoWidth) return; + + this.w = sx; + + if (this.simple) { + this.sb = this.w - this.sa; + } else { + let pp = this.w * (this.p / 100); + //this.sa = Math.floor( pp + 10 ) + //this.sb = Math.floor( this.w - pp - 20 ) + this.sa = Math.floor(pp + 8); + this.sb = Math.floor(this.w - pp - 16); + } + } + + rSize() { + if (!this.autoWidth) return; + if (!this.isUI) this.s[0].width = this.w + "px"; + if (!this.simple) this.s[1].width = this.sa + "px"; + } + + // ---------------------- + // for numeric value + // ---------------------- + + setTypeNumber(o) { + this.isNumber = true; + + this.value = 0; + if (o.value !== undefined) { + if (typeof o.value === "string") this.value = o.value * 1; + else this.value = o.value; + } + + this.min = o.min === undefined ? -Infinity : o.min; + this.max = o.max === undefined ? Infinity : o.max; + this.precision = o.precision === undefined ? 2 : o.precision; + + let s; + + switch (this.precision) { + case 0: + s = 1; + break; + case 1: + s = 0.1; + break; + case 2: + s = 0.01; + break; + case 3: + s = 0.001; + break; + case 4: + s = 0.0001; + break; + case 5: + s = 0.00001; + break; + case 6: + s = 0.000001; + break; + } + + this.step = o.step === undefined ? s : o.step; + this.range = this.max - this.min; + this.value = this.numValue(this.value); + } + + numValue(n) { + if (this.noNeg) n = Math.abs(n); + return ( + Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 + ); + } + + // ---------------------- + // EVENTS DEFAULT + // ---------------------- + + handleEvent(e) { + if (this.lock) return; + if (this.neverlock) Roots.lock = false; + if (!this[e.type]) + return console.error(e.type, "this type of event no existe !"); + + // TODO !!!! + + //if( this.marginDiv ) z.d -= this.margin * 0.5 + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 + + return this[e.type](e); + } + + wheel(e) { + return false; + } + mousedown(e) { + return false; + } + mousemove(e) { + return false; + } + mouseup(e) { + return false; + } + keydown(e) { + return false; + } + keyup(e) { + return false; + } + + // ---------------------- + // object referency + // ---------------------- + + setReferency(obj, key) { + this.objectLink = obj; + this.objectKey = key; + } + + display(v = false) { + this.s[0].visibility = v ? "visible" : "hidden"; + } + + // ---------------------- + // resize height + // ---------------------- + + open() { + if (this.isOpen) return; + this.isOpen = true; + Roots.needResize = true; + if (this.openCallback) this.openCallback(); + } + + close() { + if (!this.isOpen) return; + this.isOpen = false; + Roots.needResize = true; + if (this.closeCallback) this.closeCallback(); + } + + needZone() { + Roots.needReZone = true; + } + + rezone() { + Roots.needReZone = true; + } + + // ---------------------- + // INPUT + // ---------------------- + + select() {} + + unselect() {} + + setInput(Input) { + Roots.setInput(Input, this); + } + + upInput(x, down) { + return Roots.upInput(x, down); + } + + // ---------------------- + // special item + // ---------------------- + + selected(b) { + this.isSelect = b || false; + } } - class Bool extends Proto { - constructor(o = {}) { - super(o); - this.value = o.value || false; - this.model = o.mode !== undefined ? o.mode : 0; - this.onName = o.rename || this.txt; - if (o.onName) o.onname = o.onName; - if (o.onname) this.onName = o.onname; - this.inh = o.inh || Math.floor(this.h * 0.8); - this.inw = o.inw || 36; - let cc = this.colors; - if (this.model === 0) { - let t = Math.floor(this.h * 0.5) - (this.inh - 2) * 0.5; - this.c[2] = this.dom('div', this.css.basic + 'background:' + cc.inputBg + '; height:' + (this.inh - 2) + 'px; width:' + this.inw + 'px; top:' + t + 'px; border-radius:10px; border:2px solid ' + cc.back); - this.c[3] = this.dom('div', this.css.basic + 'height:' + (this.inh - 6) + 'px; width:16px; top:' + (t + 2) + 'px; border-radius:10px; background:' + cc.button + ';'); - } else { - this.p = 0; - if (this.c[1] !== undefined) this.c[1].textContent = ''; - this.c[2] = this.dom('div', this.css.txt + this.css.button + 'top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.borderSize + 'px solid ' + cc.border + '; border-radius:' + this.radius + 'px;'); - } - this.stat = -1; - this.init(); - this.update(); - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown(e) { - this.value = !this.value; - this.update(true); - return this.mousemove(e); - } - mousemove(e) { - this.cursor('pointer'); - return this.mode(true); - } - reset() { - this.cursor(); - return this.mode(); - } - - // ---------------------- - // MODE - // ---------------------- - - mode(over) { - let change = false; - let cc = this.colors, - s = this.s, - n, - v = this.value; - if (over) n = v ? 4 : 3;else n = v ? 2 : 1; - if (this.stat !== n) { - this.stat = n; - if (this.model !== 0) { - switch (n) { - case 1: - s[2].color = cc.text; - s[2].background = cc.button; - break; - case 2: - s[2].color = cc.textSelect; - s[2].background = cc.select; - break; - case 3: - s[2].color = cc.textOver; - s[2].background = cc.overoff; - break; - case 4: - s[2].color = cc.textOver; - s[2].background = cc.over; - break; - } - this.c[2].innerHTML = v ? this.onName : this.name; - } else { - switch (n) { - case 1: - s[2].background = s[2].borderColor = cc.backoff; - s[3].background = cc.button; - break; - // off out - case 2: - s[2].background = s[2].borderColor = cc.back; - s[3].background = cc.textOver; - break; - // on over - case 3: - s[2].background = s[2].borderColor = cc.back; - s[3].background = cc.overoff; - break; - // off over - case 4: - s[2].background = s[2].borderColor = cc.backoff; - s[3].background = cc.textSelect; - break; - // on out - } - s[3].marginLeft = v ? '17px' : '2px'; - this.c[1].textContent = v ? this.onName : this.name; - } - change = true; - } - return change; - } - - // ---------------------- - - update(up) { - this.mode(); - if (up) this.send(); - } - rSize() { - super.rSize(); - let s = this.s; - let w = this.w - 10 - this.inw; - if (this.model === 0) { - s[2].left = w + 'px'; - s[3].left = w + 'px'; - } else { - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - } - } + class Bool extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || false; + this.model = o.mode !== undefined ? o.mode : 0; + + this.onName = o.rename || this.txt; + if( o.onName ) o.onname = o.onName; + if( o.onname ) this.onName = o.onname; + + this.inh = o.inh || Math.floor( this.h*0.8 ); + this.inw = o.inw || 36; + + let cc = this.colors; + + if( this.model === 0 ){ + let t = Math.floor(this.h*0.5)-((this.inh-2)*0.5); + this.c[2] = this.dom( 'div', this.css.basic + 'background:'+ cc.inputBg +'; height:'+(this.inh-2)+'px; width:'+this.inw+'px; top:'+t+'px; border-radius:10px; border:2px solid '+ cc.back ); + this.c[3] = this.dom( 'div', this.css.basic + 'height:'+(this.inh-6)+'px; width:16px; top:'+(t+2)+'px; border-radius:10px; background:'+ cc.button+';' ); + } else { + this.p = 0; + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + } + + this.stat = -1; + + this.init(); + this.update(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + this.value = !this.value; + this.update( true ); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + this.cursor('pointer'); + return this.mode( true ) + + } + + reset () { + + this.cursor(); + return this.mode() + + } + + // ---------------------- + // MODE + // ---------------------- + + mode ( over ) { + + let change = false; + let cc = this.colors, s = this.s, n, v = this.value; + + if( over ) n = v ? 4 : 3; + else n = v ? 2 : 1; + + if( this.stat !== n ){ + + this.stat = n; + + if( this.model !== 0 ){ + + switch( n ){ + + case 1: s[2].color = cc.text; s[2].background = cc.button; break; + case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; + case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; + case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; + + } + + this.c[2].innerHTML = v ? this.onName : this.name; + + } else { + + switch( n ){ + + case 1: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.button; break;// off out + case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break;// on over + case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break;// off over + case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break;// on out + + } + + s[3].marginLeft = v ? '17px' : '2px'; + this.c[1].textContent = v ? this.onName : this.name; + + } + + change = true; + + } + + return change + + } + + // ---------------------- + + update ( up ) { + + this.mode(); + if( up ) this.send(); + + } + + rSize () { + + super.rSize(); + + let s = this.s; + let w = (this.w - 10 ) - this.inw; + if( this.model === 0 ){ + s[2].left = w + 'px'; + s[3].left = w + 'px'; + } else { + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + } + + } + } - class Button extends Proto { - constructor(o = {}) { - super(o); - this.value = ''; - if (o.value !== undefined) this.value = o.value; - this.values = o.value || this.txt; - if (o.values) this.values = o.values; - if (!o.values && !o.value) this.txt = ''; - this.onName = o.onName || null; - this.on = false; - - // force button width - this.bw = o.forceWidth || 0; - if (o.bw) this.bw = o.bw; - this.space = o.space || 3; - if (typeof this.values === 'string') this.values = [this.values]; - this.isDown = false; - this.neverlock = true; - this.res = 0; - this.lng = this.values.length; - this.tmp = []; - this.stat = []; - let sel, - cc = this.colors; - for (let i = 0; i < this.lng; i++) { - sel = false; - if (this.values[i] === this.value && this.isSelectable) sel = true; - this.c[i + 2] = this.dom('div', this.css.txt + this.css.button + 'top:1px; height:' + (this.h - 2) + 'px; border:' + cc.borderSize + 'px solid ' + cc.border + '; border-radius:' + this.radius + 'px;'); - this.c[i + 2].style.background = sel ? cc.select : cc.button; - this.c[i + 2].style.color = sel ? cc.textSelect : cc.text; - this.c[i + 2].innerHTML = this.values[i]; - this.stat[i] = sel ? 3 : 1; - } - if (this.txt === '') this.p = 0; - if (!o.value && !o.values || this.p === 0) { - if (this.c[1] !== undefined) this.c[1].textContent = ''; - } - this.init(); - } - onOff() { - this.on = !this.on; - this.label(this.on ? this.onName : this.value); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return -1; - let i = this.lng; - let t = this.tmp; - while (i--) { - if (l.x > t[i][0] && l.x < t[i][2]) return i; - } - return -1; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (!this.isDown) return false; - this.isDown = false; - if (this.res !== -1) { - if (this.value === this.values[this.res] && this.unselectable) this.value = '';else this.value = this.values[this.res]; - if (this.onName !== null) this.onOff(); - this.send(); - } - return this.mousemove(e); - } - mousedown(e) { - if (this.isDown) return false; - this.isDown = true; - return this.mousemove(e); - } - mousemove(e) { - let up = false; - this.res = this.testZone(e); - if (this.res !== -1) { - this.cursor('pointer'); - up = this.modes(this.isDown ? 3 : 2, this.res); - } else { - up = this.reset(); - } - return up; - } - - // ---------------------- - - modes(N = 1, id = -1) { - let i = this.lng, - w, - n, - r = false; - while (i--) { - n = N; - w = this.isSelectable ? this.values[i] === this.value : false; - if (i === id) { - if (w && n === 2) n = 3; - } else { - n = 1; - if (w) n = 4; - } - - //if( this.mode( n, i ) ) r = true - r = this.mode(n, i); - } - return r; - } - mode(n, id) { - //if(!this.s) return false - - let change = false; - let cc = this.colors, - s = this.s; - let i = id + 2; - if (this.stat[id] !== n) { - this.stat[id] = n; - switch (n) { - case 1: - s[i].color = cc.text; - s[i].background = cc.button; - break; - case 2: - s[i].color = cc.textOver; - s[i].background = cc.overoff; - break; - case 3: - s[i].color = cc.textOver; - s[i].background = cc.over; - break; - case 4: - s[i].color = cc.textSelect; - s[i].background = cc.select; - break; - } - change = true; - } - return change; - } - - // ---------------------- - - reset() { - this.res = -1; - this.cursor(); - return this.modes(); - } - label(string, n) { - n = n || 2; - this.c[n].textContent = string; - } - switchValues(n, string) { - this.c[n + 2].innerHTML = this.values[n] = string; - } - icon(string, y = 0, n = 2) { - //if(y) this.s[n].margin = ( y ) +'px 0px'; - this.s[n].padding = y + 'px 0px'; - this.c[n].innerHTML = string; - return this; - } - rSize() { - super.rSize(); - let s = this.s; - let w = this.sb; - let d = this.sa; - let i = this.lng; - let sx = this.colors.sx; //this.space; - //let size = Math.floor( ( w-(dc*(i-1)) ) / i ); - let size = (w - sx * (i - 1)) / i; - if (this.bw) { - size = this.bw < size ? this.bw : size; - //d = Math.floor((this.w-( (size * i) + (dc * (i-1)) ))*0.5) - d = (this.w - (size * i + sx * (i - 1))) * 0.5; - } - while (i--) { - //this.tmp[i] = [ Math.floor( d + ( size * i ) + ( dc * i )), size ]; - this.tmp[i] = [d + size * i + sx * i, size]; - this.tmp[i][2] = this.tmp[i][0] + this.tmp[i][1]; - s[i + 2].left = this.tmp[i][0] + 'px'; - s[i + 2].width = this.tmp[i][1] + 'px'; - } - } + class Button extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = ''; + if( o.value !== undefined ) this.value = o.value; + + this.values = o.value || this.txt; + if( o.values ) this.values = o.values; + + if( !o.values && !o.value ) this.txt = ''; + + this.onName = o.onName || null; + + this.on = false; + + // force button width + this.bw = o.forceWidth || 0; + if(o.bw) this.bw = o.bw; + this.space = o.space || 3; + + if( typeof this.values === 'string' ) this.values = [ this.values ]; + + this.isDown = false; + this.neverlock = true; + this.res = 0; + + this.lng = this.values.length; + this.tmp = []; + this.stat = []; + + let sel, cc = this.colors; + + for( let i = 0; i < this.lng; i++ ){ + + sel = false; + if( this.values[i] === this.value && this.isSelectable ) sel = true; + + this.c[i+2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[i+2].style.background = sel ? cc.select : cc.button; + this.c[i+2].style.color = sel ? cc.textSelect : cc.text; + this.c[i+2].innerHTML = this.values[i]; + this.stat[i] = sel ? 3:1; + + } + + + if( this.txt==='' ) this.p = 0; + + if( (!o.value && !o.values) || this.p === 0 ){ + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + } + + + this.init(); + + } + + onOff() { + + this.on = !this.on; + this.label( this.on ? this.onName : this.value ); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1 + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0 ? Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)) : cc.text; - this.setSvg(this.c[3], 'stroke', color, 1); - break; - case 1: - // down - - this.s[2].color = cc.textOver; - this.setSvg(this.c[3], 'stroke', cc.backoff, 0); - color = this.model > 0 ? Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)) : cc.textOver; - this.setSvg(this.c[3], 'stroke', color, 1); - break; - } - this.cmode = mode; - return true; - } - reset() { - this.isDown = false; - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'circular'; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - this.isDown = false; - this.sendEnd(); - return this.mode(0); - } - mousedown(e) { - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove(e); - return this.mode(1); - } - mousemove(e) { - if (!this.isDown) return; - - //console.log('over') - - let off = this.offset; - off.x = this.w * 0.5 - (e.clientX - this.zone.x); - off.y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); - this.r = off.angle() - this.pi90; - this.r = (this.r % this.twoPi + this.twoPi) % this.twoPi; - if (this.oldr !== null) { - let dif = this.r - this.oldr; - this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; - if (dif > 6) this.r = 0; - if (dif < -6) this.r = this.twoPi; - } - let steps = 1 / this.twoPi; - let value = this.r * steps; - let n = this.range * value + this.min - this.old; - if (n >= this.step || n <= this.step) { - n = ~~(n / this.step); - this.value = this.numValue(this.old + n * this.step); - this.update(true); - this.old = this.value; - this.oldr = this.r; - } - } - wheel(e) { - let name = this.testZone(e); - if (name === 'circular') { - let v = this.value - this.step * e.delta; - if (v > this.max) { - v = this.isCyclic ? this.min : this.max; - } else if (v < this.min) { - v = this.isCyclic ? this.max : this.min; - } - this.setValue(v); - this.old = v; - this.update(true); - return true; - } - return false; - } - - // ---------------------- - - makePath() { - let r = 40; - let d = 24; - let a = this.percent * this.twoPi - 0.001; - let x2 = r + r * Math.sin(a) + d; - let y2 = r - r * Math.cos(a) + d; - let big = a > Math.PI ? 1 : 0; - return "M " + (r + d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; - } - update(up) { - this.c[2].textContent = this.value; - this.percent = (this.value - this.min) / this.range; - this.setSvg(this.c[3], 'd', this.makePath(), 1); - if (this.model > 0) { - let cc = this.colors; - let color = Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)); - this.setSvg(this.c[3], 'stroke', color, 1); - } - if (up) this.send(); - } + class Circular extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + + this.setTypeNumber( o ); + + this.twoPi = Tools.TwoPI; + this.pi90 = Tools.pi90; + + this.offset = new V2(); + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w +'px'; + this.c[0].style.display = 'block'; + + if(this.c[1] !== undefined) { + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + + + this.percent = 0; + this.cmode = 0; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); + + // svg + + this.c[3] = this.getCircular(); + + this.setSvg( this.c[3], 'stroke', cc.back, 0 ); + this.setSvg( this.c[3], 'd', this.makePath(), 1 ); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 '+this.diam+' '+this.diam ); + this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); + + this.init(); + this.update(); + + } + + mode ( mode ) { + + if( this.cmode === mode ) return false; + + let cc = this.colors; + let color; + + switch( mode ){ + case 0: // base + + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'stroke', cc.back, 0); + color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.text; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + case 1: // down + + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'stroke', cc.backoff, 0); + color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.textOver; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + } + + this.cmode = mode; + return true; + + } + + reset () { + + this.isDown = false; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'circular'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0); + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1); + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + //console.log('over') + + let off = this.offset; + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = off.angle() - this.pi90; + this.r = (((this.r%this.twoPi)+this.twoPi)%this.twoPi); + + if( this.oldr !== null ){ + + let dif = this.r - this.oldr; + this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; + + if( dif > 6 ) this.r = 0; + if( dif < -6 ) this.r = this.twoPi; + + } + + let steps = 1 / this.twoPi; + let value = this.r * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = ~~ ( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'circular' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + // ---------------------- + + makePath () { + + let r = 40; + let d = 24; + let a = this.percent * this.twoPi - 0.001; + let x2 = (r + r * Math.sin(a)) + d; + let y2 = (r - r * Math.cos(a)) + d; + let big = a > Math.PI ? 1 : 0; + return "M " + (r+d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = ( this.value - this.min ) / this.range; + + this.setSvg( this.c[3], 'd', this.makePath(), 1 ); + + if ( this.model > 0 ) { + + let cc = this.colors; + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 1 ); + + } + + if( up ) this.send(); + + } + } - class Color extends Proto { - constructor(o = {}) { - super(o); - - //this.autoHeight = true; - - this.ctype = o.ctype || 'hex'; - this.wfixe = 256; - this.cw = this.sb > 256 ? 256 : this.sb; - if (o.cw != undefined) this.cw = o.cw; - - // color up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - this.baseH = this.h; - this.offset = new V2(); - this.decal = new V2(); - this.pp = new V2(); - let cc = this.colors; - - // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) - - this.c[2] = this.dom('div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h - 2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};`); - //this.s[2] = this.c[2].style; - - //this.s[2].textShadow = 'none' - - /*if( this.up ){ - this.s[2].top = 'auto'; - this.s[2].bottom = '2px'; - }*/ - - //this.c[0].style.textAlign = 'center'; - this.c[0].style.display = 'block'; - this.c[3] = this.getColorRing(); - this.c[3].style.visibility = 'hidden'; - this.hsl = null; - this.value = '#ffffff'; - if (o.value !== undefined) { - if (o.value instanceof Array) this.value = Tools.rgbToHex(o.value);else if (!isNaN(o.value)) this.value = Tools.hexToHtml(o.value);else this.value = o.value; - } - this.bcolor = null; - this.isDown = false; - this.fistDown = false; - this.notext = o.notext || false; - this.tr = 98; - this.tsl = Math.sqrt(3) * this.tr; - this.hue = 0; - this.d = 256; - this.init(); - this.setColor(this.value); - if (o.open !== undefined) this.open(); - } - testZone(mx, my) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (this.up && this.isOpen) { - if (l.y > this.wfixe) return 'title';else return 'color'; - } else { - if (l.y < this.baseH + 2) return 'title';else if (this.isOpen) return 'color'; - } - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - this.isDown = false; - this.d = 256; - } - mousedown(e) { - let name = this.testZone(e.clientX, e.clientY); - - //if( !name ) return; - if (name === 'title') { - if (!this.isOpen) this.open();else this.close(); - return true; - } - if (name === 'color') { - this.isDown = true; - this.fistDown = true; - this.mousemove(e); - } - } - mousemove(e) { - let name = this.testZone(e.clientX, e.clientY); - let off, - d, - hue, - sat, - lum, - rad, - x, - y, - rr, - T = Tools; - if (name === 'title') this.cursor('pointer'); - if (name === 'color') { - off = this.offset; - off.x = e.clientX - (this.zone.x + this.decal.x + this.mid); - off.y = e.clientY - (this.zone.y + this.decal.y + this.mid) - this.ytop; - d = off.length() * this.ratio; - rr = off.angle(); - if (rr < 0) rr += 2 * T.PI; - if (d < 128) this.cursor('crosshair');else if (!this.isDown) this.cursor(); - if (this.isDown) { - if (this.fistDown) { - this.d = d; - this.fistDown = false; - } - if (this.d < 128) { - if (this.d > this.tr) { - // outside hue - - hue = (rr + T.pi90) / T.TwoPI; - this.hue = (hue + 1) % 1; - this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); - } else { - // triangle - - x = off.x * this.ratio; - y = off.y * this.ratio; - let rr = this.hue * T.TwoPI + T.PI; - if (rr < 0) rr += 2 * T.PI; - rad = Math.atan2(-y, x); - if (rad < 0) rad += 2 * T.PI; - let rad0 = (rad + T.pi90 + T.TwoPI + rr) % T.TwoPI, - rad1 = rad0 % (2 / 3 * T.PI) - T.pi60, - a = 0.5 * this.tr, - b = Math.tan(rad1) * a, - r = Math.sqrt(x * x + y * y), - maxR = Math.sqrt(a * a + b * b); - if (r > maxR) { - let dx = Math.tan(rad1) * r; - let rad2 = Math.atan(dx / maxR); - if (rad2 > T.pi60) rad2 = T.pi60;else if (rad2 < -T.pi60) rad2 = -T.pi60; - rad += rad2 - rad1; - rad0 = (rad + T.pi90 + T.TwoPI + rr) % T.TwoPI, rad1 = rad0 % (2 / 3 * T.PI) - T.pi60; - b = Math.tan(rad1) * a; - r = maxR = Math.sqrt(a * a + b * b); - } - lum = Math.sin(rad0) * r / this.tsl + 0.5; - let w = 1 - Math.abs(lum - 0.5) * 2; - sat = (Math.cos(rad0) * r + this.tr / 2) / (1.5 * this.tr) / w; - sat = T.clamp(sat, 0, 1); - this.setHSL([this.hsl[0], sat, lum]); - } - } - } - } - } - - // ---------------------- - - setHeight() { - this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; - this.s[0].height = this.h + 'px'; - this.zone.h = this.h; - } - parentHeight(t) { - if (this.group !== null) this.group.calc(t);else if (this.isUI) this.main.calc(t); - } - open() { - super.open(); - this.setHeight(); - if (this.up) this.zone.y -= this.wfixe + 5; - let t = this.h - this.baseH; - this.s[3].visibility = 'visible'; - //this.s[3].display = 'block'; - this.parentHeight(t); - } - close() { - super.close(); - if (this.up) this.zone.y += this.wfixe + 5; - let t = this.h - this.baseH; - this.setHeight(); - this.s[3].visibility = 'hidden'; - //this.s[3].display = 'none'; - this.parentHeight(-t); - } - update(up) { - let cc = Tools.rgbToHex(Tools.hslToRgb([this.hsl[0], 1, 0.5])); - this.moveMarkers(); - this.value = this.bcolor; - this.setSvg(this.c[3], 'fill', cc, 2, 0); - this.s[2].background = this.bcolor; - if (!this.notext) this.c[2].textContent = Tools.htmlToHex(this.bcolor); - this.invert = Tools.findDeepInver(this.rgb); - this.s[2].color = this.invert ? '#fff' : '#000'; - if (!up) return; - if (this.ctype === 'array') this.send(this.rgb); - if (this.ctype === 'rgb') this.send(Tools.htmlRgb(this.rgb)); - if (this.ctype === 'hex') this.send(Tools.htmlToHex(this.value)); - if (this.ctype === 'html') this.send(); - } - setValue(v) { - if (v instanceof Array) this.value = Tools.rgbToHex(v);else if (!isNaN(v)) this.value = Tools.hexToHtml(v);else this.value = v; - this.setColor(this.value); - this.update(); - } - setColor(color) { - let unpack = Tools.unpack(color); - if (this.bcolor !== color && unpack) { - this.bcolor = color; - this.rgb = unpack; - this.hsl = Tools.rgbToHsl(this.rgb); - this.hue = this.hsl[0]; - this.update(); - } - return this; - } - setHSL(hsl) { - this.hsl = hsl; - this.rgb = Tools.hslToRgb(hsl); - this.bcolor = Tools.rgbToHex(this.rgb); - this.update(true); - return this; - } - moveMarkers() { - let p = this.pp; - let T = Tools; - this.invert ? '#fff' : '#000'; - let a = this.hsl[0] * T.TwoPI; - let third = 2 / 3 * T.PI; - let r = this.tr; - let h = this.hsl[0]; - let s = this.hsl[1]; - let l = this.hsl[2]; - let angle = (a - T.pi90) * T.todeg; - h = -a + T.pi90; - let hx = Math.cos(h) * r; - let hy = -Math.sin(h) * r; - let sx = Math.cos(h - third) * r; - let sy = -Math.sin(h - third) * r; - let vx = Math.cos(h + third) * r; - let vy = -Math.sin(h + third) * r; - let mx = (sx + vx) / 2, - my = (sy + vy) / 2; - a = (1 - 2 * Math.abs(l - .5)) * s; - let x = sx + (vx - sx) * l + (hx - mx) * a; - let y = sy + (vy - sy) * l + (hy - my) * a; - p.set(x, y).addScalar(128); - - //let ff = (1-l)*255; - // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); - - this.setSvg(this.c[3], 'transform', 'rotate(' + angle + ' )', 2); - this.setSvg(this.c[3], 'cx', p.x, 3); - this.setSvg(this.c[3], 'cy', p.y, 3); - this.setSvg(this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3); - this.setSvg(this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3); - this.setSvg(this.c[3], 'fill', this.bcolor, 3); - } - rSize() { - //Proto.prototype.rSize.call( this ); - super.rSize(); - let s = this.s; - s[2].width = this.sb + 'px'; - s[2].left = this.sa + 'px'; - - //console.log(this.sb) - - this.cw = this.sb > 256 ? 256 : this.sb; - this.rSizeColor(this.cw); - this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - //s[3].left = this.decal.x + 'px'; - } - rSizeColor(w) { - if (w === this.wfixe) return; - this.wfixe = w; - let s = this.s; - - //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; - this.mid = Math.floor(this.wfixe * 0.5); - this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.wfixe + ' ' + this.wfixe); - s[3].width = this.wfixe + 'px'; - s[3].height = this.wfixe + 'px'; - //s[3].left = this.decal.x + 'px'; - s[3].top = this.decal.y + 'px'; - this.ratio = 256 / this.wfixe; - this.square = 1 / (60 * (this.wfixe / 256)); - this.setHeight(); - } + class Color extends Proto { + + constructor( o = {} ) { + + super( o ); + + //this.autoHeight = true; + + this.ctype = o.ctype || 'hex'; + + this.wfixe = 256; + + this.cw = this.sb > 256 ? 256 : this.sb; + if(o.cw != undefined ) this.cw = o.cw; + + + + // color up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + this.baseH = this.h; + + this.offset = new V2(); + this.decal = new V2(); + this.pp = new V2(); + + let cc = this.colors; + + // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) + + this.c[2] = this.dom( 'div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};` ); + //this.s[2] = this.c[2].style; + + //this.s[2].textShadow = 'none' + + /*if( this.up ){ + this.s[2].top = 'auto'; + this.s[2].bottom = '2px'; + }*/ + + //this.c[0].style.textAlign = 'center'; + this.c[0].style.display = 'block'; + + this.c[3] = this.getColorRing(); + this.c[3].style.visibility = 'hidden'; + + this.hsl = null; + this.value = '#ffffff'; + if( o.value !== undefined ){ + if( o.value instanceof Array ) this.value = Tools.rgbToHex( o.value ); + else if(!isNaN(o.value)) this.value = Tools.hexToHtml( o.value ); + else this.value = o.value; + } + + this.bcolor = null; + this.isDown = false; + this.fistDown = false; + + this.notext = o.notext || false; + + this.tr = 98; + this.tsl = Math.sqrt(3) * this.tr; + + this.hue = 0; + this.d = 256; + + this.init(); + + this.setColor( this.value ); + + if( o.open !== undefined ) this.open(); + + } + + testZone ( mx, my ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + if( this.up && this.isOpen ){ + + if( l.y > this.wfixe ) return 'title' + else return 'color' + + } else { + + if( l.y < this.baseH+2 ) return 'title' + else if( this.isOpen ) return 'color' + + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.d = 256; + + } + + mousedown ( e ) { + + + let name = this.testZone( e.clientX, e.clientY ); + + + //if( !name ) return; + if(name === 'title'){ + if( !this.isOpen ) this.open(); + else this.close(); + return true; + } + + + if( name === 'color' ){ + + this.isDown = true; + this.fistDown = true; + this.mousemove( e ); + } + } + + mousemove ( e ) { + + let name = this.testZone( e.clientX, e.clientY ); + + let off, d, hue, sat, lum, rad, x, y, rr, T = Tools; + + if( name === 'title' ) this.cursor('pointer'); + + if( name === 'color' ){ + + off = this.offset; + off.x = e.clientX - ( this.zone.x + this.decal.x + this.mid ); + off.y = e.clientY - ( this.zone.y + this.decal.y + this.mid ) - this.ytop; + d = off.length() * this.ratio; + rr = off.angle(); + if(rr < 0) rr += 2 * T.PI; + + + if ( d < 128 ) this.cursor('crosshair'); + else if( !this.isDown ) this.cursor(); + + if( this.isDown ){ + + if( this.fistDown ){ + this.d = d; + this.fistDown = false; + } + + if ( this.d < 128 ) { + + if ( this.d > this.tr ) { // outside hue + + hue = ( rr + T.pi90 ) / T.TwoPI; + this.hue = (hue + 1) % 1; + this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); + + } else { // triangle + + x = off.x * this.ratio; + y = off.y * this.ratio; + + let rr = (this.hue * T.TwoPI) + T.PI; + if(rr < 0) rr += 2 * T.PI; + + rad = Math.atan2(-y, x); + if(rad < 0) rad += 2 * T.PI; + + let rad0 = ( rad + T.pi90 + T.TwoPI + rr ) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60), + a = 0.5 * this.tr, + b = Math.tan(rad1) * a, + r = Math.sqrt(x*x + y*y), + maxR = Math.sqrt(a*a + b*b); + + if( r > maxR ) { + let dx = Math.tan(rad1) * r; + let rad2 = Math.atan(dx / maxR); + if(rad2 > T.pi60) rad2 = T.pi60; + else if( rad2 < -T.pi60 ) rad2 = -T.pi60; + + rad += rad2 - rad1; + + rad0 = (rad + T.pi90 + T.TwoPI + rr) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60); + b = Math.tan(rad1) * a; + r = maxR = Math.sqrt(a*a + b*b); + } + + lum = ((Math.sin(rad0) * r) / this.tsl) + 0.5; + + let w = 1 - (Math.abs(lum - 0.5) * 2); + sat = (((Math.cos(rad0) * r) + (this.tr / 2)) / (1.5 * this.tr)) / w; + sat = T.clamp( sat, 0, 1 ); + + this.setHSL([this.hsl[0], sat, lum]); + + } + } + } + } + + } + + // ---------------------- + + setHeight () { + + this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; + this.s[0].height = this.h + 'px'; + this.zone.h = this.h; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open () { + + super.open(); + + this.setHeight(); + + if( this.up ) this.zone.y -= this.wfixe + 5; + + let t = this.h - this.baseH; + + this.s[3].visibility = 'visible'; + //this.s[3].display = 'block'; + this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.wfixe + 5; + + let t = this.h - this.baseH; + + this.setHeight(); + + this.s[3].visibility = 'hidden'; + //this.s[3].display = 'none'; + this.parentHeight( -t ); + + } + + update ( up ) { + + let cc = Tools.rgbToHex( Tools.hslToRgb([ this.hsl[0], 1, 0.5 ]) ); + + this.moveMarkers(); + + this.value = this.bcolor; + + this.setSvg( this.c[3], 'fill', cc, 2, 0 ); + + this.s[2].background = this.bcolor; + if(!this.notext) this.c[2].textContent = Tools.htmlToHex( this.bcolor ); + + this.invert = Tools.findDeepInver( this.rgb ); + this.s[2].color = this.invert ? '#fff' : '#000'; + + if(!up) return; + + if( this.ctype === 'array' ) this.send( this.rgb ); + if( this.ctype === 'rgb' ) this.send( Tools.htmlRgb( this.rgb ) ); + if( this.ctype === 'hex' ) this.send( Tools.htmlToHex( this.value ) ); + if( this.ctype === 'html' ) this.send(); + + } + + setValue ( v ){ + + if( v instanceof Array ) this.value = Tools.rgbToHex( v ); + else if(!isNaN(v)) this.value = Tools.hexToHtml( v ); + else this.value = v; + + this.setColor( this.value ); + this.update(); + + } + + setColor ( color ) { + + let unpack = Tools.unpack(color); + if (this.bcolor !== color && unpack) { + + this.bcolor = color; + this.rgb = unpack; + this.hsl = Tools.rgbToHsl( this.rgb ); + + this.hue = this.hsl[0]; + + this.update(); + } + return this; + + } + + setHSL ( hsl ) { + + this.hsl = hsl; + this.rgb = Tools.hslToRgb( hsl ); + this.bcolor = Tools.rgbToHex( this.rgb ); + this.update( true ); + return this; + + } + + moveMarkers () { + + let p = this.pp; + let T = Tools; + + this.invert ? '#fff' : '#000'; + let a = this.hsl[0] * T.TwoPI; + let third = (2/3) * T.PI; + let r = this.tr; + let h = this.hsl[0]; + let s = this.hsl[1]; + let l = this.hsl[2]; + + let angle = ( a - T.pi90 ) * T.todeg; + + h = - a + T.pi90; + + let hx = Math.cos(h) * r; + let hy = -Math.sin(h) * r; + let sx = Math.cos(h - third) * r; + let sy = -Math.sin(h - third) * r; + let vx = Math.cos(h + third) * r; + let vy = -Math.sin(h + third) * r; + let mx = (sx + vx) / 2, my = (sy + vy) / 2; + a = (1 - 2 * Math.abs(l - .5)) * s; + let x = sx + (vx - sx) * l + (hx - mx) * a; + let y = sy + (vy - sy) * l + (hy - my) * a; + + p.set( x, y ).addScalar(128); + + //let ff = (1-l)*255; + // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); + + this.setSvg( this.c[3], 'transform', 'rotate('+angle+' )', 2 ); + + this.setSvg( this.c[3], 'cx', p.x, 3 ); + this.setSvg( this.c[3], 'cy', p.y, 3 ); + + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3 ); + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3 ); + this.setSvg( this.c[3], 'fill',this.bcolor, 3 ); + + } + + rSize () { + + //Proto.prototype.rSize.call( this ); + super.rSize(); + + let s = this.s; + + s[2].width = this.sb + 'px'; + s[2].left = this.sa + 'px'; + + //console.log(this.sb) + + this.cw = this.sb > 256 ? 256 : this.sb; + + + + this.rSizeColor( this.cw ); + + this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + //s[3].left = this.decal.x + 'px'; + + } + + rSizeColor ( w ) { + + + if( w === this.wfixe ) return; + + + + this.wfixe = w; + + + + let s = this.s; + + //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; + this.mid = Math.floor( this.wfixe * 0.5 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 '+ this.wfixe + ' '+ this.wfixe ); + s[3].width = this.wfixe + 'px'; + s[3].height = this.wfixe + 'px'; + //s[3].left = this.decal.x + 'px'; + s[3].top = this.decal.y + 'px'; + + this.ratio = 256 / this.wfixe; + this.square = 1 / (60*(this.wfixe/256)); + this.setHeight(); + + } + + } - class Fps extends Proto { - constructor(o = {}) { - super(o); - this.round = Math.round; - - //this.autoHeight = true; - - this.baseH = this.h; - this.hplus = o.hplus || 50; - this.res = o.res || 40; - this.l = 1; - this.precision = o.precision || 0; - this.custom = o.custom || false; - this.names = o.names || ['FPS', 'MS']; - let cc = o.cc || ['220,220,220', '255,255,0']; - - // this.divid = [ 100, 100, 100 ]; - // this.multy = [ 30, 30, 30 ]; - - this.adding = o.adding || false; - this.range = o.range || [165, 100, 100]; - this.alpha = o.alpha || 0.25; - this.values = []; - this.points = []; - this.textDisplay = []; - if (!this.custom) { - this.now = Roots.getTime(); - this.startTime = 0; //this.now() - this.prevTime = 0; //this.startTime; - this.frames = 0; - this.ms = 0; - this.fps = 0; - this.mem = 0; - this.mm = 0; - this.isMem = self.performance && self.performance.memory ? true : false; - - // this.divid = [ 100, 200, 1 ]; - // this.multy = [ 30, 30, 30 ]; - - if (this.isMem) { - this.names.push('MEM'); - cc.push('0,255,255'); - } - this.txt = o.name || 'Fps'; - } - let fltop = Math.floor(this.h * 0.5) - 3; - const ccc = this.colors; - this.c[1].textContent = this.txt; - //this.c[1].innerHTML = ' ' + this.txt - this.c[0].style.cursor = 'pointer'; - this.c[0].style.pointerEvents = 'auto'; - let panelCss = 'display:none; left:10px; top:' + this.h + 'px; height:' + (this.hplus - 8) + 'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid ' + ccc.border + ';'; - if (this.radius !== 0) panelCss += 'border-radius:' + this.radius + 'px;'; - this.c[2] = this.dom('path', this.css.basic + panelCss, {}); - this.c[2].setAttribute('viewBox', '0 0 ' + this.res + ' 50'); - this.c[2].setAttribute('height', '100%'); - this.c[2].setAttribute('width', '100%'); - this.c[2].setAttribute('preserveAspectRatio', 'none'); - - //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - - // arrow - this.c[3] = this.dom('path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:' + fltop + 'px;', { - d: this.svgs.g1, - fill: ccc.text, - stroke: 'none' - }); - //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); - - // result test - this.c[4] = this.dom('div', this.css.txt + 'position:absolute; left:10px; top:' + (this.h + 2) + 'px; display:none; width:100%; text-align:center;'); - - // bottom line - if (o.bottomLine) this.c[4] = this.dom('div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); - this.isShow = false; - let s = this.s; - - //s[1].marginLeft = '10px'; - s[1].lineHeight = this.h - 4; - s[1].color = ccc.text; - //s[1].paddingLeft = '18px'; - //s[1].fontWeight = 'bold'; - - if (this.radius !== 0) s[0].borderRadius = this.radius + 'px'; - if (this.colors.gborder !== 'none') s[0].border = '1px solid ' + ccc.gborder; - let j = 0; - for (j = 0; j < this.names.length; j++) { - let base = []; - let i = this.res + 1; - while (i--) base.push(50); - this.range[j] = 1 / this.range[j] * 49; - this.points.push(base); - this.values.push(0); - // this.dom( 'path', null, { fill:'rgba('+cc[j]+',0.5)', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - this.textDisplay.push(" " + this.names[j] + " "); - } - j = this.names.length; - while (j--) { - this.dom('path', null, { - fill: 'rgba(' + cc[j] + ',' + this.alpha + ')', - 'stroke-width': 1, - stroke: 'rgba(' + cc[j] + ',1)', - 'vector-effect': 'non-scaling-stroke' - }, this.c[2]); - } - this.init(); - - //if( this.isShow ) this.show(); - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown(e) { - if (this.isShow) this.close();else this.open(); - } - - // ---------------------- - - /*mode: function ( mode ) { - let s = this.s; - switch(mode){ - case 0: // base - s[1].color = this.colors.text; - //s[1].background = 'none'; - break; - case 1: // over - s[1].color = '#FFF'; - //s[1].background = UIL.SELECT; - break; - case 2: // edit / down - s[1].color = this.colors.text; - //s[1].background = UIL.SELECTDOWN; - break; - } - },*/ - - tick(v) { - this.values = v; - if (!this.isShow) return; - this.drawGraph(); - this.upText(); - } - makePath(point) { - let p = ''; - p += 'M ' + -1 + ' ' + 50; - for (let i = 0; i < this.res + 1; i++) { - p += ' L ' + i + ' ' + point[i]; - } - p += ' L ' + (this.res + 1) + ' ' + 50; - return p; - } - upText(val) { - let v = val || this.values, - t = ''; - for (let j = 0, lng = this.names.length; j < lng; j++) t += this.textDisplay[j] + v[j].toFixed(this.precision) + ''; - this.c[4].innerHTML = t; - } - drawGraph() { - let svg = this.c[2]; - let i = this.names.length, - v, - old = 0, - n = 0; - while (i--) { - if (this.adding) v = (this.values[n] + old) * this.range[n];else v = this.values[n] * this.range[n]; - this.points[n].shift(); - this.points[n].push(50 - v); - this.setSvg(svg, 'd', this.makePath(this.points[n]), i + 1); - old += this.values[n]; - n++; - } - } - open() { - super.open(); - this.h = this.hplus + this.baseH; - this.setSvg(this.c[3], 'd', this.svgs.g2); - if (this.group !== null) { - this.group.calc(this.hplus); - } else if (this.isUI) this.main.calc(this.hplus); - this.s[0].height = this.h + 'px'; - this.s[2].display = 'block'; - this.s[4].display = 'block'; - this.isShow = true; - if (!this.custom) Roots.addListen(this); - } - close() { - super.close(); - this.h = this.baseH; - this.setSvg(this.c[3], 'd', this.svgs.g1); - if (this.group !== null) { - this.group.calc(-this.hplus); - } else if (this.isUI) this.main.calc(-this.hplus); - this.s[0].height = this.h + 'px'; - this.s[2].display = 'none'; - this.s[4].display = 'none'; - this.isShow = false; - if (!this.custom) Roots.removeListen(this); - this.c[4].innerHTML = ''; - } - - ///// AUTO FPS ////// - - begin() { - this.startTime = this.now(); - } - end() { - let time = this.now(); - this.ms = time - this.startTime; - this.frames++; - if (time > this.prevTime + 1000) { - this.fps = this.round(this.frames * 1000 / (time - this.prevTime)); - this.prevTime = time; - this.frames = 0; - if (this.isMem) { - let heapSize = performance.memory.usedJSHeapSize; - let heapSizeLimit = performance.memory.jsHeapSizeLimit; - this.mem = this.round(heapSize * 0.000000954); - this.mm = heapSize / heapSizeLimit; - } - } - this.values = [this.fps, this.ms, this.mm]; - this.drawGraph(); - this.upText([this.fps, this.ms, this.mem]); - return time; - } - listening() { - if (!this.custom) this.startTime = this.end(); - } - rSize() { - let s = this.s; - let w = this.w; - s[3].left = this.sa + this.sb - 6 + 'px'; - s[0].width = w + 'px'; - s[1].width = w + 'px'; - s[2].left = 10 + 'px'; - s[2].width = w - 20 + 'px'; - s[4].width = w - 20 + 'px'; - } + class Fps extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.round = Math.round; + + //this.autoHeight = true; + + this.baseH = this.h; + this.hplus = o.hplus || 50; + + this.res = o.res || 40; + this.l = 1; + + this.precision = o.precision || 0; + + + this.custom = o.custom || false; + this.names = o.names || ['FPS', 'MS']; + let cc = o.cc || ['220,220,220', '255,255,0']; + + // this.divid = [ 100, 100, 100 ]; + // this.multy = [ 30, 30, 30 ]; + + this.adding = o.adding || false; + + this.range = o.range || [ 165, 100, 100 ]; + + this.alpha = o.alpha || 0.25; + + this.values = []; + this.points = []; + this.textDisplay = []; + + if(!this.custom){ + + this.now = Roots.getTime(); + this.startTime = 0;//this.now() + this.prevTime = 0;//this.startTime; + this.frames = 0; + + this.ms = 0; + this.fps = 0; + this.mem = 0; + this.mm = 0; + + this.isMem = ( self.performance && self.performance.memory ) ? true : false; + + // this.divid = [ 100, 200, 1 ]; + // this.multy = [ 30, 30, 30 ]; + + if( this.isMem ){ + + this.names.push('MEM'); + cc.push('0,255,255'); + + } + + this.txt = o.name || 'Fps'; + + } + + + let fltop = Math.floor(this.h*0.5)-3; + const ccc = this.colors; + + this.c[1].textContent = this.txt; + //this.c[1].innerHTML = ' ' + this.txt + this.c[0].style.cursor = 'pointer'; + this.c[0].style.pointerEvents = 'auto'; + + let panelCss = 'display:none; left:10px; top:'+ this.h + 'px; height:'+(this.hplus - 8)+'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid '+ ccc.border +';'; + + if( this.radius !== 0 ) panelCss += 'border-radius:' + this.radius+'px;'; + + this.c[2] = this.dom( 'path', this.css.basic + panelCss , {} ); + + this.c[2].setAttribute('viewBox', '0 0 '+this.res+' 50' ); + this.c[2].setAttribute('height', '100%' ); + this.c[2].setAttribute('width', '100%' ); + this.c[2].setAttribute('preserveAspectRatio', 'none' ); + + + //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + + // arrow + this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:ccc.text, stroke:'none'}); + //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); + + // result test + this.c[4] = this.dom( 'div', this.css.txt + 'position:absolute; left:10px; top:'+(this.h+2) +'px; display:none; width:100%; text-align:center;' ); + + // bottom line + if( o.bottomLine ) this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); + + this.isShow = false; + + + + let s = this.s; + + //s[1].marginLeft = '10px'; + s[1].lineHeight = this.h-4; + s[1].color = ccc.text; + //s[1].paddingLeft = '18px'; + //s[1].fontWeight = 'bold'; + + if( this.radius !== 0 ) s[0].borderRadius = this.radius+'px'; + if( this.colors.gborder!=='none') s[0].border = '1px solid ' + ccc.gborder; + + + + + let j = 0; + + for( j=0; j " + this.names[j] +" "); + + } + + j = this.names.length; + while(j--){ + this.dom( 'path', null, { fill:'rgba('+cc[j]+','+this.alpha+')', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + } + + + this.init(); + + //if( this.isShow ) this.show(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + if( this.isShow ) this.close(); + else this.open(); + + } + + // ---------------------- + + /*mode: function ( mode ) { + + let s = this.s; + + switch(mode){ + case 0: // base + s[1].color = this.colors.text; + //s[1].background = 'none'; + break; + case 1: // over + s[1].color = '#FFF'; + //s[1].background = UIL.SELECT; + break; + case 2: // edit / down + s[1].color = this.colors.text; + //s[1].background = UIL.SELECTDOWN; + break; + + } + },*/ + + tick ( v ) { + + this.values = v; + if( !this.isShow ) return; + this.drawGraph(); + this.upText(); + + } + + makePath ( point ) { + + let p = ''; + p += 'M ' + (-1) + ' ' + 50; + for ( let i = 0; i < this.res + 1; i ++ ) { p += ' L ' + i + ' ' + point[i]; } + p += ' L ' + (this.res + 1) + ' ' + 50; + return p; + + } + + upText ( val ) { + + let v = val || this.values, t = ''; + for( let j=0, lng =this.names.length; j'; + this.c[4].innerHTML = t; + + } + + drawGraph () { + + let svg = this.c[2]; + let i = this.names.length, v, old = 0, n = 0; + + while( i-- ){ + if( this.adding ) v = (this.values[n]+old) * this.range[n]; + else v = (this.values[n] * this.range[n]); + this.points[n].shift(); + this.points[n].push( 50 - v ); + this.setSvg( svg, 'd', this.makePath( this.points[n] ), i+1 ); + old += this.values[n]; + n++; + + } + + } + + open () { + + super.open(); + + this.h = this.hplus + this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g2 ); + + if( this.group !== null ){ this.group.calc( this.hplus );} + else if( this.isUI ) this.main.calc( this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'block'; + this.s[4].display = 'block'; + this.isShow = true; + + if( !this.custom ) Roots.addListen( this ); + + } + + close () { + + super.close(); + + this.h = this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g1 ); + + if( this.group !== null ){ this.group.calc( -this.hplus );} + else if( this.isUI ) this.main.calc( -this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'none'; + this.s[4].display = 'none'; + this.isShow = false; + + if( !this.custom ) Roots.removeListen( this ); + + this.c[4].innerHTML = ''; + + } + + + ///// AUTO FPS ////// + + begin () { + + this.startTime = this.now(); + + } + + end () { + + let time = this.now(); + this.ms = time - this.startTime; + + this.frames ++; + + if ( time > this.prevTime + 1000 ) { + + this.fps = this.round( ( this.frames * 1000 ) / ( time - this.prevTime ) ); + + this.prevTime = time; + this.frames = 0; + + if ( this.isMem ) { + + let heapSize = performance.memory.usedJSHeapSize; + let heapSizeLimit = performance.memory.jsHeapSizeLimit; + + this.mem = this.round( heapSize * 0.000000954 ); + this.mm = heapSize / heapSizeLimit; + + } + + } + + this.values = [ this.fps, this.ms , this.mm ]; + + this.drawGraph(); + this.upText( [ this.fps, this.ms, this.mem ] ); + + return time; + + } + + listening () { + + if( !this.custom ) this.startTime = this.end(); + + } + + rSize () { + + let s = this.s; + let w = this.w; + + s[3].left = ( this.sa + this.sb - 6 ) + 'px'; + + s[0].width = w + 'px'; + s[1].width = w + 'px'; + s[2].left = 10 + 'px'; + s[2].width = (w-20) + 'px'; + s[4].width = (w-20) + 'px'; + + } + } - class Graph extends Proto { - constructor(o = {}) { - super(o); - this.value = o.value !== undefined ? o.value : [0, 0, 0]; - this.lng = this.value.length; - this.precision = o.precision !== undefined ? o.precision : 2; - this.multiplicator = o.multiplicator || 1; - this.neg = o.neg || false; - this.line = o.line !== undefined ? o.line : true; - - //if(this.neg)this.multiplicator*=2; - - this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; - this.isNumber = false; - this.isDown = false; - this.h = o.h || 128 + 10; - this.rh = this.h - 10; - this.top = 0; - this.c[0].style.width = this.w + 'px'; - if (this.c[1] !== undefined) { - // with title - - this.c[1].style.width = this.w + 'px'; - if (!this.autoWidth) { - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - } - - //this.c[1].style.background = '#ff0000'; - //this.c[1].style.textAlign = 'center'; - this.top = 10; - this.h += 10; - } - this.gh = this.rh - 28; - this.gw = this.w - 28; - - //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); - - //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' - this.c[2] = this.dom('div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:' + (this.h - 20) + 'px; left:14px; width:' + this.gw + 'px; color:' + this.colors.text); - - //this.c[2].textContent = this.value; - this.c[2].innerHTML = this.valueToHtml(); - let svg = this.dom('svg', this.css.basic, { - viewBox: '0 0 ' + this.w + ' ' + this.rh, - width: this.w, - height: this.rh, - preserveAspectRatio: 'none' - }); - this.setCss(svg, { - width: this.w, - height: this.rh, - left: 0, - top: this.top - }); - this.dom('path', '', { - d: '', - stroke: this.colors.text, - 'stroke-width': 2, - fill: 'none', - 'stroke-linecap': 'butt' - }, svg); - this.dom('rect', '', { - x: 10, - y: 10, - width: this.gw + 8, - height: this.gh + 8, - stroke: 'rgba(0,0,0,0.3)', - 'stroke-width': 1, - fill: 'none' - }, svg); - this.iw = (this.gw - 4 * (this.lng - 1)) / this.lng; - let t = []; - this.cMode = []; - this.v = []; - for (let i = 0; i < this.lng; i++) { - t[i] = [14 + i * this.iw + i * 4, this.iw]; - t[i][2] = t[i][0] + t[i][1]; - this.cMode[i] = 0; - if (this.neg) this.v[i] = (1 + this.value[i] / this.multiplicator) * 0.5;else this.v[i] = this.value[i] / this.multiplicator; - this.dom('rect', '', { - x: t[i][0], - y: 14, - width: t[i][1], - height: 1, - fill: this.colors.text, - 'fill-opacity': 0.3 - }, svg); - } - this.tmp = t; - this.c[3] = svg; - - //console.log(this.w) - - this.init(); - if (this.c[1] !== undefined) { - this.c[1].style.top = 0 + 'px'; - this.c[1].style.height = 20 + 'px'; - this.s[1].lineHeight = 20 - 5 + 'px'; - } - this.update(false); - } - setValue(value) { - this.value = value; - this.lng = this.value.length; - for (var i = 0; i < this.lng; i++) { - if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5;else this.v[i] = value[i] / this.multiplicator; - } - this.update(); - } - valueToHtml() { - let i = this.lng, - n = 0, - r = ''; - let w = 100 / this.lng; - let style = 'width:' + w + '%;'; //' text-align:center;' - while (i--) { - if (n === this.lng - 1) r += '
' + this.value[n] + '
';else r += '' + this.value[n] + ''; - n++; - } - return r; - } - updateSVG() { - if (this.line) this.setSvg(this.c[3], 'd', this.makePath(), 0); - for (let i = 0; i < this.lng; i++) { - this.setSvg(this.c[3], 'height', this.v[i] * this.gh, i + 2); - this.setSvg(this.c[3], 'y', 14 + (this.gh - this.v[i] * this.gh), i + 2); - if (this.neg) this.value[i] = ((this.v[i] * 2 - 1) * this.multiplicator).toFixed(this.precision) * 1;else this.value[i] = (this.v[i] * this.multiplicator).toFixed(this.precision) * 1; - } - - //this.c[2].textContent = this.value; - this.c[2].innerHTML = this.valueToHtml(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - let i = this.lng; - let t = this.tmp; - if (l.y > this.top && l.y < this.h - 20) { - while (i--) { - if (l.x > t[i][0] && l.x < t[i][2]) return i; - } - } - return ''; - } - mode(n, name) { - if (n === this.cMode[name]) return false; - let a; - switch (n) { - case 0: - a = 0.3; - break; - case 1: - a = 0.6; - break; - case 2: - a = 1; - break; - } - this.reset(); - this.setSvg(this.c[3], 'fill-opacity', a, name + 2); - this.cMode[name] = n; - return true; - } - - // ---------------------- - // EVENTS - // ---------------------- - - reset() { - let nup = false; - //this.isDown = false; - - let i = this.lng; - while (i--) { - if (this.cMode[i] !== 0) { - this.cMode[i] = 0; - this.setSvg(this.c[3], 'fill-opacity', 0.3, i + 2); - nup = true; - } - } - return nup; - } - mouseup(e) { - this.isDown = false; - if (this.current !== -1) return this.reset(); - } - mousedown(e) { - this.isDown = true; - return this.mousemove(e); - } - mousemove(e) { - let nup = false; - let name = this.testZone(e); - if (name === '') { - nup = this.reset(); - //this.cursor(); - } else { - nup = this.mode(this.isDown ? 2 : 1, name); - //this.cursor( this.current !== -1 ? 'move' : 'pointer' ); - if (this.isDown) { - this.v[name] = this.clamp(1 - (e.clientY - this.zone.y - this.ytop - 10) / this.gh, 0, 1); - this.update(true); - } - } - return nup; - } - - // ---------------------- - - update(up) { - this.updateSVG(); - if (up) this.send(); - } - makePath() { - let p = "", - h, - w, - wn, - wm, - ow, - oh; - //let g = this.iw*0.5 - - for (let i = 0; i < this.lng; i++) { - h = 14 + (this.gh - this.v[i] * this.gh); - w = 14 + i * this.iw + i * 4; - wm = w + this.iw * 0.5; - wn = w + this.iw; - if (i === 0) p += 'M ' + w + ' ' + h + ' T ' + wm + ' ' + h;else p += ' C ' + ow + ' ' + oh + ',' + w + ' ' + h + ',' + wm + ' ' + h; - if (i === this.lng - 1) p += ' T ' + wn + ' ' + h; - ow = wn; - oh = h; - } - return p; - } - rSize() { - super.rSize(); - let s = this.s; - if (this.c[1] !== undefined) s[1].width = this.w + 'px'; - s[3].width = this.w + 'px'; - let gw = this.w - 28; - let iw = (gw - 4 * (this.lng - 1)) / this.lng; - let t = []; - s[2].width = gw + 'px'; - for (let i = 0; i < this.lng; i++) { - t[i] = [14 + i * iw + i * 4, iw]; - t[i][2] = t[i][0] + t[i][1]; - } - this.tmp = t; - } + class Graph extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value !== undefined ? o.value : [0,0,0]; + this.lng = this.value.length; + + this.precision = o.precision !== undefined ? o.precision : 2; + this.multiplicator = o.multiplicator || 1; + this.neg = o.neg || false; + + this.line = o.line !== undefined ? o.line : true; + + //if(this.neg)this.multiplicator*=2; + + this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; + this.isNumber = false; + + this.isDown = false; + + this.h = o.h || 128 + 10; + this.rh = this.h - 10; + this.top = 0; + + this.c[0].style.width = this.w +'px'; + + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = this.w +'px'; + + if(!this.autoWidth){ + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + } + + + //this.c[1].style.background = '#ff0000'; + //this.c[1].style.textAlign = 'center'; + this.top = 10; + this.h += 10; + + } + + this.gh = this.rh - 28; + this.gw = this.w - 28; + + //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); + + //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' + this.c[2] = this.dom( 'div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:'+(this.h-20)+'px; left:14px; width:'+this.gw+'px; color:'+ this.colors.text ); + + //this.c[2].textContent = this.value; + this.c[2].innerHTML = this.valueToHtml(); + + let svg = this.dom( 'svg', this.css.basic , { viewBox:'0 0 '+this.w+' '+this.rh, width:this.w, height:this.rh, preserveAspectRatio:'none' } ); + this.setCss( svg, { width:this.w, height:this.rh, left:0, top:this.top }); + + this.dom( 'path', '', { d:'', stroke:this.colors.text, 'stroke-width':2, fill:'none', 'stroke-linecap':'butt' }, svg ); + this.dom( 'rect', '', { x:10, y:10, width:this.gw+8, height:this.gh+8, stroke:'rgba(0,0,0,0.3)', 'stroke-width':1 , fill:'none'}, svg ); + + this.iw = ((this.gw-(4*(this.lng-1)))/this.lng); + let t = []; + this.cMode = []; + + this.v = []; + + for( let i = 0; i < this.lng; i++ ){ + + t[i] = [ 14 + (i*this.iw) + (i*4), this.iw ]; + t[i][2] = t[i][0] + t[i][1]; + this.cMode[i] = 0; + + if( this.neg ) this.v[i] = ((1+(this.value[i] / this.multiplicator))*0.5); + else this.v[i] = this.value[i] / this.multiplicator; + + this.dom( 'rect', '', { x:t[i][0], y:14, width:t[i][1], height:1, fill:this.colors.text, 'fill-opacity':0.3 }, svg ); + + } + + this.tmp = t; + this.c[3] = svg; + + //console.log(this.w) + + this.init(); + + if( this.c[1] !== undefined ){ + this.c[1].style.top = 0 +'px'; + this.c[1].style.height = 20 +'px'; + this.s[1].lineHeight = (20-5)+'px'; + } + + this.update( false ); + + } + + setValue ( value ) { + + this.value = value; + this.lng = this.value.length; + for (var i = 0; i < this.lng; i++) { + if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5; + else this.v[i] = value[i] / this.multiplicator; + } + this.update(); + + } + + valueToHtml() { + + let i = this.lng, n=0, r = ''; + let w = 100 / this.lng; + let style = 'width:'+ w +'%;';//' text-align:center;' + while(i--){ + if(n===this.lng-1) r += '
' + this.value[n] + '
'; + else r += '' + this.value[n] + ''; + n++; + } + return r + } + + updateSVG () { + + if( this.line ) this.setSvg( this.c[3], 'd', this.makePath(), 0 ); + + for(let i = 0; ithis.top && l.yt[i][0] && l.x this.distance) { - let angle = Math.atan2(this.tmp.x, this.tmp.y); - this.tmp.x = Math.sin(angle) * this.distance; - this.tmp.y = Math.cos(angle) * this.distance; - } - this.pos.copy(this.tmp).divideScalar(this.distance).negate(); - this.update(); - } - setValue(v) { - if (v === undefined) v = [0, 0]; - this.pos.set(v[0] || 0, v[1] || 0); - this.updateSVG(); - } - update(up) { - if (up === undefined) up = true; - if (this.interval !== null) { - if (!this.isDown) { - this.pos.lerp(null, 0.3); - this.pos.x = Math.abs(this.pos.x) < 0.01 ? 0 : this.pos.x; - this.pos.y = Math.abs(this.pos.y) < 0.01 ? 0 : this.pos.y; - if (this.isUI && this.main.isCanvas) this.main.draw(); - } - } - this.updateSVG(); - if (up) this.send(); - if (this.pos.isZero()) this.stopInterval(); - } - updateSVG() { - //let x = this.radius - ( -this.pos.x * this.distance ); - //let y = this.radius - ( -this.pos.y * this.distance ); - - let x = this.diam * 0.5 - -this.pos.x * this.distance; - let y = this.diam * 0.5 - -this.pos.y * this.distance; - if (this.model === 0) { - let sx = x + this.pos.x * 5 + 5; - let sy = y + this.pos.y * 5 + 10; - this.setSvg(this.c[3], 'cx', sx * this.ratio, 3); - this.setSvg(this.c[3], 'cy', sy * this.ratio, 3); - } else { - this.setSvg(this.c[3], 'cx', x * this.ratio, 3); - this.setSvg(this.c[3], 'cy', y * this.ratio, 3); - } - this.setSvg(this.c[3], 'cx', x * this.ratio, 4); - this.setSvg(this.c[3], 'cy', y * this.ratio, 4); - this.value[0] = (this.pos.x * this.multiplicator).toFixed(this.precision) * 1; - this.value[1] = (this.pos.y * this.multiplicator).toFixed(this.precision) * 1; - if (this.haveText) this.c[2].textContent = this.value; - } - clear() { - this.stopInterval(); - super.clear(); - } + class Joystick extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.autoWidth = false; + + this.value = [0,0]; + + this.minw = this.w; + this.diam = o.diam || this.w; + + this.joyType = 'analogique'; + this.model = o.mode !== undefined ? o.mode : 0; + + this.precision = o.precision || 2; + this.multiplicator = o.multiplicator || 1; + + this.pos = new V2(); + this.tmp = new V2(); + + this.interval = null; + this.c[0].style.display = 'block'; + this.haveText = o.text !== undefined ? o.text : true; + + //this.radius = this.w * 0.5; + //this.distance = this.radius*0.25; + this.distance = (this.diam*0.5)*0.25; + + this.h = o.h || this.w + (this.haveText ? 10 : 0); + + this.c[0].style.width = this.w +'px'; + + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); + this.c[2].textContent = this.haveText ? this.value : ''; + + this.c[3] = this.getJoystick( this.model ); + this.setSvg( this.c[3], 'viewBox', '0 0 '+this.diam+' '+this.diam ); + this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); + + this.mode(0); + + + this.ratio = 128/this.w; + + this.init(); + + this.update(false); + + } + + mode ( mode ) { + + let cc = this.colors; + + switch(mode){ + case 0: // base + if(this.model===0){ + this.setSvg( this.c[3], 'fill', 'url(#gradIn)', 4 ); + this.setSvg( this.c[3], 'stroke', '#000', 4 ); + } else { + this.setSvg( this.c[3], 'stroke', cc.joyOut, 2 ); + //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.1)', 3 ); + this.setSvg( this.c[3], 'stroke', cc.joyOut, 4 ); + this.setSvg( this.c[3], 'fill', 'none', 4 ); + } + + break; + case 1: // over + if(this.model===0){ + this.setSvg( this.c[3], 'fill', 'url(#gradIn2)', 4 ); + this.setSvg( this.c[3], 'stroke', 'rgba(0,0,0,0)', 4 ); + } else { + this.setSvg( this.c[3], 'stroke', cc.joyOver, 2 ); + //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.3)', 3 ); + this.setSvg( this.c[3], 'stroke', cc.joySelect, 4 ); + this.setSvg( this.c[3], 'fill', cc.joyOver, 4 ); + } + break; + + } + } + + // ---------------------- + // EVENTS + // ---------------------- + + addInterval (){ + if( this.interval !== null ) this.stopInterval(); + if( this.pos.isZero() ) return; + this.interval = setInterval( function(){ this.update(); }.bind(this), 10 ); + + } + + stopInterval (){ + + if( this.interval === null ) return; + clearInterval( this.interval ); + this.interval = null; + + } + + reset () { + + this.addInterval(); + this.mode(0); + + } + + mouseup ( e ) { + + this.addInterval(); + this.isDown = false; + + } + + mousedown ( e ) { + + this.isDown = true; + this.mousemove( e ); + this.mode( 2 ); + + } + + mousemove ( e ) { + + this.mode(1); + + if( !this.isDown ) return; + + //this.tmp.x = this.radius - ( e.clientX - this.zone.x ); + //this.tmp.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + this.tmp.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + this.tmp.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + let distance = this.tmp.length(); + + if ( distance > this.distance ) { + let angle = Math.atan2(this.tmp.x, this.tmp.y); + this.tmp.x = Math.sin( angle ) * this.distance; + this.tmp.y = Math.cos( angle ) * this.distance; + } + + this.pos.copy( this.tmp ).divideScalar( this.distance ).negate(); + + this.update(); + + } + + setValue ( v ) { + + if(v===undefined) v=[0,0]; + + this.pos.set( v[0] || 0, v[1] || 0 ); + this.updateSVG(); + + } + + update ( up ) { + + if( up === undefined ) up = true; + + if( this.interval !== null ){ + + if( !this.isDown ){ + + this.pos.lerp( null, 0.3 ); + + this.pos.x = Math.abs( this.pos.x ) < 0.01 ? 0 : this.pos.x; + this.pos.y = Math.abs( this.pos.y ) < 0.01 ? 0 : this.pos.y; + + if( this.isUI && this.main.isCanvas ) this.main.draw(); + + } + + } + + this.updateSVG(); + + if( up ) this.send(); + + + if( this.pos.isZero() ) this.stopInterval(); + + } + + updateSVG () { + + //let x = this.radius - ( -this.pos.x * this.distance ); + //let y = this.radius - ( -this.pos.y * this.distance ); + + let x = (this.diam*0.5) - ( -this.pos.x * this.distance ); + let y = (this.diam*0.5) - ( -this.pos.y * this.distance ); + + if(this.model === 0){ + + let sx = x + ((this.pos.x)*5) + 5; + let sy = y + ((this.pos.y)*5) + 10; + + this.setSvg( this.c[3], 'cx', sx*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', sy*this.ratio, 3 ); + } else { + this.setSvg( this.c[3], 'cx', x*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 3 ); + } + + + + this.setSvg( this.c[3], 'cx', x*this.ratio, 4 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 4 ); + + this.value[0] = ( this.pos.x * this.multiplicator ).toFixed( this.precision ) * 1; + this.value[1] = ( this.pos.y * this.multiplicator ).toFixed( this.precision ) * 1; + + if(this.haveText) this.c[2].textContent = this.value; + + } + + clear () { + + this.stopInterval(); + super.clear(); + + } + } - class Knob extends Proto { - constructor(o = {}) { - super(o); - this.isCyclic = o.cyclic || false; - this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; - this.autoWidth = false; - this.setTypeNumber(o); - this.minw = this.w; - this.diam = o.diam || this.w; - this.mPI = Math.PI * 0.8; - this.toDeg = 180 / Math.PI; - this.cirRange = this.mPI * 2; - this.offset = new V2(); - this.h = o.h || this.w + 10; - this.c[0].style.width = this.w + 'px'; - this.c[0].style.display = 'block'; - if (this.c[1] !== undefined) { - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - } - this.percent = 0; - this.cmode = 0; - let cc = this.colors; - this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); - this.c[3] = this.getKnob(); - this.setSvg(this.c[3], 'fill', cc.button, 0); - this.setSvg(this.c[3], 'stroke', cc.text, 1); - this.setSvg(this.c[3], 'stroke', cc.text, 3); - this.setSvg(this.c[3], 'd', this.makeGrad(), 3); - this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); - this.setCss(this.c[3], { - width: this.diam, - height: this.diam, - left: 0, - top: this.top - }); - if (this.model > 0) { - Tools.dom('path', '', { - d: '', - stroke: cc.text, - 'stroke-width': 2, - fill: 'none', - 'stroke-linecap': 'round' - }, this.c[3]); //4 - - if (this.model == 2) { - Tools.addSVGGlowEffect(); - this.setSvg(this.c[3], 'style', 'filter: url("#UILGlow");', 4); - } - } - this.r = 0; - this.init(); - this.update(); - } - mode(mode) { - let cc = this.colors; - if (this.cmode === mode) return false; - switch (mode) { - case 0: - // base - this.s[2].color = cc.text; - this.setSvg(this.c[3], 'fill', cc.button, 0); - //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); - this.setSvg(this.c[3], 'stroke', cc.text, 1); - break; - case 1: - // down - this.s[2].color = cc.textOver; - this.setSvg(this.c[3], 'fill', cc.select, 0); - //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); - this.setSvg(this.c[3], 'stroke', cc.textOver, 1); - break; - } - this.cmode = mode; - return true; - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'knob'; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - this.isDown = false; - this.sendEnd(); - return this.mode(0); - } - mousedown(e) { - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove(e); - return this.mode(1); - } - mousemove(e) { - if (!this.isDown) return; - let off = this.offset; - - //off.x = this.radius - ( e.clientX - this.zone.x ); - //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); - - off.x = this.w * 0.5 - (e.clientX - this.zone.x); - off.y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); - this.r = -Math.atan2(off.x, off.y); - if (this.oldr !== null) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; - this.r = this.r > this.mPI ? this.mPI : this.r; - this.r = this.r < -this.mPI ? -this.mPI : this.r; - let steps = 1 / this.cirRange; - let value = (this.r + this.mPI) * steps; - let n = this.range * value + this.min - this.old; - if (n >= this.step || n <= this.step) { - n = Math.floor(n / this.step); - this.value = this.numValue(this.old + n * this.step); - this.update(true); - this.old = this.value; - this.oldr = this.r; - } - } - wheel(e) { - let name = this.testZone(e); - if (name === 'knob') { - let v = this.value - this.step * e.delta; - if (v > this.max) { - v = this.isCyclic ? this.min : this.max; - } else if (v < this.min) { - v = this.isCyclic ? this.max : this.min; - } - this.setValue(v); - this.old = v; - this.update(true); - return true; - } - return false; - } - makeGrad() { - let d = '', - step, - range, - a, - x, - y, - x2, - y2, - r = 64; - let startangle = Math.PI + this.mPI; - let endangle = Math.PI - this.mPI; - //let step = this.step>5 ? this.step : 1; - - if (this.step > 5) { - range = this.range / this.step; - step = (startangle - endangle) / range; - } else { - step = (startangle - endangle) / r * 2; - range = r * 0.5; - } - for (let i = 0; i <= range; ++i) { - a = startangle - step * i; - x = r + Math.sin(a) * (r - 20); - y = r + Math.cos(a) * (r - 20); - x2 = r + Math.sin(a) * (r - 24); - y2 = r + Math.cos(a) * (r - 24); - d += 'M' + x + ' ' + y + ' L' + x2 + ' ' + y2 + ' '; - } - return d; - } - update(up) { - this.c[2].textContent = this.value; - this.percent = (this.value - this.min) / this.range; - let sa = Math.PI + this.mPI; - let ea = this.percent * this.cirRange - this.mPI; - let sin = Math.sin(ea); - let cos = Math.cos(ea); - let x1 = 25 * sin + 64; - let y1 = -(25 * cos) + 64; - let x2 = 20 * sin + 64; - let y2 = -(20 * cos) + 64; - this.setSvg(this.c[3], 'd', 'M ' + x1 + ' ' + y1 + ' L ' + x2 + ' ' + y2, 1); - if (this.model > 0) { - let x1 = 36 * Math.sin(sa) + 64; - let y1 = 36 * Math.cos(sa) + 64; - let x2 = 36 * sin + 64; - let y2 = -36 * cos + 64; - let big = ea <= Math.PI - this.mPI ? 0 : 1; - this.setSvg(this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4); - let color = Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(this.colors.text, -0.75)), Tools.unpack(this.colors.text), this.percent)); - this.setSvg(this.c[3], 'stroke', color, 4); - } - if (up) this.send(); - } + class Knob extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.autoWidth = false; + + this.setTypeNumber( o ); + + this.minw = this.w; + this.diam = o.diam || this.w; + + this.mPI = Math.PI * 0.8; + this.toDeg = 180 / Math.PI; + this.cirRange = this.mPI * 2; + + this.offset = new V2(); + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w +'px'; + this.c[0].style.display = 'block'; + + if(this.c[1] !== undefined) { + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + this.percent = 0; + + this.cmode = 0; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); + + this.c[3] = this.getKnob(); + this.setSvg( this.c[3], 'fill', cc.button, 0 ); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + this.setSvg( this.c[3], 'stroke', cc.text, 3 ); + this.setSvg( this.c[3], 'd', this.makeGrad(), 3 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam ); + this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); + + if ( this.model > 0 ) { + + Tools.dom( 'path', '', { d: '', stroke:cc.text, 'stroke-width': 2, fill: 'none', 'stroke-linecap': 'round' }, this.c[3] ); //4 + + if ( this.model == 2) { + + Tools.addSVGGlowEffect(); + this.setSvg( this.c[3], 'style', 'filter: url("#UILGlow");', 4 ); + + } + + } + + this.r = 0; + + this.init(); + + this.update(); + + } + + mode ( mode ) { + + let cc = this.colors; + + if( this.cmode === mode ) return false; + + switch( mode ) { + case 0: // base + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.button, 0); + //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + break; + case 1: // down + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'fill', cc.select, 0); + //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); + this.setSvg( this.c[3], 'stroke', cc.textOver, 1 ); + break; + } + + this.cmode = mode; + return true; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'knob'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0) + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1) + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let off = this.offset; + + //off.x = this.radius - ( e.clientX - this.zone.x ); + //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = - Math.atan2( off.x, off.y ); + + if( this.oldr !== null ) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; + + this.r = this.r > this.mPI ? this.mPI : this.r; + this.r = this.r < -this.mPI ? -this.mPI : this.r; + + let steps = 1 / this.cirRange; + let value = (this.r + this.mPI) * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = Math.floor( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'knob' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + makeGrad () { + + let d = '', step, range, a, x, y, x2, y2, r = 64; + let startangle = Math.PI + this.mPI; + let endangle = Math.PI - this.mPI; + //let step = this.step>5 ? this.step : 1; + + if(this.step>5){ + range = this.range / this.step; + step = ( startangle - endangle ) / range; + } else { + step = (( startangle - endangle ) / r)*2; + range = r*0.5; + } + + for ( let i = 0; i <= range; ++i ) { + + a = startangle - ( step * i ); + x = r + Math.sin( a ) * ( r - 20 ); + y = r + Math.cos( a ) * ( r - 20 ); + x2 = r + Math.sin( a ) * ( r - 24 ); + y2 = r + Math.cos( a ) * ( r - 24 ); + d += 'M' + x + ' ' + y + ' L' + x2 + ' '+y2 + ' '; + + } + + return d; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = (this.value - this.min) / this.range; + + let sa = Math.PI + this.mPI; + let ea = ( ( this.percent * this.cirRange ) - ( this.mPI ) ); + + let sin = Math.sin( ea ); + let cos = Math.cos( ea ); + + let x1 = ( 25 * sin ) + 64; + let y1 = -( 25 * cos ) + 64; + let x2 = ( 20 * sin ) + 64; + let y2 = -( 20 * cos ) + 64; + + this.setSvg( this.c[3], 'd', 'M ' + x1 +' ' + y1 + ' L ' + x2 +' ' + y2, 1 ); + + if ( this.model > 0 ) { + + let x1 = 36 * Math.sin( sa ) + 64; + let y1 = 36 * Math.cos( sa ) + 64; + let x2 = 36 * sin + 64; + let y2 = -36 * cos + 64; + let big = ea <= Math.PI - this.mPI ? 0 : 1; + this.setSvg( this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4 ); + + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( this.colors.text, -0.75) ), Tools.unpack( this.colors.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 4 ); + + } + + if( up ) this.send(); + + } + } - class List extends Proto { - constructor(o = {}) { - super(o); - - // TODO not work - this.hideCurrent = false; - - // images - this.path = o.path || ''; - this.format = o.format || ''; - this.isWithImage = this.path !== '' ? true : false; - this.preLoadComplete = false; - this.tmpImage = {}; - this.tmpUrl = []; - this.m = o.m !== undefined ? o.m : 5; - let align = o.align || 'left'; - - // scroll size - let ss = o.scrollSize || 10; - this.ss = ss + 1; - this.sMode = 0; - this.tMode = 0; - this.listOnly = o.listOnly || false; - this.staticTop = o.staticTop || false; - this.isSelectable = this.listOnly; - if (o.select !== undefined) o.selectable = o.select; - if (o.selectable !== undefined) this.isSelectable = o.selectable; - if (this.txt === '') this.p = 0; - let fltop = Math.floor(this.h * 0.5) - 3; - let cc = this.colors; - this.c[2] = this.dom('div', this.css.basic + 'top:0; display:none; border-radius:' + this.radius + 'px;'); - this.c[3] = this.dom('div', this.css.item + 'padding:0px ' + this.m + 'px; margin-bottom:0px; position:absolute; justify-content:' + align + '; text-align:' + align + '; line-height:' + (this.h - 4) + 'px; top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:1px solid ' + cc.border + '; border-radius:' + this.radius + 'px;'); - this.c[4] = this.dom('path', this.css.basic + 'position:absolute; width:6px; height:6px; top:' + fltop + 'px;', { - d: this.svgs.g1, - fill: cc.text, - stroke: 'none' - }); - this.scrollerBack = this.dom('div', this.css.basic + 'right:0px; width:' + ss + 'px; background:' + cc.back + '; display:none;'); - this.scroller = this.dom('div', this.css.basic + 'right:' + (ss - ss * 0.25) * 0.5 + 'px; width:' + ss * 0.25 + 'px; background:' + cc.text + '; display:none; '); - this.c[3].style.color = cc.text; - this.list = []; - this.refObject = null; - if (o.list) { - if (o.list instanceof Array) { - this.list = o.list; - } else if (o.list instanceof Object) { - this.refObject = o.list; - for (let g in this.refObject) this.list.push(g); - } - } - this.items = []; - this.prevName = ''; - this.tmpId = 0; - this.baseH = this.h; - this.itemHeight = o.itemHeight || this.h; //(this.h-3); - - // force full list - this.full = o.full || false; - this.py = 0; - this.ww = this.sb; - this.scroll = false; - this.isDown = false; - this.current = null; - - // list up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - if (this.up) { - this.c[2].style.top = 'auto'; - this.c[3].style.top = 'auto'; - this.c[4].style.top = 'auto'; - this.c[2].style.bottom = this.h - 2 + 'px'; - this.c[3].style.bottom = '1px'; - this.c[4].style.bottom = fltop + 'px'; - } else { - this.c[2].style.top = this.baseH + 'px'; - } - this.listIn = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); - this.listIn.name = 'list'; - this.topList = 0; - this.c[2].appendChild(this.listIn); - this.c[2].appendChild(this.scrollerBack); - this.c[2].appendChild(this.scroller); - if (o.value !== undefined) { - if (!isNaN(o.value)) this.value = this.list[o.value];else this.value = o.value; - } else { - this.value = this.list[0]; - } - this.isOpenOnStart = o.open || false; - if (this.listOnly) { - this.baseH = 5; - this.c[3].style.display = 'none'; - this.c[4].style.display = 'none'; - this.c[2].style.top = this.baseH + 'px'; - this.isOpenOnStart = true; - } - this.miniCanvas = o.miniCanvas || false; - this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; - this.imageSize = o.imageSize || [20, 20]; - - // dragout function - this.drag = o.drag || false; - this.dragout = o.dragout || false; - this.dragstart = o.dragstart || null; - this.dragend = o.dragend || null; - - //this.c[0].style.background = '#FF0000' - ///if( this.isWithImage ) this.preloadImage(); - - this.setList(this.list); - this.init(); - if (this.isWithImage) this.preloadImage(); - if (this.isOpenOnStart) this.open(true); - this.baseH += this.mtop; - } - - // image list - - preloadImage() { - this.preLoadComplete = false; - this.tmpImage = {}; - for (let i = 0; i < this.list.length; i++) this.tmpUrl.push(this.list[i]); - this.loadOne(); - } - nextImg() { - if (this.c === null) return; - this.tmpUrl.shift(); - if (this.tmpUrl.length === 0) { - this.preLoadComplete = true; - this.addImages(); - /*this.setList( this.list ); - this.init(); - if( this.isOpenOnStart ) this.open();*/ - } else this.loadOne(); - } - loadOne() { - let self = this; - let name = this.tmpUrl[0]; - let img = document.createElement('img'); - img.style.cssText = 'position:absolute; width:' + self.imageSize[0] + 'px; height:' + self.imageSize[1] + 'px'; - img.setAttribute('src', this.path + name + this.format); - img.addEventListener('load', function () { - self.imageSize[2] = img.width; - self.imageSize[3] = img.height; - self.tmpImage[name] = img; - self.nextImg(); - }); - } - - // - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (this.up && this.isOpen) { - if (l.y > this.h - this.baseH) return 'title';else { - if (this.scroll && l.x > this.sa + this.sb - this.ss) return 'scroll'; - if (l.x > this.sa) return this.testItems(l.y - this.baseH); - } - } else { - if (l.y < this.baseH + 2) return 'title';else { - if (this.isOpen) { - if (this.scroll && l.x > this.sa + this.sb - this.ss) return 'scroll'; - if (l.x > this.sa) return this.testItems(l.y - this.baseH); - } - } - } - return ''; - } - testItems(y) { - let name = ''; - let items = this.items; - - /*if(this.hideCurrent){ - //items = [...this.items] - items = this.items.slice(this.tmpId) - }*/ - - let i = items.length, - item, - a, - b; - while (i--) { - item = items[i]; - a = item.posy + this.topList; - b = item.posy + this.itemHeight + 1 + this.topList; - if (y >= a && y <= b) { - name = 'item' + i; - this.modeItem(0); - this.current = item; - this.modeItem(1); - return name; - } - } - return name; - } - modeItem(mode) { - if (!this.current) return; - if (this.current.select && mode === 0) mode = 2; - let cc = this.colors; - switch (mode) { - case 0: - // base - this.current.style.background = cc.back; - this.current.style.color = cc.text; - break; - case 1: - // over - this.current.style.background = cc.over; - this.current.style.color = cc.textOver; - break; - case 2: - // edit / down - this.current.style.background = cc.select; - this.current.style.color = cc.textSelect; - break; - } - } - unSelected() { - if (!this.current) return; - this.modeItem(0); - this.current = null; - } - selected() { - if (!this.current) return; - this.resetItems(); - this.modeItem(2); - this.current.select = true; - } - resetItems() { - let i = this.items.length; - while (i--) { - this.items[i].select = false; - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text; - } - } - hideActive() { - if (!this.hideCurrent) return; - //if( !this.current ) return - if (this.current) this.tmpId = this.current.id; - this.resetHide(); - //this.items[this.tmpId].style.height = 0+'px' - } - resetHide() { - console.log(this.tmpId); - let i = this.items.length; - while (i--) { - if (i === this.tmpId) { - this.items[i].style.height = 0 + 'px'; - this.items[i].posy = -1; - } else { - this.items[i].style.height = this.itemHeight + 'px'; - this.items[i].posy = (this.itemHeight + 1) * (i - 1); - } - //this.items[i].style.display = 'flex' - - /*this.items[i].select = false - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text;*/ - } - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - this.isDown = false; - } - mousedown(e) { - let name = this.testZone(e); - if (!name) return false; - if (name === 'scroll') { - this.isDown = true; - this.mousemove(e); - } else if (name === 'title') { - this.modeTitle(2); - if (!this.listOnly) { - this.hideActive(); - if (!this.isOpen) this.open();else this.close(); - } - } else { - // is item - if (this.current) { - this.value = this.list[this.current.id]; - //this.tmpId = this.current.id - - if (this.isSelectable) this.selected(); - - //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); - this.send(this.value); - if (!this.listOnly) { - this.close(); - this.setTopItem(); - //this.hideActive() - } - } - } - return true; - } - mousemove(e) { - let nup = false; - let name = this.testZone(e); - if (!name) return nup; - if (name === 'title') { - this.unSelected(); - this.modeTitle(1); - this.cursor('pointer'); - } else if (name === 'scroll') { - this.cursor('s-resize'); - this.modeScroll(1); - if (this.isDown) { - this.modeScroll(2); - //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - let top = this.zone.y + this.baseH - 2; - this.update(e.clientY - top - this.sh * 0.5); - } - //if(this.isDown) this.listmove(e); - } else { - // is item - this.modeTitle(0); - this.modeScroll(0); - this.cursor('pointer'); - } - if (name !== this.prevName) nup = true; - this.prevName = name; - return nup; - } - wheel(e) { - let name = this.testZone(e); - if (name === 'title') return false; - this.py += e.delta * 10; - this.update(this.py); - return true; - } - - // ---------------------- - - reset() { - this.prevName = ''; - this.unSelected(); - this.modeTitle(0); - this.modeScroll(0); - - //console.log('this is reset') - } - modeScroll(mode) { - if (mode === this.sMode) return; - let s = this.scroller.style; - let cc = this.colors; - switch (mode) { - case 0: - // base - s.background = cc.text; - break; - case 1: - // over - s.background = cc.select; - break; - case 2: - // edit / down - s.background = cc.select; - break; - } - this.sMode = mode; - } - modeTitle(mode) { - if (mode === this.tMode) return; - let s = this.s; - let cc = this.colors; - switch (mode) { - case 0: - // base - s[3].color = cc.text; - s[3].background = cc.button; - break; - case 1: - // over - s[3].color = cc.textOver; - s[3].background = cc.overoff; - break; - case 2: - // edit / down - s[3].color = cc.textSelect; - s[3].background = cc.overoff; - break; - } - this.tMode = mode; - } - clearList() { - while (this.listIn.children.length) this.listIn.removeChild(this.listIn.lastChild); - this.items = []; - } - setList(list) { - this.clearList(); - this.list = list; - this.length = this.list.length; - let lng = this.hideCurrent ? this.length - 1 : this.length; - this.maxItem = this.full ? lng : 5; - this.maxItem = lng < this.maxItem ? lng : this.maxItem; - this.maxHeight = this.maxItem * (this.itemHeight + 1) + 2; - this.max = lng * (this.itemHeight + 1) + 2; - this.ratio = this.maxHeight / this.max; - this.sh = this.maxHeight * this.ratio; - this.range = this.maxHeight - this.sh; - this.c[2].style.height = this.maxHeight + 'px'; - this.scrollerBack.style.height = this.maxHeight + 'px'; - this.scroller.style.height = this.sh + 'px'; - if (this.max > this.maxHeight) { - this.ww = this.sb - this.ss; - this.scroll = true; - } - if (this.miniCanvas) { - this.tmpCanvas = document.createElement('canvas'); - this.tmpCanvas.width = this.imageSize[0]; - this.tmpCanvas.height = this.imageSize[1]; - this.tmpCtx = this.tmpCanvas.getContext("2d"); - this.tmpCtx.fillStyle = this.canvasBg; - this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); - } - let item, n; //, l = this.sb; - for (let i = 0; i < this.length; i++) { - n = this.list[i]; - item = this.dom('div', this.css.item + 'padding:0px ' + (this.m + 1) + 'px; width:' + this.ww + 'px; height:' + this.itemHeight + 'px; line-height:' + (this.itemHeight - 2) + 'px; color:' + this.colors.text + '; background:' + this.colors.back + ';'); - item.name = 'item' + i; - item.id = i; - item.select = false; - item.posy = (this.itemHeight + 1) * i; - this.listIn.appendChild(item); - this.items.push(item); - if (n === this.value) this.current = item; - - //if( this.isWithImage ) item.appendChild( this.tmpImage[n] ); - if (!this.isWithImage) item.textContent = n; - if (this.miniCanvas) { - let c = new Image(); - c.src = this.tmpCanvas.toDataURL(); - - //item.style.marginLeft = (this.imageSize[0]+8)+'px' - - /*let c = document.createElement('canvas') - c.width = this.imageSize[0] - c.height = this.imageSize[1] - let ctx = c.getContext("2d") - ctx.fillStyle = this.canvasBg - ctx.fillRect(0, 0, this.imageSize[0], this.imageSize[1])*/ - - //c.style.cssText = 'position:relative; pointer-events:none; display:inline-block; float:left; margin-left:0px; margin-right:5px; top:2px' - // c.style.cssText =' flex-shrink: 0;' - - c.style.cssText = 'margin-right:4px;'; - - //c.style.cssText = 'display:flex; align-content: flex-start; flex-wrap: wrap;' - //item.style.float = 'right' - item.appendChild(c); - this.tmpImage[n] = c; - } - if (this.dragout) { - item.img = this.tmpImage[n]; - item.style.pointerEvents = 'auto'; - item.draggable = "true"; - item.addEventListener('dragstart', this.dragstart || function () {/*console.log('drag start')*/}); - item.addEventListener('drag', this.drag || function () {/*console.log('drag start')*/}); - //item.addEventListener('dragover', this); - //item.addEventListener('dragenter', this); - item.addEventListener('dragleave', function () { - Roots.fakeUp(); - }); - item.addEventListener('dragend', this.dragend || function () {/*console.log('drag end')*/}.bind(this)); - //item.addEventListener('drop', function(){console.log('drop')}) - } - } - this.setTopItem(); - if (this.isSelectable) this.selected(); - } - drawImage(name, image, x, y, w, h) { - this.tmpCtx.clearRect(0, 0, this.imageSize[0], this.imageSize[1]); - this.tmpCtx.drawImage(image, x, y, w, h, 0, 0, this.imageSize[0], this.imageSize[1]); - this.tmpImage[name].src = this.tmpCanvas.toDataURL(); - - /*let c = this.tmpImage[name] - let ctx = c.getContext("2d") - ctx.drawImage(image, x, y, w, h, 0, 0, this.imageSize[0], this.imageSize[1])*/ - } - addImages() { - let lng = this.list.length; - for (let i = 0; i < lng; i++) { - this.items[i].appendChild(this.tmpImage[this.list[i]]); - } - this.setTopItem(); - } - setValue(value) { - if (!isNaN(value)) this.value = this.list[value];else this.value = value; - - //this.tmpId = value - - this.setTopItem(); - } - setTopItem() { - if (this.staticTop) return; - if (this.isWithImage) { - if (!this.preLoadComplete) return; - if (!this.c[3].children.length) { - this.canvas = document.createElement('canvas'); - this.canvas.width = this.imageSize[0]; - this.canvas.height = this.imageSize[1]; - this.canvas.style.cssText = 'margin-right:4px;'; - this.ctx = this.canvas.getContext("2d"); - this.c[3].style.textAlign = 'left'; - this.c[3].style.justifyContent = 'left'; - this.c[3].appendChild(this.canvas); - } - this.tmpImage[this.value]; - this.ctx.drawImage(this.tmpImage[this.value], 0, 0, this.imageSize[2], this.imageSize[3], 0, 0, this.imageSize[0], this.imageSize[1]); - } else this.c[3].textContent = this.value; - if (this.miniCanvas) { - if (!this.c[3].children.length) { - this.canvas = document.createElement('canvas'); - this.canvas.width = this.imageSize[0]; - this.canvas.height = this.imageSize[1]; - this.canvas.style.cssText = 'margin-right:4px;'; - this.ctx = this.canvas.getContext("2d"); - this.c[3].style.textAlign = 'left'; - this.c[3].style.justifyContent = 'left'; - this.c[3].appendChild(this.canvas); - } - this.ctx.drawImage(this.tmpImage[this.value], 0, 0); - } - } - - // ----- LIST - - update(y) { - if (!this.scroll) return; - y = y < 0 ? 0 : y; - y = y > this.range ? this.range : y; - this.topList = -Math.floor(y / this.ratio); - this.listIn.style.top = this.topList + 'px'; - this.scroller.style.top = Math.floor(y) + 'px'; - this.py = y; - } - parentHeight(t) { - if (this.group !== null) this.group.calc(t);else if (this.isUI) this.main.calc(t); - } - open(first) { - super.open(); - this.update(0); - this.h = this.maxHeight + this.baseH + 5; - if (!this.scroll) { - this.topList = 0; - this.h = this.baseH + 5 + this.max; - this.scroller.style.display = 'none'; - this.scrollerBack.style.display = 'none'; - } else { - this.scroller.style.display = 'block'; - this.scrollerBack.style.display = 'block'; - } - this.s[0].height = this.h + 'px'; - this.s[2].display = 'block'; - if (this.up) { - this.zone.y -= this.h - (this.baseH - 10); - this.setSvg(this.c[4], 'd', this.svgs.g1); - } else { - this.setSvg(this.c[4], 'd', this.svgs.g2); - } - this.rSizeContent(); - let t = this.h - this.baseH; - this.zone.h = this.h; - if (!first) this.parentHeight(t); - } - close() { - super.close(); - if (this.up) this.zone.y += this.h - (this.baseH - 10); - let t = this.h - this.baseH; - this.h = this.baseH; - this.s[0].height = this.h + 'px'; - this.s[2].display = 'none'; - this.setSvg(this.c[4], 'd', this.svgs.g1); - this.zone.h = this.h; - this.parentHeight(-t); - } - - // ----- - - text(txt) { - this.c[3].textContent = txt; - } - rSizeContent() { - let i = this.length; - while (i--) this.listIn.children[i].style.width = this.ww + 'px'; - } - rSize() { - super.rSize(); - - //Proto.prototype.rSize.call( this ); - - let s = this.s; - let w = this.sb; - let d = this.sa; - if (s[2] === undefined) return; - s[2].width = w + 'px'; - s[2].left = d + 'px'; - s[3].width = w + 'px'; - s[3].left = d + 'px'; - s[4].left = d + w - 15 + 'px'; - this.ww = w; - if (this.max > this.maxHeight) this.ww = w - this.ss; - if (this.isOpen) this.rSizeContent(); - } + class List extends Proto { + + constructor( o = {} ) { + + super( o ); + + // TODO not work + this.hideCurrent = false; + + // images + this.path = o.path || ''; + this.format = o.format || ''; + + + this.isWithImage = this.path !== '' ? true:false; + this.preLoadComplete = false; + + this.tmpImage = {}; + this.tmpUrl = []; + + this.m = o.m !== undefined ? o.m : 5; + + + let align = o.align || 'left'; + + // scroll size + let ss = o.scrollSize || 10; + this.ss = ss+1; + + this.sMode = 0; + this.tMode = 0; + + this.listOnly = o.listOnly || false; + this.staticTop = o.staticTop || false; + + this.isSelectable = this.listOnly; + if( o.select !== undefined ) o.selectable = o.select; + if( o.selectable !== undefined ) this.isSelectable = o.selectable; + + if( this.txt === '' ) this.p = 0; + + + let fltop = Math.floor(this.h*0.5)-3; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.basic + 'top:0; display:none; border-radius:'+this.radius+'px;' ); + this.c[3] = this.dom( 'div', this.css.item + 'padding:0px '+this.m+'px; margin-bottom:0px; position:absolute; justify-content:'+align+'; text-align:'+align+'; line-height:'+(this.h-4)+'px; top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:1px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); + + this.scrollerBack = this.dom( 'div', this.css.basic + 'right:0px; width:'+ss+'px; background:'+cc.back+'; display:none;'); + this.scroller = this.dom( 'div', this.css.basic + 'right:'+((ss-(ss*0.25))*0.5)+'px; width:'+(ss*0.25)+'px; background:'+cc.text+'; display:none; '); + + this.c[3].style.color = cc.text; + + + this.list = []; + this.refObject = null; + + if( o.list ){ + if( o.list instanceof Array ){ + this.list = o.list; + } else if( o.list instanceof Object ){ + this.refObject = o.list; + for( let g in this.refObject ) this.list.push( g ); + } + } + + this.items = []; + + this.prevName = ''; + + + this.tmpId = 0; + + this.baseH = this.h; + + this.itemHeight = o.itemHeight || this.h;//(this.h-3); + + // force full list + this.full = o.full || false; + + this.py = 0; + this.ww = this.sb; + this.scroll = false; + this.isDown = false; + + this.current = null; + + // list up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + if( this.up ){ + + this.c[2].style.top = 'auto'; + this.c[3].style.top = 'auto'; + this.c[4].style.top = 'auto'; + + this.c[2].style.bottom = this.h-2 + 'px'; + this.c[3].style.bottom = '1px'; + this.c[4].style.bottom = fltop + 'px'; + + } else { + this.c[2].style.top = this.baseH + 'px'; + } + + this.listIn = this.dom( 'div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); + this.listIn.name = 'list'; + + this.topList = 0; + + this.c[2].appendChild( this.listIn ); + this.c[2].appendChild( this.scrollerBack ); + this.c[2].appendChild( this.scroller ); + + if( o.value !== undefined ){ + if(!isNaN(o.value)) this.value = this.list[ o.value ]; + else this.value = o.value; + }else { + this.value = this.list[0]; + } + + this.isOpenOnStart = o.open || false; + + if( this.listOnly ){ + this.baseH = 5; + this.c[3].style.display = 'none'; + this.c[4].style.display = 'none'; + this.c[2].style.top = this.baseH+'px'; + this.isOpenOnStart = true; + } + + + this.miniCanvas = o.miniCanvas || false; + this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; + this.imageSize = o.imageSize || [20,20]; + + // dragout function + this.drag = o.drag || false; + this.dragout = o.dragout || false; + this.dragstart = o.dragstart || null; + this.dragend = o.dragend || null; + + + + //this.c[0].style.background = '#FF0000' + ///if( this.isWithImage ) this.preloadImage(); + + this.setList( this.list ); + this.init(); + if( this.isWithImage ) this.preloadImage(); + if( this.isOpenOnStart ) this.open( true ); + + this.baseH += this.mtop; + + } + + // image list + + preloadImage () { + + + + this.preLoadComplete = false; + + this.tmpImage = {}; + for( let i=0; i this.h - this.baseH ) return 'title'; + else { + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + + } else { + if( l.y < this.baseH+2 ) return 'title'; + else { + if( this.isOpen ){ + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + } + + } + + return ''; + + } + + testItems ( y ) { + + let name = ''; + + let items = this.items; + + /*if(this.hideCurrent){ + //items = [...this.items] + items = this.items.slice(this.tmpId) + + }*/ + + let i = items.length, item, a, b; + while(i--){ + item = items[i]; + a = item.posy + this.topList; + b = item.posy + this.itemHeight + 1 + this.topList; + if( y >= a && y <= b ){ + name = 'item' + i; + this.modeItem(0); + this.current = item; + this.modeItem(1); + return name; + } + + } + + return name; + + } + + modeItem ( mode ) { + + if( !this.current ) return + + if( this.current.select && mode===0) mode = 2; + let cc = this.colors; + + switch( mode ){ + + case 0: // base + this.current.style.background = cc.back; + this.current.style.color = cc.text; + break; + case 1: // over + this.current.style.background = cc.over; + this.current.style.color = cc.textOver; + break; + case 2: // edit / down + this.current.style.background = cc.select; + this.current.style.color = cc.textSelect; + break; + + } + } + + unSelected() { + + if( !this.current ) return + this.modeItem(0); + this.current = null; + + } + + selected() { + + if( !this.current ) return + this.resetItems(); + this.modeItem(2); + this.current.select = true; + + + + } + + resetItems() { + + let i = this.items.length; + while(i--){ + this.items[i].select = false; + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text; + } + + } + + hideActive() { + + if( !this.hideCurrent ) return + //if( !this.current ) return + if( this.current )this.tmpId = this.current.id; + this.resetHide(); + //this.items[this.tmpId].style.height = 0+'px' + + } + + resetHide() { + + console.log(this.tmpId); + + let i = this.items.length; + while(i--){ + if(i===this.tmpId){ + this.items[i].style.height = 0+'px'; + this.items[i].posy = -1; + } else { + this.items[i].style.height = this.itemHeight+'px'; + this.items[i].posy = (this.itemHeight+1)*(i-1); + } + //this.items[i].style.display = 'flex' + + /*this.items[i].select = false + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text;*/ + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + + mouseup ( e ) { + + this.isDown = false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'scroll' ){ + + this.isDown = true; + this.mousemove( e ); + + } else if( name === 'title' ){ + + this.modeTitle(2); + if( !this.listOnly ){ + this.hideActive(); + if( !this.isOpen ) this.open(); + else this.close(); + } + } else { + // is item + if( this.current ){ + + this.value = this.list[ this.current.id ]; + //this.tmpId = this.current.id + + if( this.isSelectable ) this.selected(); + + //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); + this.send( this.value ); + + if( !this.listOnly ) { + this.close(); + this.setTopItem(); + //this.hideActive() + } + } + + } + + return true; + + } + + mousemove ( e ) { + + let nup = false; + let name = this.testZone( e ); + + if( !name ) return nup; + + if( name === 'title' ){ + this.unSelected(); + this.modeTitle(1); + this.cursor('pointer'); + + } else if( name === 'scroll' ){ + + this.cursor('s-resize'); + this.modeScroll(1); + if( this.isDown ){ + this.modeScroll(2); + //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + let top = this.zone.y+this.baseH-2; + this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + } + //if(this.isDown) this.listmove(e); + } else { + + // is item + this.modeTitle(0); + this.modeScroll(0); + this.cursor('pointer'); + + } + + if( name !== this.prevName ) nup = true; + this.prevName = name; + + return nup; + + } + + wheel ( e ) { + + let name = this.testZone( e ); + if( name === 'title' ) return false; + this.py += e.delta*10; + this.update(this.py); + return true; + + } + + + + // ---------------------- + + reset () { + + this.prevName = ''; + this.unSelected(); + this.modeTitle(0); + this.modeScroll(0); + + //console.log('this is reset') + + } + + modeScroll ( mode ) { + + if( mode === this.sMode ) return; + + let s = this.scroller.style; + let cc = this.colors; + + switch(mode){ + case 0: // base + s.background = cc.text; + break; + case 1: // over + s.background = cc.select; + break; + case 2: // edit / down + s.background = cc.select; + break; + + } + + this.sMode = mode; + } + + modeTitle ( mode ) { + + if( mode === this.tMode ) return; + + let s = this.s; + let cc = this.colors; + + switch(mode){ + case 0: // base + s[3].color = cc.text; + s[3].background = cc.button; + break; + case 1: // over + s[3].color = cc.textOver; + s[3].background = cc.overoff; + break; + case 2: // edit / down + s[3].color = cc.textSelect; + s[3].background = cc.overoff; + break; + + } + + this.tMode = mode; + + } + + clearList () { + + while ( this.listIn.children.length ) this.listIn.removeChild( this.listIn.lastChild ); + this.items = []; + + } + + setList ( list ) { + + this.clearList(); + + this.list = list; + this.length = this.list.length; + + let lng = this.hideCurrent? this.length-1 : this.length; + + this.maxItem = this.full ? lng : 5; + this.maxItem = lng < this.maxItem ? lng : this.maxItem; + + this.maxHeight = this.maxItem * (this.itemHeight+1) + 2; + + + + this.max = lng * (this.itemHeight+1) + 2; + this.ratio = this.maxHeight / this.max; + this.sh = this.maxHeight * this.ratio; + this.range = this.maxHeight - this.sh; + + this.c[2].style.height = this.maxHeight + 'px'; + this.scrollerBack.style.height = this.maxHeight + 'px'; + this.scroller.style.height = this.sh + 'px'; + + if( this.max > this.maxHeight ){ + this.ww = this.sb - this.ss; + this.scroll = true; + } + + if( this.miniCanvas ) { + + this.tmpCanvas = document.createElement('canvas'); + this.tmpCanvas.width = this.imageSize[0]; + this.tmpCanvas.height = this.imageSize[1]; + this.tmpCtx = this.tmpCanvas.getContext("2d"); + this.tmpCtx.fillStyle = this.canvasBg; + this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); + + } + + let item, n;//, l = this.sb; + for( let i=0; i this.range ? this.range : y; + + this.topList = -Math.floor( y / this.ratio ); + + this.listIn.style.top = this.topList+'px'; + this.scroller.style.top = Math.floor( y ) + 'px'; + + this.py = y; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open ( first ) { + + super.open(); + + this.update( 0 ); + + this.h = this.maxHeight + this.baseH + 5; + if( !this.scroll ){ + this.topList = 0; + this.h = this.baseH + 5 + this.max; + this.scroller.style.display = 'none'; + this.scrollerBack.style.display = 'none'; + } else { + this.scroller.style.display = 'block'; + this.scrollerBack.style.display = 'block'; + } + this.s[0].height = this.h + 'px'; + this.s[2].display = 'block'; + + if( this.up ){ + this.zone.y -= this.h - (this.baseH-10); + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + } else { + this.setSvg( this.c[4], 'd', this.svgs.g2 ); + } + + this.rSizeContent(); + + let t = this.h - this.baseH; + + this.zone.h = this.h; + + if(!first) this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.h - (this.baseH-10); + + let t = this.h - this.baseH; + + this.h = this.baseH; + this.s[0].height = this.h + 'px'; + this.s[2].display = 'none'; + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + + this.zone.h = this.h; + + this.parentHeight( -t ); + + } + + // ----- + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSizeContent () { + + let i = this.length; + while(i--) this.listIn.children[i].style.width = this.ww + 'px'; + + } + + rSize () { + + super.rSize(); + + //Proto.prototype.rSize.call( this ); + + let s = this.s; + let w = this.sb; + let d = this.sa; + + if(s[2]=== undefined) return; + + s[2].width = w + 'px'; + s[2].left = d +'px'; + + s[3].width = w + 'px'; + s[3].left = d + 'px'; + + s[4].left = d + w - 15 + 'px'; + + this.ww = w; + if( this.max > this.maxHeight ) this.ww = w-this.ss; + if(this.isOpen) this.rSizeContent(); + + } + } - class Numeric extends Proto { - constructor(o = {}) { - super(o); - this.setTypeNumber(o); - this.allway = o.allway || false; - this.isDown = false; - this.value = [0]; - this.multy = 1; - this.invmulty = 1; - this.isSingle = true; - this.isAngle = false; - this.isVector = false; - if (o.isAngle) { - this.isAngle = true; - this.multy = Tools.torad; - this.invmulty = Tools.todeg; - } - this.isDrag = o.drag || false; - if (o.value !== undefined) { - if (!isNaN(o.value)) { - this.value = [o.value]; - } else if (o.value instanceof Array) { - this.value = o.value; - this.isSingle = false; - } else if (o.value instanceof Object) { - this.value = []; - if (o.value.x !== undefined) this.value[0] = o.value.x; - if (o.value.y !== undefined) this.value[1] = o.value.y; - if (o.value.z !== undefined) this.value[2] = o.value.z; - if (o.value.w !== undefined) this.value[3] = o.value.w; - this.isSingle = false; - this.isVector = true; - } - } - this.lng = this.value.length; - this.tmp = []; - this.current = -1; - this.prev = { - x: 0, - y: 0, - d: 0, - v: 0 - }; - let cc = this.colors; - - // bg - this.c[2] = this.dom('div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h - 8) + 'px;'); - this.cMode = []; - let i = this.lng; - while (i--) { - if (this.isAngle) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed(this.precision); - this.c[3 + i] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border + '; border-radius:' + this.radius + 'px;'); - if (o.center) this.c[2 + i].style.textAlign = 'center'; - this.c[3 + i].textContent = this.value[i]; - this.c[3 + i].style.color = this.colors.text; - this.c[3 + i].isNum = true; - this.cMode[i] = 0; - } - - // selection - this.selectId = 3 + this.lng; - this.c[this.selectId] = this.dom('div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h - 4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.cursorId = 4 + this.lng; - this.c[this.cursorId] = this.dom('div', this.css.basic + 'top:2px; height:' + (this.h - 4) + 'px; width:0px; background:' + cc.text + ';'); - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - let i = this.lng; - let t = this.tmp; - while (i--) { - if (l.x > t[i][0] && l.x < t[i][2]) return i; - } - return ''; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown(e) { - let name = this.testZone(e); - if (!this.isDown) { - this.isDown = true; - if (name !== '') { - this.current = name; - this.prev = { - x: e.clientX, - y: e.clientY, - d: 0, - v: this.isSingle ? parseFloat(this.value) : parseFloat(this.value[this.current]) - }; - this.setInput(this.c[3 + this.current]); - } - return this.mousemove(e); - } - return false; - } - mouseup(e) { - if (this.isDown) { - this.isDown = false; - this.prev = { - x: 0, - y: 0, - d: 0, - v: 0 - }; - return this.mousemove(e); - } - return false; - } - mousemove(e) { - let nup = false; - let x = 0; - let name = this.testZone(e); - if (name === '') this.cursor();else { - if (!this.isDrag) this.cursor('text');else this.cursor(this.current !== -1 ? 'move' : 'pointer'); - } - if (this.isDrag) { - if (this.current !== -1) { - this.prev.d += e.clientX - this.prev.x - (e.clientY - this.prev.y); - let n = this.prev.v + this.prev.d * this.step; - this.value[this.current] = this.numValue(n); - this.c[3 + this.current].textContent = this.value[this.current]; - this.validate(); - this.prev.x = e.clientX; - this.prev.y = e.clientY; - nup = true; - } - } else { - if (this.isDown) x = e.clientX - this.zone.x - 3; - if (this.current !== -1) x -= this.tmp[this.current][0]; - return this.upInput(x, this.isDown); - } - return nup; - } - - // ---------------------- - - reset() { - let nup = false; - return nup; - } - setValue(v) { - if (this.isVector) { - if (v.x !== undefined) this.value[0] = v.x; - if (v.y !== undefined) this.value[1] = v.y; - if (v.z !== undefined) this.value[2] = v.z; - if (v.w !== undefined) this.value[3] = v.w; - } else { - this.value = this.isSingle ? [v] : v; - } - this.update(); - } - sameStr(str) { - let i = this.value.length; - while (i--) this.c[3 + i].textContent = str; - } - update(up) { - let i = this.value.length; - while (i--) { - this.value[i] = this.numValue(this.value[i] * this.invmulty); - this.c[3 + i].textContent = this.value[i]; - } - if (up) this.send(); - } - send(v) { - v = v || this.value; - this.isSend = true; - if (this.objectLink !== null) { - if (this.isVector) { - this.objectLink[this.objectKey].fromArray(v); - } else { - this.objectLink[this.objectKey] = v; - } - } - if (this.callback) this.callback(v, this.objectKey); - this.isSend = false; - } - - // ---------------------- - // INPUT - // ---------------------- - - select(c, e, w, t) { - let s = this.s; - let d = this.current !== -1 ? this.tmp[this.current][0] + 5 : 0; - s[this.cursorId].width = '1px'; - s[this.cursorId].left = d + c + 'px'; - s[this.selectId].left = d + e + 'px'; - s[this.selectId].width = w + 'px'; - this.c[this.selectId].innerHTML = t; - } - unselect() { - let s = this.s; - if (!s) return; - this.c[this.selectId].innerHTML = ''; - s[this.selectId].width = 0 + 'px'; - s[this.cursorId].width = 0 + 'px'; - } - validate(force) { - let ar = []; - let i = this.lng; - if (this.allway) force = true; - while (i--) { - if (!isNaN(this.c[3 + i].textContent)) { - let nx = this.numValue(this.c[3 + i].textContent); - this.c[3 + i].textContent = nx; - this.value[i] = nx; - } else { - // not number - this.c[3 + i].textContent = this.value[i]; - } - ar[i] = this.value[i] * this.multy; - } - if (!force) return; - this.send(this.isSingle ? ar[0] : ar); - } - - // ---------------------- - // REZISE - // ---------------------- - - rSize() { - super.rSize(); - let sx = this.colors.sx; - let ss = sx * (this.lng - 1); - let w = (this.sb - ss) / this.lng; //(( this.sb + sx ) / this.lng )-sx - let s = this.s; - let i = this.lng; - while (i--) { - //this.tmp[i] = [ Math.floor( this.sa + ( w * i )+( 5 * i )), w ]; - this.tmp[i] = [this.sa + w * i + sx * i, w]; - this.tmp[i][2] = this.tmp[i][0] + this.tmp[i][1]; - s[3 + i].left = this.tmp[i][0] + 'px'; - s[3 + i].width = this.tmp[i][1] + 'px'; - } - } + class Numeric extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.setTypeNumber( o ); + + this.allway = o.allway || false; + + this.isDown = false; + this.value = [0]; + this.multy = 1; + this.invmulty = 1; + this.isSingle = true; + this.isAngle = false; + this.isVector = false; + + if( o.isAngle ){ + this.isAngle = true; + this.multy = Tools.torad; + this.invmulty = Tools.todeg; + } + + this.isDrag = o.drag || false; + + if( o.value !== undefined ){ + if( !isNaN(o.value) ){ + this.value = [o.value]; + } else if( o.value instanceof Array ){ + this.value = o.value; + this.isSingle = false; + } else if( o.value instanceof Object ){ + this.value = []; + if( o.value.x !== undefined ) this.value[0] = o.value.x; + if( o.value.y !== undefined ) this.value[1] = o.value.y; + if( o.value.z !== undefined ) this.value[2] = o.value.z; + if( o.value.w !== undefined ) this.value[3] = o.value.w; + this.isSingle = false; + this.isVector = true; + } + } + + this.lng = this.value.length; + this.tmp = []; + + this.current = -1; + this.prev = { x:0, y:0, d:0, v:0 }; + + let cc = this.colors; + + // bg + this.c[2] = this.dom( 'div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h-8) + 'px;' ); + + this.cMode = []; + + let i = this.lng; + while(i--){ + + if( this.isAngle ) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed( this.precision ); + this.c[3+i] = this.dom( 'div', this.css.txtselect + 'top:1px; height:'+(this.h-2)+'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;'); + if(o.center) this.c[2+i].style.textAlign = 'center'; + this.c[3+i].textContent = this.value[i]; + this.c[3+i].style.color = this.colors.text; + this.c[3+i].isNum = true; + this.cMode[i] = 0; + + } + + // selection + this.selectId = 3 + this.lng; + this.c[this.selectId] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.cursorId = 4 + this.lng; + this.c[ this.cursorId ] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + this.init(); + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x= this.txl) return 'text';else if (l.x >= this.sa) return 'scroll';else return ''; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (this.isDown) this.isDown = false; - } - mousedown(e) { - let name = this.testZone(e); - if (!name) return false; - if (name === 'scroll') { - this.isDown = true; - this.old = this.value; - this.mousemove(e); - } - - /*if( name === 'text' ){ - this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); - }*/ - - return true; - } - mousemove(e) { - let nup = false; - let name = this.testZone(e); - if (name === 'scroll') { - this.mode(1); - this.cursor('w-resize'); - //} else if(name === 'text'){ - //this.cursor('pointer'); - } else { - this.cursor(); - } - if (this.isDown) { - let n = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww * this.range + this.min - this.old; - if (n >= this.step || n <= this.step) { - n = Math.floor(n / this.step); - this.value = this.numValue(this.old + n * this.step); - this.update(true); - this.old = this.value; - } - nup = true; - } - return nup; - } - wheel(e) { - let name = this.testZone(e); - if (name === 'scroll') { - let v = this.value - this.step * e.delta; - if (v > this.max) { - v = this.isCyclic ? this.min : this.max; - } else if (v < this.min) { - v = this.isCyclic ? this.max : this.min; - } - this.setValue(v); - this.old = v; - this.update(true); - return true; - } - return false; - } - - //keydown: function ( e ) { return true; }, - - // ---------------------- - - validate() { - let n = this.c[2].textContent; - if (!isNaN(n)) { - this.value = this.numValue(n); - this.update(true); - } else this.c[2].textContent = this.value + (this.isDeg ? '°' : ''); - } - reset() { - //this.clearInput(); - this.isDown = false; - this.mode(0); - } - mode(mode) { - let s = this.s; - let cc = this.colors; - switch (mode) { - case 0: - // base - // s[2].border = '1px solid ' + this.colors.hide; - s[2].color = cc.text; - s[4].background = cc.back; - s[5].background = cc.text; - if (this.model !== 0) s[6].background = cc.text; //cc.button; - break; - case 1: - // scroll over - //s[2].border = '1px dashed ' + this.colors.hide; - s[2].color = cc.textOver; - s[4].background = cc.back; - s[5].background = cc.textOver; - if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; - break; - } - } - update(up) { - let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); - if (this.model !== 3) this.s[5].width = ww + 'px'; - if (this.s[6]) this.s[6].left = this.sa + ww + 3 + 'px'; - this.c[2].textContent = this.value + (this.isDeg ? '°' : ''); - if (up) this.send(); - } - rSize() { - super.rSize(); - let w = this.sb - this.sc; - this.ww = w - 6; - let tx = this.sc; - if (this.isUI || !this.simple) tx = this.sc + 10; - this.txl = this.w - tx + 2; - - //let ty = Math.floor(this.h * 0.5) - 8; - - let s = this.s; - s[2].width = this.sc - 6 + 'px'; - s[2].left = this.txl + 4 + 'px'; - //s[2].top = ty + 'px'; - s[3].left = this.sa + 'px'; - s[3].width = w + 'px'; - s[4].left = this.sa + 'px'; - s[4].width = w + 'px'; - s[5].left = this.sa + 3 + 'px'; - this.update(); - } + class Slide extends Proto { + constructor(o = {}) { + super(o); + + if (o.easing <= 0) throw "Easing must be > 0"; + this.easing = o.easing || 1; + + this.setTypeNumber(o); + + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + + //this.defaultBorderColor = this.colors.hide; + + this.isDown = false; + this.isOver = false; + this.allway = o.allway || false; + + this.isDeg = o.isDeg || false; + this.isCyclic = o.cyclic || false; + + this.firstImput = false; + + let cc = this.colors; + + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + this.c[2] = this.dom( + "div", + this.css.txtselect + + "border:none; background:none; width:47px; color:" + + cc.text + + ";" + ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); + this.c[3] = this.dom( + "div", + this.css.basic + " top:0; height:" + this.h + "px;" + ); + + this.c[4] = this.dom( + "div", + this.css.basic + + "background:" + + cc.back + + "; top:2px; height:" + + (this.h - 4) + + "px;" + ); + this.c[5] = this.dom( + "div", + this.css.basic + + "left:4px; top:5px; height:" + + (this.h - 10) + + "px; background:" + + cc.text + + ";" + ); + + this.c[2].isNum = true; + //this.c[2].style.height = (this.h-4) + 'px'; + //this.c[2].style.lineHeight = (this.h-8) + 'px'; + this.c[2].style.height = this.h - 2 + "px"; + this.c[2].style.lineHeight = this.h - 10 + "px"; + + if (this.model !== 0) { + let r1 = 4, + h1 = 4, + h2 = 8, + ww = this.h - 6, + ra = 16; + + if (this.model === 2) { + r1 = 0; + h1 = 2; + h2 = 4; + ra = 2; + ww = (this.h - 6) * 0.5; + } + + if (this.model === 3) this.c[5].style.visible = "none"; + + this.c[4].style.borderRadius = r1 + "px"; + this.c[4].style.height = h2 + "px"; + this.c[4].style.top = this.h * 0.5 - h1 + "px"; + this.c[5].style.borderRadius = r1 * 0.5 + "px"; + this.c[5].style.height = h1 + "px"; + this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; + + //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); + this.c[6] = this.dom( + "div", + this.css.basic + + "border-radius:" + + ra + + "px; margin-left:" + + -ww * 0.5 + + "px; background:" + + cc.text + + "; left:4px; top:3px; height:" + + (this.h - 6) + + "px; width:" + + ww + + "px;" + ); + } + + this.init(); + } + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + if (l.x >= this.txl) return "text"; + else if (l.x >= this.sa) return "scroll"; + else return ""; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (this.isDown) this.isDown = false; + } + + mousedown(e) { + let name = this.testZone(e); + + if (!name) return false; + + if (name === "scroll") { + this.isDown = true; + this.old = this.value; + this.mousemove(e); + } + + /*if( name === 'text' ){ + this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); + }*/ + + return true; + } + + mousemove(e) { + let nup = false; + + let name = this.testZone(e); + + if (name === "scroll") { + this.mode(1); + this.cursor("w-resize"); + //} else if(name === 'text'){ + //this.cursor('pointer'); + } else { + this.cursor(); + } + + if (this.isDown) { + let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; + + // lo mapeo al rango 0 ... 1 + nNormalized = Math.min(1, Math.max(0, nNormalized)); + + // aplico easing + let nEased = Math.pow(nNormalized, this.easing); // easing + + let nNew = nEased * this.range + this.min; + let nNewSlider = nNormalized * this.range + this.min; + + this.sliderValue = this.numValue(nNewSlider); + + let delta = nNew - this.old; + + let steps; + if (delta >= this.step || delta <= this.step) { + steps = Math.floor(delta / this.step); + this.value = this.numValue(this.old + steps * this.step); + // value without easing applied + + this.update(true); + this.old = this.value; + } + //console.log("n, normalized, value", nNew, nNormalized, this.value); + nup = true; + } + + return nup; + } + + wheel(e) { + let name = this.testZone(e); + + if (name === "scroll") { + let v = this.value - this.step * e.delta; + + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue(v); + this.old = v; + this.update(true); + + return true; + } + + return false; + } + + //keydown: function ( e ) { return true; }, + + // ---------------------- + + validate() { + let n = this.c[2].textContent; + + if (!isNaN(n)) { + this.value = this.numValue(n); + this.update(true); + } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + } + + reset() { + //this.clearInput(); + this.isDown = false; + this.mode(0); + } + + mode(mode) { + let s = this.s; + let cc = this.colors; + + switch (mode) { + case 0: // base + // s[2].border = '1px solid ' + this.colors.hide; + s[2].color = cc.text; + s[4].background = cc.back; + s[5].background = cc.text; + if (this.model !== 0) s[6].background = cc.text; //cc.button; + break; + case 1: // scroll over + //s[2].border = '1px dashed ' + this.colors.hide; + s[2].color = cc.textOver; + s[4].background = cc.back; + s[5].background = cc.textOver; + if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; + break; + } + } + + update(up) { + let ww = Math.floor(this.ww * ((this.sliderValue - this.min) / this.range)); + //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); + + if (this.model !== 3) this.s[5].width = ww + "px"; + if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; + this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + + if (up) this.send(); + } + + rSize() { + super.rSize(); + + let w = this.sb - this.sc; + this.ww = w - 6; + + let tx = this.sc; + if (this.isUI || !this.simple) tx = this.sc + 10; + this.txl = this.w - tx + 2; + + //let ty = Math.floor(this.h * 0.5) - 8; + + let s = this.s; + + s[2].width = this.sc - 6 + "px"; + s[2].left = this.txl + 4 + "px"; + //s[2].top = ty + 'px'; + s[3].left = this.sa + "px"; + s[3].width = w + "px"; + s[4].left = this.sa + "px"; + s[4].width = w + "px"; + s[5].left = this.sa + 3 + "px"; + + this.update(); + } } - class TextInput extends Proto { - constructor(o = {}) { - super(o); - this.cmode = 0; - this.value = o.value !== undefined ? o.value : ''; - this.placeHolder = o.placeHolder || ''; - this.allway = o.allway || false; - this.editable = o.edit !== undefined ? o.edit : true; - this.isDown = false; - let cc = this.colors; - - // text - this.c[2] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border + '; border-radius:' + this.radius + 'px;'); - this.c[2].textContent = this.value; - - // selection - this.c[3] = this.dom('div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h - 4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.c[4] = this.dom('div', this.css.basic + 'top:2px; height:' + (this.h - 4) + 'px; width:0px; background:' + cc.text + ';'); - - // fake - this.c[5] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; border:none; justify-content: center; font-style: italic; color:' + cc.border + ';'); - if (this.value === '') this.c[5].textContent = this.placeHolder; - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.x >= this.sa) return 'text'; - return ''; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (!this.editable) return; - if (this.isDown) { - this.isDown = false; - return this.mousemove(e); - } - return false; - } - mousedown(e) { - if (!this.editable) return; - let name = this.testZone(e); - if (!this.isDown) { - this.isDown = true; - if (name === 'text') this.setInput(this.c[2]); - return this.mousemove(e); - } - return false; - } - mousemove(e) { - if (!this.editable) return; - let name = this.testZone(e); - - //let l = this.local; - //if( l.x === -1 && l.y === -1 ){ return;} - - //if( l.x >= this.sa ) this.cursor('text'); - //else this.cursor(); - - let x = 0; - if (name === 'text') this.cursor('text');else this.cursor(); - if (this.isDown) x = e.clientX - this.zone.x; - return this.upInput(x - this.sa - 3, this.isDown); - } - update() { - this.c[2].textContent = this.value; - } - - // ---------------------- - - reset() { - this.cursor(); - } - - // ---------------------- - // INPUT - // ---------------------- - - select(c, e, w, t) { - let s = this.s; - let d = this.sa + 5; - s[4].width = '1px'; - s[4].left = d + e + 'px'; - s[3].left = d + e + 'px'; - s[3].width = w + 'px'; - this.c[3].innerHTML = t; - } - unselect() { - let s = this.s; - if (!s) return; - s[3].width = 0 + 'px'; - this.c[3].innerHTML = 't'; - s[4].width = 0 + 'px'; - } - validate(force) { - if (this.allway) force = true; - this.value = this.c[2].textContent; - if (this.value !== '') this.c[5].textContent = '';else this.c[5].textContent = this.placeHolder; - if (!force) return; - this.send(); - } - - // ---------------------- - // REZISE - // ---------------------- - - rSize() { - super.rSize(); - let s = this.s; - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - s[5].left = this.sa + 'px'; - s[5].width = this.sb + 'px'; - } + class TextInput extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.cmode = 0; + + this.value = o.value !== undefined ? o.value : ''; + this.placeHolder = o.placeHolder || ''; + + this.allway = o.allway || false; + this.editable = o.edit !== undefined ? o.edit : true; + + this.isDown = false; + + let cc = this.colors; + + // text + this.c[2] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[2].textContent = this.value; + + // selection + this.c[3] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.c[4] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + // fake + this.c[5] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; border:none; justify-content: center; font-style: italic; color:'+cc.border+';' ); + if( this.value === '' ) this.c[5].textContent = this.placeHolder; + + + + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x >= this.sa ) return 'text'; + return ''; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if(!this.editable) return; + + if( this.isDown ){ + this.isDown = false; + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + if( !this.isDown ){ + this.isDown = true; + if( name === 'text' ) this.setInput( this.c[2] ); + return this.mousemove( e ); + } + + return false; + + } + + mousemove ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + //let l = this.local; + //if( l.x === -1 && l.y === -1 ){ return;} + + //if( l.x >= this.sa ) this.cursor('text'); + //else this.cursor(); + + let x = 0; + + if( name === 'text' ) this.cursor('text'); + else this.cursor(); + + if( this.isDown ) x = e.clientX - this.zone.x; + + return this.upInput( x - this.sa -3, this.isDown ); + + } + + update ( ) { + + this.c[2].textContent = this.value; + + } + + // ---------------------- + + reset () { + + this.cursor(); + + } + + // ---------------------- + // INPUT + // ---------------------- + + select ( c, e, w, t ) { + + let s = this.s; + let d = this.sa + 5; + s[4].width = '1px'; + s[4].left = ( d + e ) + 'px'; + + s[3].left = ( d + e ) + 'px'; + s[3].width = w + 'px'; + this.c[3].innerHTML = t; + + } + + unselect () { + + let s = this.s; + if(!s) return; + s[3].width = 0 + 'px'; + this.c[3].innerHTML = 't'; + s[4].width = 0 + 'px'; + + } + + validate ( force ) { + + if( this.allway ) force = true; + + this.value = this.c[2].textContent; + + if(this.value !== '') this.c[5].textContent = ''; + else this.c[5].textContent = this.placeHolder; + + if( !force ) return; + + this.send(); + + } + + // ---------------------- + // REZISE + // ---------------------- + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + + s[5].left = this.sa + 'px'; + s[5].width = this.sb + 'px'; + + } + + } - class Title extends Proto { - constructor(o = {}) { - super(o); - let prefix = o.prefix || ''; - this.c[2] = this.dom('div', this.css.txt + 'justify-content:right; width:60px; line-height:' + (this.h - 8) + 'px; color:' + this.colors.text); - if (this.h === 31) { - this.s[0].height = this.h + 'px'; - this.s[1].top = 8 + 'px'; - this.c[2].style.top = 8 + 'px'; - } - let s = this.s; - s[1].justifyContent = o.align || 'left'; - //s[1].textAlign = o.align || 'left'; - s[1].fontWeight = o.fontWeight || 'bold'; - this.c[1].textContent = this.txt.substring(0, 1).toUpperCase() + this.txt.substring(1).replace("-", " "); - this.c[2].textContent = prefix; - this.init(); - } - text(txt) { - this.c[1].textContent = txt; - } - text2(txt) { - this.c[2].textContent = txt; - } - rSize() { - super.rSize(); - this.s[1].width = this.w + 'px'; //- 50 + 'px'; - this.s[2].left = this.w + 'px'; //- ( 50 + 26 ) + 'px'; - } - setColor(c) { - this.s[1].color = c; - this.s[2].color = c; - } + class Title extends Proto { + + constructor( o = {} ) { + + super( o ); + + let prefix = o.prefix || ''; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:right; width:60px; line-height:'+ (this.h-8) + 'px; color:' + this.colors.text ); + + if( this.h === 31 ){ + + this.s[0].height = this.h + 'px'; + this.s[1].top = 8 + 'px'; + this.c[2].style.top = 8 + 'px'; + + } + + let s = this.s; + + s[1].justifyContent = o.align || 'left'; + //s[1].textAlign = o.align || 'left'; + s[1].fontWeight = o.fontWeight || 'bold'; + + + this.c[1].textContent = this.txt.substring(0,1).toUpperCase() + this.txt.substring(1).replace("-", " "); + this.c[2].textContent = prefix; + + this.init(); + + } + + text( txt ) { + + this.c[1].textContent = txt; + + } + + text2( txt ) { + + this.c[2].textContent = txt; + + } + + rSize() { + + super.rSize(); + this.s[1].width = this.w + 'px'; //- 50 + 'px'; + this.s[2].left = this.w + 'px';//- ( 50 + 26 ) + 'px'; + + } + + setColor( c ) { + this.s[1].color = c; + this.s[2].color = c; + } + } - class Select extends Proto { - constructor(o = {}) { - super(o); - this.value = o.value || ''; - this.isDown = false; - this.onActif = o.onActif || function () {}; - - //let prefix = o.prefix || ''; - const cc = this.colors; - this.c[2] = this.dom('div', this.css.txt + this.css.button + ' top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.buttonBorder + '; border-radius:15px; width:30px; left:10px;'); - //this.c[2].style.color = this.fontColor; - - this.c[3] = this.dom('div', this.css.txtselect + 'height:' + (this.h - 4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder + '; border-radius:' + this.radius + 'px;'); - this.c[3].textContent = this.value; - let fltop = Math.floor(this.h * 0.5) - 7; - this.c[4] = this.dom('path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:' + fltop + 'px;', { - d: this.svgs['cursor'], - fill: cc.text, - stroke: 'none' - }); - this.stat = 1; - this.isActif = false; - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.x > this.sa && l.x < this.sa + 30) return 'over'; - return '0'; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (this.isDown) { - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove(e); - } - return false; - } - mousedown(e) { - let name = this.testZone(e); - if (!name) return false; - this.isDown = true; - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove(e); - } - mousemove(e) { - let up = false; - let name = this.testZone(e); - if (name === 'over') { - this.cursor('pointer'); - up = this.mode(this.isDown ? 3 : 2); - } else { - up = this.reset(); - } - return up; - } - - // ---------------------- - - apply(v) { - v = v || ''; - if (v !== this.value) { - this.value = v; - this.c[3].textContent = this.value; - this.send(); - } - this.mode(1); - } - update() { - this.mode(3); - } - mode(n) { - let change = false; - let cc = this.colors; - if (this.stat !== n) { - if (n === 1) this.isActif = false; - if (n === 3) { - if (!this.isActif) { - this.isActif = true; - n = 4; - this.onActif(this); - } else { - this.isActif = false; - } - } - if (n === 2 && this.isActif) n = 4; - this.stat = n; - switch (n) { - case 1: - this.s[2].color = cc.text; - this.s[2].background = cc.button; - break; - // base - case 2: - this.s[2].color = cc.textOver; - this.s[2].background = cc.overoff; - break; - // over - case 3: - this.s[2].color = cc.textOver; - this.s[2].background = cc.action; - break; - // down - case 4: - this.s[2].color = cc.textSelect; - this.s[2].background = cc.action; - break; - // actif - } - change = true; - } - return change; - } - reset() { - this.cursor(); - return this.mode(this.isActif ? 4 : 1); - } - text(txt) { - this.c[3].textContent = txt; - } - rSize() { - super.rSize(); - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = this.sa + 40 + 'px'; - s[3].width = this.sb - 40 + 'px'; - s[4].left = this.sa + 8 + 'px'; - } + class Select extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.isDown = false; + this.onActif = o.onActif || function(){}; + + //let prefix = o.prefix || ''; + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+ cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + //this.c[2].style.color = this.fontColor; + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'cursor' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + this.isActif = false; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + if( l.x > this.sa && l.x < this.sa+30 ) return 'over' + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ) + } + + return false + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false + + this.isDown = true; + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + this.send(); + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + if( n===1 ) this.isActif = false; + if( n===3 ){ + if( !this.isActif ){ this.isActif = true; n=4; this.onActif( this ); } + else { this.isActif = false; } + } + + if( n===2 && this.isActif ) n = 4; + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.action; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.action; break; // actif + + } + + change = true; + + } + + return change + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ) + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + } - class Bitmap extends Proto { - constructor(o = {}) { - super(o); - this.value = o.value || ''; - this.refTexture = o.texture || null; - this.img = null; - this.isDown = false; - this.neverlock = true; - const cc = this.colors; - this.c[2] = this.dom('div', this.css.txt + this.css.button + ' top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.buttonBorder + '; border-radius:15px; width:30px; left:10px;'); - this.c[3] = this.dom('div', this.css.txtselect + 'height:' + (this.h - 4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder + '; border-radius:' + this.radius + 'px;'); - this.c[3].textContent = this.value; - let fltop = Math.floor(this.h * 0.5) - 7; - this.c[4] = this.dom('path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:' + fltop + 'px;', { - d: this.svgs['load'], - fill: cc.text, - stroke: 'none' - }); - this.stat = 1; - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.x > this.sa && l.x < this.sa + 30) return 'over'; - return '0'; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (this.isDown) { - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove(e); - } - return false; - } - mousedown(e) { - let name = this.testZone(e); - if (!name) return false; - if (name === 'over') { - this.isDown = true; - Files.load({ - callback: this.changeBitmap.bind(this) - }); - } - - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove(e); - } - mousemove(e) { - let up = false; - let name = this.testZone(e); - if (name === 'over') { - this.cursor('pointer'); - up = this.mode(this.isDown ? 3 : 2); - } else { - up = this.reset(); - } - return up; - } - - // ---------------------- - - changeBitmap(img, fname) { - if (img) { - this.img = img; - this.apply(fname); - } else { - this.img = null; - this.apply('null'); - } - } - - // ---------------------- - - apply(v) { - v = v || ''; - if (v !== this.value) { - this.value = v; - this.c[3].textContent = this.value; - if (this.img !== null) { - if (this.objectLink !== null) this.objectLink[this.val] = v; - if (this.callback) this.callback(this.value, this.img, this.name); - } - } - this.mode(1); - } - update() { - this.mode(3); - } - mode(n) { - let change = false; - let cc = this.colors; - if (this.stat !== n) { - this.stat = n; - switch (n) { - case 1: - this.s[2].color = cc.text; - this.s[2].background = cc.button; - break; - // base - case 2: - this.s[2].color = cc.textOver; - this.s[2].background = cc.overoff; - break; - // over - case 3: - this.s[2].color = cc.textOver; - this.s[2].background = cc.over; - break; - // down - case 4: - this.s[2].color = cc.textSelect; - this.s[2].background = cc.select; - break; - // actif - } - change = true; - } - return change; - } - reset() { - this.cursor(); - return this.mode(this.isActif ? 4 : 1); - } - text(txt) { - this.c[3].textContent = txt; - } - rSize() { - super.rSize(); - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = this.sa + 40 + 'px'; - s[3].width = this.sb - 40 + 'px'; - s[4].left = this.sa + 8 + 'px'; - } + class Bitmap extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.refTexture = o.texture || null; + this.img = null; + + this.isDown = false; + this.neverlock = true; + + + + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'load' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x > this.sa && l.x < this.sa+30 ) return 'over'; + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'over' ){ + this.isDown = true; + Files.load( { callback:this.changeBitmap.bind(this) } ); + + } + + + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ); + + } + + mousemove ( e ) { + + let up = false; + + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + + changeBitmap( img, fname ){ + + if( img ){ + this.img = img; + this.apply( fname ); + } else { + this.img = null; + this.apply( 'null' ); + } + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + + if( this.img !== null ){ + if( this.objectLink !== null ) this.objectLink[ this.val ] = v; + if( this.callback ) this.callback( this.value, this.img, this.name ); + } + + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.over; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.select; break; // actif + + } + + change = true; + + } + + return change; + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ); + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + } - //import { Proto } from '../core/Proto.js'; - class Selector extends Button { - constructor(o = {}) { - if (o.selectable === undefined) o.selectable = true; - super(o); - } + //import { Proto } from '../core/Proto.js'; + + class Selector extends Button { + + constructor( o = {} ) { + + if( o.selectable === undefined ) o.selectable = true; + super( o ); + + } + } - class Item extends Proto { - constructor(o = {}) { - super(o); - this.p = 100; - this.value = this.txt; - this.status = 1; - this.itype = o.itype || 'none'; - this.val = this.itype; - this.graph = this.svgs[this.itype]; - let fltop = Math.floor(this.h * 0.5) - 7; - this.c[2] = this.dom('path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:' + fltop + 'px;', { - d: this.graph, - fill: this.colors.text, - stroke: 'none' - }); - this.s[1].marginLeft = 20 + 'px'; - this.init(); - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousemove(e) { - this.cursor('pointer'); - - //up = this.modes( this.isDown ? 3 : 2, name ); - } - mousedown(e) { - if (this.isUI) this.main.resetItem(); - this.selected(true); - this.send(); - return true; - } - uiout() { - if (this.isSelect) this.mode(3);else this.mode(1); - } - uiover() { - if (this.isSelect) this.mode(4);else this.mode(2); - } - update() {} - - /*rSize () { - - super.rSize(); - }*/ - - mode(n) { - let change = false; - if (this.status !== n) { - this.status = n; - let s = this.s, - cc = this.colors; - switch (n) { - case 1: - this.status = 1; - s[1].color = cc.text; - s[0].background = 'none'; - break; - case 2: - this.status = 2; - s[1].color = cc.textOver; - s[0].background = cc.back; - break; - case 3: - this.status = 3; - s[1].color = cc.textSelect; - s[0].background = cc.select; - break; - case 4: - this.status = 4; - s[1].color = cc.textOver; - s[0].background = cc.over; - break; - } - change = true; - } - return change; - } - reset() { - this.cursor(); - // return this.mode( 1 ); - } - selected(b) { - if (this.isSelect) this.mode(1); - this.isSelect = b || false; - if (this.isSelect) this.mode(3); - } + class Item extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.p = 100; + this.value = this.txt; + this.status = 1; + + this.itype = o.itype || 'none'; + this.val = this.itype; + + this.graph = this.svgs[ this.itype ]; + + let fltop = Math.floor(this.h*0.5)-7; + + this.c[2] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.graph, fill:this.colors.text, stroke:'none'}); + + this.s[1].marginLeft = 20 + 'px'; + + this.init(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousemove ( e ) { + + this.cursor('pointer'); + + //up = this.modes( this.isDown ? 3 : 2, name ); + + } + + mousedown ( e ) { + + if( this.isUI ) this.main.resetItem(); + + this.selected( true ); + + this.send(); + + return true; + + } + + uiout () { + + if( this.isSelect ) this.mode(3); + else this.mode(1); + + } + + uiover () { + + if( this.isSelect ) this.mode(4); + else this.mode(2); + + } + + update () { + + } + + /*rSize () { + + super.rSize(); + + }*/ + + mode ( n ) { + + let change = false; + + if( this.status !== n ){ + + this.status = n; + let s = this.s, cc = this.colors; + + switch( n ){ + + case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; + case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; + case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; + case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; + + } + + change = true; + + } + + return change; + + } + + reset () { + + this.cursor(); + // return this.mode( 1 ); + + } + + selected ( b ){ + + if( this.isSelect ) this.mode(1); + + this.isSelect = b || false; + + if( this.isSelect ) this.mode(3); + + } + + } - class Grid extends Proto { - constructor(o = {}) { - super(o); - - /*this.values = o.values || []; - if( typeof this.values === 'string' ) this.values = [ this.values ];*/ - - this.values = []; - if (o.values) { - if (o.values instanceof Array) { - this.values = o.values; - } else if (o.values instanceof String) { - this.values = [o.values]; - } else if (o.values instanceof Object) { - this.refObject = o.values; - for (let g in this.refObject) this.values.push(g); - } - } - this.lng = this.values.length; - this.value = o.value || null; - let cc = this.colors; - this.isSelectable = o.selectable || false; - this.spaces = o.spaces || [cc.sx, cc.sy]; - this.bsize = o.bsize || [90, this.h]; - this.bsizeMax = this.bsize[0]; - this.tmp = []; - this.stat = []; - this.grid = [2, Math.round(this.lng * 0.5)]; - this.h = this.grid[1] * this.bsize[1] + this.grid[1] * this.spaces[1]; //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); - - this.c[1].textContent = ''; - //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); - this.c[2] = this.dom('table', this.css.basic + 'width:100%; border-spacing: ' + (this.spaces[0] - 2) + 'px ' + this.spaces[1] + 'px; border:none;'); - let n = 0, - b, - td, - tr, - sel; - this.res = -1; - this.isDown = false; - this.neverlock = true; - this.buttons = []; - this.stat = []; - this.tmpX = []; - this.tmpY = []; - for (let i = 0; i < this.grid[1]; i++) { - tr = this.c[2].insertRow(); - tr.style.cssText = 'pointer-events:none;'; - for (let j = 0; j < this.grid[0]; j++) { - td = tr.insertCell(); - td.style.cssText = 'pointer-events:none;'; - if (this.values[n]) { - sel = false; - if (this.values[n] === this.value && this.isSelectable) sel = true; - b = document.createElement('div'); - b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:' + this.bsize[0] + 'px; height:' + (this.bsize[1] - 2) + 'px; border:' + cc.borderSize + 'px solid ' + cc.border + '; left:auto; right:auto; border-radius:' + this.radius + 'px;'; - b.style.background = sel ? cc.select : cc.button; - b.style.color = sel ? cc.textSelect : cc.text; - b.innerHTML = this.values[n]; - td.appendChild(b); - this.buttons.push(b); - this.stat.push(1); - } else { - b = document.createElement('div'); - b.style.cssText = this.css.txt + 'position:static; width:' + this.bsize[0] + 'px; height:' + this.bsize[1] + 'px; text-align:center; left:auto; right:auto; background:none;'; - td.appendChild(b); - } - if (j === 0) b.style.cssText += 'float:right;';else b.style.cssText += 'float:left;'; - n++; - } - } - this.s[0].border = 'none'; - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return -1; - l.y += this.mtop; - let tx = this.tmpX; - let ty = this.tmpY; - let id = -1; - let c = -1; - let line = -1; - let i = this.grid[0]; - while (i--) { - if (l.x > tx[i][0] && l.x < tx[i][1]) c = i; - } - i = this.grid[1]; - while (i--) { - if (l.y > ty[i][0] && l.y < ty[i][1]) line = i; - } - if (c !== -1 && line !== -1) { - id = c + line * 2; - if (id > this.lng - 1) id = -1; - } - return id; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (!this.isDown) return false; - this.isDown = false; - if (this.res !== -1) { - this.value = this.values[this.res]; - this.send(); - } - return this.mousemove(e); - } - mousedown(e) { - if (this.isDown) return false; - this.isDown = true; - return this.mousemove(e); - } - mousemove(e) { - let up = false; - this.res = this.testZone(e); - if (this.res !== -1) { - this.cursor('pointer'); - up = this.modes(this.isDown ? 3 : 2, this.res); - } else { - up = this.reset(); - } - return up; - } - - // ---------------------- - // MODE - // ----------------------- - - modes(N = 1, id = -1) { - let i = this.lng, - w, - n, - r = false; - while (i--) { - n = N; - w = this.isSelectable ? this.values[i] === this.value : false; - if (i === id) { - if (w && n === 2) n = 3; - } else { - n = 1; - if (w) n = 4; - } - if (this.mode(n, i)) r = true; - } - return r; - } - mode(n, id) { - let change = false; - let cc = this.colors, - s = this.buttons; - let i = id; - if (this.stat[id] !== n) { - this.stat[id] = n; - switch (n) { - case 1: - s[i].style.color = cc.text; - s[i].style.background = cc.button; - break; - case 2: - s[i].style.color = cc.textOver; - s[i].style.background = cc.overoff; - break; - case 3: - s[i].style.color = cc.textOver; - s[i].style.background = cc.over; - break; - case 4: - s[i].style.color = cc.textSelect; - s[i].style.background = cc.select; - break; - } - change = true; - } - return change; - } - - // ---------------------- - - reset() { - this.res = -1; - this.cursor(); - return this.modes(); - } - label(string, n) { - this.buttons[n].textContent = string; - } - icon(string, y, n) { - this.buttons[n].style.padding = (y || 0) + 'px 0px'; - this.buttons[n].innerHTML = string; - } - testW() { - let vw = this.spaces[0] * 3 + this.bsizeMax * 2, - rz = false; - if (vw > this.w) { - this.bsize[0] = (this.w - this.spaces[0] * 3) * 0.5; - rz = true; - } else { - if (this.bsize[0] !== this.bsizeMax) { - this.bsize[0] = this.bsizeMax; - rz = true; - } - } - if (!rz) return; - let i = this.buttons.length; - while (i--) this.buttons[i].style.width = this.bsize[0] + 'px'; - } - rSize() { - super.rSize(); - this.testW(); - let mid; - this.tmpX = []; - this.tmpY = []; - for (let j = 0; j < this.grid[0]; j++) { - if (j === 0) { - mid = this.w * 0.5 - this.spaces[0] * 0.5; - this.tmpX.push([mid - this.bsize[0], mid]); - } else { - mid = this.w * 0.5 + this.spaces[0] * 0.5; - this.tmpX.push([mid, mid + this.bsize[0]]); - } - } - mid = this.spaces[1]; - for (let i = 0; i < this.grid[1]; i++) { - this.tmpY.push([mid, mid + this.bsize[1]]); - mid += this.bsize[1] + this.spaces[1]; - } - } + class Grid extends Proto { + + constructor( o = {} ) { + + super( o ); + + /*this.values = o.values || []; + + if( typeof this.values === 'string' ) this.values = [ this.values ];*/ + + this.values = []; + + if( o.values ){ + if( o.values instanceof Array ){ + this.values = o.values; + } else if( o.values instanceof String ){ + this.values = [ o.values ]; + } else if( o.values instanceof Object ){ + this.refObject = o.values; + for( let g in this.refObject ) this.values.push( g ); + } + } + + this.lng = this.values.length; + + + + this.value = o.value || null; + + + + + let cc = this.colors; + + + this.isSelectable = o.selectable || false; + this.spaces = o.spaces || [ cc.sx, cc.sy ]; + this.bsize = o.bsize || [ 90, this.h ]; + + this.bsizeMax = this.bsize[0]; + + this.tmp = []; + this.stat = []; + this.grid = [ 2, Math.round( this.lng * 0.5 ) ]; + + this.h = ( this.grid[1] * this.bsize[1] ) + ( this.grid[1] * this.spaces[1] ); //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); + + this.c[1].textContent = ''; + //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); + this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1])+'px; border:none;' ); + + let n = 0, b, td, tr, sel; + + this.res = -1; + this.isDown = false; + this.neverlock = true; + + this.buttons = []; + this.stat = []; + this.tmpX = []; + this.tmpY = []; + + for( let i = 0; i < this.grid[1]; i++ ){ + + tr = this.c[2].insertRow(); + tr.style.cssText = 'pointer-events:none;'; + for( let j = 0; j < this.grid[0]; j++ ){ + + td = tr.insertCell(); + td.style.cssText = 'pointer-events:none;'; + + if( this.values[n] ){ + + sel = false; + if( this.values[n] === this.value && this.isSelectable ) sel = true; + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:'+this.bsize[0]+'px; height:'+(this.bsize[1]-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; left:auto; right:auto; border-radius:'+this.radius+'px;'; + b.style.background = sel ? cc.select : cc.button; + b.style.color = sel ? cc.textSelect : cc.text; + b.innerHTML = this.values[n]; + td.appendChild( b ); + + this.buttons.push(b); + this.stat.push(1); + + } else { + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + 'position:static; width:'+this.bsize[0]+'px; height:'+this.bsize[1]+'px; text-align:center; left:auto; right:auto; background:none;'; + td.appendChild( b ); + + } + + if(j===0) b.style.cssText += 'float:right;'; + else b.style.cssText += 'float:left;'; + + n++; + + } + } + + this.s[0].border = 'none'; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1; + + l.y += this.mtop; + + let tx = this.tmpX; + let ty = this.tmpY; + + let id = -1; + let c = -1; + let line = -1; + let i = this.grid[0]; + while( i-- ){ + if( l.x > tx[i][0] && l.x < tx[i][1] ) c = i; + } + + i = this.grid[1]; + while( i-- ){ + if( l.y > ty[i][0] && l.y < ty[i][1] ) line = i; + } + + if(c!==-1 && line!==-1){ + id = c + (line*2); + if(id>this.lng-1) id = -1; + } + + return id; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( !this.isDown ) return false + + this.isDown = false; + if( this.res !== -1 ){ + this.value = this.values[this.res]; + this.send(); + } + + return this.mousemove( e ) + + } + + mousedown ( e ) { + + if( this.isDown ) return false + this.isDown = true; + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + this.res = this.testZone( e ); + + if( this.res !== -1 ){ + this.cursor('pointer'); + up = this.modes( this.isDown ? 3 : 2, this.res ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + // MODE + // ----------------------- + + modes ( N = 1, id = -1 ) { + + let i = this.lng, w, n, r = false; + + while( i-- ){ + + n = N; + w = this.isSelectable ? this.values[ i ] === this.value : false; + + if( i === id ){ + if( w && n === 2 ) n = 3; + } else { + n = 1; + if( w ) n = 4; + } + + if( this.mode( n, i ) ) r = true; + + } + + return r + + } + + mode ( n, id ) { + + let change = false; + let cc = this.colors, s = this.buttons; + let i = id; + + if( this.stat[id] !== n ){ + + this.stat[id] = n; + + switch( n ){ + + case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; + case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; + case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; + case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; + + } + + change = true; + + } + + return change; + + } + + // ---------------------- + + reset () { + + this.res = -1; + this.cursor(); + return this.modes() + + } + + + label ( string, n ) { + + this.buttons[n].textContent = string; + + } + + icon ( string, y, n ) { + + this.buttons[n].style.padding = ( y || 0 ) +'px 0px'; + this.buttons[n].innerHTML = string; + + } + + testW () { + + let vw = this.spaces[0]*3 + this.bsizeMax*2, rz = false; + if( vw > this.w ) { + this.bsize[0] = ( this.w-(this.spaces[0]*3) ) * 0.5; + rz = true; + } else { + if( this.bsize[0] !== this.bsizeMax ) { + this.bsize[0] = this.bsizeMax; + rz = true; + } + } + + if( !rz ) return; + + let i = this.buttons.length; + while(i--) this.buttons[i].style.width = this.bsize[0] + 'px'; + + } + + rSize () { + + super.rSize(); + + this.testW(); + + let mid; + + this.tmpX = []; + this.tmpY = []; + + for( let j = 0; j < this.grid[0]; j++ ){ + + if(j===0){ + mid = ( this.w*0.5 ) - ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid-this.bsize[0], mid ] ); + } else { + mid = ( this.w*0.5 ) + ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid, mid+this.bsize[0] ] ); + } + + } + + mid = this.spaces[1]; + + for( let i = 0; i < this.grid[1]; i++ ){ + + this.tmpY.push( [ mid, mid + this.bsize[1] ] ); + mid += this.bsize[1] + this.spaces[1]; + + } + + } + } - class Pad2D extends Proto { - constructor(o = {}) { - super(o); - this.autoWidth = false; - this.minw = this.w; - this.diam = o.diam || this.w; - - //this.margin = 15; - this.pos = new V2(0, 0); - this.maxPos = 90; - this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; - this.min = o.min === undefined ? -1 : o.min; - this.max = o.max === undefined ? 1 : o.max; - this.range = (this.max - this.min) * 0.5; - this.cmode = 0; - - //console.log(this.range) - - this.c[0].style.display = 'block'; - this.precision = o.precision === undefined ? 2 : o.precision; - - /*this.bounds = {}; - this.bounds.x1 = o.x1 || -1; - this.bounds.x2 = o.x2 || 1; - this.bounds.y1 = o.y1 || -1; - this.bounds.y2 = o.y2 || 1; - this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); - this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); - this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); - this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ - - this.value = Array.isArray(o.value) && o.value.length == 2 ? o.value : [0, 0]; - this.h = o.h || this.w + 10; - this.c[0].style.width = this.w + 'px'; - - // Title - if (this.c[1] !== undefined) { - // with title - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - } - - //this.top -= this.margin - - let cc = this.colors; - - // Value - this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); - this.c[2].textContent = this.value; - - // Pad - - let pad = this.getPad2d(); - this.setSvg(pad, 'fill', cc.back, 0); - this.setSvg(pad, 'fill', cc.button, 1); - this.setSvg(pad, 'stroke', cc.back, 2); - this.setSvg(pad, 'stroke', cc.back, 3); - this.setSvg(pad, 'stroke', cc.text, 4); - this.setSvg(pad, 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); - this.setCss(pad, { - width: this.diam, - height: this.diam, - left: 0, - top: this.top - }); - this.c[3] = pad; - this.init(); - this.setValue(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'pad'; - - /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { - return 'pad'; - }*/ - - //return ''; - } - mouseup(e) { - this.isDown = false; - return this.mode(0); - } - mousedown(e) { - if (this.testZone(e) === 'pad') { - this.isDown = true; - this.mousemove(e); - return this.mode(1); - } - } - mousemove(e) { - if (!this.isDown) return; - let x = this.w * 0.5 - (e.clientX - this.zone.x); - let y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); - let r = 256 / this.diam; - x = -(x * r); - y = -(y * r); - x = Tools.clamp(x, -this.maxPos, this.maxPos); - y = Tools.clamp(y, -this.maxPos, this.maxPos); - - //let x = e.clientX - this.zone.x; - //let y = e.clientY - this.zone.y - this.top; - - /*if( x < this.margin ) x = this.margin; - if( x > this.w - this.margin ) x = this.w - this.margin; - if( y < this.margin ) y = this.margin; - if( y > this.w - this.margin ) y = this.w - this.margin;*/ - - //console.log(x,y) - - this.setPos([x, y]); - this.update(true); - } - mode(mode) { - if (this.cmode === mode) return false; - let cc = this.colors; - switch (mode) { - case 0: - // base - - this.s[2].color = cc.text; - this.setSvg(this.c[3], 'fill', cc.back, 0); - this.setSvg(this.c[3], 'fill', cc.button, 1); - this.setSvg(this.c[3], 'stroke', cc.back, 2); - this.setSvg(this.c[3], 'stroke', cc.back, 3); - this.setSvg(this.c[3], 'stroke', cc.text, 4); - break; - case 1: - // down - - this.s[2].color = cc.textSelect; - this.setSvg(this.c[3], 'fill', cc.backoff, 0); - this.setSvg(this.c[3], 'fill', cc.overoff, 1); - this.setSvg(this.c[3], 'stroke', cc.backoff, 2); - this.setSvg(this.c[3], 'stroke', cc.backoff, 3); - this.setSvg(this.c[3], 'stroke', cc.textSelect, 4); - break; - } - this.cmode = mode; - return true; - } - update(up) { - //if( up === undefined ) up = true; - - this.c[2].textContent = this.value; - this.updateSVG(); - if (up) this.send(); - } - updateSVG() { - if (this.model == 1) { - this.setSvg(this.c[3], 'y1', this.pos.y, 2); - this.setSvg(this.c[3], 'y2', this.pos.y, 2); - this.setSvg(this.c[3], 'x1', this.pos.x, 3); - this.setSvg(this.c[3], 'x2', this.pos.x, 3); - } - this.setSvg(this.c[3], 'cx', this.pos.x, 4); - this.setSvg(this.c[3], 'cy', this.pos.y, 4); - } - setPos(p) { - //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; - - this.pos.set(p[0] + 128, p[1] + 128); - let r = 1 / this.maxPos; - this.value[0] = (p[0] * r * this.range).toFixed(this.precision); - this.value[1] = (p[1] * r * this.range).toFixed(this.precision); - } - setValue(v, up = false) { - if (v === undefined) v = this.value; - - /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; - if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; - if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; - if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ - - this.value[0] = Math.min(this.max, Math.max(this.min, v[0])).toFixed(this.precision) * 1; - this.value[1] = Math.min(this.max, Math.max(this.min, v[1])).toFixed(this.precision) * 1; - this.pos.set(this.value[0] / this.range * this.maxPos + 128, this.value[1] / this.range * this.maxPos + 128); - - //console.log(this.pos) - - this.update(up); - } - - /*lerp( s1, s2, d1, d2, c = true ) { - let s = ( d2 - d1 ) / ( s2 - s1 ); - return c ? ( v ) => { - return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 - } : ( v ) => { - return ( v - s1 ) * s + d1 - } - }*/ + class Pad2D extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + + //this.margin = 15; + this.pos = new V2(0,0); + this.maxPos = 90; + + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.min = o.min === undefined ? -1 : o.min; + this.max = o.max === undefined ? 1 : o.max; + + this.range = (this.max - this.min)*0.5; + + this.cmode = 0; + + + //console.log(this.range) + + this.c[0].style.display = 'block'; + + + + + + this.precision = o.precision === undefined ? 2 : o.precision; + + /*this.bounds = {}; + this.bounds.x1 = o.x1 || -1; + this.bounds.x2 = o.x2 || 1; + this.bounds.y1 = o.y1 || -1; + this.bounds.y2 = o.y2 || 1; + + this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); + this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); + + this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); + this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ + + this.value = ( Array.isArray( o.value ) && o.value.length == 2 ) ? o.value : [ 0, 0 ]; + + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w + 'px'; + + // Title + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + //this.top -= this.margin + + let cc = this.colors; + + + // Value + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+ ( this.h - 20 ) + 'px; width:100%; color:' + cc.text ); + this.c[2].textContent = this.value; + + // Pad + + let pad = this.getPad2d(); + + this.setSvg( pad, 'fill', cc.back, 0 ); + this.setSvg( pad, 'fill', cc.button, 1 ); + this.setSvg( pad, 'stroke', cc.back, 2 ); + this.setSvg( pad, 'stroke', cc.back, 3 ); + this.setSvg( pad, 'stroke', cc.text, 4 ); + + this.setSvg( pad, 'viewBox', '0 0 '+this.diam+' '+this.diam ); + this.setCss( pad, { width:this.diam, height:this.diam, left:0, top:this.top }); + + this.c[3] = pad; + + this.init(); + this.setValue(); + + } + + testZone ( e ) { + + let l = this.local; + + if( l.x === -1 && l.y === -1 ) return ''; + + + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'pad'; + + /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { + return 'pad'; + }*/ + + //return ''; + + } + + mouseup ( e ) { + + this.isDown = false; + return this.mode(0); + + } + + mousedown ( e ) { + + if ( this.testZone(e) === 'pad' ) { + + this.isDown = true; + this.mousemove( e ); + return this.mode(1); + } + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let x = (this.w*0.5) - ( e.clientX - this.zone.x ); + let y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + + let r = 256 / this.diam; + + x = -(x*r); + y = -(y*r); + + x = Tools.clamp( x, -this.maxPos, this.maxPos ); + y = Tools.clamp( y, -this.maxPos, this.maxPos ); + + //let x = e.clientX - this.zone.x; + //let y = e.clientY - this.zone.y - this.top; + + /*if( x < this.margin ) x = this.margin; + if( x > this.w - this.margin ) x = this.w - this.margin; + if( y < this.margin ) y = this.margin; + if( y > this.w - this.margin ) y = this.w - this.margin;*/ + + //console.log(x,y) + + this.setPos( [ x , y ] ); + + this.update( true ); + + } + + mode ( mode ) { + + if( this.cmode === mode ) return false; + + let cc = this.colors; + + switch( mode ){ + case 0: // base + + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.back, 0); + this.setSvg( this.c[3], 'fill', cc.button, 1); + this.setSvg( this.c[3], 'stroke', cc.back, 2); + this.setSvg( this.c[3], 'stroke', cc.back, 3); + this.setSvg( this.c[3], 'stroke', cc.text, 4 ); + + break; + case 1: // down + + this.s[2].color = cc.textSelect; + this.setSvg( this.c[3], 'fill', cc.backoff, 0); + this.setSvg( this.c[3], 'fill', cc.overoff, 1); + this.setSvg( this.c[3], 'stroke', cc.backoff, 2); + this.setSvg( this.c[3], 'stroke', cc.backoff, 3); + this.setSvg( this.c[3], 'stroke', cc.textSelect, 4 ); + + break; + } + + this.cmode = mode; + return true; + + + + } + + update ( up ) { + + //if( up === undefined ) up = true; + + this.c[2].textContent = this.value; + + this.updateSVG(); + + if( up ) this.send(); + + } + + updateSVG() { + + if ( this.model == 1 ) { + + this.setSvg( this.c[3], 'y1', this.pos.y, 2 ); + this.setSvg( this.c[3], 'y2', this.pos.y, 2 ); + + this.setSvg( this.c[3], 'x1', this.pos.x, 3 ); + this.setSvg( this.c[3], 'x2', this.pos.x, 3 ); + + } + + this.setSvg( this.c[3], 'cx', this.pos.x, 4 ); + this.setSvg( this.c[3], 'cy', this.pos.y, 4 ); + + } + + setPos ( p ) { + + //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; + + this.pos.set( p[0]+128 , p[1]+128 ); + + let r = 1/this.maxPos; + + this.value[0] = ((p[0]*r)*this.range).toFixed( this.precision ); + this.value[1] = ((p[1]*r)*this.range).toFixed( this.precision ); + + } + + setValue ( v, up = false ) { + + if( v === undefined ) v = this.value; + + /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; + if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; + if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; + if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ + + this.value[0] = Math.min( this.max, Math.max( this.min, v[0] ) ).toFixed( this.precision ) * 1; + this.value[1] = Math.min( this.max, Math.max( this.min, v[1] ) ).toFixed( this.precision ) * 1; + + this.pos.set( ((this.value[0]/this.range)*this.maxPos)+128 , ((this.value[1]/this.range)*this.maxPos)+128 ); + + //console.log(this.pos) + + this.update( up ); + + } + + /*lerp( s1, s2, d1, d2, c = true ) { + + let s = ( d2 - d1 ) / ( s2 - s1 ); + + return c ? ( v ) => { + return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 + } : ( v ) => { + return ( v - s1 ) * s + d1 + } + + }*/ + } - const add = function () { - let a = arguments; - let type, - o, - ref = false, - n = null; - if (typeof a[0] === 'string') { - type = a[0]; - o = a[1] || {}; - } else if (typeof a[0] === 'object') { - // like dat gui - - ref = true; - if (a[2] === undefined) [].push.call(a, {}); - type = a[2].type ? a[2].type : autoType(a[0][a[1]], a[2]); - o = a[2]; - o.name = a[1]; - if (o.hasOwnProperty("displayName")) o.name = o.displayName; - if (type === 'list' && !o.list) { - o.list = a[0][a[1]]; - } else o.value = a[0][a[1]]; - } - let name = type.toLowerCase(); - if (name === 'group') { - o.add = add; - //o.dx = 8 - } - switch (name) { - case 'bool': - case 'boolean': - n = new Bool(o); - break; - case 'button': - n = new Button(o); - break; - case 'circular': - n = new Circular(o); - break; - case 'color': - n = new Color(o); - break; - case 'fps': - n = new Fps(o); - break; - case 'graph': - n = new Graph(o); - break; - case 'group': - n = new Group(o); - break; - case 'joystick': - n = new Joystick(o); - break; - case 'knob': - n = new Knob(o); - break; - case 'list': - n = new List(o); - break; - case 'numeric': - case 'number': - n = new Numeric(o); - break; - case 'slide': - n = new Slide(o); - break; - case 'textInput': - case 'string': - n = new TextInput(o); - break; - case 'title': - case 'text': - n = new Title(o); - break; - case 'select': - n = new Select(o); - break; - case 'bitmap': - n = new Bitmap(o); - break; - case 'selector': - n = new Selector(o); - break; - case 'empty': - case 'space': - n = new Empty(o); - break; - case 'item': - n = new Item(o); - break; - case 'grid': - n = new Grid(o); - break; - case 'pad2d': - case 'pad': - n = new Pad2D(o); - break; - } - if (n !== null) { - Roots.needResize = true; - if (ref) n.setReferency(a[0], a[1]); - return n; - } - }; - const autoType = function (v, o) { - let type = 'slide'; - if (typeof v === 'boolean') type = 'bool';else if (typeof v === 'string') { - if (v.substring(0, 1) === '#') type = 'color';else type = 'string'; - } else if (typeof v === 'number') { - if (o.ctype) type = 'color';else type = 'slide'; - } else if (typeof v === 'array' && v instanceof Array) { - if (typeof v[0] === 'number') type = 'number';else if (typeof v[0] === 'string') type = 'list'; - } else if (typeof v === 'object' && v instanceof Object) { - if (v.x !== undefined) type = 'number';else type = 'list'; - } - return type; + const add = function () { + + let a = arguments; + + let type, o, ref = false, n = null; + + if( typeof a[0] === 'string' ){ + + type = a[0]; + o = a[1] || {}; + + } else if ( typeof a[0] === 'object' ){ // like dat gui + + ref = true; + if( a[2] === undefined ) [].push.call(a, {}); + + type = a[2].type ? a[2].type : autoType( a[0][a[1]], a[2] ); + + o = a[2]; + o.name = a[1]; + if (o.hasOwnProperty("displayName")) o.name = o.displayName; + + if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } + else o.value = a[0][a[1]]; + + } + + let name = type.toLowerCase(); + + if( name === 'group' ){ + o.add = add; + //o.dx = 8 + } + + switch( name ){ + + case 'bool': case 'boolean': n = new Bool(o); break; + case 'button': n = new Button(o); break; + case 'circular': n = new Circular(o); break; + case 'color': n = new Color(o); break; + case 'fps': n = new Fps(o); break; + case 'graph': n = new Graph(o); break; + case 'group': n = new Group(o); break; + case 'joystick': n = new Joystick(o); break; + case 'knob': n = new Knob(o); break; + case 'list': n = new List(o); break; + case 'numeric': case 'number': n = new Numeric(o); break; + case 'slide': n = new Slide(o); break; + case 'textInput': case 'string': n = new TextInput(o); break; + case 'title': case 'text': n = new Title(o); break; + case 'select': n = new Select(o); break; + case 'bitmap': n = new Bitmap(o); break; + case 'selector': n = new Selector(o); break; + case 'empty': case 'space': n = new Empty(o); break; + case 'item': n = new Item(o); break; + case 'grid': n = new Grid(o); break; + case 'pad2d': case 'pad': n = new Pad2D(o); break; + + } + + + + if( n !== null ){ + + Roots.needResize = true; + + if( ref ) n.setReferency( a[0], a[1] ); + return n; + + } + + }; + + const autoType = function ( v, o ) { + + let type = 'slide'; + + if( typeof v === 'boolean' ) type = 'bool'; + else if( typeof v === 'string' ){ + + if( v.substring(0,1) === '#' ) type = 'color'; + else type = 'string'; + + } else if( typeof v === 'number' ){ + + if( o.ctype ) type = 'color'; + else type = 'slide'; + + } else if( typeof v === 'array' && v instanceof Array ){ + + if( typeof v[0] === 'number' ) type = 'number'; + else if( typeof v[0] === 'string' ) type = 'list'; + + } else if( typeof v === 'object' && v instanceof Object ){ + + if( v.x !== undefined ) type = 'number'; + else type = 'list'; + + } + + return type + }; - /** - * @author lth / https://github.com/lo-th - */ - - class Gui { - constructor(o = {}) { - this.isGui = true; - this.name = 'gui'; - - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; - - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors);else this.colors = Tools.defineColor(o); - - //this.cleanning = false - - // style - this.css = Tools.cloneCss(); - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 - - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; - - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") ? o.addDOMEventListeners : true; - this.callback = o.callback === undefined ? null : o.callback; - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - this.cn = ''; - - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; - this.size.h = this.size.h < 11 ? 11 : this.size.h; - - // local mouse and zone - this.local = new V2().neg(); - this.zone = { - x: 0, - y: 0, - w: this.size.w, - h: 0 - }; - - // virtual mouse - this.mouse = new V2().neg(); - this.h = 0; - //this.prevY = -1; - this.sw = 0; - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); - - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; - this.autoResize = o.autoResize === undefined ? true : o.autoResize; - - // default position - this.isCenter = o.center || false; - this.cssGui = o.css !== undefined ? o.css : this.isCenter ? '' : 'right:10px;'; - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; - this.isNewTarget = false; - let cc = this.colors; - this.content = Tools.dom('div', this.css.basic + ' width:0px; height:auto; top:0px; background:' + cc.content + '; ' + this.cssGui); - this.innerContent = Tools.dom('div', this.css.basic + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); - - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? 'display:flex; flex-flow: row wrap;' : ''; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom('div', this.css.basic + flexible + 'width:100%; left:0; '); - this.innerContent.appendChild(this.inner); - - // scroll - this.scrollBG = Tools.dom('div', this.css.basic + 'right:0; top:0; width:' + (this.size.s - 1) + 'px; height:10px; display:none; background:' + cc.background + ';'); - this.content.appendChild(this.scrollBG); - this.scroll = Tools.dom('div', this.css.basic + 'background:' + cc.button + '; right:2px; top:0; width:' + (this.size.s - 4) + 'px; height:10px;'); - this.scrollBG.appendChild(this.scroll); - - // bottom button - this.bottomText = o.bottomText || ['open', 'close']; - let r = cc.radius; - this.bottom = Tools.dom('div', this.css.txt + 'width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:' + r + 'px; border-bottom-left-radius:' + r + 'px; justify-content:center; height:' + this.bh + 'px; line-height:' + (this.bh - 5) + 'px; color:' + cc.text + ';'); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen ? this.bottomText[1] : this.bottomText[0]; - this.bottom.style.background = cc.background; - - // - - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } - if (this.parent !== null) this.parent.appendChild(this.content); - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = 'auto'; - } else { - this.content.style.left = '0px'; - this.content.style.right = 'auto'; - o.transition = 0; - } - - // height transition - this.transition = o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - this.setWidth(); - if (this.isCanvas) this.makeCanvas(); - Roots.add(this); - } - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN - }); - } - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN - }); - } - triggerMouseUp(x, y) { - /* - clientX,clientY are no used when isCanvas==true - */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN - }); - } - setTop(t, h) { - this.content.style.top = t + 'px'; - if (h !== undefined) this.forceHeight = h; - this.calc(); - Roots.needReZone = true; - } - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = 'height ' + this.transition + 's ease-out'; - this.content.style.transition = 'height ' + this.transition + 's ease-out'; - this.bottom.style.transition = 'top ' + this.transition + 's ease-out'; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } - - // ---------------------- - // CANVAS - // ---------------------- - - onDraw() {} - makeCanvas() { - this.canvas = document.createElementNS('http://www.w3.org/1999/xhtml', "canvas"); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - - //console.log( this.canvas.width, this.canvas.height ) - } - draw(force) { - if (this.canvas === null) return; - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } - - ////// - - getDom() { - return this.content; - } - noMouse() { - this.mouse.neg(); - } - setMouse(uv, flip = true) { - if (flip) this.mouse.set(Math.round(uv.x * this.canvas.width), this.canvas.height - Math.round(uv.y * this.canvas.height));else this.mouse.set(Math.round(uv.x * this.canvas.width), Math.round(uv.y * this.canvas.height)); - //this.mouse.set( m.x, m.y ); - - //console.log("setMouse "+uv.x+" "+uv.y) - } - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } - hide(b) { - this.content.style.visibility = b ? 'hidden' : 'visible'; - } - display(v = false) { - this.content.style.visibility = v ? 'visible' : 'hidden'; - } - onChange(f) { - this.callback = f || null; - return this; - } - - // ---------------------- - // STYLES - // ---------------------- - - mode(n) { - let needChange = false; - let cc = this.colors; - if (n !== this.cn) { - this.cn = n; - switch (n) { - case 'def': - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case 'scrollOver': - Roots.cursor('ns-resize'); - this.scroll.style.background = cc.select; - break; - case 'scrollDown': - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case 'bottomOver': - Roots.cursor('pointer'); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } - needChange = true; - } - return needChange; - } - - // ---------------------- - // TARGET - // ---------------------- - - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } - this.proto = null; - this.current = -1; - - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - - Roots.cursor(); - return true; - } - - // ---------------------- - // ZONE TEST - // ---------------------- - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - this.isReset = false; - let name = ''; - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = 'bottom';else name = l.x > s ? 'scroll' : 'content'; - return name; - } - - // ---------------------- - // EVENTS - // ---------------------- - - handleEvent(e) { - //if( this.cleanning ) return - - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; - let change = false; - let protoChange = false; - let name = this.testZone(e); - if (type === 'mouseup' && this.isDown) this.isDown = false; - if (type === 'mousedown' && !this.isDown) this.isDown = true; - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } - if (!name) return; - switch (name) { - case 'content': - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - if (Roots.isMobile && type === 'mousedown') this.getNext(e, change); - if (this.proto) protoChange = this.proto.handleEvent(e); - if (type === 'mousemove') change = this.mode('def'); - if (type === 'wheel' && !protoChange && this.isScroll) change = this.onWheel(e); - if (!Roots.lock) { - this.getNext(e, change); - } - break; - case 'bottom': - this.clearTarget(); - if (type === 'mousemove') change = this.mode('bottomOver'); - if (type === 'mousedown') { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen ? this.bottomText[1] : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode('def'); - change = true; - } - break; - case 'scroll': - this.clearTarget(); - if (type === 'mousemove') change = this.mode('scrollOver'); - if (type === 'mousedown') change = this.mode('scrollDown'); - if (type === 'wheel') change = this.onWheel(e); - if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); - break; - } - if (this.isDown) change = true; - if (protoChange) change = true; - if (type === 'keyup') change = true; - if (type === 'keydown') change = true; - if (change) this.draw(); - } - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); - if (next !== this.current) { - this.clearTarget(); - this.current = next; - this.isNewTarget = true; - } - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } - - // ---------------------- - // RESET - // ---------------------- - - reset(force) { - if (this.isReset) return; - - //this.resetItem(); - - this.mouse.neg(); - this.isDown = false; - - //Roots.clearInput(); - let r = this.mode('def'); - let r2 = this.clearTarget(); - if (r || r2) this.draw(true); - this.isReset = true; - - //Roots.lock = false; - } - - // ---------------------- - // ADD NODE - // ---------------------- - - add() { - //if(this.cleanning) this.cleanning = false - - let a = arguments; - let ontop = false; - if (typeof a[1] === 'object') { - a[1].isUI = true; - a[1].main = this; - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === 'string') { - if (a[2] === undefined) [].push.call(a, { - isUI: true, - main: this - });else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } - let u = add.apply(this, a); - if (u === null) return; - if (ontop) this.uis.unshift(u);else this.uis.push(u); - this.calc(); - this.isEmpty = false; - return u; - } - - // remove one node - - remove(n) { - if (n.dispose) n.dispose(); - } - - // call after uis clear - - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } - - // clear all gui - - empty() { - //this.cleanning = true - - //this.close(); - - let i = this.uis.length, - item; - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } - this.uis = []; - this.isEmpty = true; - this.calc(); - } - clear() { - this.empty(); - } - clear2() { - setTimeout(this.empty.bind(this), 0); - } - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } - - // ---------------------- - // ITEMS SPECIAL - // ---------------------- - - resetItem() { - if (!this.isItemMode) return; - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } - setItem(name) { - if (!this.isItemMode) return; - name = name || ''; - this.resetItem(); - if (!name) { - this.update(0); - return; - } - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } - - // ---------------------- - // SCROLL - // ---------------------- - - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? 'block' : 'none'; - if (b) { - this.total = this.h; - this.maxView = this.maxHeight; - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; - this.range = this.maxView - this.sh; - this.oy = Tools.clamp(this.oy, 0, this.range); - this.scrollBG.style.height = this.maxView + 'px'; - this.scroll.style.height = this.sh + 'px'; - } - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } - update(y) { - y = Tools.clamp(y, 0, this.range); - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + 'px'; - this.scroll.style.top = Math.floor(y) + 'px'; - this.oy = y; - } - - // ---------------------- - // RESIZE FUNCTION - // ---------------------- - - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } - setHeight() { - if (this.tmp) clearTimeout(this.tmp); - this.zone.h = this.bh; - this.isScroll = false; - if (this.isOpen) { - this.h = this.calcUis(); - let hhh = this.forceHeight ? this.forceHeight + this.zone.y : window.innerHeight; - this.maxHeight = hhh - this.zone.y - this.bh; - let diff = this.h - this.maxHeight; - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } - this.upScroll(this.isScroll); - this.innerContent.style.height = this.zone.h - this.bh + 'px'; - this.content.style.height = this.zone.h + 'px'; - this.bottom.style.top = this.zone.h - this.bh + 'px'; - if (this.forceHeight && this.lockHeight) this.content.style.height = this.forceHeight + 'px'; - if (this.isCanvas) this.draw(true); - } - rezone() { - Roots.needReZone = true; - } - setWidth(w) { - if (w) this.zone.w = w; - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + 'px'; - if (this.isCenter) this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + 'px'; - this.setItemWidth(this.zone.w - this.sw); - } - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } + /** + * @author lth / https://github.com/lo-th + */ + + class Gui { + constructor(o = {}) { + this.isGui = true; + + this.name = "gui"; + + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; + + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); + + //this.cleanning = false + + // style + this.css = Tools.cloneCss(); + + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 + + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; + + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; + + this.callback = o.callback === undefined ? null : o.callback; + + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; + + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + + this.cn = ""; + + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; + + this.size.h = this.size.h < 11 ? 11 : this.size.h; + + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + + // virtual mouse + this.mouse = new V2().neg(); + + this.h = 0; + //this.prevY = -1; + this.sw = 0; + + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); + + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; + + this.autoResize = o.autoResize === undefined ? true : o.autoResize; + + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; + + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; + + this.isNewTarget = false; + + let cc = this.colors; + + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); + + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); + + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); + + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); + + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); + + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; + + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } + + if (this.parent !== null) this.parent.appendChild(this.content); + + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } + + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + + this.setWidth(); + + if (this.isCanvas) this.makeCanvas(); + + Roots.add(this); + } + + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseUp(x, y) { + /* + + clientX,clientY are no used when isCanvas==true + */ + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); + + Roots.needReZone = true; + } + + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } + + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } + + // ---------------------- + // CANVAS + // ---------------------- + + onDraw() {} + + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + + //console.log( this.canvas.width, this.canvas.height ) + } + + draw(force) { + if (this.canvas === null) return; + + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } + + ////// + + getDom() { + return this.content; + } + + noMouse() { + this.mouse.neg(); + } + + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); + + //console.log("setMouse "+uv.x+" "+uv.y) + } + + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } + + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } + + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } + + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } + + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } + + onChange(f) { + this.callback = f || null; + return this; + } + + // ---------------------- + // STYLES + // ---------------------- + + mode(n) { + let needChange = false; + let cc = this.colors; + + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } + + needChange = true; + } + + return needChange; + } + + // ---------------------- + // TARGET + // ---------------------- + + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + + this.proto = null; + this.current = -1; + + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + + Roots.cursor(); + return true; + } + + // ---------------------- + // ZONE TEST + // ---------------------- + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + this.isReset = false; + + let name = ""; + + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; + + return name; + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent(e) { + //if( this.cleanning ) return + + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; + + let change = false; + let protoChange = false; + + let name = this.testZone(e); + + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; + + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } + + if (!name) return; + + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); + + if (this.proto) protoChange = this.proto.handleEvent(e); + + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); + + if (!Roots.lock) { + this.getNext(e, change); + } + + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } + + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + + break; + } + + if (this.isDown) change = true; + if (protoChange) change = true; + + if (type === "keyup") change = true; + if (type === "keydown") change = true; + + if (change) this.draw(); + } + + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); + + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } + + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } + + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } + + // ---------------------- + // RESET + // ---------------------- + + reset(force) { + if (this.isReset) return; + + //this.resetItem(); + + this.mouse.neg(); + this.isDown = false; + + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); + + if (r || r2) this.draw(true); + + this.isReset = true; + + //Roots.lock = false; + } + + // ---------------------- + // ADD NODE + // ---------------------- + + add() { + //if(this.cleanning) this.cleanning = false + + let a = arguments; + let ontop = false; + + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; + + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } + + let u = add.apply(this, a); + + if (u === null) return; + + if (ontop) this.uis.unshift(u); + else this.uis.push(u); + + this.calc(); + + this.isEmpty = false; + + return u; + } + + // remove one node + + remove(n) { + if (n.dispose) n.dispose(); + } + + // call after uis clear + + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } + + // clear all gui + + empty() { + //this.cleanning = true + + //this.close(); + + let i = this.uis.length, + item; + + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } + + this.uis = []; + this.isEmpty = true; + this.calc(); + } + + clear() { + this.empty(); + } + + clear2() { + setTimeout(this.empty.bind(this), 0); + } + + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } + + // ---------------------- + // ITEMS SPECIAL + // ---------------------- + + resetItem() { + if (!this.isItemMode) return; + + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } + + setItem(name) { + if (!this.isItemMode) return; + + name = name || ""; + this.resetItem(); + + if (!name) { + this.update(0); + return; + } + + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } + + // ---------------------- + // SCROLL + // ---------------------- + + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; + + if (b) { + this.total = this.h; + + this.maxView = this.maxHeight; + + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; + + this.range = this.maxView - this.sh; + + this.oy = Tools.clamp(this.oy, 0, this.range); + + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } + + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } + + update(y) { + y = Tools.clamp(y, 0, this.range); + + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } + + // ---------------------- + // RESIZE FUNCTION + // ---------------------- + + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } + + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } + + setHeight() { + if (this.tmp) clearTimeout(this.tmp); + + this.zone.h = this.bh; + this.isScroll = false; + + if (this.isOpen) { + this.h = this.calcUis(); + + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; + + this.maxHeight = hhh - this.zone.y - this.bh; + + let diff = this.h - this.maxHeight; + + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + + this.upScroll(this.isScroll); + + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + + rezone() { + Roots.needReZone = true; + } + + setWidth(w) { + if (w) this.zone.w = w; + + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } } exports.Files = Files; @@ -7130,3 +9061,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbG9vcDogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKFIuaXNMb29wKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUi5sb29wKTtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBSLnVwZGF0ZSgpO1xyXG4gICAgLy8gaWYgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gYSB2YWx1ZSBnZW5lcmF0ZWQgZXh0ZXJuYWxseSwgdGhlIEdVSSBuZWVkcyB0byBiZSByZWRyYXduXHJcbiAgICBpZiAoUi51aVswXSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqICgodGhpcy5zbGlkZXJWYWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2UpKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Q0FBQTtDQUNBO0NBQ0E7QUFDQTtBQUNZLE9BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsTUFBTSxDQUFDLEdBQUc7Q0FDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7Q0FDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7Q0FDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0NBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSztDQUNiLEVBQUUsS0FBSyxFQUFFLEtBQUs7Q0FDZCxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDYjtDQUNBLEVBQUUsVUFBVSxFQUFFLElBQUk7Q0FDbEIsRUFBRSxVQUFVLEVBQUUsS0FBSztDQUNuQixFQUFFLFNBQVMsRUFBRSxLQUFLO0NBQ2xCLEVBQUUsWUFBWSxFQUFFLEtBQUs7Q0FDckIsRUFBRSxP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O0NBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDMUIsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtDQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7Q0FDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUNqQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQ2pDLE9BQU87QUFDUDtDQUNBO0FBQ0E7Q0FDQSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCLEtBQUs7QUFDTDtDQUNBLElB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QUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Q0FDcEQsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQ3ZEO0NBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDeEMsR0FBRztBQUNIO0NBQ0EsRUFBRSxRQUFRLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFO0NBQ3JDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3RCO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0NBQ3ZELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztDQUN2RDtDQUNBLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUNoQztDQUNBLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ2xCLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NB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LElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0NBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtDQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0NBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7Q0FDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztDQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDbkIsU0FBUztDQUNULFFBQVEsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDM0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUMsYUFBYTtDQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMxQixZQUFZLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7Q0FDekcsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFlBQVksRUFBRSxXQUFXLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRztBQUM5RDtDQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRDtDQUNBLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxQjtDQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0c7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sRUFBRSxXQUFXLEtBQUssR0FBRztBQUNoQztDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBRztDQUNwQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztDQUNwSixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3JIO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM3SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxF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LEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0E7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztDQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0NBQ0E7QUFDQTtDQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdGO0NBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMvQjtDQUNBLFNBQVMsTUFBTTtDQUNmO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzVGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckksWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9GLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BJO0NBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztDQUMvQixTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxhQUFhLEVBQUUsWUFBWTtBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0NBQ2hKLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUN2QyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQixRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDM0IsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQ3hCLFFBQVcsSUFBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0NBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztDQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztDQUN2QjtDQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7Q0FDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7Q0FDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0NBQ0EsWUFBWSxFQUFFLEdBQUc7Q0FDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7Q0FDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxhQUFhLENBQUM7Q0FDZDtDQUNBLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlEO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkI7Q0FDQSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixnQkFBZ0IsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUMxQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdEQsaUJBQWlCO0FBQ2pCO0NBQ0EsZ0JBQWdCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRztDQUNBLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0QsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuSjtDQUNBLGdCQUFnQixDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxSDtDQUNBLGFBQWE7Q0FDYixZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUVoQyxTQUFTO0FBSVQ7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztBQUN2QjtDQUNBO0NBQ0EsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUNqRyxRQUFRLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckk7Q0FDQSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDL0UsUUFBUSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3hJO0NBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ2hHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDbkcsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDOUksUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDOUksUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsb0ZBQW9GLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDL0s7QUFDQTtDQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxRztDQUNBLFFBQVEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDMUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksRUFBRSxXQUFXLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNwQjtDQUNBLFFBQVEsSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDO0NBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsNEZBQTRGLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUNqTyxRQUFRLE9BQU8sSUFBSTtDQUNuQixZQUFZLEtBQUssTUFBTTtDQUN2QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7Q0FDM0YsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxRQUFRO0NBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztDQUM1RixZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLEtBQUs7Q0FDdEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0NBQ3pGLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssS0FBSztDQUN0QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsbUZBQW1GLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Q0FDekosWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxRQUFRO0NBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztDQUM1SixZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLFFBQVE7Q0FDekIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0NBQzVGLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssTUFBTTtDQUN2QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsd0pBQXdKLENBQUMsS0FBSyxDQUFDO0NBQ3ZNLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLDRLQUE0SyxDQUFDO0NBQy9MLFlBQVksTUFBTTtDQUNsQixTQUFTO0NBQ1QsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDO0NBQzVCLFFBQVEsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxVQUFVLENBQUMsQ0FBQztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0NBQ0EsSUFBSSxXQUFXLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxDQUFDO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsQ0FBQztBQUNkO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtDQUNBLElBQUksV0FBVyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7Q0FDQSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtDQUNBLEVBQUM7QUFDRDtDQUNBLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNaO0FBQ1ksT0FBQyxLQUFLLEdBQUc7O0NDdjNCckI7QUFDQTtBQUNBO0NBQ08sTUFBTSxLQUFLLENBQUM7QUFDbkI7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksT0FBTyxTQUFTLEVBQUUsSUFBSSxHQUFHO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQ2xCO0NBQ0EsUUFBUSxRQUFRLElBQUk7Q0FDcEIsWUFBWSxLQUFLLEtBQUs7Q0FDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFHO0NBQzNELFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssS0FBSztDQUN0QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUc7Q0FDdkQsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxLQUFLO0NBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBRztDQUN4RCxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLEtBQUs7Q0FDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFHO0NBQ3ZELFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxLQUFLO0NBQ2xDLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxFQUFFLDBCQUEwQixFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBRztDQUM5RyxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLE1BQU07Q0FDdkIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7Q0FDL0gsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxNQUFNO0NBQ3ZCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUFFLGtCQUFrQixFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFHO0NBQzdGLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssSUFBSTtDQUNyQixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxFQUFFLGlCQUFpQixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFHO0NBQ2hHLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssT0FBTztDQUN4QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7Q0FDeEcsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxNQUFNO0NBQ3ZCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBRztDQUNsRixZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLEtBQUs7Q0FDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBRztDQUN4RixZQUFZLE1BQU07QUFDbEI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQztBQUNoQjtDQUNBLEtBQUs7QUFDTDtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksT0FBTyxNQUFNLENBQUMsa0JBQWtCLEtBQUssVUFBVSxFQUFFO0NBQzdELFlBQVksTUFBTSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQywyQkFBMEI7Q0FDeEUsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJO0FBQ1o7Q0FDQSxTQUFTLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRTtBQUNoQztDQUNBLFlBQVksTUFBTSxPQUFPLEdBQUc7Q0FDNUIsZ0JBQWdCLHNCQUFzQixFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztDQUMzRCxnQkFBZ0IsUUFBUSxFQUFFLEtBQUs7Q0FDL0I7Q0FDQSxhQUFhLENBQUM7QUFDZDtDQUNBLFlBQVksT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksR0FBRTtBQUNuRDtDQUNBO0NBQ0EsWUFBWSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEdBQUU7Q0FDckUsWUFBWSxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUU7Q0FDbEQ7QUFDQTtDQUNBLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLElBQUk7QUFDbkM7Q0FDQSxZQUFZLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDbEMsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsRjtDQUNBLFlBQVksTUFBTSxPQUFPLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztDQUNsRixZQUFZLE1BQU0sT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7Q0FDL0UsWUFBWSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQzVDO0NBQ0EsWUFBWSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxJQUFJLEdBQUU7Q0FDOUUsaUJBQWlCLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxHQUFFO0NBQ3ZGLGlCQUFpQixNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksR0FBRTtBQUMxQztDQUNBLFlBQVksTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsRUFBRTtBQUN4QztDQUNBLGdCQUFnQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU07QUFDN0M7Q0FDQSxnQkFBZ0IsT0FBTyxJQUFJO0NBQzNCLG9CQUFvQixLQUFLLE9BQU87Q0FDaEMsd0JBQXdCLElBQUksR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDO0NBQzVDLHdCQUF3QixHQUFHLENBQUMsTUFBTSxHQUFHLFdBQVc7Q0FDaEQsNEJBQTRCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFFO0NBQzVFLDBCQUF5QjtDQUN6Qix3QkFBd0IsR0FBRyxDQUFDLEdBQUcsR0FBRyxRQUFPO0NBQ3pDLG9CQUFvQixNQUFNO0NBQzFCLG9CQUFvQixLQUFLLE1BQU07Q0FDL0Isd0JBQXdCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRTtDQUMxRixvQkFBb0IsTUFBTTtDQUMxQixvQkFBb0I7Q0FDcEIsd0JBQXdCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFFO0NBQzVFLG9CQUFvQixNQUFNO0NBQzFCLGlCQUFpQjtBQUNqQjtDQUNBLGNBQWE7QUFDYjtDQUNBLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNuQjtDQUNBLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksR0FBRTtBQUMzRDtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLENBQUMsT0FBTywwQkFBMEIsRUFBRSxPQUFPLEdBQUc7Q0FDOUMsUUFBUSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLO0NBQ3hDLFlBQVksTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUMxRCxZQUFZLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0NBQ2hDLFlBQVksS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0NBQzlDLFlBQVksS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSztDQUN4QyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDM0MsaUJBQWlCLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUNqRixpQkFBaUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsWUFBWSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE1BQU07Q0FDbkQsZ0JBQWdCLE9BQU87Q0FDdkIsb0JBQW9CLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLO0NBQ25ELHdCQUF3QixPQUFPO0NBQy9CLDRCQUE0QixPQUFPLEVBQUU7Q0FDckMsZ0NBQWdDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLO0NBQ3pELG9DQUFvQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDbEQsaUNBQWlDLENBQUM7Q0FDbEMseUJBQXlCLENBQUM7Q0FDMUIscUJBQXFCLENBQUM7Q0FDdEIsaUJBQWlCLENBQUM7Q0FDbEIsYUFBYSxDQUFDLENBQUM7QUFDZjtDQUNBLFlBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzFCLFNBQVMsQ0FBQztDQUNWLEtBQUs7QUFDTDtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLGFBQWEsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDaEM7Q0FDQSxRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxPQUFPLE1BQU0sQ0FBQyxrQkFBa0IsS0FBSyxVQUFVLEVBQUU7Q0FDN0QsWUFBWSxNQUFNLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLDJCQUEwQjtDQUN4RSxZQUFZLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDM0IsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJO0FBQ1o7Q0FDQSxZQUFZLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRTtBQUNuQztDQUNBLFlBQVksTUFBTSxPQUFPLEdBQUc7Q0FDNUIsZ0JBQWdCLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLE9BQU87Q0FDaEQsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7Q0FDbEMsYUFBYSxDQUFDO0FBQ2Q7Q0FDQSxZQUFZLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUU7Q0FDbkQsWUFBWSxPQUFPLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUM7Q0FDekUsWUFBWSxPQUFPLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbEY7QUFDQTtDQUNBO0NBQ0EsWUFBWSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUN0RTtDQUNBLFlBQVksSUFBSSxPQUFPLEdBQUcsTUFBTTtBQUNoQztDQUNBO0NBQ0EsWUFBWSxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN2RDtDQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDL0U7Q0FDQTtDQUNBLFlBQVksTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DO0NBQ0E7Q0FDQSxZQUFZLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9CO0NBQ0EsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ25CO0NBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLDBCQUEwQixFQUFFLE9BQU8sR0FBRztDQUNqRCxRQUFRLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUs7Q0FDeEMsWUFBWSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2xELFlBQVksQ0FBQyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLGNBQWE7Q0FDL0QsWUFBWSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztDQUM5RSxZQUFZLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLEdBQUU7QUFDaEQ7Q0FDQSxZQUFZLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTTtDQUM5QyxnQkFBZ0IsT0FBTztDQUN2QixvQkFBb0IsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFO0NBQ3pFLGtCQUFpQjtDQUNqQixhQUFhLEVBQUM7Q0FDZCxZQUFZLENBQUMsQ0FBQyxLQUFLLEdBQUU7Q0FDckIsU0FBUyxDQUFDO0NBQ1YsS0FBSztBQUNMO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksYUFBYSxTQUFTLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUk7Q0FDWjtDQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztDQUM5RCxZQUFZLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztDQUM3QixZQUFZLFdBQVcsTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFO0NBQ3ZELGdCQUFnQixNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUNuRCxnQkFBZ0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNqQyxhQUFhO0FBQ2I7Q0FDQSxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDO0NBQzlCLFlBQVksT0FBTyxLQUFLLENBQUM7QUFDekI7Q0FDQSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkI7Q0FDQSxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxTQUFTO0NBQ1Q7Q0FDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTs7Q0NqUU8sTUFBTSxFQUFFLENBQUM7QUFDaEI7Q0FDQSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2IsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2IsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNiLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoQixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoQixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hCLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hCLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxHQUFHO0FBQzNCO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztDQUNuQixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDO0NBQ25CLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsWUFBWSxDQUFDLEVBQUUsTUFBTSxHQUFHO0FBQ3pCO0NBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQzNDO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0NBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztDQUNBLEVBQUUsS0FBSyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QztDQUNBLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNkLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDZCxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLE1BQU0sQ0FBQyxHQUFHO0FBQ1g7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDZixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDZixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQ1I7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDZCxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDZCxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLE1BQU0sQ0FBQyxHQUFHO0FBQ1g7Q0FDQSxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDMUM7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNaO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDZixFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmO0NBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZDtDQUNBLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRztBQUN0RDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNyQjtDQUNBLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDbEc7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDbkI7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtDQUNsQixHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxL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QzFELFNBQVMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QjtDQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztDQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqRDtDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDdkQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0NBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUN4QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDbkM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztDQUNqRSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0NBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsWUFBWSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFlBQVks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R0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0NBQzdFLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0NBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7Q0FDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEMsT0FBTztDQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDdkIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUN6QyxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxHQUFHO0NBQ1QsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNyQztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxD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O0NBQ2hCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ2pCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO0NBQ2xCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0NBQ25CLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDO0NBQ3BCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0NBQ3JCLFFBQVEsTUFBTTtDQUNkLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUNsRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMzQyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Q0FDZCxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxJQUFJO0NBQ0osTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO0NBQzNFLE1BQU07Q0FD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QUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7Q0FDQTtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0NBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztDQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFJO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7Q0FDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFDO0NBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztDQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUU7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUk7Q0FDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwQztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU07Q0FDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtDQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtDQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRTtBQUN4QjtDQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQztDQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUN0QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUNsSTtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtDQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDM0UsUUFBUSxJQUFJLENBQUMs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ekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDckMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxVQUFVLEdBQUc7Q0FDbEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQ3JEO0NBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0NBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7Q0FDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN4RCxhQUFhO0NBQ2I7Q0FDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7Q0FDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0NBQ3hCO0NBQ0EsU0FBUztDQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUNsRCxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzQyxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzQyxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEMsUUFBUSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbEc7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5RDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7Q0FDQSxZQUFZ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WSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQzVDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3JDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRTtDQUNBLFNBQVMsTUFBTTtBQUNmO0NBQ0EsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ2hDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQztDQUNBLFNBQVMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUM5QyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbkM7Q0FDQSxTQUFTLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2pDLFNBQVMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUNyQztDQUNBLFNBQVMsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQy9ELFNBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7Q0FDaEQsU0FBUyxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFO0NBQzdCLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNsQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxTQUFTLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDO0NBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUc7Q0FDeEIsT0FBTyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQyxPQUFPLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQ3ZDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUN4QyxlQUFlLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQ25EO0NBQ0EsT0FBTyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdkMsT0FBTztBQUNQO0NBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0NBQ3BEO0NBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDakM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0NBQ0EsU0FBUztDQUNULEtBQUs7Q0FDTCxJQUFJO0NBQ0osR0FBRztBQUNIO0NBQ0EsRUFBRTtBQUNGO0NBQ0E7QUFDQTtDQUNBLENBQUMsU0FBUyxDQUFDLEdBQUc7QUFDZDtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7Q0FDakUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN0QjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2xELFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9DO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxJQUFJLENBQUMsR0FBRztBQUNUO0NBQ0EsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDZjtDQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7Q0FDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0NBQ3RDO0NBQ0EsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCO0NB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QUcsQ0FBQyxDQUFDO0NBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztDQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUM7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0E7Q0FDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7Q0FDNUQ7Q0FDQTtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtDQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7Q0FDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtDQUNwQztDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztDQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0NBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtDQUNBLEVBQUU7QUFDRjtBQUNBO0NBQ0E7O0NDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQztBQUMvQjtDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hDO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztDQUMvQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0NBQzFDO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7Q0FDeEMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDOUMsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3REO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3hDO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2xEO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztDQUN6QixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDOUI7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3hCO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLEdBQUU7Q0FDdEMsWUFBWSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0NBQzlCLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxZQUFZLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3hCLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDekIsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN6QixZQUFZLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCO0NBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3hGO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDNUI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDdkMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDckM7Q0FDQSxhQUFhO0FBQ2I7Q0FDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFLO0FBQ3RDO0NBQ0EsU0FBUztBQUNUO0FBQ0E7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsUUFBUSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2hDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztBQUMvQztDQUNBLFFBQVEsSUFBSSxRQUFRLEdBQUcsK0JBQStCLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyw4RUFBOEUsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztBQUNoTTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxRQUFRLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDakY7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3ZFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDbEUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7Q0FDbEQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7Q0FDakQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMvRDtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7Q0FDN0s7QUFDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLG9DQUFvQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0RBQWtELEVBQUUsQ0FBQztBQUMxSjtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRywyRUFBMkUsQ0FBQyxDQUFDO0FBQ3RKO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QjtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7Q0FDQTtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztDQUM5QjtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztDQUN0RSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtDQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QztDQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0NBQzFCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkM7Q0FDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDdkQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ3JDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRztDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0NBQzlCLFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUNsQixZQUFZLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDL0ssU0FBUztBQUNUO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ3ZDLGFBQWEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Y7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0NBQ3hCLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztDQUNsQyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUN6QixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkIsUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNwQyxRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtDQUN0RixRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQy9DLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUMzQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDO0NBQ2pJLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0NBQ2hDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtDQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQ7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDcEIsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN2RSxrQkFBa0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNuQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMxQyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUUsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsQyxZQUFZLENBQUMsRUFBRSxDQUFDO0FBQ2hCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRztBQUNaO0NBQ0EsUUFBUSxLQUFLLENBQUMsSUFBSSxHQUFFO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUN6QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7Q0FDbEUsYUFBYSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzFEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztDQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztDQUNwQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztDQUNwQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ25EO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7Q0FDbkUsYUFBYSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDM0Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztDQUNqQztDQUNBLEtBQUs7QUFDTDtBQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDcEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEdBQUcsQ0FBQyxHQUFHO0FBQ1g7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUM5QixRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDeEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztBQUN2QjtDQUNBLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUc7QUFDM0M7Q0FDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztBQUN2RjtDQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Q0FDakMsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM1QjtDQUNBLFlBQVksS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHO0FBQzlCO0NBQ0EsZ0JBQWdCLElBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO0NBQ2pFLGdCQUFnQixJQUFJLGFBQWEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztBQUN2RTtDQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxHQUFHLFdBQVcsRUFBRSxDQUFDO0NBQ2hFLGdCQUFnQixJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsR0FBRyxhQUFhLENBQUM7QUFDbkQ7Q0FDQSxhQUFhO0FBQ2I7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3ZEO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3ZEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QjtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DO0NBQ0EsS0FBSztDQUNMO0NBQ0E7O0NDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Q0FDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0NBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxRDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Q0FDeEUsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUM5QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUNqRDtDQUNBLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Q0FDL0IsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDL0MsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxTQUFRO0NBQ3pELGFBQWE7Q0FDYjtDQUNBO0NBQ0E7Q0FDQTtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvQixRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUI7Q0FDQTtBQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcseURBQXlELEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzVMO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNqRDtDQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztDQUN0SixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbEY7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvSCxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoSjtDQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDeEQsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN4QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0NBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0NBQ3JDLFlBQVks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O0FBQ2xCO0NBQ0EsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUU7Q0FDckM7QUFDQTtDQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckM7Q0FDQSxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUM7Q0FDNUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ3BDO0NBQ0EsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBRztDQUMxQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7QUFDdEI7Q0FDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUM7Q0FDekQsV0FBVyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFB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QUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFFO0NBQy9CLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNwQztDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0NDNWNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztDQUNBLElBQUksV0FBVyxFQUFF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Q0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxPQUFPLElBQUk7Q0FDbkIsWUFBWSxLQUFLLENBQUM7Q0FDbEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDbEMsb0JBQW9CLElBQUksQ0FB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UUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7Q0FDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7Q0FDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0NBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFN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QUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7Q0FDekQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDakYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFB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RyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxD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QUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7Q0FDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztDQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3pEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTs7Q0NsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztDQUNyQztBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7Q0FDQTtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0NBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7Q0FDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtDQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcscUNBQXFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNERBQTRELENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNyVSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsZ0RBQWdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNySztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0NBQ2xJLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzdKO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUN4QztBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUU7Q0FDdEIsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtDQUNwQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxLQUFLLEVBQUU7Q0FDekMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUk7Q0FDbEMsYUFBYSxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxNQUFNLEVBQUU7Q0FDakQsZ0JBQWdCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUk7Q0FDdkMsZ0JBQWdCLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDbEUsYUFBYTtDQUNiLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNCO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDaEQ7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDcEIsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDMUIs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LENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUMvRDtDQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQy9EO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDaEU7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNqRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQy9DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDOUMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0NBQ3ZELFFBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0NBQy9ELFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BEO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRTtDQUN2QyxZQUFZLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ3hDLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUc7QUFDOUI7Q0FDQSxZQUFZLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUM7Q0FDN0QsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQztDQUNwRCxZQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDO0NBQ3JELFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUM7Q0FDekQsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUTtDQUNqRCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQzVFO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7Q0FDcEIsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQztDQUNBLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0IsWUFBWSxJQUFJLEdBQUcs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Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztDQUMxQixRQUFRLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0NBQy9DO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUUsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFDO0NBQzVGLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUU7QUFDNUQ7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRTtDQUNoQixRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ25DLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNsQyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxD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SSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0I7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksWUFBWSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDNUIsUUFBUSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDeEU7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxPQUFPO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDNUI7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FB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QUFLLENBQUMsRUFBRTtDQUM1QixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDZixRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztDQUNoQyxPQUFPO0FBQ1A7Q0FDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUM3RDtDQUNBLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDL0MsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztDQUN6QyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0NBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFB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QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVFO0NBQ0E7Q0FDQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0NBQ0E7Q0FDQSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RDtDQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNoRCxNQUFNLElBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDM0Q7Q0FDQSxNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRDtDQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEM7Q0FDQSxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ2hCLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtDQUNwRCxRQUFRLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDOUMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2pFO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENB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LElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUN4RCxRQUFRLE1BQU07Q0FDZCxNQUFNLEtBQUssQ0FBQztDQUNaO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDdEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUM1RCxRQUFRLE1BQU07Q0FDZCxLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO0NBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDaEY7QUFDQTtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDcEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUs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QUFFLENBQUM7Q0FDdkMsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPO0FBQ2xDO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUMxQixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQy9CLFlBQVksSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzdELFlBQVksT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3ZDLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQztDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7Q0FDaEMsUUFBUSxJQUFJ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LENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM3QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDckMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQztDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QjtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztDQUNoRDtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQztBQUNqRDtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7Q0FD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QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDM0IsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7Q0FDN0IsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBQztDQUM5QyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDdkIsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEtBQUs7Q0FDdEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7Q0FDMUIsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztDQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtDQUM3QixZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFDO0NBQ2xDLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUU7Q0FDNUQsU0FBUyxNQUFNO0NBQ2YsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtB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UUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7Q0FDQTtBQUNBO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlGO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0NBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0NB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QyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQzlEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7Q0FDaEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUU7Q0FDcEU7Q0FDQSxZQUFZLE1BQU07Q0FDbEIsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztDQUMxQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Q0FDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkc7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNwSDtDQUNBO0FBQ0E7Q0FD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QSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7Q0FDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO0FBQzVDO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3BFO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7Q0FDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFB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QUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7Q0FDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7Q0FDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztDQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNoRCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDekIsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0NBQ1osSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDNUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztDQUM5QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNqRCxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ2hCLEdBQUc7QUFDSDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxPQUFPLEdBQUc7Q0FDWixJQUFJLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMzRCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLElBQUksR0FBRztDQUNULElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3pELEdBQUc7QUFDSDtDQUNBLEVBQUUsU0FBUyxHQUFHO0NBQ2QsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Q0FDckIsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QjtDQUNBLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVc7Q0FDaEMsVUFBVSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN4QyxVQUFVLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFDN0I7Q0FDQSxNQUFNLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDbkQ7Q0FDQSxNQUFNLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN6QztDQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO0NBQ3BCLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Q0FDN0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDL0MsT0FBTyxNQUFNO0NBQ2IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDdkMsT0FBTztDQUNQLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakM7Q0FDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNsRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDbkQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekQ7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVTtDQUMzQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztDQUMxRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3ZDLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxHQUFHO0NBQ1gsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUM1QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Q0FDZCxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNsRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVE7Q0FDckIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM1RSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdDLEdBQUc7QUFDSDtDQUNBLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRTtDQUNsQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0NBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNoQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMxQixLQUFLO0NBQ0wsR0FBRztDQUNIOzs7Ozs7Ozs7Ozs7OzsifQ== diff --git a/build/uil.min.js b/build/uil.min.js index a35f045..bc00f50 100644 --- a/build/uil.min.js +++ b/build/uil.min.js @@ -1,6 +1,9064 @@ -/** - * @license - * Copyright 2010-2021 Uil.js Authors - * SPDX-License-Identifier: MIT - */ -!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?s(exports):"function"==typeof define&&define.amd?define(["exports"],s):s((t="undefined"!=typeof globalThis?globalThis:t||self).UIL={})}(this,(function(t){"use strict";const s={ui:[],dom:null,ID:null,lock:!1,wlock:!1,current:-1,needReZone:!0,needResize:!1,forceZone:!1,isEventsInit:!1,isLeave:!1,addDOMEventListeners:!0,downTime:0,prevTime:0,prevDefault:["contextmenu"],pointerEvent:["pointerdown","pointermove","pointerup"],eventOut:["pointercancel","pointerout","pointerleave"],xmlserializer:null,tmpTime:null,tmpImage:null,oldCursor:"auto",input:null,parent:null,firstImput:!0,hiddenImput:null,hiddenSizer:null,hasFocus:!1,startInput:!1,inputRange:[0,0],cursorId:0,str:"",pos:0,startX:-1,moveX:-1,debugInput:!1,isLoop:!1,listens:[],e:{type:null,clientX:0,clientY:0,keyCode:NaN,key:null,delta:0},isMobile:!1,now:null,getTime:function(){return self.performance&&self.performance.now?self.performance.now.bind(performance):Date.now},add:function(t){s.ui.push(t),s.getZone(t),s.isEventsInit||s.initEvents()},testMobile:function(){let t=navigator.userAgent;return!!(t.match(/Android/i)||t.match(/webOS/i)||t.match(/iPhone/i)||t.match(/iPad/i)||t.match(/iPod/i)||t.match(/BlackBerry/i)||t.match(/Windows Phone/i))},remove:function(t){let i=s.ui.indexOf(t);-1!==i&&(s.removeListen(t),s.ui.splice(i,1)),0===s.ui.length&&s.removeEvents()},initEvents:function(){if(s.isEventsInit)return;let t=document.body;s.isMobile=s.testMobile(),s.now=s.getTime(),s.isMobile?t.style.touchAction="none":t.addEventListener("wheel",s,{passive:!1}),console.log("R.addDOMEventListeners "+s.addDOMEventListeners),s.addDOMEventListeners&&(t.addEventListener("pointercancel",s),t.addEventListener("pointerleave",s),t.addEventListener("pointermove",s),t.addEventListener("pointerdown",s),t.addEventListener("pointerup",s),t.addEventListener("keydown",s,!1),t.addEventListener("keyup",s,!1)),window.addEventListener("resize",s.resize,!1),s.isEventsInit=!0,s.dom=t},removeEvents:function(){if(!s.isEventsInit)return;let t=document.body;s.isMobile||t.removeEventListener("wheel",s),s.addDOMEventListeners&&(t.removeEventListener("pointercancel",s),t.removeEventListener("pointerleave",s),t.removeEventListener("pointermove",s),t.removeEventListener("pointerdown",s),t.removeEventListener("pointerup",s),t.removeEventListener("keydown",s),t.removeEventListener("keyup",s)),window.removeEventListener("resize",s.resize),s.isEventsInit=!1},resize:function(){let t,i=s.ui.length;for(;i--;)t=s.ui[i],t.isGui&&!t.isCanvasOnly&&t.autoResize&&t.calc();s.needReZone=!0,s.needResize=!1},out:function(){console.log("im am out"),s.clearOldID()},in:function(){console.log("im am in")},fakeUp:function(){this.handleEvent({type:"pointerup"})},handleEvent:function(t){-1!==s.prevDefault.indexOf(t.type)&&t.preventDefault(),s.needResize&&s.resize(),s.findZone(s.forceZone);let i=s.e,e=!1;"keydown"===t.type&&s.keydown(t),"keyup"===t.type&&s.keyup(t),"wheel"===t.type?i.delta=t.deltaY>0?1:-1:i.delta=0;let h=t.pointerType;if(i.clientX=("touch"===h?t.pageX:t.clientX)||0,i.clientY=("touch"===h?t.pageY:t.clientY)||0,i.type=t.type,-1!==s.eventOut.indexOf(t.type)&&(e=!0,i.type="mouseup"),"pointerleave"===t.type&&(s.isLeave=!0),"pointerdown"===t.type&&(i.type="mousedown"),"pointerup"===t.type&&(i.type="mouseup"),"pointermove"===t.type&&(s.isLeave&&(s.isLeave=!1,s.resize()),i.type="mousemove"),"mousedown"===i.type){if(s.downTime=s.now(),s.downTime-s.prevTime<200)return s.selectAll(),!1;s.prevTime=s.downTime,s.forceZone=!1}"mousedown"===i.type&&s.clearInput(),"mousedown"===i.type&&(s.lock=!0),"mouseup"===i.type&&(s.lock=!1),s.isMobile&&"mousedown"===i.type&&s.findID(i),"mousemove"!==i.type||s.lock||s.findID(i),null!==s.ID&&(s.ID.isCanvasOnly&&(i.clientX=s.ID.mouse.x,i.clientY=s.ID.mouse.y),s.ID.handleEvent(i)),s.isMobile&&"mouseup"===i.type&&s.clearOldID(),e&&s.clearOldID()},findID:function(t){let i,e,h,o=s.ui.length,n=-1;for(;o--;)if(i=s.ui[o],i.isCanvasOnly?(e=i.mouse.x,h=i.mouse.y):(e=t.clientX,h=t.clientY),s.onZone(i,e,h)){n=o,n!==s.current&&(s.clearOldID(),s.current=n,s.ID=i);break}-1===n&&s.clearOldID()},clearOldID:function(){s.ID&&(s.current=-1,s.ID.reset(),s.ID=null,s.cursor())},calcUis:(t,i,e,h=!1)=>{let o,n,r,l=t.length,a=0,c=0,d=0;for(;l--;)o=t[c],c++,!h&&o.isGroup&&o.calcUis(),r=o.margin,o.zone.w=o.w,o.zone.h=o.h+r,o.autoWidth?(a=0,o.zone.x=i.x+o.dx,o.zone.y=e,e+=o.h+r,d+=o.h+r):(0===a&&(d+=o.h+r),o.zone.x=i.x+a,o.zone.y=e,n=s.getWidth(o),n?o.zone.w=o.w=n:o.fw&&(o.zone.w=o.w=o.fw),a+=o.zone.w,a>=i.w&&(e+=o.h+r,a=0));return d},findTarget:function(t,i){let e=t.length;for(;e--;)if(s.onZone(t[e],i.clientX,i.clientY))return e;return-1},findZone:function(t){if(s.needReZone||t){for(var i,e=s.ui.length;e--;)i=s.ui[e],s.getZone(i),i.isGui&&i.calcUis();s.needReZone=!1}},onZone:function(t,s,i){if(void 0===s||void 0===i)return!1;let e=t.zone,h=s-e.x,o=i-e.y,n=h>=0&&o>=0&&h<=e.w&&o<=e.h;return n?t.local.set(h,o):t.local.neg(),n},getWidth:function(t){return t.getDom().clientWidth},getZone:function(t){if(t.isCanvasOnly)return;let s=t.getDom().getBoundingClientRect();t.zone={x:s.left,y:s.top,w:s.width,h:s.height}},cursor:function(t){(t=t||"auto")!==s.oldCursor&&(document.body.style.cursor=t,s.oldCursor=t)},toCanvas:function(t,i,e,h){if(s.xmlserializer||(s.xmlserializer=new XMLSerializer),h&&null!==s.tmpTime&&(clearTimeout(s.tmpTime),s.tmpTime=null),null!==s.tmpTime)return;s.lock&&(s.tmpTime=setTimeout((function(){s.tmpTime=null}),10));let o=!1;i===t.canvas.width&&e===t.canvas.height||(o=!0),null===s.tmpImage&&(s.tmpImage=new Image);let n=s.tmpImage,r=s.xmlserializer.serializeToString(t.content),l=''+r+"";n.onload=function(){let s=t.canvas.getContext("2d");o?(t.canvas.width=i,t.canvas.height=e):s.clearRect(0,0,i,e),s.drawImage(this,0,0),t.onDraw()},n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(l),n.crossOrigin=""},setHidden:function(){null===s.hiddenImput&&(s.hiddenImput=document.createElement("input"),s.hiddenImput.type="text",s.hiddenSizer=document.createElement("div"),document.body.appendChild(s.hiddenImput),document.body.appendChild(s.hiddenSizer));let t=s.debugInput?"":"opacity:0; zIndex:0;",i=s.parent.css.txtselect+"padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;"+t;s.hiddenImput.style.cssText=i+"bottom:10px;"+(s.debugInput?"":"transform:scale(0);"),s.hiddenSizer.style.cssText=i+"bottom:40px;",s.hiddenImput.style.width=s.input.clientWidth+"px",s.hiddenImput.value=s.str,s.hiddenSizer.innerHTML=s.str,s.hasFocus=!0},clearHidden:function(t){null!==s.hiddenImput&&(s.hasFocus=!1)},clickPos:function(t){let i=s.str.length,e=0,h=0;for(;i--&&(e+=s.textWidth(s.str[h]),!(e>=t));)h++;return h},upInput:function(t,i){if(null===s.parent)return!1;let e=!1;if(i){let i=s.clickPos(t);if(s.moveX=i,-1===s.startX)s.startX=i,s.cursorId=i,s.inputRange=[s.startX,s.startX];else{s.moveX!==s.startX&&(s.startX>s.moveX?s.inputRange=[s.moveX,s.startX]:s.inputRange=[s.startX,s.moveX])}e=!0}else-1!==s.startX&&(s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.startX=-1,e=!0);return e&&s.selectParent(),e},selectAll:function(){s.parent&&(s.str=s.input.textContent,s.inputRange=[0,s.str.length],s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.cursorId=s.inputRange[1],s.selectParent())},selectParent:function(){var t=s.textWidth(s.str.substring(0,s.cursorId)),i=s.textWidth(s.str.substring(0,s.inputRange[0])),e=s.textWidth(s.str.substring(s.inputRange[0],s.inputRange[1]));s.parent.select(t,i,e,s.hiddenSizer.innerHTML)},textWidth:function(t){return null===s.hiddenSizer?0:(t=t.replace(/ /g," "),s.hiddenSizer.innerHTML=t,s.hiddenSizer.clientWidth)},clearInput:function(){null!==s.parent&&(s.firstImput||s.parent.validate(!0),s.clearHidden(),s.parent.unselect(),s.input.style.background=s.parent.colors.back,s.input.style.borderColor=s.parent.colors.border,s.parent.isEdit=!1,s.input=null,s.parent=null,s.str="",s.firstImput=!0)},setInput:function(t,i){s.clearInput(),s.input=t,s.parent=i,s.input.style.background=s.parent.colors.backoff,s.input.style.borderColor=s.parent.colors.select,s.str=s.input.textContent,s.setHidden()},keydown:function(t){if(null===s.parent)return;let i=t.which;t.shiftKey,s.firstImput=!1,s.hasFocus&&(window.focus(),s.hiddenImput.focus()),s.parent.isEdit=!0,13===i?s.clearInput():s.input.isNum?t.keyCode>47&&t.keyCode<58||t.keyCode>95&&t.keyCode<106||190===t.keyCode||110===t.keyCode||8===t.keyCode||109===t.keyCode?s.hiddenImput.readOnly=!1:s.hiddenImput.readOnly=!0:s.hiddenImput.readOnly=!1},keyup:function(t){null!==s.parent&&(s.str=s.hiddenImput.value,s.parent.allEqual?s.parent.sameStr(s.str):s.input.textContent=s.str,s.cursorId=s.hiddenImput.selectionStart,s.inputRange=[s.hiddenImput.selectionStart,s.hiddenImput.selectionEnd],s.selectParent(),s.parent.validate())},loop:function(){s.isLoop&&requestAnimationFrame(s.loop),s.update()},update:function(){let t=s.listens.length;for(;t--;)s.listens[t].listening()},removeListen:function(t){let i=s.listens.indexOf(t);-1!==i&&s.listens.splice(i,1),0===s.listens.length&&(s.isLoop=!1)},addListen:function(t){return-1===s.listens.indexOf(t)&&(s.listens.push(t),s.isLoop||(s.isLoop=!0,s.loop()),!0)}},i=s,e={transition:.2,frag:document.createDocumentFragment(),colorRing:null,joystick_0:null,joystick_1:null,circular:null,knob:null,pad2d:null,svgns:"http://www.w3.org/2000/svg",links:"http://www.w3.org/1999/xlink",htmls:"http://www.w3.org/1999/xhtml",DOM_SIZE:["height","width","top","left","bottom","right","margin-left","margin-right","margin-top","margin-bottom"],SVG_TYPE_D:["pattern","defs","transform","stop","animate","radialGradient","linearGradient","animateMotion","use","filter","feColorMatrix"],SVG_TYPE_G:["svg","rect","circle","path","polygon","text","g","line","foreignObject"],PI:Math.PI,TwoPI:2*Math.PI,pi90:.5*Math.PI,pi60:Math.PI/3,torad:Math.PI/180,todeg:180/Math.PI,clamp:(t,s,i)=>t=(t=ti?i:t,isDivid:t=>.5*t===Math.floor(.5*t),size:{w:240,h:20,p:30,s:8},defineColor:(t,s=e.colors)=>{let i={...s},h=["fontFamily","fontWeight","fontShadow","fontSize"],o=!1;t.font&&(t.fontFamily=t.font),t.shadow&&(t.fontShadow=t.shadow),t.weight&&(t.fontWeight=t.weight),t.fontColor&&(t.text=t.fontColor),t.color&&(t.text=t.color),t.text&&(i.text=t.text,t.fontColor||t.color||(i.title=e.ColorLuma(t.text,-.25),i.titleoff=e.ColorLuma(t.text,-.5)),i.textOver=e.ColorLuma(t.text,.25),i.textSelect=e.ColorLuma(t.text,.5)),t.button&&(i.button=t.button,i.border=e.ColorLuma(t.button,.1),i.overoff=e.ColorLuma(t.button,.2)),t.select&&(i.select=t.select,i.over=e.ColorLuma(t.select,-.1)),t.itemBg&&(t.back=t.itemBg),t.back&&(i.back=t.back,i.backoff=e.ColorLuma(t.back,-.1)),t.fontSelect&&(i.textSelect=t.fontSelect),t.groupBorder&&(i.gborder=t.groupBorder),t.bgOver&&(i.backgroundOver=t.bgOver);for(let s in i)void 0!==t[s]&&(i[s]=t[s]);for(let s in t)-1!==h.indexOf(s)&&(o=!0);return o&&e.defineText(i),i},colors:{sx:4,sy:2,radius:2,showOver:1,content:"none",background:"rgba(50,50,50,0.15)",backgroundOver:"rgba(50,50,50,0.3)",title:"#CCC",titleoff:"#BBB",text:"#DDD",textOver:"#EEE",textSelect:"#FFF",back:"rgba(0,0,0,0.2)",backoff:"rgba(0,0,0,0.3)",border:"#4c4c4c",borderSize:1,gborder:"none",groups:"none",button:"#3c3c3c",overoff:"#5c5c5c",over:"#024699",select:"#308AFF",action:"#FF3300",fontFamily:"Consolas, monospace",fontWeight:"normal",fontShadow:"none",fontSize:12,joyOver:"rgba(48,138,255,0.25)",joyOut:"rgba(100,100,100,0.5)",joySelect:"#308AFF",hide:"rgba(0,0,0,0)"},css:{basic:"position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; -o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;",button:"display:flex; align-items:center; justify-content:center; text-align:center;",middle:"display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;"},svgs:{g1:"M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z",g2:"M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z",group:"M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z",arrow:"M 3 8 L 8 5 3 2 3 8 Z",arrowDown:"M 5 8 L 8 3 2 3 5 8 Z",arrowUp:"M 5 2 L 2 7 8 7 5 2 Z",solid:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z",body:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z",vehicle:"M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z",articulation:"M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z",character:"M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z",terrain:"M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z",joint:"M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z",ray:"M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z",collision:"M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z",map:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",material:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",texture:"M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z",object:"M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z",none:"M 9 5 L 5 5 5 9 9 9 9 5 Z",cursor:"M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z",load:"M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z",save:"M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z",extern:"M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z"},rezone(){i.needReZone=!0},getImput:function(){return!!i.input},setStyle:function(t){for(var s in t)e.colors[s]&&(e.colors[s]=t[s]);e.setText()},defineText:function(t){e.setText(t.fontSize,t.text,t.fontFamily,t.fontShadow,t.fontWeight)},setText:function(t,s,i,h,o){let n=e.colors;void 0===i&&(i=n.fontFamily),void 0===t&&(t=n.fontSize),void 0===h&&(h=n.fontShadow),void 0===o&&(o=n.fontWeight),void 0===s&&(s=n.text),isNaN(t)?-1===t.search("em")&&(t+="px"):t+="px",e.css.txt=e.css.basic+e.css.middle+" font-family:"+i+"; font-weight:"+o+"; font-size:"+t+"; color:"+n.text+"; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;","none"!==h&&(e.css.txt+=" text-shadow: 1px 1px 1px "+h+";"),e.css.txtselect=e.css.txt+"padding:0px 4px; border:1px dashed "+n.border+";",e.css.item=e.css.txt+"padding:0px 4px; position:relative; margin-bottom:1px; "},cloneCss:function(){return{...e.css}},clone:function(t){return t.cloneNode(!0)},setSvg:function(t,s,i,e,h){-1===e?t.setAttributeNS(null,s,i):void 0!==h?t.childNodes[e||0].childNodes[h||0].setAttributeNS(null,s,i):t.childNodes[e||0].setAttributeNS(null,s,i)},setCss:function(t,s){for(let i in s)-1!==e.DOM_SIZE.indexOf(i)?t.style[i]=s[i]+"px":t.style[i]=s[i]},set:function(t,s){for(let i in s)"txt"===i&&(t.textContent=s[i]),"link"===i?t.setAttributeNS(e.links,"xlink:href",s[i]):t.setAttributeNS(null,i,s[i])},get:function(t,s){if(void 0===s)return t;if(!isNaN(s))return t.childNodes[s];if(s instanceof Array){if(2===s.length)return t.childNodes[s[0]].childNodes[s[1]];if(3===s.length)return t.childNodes[s[0]].childNodes[s[1]].childNodes[s[2]]}},dom:function(t,s,i,h,o){return t=t||"div",-1!==e.SVG_TYPE_D.indexOf(t)||-1!==e.SVG_TYPE_G.indexOf(t)?"svg"===t?(h=document.createElementNS(e.svgns,"svg"),e.set(h,i)):(void 0===h&&(h=document.createElementNS(e.svgns,"svg")),e.addAttributes(h,t,i,o)):h=void 0===h?document.createElementNS(e.htmls,t):h.appendChild(document.createElementNS(e.htmls,t)),s&&(h.style.cssText=s),void 0===o?h:h.childNodes[o||0]},addAttributes:function(t,s,i,h){let o=document.createElementNS(e.svgns,s);return e.set(o,i),e.get(t,h).appendChild(o),-1!==e.SVG_TYPE_G.indexOf(s)&&(o.style.pointerEvents="none"),o},clear:function(t){for(e.purge(t);t.firstChild;)t.firstChild.firstChild&&e.clear(t.firstChild),t.removeChild(t.firstChild)},purge:function(t){let s,i,h=t.attributes;if(h)for(s=h.length;s--;)i=h[s].name,"function"==typeof t[i]&&(t[i]=null);if(h=t.childNodes,h)for(s=h.length;s--;)e.purge(t.childNodes[s])},addSVGGlowEffect:function(){if(null!==document.getElementById("UILGlow"))return;let t=e.initUILEffects(),s=e.addAttributes(t,"filter",{id:"UILGlow",x:"-20%",y:"-20%",width:"140%",height:"140%"});e.addAttributes(s,"feGaussianBlur",{in:"SourceGraphic",stdDeviation:"3",result:"uilBlur"});let i=e.addAttributes(s,"feMerge",{});for(let t=0;t<=3;t++)e.addAttributes(i,"feMergeNode",{in:"uilBlur"});e.addAttributes(i,"feMergeNode",{in:"SourceGraphic"})},initUILEffects:function(){let t=document.getElementById("UILSVGEffects");return null===t&&(t=e.dom("svg",void 0,{id:"UILSVGEffects",width:"0",height:"0"}),document.body.appendChild(t)),t},ColorLuma:function(t,s){"n"===t&&(t="#000"),(t=String(t).replace(/[^0-9a-f]/gi,"")).length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),s=s||0;let i,e,h="#";for(e=0;e<3;e++)i=parseInt(t.substr(2*e,2),16),i=Math.round(Math.min(Math.max(0,i+i*s),255)).toString(16),h+=("00"+i).substr(i.length);return h},findDeepInver:function(t){return.3*t[0]+.59*t[1]+.11*t[2]<=.6},lerpColor:function(t,s,i){let e={};for(let h=0;h<3;h++)e[h]=t[h]+(s[h]-t[h])*i;return e},hexToHtml:function(t){return"#"+("000000"+(t=void 0===t?0:t).toString(16)).substr(-6)},htmlToHex:function(t){return t.toUpperCase().replace("#","0x")},u255:function(t,s){return parseInt(t.substring(s,s+2),16)/255},u16:function(t,s){return parseInt(t.substring(s,s+1),16)/15},unpack:function(t){return 7==t.length?[e.u255(t,1),e.u255(t,3),e.u255(t,5)]:4==t.length?[e.u16(t,1),e.u16(t,2),e.u16(t,3)]:void 0},p255:function(t){let s=Math.round(255*t).toString(16);return s.length<2&&(s="0"+s),s},pack:function(t){return"#"+e.p255(t[0])+e.p255(t[1])+e.p255(t[2])},htmlRgb:function(t){return"rgb("+Math.round(255*t[0])+","+Math.round(255*t[1])+","+Math.round(255*t[2])+")"},pad:function(t){return 1==t.length&&(t="0"+t),t},rgbToHex:function(t){let s=Math.round(255*t[0]).toString(16),i=Math.round(255*t[1]).toString(16),h=Math.round(255*t[2]).toString(16);return"#"+e.pad(s)+e.pad(i)+e.pad(h)},hueToRgb:function(t,s,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(s-t)*i:i<.5?s:i<2/3?t+6*(s-t)*(2/3-i):t},rgbToHsl:function(t){let s=t[0],i=t[1],e=t[2],h=Math.min(s,i,e),o=Math.max(s,i,e),n=o-h,r=0,l=0,a=(h+o)/2;return a>0&&a<1&&(l=n/(a<.5?2*a:2-2*a)),n>0&&(o==s&&o!=i&&(r+=(i-e)/n),o==i&&o!=e&&(r+=2+(e-s)/n),o==e&&o!=s&&(r+=4+(s-i)/n),r/=6),[r,l,a]},hslToRgb:function(t){let s,i,h=t[0],o=t[1],n=t[2];return 0===o?[n,n,n]:(i=n<=.5?n*(o+1):n+o-n*o,s=2*n-i,[e.hueToRgb(s,i,h+.33333),e.hueToRgb(s,i,h),e.hueToRgb(s,i,h-.33333)])},makeGradiant:function(t,s,i,h){e.dom(t,null,s,i,0);let o,n=i.childNodes[0].childNodes.length-1;for(let t=0;t0){for(a=6;a--;)r[a]=(113*r[a]+u).toFixed(2);c=" M"+r[0]+" "+r[1]+" Q"+r[2]+" "+r[3]+" "+r[4]+" "+r[5],d=[[0,g[0],1],[100,g[1],1]],e.makeGradiant("linearGradient",{id:"G"+l,x1:r[0],y1:r[1],x2:r[4],y2:r[5],gradientUnits:"userSpaceOnUse"},s,d),e.dom("path","",{d:c,"stroke-width":30,stroke:"url(#G"+l+")","stroke-linecap":"butt"},s,1)}m=n-p,g[0]=g[1]}d=[[0,"#FFFFFF",1],[50,"#FFFFFF",0],[50,"#000000",0],[100,"#000000",1]],e.makeGradiant("linearGradient",{id:"GL0",x1:0,y1:u-84.9,x2:0,y2:212.9,gradientUnits:"userSpaceOnUse"},s,d),d=[[0,"#7f7f7f",1],[50,"#7f7f7f",.5],[100,"#7f7f7f",0]],e.makeGradiant("linearGradient",{id:"GL1",x1:78.95,y1:0,x2:226,y2:0,gradientUnits:"userSpaceOnUse"},s,d),e.dom("g",null,{"transform-origin":"128px 128px",transform:"rotate(0)"},s),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"red"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL1)","stroke-width":1,stroke:"url(#GL1)"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL0)","stroke-width":1,stroke:"url(#GL0)"},s,2),e.dom("path","",{d:"M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z",fill:"none","stroke-width":2,stroke:"#000"},s,2),e.dom("circle","",{cx:128,cy:128,r:6,"stroke-width":2,stroke:"#000",fill:"none"},s),e.colorRing=s},icon:function(t,s,i){i=i||40;let h=[""];switch(t){case"logo":h[1]="";break;case"donate":h[1]="";break;case"neo":h[1]="";break;case"phy":h[1]="";break;case"config":h[1]="";break;case"github":h[1]="";break;case"save":h[1]=""}return h[2]="",h.join("\n")},logoFill_d:"\n\t\tM 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 \n\t\tL 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 \n\t\tM 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 \n\t\tQ 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z\n\t\t",logo_github:"\n\t\tM 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 \n\t\t159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 \n\t\t216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 \n\t\t166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 \n\t\t82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z\n\t\t",logo_neo:"\n\t\tM 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 \n\t\t60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 \n\t\t186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 \n\t\t67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L \n\t\t134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z\n\t\t",logo_phy:"\n\t\tM 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 \n\t\tQ 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95\n\t\t",logo_config:"\n\t\tM 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 \n\t\tL 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 \n\t\tQ 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75\n\t\t",logo_donate:"\n\t\tM 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 \n\t\t106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 \n\t\t112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 \n\t\t154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 \n\t\t194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 \n\t\tQ 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 \n\t\t83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 \n\t\t94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 \n\t\t149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M \n\t\t66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 \n\t\t72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 \n\t\t54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 \n\t\t197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 \n\t\t200.9 187.5 200.9 187.5 195.35 Z\n\t\t"};e.setText();const h=e;class o{static autoTypes(t){let s=[];switch(t){case"svg":s=[{accept:{"image/svg+xml":".svg"}}];break;case"wav":s=[{accept:{"audio/wav":".wav"}}];break;case"mp3":s=[{accept:{"audio/mpeg":".mp3"}}];break;case"mp4":s=[{accept:{"video/mp4":".mp4"}}];break;case"bin":case"hex":s=[{description:"Binary Files",accept:{"application/octet-stream":[".bin",".hex"]}}];break;case"text":s=[{description:"Text Files",accept:{"text/plain":[".txt",".text"],"text/html":[".html",".htm"]}}];break;case"json":s=[{description:"JSON Files",accept:{"application/json":[".json"]}}];break;case"js":s=[{description:"JavaScript Files",accept:{"text/javascript":[".js"]}}];break;case"image":s=[{description:"Images",accept:{"image/*":[".png",".gif",".jpeg",".jpg"]}}];break;case"icon":s=[{description:"Icons",accept:{"image/x-ico":[".ico"]}}];break;case"lut":s=[{description:"Lut",accept:{"text/plain":[".cube",".3dl"]}}]}return s}static async load(t={}){"function"!=typeof window.showOpenFilePicker&&(window.showOpenFilePicker=o.showOpenFilePickerPolyfill);try{let s=t.type||"";const i={excludeAcceptAllOption:!!s,multiple:!1};i.types=o.autoTypes(s);const e=await window.showOpenFilePicker(i),h=await e[0].getFile();if(!h)return null;let n=h.name,r=n.substring(n.lastIndexOf(".")+1,n.length);const l=["png","jpg","jpeg","mp4","webm","ogg","mp3"],a=["sea","z","hex","bvh","BVH","glb","gltf"],c=new FileReader;-1!==l.indexOf(r)?c.readAsDataURL(h):-1!==a.indexOf(r)?c.readAsArrayBuffer(h):c.readAsText(h),c.onload=function(i){let e=i.target.result;switch(s){case"image":let s=new Image;s.onload=function(){t.callback&&t.callback(s,n,r)},s.src=e;break;case"json":t.callback&&t.callback(JSON.parse(e),n,r);break;default:t.callback&&t.callback(e,n,r)}}}catch(s){console.log(s),t.always&&t.callback&&t.callback(null)}}static showOpenFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("input");i.type="file",i.multiple=t.multiple,i.accept=t.types.map((t=>t.accept)).flatMap((t=>Object.keys(t).flatMap((s=>t[s])))).join(","),i.addEventListener("change",(()=>{s([...i.files].map((t=>({getFile:async()=>new Promise((s=>{s(t)}))}))))})),i.click()}))}static async save(t={}){let s=!1;"function"!=typeof window.showSaveFilePicker&&(window.showSaveFilePicker=o.showSaveFilePickerPolyfill,s=!0);try{let i=t.type||"";const e={suggestedName:t.name||"hello",data:t.data||""};e.types=o.autoTypes(i),e.finalType=Object.keys(e.types[0].accept)[0],e.suggestedName+=e.types[0].accept[e.finalType][0];const h=await window.showSaveFilePicker(e);if(s)return;const n=await h.createWritable();let r=new Blob([e.data],{type:e.finalType});await n.write(r),await n.close()}catch(t){console.log(t)}}static showSaveFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("a");i.download=t.suggestedName||"my-file.txt";let e=new Blob([t.data],{type:t.finalType});i.href=URL.createObjectURL(e),i.addEventListener("click",(()=>{s(setTimeout((()=>URL.revokeObjectURL(i.href)),1e3))})),i.click()}))}static async getFolder(){try{const t=await window.showDirectoryPicker(),s=[];for await(const i of t.values()){const t=await i.getFile();s.push(t)}return console.log(s),s}catch(t){console.log(t)}}}class n{constructor(t=0,s=0){this.x=t,this.y=s}set(t,s){return this.x=t,this.y=s,this}divide(t){return this.x/=t.x,this.y/=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divideScalar(t){return this.multiplyScalar(1/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}angle(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t}addScalar(t){return this.x+=t,this.y+=t,this}negate(){return this.x*=-1,this.y*=-1,this}neg(){return this.x=-1,this.y=-1,this}isZero(){return 0===this.x&&0===this.y}copy(t){return this.x=t.x,this.y=t.y,this}equals(t){return t.x===this.x&&t.y===this.y}nearEquals(t,s){return t.x.toFixed(s)===this.x.toFixed(s)&&t.y.toFixed(s)===this.y.toFixed(s)}lerp(t,s){return null===t?(this.x-=this.x*s,this.y-=this.y*s):(this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s),this}}class r{constructor(t={}){this.lock=t.lock||!1,this.neverlock=!1,this.isSpace=t.isSpace||!1,this.main=t.main||null,this.isUI=t.isUI||!1,this.group=t.group||null,this.isListen=!1,this.top=0,this.ytop=0,this.dx=t.dx||0,this.isSelectable=void 0!==t.selectable&&t.selectable,this.unselectable=void 0!==t.unselect?t.unselect:this.isSelectable,this.ontop=!!t.ontop&&t.ontop,this.css=this.main?this.main.css:h.css,this.colors=h.defineColor(t,this.main?this.group?this.group.colors:this.main.colors:h.colors),this.overEffect=this.colors.showOver,this.svgs=h.svgs,this.zone={x:0,y:0,w:0,h:0,d:0},this.local=(new n).neg(),this.isCanvasOnly=!1,this.isSelect=!1,this.p=void 0!==t.p?t.p:h.size.p,this.w=this.isUI?this.main.size.w:h.size.w,void 0!==t.w&&(this.w=t.w),this.h=this.isUI?this.main.size.h:h.size.h,void 0!==t.h&&(this.h=t.h),this.isSpace?this.lock=!0:this.h=this.h<11?11:this.h,this.fw=t.fw||0,this.autoWidth=t.auto||!0,this.isOpen=!1,this.radius=t.radius||this.colors.radius,this.transition=t.transition||h.transition,this.isNumber=!1,this.noNeg=t.noNeg||!1,this.allEqual=t.allEqual||!1,this.mono=!1,this.isEdit=!1,this.simple=t.simple||!1,this.simple&&(this.sa=0),this.setSize(this.w),void 0!==t.sa&&(this.sa=t.sa),void 0!==t.sb&&(this.sb=t.sb),this.simple&&(this.sb=this.w-this.sa),this.sc=void 0===t.sc?47:t.sc,this.objectLink=null,this.isSend=!1,this.objectKey=null,this.txt=t.name||"",this.name=t.rename||this.txt,this.target=t.target||null,this.callback=void 0===t.callback?null:t.callback,this.endCallback=null,this.openCallback=void 0===t.openCallback?null:t.openCallback,this.closeCallback=void 0===t.closeCallback?null:t.closeCallback,null===this.callback&&this.isUI&&null!==this.main.callback&&(this.callback=this.group?this.group.callback:this.main.callback),this.c=[],this.s=[],this.useFlex=!!this.isUI&&this.main.useFlex;let s=this.useFlex?"display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;":"float:left;";this.c[0]=h.dom("div",this.css.basic+s+"position:relative; height:20px;"),this.s[0]=this.c[0].style,this.margin=this.colors.sy,this.mtop=0;let i=h.isDivid(this.margin);if(this.isUI&&this.margin&&(this.s[0].boxSizing="content-box",i?(this.mtop=.5*this.margin,this.s[0].borderTop=this.mtop+"px solid transparent",this.s[0].borderBottom=this.mtop+"px solid transparent"):this.s[0].borderBottom=this.margin+"px solid transparent"),this.simple||(this.c[1]=h.dom("div",this.css.txt+this.css.middle),this.s[1]=this.c[1].style,this.c[1].textContent=this.name,this.s[1].color=this.lock?this.colors.titleoff:this.colors.title),t.pos){this.s[0].position="absolute";for(let s in t.pos)this.s[0][s]=t.pos[s];this.mono=!0}t.css&&(this.s[0].cssText=t.css)}init(){this.ytop=this.top+this.mtop,this.zone.h=this.h+this.margin,this.zone.w=this.w;let t=this.s,s=this.c;t[0].height=this.h+"px",this.isUI&&(t[0].background=this.colors.background),!this.autoWidth&&this.useFlex?(t[0].flex="1 0 auto",t[0].minWidth=this.minw+"px",t[0].textAlign="center"):this.isUI&&(t[0].width="100%"),void 0!==s[1]&&this.autoWidth&&(t[1]=s[1].style,t[1].top="1px",t[1].height=this.h-2+"px");let e=h.frag;for(let i=1,h=s.length;i!==h;i++)void 0!==s[i]&&(e.appendChild(s[i]),t[i]=s[i].style);let o=null!==this.target?this.target:this.isUI?this.main.inner:document.body;this.ontop?o.insertAdjacentElement("afterbegin",s[0]):o.appendChild(s[0]),s[0].appendChild(e),this.rSize(),this.isUI||(this.c[0].style.pointerEvents="auto",i.add(this))}addTransition(){this.baseH&&this.transition&&this.isUI&&(this.c[0].style.transition="height "+this.transition+"s ease-out")}dom(t,s,i,e,o){return h.dom(t,s,i,e,o)}setSvg(t,s,i,e,o){h.setSvg(t,s,i,e,o)}setCss(t,s){h.setCss(t,s)}clamp(t,s,i){return h.clamp(t,s,i)}getColorRing(){return h.colorRing||h.makeColorRing(),h.clone(h.colorRing)}getJoystick(t){return h["joystick_"+t]||h.makeJoystick(t),h.clone(h["joystick_"+t])}getCircular(t){return h.circular||h.makeCircular(t),h.clone(h.circular)}getKnob(t){return h.knob||h.makeKnob(t),h.clone(h.knob)}getPad2d(t){return h.pad2d||h.makePad(t),h.clone(h.pad2d)}cursor(t){i.cursor(t)}update(){}reset(){}content(){return this.c[0]}getDom(){return this.c[0]}uiout(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.background)}uiover(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.backgroundOver)}rename(t){void 0!==this.c[1]&&(this.c[1].textContent=t)}listen(){return this.isListen=i.addListen(this),this}listening(){null!==this.objectLink&&(this.isSend||this.isEdit||this.setValue(this.objectLink[this.objectKey]))}setValue(t){this.isNumber?this.value=this.numValue(t):this.value=t,this.update()}onChange(t){if(!this.isSpace)return this.callback=t||null,this}onFinishChange(t){if(!this.isSpace)return this.callback=null,this.endCallback=t,this}onOpen(t){return this.openCallback=t,this}onClose(t){return this.closeCallback=t,this}send(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.isSend=!0,null!==this.objectLink&&(this.objectLink[this.objectKey]=t),this.callback&&this.callback(t,this.objectKey),this.isSend=!1}sendEnd(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.endCallback&&this.endCallback(t),null!==this.objectLink&&(this.objectLink[this.objectKey]=t)}dispose(){this.isListen&&i.removeListen(this),h.clear(this.c[0]),null!==this.target?null!==this.group?this.group.clearOne(this):this.target.removeChild(this.c[0]):this.isUI?this.main.clearOne(this):document.body.removeChild(this.c[0]),this.isUI||i.remove(this),this.c=null,this.s=null,this.callback=null,this.target=null,this.isListen=!1}clear(){}getWidth(){let t=i.getWidth(this);t&&(this.w=t)}setSize(t){if(this.autoWidth)if(this.w=t,this.simple)this.sb=this.w-this.sa;else{let t=this.w*(this.p/100);this.sa=Math.floor(t+8),this.sb=Math.floor(this.w-t-16)}}rSize(){this.autoWidth&&(this.isUI||(this.s[0].width=this.w+"px"),this.simple||(this.s[1].width=this.sa+"px"))}setTypeNumber(t){let s;switch(this.isNumber=!0,this.value=0,void 0!==t.value&&("string"==typeof t.value?this.value=1*t.value:this.value=t.value),this.min=void 0===t.min?-1/0:t.min,this.max=void 0===t.max?1/0:t.max,this.precision=void 0===t.precision?2:t.precision,this.precision){case 0:s=1;break;case 1:s=.1;break;case 2:s=.01;break;case 3:s=.001;break;case 4:s=1e-4;break;case 5:s=1e-5;break;case 6:s=1e-6}this.step=void 0===t.step?s:t.step,this.range=this.max-this.min,this.value=this.numValue(this.value)}numValue(t){return this.noNeg&&(t=Math.abs(t)),1*Math.min(this.max,Math.max(this.min,t)).toFixed(this.precision)}handleEvent(t){if(!this.lock)return this.neverlock&&(i.lock=!1),this[t.type]?this[t.type](t):console.error(t.type,"this type of event no existe !")}wheel(t){return!1}mousedown(t){return!1}mousemove(t){return!1}mouseup(t){return!1}keydown(t){return!1}keyup(t){return!1}setReferency(t,s){this.objectLink=t,this.objectKey=s}display(t=!1){this.s[0].visibility=t?"visible":"hidden"}open(){this.isOpen||(this.isOpen=!0,i.needResize=!0,this.openCallback&&this.openCallback())}close(){this.isOpen&&(this.isOpen=!1,i.needResize=!0,this.closeCallback&&this.closeCallback())}needZone(){i.needReZone=!0}rezone(){i.needReZone=!0}select(){}unselect(){}setInput(t){i.setInput(t,this)}upInput(t,s){return i.upInput(t,s)}selected(t){this.isSelect=t||!1}}class l extends r{constructor(t={}){super(t),this.value=t.value||!1,this.model=void 0!==t.mode?t.mode:0,this.onName=t.rename||this.txt,t.onName&&(t.onname=t.onName),t.onname&&(this.onName=t.onname),this.inh=t.inh||Math.floor(.8*this.h),this.inw=t.inw||36;let s=this.colors;if(0===this.model){let t=Math.floor(.5*this.h)-.5*(this.inh-2);this.c[2]=this.dom("div",this.css.basic+"background:"+s.inputBg+"; height:"+(this.inh-2)+"px; width:"+this.inw+"px; top:"+t+"px; border-radius:10px; border:2px solid "+s.back),this.c[3]=this.dom("div",this.css.basic+"height:"+(this.inh-6)+"px; width:16px; top:"+(t+2)+"px; border-radius:10px; background:"+s.button+";")}else this.p=0,void 0!==this.c[1]&&(this.c[1].textContent=""),this.c[2]=this.dom("div",this.css.txt+this.css.button+"top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.borderSize+"px solid "+s.border+"; border-radius:"+this.radius+"px;");this.stat=-1,this.init(),this.update()}mousedown(t){return this.value=!this.value,this.update(!0),this.mousemove(t)}mousemove(t){return this.cursor("pointer"),this.mode(!0)}reset(){return this.cursor(),this.mode()}mode(t){let s,i=!1,e=this.colors,h=this.s,o=this.value;if(s=t?o?4:3:o?2:1,this.stat!==s){if(this.stat=s,0!==this.model){switch(s){case 1:h[2].color=e.text,h[2].background=e.button;break;case 2:h[2].color=e.textSelect,h[2].background=e.select;break;case 3:h[2].color=e.textOver,h[2].background=e.overoff;break;case 4:h[2].color=e.textOver,h[2].background=e.over}this.c[2].innerHTML=o?this.onName:this.name}else{switch(s){case 1:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.button;break;case 2:h[2].background=h[2].borderColor=e.back,h[3].background=e.textOver;break;case 3:h[2].background=h[2].borderColor=e.back,h[3].background=e.overoff;break;case 4:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.textSelect}h[3].marginLeft=o?"17px":"2px",this.c[1].textContent=o?this.onName:this.name}i=!0}return i}update(t){this.mode(),t&&this.send()}rSize(){super.rSize();let t=this.s,s=this.w-10-this.inw;0===this.model?(t[2].left=s+"px",t[3].left=s+"px"):(t[2].left=this.sa+"px",t[2].width=this.sb+"px")}}class a extends r{constructor(t={}){super(t),this.value="",void 0!==t.value&&(this.value=t.value),this.values=t.value||this.txt,t.values&&(this.values=t.values),t.values||t.value||(this.txt=""),this.onName=t.onName||null,this.on=!1,this.bw=t.forceWidth||0,t.bw&&(this.bw=t.bw),this.space=t.space||3,"string"==typeof this.values&&(this.values=[this.values]),this.isDown=!1,this.neverlock=!0,this.res=0,this.lng=this.values.length,this.tmp=[],this.stat=[];let s,i=this.colors;for(let t=0;te[i][0]&&s.x0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.text,this.setSvg(this.c[3],"stroke",s,1);break;case 1:this.s[2].color=i.textOver,this.setSvg(this.c[3],"stroke",i.backoff,0),s=this.model>0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.textOver,this.setSvg(this.c[3],"stroke",s,1)}return this.cmode=t,!0}reset(){this.isDown=!1}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"circular"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;if(s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=s.angle()-this.pi90,this.r=(this.r%this.twoPi+this.twoPi)%this.twoPi,null!==this.oldr){let t=this.r-this.oldr;this.r=Math.abs(t)>Math.PI?this.oldr:this.r,t>6&&(this.r=0),t<-6&&(this.r=this.twoPi)}let i=1/this.twoPi,e=this.r*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=~~(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("circular"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:sMath.PI?1:0)+" 1 "+i+","+e}update(t){if(this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range,this.setSvg(this.c[3],"d",this.makePath(),1),this.model>0){let t=this.colors,s=h.pack(h.lerpColor(h.unpack(h.ColorLuma(t.text,-.75)),h.unpack(t.text),this.percent));this.setSvg(this.c[3],"stroke",s,1)}t&&this.send()}}class d extends r{constructor(t={}){super(t),this.ctype=t.ctype||"hex",this.wfixe=256,this.cw=this.sb>256?256:this.sb,null!=t.cw&&(this.cw=t.cw),this.side=t.side||"down",this.up="down"===this.side?0:1,this.baseH=this.h,this.offset=new n,this.decal=new n,this.pp=new n;let s=this.colors;this.c[2]=this.dom("div",`${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${s.borderSize}px solid ${s.border};`),this.c[0].style.display="block",this.c[3]=this.getColorRing(),this.c[3].style.visibility="hidden",this.hsl=null,this.value="#ffffff",void 0!==t.value&&(t.value instanceof Array?this.value=h.rgbToHex(t.value):isNaN(t.value)?this.value=t.value:this.value=h.hexToHtml(t.value)),this.bcolor=null,this.isDown=!1,this.fistDown=!1,this.notext=t.notext||!1,this.tr=98,this.tsl=Math.sqrt(3)*this.tr,this.hue=0,this.d=256,this.init(),this.setColor(this.value),void 0!==t.open&&this.open()}testZone(t,s){let i=this.local;return-1===i.x&&-1===i.y?"":this.up&&this.isOpen?i.y>this.wfixe?"title":"color":i.ythis.tr)e=(c+u.pi90)/u.TwoPI,this.hue=(e+1)%1,this.setHSL([(e+1)%1,this.hsl[1],this.hsl[2]]);else{l=s.x*this.ratio,a=s.y*this.ratio;let t=this.hue*u.TwoPI+u.PI;t<0&&(t+=2*u.PI),r=Math.atan2(-a,l),r<0&&(r+=2*u.PI);let i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,h=.5*this.tr,c=Math.tan(e)*h,d=Math.sqrt(l*l+a*a),p=Math.sqrt(h*h+c*c);if(d>p){let s=Math.tan(e)*d,o=Math.atan(s/p);o>u.pi60?o=u.pi60:o<-u.pi60&&(o=-u.pi60),r+=o-e,i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,c=Math.tan(e)*h,d=p=Math.sqrt(h*h+c*c)}n=Math.sin(i)*d/this.tsl+.5;let m=1-2*Math.abs(n-.5);o=(Math.cos(i)*d+this.tr/2)/(1.5*this.tr)/m,o=u.clamp(o,0,1),this.setHSL([this.hsl[0],o,n])}}setHeight(){this.h=this.isOpen?this.wfixe+this.baseH+5:this.baseH,this.s[0].height=this.h+"px",this.zone.h=this.h}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(){super.open(),this.setHeight(),this.up&&(this.zone.y-=this.wfixe+5);let t=this.h-this.baseH;this.s[3].visibility="visible",this.parentHeight(t)}close(){super.close(),this.up&&(this.zone.y+=this.wfixe+5);let t=this.h-this.baseH;this.setHeight(),this.s[3].visibility="hidden",this.parentHeight(-t)}update(t){let s=h.rgbToHex(h.hslToRgb([this.hsl[0],1,.5]));this.moveMarkers(),this.value=this.bcolor,this.setSvg(this.c[3],"fill",s,2,0),this.s[2].background=this.bcolor,this.notext||(this.c[2].textContent=h.htmlToHex(this.bcolor)),this.invert=h.findDeepInver(this.rgb),this.s[2].color=this.invert?"#fff":"#000",t&&("array"===this.ctype&&this.send(this.rgb),"rgb"===this.ctype&&this.send(h.htmlRgb(this.rgb)),"hex"===this.ctype&&this.send(h.htmlToHex(this.value)),"html"===this.ctype&&this.send())}setValue(t){t instanceof Array?this.value=h.rgbToHex(t):isNaN(t)?this.value=t:this.value=h.hexToHtml(t),this.setColor(this.value),this.update()}setColor(t){let s=h.unpack(t);return this.bcolor!==t&&s&&(this.bcolor=t,this.rgb=s,this.hsl=h.rgbToHsl(this.rgb),this.hue=this.hsl[0],this.update()),this}setHSL(t){return this.hsl=t,this.rgb=h.hslToRgb(t),this.bcolor=h.rgbToHex(this.rgb),this.update(!0),this}moveMarkers(){let t=this.pp,s=h;this.invert;let i=this.hsl[0]*s.TwoPI,e=2/3*s.PI,o=this.tr,n=this.hsl[0],r=this.hsl[1],l=this.hsl[2],a=(i-s.pi90)*s.todeg;n=-i+s.pi90;let c=Math.cos(n)*o,d=-Math.sin(n)*o,u=Math.cos(n-e)*o,p=-Math.sin(n-e)*o,m=Math.cos(n+e)*o,g=-Math.sin(n+e)*o,x=(u+m)/2,v=(p+g)/2;i=(1-2*Math.abs(l-.5))*r;let b=u+(m-u)*l+(c-x)*i,f=p+(g-p)*l+(d-v)*i;t.set(b,f).addScalar(128),this.setSvg(this.c[3],"transform","rotate("+a+" )",2),this.setSvg(this.c[3],"cx",t.x,3),this.setSvg(this.c[3],"cy",t.y,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",2,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",3),this.setSvg(this.c[3],"fill",this.bcolor,3)}rSize(){super.rSize();let t=this.s;t[2].width=this.sb+"px",t[2].left=this.sa+"px",this.cw=this.sb>256?256:this.sb,this.rSizeColor(this.cw),this.decal.x=Math.floor(.5*(this.w-this.wfixe))}rSizeColor(t){if(t===this.wfixe)return;this.wfixe=t;let s=this.s;this.decal.y="up"===this.side?2:this.baseH+2,this.mid=Math.floor(.5*this.wfixe),this.setSvg(this.c[3],"viewBox","0 0 "+this.wfixe+" "+this.wfixe),s[3].width=this.wfixe+"px",s[3].height=this.wfixe+"px",s[3].top=this.decal.y+"px",this.ratio=256/this.wfixe,this.square=1/(this.wfixe/256*60),this.setHeight()}}class u extends r{constructor(t={}){super(t),this.round=Math.round,this.baseH=this.h,this.hplus=t.hplus||50,this.res=t.res||40,this.l=1,this.precision=t.precision||0,this.custom=t.custom||!1,this.names=t.names||["FPS","MS"];let s=t.cc||["220,220,220","255,255,0"];this.adding=t.adding||!1,this.range=t.range||[165,100,100],this.alpha=t.alpha||.25,this.values=[],this.points=[],this.textDisplay=[],this.custom||(this.now=i.getTime(),this.startTime=0,this.prevTime=0,this.frames=0,this.ms=0,this.fps=0,this.mem=0,this.mm=0,this.isMem=!(!self.performance||!self.performance.memory),this.isMem&&(this.names.push("MEM"),s.push("0,255,255")),this.txt=t.name||"Fps");let e=Math.floor(.5*this.h)-3;const h=this.colors;this.c[1].textContent=this.txt,this.c[0].style.cursor="pointer",this.c[0].style.pointerEvents="auto";let o="display:none; left:10px; top:"+this.h+"px; height:"+(this.hplus-8)+"px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid "+h.border+";";0!==this.radius&&(o+="border-radius:"+this.radius+"px;"),this.c[2]=this.dom("path",this.css.basic+o,{}),this.c[2].setAttribute("viewBox","0 0 "+this.res+" 50"),this.c[2].setAttribute("height","100%"),this.c[2].setAttribute("width","100%"),this.c[2].setAttribute("preserveAspectRatio","none"),this.c[3]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; left:0; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.c[4]=this.dom("div",this.css.txt+"position:absolute; left:10px; top:"+(this.h+2)+"px; display:none; width:100%; text-align:center;"),t.bottomLine&&(this.c[4]=this.dom("div",this.css.basic+"width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);")),this.isShow=!1;let n=this.s;n[1].lineHeight=this.h-4,n[1].color=h.text,0!==this.radius&&(n[0].borderRadius=this.radius+"px"),"none"!==this.colors.gborder&&(n[0].border="1px solid "+h.gborder);let r=0;for(r=0;r "+this.names[r]+" ")}for(r=this.names.length;r--;)this.dom("path",null,{fill:"rgba("+s[r]+","+this.alpha+")","stroke-width":1,stroke:"rgba("+s[r]+",1)","vector-effect":"non-scaling-stroke"},this.c[2]);this.init()}mousedown(t){this.isShow?this.close():this.open()}tick(t){this.values=t,this.isShow&&(this.drawGraph(),this.upText())}makePath(t){let s="";s+="M -1 50";for(let i=0;i";this.c[4].innerHTML=i}drawGraph(){let t,s=this.c[2],i=this.names.length,e=0,h=0;for(;i--;)t=this.adding?(this.values[h]+e)*this.range[h]:this.values[h]*this.range[h],this.points[h].shift(),this.points[h].push(50-t),this.setSvg(s,"d",this.makePath(this.points[h]),i+1),e+=this.values[h],h++}open(){super.open(),this.h=this.hplus+this.baseH,this.setSvg(this.c[3],"d",this.svgs.g2),null!==this.group?this.group.calc(this.hplus):this.isUI&&this.main.calc(this.hplus),this.s[0].height=this.h+"px",this.s[2].display="block",this.s[4].display="block",this.isShow=!0,this.custom||i.addListen(this)}close(){super.close(),this.h=this.baseH,this.setSvg(this.c[3],"d",this.svgs.g1),null!==this.group?this.group.calc(-this.hplus):this.isUI&&this.main.calc(-this.hplus),this.s[0].height=this.h+"px",this.s[2].display="none",this.s[4].display="none",this.isShow=!1,this.custom||i.removeListen(this),this.c[4].innerHTML=""}begin(){this.startTime=this.now()}end(){let t=this.now();if(this.ms=t-this.startTime,this.frames++,t>this.prevTime+1e3&&(this.fps=this.round(1e3*this.frames/(t-this.prevTime)),this.prevTime=t,this.frames=0,this.isMem)){let t=performance.memory.usedJSHeapSize,s=performance.memory.jsHeapSizeLimit;this.mem=this.round(954e-9*t),this.mm=t/s}return this.values=[this.fps,this.ms,this.mm],this.drawGraph(),this.upText([this.fps,this.ms,this.mem]),t}listening(){this.custom||(this.startTime=this.end())}rSize(){let t=this.s,s=this.w;t[3].left=this.sa+this.sb-6+"px",t[0].width=s+"px",t[1].width=s+"px",t[2].left="10px",t[2].width=s-20+"px",t[4].width=s-20+"px"}}class p extends r{constructor(t={}){super(t),this.value=void 0!==t.value?t.value:[0,0,0],this.lng=this.value.length,this.precision=void 0!==t.precision?t.precision:2,this.multiplicator=t.multiplicator||1,this.neg=t.neg||!1,this.line=void 0===t.line||t.line,this.autoWidth=void 0===t.autoWidth||t.autoWidth,this.isNumber=!1,this.isDown=!1,this.h=t.h||138,this.rh=this.h-10,this.top=0,this.c[0].style.width=this.w+"px",void 0!==this.c[1]&&(this.c[1].style.width=this.w+"px",this.autoWidth||(this.c[1].style.width="100%",this.c[1].style.justifyContent="center"),this.top=10,this.h+=10),this.gh=this.rh-28,this.gw=this.w-28,this.c[2]=this.dom("div",this.css.txt+"display:block; text-align:center; padding:0px 0px; top:"+(this.h-20)+"px; left:14px; width:"+this.gw+"px;\tcolor:"+this.colors.text),this.c[2].innerHTML=this.valueToHtml();let s=this.dom("svg",this.css.basic,{viewBox:"0 0 "+this.w+" "+this.rh,width:this.w,height:this.rh,preserveAspectRatio:"none"});this.setCss(s,{width:this.w,height:this.rh,left:0,top:this.top}),this.dom("path","",{d:"",stroke:this.colors.text,"stroke-width":2,fill:"none","stroke-linecap":"butt"},s),this.dom("rect","",{x:10,y:10,width:this.gw+8,height:this.gh+8,stroke:"rgba(0,0,0,0.3)","stroke-width":1,fill:"none"},s),this.iw=(this.gw-4*(this.lng-1))/this.lng;let i=[];this.cMode=[],this.v=[];for(let t=0;t',e="width:"+100/this.lng+"%;";for(;t--;)s===this.lng-1?i+=""+this.value[s]+"":i+=""+this.value[s]+"",s++;return i}updateSVG(){this.line&&this.setSvg(this.c[3],"d",this.makePath(),0);for(let t=0;tthis.top&&s.ye[i][0]&&s.xthis.distance){let t=Math.atan2(this.tmp.x,this.tmp.y);this.tmp.x=Math.sin(t)*this.distance,this.tmp.y=Math.cos(t)*this.distance}this.pos.copy(this.tmp).divideScalar(this.distance).negate(),this.update()}setValue(t){void 0===t&&(t=[0,0]),this.pos.set(t[0]||0,t[1]||0),this.updateSVG()}update(t){void 0===t&&(t=!0),null!==this.interval&&(this.isDown||(this.pos.lerp(null,.3),this.pos.x=Math.abs(this.pos.x)<.01?0:this.pos.x,this.pos.y=Math.abs(this.pos.y)<.01?0:this.pos.y,this.isUI&&this.main.isCanvas&&this.main.draw())),this.updateSVG(),t&&this.send(),this.pos.isZero()&&this.stopInterval()}updateSVG(){let t=.5*this.diam- -this.pos.x*this.distance,s=.5*this.diam- -this.pos.y*this.distance;if(0===this.model){let i=t+5*this.pos.x+5,e=s+5*this.pos.y+10;this.setSvg(this.c[3],"cx",i*this.ratio,3),this.setSvg(this.c[3],"cy",e*this.ratio,3)}else this.setSvg(this.c[3],"cx",t*this.ratio,3),this.setSvg(this.c[3],"cy",s*this.ratio,3);this.setSvg(this.c[3],"cx",t*this.ratio,4),this.setSvg(this.c[3],"cy",s*this.ratio,4),this.value[0]=1*(this.pos.x*this.multiplicator).toFixed(this.precision),this.value[1]=1*(this.pos.y*this.multiplicator).toFixed(this.precision),this.haveText&&(this.c[2].textContent=this.value)}clear(){this.stopInterval(),super.clear()}}class v extends r{constructor(t={}){super(t),this.isCyclic=t.cyclic||!1,this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.autoWidth=!1,this.setTypeNumber(t),this.minw=this.w,this.diam=t.diam||this.w,this.mPI=.8*Math.PI,this.toDeg=180/Math.PI,this.cirRange=2*this.mPI,this.offset=new n,this.h=t.h||this.w+10,this.c[0].style.width=this.w+"px",this.c[0].style.display="block",void 0!==this.c[1]&&(this.c[1].style.width="100%",this.c[1].style.justifyContent="center",this.top=10,this.h+=10),this.percent=0,this.cmode=0;let s=this.colors;this.c[2]=this.dom("div",this.css.txt+"justify-content:center; top:"+(this.h-20)+"px; width:100%; color:"+s.text),this.c[3]=this.getKnob(),this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1),this.setSvg(this.c[3],"stroke",s.text,3),this.setSvg(this.c[3],"d",this.makeGrad(),3),this.setSvg(this.c[3],"viewBox","0 0 "+this.diam+" "+this.diam),this.setCss(this.c[3],{width:this.diam,height:this.diam,left:0,top:this.top}),this.model>0&&(h.dom("path","",{d:"",stroke:s.text,"stroke-width":2,fill:"none","stroke-linecap":"round"},this.c[3]),2==this.model&&(h.addSVGGlowEffect(),this.setSvg(this.c[3],"style",'filter: url("#UILGlow");',4))),this.r=0,this.init(),this.update()}mode(t){let s=this.colors;if(this.cmode===t)return!1;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1);break;case 1:this.s[2].color=s.textOver,this.setSvg(this.c[3],"fill",s.select,0),this.setSvg(this.c[3],"stroke",s.textOver,1)}return this.cmode=t,!0}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"knob"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=-Math.atan2(s.x,s.y),null!==this.oldr&&(this.r=Math.abs(this.r-this.oldr)>Math.PI?this.oldr:this.r),this.r=this.r>this.mPI?this.mPI:this.r,this.r=this.r<-this.mPI?-this.mPI:this.r;let i=1/this.cirRange,e=(this.r+this.mPI)*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=Math.floor(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("knob"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s5?(s=this.range/this.step,t=(a-c)/s):(t=(a-c)/l*2,s=32);for(let c=0;c<=s;++c)i=a-t*c,e=l+44*Math.sin(i),h=l+44*Math.cos(i),o=l+40*Math.sin(i),n=l+40*Math.cos(i),r+="M"+e+" "+h+" L"+o+" "+n+" ";return r}update(t){this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range;let s=Math.PI+this.mPI,i=this.percent*this.cirRange-this.mPI,e=Math.sin(i),o=Math.cos(i),n=25*e+64,r=-25*o+64,l=20*e+64,a=-20*o+64;if(this.setSvg(this.c[3],"d","M "+n+" "+r+" L "+l+" "+a,1),this.model>0){let t=36*Math.sin(s)+64,n=36*Math.cos(s)+64,r=36*e+64,l=-36*o+64,a=i<=Math.PI-this.mPI?0:1;this.setSvg(this.c[3],"d","M "+t+","+n+" A 36,36 1 "+a+" 1 "+r+","+l,4);let c=h.pack(h.lerpColor(h.unpack(h.ColorLuma(this.colors.text,-.75)),h.unpack(this.colors.text),this.percent));this.setSvg(this.c[3],"stroke",c,4)}t&&this.send()}}class b extends r{constructor(t={}){super(t),this.hideCurrent=!1,this.path=t.path||"",this.format=t.format||"",this.isWithImage=""!==this.path,this.preLoadComplete=!1,this.tmpImage={},this.tmpUrl=[],this.m=void 0!==t.m?t.m:5;let s=t.align||"left",i=t.scrollSize||10;this.ss=i+1,this.sMode=0,this.tMode=0,this.listOnly=t.listOnly||!1,this.staticTop=t.staticTop||!1,this.isSelectable=this.listOnly,void 0!==t.select&&(t.selectable=t.select),void 0!==t.selectable&&(this.isSelectable=t.selectable),""===this.txt&&(this.p=0);let e=Math.floor(.5*this.h)-3,h=this.colors;if(this.c[2]=this.dom("div",this.css.basic+"top:0; display:none; border-radius:"+this.radius+"px;"),this.c[3]=this.dom("div",this.css.item+"padding:0px "+this.m+"px; margin-bottom:0px; position:absolute; justify-content:"+s+"; text-align:"+s+"; line-height:"+(this.h-4)+"px; top:1px; background:"+h.button+"; height:"+(this.h-2)+"px; border:1px solid "+h.border+"; border-radius:"+this.radius+"px;"),this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.scrollerBack=this.dom("div",this.css.basic+"right:0px; width:"+i+"px; background:"+h.back+"; display:none;"),this.scroller=this.dom("div",this.css.basic+"right:"+.5*(i-.25*i)+"px; width:"+.25*i+"px; background:"+h.text+"; display:none; "),this.c[3].style.color=h.text,this.list=[],this.refObject=null,t.list)if(t.list instanceof Array)this.list=t.list;else if(t.list instanceof Object){this.refObject=t.list;for(let t in this.refObject)this.list.push(t)}this.items=[],this.prevName="",this.tmpId=0,this.baseH=this.h,this.itemHeight=t.itemHeight||this.h,this.full=t.full||!1,this.py=0,this.ww=this.sb,this.scroll=!1,this.isDown=!1,this.current=null,this.side=t.side||"down",this.up="down"===this.side?0:1,this.up?(this.c[2].style.top="auto",this.c[3].style.top="auto",this.c[4].style.top="auto",this.c[2].style.bottom=this.h-2+"px",this.c[3].style.bottom="1px",this.c[4].style.bottom=e+"px"):this.c[2].style.top=this.baseH+"px",this.listIn=this.dom("div",this.css.basic+"left:0; top:0; width:100%; background:none;"),this.listIn.name="list",this.topList=0,this.c[2].appendChild(this.listIn),this.c[2].appendChild(this.scrollerBack),this.c[2].appendChild(this.scroller),void 0!==t.value?isNaN(t.value)?this.value=t.value:this.value=this.list[t.value]:this.value=this.list[0],this.isOpenOnStart=t.open||!1,this.listOnly&&(this.baseH=5,this.c[3].style.display="none",this.c[4].style.display="none",this.c[2].style.top=this.baseH+"px",this.isOpenOnStart=!0),this.miniCanvas=t.miniCanvas||!1,this.canvasBg=t.canvasBg||"rgba(0,0,0,0)",this.imageSize=t.imageSize||[20,20],this.drag=t.drag||!1,this.dragout=t.dragout||!1,this.dragstart=t.dragstart||null,this.dragend=t.dragend||null,this.setList(this.list),this.init(),this.isWithImage&&this.preloadImage(),this.isOpenOnStart&&this.open(!0),this.baseH+=this.mtop}preloadImage(){this.preLoadComplete=!1,this.tmpImage={};for(let t=0;tthis.h-this.baseH)return"title";if(this.scroll&&s.x>this.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}else{if(s.ythis.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}}return""}testItems(t){let s,i,e,h="",o=this.items,n=o.length;for(;n--;)if(s=o[n],i=s.posy+this.topList,e=s.posy+this.itemHeight+1+this.topList,t>=i&&t<=e)return h="item"+n,this.modeItem(0),this.current=s,this.modeItem(1),h;return h}modeItem(t){if(!this.current)return;this.current.select&&0===t&&(t=2);let s=this.colors;switch(t){case 0:this.current.style.background=s.back,this.current.style.color=s.text;break;case 1:this.current.style.background=s.over,this.current.style.color=s.textOver;break;case 2:this.current.style.background=s.select,this.current.style.color=s.textSelect}}unSelected(){this.current&&(this.modeItem(0),this.current=null)}selected(){this.current&&(this.resetItems(),this.modeItem(2),this.current.select=!0)}resetItems(){let t=this.items.length;for(;t--;)this.items[t].select=!1,this.items[t].style.background=this.colors.back,this.items[t].style.color=this.colors.text}hideActive(){this.hideCurrent&&(this.current&&(this.tmpId=this.current.id),this.resetHide())}resetHide(){console.log(this.tmpId);let t=this.items.length;for(;t--;)t===this.tmpId?(this.items[t].style.height="0px",this.items[t].posy=-1):(this.items[t].style.height=this.itemHeight+"px",this.items[t].posy=(this.itemHeight+1)*(t-1))}mouseup(t){this.isDown=!1}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s?(this.isDown=!0,this.mousemove(t)):"title"===s?(this.modeTitle(2),this.listOnly||(this.hideActive(),this.isOpen?this.close():this.open())):this.current&&(this.value=this.list[this.current.id],this.isSelectable&&this.selected(),this.send(this.value),this.listOnly||(this.close(),this.setTopItem())),!0)}mousemove(t){let s=!1,i=this.testZone(t);if(!i)return s;if("title"===i)this.unSelected(),this.modeTitle(1),this.cursor("pointer");else if("scroll"===i){if(this.cursor("s-resize"),this.modeScroll(1),this.isDown){this.modeScroll(2);let s=this.zone.y+this.baseH-2;this.update(t.clientY-s-.5*this.sh)}}else this.modeTitle(0),this.modeScroll(0),this.cursor("pointer");return i!==this.prevName&&(s=!0),this.prevName=i,s}wheel(t){return"title"!==this.testZone(t)&&(this.py+=10*t.delta,this.update(this.py),!0)}reset(){this.prevName="",this.unSelected(),this.modeTitle(0),this.modeScroll(0)}modeScroll(t){if(t===this.sMode)return;let s=this.scroller.style,i=this.colors;switch(t){case 0:s.background=i.text;break;case 1:case 2:s.background=i.select}this.sMode=t}modeTitle(t){if(t===this.tMode)return;let s=this.s,i=this.colors;switch(t){case 0:s[3].color=i.text,s[3].background=i.button;break;case 1:s[3].color=i.textOver,s[3].background=i.overoff;break;case 2:s[3].color=i.textSelect,s[3].background=i.overoff}this.tMode=t}clearList(){for(;this.listIn.children.length;)this.listIn.removeChild(this.listIn.lastChild);this.items=[]}setList(t){this.clearList(),this.list=t,this.length=this.list.length;let s,e,h=this.hideCurrent?this.length-1:this.length;this.maxItem=this.full?h:5,this.maxItem=hthis.maxHeight&&(this.ww=this.sb-this.ss,this.scroll=!0),this.miniCanvas&&(this.tmpCanvas=document.createElement("canvas"),this.tmpCanvas.width=this.imageSize[0],this.tmpCanvas.height=this.imageSize[1],this.tmpCtx=this.tmpCanvas.getContext("2d"),this.tmpCtx.fillStyle=this.canvasBg,this.tmpCtx.fillRect(0,0,this.imageSize[0],this.imageSize[1]));for(let t=0;tthis.range?this.range:t,this.topList=-Math.floor(t/this.ratio),this.listIn.style.top=this.topList+"px",this.scroller.style.top=Math.floor(t)+"px",this.py=t)}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(t){super.open(),this.update(0),this.h=this.maxHeight+this.baseH+5,this.scroll?(this.scroller.style.display="block",this.scrollerBack.style.display="block"):(this.topList=0,this.h=this.baseH+5+this.max,this.scroller.style.display="none",this.scrollerBack.style.display="none"),this.s[0].height=this.h+"px",this.s[2].display="block",this.up?(this.zone.y-=this.h-(this.baseH-10),this.setSvg(this.c[4],"d",this.svgs.g1)):this.setSvg(this.c[4],"d",this.svgs.g2),this.rSizeContent();let s=this.h-this.baseH;this.zone.h=this.h,t||this.parentHeight(s)}close(){super.close(),this.up&&(this.zone.y+=this.h-(this.baseH-10));let t=this.h-this.baseH;this.h=this.baseH,this.s[0].height=this.h+"px",this.s[2].display="none",this.setSvg(this.c[4],"d",this.svgs.g1),this.zone.h=this.h,this.parentHeight(-t)}text(t){this.c[3].textContent=t}rSizeContent(){let t=this.length;for(;t--;)this.listIn.children[t].style.width=this.ww+"px"}rSize(){super.rSize();let t=this.s,s=this.sb,i=this.sa;void 0!==t[2]&&(t[2].width=s+"px",t[2].left=i+"px",t[3].width=s+"px",t[3].left=i+"px",t[4].left=i+s-15+"px",this.ww=s,this.max>this.maxHeight&&(this.ww=s-this.ss),this.isOpen&&this.rSizeContent())}}class f extends r{constructor(t={}){super(t),this.setTypeNumber(t),this.allway=t.allway||!1,this.isDown=!1,this.value=[0],this.multy=1,this.invmulty=1,this.isSingle=!0,this.isAngle=!1,this.isVector=!1,t.isAngle&&(this.isAngle=!0,this.multy=h.torad,this.invmulty=h.todeg),this.isDrag=t.drag||!1,void 0!==t.value&&(isNaN(t.value)?t.value instanceof Array?(this.value=t.value,this.isSingle=!1):t.value instanceof Object&&(this.value=[],void 0!==t.value.x&&(this.value[0]=t.value.x),void 0!==t.value.y&&(this.value[1]=t.value.y),void 0!==t.value.z&&(this.value[2]=t.value.z),void 0!==t.value.w&&(this.value[3]=t.value.w),this.isSingle=!1,this.isVector=!0):this.value=[t.value]),this.lng=this.value.length,this.tmp=[],this.current=-1,this.prev={x:0,y:0,d:0,v:0};let s=this.colors;this.c[2]=this.dom("div",this.css.basic+" background:"+s.select+"; top:4px; width:0px; height:"+(this.h-8)+"px;"),this.cMode=[];let i=this.lng;for(;i--;)this.isAngle&&(this.value[i]=(180*this.value[i]/Math.PI).toFixed(this.precision)),this.c[3+i]=this.dom("div",this.css.txtselect+"top:1px; height:"+(this.h-2)+"px; color:"+s.text+"; background:"+s.back+"; borderColor:"+s.border+"; border-radius:"+this.radius+"px;"),t.center&&(this.c[2+i].style.textAlign="center"),this.c[3+i].textContent=this.value[i],this.c[3+i].style.color=this.colors.text,this.c[3+i].isNum=!0,this.cMode[i]=0;this.selectId=3+this.lng,this.c[this.selectId]=this.dom("div",this.css.txtselect+"position:absolute; top:2px; height:"+(this.h-4)+"px; padding:0px 0px; width:0px; color:"+s.textSelect+"; background:"+s.select+"; border:none; border-radius:0px;"),this.cursorId=4+this.lng,this.c[this.cursorId]=this.dom("div",this.css.basic+"top:2px; height:"+(this.h-4)+"px; width:0px; background:"+s.text+";"),this.init()}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";let i=this.lng,e=this.tmp;for(;i--;)if(s.x>e[i][0]&&s.x=this.txl?"text":s.x>=this.sa?"scroll":""}mouseup(t){this.isDown&&(this.isDown=!1)}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s&&(this.isDown=!0,this.old=this.value,this.mousemove(t)),!0)}mousemove(t){let s=!1;if("scroll"===this.testZone(t)?(this.mode(1),this.cursor("w-resize")):this.cursor(),this.isDown){let i=(t.clientX-(this.zone.x+this.sa)-3)/this.ww*this.range+this.min-this.old;(i>=this.step||i<=this.step)&&(i=Math.floor(i/this.step),this.value=this.numValue(this.old+i*this.step),this.update(!0),this.old=this.value),s=!0}return s}wheel(t){if("scroll"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s=this.sa?"text":""}mouseup(t){if(this.editable)return!!this.isDown&&(this.isDown=!1,this.mousemove(t))}mousedown(t){if(!this.editable)return;let s=this.testZone(t);return!this.isDown&&(this.isDown=!0,"text"===s&&this.setInput(this.c[2]),this.mousemove(t))}mousemove(t){if(!this.editable)return;let s=0;return"text"===this.testZone(t)?this.cursor("text"):this.cursor(),this.isDown&&(s=t.clientX-this.zone.x),this.upInput(s-this.sa-3,this.isDown)}update(){this.c[2].textContent=this.value}reset(){this.cursor()}select(t,s,i,e){let h=this.s,o=this.sa+5;h[4].width="1px",h[4].left=o+s+"px",h[3].left=o+s+"px",h[3].width=i+"px",this.c[3].innerHTML=e}unselect(){let t=this.s;t&&(t[3].width="0px",this.c[3].innerHTML="t",t[4].width="0px")}validate(t){this.allway&&(t=!0),this.value=this.c[2].textContent,""!==this.value?this.c[5].textContent="":this.c[5].textContent=this.placeHolder,t&&this.send()}rSize(){super.rSize();let t=this.s;t[2].left=this.sa+"px",t[2].width=this.sb+"px",t[5].left=this.sa+"px",t[5].width=this.sb+"px"}}class k extends r{constructor(t={}){super(t);let s=t.prefix||"";this.c[2]=this.dom("div",this.css.txt+"justify-content:right; width:60px; line-height:"+(this.h-8)+"px; color:"+this.colors.text),31===this.h&&(this.s[0].height=this.h+"px",this.s[1].top="8px",this.c[2].style.top="8px");let i=this.s;i[1].justifyContent=t.align||"left",i[1].fontWeight=t.fontWeight||"bold",this.c[1].textContent=this.txt.substring(0,1).toUpperCase()+this.txt.substring(1).replace("-"," "),this.c[2].textContent=s,this.init()}text(t){this.c[1].textContent=t}text2(t){this.c[2].textContent=t}rSize(){super.rSize(),this.s[1].width=this.w+"px",this.s[2].left=this.w+"px"}setColor(t){this.s[1].color=t,this.s[2].color=t}}class S extends r{constructor(t={}){super(t),this.value=t.value||"",this.isDown=!1,this.onActif=t.onActif||function(){};const s=this.colors;this.c[2]=this.dom("div",this.css.txt+this.css.button+" top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.buttonBorder+"; border-radius:15px; width:30px; left:10px;"),this.c[3]=this.dom("div",this.css.txtselect+"height:"+(this.h-4)+"px; background:"+s.inputBg+"; borderColor:"+s.inputBorder+"; border-radius:"+this.radius+"px;"),this.c[3].textContent=this.value;let i=Math.floor(.5*this.h)-7;this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:14px; height:14px; left:5px; top:"+i+"px;",{d:this.svgs.cursor,fill:s.text,stroke:"none"}),this.stat=1,this.isActif=!1,this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>this.sa&&s.xthis.sa&&s.xi[r][0]&&s.xe[r][0]&&s.ythis.lng-1&&(h=-1)),h}mouseup(t){return!!this.isDown&&(this.isDown=!1,-1!==this.res&&(this.value=this.values[this.res],this.send()),this.mousemove(t))}mousedown(t){return!this.isDown&&(this.isDown=!0,this.mousemove(t))}mousemove(t){let s=!1;return this.res=this.testZone(t),-1!==this.res?(this.cursor("pointer"),s=this.modes(this.isDown?3:2,this.res)):s=this.reset(),s}modes(t=1,s=-1){let i,e,h=this.lng,o=!1;for(;h--;)e=t,i=!!this.isSelectable&&this.values[h]===this.value,h===s?i&&2===e&&(e=3):(e=1,i&&(e=4)),this.mode(e,h)&&(o=!0);return o}mode(t,s){let i=!1,e=this.colors,h=this.buttons,o=s;if(this.stat[s]!==t){switch(this.stat[s]=t,t){case 1:h[o].style.color=e.text,h[o].style.background=e.button;break;case 2:h[o].style.color=e.textOver,h[o].style.background=e.overoff;break;case 3:h[o].style.color=e.textOver,h[o].style.background=e.over;break;case 4:h[o].style.color=e.textSelect,h[o].style.background=e.select}i=!0}return i}reset(){return this.res=-1,this.cursor(),this.modes()}label(t,s){this.buttons[s].textContent=t}icon(t,s,i){this.buttons[i].style.padding=(s||0)+"px 0px",this.buttons[i].innerHTML=t}testW(){let t=!1;if(3*this.spaces[0]+2*this.bsizeMax>this.w?(this.bsize[0]=.5*(this.w-3*this.spaces[0]),t=!0):this.bsize[0]!==this.bsizeMax&&(this.bsize[0]=this.bsizeMax,t=!0),!t)return;let s=this.buttons.length;for(;s--;)this.buttons[s].style.width=this.bsize[0]+"px"}rSize(){let t;super.rSize(),this.testW(),this.tmpX=[],this.tmpY=[];for(let s=0;sthis.h-this.c[2].offsetHeight?"text":"pad"}mouseup(t){return this.isDown=!1,this.mode(0)}mousedown(t){if("pad"===this.testZone(t))return this.isDown=!0,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=.5*this.w-(t.clientX-this.zone.x),i=.5*this.diam-(t.clientY-this.zone.y-this.ytop),e=256/this.diam;s=-s*e,i=-i*e,s=h.clamp(s,-this.maxPos,this.maxPos),i=h.clamp(i,-this.maxPos,this.maxPos),this.setPos([s,i]),this.update(!0)}mode(t){if(this.cmode===t)return!1;let s=this.colors;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.back,0),this.setSvg(this.c[3],"fill",s.button,1),this.setSvg(this.c[3],"stroke",s.back,2),this.setSvg(this.c[3],"stroke",s.back,3),this.setSvg(this.c[3],"stroke",s.text,4);break;case 1:this.s[2].color=s.textSelect,this.setSvg(this.c[3],"fill",s.backoff,0),this.setSvg(this.c[3],"fill",s.overoff,1),this.setSvg(this.c[3],"stroke",s.backoff,2),this.setSvg(this.c[3],"stroke",s.backoff,3),this.setSvg(this.c[3],"stroke",s.textSelect,4)}return this.cmode=t,!0}update(t){this.c[2].textContent=this.value,this.updateSVG(),t&&this.send()}updateSVG(){1==this.model&&(this.setSvg(this.c[3],"y1",this.pos.y,2),this.setSvg(this.c[3],"y2",this.pos.y,2),this.setSvg(this.c[3],"x1",this.pos.x,3),this.setSvg(this.c[3],"x2",this.pos.x,3)),this.setSvg(this.c[3],"cx",this.pos.x,4),this.setSvg(this.c[3],"cy",this.pos.y,4)}setPos(t){this.pos.set(t[0]+128,t[1]+128);let s=1/this.maxPos;this.value[0]=(t[0]*s*this.range).toFixed(this.precision),this.value[1]=(t[1]*s*this.range).toFixed(this.precision)}setValue(t,s=!1){void 0===t&&(t=this.value),this.value[0]=1*Math.min(this.max,Math.max(this.min,t[0])).toFixed(this.precision),this.value[1]=1*Math.min(this.max,Math.max(this.min,t[1])).toFixed(this.precision),this.pos.set(this.value[0]/this.range*this.maxPos+128,this.value[1]/this.range*this.maxPos+128),this.update(s)}}const T=function(){let t,s,e=arguments,h=!1,o=null;"string"==typeof e[0]?(t=e[0],s=e[1]||{}):"object"==typeof e[0]&&(h=!0,void 0===e[2]&&[].push.call(e,{}),t=e[2].type?e[2].type:O(e[0][e[1]],e[2]),s=e[2],s.name=e[1],s.hasOwnProperty("displayName")&&(s.name=s.displayName),"list"!==t||s.list?s.value=e[0][e[1]]:s.list=e[0][e[1]]);let n=t.toLowerCase();switch("group"===n&&(s.add=T),n){case"bool":case"boolean":o=new l(s);break;case"button":o=new a(s);break;case"circular":o=new c(s);break;case"color":o=new d(s);break;case"fps":o=new u(s);break;case"graph":o=new p(s);break;case"group":o=new g(s);break;case"joystick":o=new x(s);break;case"knob":o=new v(s);break;case"list":o=new b(s);break;case"numeric":case"number":o=new f(s);break;case"slide":o=new w(s);break;case"textInput":case"string":o=new y(s);break;case"title":case"text":o=new k(s);break;case"select":o=new S(s);break;case"bitmap":o=new M(s);break;case"selector":o=new I(s);break;case"empty":case"space":o=new m(s);break;case"item":o=new C(s);break;case"grid":o=new L(s);break;case"pad2d":case"pad":o=new z(s)}if(null!==o)return i.needResize=!0,h&&o.setReferency(e[0],e[1]),o},O=function(t,s){let i="slide";return"boolean"==typeof t?i="bool":"string"==typeof t?i="#"===t.substring(0,1)?"color":"string":"number"==typeof t?i=s.ctype?"color":"slide":"array"==typeof t&&t instanceof Array?"number"==typeof t[0]?i="number":"string"==typeof t[0]&&(i="list"):"object"==typeof t&&t instanceof Object&&(i=void 0!==t.x?"number":"list"),i};t.Files=o,t.Gui=class{constructor(t={}){this.isGui=!0,this.name="gui",this.canvas=null,this.screen=null,this.plane=t.plane||null,t.config&&(t.colors=t.config),t.colors?this.setConfig(t.colors):this.colors=h.defineColor(t),this.css=h.cloneCss(),this.isReset=!0,this.tmpAdd=null,this.isCanvas=t.isCanvas||!1,this.isCanvasOnly=!1,i.addDOMEventListeners=!t.hasOwnProperty("addDOMEventListeners")||t.addDOMEventListeners,this.callback=void 0===t.callback?null:t.callback,this.forceHeight=t.maxHeight||0,this.lockHeight=t.lockHeight||!1,this.isItemMode=void 0!==t.itemMode&&t.itemMode,this.cn="",this.size=h.size,void 0!==t.p&&(this.size.p=t.p),void 0!==t.w&&(this.size.w=t.w),void 0!==t.h&&(this.size.h=t.h),void 0!==t.s&&(this.size.s=t.s),this.size.h=this.size.h<11?11:this.size.h,this.local=(new n).neg(),this.zone={x:0,y:0,w:this.size.w,h:0},this.mouse=(new n).neg(),this.h=0,this.sw=0,this.margin=this.colors.sy,this.marginDiv=h.isDivid(this.margin),this.isWithClose=void 0===t.close||t.close,this.bh=this.isWithClose?this.size.h:0,this.autoResize=void 0===t.autoResize||t.autoResize,this.isCenter=t.center||!1,this.cssGui=void 0!==t.css?t.css:this.isCenter?"":"right:10px;",this.isOpen=void 0===t.open||t.open,this.isDown=!1,this.isScroll=!1,this.uis=[],this.current=-1,this.proto=null,this.isEmpty=!0,this.decal=0,this.ratio=1,this.oy=0,this.isNewTarget=!1;let s=this.colors;this.content=h.dom("div",this.css.basic+" width:0px; height:auto; top:0px; background:"+s.content+"; "+this.cssGui),this.innerContent=h.dom("div",this.css.basic+"width:100%; top:0; left:0; height:auto; overflow:hidden;"),this.content.appendChild(this.innerContent),this.useFlex=!0;let e=this.useFlex?"display:flex; flex-flow: row wrap;":"";this.inner=h.dom("div",this.css.basic+e+"width:100%; left:0; "),this.innerContent.appendChild(this.inner),this.scrollBG=h.dom("div",this.css.basic+"right:0; top:0; width:"+(this.size.s-1)+"px; height:10px; display:none; background:"+s.background+";"),this.content.appendChild(this.scrollBG),this.scroll=h.dom("div",this.css.basic+"background:"+s.button+"; right:2px; top:0; width:"+(this.size.s-4)+"px; height:10px;"),this.scrollBG.appendChild(this.scroll),this.bottomText=t.bottomText||["open","close"];let o=s.radius;this.bottom=h.dom("div",this.css.txt+"width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:"+o+"px; border-bottom-left-radius:"+o+"px; justify-content:center; height:"+this.bh+"px; line-height:"+(this.bh-5)+"px; color:"+s.text+";"),this.content.appendChild(this.bottom),this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.bottom.style.background=s.background,this.parent=void 0!==t.parent?t.parent:null,this.parent=void 0!==t.target?t.target:this.parent,null!==this.parent||this.isCanvas||(this.parent=document.body),null!==this.parent&&this.parent.appendChild(this.content),this.isCanvas&&null===this.parent&&(this.isCanvasOnly=!0),this.isCanvasOnly?(this.content.style.left="0px",this.content.style.right="auto",t.transition=0):this.content.style.pointerEvents="auto",this.transition=void 0!==t.transition?t.transition:h.transition,this.transition&&setTimeout(this.addTransition.bind(this),1e3),this.setWidth(),this.isCanvas&&this.makeCanvas(),i.add(this)}triggerMouseDown(t,s){i.handleEvent({type:"pointerdown",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}triggerMouseMove(){i.handleEvent({type:"pointermove",clientX:-1,clientY:-1,delta:0,key:null,keyCode:NaN})}triggerMouseUp(t,s){i.handleEvent({type:"pointerup",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}setTop(t,s){this.content.style.top=t+"px",void 0!==s&&(this.forceHeight=s),this.calc(),i.needReZone=!0}addTransition(){this.transition&&!this.isCanvas&&(this.innerContent.style.transition="height "+this.transition+"s ease-out",this.content.style.transition="height "+this.transition+"s ease-out",this.bottom.style.transition="top "+this.transition+"s ease-out");let t=this.uis.length;for(;t--;)this.uis[t].addTransition()}onDraw(){}makeCanvas(){this.canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),this.canvas.width=this.zone.w,this.canvas.height=this.forceHeight?this.forceHeight:this.zone.h}draw(t){if(null===this.canvas)return;let s=this.zone.w,e=this.forceHeight?this.forceHeight:this.zone.h;i.toCanvas(this,s,e,t)}getDom(){return this.content}noMouse(){this.mouse.neg()}setMouse(t,s=!0){s?this.mouse.set(Math.round(t.x*this.canvas.width),this.canvas.height-Math.round(t.y*this.canvas.height)):this.mouse.set(Math.round(t.x*this.canvas.width),Math.round(t.y*this.canvas.height))}setConfig(t){h.setText(),this.colors=h.defineColor(t)}setColors(t){for(let s in t)this.colors[s]&&(this.colors[s]=t[s])}setText(t,s,i,e){h.setText(t,s,i,e)}hide(t){this.content.style.visibility=t?"hidden":"visible"}display(t=!1){this.content.style.visibility=t?"visible":"hidden"}onChange(t){return this.callback=t||null,this}mode(t){let s=!1,e=this.colors;if(t!==this.cn){switch(this.cn=t,t){case"def":i.cursor(),this.scroll.style.background=e.button,this.bottom.style.background=e.background,this.bottom.style.color=e.text;break;case"scrollOver":i.cursor("ns-resize"),this.scroll.style.background=e.select;break;case"scrollDown":this.scroll.style.background=e.select;break;case"bottomOver":i.cursor("pointer"),this.bottom.style.background=e.backgroundOver,this.bottom.style.color=e.textOver}s=!0}return s}clearTarget(){return-1!==this.current&&(this.proto.s&&(this.proto.uiout(),this.proto.reset()),this.proto=null,this.current=-1,i.cursor(),!0)}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";this.isReset=!1;let i="",e=this.isScroll?this.zone.w-this.size.s:this.zone.w;return i=s.y>this.zone.h-this.bh&&s.ye?"scroll":"content",i}handleEvent(t){let s=t.type,e=!1,h=!1,o=this.testZone(t);if("mouseup"===s&&this.isDown&&(this.isDown=!1),"mousedown"!==s||this.isDown||(this.isDown=!0),this.isDown&&this.isNewTarget&&(i.clearInput(),this.isNewTarget=!1),o){switch(o){case"content":t.clientY=this.isScroll?t.clientY+this.decal:t.clientY,i.isMobile&&"mousedown"===s&&this.getNext(t,e),this.proto&&(h=this.proto.handleEvent(t)),"mousemove"===s&&(e=this.mode("def")),"wheel"===s&&!h&&this.isScroll&&(e=this.onWheel(t)),i.lock||this.getNext(t,e);break;case"bottom":this.clearTarget(),"mousemove"===s&&(e=this.mode("bottomOver")),"mousedown"===s&&(this.isOpen=!this.isOpen,this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.calc(),this.mode("def"),e=!0);break;case"scroll":this.clearTarget(),"mousemove"===s&&(e=this.mode("scrollOver")),"mousedown"===s&&(e=this.mode("scrollDown")),"wheel"===s&&(e=this.onWheel(t)),this.isDown&&this.update(t.clientY-this.zone.y-.5*this.sh)}this.isDown&&(e=!0),h&&(e=!0),"keyup"===s&&(e=!0),"keydown"===s&&(e=!0),e&&this.draw()}}getNext(t,s){let e=i.findTarget(this.uis,t);e!==this.current&&(this.clearTarget(),this.current=e,this.isNewTarget=!0),-1!==e&&(this.proto=this.uis[this.current],this.proto.uiover())}onWheel(t){return this.oy+=20*t.delta,this.update(this.oy),!0}reset(t){if(this.isReset)return;this.mouse.neg(),this.isDown=!1;let s=this.mode("def"),i=this.clearTarget();(s||i)&&this.draw(!0),this.isReset=!0}add(){let t=arguments,s=!1;"object"==typeof t[1]?(t[1].isUI=!0,t[1].main=this,s=!!t[1].ontop&&t[1].ontop):"string"==typeof t[1]&&(void 0===t[2]?[].push.call(t,{isUI:!0,main:this}):(t[2].isUI=!0,t[2].main=this,s=!!t[2].ontop&&t[2].ontop));let i=T.apply(this,t);if(null!==i)return s?this.uis.unshift(i):this.uis.push(i),this.calc(),this.isEmpty=!1,i}remove(t){t.dispose&&t.dispose()}clearOne(t){let s=this.uis.indexOf(t);-1!==s&&(this.inner.removeChild(this.uis[s].c[0]),this.uis.splice(s,1),this.calc())}empty(){let t,s=this.uis.length;for(;s--;)t=this.uis.pop(),this.inner.removeChild(t.c[0]),t.dispose();this.uis=[],this.isEmpty=!0,this.calc()}clear(){this.empty()}clear2(){setTimeout(this.empty.bind(this),0)}dispose(){this.clear(),null!==this.parent&&this.parent.removeChild(this.content),i.remove(this)}resetItem(){if(!this.isItemMode)return;let t=this.uis.length;for(;t--;)this.uis[t].selected()}setItem(t){if(!this.isItemMode)return;if(t=t||"",this.resetItem(),!t)return void this.update(0);let s=this.uis.length;for(;s--;)this.uis[s].value===t&&(this.uis[s].selected(!0),this.isScroll&&this.update(s*(this.uis[s].h+this.margin)*this.ratio))}upScroll(t){this.sw=t?this.size.s:0,this.oy=t?this.oy:0,this.scrollBG.style.display=t?"block":"none",t&&(this.total=this.h,this.maxView=this.maxHeight,this.ratio=this.maxView/this.total,this.sh=this.maxView*this.ratio,this.range=this.maxView-this.sh,this.oy=h.clamp(this.oy,0,this.range),this.scrollBG.style.height=this.maxView+"px",this.scroll.style.height=this.sh+"px"),this.setItemWidth(this.zone.w-this.sw),this.update(this.oy)}update(t){t=h.clamp(t,0,this.range),this.decal=Math.floor(t/this.ratio),this.inner.style.top=-this.decal+"px",this.scroll.style.top=Math.floor(t)+"px",this.oy=t}calcUis(){return i.calcUis(this.uis,this.zone,this.zone.y)}calc(){clearTimeout(this.tmp),this.tmp=setTimeout(this.setHeight.bind(this),10)}setHeight(){if(this.tmp&&clearTimeout(this.tmp),this.zone.h=this.bh,this.isScroll=!1,this.isOpen){this.h=this.calcUis();let t=this.forceHeight?this.forceHeight+this.zone.y:window.innerHeight;this.maxHeight=t-this.zone.y-this.bh,this.h-this.maxHeight>1?(this.isScroll=!0,this.zone.h=this.maxHeight+this.bh):this.zone.h=this.h+this.bh}this.upScroll(this.isScroll),this.innerContent.style.height=this.zone.h-this.bh+"px",this.content.style.height=this.zone.h+"px",this.bottom.style.top=this.zone.h-this.bh+"px",this.forceHeight&&this.lockHeight&&(this.content.style.height=this.forceHeight+"px"),this.isCanvas&&this.draw(!0)}rezone(){i.needReZone=!0}setWidth(t){t&&(this.zone.w=t),this.zone.w=Math.floor(this.zone.w),this.content.style.width=this.zone.w+"px",this.isCenter&&(this.content.style.marginLeft=-Math.floor(.5*this.zone.w)+"px"),this.setItemWidth(this.zone.w-this.sw)}setItemWidth(t){let s=this.uis.length;for(;s--;)this.uis[s].setSize(t),this.uis[s].rSize()}},t.REVISION="4.3.0",t.Tools=h,t.add=T,Object.defineProperty(t,"__esModule",{value:!0})})); +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.UIL = {})); +})(this, (function (exports) { 'use strict'; + + /** + * @author lth / https://github.com/lo-th + */ + + const REVISION = "4.3.0"; + + // INTENAL FUNCTION + + const R = { + ui: [], + + dom: null, + + ID: null, + lock: false, + wlock: false, + current: -1, + + needReZone: true, + needResize: false, + forceZone: false, + isEventsInit: false, + isLeave: false, + addDOMEventListeners: true, + + downTime: 0, + prevTime: 0, + + //prevDefault: ['contextmenu', 'wheel'], + prevDefault: ["contextmenu"], + pointerEvent: ["pointerdown", "pointermove", "pointerup"], + eventOut: ["pointercancel", "pointerout", "pointerleave"], + + xmlserializer: null, + tmpTime: null, + tmpImage: null, + + oldCursor: "auto", + + input: null, + parent: null, + firstImput: true, + + hiddenImput: null, + hiddenSizer: null, + hasFocus: false, + startInput: false, + inputRange: [0, 0], + cursorId: 0, + str: "", + pos: 0, + startX: -1, + moveX: -1, + + debugInput: false, + + isLoop: false, + listens: [], + + e: { + type: null, + clientX: 0, + clientY: 0, + keyCode: NaN, + key: null, + delta: 0, + }, + + isMobile: false, + + now: null, + needsUpdate: false, + + getTime: function () { + return self.performance && self.performance.now + ? self.performance.now.bind(performance) + : Date.now; + }, + + add: function (o) { + // R.ui[0] is de GUI object that is added first by the constructor + R.ui.push(o); + R.getZone(o); + + if (!R.isEventsInit) R.initEvents(); + }, + + testMobile: function () { + let n = navigator.userAgent; + if ( + n.match(/Android/i) || + n.match(/webOS/i) || + n.match(/iPhone/i) || + n.match(/iPad/i) || + n.match(/iPod/i) || + n.match(/BlackBerry/i) || + n.match(/Windows Phone/i) + ) + return true; + else return false; + }, + + remove: function (o) { + let i = R.ui.indexOf(o); + + if (i !== -1) { + R.removeListen(o); + R.ui.splice(i, 1); + } + + if (R.ui.length === 0) { + R.removeEvents(); + } + }, + + // ---------------------- + // EVENTS + // ---------------------- + + initEvents: function () { + if (R.isEventsInit) return; + + let dom = document.body; + + R.isMobile = R.testMobile(); + R.now = R.getTime(); + + if (!R.isMobile) { + dom.addEventListener("wheel", R, { passive: false }); + } else { + dom.style.touchAction = "none"; + } + + console.log("R.addDOMEventListeners " + R.addDOMEventListeners); + if (R.addDOMEventListeners) { + dom.addEventListener("pointercancel", R); + dom.addEventListener("pointerleave", R); + //dom.addEventListener( 'pointerout', R ) + + dom.addEventListener("pointermove", R); + dom.addEventListener("pointerdown", R); + dom.addEventListener("pointerup", R); + + dom.addEventListener("keydown", R, false); + dom.addEventListener("keyup", R, false); + } + window.addEventListener("resize", R.resize, false); + + //window.onblur = R.out; + //window.onfocus = R.in; + + R.isEventsInit = true; + R.dom = dom; + }, + + removeEvents: function () { + if (!R.isEventsInit) return; + + let dom = document.body; + + if (!R.isMobile) { + dom.removeEventListener("wheel", R); + } + + if (R.addDOMEventListeners) { + dom.removeEventListener("pointercancel", R); + dom.removeEventListener("pointerleave", R); + //dom.removeEventListener( 'pointerout', R ); + + dom.removeEventListener("pointermove", R); + dom.removeEventListener("pointerdown", R); + dom.removeEventListener("pointerup", R); + + dom.removeEventListener("keydown", R); + dom.removeEventListener("keyup", R); + } + window.removeEventListener("resize", R.resize); + + R.isEventsInit = false; + }, + + resize: function () { + let i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); + } + + R.needReZone = true; + R.needResize = false; + }, + + out: function () { + console.log("im am out"); + R.clearOldID(); + }, + + in: function () { + console.log("im am in"); + // R.clearOldID(); + }, + + // ---------------------- + // HANDLE EVENTS + // ---------------------- + + fakeUp: function () { + this.handleEvent({ type: "pointerup" }); + }, + + handleEvent: function (event) { + //console.log("Roots.handleEvent "+event.type) + //if(!event.type) return; + + if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); + + if (R.needResize) R.resize(); + + R.findZone(R.forceZone); + + let e = R.e; + let leave = false; + + if (event.type === "keydown") R.keydown(event); + if (event.type === "keyup") R.keyup(event); + + if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; + else e.delta = 0; + + let ptype = event.pointerType; // mouse, pen, touch + + e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; + e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; + + e.type = event.type; + + if (R.eventOut.indexOf(event.type) !== -1) { + leave = true; + e.type = "mouseup"; + } + + if (event.type === "pointerleave") R.isLeave = true; + + if (event.type === "pointerdown") e.type = "mousedown"; + if (event.type === "pointerup") e.type = "mouseup"; + if (event.type === "pointermove") { + if (R.isLeave) { + // if user resize outside this document + R.isLeave = false; + R.resize(); + } + e.type = "mousemove"; + } + + // double click test + if (e.type === "mousedown") { + R.downTime = R.now(); + let time = R.downTime - R.prevTime; + + // double click on imput + if (time < 200) { + R.selectAll(); + return false; + } + + R.prevTime = R.downTime; + R.forceZone = false; + } + + // for imput + if (e.type === "mousedown") R.clearInput(); + + // mouse lock + if (e.type === "mousedown") R.lock = true; + if (e.type === "mouseup") R.lock = false; + + //if( R.current !== null && R.current.neverlock ) R.lock = false; + + /*if( e.type === 'mousedown' && event.button === 1){ + R.cursor() + e.preventDefault(); + e.stopPropagation(); + }*/ + + //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) + + if (R.isMobile && e.type === "mousedown") R.findID(e); + if (e.type === "mousemove" && !R.lock) R.findID(e); + + if (R.ID !== null) { + if (R.ID.isCanvasOnly) { + e.clientX = R.ID.mouse.x; + e.clientY = R.ID.mouse.y; + } + + //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 + + R.ID.handleEvent(e); + } + + if (R.isMobile && e.type === "mouseup") R.clearOldID(); + if (leave) R.clearOldID(); + }, + + // ---------------------- + // ID + // ---------------------- + + findID: function (e) { + let i = R.ui.length, + next = -1, + u, + x, + y; + + while (i--) { + u = R.ui[i]; + + if (u.isCanvasOnly) { + x = u.mouse.x; + y = u.mouse.y; + } else { + x = e.clientX; + y = e.clientY; + } + + if (R.onZone(u, x, y)) { + next = i; + + if (next !== R.current) { + R.clearOldID(); + R.current = next; + R.ID = u; + } + break; + } + } + + if (next === -1) R.clearOldID(); + }, + + clearOldID: function () { + if (!R.ID) return; + R.current = -1; + R.ID.reset(); + R.ID = null; + R.cursor(); + }, + + // ---------------------- + // GUI / GROUP FUNCTION + // ---------------------- + + calcUis: (uis, zone, py, group = false) => { + //console.log('calc_uis') + + let i = uis.length, + u, + px = 0, + n = 0, + tw, + m; + + let height = 0; + + while (i--) { + u = uis[n]; + n++; + + if (!group && u.isGroup) u.calcUis(); + + m = u.margin; + //div = u.marginDiv + + u.zone.w = u.w; + u.zone.h = u.h + m; + + if (!u.autoWidth) { + if (px === 0) height += u.h + m; + + u.zone.x = zone.x + px; + u.zone.y = py; // + u.mtop + //if(div) u.zone.y += m * 0.5 + + tw = R.getWidth(u); + if (tw) u.zone.w = u.w = tw; + else if (u.fw) u.zone.w = u.w = u.fw; + + px += u.zone.w; + + if (px >= zone.w) { + py += u.h + m; + //if(div) py += m * 0.5 + px = 0; + } + } else { + px = 0; + + u.zone.x = zone.x + u.dx; + u.zone.y = py; + py += u.h + m; + + height += u.h + m; + } + } + + return height; + }, + + findTarget: function (uis, e) { + let i = uis.length; + + while (i--) { + if (R.onZone(uis[i], e.clientX, e.clientY)) return i; + } + + return -1; + }, + + // ---------------------- + // ZONE + // ---------------------- + + findZone: function (force) { + if (!R.needReZone && !force) return; + + var i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + R.getZone(u); + if (u.isGui) u.calcUis(); + } + + R.needReZone = false; + }, + + onZone: function (o, x, y) { + if (x === undefined || y === undefined) return false; + + let z = o.zone; + let mx = x - z.x; // - o.dx; + let my = y - z.y; + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 + //if( o.group !== null ) mx -= o.dx + + let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; + + //if( o.marginDiv ) my -= o.margin * 0.5 + + if (over) o.local.set(mx, my); + else o.local.neg(); + + return over; + }, + + getWidth: function (o) { + //return o.getDom().offsetWidth + return o.getDom().clientWidth; + + //let r = o.getDom().getBoundingClientRect(); + //return (r.width) + //return Math.floor(r.width) + }, + + getZone: function (o) { + if (o.isCanvasOnly) return; + let r = o.getDom().getBoundingClientRect(); + + //if( !r.width ) return + //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; + //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; + o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; + + //console.log(o.name, o.zone) + }, + + // ---------------------- + // CURSOR + // ---------------------- + + cursor: function (name) { + name = name ? name : "auto"; + if (name !== R.oldCursor) { + document.body.style.cursor = name; + R.oldCursor = name; + } + }, + + // ---------------------- + // CANVAS + // ---------------------- + + toCanvas: function (o, w, h, force) { + if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); + + // prevent exesive redraw + + if (force && R.tmpTime !== null) { + clearTimeout(R.tmpTime); + R.tmpTime = null; + } + + if (R.tmpTime !== null) return; + + if (R.lock) + R.tmpTime = setTimeout(function () { + R.tmpTime = null; + }, 10); + + /// + + let isNewSize = false; + if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; + + if (R.tmpImage === null) R.tmpImage = new Image(); + + let img = R.tmpImage; //new Image(); + + let htmlString = R.xmlserializer.serializeToString(o.content); + + let svg = + '' + + htmlString + + ""; + + img.onload = function () { + let ctx = o.canvas.getContext("2d"); + + if (isNewSize) { + o.canvas.width = w; + o.canvas.height = h; + } else { + ctx.clearRect(0, 0, w, h); + } + ctx.drawImage(this, 0, 0); + + o.onDraw(); + }; + + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); + //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); + img.crossOrigin = ""; + R.needsUpdate = false; + }, + + // ---------------------- + // INPUT + // ---------------------- + + setHidden: function () { + if (R.hiddenImput === null) { + //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' + //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' + //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; + + R.hiddenImput = document.createElement("input"); + R.hiddenImput.type = "text"; + //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); + + R.hiddenSizer = document.createElement("div"); + //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; + + document.body.appendChild(R.hiddenImput); + document.body.appendChild(R.hiddenSizer); + } + + let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; + let css = + R.parent.css.txtselect + + "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + + hide; + R.hiddenImput.style.cssText = + css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); + R.hiddenSizer.style.cssText = css + "bottom:40px;"; + + R.hiddenImput.style.width = R.input.clientWidth + "px"; + R.hiddenImput.value = R.str; + R.hiddenSizer.innerHTML = R.str; + + R.hasFocus = true; + }, + + clearHidden: function (p) { + if (R.hiddenImput === null) return; + R.hasFocus = false; + }, + + clickPos: function (x) { + let i = R.str.length, + l = 0, + n = 0; + while (i--) { + l += R.textWidth(R.str[n]); + if (l >= x) break; + n++; + } + return n; + }, + + upInput: function (x, down) { + if (R.parent === null) return false; + + let up = false; + + if (down) { + let id = R.clickPos(x); + + R.moveX = id; + + if (R.startX === -1) { + R.startX = id; + R.cursorId = id; + R.inputRange = [R.startX, R.startX]; + } else { + let isSelection = R.moveX !== R.startX; + + if (isSelection) { + if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; + else R.inputRange = [R.startX, R.moveX]; + } + } + + up = true; + } else { + if (R.startX !== -1) { + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.startX = -1; + + up = true; + } + } + + if (up) R.selectParent(); + + return up; + }, + + selectAll: function () { + if (!R.parent) return; + + R.str = R.input.textContent; + R.inputRange = [0, R.str.length]; + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.cursorId = R.inputRange[1]; + R.selectParent(); + }, + + selectParent: function () { + var c = R.textWidth(R.str.substring(0, R.cursorId)); + var e = R.textWidth(R.str.substring(0, R.inputRange[0])); + var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); + + R.parent.select(c, e, s, R.hiddenSizer.innerHTML); + }, + + textWidth: function (text) { + if (R.hiddenSizer === null) return 0; + text = text.replace(/ /g, " "); + R.hiddenSizer.innerHTML = text; + return R.hiddenSizer.clientWidth; + }, + + clearInput: function () { + if (R.parent === null) return; + if (!R.firstImput) R.parent.validate(true); + + R.clearHidden(); + R.parent.unselect(); + + //R.input.style.background = 'none'; + R.input.style.background = R.parent.colors.back; + R.input.style.borderColor = R.parent.colors.border; + //R.input.style.color = R.parent.colors.text; + R.parent.isEdit = false; + + R.input = null; + R.parent = null; + (R.str = ""), (R.firstImput = true); + }, + + setInput: function (Input, parent) { + R.clearInput(); + + R.input = Input; + R.parent = parent; + + R.input.style.background = R.parent.colors.backoff; + R.input.style.borderColor = R.parent.colors.select; + //R.input.style.color = R.parent.colors.textSelect; + R.str = R.input.textContent; + + R.setHidden(); + }, + + keydown: function (e) { + if (R.parent === null) return; + + let keyCode = e.which; + e.shiftKey; + + //console.log( keyCode ) + + R.firstImput = false; + + if (R.hasFocus) { + // hack to fix touch event bug in iOS Safari + window.focus(); + R.hiddenImput.focus(); + } + + R.parent.isEdit = true; + + // e.preventDefault(); + + // add support for Ctrl/Cmd+A selection + //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { + //R.selectText(); + //e.preventDefault(); + //return self.render(); + //} + + if (keyCode === 13) { + //enter + + R.clearInput(); + + //} else if( keyCode === 9 ){ //tab key + + // R.input.textContent = ''; + } else { + if (R.input.isNum) { + if ( + (e.keyCode > 47 && e.keyCode < 58) || + (e.keyCode > 95 && e.keyCode < 106) || + e.keyCode === 190 || + e.keyCode === 110 || + e.keyCode === 8 || + e.keyCode === 109 + ) { + R.hiddenImput.readOnly = false; + } else { + R.hiddenImput.readOnly = true; + } + } else { + R.hiddenImput.readOnly = false; + } + } + }, + + keyup: function (e) { + if (R.parent === null) return; + + R.str = R.hiddenImput.value; + + if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value + else R.input.textContent = R.str; + + R.cursorId = R.hiddenImput.selectionStart; + R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; + + R.selectParent(); + + //if( R.parent.allway ) + R.parent.validate(); + }, + + // ---------------------- + // + // LISTENING + // + // ---------------------- + + loop: function () { + // modified by Fedemarino + if (R.isLoop) requestAnimationFrame(R.loop); + R.needsUpdate = R.update(); + // if there is a change in a value generated externally, the GUI needs to be redrawn + if (R.ui[0]) R.ui[0].draw(); + }, + + update: function () { + // modified by Fedemarino + let i = R.listens.length; + let needsUpdate = false; + while (i--) { + //check if the value of the object has changed + let hasChanged = R.listens[i].listening(); + if (hasChanged) needsUpdate = true; + } + return needsUpdate; + }, + + removeListen: function (proto) { + let id = R.listens.indexOf(proto); + if (id !== -1) R.listens.splice(id, 1); + if (R.listens.length === 0) R.isLoop = false; + }, + + addListen: function (proto) { + let id = R.listens.indexOf(proto); + + if (id !== -1) return false; + + R.listens.push(proto); + + if (!R.isLoop) { + R.isLoop = true; + R.loop(); + } + + return true; + }, + }; + + const Roots = R; + + /** + * @author lth / https://github.com/lo-th + */ + + const T = { + + transition: 0.2, + + frag: document.createDocumentFragment(), + + colorRing: null, + joystick_0: null, + joystick_1: null, + circular: null, + knob: null, + pad2d: null, + + svgns: "http://www.w3.org/2000/svg", + links: "http://www.w3.org/1999/xlink", + htmls: "http://www.w3.org/1999/xhtml", + + DOM_SIZE: [ 'height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], + SVG_TYPE_D: [ 'pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix' ], + SVG_TYPE_G: [ 'svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject' ], + + PI: Math.PI, + TwoPI: Math.PI*2, + pi90: Math.PI * 0.5, + pi60: Math.PI/3, + + torad: Math.PI / 180, + todeg: 180 / Math.PI, + + clamp: ( v, min, max ) => { + + v = v < min ? min : v; + v = v > max ? max : v; + return v; + + }, + + isDivid: ( v ) => ( v*0.5 === Math.floor(v*0.5) ), + + size: { w: 240, h: 20, p: 30, s: 8 }, + + // ---------------------- + // COLOR + // ---------------------- + + defineColor: ( o, cc = T.colors ) => { + + let color = { ...cc }; + + let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize' ]; + let changeText = false; + + if( o.font ) o.fontFamily = o.font; + if( o.shadow ) o.fontShadow = o.shadow; + if( o.weight ) o.fontWeight = o.weight; + + if( o.fontColor ) o.text = o.fontColor; + if( o.color ) o.text = o.color; + + if( o.text ){ + color.text = o.text; + if( !o.fontColor && !o.color ){ + color.title = T.ColorLuma( o.text, -0.25 ); + color.titleoff = T.ColorLuma( o.text, -0.5 ); + } + color.textOver = T.ColorLuma( o.text, 0.25 ); + color.textSelect = T.ColorLuma( o.text, 0.5 ); + } + + if( o.button ){ + color.button = o.button; + color.border = T.ColorLuma( o.button, 0.1 ); + color.overoff = T.ColorLuma( o.button, 0.2 ); + } + + if( o.select ){ + color.select = o.select; + color.over = T.ColorLuma( o.select, -0.1 ); + } + + if( o.itemBg ) o.back = o.itemBg; + + if( o.back ){ + color.back = o.back; + color.backoff = T.ColorLuma( o.back, -0.1 ); + } + + if( o.fontSelect ) color.textSelect = o.fontSelect; + if( o.groupBorder ) color.gborder = o.groupBorder; + + //if( o.transparent ) o.bg = 'none' + //if( o.bg ) color.background = color.backgroundOver = o.bg + if( o.bgOver ) color.backgroundOver = o.bgOver; + + for( let m in color ){ + if(o[m]!==undefined) color[m] = o[m]; + } + + for( let m in o ){ + if( textChange.indexOf(m) !== -1 ) changeText = true; + } + + if( changeText ) T.defineText( color ); + + return color + + }, + + colors: { + + sx: 4,//4 + sy: 2,//2 + radius:2, + + showOver : 1, + //groupOver : 1, + + content:'none', + background: 'rgba(50,50,50,0.15)', + backgroundOver: 'rgba(50,50,50,0.3)', + + title : '#CCC', + titleoff : '#BBB', + text : '#DDD', + textOver : '#EEE', + textSelect : '#FFF', + + back:'rgba(0,0,0,0.2)', + backoff:'rgba(0,0,0,0.3)', + + // input and button border + border : '#4c4c4c', + borderSize : 1, + + gborder : 'none', + groups : 'none', + + + button : '#3c3c3c', + overoff : '#5c5c5c', + over : '#024699', + select : '#308AFF', + action: '#FF3300', + + //fontFamily: 'Tahoma', + fontFamily: 'Consolas, monospace', + //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", + fontWeight: 'normal', + fontShadow: 'none',//'#000', + fontSize:12, + + joyOver:'rgba(48,138,255,0.25)', + joyOut: 'rgba(100,100,100,0.5)', + joySelect: '#308AFF', + + + hide: 'rgba(0,0,0,0)', + + }, + + // style css + + css : { + + basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', + button:'display:flex; align-items:center; justify-content:center; text-align:center;', + middle:'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' + }, + + // svg path + + svgs: { + + g1:'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', + g2:'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', + + group:'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', + arrow:'M 3 8 L 8 5 3 2 3 8 Z', + + arrowDown:'M 5 8 L 8 3 2 3 5 8 Z', + arrowUp:'M 5 2 L 2 7 8 7 5 2 Z', + + solid:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', + body:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', + vehicle:'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', + articulation:'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', + character:'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', + terrain:'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', + joint:'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', + ray:'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', + collision:'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', + map:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + material:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + texture:'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', + object:'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', + none:'M 9 5 L 5 5 5 9 9 9 9 5 Z', + cursor:'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', + load:'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', + save:'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', + extern:'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z', + + }, + + rezone () { + Roots.needReZone = true; + }, + + getImput: function(){ + + return Roots.input ? true : false + + }, + + setStyle : function ( data ){ + + for ( var o in data ){ + if( T.colors[o] ) T.colors[o] = data[o]; + } + + T.setText(); + + }, + + // ---------------------- + // custom text + // ---------------------- + + defineText: function( o ){ + + T.setText( o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight ); + + }, + + setText: function( size, color, font, shadow, weight ){ + + let cc = T.colors; + + if( font === undefined ) font = cc.fontFamily; + if( size === undefined ) size = cc.fontSize; + if( shadow === undefined ) shadow = cc.fontShadow; + if( weight === undefined ) weight = cc.fontWeight; + if( color === undefined ) color = cc.text; + + if( isNaN(size) ){ if( size.search('em')===-1 ) size += 'px';} + else size += 'px'; + + + //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' + + T.css.txt = T.css.basic + T.css.middle + ' font-family:'+ font +'; font-weight:'+weight+'; font-size:'+size+'; color:'+cc.text+'; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; + if( shadow !== 'none' ) T.css.txt += ' text-shadow: 1px 1px 1px '+shadow+';'; + + T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; + T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; + + }, + + + // note + + //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container + + /*cloneColor: function () { + + let cc = Object.assign({}, T.colors ); + return cc; + + },*/ + + // intern function + + cloneCss: function () { + + //let cc = Object.assign({}, T.css ); + return { ...T.css }; + + }, + + clone: function ( o ) { + + return o.cloneNode( true ); + + }, + + setSvg: function( dom, type, value, id, id2 ){ + + if( id === -1 ) dom.setAttributeNS( null, type, value ); + else if( id2 !== undefined ) dom.childNodes[ id || 0 ].childNodes[ id2 || 0 ].setAttributeNS( null, type, value ); + else dom.childNodes[ id || 0 ].setAttributeNS( null, type, value ); + + }, + + setCss: function( dom, css ){ + + for( let r in css ){ + if( T.DOM_SIZE.indexOf(r) !== -1 ) dom.style[r] = css[r] + 'px'; + else dom.style[r] = css[r]; + } + + }, + + set: function( g, o ){ + + for( let att in o ){ + if( att === 'txt' ) g.textContent = o[ att ]; + if( att === 'link' ) g.setAttributeNS( T.links, 'xlink:href', o[ att ] ); + else g.setAttributeNS( null, att, o[ att ] ); + } + + }, + + get: function( dom, id ){ + + if( id === undefined ) return dom; // root + else if( !isNaN( id ) ) return dom.childNodes[ id ]; // first child + else if( id instanceof Array ){ + if(id.length === 2) return dom.childNodes[ id[0] ].childNodes[ id[1] ]; + if(id.length === 3) return dom.childNodes[ id[0] ].childNodes[ id[1] ].childNodes[ id[2] ]; + } + + }, + + dom : function ( type, css, obj, dom, id ) { + + type = type || 'div'; + + if( T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1 ){ // is svg element + + if( type ==='svg' ){ + + dom = document.createElementNS( T.svgns, 'svg' ); + T.set( dom, obj ); + + /* } else if ( type === 'use' ) { + + dom = document.createElementNS( T.svgns, 'use' ); + T.set( dom, obj ); + */ + } else { + // create new svg if not def + if( dom === undefined ) dom = document.createElementNS( T.svgns, 'svg' ); + T.addAttributes( dom, type, obj, id ); + + } + + } else { // is html element + + if( dom === undefined ) dom = document.createElementNS( T.htmls, type ); + else dom = dom.appendChild( document.createElementNS( T.htmls, type ) ); + + } + + if( css ) dom.style.cssText = css; + + if( id === undefined ) return dom; + else return dom.childNodes[ id || 0 ]; + + }, + + addAttributes : function( dom, type, o, id ){ + + let g = document.createElementNS( T.svgns, type ); + T.set( g, o ); + T.get( dom, id ).appendChild( g ); + if( T.SVG_TYPE_G.indexOf(type) !== -1 ) g.style.pointerEvents = 'none'; + return g; + + }, + + clear : function( dom ){ + + T.purge( dom ); + while (dom.firstChild) { + if ( dom.firstChild.firstChild ) T.clear( dom.firstChild ); + dom.removeChild( dom.firstChild ); + } + + }, + + purge : function ( dom ) { + + let a = dom.attributes, i, n; + if (a) { + i = a.length; + while(i--){ + n = a[i].name; + if (typeof dom[n] === 'function') dom[n] = null; + } + } + a = dom.childNodes; + if (a) { + i = a.length; + while(i--){ + T.purge( dom.childNodes[i] ); + } + } + + }, + + // ---------------------- + // SVG Effects function + // ---------------------- + + addSVGGlowEffect: function () { + + if ( document.getElementById( 'UILGlow') !== null ) return; + + let svgFilter = T.initUILEffects(); + + let filter = T.addAttributes( svgFilter, 'filter', { id: 'UILGlow', x: '-20%', y: '-20%', width: '140%', height: '140%' } ); + T.addAttributes( filter, 'feGaussianBlur', { in: 'SourceGraphic', stdDeviation: '3', result: 'uilBlur' } ); + let feMerge = T.addAttributes( filter, 'feMerge', { } ); + + for( let i = 0; i <= 3; i++ ) { + + T.addAttributes( feMerge, 'feMergeNode', { in: 'uilBlur' } ); + + } + + T.addAttributes( feMerge, 'feMergeNode', { in: 'SourceGraphic' } ); + + }, + + initUILEffects: function () { + + let svgFilter = document.getElementById( 'UILSVGEffects'); + + if ( svgFilter === null ) { + + svgFilter = T.dom( 'svg', undefined , { id: 'UILSVGEffects', width: '0', height: '0' } ); + document.body.appendChild( svgFilter ); + + } + + return svgFilter; + + }, + + // ---------------------- + // Color function + // ---------------------- + + ColorLuma : function ( hex, l ) { + + //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; + + if( hex === 'n' ) hex = '#000'; + + // validate hex string + hex = String(hex).replace(/[^0-9a-f]/gi, ''); + if (hex.length < 6) { + hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; + } + l = l || 0; + + // convert to decimal and change luminosity + let rgb = "#", c, i; + for (i = 0; i < 3; i++) { + c = parseInt(hex.substr(i*2,2), 16); + c = Math.round(Math.min(Math.max(0, c + (c * l)), 255)).toString(16); + rgb += ("00"+c).substr(c.length); + } + + return rgb; + + }, + + findDeepInver: function ( c ) { + + return (c[0] * 0.3 + c[1] * .59 + c[2] * .11) <= 0.6; + + }, + + lerpColor: function( c1, c2, factor ) { + let newColor = {}; + for ( let i = 0; i < 3; i++ ) { + newColor[i] = c1[ i ] + ( c2[ i ] - c1[ i ] ) * factor; + } + return newColor; + }, + + hexToHtml: function ( v ) { + v = v === undefined ? 0x000000 : v; + return "#" + ("000000" + v.toString(16)).substr(-6); + + }, + + htmlToHex: function ( v ) { + + return v.toUpperCase().replace("#", "0x"); + + }, + + u255: function (c, i) { + + return parseInt(c.substring(i, i + 2), 16) / 255; + + }, + + u16: function ( c, i ) { + + return parseInt(c.substring(i, i + 1), 16) / 15; + + }, + + unpack: function( c ){ + + if (c.length == 7) return [ T.u255(c, 1), T.u255(c, 3), T.u255(c, 5) ]; + else if (c.length == 4) return [ T.u16(c,1), T.u16(c,2), T.u16(c,3) ]; + + }, + + p255: function ( c ) { + let h = Math.round( ( c * 255 ) ).toString( 16 ); + if ( h.length < 2 ) h = '0' + h; + return h; + }, + + pack: function ( c ) { + + return '#' + T.p255( c[ 0 ] ) + T.p255( c[ 1 ] ) + T.p255( c[ 2 ] ); + + }, + + htmlRgb: function( c ){ + + return 'rgb(' + Math.round(c[0] * 255) + ','+ Math.round(c[1] * 255) + ','+ Math.round(c[2] * 255) + ')'; + + }, + + pad: function( n ){ + if(n.length == 1)n = '0' + n; + return n; + }, + + rgbToHex : function( c ){ + + let r = Math.round(c[0] * 255).toString(16); + let g = Math.round(c[1] * 255).toString(16); + let b = Math.round(c[2] * 255).toString(16); + return '#' + T.pad(r) + T.pad(g) + T.pad(b); + + // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); + + }, + + hueToRgb: function( p, q, t ){ + + if ( t < 0 ) t += 1; + if ( t > 1 ) t -= 1; + if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; + if ( t < 1 / 2 ) return q; + if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); + return p; + + }, + + rgbToHsl: function ( c ) { + + let r = c[0], g = c[1], b = c[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h = 0, s = 0, l = (min + max) / 2; + if (l > 0 && l < 1) s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); + if (delta > 0) { + if (max == r && max != g) h += (g - b) / delta; + if (max == g && max != b) h += (2 + (b - r) / delta); + if (max == b && max != r) h += (4 + (r - g) / delta); + h /= 6; + } + return [ h, s, l ]; + + }, + + hslToRgb: function ( c ) { + + let p, q, h = c[0], s = c[1], l = c[2]; + + if ( s === 0 ) return [ l, l, l ]; + else { + q = l <= 0.5 ? l * (s + 1) : l + s - ( l * s ); + p = l * 2 - q; + return [ T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333) ]; + } + + }, + + // ---------------------- + // SVG MODEL + // ---------------------- + + makeGradiant: function ( type, settings, parent, colors ) { + + T.dom( type, null, settings, parent, 0 ); + + let n = parent.childNodes[0].childNodes.length - 1, c; + + for( let i = 0; i < colors.length; i++ ){ + + c = colors[i]; + //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); + T.dom( 'stop', null, { offset:c[0]+'%', 'stop-color':c[1], 'stop-opacity':c[2] }, parent, [0,n] ); + + } + + }, + + /*makeGraph: function () { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 + //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 + //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + + //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 + //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.graph = svg; + + },*/ + + makePad: function ( model ) { + + let ww = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+ww+' '+ww, width:ww, height:ww, preserveAspectRatio:'none' } ); + let w = 200; + let d = (ww-w)*0.5, m = 20; + Tools.dom( 'rect', '', { x: d, y: d, width: w, height: w, fill:T.colors.back }, svg ); // 0 + Tools.dom( 'rect', '', { x: d+m*0.5, y: d+m*0.5, width: w - m , height: w - m, fill:T.colors.button }, svg ); // 1 + // Pointer + Tools.dom( 'line', '', { x1: d+(m*0.5), y1: ww *0.5, x2: d+(w-m*0.5), y2: ww * 0.5, stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 2 + Tools.dom( 'line', '', { x1: ww * 0.5, x2: ww * 0.5, y1: d+(m*0.5), y2: d+(w-m*0.5), stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 3 + Tools.dom( 'circle', '', { cx: ww * 0.5, cy: ww * 0.5, r:5, stroke: T.colors.text, 'stroke-width': 5, fill:'none' }, svg ); // 4 + T.pad2d = svg; + + }, + + makeKnob: function ( model ) { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'round' }, svg );//1 + T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.1)', 'stroke-width':7 , fill:'none'}, svg );//2 + T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.knob = svg; + + }, + + makeCircular: function ( model ) { + + let w = 128; + let radius = 40; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, stroke:'rgba(0,0,0,0.1)', 'stroke-width':10, fill:'none' }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':7, fill:'none', 'stroke-linecap':'butt' }, svg );//1 + T.circular = svg; + + }, + + makeJoystick: function ( model ) { + + //+' background:#f00;' + + let w = 128, ccc; + let radius = Math.floor((w-30)*0.5); + let innerRadius = Math.floor(radius*0.6); + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + if( model === 0 ){ + + + + // gradian background + ccc = [ [40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'grad', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian shadow + ccc = [ [60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradS', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian stick + let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; + let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; + + ccc = [ [30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + ccc = [ [30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn2', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // graph + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'url(#grad)' }, svg );//2 + T.dom( 'circle', '', { cx:64+5, cy:64+10, r:innerRadius+10, fill:'url(#gradS)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'url(#gradIn)' }, svg );//4 + + T.joystick_0 = svg; + + } else { + // gradian shadow + ccc = [ [69, 'rgb(0,0,0)', 0],[70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradX', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'none', stroke:'rgba(100,100,100,0.25)', 'stroke-width':'4' }, svg );//2 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius+14, fill:'url(#gradX)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'none', stroke:'rgb(100,100,100)', 'stroke-width':'4' }, svg );//4 + + T.joystick_1 = svg; + } + + + + }, + + makeColorRing: function () { + + let w = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + let s = 30;//stroke + let r =( w-s )*0.5; + let mid = w*0.5; + let n = 24, nudge = 8 / r / n * Math.PI, a1 = 0; + let am, tan, d2, a2, ar, i, j, path, ccc; + let color = []; + + for ( i = 0; i <= n; ++i) { + + d2 = i / n; + a2 = d2 * T.TwoPI; + am = (a1 + a2) * 0.5; + tan = 1 / Math.cos((a2 - a1) * 0.5); + + ar = [ + Math.sin(a1), -Math.cos(a1), + Math.sin(am) * tan, -Math.cos(am) * tan, + Math.sin(a2), -Math.cos(a2) + ]; + + color[1] = T.rgbToHex( T.hslToRgb([d2, 1, 0.5]) ); + + if (i > 0) { + + j = 6; + while(j--){ + ar[j] = ((ar[j]*r)+mid).toFixed(2); + } + + path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; + + ccc = [ [0,color[0],1], [100,color[1],1] ]; + T.makeGradiant( 'linearGradient', { id:'G'+i, x1:ar[0], y1:ar[1], x2:ar[4], y2:ar[5], gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'path', '', { d:path, 'stroke-width':s, stroke:'url(#G'+i+')', 'stroke-linecap':"butt" }, svg, 1 ); + + } + a1 = a2 - nudge; + color[0] = color[1]; + } + + let tw = 84.90; + + // black / white + ccc = [ [0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1] ]; + T.makeGradiant( 'linearGradient', { id:'GL0', x1:0, y1:mid-tw, x2:0, y2:mid+tw, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + ccc = [ [0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0] ]; + T.makeGradiant( 'linearGradient', { id:'GL1', x1:mid-49.05, y1:0, x2:mid+98, y2:0, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'g', null, { 'transform-origin': '128px 128px', 'transform':'rotate(0)' }, svg );//2 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'red' }, svg, 2 );// 2,0 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL1)','stroke-width':1, stroke:'url(#GL1)' }, svg, 2 );//2,1 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL0)','stroke-width':1, stroke:'url(#GL0)' }, svg, 2 );//2,2 + T.dom( 'path', '', { d:'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill:'none','stroke-width':2, stroke:'#000' }, svg, 2 );//2,3 + //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 + + T.dom( 'circle', '', { cx:128, cy:128, r:6, 'stroke-width':2, stroke:'#000', fill:'none' }, svg );//3 + + T.colorRing = svg; + + }, + + icon: function ( type, color, w ){ + + w = w || 40; + //color = color || '#DEDEDE'; + let viewBox = '0 0 256 256'; + //let viewBox = '0 0 '+ w +' '+ w; + let t = [""]; + switch(type){ + case 'logo': + t[1]=""; + break; + case 'donate': + t[1]=""; + break; + case 'neo': + t[1]=""; + break; + case 'phy': + t[1]=""; + break; + case 'config': + t[1]=""; + break; + case 'github': + t[1]=""; + break; + case 'save': + t[1]=""; + break; + } + t[2] = ""; + return t.join("\n"); + + }, + + logoFill_d:` + M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 + L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 + M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 + Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z + `, + + logo_github:` + M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 + 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 + 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 + 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 + 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z + `, + + logo_neo:` + M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 + 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 + 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 + 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L + 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z + `, + + logo_phy:` + M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 + Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 + `, + + logo_config:` + M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 + L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 + Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 + `, + + logo_donate:` + M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 + 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 + 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 + 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 + 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 + Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 + 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 + 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 + 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M + 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 + 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 + 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 + 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 + 200.9 187.5 200.9 187.5 195.35 Z + `, + + }; + + T.setText(); + + const Tools = T; + + ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile + + + class Files { + + //----------------------------- + // FILE TYPE + //----------------------------- + + static autoTypes( type ) { + + let t = []; + + switch( type ){ + case 'svg': + t = [ { accept: { 'image/svg+xml': '.svg'} }, ]; + break; + case 'wav': + t = [ { accept: { 'audio/wav': '.wav'} }, ]; + break; + case 'mp3': + t = [ { accept: { 'audio/mpeg': '.mp3'} }, ]; + break; + case 'mp4': + t = [ { accept: { 'video/mp4': '.mp4'} }, ]; + break; + case 'bin': case 'hex': + t = [ { description: 'Binary Files', accept: { 'application/octet-stream': ['.bin', '.hex'] } }, ]; + break; + case 'text': + t = [ { description: 'Text Files', accept: { 'text/plain': ['.txt', '.text'], 'text/html': ['.html', '.htm'] } }, ]; + break; + case 'json': + t = [ { description: 'JSON Files', accept: { 'application/json': ['.json'] } }, ];//text/plain + break; + case 'js': + t = [ { description: 'JavaScript Files', accept: { 'text/javascript': ['.js'] } }, ]; + break; + case 'image': + t = [ { description: 'Images', accept: { 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] } }, ]; + break; + case 'icon': + t = [ { description: 'Icons', accept: { 'image/x-ico': ['.ico'] } }, ]; + break; + case 'lut': + t = [ { description: 'Lut', accept: { 'text/plain': ['.cube', '.3dl'] } }, ]; + break; + + } + + return t + + } + + + //----------------------------- + // LOAD + //----------------------------- + + static async load( o = {} ) { + + if (typeof window.showOpenFilePicker !== 'function') { + window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; + } + + try { + + let type = o.type || ''; + + const options = { + excludeAcceptAllOption: type ? true : false, + multiple: false, + //startIn:'./assets' + }; + + options.types = Files.autoTypes( type ); + + // create a new handle + const handle = await window.showOpenFilePicker( options ); + const file = await handle[0].getFile(); + //let content = await file.text() + + if( !file ) return null + + let fname = file.name; + let ftype = fname.substring( fname.lastIndexOf('.')+1, fname.length ); + + const dataUrl = [ 'png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3' ]; + const dataBuf = [ 'sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf' ]; + const reader = new FileReader(); + + if( dataUrl.indexOf( ftype ) !== -1 ) reader.readAsDataURL( file ); + else if( dataBuf.indexOf( ftype ) !== -1 ) reader.readAsArrayBuffer( file ); + else reader.readAsText( file ); + + reader.onload = function(e) { + + let content = e.target.result; + + switch(type){ + case 'image': + let img = new Image; + img.onload = function() { + if( o.callback ) o.callback( img, fname, ftype ); + }; + img.src = content; + break; + case 'json': + if( o.callback ) o.callback( JSON.parse( content ), fname, ftype ); + break; + default: + if( o.callback ) o.callback( content, fname, ftype ); + break; + } + + }; + + } catch(e) { + + console.log(e); + if( o.always && o.callback ) o.callback( null ); + + } + + } + + static showOpenFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const input = document.createElement("input"); + input.type = "file"; + input.multiple = options.multiple; + input.accept = options.types + .map((type) => type.accept) + .flatMap((inst) => Object.keys(inst).flatMap((key) => inst[key])) + .join(","); + + input.addEventListener("change", () => { + resolve( + [...input.files].map((file) => { + return { + getFile: async () => + new Promise((resolve) => { + resolve(file); + }), + }; + }) + ); + }); + + input.click(); + }) + } + + + //----------------------------- + // SAVE + //----------------------------- + + static async save( o = {} ) { + + let usePoly = false; + + if (typeof window.showSaveFilePicker !== 'function') { + window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; + usePoly = true; + } + + try { + + let type = o.type || ''; + + const options = { + suggestedName: o.name || 'hello', + data: o.data || '' + }; + + options.types = Files.autoTypes( type ); + options.finalType = Object.keys( options.types[0].accept )[0]; + options.suggestedName += options.types[0].accept[options.finalType][0]; + + + // create a new handle + const handle = await window.showSaveFilePicker( options ); + + if( usePoly ) return + + // create a FileSystemWritableFileStream to write to + const file = await handle.createWritable(); + + let blob = new Blob([ options.data ], { type: options.finalType }); + + // write our file + await file.write(blob); + + // close the file and write the contents to disk. + await file.close(); + + } catch(e) { + + console.log(e); + + } + + } + + static showSaveFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const a = document.createElement("a"); + a.download = options.suggestedName || "my-file.txt"; + let blob = new Blob([ options.data ], { type:options.finalType }); + a.href = URL.createObjectURL( blob ); + + a.addEventListener("click", () => { + resolve( + setTimeout( () => URL.revokeObjectURL(a.href), 1000 ) + ); + }); + a.click(); + }) + } + + + //----------------------------- + // FOLDER not possible in poly + //----------------------------- + + static async getFolder() { + + try { + + const handle = await window.showDirectoryPicker(); + const files = []; + for await (const entry of handle.values()) { + const file = await entry.getFile(); + files.push(file); + } + + console.log(files); + return files; + + } catch(e) { + + console.log(e); + + } + + } + + + + + + + + + + + } + + class V2 { + + constructor( x = 0, y = 0 ) { + + this.x = x; + this.y = y; + + } + + set ( x, y ) { + + this.x = x; + this.y = y; + return this; + + } + + divide ( v ) { + + this.x /= v.x; + this.y /= v.y; + return this; + + } + + multiply ( v ) { + + this.x *= v.x; + this.y *= v.y; + return this; + + } + + multiplyScalar ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + return this; + + } + + divideScalar ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + } + + length () { + + return Math.sqrt( this.x * this.x + this.y * this.y ); + + } + + angle () { + + // computes the angle in radians with respect to the positive x-axis + + var angle = Math.atan2( this.y, this.x ); + + if ( angle < 0 ) angle += 2 * Math.PI; + + return angle; + + } + + addScalar ( s ) { + + this.x += s; + this.y += s; + return this; + + } + + negate () { + + this.x *= -1; + this.y *= -1; + return this; + + } + + neg () { + + this.x = -1; + this.y = -1; + return this; + + } + + isZero () { + + return ( this.x === 0 && this.y === 0 ); + + } + + copy ( v ) { + + this.x = v.x; + this.y = v.y; + + return this; + + } + + equals ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) ); + + } + + nearEquals ( v, n ) { + + return ( ( v.x.toFixed(n) === this.x.toFixed(n) ) && ( v.y.toFixed(n) === this.y.toFixed(n) ) ); + + } + + lerp ( v, alpha ) { + + if( v === null ){ + this.x -= this.x * alpha; + this.y -= this.y * alpha; + } else { + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + } + + return this; + + } + + } + + /** + * @author lth / https://github.com/lo-th + */ + + class Proto { + constructor(o = {}) { + // disable mouse controle + this.lock = o.lock || false; + + // for button + this.neverlock = false; + + // only simple space + this.isSpace = o.isSpace || false; + + // if is on gui or group + this.main = o.main || null; + this.isUI = o.isUI || false; + this.group = o.group || null; + + this.isListen = false; + + this.top = 0; + this.ytop = 0; + + this.dx = o.dx || 0; + + this.isSelectable = o.selectable !== undefined ? o.selectable : false; + this.unselectable = + o.unselect !== undefined ? o.unselect : this.isSelectable; + + this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' + + this.css = this.main ? this.main.css : Tools.css; + + this.colors = Tools.defineColor( + o, + this.main + ? this.group + ? this.group.colors + : this.main.colors + : Tools.colors + ); + + this.overEffect = this.colors.showOver; + + this.svgs = Tools.svgs; + + this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; + this.local = new V2().neg(); + + this.isCanvasOnly = false; + this.isSelect = false; + + // percent of title + this.p = o.p !== undefined ? o.p : Tools.size.p; + + this.w = this.isUI ? this.main.size.w : Tools.size.w; + if (o.w !== undefined) this.w = o.w; + + this.h = this.isUI ? this.main.size.h : Tools.size.h; + if (o.h !== undefined) this.h = o.h; + if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; + else this.lock = true; + + // decale for canvas only + this.fw = o.fw || 0; + + this.autoWidth = o.auto || true; // auto width or flex + this.isOpen = false; //false// open statu + + // radius for toolbox + this.radius = o.radius || this.colors.radius; + + this.transition = o.transition || Tools.transition; + + // only for number + this.isNumber = false; + this.noNeg = o.noNeg || false; + this.allEqual = o.allEqual || false; + + // only most simple + this.mono = false; + + // stop listening for edit slide text + this.isEdit = false; + + // no title + this.simple = o.simple || false; + if (this.simple) this.sa = 0; + + // define obj size + this.setSize(this.w); + + // title size + if (o.sa !== undefined) this.sa = o.sa; + if (o.sb !== undefined) this.sb = o.sb; + if (this.simple) this.sb = this.w - this.sa; + + // last number size for slide + this.sc = o.sc === undefined ? 47 : o.sc; + + // for listening object + this.objectLink = null; + this.isSend = false; + this.objectKey = null; + + this.txt = o.name || ""; + this.name = o.rename || this.txt; + this.target = o.target || null; + + // callback + this.callback = o.callback === undefined ? null : o.callback; + this.endCallback = null; + this.openCallback = o.openCallback === undefined ? null : o.openCallback; + this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; + + // if no callback take one from group or gui + if (this.callback === null && this.isUI && this.main.callback !== null) { + this.callback = this.group ? this.group.callback : this.main.callback; + } + + // elements + this.c = []; + + // style + this.s = []; + + this.useFlex = this.isUI ? this.main.useFlex : false; + let flexible = this.useFlex + ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" + : "float:left;"; + + this.c[0] = Tools.dom( + "div", + this.css.basic + flexible + "position:relative; height:20px;" + ); + + this.s[0] = this.c[0].style; + + // bottom margin + this.margin = this.colors.sy; + this.mtop = 0; + let marginDiv = Tools.isDivid(this.margin); + + if (this.isUI && this.margin) { + this.s[0].boxSizing = "content-box"; + if (marginDiv) { + this.mtop = this.margin * 0.5; + //this.s[0].borderTop = '${this.mtop}px solid transparent' + //console.log(`${this.mtop}px solid transparent`) + this.s[0].borderTop = this.mtop + "px solid transparent"; + this.s[0].borderBottom = this.mtop + "px solid transparent"; + } else { + this.s[0].borderBottom = this.margin + "px solid transparent"; + } + } + + // with title + if (!this.simple) { + this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); + this.s[1] = this.c[1].style; + this.c[1].textContent = this.name; + this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; + } + + if (o.pos) { + this.s[0].position = "absolute"; + for (let p in o.pos) { + this.s[0][p] = o.pos[p]; + } + this.mono = true; + } + + if (o.css) this.s[0].cssText = o.css; + } + + // ---------------------- + // make the node + // ---------------------- + + init() { + this.ytop = this.top + this.mtop; + + this.zone.h = this.h + this.margin; + this.zone.w = this.w; + + let s = this.s; // style cache + let c = this.c; // div cach + + s[0].height = this.h + "px"; + + if (this.isUI) s[0].background = this.colors.background; + + if (!this.autoWidth && this.useFlex) { + s[0].flex = "1 0 auto"; + s[0].minWidth = this.minw + "px"; + s[0].textAlign = "center"; + } else { + if (this.isUI) s[0].width = "100%"; + } + + //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; + if (c[1] !== undefined && this.autoWidth) { + s[1] = c[1].style; + s[1].top = 1 + "px"; + s[1].height = this.h - 2 + "px"; + } + + let frag = Tools.frag; + + for (let i = 1, lng = c.length; i !== lng; i++) { + if (c[i] !== undefined) { + frag.appendChild(c[i]); + s[i] = c[i].style; + } + } + + let pp = + this.target !== null + ? this.target + : this.isUI + ? this.main.inner + : document.body; + + if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); + else pp.appendChild(c[0]); + + c[0].appendChild(frag); + + this.rSize(); + + // ! solo proto + if (!this.isUI) { + this.c[0].style.pointerEvents = "auto"; + Roots.add(this); + } + } + + addTransition() { + if (this.baseH && this.transition && this.isUI) { + this.c[0].style.transition = "height " + this.transition + "s ease-out"; + } + } + + // from Tools + + dom(type, css, obj, dom, id) { + return Tools.dom(type, css, obj, dom, id); + } + + setSvg(dom, type, value, id, id2) { + Tools.setSvg(dom, type, value, id, id2); + } + + setCss(dom, css) { + Tools.setCss(dom, css); + } + + clamp(value, min, max) { + return Tools.clamp(value, min, max); + } + + getColorRing() { + if (!Tools.colorRing) Tools.makeColorRing(); + return Tools.clone(Tools.colorRing); + } + + getJoystick(model) { + if (!Tools["joystick_" + model]) Tools.makeJoystick(model); + return Tools.clone(Tools["joystick_" + model]); + } + + getCircular(model) { + if (!Tools.circular) Tools.makeCircular(model); + return Tools.clone(Tools.circular); + } + + getKnob(model) { + if (!Tools.knob) Tools.makeKnob(model); + return Tools.clone(Tools.knob); + } + + getPad2d(model) { + if (!Tools.pad2d) Tools.makePad(model); + return Tools.clone(Tools.pad2d); + } + + // from Roots + + cursor(name) { + Roots.cursor(name); + } + + ///////// + + update() {} + + reset() {} + + ///////// + + content() { + return this.c[0]; + } + + getDom() { + return this.c[0]; + } + + uiout() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.background; + } + + uiover() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.backgroundOver; + } + + rename(s) { + if (this.c[1] !== undefined) this.c[1].textContent = s; + } + + listen() { + this.isListen = Roots.addListen(this); + return this; + } + + listening() { + // modified by Fedemarino + if (this.objectLink === null) return; + if (this.isSend) return; + if (this.isEdit) return; + // check if value has changed + let hasChanged = this.setValue(this.objectLink[this.objectKey]); + return hasChanged; + } + + setValue(v) { + const old = this.value; + if (this.isNumber) this.value = this.numValue(v); + //else if( v instanceof Array && v.length === 1 ) v = v[0]; + else this.value = v; + this.update(); + let hasChanged = false; + if (old !== this.value) { + hasChanged = true; + } + + return hasChanged; + } + + // ---------------------- + // update every change + // ---------------------- + + onChange(f) { + if (this.isSpace) return; + this.callback = f || null; + return this; + } + + // ---------------------- + // update only on end + // ---------------------- + + onFinishChange(f) { + if (this.isSpace) return; + this.callback = null; + this.endCallback = f; + return this; + } + + // ---------------------- + // event on open close + // ---------------------- + + onOpen(f) { + this.openCallback = f; + return this; + } + + onClose(f) { + this.closeCallback = f; + return this; + } + + // ---------------------- + // send back value + // ---------------------- + + send(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + this.isSend = true; + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + if (this.callback) this.callback(v, this.objectKey); + this.isSend = false; + } + + sendEnd(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + if (this.endCallback) this.endCallback(v); + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + } + + // ---------------------- + // clear node + // ---------------------- + + dispose() { + if (this.isListen) Roots.removeListen(this); + + Tools.clear(this.c[0]); + + if (this.target !== null) { + if (this.group !== null) this.group.clearOne(this); + else this.target.removeChild(this.c[0]); + } else { + if (this.isUI) this.main.clearOne(this); + else document.body.removeChild(this.c[0]); + } + + if (!this.isUI) Roots.remove(this); + + this.c = null; + this.s = null; + this.callback = null; + this.target = null; + this.isListen = false; + } + + clear() {} + + // ---------------------- + // change size + // ---------------------- + + getWidth() { + let nw = Roots.getWidth(this); + if (nw) this.w = nw; + } + + setSize(sx) { + if (!this.autoWidth) return; + + this.w = sx; + + if (this.simple) { + this.sb = this.w - this.sa; + } else { + let pp = this.w * (this.p / 100); + //this.sa = Math.floor( pp + 10 ) + //this.sb = Math.floor( this.w - pp - 20 ) + this.sa = Math.floor(pp + 8); + this.sb = Math.floor(this.w - pp - 16); + } + } + + rSize() { + if (!this.autoWidth) return; + if (!this.isUI) this.s[0].width = this.w + "px"; + if (!this.simple) this.s[1].width = this.sa + "px"; + } + + // ---------------------- + // for numeric value + // ---------------------- + + setTypeNumber(o) { + this.isNumber = true; + + this.value = 0; + if (o.value !== undefined) { + if (typeof o.value === "string") this.value = o.value * 1; + else this.value = o.value; + } + + this.min = o.min === undefined ? -Infinity : o.min; + this.max = o.max === undefined ? Infinity : o.max; + this.precision = o.precision === undefined ? 2 : o.precision; + + let s; + + switch (this.precision) { + case 0: + s = 1; + break; + case 1: + s = 0.1; + break; + case 2: + s = 0.01; + break; + case 3: + s = 0.001; + break; + case 4: + s = 0.0001; + break; + case 5: + s = 0.00001; + break; + case 6: + s = 0.000001; + break; + } + + this.step = o.step === undefined ? s : o.step; + this.range = this.max - this.min; + this.value = this.numValue(this.value); + } + + numValue(n) { + if (this.noNeg) n = Math.abs(n); + return ( + Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 + ); + } + + // ---------------------- + // EVENTS DEFAULT + // ---------------------- + + handleEvent(e) { + if (this.lock) return; + if (this.neverlock) Roots.lock = false; + if (!this[e.type]) + return console.error(e.type, "this type of event no existe !"); + + // TODO !!!! + + //if( this.marginDiv ) z.d -= this.margin * 0.5 + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 + + return this[e.type](e); + } + + wheel(e) { + return false; + } + mousedown(e) { + return false; + } + mousemove(e) { + return false; + } + mouseup(e) { + return false; + } + keydown(e) { + return false; + } + keyup(e) { + return false; + } + + // ---------------------- + // object referency + // ---------------------- + + setReferency(obj, key) { + this.objectLink = obj; + this.objectKey = key; + } + + display(v = false) { + this.s[0].visibility = v ? "visible" : "hidden"; + } + + // ---------------------- + // resize height + // ---------------------- + + open() { + if (this.isOpen) return; + this.isOpen = true; + Roots.needResize = true; + if (this.openCallback) this.openCallback(); + } + + close() { + if (!this.isOpen) return; + this.isOpen = false; + Roots.needResize = true; + if (this.closeCallback) this.closeCallback(); + } + + needZone() { + Roots.needReZone = true; + } + + rezone() { + Roots.needReZone = true; + } + + // ---------------------- + // INPUT + // ---------------------- + + select() {} + + unselect() {} + + setInput(Input) { + Roots.setInput(Input, this); + } + + upInput(x, down) { + return Roots.upInput(x, down); + } + + // ---------------------- + // special item + // ---------------------- + + selected(b) { + this.isSelect = b || false; + } + } + + class Bool extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || false; + this.model = o.mode !== undefined ? o.mode : 0; + + this.onName = o.rename || this.txt; + if( o.onName ) o.onname = o.onName; + if( o.onname ) this.onName = o.onname; + + this.inh = o.inh || Math.floor( this.h*0.8 ); + this.inw = o.inw || 36; + + let cc = this.colors; + + if( this.model === 0 ){ + let t = Math.floor(this.h*0.5)-((this.inh-2)*0.5); + this.c[2] = this.dom( 'div', this.css.basic + 'background:'+ cc.inputBg +'; height:'+(this.inh-2)+'px; width:'+this.inw+'px; top:'+t+'px; border-radius:10px; border:2px solid '+ cc.back ); + this.c[3] = this.dom( 'div', this.css.basic + 'height:'+(this.inh-6)+'px; width:16px; top:'+(t+2)+'px; border-radius:10px; background:'+ cc.button+';' ); + } else { + this.p = 0; + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + } + + this.stat = -1; + + this.init(); + this.update(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + this.value = !this.value; + this.update( true ); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + this.cursor('pointer'); + return this.mode( true ) + + } + + reset () { + + this.cursor(); + return this.mode() + + } + + // ---------------------- + // MODE + // ---------------------- + + mode ( over ) { + + let change = false; + let cc = this.colors, s = this.s, n, v = this.value; + + if( over ) n = v ? 4 : 3; + else n = v ? 2 : 1; + + if( this.stat !== n ){ + + this.stat = n; + + if( this.model !== 0 ){ + + switch( n ){ + + case 1: s[2].color = cc.text; s[2].background = cc.button; break; + case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; + case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; + case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; + + } + + this.c[2].innerHTML = v ? this.onName : this.name; + + } else { + + switch( n ){ + + case 1: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.button; break;// off out + case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break;// on over + case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break;// off over + case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break;// on out + + } + + s[3].marginLeft = v ? '17px' : '2px'; + this.c[1].textContent = v ? this.onName : this.name; + + } + + change = true; + + } + + return change + + } + + // ---------------------- + + update ( up ) { + + this.mode(); + if( up ) this.send(); + + } + + rSize () { + + super.rSize(); + + let s = this.s; + let w = (this.w - 10 ) - this.inw; + if( this.model === 0 ){ + s[2].left = w + 'px'; + s[3].left = w + 'px'; + } else { + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + } + + } + + } + + class Button extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = ''; + if( o.value !== undefined ) this.value = o.value; + + this.values = o.value || this.txt; + if( o.values ) this.values = o.values; + + if( !o.values && !o.value ) this.txt = ''; + + this.onName = o.onName || null; + + this.on = false; + + // force button width + this.bw = o.forceWidth || 0; + if(o.bw) this.bw = o.bw; + this.space = o.space || 3; + + if( typeof this.values === 'string' ) this.values = [ this.values ]; + + this.isDown = false; + this.neverlock = true; + this.res = 0; + + this.lng = this.values.length; + this.tmp = []; + this.stat = []; + + let sel, cc = this.colors; + + for( let i = 0; i < this.lng; i++ ){ + + sel = false; + if( this.values[i] === this.value && this.isSelectable ) sel = true; + + this.c[i+2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[i+2].style.background = sel ? cc.select : cc.button; + this.c[i+2].style.color = sel ? cc.textSelect : cc.text; + this.c[i+2].innerHTML = this.values[i]; + this.stat[i] = sel ? 3:1; + + } + + + if( this.txt==='' ) this.p = 0; + + if( (!o.value && !o.values) || this.p === 0 ){ + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + } + + + this.init(); + + } + + onOff() { + + this.on = !this.on; + this.label( this.on ? this.onName : this.value ); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1 + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.text; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + case 1: // down + + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'stroke', cc.backoff, 0); + color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.textOver; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + } + + this.cmode = mode; + return true; + + } + + reset () { + + this.isDown = false; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'circular'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0); + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1); + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + //console.log('over') + + let off = this.offset; + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = off.angle() - this.pi90; + this.r = (((this.r%this.twoPi)+this.twoPi)%this.twoPi); + + if( this.oldr !== null ){ + + let dif = this.r - this.oldr; + this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; + + if( dif > 6 ) this.r = 0; + if( dif < -6 ) this.r = this.twoPi; + + } + + let steps = 1 / this.twoPi; + let value = this.r * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = ~~ ( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'circular' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + // ---------------------- + + makePath () { + + let r = 40; + let d = 24; + let a = this.percent * this.twoPi - 0.001; + let x2 = (r + r * Math.sin(a)) + d; + let y2 = (r - r * Math.cos(a)) + d; + let big = a > Math.PI ? 1 : 0; + return "M " + (r+d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = ( this.value - this.min ) / this.range; + + this.setSvg( this.c[3], 'd', this.makePath(), 1 ); + + if ( this.model > 0 ) { + + let cc = this.colors; + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 1 ); + + } + + if( up ) this.send(); + + } + + } + + class Color extends Proto { + + constructor( o = {} ) { + + super( o ); + + //this.autoHeight = true; + + this.ctype = o.ctype || 'hex'; + + this.wfixe = 256; + + this.cw = this.sb > 256 ? 256 : this.sb; + if(o.cw != undefined ) this.cw = o.cw; + + + + // color up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + this.baseH = this.h; + + this.offset = new V2(); + this.decal = new V2(); + this.pp = new V2(); + + let cc = this.colors; + + // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) + + this.c[2] = this.dom( 'div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};` ); + //this.s[2] = this.c[2].style; + + //this.s[2].textShadow = 'none' + + /*if( this.up ){ + this.s[2].top = 'auto'; + this.s[2].bottom = '2px'; + }*/ + + //this.c[0].style.textAlign = 'center'; + this.c[0].style.display = 'block'; + + this.c[3] = this.getColorRing(); + this.c[3].style.visibility = 'hidden'; + + this.hsl = null; + this.value = '#ffffff'; + if( o.value !== undefined ){ + if( o.value instanceof Array ) this.value = Tools.rgbToHex( o.value ); + else if(!isNaN(o.value)) this.value = Tools.hexToHtml( o.value ); + else this.value = o.value; + } + + this.bcolor = null; + this.isDown = false; + this.fistDown = false; + + this.notext = o.notext || false; + + this.tr = 98; + this.tsl = Math.sqrt(3) * this.tr; + + this.hue = 0; + this.d = 256; + + this.init(); + + this.setColor( this.value ); + + if( o.open !== undefined ) this.open(); + + } + + testZone ( mx, my ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + if( this.up && this.isOpen ){ + + if( l.y > this.wfixe ) return 'title' + else return 'color' + + } else { + + if( l.y < this.baseH+2 ) return 'title' + else if( this.isOpen ) return 'color' + + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.d = 256; + + } + + mousedown ( e ) { + + + let name = this.testZone( e.clientX, e.clientY ); + + + //if( !name ) return; + if(name === 'title'){ + if( !this.isOpen ) this.open(); + else this.close(); + return true; + } + + + if( name === 'color' ){ + + this.isDown = true; + this.fistDown = true; + this.mousemove( e ); + } + } + + mousemove ( e ) { + + let name = this.testZone( e.clientX, e.clientY ); + + let off, d, hue, sat, lum, rad, x, y, rr, T = Tools; + + if( name === 'title' ) this.cursor('pointer'); + + if( name === 'color' ){ + + off = this.offset; + off.x = e.clientX - ( this.zone.x + this.decal.x + this.mid ); + off.y = e.clientY - ( this.zone.y + this.decal.y + this.mid ) - this.ytop; + d = off.length() * this.ratio; + rr = off.angle(); + if(rr < 0) rr += 2 * T.PI; + + + if ( d < 128 ) this.cursor('crosshair'); + else if( !this.isDown ) this.cursor(); + + if( this.isDown ){ + + if( this.fistDown ){ + this.d = d; + this.fistDown = false; + } + + if ( this.d < 128 ) { + + if ( this.d > this.tr ) { // outside hue + + hue = ( rr + T.pi90 ) / T.TwoPI; + this.hue = (hue + 1) % 1; + this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); + + } else { // triangle + + x = off.x * this.ratio; + y = off.y * this.ratio; + + let rr = (this.hue * T.TwoPI) + T.PI; + if(rr < 0) rr += 2 * T.PI; + + rad = Math.atan2(-y, x); + if(rad < 0) rad += 2 * T.PI; + + let rad0 = ( rad + T.pi90 + T.TwoPI + rr ) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60), + a = 0.5 * this.tr, + b = Math.tan(rad1) * a, + r = Math.sqrt(x*x + y*y), + maxR = Math.sqrt(a*a + b*b); + + if( r > maxR ) { + let dx = Math.tan(rad1) * r; + let rad2 = Math.atan(dx / maxR); + if(rad2 > T.pi60) rad2 = T.pi60; + else if( rad2 < -T.pi60 ) rad2 = -T.pi60; + + rad += rad2 - rad1; + + rad0 = (rad + T.pi90 + T.TwoPI + rr) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60); + b = Math.tan(rad1) * a; + r = maxR = Math.sqrt(a*a + b*b); + } + + lum = ((Math.sin(rad0) * r) / this.tsl) + 0.5; + + let w = 1 - (Math.abs(lum - 0.5) * 2); + sat = (((Math.cos(rad0) * r) + (this.tr / 2)) / (1.5 * this.tr)) / w; + sat = T.clamp( sat, 0, 1 ); + + this.setHSL([this.hsl[0], sat, lum]); + + } + } + } + } + + } + + // ---------------------- + + setHeight () { + + this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; + this.s[0].height = this.h + 'px'; + this.zone.h = this.h; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open () { + + super.open(); + + this.setHeight(); + + if( this.up ) this.zone.y -= this.wfixe + 5; + + let t = this.h - this.baseH; + + this.s[3].visibility = 'visible'; + //this.s[3].display = 'block'; + this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.wfixe + 5; + + let t = this.h - this.baseH; + + this.setHeight(); + + this.s[3].visibility = 'hidden'; + //this.s[3].display = 'none'; + this.parentHeight( -t ); + + } + + update ( up ) { + + let cc = Tools.rgbToHex( Tools.hslToRgb([ this.hsl[0], 1, 0.5 ]) ); + + this.moveMarkers(); + + this.value = this.bcolor; + + this.setSvg( this.c[3], 'fill', cc, 2, 0 ); + + this.s[2].background = this.bcolor; + if(!this.notext) this.c[2].textContent = Tools.htmlToHex( this.bcolor ); + + this.invert = Tools.findDeepInver( this.rgb ); + this.s[2].color = this.invert ? '#fff' : '#000'; + + if(!up) return; + + if( this.ctype === 'array' ) this.send( this.rgb ); + if( this.ctype === 'rgb' ) this.send( Tools.htmlRgb( this.rgb ) ); + if( this.ctype === 'hex' ) this.send( Tools.htmlToHex( this.value ) ); + if( this.ctype === 'html' ) this.send(); + + } + + setValue ( v ){ + + if( v instanceof Array ) this.value = Tools.rgbToHex( v ); + else if(!isNaN(v)) this.value = Tools.hexToHtml( v ); + else this.value = v; + + this.setColor( this.value ); + this.update(); + + } + + setColor ( color ) { + + let unpack = Tools.unpack(color); + if (this.bcolor !== color && unpack) { + + this.bcolor = color; + this.rgb = unpack; + this.hsl = Tools.rgbToHsl( this.rgb ); + + this.hue = this.hsl[0]; + + this.update(); + } + return this; + + } + + setHSL ( hsl ) { + + this.hsl = hsl; + this.rgb = Tools.hslToRgb( hsl ); + this.bcolor = Tools.rgbToHex( this.rgb ); + this.update( true ); + return this; + + } + + moveMarkers () { + + let p = this.pp; + let T = Tools; + + this.invert ? '#fff' : '#000'; + let a = this.hsl[0] * T.TwoPI; + let third = (2/3) * T.PI; + let r = this.tr; + let h = this.hsl[0]; + let s = this.hsl[1]; + let l = this.hsl[2]; + + let angle = ( a - T.pi90 ) * T.todeg; + + h = - a + T.pi90; + + let hx = Math.cos(h) * r; + let hy = -Math.sin(h) * r; + let sx = Math.cos(h - third) * r; + let sy = -Math.sin(h - third) * r; + let vx = Math.cos(h + third) * r; + let vy = -Math.sin(h + third) * r; + let mx = (sx + vx) / 2, my = (sy + vy) / 2; + a = (1 - 2 * Math.abs(l - .5)) * s; + let x = sx + (vx - sx) * l + (hx - mx) * a; + let y = sy + (vy - sy) * l + (hy - my) * a; + + p.set( x, y ).addScalar(128); + + //let ff = (1-l)*255; + // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); + + this.setSvg( this.c[3], 'transform', 'rotate('+angle+' )', 2 ); + + this.setSvg( this.c[3], 'cx', p.x, 3 ); + this.setSvg( this.c[3], 'cy', p.y, 3 ); + + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3 ); + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3 ); + this.setSvg( this.c[3], 'fill',this.bcolor, 3 ); + + } + + rSize () { + + //Proto.prototype.rSize.call( this ); + super.rSize(); + + let s = this.s; + + s[2].width = this.sb + 'px'; + s[2].left = this.sa + 'px'; + + //console.log(this.sb) + + this.cw = this.sb > 256 ? 256 : this.sb; + + + + this.rSizeColor( this.cw ); + + this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + //s[3].left = this.decal.x + 'px'; + + } + + rSizeColor ( w ) { + + + if( w === this.wfixe ) return; + + + + this.wfixe = w; + + + + let s = this.s; + + //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; + this.mid = Math.floor( this.wfixe * 0.5 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 '+ this.wfixe + ' '+ this.wfixe ); + s[3].width = this.wfixe + 'px'; + s[3].height = this.wfixe + 'px'; + //s[3].left = this.decal.x + 'px'; + s[3].top = this.decal.y + 'px'; + + this.ratio = 256 / this.wfixe; + this.square = 1 / (60*(this.wfixe/256)); + this.setHeight(); + + } + + + } + + class Fps extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.round = Math.round; + + //this.autoHeight = true; + + this.baseH = this.h; + this.hplus = o.hplus || 50; + + this.res = o.res || 40; + this.l = 1; + + this.precision = o.precision || 0; + + + this.custom = o.custom || false; + this.names = o.names || ['FPS', 'MS']; + let cc = o.cc || ['220,220,220', '255,255,0']; + + // this.divid = [ 100, 100, 100 ]; + // this.multy = [ 30, 30, 30 ]; + + this.adding = o.adding || false; + + this.range = o.range || [ 165, 100, 100 ]; + + this.alpha = o.alpha || 0.25; + + this.values = []; + this.points = []; + this.textDisplay = []; + + if(!this.custom){ + + this.now = Roots.getTime(); + this.startTime = 0;//this.now() + this.prevTime = 0;//this.startTime; + this.frames = 0; + + this.ms = 0; + this.fps = 0; + this.mem = 0; + this.mm = 0; + + this.isMem = ( self.performance && self.performance.memory ) ? true : false; + + // this.divid = [ 100, 200, 1 ]; + // this.multy = [ 30, 30, 30 ]; + + if( this.isMem ){ + + this.names.push('MEM'); + cc.push('0,255,255'); + + } + + this.txt = o.name || 'Fps'; + + } + + + let fltop = Math.floor(this.h*0.5)-3; + const ccc = this.colors; + + this.c[1].textContent = this.txt; + //this.c[1].innerHTML = ' ' + this.txt + this.c[0].style.cursor = 'pointer'; + this.c[0].style.pointerEvents = 'auto'; + + let panelCss = 'display:none; left:10px; top:'+ this.h + 'px; height:'+(this.hplus - 8)+'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid '+ ccc.border +';'; + + if( this.radius !== 0 ) panelCss += 'border-radius:' + this.radius+'px;'; + + this.c[2] = this.dom( 'path', this.css.basic + panelCss , {} ); + + this.c[2].setAttribute('viewBox', '0 0 '+this.res+' 50' ); + this.c[2].setAttribute('height', '100%' ); + this.c[2].setAttribute('width', '100%' ); + this.c[2].setAttribute('preserveAspectRatio', 'none' ); + + + //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + + // arrow + this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:ccc.text, stroke:'none'}); + //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); + + // result test + this.c[4] = this.dom( 'div', this.css.txt + 'position:absolute; left:10px; top:'+(this.h+2) +'px; display:none; width:100%; text-align:center;' ); + + // bottom line + if( o.bottomLine ) this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); + + this.isShow = false; + + + + let s = this.s; + + //s[1].marginLeft = '10px'; + s[1].lineHeight = this.h-4; + s[1].color = ccc.text; + //s[1].paddingLeft = '18px'; + //s[1].fontWeight = 'bold'; + + if( this.radius !== 0 ) s[0].borderRadius = this.radius+'px'; + if( this.colors.gborder!=='none') s[0].border = '1px solid ' + ccc.gborder; + + + + + let j = 0; + + for( j=0; j " + this.names[j] +" "); + + } + + j = this.names.length; + while(j--){ + this.dom( 'path', null, { fill:'rgba('+cc[j]+','+this.alpha+')', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + } + + + this.init(); + + //if( this.isShow ) this.show(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + if( this.isShow ) this.close(); + else this.open(); + + } + + // ---------------------- + + /*mode: function ( mode ) { + + let s = this.s; + + switch(mode){ + case 0: // base + s[1].color = this.colors.text; + //s[1].background = 'none'; + break; + case 1: // over + s[1].color = '#FFF'; + //s[1].background = UIL.SELECT; + break; + case 2: // edit / down + s[1].color = this.colors.text; + //s[1].background = UIL.SELECTDOWN; + break; + + } + },*/ + + tick ( v ) { + + this.values = v; + if( !this.isShow ) return; + this.drawGraph(); + this.upText(); + + } + + makePath ( point ) { + + let p = ''; + p += 'M ' + (-1) + ' ' + 50; + for ( let i = 0; i < this.res + 1; i ++ ) { p += ' L ' + i + ' ' + point[i]; } + p += ' L ' + (this.res + 1) + ' ' + 50; + return p; + + } + + upText ( val ) { + + let v = val || this.values, t = ''; + for( let j=0, lng =this.names.length; j'; + this.c[4].innerHTML = t; + + } + + drawGraph () { + + let svg = this.c[2]; + let i = this.names.length, v, old = 0, n = 0; + + while( i-- ){ + if( this.adding ) v = (this.values[n]+old) * this.range[n]; + else v = (this.values[n] * this.range[n]); + this.points[n].shift(); + this.points[n].push( 50 - v ); + this.setSvg( svg, 'd', this.makePath( this.points[n] ), i+1 ); + old += this.values[n]; + n++; + + } + + } + + open () { + + super.open(); + + this.h = this.hplus + this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g2 ); + + if( this.group !== null ){ this.group.calc( this.hplus );} + else if( this.isUI ) this.main.calc( this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'block'; + this.s[4].display = 'block'; + this.isShow = true; + + if( !this.custom ) Roots.addListen( this ); + + } + + close () { + + super.close(); + + this.h = this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g1 ); + + if( this.group !== null ){ this.group.calc( -this.hplus );} + else if( this.isUI ) this.main.calc( -this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'none'; + this.s[4].display = 'none'; + this.isShow = false; + + if( !this.custom ) Roots.removeListen( this ); + + this.c[4].innerHTML = ''; + + } + + + ///// AUTO FPS ////// + + begin () { + + this.startTime = this.now(); + + } + + end () { + + let time = this.now(); + this.ms = time - this.startTime; + + this.frames ++; + + if ( time > this.prevTime + 1000 ) { + + this.fps = this.round( ( this.frames * 1000 ) / ( time - this.prevTime ) ); + + this.prevTime = time; + this.frames = 0; + + if ( this.isMem ) { + + let heapSize = performance.memory.usedJSHeapSize; + let heapSizeLimit = performance.memory.jsHeapSizeLimit; + + this.mem = this.round( heapSize * 0.000000954 ); + this.mm = heapSize / heapSizeLimit; + + } + + } + + this.values = [ this.fps, this.ms , this.mm ]; + + this.drawGraph(); + this.upText( [ this.fps, this.ms, this.mem ] ); + + return time; + + } + + listening () { + + if( !this.custom ) this.startTime = this.end(); + + } + + rSize () { + + let s = this.s; + let w = this.w; + + s[3].left = ( this.sa + this.sb - 6 ) + 'px'; + + s[0].width = w + 'px'; + s[1].width = w + 'px'; + s[2].left = 10 + 'px'; + s[2].width = (w-20) + 'px'; + s[4].width = (w-20) + 'px'; + + } + + } + + class Graph extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value !== undefined ? o.value : [0,0,0]; + this.lng = this.value.length; + + this.precision = o.precision !== undefined ? o.precision : 2; + this.multiplicator = o.multiplicator || 1; + this.neg = o.neg || false; + + this.line = o.line !== undefined ? o.line : true; + + //if(this.neg)this.multiplicator*=2; + + this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; + this.isNumber = false; + + this.isDown = false; + + this.h = o.h || 128 + 10; + this.rh = this.h - 10; + this.top = 0; + + this.c[0].style.width = this.w +'px'; + + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = this.w +'px'; + + if(!this.autoWidth){ + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + } + + + //this.c[1].style.background = '#ff0000'; + //this.c[1].style.textAlign = 'center'; + this.top = 10; + this.h += 10; + + } + + this.gh = this.rh - 28; + this.gw = this.w - 28; + + //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); + + //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' + this.c[2] = this.dom( 'div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:'+(this.h-20)+'px; left:14px; width:'+this.gw+'px; color:'+ this.colors.text ); + + //this.c[2].textContent = this.value; + this.c[2].innerHTML = this.valueToHtml(); + + let svg = this.dom( 'svg', this.css.basic , { viewBox:'0 0 '+this.w+' '+this.rh, width:this.w, height:this.rh, preserveAspectRatio:'none' } ); + this.setCss( svg, { width:this.w, height:this.rh, left:0, top:this.top }); + + this.dom( 'path', '', { d:'', stroke:this.colors.text, 'stroke-width':2, fill:'none', 'stroke-linecap':'butt' }, svg ); + this.dom( 'rect', '', { x:10, y:10, width:this.gw+8, height:this.gh+8, stroke:'rgba(0,0,0,0.3)', 'stroke-width':1 , fill:'none'}, svg ); + + this.iw = ((this.gw-(4*(this.lng-1)))/this.lng); + let t = []; + this.cMode = []; + + this.v = []; + + for( let i = 0; i < this.lng; i++ ){ + + t[i] = [ 14 + (i*this.iw) + (i*4), this.iw ]; + t[i][2] = t[i][0] + t[i][1]; + this.cMode[i] = 0; + + if( this.neg ) this.v[i] = ((1+(this.value[i] / this.multiplicator))*0.5); + else this.v[i] = this.value[i] / this.multiplicator; + + this.dom( 'rect', '', { x:t[i][0], y:14, width:t[i][1], height:1, fill:this.colors.text, 'fill-opacity':0.3 }, svg ); + + } + + this.tmp = t; + this.c[3] = svg; + + //console.log(this.w) + + this.init(); + + if( this.c[1] !== undefined ){ + this.c[1].style.top = 0 +'px'; + this.c[1].style.height = 20 +'px'; + this.s[1].lineHeight = (20-5)+'px'; + } + + this.update( false ); + + } + + setValue ( value ) { + + this.value = value; + this.lng = this.value.length; + for (var i = 0; i < this.lng; i++) { + if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5; + else this.v[i] = value[i] / this.multiplicator; + } + this.update(); + + } + + valueToHtml() { + + let i = this.lng, n=0, r = ''; + let w = 100 / this.lng; + let style = 'width:'+ w +'%;';//' text-align:center;' + while(i--){ + if(n===this.lng-1) r += '
' + this.value[n] + '
'; + else r += '' + this.value[n] + ''; + n++; + } + return r + } + + updateSVG () { + + if( this.line ) this.setSvg( this.c[3], 'd', this.makePath(), 0 ); + + for(let i = 0; ithis.top && l.yt[i][0] && l.x this.distance ) { + let angle = Math.atan2(this.tmp.x, this.tmp.y); + this.tmp.x = Math.sin( angle ) * this.distance; + this.tmp.y = Math.cos( angle ) * this.distance; + } + + this.pos.copy( this.tmp ).divideScalar( this.distance ).negate(); + + this.update(); + + } + + setValue ( v ) { + + if(v===undefined) v=[0,0]; + + this.pos.set( v[0] || 0, v[1] || 0 ); + this.updateSVG(); + + } + + update ( up ) { + + if( up === undefined ) up = true; + + if( this.interval !== null ){ + + if( !this.isDown ){ + + this.pos.lerp( null, 0.3 ); + + this.pos.x = Math.abs( this.pos.x ) < 0.01 ? 0 : this.pos.x; + this.pos.y = Math.abs( this.pos.y ) < 0.01 ? 0 : this.pos.y; + + if( this.isUI && this.main.isCanvas ) this.main.draw(); + + } + + } + + this.updateSVG(); + + if( up ) this.send(); + + + if( this.pos.isZero() ) this.stopInterval(); + + } + + updateSVG () { + + //let x = this.radius - ( -this.pos.x * this.distance ); + //let y = this.radius - ( -this.pos.y * this.distance ); + + let x = (this.diam*0.5) - ( -this.pos.x * this.distance ); + let y = (this.diam*0.5) - ( -this.pos.y * this.distance ); + + if(this.model === 0){ + + let sx = x + ((this.pos.x)*5) + 5; + let sy = y + ((this.pos.y)*5) + 10; + + this.setSvg( this.c[3], 'cx', sx*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', sy*this.ratio, 3 ); + } else { + this.setSvg( this.c[3], 'cx', x*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 3 ); + } + + + + this.setSvg( this.c[3], 'cx', x*this.ratio, 4 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 4 ); + + this.value[0] = ( this.pos.x * this.multiplicator ).toFixed( this.precision ) * 1; + this.value[1] = ( this.pos.y * this.multiplicator ).toFixed( this.precision ) * 1; + + if(this.haveText) this.c[2].textContent = this.value; + + } + + clear () { + + this.stopInterval(); + super.clear(); + + } + + } + + class Knob extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.autoWidth = false; + + this.setTypeNumber( o ); + + this.minw = this.w; + this.diam = o.diam || this.w; + + this.mPI = Math.PI * 0.8; + this.toDeg = 180 / Math.PI; + this.cirRange = this.mPI * 2; + + this.offset = new V2(); + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w +'px'; + this.c[0].style.display = 'block'; + + if(this.c[1] !== undefined) { + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + this.percent = 0; + + this.cmode = 0; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); + + this.c[3] = this.getKnob(); + this.setSvg( this.c[3], 'fill', cc.button, 0 ); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + this.setSvg( this.c[3], 'stroke', cc.text, 3 ); + this.setSvg( this.c[3], 'd', this.makeGrad(), 3 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam ); + this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); + + if ( this.model > 0 ) { + + Tools.dom( 'path', '', { d: '', stroke:cc.text, 'stroke-width': 2, fill: 'none', 'stroke-linecap': 'round' }, this.c[3] ); //4 + + if ( this.model == 2) { + + Tools.addSVGGlowEffect(); + this.setSvg( this.c[3], 'style', 'filter: url("#UILGlow");', 4 ); + + } + + } + + this.r = 0; + + this.init(); + + this.update(); + + } + + mode ( mode ) { + + let cc = this.colors; + + if( this.cmode === mode ) return false; + + switch( mode ) { + case 0: // base + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.button, 0); + //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + break; + case 1: // down + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'fill', cc.select, 0); + //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); + this.setSvg( this.c[3], 'stroke', cc.textOver, 1 ); + break; + } + + this.cmode = mode; + return true; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'knob'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0) + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1) + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let off = this.offset; + + //off.x = this.radius - ( e.clientX - this.zone.x ); + //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = - Math.atan2( off.x, off.y ); + + if( this.oldr !== null ) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; + + this.r = this.r > this.mPI ? this.mPI : this.r; + this.r = this.r < -this.mPI ? -this.mPI : this.r; + + let steps = 1 / this.cirRange; + let value = (this.r + this.mPI) * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = Math.floor( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'knob' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + makeGrad () { + + let d = '', step, range, a, x, y, x2, y2, r = 64; + let startangle = Math.PI + this.mPI; + let endangle = Math.PI - this.mPI; + //let step = this.step>5 ? this.step : 1; + + if(this.step>5){ + range = this.range / this.step; + step = ( startangle - endangle ) / range; + } else { + step = (( startangle - endangle ) / r)*2; + range = r*0.5; + } + + for ( let i = 0; i <= range; ++i ) { + + a = startangle - ( step * i ); + x = r + Math.sin( a ) * ( r - 20 ); + y = r + Math.cos( a ) * ( r - 20 ); + x2 = r + Math.sin( a ) * ( r - 24 ); + y2 = r + Math.cos( a ) * ( r - 24 ); + d += 'M' + x + ' ' + y + ' L' + x2 + ' '+y2 + ' '; + + } + + return d; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = (this.value - this.min) / this.range; + + let sa = Math.PI + this.mPI; + let ea = ( ( this.percent * this.cirRange ) - ( this.mPI ) ); + + let sin = Math.sin( ea ); + let cos = Math.cos( ea ); + + let x1 = ( 25 * sin ) + 64; + let y1 = -( 25 * cos ) + 64; + let x2 = ( 20 * sin ) + 64; + let y2 = -( 20 * cos ) + 64; + + this.setSvg( this.c[3], 'd', 'M ' + x1 +' ' + y1 + ' L ' + x2 +' ' + y2, 1 ); + + if ( this.model > 0 ) { + + let x1 = 36 * Math.sin( sa ) + 64; + let y1 = 36 * Math.cos( sa ) + 64; + let x2 = 36 * sin + 64; + let y2 = -36 * cos + 64; + let big = ea <= Math.PI - this.mPI ? 0 : 1; + this.setSvg( this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4 ); + + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( this.colors.text, -0.75) ), Tools.unpack( this.colors.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 4 ); + + } + + if( up ) this.send(); + + } + + } + + class List extends Proto { + + constructor( o = {} ) { + + super( o ); + + // TODO not work + this.hideCurrent = false; + + // images + this.path = o.path || ''; + this.format = o.format || ''; + + + this.isWithImage = this.path !== '' ? true:false; + this.preLoadComplete = false; + + this.tmpImage = {}; + this.tmpUrl = []; + + this.m = o.m !== undefined ? o.m : 5; + + + let align = o.align || 'left'; + + // scroll size + let ss = o.scrollSize || 10; + this.ss = ss+1; + + this.sMode = 0; + this.tMode = 0; + + this.listOnly = o.listOnly || false; + this.staticTop = o.staticTop || false; + + this.isSelectable = this.listOnly; + if( o.select !== undefined ) o.selectable = o.select; + if( o.selectable !== undefined ) this.isSelectable = o.selectable; + + if( this.txt === '' ) this.p = 0; + + + let fltop = Math.floor(this.h*0.5)-3; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.basic + 'top:0; display:none; border-radius:'+this.radius+'px;' ); + this.c[3] = this.dom( 'div', this.css.item + 'padding:0px '+this.m+'px; margin-bottom:0px; position:absolute; justify-content:'+align+'; text-align:'+align+'; line-height:'+(this.h-4)+'px; top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:1px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); + + this.scrollerBack = this.dom( 'div', this.css.basic + 'right:0px; width:'+ss+'px; background:'+cc.back+'; display:none;'); + this.scroller = this.dom( 'div', this.css.basic + 'right:'+((ss-(ss*0.25))*0.5)+'px; width:'+(ss*0.25)+'px; background:'+cc.text+'; display:none; '); + + this.c[3].style.color = cc.text; + + + this.list = []; + this.refObject = null; + + if( o.list ){ + if( o.list instanceof Array ){ + this.list = o.list; + } else if( o.list instanceof Object ){ + this.refObject = o.list; + for( let g in this.refObject ) this.list.push( g ); + } + } + + this.items = []; + + this.prevName = ''; + + + this.tmpId = 0; + + this.baseH = this.h; + + this.itemHeight = o.itemHeight || this.h;//(this.h-3); + + // force full list + this.full = o.full || false; + + this.py = 0; + this.ww = this.sb; + this.scroll = false; + this.isDown = false; + + this.current = null; + + // list up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + if( this.up ){ + + this.c[2].style.top = 'auto'; + this.c[3].style.top = 'auto'; + this.c[4].style.top = 'auto'; + + this.c[2].style.bottom = this.h-2 + 'px'; + this.c[3].style.bottom = '1px'; + this.c[4].style.bottom = fltop + 'px'; + + } else { + this.c[2].style.top = this.baseH + 'px'; + } + + this.listIn = this.dom( 'div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); + this.listIn.name = 'list'; + + this.topList = 0; + + this.c[2].appendChild( this.listIn ); + this.c[2].appendChild( this.scrollerBack ); + this.c[2].appendChild( this.scroller ); + + if( o.value !== undefined ){ + if(!isNaN(o.value)) this.value = this.list[ o.value ]; + else this.value = o.value; + }else { + this.value = this.list[0]; + } + + this.isOpenOnStart = o.open || false; + + if( this.listOnly ){ + this.baseH = 5; + this.c[3].style.display = 'none'; + this.c[4].style.display = 'none'; + this.c[2].style.top = this.baseH+'px'; + this.isOpenOnStart = true; + } + + + this.miniCanvas = o.miniCanvas || false; + this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; + this.imageSize = o.imageSize || [20,20]; + + // dragout function + this.drag = o.drag || false; + this.dragout = o.dragout || false; + this.dragstart = o.dragstart || null; + this.dragend = o.dragend || null; + + + + //this.c[0].style.background = '#FF0000' + ///if( this.isWithImage ) this.preloadImage(); + + this.setList( this.list ); + this.init(); + if( this.isWithImage ) this.preloadImage(); + if( this.isOpenOnStart ) this.open( true ); + + this.baseH += this.mtop; + + } + + // image list + + preloadImage () { + + + + this.preLoadComplete = false; + + this.tmpImage = {}; + for( let i=0; i this.h - this.baseH ) return 'title'; + else { + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + + } else { + if( l.y < this.baseH+2 ) return 'title'; + else { + if( this.isOpen ){ + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + } + + } + + return ''; + + } + + testItems ( y ) { + + let name = ''; + + let items = this.items; + + /*if(this.hideCurrent){ + //items = [...this.items] + items = this.items.slice(this.tmpId) + + }*/ + + let i = items.length, item, a, b; + while(i--){ + item = items[i]; + a = item.posy + this.topList; + b = item.posy + this.itemHeight + 1 + this.topList; + if( y >= a && y <= b ){ + name = 'item' + i; + this.modeItem(0); + this.current = item; + this.modeItem(1); + return name; + } + + } + + return name; + + } + + modeItem ( mode ) { + + if( !this.current ) return + + if( this.current.select && mode===0) mode = 2; + let cc = this.colors; + + switch( mode ){ + + case 0: // base + this.current.style.background = cc.back; + this.current.style.color = cc.text; + break; + case 1: // over + this.current.style.background = cc.over; + this.current.style.color = cc.textOver; + break; + case 2: // edit / down + this.current.style.background = cc.select; + this.current.style.color = cc.textSelect; + break; + + } + } + + unSelected() { + + if( !this.current ) return + this.modeItem(0); + this.current = null; + + } + + selected() { + + if( !this.current ) return + this.resetItems(); + this.modeItem(2); + this.current.select = true; + + + + } + + resetItems() { + + let i = this.items.length; + while(i--){ + this.items[i].select = false; + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text; + } + + } + + hideActive() { + + if( !this.hideCurrent ) return + //if( !this.current ) return + if( this.current )this.tmpId = this.current.id; + this.resetHide(); + //this.items[this.tmpId].style.height = 0+'px' + + } + + resetHide() { + + console.log(this.tmpId); + + let i = this.items.length; + while(i--){ + if(i===this.tmpId){ + this.items[i].style.height = 0+'px'; + this.items[i].posy = -1; + } else { + this.items[i].style.height = this.itemHeight+'px'; + this.items[i].posy = (this.itemHeight+1)*(i-1); + } + //this.items[i].style.display = 'flex' + + /*this.items[i].select = false + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text;*/ + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + + mouseup ( e ) { + + this.isDown = false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'scroll' ){ + + this.isDown = true; + this.mousemove( e ); + + } else if( name === 'title' ){ + + this.modeTitle(2); + if( !this.listOnly ){ + this.hideActive(); + if( !this.isOpen ) this.open(); + else this.close(); + } + } else { + // is item + if( this.current ){ + + this.value = this.list[ this.current.id ]; + //this.tmpId = this.current.id + + if( this.isSelectable ) this.selected(); + + //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); + this.send( this.value ); + + if( !this.listOnly ) { + this.close(); + this.setTopItem(); + //this.hideActive() + } + } + + } + + return true; + + } + + mousemove ( e ) { + + let nup = false; + let name = this.testZone( e ); + + if( !name ) return nup; + + if( name === 'title' ){ + this.unSelected(); + this.modeTitle(1); + this.cursor('pointer'); + + } else if( name === 'scroll' ){ + + this.cursor('s-resize'); + this.modeScroll(1); + if( this.isDown ){ + this.modeScroll(2); + //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + let top = this.zone.y+this.baseH-2; + this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + } + //if(this.isDown) this.listmove(e); + } else { + + // is item + this.modeTitle(0); + this.modeScroll(0); + this.cursor('pointer'); + + } + + if( name !== this.prevName ) nup = true; + this.prevName = name; + + return nup; + + } + + wheel ( e ) { + + let name = this.testZone( e ); + if( name === 'title' ) return false; + this.py += e.delta*10; + this.update(this.py); + return true; + + } + + + + // ---------------------- + + reset () { + + this.prevName = ''; + this.unSelected(); + this.modeTitle(0); + this.modeScroll(0); + + //console.log('this is reset') + + } + + modeScroll ( mode ) { + + if( mode === this.sMode ) return; + + let s = this.scroller.style; + let cc = this.colors; + + switch(mode){ + case 0: // base + s.background = cc.text; + break; + case 1: // over + s.background = cc.select; + break; + case 2: // edit / down + s.background = cc.select; + break; + + } + + this.sMode = mode; + } + + modeTitle ( mode ) { + + if( mode === this.tMode ) return; + + let s = this.s; + let cc = this.colors; + + switch(mode){ + case 0: // base + s[3].color = cc.text; + s[3].background = cc.button; + break; + case 1: // over + s[3].color = cc.textOver; + s[3].background = cc.overoff; + break; + case 2: // edit / down + s[3].color = cc.textSelect; + s[3].background = cc.overoff; + break; + + } + + this.tMode = mode; + + } + + clearList () { + + while ( this.listIn.children.length ) this.listIn.removeChild( this.listIn.lastChild ); + this.items = []; + + } + + setList ( list ) { + + this.clearList(); + + this.list = list; + this.length = this.list.length; + + let lng = this.hideCurrent? this.length-1 : this.length; + + this.maxItem = this.full ? lng : 5; + this.maxItem = lng < this.maxItem ? lng : this.maxItem; + + this.maxHeight = this.maxItem * (this.itemHeight+1) + 2; + + + + this.max = lng * (this.itemHeight+1) + 2; + this.ratio = this.maxHeight / this.max; + this.sh = this.maxHeight * this.ratio; + this.range = this.maxHeight - this.sh; + + this.c[2].style.height = this.maxHeight + 'px'; + this.scrollerBack.style.height = this.maxHeight + 'px'; + this.scroller.style.height = this.sh + 'px'; + + if( this.max > this.maxHeight ){ + this.ww = this.sb - this.ss; + this.scroll = true; + } + + if( this.miniCanvas ) { + + this.tmpCanvas = document.createElement('canvas'); + this.tmpCanvas.width = this.imageSize[0]; + this.tmpCanvas.height = this.imageSize[1]; + this.tmpCtx = this.tmpCanvas.getContext("2d"); + this.tmpCtx.fillStyle = this.canvasBg; + this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); + + } + + let item, n;//, l = this.sb; + for( let i=0; i this.range ? this.range : y; + + this.topList = -Math.floor( y / this.ratio ); + + this.listIn.style.top = this.topList+'px'; + this.scroller.style.top = Math.floor( y ) + 'px'; + + this.py = y; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open ( first ) { + + super.open(); + + this.update( 0 ); + + this.h = this.maxHeight + this.baseH + 5; + if( !this.scroll ){ + this.topList = 0; + this.h = this.baseH + 5 + this.max; + this.scroller.style.display = 'none'; + this.scrollerBack.style.display = 'none'; + } else { + this.scroller.style.display = 'block'; + this.scrollerBack.style.display = 'block'; + } + this.s[0].height = this.h + 'px'; + this.s[2].display = 'block'; + + if( this.up ){ + this.zone.y -= this.h - (this.baseH-10); + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + } else { + this.setSvg( this.c[4], 'd', this.svgs.g2 ); + } + + this.rSizeContent(); + + let t = this.h - this.baseH; + + this.zone.h = this.h; + + if(!first) this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.h - (this.baseH-10); + + let t = this.h - this.baseH; + + this.h = this.baseH; + this.s[0].height = this.h + 'px'; + this.s[2].display = 'none'; + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + + this.zone.h = this.h; + + this.parentHeight( -t ); + + } + + // ----- + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSizeContent () { + + let i = this.length; + while(i--) this.listIn.children[i].style.width = this.ww + 'px'; + + } + + rSize () { + + super.rSize(); + + //Proto.prototype.rSize.call( this ); + + let s = this.s; + let w = this.sb; + let d = this.sa; + + if(s[2]=== undefined) return; + + s[2].width = w + 'px'; + s[2].left = d +'px'; + + s[3].width = w + 'px'; + s[3].left = d + 'px'; + + s[4].left = d + w - 15 + 'px'; + + this.ww = w; + if( this.max > this.maxHeight ) this.ww = w-this.ss; + if(this.isOpen) this.rSizeContent(); + + } + + } + + class Numeric extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.setTypeNumber( o ); + + this.allway = o.allway || false; + + this.isDown = false; + this.value = [0]; + this.multy = 1; + this.invmulty = 1; + this.isSingle = true; + this.isAngle = false; + this.isVector = false; + + if( o.isAngle ){ + this.isAngle = true; + this.multy = Tools.torad; + this.invmulty = Tools.todeg; + } + + this.isDrag = o.drag || false; + + if( o.value !== undefined ){ + if( !isNaN(o.value) ){ + this.value = [o.value]; + } else if( o.value instanceof Array ){ + this.value = o.value; + this.isSingle = false; + } else if( o.value instanceof Object ){ + this.value = []; + if( o.value.x !== undefined ) this.value[0] = o.value.x; + if( o.value.y !== undefined ) this.value[1] = o.value.y; + if( o.value.z !== undefined ) this.value[2] = o.value.z; + if( o.value.w !== undefined ) this.value[3] = o.value.w; + this.isSingle = false; + this.isVector = true; + } + } + + this.lng = this.value.length; + this.tmp = []; + + this.current = -1; + this.prev = { x:0, y:0, d:0, v:0 }; + + let cc = this.colors; + + // bg + this.c[2] = this.dom( 'div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h-8) + 'px;' ); + + this.cMode = []; + + let i = this.lng; + while(i--){ + + if( this.isAngle ) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed( this.precision ); + this.c[3+i] = this.dom( 'div', this.css.txtselect + 'top:1px; height:'+(this.h-2)+'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;'); + if(o.center) this.c[2+i].style.textAlign = 'center'; + this.c[3+i].textContent = this.value[i]; + this.c[3+i].style.color = this.colors.text; + this.c[3+i].isNum = true; + this.cMode[i] = 0; + + } + + // selection + this.selectId = 3 + this.lng; + this.c[this.selectId] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.cursorId = 4 + this.lng; + this.c[ this.cursorId ] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + this.init(); + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0"; + this.easing = o.easing || 1; + + this.setTypeNumber(o); + + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + + //this.defaultBorderColor = this.colors.hide; + + this.isDown = false; + this.isOver = false; + this.allway = o.allway || false; + + this.isDeg = o.isDeg || false; + this.isCyclic = o.cyclic || false; + + this.firstImput = false; + + let cc = this.colors; + + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + this.c[2] = this.dom( + "div", + this.css.txtselect + + "border:none; background:none; width:47px; color:" + + cc.text + + ";" + ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); + this.c[3] = this.dom( + "div", + this.css.basic + " top:0; height:" + this.h + "px;" + ); + + this.c[4] = this.dom( + "div", + this.css.basic + + "background:" + + cc.back + + "; top:2px; height:" + + (this.h - 4) + + "px;" + ); + this.c[5] = this.dom( + "div", + this.css.basic + + "left:4px; top:5px; height:" + + (this.h - 10) + + "px; background:" + + cc.text + + ";" + ); + + this.c[2].isNum = true; + //this.c[2].style.height = (this.h-4) + 'px'; + //this.c[2].style.lineHeight = (this.h-8) + 'px'; + this.c[2].style.height = this.h - 2 + "px"; + this.c[2].style.lineHeight = this.h - 10 + "px"; + + if (this.model !== 0) { + let r1 = 4, + h1 = 4, + h2 = 8, + ww = this.h - 6, + ra = 16; + + if (this.model === 2) { + r1 = 0; + h1 = 2; + h2 = 4; + ra = 2; + ww = (this.h - 6) * 0.5; + } + + if (this.model === 3) this.c[5].style.visible = "none"; + + this.c[4].style.borderRadius = r1 + "px"; + this.c[4].style.height = h2 + "px"; + this.c[4].style.top = this.h * 0.5 - h1 + "px"; + this.c[5].style.borderRadius = r1 * 0.5 + "px"; + this.c[5].style.height = h1 + "px"; + this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; + + //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); + this.c[6] = this.dom( + "div", + this.css.basic + + "border-radius:" + + ra + + "px; margin-left:" + + -ww * 0.5 + + "px; background:" + + cc.text + + "; left:4px; top:3px; height:" + + (this.h - 6) + + "px; width:" + + ww + + "px;" + ); + } + + this.init(); + } + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + if (l.x >= this.txl) return "text"; + else if (l.x >= this.sa) return "scroll"; + else return ""; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (this.isDown) this.isDown = false; + } + + mousedown(e) { + let name = this.testZone(e); + + if (!name) return false; + + if (name === "scroll") { + this.isDown = true; + this.old = this.value; + this.mousemove(e); + } + + /*if( name === 'text' ){ + this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); + }*/ + + return true; + } + + mousemove(e) { + let nup = false; + + let name = this.testZone(e); + + if (name === "scroll") { + this.mode(1); + this.cursor("w-resize"); + //} else if(name === 'text'){ + //this.cursor('pointer'); + } else { + this.cursor(); + } + + if (this.isDown) { + let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; + + // lo mapeo al rango 0 ... 1 + nNormalized = Math.min(1, Math.max(0, nNormalized)); + + // aplico easing + let nEased = Math.pow(nNormalized, this.easing); // easing + + let nNew = nEased * this.range + this.min; + let nNewSlider = nNormalized * this.range + this.min; + + this.sliderValue = this.numValue(nNewSlider); + + let delta = nNew - this.old; + + let steps; + if (delta >= this.step || delta <= this.step) { + steps = Math.floor(delta / this.step); + this.value = this.numValue(this.old + steps * this.step); + // value without easing applied + + this.update(true); + this.old = this.value; + } + //console.log("n, normalized, value", nNew, nNormalized, this.value); + nup = true; + } + + return nup; + } + + wheel(e) { + let name = this.testZone(e); + + if (name === "scroll") { + let v = this.value - this.step * e.delta; + + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue(v); + this.old = v; + this.update(true); + + return true; + } + + return false; + } + + //keydown: function ( e ) { return true; }, + + // ---------------------- + + validate() { + let n = this.c[2].textContent; + + if (!isNaN(n)) { + this.value = this.numValue(n); + this.update(true); + } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + } + + reset() { + //this.clearInput(); + this.isDown = false; + this.mode(0); + } + + mode(mode) { + let s = this.s; + let cc = this.colors; + + switch (mode) { + case 0: // base + // s[2].border = '1px solid ' + this.colors.hide; + s[2].color = cc.text; + s[4].background = cc.back; + s[5].background = cc.text; + if (this.model !== 0) s[6].background = cc.text; //cc.button; + break; + case 1: // scroll over + //s[2].border = '1px dashed ' + this.colors.hide; + s[2].color = cc.textOver; + s[4].background = cc.back; + s[5].background = cc.textOver; + if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; + break; + } + } + + update(up) { + let ww = Math.floor(this.ww * ((this.sliderValue - this.min) / this.range)); + //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); + + if (this.model !== 3) this.s[5].width = ww + "px"; + if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; + this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + + if (up) this.send(); + } + + rSize() { + super.rSize(); + + let w = this.sb - this.sc; + this.ww = w - 6; + + let tx = this.sc; + if (this.isUI || !this.simple) tx = this.sc + 10; + this.txl = this.w - tx + 2; + + //let ty = Math.floor(this.h * 0.5) - 8; + + let s = this.s; + + s[2].width = this.sc - 6 + "px"; + s[2].left = this.txl + 4 + "px"; + //s[2].top = ty + 'px'; + s[3].left = this.sa + "px"; + s[3].width = w + "px"; + s[4].left = this.sa + "px"; + s[4].width = w + "px"; + s[5].left = this.sa + 3 + "px"; + + this.update(); + } + } + + class TextInput extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.cmode = 0; + + this.value = o.value !== undefined ? o.value : ''; + this.placeHolder = o.placeHolder || ''; + + this.allway = o.allway || false; + this.editable = o.edit !== undefined ? o.edit : true; + + this.isDown = false; + + let cc = this.colors; + + // text + this.c[2] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[2].textContent = this.value; + + // selection + this.c[3] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.c[4] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + // fake + this.c[5] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; border:none; justify-content: center; font-style: italic; color:'+cc.border+';' ); + if( this.value === '' ) this.c[5].textContent = this.placeHolder; + + + + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x >= this.sa ) return 'text'; + return ''; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if(!this.editable) return; + + if( this.isDown ){ + this.isDown = false; + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + if( !this.isDown ){ + this.isDown = true; + if( name === 'text' ) this.setInput( this.c[2] ); + return this.mousemove( e ); + } + + return false; + + } + + mousemove ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + //let l = this.local; + //if( l.x === -1 && l.y === -1 ){ return;} + + //if( l.x >= this.sa ) this.cursor('text'); + //else this.cursor(); + + let x = 0; + + if( name === 'text' ) this.cursor('text'); + else this.cursor(); + + if( this.isDown ) x = e.clientX - this.zone.x; + + return this.upInput( x - this.sa -3, this.isDown ); + + } + + update ( ) { + + this.c[2].textContent = this.value; + + } + + // ---------------------- + + reset () { + + this.cursor(); + + } + + // ---------------------- + // INPUT + // ---------------------- + + select ( c, e, w, t ) { + + let s = this.s; + let d = this.sa + 5; + s[4].width = '1px'; + s[4].left = ( d + e ) + 'px'; + + s[3].left = ( d + e ) + 'px'; + s[3].width = w + 'px'; + this.c[3].innerHTML = t; + + } + + unselect () { + + let s = this.s; + if(!s) return; + s[3].width = 0 + 'px'; + this.c[3].innerHTML = 't'; + s[4].width = 0 + 'px'; + + } + + validate ( force ) { + + if( this.allway ) force = true; + + this.value = this.c[2].textContent; + + if(this.value !== '') this.c[5].textContent = ''; + else this.c[5].textContent = this.placeHolder; + + if( !force ) return; + + this.send(); + + } + + // ---------------------- + // REZISE + // ---------------------- + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + + s[5].left = this.sa + 'px'; + s[5].width = this.sb + 'px'; + + } + + + } + + class Title extends Proto { + + constructor( o = {} ) { + + super( o ); + + let prefix = o.prefix || ''; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:right; width:60px; line-height:'+ (this.h-8) + 'px; color:' + this.colors.text ); + + if( this.h === 31 ){ + + this.s[0].height = this.h + 'px'; + this.s[1].top = 8 + 'px'; + this.c[2].style.top = 8 + 'px'; + + } + + let s = this.s; + + s[1].justifyContent = o.align || 'left'; + //s[1].textAlign = o.align || 'left'; + s[1].fontWeight = o.fontWeight || 'bold'; + + + this.c[1].textContent = this.txt.substring(0,1).toUpperCase() + this.txt.substring(1).replace("-", " "); + this.c[2].textContent = prefix; + + this.init(); + + } + + text( txt ) { + + this.c[1].textContent = txt; + + } + + text2( txt ) { + + this.c[2].textContent = txt; + + } + + rSize() { + + super.rSize(); + this.s[1].width = this.w + 'px'; //- 50 + 'px'; + this.s[2].left = this.w + 'px';//- ( 50 + 26 ) + 'px'; + + } + + setColor( c ) { + this.s[1].color = c; + this.s[2].color = c; + } + + } + + class Select extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.isDown = false; + this.onActif = o.onActif || function(){}; + + //let prefix = o.prefix || ''; + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+ cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + //this.c[2].style.color = this.fontColor; + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'cursor' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + this.isActif = false; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + if( l.x > this.sa && l.x < this.sa+30 ) return 'over' + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ) + } + + return false + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false + + this.isDown = true; + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + this.send(); + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + if( n===1 ) this.isActif = false; + if( n===3 ){ + if( !this.isActif ){ this.isActif = true; n=4; this.onActif( this ); } + else { this.isActif = false; } + } + + if( n===2 && this.isActif ) n = 4; + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.action; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.action; break; // actif + + } + + change = true; + + } + + return change + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ) + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + + } + + class Bitmap extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.refTexture = o.texture || null; + this.img = null; + + this.isDown = false; + this.neverlock = true; + + + + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'load' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x > this.sa && l.x < this.sa+30 ) return 'over'; + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'over' ){ + this.isDown = true; + Files.load( { callback:this.changeBitmap.bind(this) } ); + + } + + + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ); + + } + + mousemove ( e ) { + + let up = false; + + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + + changeBitmap( img, fname ){ + + if( img ){ + this.img = img; + this.apply( fname ); + } else { + this.img = null; + this.apply( 'null' ); + } + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + + if( this.img !== null ){ + if( this.objectLink !== null ) this.objectLink[ this.val ] = v; + if( this.callback ) this.callback( this.value, this.img, this.name ); + } + + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.over; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.select; break; // actif + + } + + change = true; + + } + + return change; + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ); + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + + } + + //import { Proto } from '../core/Proto.js'; + + class Selector extends Button { + + constructor( o = {} ) { + + if( o.selectable === undefined ) o.selectable = true; + super( o ); + + } + + } + + class Item extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.p = 100; + this.value = this.txt; + this.status = 1; + + this.itype = o.itype || 'none'; + this.val = this.itype; + + this.graph = this.svgs[ this.itype ]; + + let fltop = Math.floor(this.h*0.5)-7; + + this.c[2] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.graph, fill:this.colors.text, stroke:'none'}); + + this.s[1].marginLeft = 20 + 'px'; + + this.init(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousemove ( e ) { + + this.cursor('pointer'); + + //up = this.modes( this.isDown ? 3 : 2, name ); + + } + + mousedown ( e ) { + + if( this.isUI ) this.main.resetItem(); + + this.selected( true ); + + this.send(); + + return true; + + } + + uiout () { + + if( this.isSelect ) this.mode(3); + else this.mode(1); + + } + + uiover () { + + if( this.isSelect ) this.mode(4); + else this.mode(2); + + } + + update () { + + } + + /*rSize () { + + super.rSize(); + + }*/ + + mode ( n ) { + + let change = false; + + if( this.status !== n ){ + + this.status = n; + let s = this.s, cc = this.colors; + + switch( n ){ + + case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; + case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; + case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; + case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; + + } + + change = true; + + } + + return change; + + } + + reset () { + + this.cursor(); + // return this.mode( 1 ); + + } + + selected ( b ){ + + if( this.isSelect ) this.mode(1); + + this.isSelect = b || false; + + if( this.isSelect ) this.mode(3); + + } + + + } + + class Grid extends Proto { + + constructor( o = {} ) { + + super( o ); + + /*this.values = o.values || []; + + if( typeof this.values === 'string' ) this.values = [ this.values ];*/ + + this.values = []; + + if( o.values ){ + if( o.values instanceof Array ){ + this.values = o.values; + } else if( o.values instanceof String ){ + this.values = [ o.values ]; + } else if( o.values instanceof Object ){ + this.refObject = o.values; + for( let g in this.refObject ) this.values.push( g ); + } + } + + this.lng = this.values.length; + + + + this.value = o.value || null; + + + + + let cc = this.colors; + + + this.isSelectable = o.selectable || false; + this.spaces = o.spaces || [ cc.sx, cc.sy ]; + this.bsize = o.bsize || [ 90, this.h ]; + + this.bsizeMax = this.bsize[0]; + + this.tmp = []; + this.stat = []; + this.grid = [ 2, Math.round( this.lng * 0.5 ) ]; + + this.h = ( this.grid[1] * this.bsize[1] ) + ( this.grid[1] * this.spaces[1] ); //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); + + this.c[1].textContent = ''; + //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); + this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1])+'px; border:none;' ); + + let n = 0, b, td, tr, sel; + + this.res = -1; + this.isDown = false; + this.neverlock = true; + + this.buttons = []; + this.stat = []; + this.tmpX = []; + this.tmpY = []; + + for( let i = 0; i < this.grid[1]; i++ ){ + + tr = this.c[2].insertRow(); + tr.style.cssText = 'pointer-events:none;'; + for( let j = 0; j < this.grid[0]; j++ ){ + + td = tr.insertCell(); + td.style.cssText = 'pointer-events:none;'; + + if( this.values[n] ){ + + sel = false; + if( this.values[n] === this.value && this.isSelectable ) sel = true; + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:'+this.bsize[0]+'px; height:'+(this.bsize[1]-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; left:auto; right:auto; border-radius:'+this.radius+'px;'; + b.style.background = sel ? cc.select : cc.button; + b.style.color = sel ? cc.textSelect : cc.text; + b.innerHTML = this.values[n]; + td.appendChild( b ); + + this.buttons.push(b); + this.stat.push(1); + + } else { + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + 'position:static; width:'+this.bsize[0]+'px; height:'+this.bsize[1]+'px; text-align:center; left:auto; right:auto; background:none;'; + td.appendChild( b ); + + } + + if(j===0) b.style.cssText += 'float:right;'; + else b.style.cssText += 'float:left;'; + + n++; + + } + } + + this.s[0].border = 'none'; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1; + + l.y += this.mtop; + + let tx = this.tmpX; + let ty = this.tmpY; + + let id = -1; + let c = -1; + let line = -1; + let i = this.grid[0]; + while( i-- ){ + if( l.x > tx[i][0] && l.x < tx[i][1] ) c = i; + } + + i = this.grid[1]; + while( i-- ){ + if( l.y > ty[i][0] && l.y < ty[i][1] ) line = i; + } + + if(c!==-1 && line!==-1){ + id = c + (line*2); + if(id>this.lng-1) id = -1; + } + + return id; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( !this.isDown ) return false + + this.isDown = false; + if( this.res !== -1 ){ + this.value = this.values[this.res]; + this.send(); + } + + return this.mousemove( e ) + + } + + mousedown ( e ) { + + if( this.isDown ) return false + this.isDown = true; + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + this.res = this.testZone( e ); + + if( this.res !== -1 ){ + this.cursor('pointer'); + up = this.modes( this.isDown ? 3 : 2, this.res ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + // MODE + // ----------------------- + + modes ( N = 1, id = -1 ) { + + let i = this.lng, w, n, r = false; + + while( i-- ){ + + n = N; + w = this.isSelectable ? this.values[ i ] === this.value : false; + + if( i === id ){ + if( w && n === 2 ) n = 3; + } else { + n = 1; + if( w ) n = 4; + } + + if( this.mode( n, i ) ) r = true; + + } + + return r + + } + + mode ( n, id ) { + + let change = false; + let cc = this.colors, s = this.buttons; + let i = id; + + if( this.stat[id] !== n ){ + + this.stat[id] = n; + + switch( n ){ + + case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; + case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; + case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; + case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; + + } + + change = true; + + } + + return change; + + } + + // ---------------------- + + reset () { + + this.res = -1; + this.cursor(); + return this.modes() + + } + + + label ( string, n ) { + + this.buttons[n].textContent = string; + + } + + icon ( string, y, n ) { + + this.buttons[n].style.padding = ( y || 0 ) +'px 0px'; + this.buttons[n].innerHTML = string; + + } + + testW () { + + let vw = this.spaces[0]*3 + this.bsizeMax*2, rz = false; + if( vw > this.w ) { + this.bsize[0] = ( this.w-(this.spaces[0]*3) ) * 0.5; + rz = true; + } else { + if( this.bsize[0] !== this.bsizeMax ) { + this.bsize[0] = this.bsizeMax; + rz = true; + } + } + + if( !rz ) return; + + let i = this.buttons.length; + while(i--) this.buttons[i].style.width = this.bsize[0] + 'px'; + + } + + rSize () { + + super.rSize(); + + this.testW(); + + let mid; + + this.tmpX = []; + this.tmpY = []; + + for( let j = 0; j < this.grid[0]; j++ ){ + + if(j===0){ + mid = ( this.w*0.5 ) - ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid-this.bsize[0], mid ] ); + } else { + mid = ( this.w*0.5 ) + ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid, mid+this.bsize[0] ] ); + } + + } + + mid = this.spaces[1]; + + for( let i = 0; i < this.grid[1]; i++ ){ + + this.tmpY.push( [ mid, mid + this.bsize[1] ] ); + mid += this.bsize[1] + this.spaces[1]; + + } + + } + + } + + class Pad2D extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + + //this.margin = 15; + this.pos = new V2(0,0); + this.maxPos = 90; + + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.min = o.min === undefined ? -1 : o.min; + this.max = o.max === undefined ? 1 : o.max; + + this.range = (this.max - this.min)*0.5; + + this.cmode = 0; + + + //console.log(this.range) + + this.c[0].style.display = 'block'; + + + + + + this.precision = o.precision === undefined ? 2 : o.precision; + + /*this.bounds = {}; + this.bounds.x1 = o.x1 || -1; + this.bounds.x2 = o.x2 || 1; + this.bounds.y1 = o.y1 || -1; + this.bounds.y2 = o.y2 || 1; + + this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); + this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); + + this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); + this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ + + this.value = ( Array.isArray( o.value ) && o.value.length == 2 ) ? o.value : [ 0, 0 ]; + + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w + 'px'; + + // Title + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + //this.top -= this.margin + + let cc = this.colors; + + + // Value + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+ ( this.h - 20 ) + 'px; width:100%; color:' + cc.text ); + this.c[2].textContent = this.value; + + // Pad + + let pad = this.getPad2d(); + + this.setSvg( pad, 'fill', cc.back, 0 ); + this.setSvg( pad, 'fill', cc.button, 1 ); + this.setSvg( pad, 'stroke', cc.back, 2 ); + this.setSvg( pad, 'stroke', cc.back, 3 ); + this.setSvg( pad, 'stroke', cc.text, 4 ); + + this.setSvg( pad, 'viewBox', '0 0 '+this.diam+' '+this.diam ); + this.setCss( pad, { width:this.diam, height:this.diam, left:0, top:this.top }); + + this.c[3] = pad; + + this.init(); + this.setValue(); + + } + + testZone ( e ) { + + let l = this.local; + + if( l.x === -1 && l.y === -1 ) return ''; + + + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'pad'; + + /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { + return 'pad'; + }*/ + + //return ''; + + } + + mouseup ( e ) { + + this.isDown = false; + return this.mode(0); + + } + + mousedown ( e ) { + + if ( this.testZone(e) === 'pad' ) { + + this.isDown = true; + this.mousemove( e ); + return this.mode(1); + } + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let x = (this.w*0.5) - ( e.clientX - this.zone.x ); + let y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + + let r = 256 / this.diam; + + x = -(x*r); + y = -(y*r); + + x = Tools.clamp( x, -this.maxPos, this.maxPos ); + y = Tools.clamp( y, -this.maxPos, this.maxPos ); + + //let x = e.clientX - this.zone.x; + //let y = e.clientY - this.zone.y - this.top; + + /*if( x < this.margin ) x = this.margin; + if( x > this.w - this.margin ) x = this.w - this.margin; + if( y < this.margin ) y = this.margin; + if( y > this.w - this.margin ) y = this.w - this.margin;*/ + + //console.log(x,y) + + this.setPos( [ x , y ] ); + + this.update( true ); + + } + + mode ( mode ) { + + if( this.cmode === mode ) return false; + + let cc = this.colors; + + switch( mode ){ + case 0: // base + + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.back, 0); + this.setSvg( this.c[3], 'fill', cc.button, 1); + this.setSvg( this.c[3], 'stroke', cc.back, 2); + this.setSvg( this.c[3], 'stroke', cc.back, 3); + this.setSvg( this.c[3], 'stroke', cc.text, 4 ); + + break; + case 1: // down + + this.s[2].color = cc.textSelect; + this.setSvg( this.c[3], 'fill', cc.backoff, 0); + this.setSvg( this.c[3], 'fill', cc.overoff, 1); + this.setSvg( this.c[3], 'stroke', cc.backoff, 2); + this.setSvg( this.c[3], 'stroke', cc.backoff, 3); + this.setSvg( this.c[3], 'stroke', cc.textSelect, 4 ); + + break; + } + + this.cmode = mode; + return true; + + + + } + + update ( up ) { + + //if( up === undefined ) up = true; + + this.c[2].textContent = this.value; + + this.updateSVG(); + + if( up ) this.send(); + + } + + updateSVG() { + + if ( this.model == 1 ) { + + this.setSvg( this.c[3], 'y1', this.pos.y, 2 ); + this.setSvg( this.c[3], 'y2', this.pos.y, 2 ); + + this.setSvg( this.c[3], 'x1', this.pos.x, 3 ); + this.setSvg( this.c[3], 'x2', this.pos.x, 3 ); + + } + + this.setSvg( this.c[3], 'cx', this.pos.x, 4 ); + this.setSvg( this.c[3], 'cy', this.pos.y, 4 ); + + } + + setPos ( p ) { + + //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; + + this.pos.set( p[0]+128 , p[1]+128 ); + + let r = 1/this.maxPos; + + this.value[0] = ((p[0]*r)*this.range).toFixed( this.precision ); + this.value[1] = ((p[1]*r)*this.range).toFixed( this.precision ); + + } + + setValue ( v, up = false ) { + + if( v === undefined ) v = this.value; + + /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; + if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; + if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; + if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ + + this.value[0] = Math.min( this.max, Math.max( this.min, v[0] ) ).toFixed( this.precision ) * 1; + this.value[1] = Math.min( this.max, Math.max( this.min, v[1] ) ).toFixed( this.precision ) * 1; + + this.pos.set( ((this.value[0]/this.range)*this.maxPos)+128 , ((this.value[1]/this.range)*this.maxPos)+128 ); + + //console.log(this.pos) + + this.update( up ); + + } + + /*lerp( s1, s2, d1, d2, c = true ) { + + let s = ( d2 - d1 ) / ( s2 - s1 ); + + return c ? ( v ) => { + return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 + } : ( v ) => { + return ( v - s1 ) * s + d1 + } + + }*/ + + } + + const add = function () { + + let a = arguments; + + let type, o, ref = false, n = null; + + if( typeof a[0] === 'string' ){ + + type = a[0]; + o = a[1] || {}; + + } else if ( typeof a[0] === 'object' ){ // like dat gui + + ref = true; + if( a[2] === undefined ) [].push.call(a, {}); + + type = a[2].type ? a[2].type : autoType( a[0][a[1]], a[2] ); + + o = a[2]; + o.name = a[1]; + if (o.hasOwnProperty("displayName")) o.name = o.displayName; + + if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } + else o.value = a[0][a[1]]; + + } + + let name = type.toLowerCase(); + + if( name === 'group' ){ + o.add = add; + //o.dx = 8 + } + + switch( name ){ + + case 'bool': case 'boolean': n = new Bool(o); break; + case 'button': n = new Button(o); break; + case 'circular': n = new Circular(o); break; + case 'color': n = new Color(o); break; + case 'fps': n = new Fps(o); break; + case 'graph': n = new Graph(o); break; + case 'group': n = new Group(o); break; + case 'joystick': n = new Joystick(o); break; + case 'knob': n = new Knob(o); break; + case 'list': n = new List(o); break; + case 'numeric': case 'number': n = new Numeric(o); break; + case 'slide': n = new Slide(o); break; + case 'textInput': case 'string': n = new TextInput(o); break; + case 'title': case 'text': n = new Title(o); break; + case 'select': n = new Select(o); break; + case 'bitmap': n = new Bitmap(o); break; + case 'selector': n = new Selector(o); break; + case 'empty': case 'space': n = new Empty(o); break; + case 'item': n = new Item(o); break; + case 'grid': n = new Grid(o); break; + case 'pad2d': case 'pad': n = new Pad2D(o); break; + + } + + + + if( n !== null ){ + + Roots.needResize = true; + + if( ref ) n.setReferency( a[0], a[1] ); + return n; + + } + + }; + + const autoType = function ( v, o ) { + + let type = 'slide'; + + if( typeof v === 'boolean' ) type = 'bool'; + else if( typeof v === 'string' ){ + + if( v.substring(0,1) === '#' ) type = 'color'; + else type = 'string'; + + } else if( typeof v === 'number' ){ + + if( o.ctype ) type = 'color'; + else type = 'slide'; + + } else if( typeof v === 'array' && v instanceof Array ){ + + if( typeof v[0] === 'number' ) type = 'number'; + else if( typeof v[0] === 'string' ) type = 'list'; + + } else if( typeof v === 'object' && v instanceof Object ){ + + if( v.x !== undefined ) type = 'number'; + else type = 'list'; + + } + + return type + + }; + + /** + * @author lth / https://github.com/lo-th + */ + + class Gui { + constructor(o = {}) { + this.isGui = true; + + this.name = "gui"; + + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; + + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); + + //this.cleanning = false + + // style + this.css = Tools.cloneCss(); + + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 + + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; + + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; + + this.callback = o.callback === undefined ? null : o.callback; + + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; + + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + + this.cn = ""; + + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; + + this.size.h = this.size.h < 11 ? 11 : this.size.h; + + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + + // virtual mouse + this.mouse = new V2().neg(); + + this.h = 0; + //this.prevY = -1; + this.sw = 0; + + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); + + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; + + this.autoResize = o.autoResize === undefined ? true : o.autoResize; + + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; + + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; + + this.isNewTarget = false; + + let cc = this.colors; + + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); + + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); + + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); + + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); + + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); + + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; + + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } + + if (this.parent !== null) this.parent.appendChild(this.content); + + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } + + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + + this.setWidth(); + + if (this.isCanvas) this.makeCanvas(); + + Roots.add(this); + } + + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseUp(x, y) { + /* + + clientX,clientY are no used when isCanvas==true + */ + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); + + Roots.needReZone = true; + } + + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } + + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } + + // ---------------------- + // CANVAS + // ---------------------- + + onDraw() {} + + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + + //console.log( this.canvas.width, this.canvas.height ) + } + + draw(force) { + if (this.canvas === null) return; + + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } + + ////// + + getDom() { + return this.content; + } + + noMouse() { + this.mouse.neg(); + } + + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); + + //console.log("setMouse "+uv.x+" "+uv.y) + } + + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } + + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } + + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } + + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } + + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } + + onChange(f) { + this.callback = f || null; + return this; + } + + // ---------------------- + // STYLES + // ---------------------- + + mode(n) { + let needChange = false; + let cc = this.colors; + + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } + + needChange = true; + } + + return needChange; + } + + // ---------------------- + // TARGET + // ---------------------- + + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + + this.proto = null; + this.current = -1; + + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + + Roots.cursor(); + return true; + } + + // ---------------------- + // ZONE TEST + // ---------------------- + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + this.isReset = false; + + let name = ""; + + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; + + return name; + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent(e) { + //if( this.cleanning ) return + + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; + + let change = false; + let protoChange = false; + + let name = this.testZone(e); + + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; + + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } + + if (!name) return; + + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); + + if (this.proto) protoChange = this.proto.handleEvent(e); + + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); + + if (!Roots.lock) { + this.getNext(e, change); + } + + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } + + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + + break; + } + + if (this.isDown) change = true; + if (protoChange) change = true; + + if (type === "keyup") change = true; + if (type === "keydown") change = true; + + if (change) this.draw(); + } + + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); + + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } + + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } + + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } + + // ---------------------- + // RESET + // ---------------------- + + reset(force) { + if (this.isReset) return; + + //this.resetItem(); + + this.mouse.neg(); + this.isDown = false; + + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); + + if (r || r2) this.draw(true); + + this.isReset = true; + + //Roots.lock = false; + } + + // ---------------------- + // ADD NODE + // ---------------------- + + add() { + //if(this.cleanning) this.cleanning = false + + let a = arguments; + let ontop = false; + + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; + + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } + + let u = add.apply(this, a); + + if (u === null) return; + + if (ontop) this.uis.unshift(u); + else this.uis.push(u); + + this.calc(); + + this.isEmpty = false; + + return u; + } + + // remove one node + + remove(n) { + if (n.dispose) n.dispose(); + } + + // call after uis clear + + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } + + // clear all gui + + empty() { + //this.cleanning = true + + //this.close(); + + let i = this.uis.length, + item; + + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } + + this.uis = []; + this.isEmpty = true; + this.calc(); + } + + clear() { + this.empty(); + } + + clear2() { + setTimeout(this.empty.bind(this), 0); + } + + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } + + // ---------------------- + // ITEMS SPECIAL + // ---------------------- + + resetItem() { + if (!this.isItemMode) return; + + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } + + setItem(name) { + if (!this.isItemMode) return; + + name = name || ""; + this.resetItem(); + + if (!name) { + this.update(0); + return; + } + + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } + + // ---------------------- + // SCROLL + // ---------------------- + + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; + + if (b) { + this.total = this.h; + + this.maxView = this.maxHeight; + + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; + + this.range = this.maxView - this.sh; + + this.oy = Tools.clamp(this.oy, 0, this.range); + + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } + + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } + + update(y) { + y = Tools.clamp(y, 0, this.range); + + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } + + // ---------------------- + // RESIZE FUNCTION + // ---------------------- + + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } + + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } + + setHeight() { + if (this.tmp) clearTimeout(this.tmp); + + this.zone.h = this.bh; + this.isScroll = false; + + if (this.isOpen) { + this.h = this.calcUis(); + + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; + + this.maxHeight = hhh - this.zone.y - this.bh; + + let diff = this.h - this.maxHeight; + + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + + this.upScroll(this.isScroll); + + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + + rezone() { + Roots.needReZone = true; + } + + setWidth(w) { + if (w) this.zone.w = w; + + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } + } + + exports.Files = Files; + exports.Gui = Gui; + exports.REVISION = REVISION; + exports.Tools = Tools; + exports.add = add; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0pIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMuc2xpZGVyVmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcbiAgICAvL2xldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqICgodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2UpKTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gMykgdGhpcy5zWzVdLndpZHRoID0gd3cgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5zWzZdKSB0aGlzLnNbNl0ubGVmdCA9IHRoaXMuc2EgKyB3dyArIDMgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuXHJcbiAgICBpZiAodXApIHRoaXMuc2VuZCgpO1xyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy5zYiAtIHRoaXMuc2M7XHJcbiAgICB0aGlzLnd3ID0gdyAtIDY7XHJcblxyXG4gICAgbGV0IHR4ID0gdGhpcy5zYztcclxuICAgIGlmICh0aGlzLmlzVUkgfHwgIXRoaXMuc2ltcGxlKSB0eCA9IHRoaXMuc2MgKyAxMDtcclxuICAgIHRoaXMudHhsID0gdGhpcy53IC0gdHggKyAyO1xyXG5cclxuICAgIC8vbGV0IHR5ID0gTWF0aC5mbG9vcih0aGlzLmggKiAwLjUpIC0gODtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICBzWzJdLndpZHRoID0gdGhpcy5zYyAtIDYgKyBcInB4XCI7XHJcbiAgICBzWzJdLmxlZnQgPSB0aGlzLnR4bCArIDQgKyBcInB4XCI7XHJcbiAgICAvL3NbMl0udG9wID0gdHkgKyAncHgnO1xyXG4gICAgc1szXS5sZWZ0ID0gdGhpcy5zYSArIFwicHhcIjtcclxuICAgIHNbM10ud2lkdGggPSB3ICsgXCJweFwiO1xyXG4gICAgc1s0XS5sZWZ0ID0gdGhpcy5zYSArIFwicHhcIjtcclxuICAgIHNbNF0ud2lkdGggPSB3ICsgXCJweFwiO1xyXG4gICAgc1s1XS5sZWZ0ID0gdGhpcy5zYSArIDMgKyBcInB4XCI7XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUZXh0SW5wdXQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlICE9PSB1bmRlZmluZWQgPyBvLnZhbHVlIDogJyc7XHJcbiAgICAgICAgdGhpcy5wbGFjZUhvbGRlciA9IG8ucGxhY2VIb2xkZXIgfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZSA9IG8uZWRpdCAhPT0gdW5kZWZpbmVkID8gby5lZGl0IDogdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gdGV4dFxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonICsgKHRoaXMuaC0yKSArICdweDsgY29sb3I6JyArIGNjLnRleHQgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5iYWNrICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgLy8gZmFrZVxyXG4gICAgICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonICsgKHRoaXMuaC0yKSArICdweDsgYm9yZGVyOm5vbmU7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOicrY2MuYm9yZGVyKyc7JyApO1xyXG4gICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSAnJyApIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIFxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+PSB0aGlzLnNhICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggbmFtZSA9PT0gJ3RleHQnICkgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgLy9pZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICl7IHJldHVybjt9XHJcblxyXG4gICAgICAgIC8vaWYoIGwueCA+PSB0aGlzLnNhICkgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICAvL2Vsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RleHQnICkgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICBlbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBJbnB1dCggeCAtIHRoaXMuc2EgLTMsIHRoaXMuaXNEb3duICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2EgKyA1O1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAnMXB4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAoIGQgKyBlICkgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAgKCBkICsgZSApICArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICB3ICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgaWYoIXMpIHJldHVybjtcclxuICAgICAgICBzWzNdLndpZHRoID0gIDAgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gJ3QnXHJcbiAgICAgICAgc1s0XS53aWR0aCA9IDAgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWU7IFxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgICAgICBpZih0aGlzLnZhbHVlICE9PSAnJykgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgZWxzZSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBSRVpJU0VcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s1XS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1s1XS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBUaXRsZSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICBsZXQgcHJlZml4ID0gby5wcmVmaXggfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpyaWdodDsgd2lkdGg6NjBweDsgbGluZS1oZWlnaHQ6JysgKHRoaXMuaC04KSArICdweDsgY29sb3I6JyArIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaCA9PT0gMzEgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0udG9wID0gOCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSA4ICsgJ3B4JztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc1sxXS5qdXN0aWZ5Q29udGVudCA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIC8vc1sxXS50ZXh0QWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICBzWzFdLmZvbnRXZWlnaHQgPSBvLmZvbnRXZWlnaHQgfHwgJ2JvbGQnO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQuc3Vic3RyaW5nKDAsMSkudG9VcHBlckNhc2UoKSArIHRoaXMudHh0LnN1YnN0cmluZygxKS5yZXBsYWNlKFwiLVwiLCBcIiBcIik7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gcHJlZml4O1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQyKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcbiAgICAgICAgdGhpcy5zWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4JzsgLy8tIDUwICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0ubGVmdCA9IHRoaXMudyArICdweCc7Ly8tICggNTAgKyAyNiApICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q29sb3IoIGMgKSB7XHJcbiAgICAgICAgdGhpcy5zWzFdLmNvbG9yID0gY1xyXG4gICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMub25BY3RpZiA9IG8ub25BY3RpZiB8fCBmdW5jdGlvbigpe31cclxuXHJcbiAgICAgICAgLy9sZXQgcHJlZml4ID0gby5wcmVmaXggfHwgJyc7XHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICcgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrIGNjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuICAgICAgICAvL3RoaXMuY1syXS5zdHlsZS5jb2xvciA9IHRoaXMuZm9udENvbG9yO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IGJhY2tncm91bmQ6JyArIGNjLmlucHV0QmcgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuaW5wdXRCb3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnY3Vyc29yJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcbiAgICAgICAgdGhpcy5pc0FjdGlmID0gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3ZlcidcclxuICAgICAgICByZXR1cm4gJzAnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcbiAgICBcclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgLy90aGlzLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgLy90aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbIG5hbWUtMiBdO1xyXG4gICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhcHBseSAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8ICcnO1xyXG5cclxuICAgICAgICBpZiggdiAhPT0gdGhpcy52YWx1ZSApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSggMyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0xICkgdGhpcy5pc0FjdGlmID0gZmFsc2U7O1xyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0zICl7IFxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzQWN0aWYgKXsgdGhpcy5pc0FjdGlmID0gdHJ1ZTsgbj00OyB0aGlzLm9uQWN0aWYoIHRoaXMgKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7IHRoaXMuaXNBY3RpZiA9IGZhbHNlOyB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MiAmJiB0aGlzLmlzQWN0aWYgKSBuID0gNDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gYWN0aWZcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICh0aGlzLnNhKzgpICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBGaWxlcyB9IGZyb20gJy4uL2NvcmUvRmlsZXMuanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBCaXRtYXAgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMucmVmVGV4dHVyZSA9IG8udGV4dHVyZSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcblxyXG5cclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICcgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IGJhY2tncm91bmQ6JyArIGNjLmlucHV0QmcgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuaW5wdXRCb3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2xvYWQnIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJztcclxuICAgICAgICByZXR1cm4gJzAnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcbiAgICBcclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgLy90aGlzLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBGaWxlcy5sb2FkKCB7IGNhbGxiYWNrOnRoaXMuY2hhbmdlQml0bWFwLmJpbmQodGhpcykgfSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy90aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbIG5hbWUtMiBdO1xyXG4gICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBjaGFuZ2VCaXRtYXAoIGltZywgZm5hbWUgKXtcclxuXHJcbiAgICAgICAgaWYoIGltZyApe1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IGltZ1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCBmbmFtZSApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoICdudWxsJyApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhcHBseSAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8ICcnO1xyXG5cclxuICAgICAgICBpZiggdiAhPT0gdGhpcy52YWx1ZSApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pbWcgIT09IG51bGwgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLm9iamVjdExpbmsgIT09IG51bGwgKSB0aGlzLm9iamVjdExpbmtbIHRoaXMudmFsIF0gPSB2XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5jYWxsYmFjayApIHRoaXMuY2FsbGJhY2soIHRoaXMudmFsdWUsIHRoaXMuaW1nLCB0aGlzLm5hbWUgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSggMyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhazsgLy8gYWN0aWZcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICh0aGlzLnNhKzgpICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG59IiwiLy9pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0b3IgZXh0ZW5kcyBCdXR0b24ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgPT09IHVuZGVmaW5lZCApIG8uc2VsZWN0YWJsZSA9IHRydWVcclxuICAgICAgICBzdXBlciggbyApO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLnAgPSAxMDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudHh0O1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5pdHlwZSA9IG8uaXR5cGUgfHwgJ25vbmUnO1xyXG4gICAgICAgIHRoaXMudmFsID0gdGhpcy5pdHlwZTtcclxuXHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IHRoaXMuc3Znc1sgdGhpcy5pdHlwZSBdO1xyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTc7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5ncmFwaCwgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc1sxXS5tYXJnaW5MZWZ0ID0gMjAgKyAncHgnO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG5cclxuICAgICAgICAvL3VwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgbmFtZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkKCB0cnVlICk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdXQgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdmVyICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoNCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMik7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8qclNpemUgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgfSovXHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdHVzICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IG47XHJcbiAgICAgICAgICAgIGxldCBzID0gdGhpcy5zLCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zdGF0dXMgPSAxOyBzWzFdLmNvbG9yID0gY2MudGV4dDsgc1swXS5iYWNrZ3JvdW5kID0gJ25vbmUnOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zdGF0dXMgPSAyOyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnN0YXR1cyA9IDM7IHNbMV0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzWzBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnN0YXR1cyA9IDQ7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgIC8vIHJldHVybiB0aGlzLm1vZGUoIDEgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQgKCBiICl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcydcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnXHJcblxyXG5leHBvcnQgY2xhc3MgR3JpZCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICAvKnRoaXMudmFsdWVzID0gby52YWx1ZXMgfHwgW107XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF07Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIG8udmFsdWVzICl7XHJcbiAgICAgICAgICAgIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBTdHJpbmcgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gWyBvLnZhbHVlcyBdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8udmFsdWVzXHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy52YWx1ZXMucHVzaCggZyApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoO1xyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IG51bGw7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3BhY2VzID0gby5zcGFjZXMgfHwgWyBjYy5zeCwgY2Muc3kgXVxyXG4gICAgICAgIHRoaXMuYnNpemUgPSBvLmJzaXplIHx8IFsgOTAsIHRoaXMuaCBdO1xyXG5cclxuICAgICAgICB0aGlzLmJzaXplTWF4ID0gdGhpcy5ic2l6ZVswXVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ3JpZCA9IFsgMiwgTWF0aC5yb3VuZCggdGhpcy5sbmcgKiAwLjUgKSBdO1xyXG5cclxuICAgICAgICB0aGlzLmggPSAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuYnNpemVbMV0gKSArICggdGhpcy5ncmlkWzFdICogdGhpcy5zcGFjZXNbMV0gKSAvLysgNCAtICh0aGlzLm10b3AqMikgLy8rICh0aGlzLnNwYWNlc1sxXSAtIHRoaXMubXRvcCk7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICd0YWJsZScsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IHRvcDonKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7IGhlaWdodDphdXRvOyBib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7IGJvcmRlcjpub25lOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICd0YWJsZScsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0pKydweDsgYm9yZGVyOm5vbmU7JyApO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZCwgdGQsIHRyLCBzZWw7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IFtdOyBcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFggPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFkgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdHIgPSB0aGlzLmNbMl0uaW5zZXJ0Um93KCk7XHJcbiAgICAgICAgICAgIHRyLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG4gICAgICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGQgPSB0ci5pbnNlcnRDZWxsKCk7XHJcbiAgICAgICAgICAgICAgICB0ZC5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3Bvc2l0aW9uOnN0YXRpYzsgdG9wOjFweDsgd2lkdGg6Jyt0aGlzLmJzaXplWzBdKydweDsgaGVpZ2h0OicrKHRoaXMuYnNpemVbMV0tMikrJ3B4OyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBsZWZ0OmF1dG87IHJpZ2h0OmF1dG87IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JztcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b247XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgIGIuaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoIGIgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25zLnB1c2goYilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXQucHVzaCgxKVxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApXHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOnN0YXRpYzsgd2lkdGg6Jyt0aGlzLmJzaXplWzBdKydweDsgaGVpZ2h0OicrdGhpcy5ic2l6ZVsxXSsncHg7IHRleHQtYWxpZ246Y2VudGVyOyBsZWZ0OmF1dG87IHJpZ2h0OmF1dG87IGJhY2tncm91bmQ6bm9uZTsnXHJcbiAgICAgICAgICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoIGIgKVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZihqPT09MCkgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpyaWdodDsnO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OmxlZnQ7JztcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBuKys7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xO1xyXG5cclxuICAgICAgICBsLnkgKz0gdGhpcy5tdG9wXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IHR4ID0gdGhpcy50bXBYO1xyXG4gICAgICAgIGxldCB0eSA9IHRoaXMudG1wWTtcclxuXHJcbiAgICAgICAgbGV0IGlkID0gLTE7XHJcbiAgICAgICAgbGV0IGMgPSAtMTtcclxuICAgICAgICBsZXQgbGluZSA9IC0xO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5ncmlkWzBdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICBcdGlmKCBsLnggPiB0eFtpXVswXSAmJiBsLnggPCB0eFtpXVsxXSApIGMgPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaSA9IHRoaXMuZ3JpZFsxXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0eVtpXVswXSAmJiBsLnkgPCB0eVtpXVsxXSApIGxpbmUgPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoYyE9PS0xICYmIGxpbmUhPT0tMSl7XHJcbiAgICAgICAgICAgIGlkID0gYyArIChsaW5lKjIpO1xyXG4gICAgICAgICAgICBpZihpZD50aGlzLmxuZy0xKSBpZCA9IC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgdGhpcy5zZW5kKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIHRoaXMucmVzIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFx0dXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGUoIG4sIGkgKSApIHIgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLmJ1dHRvbnNcclxuICAgICAgICBsZXQgaSA9IGlkXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS50ZXh0Q29udGVudCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSwgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnN0eWxlLnBhZGRpbmcgPSAoIHkgfHwgMCApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0VyAoKSB7XHJcblxyXG4gICAgICAgIGxldCB2dyA9IHRoaXMuc3BhY2VzWzBdKjMgKyB0aGlzLmJzaXplTWF4KjIsIHJ6ID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHZ3ID4gdGhpcy53ICkge1xyXG4gICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gKCB0aGlzLnctKHRoaXMuc3BhY2VzWzBdKjMpICkgKiAwLjU7XHJcbiAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggdGhpcy5ic2l6ZVswXSAhPT0gdGhpcy5ic2l6ZU1heCApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSB0aGlzLmJzaXplTWF4O1xyXG4gICAgICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIXJ6ICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuYnV0dG9ucy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmJ1dHRvbnNbaV0uc3R5bGUud2lkdGggPSB0aGlzLmJzaXplWzBdICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnRlc3RXKCk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkO1xyXG5cclxuICAgICAgICB0aGlzLnRtcFggPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFkgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgaWYoaj09PTApe1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgLSAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLXRoaXMuYnNpemVbMF0sIG1pZCBdICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSArICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQsIG1pZCt0aGlzLmJzaXplWzBdIF0gKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1pZCA9IHRoaXMuc3BhY2VzWzFdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRtcFkucHVzaCggWyBtaWQsIG1pZCArIHRoaXMuYnNpemVbMV0gXSApO1xyXG4gICAgICAgICAgICBtaWQgKz0gdGhpcy5ic2l6ZVsxXSArIHRoaXMuc3BhY2VzWzFdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFkMkQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgLy90aGlzLm1hcmdpbiA9IDE1O1xyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKDAsMCk7XHJcbiAgICAgICAgdGhpcy5tYXhQb3MgPSA5MFxyXG5cclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMubWluID0gby5taW4gPT09IHVuZGVmaW5lZCA/IC0xIDogby5taW47XHJcbiAgICAgICAgdGhpcy5tYXggPSBvLm1heCA9PT0gdW5kZWZpbmVkID8gMSA6IG8ubWF4O1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gKHRoaXMubWF4IC0gdGhpcy5taW4pKjAuNTsgIFxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5yYW5nZSlcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIFxyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IDIgOiBvLnByZWNpc2lvbjtcclxuXHJcbiAgICAgICAgLyp0aGlzLmJvdW5kcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngxID0gby54MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MiA9IG8ueDIgfHwgMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MSA9IG8ueTEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTIgPSBvLnkyIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMubGVycFggPSB0aGlzLmxlcnAoIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiAsIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiApO1xyXG4gICAgICAgIHRoaXMubGVycFkgPSB0aGlzLmxlcnAoIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiAsIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiApO1xyXG5cclxuICAgICAgICB0aGlzLmFsZXJwWCA9IHRoaXMubGVycCggdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyLCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gKTtcclxuICAgICAgICB0aGlzLmFsZXJwWSA9IHRoaXMubGVycCggdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyLCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gKTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gKCBBcnJheS5pc0FycmF5KCBvLnZhbHVlICkgJiYgby52YWx1ZS5sZW5ndGggPT0gMiApID8gby52YWx1ZSA6IFsgMCwgMCBdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsgJ3B4JztcclxuXHJcbiAgICAgICAgLy8gVGl0bGVcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMudG9wIC09IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cclxuICAgICAgICAvLyBWYWx1ZVxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyAoIHRoaXMuaCAtIDIwICkgKyAncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicgKyBjYy50ZXh0ICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gUGFkXHJcblxyXG4gICAgICAgIGxldCBwYWQgPSB0aGlzLmdldFBhZDJkKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDIgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggcGFkLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gcGFkXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSgpXHJcblxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG5cclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ3BhZCc7XHJcblxyXG4gICAgICAgIC8qaWYoICggbC54ID49IHRoaXMubWFyZ2luICkgJiYgKCBsLnggPD0gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA+PSB0aGlzLnRvcCArIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPD0gdGhpcy50b3AgKyB0aGlzLncgLSB0aGlzLm1hcmdpbiApICkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BhZCc7XHJcbiAgICAgICAgfSovXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9yZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy50ZXN0Wm9uZShlKSA9PT0gJ3BhZCcgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgeCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKVxyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGxldCByID0gMjU2IC8gdGhpcy5kaWFtXHJcblxyXG4gICAgICAgIHggPSAtKHgqcilcclxuICAgICAgICB5ID0gLSh5KnIpXHJcblxyXG4gICAgICAgIHggPSBUb29scy5jbGFtcCggeCwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcbiAgICAgICAgeSA9IFRvb2xzLmNsYW1wKCB5LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuXHJcbiAgICAgICAgLy9sZXQgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG4gICAgICAgIC8vbGV0IHkgPSBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wO1xyXG5cclxuICAgICAgICAvKmlmKCB4IDwgdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHggPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHggPSB0aGlzLncgLSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA8IHRoaXMubWFyZ2luICkgeSA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47Ki9cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh4LHkpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zKCBbIHggLCB5IF0gKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5iYWNrLCAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5iYWNrb2ZmLCAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5vdmVyb2ZmLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0U2VsZWN0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICAvL2lmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcoKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA9PSAxICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kxJywgdGhpcy5wb3MueSwgMiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTInLCB0aGlzLnBvcy55LCAyICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDEnLCB0aGlzLnBvcy54LCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MicsIHRoaXMucG9zLngsIDMgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB0aGlzLnBvcy54LCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgdGhpcy5wb3MueSwgNCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRQb3MgKCBwICkge1xyXG5cclxuICAgICAgICAvL2lmKCBwID09PSB1bmRlZmluZWQgKSBwID0gWyB0aGlzLncgLyAyLCB0aGlzLncgLyAyIF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggcFswXSsxMjggLCBwWzFdKzEyOCApO1xyXG5cclxuICAgICAgICBsZXQgciA9IDEvdGhpcy5tYXhQb3NcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9ICgocFswXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAoKHBbMV0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2LCB1cCA9IGZhbHNlICkge1xyXG5cclxuICAgICAgICBpZiggdiA9PT0gdW5kZWZpbmVkICkgdiA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8qaWYgKCB2WzBdIDwgdGhpcy5ib3VuZHMueDEgKSB2WzBdID0gdGhpcy5ib3VuZHMueDE7XHJcbiAgICAgICAgaWYgKCB2WzBdID4gdGhpcy5ib3VuZHMueDIgKSB2WzBdID0gdGhpcy5ib3VuZHMueDI7XHJcbiAgICAgICAgaWYgKCB2WzFdIDwgdGhpcy5ib3VuZHMueTEgKSB2WzFdID0gdGhpcy5ib3VuZHMueTE7XHJcbiAgICAgICAgaWYgKCB2WzFdID4gdGhpcy5ib3VuZHMueTIgKSB2WzFdID0gdGhpcy5ib3VuZHMueTI7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzBdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMV0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoICgodGhpcy52YWx1ZVswXS90aGlzLnJhbmdlKSp0aGlzLm1heFBvcykrMTI4ICAsICgodGhpcy52YWx1ZVsxXS90aGlzLnJhbmdlKSp0aGlzLm1heFBvcykrMTI4IClcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnBvcylcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHVwICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qbGVycCggczEsIHMyLCBkMSwgZDIsIGMgPSB0cnVlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9ICggZDIgLSBkMSApIC8gKCBzMiAtIHMxICk7XHJcblxyXG4gICAgICAgIHJldHVybiBjID8gKCB2ICkgPT4geyBcclxuICAgICAgICAgICAgcmV0dXJuICggKCB2IDwgczEgPyBzMSA6IHYgPiBzMiA/IHMyIDogdiApIC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH0gOiAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgcmV0dXJuICggdiAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9XHJcblxyXG4gICAgfSovXHJcblxyXG59IiwiXHJcbmltcG9ydCB7IEJvb2wgfSBmcm9tICcuLi9wcm90by9Cb29sLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vcHJvdG8vQnV0dG9uLmpzJztcclxuaW1wb3J0IHsgQ2lyY3VsYXIgfSBmcm9tICcuLi9wcm90by9DaXJjdWxhci5qcyc7XHJcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnLi4vcHJvdG8vQ29sb3IuanMnO1xyXG5pbXBvcnQgeyBGcHMgfSBmcm9tICcuLi9wcm90by9GcHMuanMnO1xyXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL3Byb3RvL0dyYXBoLmpzJztcclxuaW1wb3J0IHsgR3JvdXAgIH0gZnJvbSAnLi4vcHJvdG8vR3JvdXAuanMnO1xyXG5pbXBvcnQgeyBKb3lzdGljayB9IGZyb20gJy4uL3Byb3RvL0pveXN0aWNrLmpzJztcclxuaW1wb3J0IHsgS25vYiB9IGZyb20gJy4uL3Byb3RvL0tub2IuanMnO1xyXG5pbXBvcnQgeyBMaXN0IH0gZnJvbSAnLi4vcHJvdG8vTGlzdC5qcyc7XHJcbmltcG9ydCB7IE51bWVyaWMgfSBmcm9tICcuLi9wcm90by9OdW1lcmljLmpzJztcclxuaW1wb3J0IHsgU2xpZGUgfSBmcm9tICcuLi9wcm90by9TbGlkZS5qcyc7XHJcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gJy4uL3Byb3RvL1RleHRJbnB1dC5qcyc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vcHJvdG8vVGl0bGUuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuLi9wcm90by9TZWxlY3QuanMnO1xyXG5pbXBvcnQgeyBCaXRtYXAgfSBmcm9tICcuLi9wcm90by9CaXRtYXAuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdG9yLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuLi9wcm90by9FbXB0eS5qcyc7XHJcbmltcG9ydCB7IEl0ZW0gfSBmcm9tICcuLi9wcm90by9JdGVtLmpzJztcclxuaW1wb3J0IHsgR3JpZCB9IGZyb20gJy4uL3Byb3RvL0dyaWQuanMnO1xyXG5pbXBvcnQgeyBQYWQyRCB9IGZyb20gJy4uL3Byb3RvL1BhZDJELmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0VBQUE7RUFDQTtFQUNBO0FBQ0E7QUFDWSxRQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLE1BQU0sQ0FBQyxHQUFHO0VBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0VBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0VBQ0EsRUFBRSxFQUFFLEVBQUUsSUFBSTtFQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUs7RUFDYixFQUFFLEtBQUssRUFBRSxLQUFLO0VBQ2QsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7RUFDQSxFQUFFLFVBQVUsRUFBRSxJQUFJO0VBQ2xCLEVBQUUsVUFBVSxFQUFFLEtBQUs7RUFDbkIsRUFBRSxTQUFTLEVBQUUsS0FBSztFQUNsQixFQUFFLFlBQVksRUFBRSxLQUFLO0VBQ3JCLEVB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QSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDM0QsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDOUIsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtFQUN2QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTTtFQUN2QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUM7RUFDZixNQUFNLENBQUM7RUFDUCxNQUFNLENBQUM7RUFDUCxNQUFNLENBQUMsQ0FBQztBQUNSO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEI7RUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRTtFQUMxQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUN0QixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUN0QixPQUFPLE1BQU07RUFDYixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO0VBQ3RCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7RUFDdEIsT0FBTztBQUNQO0VBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtFQUM3QixRQUFRLElBQUksR0FBRyxDQUFDLENBQUM7QUFDakI7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUU7RUFDaEMsVUFBVSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDekIsVUFBVSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUMzQixVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ25CLFNBQVM7RUFDVCxRQUFRLE1BQU07RUFDZCxPQUFPO0VBQ1AsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDcEMsR0FBRztBQUNIO0VBQ0EsRUFBRSxVQUFVLEVBQUUsWUFBWTtFQUMxQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU87RUFDdEIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ25CLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNqQixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ2hCLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ2YsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxLQUFLLEtBQUs7RUFDN0M7QUFDQTtFQUNBLElBQU8sSUFBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztFQUN2QixNQUFNLENBQUMsQ0FBQztFQUNSLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNiLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLE1BQU0sRUFBRSxDQUFDO0VBQ1QsTUFBTSxDQUFDLENBQUMsQ0FDRTtBQUNWO0VBQ0EsSUFBSSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkI7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDaEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2pCLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVjtFQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzQztFQUNBLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7RUFDbkI7QUFDQTtFQUNBLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtFQUN4QixRQUFRLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEM7RUFDQSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQy9CLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3RCO0FBQ0E7RUFDQSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNCLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDcEMsYUFBYSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUU7RUFDMUIsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENB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QUMsRUFBRTtBQUMxQjtFQUNBLFFBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakg7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtFQUN0QixRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDckMsUUFBUSxPQUFPLENBQUMsQ0FBQztFQUNqQixLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7RUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztFQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0VBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7RUFDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ25CLFNBQVM7RUFDVCxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMs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RUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNySDtFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDN0ksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNB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RUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7RUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtFQUNBO0FBQ0E7RUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtFQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7RUFDQSxTQUFTLE1BQU07RUFDZjtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvRixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUs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RTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0VBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtFQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHO0FBQ2xHO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ25CO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7RUFDbEIsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdB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QUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7RUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7RUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0VBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztFQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ25DO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7RUFDakUsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztFQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFlBQVksS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxZ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LElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtFQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFDQUFxQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFFO0VBQ3BLLFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFDO0VBQ3RCLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMs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QUFDeEI7RUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUM7RUFDeEIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUM7RUFDdEIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUU7QUFDbEk7RUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUU7QUFDdEM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7RUFDekQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3REO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQzNFLFFBQVEsSUFBSSxD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QUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMvQixTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxHQUFHO0VBQ2xDO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNyRDtFQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztFQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYTtFQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztFQUN4QjtFQUNBLFNBQVM7RUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDbEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0MsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RDLFFBQVEsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xHO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0VBQ0Es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LFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7RUFDQSxTQUFTLE1BQU07QUFDZjtFQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7RUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0VBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDckM7RUFDQSxTQUFTLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUMvRCxTQUFTLElBQUksR0FBRyxJQUFJ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LElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtFQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7RUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0VBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztFQUN0QztFQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7RUFDdEM7RUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7RUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtFQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQ3hCO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFB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QyxHQUFHLENBQUMsQ0FBQztFQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7RUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBO0VBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVEO0VBQ0E7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7RUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDcEM7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7RUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztFQUM1QyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDckI7RUFDQSxFQUFFO0FBQ0Y7QUFDQTtFQUNBOztFQ3BhTyxNQUFNLEdBQUcsU0FBUyxLQUFLLENBQUM7QUFDL0I7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQztFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFF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QTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0VBQzdLO0FBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtEQUFrRCxFQUFFLENBQUM7QUFDMUo7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsMkVBQTJFLENBQUMsQ0FBQztBQUN0SjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0VBQ0E7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7RUFDOUI7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FB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QyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNoQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtFQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7RUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDcEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNy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QUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUN2RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQztFQUNBLEtBQUs7RUFDTDtFQUNBOztFQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0VBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztFQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQ7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0VBQ3hFLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDakQ7RUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0VBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQy9DLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtFQUN6RCxhQUFhO0VBQ2I7RUFDQTtFQUNBO0VBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0VBQ0E7QUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlEQUF5RCxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM1TDtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQ7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7RUFDdEosUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0gsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEo7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztFQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtFQUNyQyxZ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R0FBRztBQUNsQjtFQUNBLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFFO0VBQ3JDO0FBQ0E7RUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JDO0VBQ0EsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFDO0VBQzVDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNwQztFQUNBLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUc7RUFDMUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RCO0VBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0VBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztFQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0VBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtFQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtFQUNBLE1BQU07QUFDTjtFQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDO0VBQ2pELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUNsQjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSTtBQUM5QjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0M7RUFD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WSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRTtFQUMvQixTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDcEM7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0VBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtBQUN2QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDN0M7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBOztFQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztFQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7RUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87RUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7RUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0VBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDbkksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJ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R0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0VBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0VBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztFQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtFQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtFQUNBLGFBQWE7QUFDYjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7QUFDQTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7RUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0VBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFB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QU8sRUFBRSxDQUFDO0VBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0VBQ3pEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQzVGO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0VBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFF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LEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztFQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7RUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7RUFDOUI7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3JEO0VBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN4RCxhQUFhO0VBQ2I7RUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7RUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0VBQ3hCO0VBQ0EsU0FBUztFQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDekQsUUFBUSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDNUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDMUM7QUFDQTtFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixZQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDNUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLEtBQUssQ0FBQztFQUNyRCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3JELFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDMUIsU0FBUztBQUNUO0VBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHO0FBQzNDO0VBQ0EsWUFBWSxDQUFDLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUNoRCxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDaEQsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDOUQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztFQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNyRjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtFQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0VBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7RUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN6RDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUks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SUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDL0Q7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMvRDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2hFO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDakQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUMvQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzlDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztFQUN2RCxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztFQUMvRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7RUFDdkMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUN4QyxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHO0FBQzlCO0VBQ0EsWUFBWSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFDO0VBQzdELFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUM7RUFDcEQsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQztFQUNyRCxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDO0VBQ3pELFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVE7RUFDakQsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7RUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLFlBQVksSUFBSSxH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QUNiO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDMUIsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtFQUMvQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFFLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztFQUM1RixRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFFO0FBQzVEO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUU7RUFDaEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUNuQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDbEMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElB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LElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFH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QUssS0FBSyxDQUFDLEVBQUU7RUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDaEMsT0FBTztBQUNQO0VBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7RUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztFQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ3pDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFH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LENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtFQUNBO0VBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtFQUNBO0VBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0VBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7RUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0VBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7RUFDcEQsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzlDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNqRTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FB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SUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDeEQsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDNUQsUUFBUSxNQUFNO0VBQ2QsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtFQUNiLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ2hGO0FBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFB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QUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxJQUFJO0FBQ2Y7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0M7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDNUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztFQUMzQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQztBQUNyQztFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDO0VBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO0VBQ2hDLFFBQVEs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Q0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDaEQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7QUFDakQ7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDaEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDdkM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3BD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O0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztFQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEtBQUk7RUFDekMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksS0FBSTtFQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFJO0FBQ3RDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDdEtPLE1BQU0sTUFBTSxTQUFTLEtBQUssQ0FBQztBQUNsQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFFO0VBQ2xDLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQztFQUM1QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSTtBQUN2QjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFJO0FBQzdCO0FBQ0E7QUFDQTtFQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsdUJBQXVCLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw4Q0FBOEMsR0FBRTtBQUM3TTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxFQUFFLENBQUMsT0FBTyxHQUFHLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUU7RUFDNUwsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztFQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUN2TDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztFQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7RUFDOUQsUUFBUSxPQUFPLEdBQUc7QUFDbEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0VBQ2xCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDekI7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQ2hDO0VBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDdkMsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQ2pDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUU7RUFDN0IsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7RUFDOUIsWUFBWSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUU7QUFDbkU7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtFQUNBO0VBQ0E7RUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtFQUM3QixZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7RUFDbkMsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUU7RUFDakQsU0FBUyxNQUFNO0VBQ2YsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzlCLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxFQUFFLENBQUM7QUFDbEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxZQUFZLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtBQUM5QjtFQUNBLFFBQVEsSUFBSSxHQUFHLEVBQUU7RUFDakIsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUc7RUFDMUIsWUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRTtFQUMvQixTQUFTLE1BQU07RUFDZixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSTtFQUMzQixZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFFO0VBQ2hDLFNBQVM7RUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUc7RUFDL0IsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUMzQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUU7RUFDbkMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBQztFQUM5RSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDcEYsYUFBYTtFQUNiO0VBQ0EsU0FBUztFQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRztBQUNkO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3ZCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtFQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsTUFBSztFQUMxQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQzdCO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDekI7RUFDQSxZQUFZLFFBQVEsQ0FBQztBQUNyQjtFQUNBLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07RUFDL0YsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTTtFQUNwRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO0VBQ2pHLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07QUFDckc7RUFDQSxhQUFhO0FBQ2I7RUFDQSxZQUFZLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDMUI7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCO0FBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3RCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ2pEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7RUFDMUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDO0VBQzNDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN2QztFQUNBLEtBQUs7QUFDTDtFQUNBOztFQy9MQTtBQUVBO0VBQ08sTUFBTSxRQUFRLFNBQVMsTUFBTSxDQUFDO0FBQ3JDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUk7RUFDNUQsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDbkI7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNWTyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUM7QUFDaEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3JCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQzlCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEdBQUc7QUFDZDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRztFQUNkO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtFQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQy9CO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUM1QixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVDO0VBQ0EsWUFBWSxRQUFRLENBQUM7QUFDckI7RUFDQSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU07RUFDL0YsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtFQUNwRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FB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QUcsQ0FBQyxDQUFDLENBQUM7RUFDbkIsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RELFNBQVM7QUFDVDtFQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVELFNBQVM7QUFDVDtFQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEMsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ3ZCLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0VBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0VBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFFO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7RUFDN0IsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQztFQUNsQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0VBQzVELFNBQVMsTUFBTTtFQUNmLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FB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Q0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0VBQ0EsWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDckIsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUM3RCxhQUFhLE1BQU07RUFDbkIsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUM3RCxhQUFhO0FBQ2I7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsRDtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0VBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztFQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztFQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM5RjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztFQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztFQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FB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bEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0VBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7RUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxRQUFRLElBQUk7RUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztFQUMzRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBQztFQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztFQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztFQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUM5RDtFQUNBLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtFQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0VBQ2hELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFFO0VBQ3BFO0VBQ0EsWUFBWSxNQUFNO0VBQ2xCLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7RUFDQTtBQUNB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QUMsTUFBTTtFQUNsRCxZQUFZLEtBQUssS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDOUMsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ2xELFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNsRCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDeEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ2hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNoRCxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNyRSxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDbEQsWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDekUsWUFBWSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDL0QsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxN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O0VBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0VBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztBQUM1QztFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNwRTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0VBQzNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2Y7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3ZFO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7RUFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTTtFQUNmLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFD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QyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0VBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0VBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDaEQsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3pCLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtFQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FB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 diff --git a/build/uil.module.js b/build/uil.module.js index 287818d..fadb43a 100644 --- a/build/uil.module.js +++ b/build/uil.module.js @@ -1,6 +1,9050 @@ -/** - * @license - * Copyright 2010-2021 Uil.js Authors - * SPDX-License-Identifier: MIT - */ -const t="4.3.0",s={ui:[],dom:null,ID:null,lock:!1,wlock:!1,current:-1,needReZone:!0,needResize:!1,forceZone:!1,isEventsInit:!1,isLeave:!1,addDOMEventListeners:!0,downTime:0,prevTime:0,prevDefault:["contextmenu"],pointerEvent:["pointerdown","pointermove","pointerup"],eventOut:["pointercancel","pointerout","pointerleave"],xmlserializer:null,tmpTime:null,tmpImage:null,oldCursor:"auto",input:null,parent:null,firstImput:!0,hiddenImput:null,hiddenSizer:null,hasFocus:!1,startInput:!1,inputRange:[0,0],cursorId:0,str:"",pos:0,startX:-1,moveX:-1,debugInput:!1,isLoop:!1,listens:[],e:{type:null,clientX:0,clientY:0,keyCode:NaN,key:null,delta:0},isMobile:!1,now:null,getTime:function(){return self.performance&&self.performance.now?self.performance.now.bind(performance):Date.now},add:function(t){s.ui.push(t),s.getZone(t),s.isEventsInit||s.initEvents()},testMobile:function(){let t=navigator.userAgent;return!!(t.match(/Android/i)||t.match(/webOS/i)||t.match(/iPhone/i)||t.match(/iPad/i)||t.match(/iPod/i)||t.match(/BlackBerry/i)||t.match(/Windows Phone/i))},remove:function(t){let i=s.ui.indexOf(t);-1!==i&&(s.removeListen(t),s.ui.splice(i,1)),0===s.ui.length&&s.removeEvents()},initEvents:function(){if(s.isEventsInit)return;let t=document.body;s.isMobile=s.testMobile(),s.now=s.getTime(),s.isMobile?t.style.touchAction="none":t.addEventListener("wheel",s,{passive:!1}),console.log("R.addDOMEventListeners "+s.addDOMEventListeners),s.addDOMEventListeners&&(t.addEventListener("pointercancel",s),t.addEventListener("pointerleave",s),t.addEventListener("pointermove",s),t.addEventListener("pointerdown",s),t.addEventListener("pointerup",s),t.addEventListener("keydown",s,!1),t.addEventListener("keyup",s,!1)),window.addEventListener("resize",s.resize,!1),s.isEventsInit=!0,s.dom=t},removeEvents:function(){if(!s.isEventsInit)return;let t=document.body;s.isMobile||t.removeEventListener("wheel",s),s.addDOMEventListeners&&(t.removeEventListener("pointercancel",s),t.removeEventListener("pointerleave",s),t.removeEventListener("pointermove",s),t.removeEventListener("pointerdown",s),t.removeEventListener("pointerup",s),t.removeEventListener("keydown",s),t.removeEventListener("keyup",s)),window.removeEventListener("resize",s.resize),s.isEventsInit=!1},resize:function(){let t,i=s.ui.length;for(;i--;)t=s.ui[i],t.isGui&&!t.isCanvasOnly&&t.autoResize&&t.calc();s.needReZone=!0,s.needResize=!1},out:function(){console.log("im am out"),s.clearOldID()},in:function(){console.log("im am in")},fakeUp:function(){this.handleEvent({type:"pointerup"})},handleEvent:function(t){-1!==s.prevDefault.indexOf(t.type)&&t.preventDefault(),s.needResize&&s.resize(),s.findZone(s.forceZone);let i=s.e,e=!1;"keydown"===t.type&&s.keydown(t),"keyup"===t.type&&s.keyup(t),"wheel"===t.type?i.delta=t.deltaY>0?1:-1:i.delta=0;let h=t.pointerType;if(i.clientX=("touch"===h?t.pageX:t.clientX)||0,i.clientY=("touch"===h?t.pageY:t.clientY)||0,i.type=t.type,-1!==s.eventOut.indexOf(t.type)&&(e=!0,i.type="mouseup"),"pointerleave"===t.type&&(s.isLeave=!0),"pointerdown"===t.type&&(i.type="mousedown"),"pointerup"===t.type&&(i.type="mouseup"),"pointermove"===t.type&&(s.isLeave&&(s.isLeave=!1,s.resize()),i.type="mousemove"),"mousedown"===i.type){if(s.downTime=s.now(),s.downTime-s.prevTime<200)return s.selectAll(),!1;s.prevTime=s.downTime,s.forceZone=!1}"mousedown"===i.type&&s.clearInput(),"mousedown"===i.type&&(s.lock=!0),"mouseup"===i.type&&(s.lock=!1),s.isMobile&&"mousedown"===i.type&&s.findID(i),"mousemove"!==i.type||s.lock||s.findID(i),null!==s.ID&&(s.ID.isCanvasOnly&&(i.clientX=s.ID.mouse.x,i.clientY=s.ID.mouse.y),s.ID.handleEvent(i)),s.isMobile&&"mouseup"===i.type&&s.clearOldID(),e&&s.clearOldID()},findID:function(t){let i,e,h,o=s.ui.length,n=-1;for(;o--;)if(i=s.ui[o],i.isCanvasOnly?(e=i.mouse.x,h=i.mouse.y):(e=t.clientX,h=t.clientY),s.onZone(i,e,h)){n=o,n!==s.current&&(s.clearOldID(),s.current=n,s.ID=i);break}-1===n&&s.clearOldID()},clearOldID:function(){s.ID&&(s.current=-1,s.ID.reset(),s.ID=null,s.cursor())},calcUis:(t,i,e,h=!1)=>{let o,n,r,l=t.length,a=0,c=0,d=0;for(;l--;)o=t[c],c++,!h&&o.isGroup&&o.calcUis(),r=o.margin,o.zone.w=o.w,o.zone.h=o.h+r,o.autoWidth?(a=0,o.zone.x=i.x+o.dx,o.zone.y=e,e+=o.h+r,d+=o.h+r):(0===a&&(d+=o.h+r),o.zone.x=i.x+a,o.zone.y=e,n=s.getWidth(o),n?o.zone.w=o.w=n:o.fw&&(o.zone.w=o.w=o.fw),a+=o.zone.w,a>=i.w&&(e+=o.h+r,a=0));return d},findTarget:function(t,i){let e=t.length;for(;e--;)if(s.onZone(t[e],i.clientX,i.clientY))return e;return-1},findZone:function(t){if(s.needReZone||t){for(var i,e=s.ui.length;e--;)i=s.ui[e],s.getZone(i),i.isGui&&i.calcUis();s.needReZone=!1}},onZone:function(t,s,i){if(void 0===s||void 0===i)return!1;let e=t.zone,h=s-e.x,o=i-e.y,n=h>=0&&o>=0&&h<=e.w&&o<=e.h;return n?t.local.set(h,o):t.local.neg(),n},getWidth:function(t){return t.getDom().clientWidth},getZone:function(t){if(t.isCanvasOnly)return;let s=t.getDom().getBoundingClientRect();t.zone={x:s.left,y:s.top,w:s.width,h:s.height}},cursor:function(t){(t=t||"auto")!==s.oldCursor&&(document.body.style.cursor=t,s.oldCursor=t)},toCanvas:function(t,i,e,h){if(s.xmlserializer||(s.xmlserializer=new XMLSerializer),h&&null!==s.tmpTime&&(clearTimeout(s.tmpTime),s.tmpTime=null),null!==s.tmpTime)return;s.lock&&(s.tmpTime=setTimeout((function(){s.tmpTime=null}),10));let o=!1;i===t.canvas.width&&e===t.canvas.height||(o=!0),null===s.tmpImage&&(s.tmpImage=new Image);let n=s.tmpImage,r=s.xmlserializer.serializeToString(t.content),l=''+r+"";n.onload=function(){let s=t.canvas.getContext("2d");o?(t.canvas.width=i,t.canvas.height=e):s.clearRect(0,0,i,e),s.drawImage(this,0,0),t.onDraw()},n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(l),n.crossOrigin=""},setHidden:function(){null===s.hiddenImput&&(s.hiddenImput=document.createElement("input"),s.hiddenImput.type="text",s.hiddenSizer=document.createElement("div"),document.body.appendChild(s.hiddenImput),document.body.appendChild(s.hiddenSizer));let t=s.debugInput?"":"opacity:0; zIndex:0;",i=s.parent.css.txtselect+"padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;"+t;s.hiddenImput.style.cssText=i+"bottom:10px;"+(s.debugInput?"":"transform:scale(0);"),s.hiddenSizer.style.cssText=i+"bottom:40px;",s.hiddenImput.style.width=s.input.clientWidth+"px",s.hiddenImput.value=s.str,s.hiddenSizer.innerHTML=s.str,s.hasFocus=!0},clearHidden:function(t){null!==s.hiddenImput&&(s.hasFocus=!1)},clickPos:function(t){let i=s.str.length,e=0,h=0;for(;i--&&(e+=s.textWidth(s.str[h]),!(e>=t));)h++;return h},upInput:function(t,i){if(null===s.parent)return!1;let e=!1;if(i){let i=s.clickPos(t);if(s.moveX=i,-1===s.startX)s.startX=i,s.cursorId=i,s.inputRange=[s.startX,s.startX];else{s.moveX!==s.startX&&(s.startX>s.moveX?s.inputRange=[s.moveX,s.startX]:s.inputRange=[s.startX,s.moveX])}e=!0}else-1!==s.startX&&(s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.startX=-1,e=!0);return e&&s.selectParent(),e},selectAll:function(){s.parent&&(s.str=s.input.textContent,s.inputRange=[0,s.str.length],s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.cursorId=s.inputRange[1],s.selectParent())},selectParent:function(){var t=s.textWidth(s.str.substring(0,s.cursorId)),i=s.textWidth(s.str.substring(0,s.inputRange[0])),e=s.textWidth(s.str.substring(s.inputRange[0],s.inputRange[1]));s.parent.select(t,i,e,s.hiddenSizer.innerHTML)},textWidth:function(t){return null===s.hiddenSizer?0:(t=t.replace(/ /g," "),s.hiddenSizer.innerHTML=t,s.hiddenSizer.clientWidth)},clearInput:function(){null!==s.parent&&(s.firstImput||s.parent.validate(!0),s.clearHidden(),s.parent.unselect(),s.input.style.background=s.parent.colors.back,s.input.style.borderColor=s.parent.colors.border,s.parent.isEdit=!1,s.input=null,s.parent=null,s.str="",s.firstImput=!0)},setInput:function(t,i){s.clearInput(),s.input=t,s.parent=i,s.input.style.background=s.parent.colors.backoff,s.input.style.borderColor=s.parent.colors.select,s.str=s.input.textContent,s.setHidden()},keydown:function(t){if(null===s.parent)return;let i=t.which;t.shiftKey,s.firstImput=!1,s.hasFocus&&(window.focus(),s.hiddenImput.focus()),s.parent.isEdit=!0,13===i?s.clearInput():s.input.isNum?t.keyCode>47&&t.keyCode<58||t.keyCode>95&&t.keyCode<106||190===t.keyCode||110===t.keyCode||8===t.keyCode||109===t.keyCode?s.hiddenImput.readOnly=!1:s.hiddenImput.readOnly=!0:s.hiddenImput.readOnly=!1},keyup:function(t){null!==s.parent&&(s.str=s.hiddenImput.value,s.parent.allEqual?s.parent.sameStr(s.str):s.input.textContent=s.str,s.cursorId=s.hiddenImput.selectionStart,s.inputRange=[s.hiddenImput.selectionStart,s.hiddenImput.selectionEnd],s.selectParent(),s.parent.validate())},loop:function(){s.isLoop&&requestAnimationFrame(s.loop),s.update()},update:function(){let t=s.listens.length;for(;t--;)s.listens[t].listening()},removeListen:function(t){let i=s.listens.indexOf(t);-1!==i&&s.listens.splice(i,1),0===s.listens.length&&(s.isLoop=!1)},addListen:function(t){return-1===s.listens.indexOf(t)&&(s.listens.push(t),s.isLoop||(s.isLoop=!0,s.loop()),!0)}},i=s,e={transition:.2,frag:document.createDocumentFragment(),colorRing:null,joystick_0:null,joystick_1:null,circular:null,knob:null,pad2d:null,svgns:"http://www.w3.org/2000/svg",links:"http://www.w3.org/1999/xlink",htmls:"http://www.w3.org/1999/xhtml",DOM_SIZE:["height","width","top","left","bottom","right","margin-left","margin-right","margin-top","margin-bottom"],SVG_TYPE_D:["pattern","defs","transform","stop","animate","radialGradient","linearGradient","animateMotion","use","filter","feColorMatrix"],SVG_TYPE_G:["svg","rect","circle","path","polygon","text","g","line","foreignObject"],PI:Math.PI,TwoPI:2*Math.PI,pi90:.5*Math.PI,pi60:Math.PI/3,torad:Math.PI/180,todeg:180/Math.PI,clamp:(t,s,i)=>t=(t=ti?i:t,isDivid:t=>.5*t===Math.floor(.5*t),size:{w:240,h:20,p:30,s:8},defineColor:(t,s=e.colors)=>{let i={...s},h=["fontFamily","fontWeight","fontShadow","fontSize"],o=!1;t.font&&(t.fontFamily=t.font),t.shadow&&(t.fontShadow=t.shadow),t.weight&&(t.fontWeight=t.weight),t.fontColor&&(t.text=t.fontColor),t.color&&(t.text=t.color),t.text&&(i.text=t.text,t.fontColor||t.color||(i.title=e.ColorLuma(t.text,-.25),i.titleoff=e.ColorLuma(t.text,-.5)),i.textOver=e.ColorLuma(t.text,.25),i.textSelect=e.ColorLuma(t.text,.5)),t.button&&(i.button=t.button,i.border=e.ColorLuma(t.button,.1),i.overoff=e.ColorLuma(t.button,.2)),t.select&&(i.select=t.select,i.over=e.ColorLuma(t.select,-.1)),t.itemBg&&(t.back=t.itemBg),t.back&&(i.back=t.back,i.backoff=e.ColorLuma(t.back,-.1)),t.fontSelect&&(i.textSelect=t.fontSelect),t.groupBorder&&(i.gborder=t.groupBorder),t.bgOver&&(i.backgroundOver=t.bgOver);for(let s in i)void 0!==t[s]&&(i[s]=t[s]);for(let s in t)-1!==h.indexOf(s)&&(o=!0);return o&&e.defineText(i),i},colors:{sx:4,sy:2,radius:2,showOver:1,content:"none",background:"rgba(50,50,50,0.15)",backgroundOver:"rgba(50,50,50,0.3)",title:"#CCC",titleoff:"#BBB",text:"#DDD",textOver:"#EEE",textSelect:"#FFF",back:"rgba(0,0,0,0.2)",backoff:"rgba(0,0,0,0.3)",border:"#4c4c4c",borderSize:1,gborder:"none",groups:"none",button:"#3c3c3c",overoff:"#5c5c5c",over:"#024699",select:"#308AFF",action:"#FF3300",fontFamily:"Consolas, monospace",fontWeight:"normal",fontShadow:"none",fontSize:12,joyOver:"rgba(48,138,255,0.25)",joyOut:"rgba(100,100,100,0.5)",joySelect:"#308AFF",hide:"rgba(0,0,0,0)"},css:{basic:"position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; -o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;",button:"display:flex; align-items:center; justify-content:center; text-align:center;",middle:"display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;"},svgs:{g1:"M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z",g2:"M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z",group:"M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z",arrow:"M 3 8 L 8 5 3 2 3 8 Z",arrowDown:"M 5 8 L 8 3 2 3 5 8 Z",arrowUp:"M 5 2 L 2 7 8 7 5 2 Z",solid:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z",body:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z",vehicle:"M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z",articulation:"M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z",character:"M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z",terrain:"M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z",joint:"M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z",ray:"M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z",collision:"M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z",map:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",material:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",texture:"M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z",object:"M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z",none:"M 9 5 L 5 5 5 9 9 9 9 5 Z",cursor:"M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z",load:"M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z",save:"M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z",extern:"M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z"},rezone(){i.needReZone=!0},getImput:function(){return!!i.input},setStyle:function(t){for(var s in t)e.colors[s]&&(e.colors[s]=t[s]);e.setText()},defineText:function(t){e.setText(t.fontSize,t.text,t.fontFamily,t.fontShadow,t.fontWeight)},setText:function(t,s,i,h,o){let n=e.colors;void 0===i&&(i=n.fontFamily),void 0===t&&(t=n.fontSize),void 0===h&&(h=n.fontShadow),void 0===o&&(o=n.fontWeight),void 0===s&&(s=n.text),isNaN(t)?-1===t.search("em")&&(t+="px"):t+="px",e.css.txt=e.css.basic+e.css.middle+" font-family:"+i+"; font-weight:"+o+"; font-size:"+t+"; color:"+n.text+"; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;","none"!==h&&(e.css.txt+=" text-shadow: 1px 1px 1px "+h+";"),e.css.txtselect=e.css.txt+"padding:0px 4px; border:1px dashed "+n.border+";",e.css.item=e.css.txt+"padding:0px 4px; position:relative; margin-bottom:1px; "},cloneCss:function(){return{...e.css}},clone:function(t){return t.cloneNode(!0)},setSvg:function(t,s,i,e,h){-1===e?t.setAttributeNS(null,s,i):void 0!==h?t.childNodes[e||0].childNodes[h||0].setAttributeNS(null,s,i):t.childNodes[e||0].setAttributeNS(null,s,i)},setCss:function(t,s){for(let i in s)-1!==e.DOM_SIZE.indexOf(i)?t.style[i]=s[i]+"px":t.style[i]=s[i]},set:function(t,s){for(let i in s)"txt"===i&&(t.textContent=s[i]),"link"===i?t.setAttributeNS(e.links,"xlink:href",s[i]):t.setAttributeNS(null,i,s[i])},get:function(t,s){if(void 0===s)return t;if(!isNaN(s))return t.childNodes[s];if(s instanceof Array){if(2===s.length)return t.childNodes[s[0]].childNodes[s[1]];if(3===s.length)return t.childNodes[s[0]].childNodes[s[1]].childNodes[s[2]]}},dom:function(t,s,i,h,o){return t=t||"div",-1!==e.SVG_TYPE_D.indexOf(t)||-1!==e.SVG_TYPE_G.indexOf(t)?"svg"===t?(h=document.createElementNS(e.svgns,"svg"),e.set(h,i)):(void 0===h&&(h=document.createElementNS(e.svgns,"svg")),e.addAttributes(h,t,i,o)):h=void 0===h?document.createElementNS(e.htmls,t):h.appendChild(document.createElementNS(e.htmls,t)),s&&(h.style.cssText=s),void 0===o?h:h.childNodes[o||0]},addAttributes:function(t,s,i,h){let o=document.createElementNS(e.svgns,s);return e.set(o,i),e.get(t,h).appendChild(o),-1!==e.SVG_TYPE_G.indexOf(s)&&(o.style.pointerEvents="none"),o},clear:function(t){for(e.purge(t);t.firstChild;)t.firstChild.firstChild&&e.clear(t.firstChild),t.removeChild(t.firstChild)},purge:function(t){let s,i,h=t.attributes;if(h)for(s=h.length;s--;)i=h[s].name,"function"==typeof t[i]&&(t[i]=null);if(h=t.childNodes,h)for(s=h.length;s--;)e.purge(t.childNodes[s])},addSVGGlowEffect:function(){if(null!==document.getElementById("UILGlow"))return;let t=e.initUILEffects(),s=e.addAttributes(t,"filter",{id:"UILGlow",x:"-20%",y:"-20%",width:"140%",height:"140%"});e.addAttributes(s,"feGaussianBlur",{in:"SourceGraphic",stdDeviation:"3",result:"uilBlur"});let i=e.addAttributes(s,"feMerge",{});for(let t=0;t<=3;t++)e.addAttributes(i,"feMergeNode",{in:"uilBlur"});e.addAttributes(i,"feMergeNode",{in:"SourceGraphic"})},initUILEffects:function(){let t=document.getElementById("UILSVGEffects");return null===t&&(t=e.dom("svg",void 0,{id:"UILSVGEffects",width:"0",height:"0"}),document.body.appendChild(t)),t},ColorLuma:function(t,s){"n"===t&&(t="#000"),(t=String(t).replace(/[^0-9a-f]/gi,"")).length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),s=s||0;let i,e,h="#";for(e=0;e<3;e++)i=parseInt(t.substr(2*e,2),16),i=Math.round(Math.min(Math.max(0,i+i*s),255)).toString(16),h+=("00"+i).substr(i.length);return h},findDeepInver:function(t){return.3*t[0]+.59*t[1]+.11*t[2]<=.6},lerpColor:function(t,s,i){let e={};for(let h=0;h<3;h++)e[h]=t[h]+(s[h]-t[h])*i;return e},hexToHtml:function(t){return"#"+("000000"+(t=void 0===t?0:t).toString(16)).substr(-6)},htmlToHex:function(t){return t.toUpperCase().replace("#","0x")},u255:function(t,s){return parseInt(t.substring(s,s+2),16)/255},u16:function(t,s){return parseInt(t.substring(s,s+1),16)/15},unpack:function(t){return 7==t.length?[e.u255(t,1),e.u255(t,3),e.u255(t,5)]:4==t.length?[e.u16(t,1),e.u16(t,2),e.u16(t,3)]:void 0},p255:function(t){let s=Math.round(255*t).toString(16);return s.length<2&&(s="0"+s),s},pack:function(t){return"#"+e.p255(t[0])+e.p255(t[1])+e.p255(t[2])},htmlRgb:function(t){return"rgb("+Math.round(255*t[0])+","+Math.round(255*t[1])+","+Math.round(255*t[2])+")"},pad:function(t){return 1==t.length&&(t="0"+t),t},rgbToHex:function(t){let s=Math.round(255*t[0]).toString(16),i=Math.round(255*t[1]).toString(16),h=Math.round(255*t[2]).toString(16);return"#"+e.pad(s)+e.pad(i)+e.pad(h)},hueToRgb:function(t,s,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(s-t)*i:i<.5?s:i<2/3?t+6*(s-t)*(2/3-i):t},rgbToHsl:function(t){let s=t[0],i=t[1],e=t[2],h=Math.min(s,i,e),o=Math.max(s,i,e),n=o-h,r=0,l=0,a=(h+o)/2;return a>0&&a<1&&(l=n/(a<.5?2*a:2-2*a)),n>0&&(o==s&&o!=i&&(r+=(i-e)/n),o==i&&o!=e&&(r+=2+(e-s)/n),o==e&&o!=s&&(r+=4+(s-i)/n),r/=6),[r,l,a]},hslToRgb:function(t){let s,i,h=t[0],o=t[1],n=t[2];return 0===o?[n,n,n]:(i=n<=.5?n*(o+1):n+o-n*o,s=2*n-i,[e.hueToRgb(s,i,h+.33333),e.hueToRgb(s,i,h),e.hueToRgb(s,i,h-.33333)])},makeGradiant:function(t,s,i,h){e.dom(t,null,s,i,0);let o,n=i.childNodes[0].childNodes.length-1;for(let t=0;t0){for(a=6;a--;)r[a]=(113*r[a]+u).toFixed(2);c=" M"+r[0]+" "+r[1]+" Q"+r[2]+" "+r[3]+" "+r[4]+" "+r[5],d=[[0,g[0],1],[100,g[1],1]],e.makeGradiant("linearGradient",{id:"G"+l,x1:r[0],y1:r[1],x2:r[4],y2:r[5],gradientUnits:"userSpaceOnUse"},s,d),e.dom("path","",{d:c,"stroke-width":30,stroke:"url(#G"+l+")","stroke-linecap":"butt"},s,1)}m=n-p,g[0]=g[1]}d=[[0,"#FFFFFF",1],[50,"#FFFFFF",0],[50,"#000000",0],[100,"#000000",1]],e.makeGradiant("linearGradient",{id:"GL0",x1:0,y1:u-84.9,x2:0,y2:212.9,gradientUnits:"userSpaceOnUse"},s,d),d=[[0,"#7f7f7f",1],[50,"#7f7f7f",.5],[100,"#7f7f7f",0]],e.makeGradiant("linearGradient",{id:"GL1",x1:78.95,y1:0,x2:226,y2:0,gradientUnits:"userSpaceOnUse"},s,d),e.dom("g",null,{"transform-origin":"128px 128px",transform:"rotate(0)"},s),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"red"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL1)","stroke-width":1,stroke:"url(#GL1)"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL0)","stroke-width":1,stroke:"url(#GL0)"},s,2),e.dom("path","",{d:"M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z",fill:"none","stroke-width":2,stroke:"#000"},s,2),e.dom("circle","",{cx:128,cy:128,r:6,"stroke-width":2,stroke:"#000",fill:"none"},s),e.colorRing=s},icon:function(t,s,i){i=i||40;let h=[""];switch(t){case"logo":h[1]="";break;case"donate":h[1]="";break;case"neo":h[1]="";break;case"phy":h[1]="";break;case"config":h[1]="";break;case"github":h[1]="";break;case"save":h[1]=""}return h[2]="",h.join("\n")},logoFill_d:"\n M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 \n L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 \n M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 \n Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z\n ",logo_github:"\n M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 \n 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 \n 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 \n 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 \n 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z\n ",logo_neo:"\n M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 \n 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 \n 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 \n 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L \n 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z\n ",logo_phy:"\n M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 \n Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95\n ",logo_config:"\n M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 \n L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 \n Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75\n ",logo_donate:"\n M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 \n 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 \n 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 \n 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 \n 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 \n Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 \n 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 \n 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 \n 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M \n 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 \n 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 \n 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 \n 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 \n 200.9 187.5 200.9 187.5 195.35 Z\n "};e.setText();const h=e;class o{static autoTypes(t){let s=[];switch(t){case"svg":s=[{accept:{"image/svg+xml":".svg"}}];break;case"wav":s=[{accept:{"audio/wav":".wav"}}];break;case"mp3":s=[{accept:{"audio/mpeg":".mp3"}}];break;case"mp4":s=[{accept:{"video/mp4":".mp4"}}];break;case"bin":case"hex":s=[{description:"Binary Files",accept:{"application/octet-stream":[".bin",".hex"]}}];break;case"text":s=[{description:"Text Files",accept:{"text/plain":[".txt",".text"],"text/html":[".html",".htm"]}}];break;case"json":s=[{description:"JSON Files",accept:{"application/json":[".json"]}}];break;case"js":s=[{description:"JavaScript Files",accept:{"text/javascript":[".js"]}}];break;case"image":s=[{description:"Images",accept:{"image/*":[".png",".gif",".jpeg",".jpg"]}}];break;case"icon":s=[{description:"Icons",accept:{"image/x-ico":[".ico"]}}];break;case"lut":s=[{description:"Lut",accept:{"text/plain":[".cube",".3dl"]}}]}return s}static async load(t={}){"function"!=typeof window.showOpenFilePicker&&(window.showOpenFilePicker=o.showOpenFilePickerPolyfill);try{let s=t.type||"";const i={excludeAcceptAllOption:!!s,multiple:!1};i.types=o.autoTypes(s);const e=await window.showOpenFilePicker(i),h=await e[0].getFile();if(!h)return null;let n=h.name,r=n.substring(n.lastIndexOf(".")+1,n.length);const l=["png","jpg","jpeg","mp4","webm","ogg","mp3"],a=["sea","z","hex","bvh","BVH","glb","gltf"],c=new FileReader;-1!==l.indexOf(r)?c.readAsDataURL(h):-1!==a.indexOf(r)?c.readAsArrayBuffer(h):c.readAsText(h),c.onload=function(i){let e=i.target.result;switch(s){case"image":let s=new Image;s.onload=function(){t.callback&&t.callback(s,n,r)},s.src=e;break;case"json":t.callback&&t.callback(JSON.parse(e),n,r);break;default:t.callback&&t.callback(e,n,r)}}}catch(s){console.log(s),t.always&&t.callback&&t.callback(null)}}static showOpenFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("input");i.type="file",i.multiple=t.multiple,i.accept=t.types.map((t=>t.accept)).flatMap((t=>Object.keys(t).flatMap((s=>t[s])))).join(","),i.addEventListener("change",(()=>{s([...i.files].map((t=>({getFile:async()=>new Promise((s=>{s(t)}))}))))})),i.click()}))}static async save(t={}){let s=!1;"function"!=typeof window.showSaveFilePicker&&(window.showSaveFilePicker=o.showSaveFilePickerPolyfill,s=!0);try{let i=t.type||"";const e={suggestedName:t.name||"hello",data:t.data||""};e.types=o.autoTypes(i),e.finalType=Object.keys(e.types[0].accept)[0],e.suggestedName+=e.types[0].accept[e.finalType][0];const h=await window.showSaveFilePicker(e);if(s)return;const n=await h.createWritable();let r=new Blob([e.data],{type:e.finalType});await n.write(r),await n.close()}catch(t){console.log(t)}}static showSaveFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("a");i.download=t.suggestedName||"my-file.txt";let e=new Blob([t.data],{type:t.finalType});i.href=URL.createObjectURL(e),i.addEventListener("click",(()=>{s(setTimeout((()=>URL.revokeObjectURL(i.href)),1e3))})),i.click()}))}static async getFolder(){try{const t=await window.showDirectoryPicker(),s=[];for await(const i of t.values()){const t=await i.getFile();s.push(t)}return console.log(s),s}catch(t){console.log(t)}}}class n{constructor(t=0,s=0){this.x=t,this.y=s}set(t,s){return this.x=t,this.y=s,this}divide(t){return this.x/=t.x,this.y/=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divideScalar(t){return this.multiplyScalar(1/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}angle(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t}addScalar(t){return this.x+=t,this.y+=t,this}negate(){return this.x*=-1,this.y*=-1,this}neg(){return this.x=-1,this.y=-1,this}isZero(){return 0===this.x&&0===this.y}copy(t){return this.x=t.x,this.y=t.y,this}equals(t){return t.x===this.x&&t.y===this.y}nearEquals(t,s){return t.x.toFixed(s)===this.x.toFixed(s)&&t.y.toFixed(s)===this.y.toFixed(s)}lerp(t,s){return null===t?(this.x-=this.x*s,this.y-=this.y*s):(this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s),this}}class r{constructor(t={}){this.lock=t.lock||!1,this.neverlock=!1,this.isSpace=t.isSpace||!1,this.main=t.main||null,this.isUI=t.isUI||!1,this.group=t.group||null,this.isListen=!1,this.top=0,this.ytop=0,this.dx=t.dx||0,this.isSelectable=void 0!==t.selectable&&t.selectable,this.unselectable=void 0!==t.unselect?t.unselect:this.isSelectable,this.ontop=!!t.ontop&&t.ontop,this.css=this.main?this.main.css:h.css,this.colors=h.defineColor(t,this.main?this.group?this.group.colors:this.main.colors:h.colors),this.overEffect=this.colors.showOver,this.svgs=h.svgs,this.zone={x:0,y:0,w:0,h:0,d:0},this.local=(new n).neg(),this.isCanvasOnly=!1,this.isSelect=!1,this.p=void 0!==t.p?t.p:h.size.p,this.w=this.isUI?this.main.size.w:h.size.w,void 0!==t.w&&(this.w=t.w),this.h=this.isUI?this.main.size.h:h.size.h,void 0!==t.h&&(this.h=t.h),this.isSpace?this.lock=!0:this.h=this.h<11?11:this.h,this.fw=t.fw||0,this.autoWidth=t.auto||!0,this.isOpen=!1,this.radius=t.radius||this.colors.radius,this.transition=t.transition||h.transition,this.isNumber=!1,this.noNeg=t.noNeg||!1,this.allEqual=t.allEqual||!1,this.mono=!1,this.isEdit=!1,this.simple=t.simple||!1,this.simple&&(this.sa=0),this.setSize(this.w),void 0!==t.sa&&(this.sa=t.sa),void 0!==t.sb&&(this.sb=t.sb),this.simple&&(this.sb=this.w-this.sa),this.sc=void 0===t.sc?47:t.sc,this.objectLink=null,this.isSend=!1,this.objectKey=null,this.txt=t.name||"",this.name=t.rename||this.txt,this.target=t.target||null,this.callback=void 0===t.callback?null:t.callback,this.endCallback=null,this.openCallback=void 0===t.openCallback?null:t.openCallback,this.closeCallback=void 0===t.closeCallback?null:t.closeCallback,null===this.callback&&this.isUI&&null!==this.main.callback&&(this.callback=this.group?this.group.callback:this.main.callback),this.c=[],this.s=[],this.useFlex=!!this.isUI&&this.main.useFlex;let s=this.useFlex?"display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;":"float:left;";this.c[0]=h.dom("div",this.css.basic+s+"position:relative; height:20px;"),this.s[0]=this.c[0].style,this.margin=this.colors.sy,this.mtop=0;let i=h.isDivid(this.margin);if(this.isUI&&this.margin&&(this.s[0].boxSizing="content-box",i?(this.mtop=.5*this.margin,this.s[0].borderTop=this.mtop+"px solid transparent",this.s[0].borderBottom=this.mtop+"px solid transparent"):this.s[0].borderBottom=this.margin+"px solid transparent"),this.simple||(this.c[1]=h.dom("div",this.css.txt+this.css.middle),this.s[1]=this.c[1].style,this.c[1].textContent=this.name,this.s[1].color=this.lock?this.colors.titleoff:this.colors.title),t.pos){this.s[0].position="absolute";for(let s in t.pos)this.s[0][s]=t.pos[s];this.mono=!0}t.css&&(this.s[0].cssText=t.css)}init(){this.ytop=this.top+this.mtop,this.zone.h=this.h+this.margin,this.zone.w=this.w;let t=this.s,s=this.c;t[0].height=this.h+"px",this.isUI&&(t[0].background=this.colors.background),!this.autoWidth&&this.useFlex?(t[0].flex="1 0 auto",t[0].minWidth=this.minw+"px",t[0].textAlign="center"):this.isUI&&(t[0].width="100%"),void 0!==s[1]&&this.autoWidth&&(t[1]=s[1].style,t[1].top="1px",t[1].height=this.h-2+"px");let e=h.frag;for(let i=1,h=s.length;i!==h;i++)void 0!==s[i]&&(e.appendChild(s[i]),t[i]=s[i].style);let o=null!==this.target?this.target:this.isUI?this.main.inner:document.body;this.ontop?o.insertAdjacentElement("afterbegin",s[0]):o.appendChild(s[0]),s[0].appendChild(e),this.rSize(),this.isUI||(this.c[0].style.pointerEvents="auto",i.add(this))}addTransition(){this.baseH&&this.transition&&this.isUI&&(this.c[0].style.transition="height "+this.transition+"s ease-out")}dom(t,s,i,e,o){return h.dom(t,s,i,e,o)}setSvg(t,s,i,e,o){h.setSvg(t,s,i,e,o)}setCss(t,s){h.setCss(t,s)}clamp(t,s,i){return h.clamp(t,s,i)}getColorRing(){return h.colorRing||h.makeColorRing(),h.clone(h.colorRing)}getJoystick(t){return h["joystick_"+t]||h.makeJoystick(t),h.clone(h["joystick_"+t])}getCircular(t){return h.circular||h.makeCircular(t),h.clone(h.circular)}getKnob(t){return h.knob||h.makeKnob(t),h.clone(h.knob)}getPad2d(t){return h.pad2d||h.makePad(t),h.clone(h.pad2d)}cursor(t){i.cursor(t)}update(){}reset(){}content(){return this.c[0]}getDom(){return this.c[0]}uiout(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.background)}uiover(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.backgroundOver)}rename(t){void 0!==this.c[1]&&(this.c[1].textContent=t)}listen(){return this.isListen=i.addListen(this),this}listening(){null!==this.objectLink&&(this.isSend||this.isEdit||this.setValue(this.objectLink[this.objectKey]))}setValue(t){this.isNumber?this.value=this.numValue(t):this.value=t,this.update()}onChange(t){if(!this.isSpace)return this.callback=t||null,this}onFinishChange(t){if(!this.isSpace)return this.callback=null,this.endCallback=t,this}onOpen(t){return this.openCallback=t,this}onClose(t){return this.closeCallback=t,this}send(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.isSend=!0,null!==this.objectLink&&(this.objectLink[this.objectKey]=t),this.callback&&this.callback(t,this.objectKey),this.isSend=!1}sendEnd(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.endCallback&&this.endCallback(t),null!==this.objectLink&&(this.objectLink[this.objectKey]=t)}dispose(){this.isListen&&i.removeListen(this),h.clear(this.c[0]),null!==this.target?null!==this.group?this.group.clearOne(this):this.target.removeChild(this.c[0]):this.isUI?this.main.clearOne(this):document.body.removeChild(this.c[0]),this.isUI||i.remove(this),this.c=null,this.s=null,this.callback=null,this.target=null,this.isListen=!1}clear(){}getWidth(){let t=i.getWidth(this);t&&(this.w=t)}setSize(t){if(this.autoWidth)if(this.w=t,this.simple)this.sb=this.w-this.sa;else{let t=this.w*(this.p/100);this.sa=Math.floor(t+8),this.sb=Math.floor(this.w-t-16)}}rSize(){this.autoWidth&&(this.isUI||(this.s[0].width=this.w+"px"),this.simple||(this.s[1].width=this.sa+"px"))}setTypeNumber(t){let s;switch(this.isNumber=!0,this.value=0,void 0!==t.value&&("string"==typeof t.value?this.value=1*t.value:this.value=t.value),this.min=void 0===t.min?-1/0:t.min,this.max=void 0===t.max?1/0:t.max,this.precision=void 0===t.precision?2:t.precision,this.precision){case 0:s=1;break;case 1:s=.1;break;case 2:s=.01;break;case 3:s=.001;break;case 4:s=1e-4;break;case 5:s=1e-5;break;case 6:s=1e-6}this.step=void 0===t.step?s:t.step,this.range=this.max-this.min,this.value=this.numValue(this.value)}numValue(t){return this.noNeg&&(t=Math.abs(t)),1*Math.min(this.max,Math.max(this.min,t)).toFixed(this.precision)}handleEvent(t){if(!this.lock)return this.neverlock&&(i.lock=!1),this[t.type]?this[t.type](t):console.error(t.type,"this type of event no existe !")}wheel(t){return!1}mousedown(t){return!1}mousemove(t){return!1}mouseup(t){return!1}keydown(t){return!1}keyup(t){return!1}setReferency(t,s){this.objectLink=t,this.objectKey=s}display(t=!1){this.s[0].visibility=t?"visible":"hidden"}open(){this.isOpen||(this.isOpen=!0,i.needResize=!0,this.openCallback&&this.openCallback())}close(){this.isOpen&&(this.isOpen=!1,i.needResize=!0,this.closeCallback&&this.closeCallback())}needZone(){i.needReZone=!0}rezone(){i.needReZone=!0}select(){}unselect(){}setInput(t){i.setInput(t,this)}upInput(t,s){return i.upInput(t,s)}selected(t){this.isSelect=t||!1}}class l extends r{constructor(t={}){super(t),this.value=t.value||!1,this.model=void 0!==t.mode?t.mode:0,this.onName=t.rename||this.txt,t.onName&&(t.onname=t.onName),t.onname&&(this.onName=t.onname),this.inh=t.inh||Math.floor(.8*this.h),this.inw=t.inw||36;let s=this.colors;if(0===this.model){let t=Math.floor(.5*this.h)-.5*(this.inh-2);this.c[2]=this.dom("div",this.css.basic+"background:"+s.inputBg+"; height:"+(this.inh-2)+"px; width:"+this.inw+"px; top:"+t+"px; border-radius:10px; border:2px solid "+s.back),this.c[3]=this.dom("div",this.css.basic+"height:"+(this.inh-6)+"px; width:16px; top:"+(t+2)+"px; border-radius:10px; background:"+s.button+";")}else this.p=0,void 0!==this.c[1]&&(this.c[1].textContent=""),this.c[2]=this.dom("div",this.css.txt+this.css.button+"top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.borderSize+"px solid "+s.border+"; border-radius:"+this.radius+"px;");this.stat=-1,this.init(),this.update()}mousedown(t){return this.value=!this.value,this.update(!0),this.mousemove(t)}mousemove(t){return this.cursor("pointer"),this.mode(!0)}reset(){return this.cursor(),this.mode()}mode(t){let s,i=!1,e=this.colors,h=this.s,o=this.value;if(s=t?o?4:3:o?2:1,this.stat!==s){if(this.stat=s,0!==this.model){switch(s){case 1:h[2].color=e.text,h[2].background=e.button;break;case 2:h[2].color=e.textSelect,h[2].background=e.select;break;case 3:h[2].color=e.textOver,h[2].background=e.overoff;break;case 4:h[2].color=e.textOver,h[2].background=e.over}this.c[2].innerHTML=o?this.onName:this.name}else{switch(s){case 1:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.button;break;case 2:h[2].background=h[2].borderColor=e.back,h[3].background=e.textOver;break;case 3:h[2].background=h[2].borderColor=e.back,h[3].background=e.overoff;break;case 4:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.textSelect}h[3].marginLeft=o?"17px":"2px",this.c[1].textContent=o?this.onName:this.name}i=!0}return i}update(t){this.mode(),t&&this.send()}rSize(){super.rSize();let t=this.s,s=this.w-10-this.inw;0===this.model?(t[2].left=s+"px",t[3].left=s+"px"):(t[2].left=this.sa+"px",t[2].width=this.sb+"px")}}class a extends r{constructor(t={}){super(t),this.value="",void 0!==t.value&&(this.value=t.value),this.values=t.value||this.txt,t.values&&(this.values=t.values),t.values||t.value||(this.txt=""),this.onName=t.onName||null,this.on=!1,this.bw=t.forceWidth||0,t.bw&&(this.bw=t.bw),this.space=t.space||3,"string"==typeof this.values&&(this.values=[this.values]),this.isDown=!1,this.neverlock=!0,this.res=0,this.lng=this.values.length,this.tmp=[],this.stat=[];let s,i=this.colors;for(let t=0;te[i][0]&&s.x0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.text,this.setSvg(this.c[3],"stroke",s,1);break;case 1:this.s[2].color=i.textOver,this.setSvg(this.c[3],"stroke",i.backoff,0),s=this.model>0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.textOver,this.setSvg(this.c[3],"stroke",s,1)}return this.cmode=t,!0}reset(){this.isDown=!1}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"circular"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;if(s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=s.angle()-this.pi90,this.r=(this.r%this.twoPi+this.twoPi)%this.twoPi,null!==this.oldr){let t=this.r-this.oldr;this.r=Math.abs(t)>Math.PI?this.oldr:this.r,t>6&&(this.r=0),t<-6&&(this.r=this.twoPi)}let i=1/this.twoPi,e=this.r*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=~~(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("circular"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:sMath.PI?1:0)+" 1 "+i+","+e}update(t){if(this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range,this.setSvg(this.c[3],"d",this.makePath(),1),this.model>0){let t=this.colors,s=h.pack(h.lerpColor(h.unpack(h.ColorLuma(t.text,-.75)),h.unpack(t.text),this.percent));this.setSvg(this.c[3],"stroke",s,1)}t&&this.send()}}class d extends r{constructor(t={}){super(t),this.ctype=t.ctype||"hex",this.wfixe=256,this.cw=this.sb>256?256:this.sb,null!=t.cw&&(this.cw=t.cw),this.side=t.side||"down",this.up="down"===this.side?0:1,this.baseH=this.h,this.offset=new n,this.decal=new n,this.pp=new n;let s=this.colors;this.c[2]=this.dom("div",`${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${s.borderSize}px solid ${s.border};`),this.c[0].style.display="block",this.c[3]=this.getColorRing(),this.c[3].style.visibility="hidden",this.hsl=null,this.value="#ffffff",void 0!==t.value&&(t.value instanceof Array?this.value=h.rgbToHex(t.value):isNaN(t.value)?this.value=t.value:this.value=h.hexToHtml(t.value)),this.bcolor=null,this.isDown=!1,this.fistDown=!1,this.notext=t.notext||!1,this.tr=98,this.tsl=Math.sqrt(3)*this.tr,this.hue=0,this.d=256,this.init(),this.setColor(this.value),void 0!==t.open&&this.open()}testZone(t,s){let i=this.local;return-1===i.x&&-1===i.y?"":this.up&&this.isOpen?i.y>this.wfixe?"title":"color":i.ythis.tr)e=(c+u.pi90)/u.TwoPI,this.hue=(e+1)%1,this.setHSL([(e+1)%1,this.hsl[1],this.hsl[2]]);else{l=s.x*this.ratio,a=s.y*this.ratio;let t=this.hue*u.TwoPI+u.PI;t<0&&(t+=2*u.PI),r=Math.atan2(-a,l),r<0&&(r+=2*u.PI);let i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,h=.5*this.tr,c=Math.tan(e)*h,d=Math.sqrt(l*l+a*a),p=Math.sqrt(h*h+c*c);if(d>p){let s=Math.tan(e)*d,o=Math.atan(s/p);o>u.pi60?o=u.pi60:o<-u.pi60&&(o=-u.pi60),r+=o-e,i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,c=Math.tan(e)*h,d=p=Math.sqrt(h*h+c*c)}n=Math.sin(i)*d/this.tsl+.5;let m=1-2*Math.abs(n-.5);o=(Math.cos(i)*d+this.tr/2)/(1.5*this.tr)/m,o=u.clamp(o,0,1),this.setHSL([this.hsl[0],o,n])}}setHeight(){this.h=this.isOpen?this.wfixe+this.baseH+5:this.baseH,this.s[0].height=this.h+"px",this.zone.h=this.h}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(){super.open(),this.setHeight(),this.up&&(this.zone.y-=this.wfixe+5);let t=this.h-this.baseH;this.s[3].visibility="visible",this.parentHeight(t)}close(){super.close(),this.up&&(this.zone.y+=this.wfixe+5);let t=this.h-this.baseH;this.setHeight(),this.s[3].visibility="hidden",this.parentHeight(-t)}update(t){let s=h.rgbToHex(h.hslToRgb([this.hsl[0],1,.5]));this.moveMarkers(),this.value=this.bcolor,this.setSvg(this.c[3],"fill",s,2,0),this.s[2].background=this.bcolor,this.notext||(this.c[2].textContent=h.htmlToHex(this.bcolor)),this.invert=h.findDeepInver(this.rgb),this.s[2].color=this.invert?"#fff":"#000",t&&("array"===this.ctype&&this.send(this.rgb),"rgb"===this.ctype&&this.send(h.htmlRgb(this.rgb)),"hex"===this.ctype&&this.send(h.htmlToHex(this.value)),"html"===this.ctype&&this.send())}setValue(t){t instanceof Array?this.value=h.rgbToHex(t):isNaN(t)?this.value=t:this.value=h.hexToHtml(t),this.setColor(this.value),this.update()}setColor(t){let s=h.unpack(t);return this.bcolor!==t&&s&&(this.bcolor=t,this.rgb=s,this.hsl=h.rgbToHsl(this.rgb),this.hue=this.hsl[0],this.update()),this}setHSL(t){return this.hsl=t,this.rgb=h.hslToRgb(t),this.bcolor=h.rgbToHex(this.rgb),this.update(!0),this}moveMarkers(){let t=this.pp,s=h;this.invert;let i=this.hsl[0]*s.TwoPI,e=2/3*s.PI,o=this.tr,n=this.hsl[0],r=this.hsl[1],l=this.hsl[2],a=(i-s.pi90)*s.todeg;n=-i+s.pi90;let c=Math.cos(n)*o,d=-Math.sin(n)*o,u=Math.cos(n-e)*o,p=-Math.sin(n-e)*o,m=Math.cos(n+e)*o,g=-Math.sin(n+e)*o,x=(u+m)/2,v=(p+g)/2;i=(1-2*Math.abs(l-.5))*r;let b=u+(m-u)*l+(c-x)*i,f=p+(g-p)*l+(d-v)*i;t.set(b,f).addScalar(128),this.setSvg(this.c[3],"transform","rotate("+a+" )",2),this.setSvg(this.c[3],"cx",t.x,3),this.setSvg(this.c[3],"cy",t.y,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",2,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",3),this.setSvg(this.c[3],"fill",this.bcolor,3)}rSize(){super.rSize();let t=this.s;t[2].width=this.sb+"px",t[2].left=this.sa+"px",this.cw=this.sb>256?256:this.sb,this.rSizeColor(this.cw),this.decal.x=Math.floor(.5*(this.w-this.wfixe))}rSizeColor(t){if(t===this.wfixe)return;this.wfixe=t;let s=this.s;this.decal.y="up"===this.side?2:this.baseH+2,this.mid=Math.floor(.5*this.wfixe),this.setSvg(this.c[3],"viewBox","0 0 "+this.wfixe+" "+this.wfixe),s[3].width=this.wfixe+"px",s[3].height=this.wfixe+"px",s[3].top=this.decal.y+"px",this.ratio=256/this.wfixe,this.square=1/(this.wfixe/256*60),this.setHeight()}}class u extends r{constructor(t={}){super(t),this.round=Math.round,this.baseH=this.h,this.hplus=t.hplus||50,this.res=t.res||40,this.l=1,this.precision=t.precision||0,this.custom=t.custom||!1,this.names=t.names||["FPS","MS"];let s=t.cc||["220,220,220","255,255,0"];this.adding=t.adding||!1,this.range=t.range||[165,100,100],this.alpha=t.alpha||.25,this.values=[],this.points=[],this.textDisplay=[],this.custom||(this.now=i.getTime(),this.startTime=0,this.prevTime=0,this.frames=0,this.ms=0,this.fps=0,this.mem=0,this.mm=0,this.isMem=!(!self.performance||!self.performance.memory),this.isMem&&(this.names.push("MEM"),s.push("0,255,255")),this.txt=t.name||"Fps");let e=Math.floor(.5*this.h)-3;const h=this.colors;this.c[1].textContent=this.txt,this.c[0].style.cursor="pointer",this.c[0].style.pointerEvents="auto";let o="display:none; left:10px; top:"+this.h+"px; height:"+(this.hplus-8)+"px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid "+h.border+";";0!==this.radius&&(o+="border-radius:"+this.radius+"px;"),this.c[2]=this.dom("path",this.css.basic+o,{}),this.c[2].setAttribute("viewBox","0 0 "+this.res+" 50"),this.c[2].setAttribute("height","100%"),this.c[2].setAttribute("width","100%"),this.c[2].setAttribute("preserveAspectRatio","none"),this.c[3]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; left:0; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.c[4]=this.dom("div",this.css.txt+"position:absolute; left:10px; top:"+(this.h+2)+"px; display:none; width:100%; text-align:center;"),t.bottomLine&&(this.c[4]=this.dom("div",this.css.basic+"width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);")),this.isShow=!1;let n=this.s;n[1].lineHeight=this.h-4,n[1].color=h.text,0!==this.radius&&(n[0].borderRadius=this.radius+"px"),"none"!==this.colors.gborder&&(n[0].border="1px solid "+h.gborder);let r=0;for(r=0;r "+this.names[r]+" ")}for(r=this.names.length;r--;)this.dom("path",null,{fill:"rgba("+s[r]+","+this.alpha+")","stroke-width":1,stroke:"rgba("+s[r]+",1)","vector-effect":"non-scaling-stroke"},this.c[2]);this.init()}mousedown(t){this.isShow?this.close():this.open()}tick(t){this.values=t,this.isShow&&(this.drawGraph(),this.upText())}makePath(t){let s="";s+="M -1 50";for(let i=0;i";this.c[4].innerHTML=i}drawGraph(){let t,s=this.c[2],i=this.names.length,e=0,h=0;for(;i--;)t=this.adding?(this.values[h]+e)*this.range[h]:this.values[h]*this.range[h],this.points[h].shift(),this.points[h].push(50-t),this.setSvg(s,"d",this.makePath(this.points[h]),i+1),e+=this.values[h],h++}open(){super.open(),this.h=this.hplus+this.baseH,this.setSvg(this.c[3],"d",this.svgs.g2),null!==this.group?this.group.calc(this.hplus):this.isUI&&this.main.calc(this.hplus),this.s[0].height=this.h+"px",this.s[2].display="block",this.s[4].display="block",this.isShow=!0,this.custom||i.addListen(this)}close(){super.close(),this.h=this.baseH,this.setSvg(this.c[3],"d",this.svgs.g1),null!==this.group?this.group.calc(-this.hplus):this.isUI&&this.main.calc(-this.hplus),this.s[0].height=this.h+"px",this.s[2].display="none",this.s[4].display="none",this.isShow=!1,this.custom||i.removeListen(this),this.c[4].innerHTML=""}begin(){this.startTime=this.now()}end(){let t=this.now();if(this.ms=t-this.startTime,this.frames++,t>this.prevTime+1e3&&(this.fps=this.round(1e3*this.frames/(t-this.prevTime)),this.prevTime=t,this.frames=0,this.isMem)){let t=performance.memory.usedJSHeapSize,s=performance.memory.jsHeapSizeLimit;this.mem=this.round(954e-9*t),this.mm=t/s}return this.values=[this.fps,this.ms,this.mm],this.drawGraph(),this.upText([this.fps,this.ms,this.mem]),t}listening(){this.custom||(this.startTime=this.end())}rSize(){let t=this.s,s=this.w;t[3].left=this.sa+this.sb-6+"px",t[0].width=s+"px",t[1].width=s+"px",t[2].left="10px",t[2].width=s-20+"px",t[4].width=s-20+"px"}}class p extends r{constructor(t={}){super(t),this.value=void 0!==t.value?t.value:[0,0,0],this.lng=this.value.length,this.precision=void 0!==t.precision?t.precision:2,this.multiplicator=t.multiplicator||1,this.neg=t.neg||!1,this.line=void 0===t.line||t.line,this.autoWidth=void 0===t.autoWidth||t.autoWidth,this.isNumber=!1,this.isDown=!1,this.h=t.h||138,this.rh=this.h-10,this.top=0,this.c[0].style.width=this.w+"px",void 0!==this.c[1]&&(this.c[1].style.width=this.w+"px",this.autoWidth||(this.c[1].style.width="100%",this.c[1].style.justifyContent="center"),this.top=10,this.h+=10),this.gh=this.rh-28,this.gw=this.w-28,this.c[2]=this.dom("div",this.css.txt+"display:block; text-align:center; padding:0px 0px; top:"+(this.h-20)+"px; left:14px; width:"+this.gw+"px; color:"+this.colors.text),this.c[2].innerHTML=this.valueToHtml();let s=this.dom("svg",this.css.basic,{viewBox:"0 0 "+this.w+" "+this.rh,width:this.w,height:this.rh,preserveAspectRatio:"none"});this.setCss(s,{width:this.w,height:this.rh,left:0,top:this.top}),this.dom("path","",{d:"",stroke:this.colors.text,"stroke-width":2,fill:"none","stroke-linecap":"butt"},s),this.dom("rect","",{x:10,y:10,width:this.gw+8,height:this.gh+8,stroke:"rgba(0,0,0,0.3)","stroke-width":1,fill:"none"},s),this.iw=(this.gw-4*(this.lng-1))/this.lng;let i=[];this.cMode=[],this.v=[];for(let t=0;t',e="width:"+100/this.lng+"%;";for(;t--;)s===this.lng-1?i+=""+this.value[s]+"":i+=""+this.value[s]+"",s++;return i}updateSVG(){this.line&&this.setSvg(this.c[3],"d",this.makePath(),0);for(let t=0;tthis.top&&s.ye[i][0]&&s.xthis.distance){let t=Math.atan2(this.tmp.x,this.tmp.y);this.tmp.x=Math.sin(t)*this.distance,this.tmp.y=Math.cos(t)*this.distance}this.pos.copy(this.tmp).divideScalar(this.distance).negate(),this.update()}setValue(t){void 0===t&&(t=[0,0]),this.pos.set(t[0]||0,t[1]||0),this.updateSVG()}update(t){void 0===t&&(t=!0),null!==this.interval&&(this.isDown||(this.pos.lerp(null,.3),this.pos.x=Math.abs(this.pos.x)<.01?0:this.pos.x,this.pos.y=Math.abs(this.pos.y)<.01?0:this.pos.y,this.isUI&&this.main.isCanvas&&this.main.draw())),this.updateSVG(),t&&this.send(),this.pos.isZero()&&this.stopInterval()}updateSVG(){let t=.5*this.diam- -this.pos.x*this.distance,s=.5*this.diam- -this.pos.y*this.distance;if(0===this.model){let i=t+5*this.pos.x+5,e=s+5*this.pos.y+10;this.setSvg(this.c[3],"cx",i*this.ratio,3),this.setSvg(this.c[3],"cy",e*this.ratio,3)}else this.setSvg(this.c[3],"cx",t*this.ratio,3),this.setSvg(this.c[3],"cy",s*this.ratio,3);this.setSvg(this.c[3],"cx",t*this.ratio,4),this.setSvg(this.c[3],"cy",s*this.ratio,4),this.value[0]=1*(this.pos.x*this.multiplicator).toFixed(this.precision),this.value[1]=1*(this.pos.y*this.multiplicator).toFixed(this.precision),this.haveText&&(this.c[2].textContent=this.value)}clear(){this.stopInterval(),super.clear()}}class v extends r{constructor(t={}){super(t),this.isCyclic=t.cyclic||!1,this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.autoWidth=!1,this.setTypeNumber(t),this.minw=this.w,this.diam=t.diam||this.w,this.mPI=.8*Math.PI,this.toDeg=180/Math.PI,this.cirRange=2*this.mPI,this.offset=new n,this.h=t.h||this.w+10,this.c[0].style.width=this.w+"px",this.c[0].style.display="block",void 0!==this.c[1]&&(this.c[1].style.width="100%",this.c[1].style.justifyContent="center",this.top=10,this.h+=10),this.percent=0,this.cmode=0;let s=this.colors;this.c[2]=this.dom("div",this.css.txt+"justify-content:center; top:"+(this.h-20)+"px; width:100%; color:"+s.text),this.c[3]=this.getKnob(),this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1),this.setSvg(this.c[3],"stroke",s.text,3),this.setSvg(this.c[3],"d",this.makeGrad(),3),this.setSvg(this.c[3],"viewBox","0 0 "+this.diam+" "+this.diam),this.setCss(this.c[3],{width:this.diam,height:this.diam,left:0,top:this.top}),this.model>0&&(h.dom("path","",{d:"",stroke:s.text,"stroke-width":2,fill:"none","stroke-linecap":"round"},this.c[3]),2==this.model&&(h.addSVGGlowEffect(),this.setSvg(this.c[3],"style",'filter: url("#UILGlow");',4))),this.r=0,this.init(),this.update()}mode(t){let s=this.colors;if(this.cmode===t)return!1;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1);break;case 1:this.s[2].color=s.textOver,this.setSvg(this.c[3],"fill",s.select,0),this.setSvg(this.c[3],"stroke",s.textOver,1)}return this.cmode=t,!0}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"knob"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=-Math.atan2(s.x,s.y),null!==this.oldr&&(this.r=Math.abs(this.r-this.oldr)>Math.PI?this.oldr:this.r),this.r=this.r>this.mPI?this.mPI:this.r,this.r=this.r<-this.mPI?-this.mPI:this.r;let i=1/this.cirRange,e=(this.r+this.mPI)*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=Math.floor(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("knob"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s5?(s=this.range/this.step,t=(a-c)/s):(t=(a-c)/l*2,s=32);for(let c=0;c<=s;++c)i=a-t*c,e=l+44*Math.sin(i),h=l+44*Math.cos(i),o=l+40*Math.sin(i),n=l+40*Math.cos(i),r+="M"+e+" "+h+" L"+o+" "+n+" ";return r}update(t){this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range;let s=Math.PI+this.mPI,i=this.percent*this.cirRange-this.mPI,e=Math.sin(i),o=Math.cos(i),n=25*e+64,r=-25*o+64,l=20*e+64,a=-20*o+64;if(this.setSvg(this.c[3],"d","M "+n+" "+r+" L "+l+" "+a,1),this.model>0){let t=36*Math.sin(s)+64,n=36*Math.cos(s)+64,r=36*e+64,l=-36*o+64,a=i<=Math.PI-this.mPI?0:1;this.setSvg(this.c[3],"d","M "+t+","+n+" A 36,36 1 "+a+" 1 "+r+","+l,4);let c=h.pack(h.lerpColor(h.unpack(h.ColorLuma(this.colors.text,-.75)),h.unpack(this.colors.text),this.percent));this.setSvg(this.c[3],"stroke",c,4)}t&&this.send()}}class b extends r{constructor(t={}){super(t),this.hideCurrent=!1,this.path=t.path||"",this.format=t.format||"",this.isWithImage=""!==this.path,this.preLoadComplete=!1,this.tmpImage={},this.tmpUrl=[],this.m=void 0!==t.m?t.m:5;let s=t.align||"left",i=t.scrollSize||10;this.ss=i+1,this.sMode=0,this.tMode=0,this.listOnly=t.listOnly||!1,this.staticTop=t.staticTop||!1,this.isSelectable=this.listOnly,void 0!==t.select&&(t.selectable=t.select),void 0!==t.selectable&&(this.isSelectable=t.selectable),""===this.txt&&(this.p=0);let e=Math.floor(.5*this.h)-3,h=this.colors;if(this.c[2]=this.dom("div",this.css.basic+"top:0; display:none; border-radius:"+this.radius+"px;"),this.c[3]=this.dom("div",this.css.item+"padding:0px "+this.m+"px; margin-bottom:0px; position:absolute; justify-content:"+s+"; text-align:"+s+"; line-height:"+(this.h-4)+"px; top:1px; background:"+h.button+"; height:"+(this.h-2)+"px; border:1px solid "+h.border+"; border-radius:"+this.radius+"px;"),this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.scrollerBack=this.dom("div",this.css.basic+"right:0px; width:"+i+"px; background:"+h.back+"; display:none;"),this.scroller=this.dom("div",this.css.basic+"right:"+.5*(i-.25*i)+"px; width:"+.25*i+"px; background:"+h.text+"; display:none; "),this.c[3].style.color=h.text,this.list=[],this.refObject=null,t.list)if(t.list instanceof Array)this.list=t.list;else if(t.list instanceof Object){this.refObject=t.list;for(let t in this.refObject)this.list.push(t)}this.items=[],this.prevName="",this.tmpId=0,this.baseH=this.h,this.itemHeight=t.itemHeight||this.h,this.full=t.full||!1,this.py=0,this.ww=this.sb,this.scroll=!1,this.isDown=!1,this.current=null,this.side=t.side||"down",this.up="down"===this.side?0:1,this.up?(this.c[2].style.top="auto",this.c[3].style.top="auto",this.c[4].style.top="auto",this.c[2].style.bottom=this.h-2+"px",this.c[3].style.bottom="1px",this.c[4].style.bottom=e+"px"):this.c[2].style.top=this.baseH+"px",this.listIn=this.dom("div",this.css.basic+"left:0; top:0; width:100%; background:none;"),this.listIn.name="list",this.topList=0,this.c[2].appendChild(this.listIn),this.c[2].appendChild(this.scrollerBack),this.c[2].appendChild(this.scroller),void 0!==t.value?isNaN(t.value)?this.value=t.value:this.value=this.list[t.value]:this.value=this.list[0],this.isOpenOnStart=t.open||!1,this.listOnly&&(this.baseH=5,this.c[3].style.display="none",this.c[4].style.display="none",this.c[2].style.top=this.baseH+"px",this.isOpenOnStart=!0),this.miniCanvas=t.miniCanvas||!1,this.canvasBg=t.canvasBg||"rgba(0,0,0,0)",this.imageSize=t.imageSize||[20,20],this.drag=t.drag||!1,this.dragout=t.dragout||!1,this.dragstart=t.dragstart||null,this.dragend=t.dragend||null,this.setList(this.list),this.init(),this.isWithImage&&this.preloadImage(),this.isOpenOnStart&&this.open(!0),this.baseH+=this.mtop}preloadImage(){this.preLoadComplete=!1,this.tmpImage={};for(let t=0;tthis.h-this.baseH)return"title";if(this.scroll&&s.x>this.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}else{if(s.ythis.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}}return""}testItems(t){let s,i,e,h="",o=this.items,n=o.length;for(;n--;)if(s=o[n],i=s.posy+this.topList,e=s.posy+this.itemHeight+1+this.topList,t>=i&&t<=e)return h="item"+n,this.modeItem(0),this.current=s,this.modeItem(1),h;return h}modeItem(t){if(!this.current)return;this.current.select&&0===t&&(t=2);let s=this.colors;switch(t){case 0:this.current.style.background=s.back,this.current.style.color=s.text;break;case 1:this.current.style.background=s.over,this.current.style.color=s.textOver;break;case 2:this.current.style.background=s.select,this.current.style.color=s.textSelect}}unSelected(){this.current&&(this.modeItem(0),this.current=null)}selected(){this.current&&(this.resetItems(),this.modeItem(2),this.current.select=!0)}resetItems(){let t=this.items.length;for(;t--;)this.items[t].select=!1,this.items[t].style.background=this.colors.back,this.items[t].style.color=this.colors.text}hideActive(){this.hideCurrent&&(this.current&&(this.tmpId=this.current.id),this.resetHide())}resetHide(){console.log(this.tmpId);let t=this.items.length;for(;t--;)t===this.tmpId?(this.items[t].style.height="0px",this.items[t].posy=-1):(this.items[t].style.height=this.itemHeight+"px",this.items[t].posy=(this.itemHeight+1)*(t-1))}mouseup(t){this.isDown=!1}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s?(this.isDown=!0,this.mousemove(t)):"title"===s?(this.modeTitle(2),this.listOnly||(this.hideActive(),this.isOpen?this.close():this.open())):this.current&&(this.value=this.list[this.current.id],this.isSelectable&&this.selected(),this.send(this.value),this.listOnly||(this.close(),this.setTopItem())),!0)}mousemove(t){let s=!1,i=this.testZone(t);if(!i)return s;if("title"===i)this.unSelected(),this.modeTitle(1),this.cursor("pointer");else if("scroll"===i){if(this.cursor("s-resize"),this.modeScroll(1),this.isDown){this.modeScroll(2);let s=this.zone.y+this.baseH-2;this.update(t.clientY-s-.5*this.sh)}}else this.modeTitle(0),this.modeScroll(0),this.cursor("pointer");return i!==this.prevName&&(s=!0),this.prevName=i,s}wheel(t){return"title"!==this.testZone(t)&&(this.py+=10*t.delta,this.update(this.py),!0)}reset(){this.prevName="",this.unSelected(),this.modeTitle(0),this.modeScroll(0)}modeScroll(t){if(t===this.sMode)return;let s=this.scroller.style,i=this.colors;switch(t){case 0:s.background=i.text;break;case 1:case 2:s.background=i.select}this.sMode=t}modeTitle(t){if(t===this.tMode)return;let s=this.s,i=this.colors;switch(t){case 0:s[3].color=i.text,s[3].background=i.button;break;case 1:s[3].color=i.textOver,s[3].background=i.overoff;break;case 2:s[3].color=i.textSelect,s[3].background=i.overoff}this.tMode=t}clearList(){for(;this.listIn.children.length;)this.listIn.removeChild(this.listIn.lastChild);this.items=[]}setList(t){this.clearList(),this.list=t,this.length=this.list.length;let s,e,h=this.hideCurrent?this.length-1:this.length;this.maxItem=this.full?h:5,this.maxItem=hthis.maxHeight&&(this.ww=this.sb-this.ss,this.scroll=!0),this.miniCanvas&&(this.tmpCanvas=document.createElement("canvas"),this.tmpCanvas.width=this.imageSize[0],this.tmpCanvas.height=this.imageSize[1],this.tmpCtx=this.tmpCanvas.getContext("2d"),this.tmpCtx.fillStyle=this.canvasBg,this.tmpCtx.fillRect(0,0,this.imageSize[0],this.imageSize[1]));for(let t=0;tthis.range?this.range:t,this.topList=-Math.floor(t/this.ratio),this.listIn.style.top=this.topList+"px",this.scroller.style.top=Math.floor(t)+"px",this.py=t)}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(t){super.open(),this.update(0),this.h=this.maxHeight+this.baseH+5,this.scroll?(this.scroller.style.display="block",this.scrollerBack.style.display="block"):(this.topList=0,this.h=this.baseH+5+this.max,this.scroller.style.display="none",this.scrollerBack.style.display="none"),this.s[0].height=this.h+"px",this.s[2].display="block",this.up?(this.zone.y-=this.h-(this.baseH-10),this.setSvg(this.c[4],"d",this.svgs.g1)):this.setSvg(this.c[4],"d",this.svgs.g2),this.rSizeContent();let s=this.h-this.baseH;this.zone.h=this.h,t||this.parentHeight(s)}close(){super.close(),this.up&&(this.zone.y+=this.h-(this.baseH-10));let t=this.h-this.baseH;this.h=this.baseH,this.s[0].height=this.h+"px",this.s[2].display="none",this.setSvg(this.c[4],"d",this.svgs.g1),this.zone.h=this.h,this.parentHeight(-t)}text(t){this.c[3].textContent=t}rSizeContent(){let t=this.length;for(;t--;)this.listIn.children[t].style.width=this.ww+"px"}rSize(){super.rSize();let t=this.s,s=this.sb,i=this.sa;void 0!==t[2]&&(t[2].width=s+"px",t[2].left=i+"px",t[3].width=s+"px",t[3].left=i+"px",t[4].left=i+s-15+"px",this.ww=s,this.max>this.maxHeight&&(this.ww=s-this.ss),this.isOpen&&this.rSizeContent())}}class f extends r{constructor(t={}){super(t),this.setTypeNumber(t),this.allway=t.allway||!1,this.isDown=!1,this.value=[0],this.multy=1,this.invmulty=1,this.isSingle=!0,this.isAngle=!1,this.isVector=!1,t.isAngle&&(this.isAngle=!0,this.multy=h.torad,this.invmulty=h.todeg),this.isDrag=t.drag||!1,void 0!==t.value&&(isNaN(t.value)?t.value instanceof Array?(this.value=t.value,this.isSingle=!1):t.value instanceof Object&&(this.value=[],void 0!==t.value.x&&(this.value[0]=t.value.x),void 0!==t.value.y&&(this.value[1]=t.value.y),void 0!==t.value.z&&(this.value[2]=t.value.z),void 0!==t.value.w&&(this.value[3]=t.value.w),this.isSingle=!1,this.isVector=!0):this.value=[t.value]),this.lng=this.value.length,this.tmp=[],this.current=-1,this.prev={x:0,y:0,d:0,v:0};let s=this.colors;this.c[2]=this.dom("div",this.css.basic+" background:"+s.select+"; top:4px; width:0px; height:"+(this.h-8)+"px;"),this.cMode=[];let i=this.lng;for(;i--;)this.isAngle&&(this.value[i]=(180*this.value[i]/Math.PI).toFixed(this.precision)),this.c[3+i]=this.dom("div",this.css.txtselect+"top:1px; height:"+(this.h-2)+"px; color:"+s.text+"; background:"+s.back+"; borderColor:"+s.border+"; border-radius:"+this.radius+"px;"),t.center&&(this.c[2+i].style.textAlign="center"),this.c[3+i].textContent=this.value[i],this.c[3+i].style.color=this.colors.text,this.c[3+i].isNum=!0,this.cMode[i]=0;this.selectId=3+this.lng,this.c[this.selectId]=this.dom("div",this.css.txtselect+"position:absolute; top:2px; height:"+(this.h-4)+"px; padding:0px 0px; width:0px; color:"+s.textSelect+"; background:"+s.select+"; border:none; border-radius:0px;"),this.cursorId=4+this.lng,this.c[this.cursorId]=this.dom("div",this.css.basic+"top:2px; height:"+(this.h-4)+"px; width:0px; background:"+s.text+";"),this.init()}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";let i=this.lng,e=this.tmp;for(;i--;)if(s.x>e[i][0]&&s.x=this.txl?"text":s.x>=this.sa?"scroll":""}mouseup(t){this.isDown&&(this.isDown=!1)}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s&&(this.isDown=!0,this.old=this.value,this.mousemove(t)),!0)}mousemove(t){let s=!1;if("scroll"===this.testZone(t)?(this.mode(1),this.cursor("w-resize")):this.cursor(),this.isDown){let i=(t.clientX-(this.zone.x+this.sa)-3)/this.ww*this.range+this.min-this.old;(i>=this.step||i<=this.step)&&(i=Math.floor(i/this.step),this.value=this.numValue(this.old+i*this.step),this.update(!0),this.old=this.value),s=!0}return s}wheel(t){if("scroll"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s=this.sa?"text":""}mouseup(t){if(this.editable)return!!this.isDown&&(this.isDown=!1,this.mousemove(t))}mousedown(t){if(!this.editable)return;let s=this.testZone(t);return!this.isDown&&(this.isDown=!0,"text"===s&&this.setInput(this.c[2]),this.mousemove(t))}mousemove(t){if(!this.editable)return;let s=0;return"text"===this.testZone(t)?this.cursor("text"):this.cursor(),this.isDown&&(s=t.clientX-this.zone.x),this.upInput(s-this.sa-3,this.isDown)}update(){this.c[2].textContent=this.value}reset(){this.cursor()}select(t,s,i,e){let h=this.s,o=this.sa+5;h[4].width="1px",h[4].left=o+s+"px",h[3].left=o+s+"px",h[3].width=i+"px",this.c[3].innerHTML=e}unselect(){let t=this.s;t&&(t[3].width="0px",this.c[3].innerHTML="t",t[4].width="0px")}validate(t){this.allway&&(t=!0),this.value=this.c[2].textContent,""!==this.value?this.c[5].textContent="":this.c[5].textContent=this.placeHolder,t&&this.send()}rSize(){super.rSize();let t=this.s;t[2].left=this.sa+"px",t[2].width=this.sb+"px",t[5].left=this.sa+"px",t[5].width=this.sb+"px"}}class k extends r{constructor(t={}){super(t);let s=t.prefix||"";this.c[2]=this.dom("div",this.css.txt+"justify-content:right; width:60px; line-height:"+(this.h-8)+"px; color:"+this.colors.text),31===this.h&&(this.s[0].height=this.h+"px",this.s[1].top="8px",this.c[2].style.top="8px");let i=this.s;i[1].justifyContent=t.align||"left",i[1].fontWeight=t.fontWeight||"bold",this.c[1].textContent=this.txt.substring(0,1).toUpperCase()+this.txt.substring(1).replace("-"," "),this.c[2].textContent=s,this.init()}text(t){this.c[1].textContent=t}text2(t){this.c[2].textContent=t}rSize(){super.rSize(),this.s[1].width=this.w+"px",this.s[2].left=this.w+"px"}setColor(t){this.s[1].color=t,this.s[2].color=t}}class S extends r{constructor(t={}){super(t),this.value=t.value||"",this.isDown=!1,this.onActif=t.onActif||function(){};const s=this.colors;this.c[2]=this.dom("div",this.css.txt+this.css.button+" top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.buttonBorder+"; border-radius:15px; width:30px; left:10px;"),this.c[3]=this.dom("div",this.css.txtselect+"height:"+(this.h-4)+"px; background:"+s.inputBg+"; borderColor:"+s.inputBorder+"; border-radius:"+this.radius+"px;"),this.c[3].textContent=this.value;let i=Math.floor(.5*this.h)-7;this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:14px; height:14px; left:5px; top:"+i+"px;",{d:this.svgs.cursor,fill:s.text,stroke:"none"}),this.stat=1,this.isActif=!1,this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>this.sa&&s.xthis.sa&&s.xi[r][0]&&s.xe[r][0]&&s.ythis.lng-1&&(h=-1)),h}mouseup(t){return!!this.isDown&&(this.isDown=!1,-1!==this.res&&(this.value=this.values[this.res],this.send()),this.mousemove(t))}mousedown(t){return!this.isDown&&(this.isDown=!0,this.mousemove(t))}mousemove(t){let s=!1;return this.res=this.testZone(t),-1!==this.res?(this.cursor("pointer"),s=this.modes(this.isDown?3:2,this.res)):s=this.reset(),s}modes(t=1,s=-1){let i,e,h=this.lng,o=!1;for(;h--;)e=t,i=!!this.isSelectable&&this.values[h]===this.value,h===s?i&&2===e&&(e=3):(e=1,i&&(e=4)),this.mode(e,h)&&(o=!0);return o}mode(t,s){let i=!1,e=this.colors,h=this.buttons,o=s;if(this.stat[s]!==t){switch(this.stat[s]=t,t){case 1:h[o].style.color=e.text,h[o].style.background=e.button;break;case 2:h[o].style.color=e.textOver,h[o].style.background=e.overoff;break;case 3:h[o].style.color=e.textOver,h[o].style.background=e.over;break;case 4:h[o].style.color=e.textSelect,h[o].style.background=e.select}i=!0}return i}reset(){return this.res=-1,this.cursor(),this.modes()}label(t,s){this.buttons[s].textContent=t}icon(t,s,i){this.buttons[i].style.padding=(s||0)+"px 0px",this.buttons[i].innerHTML=t}testW(){let t=!1;if(3*this.spaces[0]+2*this.bsizeMax>this.w?(this.bsize[0]=.5*(this.w-3*this.spaces[0]),t=!0):this.bsize[0]!==this.bsizeMax&&(this.bsize[0]=this.bsizeMax,t=!0),!t)return;let s=this.buttons.length;for(;s--;)this.buttons[s].style.width=this.bsize[0]+"px"}rSize(){let t;super.rSize(),this.testW(),this.tmpX=[],this.tmpY=[];for(let s=0;sthis.h-this.c[2].offsetHeight?"text":"pad"}mouseup(t){return this.isDown=!1,this.mode(0)}mousedown(t){if("pad"===this.testZone(t))return this.isDown=!0,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=.5*this.w-(t.clientX-this.zone.x),i=.5*this.diam-(t.clientY-this.zone.y-this.ytop),e=256/this.diam;s=-s*e,i=-i*e,s=h.clamp(s,-this.maxPos,this.maxPos),i=h.clamp(i,-this.maxPos,this.maxPos),this.setPos([s,i]),this.update(!0)}mode(t){if(this.cmode===t)return!1;let s=this.colors;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.back,0),this.setSvg(this.c[3],"fill",s.button,1),this.setSvg(this.c[3],"stroke",s.back,2),this.setSvg(this.c[3],"stroke",s.back,3),this.setSvg(this.c[3],"stroke",s.text,4);break;case 1:this.s[2].color=s.textSelect,this.setSvg(this.c[3],"fill",s.backoff,0),this.setSvg(this.c[3],"fill",s.overoff,1),this.setSvg(this.c[3],"stroke",s.backoff,2),this.setSvg(this.c[3],"stroke",s.backoff,3),this.setSvg(this.c[3],"stroke",s.textSelect,4)}return this.cmode=t,!0}update(t){this.c[2].textContent=this.value,this.updateSVG(),t&&this.send()}updateSVG(){1==this.model&&(this.setSvg(this.c[3],"y1",this.pos.y,2),this.setSvg(this.c[3],"y2",this.pos.y,2),this.setSvg(this.c[3],"x1",this.pos.x,3),this.setSvg(this.c[3],"x2",this.pos.x,3)),this.setSvg(this.c[3],"cx",this.pos.x,4),this.setSvg(this.c[3],"cy",this.pos.y,4)}setPos(t){this.pos.set(t[0]+128,t[1]+128);let s=1/this.maxPos;this.value[0]=(t[0]*s*this.range).toFixed(this.precision),this.value[1]=(t[1]*s*this.range).toFixed(this.precision)}setValue(t,s=!1){void 0===t&&(t=this.value),this.value[0]=1*Math.min(this.max,Math.max(this.min,t[0])).toFixed(this.precision),this.value[1]=1*Math.min(this.max,Math.max(this.min,t[1])).toFixed(this.precision),this.pos.set(this.value[0]/this.range*this.maxPos+128,this.value[1]/this.range*this.maxPos+128),this.update(s)}}const T=function(){let t,s,e=arguments,h=!1,o=null;"string"==typeof e[0]?(t=e[0],s=e[1]||{}):"object"==typeof e[0]&&(h=!0,void 0===e[2]&&[].push.call(e,{}),t=e[2].type?e[2].type:O(e[0][e[1]],e[2]),s=e[2],s.name=e[1],s.hasOwnProperty("displayName")&&(s.name=s.displayName),"list"!==t||s.list?s.value=e[0][e[1]]:s.list=e[0][e[1]]);let n=t.toLowerCase();switch("group"===n&&(s.add=T),n){case"bool":case"boolean":o=new l(s);break;case"button":o=new a(s);break;case"circular":o=new c(s);break;case"color":o=new d(s);break;case"fps":o=new u(s);break;case"graph":o=new p(s);break;case"group":o=new g(s);break;case"joystick":o=new x(s);break;case"knob":o=new v(s);break;case"list":o=new b(s);break;case"numeric":case"number":o=new f(s);break;case"slide":o=new w(s);break;case"textInput":case"string":o=new y(s);break;case"title":case"text":o=new k(s);break;case"select":o=new S(s);break;case"bitmap":o=new M(s);break;case"selector":o=new I(s);break;case"empty":case"space":o=new m(s);break;case"item":o=new C(s);break;case"grid":o=new L(s);break;case"pad2d":case"pad":o=new z(s)}if(null!==o)return i.needResize=!0,h&&o.setReferency(e[0],e[1]),o},O=function(t,s){let i="slide";return"boolean"==typeof t?i="bool":"string"==typeof t?i="#"===t.substring(0,1)?"color":"string":"number"==typeof t?i=s.ctype?"color":"slide":"array"==typeof t&&t instanceof Array?"number"==typeof t[0]?i="number":"string"==typeof t[0]&&(i="list"):"object"==typeof t&&t instanceof Object&&(i=void 0!==t.x?"number":"list"),i};class D{constructor(t={}){this.isGui=!0,this.name="gui",this.canvas=null,this.screen=null,this.plane=t.plane||null,t.config&&(t.colors=t.config),t.colors?this.setConfig(t.colors):this.colors=h.defineColor(t),this.css=h.cloneCss(),this.isReset=!0,this.tmpAdd=null,this.isCanvas=t.isCanvas||!1,this.isCanvasOnly=!1,i.addDOMEventListeners=!t.hasOwnProperty("addDOMEventListeners")||t.addDOMEventListeners,this.callback=void 0===t.callback?null:t.callback,this.forceHeight=t.maxHeight||0,this.lockHeight=t.lockHeight||!1,this.isItemMode=void 0!==t.itemMode&&t.itemMode,this.cn="",this.size=h.size,void 0!==t.p&&(this.size.p=t.p),void 0!==t.w&&(this.size.w=t.w),void 0!==t.h&&(this.size.h=t.h),void 0!==t.s&&(this.size.s=t.s),this.size.h=this.size.h<11?11:this.size.h,this.local=(new n).neg(),this.zone={x:0,y:0,w:this.size.w,h:0},this.mouse=(new n).neg(),this.h=0,this.sw=0,this.margin=this.colors.sy,this.marginDiv=h.isDivid(this.margin),this.isWithClose=void 0===t.close||t.close,this.bh=this.isWithClose?this.size.h:0,this.autoResize=void 0===t.autoResize||t.autoResize,this.isCenter=t.center||!1,this.cssGui=void 0!==t.css?t.css:this.isCenter?"":"right:10px;",this.isOpen=void 0===t.open||t.open,this.isDown=!1,this.isScroll=!1,this.uis=[],this.current=-1,this.proto=null,this.isEmpty=!0,this.decal=0,this.ratio=1,this.oy=0,this.isNewTarget=!1;let s=this.colors;this.content=h.dom("div",this.css.basic+" width:0px; height:auto; top:0px; background:"+s.content+"; "+this.cssGui),this.innerContent=h.dom("div",this.css.basic+"width:100%; top:0; left:0; height:auto; overflow:hidden;"),this.content.appendChild(this.innerContent),this.useFlex=!0;let e=this.useFlex?"display:flex; flex-flow: row wrap;":"";this.inner=h.dom("div",this.css.basic+e+"width:100%; left:0; "),this.innerContent.appendChild(this.inner),this.scrollBG=h.dom("div",this.css.basic+"right:0; top:0; width:"+(this.size.s-1)+"px; height:10px; display:none; background:"+s.background+";"),this.content.appendChild(this.scrollBG),this.scroll=h.dom("div",this.css.basic+"background:"+s.button+"; right:2px; top:0; width:"+(this.size.s-4)+"px; height:10px;"),this.scrollBG.appendChild(this.scroll),this.bottomText=t.bottomText||["open","close"];let o=s.radius;this.bottom=h.dom("div",this.css.txt+"width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:"+o+"px; border-bottom-left-radius:"+o+"px; justify-content:center; height:"+this.bh+"px; line-height:"+(this.bh-5)+"px; color:"+s.text+";"),this.content.appendChild(this.bottom),this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.bottom.style.background=s.background,this.parent=void 0!==t.parent?t.parent:null,this.parent=void 0!==t.target?t.target:this.parent,null!==this.parent||this.isCanvas||(this.parent=document.body),null!==this.parent&&this.parent.appendChild(this.content),this.isCanvas&&null===this.parent&&(this.isCanvasOnly=!0),this.isCanvasOnly?(this.content.style.left="0px",this.content.style.right="auto",t.transition=0):this.content.style.pointerEvents="auto",this.transition=void 0!==t.transition?t.transition:h.transition,this.transition&&setTimeout(this.addTransition.bind(this),1e3),this.setWidth(),this.isCanvas&&this.makeCanvas(),i.add(this)}triggerMouseDown(t,s){i.handleEvent({type:"pointerdown",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}triggerMouseMove(){i.handleEvent({type:"pointermove",clientX:-1,clientY:-1,delta:0,key:null,keyCode:NaN})}triggerMouseUp(t,s){i.handleEvent({type:"pointerup",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}setTop(t,s){this.content.style.top=t+"px",void 0!==s&&(this.forceHeight=s),this.calc(),i.needReZone=!0}addTransition(){this.transition&&!this.isCanvas&&(this.innerContent.style.transition="height "+this.transition+"s ease-out",this.content.style.transition="height "+this.transition+"s ease-out",this.bottom.style.transition="top "+this.transition+"s ease-out");let t=this.uis.length;for(;t--;)this.uis[t].addTransition()}onDraw(){}makeCanvas(){this.canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),this.canvas.width=this.zone.w,this.canvas.height=this.forceHeight?this.forceHeight:this.zone.h}draw(t){if(null===this.canvas)return;let s=this.zone.w,e=this.forceHeight?this.forceHeight:this.zone.h;i.toCanvas(this,s,e,t)}getDom(){return this.content}noMouse(){this.mouse.neg()}setMouse(t,s=!0){s?this.mouse.set(Math.round(t.x*this.canvas.width),this.canvas.height-Math.round(t.y*this.canvas.height)):this.mouse.set(Math.round(t.x*this.canvas.width),Math.round(t.y*this.canvas.height))}setConfig(t){h.setText(),this.colors=h.defineColor(t)}setColors(t){for(let s in t)this.colors[s]&&(this.colors[s]=t[s])}setText(t,s,i,e){h.setText(t,s,i,e)}hide(t){this.content.style.visibility=t?"hidden":"visible"}display(t=!1){this.content.style.visibility=t?"visible":"hidden"}onChange(t){return this.callback=t||null,this}mode(t){let s=!1,e=this.colors;if(t!==this.cn){switch(this.cn=t,t){case"def":i.cursor(),this.scroll.style.background=e.button,this.bottom.style.background=e.background,this.bottom.style.color=e.text;break;case"scrollOver":i.cursor("ns-resize"),this.scroll.style.background=e.select;break;case"scrollDown":this.scroll.style.background=e.select;break;case"bottomOver":i.cursor("pointer"),this.bottom.style.background=e.backgroundOver,this.bottom.style.color=e.textOver}s=!0}return s}clearTarget(){return-1!==this.current&&(this.proto.s&&(this.proto.uiout(),this.proto.reset()),this.proto=null,this.current=-1,i.cursor(),!0)}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";this.isReset=!1;let i="",e=this.isScroll?this.zone.w-this.size.s:this.zone.w;return i=s.y>this.zone.h-this.bh&&s.ye?"scroll":"content",i}handleEvent(t){let s=t.type,e=!1,h=!1,o=this.testZone(t);if("mouseup"===s&&this.isDown&&(this.isDown=!1),"mousedown"!==s||this.isDown||(this.isDown=!0),this.isDown&&this.isNewTarget&&(i.clearInput(),this.isNewTarget=!1),o){switch(o){case"content":t.clientY=this.isScroll?t.clientY+this.decal:t.clientY,i.isMobile&&"mousedown"===s&&this.getNext(t,e),this.proto&&(h=this.proto.handleEvent(t)),"mousemove"===s&&(e=this.mode("def")),"wheel"===s&&!h&&this.isScroll&&(e=this.onWheel(t)),i.lock||this.getNext(t,e);break;case"bottom":this.clearTarget(),"mousemove"===s&&(e=this.mode("bottomOver")),"mousedown"===s&&(this.isOpen=!this.isOpen,this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.calc(),this.mode("def"),e=!0);break;case"scroll":this.clearTarget(),"mousemove"===s&&(e=this.mode("scrollOver")),"mousedown"===s&&(e=this.mode("scrollDown")),"wheel"===s&&(e=this.onWheel(t)),this.isDown&&this.update(t.clientY-this.zone.y-.5*this.sh)}this.isDown&&(e=!0),h&&(e=!0),"keyup"===s&&(e=!0),"keydown"===s&&(e=!0),e&&this.draw()}}getNext(t,s){let e=i.findTarget(this.uis,t);e!==this.current&&(this.clearTarget(),this.current=e,this.isNewTarget=!0),-1!==e&&(this.proto=this.uis[this.current],this.proto.uiover())}onWheel(t){return this.oy+=20*t.delta,this.update(this.oy),!0}reset(t){if(this.isReset)return;this.mouse.neg(),this.isDown=!1;let s=this.mode("def"),i=this.clearTarget();(s||i)&&this.draw(!0),this.isReset=!0}add(){let t=arguments,s=!1;"object"==typeof t[1]?(t[1].isUI=!0,t[1].main=this,s=!!t[1].ontop&&t[1].ontop):"string"==typeof t[1]&&(void 0===t[2]?[].push.call(t,{isUI:!0,main:this}):(t[2].isUI=!0,t[2].main=this,s=!!t[2].ontop&&t[2].ontop));let i=T.apply(this,t);if(null!==i)return s?this.uis.unshift(i):this.uis.push(i),this.calc(),this.isEmpty=!1,i}remove(t){t.dispose&&t.dispose()}clearOne(t){let s=this.uis.indexOf(t);-1!==s&&(this.inner.removeChild(this.uis[s].c[0]),this.uis.splice(s,1),this.calc())}empty(){let t,s=this.uis.length;for(;s--;)t=this.uis.pop(),this.inner.removeChild(t.c[0]),t.dispose();this.uis=[],this.isEmpty=!0,this.calc()}clear(){this.empty()}clear2(){setTimeout(this.empty.bind(this),0)}dispose(){this.clear(),null!==this.parent&&this.parent.removeChild(this.content),i.remove(this)}resetItem(){if(!this.isItemMode)return;let t=this.uis.length;for(;t--;)this.uis[t].selected()}setItem(t){if(!this.isItemMode)return;if(t=t||"",this.resetItem(),!t)return void this.update(0);let s=this.uis.length;for(;s--;)this.uis[s].value===t&&(this.uis[s].selected(!0),this.isScroll&&this.update(s*(this.uis[s].h+this.margin)*this.ratio))}upScroll(t){this.sw=t?this.size.s:0,this.oy=t?this.oy:0,this.scrollBG.style.display=t?"block":"none",t&&(this.total=this.h,this.maxView=this.maxHeight,this.ratio=this.maxView/this.total,this.sh=this.maxView*this.ratio,this.range=this.maxView-this.sh,this.oy=h.clamp(this.oy,0,this.range),this.scrollBG.style.height=this.maxView+"px",this.scroll.style.height=this.sh+"px"),this.setItemWidth(this.zone.w-this.sw),this.update(this.oy)}update(t){t=h.clamp(t,0,this.range),this.decal=Math.floor(t/this.ratio),this.inner.style.top=-this.decal+"px",this.scroll.style.top=Math.floor(t)+"px",this.oy=t}calcUis(){return i.calcUis(this.uis,this.zone,this.zone.y)}calc(){clearTimeout(this.tmp),this.tmp=setTimeout(this.setHeight.bind(this),10)}setHeight(){if(this.tmp&&clearTimeout(this.tmp),this.zone.h=this.bh,this.isScroll=!1,this.isOpen){this.h=this.calcUis();let t=this.forceHeight?this.forceHeight+this.zone.y:window.innerHeight;this.maxHeight=t-this.zone.y-this.bh,this.h-this.maxHeight>1?(this.isScroll=!0,this.zone.h=this.maxHeight+this.bh):this.zone.h=this.h+this.bh}this.upScroll(this.isScroll),this.innerContent.style.height=this.zone.h-this.bh+"px",this.content.style.height=this.zone.h+"px",this.bottom.style.top=this.zone.h-this.bh+"px",this.forceHeight&&this.lockHeight&&(this.content.style.height=this.forceHeight+"px"),this.isCanvas&&this.draw(!0)}rezone(){i.needReZone=!0}setWidth(t){t&&(this.zone.w=t),this.zone.w=Math.floor(this.zone.w),this.content.style.width=this.zone.w+"px",this.isCenter&&(this.content.style.marginLeft=-Math.floor(.5*this.zone.w)+"px"),this.setItemWidth(this.zone.w-this.sw)}setItemWidth(t){let s=this.uis.length;for(;s--;)this.uis[s].setSize(t),this.uis[s].rSize()}}export{o as Files,D as Gui,t as REVISION,h as Tools,T as add}; +/** + * @author lth / https://github.com/lo-th + */ + +const REVISION = "4.3.0"; + +// INTENAL FUNCTION + +const R = { + ui: [], + + dom: null, + + ID: null, + lock: false, + wlock: false, + current: -1, + + needReZone: true, + needResize: false, + forceZone: false, + isEventsInit: false, + isLeave: false, + addDOMEventListeners: true, + + downTime: 0, + prevTime: 0, + + //prevDefault: ['contextmenu', 'wheel'], + prevDefault: ["contextmenu"], + pointerEvent: ["pointerdown", "pointermove", "pointerup"], + eventOut: ["pointercancel", "pointerout", "pointerleave"], + + xmlserializer: null, + tmpTime: null, + tmpImage: null, + + oldCursor: "auto", + + input: null, + parent: null, + firstImput: true, + + hiddenImput: null, + hiddenSizer: null, + hasFocus: false, + startInput: false, + inputRange: [0, 0], + cursorId: 0, + str: "", + pos: 0, + startX: -1, + moveX: -1, + + debugInput: false, + + isLoop: false, + listens: [], + + e: { + type: null, + clientX: 0, + clientY: 0, + keyCode: NaN, + key: null, + delta: 0, + }, + + isMobile: false, + + now: null, + needsUpdate: false, + + getTime: function () { + return self.performance && self.performance.now + ? self.performance.now.bind(performance) + : Date.now; + }, + + add: function (o) { + // R.ui[0] is de GUI object that is added first by the constructor + R.ui.push(o); + R.getZone(o); + + if (!R.isEventsInit) R.initEvents(); + }, + + testMobile: function () { + let n = navigator.userAgent; + if ( + n.match(/Android/i) || + n.match(/webOS/i) || + n.match(/iPhone/i) || + n.match(/iPad/i) || + n.match(/iPod/i) || + n.match(/BlackBerry/i) || + n.match(/Windows Phone/i) + ) + return true; + else return false; + }, + + remove: function (o) { + let i = R.ui.indexOf(o); + + if (i !== -1) { + R.removeListen(o); + R.ui.splice(i, 1); + } + + if (R.ui.length === 0) { + R.removeEvents(); + } + }, + + // ---------------------- + // EVENTS + // ---------------------- + + initEvents: function () { + if (R.isEventsInit) return; + + let dom = document.body; + + R.isMobile = R.testMobile(); + R.now = R.getTime(); + + if (!R.isMobile) { + dom.addEventListener("wheel", R, { passive: false }); + } else { + dom.style.touchAction = "none"; + } + + console.log("R.addDOMEventListeners " + R.addDOMEventListeners); + if (R.addDOMEventListeners) { + dom.addEventListener("pointercancel", R); + dom.addEventListener("pointerleave", R); + //dom.addEventListener( 'pointerout', R ) + + dom.addEventListener("pointermove", R); + dom.addEventListener("pointerdown", R); + dom.addEventListener("pointerup", R); + + dom.addEventListener("keydown", R, false); + dom.addEventListener("keyup", R, false); + } + window.addEventListener("resize", R.resize, false); + + //window.onblur = R.out; + //window.onfocus = R.in; + + R.isEventsInit = true; + R.dom = dom; + }, + + removeEvents: function () { + if (!R.isEventsInit) return; + + let dom = document.body; + + if (!R.isMobile) { + dom.removeEventListener("wheel", R); + } + + if (R.addDOMEventListeners) { + dom.removeEventListener("pointercancel", R); + dom.removeEventListener("pointerleave", R); + //dom.removeEventListener( 'pointerout', R ); + + dom.removeEventListener("pointermove", R); + dom.removeEventListener("pointerdown", R); + dom.removeEventListener("pointerup", R); + + dom.removeEventListener("keydown", R); + dom.removeEventListener("keyup", R); + } + window.removeEventListener("resize", R.resize); + + R.isEventsInit = false; + }, + + resize: function () { + let i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); + } + + R.needReZone = true; + R.needResize = false; + }, + + out: function () { + console.log("im am out"); + R.clearOldID(); + }, + + in: function () { + console.log("im am in"); + // R.clearOldID(); + }, + + // ---------------------- + // HANDLE EVENTS + // ---------------------- + + fakeUp: function () { + this.handleEvent({ type: "pointerup" }); + }, + + handleEvent: function (event) { + //console.log("Roots.handleEvent "+event.type) + //if(!event.type) return; + + if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); + + if (R.needResize) R.resize(); + + R.findZone(R.forceZone); + + let e = R.e; + let leave = false; + + if (event.type === "keydown") R.keydown(event); + if (event.type === "keyup") R.keyup(event); + + if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; + else e.delta = 0; + + let ptype = event.pointerType; // mouse, pen, touch + + e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; + e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; + + e.type = event.type; + + if (R.eventOut.indexOf(event.type) !== -1) { + leave = true; + e.type = "mouseup"; + } + + if (event.type === "pointerleave") R.isLeave = true; + + if (event.type === "pointerdown") e.type = "mousedown"; + if (event.type === "pointerup") e.type = "mouseup"; + if (event.type === "pointermove") { + if (R.isLeave) { + // if user resize outside this document + R.isLeave = false; + R.resize(); + } + e.type = "mousemove"; + } + + // double click test + if (e.type === "mousedown") { + R.downTime = R.now(); + let time = R.downTime - R.prevTime; + + // double click on imput + if (time < 200) { + R.selectAll(); + return false; + } + + R.prevTime = R.downTime; + R.forceZone = false; + } + + // for imput + if (e.type === "mousedown") R.clearInput(); + + // mouse lock + if (e.type === "mousedown") R.lock = true; + if (e.type === "mouseup") R.lock = false; + + //if( R.current !== null && R.current.neverlock ) R.lock = false; + + /*if( e.type === 'mousedown' && event.button === 1){ + R.cursor() + e.preventDefault(); + e.stopPropagation(); + }*/ + + //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) + + if (R.isMobile && e.type === "mousedown") R.findID(e); + if (e.type === "mousemove" && !R.lock) R.findID(e); + + if (R.ID !== null) { + if (R.ID.isCanvasOnly) { + e.clientX = R.ID.mouse.x; + e.clientY = R.ID.mouse.y; + } + + //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 + + R.ID.handleEvent(e); + } + + if (R.isMobile && e.type === "mouseup") R.clearOldID(); + if (leave) R.clearOldID(); + }, + + // ---------------------- + // ID + // ---------------------- + + findID: function (e) { + let i = R.ui.length, + next = -1, + u, + x, + y; + + while (i--) { + u = R.ui[i]; + + if (u.isCanvasOnly) { + x = u.mouse.x; + y = u.mouse.y; + } else { + x = e.clientX; + y = e.clientY; + } + + if (R.onZone(u, x, y)) { + next = i; + + if (next !== R.current) { + R.clearOldID(); + R.current = next; + R.ID = u; + } + break; + } + } + + if (next === -1) R.clearOldID(); + }, + + clearOldID: function () { + if (!R.ID) return; + R.current = -1; + R.ID.reset(); + R.ID = null; + R.cursor(); + }, + + // ---------------------- + // GUI / GROUP FUNCTION + // ---------------------- + + calcUis: (uis, zone, py, group = false) => { + //console.log('calc_uis') + + let i = uis.length, + u, + px = 0, + n = 0, + tw, + m; + + let height = 0; + + while (i--) { + u = uis[n]; + n++; + + if (!group && u.isGroup) u.calcUis(); + + m = u.margin; + //div = u.marginDiv + + u.zone.w = u.w; + u.zone.h = u.h + m; + + if (!u.autoWidth) { + if (px === 0) height += u.h + m; + + u.zone.x = zone.x + px; + u.zone.y = py; // + u.mtop + //if(div) u.zone.y += m * 0.5 + + tw = R.getWidth(u); + if (tw) u.zone.w = u.w = tw; + else if (u.fw) u.zone.w = u.w = u.fw; + + px += u.zone.w; + + if (px >= zone.w) { + py += u.h + m; + //if(div) py += m * 0.5 + px = 0; + } + } else { + px = 0; + + u.zone.x = zone.x + u.dx; + u.zone.y = py; + py += u.h + m; + + height += u.h + m; + } + } + + return height; + }, + + findTarget: function (uis, e) { + let i = uis.length; + + while (i--) { + if (R.onZone(uis[i], e.clientX, e.clientY)) return i; + } + + return -1; + }, + + // ---------------------- + // ZONE + // ---------------------- + + findZone: function (force) { + if (!R.needReZone && !force) return; + + var i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + R.getZone(u); + if (u.isGui) u.calcUis(); + } + + R.needReZone = false; + }, + + onZone: function (o, x, y) { + if (x === undefined || y === undefined) return false; + + let z = o.zone; + let mx = x - z.x; // - o.dx; + let my = y - z.y; + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 + //if( o.group !== null ) mx -= o.dx + + let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; + + //if( o.marginDiv ) my -= o.margin * 0.5 + + if (over) o.local.set(mx, my); + else o.local.neg(); + + return over; + }, + + getWidth: function (o) { + //return o.getDom().offsetWidth + return o.getDom().clientWidth; + + //let r = o.getDom().getBoundingClientRect(); + //return (r.width) + //return Math.floor(r.width) + }, + + getZone: function (o) { + if (o.isCanvasOnly) return; + let r = o.getDom().getBoundingClientRect(); + + //if( !r.width ) return + //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; + //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; + o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; + + //console.log(o.name, o.zone) + }, + + // ---------------------- + // CURSOR + // ---------------------- + + cursor: function (name) { + name = name ? name : "auto"; + if (name !== R.oldCursor) { + document.body.style.cursor = name; + R.oldCursor = name; + } + }, + + // ---------------------- + // CANVAS + // ---------------------- + + toCanvas: function (o, w, h, force) { + if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); + + // prevent exesive redraw + + if (force && R.tmpTime !== null) { + clearTimeout(R.tmpTime); + R.tmpTime = null; + } + + if (R.tmpTime !== null) return; + + if (R.lock) + R.tmpTime = setTimeout(function () { + R.tmpTime = null; + }, 10); + + /// + + let isNewSize = false; + if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; + + if (R.tmpImage === null) R.tmpImage = new Image(); + + let img = R.tmpImage; //new Image(); + + let htmlString = R.xmlserializer.serializeToString(o.content); + + let svg = + '' + + htmlString + + ""; + + img.onload = function () { + let ctx = o.canvas.getContext("2d"); + + if (isNewSize) { + o.canvas.width = w; + o.canvas.height = h; + } else { + ctx.clearRect(0, 0, w, h); + } + ctx.drawImage(this, 0, 0); + + o.onDraw(); + }; + + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); + //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); + img.crossOrigin = ""; + R.needsUpdate = false; + }, + + // ---------------------- + // INPUT + // ---------------------- + + setHidden: function () { + if (R.hiddenImput === null) { + //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' + //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' + //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; + + R.hiddenImput = document.createElement("input"); + R.hiddenImput.type = "text"; + //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); + + R.hiddenSizer = document.createElement("div"); + //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; + + document.body.appendChild(R.hiddenImput); + document.body.appendChild(R.hiddenSizer); + } + + let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; + let css = + R.parent.css.txtselect + + "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + + hide; + R.hiddenImput.style.cssText = + css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); + R.hiddenSizer.style.cssText = css + "bottom:40px;"; + + R.hiddenImput.style.width = R.input.clientWidth + "px"; + R.hiddenImput.value = R.str; + R.hiddenSizer.innerHTML = R.str; + + R.hasFocus = true; + }, + + clearHidden: function (p) { + if (R.hiddenImput === null) return; + R.hasFocus = false; + }, + + clickPos: function (x) { + let i = R.str.length, + l = 0, + n = 0; + while (i--) { + l += R.textWidth(R.str[n]); + if (l >= x) break; + n++; + } + return n; + }, + + upInput: function (x, down) { + if (R.parent === null) return false; + + let up = false; + + if (down) { + let id = R.clickPos(x); + + R.moveX = id; + + if (R.startX === -1) { + R.startX = id; + R.cursorId = id; + R.inputRange = [R.startX, R.startX]; + } else { + let isSelection = R.moveX !== R.startX; + + if (isSelection) { + if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; + else R.inputRange = [R.startX, R.moveX]; + } + } + + up = true; + } else { + if (R.startX !== -1) { + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.startX = -1; + + up = true; + } + } + + if (up) R.selectParent(); + + return up; + }, + + selectAll: function () { + if (!R.parent) return; + + R.str = R.input.textContent; + R.inputRange = [0, R.str.length]; + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.cursorId = R.inputRange[1]; + R.selectParent(); + }, + + selectParent: function () { + var c = R.textWidth(R.str.substring(0, R.cursorId)); + var e = R.textWidth(R.str.substring(0, R.inputRange[0])); + var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); + + R.parent.select(c, e, s, R.hiddenSizer.innerHTML); + }, + + textWidth: function (text) { + if (R.hiddenSizer === null) return 0; + text = text.replace(/ /g, " "); + R.hiddenSizer.innerHTML = text; + return R.hiddenSizer.clientWidth; + }, + + clearInput: function () { + if (R.parent === null) return; + if (!R.firstImput) R.parent.validate(true); + + R.clearHidden(); + R.parent.unselect(); + + //R.input.style.background = 'none'; + R.input.style.background = R.parent.colors.back; + R.input.style.borderColor = R.parent.colors.border; + //R.input.style.color = R.parent.colors.text; + R.parent.isEdit = false; + + R.input = null; + R.parent = null; + (R.str = ""), (R.firstImput = true); + }, + + setInput: function (Input, parent) { + R.clearInput(); + + R.input = Input; + R.parent = parent; + + R.input.style.background = R.parent.colors.backoff; + R.input.style.borderColor = R.parent.colors.select; + //R.input.style.color = R.parent.colors.textSelect; + R.str = R.input.textContent; + + R.setHidden(); + }, + + keydown: function (e) { + if (R.parent === null) return; + + let keyCode = e.which; + e.shiftKey; + + //console.log( keyCode ) + + R.firstImput = false; + + if (R.hasFocus) { + // hack to fix touch event bug in iOS Safari + window.focus(); + R.hiddenImput.focus(); + } + + R.parent.isEdit = true; + + // e.preventDefault(); + + // add support for Ctrl/Cmd+A selection + //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { + //R.selectText(); + //e.preventDefault(); + //return self.render(); + //} + + if (keyCode === 13) { + //enter + + R.clearInput(); + + //} else if( keyCode === 9 ){ //tab key + + // R.input.textContent = ''; + } else { + if (R.input.isNum) { + if ( + (e.keyCode > 47 && e.keyCode < 58) || + (e.keyCode > 95 && e.keyCode < 106) || + e.keyCode === 190 || + e.keyCode === 110 || + e.keyCode === 8 || + e.keyCode === 109 + ) { + R.hiddenImput.readOnly = false; + } else { + R.hiddenImput.readOnly = true; + } + } else { + R.hiddenImput.readOnly = false; + } + } + }, + + keyup: function (e) { + if (R.parent === null) return; + + R.str = R.hiddenImput.value; + + if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value + else R.input.textContent = R.str; + + R.cursorId = R.hiddenImput.selectionStart; + R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; + + R.selectParent(); + + //if( R.parent.allway ) + R.parent.validate(); + }, + + // ---------------------- + // + // LISTENING + // + // ---------------------- + + loop: function () { + // modified by Fedemarino + if (R.isLoop) requestAnimationFrame(R.loop); + R.needsUpdate = R.update(); + // if there is a change in a value generated externally, the GUI needs to be redrawn + if (R.ui[0]) R.ui[0].draw(); + }, + + update: function () { + // modified by Fedemarino + let i = R.listens.length; + let needsUpdate = false; + while (i--) { + //check if the value of the object has changed + let hasChanged = R.listens[i].listening(); + if (hasChanged) needsUpdate = true; + } + return needsUpdate; + }, + + removeListen: function (proto) { + let id = R.listens.indexOf(proto); + if (id !== -1) R.listens.splice(id, 1); + if (R.listens.length === 0) R.isLoop = false; + }, + + addListen: function (proto) { + let id = R.listens.indexOf(proto); + + if (id !== -1) return false; + + R.listens.push(proto); + + if (!R.isLoop) { + R.isLoop = true; + R.loop(); + } + + return true; + }, +}; + +const Roots = R; + +/** + * @author lth / https://github.com/lo-th + */ + +const T = { + + transition: 0.2, + + frag: document.createDocumentFragment(), + + colorRing: null, + joystick_0: null, + joystick_1: null, + circular: null, + knob: null, + pad2d: null, + + svgns: "http://www.w3.org/2000/svg", + links: "http://www.w3.org/1999/xlink", + htmls: "http://www.w3.org/1999/xhtml", + + DOM_SIZE: [ 'height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], + SVG_TYPE_D: [ 'pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix' ], + SVG_TYPE_G: [ 'svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject' ], + + PI: Math.PI, + TwoPI: Math.PI*2, + pi90: Math.PI * 0.5, + pi60: Math.PI/3, + + torad: Math.PI / 180, + todeg: 180 / Math.PI, + + clamp: ( v, min, max ) => { + + v = v < min ? min : v; + v = v > max ? max : v; + return v; + + }, + + isDivid: ( v ) => ( v*0.5 === Math.floor(v*0.5) ), + + size: { w: 240, h: 20, p: 30, s: 8 }, + + // ---------------------- + // COLOR + // ---------------------- + + defineColor: ( o, cc = T.colors ) => { + + let color = { ...cc }; + + let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize' ]; + let changeText = false; + + if( o.font ) o.fontFamily = o.font; + if( o.shadow ) o.fontShadow = o.shadow; + if( o.weight ) o.fontWeight = o.weight; + + if( o.fontColor ) o.text = o.fontColor; + if( o.color ) o.text = o.color; + + if( o.text ){ + color.text = o.text; + if( !o.fontColor && !o.color ){ + color.title = T.ColorLuma( o.text, -0.25 ); + color.titleoff = T.ColorLuma( o.text, -0.5 ); + } + color.textOver = T.ColorLuma( o.text, 0.25 ); + color.textSelect = T.ColorLuma( o.text, 0.5 ); + } + + if( o.button ){ + color.button = o.button; + color.border = T.ColorLuma( o.button, 0.1 ); + color.overoff = T.ColorLuma( o.button, 0.2 ); + } + + if( o.select ){ + color.select = o.select; + color.over = T.ColorLuma( o.select, -0.1 ); + } + + if( o.itemBg ) o.back = o.itemBg; + + if( o.back ){ + color.back = o.back; + color.backoff = T.ColorLuma( o.back, -0.1 ); + } + + if( o.fontSelect ) color.textSelect = o.fontSelect; + if( o.groupBorder ) color.gborder = o.groupBorder; + + //if( o.transparent ) o.bg = 'none' + //if( o.bg ) color.background = color.backgroundOver = o.bg + if( o.bgOver ) color.backgroundOver = o.bgOver; + + for( let m in color ){ + if(o[m]!==undefined) color[m] = o[m]; + } + + for( let m in o ){ + if( textChange.indexOf(m) !== -1 ) changeText = true; + } + + if( changeText ) T.defineText( color ); + + return color + + }, + + colors: { + + sx: 4,//4 + sy: 2,//2 + radius:2, + + showOver : 1, + //groupOver : 1, + + content:'none', + background: 'rgba(50,50,50,0.15)', + backgroundOver: 'rgba(50,50,50,0.3)', + + title : '#CCC', + titleoff : '#BBB', + text : '#DDD', + textOver : '#EEE', + textSelect : '#FFF', + + back:'rgba(0,0,0,0.2)', + backoff:'rgba(0,0,0,0.3)', + + // input and button border + border : '#4c4c4c', + borderSize : 1, + + gborder : 'none', + groups : 'none', + + + button : '#3c3c3c', + overoff : '#5c5c5c', + over : '#024699', + select : '#308AFF', + action: '#FF3300', + + //fontFamily: 'Tahoma', + fontFamily: 'Consolas, monospace', + //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", + fontWeight: 'normal', + fontShadow: 'none',//'#000', + fontSize:12, + + joyOver:'rgba(48,138,255,0.25)', + joyOut: 'rgba(100,100,100,0.5)', + joySelect: '#308AFF', + + + hide: 'rgba(0,0,0,0)', + + }, + + // style css + + css : { + + basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', + button:'display:flex; align-items:center; justify-content:center; text-align:center;', + middle:'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' + }, + + // svg path + + svgs: { + + g1:'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', + g2:'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', + + group:'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', + arrow:'M 3 8 L 8 5 3 2 3 8 Z', + + arrowDown:'M 5 8 L 8 3 2 3 5 8 Z', + arrowUp:'M 5 2 L 2 7 8 7 5 2 Z', + + solid:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', + body:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', + vehicle:'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', + articulation:'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', + character:'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', + terrain:'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', + joint:'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', + ray:'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', + collision:'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', + map:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + material:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + texture:'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', + object:'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', + none:'M 9 5 L 5 5 5 9 9 9 9 5 Z', + cursor:'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', + load:'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', + save:'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', + extern:'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z', + + }, + + rezone () { + Roots.needReZone = true; + }, + + getImput: function(){ + + return Roots.input ? true : false + + }, + + setStyle : function ( data ){ + + for ( var o in data ){ + if( T.colors[o] ) T.colors[o] = data[o]; + } + + T.setText(); + + }, + + // ---------------------- + // custom text + // ---------------------- + + defineText: function( o ){ + + T.setText( o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight ); + + }, + + setText: function( size, color, font, shadow, weight ){ + + let cc = T.colors; + + if( font === undefined ) font = cc.fontFamily; + if( size === undefined ) size = cc.fontSize; + if( shadow === undefined ) shadow = cc.fontShadow; + if( weight === undefined ) weight = cc.fontWeight; + if( color === undefined ) color = cc.text; + + if( isNaN(size) ){ if( size.search('em')===-1 ) size += 'px';} + else size += 'px'; + + + //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' + + T.css.txt = T.css.basic + T.css.middle + ' font-family:'+ font +'; font-weight:'+weight+'; font-size:'+size+'; color:'+cc.text+'; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; + if( shadow !== 'none' ) T.css.txt += ' text-shadow: 1px 1px 1px '+shadow+';'; + + T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; + T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; + + }, + + + // note + + //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container + + /*cloneColor: function () { + + let cc = Object.assign({}, T.colors ); + return cc; + + },*/ + + // intern function + + cloneCss: function () { + + //let cc = Object.assign({}, T.css ); + return { ...T.css }; + + }, + + clone: function ( o ) { + + return o.cloneNode( true ); + + }, + + setSvg: function( dom, type, value, id, id2 ){ + + if( id === -1 ) dom.setAttributeNS( null, type, value ); + else if( id2 !== undefined ) dom.childNodes[ id || 0 ].childNodes[ id2 || 0 ].setAttributeNS( null, type, value ); + else dom.childNodes[ id || 0 ].setAttributeNS( null, type, value ); + + }, + + setCss: function( dom, css ){ + + for( let r in css ){ + if( T.DOM_SIZE.indexOf(r) !== -1 ) dom.style[r] = css[r] + 'px'; + else dom.style[r] = css[r]; + } + + }, + + set: function( g, o ){ + + for( let att in o ){ + if( att === 'txt' ) g.textContent = o[ att ]; + if( att === 'link' ) g.setAttributeNS( T.links, 'xlink:href', o[ att ] ); + else g.setAttributeNS( null, att, o[ att ] ); + } + + }, + + get: function( dom, id ){ + + if( id === undefined ) return dom; // root + else if( !isNaN( id ) ) return dom.childNodes[ id ]; // first child + else if( id instanceof Array ){ + if(id.length === 2) return dom.childNodes[ id[0] ].childNodes[ id[1] ]; + if(id.length === 3) return dom.childNodes[ id[0] ].childNodes[ id[1] ].childNodes[ id[2] ]; + } + + }, + + dom : function ( type, css, obj, dom, id ) { + + type = type || 'div'; + + if( T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1 ){ // is svg element + + if( type ==='svg' ){ + + dom = document.createElementNS( T.svgns, 'svg' ); + T.set( dom, obj ); + + /* } else if ( type === 'use' ) { + + dom = document.createElementNS( T.svgns, 'use' ); + T.set( dom, obj ); +*/ + } else { + // create new svg if not def + if( dom === undefined ) dom = document.createElementNS( T.svgns, 'svg' ); + T.addAttributes( dom, type, obj, id ); + + } + + } else { // is html element + + if( dom === undefined ) dom = document.createElementNS( T.htmls, type ); + else dom = dom.appendChild( document.createElementNS( T.htmls, type ) ); + + } + + if( css ) dom.style.cssText = css; + + if( id === undefined ) return dom; + else return dom.childNodes[ id || 0 ]; + + }, + + addAttributes : function( dom, type, o, id ){ + + let g = document.createElementNS( T.svgns, type ); + T.set( g, o ); + T.get( dom, id ).appendChild( g ); + if( T.SVG_TYPE_G.indexOf(type) !== -1 ) g.style.pointerEvents = 'none'; + return g; + + }, + + clear : function( dom ){ + + T.purge( dom ); + while (dom.firstChild) { + if ( dom.firstChild.firstChild ) T.clear( dom.firstChild ); + dom.removeChild( dom.firstChild ); + } + + }, + + purge : function ( dom ) { + + let a = dom.attributes, i, n; + if (a) { + i = a.length; + while(i--){ + n = a[i].name; + if (typeof dom[n] === 'function') dom[n] = null; + } + } + a = dom.childNodes; + if (a) { + i = a.length; + while(i--){ + T.purge( dom.childNodes[i] ); + } + } + + }, + + // ---------------------- + // SVG Effects function + // ---------------------- + + addSVGGlowEffect: function () { + + if ( document.getElementById( 'UILGlow') !== null ) return; + + let svgFilter = T.initUILEffects(); + + let filter = T.addAttributes( svgFilter, 'filter', { id: 'UILGlow', x: '-20%', y: '-20%', width: '140%', height: '140%' } ); + T.addAttributes( filter, 'feGaussianBlur', { in: 'SourceGraphic', stdDeviation: '3', result: 'uilBlur' } ); + let feMerge = T.addAttributes( filter, 'feMerge', { } ); + + for( let i = 0; i <= 3; i++ ) { + + T.addAttributes( feMerge, 'feMergeNode', { in: 'uilBlur' } ); + + } + + T.addAttributes( feMerge, 'feMergeNode', { in: 'SourceGraphic' } ); + + }, + + initUILEffects: function () { + + let svgFilter = document.getElementById( 'UILSVGEffects'); + + if ( svgFilter === null ) { + + svgFilter = T.dom( 'svg', undefined , { id: 'UILSVGEffects', width: '0', height: '0' } ); + document.body.appendChild( svgFilter ); + + } + + return svgFilter; + + }, + + // ---------------------- + // Color function + // ---------------------- + + ColorLuma : function ( hex, l ) { + + //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; + + if( hex === 'n' ) hex = '#000'; + + // validate hex string + hex = String(hex).replace(/[^0-9a-f]/gi, ''); + if (hex.length < 6) { + hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; + } + l = l || 0; + + // convert to decimal and change luminosity + let rgb = "#", c, i; + for (i = 0; i < 3; i++) { + c = parseInt(hex.substr(i*2,2), 16); + c = Math.round(Math.min(Math.max(0, c + (c * l)), 255)).toString(16); + rgb += ("00"+c).substr(c.length); + } + + return rgb; + + }, + + findDeepInver: function ( c ) { + + return (c[0] * 0.3 + c[1] * .59 + c[2] * .11) <= 0.6; + + }, + + lerpColor: function( c1, c2, factor ) { + let newColor = {}; + for ( let i = 0; i < 3; i++ ) { + newColor[i] = c1[ i ] + ( c2[ i ] - c1[ i ] ) * factor; + } + return newColor; + }, + + hexToHtml: function ( v ) { + v = v === undefined ? 0x000000 : v; + return "#" + ("000000" + v.toString(16)).substr(-6); + + }, + + htmlToHex: function ( v ) { + + return v.toUpperCase().replace("#", "0x"); + + }, + + u255: function (c, i) { + + return parseInt(c.substring(i, i + 2), 16) / 255; + + }, + + u16: function ( c, i ) { + + return parseInt(c.substring(i, i + 1), 16) / 15; + + }, + + unpack: function( c ){ + + if (c.length == 7) return [ T.u255(c, 1), T.u255(c, 3), T.u255(c, 5) ]; + else if (c.length == 4) return [ T.u16(c,1), T.u16(c,2), T.u16(c,3) ]; + + }, + + p255: function ( c ) { + let h = Math.round( ( c * 255 ) ).toString( 16 ); + if ( h.length < 2 ) h = '0' + h; + return h; + }, + + pack: function ( c ) { + + return '#' + T.p255( c[ 0 ] ) + T.p255( c[ 1 ] ) + T.p255( c[ 2 ] ); + + }, + + htmlRgb: function( c ){ + + return 'rgb(' + Math.round(c[0] * 255) + ','+ Math.round(c[1] * 255) + ','+ Math.round(c[2] * 255) + ')'; + + }, + + pad: function( n ){ + if(n.length == 1)n = '0' + n; + return n; + }, + + rgbToHex : function( c ){ + + let r = Math.round(c[0] * 255).toString(16); + let g = Math.round(c[1] * 255).toString(16); + let b = Math.round(c[2] * 255).toString(16); + return '#' + T.pad(r) + T.pad(g) + T.pad(b); + + // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); + + }, + + hueToRgb: function( p, q, t ){ + + if ( t < 0 ) t += 1; + if ( t > 1 ) t -= 1; + if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; + if ( t < 1 / 2 ) return q; + if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); + return p; + + }, + + rgbToHsl: function ( c ) { + + let r = c[0], g = c[1], b = c[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h = 0, s = 0, l = (min + max) / 2; + if (l > 0 && l < 1) s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); + if (delta > 0) { + if (max == r && max != g) h += (g - b) / delta; + if (max == g && max != b) h += (2 + (b - r) / delta); + if (max == b && max != r) h += (4 + (r - g) / delta); + h /= 6; + } + return [ h, s, l ]; + + }, + + hslToRgb: function ( c ) { + + let p, q, h = c[0], s = c[1], l = c[2]; + + if ( s === 0 ) return [ l, l, l ]; + else { + q = l <= 0.5 ? l * (s + 1) : l + s - ( l * s ); + p = l * 2 - q; + return [ T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333) ]; + } + + }, + + // ---------------------- + // SVG MODEL + // ---------------------- + + makeGradiant: function ( type, settings, parent, colors ) { + + T.dom( type, null, settings, parent, 0 ); + + let n = parent.childNodes[0].childNodes.length - 1, c; + + for( let i = 0; i < colors.length; i++ ){ + + c = colors[i]; + //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); + T.dom( 'stop', null, { offset:c[0]+'%', 'stop-color':c[1], 'stop-opacity':c[2] }, parent, [0,n] ); + + } + + }, + + /*makeGraph: function () { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 + //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 + //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + + //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 + //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.graph = svg; + + },*/ + + makePad: function ( model ) { + + let ww = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+ww+' '+ww, width:ww, height:ww, preserveAspectRatio:'none' } ); + let w = 200; + let d = (ww-w)*0.5, m = 20; + Tools.dom( 'rect', '', { x: d, y: d, width: w, height: w, fill:T.colors.back }, svg ); // 0 + Tools.dom( 'rect', '', { x: d+m*0.5, y: d+m*0.5, width: w - m , height: w - m, fill:T.colors.button }, svg ); // 1 + // Pointer + Tools.dom( 'line', '', { x1: d+(m*0.5), y1: ww *0.5, x2: d+(w-m*0.5), y2: ww * 0.5, stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 2 + Tools.dom( 'line', '', { x1: ww * 0.5, x2: ww * 0.5, y1: d+(m*0.5), y2: d+(w-m*0.5), stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 3 + Tools.dom( 'circle', '', { cx: ww * 0.5, cy: ww * 0.5, r:5, stroke: T.colors.text, 'stroke-width': 5, fill:'none' }, svg ); // 4 + T.pad2d = svg; + + }, + + makeKnob: function ( model ) { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'round' }, svg );//1 + T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.1)', 'stroke-width':7 , fill:'none'}, svg );//2 + T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.knob = svg; + + }, + + makeCircular: function ( model ) { + + let w = 128; + let radius = 40; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, stroke:'rgba(0,0,0,0.1)', 'stroke-width':10, fill:'none' }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':7, fill:'none', 'stroke-linecap':'butt' }, svg );//1 + T.circular = svg; + + }, + + makeJoystick: function ( model ) { + + //+' background:#f00;' + + let w = 128, ccc; + let radius = Math.floor((w-30)*0.5); + let innerRadius = Math.floor(radius*0.6); + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + if( model === 0 ){ + + + + // gradian background + ccc = [ [40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'grad', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian shadow + ccc = [ [60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradS', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian stick + let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; + let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; + + ccc = [ [30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + ccc = [ [30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn2', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // graph + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'url(#grad)' }, svg );//2 + T.dom( 'circle', '', { cx:64+5, cy:64+10, r:innerRadius+10, fill:'url(#gradS)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'url(#gradIn)' }, svg );//4 + + T.joystick_0 = svg; + + } else { + // gradian shadow + ccc = [ [69, 'rgb(0,0,0)', 0],[70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradX', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'none', stroke:'rgba(100,100,100,0.25)', 'stroke-width':'4' }, svg );//2 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius+14, fill:'url(#gradX)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'none', stroke:'rgb(100,100,100)', 'stroke-width':'4' }, svg );//4 + + T.joystick_1 = svg; + } + + + + }, + + makeColorRing: function () { + + let w = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + let s = 30;//stroke + let r =( w-s )*0.5; + let mid = w*0.5; + let n = 24, nudge = 8 / r / n * Math.PI, a1 = 0; + let am, tan, d2, a2, ar, i, j, path, ccc; + let color = []; + + for ( i = 0; i <= n; ++i) { + + d2 = i / n; + a2 = d2 * T.TwoPI; + am = (a1 + a2) * 0.5; + tan = 1 / Math.cos((a2 - a1) * 0.5); + + ar = [ + Math.sin(a1), -Math.cos(a1), + Math.sin(am) * tan, -Math.cos(am) * tan, + Math.sin(a2), -Math.cos(a2) + ]; + + color[1] = T.rgbToHex( T.hslToRgb([d2, 1, 0.5]) ); + + if (i > 0) { + + j = 6; + while(j--){ + ar[j] = ((ar[j]*r)+mid).toFixed(2); + } + + path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; + + ccc = [ [0,color[0],1], [100,color[1],1] ]; + T.makeGradiant( 'linearGradient', { id:'G'+i, x1:ar[0], y1:ar[1], x2:ar[4], y2:ar[5], gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'path', '', { d:path, 'stroke-width':s, stroke:'url(#G'+i+')', 'stroke-linecap':"butt" }, svg, 1 ); + + } + a1 = a2 - nudge; + color[0] = color[1]; + } + + let tw = 84.90; + + // black / white + ccc = [ [0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1] ]; + T.makeGradiant( 'linearGradient', { id:'GL0', x1:0, y1:mid-tw, x2:0, y2:mid+tw, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + ccc = [ [0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0] ]; + T.makeGradiant( 'linearGradient', { id:'GL1', x1:mid-49.05, y1:0, x2:mid+98, y2:0, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'g', null, { 'transform-origin': '128px 128px', 'transform':'rotate(0)' }, svg );//2 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'red' }, svg, 2 );// 2,0 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL1)','stroke-width':1, stroke:'url(#GL1)' }, svg, 2 );//2,1 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL0)','stroke-width':1, stroke:'url(#GL0)' }, svg, 2 );//2,2 + T.dom( 'path', '', { d:'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill:'none','stroke-width':2, stroke:'#000' }, svg, 2 );//2,3 + //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 + + T.dom( 'circle', '', { cx:128, cy:128, r:6, 'stroke-width':2, stroke:'#000', fill:'none' }, svg );//3 + + T.colorRing = svg; + + }, + + icon: function ( type, color, w ){ + + w = w || 40; + //color = color || '#DEDEDE'; + let viewBox = '0 0 256 256'; + //let viewBox = '0 0 '+ w +' '+ w; + let t = [""]; + switch(type){ + case 'logo': + t[1]=""; + break; + case 'donate': + t[1]=""; + break; + case 'neo': + t[1]=""; + break; + case 'phy': + t[1]=""; + break; + case 'config': + t[1]=""; + break; + case 'github': + t[1]=""; + break; + case 'save': + t[1]=""; + break; + } + t[2] = ""; + return t.join("\n"); + + }, + + logoFill_d:` + M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 + L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 + M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 + Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z + `, + + logo_github:` + M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 + 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 + 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 + 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 + 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z + `, + + logo_neo:` + M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 + 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 + 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 + 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L + 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z + `, + + logo_phy:` + M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 + Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 + `, + + logo_config:` + M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 + L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 + Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 + `, + + logo_donate:` + M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 + 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 + 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 + 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 + 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 + Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 + 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 + 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 + 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M + 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 + 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 + 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 + 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 + 200.9 187.5 200.9 187.5 195.35 Z + `, + +}; + +T.setText(); + +const Tools = T; + +///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile + + +class Files { + + //----------------------------- + // FILE TYPE + //----------------------------- + + static autoTypes( type ) { + + let t = []; + + switch( type ){ + case 'svg': + t = [ { accept: { 'image/svg+xml': '.svg'} }, ]; + break; + case 'wav': + t = [ { accept: { 'audio/wav': '.wav'} }, ]; + break; + case 'mp3': + t = [ { accept: { 'audio/mpeg': '.mp3'} }, ]; + break; + case 'mp4': + t = [ { accept: { 'video/mp4': '.mp4'} }, ]; + break; + case 'bin': case 'hex': + t = [ { description: 'Binary Files', accept: { 'application/octet-stream': ['.bin', '.hex'] } }, ]; + break; + case 'text': + t = [ { description: 'Text Files', accept: { 'text/plain': ['.txt', '.text'], 'text/html': ['.html', '.htm'] } }, ]; + break; + case 'json': + t = [ { description: 'JSON Files', accept: { 'application/json': ['.json'] } }, ];//text/plain + break; + case 'js': + t = [ { description: 'JavaScript Files', accept: { 'text/javascript': ['.js'] } }, ]; + break; + case 'image': + t = [ { description: 'Images', accept: { 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] } }, ]; + break; + case 'icon': + t = [ { description: 'Icons', accept: { 'image/x-ico': ['.ico'] } }, ]; + break; + case 'lut': + t = [ { description: 'Lut', accept: { 'text/plain': ['.cube', '.3dl'] } }, ]; + break; + + } + + return t + + } + + + //----------------------------- + // LOAD + //----------------------------- + + static async load( o = {} ) { + + if (typeof window.showOpenFilePicker !== 'function') { + window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; + } + + try { + + let type = o.type || ''; + + const options = { + excludeAcceptAllOption: type ? true : false, + multiple: false, + //startIn:'./assets' + }; + + options.types = Files.autoTypes( type ); + + // create a new handle + const handle = await window.showOpenFilePicker( options ); + const file = await handle[0].getFile(); + //let content = await file.text() + + if( !file ) return null + + let fname = file.name; + let ftype = fname.substring( fname.lastIndexOf('.')+1, fname.length ); + + const dataUrl = [ 'png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3' ]; + const dataBuf = [ 'sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf' ]; + const reader = new FileReader(); + + if( dataUrl.indexOf( ftype ) !== -1 ) reader.readAsDataURL( file ); + else if( dataBuf.indexOf( ftype ) !== -1 ) reader.readAsArrayBuffer( file ); + else reader.readAsText( file ); + + reader.onload = function(e) { + + let content = e.target.result; + + switch(type){ + case 'image': + let img = new Image; + img.onload = function() { + if( o.callback ) o.callback( img, fname, ftype ); + }; + img.src = content; + break; + case 'json': + if( o.callback ) o.callback( JSON.parse( content ), fname, ftype ); + break; + default: + if( o.callback ) o.callback( content, fname, ftype ); + break; + } + + }; + + } catch(e) { + + console.log(e); + if( o.always && o.callback ) o.callback( null ); + + } + + } + + static showOpenFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const input = document.createElement("input"); + input.type = "file"; + input.multiple = options.multiple; + input.accept = options.types + .map((type) => type.accept) + .flatMap((inst) => Object.keys(inst).flatMap((key) => inst[key])) + .join(","); + + input.addEventListener("change", () => { + resolve( + [...input.files].map((file) => { + return { + getFile: async () => + new Promise((resolve) => { + resolve(file); + }), + }; + }) + ); + }); + + input.click(); + }) + } + + + //----------------------------- + // SAVE + //----------------------------- + + static async save( o = {} ) { + + let usePoly = false; + + if (typeof window.showSaveFilePicker !== 'function') { + window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; + usePoly = true; + } + + try { + + let type = o.type || ''; + + const options = { + suggestedName: o.name || 'hello', + data: o.data || '' + }; + + options.types = Files.autoTypes( type ); + options.finalType = Object.keys( options.types[0].accept )[0]; + options.suggestedName += options.types[0].accept[options.finalType][0]; + + + // create a new handle + const handle = await window.showSaveFilePicker( options ); + + if( usePoly ) return + + // create a FileSystemWritableFileStream to write to + const file = await handle.createWritable(); + + let blob = new Blob([ options.data ], { type: options.finalType }); + + // write our file + await file.write(blob); + + // close the file and write the contents to disk. + await file.close(); + + } catch(e) { + + console.log(e); + + } + + } + + static showSaveFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const a = document.createElement("a"); + a.download = options.suggestedName || "my-file.txt"; + let blob = new Blob([ options.data ], { type:options.finalType }); + a.href = URL.createObjectURL( blob ); + + a.addEventListener("click", () => { + resolve( + setTimeout( () => URL.revokeObjectURL(a.href), 1000 ) + ); + }); + a.click(); + }) + } + + + //----------------------------- + // FOLDER not possible in poly + //----------------------------- + + static async getFolder() { + + try { + + const handle = await window.showDirectoryPicker(); + const files = []; + for await (const entry of handle.values()) { + const file = await entry.getFile(); + files.push(file); + } + + console.log(files); + return files; + + } catch(e) { + + console.log(e); + + } + + } + + + + + + + + + + +} + +class V2 { + + constructor( x = 0, y = 0 ) { + + this.x = x; + this.y = y; + + } + + set ( x, y ) { + + this.x = x; + this.y = y; + return this; + + } + + divide ( v ) { + + this.x /= v.x; + this.y /= v.y; + return this; + + } + + multiply ( v ) { + + this.x *= v.x; + this.y *= v.y; + return this; + + } + + multiplyScalar ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + return this; + + } + + divideScalar ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + } + + length () { + + return Math.sqrt( this.x * this.x + this.y * this.y ); + + } + + angle () { + + // computes the angle in radians with respect to the positive x-axis + + var angle = Math.atan2( this.y, this.x ); + + if ( angle < 0 ) angle += 2 * Math.PI; + + return angle; + + } + + addScalar ( s ) { + + this.x += s; + this.y += s; + return this; + + } + + negate () { + + this.x *= -1; + this.y *= -1; + return this; + + } + + neg () { + + this.x = -1; + this.y = -1; + return this; + + } + + isZero () { + + return ( this.x === 0 && this.y === 0 ); + + } + + copy ( v ) { + + this.x = v.x; + this.y = v.y; + + return this; + + } + + equals ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) ); + + } + + nearEquals ( v, n ) { + + return ( ( v.x.toFixed(n) === this.x.toFixed(n) ) && ( v.y.toFixed(n) === this.y.toFixed(n) ) ); + + } + + lerp ( v, alpha ) { + + if( v === null ){ + this.x -= this.x * alpha; + this.y -= this.y * alpha; + } else { + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + } + + return this; + + } + +} + +/** + * @author lth / https://github.com/lo-th + */ + +class Proto { + constructor(o = {}) { + // disable mouse controle + this.lock = o.lock || false; + + // for button + this.neverlock = false; + + // only simple space + this.isSpace = o.isSpace || false; + + // if is on gui or group + this.main = o.main || null; + this.isUI = o.isUI || false; + this.group = o.group || null; + + this.isListen = false; + + this.top = 0; + this.ytop = 0; + + this.dx = o.dx || 0; + + this.isSelectable = o.selectable !== undefined ? o.selectable : false; + this.unselectable = + o.unselect !== undefined ? o.unselect : this.isSelectable; + + this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' + + this.css = this.main ? this.main.css : Tools.css; + + this.colors = Tools.defineColor( + o, + this.main + ? this.group + ? this.group.colors + : this.main.colors + : Tools.colors + ); + + this.overEffect = this.colors.showOver; + + this.svgs = Tools.svgs; + + this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; + this.local = new V2().neg(); + + this.isCanvasOnly = false; + this.isSelect = false; + + // percent of title + this.p = o.p !== undefined ? o.p : Tools.size.p; + + this.w = this.isUI ? this.main.size.w : Tools.size.w; + if (o.w !== undefined) this.w = o.w; + + this.h = this.isUI ? this.main.size.h : Tools.size.h; + if (o.h !== undefined) this.h = o.h; + if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; + else this.lock = true; + + // decale for canvas only + this.fw = o.fw || 0; + + this.autoWidth = o.auto || true; // auto width or flex + this.isOpen = false; //false// open statu + + // radius for toolbox + this.radius = o.radius || this.colors.radius; + + this.transition = o.transition || Tools.transition; + + // only for number + this.isNumber = false; + this.noNeg = o.noNeg || false; + this.allEqual = o.allEqual || false; + + // only most simple + this.mono = false; + + // stop listening for edit slide text + this.isEdit = false; + + // no title + this.simple = o.simple || false; + if (this.simple) this.sa = 0; + + // define obj size + this.setSize(this.w); + + // title size + if (o.sa !== undefined) this.sa = o.sa; + if (o.sb !== undefined) this.sb = o.sb; + if (this.simple) this.sb = this.w - this.sa; + + // last number size for slide + this.sc = o.sc === undefined ? 47 : o.sc; + + // for listening object + this.objectLink = null; + this.isSend = false; + this.objectKey = null; + + this.txt = o.name || ""; + this.name = o.rename || this.txt; + this.target = o.target || null; + + // callback + this.callback = o.callback === undefined ? null : o.callback; + this.endCallback = null; + this.openCallback = o.openCallback === undefined ? null : o.openCallback; + this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; + + // if no callback take one from group or gui + if (this.callback === null && this.isUI && this.main.callback !== null) { + this.callback = this.group ? this.group.callback : this.main.callback; + } + + // elements + this.c = []; + + // style + this.s = []; + + this.useFlex = this.isUI ? this.main.useFlex : false; + let flexible = this.useFlex + ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" + : "float:left;"; + + this.c[0] = Tools.dom( + "div", + this.css.basic + flexible + "position:relative; height:20px;" + ); + + this.s[0] = this.c[0].style; + + // bottom margin + this.margin = this.colors.sy; + this.mtop = 0; + let marginDiv = Tools.isDivid(this.margin); + + if (this.isUI && this.margin) { + this.s[0].boxSizing = "content-box"; + if (marginDiv) { + this.mtop = this.margin * 0.5; + //this.s[0].borderTop = '${this.mtop}px solid transparent' + //console.log(`${this.mtop}px solid transparent`) + this.s[0].borderTop = this.mtop + "px solid transparent"; + this.s[0].borderBottom = this.mtop + "px solid transparent"; + } else { + this.s[0].borderBottom = this.margin + "px solid transparent"; + } + } + + // with title + if (!this.simple) { + this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); + this.s[1] = this.c[1].style; + this.c[1].textContent = this.name; + this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; + } + + if (o.pos) { + this.s[0].position = "absolute"; + for (let p in o.pos) { + this.s[0][p] = o.pos[p]; + } + this.mono = true; + } + + if (o.css) this.s[0].cssText = o.css; + } + + // ---------------------- + // make the node + // ---------------------- + + init() { + this.ytop = this.top + this.mtop; + + this.zone.h = this.h + this.margin; + this.zone.w = this.w; + + let s = this.s; // style cache + let c = this.c; // div cach + + s[0].height = this.h + "px"; + + if (this.isUI) s[0].background = this.colors.background; + + if (!this.autoWidth && this.useFlex) { + s[0].flex = "1 0 auto"; + s[0].minWidth = this.minw + "px"; + s[0].textAlign = "center"; + } else { + if (this.isUI) s[0].width = "100%"; + } + + //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; + if (c[1] !== undefined && this.autoWidth) { + s[1] = c[1].style; + s[1].top = 1 + "px"; + s[1].height = this.h - 2 + "px"; + } + + let frag = Tools.frag; + + for (let i = 1, lng = c.length; i !== lng; i++) { + if (c[i] !== undefined) { + frag.appendChild(c[i]); + s[i] = c[i].style; + } + } + + let pp = + this.target !== null + ? this.target + : this.isUI + ? this.main.inner + : document.body; + + if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); + else pp.appendChild(c[0]); + + c[0].appendChild(frag); + + this.rSize(); + + // ! solo proto + if (!this.isUI) { + this.c[0].style.pointerEvents = "auto"; + Roots.add(this); + } + } + + addTransition() { + if (this.baseH && this.transition && this.isUI) { + this.c[0].style.transition = "height " + this.transition + "s ease-out"; + } + } + + // from Tools + + dom(type, css, obj, dom, id) { + return Tools.dom(type, css, obj, dom, id); + } + + setSvg(dom, type, value, id, id2) { + Tools.setSvg(dom, type, value, id, id2); + } + + setCss(dom, css) { + Tools.setCss(dom, css); + } + + clamp(value, min, max) { + return Tools.clamp(value, min, max); + } + + getColorRing() { + if (!Tools.colorRing) Tools.makeColorRing(); + return Tools.clone(Tools.colorRing); + } + + getJoystick(model) { + if (!Tools["joystick_" + model]) Tools.makeJoystick(model); + return Tools.clone(Tools["joystick_" + model]); + } + + getCircular(model) { + if (!Tools.circular) Tools.makeCircular(model); + return Tools.clone(Tools.circular); + } + + getKnob(model) { + if (!Tools.knob) Tools.makeKnob(model); + return Tools.clone(Tools.knob); + } + + getPad2d(model) { + if (!Tools.pad2d) Tools.makePad(model); + return Tools.clone(Tools.pad2d); + } + + // from Roots + + cursor(name) { + Roots.cursor(name); + } + + ///////// + + update() {} + + reset() {} + + ///////// + + content() { + return this.c[0]; + } + + getDom() { + return this.c[0]; + } + + uiout() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.background; + } + + uiover() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.backgroundOver; + } + + rename(s) { + if (this.c[1] !== undefined) this.c[1].textContent = s; + } + + listen() { + this.isListen = Roots.addListen(this); + return this; + } + + listening() { + // modified by Fedemarino + if (this.objectLink === null) return; + if (this.isSend) return; + if (this.isEdit) return; + // check if value has changed + let hasChanged = this.setValue(this.objectLink[this.objectKey]); + return hasChanged; + } + + setValue(v) { + const old = this.value; + if (this.isNumber) this.value = this.numValue(v); + //else if( v instanceof Array && v.length === 1 ) v = v[0]; + else this.value = v; + this.update(); + let hasChanged = false; + if (old !== this.value) { + hasChanged = true; + } + + return hasChanged; + } + + // ---------------------- + // update every change + // ---------------------- + + onChange(f) { + if (this.isSpace) return; + this.callback = f || null; + return this; + } + + // ---------------------- + // update only on end + // ---------------------- + + onFinishChange(f) { + if (this.isSpace) return; + this.callback = null; + this.endCallback = f; + return this; + } + + // ---------------------- + // event on open close + // ---------------------- + + onOpen(f) { + this.openCallback = f; + return this; + } + + onClose(f) { + this.closeCallback = f; + return this; + } + + // ---------------------- + // send back value + // ---------------------- + + send(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + this.isSend = true; + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + if (this.callback) this.callback(v, this.objectKey); + this.isSend = false; + } + + sendEnd(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + if (this.endCallback) this.endCallback(v); + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + } + + // ---------------------- + // clear node + // ---------------------- + + dispose() { + if (this.isListen) Roots.removeListen(this); + + Tools.clear(this.c[0]); + + if (this.target !== null) { + if (this.group !== null) this.group.clearOne(this); + else this.target.removeChild(this.c[0]); + } else { + if (this.isUI) this.main.clearOne(this); + else document.body.removeChild(this.c[0]); + } + + if (!this.isUI) Roots.remove(this); + + this.c = null; + this.s = null; + this.callback = null; + this.target = null; + this.isListen = false; + } + + clear() {} + + // ---------------------- + // change size + // ---------------------- + + getWidth() { + let nw = Roots.getWidth(this); + if (nw) this.w = nw; + } + + setSize(sx) { + if (!this.autoWidth) return; + + this.w = sx; + + if (this.simple) { + this.sb = this.w - this.sa; + } else { + let pp = this.w * (this.p / 100); + //this.sa = Math.floor( pp + 10 ) + //this.sb = Math.floor( this.w - pp - 20 ) + this.sa = Math.floor(pp + 8); + this.sb = Math.floor(this.w - pp - 16); + } + } + + rSize() { + if (!this.autoWidth) return; + if (!this.isUI) this.s[0].width = this.w + "px"; + if (!this.simple) this.s[1].width = this.sa + "px"; + } + + // ---------------------- + // for numeric value + // ---------------------- + + setTypeNumber(o) { + this.isNumber = true; + + this.value = 0; + if (o.value !== undefined) { + if (typeof o.value === "string") this.value = o.value * 1; + else this.value = o.value; + } + + this.min = o.min === undefined ? -Infinity : o.min; + this.max = o.max === undefined ? Infinity : o.max; + this.precision = o.precision === undefined ? 2 : o.precision; + + let s; + + switch (this.precision) { + case 0: + s = 1; + break; + case 1: + s = 0.1; + break; + case 2: + s = 0.01; + break; + case 3: + s = 0.001; + break; + case 4: + s = 0.0001; + break; + case 5: + s = 0.00001; + break; + case 6: + s = 0.000001; + break; + } + + this.step = o.step === undefined ? s : o.step; + this.range = this.max - this.min; + this.value = this.numValue(this.value); + } + + numValue(n) { + if (this.noNeg) n = Math.abs(n); + return ( + Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 + ); + } + + // ---------------------- + // EVENTS DEFAULT + // ---------------------- + + handleEvent(e) { + if (this.lock) return; + if (this.neverlock) Roots.lock = false; + if (!this[e.type]) + return console.error(e.type, "this type of event no existe !"); + + // TODO !!!! + + //if( this.marginDiv ) z.d -= this.margin * 0.5 + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 + + return this[e.type](e); + } + + wheel(e) { + return false; + } + mousedown(e) { + return false; + } + mousemove(e) { + return false; + } + mouseup(e) { + return false; + } + keydown(e) { + return false; + } + keyup(e) { + return false; + } + + // ---------------------- + // object referency + // ---------------------- + + setReferency(obj, key) { + this.objectLink = obj; + this.objectKey = key; + } + + display(v = false) { + this.s[0].visibility = v ? "visible" : "hidden"; + } + + // ---------------------- + // resize height + // ---------------------- + + open() { + if (this.isOpen) return; + this.isOpen = true; + Roots.needResize = true; + if (this.openCallback) this.openCallback(); + } + + close() { + if (!this.isOpen) return; + this.isOpen = false; + Roots.needResize = true; + if (this.closeCallback) this.closeCallback(); + } + + needZone() { + Roots.needReZone = true; + } + + rezone() { + Roots.needReZone = true; + } + + // ---------------------- + // INPUT + // ---------------------- + + select() {} + + unselect() {} + + setInput(Input) { + Roots.setInput(Input, this); + } + + upInput(x, down) { + return Roots.upInput(x, down); + } + + // ---------------------- + // special item + // ---------------------- + + selected(b) { + this.isSelect = b || false; + } +} + +class Bool extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || false; + this.model = o.mode !== undefined ? o.mode : 0; + + this.onName = o.rename || this.txt; + if( o.onName ) o.onname = o.onName; + if( o.onname ) this.onName = o.onname; + + this.inh = o.inh || Math.floor( this.h*0.8 ); + this.inw = o.inw || 36; + + let cc = this.colors; + + if( this.model === 0 ){ + let t = Math.floor(this.h*0.5)-((this.inh-2)*0.5); + this.c[2] = this.dom( 'div', this.css.basic + 'background:'+ cc.inputBg +'; height:'+(this.inh-2)+'px; width:'+this.inw+'px; top:'+t+'px; border-radius:10px; border:2px solid '+ cc.back ); + this.c[3] = this.dom( 'div', this.css.basic + 'height:'+(this.inh-6)+'px; width:16px; top:'+(t+2)+'px; border-radius:10px; background:'+ cc.button+';' ); + } else { + this.p = 0; + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + } + + this.stat = -1; + + this.init(); + this.update(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + this.value = !this.value; + this.update( true ); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + this.cursor('pointer'); + return this.mode( true ) + + } + + reset () { + + this.cursor(); + return this.mode() + + } + + // ---------------------- + // MODE + // ---------------------- + + mode ( over ) { + + let change = false; + let cc = this.colors, s = this.s, n, v = this.value; + + if( over ) n = v ? 4 : 3; + else n = v ? 2 : 1; + + if( this.stat !== n ){ + + this.stat = n; + + if( this.model !== 0 ){ + + switch( n ){ + + case 1: s[2].color = cc.text; s[2].background = cc.button; break; + case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; + case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; + case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; + + } + + this.c[2].innerHTML = v ? this.onName : this.name; + + } else { + + switch( n ){ + + case 1: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.button; break;// off out + case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break;// on over + case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break;// off over + case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break;// on out + + } + + s[3].marginLeft = v ? '17px' : '2px'; + this.c[1].textContent = v ? this.onName : this.name; + + } + + change = true; + + } + + return change + + } + + // ---------------------- + + update ( up ) { + + this.mode(); + if( up ) this.send(); + + } + + rSize () { + + super.rSize(); + + let s = this.s; + let w = (this.w - 10 ) - this.inw; + if( this.model === 0 ){ + s[2].left = w + 'px'; + s[3].left = w + 'px'; + } else { + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + } + + } + +} + +class Button extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = ''; + if( o.value !== undefined ) this.value = o.value; + + this.values = o.value || this.txt; + if( o.values ) this.values = o.values; + + if( !o.values && !o.value ) this.txt = ''; + + this.onName = o.onName || null; + + this.on = false; + + // force button width + this.bw = o.forceWidth || 0; + if(o.bw) this.bw = o.bw; + this.space = o.space || 3; + + if( typeof this.values === 'string' ) this.values = [ this.values ]; + + this.isDown = false; + this.neverlock = true; + this.res = 0; + + this.lng = this.values.length; + this.tmp = []; + this.stat = []; + + let sel, cc = this.colors; + + for( let i = 0; i < this.lng; i++ ){ + + sel = false; + if( this.values[i] === this.value && this.isSelectable ) sel = true; + + this.c[i+2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[i+2].style.background = sel ? cc.select : cc.button; + this.c[i+2].style.color = sel ? cc.textSelect : cc.text; + this.c[i+2].innerHTML = this.values[i]; + this.stat[i] = sel ? 3:1; + + } + + + if( this.txt==='' ) this.p = 0; + + if( (!o.value && !o.values) || this.p === 0 ){ + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + } + + + this.init(); + + } + + onOff() { + + this.on = !this.on; + this.label( this.on ? this.onName : this.value ); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1 + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.text; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + case 1: // down + + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'stroke', cc.backoff, 0); + color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.textOver; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + } + + this.cmode = mode; + return true; + + } + + reset () { + + this.isDown = false; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'circular'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0); + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1); + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + //console.log('over') + + let off = this.offset; + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = off.angle() - this.pi90; + this.r = (((this.r%this.twoPi)+this.twoPi)%this.twoPi); + + if( this.oldr !== null ){ + + let dif = this.r - this.oldr; + this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; + + if( dif > 6 ) this.r = 0; + if( dif < -6 ) this.r = this.twoPi; + + } + + let steps = 1 / this.twoPi; + let value = this.r * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = ~~ ( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'circular' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + // ---------------------- + + makePath () { + + let r = 40; + let d = 24; + let a = this.percent * this.twoPi - 0.001; + let x2 = (r + r * Math.sin(a)) + d; + let y2 = (r - r * Math.cos(a)) + d; + let big = a > Math.PI ? 1 : 0; + return "M " + (r+d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = ( this.value - this.min ) / this.range; + + this.setSvg( this.c[3], 'd', this.makePath(), 1 ); + + if ( this.model > 0 ) { + + let cc = this.colors; + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 1 ); + + } + + if( up ) this.send(); + + } + +} + +class Color extends Proto { + + constructor( o = {} ) { + + super( o ); + + //this.autoHeight = true; + + this.ctype = o.ctype || 'hex'; + + this.wfixe = 256; + + this.cw = this.sb > 256 ? 256 : this.sb; + if(o.cw != undefined ) this.cw = o.cw; + + + + // color up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + this.baseH = this.h; + + this.offset = new V2(); + this.decal = new V2(); + this.pp = new V2(); + + let cc = this.colors; + + // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) + + this.c[2] = this.dom( 'div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};` ); + //this.s[2] = this.c[2].style; + + //this.s[2].textShadow = 'none' + + /*if( this.up ){ + this.s[2].top = 'auto'; + this.s[2].bottom = '2px'; + }*/ + + //this.c[0].style.textAlign = 'center'; + this.c[0].style.display = 'block'; + + this.c[3] = this.getColorRing(); + this.c[3].style.visibility = 'hidden'; + + this.hsl = null; + this.value = '#ffffff'; + if( o.value !== undefined ){ + if( o.value instanceof Array ) this.value = Tools.rgbToHex( o.value ); + else if(!isNaN(o.value)) this.value = Tools.hexToHtml( o.value ); + else this.value = o.value; + } + + this.bcolor = null; + this.isDown = false; + this.fistDown = false; + + this.notext = o.notext || false; + + this.tr = 98; + this.tsl = Math.sqrt(3) * this.tr; + + this.hue = 0; + this.d = 256; + + this.init(); + + this.setColor( this.value ); + + if( o.open !== undefined ) this.open(); + + } + + testZone ( mx, my ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + if( this.up && this.isOpen ){ + + if( l.y > this.wfixe ) return 'title' + else return 'color' + + } else { + + if( l.y < this.baseH+2 ) return 'title' + else if( this.isOpen ) return 'color' + + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.d = 256; + + } + + mousedown ( e ) { + + + let name = this.testZone( e.clientX, e.clientY ); + + + //if( !name ) return; + if(name === 'title'){ + if( !this.isOpen ) this.open(); + else this.close(); + return true; + } + + + if( name === 'color' ){ + + this.isDown = true; + this.fistDown = true; + this.mousemove( e ); + } + } + + mousemove ( e ) { + + let name = this.testZone( e.clientX, e.clientY ); + + let off, d, hue, sat, lum, rad, x, y, rr, T = Tools; + + if( name === 'title' ) this.cursor('pointer'); + + if( name === 'color' ){ + + off = this.offset; + off.x = e.clientX - ( this.zone.x + this.decal.x + this.mid ); + off.y = e.clientY - ( this.zone.y + this.decal.y + this.mid ) - this.ytop; + d = off.length() * this.ratio; + rr = off.angle(); + if(rr < 0) rr += 2 * T.PI; + + + if ( d < 128 ) this.cursor('crosshair'); + else if( !this.isDown ) this.cursor(); + + if( this.isDown ){ + + if( this.fistDown ){ + this.d = d; + this.fistDown = false; + } + + if ( this.d < 128 ) { + + if ( this.d > this.tr ) { // outside hue + + hue = ( rr + T.pi90 ) / T.TwoPI; + this.hue = (hue + 1) % 1; + this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); + + } else { // triangle + + x = off.x * this.ratio; + y = off.y * this.ratio; + + let rr = (this.hue * T.TwoPI) + T.PI; + if(rr < 0) rr += 2 * T.PI; + + rad = Math.atan2(-y, x); + if(rad < 0) rad += 2 * T.PI; + + let rad0 = ( rad + T.pi90 + T.TwoPI + rr ) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60), + a = 0.5 * this.tr, + b = Math.tan(rad1) * a, + r = Math.sqrt(x*x + y*y), + maxR = Math.sqrt(a*a + b*b); + + if( r > maxR ) { + let dx = Math.tan(rad1) * r; + let rad2 = Math.atan(dx / maxR); + if(rad2 > T.pi60) rad2 = T.pi60; + else if( rad2 < -T.pi60 ) rad2 = -T.pi60; + + rad += rad2 - rad1; + + rad0 = (rad + T.pi90 + T.TwoPI + rr) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60); + b = Math.tan(rad1) * a; + r = maxR = Math.sqrt(a*a + b*b); + } + + lum = ((Math.sin(rad0) * r) / this.tsl) + 0.5; + + let w = 1 - (Math.abs(lum - 0.5) * 2); + sat = (((Math.cos(rad0) * r) + (this.tr / 2)) / (1.5 * this.tr)) / w; + sat = T.clamp( sat, 0, 1 ); + + this.setHSL([this.hsl[0], sat, lum]); + + } + } + } + } + + } + + // ---------------------- + + setHeight () { + + this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; + this.s[0].height = this.h + 'px'; + this.zone.h = this.h; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open () { + + super.open(); + + this.setHeight(); + + if( this.up ) this.zone.y -= this.wfixe + 5; + + let t = this.h - this.baseH; + + this.s[3].visibility = 'visible'; + //this.s[3].display = 'block'; + this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.wfixe + 5; + + let t = this.h - this.baseH; + + this.setHeight(); + + this.s[3].visibility = 'hidden'; + //this.s[3].display = 'none'; + this.parentHeight( -t ); + + } + + update ( up ) { + + let cc = Tools.rgbToHex( Tools.hslToRgb([ this.hsl[0], 1, 0.5 ]) ); + + this.moveMarkers(); + + this.value = this.bcolor; + + this.setSvg( this.c[3], 'fill', cc, 2, 0 ); + + this.s[2].background = this.bcolor; + if(!this.notext) this.c[2].textContent = Tools.htmlToHex( this.bcolor ); + + this.invert = Tools.findDeepInver( this.rgb ); + this.s[2].color = this.invert ? '#fff' : '#000'; + + if(!up) return; + + if( this.ctype === 'array' ) this.send( this.rgb ); + if( this.ctype === 'rgb' ) this.send( Tools.htmlRgb( this.rgb ) ); + if( this.ctype === 'hex' ) this.send( Tools.htmlToHex( this.value ) ); + if( this.ctype === 'html' ) this.send(); + + } + + setValue ( v ){ + + if( v instanceof Array ) this.value = Tools.rgbToHex( v ); + else if(!isNaN(v)) this.value = Tools.hexToHtml( v ); + else this.value = v; + + this.setColor( this.value ); + this.update(); + + } + + setColor ( color ) { + + let unpack = Tools.unpack(color); + if (this.bcolor !== color && unpack) { + + this.bcolor = color; + this.rgb = unpack; + this.hsl = Tools.rgbToHsl( this.rgb ); + + this.hue = this.hsl[0]; + + this.update(); + } + return this; + + } + + setHSL ( hsl ) { + + this.hsl = hsl; + this.rgb = Tools.hslToRgb( hsl ); + this.bcolor = Tools.rgbToHex( this.rgb ); + this.update( true ); + return this; + + } + + moveMarkers () { + + let p = this.pp; + let T = Tools; + + this.invert ? '#fff' : '#000'; + let a = this.hsl[0] * T.TwoPI; + let third = (2/3) * T.PI; + let r = this.tr; + let h = this.hsl[0]; + let s = this.hsl[1]; + let l = this.hsl[2]; + + let angle = ( a - T.pi90 ) * T.todeg; + + h = - a + T.pi90; + + let hx = Math.cos(h) * r; + let hy = -Math.sin(h) * r; + let sx = Math.cos(h - third) * r; + let sy = -Math.sin(h - third) * r; + let vx = Math.cos(h + third) * r; + let vy = -Math.sin(h + third) * r; + let mx = (sx + vx) / 2, my = (sy + vy) / 2; + a = (1 - 2 * Math.abs(l - .5)) * s; + let x = sx + (vx - sx) * l + (hx - mx) * a; + let y = sy + (vy - sy) * l + (hy - my) * a; + + p.set( x, y ).addScalar(128); + + //let ff = (1-l)*255; + // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); + + this.setSvg( this.c[3], 'transform', 'rotate('+angle+' )', 2 ); + + this.setSvg( this.c[3], 'cx', p.x, 3 ); + this.setSvg( this.c[3], 'cy', p.y, 3 ); + + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3 ); + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3 ); + this.setSvg( this.c[3], 'fill',this.bcolor, 3 ); + + } + + rSize () { + + //Proto.prototype.rSize.call( this ); + super.rSize(); + + let s = this.s; + + s[2].width = this.sb + 'px'; + s[2].left = this.sa + 'px'; + + //console.log(this.sb) + + this.cw = this.sb > 256 ? 256 : this.sb; + + + + this.rSizeColor( this.cw ); + + this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + //s[3].left = this.decal.x + 'px'; + + } + + rSizeColor ( w ) { + + + if( w === this.wfixe ) return; + + + + this.wfixe = w; + + + + let s = this.s; + + //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; + this.mid = Math.floor( this.wfixe * 0.5 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 '+ this.wfixe + ' '+ this.wfixe ); + s[3].width = this.wfixe + 'px'; + s[3].height = this.wfixe + 'px'; + //s[3].left = this.decal.x + 'px'; + s[3].top = this.decal.y + 'px'; + + this.ratio = 256 / this.wfixe; + this.square = 1 / (60*(this.wfixe/256)); + this.setHeight(); + + } + + +} + +class Fps extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.round = Math.round; + + //this.autoHeight = true; + + this.baseH = this.h; + this.hplus = o.hplus || 50; + + this.res = o.res || 40; + this.l = 1; + + this.precision = o.precision || 0; + + + this.custom = o.custom || false; + this.names = o.names || ['FPS', 'MS']; + let cc = o.cc || ['220,220,220', '255,255,0']; + + // this.divid = [ 100, 100, 100 ]; + // this.multy = [ 30, 30, 30 ]; + + this.adding = o.adding || false; + + this.range = o.range || [ 165, 100, 100 ]; + + this.alpha = o.alpha || 0.25; + + this.values = []; + this.points = []; + this.textDisplay = []; + + if(!this.custom){ + + this.now = Roots.getTime(); + this.startTime = 0;//this.now() + this.prevTime = 0;//this.startTime; + this.frames = 0; + + this.ms = 0; + this.fps = 0; + this.mem = 0; + this.mm = 0; + + this.isMem = ( self.performance && self.performance.memory ) ? true : false; + + // this.divid = [ 100, 200, 1 ]; + // this.multy = [ 30, 30, 30 ]; + + if( this.isMem ){ + + this.names.push('MEM'); + cc.push('0,255,255'); + + } + + this.txt = o.name || 'Fps'; + + } + + + let fltop = Math.floor(this.h*0.5)-3; + const ccc = this.colors; + + this.c[1].textContent = this.txt; + //this.c[1].innerHTML = ' ' + this.txt + this.c[0].style.cursor = 'pointer'; + this.c[0].style.pointerEvents = 'auto'; + + let panelCss = 'display:none; left:10px; top:'+ this.h + 'px; height:'+(this.hplus - 8)+'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid '+ ccc.border +';'; + + if( this.radius !== 0 ) panelCss += 'border-radius:' + this.radius+'px;'; + + this.c[2] = this.dom( 'path', this.css.basic + panelCss , {} ); + + this.c[2].setAttribute('viewBox', '0 0 '+this.res+' 50' ); + this.c[2].setAttribute('height', '100%' ); + this.c[2].setAttribute('width', '100%' ); + this.c[2].setAttribute('preserveAspectRatio', 'none' ); + + + //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + + // arrow + this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:ccc.text, stroke:'none'}); + //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); + + // result test + this.c[4] = this.dom( 'div', this.css.txt + 'position:absolute; left:10px; top:'+(this.h+2) +'px; display:none; width:100%; text-align:center;' ); + + // bottom line + if( o.bottomLine ) this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); + + this.isShow = false; + + + + let s = this.s; + + //s[1].marginLeft = '10px'; + s[1].lineHeight = this.h-4; + s[1].color = ccc.text; + //s[1].paddingLeft = '18px'; + //s[1].fontWeight = 'bold'; + + if( this.radius !== 0 ) s[0].borderRadius = this.radius+'px'; + if( this.colors.gborder!=='none') s[0].border = '1px solid ' + ccc.gborder; + + + + + let j = 0; + + for( j=0; j " + this.names[j] +" "); + + } + + j = this.names.length; + while(j--){ + this.dom( 'path', null, { fill:'rgba('+cc[j]+','+this.alpha+')', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + } + + + this.init(); + + //if( this.isShow ) this.show(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + if( this.isShow ) this.close(); + else this.open(); + + } + + // ---------------------- + + /*mode: function ( mode ) { + + let s = this.s; + + switch(mode){ + case 0: // base + s[1].color = this.colors.text; + //s[1].background = 'none'; + break; + case 1: // over + s[1].color = '#FFF'; + //s[1].background = UIL.SELECT; + break; + case 2: // edit / down + s[1].color = this.colors.text; + //s[1].background = UIL.SELECTDOWN; + break; + + } + },*/ + + tick ( v ) { + + this.values = v; + if( !this.isShow ) return; + this.drawGraph(); + this.upText(); + + } + + makePath ( point ) { + + let p = ''; + p += 'M ' + (-1) + ' ' + 50; + for ( let i = 0; i < this.res + 1; i ++ ) { p += ' L ' + i + ' ' + point[i]; } + p += ' L ' + (this.res + 1) + ' ' + 50; + return p; + + } + + upText ( val ) { + + let v = val || this.values, t = ''; + for( let j=0, lng =this.names.length; j'; + this.c[4].innerHTML = t; + + } + + drawGraph () { + + let svg = this.c[2]; + let i = this.names.length, v, old = 0, n = 0; + + while( i-- ){ + if( this.adding ) v = (this.values[n]+old) * this.range[n]; + else v = (this.values[n] * this.range[n]); + this.points[n].shift(); + this.points[n].push( 50 - v ); + this.setSvg( svg, 'd', this.makePath( this.points[n] ), i+1 ); + old += this.values[n]; + n++; + + } + + } + + open () { + + super.open(); + + this.h = this.hplus + this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g2 ); + + if( this.group !== null ){ this.group.calc( this.hplus );} + else if( this.isUI ) this.main.calc( this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'block'; + this.s[4].display = 'block'; + this.isShow = true; + + if( !this.custom ) Roots.addListen( this ); + + } + + close () { + + super.close(); + + this.h = this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g1 ); + + if( this.group !== null ){ this.group.calc( -this.hplus );} + else if( this.isUI ) this.main.calc( -this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'none'; + this.s[4].display = 'none'; + this.isShow = false; + + if( !this.custom ) Roots.removeListen( this ); + + this.c[4].innerHTML = ''; + + } + + + ///// AUTO FPS ////// + + begin () { + + this.startTime = this.now(); + + } + + end () { + + let time = this.now(); + this.ms = time - this.startTime; + + this.frames ++; + + if ( time > this.prevTime + 1000 ) { + + this.fps = this.round( ( this.frames * 1000 ) / ( time - this.prevTime ) ); + + this.prevTime = time; + this.frames = 0; + + if ( this.isMem ) { + + let heapSize = performance.memory.usedJSHeapSize; + let heapSizeLimit = performance.memory.jsHeapSizeLimit; + + this.mem = this.round( heapSize * 0.000000954 ); + this.mm = heapSize / heapSizeLimit; + + } + + } + + this.values = [ this.fps, this.ms , this.mm ]; + + this.drawGraph(); + this.upText( [ this.fps, this.ms, this.mem ] ); + + return time; + + } + + listening () { + + if( !this.custom ) this.startTime = this.end(); + + } + + rSize () { + + let s = this.s; + let w = this.w; + + s[3].left = ( this.sa + this.sb - 6 ) + 'px'; + + s[0].width = w + 'px'; + s[1].width = w + 'px'; + s[2].left = 10 + 'px'; + s[2].width = (w-20) + 'px'; + s[4].width = (w-20) + 'px'; + + } + +} + +class Graph extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value !== undefined ? o.value : [0,0,0]; + this.lng = this.value.length; + + this.precision = o.precision !== undefined ? o.precision : 2; + this.multiplicator = o.multiplicator || 1; + this.neg = o.neg || false; + + this.line = o.line !== undefined ? o.line : true; + + //if(this.neg)this.multiplicator*=2; + + this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; + this.isNumber = false; + + this.isDown = false; + + this.h = o.h || 128 + 10; + this.rh = this.h - 10; + this.top = 0; + + this.c[0].style.width = this.w +'px'; + + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = this.w +'px'; + + if(!this.autoWidth){ + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + } + + + //this.c[1].style.background = '#ff0000'; + //this.c[1].style.textAlign = 'center'; + this.top = 10; + this.h += 10; + + } + + this.gh = this.rh - 28; + this.gw = this.w - 28; + + //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); + + //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' + this.c[2] = this.dom( 'div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:'+(this.h-20)+'px; left:14px; width:'+this.gw+'px; color:'+ this.colors.text ); + + //this.c[2].textContent = this.value; + this.c[2].innerHTML = this.valueToHtml(); + + let svg = this.dom( 'svg', this.css.basic , { viewBox:'0 0 '+this.w+' '+this.rh, width:this.w, height:this.rh, preserveAspectRatio:'none' } ); + this.setCss( svg, { width:this.w, height:this.rh, left:0, top:this.top }); + + this.dom( 'path', '', { d:'', stroke:this.colors.text, 'stroke-width':2, fill:'none', 'stroke-linecap':'butt' }, svg ); + this.dom( 'rect', '', { x:10, y:10, width:this.gw+8, height:this.gh+8, stroke:'rgba(0,0,0,0.3)', 'stroke-width':1 , fill:'none'}, svg ); + + this.iw = ((this.gw-(4*(this.lng-1)))/this.lng); + let t = []; + this.cMode = []; + + this.v = []; + + for( let i = 0; i < this.lng; i++ ){ + + t[i] = [ 14 + (i*this.iw) + (i*4), this.iw ]; + t[i][2] = t[i][0] + t[i][1]; + this.cMode[i] = 0; + + if( this.neg ) this.v[i] = ((1+(this.value[i] / this.multiplicator))*0.5); + else this.v[i] = this.value[i] / this.multiplicator; + + this.dom( 'rect', '', { x:t[i][0], y:14, width:t[i][1], height:1, fill:this.colors.text, 'fill-opacity':0.3 }, svg ); + + } + + this.tmp = t; + this.c[3] = svg; + + //console.log(this.w) + + this.init(); + + if( this.c[1] !== undefined ){ + this.c[1].style.top = 0 +'px'; + this.c[1].style.height = 20 +'px'; + this.s[1].lineHeight = (20-5)+'px'; + } + + this.update( false ); + + } + + setValue ( value ) { + + this.value = value; + this.lng = this.value.length; + for (var i = 0; i < this.lng; i++) { + if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5; + else this.v[i] = value[i] / this.multiplicator; + } + this.update(); + + } + + valueToHtml() { + + let i = this.lng, n=0, r = ''; + let w = 100 / this.lng; + let style = 'width:'+ w +'%;';//' text-align:center;' + while(i--){ + if(n===this.lng-1) r += '
' + this.value[n] + '
'; + else r += '' + this.value[n] + ''; + n++; + } + return r + } + + updateSVG () { + + if( this.line ) this.setSvg( this.c[3], 'd', this.makePath(), 0 ); + + for(let i = 0; ithis.top && l.yt[i][0] && l.x this.distance ) { + let angle = Math.atan2(this.tmp.x, this.tmp.y); + this.tmp.x = Math.sin( angle ) * this.distance; + this.tmp.y = Math.cos( angle ) * this.distance; + } + + this.pos.copy( this.tmp ).divideScalar( this.distance ).negate(); + + this.update(); + + } + + setValue ( v ) { + + if(v===undefined) v=[0,0]; + + this.pos.set( v[0] || 0, v[1] || 0 ); + this.updateSVG(); + + } + + update ( up ) { + + if( up === undefined ) up = true; + + if( this.interval !== null ){ + + if( !this.isDown ){ + + this.pos.lerp( null, 0.3 ); + + this.pos.x = Math.abs( this.pos.x ) < 0.01 ? 0 : this.pos.x; + this.pos.y = Math.abs( this.pos.y ) < 0.01 ? 0 : this.pos.y; + + if( this.isUI && this.main.isCanvas ) this.main.draw(); + + } + + } + + this.updateSVG(); + + if( up ) this.send(); + + + if( this.pos.isZero() ) this.stopInterval(); + + } + + updateSVG () { + + //let x = this.radius - ( -this.pos.x * this.distance ); + //let y = this.radius - ( -this.pos.y * this.distance ); + + let x = (this.diam*0.5) - ( -this.pos.x * this.distance ); + let y = (this.diam*0.5) - ( -this.pos.y * this.distance ); + + if(this.model === 0){ + + let sx = x + ((this.pos.x)*5) + 5; + let sy = y + ((this.pos.y)*5) + 10; + + this.setSvg( this.c[3], 'cx', sx*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', sy*this.ratio, 3 ); + } else { + this.setSvg( this.c[3], 'cx', x*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 3 ); + } + + + + this.setSvg( this.c[3], 'cx', x*this.ratio, 4 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 4 ); + + this.value[0] = ( this.pos.x * this.multiplicator ).toFixed( this.precision ) * 1; + this.value[1] = ( this.pos.y * this.multiplicator ).toFixed( this.precision ) * 1; + + if(this.haveText) this.c[2].textContent = this.value; + + } + + clear () { + + this.stopInterval(); + super.clear(); + + } + +} + +class Knob extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.autoWidth = false; + + this.setTypeNumber( o ); + + this.minw = this.w; + this.diam = o.diam || this.w; + + this.mPI = Math.PI * 0.8; + this.toDeg = 180 / Math.PI; + this.cirRange = this.mPI * 2; + + this.offset = new V2(); + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w +'px'; + this.c[0].style.display = 'block'; + + if(this.c[1] !== undefined) { + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + this.percent = 0; + + this.cmode = 0; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); + + this.c[3] = this.getKnob(); + this.setSvg( this.c[3], 'fill', cc.button, 0 ); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + this.setSvg( this.c[3], 'stroke', cc.text, 3 ); + this.setSvg( this.c[3], 'd', this.makeGrad(), 3 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam ); + this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); + + if ( this.model > 0 ) { + + Tools.dom( 'path', '', { d: '', stroke:cc.text, 'stroke-width': 2, fill: 'none', 'stroke-linecap': 'round' }, this.c[3] ); //4 + + if ( this.model == 2) { + + Tools.addSVGGlowEffect(); + this.setSvg( this.c[3], 'style', 'filter: url("#UILGlow");', 4 ); + + } + + } + + this.r = 0; + + this.init(); + + this.update(); + + } + + mode ( mode ) { + + let cc = this.colors; + + if( this.cmode === mode ) return false; + + switch( mode ) { + case 0: // base + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.button, 0); + //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + break; + case 1: // down + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'fill', cc.select, 0); + //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); + this.setSvg( this.c[3], 'stroke', cc.textOver, 1 ); + break; + } + + this.cmode = mode; + return true; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'knob'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0) + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1) + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let off = this.offset; + + //off.x = this.radius - ( e.clientX - this.zone.x ); + //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = - Math.atan2( off.x, off.y ); + + if( this.oldr !== null ) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; + + this.r = this.r > this.mPI ? this.mPI : this.r; + this.r = this.r < -this.mPI ? -this.mPI : this.r; + + let steps = 1 / this.cirRange; + let value = (this.r + this.mPI) * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = Math.floor( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'knob' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + makeGrad () { + + let d = '', step, range, a, x, y, x2, y2, r = 64; + let startangle = Math.PI + this.mPI; + let endangle = Math.PI - this.mPI; + //let step = this.step>5 ? this.step : 1; + + if(this.step>5){ + range = this.range / this.step; + step = ( startangle - endangle ) / range; + } else { + step = (( startangle - endangle ) / r)*2; + range = r*0.5; + } + + for ( let i = 0; i <= range; ++i ) { + + a = startangle - ( step * i ); + x = r + Math.sin( a ) * ( r - 20 ); + y = r + Math.cos( a ) * ( r - 20 ); + x2 = r + Math.sin( a ) * ( r - 24 ); + y2 = r + Math.cos( a ) * ( r - 24 ); + d += 'M' + x + ' ' + y + ' L' + x2 + ' '+y2 + ' '; + + } + + return d; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = (this.value - this.min) / this.range; + + let sa = Math.PI + this.mPI; + let ea = ( ( this.percent * this.cirRange ) - ( this.mPI ) ); + + let sin = Math.sin( ea ); + let cos = Math.cos( ea ); + + let x1 = ( 25 * sin ) + 64; + let y1 = -( 25 * cos ) + 64; + let x2 = ( 20 * sin ) + 64; + let y2 = -( 20 * cos ) + 64; + + this.setSvg( this.c[3], 'd', 'M ' + x1 +' ' + y1 + ' L ' + x2 +' ' + y2, 1 ); + + if ( this.model > 0 ) { + + let x1 = 36 * Math.sin( sa ) + 64; + let y1 = 36 * Math.cos( sa ) + 64; + let x2 = 36 * sin + 64; + let y2 = -36 * cos + 64; + let big = ea <= Math.PI - this.mPI ? 0 : 1; + this.setSvg( this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4 ); + + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( this.colors.text, -0.75) ), Tools.unpack( this.colors.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 4 ); + + } + + if( up ) this.send(); + + } + +} + +class List extends Proto { + + constructor( o = {} ) { + + super( o ); + + // TODO not work + this.hideCurrent = false; + + // images + this.path = o.path || ''; + this.format = o.format || ''; + + + this.isWithImage = this.path !== '' ? true:false; + this.preLoadComplete = false; + + this.tmpImage = {}; + this.tmpUrl = []; + + this.m = o.m !== undefined ? o.m : 5; + + + let align = o.align || 'left'; + + // scroll size + let ss = o.scrollSize || 10; + this.ss = ss+1; + + this.sMode = 0; + this.tMode = 0; + + this.listOnly = o.listOnly || false; + this.staticTop = o.staticTop || false; + + this.isSelectable = this.listOnly; + if( o.select !== undefined ) o.selectable = o.select; + if( o.selectable !== undefined ) this.isSelectable = o.selectable; + + if( this.txt === '' ) this.p = 0; + + + let fltop = Math.floor(this.h*0.5)-3; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.basic + 'top:0; display:none; border-radius:'+this.radius+'px;' ); + this.c[3] = this.dom( 'div', this.css.item + 'padding:0px '+this.m+'px; margin-bottom:0px; position:absolute; justify-content:'+align+'; text-align:'+align+'; line-height:'+(this.h-4)+'px; top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:1px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); + + this.scrollerBack = this.dom( 'div', this.css.basic + 'right:0px; width:'+ss+'px; background:'+cc.back+'; display:none;'); + this.scroller = this.dom( 'div', this.css.basic + 'right:'+((ss-(ss*0.25))*0.5)+'px; width:'+(ss*0.25)+'px; background:'+cc.text+'; display:none; '); + + this.c[3].style.color = cc.text; + + + this.list = []; + this.refObject = null; + + if( o.list ){ + if( o.list instanceof Array ){ + this.list = o.list; + } else if( o.list instanceof Object ){ + this.refObject = o.list; + for( let g in this.refObject ) this.list.push( g ); + } + } + + this.items = []; + + this.prevName = ''; + + + this.tmpId = 0; + + this.baseH = this.h; + + this.itemHeight = o.itemHeight || this.h;//(this.h-3); + + // force full list + this.full = o.full || false; + + this.py = 0; + this.ww = this.sb; + this.scroll = false; + this.isDown = false; + + this.current = null; + + // list up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + if( this.up ){ + + this.c[2].style.top = 'auto'; + this.c[3].style.top = 'auto'; + this.c[4].style.top = 'auto'; + + this.c[2].style.bottom = this.h-2 + 'px'; + this.c[3].style.bottom = '1px'; + this.c[4].style.bottom = fltop + 'px'; + + } else { + this.c[2].style.top = this.baseH + 'px'; + } + + this.listIn = this.dom( 'div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); + this.listIn.name = 'list'; + + this.topList = 0; + + this.c[2].appendChild( this.listIn ); + this.c[2].appendChild( this.scrollerBack ); + this.c[2].appendChild( this.scroller ); + + if( o.value !== undefined ){ + if(!isNaN(o.value)) this.value = this.list[ o.value ]; + else this.value = o.value; + }else { + this.value = this.list[0]; + } + + this.isOpenOnStart = o.open || false; + + if( this.listOnly ){ + this.baseH = 5; + this.c[3].style.display = 'none'; + this.c[4].style.display = 'none'; + this.c[2].style.top = this.baseH+'px'; + this.isOpenOnStart = true; + } + + + this.miniCanvas = o.miniCanvas || false; + this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; + this.imageSize = o.imageSize || [20,20]; + + // dragout function + this.drag = o.drag || false; + this.dragout = o.dragout || false; + this.dragstart = o.dragstart || null; + this.dragend = o.dragend || null; + + + + //this.c[0].style.background = '#FF0000' + ///if( this.isWithImage ) this.preloadImage(); + + this.setList( this.list ); + this.init(); + if( this.isWithImage ) this.preloadImage(); + if( this.isOpenOnStart ) this.open( true ); + + this.baseH += this.mtop; + + } + + // image list + + preloadImage () { + + + + this.preLoadComplete = false; + + this.tmpImage = {}; + for( let i=0; i this.h - this.baseH ) return 'title'; + else { + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + + } else { + if( l.y < this.baseH+2 ) return 'title'; + else { + if( this.isOpen ){ + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + } + + } + + return ''; + + } + + testItems ( y ) { + + let name = ''; + + let items = this.items; + + /*if(this.hideCurrent){ + //items = [...this.items] + items = this.items.slice(this.tmpId) + + }*/ + + let i = items.length, item, a, b; + while(i--){ + item = items[i]; + a = item.posy + this.topList; + b = item.posy + this.itemHeight + 1 + this.topList; + if( y >= a && y <= b ){ + name = 'item' + i; + this.modeItem(0); + this.current = item; + this.modeItem(1); + return name; + } + + } + + return name; + + } + + modeItem ( mode ) { + + if( !this.current ) return + + if( this.current.select && mode===0) mode = 2; + let cc = this.colors; + + switch( mode ){ + + case 0: // base + this.current.style.background = cc.back; + this.current.style.color = cc.text; + break; + case 1: // over + this.current.style.background = cc.over; + this.current.style.color = cc.textOver; + break; + case 2: // edit / down + this.current.style.background = cc.select; + this.current.style.color = cc.textSelect; + break; + + } + } + + unSelected() { + + if( !this.current ) return + this.modeItem(0); + this.current = null; + + } + + selected() { + + if( !this.current ) return + this.resetItems(); + this.modeItem(2); + this.current.select = true; + + + + } + + resetItems() { + + let i = this.items.length; + while(i--){ + this.items[i].select = false; + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text; + } + + } + + hideActive() { + + if( !this.hideCurrent ) return + //if( !this.current ) return + if( this.current )this.tmpId = this.current.id; + this.resetHide(); + //this.items[this.tmpId].style.height = 0+'px' + + } + + resetHide() { + + console.log(this.tmpId); + + let i = this.items.length; + while(i--){ + if(i===this.tmpId){ + this.items[i].style.height = 0+'px'; + this.items[i].posy = -1; + } else { + this.items[i].style.height = this.itemHeight+'px'; + this.items[i].posy = (this.itemHeight+1)*(i-1); + } + //this.items[i].style.display = 'flex' + + /*this.items[i].select = false + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text;*/ + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + + mouseup ( e ) { + + this.isDown = false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'scroll' ){ + + this.isDown = true; + this.mousemove( e ); + + } else if( name === 'title' ){ + + this.modeTitle(2); + if( !this.listOnly ){ + this.hideActive(); + if( !this.isOpen ) this.open(); + else this.close(); + } + } else { + // is item + if( this.current ){ + + this.value = this.list[ this.current.id ]; + //this.tmpId = this.current.id + + if( this.isSelectable ) this.selected(); + + //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); + this.send( this.value ); + + if( !this.listOnly ) { + this.close(); + this.setTopItem(); + //this.hideActive() + } + } + + } + + return true; + + } + + mousemove ( e ) { + + let nup = false; + let name = this.testZone( e ); + + if( !name ) return nup; + + if( name === 'title' ){ + this.unSelected(); + this.modeTitle(1); + this.cursor('pointer'); + + } else if( name === 'scroll' ){ + + this.cursor('s-resize'); + this.modeScroll(1); + if( this.isDown ){ + this.modeScroll(2); + //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + let top = this.zone.y+this.baseH-2; + this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + } + //if(this.isDown) this.listmove(e); + } else { + + // is item + this.modeTitle(0); + this.modeScroll(0); + this.cursor('pointer'); + + } + + if( name !== this.prevName ) nup = true; + this.prevName = name; + + return nup; + + } + + wheel ( e ) { + + let name = this.testZone( e ); + if( name === 'title' ) return false; + this.py += e.delta*10; + this.update(this.py); + return true; + + } + + + + // ---------------------- + + reset () { + + this.prevName = ''; + this.unSelected(); + this.modeTitle(0); + this.modeScroll(0); + + //console.log('this is reset') + + } + + modeScroll ( mode ) { + + if( mode === this.sMode ) return; + + let s = this.scroller.style; + let cc = this.colors; + + switch(mode){ + case 0: // base + s.background = cc.text; + break; + case 1: // over + s.background = cc.select; + break; + case 2: // edit / down + s.background = cc.select; + break; + + } + + this.sMode = mode; + } + + modeTitle ( mode ) { + + if( mode === this.tMode ) return; + + let s = this.s; + let cc = this.colors; + + switch(mode){ + case 0: // base + s[3].color = cc.text; + s[3].background = cc.button; + break; + case 1: // over + s[3].color = cc.textOver; + s[3].background = cc.overoff; + break; + case 2: // edit / down + s[3].color = cc.textSelect; + s[3].background = cc.overoff; + break; + + } + + this.tMode = mode; + + } + + clearList () { + + while ( this.listIn.children.length ) this.listIn.removeChild( this.listIn.lastChild ); + this.items = []; + + } + + setList ( list ) { + + this.clearList(); + + this.list = list; + this.length = this.list.length; + + let lng = this.hideCurrent? this.length-1 : this.length; + + this.maxItem = this.full ? lng : 5; + this.maxItem = lng < this.maxItem ? lng : this.maxItem; + + this.maxHeight = this.maxItem * (this.itemHeight+1) + 2; + + + + this.max = lng * (this.itemHeight+1) + 2; + this.ratio = this.maxHeight / this.max; + this.sh = this.maxHeight * this.ratio; + this.range = this.maxHeight - this.sh; + + this.c[2].style.height = this.maxHeight + 'px'; + this.scrollerBack.style.height = this.maxHeight + 'px'; + this.scroller.style.height = this.sh + 'px'; + + if( this.max > this.maxHeight ){ + this.ww = this.sb - this.ss; + this.scroll = true; + } + + if( this.miniCanvas ) { + + this.tmpCanvas = document.createElement('canvas'); + this.tmpCanvas.width = this.imageSize[0]; + this.tmpCanvas.height = this.imageSize[1]; + this.tmpCtx = this.tmpCanvas.getContext("2d"); + this.tmpCtx.fillStyle = this.canvasBg; + this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); + + } + + let item, n;//, l = this.sb; + for( let i=0; i this.range ? this.range : y; + + this.topList = -Math.floor( y / this.ratio ); + + this.listIn.style.top = this.topList+'px'; + this.scroller.style.top = Math.floor( y ) + 'px'; + + this.py = y; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open ( first ) { + + super.open(); + + this.update( 0 ); + + this.h = this.maxHeight + this.baseH + 5; + if( !this.scroll ){ + this.topList = 0; + this.h = this.baseH + 5 + this.max; + this.scroller.style.display = 'none'; + this.scrollerBack.style.display = 'none'; + } else { + this.scroller.style.display = 'block'; + this.scrollerBack.style.display = 'block'; + } + this.s[0].height = this.h + 'px'; + this.s[2].display = 'block'; + + if( this.up ){ + this.zone.y -= this.h - (this.baseH-10); + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + } else { + this.setSvg( this.c[4], 'd', this.svgs.g2 ); + } + + this.rSizeContent(); + + let t = this.h - this.baseH; + + this.zone.h = this.h; + + if(!first) this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.h - (this.baseH-10); + + let t = this.h - this.baseH; + + this.h = this.baseH; + this.s[0].height = this.h + 'px'; + this.s[2].display = 'none'; + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + + this.zone.h = this.h; + + this.parentHeight( -t ); + + } + + // ----- + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSizeContent () { + + let i = this.length; + while(i--) this.listIn.children[i].style.width = this.ww + 'px'; + + } + + rSize () { + + super.rSize(); + + //Proto.prototype.rSize.call( this ); + + let s = this.s; + let w = this.sb; + let d = this.sa; + + if(s[2]=== undefined) return; + + s[2].width = w + 'px'; + s[2].left = d +'px'; + + s[3].width = w + 'px'; + s[3].left = d + 'px'; + + s[4].left = d + w - 15 + 'px'; + + this.ww = w; + if( this.max > this.maxHeight ) this.ww = w-this.ss; + if(this.isOpen) this.rSizeContent(); + + } + +} + +class Numeric extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.setTypeNumber( o ); + + this.allway = o.allway || false; + + this.isDown = false; + this.value = [0]; + this.multy = 1; + this.invmulty = 1; + this.isSingle = true; + this.isAngle = false; + this.isVector = false; + + if( o.isAngle ){ + this.isAngle = true; + this.multy = Tools.torad; + this.invmulty = Tools.todeg; + } + + this.isDrag = o.drag || false; + + if( o.value !== undefined ){ + if( !isNaN(o.value) ){ + this.value = [o.value]; + } else if( o.value instanceof Array ){ + this.value = o.value; + this.isSingle = false; + } else if( o.value instanceof Object ){ + this.value = []; + if( o.value.x !== undefined ) this.value[0] = o.value.x; + if( o.value.y !== undefined ) this.value[1] = o.value.y; + if( o.value.z !== undefined ) this.value[2] = o.value.z; + if( o.value.w !== undefined ) this.value[3] = o.value.w; + this.isSingle = false; + this.isVector = true; + } + } + + this.lng = this.value.length; + this.tmp = []; + + this.current = -1; + this.prev = { x:0, y:0, d:0, v:0 }; + + let cc = this.colors; + + // bg + this.c[2] = this.dom( 'div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h-8) + 'px;' ); + + this.cMode = []; + + let i = this.lng; + while(i--){ + + if( this.isAngle ) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed( this.precision ); + this.c[3+i] = this.dom( 'div', this.css.txtselect + 'top:1px; height:'+(this.h-2)+'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;'); + if(o.center) this.c[2+i].style.textAlign = 'center'; + this.c[3+i].textContent = this.value[i]; + this.c[3+i].style.color = this.colors.text; + this.c[3+i].isNum = true; + this.cMode[i] = 0; + + } + + // selection + this.selectId = 3 + this.lng; + this.c[this.selectId] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.cursorId = 4 + this.lng; + this.c[ this.cursorId ] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + this.init(); + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0"; + this.easing = o.easing || 1; + + this.setTypeNumber(o); + + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + + //this.defaultBorderColor = this.colors.hide; + + this.isDown = false; + this.isOver = false; + this.allway = o.allway || false; + + this.isDeg = o.isDeg || false; + this.isCyclic = o.cyclic || false; + + this.firstImput = false; + + let cc = this.colors; + + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + this.c[2] = this.dom( + "div", + this.css.txtselect + + "border:none; background:none; width:47px; color:" + + cc.text + + ";" + ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); + this.c[3] = this.dom( + "div", + this.css.basic + " top:0; height:" + this.h + "px;" + ); + + this.c[4] = this.dom( + "div", + this.css.basic + + "background:" + + cc.back + + "; top:2px; height:" + + (this.h - 4) + + "px;" + ); + this.c[5] = this.dom( + "div", + this.css.basic + + "left:4px; top:5px; height:" + + (this.h - 10) + + "px; background:" + + cc.text + + ";" + ); + + this.c[2].isNum = true; + //this.c[2].style.height = (this.h-4) + 'px'; + //this.c[2].style.lineHeight = (this.h-8) + 'px'; + this.c[2].style.height = this.h - 2 + "px"; + this.c[2].style.lineHeight = this.h - 10 + "px"; + + if (this.model !== 0) { + let r1 = 4, + h1 = 4, + h2 = 8, + ww = this.h - 6, + ra = 16; + + if (this.model === 2) { + r1 = 0; + h1 = 2; + h2 = 4; + ra = 2; + ww = (this.h - 6) * 0.5; + } + + if (this.model === 3) this.c[5].style.visible = "none"; + + this.c[4].style.borderRadius = r1 + "px"; + this.c[4].style.height = h2 + "px"; + this.c[4].style.top = this.h * 0.5 - h1 + "px"; + this.c[5].style.borderRadius = r1 * 0.5 + "px"; + this.c[5].style.height = h1 + "px"; + this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; + + //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); + this.c[6] = this.dom( + "div", + this.css.basic + + "border-radius:" + + ra + + "px; margin-left:" + + -ww * 0.5 + + "px; background:" + + cc.text + + "; left:4px; top:3px; height:" + + (this.h - 6) + + "px; width:" + + ww + + "px;" + ); + } + + this.init(); + } + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + if (l.x >= this.txl) return "text"; + else if (l.x >= this.sa) return "scroll"; + else return ""; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (this.isDown) this.isDown = false; + } + + mousedown(e) { + let name = this.testZone(e); + + if (!name) return false; + + if (name === "scroll") { + this.isDown = true; + this.old = this.value; + this.mousemove(e); + } + + /*if( name === 'text' ){ + this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); + }*/ + + return true; + } + + mousemove(e) { + let nup = false; + + let name = this.testZone(e); + + if (name === "scroll") { + this.mode(1); + this.cursor("w-resize"); + //} else if(name === 'text'){ + //this.cursor('pointer'); + } else { + this.cursor(); + } + + if (this.isDown) { + let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; + + // lo mapeo al rango 0 ... 1 + nNormalized = Math.min(1, Math.max(0, nNormalized)); + + // aplico easing + let nEased = Math.pow(nNormalized, this.easing); // easing + + let nNew = nEased * this.range + this.min; + let nNewSlider = nNormalized * this.range + this.min; + + this.sliderValue = this.numValue(nNewSlider); + + let delta = nNew - this.old; + + let steps; + if (delta >= this.step || delta <= this.step) { + steps = Math.floor(delta / this.step); + this.value = this.numValue(this.old + steps * this.step); + // value without easing applied + + this.update(true); + this.old = this.value; + } + //console.log("n, normalized, value", nNew, nNormalized, this.value); + nup = true; + } + + return nup; + } + + wheel(e) { + let name = this.testZone(e); + + if (name === "scroll") { + let v = this.value - this.step * e.delta; + + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue(v); + this.old = v; + this.update(true); + + return true; + } + + return false; + } + + //keydown: function ( e ) { return true; }, + + // ---------------------- + + validate() { + let n = this.c[2].textContent; + + if (!isNaN(n)) { + this.value = this.numValue(n); + this.update(true); + } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + } + + reset() { + //this.clearInput(); + this.isDown = false; + this.mode(0); + } + + mode(mode) { + let s = this.s; + let cc = this.colors; + + switch (mode) { + case 0: // base + // s[2].border = '1px solid ' + this.colors.hide; + s[2].color = cc.text; + s[4].background = cc.back; + s[5].background = cc.text; + if (this.model !== 0) s[6].background = cc.text; //cc.button; + break; + case 1: // scroll over + //s[2].border = '1px dashed ' + this.colors.hide; + s[2].color = cc.textOver; + s[4].background = cc.back; + s[5].background = cc.textOver; + if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; + break; + } + } + + update(up) { + let ww = Math.floor(this.ww * ((this.sliderValue - this.min) / this.range)); + //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); + + if (this.model !== 3) this.s[5].width = ww + "px"; + if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; + this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + + if (up) this.send(); + } + + rSize() { + super.rSize(); + + let w = this.sb - this.sc; + this.ww = w - 6; + + let tx = this.sc; + if (this.isUI || !this.simple) tx = this.sc + 10; + this.txl = this.w - tx + 2; + + //let ty = Math.floor(this.h * 0.5) - 8; + + let s = this.s; + + s[2].width = this.sc - 6 + "px"; + s[2].left = this.txl + 4 + "px"; + //s[2].top = ty + 'px'; + s[3].left = this.sa + "px"; + s[3].width = w + "px"; + s[4].left = this.sa + "px"; + s[4].width = w + "px"; + s[5].left = this.sa + 3 + "px"; + + this.update(); + } +} + +class TextInput extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.cmode = 0; + + this.value = o.value !== undefined ? o.value : ''; + this.placeHolder = o.placeHolder || ''; + + this.allway = o.allway || false; + this.editable = o.edit !== undefined ? o.edit : true; + + this.isDown = false; + + let cc = this.colors; + + // text + this.c[2] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[2].textContent = this.value; + + // selection + this.c[3] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.c[4] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + // fake + this.c[5] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; border:none; justify-content: center; font-style: italic; color:'+cc.border+';' ); + if( this.value === '' ) this.c[5].textContent = this.placeHolder; + + + + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x >= this.sa ) return 'text'; + return ''; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if(!this.editable) return; + + if( this.isDown ){ + this.isDown = false; + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + if( !this.isDown ){ + this.isDown = true; + if( name === 'text' ) this.setInput( this.c[2] ); + return this.mousemove( e ); + } + + return false; + + } + + mousemove ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + //let l = this.local; + //if( l.x === -1 && l.y === -1 ){ return;} + + //if( l.x >= this.sa ) this.cursor('text'); + //else this.cursor(); + + let x = 0; + + if( name === 'text' ) this.cursor('text'); + else this.cursor(); + + if( this.isDown ) x = e.clientX - this.zone.x; + + return this.upInput( x - this.sa -3, this.isDown ); + + } + + update ( ) { + + this.c[2].textContent = this.value; + + } + + // ---------------------- + + reset () { + + this.cursor(); + + } + + // ---------------------- + // INPUT + // ---------------------- + + select ( c, e, w, t ) { + + let s = this.s; + let d = this.sa + 5; + s[4].width = '1px'; + s[4].left = ( d + e ) + 'px'; + + s[3].left = ( d + e ) + 'px'; + s[3].width = w + 'px'; + this.c[3].innerHTML = t; + + } + + unselect () { + + let s = this.s; + if(!s) return; + s[3].width = 0 + 'px'; + this.c[3].innerHTML = 't'; + s[4].width = 0 + 'px'; + + } + + validate ( force ) { + + if( this.allway ) force = true; + + this.value = this.c[2].textContent; + + if(this.value !== '') this.c[5].textContent = ''; + else this.c[5].textContent = this.placeHolder; + + if( !force ) return; + + this.send(); + + } + + // ---------------------- + // REZISE + // ---------------------- + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + + s[5].left = this.sa + 'px'; + s[5].width = this.sb + 'px'; + + } + + +} + +class Title extends Proto { + + constructor( o = {} ) { + + super( o ); + + let prefix = o.prefix || ''; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:right; width:60px; line-height:'+ (this.h-8) + 'px; color:' + this.colors.text ); + + if( this.h === 31 ){ + + this.s[0].height = this.h + 'px'; + this.s[1].top = 8 + 'px'; + this.c[2].style.top = 8 + 'px'; + + } + + let s = this.s; + + s[1].justifyContent = o.align || 'left'; + //s[1].textAlign = o.align || 'left'; + s[1].fontWeight = o.fontWeight || 'bold'; + + + this.c[1].textContent = this.txt.substring(0,1).toUpperCase() + this.txt.substring(1).replace("-", " "); + this.c[2].textContent = prefix; + + this.init(); + + } + + text( txt ) { + + this.c[1].textContent = txt; + + } + + text2( txt ) { + + this.c[2].textContent = txt; + + } + + rSize() { + + super.rSize(); + this.s[1].width = this.w + 'px'; //- 50 + 'px'; + this.s[2].left = this.w + 'px';//- ( 50 + 26 ) + 'px'; + + } + + setColor( c ) { + this.s[1].color = c; + this.s[2].color = c; + } + +} + +class Select extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.isDown = false; + this.onActif = o.onActif || function(){}; + + //let prefix = o.prefix || ''; + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+ cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + //this.c[2].style.color = this.fontColor; + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'cursor' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + this.isActif = false; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + if( l.x > this.sa && l.x < this.sa+30 ) return 'over' + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ) + } + + return false + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false + + this.isDown = true; + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + this.send(); + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + if( n===1 ) this.isActif = false; + if( n===3 ){ + if( !this.isActif ){ this.isActif = true; n=4; this.onActif( this ); } + else { this.isActif = false; } + } + + if( n===2 && this.isActif ) n = 4; + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.action; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.action; break; // actif + + } + + change = true; + + } + + return change + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ) + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + +} + +class Bitmap extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.refTexture = o.texture || null; + this.img = null; + + this.isDown = false; + this.neverlock = true; + + + + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'load' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x > this.sa && l.x < this.sa+30 ) return 'over'; + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'over' ){ + this.isDown = true; + Files.load( { callback:this.changeBitmap.bind(this) } ); + + } + + + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ); + + } + + mousemove ( e ) { + + let up = false; + + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + + changeBitmap( img, fname ){ + + if( img ){ + this.img = img; + this.apply( fname ); + } else { + this.img = null; + this.apply( 'null' ); + } + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + + if( this.img !== null ){ + if( this.objectLink !== null ) this.objectLink[ this.val ] = v; + if( this.callback ) this.callback( this.value, this.img, this.name ); + } + + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.over; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.select; break; // actif + + } + + change = true; + + } + + return change; + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ); + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + +} + +//import { Proto } from '../core/Proto.js'; + +class Selector extends Button { + + constructor( o = {} ) { + + if( o.selectable === undefined ) o.selectable = true; + super( o ); + + } + +} + +class Item extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.p = 100; + this.value = this.txt; + this.status = 1; + + this.itype = o.itype || 'none'; + this.val = this.itype; + + this.graph = this.svgs[ this.itype ]; + + let fltop = Math.floor(this.h*0.5)-7; + + this.c[2] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.graph, fill:this.colors.text, stroke:'none'}); + + this.s[1].marginLeft = 20 + 'px'; + + this.init(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousemove ( e ) { + + this.cursor('pointer'); + + //up = this.modes( this.isDown ? 3 : 2, name ); + + } + + mousedown ( e ) { + + if( this.isUI ) this.main.resetItem(); + + this.selected( true ); + + this.send(); + + return true; + + } + + uiout () { + + if( this.isSelect ) this.mode(3); + else this.mode(1); + + } + + uiover () { + + if( this.isSelect ) this.mode(4); + else this.mode(2); + + } + + update () { + + } + + /*rSize () { + + super.rSize(); + + }*/ + + mode ( n ) { + + let change = false; + + if( this.status !== n ){ + + this.status = n; + let s = this.s, cc = this.colors; + + switch( n ){ + + case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; + case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; + case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; + case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; + + } + + change = true; + + } + + return change; + + } + + reset () { + + this.cursor(); + // return this.mode( 1 ); + + } + + selected ( b ){ + + if( this.isSelect ) this.mode(1); + + this.isSelect = b || false; + + if( this.isSelect ) this.mode(3); + + } + + +} + +class Grid extends Proto { + + constructor( o = {} ) { + + super( o ); + + /*this.values = o.values || []; + + if( typeof this.values === 'string' ) this.values = [ this.values ];*/ + + this.values = []; + + if( o.values ){ + if( o.values instanceof Array ){ + this.values = o.values; + } else if( o.values instanceof String ){ + this.values = [ o.values ]; + } else if( o.values instanceof Object ){ + this.refObject = o.values; + for( let g in this.refObject ) this.values.push( g ); + } + } + + this.lng = this.values.length; + + + + this.value = o.value || null; + + + + + let cc = this.colors; + + + this.isSelectable = o.selectable || false; + this.spaces = o.spaces || [ cc.sx, cc.sy ]; + this.bsize = o.bsize || [ 90, this.h ]; + + this.bsizeMax = this.bsize[0]; + + this.tmp = []; + this.stat = []; + this.grid = [ 2, Math.round( this.lng * 0.5 ) ]; + + this.h = ( this.grid[1] * this.bsize[1] ) + ( this.grid[1] * this.spaces[1] ); //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); + + this.c[1].textContent = ''; + //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); + this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1])+'px; border:none;' ); + + let n = 0, b, td, tr, sel; + + this.res = -1; + this.isDown = false; + this.neverlock = true; + + this.buttons = []; + this.stat = []; + this.tmpX = []; + this.tmpY = []; + + for( let i = 0; i < this.grid[1]; i++ ){ + + tr = this.c[2].insertRow(); + tr.style.cssText = 'pointer-events:none;'; + for( let j = 0; j < this.grid[0]; j++ ){ + + td = tr.insertCell(); + td.style.cssText = 'pointer-events:none;'; + + if( this.values[n] ){ + + sel = false; + if( this.values[n] === this.value && this.isSelectable ) sel = true; + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:'+this.bsize[0]+'px; height:'+(this.bsize[1]-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; left:auto; right:auto; border-radius:'+this.radius+'px;'; + b.style.background = sel ? cc.select : cc.button; + b.style.color = sel ? cc.textSelect : cc.text; + b.innerHTML = this.values[n]; + td.appendChild( b ); + + this.buttons.push(b); + this.stat.push(1); + + } else { + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + 'position:static; width:'+this.bsize[0]+'px; height:'+this.bsize[1]+'px; text-align:center; left:auto; right:auto; background:none;'; + td.appendChild( b ); + + } + + if(j===0) b.style.cssText += 'float:right;'; + else b.style.cssText += 'float:left;'; + + n++; + + } + } + + this.s[0].border = 'none'; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1; + + l.y += this.mtop; + + let tx = this.tmpX; + let ty = this.tmpY; + + let id = -1; + let c = -1; + let line = -1; + let i = this.grid[0]; + while( i-- ){ + if( l.x > tx[i][0] && l.x < tx[i][1] ) c = i; + } + + i = this.grid[1]; + while( i-- ){ + if( l.y > ty[i][0] && l.y < ty[i][1] ) line = i; + } + + if(c!==-1 && line!==-1){ + id = c + (line*2); + if(id>this.lng-1) id = -1; + } + + return id; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( !this.isDown ) return false + + this.isDown = false; + if( this.res !== -1 ){ + this.value = this.values[this.res]; + this.send(); + } + + return this.mousemove( e ) + + } + + mousedown ( e ) { + + if( this.isDown ) return false + this.isDown = true; + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + this.res = this.testZone( e ); + + if( this.res !== -1 ){ + this.cursor('pointer'); + up = this.modes( this.isDown ? 3 : 2, this.res ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + // MODE + // ----------------------- + + modes ( N = 1, id = -1 ) { + + let i = this.lng, w, n, r = false; + + while( i-- ){ + + n = N; + w = this.isSelectable ? this.values[ i ] === this.value : false; + + if( i === id ){ + if( w && n === 2 ) n = 3; + } else { + n = 1; + if( w ) n = 4; + } + + if( this.mode( n, i ) ) r = true; + + } + + return r + + } + + mode ( n, id ) { + + let change = false; + let cc = this.colors, s = this.buttons; + let i = id; + + if( this.stat[id] !== n ){ + + this.stat[id] = n; + + switch( n ){ + + case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; + case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; + case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; + case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; + + } + + change = true; + + } + + return change; + + } + + // ---------------------- + + reset () { + + this.res = -1; + this.cursor(); + return this.modes() + + } + + + label ( string, n ) { + + this.buttons[n].textContent = string; + + } + + icon ( string, y, n ) { + + this.buttons[n].style.padding = ( y || 0 ) +'px 0px'; + this.buttons[n].innerHTML = string; + + } + + testW () { + + let vw = this.spaces[0]*3 + this.bsizeMax*2, rz = false; + if( vw > this.w ) { + this.bsize[0] = ( this.w-(this.spaces[0]*3) ) * 0.5; + rz = true; + } else { + if( this.bsize[0] !== this.bsizeMax ) { + this.bsize[0] = this.bsizeMax; + rz = true; + } + } + + if( !rz ) return; + + let i = this.buttons.length; + while(i--) this.buttons[i].style.width = this.bsize[0] + 'px'; + + } + + rSize () { + + super.rSize(); + + this.testW(); + + let mid; + + this.tmpX = []; + this.tmpY = []; + + for( let j = 0; j < this.grid[0]; j++ ){ + + if(j===0){ + mid = ( this.w*0.5 ) - ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid-this.bsize[0], mid ] ); + } else { + mid = ( this.w*0.5 ) + ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid, mid+this.bsize[0] ] ); + } + + } + + mid = this.spaces[1]; + + for( let i = 0; i < this.grid[1]; i++ ){ + + this.tmpY.push( [ mid, mid + this.bsize[1] ] ); + mid += this.bsize[1] + this.spaces[1]; + + } + + } + +} + +class Pad2D extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + + //this.margin = 15; + this.pos = new V2(0,0); + this.maxPos = 90; + + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.min = o.min === undefined ? -1 : o.min; + this.max = o.max === undefined ? 1 : o.max; + + this.range = (this.max - this.min)*0.5; + + this.cmode = 0; + + + //console.log(this.range) + + this.c[0].style.display = 'block'; + + + + + + this.precision = o.precision === undefined ? 2 : o.precision; + + /*this.bounds = {}; + this.bounds.x1 = o.x1 || -1; + this.bounds.x2 = o.x2 || 1; + this.bounds.y1 = o.y1 || -1; + this.bounds.y2 = o.y2 || 1; + + this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); + this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); + + this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); + this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ + + this.value = ( Array.isArray( o.value ) && o.value.length == 2 ) ? o.value : [ 0, 0 ]; + + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w + 'px'; + + // Title + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + //this.top -= this.margin + + let cc = this.colors; + + + // Value + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+ ( this.h - 20 ) + 'px; width:100%; color:' + cc.text ); + this.c[2].textContent = this.value; + + // Pad + + let pad = this.getPad2d(); + + this.setSvg( pad, 'fill', cc.back, 0 ); + this.setSvg( pad, 'fill', cc.button, 1 ); + this.setSvg( pad, 'stroke', cc.back, 2 ); + this.setSvg( pad, 'stroke', cc.back, 3 ); + this.setSvg( pad, 'stroke', cc.text, 4 ); + + this.setSvg( pad, 'viewBox', '0 0 '+this.diam+' '+this.diam ); + this.setCss( pad, { width:this.diam, height:this.diam, left:0, top:this.top }); + + this.c[3] = pad; + + this.init(); + this.setValue(); + + } + + testZone ( e ) { + + let l = this.local; + + if( l.x === -1 && l.y === -1 ) return ''; + + + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'pad'; + + /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { + return 'pad'; + }*/ + + //return ''; + + } + + mouseup ( e ) { + + this.isDown = false; + return this.mode(0); + + } + + mousedown ( e ) { + + if ( this.testZone(e) === 'pad' ) { + + this.isDown = true; + this.mousemove( e ); + return this.mode(1); + } + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let x = (this.w*0.5) - ( e.clientX - this.zone.x ); + let y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + + let r = 256 / this.diam; + + x = -(x*r); + y = -(y*r); + + x = Tools.clamp( x, -this.maxPos, this.maxPos ); + y = Tools.clamp( y, -this.maxPos, this.maxPos ); + + //let x = e.clientX - this.zone.x; + //let y = e.clientY - this.zone.y - this.top; + + /*if( x < this.margin ) x = this.margin; + if( x > this.w - this.margin ) x = this.w - this.margin; + if( y < this.margin ) y = this.margin; + if( y > this.w - this.margin ) y = this.w - this.margin;*/ + + //console.log(x,y) + + this.setPos( [ x , y ] ); + + this.update( true ); + + } + + mode ( mode ) { + + if( this.cmode === mode ) return false; + + let cc = this.colors; + + switch( mode ){ + case 0: // base + + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.back, 0); + this.setSvg( this.c[3], 'fill', cc.button, 1); + this.setSvg( this.c[3], 'stroke', cc.back, 2); + this.setSvg( this.c[3], 'stroke', cc.back, 3); + this.setSvg( this.c[3], 'stroke', cc.text, 4 ); + + break; + case 1: // down + + this.s[2].color = cc.textSelect; + this.setSvg( this.c[3], 'fill', cc.backoff, 0); + this.setSvg( this.c[3], 'fill', cc.overoff, 1); + this.setSvg( this.c[3], 'stroke', cc.backoff, 2); + this.setSvg( this.c[3], 'stroke', cc.backoff, 3); + this.setSvg( this.c[3], 'stroke', cc.textSelect, 4 ); + + break; + } + + this.cmode = mode; + return true; + + + + } + + update ( up ) { + + //if( up === undefined ) up = true; + + this.c[2].textContent = this.value; + + this.updateSVG(); + + if( up ) this.send(); + + } + + updateSVG() { + + if ( this.model == 1 ) { + + this.setSvg( this.c[3], 'y1', this.pos.y, 2 ); + this.setSvg( this.c[3], 'y2', this.pos.y, 2 ); + + this.setSvg( this.c[3], 'x1', this.pos.x, 3 ); + this.setSvg( this.c[3], 'x2', this.pos.x, 3 ); + + } + + this.setSvg( this.c[3], 'cx', this.pos.x, 4 ); + this.setSvg( this.c[3], 'cy', this.pos.y, 4 ); + + } + + setPos ( p ) { + + //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; + + this.pos.set( p[0]+128 , p[1]+128 ); + + let r = 1/this.maxPos; + + this.value[0] = ((p[0]*r)*this.range).toFixed( this.precision ); + this.value[1] = ((p[1]*r)*this.range).toFixed( this.precision ); + + } + + setValue ( v, up = false ) { + + if( v === undefined ) v = this.value; + + /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; + if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; + if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; + if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ + + this.value[0] = Math.min( this.max, Math.max( this.min, v[0] ) ).toFixed( this.precision ) * 1; + this.value[1] = Math.min( this.max, Math.max( this.min, v[1] ) ).toFixed( this.precision ) * 1; + + this.pos.set( ((this.value[0]/this.range)*this.maxPos)+128 , ((this.value[1]/this.range)*this.maxPos)+128 ); + + //console.log(this.pos) + + this.update( up ); + + } + + /*lerp( s1, s2, d1, d2, c = true ) { + + let s = ( d2 - d1 ) / ( s2 - s1 ); + + return c ? ( v ) => { + return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 + } : ( v ) => { + return ( v - s1 ) * s + d1 + } + + }*/ + +} + +const add = function () { + + let a = arguments; + + let type, o, ref = false, n = null; + + if( typeof a[0] === 'string' ){ + + type = a[0]; + o = a[1] || {}; + + } else if ( typeof a[0] === 'object' ){ // like dat gui + + ref = true; + if( a[2] === undefined ) [].push.call(a, {}); + + type = a[2].type ? a[2].type : autoType( a[0][a[1]], a[2] ); + + o = a[2]; + o.name = a[1]; + if (o.hasOwnProperty("displayName")) o.name = o.displayName; + + if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } + else o.value = a[0][a[1]]; + + } + + let name = type.toLowerCase(); + + if( name === 'group' ){ + o.add = add; + //o.dx = 8 + } + + switch( name ){ + + case 'bool': case 'boolean': n = new Bool(o); break; + case 'button': n = new Button(o); break; + case 'circular': n = new Circular(o); break; + case 'color': n = new Color(o); break; + case 'fps': n = new Fps(o); break; + case 'graph': n = new Graph(o); break; + case 'group': n = new Group(o); break; + case 'joystick': n = new Joystick(o); break; + case 'knob': n = new Knob(o); break; + case 'list': n = new List(o); break; + case 'numeric': case 'number': n = new Numeric(o); break; + case 'slide': n = new Slide(o); break; + case 'textInput': case 'string': n = new TextInput(o); break; + case 'title': case 'text': n = new Title(o); break; + case 'select': n = new Select(o); break; + case 'bitmap': n = new Bitmap(o); break; + case 'selector': n = new Selector(o); break; + case 'empty': case 'space': n = new Empty(o); break; + case 'item': n = new Item(o); break; + case 'grid': n = new Grid(o); break; + case 'pad2d': case 'pad': n = new Pad2D(o); break; + + } + + + + if( n !== null ){ + + Roots.needResize = true; + + if( ref ) n.setReferency( a[0], a[1] ); + return n; + + } + +}; + +const autoType = function ( v, o ) { + + let type = 'slide'; + + if( typeof v === 'boolean' ) type = 'bool'; + else if( typeof v === 'string' ){ + + if( v.substring(0,1) === '#' ) type = 'color'; + else type = 'string'; + + } else if( typeof v === 'number' ){ + + if( o.ctype ) type = 'color'; + else type = 'slide'; + + } else if( typeof v === 'array' && v instanceof Array ){ + + if( typeof v[0] === 'number' ) type = 'number'; + else if( typeof v[0] === 'string' ) type = 'list'; + + } else if( typeof v === 'object' && v instanceof Object ){ + + if( v.x !== undefined ) type = 'number'; + else type = 'list'; + + } + + return type + +}; + +/** + * @author lth / https://github.com/lo-th + */ + +class Gui { + constructor(o = {}) { + this.isGui = true; + + this.name = "gui"; + + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; + + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); + + //this.cleanning = false + + // style + this.css = Tools.cloneCss(); + + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 + + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; + + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; + + this.callback = o.callback === undefined ? null : o.callback; + + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; + + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + + this.cn = ""; + + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; + + this.size.h = this.size.h < 11 ? 11 : this.size.h; + + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + + // virtual mouse + this.mouse = new V2().neg(); + + this.h = 0; + //this.prevY = -1; + this.sw = 0; + + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); + + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; + + this.autoResize = o.autoResize === undefined ? true : o.autoResize; + + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; + + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; + + this.isNewTarget = false; + + let cc = this.colors; + + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); + + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); + + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); + + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); + + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); + + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; + + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } + + if (this.parent !== null) this.parent.appendChild(this.content); + + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } + + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + + this.setWidth(); + + if (this.isCanvas) this.makeCanvas(); + + Roots.add(this); + } + + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseUp(x, y) { + /* + + clientX,clientY are no used when isCanvas==true + */ + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); + + Roots.needReZone = true; + } + + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } + + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } + + // ---------------------- + // CANVAS + // ---------------------- + + onDraw() {} + + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + + //console.log( this.canvas.width, this.canvas.height ) + } + + draw(force) { + if (this.canvas === null) return; + + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } + + ////// + + getDom() { + return this.content; + } + + noMouse() { + this.mouse.neg(); + } + + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); + + //console.log("setMouse "+uv.x+" "+uv.y) + } + + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } + + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } + + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } + + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } + + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } + + onChange(f) { + this.callback = f || null; + return this; + } + + // ---------------------- + // STYLES + // ---------------------- + + mode(n) { + let needChange = false; + let cc = this.colors; + + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } + + needChange = true; + } + + return needChange; + } + + // ---------------------- + // TARGET + // ---------------------- + + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + + this.proto = null; + this.current = -1; + + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + + Roots.cursor(); + return true; + } + + // ---------------------- + // ZONE TEST + // ---------------------- + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + this.isReset = false; + + let name = ""; + + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; + + return name; + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent(e) { + //if( this.cleanning ) return + + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; + + let change = false; + let protoChange = false; + + let name = this.testZone(e); + + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; + + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } + + if (!name) return; + + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); + + if (this.proto) protoChange = this.proto.handleEvent(e); + + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); + + if (!Roots.lock) { + this.getNext(e, change); + } + + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } + + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + + break; + } + + if (this.isDown) change = true; + if (protoChange) change = true; + + if (type === "keyup") change = true; + if (type === "keydown") change = true; + + if (change) this.draw(); + } + + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); + + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } + + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } + + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } + + // ---------------------- + // RESET + // ---------------------- + + reset(force) { + if (this.isReset) return; + + //this.resetItem(); + + this.mouse.neg(); + this.isDown = false; + + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); + + if (r || r2) this.draw(true); + + this.isReset = true; + + //Roots.lock = false; + } + + // ---------------------- + // ADD NODE + // ---------------------- + + add() { + //if(this.cleanning) this.cleanning = false + + let a = arguments; + let ontop = false; + + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; + + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } + + let u = add.apply(this, a); + + if (u === null) return; + + if (ontop) this.uis.unshift(u); + else this.uis.push(u); + + this.calc(); + + this.isEmpty = false; + + return u; + } + + // remove one node + + remove(n) { + if (n.dispose) n.dispose(); + } + + // call after uis clear + + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } + + // clear all gui + + empty() { + //this.cleanning = true + + //this.close(); + + let i = this.uis.length, + item; + + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } + + this.uis = []; + this.isEmpty = true; + this.calc(); + } + + clear() { + this.empty(); + } + + clear2() { + setTimeout(this.empty.bind(this), 0); + } + + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } + + // ---------------------- + // ITEMS SPECIAL + // ---------------------- + + resetItem() { + if (!this.isItemMode) return; + + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } + + setItem(name) { + if (!this.isItemMode) return; + + name = name || ""; + this.resetItem(); + + if (!name) { + this.update(0); + return; + } + + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } + + // ---------------------- + // SCROLL + // ---------------------- + + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; + + if (b) { + this.total = this.h; + + this.maxView = this.maxHeight; + + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; + + this.range = this.maxView - this.sh; + + this.oy = Tools.clamp(this.oy, 0, this.range); + + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } + + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } + + update(y) { + y = Tools.clamp(y, 0, this.range); + + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } + + // ---------------------- + // RESIZE FUNCTION + // ---------------------- + + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } + + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } + + setHeight() { + if (this.tmp) clearTimeout(this.tmp); + + this.zone.h = this.bh; + this.isScroll = false; + + if (this.isOpen) { + this.h = this.calcUis(); + + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; + + this.maxHeight = hhh - this.zone.y - this.bh; + + let diff = this.h - this.maxHeight; + + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + + this.upScroll(this.isScroll); + + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + + rezone() { + Roots.needReZone = true; + } + + setWidth(w) { + if (w) this.zone.w = w; + + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } +} + +export { Files, Gui, REVISION, Tools, add }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0pIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMuc2xpZGVyVmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcbiAgICAvL2xldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqICgodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2UpKTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gMykgdGhpcy5zWzVdLndpZHRoID0gd3cgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5zWzZdKSB0aGlzLnNbNl0ubGVmdCA9IHRoaXMuc2EgKyB3dyArIDMgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuXHJcbiAgICBpZiAodXApIHRoaXMuc2VuZCgpO1xyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy5zYiAtIHRoaXMuc2M7XHJcbiAgICB0aGlzLnd3ID0gdyAtIDY7XHJcblxyXG4gICAgbGV0IHR4ID0gdGhpcy5zYztcclxuICAgIGlmICh0aGlzLmlzVUkgfHwgIXRoaXMuc2ltcGxlKSB0eCA9IHRoaXMuc2MgKyAxMDtcclxuICAgIHRoaXMudHhsID0gdGhpcy53IC0gdHggKyAyO1xyXG5cclxuICAgIC8vbGV0IHR5ID0gTWF0aC5mbG9vcih0aGlzLmggKiAwLjUpIC0gODtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICBzWzJdLndpZHRoID0gdGhpcy5zYyAtIDYgKyBcInB4XCI7XHJcbiAgICBzWzJdLmxlZnQgPSB0aGlzLnR4bCArIDQgKyBcInB4XCI7XHJcbiAgICAvL3NbMl0udG9wID0gdHkgKyAncHgnO1xyXG4gICAgc1szXS5sZWZ0ID0gdGhpcy5zYSArIFwicHhcIjtcclxuICAgIHNbM10ud2lkdGggPSB3ICsgXCJweFwiO1xyXG4gICAgc1s0XS5sZWZ0ID0gdGhpcy5zYSArIFwicHhcIjtcclxuICAgIHNbNF0ud2lkdGggPSB3ICsgXCJweFwiO1xyXG4gICAgc1s1XS5sZWZ0ID0gdGhpcy5zYSArIDMgKyBcInB4XCI7XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUZXh0SW5wdXQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlICE9PSB1bmRlZmluZWQgPyBvLnZhbHVlIDogJyc7XHJcbiAgICAgICAgdGhpcy5wbGFjZUhvbGRlciA9IG8ucGxhY2VIb2xkZXIgfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZSA9IG8uZWRpdCAhPT0gdW5kZWZpbmVkID8gby5lZGl0IDogdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gdGV4dFxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonICsgKHRoaXMuaC0yKSArICdweDsgY29sb3I6JyArIGNjLnRleHQgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5iYWNrICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgLy8gZmFrZVxyXG4gICAgICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonICsgKHRoaXMuaC0yKSArICdweDsgYm9yZGVyOm5vbmU7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOicrY2MuYm9yZGVyKyc7JyApO1xyXG4gICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSAnJyApIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIFxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+PSB0aGlzLnNhICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggbmFtZSA9PT0gJ3RleHQnICkgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgLy9pZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICl7IHJldHVybjt9XHJcblxyXG4gICAgICAgIC8vaWYoIGwueCA+PSB0aGlzLnNhICkgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICAvL2Vsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RleHQnICkgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICBlbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBJbnB1dCggeCAtIHRoaXMuc2EgLTMsIHRoaXMuaXNEb3duICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2EgKyA1O1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAnMXB4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAoIGQgKyBlICkgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAgKCBkICsgZSApICArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICB3ICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgaWYoIXMpIHJldHVybjtcclxuICAgICAgICBzWzNdLndpZHRoID0gIDAgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gJ3QnXHJcbiAgICAgICAgc1s0XS53aWR0aCA9IDAgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWU7IFxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgICAgICBpZih0aGlzLnZhbHVlICE9PSAnJykgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgZWxzZSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBSRVpJU0VcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s1XS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1s1XS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBUaXRsZSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICBsZXQgcHJlZml4ID0gby5wcmVmaXggfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpyaWdodDsgd2lkdGg6NjBweDsgbGluZS1oZWlnaHQ6JysgKHRoaXMuaC04KSArICdweDsgY29sb3I6JyArIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaCA9PT0gMzEgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0udG9wID0gOCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSA4ICsgJ3B4JztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc1sxXS5qdXN0aWZ5Q29udGVudCA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIC8vc1sxXS50ZXh0QWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICBzWzFdLmZvbnRXZWlnaHQgPSBvLmZvbnRXZWlnaHQgfHwgJ2JvbGQnO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQuc3Vic3RyaW5nKDAsMSkudG9VcHBlckNhc2UoKSArIHRoaXMudHh0LnN1YnN0cmluZygxKS5yZXBsYWNlKFwiLVwiLCBcIiBcIik7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gcHJlZml4O1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQyKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcbiAgICAgICAgdGhpcy5zWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4JzsgLy8tIDUwICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0ubGVmdCA9IHRoaXMudyArICdweCc7Ly8tICggNTAgKyAyNiApICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q29sb3IoIGMgKSB7XHJcbiAgICAgICAgdGhpcy5zWzFdLmNvbG9yID0gY1xyXG4gICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMub25BY3RpZiA9IG8ub25BY3RpZiB8fCBmdW5jdGlvbigpe31cclxuXHJcbiAgICAgICAgLy9sZXQgcHJlZml4ID0gby5wcmVmaXggfHwgJyc7XHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICcgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrIGNjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuICAgICAgICAvL3RoaXMuY1syXS5zdHlsZS5jb2xvciA9IHRoaXMuZm9udENvbG9yO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IGJhY2tncm91bmQ6JyArIGNjLmlucHV0QmcgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuaW5wdXRCb3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnY3Vyc29yJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcbiAgICAgICAgdGhpcy5pc0FjdGlmID0gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3ZlcidcclxuICAgICAgICByZXR1cm4gJzAnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcbiAgICBcclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgLy90aGlzLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgLy90aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbIG5hbWUtMiBdO1xyXG4gICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhcHBseSAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8ICcnO1xyXG5cclxuICAgICAgICBpZiggdiAhPT0gdGhpcy52YWx1ZSApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSggMyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0xICkgdGhpcy5pc0FjdGlmID0gZmFsc2U7O1xyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0zICl7IFxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzQWN0aWYgKXsgdGhpcy5pc0FjdGlmID0gdHJ1ZTsgbj00OyB0aGlzLm9uQWN0aWYoIHRoaXMgKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7IHRoaXMuaXNBY3RpZiA9IGZhbHNlOyB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MiAmJiB0aGlzLmlzQWN0aWYgKSBuID0gNDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gYWN0aWZcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICh0aGlzLnNhKzgpICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBGaWxlcyB9IGZyb20gJy4uL2NvcmUvRmlsZXMuanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBCaXRtYXAgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMucmVmVGV4dHVyZSA9IG8udGV4dHVyZSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcblxyXG5cclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICcgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IGJhY2tncm91bmQ6JyArIGNjLmlucHV0QmcgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuaW5wdXRCb3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2xvYWQnIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJztcclxuICAgICAgICByZXR1cm4gJzAnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcbiAgICBcclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgLy90aGlzLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBGaWxlcy5sb2FkKCB7IGNhbGxiYWNrOnRoaXMuY2hhbmdlQml0bWFwLmJpbmQodGhpcykgfSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy90aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbIG5hbWUtMiBdO1xyXG4gICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBjaGFuZ2VCaXRtYXAoIGltZywgZm5hbWUgKXtcclxuXHJcbiAgICAgICAgaWYoIGltZyApe1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IGltZ1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCBmbmFtZSApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoICdudWxsJyApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhcHBseSAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8ICcnO1xyXG5cclxuICAgICAgICBpZiggdiAhPT0gdGhpcy52YWx1ZSApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pbWcgIT09IG51bGwgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLm9iamVjdExpbmsgIT09IG51bGwgKSB0aGlzLm9iamVjdExpbmtbIHRoaXMudmFsIF0gPSB2XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5jYWxsYmFjayApIHRoaXMuY2FsbGJhY2soIHRoaXMudmFsdWUsIHRoaXMuaW1nLCB0aGlzLm5hbWUgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSggMyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhazsgLy8gYWN0aWZcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICh0aGlzLnNhKzgpICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG59IiwiLy9pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0b3IgZXh0ZW5kcyBCdXR0b24ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgPT09IHVuZGVmaW5lZCApIG8uc2VsZWN0YWJsZSA9IHRydWVcclxuICAgICAgICBzdXBlciggbyApO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLnAgPSAxMDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudHh0O1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5pdHlwZSA9IG8uaXR5cGUgfHwgJ25vbmUnO1xyXG4gICAgICAgIHRoaXMudmFsID0gdGhpcy5pdHlwZTtcclxuXHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IHRoaXMuc3Znc1sgdGhpcy5pdHlwZSBdO1xyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTc7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5ncmFwaCwgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc1sxXS5tYXJnaW5MZWZ0ID0gMjAgKyAncHgnO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG5cclxuICAgICAgICAvL3VwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgbmFtZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkKCB0cnVlICk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdXQgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdmVyICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoNCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMik7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8qclNpemUgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgfSovXHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdHVzICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IG47XHJcbiAgICAgICAgICAgIGxldCBzID0gdGhpcy5zLCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zdGF0dXMgPSAxOyBzWzFdLmNvbG9yID0gY2MudGV4dDsgc1swXS5iYWNrZ3JvdW5kID0gJ25vbmUnOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zdGF0dXMgPSAyOyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnN0YXR1cyA9IDM7IHNbMV0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzWzBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnN0YXR1cyA9IDQ7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgIC8vIHJldHVybiB0aGlzLm1vZGUoIDEgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQgKCBiICl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcydcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnXHJcblxyXG5leHBvcnQgY2xhc3MgR3JpZCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICAvKnRoaXMudmFsdWVzID0gby52YWx1ZXMgfHwgW107XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF07Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIG8udmFsdWVzICl7XHJcbiAgICAgICAgICAgIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBTdHJpbmcgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gWyBvLnZhbHVlcyBdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8udmFsdWVzXHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy52YWx1ZXMucHVzaCggZyApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoO1xyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IG51bGw7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3BhY2VzID0gby5zcGFjZXMgfHwgWyBjYy5zeCwgY2Muc3kgXVxyXG4gICAgICAgIHRoaXMuYnNpemUgPSBvLmJzaXplIHx8IFsgOTAsIHRoaXMuaCBdO1xyXG5cclxuICAgICAgICB0aGlzLmJzaXplTWF4ID0gdGhpcy5ic2l6ZVswXVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ3JpZCA9IFsgMiwgTWF0aC5yb3VuZCggdGhpcy5sbmcgKiAwLjUgKSBdO1xyXG5cclxuICAgICAgICB0aGlzLmggPSAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuYnNpemVbMV0gKSArICggdGhpcy5ncmlkWzFdICogdGhpcy5zcGFjZXNbMV0gKSAvLysgNCAtICh0aGlzLm10b3AqMikgLy8rICh0aGlzLnNwYWNlc1sxXSAtIHRoaXMubXRvcCk7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICd0YWJsZScsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IHRvcDonKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7IGhlaWdodDphdXRvOyBib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7IGJvcmRlcjpub25lOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICd0YWJsZScsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0pKydweDsgYm9yZGVyOm5vbmU7JyApO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZCwgdGQsIHRyLCBzZWw7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IFtdOyBcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFggPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFkgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdHIgPSB0aGlzLmNbMl0uaW5zZXJ0Um93KCk7XHJcbiAgICAgICAgICAgIHRyLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG4gICAgICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGQgPSB0ci5pbnNlcnRDZWxsKCk7XHJcbiAgICAgICAgICAgICAgICB0ZC5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3Bvc2l0aW9uOnN0YXRpYzsgdG9wOjFweDsgd2lkdGg6Jyt0aGlzLmJzaXplWzBdKydweDsgaGVpZ2h0OicrKHRoaXMuYnNpemVbMV0tMikrJ3B4OyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBsZWZ0OmF1dG87IHJpZ2h0OmF1dG87IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JztcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b247XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgIGIuaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoIGIgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25zLnB1c2goYilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXQucHVzaCgxKVxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApXHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOnN0YXRpYzsgd2lkdGg6Jyt0aGlzLmJzaXplWzBdKydweDsgaGVpZ2h0OicrdGhpcy5ic2l6ZVsxXSsncHg7IHRleHQtYWxpZ246Y2VudGVyOyBsZWZ0OmF1dG87IHJpZ2h0OmF1dG87IGJhY2tncm91bmQ6bm9uZTsnXHJcbiAgICAgICAgICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoIGIgKVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZihqPT09MCkgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpyaWdodDsnO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OmxlZnQ7JztcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBuKys7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xO1xyXG5cclxuICAgICAgICBsLnkgKz0gdGhpcy5tdG9wXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IHR4ID0gdGhpcy50bXBYO1xyXG4gICAgICAgIGxldCB0eSA9IHRoaXMudG1wWTtcclxuXHJcbiAgICAgICAgbGV0IGlkID0gLTE7XHJcbiAgICAgICAgbGV0IGMgPSAtMTtcclxuICAgICAgICBsZXQgbGluZSA9IC0xO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5ncmlkWzBdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICBcdGlmKCBsLnggPiB0eFtpXVswXSAmJiBsLnggPCB0eFtpXVsxXSApIGMgPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaSA9IHRoaXMuZ3JpZFsxXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0eVtpXVswXSAmJiBsLnkgPCB0eVtpXVsxXSApIGxpbmUgPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoYyE9PS0xICYmIGxpbmUhPT0tMSl7XHJcbiAgICAgICAgICAgIGlkID0gYyArIChsaW5lKjIpO1xyXG4gICAgICAgICAgICBpZihpZD50aGlzLmxuZy0xKSBpZCA9IC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgdGhpcy5zZW5kKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIHRoaXMucmVzIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFx0dXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGUoIG4sIGkgKSApIHIgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLmJ1dHRvbnNcclxuICAgICAgICBsZXQgaSA9IGlkXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS50ZXh0Q29udGVudCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSwgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnN0eWxlLnBhZGRpbmcgPSAoIHkgfHwgMCApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0VyAoKSB7XHJcblxyXG4gICAgICAgIGxldCB2dyA9IHRoaXMuc3BhY2VzWzBdKjMgKyB0aGlzLmJzaXplTWF4KjIsIHJ6ID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHZ3ID4gdGhpcy53ICkge1xyXG4gICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gKCB0aGlzLnctKHRoaXMuc3BhY2VzWzBdKjMpICkgKiAwLjU7XHJcbiAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggdGhpcy5ic2l6ZVswXSAhPT0gdGhpcy5ic2l6ZU1heCApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSB0aGlzLmJzaXplTWF4O1xyXG4gICAgICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIXJ6ICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuYnV0dG9ucy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmJ1dHRvbnNbaV0uc3R5bGUud2lkdGggPSB0aGlzLmJzaXplWzBdICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnRlc3RXKCk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkO1xyXG5cclxuICAgICAgICB0aGlzLnRtcFggPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFkgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgaWYoaj09PTApe1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgLSAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLXRoaXMuYnNpemVbMF0sIG1pZCBdICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSArICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQsIG1pZCt0aGlzLmJzaXplWzBdIF0gKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1pZCA9IHRoaXMuc3BhY2VzWzFdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRtcFkucHVzaCggWyBtaWQsIG1pZCArIHRoaXMuYnNpemVbMV0gXSApO1xyXG4gICAgICAgICAgICBtaWQgKz0gdGhpcy5ic2l6ZVsxXSArIHRoaXMuc3BhY2VzWzFdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFkMkQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgLy90aGlzLm1hcmdpbiA9IDE1O1xyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKDAsMCk7XHJcbiAgICAgICAgdGhpcy5tYXhQb3MgPSA5MFxyXG5cclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMubWluID0gby5taW4gPT09IHVuZGVmaW5lZCA/IC0xIDogby5taW47XHJcbiAgICAgICAgdGhpcy5tYXggPSBvLm1heCA9PT0gdW5kZWZpbmVkID8gMSA6IG8ubWF4O1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gKHRoaXMubWF4IC0gdGhpcy5taW4pKjAuNTsgIFxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5yYW5nZSlcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIFxyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IDIgOiBvLnByZWNpc2lvbjtcclxuXHJcbiAgICAgICAgLyp0aGlzLmJvdW5kcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngxID0gby54MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MiA9IG8ueDIgfHwgMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MSA9IG8ueTEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTIgPSBvLnkyIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMubGVycFggPSB0aGlzLmxlcnAoIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiAsIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiApO1xyXG4gICAgICAgIHRoaXMubGVycFkgPSB0aGlzLmxlcnAoIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiAsIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiApO1xyXG5cclxuICAgICAgICB0aGlzLmFsZXJwWCA9IHRoaXMubGVycCggdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyLCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gKTtcclxuICAgICAgICB0aGlzLmFsZXJwWSA9IHRoaXMubGVycCggdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyLCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gKTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gKCBBcnJheS5pc0FycmF5KCBvLnZhbHVlICkgJiYgby52YWx1ZS5sZW5ndGggPT0gMiApID8gby52YWx1ZSA6IFsgMCwgMCBdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsgJ3B4JztcclxuXHJcbiAgICAgICAgLy8gVGl0bGVcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMudG9wIC09IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cclxuICAgICAgICAvLyBWYWx1ZVxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyAoIHRoaXMuaCAtIDIwICkgKyAncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicgKyBjYy50ZXh0ICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gUGFkXHJcblxyXG4gICAgICAgIGxldCBwYWQgPSB0aGlzLmdldFBhZDJkKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDIgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggcGFkLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gcGFkXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSgpXHJcblxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG5cclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ3BhZCc7XHJcblxyXG4gICAgICAgIC8qaWYoICggbC54ID49IHRoaXMubWFyZ2luICkgJiYgKCBsLnggPD0gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA+PSB0aGlzLnRvcCArIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPD0gdGhpcy50b3AgKyB0aGlzLncgLSB0aGlzLm1hcmdpbiApICkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BhZCc7XHJcbiAgICAgICAgfSovXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9yZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy50ZXN0Wm9uZShlKSA9PT0gJ3BhZCcgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgeCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKVxyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGxldCByID0gMjU2IC8gdGhpcy5kaWFtXHJcblxyXG4gICAgICAgIHggPSAtKHgqcilcclxuICAgICAgICB5ID0gLSh5KnIpXHJcblxyXG4gICAgICAgIHggPSBUb29scy5jbGFtcCggeCwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcbiAgICAgICAgeSA9IFRvb2xzLmNsYW1wKCB5LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuXHJcbiAgICAgICAgLy9sZXQgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG4gICAgICAgIC8vbGV0IHkgPSBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wO1xyXG5cclxuICAgICAgICAvKmlmKCB4IDwgdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHggPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHggPSB0aGlzLncgLSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA8IHRoaXMubWFyZ2luICkgeSA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47Ki9cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh4LHkpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zKCBbIHggLCB5IF0gKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5iYWNrLCAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5iYWNrb2ZmLCAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5vdmVyb2ZmLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0U2VsZWN0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICAvL2lmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcoKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA9PSAxICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kxJywgdGhpcy5wb3MueSwgMiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTInLCB0aGlzLnBvcy55LCAyICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDEnLCB0aGlzLnBvcy54LCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MicsIHRoaXMucG9zLngsIDMgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB0aGlzLnBvcy54LCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgdGhpcy5wb3MueSwgNCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRQb3MgKCBwICkge1xyXG5cclxuICAgICAgICAvL2lmKCBwID09PSB1bmRlZmluZWQgKSBwID0gWyB0aGlzLncgLyAyLCB0aGlzLncgLyAyIF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggcFswXSsxMjggLCBwWzFdKzEyOCApO1xyXG5cclxuICAgICAgICBsZXQgciA9IDEvdGhpcy5tYXhQb3NcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9ICgocFswXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAoKHBbMV0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2LCB1cCA9IGZhbHNlICkge1xyXG5cclxuICAgICAgICBpZiggdiA9PT0gdW5kZWZpbmVkICkgdiA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8qaWYgKCB2WzBdIDwgdGhpcy5ib3VuZHMueDEgKSB2WzBdID0gdGhpcy5ib3VuZHMueDE7XHJcbiAgICAgICAgaWYgKCB2WzBdID4gdGhpcy5ib3VuZHMueDIgKSB2WzBdID0gdGhpcy5ib3VuZHMueDI7XHJcbiAgICAgICAgaWYgKCB2WzFdIDwgdGhpcy5ib3VuZHMueTEgKSB2WzFdID0gdGhpcy5ib3VuZHMueTE7XHJcbiAgICAgICAgaWYgKCB2WzFdID4gdGhpcy5ib3VuZHMueTIgKSB2WzFdID0gdGhpcy5ib3VuZHMueTI7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzBdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMV0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoICgodGhpcy52YWx1ZVswXS90aGlzLnJhbmdlKSp0aGlzLm1heFBvcykrMTI4ICAsICgodGhpcy52YWx1ZVsxXS90aGlzLnJhbmdlKSp0aGlzLm1heFBvcykrMTI4IClcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnBvcylcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHVwICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qbGVycCggczEsIHMyLCBkMSwgZDIsIGMgPSB0cnVlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9ICggZDIgLSBkMSApIC8gKCBzMiAtIHMxICk7XHJcblxyXG4gICAgICAgIHJldHVybiBjID8gKCB2ICkgPT4geyBcclxuICAgICAgICAgICAgcmV0dXJuICggKCB2IDwgczEgPyBzMSA6IHYgPiBzMiA/IHMyIDogdiApIC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH0gOiAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgcmV0dXJuICggdiAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9XHJcblxyXG4gICAgfSovXHJcblxyXG59IiwiXHJcbmltcG9ydCB7IEJvb2wgfSBmcm9tICcuLi9wcm90by9Cb29sLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vcHJvdG8vQnV0dG9uLmpzJztcclxuaW1wb3J0IHsgQ2lyY3VsYXIgfSBmcm9tICcuLi9wcm90by9DaXJjdWxhci5qcyc7XHJcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnLi4vcHJvdG8vQ29sb3IuanMnO1xyXG5pbXBvcnQgeyBGcHMgfSBmcm9tICcuLi9wcm90by9GcHMuanMnO1xyXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL3Byb3RvL0dyYXBoLmpzJztcclxuaW1wb3J0IHsgR3JvdXAgIH0gZnJvbSAnLi4vcHJvdG8vR3JvdXAuanMnO1xyXG5pbXBvcnQgeyBKb3lzdGljayB9IGZyb20gJy4uL3Byb3RvL0pveXN0aWNrLmpzJztcclxuaW1wb3J0IHsgS25vYiB9IGZyb20gJy4uL3Byb3RvL0tub2IuanMnO1xyXG5pbXBvcnQgeyBMaXN0IH0gZnJvbSAnLi4vcHJvdG8vTGlzdC5qcyc7XHJcbmltcG9ydCB7IE51bWVyaWMgfSBmcm9tICcuLi9wcm90by9OdW1lcmljLmpzJztcclxuaW1wb3J0IHsgU2xpZGUgfSBmcm9tICcuLi9wcm90by9TbGlkZS5qcyc7XHJcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gJy4uL3Byb3RvL1RleHRJbnB1dC5qcyc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vcHJvdG8vVGl0bGUuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuLi9wcm90by9TZWxlY3QuanMnO1xyXG5pbXBvcnQgeyBCaXRtYXAgfSBmcm9tICcuLi9wcm90by9CaXRtYXAuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdG9yLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuLi9wcm90by9FbXB0eS5qcyc7XHJcbmltcG9ydCB7IEl0ZW0gfSBmcm9tICcuLi9wcm90by9JdGVtLmpzJztcclxuaW1wb3J0IHsgR3JpZCB9IGZyb20gJy4uL3Byb3RvL0dyaWQuanMnO1xyXG5pbXBvcnQgeyBQYWQyRCB9IGZyb20gJy4uL3Byb3RvL1BhZDJELmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDWSxNQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxHQUFHO0FBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0FBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0FBQ0EsRUFBRSxFQUFFLEVBQUUsSUFBSTtBQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUs7QUFDYixFQUFFLEtBQUssRUFBRSxLQUFLO0FBQ2QsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7QUFDQSxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsVUFBVSxFQUFFLEtBQUs7QUFDbkIsRUFBRSxTQUFTLEVBQUUsS0FBSztBQUNsQixFQUFFLFlBQVksRUFBRSxLQUFLO0FBQ3JCLEVBQUUs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QUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDM0QsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDOUIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN2QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTTtBQUN2QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUM7QUFDZixNQUFNLENBQUM7QUFDUCxNQUFNLENBQUM7QUFDUCxNQUFNLENBQUMsQ0FBQztBQUNSO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEI7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRTtBQUMxQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0QixPQUFPLE1BQU07QUFDYixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3RCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUM3QixRQUFRLElBQUksR0FBRyxDQUFDLENBQUM7QUFDakI7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDaEMsVUFBVSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDekIsVUFBVSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUMzQixVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLFNBQVM7QUFDVCxRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDcEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxVQUFVLEVBQUUsWUFBWTtBQUMxQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDdEIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2YsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxLQUFLLEtBQUs7QUFDN0M7QUFDQTtBQUNBLElBQU8sSUFBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUN2QixNQUFNLENBQUMsQ0FBQztBQUNSLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNiLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaLE1BQU0sRUFBRSxDQUFDO0FBQ1QsTUFBTSxDQUFDLENBQUMsQ0FDRTtBQUNWO0FBQ0EsSUFBSSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkI7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDaEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVjtBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzQztBQUNBLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDbkI7QUFDQTtBQUNBLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtBQUN4QixRQUFRLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEM7QUFDQSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9CLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3RCO0FBQ0E7QUFDQSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEMsYUFBYSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDMUIsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7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RUFBRTtBQUMxQjtBQUNBLFFBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakg7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN0QixRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLFNBQVM7QUFDVCxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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RSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNySDtBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0ksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMs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RSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtBQUNBO0FBQ0E7QUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtBQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMvRixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FB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QUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0FBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHO0FBQ2xHO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ25CO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDbEIsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcs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RUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ25DO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDakUsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFlBQVksS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUM7QUFDN0UsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDO0FBQ2hGO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7QUFDNUUsTUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDNUUsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ3pELElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU87QUFDL0IsUUFBUSw0RkFBNEY7QUFDcEcsUUFBUSxhQUFhLENBQUM7QUFDdEI7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUc7QUFDekIsTUFBTSxLQUFLO0FBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsaUNBQWlDO0FBQ25FLEtBQUssQ0FBQztBQUNOO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2hDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDakMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNsQixJQUFJLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9DO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztBQUMxQyxNQUFNLElBQUksU0FBUyxFQUFFO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUN0QztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDO0FBQ2pFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztBQUNwRSxPQUFPLE1BQU07QUFDYixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsc0JBQXNCLENBQUM7QUFDdEUsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN0QixNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDbEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3hDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUM3RSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRTtBQUNmLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQ3RDLE1BQU0sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLE9BQU87QUFDUCxNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDekMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksR0FBRztBQUNULElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDckM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUM1RDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN6QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0FBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQ2hDLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUM5QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQzlCLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzFCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRTtBQUNWLE1BQU0sSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJO0FBQzFCLFVBQVUsSUFBSSxDQUFDLE1BQU07QUFDckIsVUFBVSxJQUFJLENBQUMsSUFBSTtBQUNuQixVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztBQUN6QixVQUFVLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QjtBQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQjtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3BCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztBQUM3QyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxHQUFHO0FBQ2xCLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUNwRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFDOUUsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0FBQy9CLElBQUksT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM5QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO0FBQ3BDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDNUMsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNuQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3pCLElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLEdBQUc7QUFDakIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDaEQsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hDLEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRTtBQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25ELEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRTtBQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkQsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRTtBQUNqQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0MsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUNsQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0MsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUU7QUFDZixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFDYjtBQUNBLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDWjtBQUNBO0FBQ0E7QUFDQSxFQUFFLE9BQU8sR0FBRztBQUNaLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxHQUFHO0FBQ1gsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLEdBQUc7QUFDVixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO0FBQzFCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTztBQUNqQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUM5RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU87QUFDMUIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPO0FBQ2pDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO0FBQ2xFLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUNaLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDM0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLEdBQUc7QUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQyxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxHQUFHO0FBQ2Q7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsT0FBTztBQUN6QyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPO0FBQzVCLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU87QUFDNUI7QUFDQSxJQUFJLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNwRSxJQUFJLE9BQU8sVUFBVSxDQUFDO0FBQ3RCLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNkLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQixJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckQ7QUFDQSxTQUFTLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2xCLElBQUksSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQzNCLElBQUksSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRTtBQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDeEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLFVBQVUsQ0FBQztBQUN0QixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNkLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU87QUFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDOUIsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRTtBQUNwQixJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPO0FBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDekIsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN6QixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQ1osSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUMxQixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtBQUNiLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDM0IsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEUsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0FBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtBQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQixHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsUUFBUSxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQjtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDakMsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDdkM7QUFDQTtBQUNBLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuQyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3QyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLEdBQUc7QUFDVixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU87QUFDaEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3ZELEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFO0FBQ25CLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDekI7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUMvQixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2hFLFdBQVcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2hDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3ZELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN0RCxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDakU7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ1Y7QUFDQSxJQUFJLFFBQVEsSUFBSSxDQUFDLFNBQVM7QUFDMUIsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLE1BQU07QUFDZCxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixRQUFRLE1BQU07QUFDZCxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixRQUFRLE1BQU07QUFDZCxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQixRQUFRLE1BQU07QUFDZCxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixRQUFRLE1BQU07QUFDZCxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNwQixRQUFRLE1BQU07QUFDZCxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNyQixRQUFRLE1BQU07QUFDZCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbEQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNyQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ2QsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsSUFBSTtBQUNKLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztBQUMzRSxNQUFNO0FBQ04sR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7QUFDakIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTztBQUMxQixJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNyQixNQUFNLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGdDQUFnQyxDQUFDLENBQUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNYLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNILEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRTtBQUNmLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNILEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRTtBQUNmLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNILEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtBQUNiLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNILEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtBQUNiLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNILEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNYLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3pCLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDMUIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN6QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFO0FBQ3JCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDcEQsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksR0FBRztBQUNULElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU87QUFDNUIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN2QixJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzVCLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUMvQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssR0FBRztBQUNWLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTztBQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDNUIsSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQ2pELEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxHQUFHO0FBQ2IsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUM1QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQ2I7QUFDQSxFQUFFLFFBQVEsR0FBRyxFQUFFO0FBQ2Y7QUFDQSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDbEIsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFO0FBQ25CLElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsQyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNkLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQy9CLEdBQUc7QUFDSDs7QUNybkJPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFLO0FBQ3JDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDdEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBRztBQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFDQUFxQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFFO0FBQ3BLLFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQ3RCLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDckUsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUU7QUFDMU4sU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQUs7QUFDaEMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksR0FBRTtBQUMzQixRQUFRLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7QUFDbEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUM7QUFDOUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsTUFBSztBQUMxQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUMzRDtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztBQUNoQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUM7QUFDMUI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDN0I7QUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBQztBQUN6QjtBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtBQUNsQztBQUNBLGdCQUFnQixRQUFRLENBQUM7QUFDekI7QUFDQSxvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUNyRixvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUMzRixvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTTtBQUMxRixvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtBQUN2RjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSTtBQUNqRTtBQUNBLGFBQWEsTUFBTTtBQUNuQjtBQUNBLGdCQUFnQixRQUFRLENBQUM7QUFDekI7QUFDQSxvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0FBQ2hILG9CQUFvQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU07QUFDL0csb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTTtBQUM5RyxvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNO0FBQ3BIO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFLO0FBQ3BELGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSTtBQUNuRTtBQUNBLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxHQUFHLEtBQUk7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sTUFBTTtBQUNyQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBRztBQUN6QyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDOUIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFJO0FBQ2hDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSTtBQUNoQyxTQUFTLE1BQU07QUFDZixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0FBQ3RDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUk7QUFDeEMsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDM0lPLE1BQU0sTUFBTSxTQUFTLEtBQUssQ0FBQztBQUNsQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLFFBQVEsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFLO0FBQ3hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUc7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtBQUNqRDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDeEI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEVBQUM7QUFDbkMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRTtBQUMvQixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDM0U7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUMzQixRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSTtBQUM3QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU07QUFDckMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUU7QUFDckIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUU7QUFDdEI7QUFDQSxRQUFRLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFlBQVksR0FBRyxHQUFHLE1BQUs7QUFDdkIsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxLQUFJO0FBQy9FO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFFO0FBQ2xNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTTtBQUN0RSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUk7QUFDbkUsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3JELFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFFO0FBQ3BFLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssR0FBRztBQUNaO0FBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDeEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztBQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQ3hCO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDbEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzdCLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFFO0FBQzNGLGlCQUFpQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBQztBQUNuRCxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUNuRCxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDdkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEtBQUs7QUFDdEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7QUFDMUIsS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0FBQy9CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLE1BQUs7QUFDdEIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFFO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDN0IsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQztBQUNsQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQzVELFNBQVMsTUFBTTtBQUNmLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDMUIsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFLO0FBQ3pDO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0FBQ0EsWUFBWSxDQUFDLEdBQUcsRUFBQztBQUNqQixZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFLO0FBQzNFO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUU7QUFDMUIsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUM7QUFDeEMsYUFBYSxNQUFNO0FBQ25CLGdCQUFnQixDQUFDLEdBQUcsRUFBQztBQUNyQixnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUM7QUFDN0IsYUFBYTtBQUNiO0FBQ0E7QUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUU7QUFDakM7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQztBQUNoQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakM7QUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsWUFBWSxRQUFRLENBQUM7QUFDckI7QUFDQSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztBQUNoRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSztBQUNyRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSztBQUNsRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztBQUN0RjtBQUNBLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxNQUFNO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHO0FBQ3hCO0FBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE9BQU07QUFDdEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0FBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNsQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUM7QUFDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDckM7QUFDQSxRQUFRLE9BQU8sSUFBSTtBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUU7QUFDL0I7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDO0FBQ3ZDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDckIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0FBQ2xEO0FBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNwUE8sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQUs7QUFDekMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSTtBQUN0RDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFLO0FBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBQztBQUMxQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEdBQUU7QUFDL0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQUs7QUFDaEMsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFJO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxHQUFFO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFJO0FBQzVDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7QUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDcEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFNO0FBQzFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFNBQVE7QUFDckQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUU7QUFDekIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUU7QUFDeEI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUM7QUFDdEIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUU7QUFDbEk7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUU7QUFDdEM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7QUFDekQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3REO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQzNFLFFBQVEsSUFBSSxDQUFD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Q0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxHQUFHO0FBQ2xDO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNyRDtBQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztBQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QjtBQUNBLFNBQVM7QUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLFFBQVEsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xHO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0FBQ0EsWUFB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QVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7QUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckM7QUFDQSxTQUFTLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMvRCxTQUFTLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2hELFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRTtBQUM3QixTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsU0FBUyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHO0FBQ3hCLE9BQU8sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN2QyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEMsZUFBZSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNuRDtBQUNBLE9BQU8sR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQSxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDeEQsT0FBTyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLE9BQU87QUFDUDtBQUNBLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUNwRDtBQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0UsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtBQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7QUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUN0QztBQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7QUFDdEM7QUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7QUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtBQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxD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QUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7QUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBO0FBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVEO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDcEM7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztBQUM1QyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDckI7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQ3BhTyxNQUFNLEdBQUcsU0FBUyxLQUFLLENBQUM7QUFDL0I7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQztBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENB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QUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQzdLO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtEQUFrRCxFQUFFLENBQUM7QUFDMUo7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsMkVBQTJFLENBQUMsQ0FBQztBQUN0SjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0E7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJ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QUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtBQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzNEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3REO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDakM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxHQUFHLENBQUMsR0FBRztBQUNYO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3hDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDdkI7QUFDQSxRQUFRLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHO0FBQzNDO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDdkY7QUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUI7QUFDQSxZQUFZLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRztBQUM5QjtBQUNBLGdCQUFnQixJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztBQUNqRSxnQkFBZ0IsSUFBSSxhQUFhLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7QUFDdkU7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztBQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDO0FBQ25EO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN2RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQztBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztBQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDakQ7QUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQy9DLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtBQUN6RCxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlEQUF5RCxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1TDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQ7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDdEosUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0gsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEo7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNyQyxZQUFZ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RztBQUNsQjtBQUNBLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFFO0FBQ3JDO0FBQ0E7QUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JDO0FBQ0EsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFDO0FBQzVDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNwQztBQUNBLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUc7QUFDMUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RCO0FBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVB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QUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRTtBQUMvQixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDcEM7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtBQUN2QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDN0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztBQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJ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RztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0FBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0FBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtBQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0FBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxD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RUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQzVGO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1B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QUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcs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Q0EsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHO0FBQzNDO0FBQ0EsWUFBWSxDQUFDLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNoRCxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDaEQsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDOUQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtBQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0FBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6RDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFB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SSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDL0Q7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMvRDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMvQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUN2RCxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUMvRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDdkMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QyxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFDO0FBQzdELFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUM7QUFDcEQsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQztBQUNyRCxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDO0FBQ3pELFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVE7QUFDakQsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7QUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFlBQVksSUFBSSxHQUFH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O0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDMUIsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUMvQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RixRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUU7QUFDaEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNuQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUks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QUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENB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S0FBSyxDQUFDLEVBQUU7QUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDaEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVB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QUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtBQUNBO0FBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtBQUNBO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0FBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDcEQsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxD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SSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDeEQsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDNUQsUUFBUSxNQUFNO0FBQ2QsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtBQUNiLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hGO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxD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LEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxJQUFJO0FBQ2Y7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDNUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQztBQUNyQztBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDO0FBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ2hDLFFBQVEsSUFB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QyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDaEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7QUFDakQ7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDdkM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3BDO0FB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Q0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEtBQUk7QUFDekMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksS0FBSTtBQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFJO0FBQ3RDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDdEtPLE1BQU0sTUFBTSxTQUFTLEtBQUssQ0FBQztBQUNsQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFFO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSTtBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFJO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMs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QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUk7QUFDNUQsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNWTyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUM7QUFDaEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzlCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEdBQUc7QUFDZDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRztBQUNkO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQy9CO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM1QixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVDO0FBQ0EsWUFBWSxRQUFRLENBQUM7QUFDckI7QUFDQSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU07QUFDL0YsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtBQUNwRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0FBQ3hHLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07QUFDcEc7QUFDQSxhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FDcEhPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3RCLFlBQVksSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLEtBQUssRUFBRTtBQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUN0QyxhQUFhLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLE1BQU0sRUFBRTtBQUNuRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQyxhQUFhLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLE1BQU0sRUFBRTtBQUNuRCxnQkFBZ0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsT0FBTTtBQUN6QyxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNwRSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7QUFDakQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUU7QUFDbEQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN4RDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDckY7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUNuQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUN0SjtBQUNBLFFBQVcsSUFBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSTtBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7QUFDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztBQUNBLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdkMsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxzQkFBc0IsQ0FBQztBQUN0RCxZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25EO0FBQ0EsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDckMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLHNCQUFzQixDQUFDO0FBQzFEO0FBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNwQztBQUNBLG9CQUFvQixHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDeEY7QUFDQSxvQkFBb0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDeEQsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMseUNBQXlDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDdFEsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7QUFDckUsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbEUsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQkFBb0IsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4QztBQUNBLG9CQUFvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDeEMsb0JBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQztBQUNyQztBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0Esb0JBQW9CLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxFQUFFLEtBQUssR0FBRTtBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcseUJBQXlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxpRUFBZ0U7QUFDekwsb0JBQW9CLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFFO0FBQ3ZDO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxjQUFjLENBQUM7QUFDNUQscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQztBQUN0RDtBQUNBLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztBQUNwQjtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE9BQU07QUFDakM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkIsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELFNBQVM7QUFDVDtBQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVELFNBQVM7QUFDVDtBQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0FBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFFO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDN0IsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQztBQUNsQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQzVELFNBQVMsTUFBTTtBQUNmLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxL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QyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0FBQ0EsWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckIsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUM3RCxhQUFhLE1BQU07QUFDbkIsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM3RCxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRDtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5RjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztBQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0FBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7QUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtBQUN6RTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7QUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0FBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUMzRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBQztBQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUM5RDtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0FBQ2hELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFFO0FBQ3BFO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7QUFDQTtBQUNBO0FB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TUFBTTtBQUNsRCxZQUFZLEtBQUssS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDOUMsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2xELFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNsRCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDeEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNoRCxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNyRSxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDbEQsWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDekUsWUFBWSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDL0QsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFN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Q0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztBQUM1QztBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNwRTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3ZFO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTTtBQUNmLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdB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QUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0FBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 diff --git a/examples/uil_lumicles.html b/examples/uil_lumicles.html index 2a4fe21..7f543ae 100644 --- a/examples/uil_lumicles.html +++ b/examples/uil_lumicles.html @@ -28,6 +28,7 @@ let ui let params={ + applyJSON:false, currentModel:"cloud03.glb", currentCamera:"drone", speed:0.34, @@ -39,13 +40,16 @@ particleSize:2.5, particleDOFSizeMultiplier:2, particleDOFOpacityDecay:0.3, - gamma:1.1 - + gamma:1.1, + bloom:1.5, + linear:10, + easein:10, + easeout:10, } - window.params=params + window.params=params; - window.params = params; + function initGUI () { // terrain @@ -57,21 +61,20 @@ gCloud.add(params,"currentModel",{type:"list","displayName":"Model",list:["cloud1.glb","cloud2.glb","cloud3.glb"]}) - - gCloud.add("button",{name:"",value:["Prev","Load","Next"],callback:(name)=>{console.log(name)}}) + gCloud.add("button",{name:"",value:["Load Model"],callback:(name)=>{console.log(name)}}) + gCloud.add("button",{name:"",value:["Load Prev Model","Load Next Model"],callback:(name)=>{console.log(name)}}) gCloud.add(params,"totalParticles",{type:"list",displayName:"total particles",list:["250K","500K","1M","2M"]}) gCloud.open(); let gJson=ui.add("group",{name:"JSON Editor",bg:"#666644"}) - gJson.add("button",{name:"",value:["Reset","Export"],callback:(name)=>{console.log(name)}}) - gJson.add("button",{name:"UI initial state",value:["Test"],callback:(name)=>{console.log(name)}}) - gJson.add("button",{name:"Cameras",value:["Test orbital","Test Drone"],callback:(name)=>{console.log(name)}}) + gJson.add(params,"applyJSON",{"displayName":"apply JSON settings",callback:(name)=>{console.log(name)}}) + gJson.add("button",{name:"Load cam initial state",value:["Orbital","Drone"],callback:(name)=>{console.log(name)}}) gJson.open(); let gCam=ui.add("group",{name:"Camera",bg:"#664444"}) gCam.add(params,"currentCamera",{"type":"list",list:["orbital","drone"]}) - gCam.add(params,"fov",{displayName:"FOV",min:0,max:90,step:0.01}) + let o1=gCam.add(params,"fov",{displayName:"FOV",min:0,max:90,step:0.01}) gCam.add(params,"focalDistance",{type:"slide",displayName:"focal distance",min:0,max:9000,step:0.01}) gCam.add(params,"focalRange",{type:"slide",displayName:"focal range",min:0,max:9000,step:0.01}) gCam.open(); @@ -89,7 +92,7 @@ gRender.add(params,"hdrHigh",{type:"slide",displayName:"HDR high",min:0,max:1,step:0.01}) gRender.add(params,"hdrLow",{type:"slide",displayName:"HDR low",min:0,max:1,step:0.01}) gRender.add(params,"brightness",{type:"slide",displayName:"brightness",min:0,max:1,step:0.01}) - gRender.add(params,"bloom",{type:"slide",displayName:"bloom",min:0,max:1,step:0.01}) + gRender.add(params,"bloom",{type:"slide",displayName:"bloom",min:0,max:10,step:0.01}).listen(); gRender.open(); //ui.add("button", { name: "setOrbitalCam", values: ["save", "load"] }); @@ -105,7 +108,15 @@ //ui.add('list', { name: 'includeEvery', list: ['1', '2', '4', '8'], listOnly: false }) //ui.add("slide", { name: "minSize", min: 1, max: 50, step: 1,value:14 }); + // test item removal + gCam.remove(o1) + o1=gCam.add(params,"fov",{displayName:"FOV",min:20,max:30,step:0.1}) + let gTest=ui.add("group",{name:"Test"}) + gTest.open(); + gTest.add(params,"linear",{type:"slide",displayName:"linear",min:0,max:20,easing:1,precision:4}).listen(); + gTest.add(params,"easein",{type:"slide",displayName:"easein",min:0,max:20,easing:5,precision:4}).listen(); + gTest.add(params,"easeout",{type:"slide",displayName:"easeout",min:0,max:20,easing:0.2,precision:4}).listen(); } initGUI(); diff --git a/examples/uil_vr_test.html b/examples/uil_vr_test.html index b5d3ac0..25aa0b4 100644 --- a/examples/uil_vr_test.html +++ b/examples/uil_vr_test.html @@ -31,6 +31,12 @@ import { Water } from './three/extend/Water.js'; + let globalObject={ + param1:0, + muteSwitch:false + } + window.globalObject=globalObject; + let cw = 128*5, ch=148; let screen = null; let screen2 = null; @@ -338,6 +344,10 @@ ui.add('list', { name: 'defaultLOD', list: ['250K', '500K', '1M', '2M'], listOnly: false }) ui.add('list', { name: 'includeEvery', list: ['1', '2', '4', '8'], listOnly: false }) ui.add("slide", { name: "minSize", min: 1, max: 50, step: 1,value:14 }); + ui.add(globalObject, 'param1', { type:'slide', min:0, max:100 } ).listen(); + + let g1 = ui.add('group', { name: 'Mute controls' }); + g1.add(globalObject, 'boolean', { type: 'bool', displayName: "muteSwitch" }).listen(); /* diff --git a/package.json b/package.json index 85b2942..b61637f 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ }, "scripts": { "build": "rollup -c utils/rollup.config.js", + "build-dev": "rollup -c utils/rollup.config.dev.js", "dev": "concurrently --names \"ROLLUP,HTTP\" -c \"bgBlue.bold,bgGreen.bold\" \"rollup -c utils/rollup.config.dev.js -w -m inline\" \"servez -p 8211 --index\"", "start": "concurrently --names \"ROLLUP,HTTP\" -c \"bgBlue.bold,bgGreen.bold\" \"rollup -c utils/rollup.config.js -w -m inline\" \"http-server -c-1 -p 8111 -o index.html\"" }, diff --git a/src/core/Gui.js b/src/core/Gui.js index fb15001..2d3227f 100644 --- a/src/core/Gui.js +++ b/src/core/Gui.js @@ -1,822 +1,787 @@ -import { Roots } from './Roots.js'; -import { Tools } from './Tools.js'; -import { add } from './add.js'; -import { V2 } from './V2.js'; +import { Roots } from "./Roots.js"; +import { Tools } from "./Tools.js"; +import { add } from "./add.js"; +import { V2 } from "./V2.js"; /** * @author lth / https://github.com/lo-th */ export class Gui { + constructor(o = {}) { + this.isGui = true; - constructor( o = {} ) { + this.name = "gui"; - this.isGui = true + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; - this.name = 'gui' + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); - // for 3d - this.canvas = null - this.screen = null - this.plane = o.plane || null - - - - // color - if( o.config ) o.colors = o.config - if ( o.colors ) this.setConfig( o.colors ) - else this.colors = Tools.defineColor( o ) - - //this.cleanning = false - - - // style - this.css = Tools.cloneCss() - - this.isReset = true - this.tmpAdd = null - //this.tmpH = 0 - - this.isCanvas = o.isCanvas || false - this.isCanvasOnly = false - - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners=(o.hasOwnProperty("addDOMEventListeners"))?o.addDOMEventListeners:true; - - this.callback = o.callback === undefined ? null : o.callback - - this.forceHeight = o.maxHeight || 0 - this.lockHeight = o.lockHeight || false - - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false - - this.cn = '' - - // size define - this.size = Tools.size; - if( o.p !== undefined ) this.size.p = o.p; - if( o.w !== undefined ) this.size.w = o.w; - if( o.h !== undefined ) this.size.h = o.h; - if( o.s !== undefined ) this.size.s = o.s; - - this.size.h = this.size.h < 11 ? 11 : this.size.h; - - // local mouse and zone - this.local = new V2().neg(); - this.zone = { x:0, y:0, w:this.size.w, h:0 }; - - // virtual mouse - this.mouse = new V2().neg(); - - this.h = 0; - //this.prevY = -1; - this.sw = 0; - - this.margin = this.colors.sy - this.marginDiv = Tools.isDivid( this.margin ) - - - - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; - - this.autoResize = o.autoResize === undefined ? true : o.autoResize; - - // default position - this.isCenter = o.center || false - this.cssGui = o.css !== undefined ? o.css : (this.isCenter ? '' : 'right:10px;') - - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; - - this.uis = [] - this.current = -1 - this.proto = null - this.isEmpty = true - this.decal = 0 - this.ratio = 1 - this.oy = 0 - - - this.isNewTarget = false; - - let cc = this.colors - - this.content = Tools.dom( 'div', this.css.basic + ' width:0px; height:auto; top:0px; background:'+cc.content+'; ' + this.cssGui ); - - this.innerContent = Tools.dom( 'div', this.css.basic + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild( this.innerContent ); - - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true - let flexible = this.useFlex ? 'display:flex; flex-flow: row wrap;' : '' //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom( 'div', this.css.basic + flexible + 'width:100%; left:0; '); - this.innerContent.appendChild(this.inner); - - // scroll - this.scrollBG = Tools.dom( 'div', this.css.basic + 'right:0; top:0; width:'+ (this.size.s - 1) +'px; height:10px; display:none; background:'+cc.background+';'); - this.content.appendChild( this.scrollBG ); - - this.scroll = Tools.dom( 'div', this.css.basic + 'background:'+cc.button+'; right:2px; top:0; width:'+(this.size.s-4)+'px; height:10px;'); - this.scrollBG.appendChild( this.scroll ); - - // bottom button - this.bottomText = o.bottomText || ['open', 'close']; - - let r = cc.radius; - this.bottom = Tools.dom( 'div', this.css.txt + 'width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:'+r+'px; border-bottom-left-radius:'+r+'px; justify-content:center; height:'+this.bh+'px; line-height:'+(this.bh-5)+'px; color:' + cc.text+';' );// border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild( this.bottom ) - this.bottom.textContent = this.isOpen ? this.bottomText[1] : this.bottomText[0] - this.bottom.style.background = cc.background - - // - - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; - - if( this.parent === null && !this.isCanvas ){ - this.parent = document.body - } - - if( this.parent !== null ) this.parent.appendChild( this.content ); - - if( this.isCanvas && this.parent === null ) this.isCanvasOnly = true; - - if( !this.isCanvasOnly ){ - this.content.style.pointerEvents = 'auto'; - } else { - this.content.style.left = '0px'; - this.content.style.right = 'auto'; - o.transition = 0 - } - - - // height transition - this.transition = o.transition!==undefined? o.transition : Tools.transition - if( this.transition ) setTimeout( this.addTransition.bind( this ), 1000 ); - - - this.setWidth(); - - if( this.isCanvas ) this.makeCanvas(); - - Roots.add( this ); - - } - - triggerMouseDown(x,y){ - Roots.handleEvent({ - type:"pointerdown", - clientX:x, - clientY:y, - delta:0, - key:null, - keyCode:NaN - }) - } - - - triggerMouseMove(){ - Roots.handleEvent({ - type:"pointermove", - clientX:-1, - clientY:-1, - delta:0, - key:null, - keyCode:NaN - }) - } - triggerMouseUp(x,y){ - /* + //this.cleanning = false + + // style + this.css = Tools.cloneCss(); + + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 + + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; + + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; + + this.callback = o.callback === undefined ? null : o.callback; + + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; + + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + + this.cn = ""; + + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; + + this.size.h = this.size.h < 11 ? 11 : this.size.h; + + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + + // virtual mouse + this.mouse = new V2().neg(); + + this.h = 0; + //this.prevY = -1; + this.sw = 0; + + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); + + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; + + this.autoResize = o.autoResize === undefined ? true : o.autoResize; + + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; + + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; + + this.isNewTarget = false; + + let cc = this.colors; + + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); + + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); + + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); + + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); + + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); + + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; + + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } + + if (this.parent !== null) this.parent.appendChild(this.content); + + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } + + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + + this.setWidth(); + + if (this.isCanvas) this.makeCanvas(); + + Roots.add(this); + } + + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseUp(x, y) { + /* clientX,clientY are no used when isCanvas==true */ - Roots.handleEvent({ - type:"pointerup", - clientX:x, - clientY:y, - delta:0, - key:null, - keyCode:NaN - }) - } - - setTop( t, h ) { - - this.content.style.top = t + 'px'; - if( h !== undefined ) this.forceHeight = h; - this.calc(); - - Roots.needReZone = true; - - } - - addTransition(){ - - if( this.transition && !this.isCanvas ){ - this.innerContent.style.transition = 'height '+this.transition+'s ease-out'; - this.content.style.transition = 'height '+this.transition+'s ease-out'; - this.bottom.style.transition = 'top '+this.transition+'s ease-out'; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } - - let i = this.uis.length - while( i-- ) this.uis[i].addTransition() - - } - - // ---------------------- - // CANVAS - // ---------------------- - - onDraw () {} - - makeCanvas () { - - this.canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', "canvas" ); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - - //console.log( this.canvas.width, this.canvas.height ) - - } - - draw ( force ) { - - if( this.canvas === null ) return; - - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas( this, w, h, force ); - - } - - ////// - - getDom () { - - return this.content; - - } - - noMouse () { - - this.mouse.neg(); - - } - - - - setMouse ( uv, flip = true ) { - - if(flip) this.mouse.set( Math.round( uv.x * this.canvas.width ), this.canvas.height - Math.round( uv.y * this.canvas.height ) ); - else this.mouse.set( Math.round( uv.x * this.canvas.width ), Math.round( uv.y * this.canvas.height ) ); - //this.mouse.set( m.x, m.y ); - - //console.log("setMouse "+uv.x+" "+uv.y) - } - - setConfig ( o ) { - - // reset to default text - Tools.setText() - this.colors = Tools.defineColor( o ) - - } - - setColors ( o ) { - - for( let c in o ){ - if( this.colors[c] ) this.colors[c] = o[c]; - } - - } - - setText ( size, color, font, shadow ) { - - Tools.setText( size, color, font, shadow ); + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); + + Roots.needReZone = true; + } + + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } + + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } + + // ---------------------- + // CANVAS + // ---------------------- + + onDraw() {} + + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + + //console.log( this.canvas.width, this.canvas.height ) + } + + draw(force) { + if (this.canvas === null) return; + + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } + + ////// + + getDom() { + return this.content; + } + + noMouse() { + this.mouse.neg(); + } + + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); + + //console.log("setMouse "+uv.x+" "+uv.y) + } + + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } + + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } + + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } + + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } + + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } + + onChange(f) { + this.callback = f || null; + return this; + } - } - - hide ( b ) { - this.content.style.visibility = b ? 'hidden' : 'visible'; - } - - display( v = false ) { - this.content.style.visibility = v ? 'visible' : 'hidden' - } - - onChange ( f ) { - - this.callback = f || null; - return this; - - } - - // ---------------------- - // STYLES - // ---------------------- - - mode ( n ) { - - let needChange = false; - let cc = this.colors; - - if( n !== this.cn ){ - - this.cn = n; - - switch( n ){ - - case 'def': - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background - this.bottom.style.color = cc.text - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case 'scrollOver': - Roots.cursor('ns-resize'); - this.scroll.style.background = cc.select - break; - case 'scrollDown': - this.scroll.style.background = cc.select - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case 'bottomOver': - Roots.cursor('pointer'); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - - } - - needChange = true; - - } - - return needChange; - - } - - // ---------------------- - // TARGET - // ---------------------- + // ---------------------- + // STYLES + // ---------------------- - clearTarget () { + mode(n) { + let needChange = false; + let cc = this.colors; - if( this.current === -1 ) return false; - if( this.proto.s ){ - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } - - this.proto = null; - this.current = -1; + if (n !== this.cn) { + this.cn = n; - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; - + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; - Roots.cursor(); - return true; + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } + needChange = true; } - // ---------------------- - // ZONE TEST - // ---------------------- - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - - this.isReset = false; + return needChange; + } - let name = ''; - - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - - if( l.y > this.zone.h - this.bh && l.y < this.zone.h ) name = 'bottom'; - else name = l.x > s ? 'scroll' : 'content'; - - return name; + // ---------------------- + // TARGET + // ---------------------- + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); } - // ---------------------- - // EVENTS - // ---------------------- - - handleEvent ( e ) { - - //if( this.cleanning ) return - - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; - - let change = false; - let protoChange = false; - - let name = this.testZone( e ); - - if( type === 'mouseup' && this.isDown ) this.isDown = false; - if( type === 'mousedown' && !this.isDown ) this.isDown = true; - - if( this.isDown && this.isNewTarget ){ Roots.clearInput(); this.isNewTarget=false; } + this.proto = null; + this.current = -1; - if( !name ) return; + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - switch( name ){ + Roots.cursor(); + return true; + } - case 'content': + // ---------------------- + // ZONE TEST + // ---------------------- - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; - if( Roots.isMobile && type === 'mousedown' ) this.getNext( e, change ) + this.isReset = false; - if( this.proto ) protoChange = this.proto.handleEvent( e ) + let name = ""; - if( type === 'mousemove' ) change = this.mode('def'); - if( type === 'wheel' && !protoChange && this.isScroll ) change = this.onWheel( e ) - - if( !Roots.lock ) { - this.getNext( e, change ) - } + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - break; - case 'bottom': + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; - this.clearTarget(); - if( type === 'mousemove' ) change = this.mode('bottomOver') - if( type === 'mousedown' ) { - this.isOpen = this.isOpen ? false : true - this.bottom.textContent = this.isOpen ? this.bottomText[1] : this.bottomText[0] - //this.setHeight(); - this.calc() - this.mode('def') - change = true - } + return name; + } - break; - case 'scroll': + // ---------------------- + // EVENTS + // ---------------------- - this.clearTarget(); - if( type === 'mousemove' ) change = this.mode('scrollOver'); - if( type === 'mousedown' ) change = this.mode('scrollDown'); - if( type === 'wheel' ) change = this.onWheel( e ); - if( this.isDown ) this.update( (e.clientY-this.zone.y)-(this.sh*0.5) ); + handleEvent(e) { + //if( this.cleanning ) return - break; + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; + let change = false; + let protoChange = false; - } + let name = this.testZone(e); - if( this.isDown ) change = true; - if( protoChange ) change = true; - - if( type === 'keyup' ) change = true; - if( type === 'keydown' ) change = true; - - if( change ) this.draw(); + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; } - getNext ( e, change ) { + if (!name) return; + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); - let next = Roots.findTarget( this.uis, e ); + if (this.proto) protoChange = this.proto.handleEvent(e); - if( next !== this.current ){ - this.clearTarget(); - this.current = next; - change = true; - this.isNewTarget = true; + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); + if (!Roots.lock) { + this.getNext(e, change); } - if( next !== -1 ){ - this.proto = this.uis[ this.current ]; - this.proto.uiover(); + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; } - } - - onWheel ( e ) { - - this.oy += 20*e.delta; - this.update( this.oy ); - return true; + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + break; } - // ---------------------- - // RESET - // ---------------------- - - reset ( force ) { + if (this.isDown) change = true; + if (protoChange) change = true; - if( this.isReset ) return; + if (type === "keyup") change = true; + if (type === "keydown") change = true; - //this.resetItem(); + if (change) this.draw(); + } - this.mouse.neg(); - this.isDown = false; - - //Roots.clearInput(); - let r = this.mode('def'); - let r2 = this.clearTarget(); - - if( r || r2 ) this.draw( true ); - - this.isReset = true; - - //Roots.lock = false; + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); + if (next !== this.current) { + this.clearTarget(); + this.current = next; + change = true; + this.isNewTarget = true; } - // ---------------------- - // ADD NODE - // ---------------------- - - add () { - - //if(this.cleanning) this.cleanning = false - - let a = arguments - let ontop = false - - if( typeof a[1] === 'object' ){ - - a[1].isUI = true; - a[1].main = this; - - ontop = a[1].ontop ? a[1].ontop : false; - - } else if( typeof a[1] === 'string' ){ - - if( a[2] === undefined ) [].push.call(a, { isUI:true, main:this }); - else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false - } - - } - - let u = add.apply( this, a ) - - if( u === null ) return; - - if( ontop ) this.uis.unshift( u ) - else this.uis.push( u ) - - this.calc() - - this.isEmpty = false - - return u - + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); } + } - // remove one node + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } - remove ( n ) { + // ---------------------- + // RESET + // ---------------------- - if( n.dispose ) n.dispose(); + reset(force) { + if (this.isReset) return; - } - - // call after uis clear - - clearOne ( n ) { - - let id = this.uis.indexOf( n ); - if ( id !== -1 ) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild( this.uis[ id ].c[0] ); - this.uis.splice( id, 1 ); - this.calc() - } - - } - - // clear all gui + //this.resetItem(); - empty() { + this.mouse.neg(); + this.isDown = false; - //this.cleanning = true + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); - //this.close(); + if (r || r2) this.draw(true); - let i = this.uis.length, item + this.isReset = true; - while( i-- ){ - item = this.uis.pop() - this.inner.removeChild( item.c[0] ) - item.dispose() - } + //Roots.lock = false; + } - this.uis = [] - this.isEmpty = true - this.calc() + // ---------------------- + // ADD NODE + // ---------------------- - } + add() { + //if(this.cleanning) this.cleanning = false - clear() { + let a = arguments; + let ontop = false; - this.empty() + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } } - clear2() { + let u = add.apply(this, a); - setTimeout( this.empty.bind(this), 0 ) + if (u === null) return; - } + if (ontop) this.uis.unshift(u); + else this.uis.push(u); - dispose() { + this.calc(); - this.clear(); - if( this.parent !== null ) this.parent.removeChild( this.content ); - Roots.remove( this ); + this.isEmpty = false; - } + return u; + } + // remove one node - // ---------------------- - // ITEMS SPECIAL - // ---------------------- + remove(n) { + if (n.dispose) n.dispose(); + } - resetItem () { - - if( !this.isItemMode ) return; - - let i = this.uis.length; - while(i--) this.uis[i].selected() + // call after uis clear + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); } + } - setItem ( name ) { - - if( !this.isItemMode ) return; + // clear all gui - name = name || '' - this.resetItem() + empty() { + //this.cleanning = true - if( !name ){ - this.update(0) - return - } + //this.close(); - let i = this.uis.length - while(i--){ - if( this.uis[i].value === name ){ - this.uis[i].selected( true ) - if( this.isScroll ) this.update( ( i*(this.uis[i].h+this.margin) )*this.ratio ) - } - } + let i = this.uis.length, + item; + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); } + this.uis = []; + this.isEmpty = true; + this.calc(); + } + clear() { + this.empty(); + } - // ---------------------- - // SCROLL - // ---------------------- - - upScroll ( b ) { - - this.sw = b ? this.size.s : 0 - this.oy = b ? this.oy : 0 - this.scrollBG.style.display = b ? 'block' : 'none' - - if( b ){ - - this.total = this.h; - - this.maxView = this.maxHeight - - this.ratio = this.maxView / this.total - this.sh = this.maxView * this.ratio - - this.range = this.maxView - this.sh - - this.oy = Tools.clamp( this.oy, 0, this.range ) + clear2() { + setTimeout(this.empty.bind(this), 0); + } - this.scrollBG.style.height = this.maxView + 'px' - this.scroll.style.height = this.sh + 'px' + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } - } - - this.setItemWidth( this.zone.w - this.sw ) - this.update( this.oy ) + // ---------------------- + // ITEMS SPECIAL + // ---------------------- - } + resetItem() { + if (!this.isItemMode) return; - update ( y ) { + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } - y = Tools.clamp( y, 0, this.range ); + setItem(name) { + if (!this.isItemMode) return; - this.decal = Math.floor( y / this.ratio ); - this.inner.style.top = - this.decal + 'px'; - this.scroll.style.top = Math.floor( y ) + 'px'; - this.oy = y; + name = name || ""; + this.resetItem(); + if (!name) { + this.update(0); + return; } - // ---------------------- - // RESIZE FUNCTION - // ---------------------- - - calcUis() { - - return Roots.calcUis( this.uis, this.zone, this.zone.y ) + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } } + } - calc() { - - clearTimeout( this.tmp ) - this.tmp = setTimeout( this.setHeight.bind( this ), 10 ) + // ---------------------- + // SCROLL + // ---------------------- - } + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; - setHeight() { + if (b) { + this.total = this.h; - if( this.tmp ) clearTimeout( this.tmp ) + this.maxView = this.maxHeight; - this.zone.h = this.bh - this.isScroll = false + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; - if( this.isOpen ){ + this.range = this.maxView - this.sh; - this.h = this.calcUis() + this.oy = Tools.clamp(this.oy, 0, this.range); - let hhh = this.forceHeight ? this.forceHeight + this.zone.y : window.innerHeight; + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } - this.maxHeight = hhh - this.zone.y - this.bh; + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } - let diff = this.h - this.maxHeight; + update(y) { + y = Tools.clamp(y, 0, this.range); - if( diff > 1 ){ + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; + // ---------------------- + // RESIZE FUNCTION + // ---------------------- - } else { + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } - this.zone.h = this.h + this.bh; - - } + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } - } + setHeight() { + if (this.tmp) clearTimeout(this.tmp); - this.upScroll( this.isScroll ) + this.zone.h = this.bh; + this.isScroll = false; - this.innerContent.style.height = this.zone.h - this.bh + 'px' - this.content.style.height = this.zone.h + 'px' - this.bottom.style.top = this.zone.h - this.bh + 'px' + if (this.isOpen) { + this.h = this.calcUis(); + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; - if( this.forceHeight && this.lockHeight ) this.content.style.height = this.forceHeight + 'px'; - if( this.isCanvas ) this.draw( true ) + this.maxHeight = hhh - this.zone.y - this.bh; - } + let diff = this.h - this.maxHeight; - rezone () { - Roots.needReZone = true; + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } } - setWidth ( w ) { + this.upScroll(this.isScroll); - if( w ) this.zone.w = w + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; - this.zone.w = Math.floor( this.zone.w ) - this.content.style.width = this.zone.w + 'px' - if( this.isCenter ) this.content.style.marginLeft = -(Math.floor(this.zone.w*0.5)) + 'px' - this.setItemWidth( this.zone.w - this.sw ) + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } - } + rezone() { + Roots.needReZone = true; + } - setItemWidth ( w ) { + setWidth(w) { + if (w) this.zone.w = w; - let i = this.uis.length; - while(i--){ - this.uis[i].setSize( w ) - this.uis[i].rSize() - } + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); } - -} \ No newline at end of file + } +} diff --git a/src/core/Proto.js b/src/core/Proto.js index 00f4be2..d378561 100644 --- a/src/core/Proto.js +++ b/src/core/Proto.js @@ -1,693 +1,632 @@ - -import { Roots } from './Roots.js'; -import { Tools } from './Tools.js'; -import { V2 } from './V2.js'; +import { Roots } from "./Roots.js"; +import { Tools } from "./Tools.js"; +import { V2 } from "./V2.js"; /** * @author lth / https://github.com/lo-th */ export class Proto { + constructor(o = {}) { + // disable mouse controle + this.lock = o.lock || false; - constructor( o = {} ) { - - - - // disable mouse controle - this.lock = o.lock || false; - - // for button - this.neverlock = false - - // only simple space - this.isSpace = o.isSpace || false - - - - // if is on gui or group - this.main = o.main || null; - this.isUI = o.isUI || false; - this.group = o.group || null; - - this.isListen = false; - - this.top = 0 - this.ytop = 0 - - this.dx = o.dx || 0 - - this.isSelectable = o.selectable !== undefined ? o.selectable : false - this.unselectable = o.unselect !== undefined ? o.unselect : this.isSelectable - - this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' - - this.css = this.main ? this.main.css : Tools.css - - this.colors = Tools.defineColor( o, this.main ? ( this.group ? this.group.colors : this.main.colors ) : Tools.colors ) - - - this.overEffect = this.colors.showOver - - this.svgs = Tools.svgs - - this.zone = { x:0, y:0, w:0, h:0, d:0 } - this.local = new V2().neg() - - this.isCanvasOnly = false - this.isSelect = false - - // percent of title - this.p = o.p !== undefined ? o.p : Tools.size.p; - - this.w = this.isUI ? this.main.size.w : Tools.size.w; - if( o.w !== undefined ) this.w = o.w; - - this.h = this.isUI ? this.main.size.h : Tools.size.h; - if( o.h !== undefined ) this.h = o.h; - if( !this.isSpace ) this.h = this.h < 11 ? 11 : this.h; - else this.lock = true - - - // decale for canvas only - this.fw = o.fw || 0 - - this.autoWidth = o.auto || true;// auto width or flex - this.isOpen = false;//false// open statu - - // radius for toolbox - this.radius = o.radius || this.colors.radius; - - this.transition = o.transition || Tools.transition - - // only for number - this.isNumber = false; - this.noNeg = o.noNeg || false; - this.allEqual = o.allEqual || false; - - // only most simple - this.mono = false; - - // stop listening for edit slide text - this.isEdit = false; - - // no title - this.simple = o.simple || false; - if( this.simple ) this.sa = 0; - - - // define obj size - this.setSize( this.w ) - - // title size - if( o.sa !== undefined ) this.sa = o.sa - if( o.sb !== undefined ) this.sb = o.sb - if( this.simple ) this.sb = this.w - this.sa - - // last number size for slide - this.sc = o.sc === undefined ? 47 : o.sc - - // for listening object - this.objectLink = null; - this.isSend = false; - this.objectKey = null; - - this.txt = o.name || ''; - this.name = o.rename || this.txt; - this.target = o.target || null; - - // callback - this.callback = o.callback === undefined ? null : o.callback; - this.endCallback = null; - this.openCallback = o.openCallback === undefined ? null : o.openCallback; - this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; - - // if no callback take one from group or gui - if( this.callback === null && this.isUI && this.main.callback !== null ){ - this.callback = this.group ? this.group.callback : this.main.callback; - } - - // elements - this.c = []; - - // style - this.s = []; - - - this.useFlex = this.isUI ? this.main.useFlex : false - let flexible = this.useFlex ? 'display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;' : 'float:left;' - - this.c[0] = Tools.dom( 'div', this.css.basic + flexible + 'position:relative; height:20px;'); - - - this.s[0] = this.c[0].style - - // bottom margin - this.margin = this.colors.sy; - this.mtop = 0 - let marginDiv = Tools.isDivid( this.margin ) - - if( this.isUI && this.margin ){ - this.s[0].boxSizing = 'content-box' - if( marginDiv ){ - this.mtop = this.margin * 0.5 - //this.s[0].borderTop = '${this.mtop}px solid transparent' - //console.log(`${this.mtop}px solid transparent`) - this.s[0].borderTop = this.mtop + 'px solid transparent' - this.s[0].borderBottom = this.mtop + 'px solid transparent' - } else { - this.s[0].borderBottom = this.margin + 'px solid transparent' - } - } - - // with title - if( !this.simple ){ - this.c[1] = Tools.dom( 'div', this.css.txt + this.css.middle ) - this.s[1] = this.c[1].style - this.c[1].textContent = this.name - this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title - } - - if( o.pos ){ - this.s[0].position = 'absolute'; - for(let p in o.pos){ - this.s[0][p] = o.pos[p]; - } - this.mono = true; - } - + // for button + this.neverlock = false; + // only simple space + this.isSpace = o.isSpace || false; + // if is on gui or group + this.main = o.main || null; + this.isUI = o.isUI || false; + this.group = o.group || null; - if( o.css ) this.s[0].cssText = o.css; - + this.isListen = false; - } + this.top = 0; + this.ytop = 0; - // ---------------------- - // make the node - // ---------------------- - - init() { + this.dx = o.dx || 0; - this.ytop = this.top + this.mtop + this.isSelectable = o.selectable !== undefined ? o.selectable : false; + this.unselectable = + o.unselect !== undefined ? o.unselect : this.isSelectable; - this.zone.h = this.h + this.margin - this.zone.w = this.w + this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' - let s = this.s; // style cache - let c = this.c; // div cach + this.css = this.main ? this.main.css : Tools.css; - s[0].height = this.h + 'px'; + this.colors = Tools.defineColor( + o, + this.main + ? this.group + ? this.group.colors + : this.main.colors + : Tools.colors + ); - if( this.isUI ) s[0].background = this.colors.background + this.overEffect = this.colors.showOver; - if(!this.autoWidth && this.useFlex ){ - s[0].flex = '1 0 auto' - s[0].minWidth = this.minw+'px' - s[0].textAlign = 'center' - } else { - if( this.isUI ) s[0].width = '100%' - } + this.svgs = Tools.svgs; - //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; - if( c[1] !== undefined && this.autoWidth ){ - s[1] = c[1].style; - s[1].top = 1 + 'px'; - s[1].height = (this.h-2) + 'px'; - } + this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; + this.local = new V2().neg(); - let frag = Tools.frag; + this.isCanvasOnly = false; + this.isSelect = false; - for( let i = 1, lng = c.length; i !== lng; i++ ){ - if( c[i] !== undefined ) { - frag.appendChild( c[i] ); - s[i] = c[i].style; - } - } + // percent of title + this.p = o.p !== undefined ? o.p : Tools.size.p; - let pp = this.target !== null ? this.target : ( this.isUI ? this.main.inner : document.body ); + this.w = this.isUI ? this.main.size.w : Tools.size.w; + if (o.w !== undefined) this.w = o.w; - if( this.ontop ) pp.insertAdjacentElement( 'afterbegin', c[0] ); - else pp.appendChild( c[0] ); + this.h = this.isUI ? this.main.size.h : Tools.size.h; + if (o.h !== undefined) this.h = o.h; + if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; + else this.lock = true; - c[0].appendChild( frag ); + // decale for canvas only + this.fw = o.fw || 0; - this.rSize() + this.autoWidth = o.auto || true; // auto width or flex + this.isOpen = false; //false// open statu - // ! solo proto - if( !this.isUI ){ + // radius for toolbox + this.radius = o.radius || this.colors.radius; - this.c[0].style.pointerEvents = 'auto' - Roots.add( this ) - - } + this.transition = o.transition || Tools.transition; - } + // only for number + this.isNumber = false; + this.noNeg = o.noNeg || false; + this.allEqual = o.allEqual || false; - addTransition(){ + // only most simple + this.mono = false; - if( this.baseH && this.transition && this.isUI ){ - this.c[0].style.transition = 'height '+this.transition+'s ease-out'; - } - - } + // stop listening for edit slide text + this.isEdit = false; - // from Tools + // no title + this.simple = o.simple || false; + if (this.simple) this.sa = 0; - dom( type, css, obj, dom, id ) { + // define obj size + this.setSize(this.w); - return Tools.dom( type, css, obj, dom, id ); + // title size + if (o.sa !== undefined) this.sa = o.sa; + if (o.sb !== undefined) this.sb = o.sb; + if (this.simple) this.sb = this.w - this.sa; - } + // last number size for slide + this.sc = o.sc === undefined ? 47 : o.sc; - setSvg( dom, type, value, id, id2 ) { - - Tools.setSvg( dom, type, value, id, id2 ); - - } + // for listening object + this.objectLink = null; + this.isSend = false; + this.objectKey = null; - setCss( dom, css ) { + this.txt = o.name || ""; + this.name = o.rename || this.txt; + this.target = o.target || null; - Tools.setCss( dom, css ); + // callback + this.callback = o.callback === undefined ? null : o.callback; + this.endCallback = null; + this.openCallback = o.openCallback === undefined ? null : o.openCallback; + this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; + // if no callback take one from group or gui + if (this.callback === null && this.isUI && this.main.callback !== null) { + this.callback = this.group ? this.group.callback : this.main.callback; } - clamp( value, min, max ) { + // elements + this.c = []; - return Tools.clamp( value, min, max ); + // style + this.s = []; - } - - getColorRing() { - - if( !Tools.colorRing ) Tools.makeColorRing(); - return Tools.clone( Tools.colorRing ); + this.useFlex = this.isUI ? this.main.useFlex : false; + let flexible = this.useFlex + ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" + : "float:left;"; - } + this.c[0] = Tools.dom( + "div", + this.css.basic + flexible + "position:relative; height:20px;" + ); - getJoystick( model ) { + this.s[0] = this.c[0].style; - if( !Tools[ 'joystick_'+ model ] ) Tools.makeJoystick( model ) - return Tools.clone( Tools[ 'joystick_'+ model ] ) + // bottom margin + this.margin = this.colors.sy; + this.mtop = 0; + let marginDiv = Tools.isDivid(this.margin); + if (this.isUI && this.margin) { + this.s[0].boxSizing = "content-box"; + if (marginDiv) { + this.mtop = this.margin * 0.5; + //this.s[0].borderTop = '${this.mtop}px solid transparent' + //console.log(`${this.mtop}px solid transparent`) + this.s[0].borderTop = this.mtop + "px solid transparent"; + this.s[0].borderBottom = this.mtop + "px solid transparent"; + } else { + this.s[0].borderBottom = this.margin + "px solid transparent"; + } } - getCircular( model ) { - - if( !Tools.circular ) Tools.makeCircular( model ) - return Tools.clone( Tools.circular ) - - } - - getKnob( model ) { - - if( !Tools.knob ) Tools.makeKnob( model ) - return Tools.clone( Tools.knob ) - - } - - getPad2d( model ) { - - if( !Tools.pad2d ) Tools.makePad( model ) - return Tools.clone( Tools.pad2d ) - - } - - // from Roots - - cursor( name ) { - - Roots.cursor( name ); - + // with title + if (!this.simple) { + this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); + this.s[1] = this.c[1].style; + this.c[1].textContent = this.name; + this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; } - - - ///////// - - update() {} - - reset() {} - - ///////// - - content() { - - return this.c[0] - + if (o.pos) { + this.s[0].position = "absolute"; + for (let p in o.pos) { + this.s[0][p] = o.pos[p]; + } + this.mono = true; } - getDom() { - - return this.c[0] + if (o.css) this.s[0].cssText = o.css; + } - } + // ---------------------- + // make the node + // ---------------------- - uiout() { + init() { + this.ytop = this.top + this.mtop; - if( this.lock ) return; - if(!this.overEffect) return; - if(this.s) this.s[0].background = this.colors.background; + this.zone.h = this.h + this.margin; + this.zone.w = this.w; - } + let s = this.s; // style cache + let c = this.c; // div cach - uiover() { + s[0].height = this.h + "px"; - if( this.lock ) return; - if(!this.overEffect) return; - if(this.s) this.s[0].background = this.colors.backgroundOver; + if (this.isUI) s[0].background = this.colors.background; + if (!this.autoWidth && this.useFlex) { + s[0].flex = "1 0 auto"; + s[0].minWidth = this.minw + "px"; + s[0].textAlign = "center"; + } else { + if (this.isUI) s[0].width = "100%"; } - rename( s ) { - - if( this.c[1] !== undefined) this.c[1].textContent = s; - + //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; + if (c[1] !== undefined && this.autoWidth) { + s[1] = c[1].style; + s[1].top = 1 + "px"; + s[1].height = this.h - 2 + "px"; } - listen() { - - this.isListen = Roots.addListen( this ); - return this; + let frag = Tools.frag; + for (let i = 1, lng = c.length; i !== lng; i++) { + if (c[i] !== undefined) { + frag.appendChild(c[i]); + s[i] = c[i].style; + } } - listening() { - - if( this.objectLink === null ) return; - if( this.isSend ) return; - if( this.isEdit ) return; - - this.setValue( this.objectLink[ this.objectKey ] ); + let pp = + this.target !== null + ? this.target + : this.isUI + ? this.main.inner + : document.body; - } + if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); + else pp.appendChild(c[0]); - setValue( v ) { + c[0].appendChild(frag); - if( this.isNumber ) this.value = this.numValue( v ); - //else if( v instanceof Array && v.length === 1 ) v = v[0]; - else this.value = v; - this.update(); + this.rSize(); + // ! solo proto + if (!this.isUI) { + this.c[0].style.pointerEvents = "auto"; + Roots.add(this); } + } - // ---------------------- - // update every change - // ---------------------- - - onChange( f ) { - - if( this.isSpace ) return - this.callback = f || null - return this - + addTransition() { + if (this.baseH && this.transition && this.isUI) { + this.c[0].style.transition = "height " + this.transition + "s ease-out"; } + } - // ---------------------- - // update only on end - // ---------------------- - - onFinishChange( f ) { - - if( this.isSpace ) return; - this.callback = null - this.endCallback = f - return this + // from Tools - } + dom(type, css, obj, dom, id) { + return Tools.dom(type, css, obj, dom, id); + } - // ---------------------- - // event on open close - // ---------------------- + setSvg(dom, type, value, id, id2) { + Tools.setSvg(dom, type, value, id, id2); + } - onOpen( f ) { + setCss(dom, css) { + Tools.setCss(dom, css); + } - this.openCallback = f - return this + clamp(value, min, max) { + return Tools.clamp(value, min, max); + } - } + getColorRing() { + if (!Tools.colorRing) Tools.makeColorRing(); + return Tools.clone(Tools.colorRing); + } - onClose( f ) { + getJoystick(model) { + if (!Tools["joystick_" + model]) Tools.makeJoystick(model); + return Tools.clone(Tools["joystick_" + model]); + } - this.closeCallback = f - return this + getCircular(model) { + if (!Tools.circular) Tools.makeCircular(model); + return Tools.clone(Tools.circular); + } - } + getKnob(model) { + if (!Tools.knob) Tools.makeKnob(model); + return Tools.clone(Tools.knob); + } - // ---------------------- - // send back value - // ---------------------- + getPad2d(model) { + if (!Tools.pad2d) Tools.makePad(model); + return Tools.clone(Tools.pad2d); + } - send( v ) { + // from Roots - v = v || this.value; - if( v instanceof Array && v.length === 1 ) v = v[0]; + cursor(name) { + Roots.cursor(name); + } - this.isSend = true - if( this.objectLink !== null ) this.objectLink[ this.objectKey ] = v - if( this.callback ) this.callback( v, this.objectKey ) - this.isSend = false + ///////// + + update() {} - } - - sendEnd( v ) { - - v = v || this.value; - if( v instanceof Array && v.length === 1 ) v = v[0]; - - if( this.endCallback ) this.endCallback( v ); - if( this.objectLink !== null ) this.objectLink[ this.objectKey ] = v; - - } - - // ---------------------- - // clear node - // ---------------------- - - dispose(){ - - if( this.isListen ) Roots.removeListen( this ); - - Tools.clear( this.c[0] ); - - if( this.target !== null ){ - - if( this.group !== null ) this.group.clearOne( this ); - else this.target.removeChild( this.c[0] ); - - } else { - - if( this.isUI ) this.main.clearOne( this ); - else document.body.removeChild( this.c[0] ); - - } - - if( !this.isUI ) Roots.remove( this ); - - this.c = null; - this.s = null; - this.callback = null; - this.target = null; - this.isListen = false; - - } - - clear() { - - } - - // ---------------------- - // change size - // ---------------------- - - getWidth() { - - let nw = Roots.getWidth( this ) - if(nw) this.w = nw - - } - - setSize( sx ) { - - if( !this.autoWidth ) return; - - this.w = sx; - - if( this.simple ){ - this.sb = this.w - this.sa - } else { - let pp = this.w * ( this.p / 100 ) - //this.sa = Math.floor( pp + 10 ) - //this.sb = Math.floor( this.w - pp - 20 ) - this.sa = Math.floor( pp + 8 ) - this.sb = Math.floor( this.w - pp - 16 ) - } - - } - - rSize() { - - if( !this.autoWidth ) return - if( !this.isUI ) this.s[0].width = this.w + 'px' - if( !this.simple ) this.s[1].width = this.sa + 'px' - - } - - // ---------------------- - // for numeric value - // ---------------------- - - setTypeNumber( o ) { - - this.isNumber = true; - - this.value = 0; - if( o.value !== undefined ){ - if( typeof o.value === 'string' ) this.value = o.value * 1; - else this.value = o.value; - } - - this.min = o.min === undefined ? -Infinity : o.min; - this.max = o.max === undefined ? Infinity : o.max; - this.precision = o.precision === undefined ? 2 : o.precision; - - let s; - - switch(this.precision){ - case 0: s = 1; break; - case 1: s = 0.1; break; - case 2: s = 0.01; break; - case 3: s = 0.001; break; - case 4: s = 0.0001; break; - case 5: s = 0.00001; break; - case 6: s = 0.000001; break; - } - - this.step = o.step === undefined ? s : o.step; - this.range = this.max - this.min; - this.value = this.numValue( this.value ); - - } - - numValue( n ) { - - if( this.noNeg ) n = Math.abs( n ) - return Math.min( this.max, Math.max( this.min, n ) ).toFixed( this.precision ) * 1 - - } - - - // ---------------------- - // EVENTS DEFAULT - // ---------------------- - - handleEvent( e ) { - - if( this.lock ) return - if( this.neverlock ) Roots.lock = false - if( !this[e.type] ) return console.error(e.type, 'this type of event no existe !') - - - // TODO !!!! - - //if( this.marginDiv ) z.d -= this.margin * 0.5 - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 - - return this[e.type](e) - - } - - wheel( e ) { return false; } - mousedown( e ) { return false; } - mousemove( e ) { return false; } - mouseup( e ) { return false; } - keydown( e ) { return false; } - keyup( e ) { return false; } - - - // ---------------------- - // object referency - // ---------------------- - - setReferency( obj, key ) { - - this.objectLink = obj - this.objectKey = key - - } - - display( v = false ) { - this.s[0].visibility = v ? 'visible' : 'hidden' - } - - // ---------------------- - // resize height - // ---------------------- - - open () { - - if( this.isOpen ) return - this.isOpen = true - Roots.needResize = true - if( this.openCallback ) this.openCallback() - - } - - close () { - - if( !this.isOpen ) return - this.isOpen = false - Roots.needResize = true - if( this.closeCallback ) this.closeCallback() - - } - - needZone() { - - Roots.needReZone = true - - } - - rezone() { - - Roots.needReZone = true - - } - - // ---------------------- - // INPUT - // ---------------------- - - select() { - - } - - unselect() { - - } - - setInput( Input ) { - - Roots.setInput( Input, this ); - - } - - upInput( x, down ) { - - return Roots.upInput( x, down ); - - } - - // ---------------------- - // special item - // ---------------------- - - selected( b ){ - - this.isSelect = b || false - - } + reset() {} -} \ No newline at end of file + ///////// + + content() { + return this.c[0]; + } + + getDom() { + return this.c[0]; + } + + uiout() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.background; + } + + uiover() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.backgroundOver; + } + + rename(s) { + if (this.c[1] !== undefined) this.c[1].textContent = s; + } + + listen() { + this.isListen = Roots.addListen(this); + return this; + } + + listening() { + // modified by Fedemarino + if (this.objectLink === null) return; + if (this.isSend) return; + if (this.isEdit) return; + // check if value has changed + let hasChanged = this.setValue(this.objectLink[this.objectKey]); + return hasChanged; + } + + setValue(v) { + const old = this.value; + if (this.isNumber) this.value = this.numValue(v); + //else if( v instanceof Array && v.length === 1 ) v = v[0]; + else this.value = v; + this.update(); + let hasChanged = false; + if (old !== this.value) { + hasChanged = true; + } + + return hasChanged; + } + + // ---------------------- + // update every change + // ---------------------- + + onChange(f) { + if (this.isSpace) return; + this.callback = f || null; + return this; + } + + // ---------------------- + // update only on end + // ---------------------- + + onFinishChange(f) { + if (this.isSpace) return; + this.callback = null; + this.endCallback = f; + return this; + } + + // ---------------------- + // event on open close + // ---------------------- + + onOpen(f) { + this.openCallback = f; + return this; + } + + onClose(f) { + this.closeCallback = f; + return this; + } + + // ---------------------- + // send back value + // ---------------------- + + send(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + this.isSend = true; + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + if (this.callback) this.callback(v, this.objectKey); + this.isSend = false; + } + + sendEnd(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + if (this.endCallback) this.endCallback(v); + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + } + + // ---------------------- + // clear node + // ---------------------- + + dispose() { + if (this.isListen) Roots.removeListen(this); + + Tools.clear(this.c[0]); + + if (this.target !== null) { + if (this.group !== null) this.group.clearOne(this); + else this.target.removeChild(this.c[0]); + } else { + if (this.isUI) this.main.clearOne(this); + else document.body.removeChild(this.c[0]); + } + + if (!this.isUI) Roots.remove(this); + + this.c = null; + this.s = null; + this.callback = null; + this.target = null; + this.isListen = false; + } + + clear() {} + + // ---------------------- + // change size + // ---------------------- + + getWidth() { + let nw = Roots.getWidth(this); + if (nw) this.w = nw; + } + + setSize(sx) { + if (!this.autoWidth) return; + + this.w = sx; + + if (this.simple) { + this.sb = this.w - this.sa; + } else { + let pp = this.w * (this.p / 100); + //this.sa = Math.floor( pp + 10 ) + //this.sb = Math.floor( this.w - pp - 20 ) + this.sa = Math.floor(pp + 8); + this.sb = Math.floor(this.w - pp - 16); + } + } + + rSize() { + if (!this.autoWidth) return; + if (!this.isUI) this.s[0].width = this.w + "px"; + if (!this.simple) this.s[1].width = this.sa + "px"; + } + + // ---------------------- + // for numeric value + // ---------------------- + + setTypeNumber(o) { + this.isNumber = true; + + this.value = 0; + if (o.value !== undefined) { + if (typeof o.value === "string") this.value = o.value * 1; + else this.value = o.value; + } + + this.min = o.min === undefined ? -Infinity : o.min; + this.max = o.max === undefined ? Infinity : o.max; + this.precision = o.precision === undefined ? 2 : o.precision; + + let s; + + switch (this.precision) { + case 0: + s = 1; + break; + case 1: + s = 0.1; + break; + case 2: + s = 0.01; + break; + case 3: + s = 0.001; + break; + case 4: + s = 0.0001; + break; + case 5: + s = 0.00001; + break; + case 6: + s = 0.000001; + break; + } + + this.step = o.step === undefined ? s : o.step; + this.range = this.max - this.min; + this.value = this.numValue(this.value); + } + + numValue(n) { + if (this.noNeg) n = Math.abs(n); + return ( + Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 + ); + } + + // ---------------------- + // EVENTS DEFAULT + // ---------------------- + + handleEvent(e) { + if (this.lock) return; + if (this.neverlock) Roots.lock = false; + if (!this[e.type]) + return console.error(e.type, "this type of event no existe !"); + + // TODO !!!! + + //if( this.marginDiv ) z.d -= this.margin * 0.5 + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 + + return this[e.type](e); + } + + wheel(e) { + return false; + } + mousedown(e) { + return false; + } + mousemove(e) { + return false; + } + mouseup(e) { + return false; + } + keydown(e) { + return false; + } + keyup(e) { + return false; + } + + // ---------------------- + // object referency + // ---------------------- + + setReferency(obj, key) { + this.objectLink = obj; + this.objectKey = key; + } + + display(v = false) { + this.s[0].visibility = v ? "visible" : "hidden"; + } + + // ---------------------- + // resize height + // ---------------------- + + open() { + if (this.isOpen) return; + this.isOpen = true; + Roots.needResize = true; + if (this.openCallback) this.openCallback(); + } + + close() { + if (!this.isOpen) return; + this.isOpen = false; + Roots.needResize = true; + if (this.closeCallback) this.closeCallback(); + } + + needZone() { + Roots.needReZone = true; + } + + rezone() { + Roots.needReZone = true; + } + + // ---------------------- + // INPUT + // ---------------------- + + select() {} + + unselect() {} + + setInput(Input) { + Roots.setInput(Input, this); + } + + upInput(x, down) { + return Roots.upInput(x, down); + } + + // ---------------------- + // special item + // ---------------------- + + selected(b) { + this.isSelect = b || false; + } +} diff --git a/src/core/Roots.js b/src/core/Roots.js index eb442cb..c6a238d 100644 --- a/src/core/Roots.js +++ b/src/core/Roots.js @@ -1,894 +1,832 @@ - /** * @author lth / https://github.com/lo-th */ -export const REVISION = '4.3.0'; +export const REVISION = "4.3.0"; // INTENAL FUNCTION const R = { + ui: [], + + dom: null, + + ID: null, + lock: false, + wlock: false, + current: -1, + + needReZone: true, + needResize: false, + forceZone: false, + isEventsInit: false, + isLeave: false, + addDOMEventListeners: true, + + downTime: 0, + prevTime: 0, + + //prevDefault: ['contextmenu', 'wheel'], + prevDefault: ["contextmenu"], + pointerEvent: ["pointerdown", "pointermove", "pointerup"], + eventOut: ["pointercancel", "pointerout", "pointerleave"], + + xmlserializer: null, + tmpTime: null, + tmpImage: null, + + oldCursor: "auto", + + input: null, + parent: null, + firstImput: true, + + hiddenImput: null, + hiddenSizer: null, + hasFocus: false, + startInput: false, + inputRange: [0, 0], + cursorId: 0, + str: "", + pos: 0, + startX: -1, + moveX: -1, + + debugInput: false, + + isLoop: false, + listens: [], + + e: { + type: null, + clientX: 0, + clientY: 0, + keyCode: NaN, + key: null, + delta: 0, + }, + + isMobile: false, + + now: null, + needsUpdate: false, + + getTime: function () { + return self.performance && self.performance.now + ? self.performance.now.bind(performance) + : Date.now; + }, + + add: function (o) { + // R.ui[0] is de GUI object that is added first by the constructor + R.ui.push(o); + R.getZone(o); + + if (!R.isEventsInit) R.initEvents(); + }, + + testMobile: function () { + let n = navigator.userAgent; + if ( + n.match(/Android/i) || + n.match(/webOS/i) || + n.match(/iPhone/i) || + n.match(/iPad/i) || + n.match(/iPod/i) || + n.match(/BlackBerry/i) || + n.match(/Windows Phone/i) + ) + return true; + else return false; + }, + + remove: function (o) { + let i = R.ui.indexOf(o); + + if (i !== -1) { + R.removeListen(o); + R.ui.splice(i, 1); + } + + if (R.ui.length === 0) { + R.removeEvents(); + } + }, + + // ---------------------- + // EVENTS + // ---------------------- + + initEvents: function () { + if (R.isEventsInit) return; + + let dom = document.body; + + R.isMobile = R.testMobile(); + R.now = R.getTime(); + + if (!R.isMobile) { + dom.addEventListener("wheel", R, { passive: false }); + } else { + dom.style.touchAction = "none"; + } + + console.log("R.addDOMEventListeners " + R.addDOMEventListeners); + if (R.addDOMEventListeners) { + dom.addEventListener("pointercancel", R); + dom.addEventListener("pointerleave", R); + //dom.addEventListener( 'pointerout', R ) + + dom.addEventListener("pointermove", R); + dom.addEventListener("pointerdown", R); + dom.addEventListener("pointerup", R); + + dom.addEventListener("keydown", R, false); + dom.addEventListener("keyup", R, false); + } + window.addEventListener("resize", R.resize, false); + + //window.onblur = R.out; + //window.onfocus = R.in; + + R.isEventsInit = true; + R.dom = dom; + }, + + removeEvents: function () { + if (!R.isEventsInit) return; + + let dom = document.body; + + if (!R.isMobile) { + dom.removeEventListener("wheel", R); + } + + if (R.addDOMEventListeners) { + dom.removeEventListener("pointercancel", R); + dom.removeEventListener("pointerleave", R); + //dom.removeEventListener( 'pointerout', R ); + + dom.removeEventListener("pointermove", R); + dom.removeEventListener("pointerdown", R); + dom.removeEventListener("pointerup", R); + + dom.removeEventListener("keydown", R); + dom.removeEventListener("keyup", R); + } + window.removeEventListener("resize", R.resize); + + R.isEventsInit = false; + }, + + resize: function () { + let i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); + } + + R.needReZone = true; + R.needResize = false; + }, - ui: [], - - dom:null, - - ID: null, - lock:false, - wlock:false, - current:-1, - - needReZone: true, - needResize:false, - forceZone:false, - isEventsInit: false, - isLeave:false, - addDOMEventListeners:true, - - downTime:0, - prevTime:0, - - //prevDefault: ['contextmenu', 'wheel'], - prevDefault: ['contextmenu'], - pointerEvent: ['pointerdown', 'pointermove', 'pointerup'], - eventOut: ['pointercancel', 'pointerout', 'pointerleave'], - - xmlserializer: null, - tmpTime: null, - tmpImage: null, - - oldCursor:'auto', - - input: null, - parent: null, - firstImput: true, - - hiddenImput:null, - hiddenSizer:null, - hasFocus:false, - startInput:false, - inputRange : [0,0], - cursorId : 0, - str:'', - pos:0, - startX:-1, - moveX:-1, - - debugInput:false, - - isLoop: false, - listens: [], - - e:{ - type:null, - clientX:0, - clientY:0, - keyCode:NaN, - key:null, - delta:0, - }, - - isMobile: false, - - now: null, + out: function () { + console.log("im am out"); + R.clearOldID(); + }, - getTime: function() { - return ( self.performance && self.performance.now ) ? self.performance.now.bind( performance ) : Date.now; - }, + in: function () { + console.log("im am in"); + // R.clearOldID(); + }, - add: function ( o ) { + // ---------------------- + // HANDLE EVENTS + // ---------------------- - R.ui.push( o ); - R.getZone( o ); + fakeUp: function () { + this.handleEvent({ type: "pointerup" }); + }, - if( !R.isEventsInit ) R.initEvents(); + handleEvent: function (event) { + //console.log("Roots.handleEvent "+event.type) + //if(!event.type) return; - }, + if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); - testMobile: function () { + if (R.needResize) R.resize(); - let n = navigator.userAgent; - if (n.match(/Android/i) || n.match(/webOS/i) || n.match(/iPhone/i) || n.match(/iPad/i) || n.match(/iPod/i) || n.match(/BlackBerry/i) || n.match(/Windows Phone/i)) return true; - else return false; + R.findZone(R.forceZone); - }, + let e = R.e; + let leave = false; - remove: function ( o ) { + if (event.type === "keydown") R.keydown(event); + if (event.type === "keyup") R.keyup(event); - let i = R.ui.indexOf( o ); - - if ( i !== -1 ) { - R.removeListen( o ); - R.ui.splice( i, 1 ); - } - - if( R.ui.length === 0 ){ - R.removeEvents(); - } - - }, - - // ---------------------- - // EVENTS - // ---------------------- - - initEvents: function () { - - if( R.isEventsInit ) return; + if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; + else e.delta = 0; - let dom = document.body; + let ptype = event.pointerType; // mouse, pen, touch - R.isMobile = R.testMobile() - R.now = R.getTime() + e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; + e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; + e.type = event.type; - if(!R.isMobile){ - dom.addEventListener( 'wheel', R, { passive: false } ) - } else { - dom.style.touchAction = 'none' - } + if (R.eventOut.indexOf(event.type) !== -1) { + leave = true; + e.type = "mouseup"; + } - - console.log("R.addDOMEventListeners "+R.addDOMEventListeners) - if (R.addDOMEventListeners){ - dom.addEventListener( 'pointercancel', R ) - dom.addEventListener( 'pointerleave', R ) - //dom.addEventListener( 'pointerout', R ) + if (event.type === "pointerleave") R.isLeave = true; - dom.addEventListener( 'pointermove', R ) - dom.addEventListener( 'pointerdown', R ) - dom.addEventListener( 'pointerup', R ) - - - dom.addEventListener( 'keydown', R, false ) - dom.addEventListener( 'keyup', R, false ) - } - window.addEventListener( 'resize', R.resize , false ) + if (event.type === "pointerdown") e.type = "mousedown"; + if (event.type === "pointerup") e.type = "mouseup"; + if (event.type === "pointermove") { + if (R.isLeave) { + // if user resize outside this document + R.isLeave = false; + R.resize(); + } + e.type = "mousemove"; + } - //window.onblur = R.out; - //window.onfocus = R.in; + // double click test + if (e.type === "mousedown") { + R.downTime = R.now(); + let time = R.downTime - R.prevTime; + // double click on imput + if (time < 200) { + R.selectAll(); + return false; + } - R.isEventsInit = true; - R.dom = dom + R.prevTime = R.downTime; + R.forceZone = false; + } - }, + // for imput + if (e.type === "mousedown") R.clearInput(); - removeEvents: function () { + // mouse lock + if (e.type === "mousedown") R.lock = true; + if (e.type === "mouseup") R.lock = false; - if( !R.isEventsInit ) return; - - let dom = document.body; - - if(!R.isMobile){ - dom.removeEventListener( 'wheel', R ) - } - - if (R.addDOMEventListeners){ - dom.removeEventListener( 'pointercancel', R ); - dom.removeEventListener( 'pointerleave', R ); - //dom.removeEventListener( 'pointerout', R ); - - dom.removeEventListener( 'pointermove', R ); - dom.removeEventListener( 'pointerdown', R ); - dom.removeEventListener( 'pointerup', R ); - - - dom.removeEventListener( 'keydown', R ); - dom.removeEventListener( 'keyup', R ); - } - window.removeEventListener( 'resize', R.resize ); + //if( R.current !== null && R.current.neverlock ) R.lock = false; - R.isEventsInit = false; - - }, - - resize: function () { - - let i = R.ui.length, u; - - while( i-- ){ - - u = R.ui[i] - if( u.isGui && !u.isCanvasOnly && u.autoResize ) u.calc() - - } - - R.needReZone = true - R.needResize = false - - }, - - out: function () { - - console.log('im am out') - R.clearOldID(); - - }, - - in: function () { - - console.log('im am in') - // R.clearOldID(); - - }, - - // ---------------------- - // HANDLE EVENTS - // ---------------------- - - fakeUp: function(){ - - this.handleEvent( {type:'pointerup'} ) - - }, - - - handleEvent: function ( event ) { - - //console.log("Roots.handleEvent "+event.type) - //if(!event.type) return; - - if( R.prevDefault.indexOf( event.type ) !== -1 ) event.preventDefault(); - - if( R.needResize ) R.resize() - - R.findZone(R.forceZone) - - let e = R.e - let leave = false - - if( event.type === 'keydown') R.keydown( event ); - if( event.type === 'keyup') R.keyup( event ); - - if( event.type === 'wheel' ) e.delta = event.deltaY > 0 ? 1 : -1; - else e.delta = 0; - - let ptype = event.pointerType // mouse, pen, touch - - e.clientX = ( ptype === 'touch' ? event.pageX : event.clientX ) || 0 - e.clientY = ( ptype === 'touch' ? event.pageY : event.clientY ) || 0 - - e.type = event.type - - if( R.eventOut.indexOf( event.type ) !== -1 ){ - leave = true - e.type = 'mouseup' - } - - if( event.type === 'pointerleave') R.isLeave = true - - if( event.type === 'pointerdown') e.type = 'mousedown' - if( event.type === 'pointerup') e.type = 'mouseup' - if( event.type === 'pointermove'){ - if( R.isLeave ){ - // if user resize outside this document - R.isLeave = false - R.resize() - } - e.type = 'mousemove'; - } - - // double click test - if( e.type === 'mousedown' ) { - R.downTime = R.now() - let time = R.downTime - R.prevTime - - // double click on imput - if( time < 200 ) { R.selectAll(); return false } - - R.prevTime = R.downTime - R.forceZone = false - } - - // for imput - if( e.type === 'mousedown' ) R.clearInput() - - // mouse lock - if( e.type === 'mousedown' ) R.lock = true; - if( e.type === 'mouseup' ) R.lock = false; - - //if( R.current !== null && R.current.neverlock ) R.lock = false; - - /*if( e.type === 'mousedown' && event.button === 1){ + /*if( e.type === 'mousedown' && event.button === 1){ R.cursor() e.preventDefault(); e.stopPropagation(); }*/ - //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) - - if( R.isMobile && e.type === 'mousedown' ) R.findID( e ); - if( e.type === 'mousemove' && !R.lock ) R.findID( e ); - - if( R.ID !== null ){ - - - if( R.ID.isCanvasOnly ) { - - e.clientX = R.ID.mouse.x; - e.clientY = R.ID.mouse.y; - - } - - //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 - - R.ID.handleEvent( e ); - - } - - if( R.isMobile && e.type === 'mouseup' ) R.clearOldID(); - if( leave ) R.clearOldID(); - - - }, - - // ---------------------- - // ID - // ---------------------- - - findID: function ( e ) { - - let i = R.ui.length, next = -1, u, x, y; - - while( i-- ){ - - u = R.ui[i] - - if( u.isCanvasOnly ) { - - x = u.mouse.x; - y = u.mouse.y; - - } else { - - x = e.clientX; - y = e.clientY; - - } - - if( R.onZone( u, x, y ) ){ - - next = i; - - if( next !== R.current ){ - R.clearOldID(); - R.current = next; - R.ID = u; - } - break; - } - - } - - if( next === -1 ) R.clearOldID(); - - }, - - clearOldID: function () { - - if( !R.ID ) return; - R.current = -1; - R.ID.reset(); - R.ID = null; - R.cursor(); - - }, - - // ---------------------- - // GUI / GROUP FUNCTION - // ---------------------- - - calcUis: ( uis, zone, py, group = false ) => { - - //console.log('calc_uis') - - let i = uis.length, u, px = 0, n = 0, tw, m, div; - - let height = 0 - - while( i-- ){ - - u = uis[n] - n++ - - if( !group && u.isGroup ) u.calcUis() - - m = u.margin - //div = u.marginDiv - - u.zone.w = u.w - u.zone.h = u.h + m - - if( !u.autoWidth ){ - - if( px === 0 ) height += u.h + m - - u.zone.x = zone.x + px - u.zone.y = py// + u.mtop - //if(div) u.zone.y += m * 0.5 - - tw = R.getWidth(u) - if( tw ) u.zone.w = u.w = tw - else if( u.fw ) u.zone.w = u.w = u.fw - - px += u.zone.w - - if( px >= zone.w ) { - py += u.h + m - //if(div) py += m * 0.5 - px = 0 - } - - } else { - - px = 0 - - u.zone.x = zone.x+u.dx - u.zone.y = py - py += u.h + m - - height += u.h + m - - } - - } - - return height - - }, - + //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) - findTarget: function ( uis, e ) { + if (R.isMobile && e.type === "mousedown") R.findID(e); + if (e.type === "mousemove" && !R.lock) R.findID(e); - let i = uis.length; + if (R.ID !== null) { + if (R.ID.isCanvasOnly) { + e.clientX = R.ID.mouse.x; + e.clientY = R.ID.mouse.y; + } - while( i-- ){ - if( R.onZone( uis[i], e.clientX, e.clientY ) ) return i - } - - return -1; + //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 - }, + R.ID.handleEvent(e); + } - // ---------------------- - // ZONE - // ---------------------- + if (R.isMobile && e.type === "mouseup") R.clearOldID(); + if (leave) R.clearOldID(); + }, - findZone: function ( force ) { + // ---------------------- + // ID + // ---------------------- - if( !R.needReZone && !force ) return; + findID: function (e) { + let i = R.ui.length, + next = -1, + u, + x, + y; - var i = R.ui.length, u; + while (i--) { + u = R.ui[i]; - while( i-- ){ + if (u.isCanvasOnly) { + x = u.mouse.x; + y = u.mouse.y; + } else { + x = e.clientX; + y = e.clientY; + } - u = R.ui[i] - R.getZone( u ) - if( u.isGui ) u.calcUis() + if (R.onZone(u, x, y)) { + next = i; + if (next !== R.current) { + R.clearOldID(); + R.current = next; + R.ID = u; } + break; + } + } - R.needReZone = false - - - }, - - onZone: function ( o, x, y ) { - - if( x === undefined || y === undefined ) return false; - - let z = o.zone; - let mx = x - z.x;// - o.dx; - let my = y - z.y; + if (next === -1) R.clearOldID(); + }, - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 - //if( o.group !== null ) mx -= o.dx + clearOldID: function () { + if (!R.ID) return; + R.current = -1; + R.ID.reset(); + R.ID = null; + R.cursor(); + }, - let over = ( mx >= 0 ) && ( my >= 0 ) && ( mx <= z.w ) && ( my <= z.h ); + // ---------------------- + // GUI / GROUP FUNCTION + // ---------------------- - //if( o.marginDiv ) my -= o.margin * 0.5 + calcUis: (uis, zone, py, group = false) => { + //console.log('calc_uis') - if( over ) o.local.set( mx, my ); - else o.local.neg(); + let i = uis.length, + u, + px = 0, + n = 0, + tw, + m, + div; - return over; + let height = 0; - }, + while (i--) { + u = uis[n]; + n++; - getWidth: function ( o ) { + if (!group && u.isGroup) u.calcUis(); + m = u.margin; + //div = u.marginDiv + u.zone.w = u.w; + u.zone.h = u.h + m; - //return o.getDom().offsetWidth - return o.getDom().clientWidth + if (!u.autoWidth) { + if (px === 0) height += u.h + m; - //let r = o.getDom().getBoundingClientRect(); - //return (r.width) - //return Math.floor(r.width) + u.zone.x = zone.x + px; + u.zone.y = py; // + u.mtop + //if(div) u.zone.y += m * 0.5 - }, + tw = R.getWidth(u); + if (tw) u.zone.w = u.w = tw; + else if (u.fw) u.zone.w = u.w = u.fw; - getZone: function ( o ) { + px += u.zone.w; - if( o.isCanvasOnly ) return; - let r = o.getDom().getBoundingClientRect(); - - //if( !r.width ) return - //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; - //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; - o.zone = { x:r.left, y:r.top, w:r.width, h:r.height }; - - //console.log(o.name, o.zone) - - }, - - // ---------------------- - // CURSOR - // ---------------------- - - cursor: function ( name ) { - - name = name ? name : 'auto'; - if( name !== R.oldCursor ){ - document.body.style.cursor = name; - R.oldCursor = name; + if (px >= zone.w) { + py += u.h + m; + //if(div) py += m * 0.5 + px = 0; } + } else { + px = 0; - }, - - // ---------------------- - // CANVAS - // ---------------------- + u.zone.x = zone.x + u.dx; + u.zone.y = py; + py += u.h + m; - toCanvas: function ( o, w, h, force ) { + height += u.h + m; + } + } - if( !R.xmlserializer ) R.xmlserializer = new XMLSerializer() + return height; + }, - // prevent exesive redraw + findTarget: function (uis, e) { + let i = uis.length; - if( force && R.tmpTime !== null ) { clearTimeout(R.tmpTime); R.tmpTime = null; } + while (i--) { + if (R.onZone(uis[i], e.clientX, e.clientY)) return i; + } - if( R.tmpTime !== null ) return; + return -1; + }, - if( R.lock ) R.tmpTime = setTimeout( function(){ R.tmpTime = null; }, 10 ); + // ---------------------- + // ZONE + // ---------------------- - /// + findZone: function (force) { + if (!R.needReZone && !force) return; - let isNewSize = false; - if( w !== o.canvas.width || h !== o.canvas.height ) isNewSize = true; + var i = R.ui.length, + u; - if( R.tmpImage === null ) R.tmpImage = new Image(); + while (i--) { + u = R.ui[i]; + R.getZone(u); + if (u.isGui) u.calcUis(); + } - let img = R.tmpImage; //new Image(); + R.needReZone = false; + }, - let htmlString = R.xmlserializer.serializeToString( o.content ); - - let svg = ''+ htmlString +''; + onZone: function (o, x, y) { + if (x === undefined || y === undefined) return false; - img.onload = function() { + let z = o.zone; + let mx = x - z.x; // - o.dx; + let my = y - z.y; - let ctx = o.canvas.getContext("2d"); + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 + //if( o.group !== null ) mx -= o.dx - if( isNewSize ){ - o.canvas.width = w; - o.canvas.height = h - }else{ - ctx.clearRect( 0, 0, w, h ); - } - ctx.drawImage( this, 0, 0 ); + let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; - o.onDraw(); + //if( o.marginDiv ) my -= o.margin * 0.5 - }; + if (over) o.local.set(mx, my); + else o.local.neg(); - img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); - //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); - img.crossOrigin = ''; + return over; + }, + getWidth: function (o) { + //return o.getDom().offsetWidth + return o.getDom().clientWidth; - }, + //let r = o.getDom().getBoundingClientRect(); + //return (r.width) + //return Math.floor(r.width) + }, - // ---------------------- - // INPUT - // ---------------------- + getZone: function (o) { + if (o.isCanvasOnly) return; + let r = o.getDom().getBoundingClientRect(); - setHidden: function () { + //if( !r.width ) return + //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; + //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; + o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; + //console.log(o.name, o.zone) + }, - if( R.hiddenImput === null ){ + // ---------------------- + // CURSOR + // ---------------------- - //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' - //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' - //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; + cursor: function (name) { + name = name ? name : "auto"; + if (name !== R.oldCursor) { + document.body.style.cursor = name; + R.oldCursor = name; + } + }, - R.hiddenImput = document.createElement('input'); - R.hiddenImput.type = 'text'; - //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); + // ---------------------- + // CANVAS + // ---------------------- - R.hiddenSizer = document.createElement('div'); - //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; - - document.body.appendChild( R.hiddenImput ); - document.body.appendChild( R.hiddenSizer ); + toCanvas: function (o, w, h, force) { + if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); - } - - let hide = R.debugInput ? '' : 'opacity:0; zIndex:0;'; - let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;'+ hide; - R.hiddenImput.style.cssText = css + 'bottom:10px;' + (R.debugInput ? '' : 'transform:scale(0);'); - R.hiddenSizer.style.cssText = css + 'bottom:40px;'; - - R.hiddenImput.style.width = R.input.clientWidth + 'px'; - R.hiddenImput.value = R.str; - R.hiddenSizer.innerHTML = R.str; - - R.hasFocus = true; - - }, - - clearHidden: function ( p ) { + // prevent exesive redraw - if( R.hiddenImput === null ) return; - R.hasFocus = false; + if (force && R.tmpTime !== null) { + clearTimeout(R.tmpTime); + R.tmpTime = null; + } + + if (R.tmpTime !== null) return; + + if (R.lock) + R.tmpTime = setTimeout(function () { + R.tmpTime = null; + }, 10); + + /// - }, + let isNewSize = false; + if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; - clickPos: function( x ){ - - let i = R.str.length, l = 0, n = 0; - while( i-- ){ - l += R.textWidth( R.str[n] ); - if( l >= x ) break; - n++; + if (R.tmpImage === null) R.tmpImage = new Image(); + + let img = R.tmpImage; //new Image(); + + let htmlString = R.xmlserializer.serializeToString(o.content); + + let svg = + '' + + htmlString + + ""; + + img.onload = function () { + let ctx = o.canvas.getContext("2d"); + + if (isNewSize) { + o.canvas.width = w; + o.canvas.height = h; + } else { + ctx.clearRect(0, 0, w, h); + } + ctx.drawImage(this, 0, 0); + + o.onDraw(); + }; + + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); + //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); + img.crossOrigin = ""; + R.needsUpdate = false; + }, + + // ---------------------- + // INPUT + // ---------------------- + + setHidden: function () { + if (R.hiddenImput === null) { + //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' + //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' + //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; + + R.hiddenImput = document.createElement("input"); + R.hiddenImput.type = "text"; + //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); + + R.hiddenSizer = document.createElement("div"); + //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; + + document.body.appendChild(R.hiddenImput); + document.body.appendChild(R.hiddenSizer); + } + + let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; + let css = + R.parent.css.txtselect + + "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + + hide; + R.hiddenImput.style.cssText = + css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); + R.hiddenSizer.style.cssText = css + "bottom:40px;"; + + R.hiddenImput.style.width = R.input.clientWidth + "px"; + R.hiddenImput.value = R.str; + R.hiddenSizer.innerHTML = R.str; + + R.hasFocus = true; + }, + + clearHidden: function (p) { + if (R.hiddenImput === null) return; + R.hasFocus = false; + }, + + clickPos: function (x) { + let i = R.str.length, + l = 0, + n = 0; + while (i--) { + l += R.textWidth(R.str[n]); + if (l >= x) break; + n++; + } + return n; + }, + + upInput: function (x, down) { + if (R.parent === null) return false; + + let up = false; + + if (down) { + let id = R.clickPos(x); + + R.moveX = id; + + if (R.startX === -1) { + R.startX = id; + R.cursorId = id; + R.inputRange = [R.startX, R.startX]; + } else { + let isSelection = R.moveX !== R.startX; + + if (isSelection) { + if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; + else R.inputRange = [R.startX, R.moveX]; } - return n; - - }, - - upInput: function ( x, down ) { - - if( R.parent === null ) return false; - - let up = false; - - if( down ){ - - let id = R.clickPos( x ); - - R.moveX = id; + } - if( R.startX === -1 ){ - - R.startX = id; - R.cursorId = id; - R.inputRange = [ R.startX, R.startX ]; - - } else { - - let isSelection = R.moveX !== R.startX; - - if( isSelection ){ - if( R.startX > R.moveX ) R.inputRange = [ R.moveX, R.startX ]; - else R.inputRange = [ R.startX, R.moveX ]; - } - } - - up = true; - - } else { - - if( R.startX !== -1 ){ - - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.startX = -1; - - up = true; - - } - - } - - if( up ) R.selectParent(); - - return up; - - }, - - selectAll: function (){ - - if(!R.parent) return - - R.str = R.input.textContent; - R.inputRange = [0, R.str.length ] + up = true; + } else { + if (R.startX !== -1) { R.hasFocus = true; R.hiddenImput.focus(); R.hiddenImput.selectionStart = R.inputRange[0]; R.hiddenImput.selectionEnd = R.inputRange[1]; - R.cursorId = R.inputRange[1] - R.selectParent() - - }, - - selectParent: function (){ - - var c = R.textWidth( R.str.substring( 0, R.cursorId )); - var e = R.textWidth( R.str.substring( 0, R.inputRange[0] )); - var s = R.textWidth( R.str.substring( R.inputRange[0], R.inputRange[1] )); - - R.parent.select( c, e, s, R.hiddenSizer.innerHTML ); - - }, - - textWidth: function ( text ){ - - if( R.hiddenSizer === null ) return 0; - text = text.replace(/ /g, ' '); - R.hiddenSizer.innerHTML = text; - return R.hiddenSizer.clientWidth; - - }, - - - clearInput: function () { + R.startX = -1; - if( R.parent === null ) return; - if( !R.firstImput ) R.parent.validate( true ); + up = true; + } + } - R.clearHidden(); - R.parent.unselect(); + if (up) R.selectParent(); - //R.input.style.background = 'none'; - R.input.style.background = R.parent.colors.back; - R.input.style.borderColor = R.parent.colors.border; - //R.input.style.color = R.parent.colors.text; - R.parent.isEdit = false; + return up; + }, - R.input = null; - R.parent = null; - R.str = '', - R.firstImput = true; - - }, - - setInput: function ( Input, parent ) { - - R.clearInput(); - - R.input = Input; - R.parent = parent; - - R.input.style.background = R.parent.colors.backoff; - R.input.style.borderColor = R.parent.colors.select; - //R.input.style.color = R.parent.colors.textSelect; - R.str = R.input.textContent; - - R.setHidden(); - - }, - - keydown: function ( e ) { - - if( R.parent === null ) return; - - let keyCode = e.which, isShift = e.shiftKey; - - //console.log( keyCode ) - - R.firstImput = false; - - - if (R.hasFocus) { - // hack to fix touch event bug in iOS Safari - window.focus(); - R.hiddenImput.focus(); - - } - - - R.parent.isEdit = true; - - // e.preventDefault(); - - // add support for Ctrl/Cmd+A selection - //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { - //R.selectText(); - //e.preventDefault(); - //return self.render(); - //} - - if( keyCode === 13 ){ //enter - - R.clearInput(); - - //} else if( keyCode === 9 ){ //tab key - - // R.input.textContent = ''; + selectAll: function () { + if (!R.parent) return; + R.str = R.input.textContent; + R.inputRange = [0, R.str.length]; + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.cursorId = R.inputRange[1]; + R.selectParent(); + }, + + selectParent: function () { + var c = R.textWidth(R.str.substring(0, R.cursorId)); + var e = R.textWidth(R.str.substring(0, R.inputRange[0])); + var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); + + R.parent.select(c, e, s, R.hiddenSizer.innerHTML); + }, + + textWidth: function (text) { + if (R.hiddenSizer === null) return 0; + text = text.replace(/ /g, " "); + R.hiddenSizer.innerHTML = text; + return R.hiddenSizer.clientWidth; + }, + + clearInput: function () { + if (R.parent === null) return; + if (!R.firstImput) R.parent.validate(true); + + R.clearHidden(); + R.parent.unselect(); + + //R.input.style.background = 'none'; + R.input.style.background = R.parent.colors.back; + R.input.style.borderColor = R.parent.colors.border; + //R.input.style.color = R.parent.colors.text; + R.parent.isEdit = false; + + R.input = null; + R.parent = null; + (R.str = ""), (R.firstImput = true); + }, + + setInput: function (Input, parent) { + R.clearInput(); + + R.input = Input; + R.parent = parent; + + R.input.style.background = R.parent.colors.backoff; + R.input.style.borderColor = R.parent.colors.select; + //R.input.style.color = R.parent.colors.textSelect; + R.str = R.input.textContent; + + R.setHidden(); + }, + + keydown: function (e) { + if (R.parent === null) return; + + let keyCode = e.which, + isShift = e.shiftKey; + + //console.log( keyCode ) + + R.firstImput = false; + + if (R.hasFocus) { + // hack to fix touch event bug in iOS Safari + window.focus(); + R.hiddenImput.focus(); + } + + R.parent.isEdit = true; + + // e.preventDefault(); + + // add support for Ctrl/Cmd+A selection + //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { + //R.selectText(); + //e.preventDefault(); + //return self.render(); + //} + + if (keyCode === 13) { + //enter + + R.clearInput(); + + //} else if( keyCode === 9 ){ //tab key + + // R.input.textContent = ''; + } else { + if (R.input.isNum) { + if ( + (e.keyCode > 47 && e.keyCode < 58) || + (e.keyCode > 95 && e.keyCode < 106) || + e.keyCode === 190 || + e.keyCode === 110 || + e.keyCode === 8 || + e.keyCode === 109 + ) { + R.hiddenImput.readOnly = false; } else { - - if( R.input.isNum ){ - if ( ((e.keyCode > 47) && (e.keyCode < 58)) || ((e.keyCode > 95) && (e.keyCode < 106)) || e.keyCode === 190 || e.keyCode === 110 || e.keyCode === 8 || e.keyCode === 109 ){ - R.hiddenImput.readOnly = false; - } else { - R.hiddenImput.readOnly = true; - } - } else { - R.hiddenImput.readOnly = false; - } - - } - - }, - - keyup: function ( e ) { - - if( R.parent === null ) return; - - R.str = R.hiddenImput.value; - - if( R.parent.allEqual ) R.parent.sameStr( R.str );// numeric samùe value - else R.input.textContent = R.str; - - R.cursorId = R.hiddenImput.selectionStart; - R.inputRange = [ R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd ]; - - R.selectParent(); - - //if( R.parent.allway ) - R.parent.validate(); - - }, - - // ---------------------- - // - // LISTENING - // - // ---------------------- - - loop: function () { - - if( R.isLoop ) requestAnimationFrame( R.loop ); - R.update(); - - }, - - update: function () { - - let i = R.listens.length; - while( i-- ) R.listens[i].listening(); - - }, - - removeListen: function ( proto ) { - - let id = R.listens.indexOf( proto ); - if( id !== -1 ) R.listens.splice(id, 1); - if( R.listens.length === 0 ) R.isLoop = false; - - }, - - addListen: function ( proto ) { - - let id = R.listens.indexOf( proto ); - - if( id !== -1 ) return false; - - R.listens.push( proto ); - - if( !R.isLoop ){ - R.isLoop = true; - R.loop(); + R.hiddenImput.readOnly = true; } - - return true; - - }, - -} - -export const Roots = R; \ No newline at end of file + } else { + R.hiddenImput.readOnly = false; + } + } + }, + + keyup: function (e) { + if (R.parent === null) return; + + R.str = R.hiddenImput.value; + + if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value + else R.input.textContent = R.str; + + R.cursorId = R.hiddenImput.selectionStart; + R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; + + R.selectParent(); + + //if( R.parent.allway ) + R.parent.validate(); + }, + + // ---------------------- + // + // LISTENING + // + // ---------------------- + + loop: function () { + // modified by Fedemarino + if (R.isLoop) requestAnimationFrame(R.loop); + R.needsUpdate = R.update(); + // if there is a change in a value generated externally, the GUI needs to be redrawn + if (R.ui[0]) R.ui[0].draw(); + }, + + update: function () { + // modified by Fedemarino + let i = R.listens.length; + let needsUpdate = false; + while (i--) { + //check if the value of the object has changed + let hasChanged = R.listens[i].listening(); + if (hasChanged) needsUpdate = true; + } + return needsUpdate; + }, + + removeListen: function (proto) { + let id = R.listens.indexOf(proto); + if (id !== -1) R.listens.splice(id, 1); + if (R.listens.length === 0) R.isLoop = false; + }, + + addListen: function (proto) { + let id = R.listens.indexOf(proto); + + if (id !== -1) return false; + + R.listens.push(proto); + + if (!R.isLoop) { + R.isLoop = true; + R.loop(); + } + + return true; + }, +}; + +export const Roots = R; diff --git a/src/proto/Slide.js b/src/proto/Slide.js index 856c2df..acda56a 100644 --- a/src/proto/Slide.js +++ b/src/proto/Slide.js @@ -1,261 +1,299 @@ -import { Proto } from '../core/Proto.js'; +import { Proto } from "../core/Proto.js"; +import { Tools } from "../core/Tools.js"; +function ease(x, min, max, power) { + let n = min + Math.pow((x - min) / (max - min), power) * (max - min); + return n; +} export class Slide extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.setTypeNumber( o ); - - - this.model = o.stype || 0; - if( o.mode !== undefined ) this.model = o.mode; - - //this.defaultBorderColor = this.colors.hide; - - this.isDown = false; - this.isOver = false; - this.allway = o.allway || false; - - this.isDeg = o.isDeg || false; - this.isCyclic = o.cyclic || false; - - this.firstImput = false; - - let cc = this.colors - - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - this.c[2] = this.dom( 'div', this.css.txtselect + 'border:none; background:none; width:47px; color:'+ cc.text +';' ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); - this.c[3] = this.dom( 'div', this.css.basic + ' top:0; height:'+this.h+'px;' ); - this.c[4] = this.dom( 'div', this.css.basic + 'background:'+cc.back+'; top:2px; height:'+(this.h-4)+'px;' ); - this.c[5] = this.dom( 'div', this.css.basic + 'left:4px; top:5px; height:'+(this.h-10)+'px; background:' + cc.text +';' ); - - this.c[2].isNum = true; - //this.c[2].style.height = (this.h-4) + 'px'; - //this.c[2].style.lineHeight = (this.h-8) + 'px'; - this.c[2].style.height = (this.h-2) + 'px'; - this.c[2].style.lineHeight = (this.h-10) + 'px'; - - if(this.model !== 0){ - - let r1 = 4, h1 = 4, h2 = 8, ww = this.h-6, ra = 16; - - if( this.model === 2 ){ - r1 = 0 - h1 = 2 - h2 = 4 - ra = 2 - ww = (this.h-6)*0.5 - } - - if( this.model === 3 ) this.c[5].style.visible = 'none'; - - this.c[4].style.borderRadius = r1 + 'px'; - this.c[4].style.height = h2 + 'px'; - this.c[4].style.top = (this.h*0.5) - h1 + 'px'; - this.c[5].style.borderRadius = (r1*0.5) + 'px'; - this.c[5].style.height = h1 + 'px'; - this.c[5].style.top = (this.h*0.5)-(h1*0.5) + 'px'; - - //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); - this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; background:'+cc.text+'; left:4px; top:3px; height:'+(this.h-6)+'px; width:'+ww+'px;' ) - } - - this.init(); - + constructor(o = {}) { + super(o); + + if (o.easing <= 0) throw "Easing must be > 0"; + this.easing = o.easing || 1; + + this.setTypeNumber(o); + + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + + //this.defaultBorderColor = this.colors.hide; + + this.isDown = false; + this.isOver = false; + this.allway = o.allway || false; + + this.isDeg = o.isDeg || false; + this.isCyclic = o.cyclic || false; + + this.firstImput = false; + + let cc = this.colors; + + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + this.c[2] = this.dom( + "div", + this.css.txtselect + + "border:none; background:none; width:47px; color:" + + cc.text + + ";" + ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); + this.c[3] = this.dom( + "div", + this.css.basic + " top:0; height:" + this.h + "px;" + ); + + this.c[4] = this.dom( + "div", + this.css.basic + + "background:" + + cc.back + + "; top:2px; height:" + + (this.h - 4) + + "px;" + ); + this.c[5] = this.dom( + "div", + this.css.basic + + "left:4px; top:5px; height:" + + (this.h - 10) + + "px; background:" + + cc.text + + ";" + ); + + this.c[2].isNum = true; + //this.c[2].style.height = (this.h-4) + 'px'; + //this.c[2].style.lineHeight = (this.h-8) + 'px'; + this.c[2].style.height = this.h - 2 + "px"; + this.c[2].style.lineHeight = this.h - 10 + "px"; + + if (this.model !== 0) { + let r1 = 4, + h1 = 4, + h2 = 8, + ww = this.h - 6, + ra = 16; + + if (this.model === 2) { + r1 = 0; + h1 = 2; + h2 = 4; + ra = 2; + ww = (this.h - 6) * 0.5; + } + + if (this.model === 3) this.c[5].style.visible = "none"; + + this.c[4].style.borderRadius = r1 + "px"; + this.c[4].style.height = h2 + "px"; + this.c[4].style.top = this.h * 0.5 - h1 + "px"; + this.c[5].style.borderRadius = r1 * 0.5 + "px"; + this.c[5].style.height = h1 + "px"; + this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; + + //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); + this.c[6] = this.dom( + "div", + this.css.basic + + "border-radius:" + + ra + + "px; margin-left:" + + -ww * 0.5 + + "px; background:" + + cc.text + + "; left:4px; top:3px; height:" + + (this.h - 6) + + "px; width:" + + ww + + "px;" + ); } - testZone ( e ) { + this.init(); + } - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - - if( l.x >= this.txl ) return 'text'; - else if( l.x >= this.sa ) return 'scroll'; - else return ''; + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; - } - - // ---------------------- - // EVENTS - // ---------------------- + if (l.x >= this.txl) return "text"; + else if (l.x >= this.sa) return "scroll"; + else return ""; + } - mouseup ( e ) { - - if( this.isDown ) this.isDown = false; - - } + // ---------------------- + // EVENTS + // ---------------------- - mousedown ( e ) { + mouseup(e) { + if (this.isDown) this.isDown = false; + } - let name = this.testZone( e ); + mousedown(e) { + let name = this.testZone(e); - if( !name ) return false; + if (!name) return false; - if( name === 'scroll' ){ - this.isDown = true; - this.old = this.value; - this.mousemove( e ); - - } + if (name === "scroll") { + this.isDown = true; + this.old = this.value; + this.mousemove(e); + } - /*if( name === 'text' ){ + /*if( name === 'text' ){ this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); }*/ - return true; - - } - - mousemove ( e ) { - - let nup = false; - - let name = this.testZone( e ); - - if( name === 'scroll' ) { - this.mode(1); - this.cursor('w-resize'); - //} else if(name === 'text'){ - //this.cursor('pointer'); - } else { - this.cursor(); - } + return true; + } - if( this.isDown ){ + mousemove(e) { + let nup = false; - let n = ((( e.clientX - (this.zone.x+this.sa) - 3 ) / this.ww ) * this.range + this.min ) - this.old; - if(n >= this.step || n <= this.step){ - n = Math.floor( n / this.step ); - this.value = this.numValue( this.old + ( n * this.step ) ); - this.update( true ); - this.old = this.value; - } - nup = true; - } - - return nup; + let name = this.testZone(e); + if (name === "scroll") { + this.mode(1); + this.cursor("w-resize"); + //} else if(name === 'text'){ + //this.cursor('pointer'); + } else { + this.cursor(); } - wheel ( e ) { - - let name = this.testZone( e ); - - if( name === 'scroll' ) { - - let v = this.value - this.step * e.delta; - - if ( v > this.max ) { - v = this.isCyclic ? this.min : this.max; - } else if ( v < this.min ) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue(v); - this.old = v; - this.update( true ); - - return true; - - } - - return false; - - } + if (this.isDown) { + let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; + + // lo mapeo al rango 0 ... 1 + nNormalized = Math.min(1, Math.max(0, nNormalized)); - //keydown: function ( e ) { return true; }, + // aplico easing + let nEased = Math.pow(nNormalized, this.easing); // easing - // ---------------------- + let nNew = nEased * this.range + this.min; + let nNewSlider = nNormalized * this.range + this.min; - validate () { - - let n = this.c[2].textContent; + this.sliderValue = this.numValue(nNewSlider); - if(!isNaN( n )){ - this.value = this.numValue( n ); - this.update(true); - } + let delta = nNew - this.old; - else this.c[2].textContent = this.value + (this.isDeg ? '°':''); + let steps; + if (delta >= this.step || delta <= this.step) { + steps = Math.floor(delta / this.step); + this.value = this.numValue(this.old + steps * this.step); + // value without easing applied + this.update(true); + this.old = this.value; + } + //console.log("n, normalized, value", nNew, nNormalized, this.value); + nup = true; } + return nup; + } - reset () { + wheel(e) { + let name = this.testZone(e); - //this.clearInput(); - this.isDown = false; - this.mode(0); + if (name === "scroll") { + let v = this.value - this.step * e.delta; - } + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } - mode ( mode ) { - - let s = this.s; - let cc = this.colors - - switch(mode){ - case 0: // base - // s[2].border = '1px solid ' + this.colors.hide; - s[2].color = cc.text; - s[4].background = cc.back; - s[5].background = cc.text; - if(this.model !== 0) s[6].background = cc.text//cc.button; - break; - case 1: // scroll over - //s[2].border = '1px dashed ' + this.colors.hide; - s[2].color = cc.textOver; - s[4].background = cc.back; - s[5].background = cc.textOver; - if(this.model !== 0) s[6].background = cc.textOver//cc.overoff; - break; - - } - } + this.setValue(v); + this.old = v; + this.update(true); - update ( up ) { - - let ww = Math.floor( this.ww * (( this.value - this.min ) / this.range )); - - if(this.model !== 3) this.s[5].width = ww + 'px'; - if(this.s[6]) this.s[6].left = ( this.sa + ww + 3 ) + 'px'; - this.c[2].textContent = this.value + (this.isDeg ? '°':''); - - if( up ) this.send(); + return true; + } + return false; + } + + //keydown: function ( e ) { return true; }, + + // ---------------------- + + validate() { + let n = this.c[2].textContent; + + if (!isNaN(n)) { + this.value = this.numValue(n); + this.update(true); + } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + } + + reset() { + //this.clearInput(); + this.isDown = false; + this.mode(0); + } + + mode(mode) { + let s = this.s; + let cc = this.colors; + + switch (mode) { + case 0: // base + // s[2].border = '1px solid ' + this.colors.hide; + s[2].color = cc.text; + s[4].background = cc.back; + s[5].background = cc.text; + if (this.model !== 0) s[6].background = cc.text; //cc.button; + break; + case 1: // scroll over + //s[2].border = '1px dashed ' + this.colors.hide; + s[2].color = cc.textOver; + s[4].background = cc.back; + s[5].background = cc.textOver; + if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; + break; } + } - rSize () { + update(up) { + let ww = Math.floor(this.ww * ((this.sliderValue - this.min) / this.range)); + //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); - super.rSize(); + if (this.model !== 3) this.s[5].width = ww + "px"; + if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; + this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - let w = this.sb - this.sc; - this.ww = w - 6; + if (up) this.send(); + } - let tx = this.sc; - if(this.isUI || !this.simple) tx = this.sc+10; - this.txl = this.w - tx + 2; + rSize() { + super.rSize(); - //let ty = Math.floor(this.h * 0.5) - 8; + let w = this.sb - this.sc; + this.ww = w - 6; - let s = this.s; + let tx = this.sc; + if (this.isUI || !this.simple) tx = this.sc + 10; + this.txl = this.w - tx + 2; - s[2].width = (this.sc -6 )+ 'px'; - s[2].left = (this.txl +4) + 'px'; - //s[2].top = ty + 'px'; - s[3].left = this.sa + 'px'; - s[3].width = w + 'px'; - s[4].left = this.sa + 'px'; - s[4].width = w + 'px'; - s[5].left = (this.sa + 3) + 'px'; + //let ty = Math.floor(this.h * 0.5) - 8; - this.update(); + let s = this.s; - } + s[2].width = this.sc - 6 + "px"; + s[2].left = this.txl + 4 + "px"; + //s[2].top = ty + 'px'; + s[3].left = this.sa + "px"; + s[3].width = w + "px"; + s[4].left = this.sa + "px"; + s[4].width = w + "px"; + s[5].left = this.sa + 3 + "px"; -} \ No newline at end of file + this.update(); + } +} From 7ffba2d9d87310c3e170224bc6188711ff946571 Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Sat, 30 Aug 2025 19:12:56 -0300 Subject: [PATCH 03/17] slide --- .nvmrc | 1 + build/uil.js | 9 +++++++-- build/uil.min.js | 9 +++++++-- build/uil.module.js | 9 +++++++-- examples/uil_lumicles.html | 22 +++++++++------------- src/proto/Slide.js | 7 ++++++- 6 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 .nvmrc diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..3cacc0b --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +12 \ No newline at end of file diff --git a/build/uil.js b/build/uil.js index 72dfdf0..3eae299 100644 --- a/build/uil.js +++ b/build/uil.js @@ -6808,7 +6808,12 @@ } update(up) { - let ww = Math.floor(this.ww * ((this.sliderValue - this.min) / this.range)); + let normalized = (this.value - this.min) / this.range; + + let uneased = + this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); + + let ww = Math.floor(this.ww * uneased); //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); if (this.model !== 3) this.s[5].width = ww + "px"; @@ -9061,4 +9066,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbG9vcDogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKFIuaXNMb29wKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUi5sb29wKTtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBSLnVwZGF0ZSgpO1xyXG4gICAgLy8gaWYgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gYSB2YWx1ZSBnZW5lcmF0ZWQgZXh0ZXJuYWxseSwgdGhlIEdVSSBuZWVkcyB0byBiZSByZWRyYXduXHJcbiAgICBpZiAoUi51aVswXSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqICgodGhpcy5zbGlkZXJWYWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2UpKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Q0FBQTtDQUNBO0NBQ0E7QUFDQTtBQUNZLE9BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsTUFBTSxDQUFDLEdBQUc7Q0FDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7Q0FDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7Q0FDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0NBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSztDQUNiLEVBQUUsS0FBSyxFQUFFLEtBQUs7Q0FDZCxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDYjtDQUNBLEVBQUUsVUFBVSxFQUFFLElBQUk7Q0FDbEIsRUFBRSxVQUFVLEVBQUUsS0FBSztDQUNuQixFQUFFLFNBQVMsRUFBRSxLQUFLO0NBQ2xCLEVBQUUsWUFBWSxFQUFFLEtBQUs7Q0FDckIsRUFBRSxP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O0NBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDMUIsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtDQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7Q0FDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUNqQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQ2pDLE9BQU87QUFDUDtDQUNBO0FBQ0E7Q0FDQSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCLEtBQUs7QUFDTDtDQUNBLElB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QUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Q0FDcEQsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQ3ZEO0NBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDeEMsR0FBRztBQUNIO0NBQ0EsRUFBRSxRQUFRLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFO0NBQ3JDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3RCO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0NBQ3ZELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztDQUN2RDtDQUNBLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUNoQztDQUNBLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ2xCLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NB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LElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0NBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtDQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0NBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7Q0FDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztDQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDbkIsU0FBUztDQUNULFFBQVEsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDM0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUMsYUFBYTtDQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMxQixZQUFZLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7Q0FDekcsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFlBQVksRUFBRSxXQUFXLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRztBQUM5RDtDQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRDtDQUNBLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxQjtDQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0c7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sRUFBRSxXQUFXLEtBQUssR0FBRztBQUNoQztDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBRztDQUNwQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztDQUNwSixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3JIO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM3SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxF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LEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0E7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztDQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0NBQ0E7QUFDQTtDQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdGO0NBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMvQjtDQUNBLFNBQVMsTUFBTTtDQUNmO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzVGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckksWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9GLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BJO0NBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztDQUMvQixTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxhQUFhLEVBQUUsWUFBWTtBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0NBQ2hKLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUN2QyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQixRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDM0IsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQ3hCLFFBQVcsSUFBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0NBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztDQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztDQUN2QjtDQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7Q0FDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7Q0FDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0NBQ0EsWUFBWSxFQUFFLEdBQUc7Q0FDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7Q0FDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxhQUFhLENBQUM7Q0FDZDtDQUNBLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlEO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkI7Q0FDQSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixnQkFBZ0IsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUMxQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdEQsaUJBQWlCO0FBQ2pCO0NBQ0EsZ0JBQWdCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRztDQUNBLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0QsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuSjtDQUNBLGdCQUFnQixDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxSDtDQUNBLGFBQWE7Q0FDYixZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUVoQyxTQUFTO0FBSVQ7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztBQUN2QjtDQUNBO0NBQ0EsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUNqRyxRQUFRLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckk7Q0FDQSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDL0UsUUFBUSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3hJO0NBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ2hHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDbkcsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDOUksUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDOUksUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsb0ZBQW9GLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDL0s7QUFDQTtDQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxRztDQUNBLFFBQVEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDMUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksRUFBRSxXQUFXLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNwQjtDQUNBLFFBQVEsSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDO0NBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsNEZBQTRGLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUNqTyxRQUFRLE9BQU8sSUFBSTtDQUNuQixZQUFZLEtBQUssTUFBTTtDQUN2QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7Q0FDM0YsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxRQUFRO0NBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztDQUM1RixZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLEtBQUs7Q0FDdEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0NBQ3pGLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssS0FBSztDQUN0QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsbUZBQW1GLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Q0FDekosWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxRQUFRO0NBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztDQUM1SixZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLFFBQVE7Q0FDekIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0NBQzVGLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssTUFBTTtDQUN2QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsd0pBQXdKLENBQUMsS0FBSyxDQUFDO0NBQ3ZNLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLDRLQUE0SyxDQUFDO0NBQy9MLFlBQVksTUFBTTtDQUNsQixTQUFTO0NBQ1QsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDO0NBQzVCLFFBQVEsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxVQUFVLENBQUMsQ0FBQztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0NBQ0EsSUFBSSxXQUFXLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxDQUFDO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsQ0FBQztBQUNkO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtDQUNBLElBQUksV0FBVyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7Q0FDQSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtDQUNBLEVBQUM7QUFDRDtDQUNBLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNaO0FBQ1ksT0FBQyxLQUFLLEdBQUc7O0NDdjNCckI7QUFDQTtBQUNBO0NBQ08sTUFBTSxLQUFLLENBQUM7QUFDbkI7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksT0FBTyxTQUFTLEVBQUUsSUFBSSxHQUFHO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQ2xCO0NBQ0EsUUFBUSxRQUFRLElBQUk7Q0FDcEIsWUFBWSxLQUFLLEtBQUs7Q0FDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFHO0NBQzNELFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssS0FBSztDQUN0QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUc7Q0FDdkQsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxLQUFLO0NBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBRztDQUN4RCxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLEtBQUs7Q0FDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFHO0NBQ3ZELFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxLQUFLO0NBQ2xDLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxFQUFFLDBCQUEwQixFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBRztDQUM5RyxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLE1BQU07Q0FDdkIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7Q0FDL0gsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxNQUFNO0NBQ3ZCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUFFLGtCQUFrQixFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFHO0NBQzdGLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssSUFBSTtDQUNyQixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxFQUFFLGlCQUFpQixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFHO0NBQ2hHLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssT0FBTztDQUN4QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7Q0FDeEcsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxNQUFNO0NBQ3ZCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBRztDQUNsRixZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLEtBQUs7Q0FDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBRztDQUN4RixZQUFZLE1BQU07QUFDbEI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQztBQUNoQjtDQUNBLEtBQUs7QUFDTDtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksT0FBTyxNQUFNLENBQUMsa0JBQWtCLEtBQUssVUFBVSxFQUFFO0NBQzdELFlBQVksTUFBTSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQywyQkFBMEI7Q0FDeEUsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJO0FBQ1o7Q0FDQSxTQUFTLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRTtBQUNoQztDQUNBLFlBQVksTUFBTSxPQUFPLEdBQUc7Q0FDNUIsZ0JBQWdCLHNCQUFzQixFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztDQUMzRCxnQkFBZ0IsUUFBUSxFQUFFLEtBQUs7Q0FDL0I7Q0FDQSxhQUFhLENBQUM7QUFDZDtDQUNBLFlBQVksT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksR0FBRTtBQUNuRDtDQUNBO0NBQ0EsWUFBWSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEdBQUU7Q0FDckUsWUFBWSxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUU7Q0FDbEQ7QUFDQTtDQUNBLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLElBQUk7QUFDbkM7Q0FDQSxZQUFZLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDbEMsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsRjtDQUNBLFlBQVksTUFBTSxPQUFPLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztDQUNsRixZQUFZLE1BQU0sT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7Q0FDL0UsWUFBWSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQzVDO0NBQ0EsWUFBWSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxJQUFJLEdBQUU7Q0FDOUUsaUJBQWlCLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxHQUFFO0NBQ3ZGLGlCQUFpQixNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksR0FBRTtBQUMxQztDQUNBLFlBQVksTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsRUFBRTtBQUN4QztDQUNBLGdCQUFnQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU07QUFDN0M7Q0FDQSxnQkFBZ0IsT0FBTyxJQUFJO0NBQzNCLG9CQUFvQixLQUFLLE9BQU87Q0FDaEMsd0JBQXdCLElBQUksR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDO0NBQzVDLHdCQUF3QixHQUFHLENBQUMsTUFBTSxHQUFHLFdBQVc7Q0FDaEQsNEJBQTRCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFFO0NBQzVFLDBCQUF5QjtDQUN6Qix3QkFBd0IsR0FBRyxDQUFDLEdBQUcsR0FBRyxRQUFPO0NBQ3pDLG9CQUFvQixNQUFNO0NBQzFCLG9CQUFvQixLQUFLLE1BQU07Q0FDL0Isd0JBQXdCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRTtDQUMxRixvQkFBb0IsTUFBTTtDQUMxQixvQkFBb0I7Q0FDcEIsd0JBQXdCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFFO0NBQzVFLG9CQUFvQixNQUFNO0NBQzFCLGlCQUFpQjtBQUNqQjtDQUNBLGNBQWE7QUFDYjtDQUNBLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNuQjtDQUNBLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksR0FBRTtBQUMzRDtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLENBQUMsT0FBTywwQkFBMEIsRUFBRSxPQUFPLEdBQUc7Q0FDOUMsUUFBUSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLO0NBQ3hDLFlBQVksTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUMxRCxZQUFZLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0NBQ2hDLFlBQVksS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0NBQzlDLFlBQVksS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSztDQUN4QyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDM0MsaUJBQWlCLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUNqRixpQkFBaUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsWUFBWSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE1BQU07Q0FDbkQsZ0JBQWdCLE9BQU87Q0FDdkIsb0JBQW9CLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLO0NBQ25ELHdCQUF3QixPQUFPO0NBQy9CLDRCQUE0QixPQUFPLEVBQUU7Q0FDckMsZ0NBQWdDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLO0NBQ3pELG9DQUFvQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDbEQsaUNBQWlDLENBQUM7Q0FDbEMseUJBQXlCLENBQUM7Q0FDMUIscUJBQXFCLENBQUM7Q0FDdEIsaUJBQWlCLENBQUM7Q0FDbEIsYUFBYSxDQUFDLENBQUM7QUFDZjtDQUNBLFlBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzFCLFNBQVMsQ0FBQztDQUNWLEtBQUs7QUFDTDtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLGFBQWEsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDaEM7Q0FDQSxRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxPQUFPLE1BQU0sQ0FBQyxrQkFBa0IsS0FBSyxVQUFVLEVBQUU7Q0FDN0QsWUFBWSxNQUFNLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLDJCQUEwQjtDQUN4RSxZQUFZLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDM0IsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJO0FBQ1o7Q0FDQSxZQUFZLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRTtBQUNuQztDQUNBLFlBQVksTUFBTSxPQUFPLEdBQUc7Q0FDNUIsZ0JBQWdCLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLE9BQU87Q0FDaEQsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7Q0FDbEMsYUFBYSxDQUFDO0FBQ2Q7Q0FDQSxZQUFZLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUU7Q0FDbkQsWUFBWSxPQUFPLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUM7Q0FDekUsWUFBWSxPQUFPLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbEY7QUFDQTtDQUNBO0NBQ0EsWUFBWSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUN0RTtDQUNBLFlBQVksSUFBSSxPQUFPLEdBQUcsTUFBTTtBQUNoQztDQUNBO0NBQ0EsWUFBWSxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN2RDtDQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDL0U7Q0FDQTtDQUNBLFlBQVksTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DO0NBQ0E7Q0FDQSxZQUFZLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9CO0NBQ0EsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ25CO0NBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLDBCQUEwQixFQUFFLE9BQU8sR0FBRztDQUNqRCxRQUFRLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUs7Q0FDeEMsWUFBWSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2xELFlBQVksQ0FBQyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLGNBQWE7Q0FDL0QsWUFBWSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztDQUM5RSxZQUFZLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLEdBQUU7QUFDaEQ7Q0FDQSxZQUFZLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTTtDQUM5QyxnQkFBZ0IsT0FBTztDQUN2QixvQkFBb0IsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFO0NBQ3pFLGtCQUFpQjtDQUNqQixhQUFhLEVBQUM7Q0FDZCxZQUFZLENBQUMsQ0FBQyxLQUFLLEdBQUU7Q0FDckIsU0FBUyxDQUFDO0NBQ1YsS0FBSztBQUNMO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksYUFBYSxTQUFTLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUk7Q0FDWjtDQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztDQUM5RCxZQUFZLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztDQUM3QixZQUFZLFdBQVcsTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFO0NBQ3ZELGdCQUFnQixNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUNuRCxnQkFBZ0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNqQyxhQUFhO0FBQ2I7Q0FDQSxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDO0NBQzlCLFlBQVksT0FBTyxLQUFLLENBQUM7QUFDekI7Q0FDQSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkI7Q0FDQSxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxTQUFTO0NBQ1Q7Q0FDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTs7Q0NqUU8sTUFBTSxFQUFFLENBQUM7QUFDaEI7Q0FDQSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2IsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2IsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNiLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoQixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoQixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hCLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hCLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxHQUFHO0FBQzNCO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztDQUNuQixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDO0NBQ25CLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsWUFBWSxDQUFDLEVBQUUsTUFBTSxHQUFHO0FBQ3pCO0NBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQzNDO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0NBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztDQUNBLEVBQUUsS0FBSyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QztDQUNBLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNkLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDZCxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLE1BQU0sQ0FBQyxHQUFHO0FBQ1g7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDZixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDZixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQ1I7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDZCxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDZCxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLE1BQU0sQ0FBQyxHQUFHO0FBQ1g7Q0FDQSxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDMUM7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNaO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDZixFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmO0NBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZDtDQUNBLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRztBQUN0RDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNyQjtDQUNBLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDbEc7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDbkI7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtDQUNsQixHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxL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QzFELFNBQVMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QjtDQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztDQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqRDtDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDdkQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0NBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUN4QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDbkM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztDQUNqRSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0NBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsWUFBWSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFlBQVks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R0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0NBQzdFLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0NBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7Q0FDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEMsT0FBTztDQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDdkIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUN6QyxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxHQUFHO0NBQ1QsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNyQztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxD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O0NBQ2hCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ2pCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO0NBQ2xCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0NBQ25CLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDO0NBQ3BCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0NBQ3JCLFFBQVEsTUFBTTtDQUNkLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUNsRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMzQyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Q0FDZCxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxJQUFJO0NBQ0osTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO0NBQzNFLE1BQU07Q0FD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QUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7Q0FDQTtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0NBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztDQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFJO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7Q0FDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFDO0NBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztDQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUU7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUk7Q0FDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwQztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU07Q0FDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtDQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtDQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRTtBQUN4QjtDQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQztDQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUN0QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUNsSTtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtDQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDM0UsUUFBUSxJQUFJLENBQUMs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ekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDckMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxVQUFVLEdBQUc7Q0FDbEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQ3JEO0NBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0NBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7Q0FDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN4RCxhQUFhO0NBQ2I7Q0FDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7Q0FDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0NBQ3hCO0NBQ0EsU0FBUztDQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUNsRCxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzQyxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzQyxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEMsUUFBUSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbEc7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5RDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7Q0FDQSxZQUFZ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WSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQzVDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3JDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRTtDQUNBLFNBQVMsTUFBTTtBQUNmO0NBQ0EsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ2hDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQztDQUNBLFNBQVMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUM5QyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbkM7Q0FDQSxTQUFTLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2pDLFNBQVMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUNyQztDQUNBLFNBQVMsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQy9ELFNBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7Q0FDaEQsU0FBUyxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFO0NBQzdCLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNsQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxTQUFTLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDO0NBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUc7Q0FDeEIsT0FBTyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQyxPQUFPLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQ3ZDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUN4QyxlQUFlLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQ25EO0NBQ0EsT0FBTyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdkMsT0FBTztBQUNQO0NBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0NBQ3BEO0NBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDakM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0NBQ0EsU0FBUztDQUNULEtBQUs7Q0FDTCxJQUFJO0NBQ0osR0FBRztBQUNIO0NBQ0EsRUFBRTtBQUNGO0NBQ0E7QUFDQTtDQUNBLENBQUMsU0FBUyxDQUFDLEdBQUc7QUFDZDtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7Q0FDakUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN0QjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2xELFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9DO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxJQUFJLENBQUMsR0FBRztBQUNUO0NBQ0EsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDZjtDQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7Q0FDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0NBQ3RDO0NBQ0EsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCO0NB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QUcsQ0FBQyxDQUFDO0NBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztDQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUM7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0E7Q0FDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7Q0FDNUQ7Q0FDQTtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtDQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FB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QUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3ZEO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3ZEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QjtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DO0NBQ0EsS0FBSztDQUNMO0NBQ0E7O0NDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Q0FDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0NBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxRDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Q0FDeEUsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUM5QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUNqRDtDQUNBLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Q0FDL0IsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDL0MsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxTQUFRO0NBQ3pELGFBQWE7Q0FDYjtDQUNBO0NBQ0E7Q0FDQTtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvQixRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUI7Q0FDQTtBQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcseURBQXlELEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzVMO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNqRDtDQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztDQUN0SixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbEY7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvSCxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoSjtDQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDeEQsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN4QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0NBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0NBQ3JDLFlBQVks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O0FBQ2xCO0NBQ0EsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUU7Q0FDckM7QUFDQTtDQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckM7Q0FDQSxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUM7Q0FDNUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ3BDO0NBQ0EsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBRztDQUMxQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7QUFDdEI7Q0FDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUM7Q0FDekQsV0FBVyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFB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QUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFFO0NBQy9CLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNwQztDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0NDNWNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztDQUNBLElBQUksV0FBVyxFQUFF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Q0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxPQUFPLElBQUk7Q0FDbkIsWUFBWSxLQUFLLENBQUM7Q0FDbEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDbEMsb0JBQW9CLElBQUksQ0FB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UUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7Q0FDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7Q0FDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0NBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFN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QUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7Q0FDekQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDakYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFB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RyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxD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QUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7Q0FDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztDQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3pEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFF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SUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNyVSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsZ0RBQWdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNySztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0NBQ2xJLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzdKO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUN4QztBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUU7Q0FDdEIsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtDQUNwQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxLQUFLLEVBQUU7Q0FDekMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUk7Q0FDbEMsYUFBYSxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxNQUFNLEVBQUU7Q0FDakQsZ0JBQWdCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUk7Q0FDdkMsZ0JBQWdCLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDbEUsYUFBYTtDQUNiLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNCO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDaEQ7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDcEIsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDMUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUM1QjtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDO0NBQ3JDLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDckI7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7Q0FDekMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0NBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN6QztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNyRCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNsRDtDQUNBLFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ3BELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw2Q0FBNkMsQ0FBQyxDQUFDO0NBQ3ZHLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2xDO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztDQUN6QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQzdDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0NBQ25ELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO0NBQ25DLFlBQVksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNsRSxpQkFBaUIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQ3RDLFNBQVMsS0FBSTtDQUNiLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3RDLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0NBQzNCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDM0IsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0NBQzdDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztDQUM3QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUk7Q0FDakQsWUFBWSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztDQUN0QyxTQUFTO0FBQ1Q7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7Q0FDL0MsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksZ0JBQWU7Q0FDckQsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQUs7Q0FDbkMsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksTUFBSztDQUN6QyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxLQUFJO0NBQzVDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUk7QUFDeEM7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNsQyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Q0FDbkQsUUFBUSxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUU7QUFDbEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUk7QUFDL0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxZQUFZLENBQUMsR0FBRztBQUNwQjtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztDQUMzQixRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDakYsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDdkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHO0FBQ2Y7Q0FDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsTUFBTTtBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUM1QixRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3RDO0NBQ0EsWUFBWSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztBQUN4QztDQUNBLFlBQVksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQzdCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsU0FBUztDQUNULGFBQWEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLEVBQUU7QUFDYjtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsS0FBSTtDQUN2QixRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbEMsUUFBUSxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ2hELFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Q0FDL0csUUFBUSxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDakU7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsV0FBVztBQUNoRDtDQUNBLFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0NBQzFDLFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0NBQzNDLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDdEMsWUFBWSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDM0I7Q0FDQSxTQUFTLENBQUMsQ0FBQztBQUNYO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDakQ7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0NBQ3BDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLE9BQU8sQ0FBQztDQUMzRCxpQkFBZ0I7Q0FDaEIsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxPQUFPLFFBQVEsQ0FBQztDQUN4RixnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzFFLGFBQWE7QUFDYjtDQUNBLFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sT0FBTyxDQUFDO0NBQ3BELGlCQUFnQjtDQUNoQixnQkFBZ0IsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0NBQ2pDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsT0FBTyxRQUFRLENBQUM7Q0FDNUYsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUM5RSxpQkFBaUI7Q0FDakIsYUFBYTtBQUNiO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQzlCO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3pDLFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUNsQixZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDNUIsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0NBQ3pDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztDQUMvRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0NBQ2xDLGdCQUFnQixJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztDQUNsQyxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUM7Q0FDaEMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0NBQ3BDLGdCQUFnQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQztDQUNoQyxnQkFBZ0IsT0FBTyxJQUFJLENBQUM7Q0FDNUIsYUFBYTtBQUNiO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNO0FBQ2xDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUM7Q0FDckQsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsUUFBUSxJQUFJO0FBQ3BCO0NBQ0EsWUFBWSxLQUFLLENBQUM7Q0FDbEIsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsS0FBSTtDQUN2RCxnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDbkQsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0NBQ2xCLGdCQUFnQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUk7Q0FDdkQsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQ3ZELFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssQ0FBQztDQUNsQixnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFNO0NBQ3pELGdCQUFnQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztDQUN6RCxZQUFZLE1BQU07QUFDbEI7Q0FDQSxTQUFTO0NBQ1QsS0FBSztBQUNMO0NBQ0EsSUFBSSxVQUFVLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU07Q0FDbEMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQztDQUN4QixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUMzQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxHQUFHO0FBQ2Y7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU07Q0FDbEMsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFFO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUM7Q0FDeEIsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFJO0FBQ2xDO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksVUFBVSxHQUFHO0FBQ2pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU07Q0FDakMsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBSztDQUN4QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztDQUM5RCxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztDQUN6RCxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFVBQVUsR0FBRztBQUNqQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTTtDQUN0QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRTtDQUN4QjtDQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBQztBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFNO0NBQ2pDLFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUNsQixZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDOUIsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSTtDQUNuRCxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDeEMsYUFBYSxNQUFNO0NBQ25CLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFJO0NBQ2pFLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMvRCxhQUFhO0NBQ2I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztBQUNqQztDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQy9CO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDaEM7Q0FDQSxTQUFTLE1BQU0sSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQ3JDO0NBQ0EsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQztDQUM3QixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0NBQ2hDLGdCQUFnQixJQUFJLENBQUMsVUFBVSxHQUFFO0NBQ2pDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQzlDLHFCQUFxQixJQUFJLENBQUMsS0FBSyxHQUFFO0NBQ2pDLGFBQWE7Q0FDYixTQUFTLE1BQU07Q0FDZjtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQzlCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRTtDQUN6RDtBQUNBO0NBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZEO0NBQ0E7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQ3ZDO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHO0NBQ3JDLG9CQUFvQixJQUFJLENBQUMsS0FBSyxHQUFFO0NBQ2hDLG9CQUFvQixJQUFJLENBQUMsVUFBVSxHQUFFO0NBQ3JDO0NBQ0EsaUJBQWlCO0NBQ2pCLGFBQWE7Q0FDYjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLEdBQUcsQ0FBQztBQUMvQjtDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO0NBQzlCLFlBQVksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0NBQzlCLFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM5QixZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkM7Q0FDQSxTQUFTLE1BQU0sSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQ3RDO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0NBQ3BDLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMvQixZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUM3QixnQkFBZ0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNuQztDQUNBLGdCQUFnQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUNuRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUN0RSxhQUFhO0NBQ2I7Q0FDQSxTQUFTLE1BQU07QUFDZjtDQUNBO0NBQ0EsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlCLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDbkM7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztDQUNoRCxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCO0NBQ0EsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3RDLFFBQVEsSUFBSSxJQUFJLEtBQUssT0FBTyxHQUFHLE9BQU8sS0FBSyxDQUFDO0NBQzVDLFFBQVEsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztDQUM5QixRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Q0FDMUIsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQjtDQUNBO0NBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFVBQVUsQ0FBQyxFQUFFLElBQUksR0FBRztBQUN4QjtDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztDQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxPQUFPLElBQUk7Q0FDbkIsWUFBWSxLQUFLLENBQUM7Q0FDbEIsZ0JBQWdCLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUN2QyxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLENBQUM7Q0FDbEIsZ0JBQWdCLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztDQUN6QyxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLENBQUM7Q0FDbEIsZ0JBQWdCLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztDQUN6QyxZQUFZLE1BQU07QUFDbEI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDekM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsT0FBTyxJQUFJO0NBQ25CLFlBQVksS0FBSyxDQUFDO0NBQ2xCLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDckMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztDQUM1QyxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLENBQUM7Q0FDbEIsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUN6QyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDO0NBQzdDLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssQ0FBQztDQUNsQixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0NBQzNDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7Q0FDN0MsWUFBWSxNQUFNO0FBQ2xCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7Q0FDQSxRQUFRLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7Q0FDL0YsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN4QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ3JCO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN2QztDQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUMvRDtDQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQy9EO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDaEU7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNqRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQy9DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDOUMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0NBQ3ZELFFBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0NBQy9ELFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BEO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRTtDQUN2QyxZQUFZLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ3hDLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUc7QUFDOUI7Q0FDQSxZQUFZLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUM7Q0FDN0QsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQztDQUNwRCxZQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDO0NBQ3JELFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUM7Q0FDekQsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUTtDQUNqRCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQzVFO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7Q0FDcEIsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQztDQUNBLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0IsWUFBWSxJQUFJLEdBQUcs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Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztDQUMxQixRQUFRLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0NBQy9DO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUUsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFDO0NBQzVGLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUU7QUFDNUQ7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRTtDQUNoQixRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ25DLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNsQyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxD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SSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0I7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksWUFBWSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDNUIsUUFBUSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDeEU7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxPQUFPO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDNUI7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FB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QUFLLENBQUMsRUFBRTtDQUM1QixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDZixRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztDQUNoQyxPQUFPO0FBQ1A7Q0FDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUM3RDtDQUNBLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDL0MsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztDQUN6QyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0NBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFB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QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVFO0NBQ0E7Q0FDQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0NBQ0E7Q0FDQSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RDtDQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNoRCxNQUFNLElBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDM0Q7Q0FDQSxNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRDtDQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEM7Q0FDQSxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ2hCLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtDQUNwRCxRQUFRLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDOUMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2pFO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENB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LElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUN4RCxRQUFRLE1BQU07Q0FDZCxNQUFNLEtBQUssQ0FBQztDQUNaO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDdEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUM1RCxRQUFRLE1BQU07Q0FDZCxLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO0NBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDaEY7QUFDQTtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDcEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUs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QUFFLENBQUM7Q0FDdkMsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPO0FBQ2xDO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUMxQixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQy9CLFlBQVksSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzdELFlBQVksT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3ZDLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQztDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7Q0FDaEMsUUFBUSxJQUFJ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LENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM3QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDckMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQztDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QjtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztDQUNoRDtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQztBQUNqRDtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7Q0FD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QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDM0IsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7Q0FDN0IsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBQztDQUM5QyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDdkIsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEtBQUs7Q0FDdEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7Q0FDMUIsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztDQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtDQUM3QixZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFDO0NBQ2xDLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUU7Q0FDNUQsU0FBUyxNQUFNO0NBQ2YsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzNCLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxFQUFFLENBQUM7QUFDbEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBSztBQUN6QztDQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQjtDQUNBLFlBQVksQ0FBQyxHQUFHLEVBQUM7Q0FDakIsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBSztDQUMzRTtDQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFO0NBQzFCLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0NBQ3hDLGFBQWEsTUFBTTtDQUNuQixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUM7Q0FDckIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0NBQzdCLGFBQWE7QUFDYjtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSTtBQUM1QztDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxDQUFDO0FBQ2hCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBTztDQUM5QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDbEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakM7Q0FDQSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzlCO0NBQ0EsWUFBWSxRQUFRLENBQUM7QUFDckI7Q0FDQSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0NBQzdGLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU07Q0FDbEcsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtDQUMvRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0FBQ25HO0NBQ0EsYUFBYTtBQUNiO0NBQ0EsWUFBWSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFDO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRTtDQUNyQixRQUFRLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRTtBQUMzQjtDQUNBLEtBQUs7QUFDTDtBQUNBO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDN0M7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQztDQUM3RCxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUMzQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQztDQUNoRSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUc7Q0FDMUIsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztDQUNoRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDdEIsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsR0FBRztDQUNsRCxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQzlDLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQzFCLGFBQWE7Q0FDYixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTztBQUN6QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Q0FDcEMsUUFBUSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckI7Q0FDQSxRQUFXLElBQVcsSUFBSTtBQUMxQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN2QjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0M7Q0FDQSxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNyQixnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQzdELGFBQWEsTUFBTTtDQUNuQixnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQzdELGFBQWE7QUFDYjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0NBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDM0QsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDMVRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDL0IsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFFO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0NBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7Q0FDQTtBQUNBO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlGO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0NBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0NB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QyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQzlEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7Q0FDaEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUU7Q0FDcEU7Q0FDQSxZQUFZLE1BQU07Q0FDbEIsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztDQUMxQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Q0FDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkc7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNwSDtDQUNBO0FBQ0E7Q0FD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QSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7Q0FDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO0FBQzVDO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3BFO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7Q0FDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDZjtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDdkU7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztDQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNO0NBQ2YsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLGFBQWEsQ0FBQztBQUN2RTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN2RCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztDQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztDQUNuQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0NBQ25CLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzdCO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pCO0NBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHO0NBQzVCLE1BQU0sS0FBSztDQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO0NBQ3BCLFFBQVEsK0NBQStDO0NBQ3ZELFFBQVEsRUFBRSxDQUFDLE9BQU87Q0FDbEIsUUFBUSxJQUFJO0NBQ1osUUFBUSxJQUFJLENBQUMsTUFBTTtDQUNuQixLQUFLLENBQUM7QUFDTjtDQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsR0FBRztDQUNqQyxNQUFNLEtBQUs7Q0FDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztDQUNwQixRQUFRLDBEQUEwRDtDQUNsRSxLQUFLLENBQUM7Q0FDTjtDQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2hEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0NBQ3hCLElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxvQ0FBb0MsR0FBRyxFQUFFLENBQUM7Q0FDNUUsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHO0NBQzFCLE1BQU0sS0FBSztDQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLHNCQUFzQjtDQUN4RCxLQUFLLENBQUM7Q0FDTixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHO0NBQzdCLE1BQU0sS0FBSztDQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO0NBQ3BCLFFBQVEsd0JBQXdCO0NBQ2hDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCLFFBQVEsNENBQTRDO0NBQ3BELFFBQVEsRUFBRSxDQUFDLFVBQVU7Q0FDckIsUUFBUSxHQUFHO0NBQ1gsS0FBSyxDQUFDO0NBQ04sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUM7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUc7Q0FDM0IsTUFBTSxLQUFLO0NBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7Q0FDcEIsUUFBUSxhQUFhO0NBQ3JCLFFBQVEsRUFBRSxDQUFDLE1BQU07Q0FDakIsUUFBUSw0QkFBNEI7Q0FDcEMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDekIsUUFBUSxrQkFBa0I7Q0FDMUIsS0FBSyxDQUFDO0NBQ04sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0M7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3hEO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0NBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRztDQUMzQixNQUFNLEtBQUs7Q0FDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRztDQUNsQixRQUFRLHFFQUFxRTtDQUM3RSxRQUFRLENBQUM7Q0FDVCxRQUFRLGdDQUFnQztDQUN4QyxRQUFRLENBQUM7Q0FDVCxRQUFRLHFDQUFxQztDQUM3QyxRQUFRLElBQUksQ0FBQyxFQUFFO0NBQ2YsUUFBUSxrQkFBa0I7Q0FDMUIsU0FBUyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNyQixRQUFRLFlBQVk7Q0FDcEIsUUFBUSxFQUFFLENBQUMsSUFBSTtDQUNmLFFBQVEsR0FBRztDQUNYLEtBQUssQ0FBQztDQUNOLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQzFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU07Q0FDekMsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztDQUMxQixRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztBQUNqRDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDM0QsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNsRTtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Q0FDaEQsTUFBTSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwRTtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtDQUM1QixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7Q0FDaEQsS0FBSyxNQUFNO0NBQ1gsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0NBQ3RDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztDQUN4QyxNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZCLEtBQUs7QUFDTDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVTtDQUNuQixNQUFNLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztDQUNuRSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekU7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNwQjtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN6QztDQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNwQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7Q0FDekIsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDO0NBQ3RCLE1BQU0sSUFBSSxFQUFFLGFBQWE7Q0FDekIsTUFBTSxPQUFPLEVBQUUsQ0FBQztDQUNoQixNQUFNLE9BQU8sRUFBRSxDQUFDO0NBQ2hCLE1BQU0sS0FBSyxFQUFFLENBQUM7Q0FDZCxNQUFNLEdBQUcsRUFBRSxJQUFJO0NBQ2YsTUFBTSxPQUFPLEVBQUUsR0FBRztDQUNsQixLQUFLLENBQUMsQ0FBQztDQUNQLEdBQUc7QUFDSDtDQUNBLEVBQUUsZ0JBQWdCLEdBQUc7Q0FDckIsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDO0NBQ3RCLE1BQU0sSUFBSSxFQUFFLGFBQWE7Q0FDekIsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0NBQ2pCLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztDQUNqQixNQUFNLEtBQUssRUFBRSxDQUFDO0NBQ2QsTUFBTSxHQUFHLEVBQUUsSUFBSTtDQUNmLE1BQU0sT0FBTyxFQUFFLEdBQUc7Q0FDbEIsS0FBSyxDQUFDLENBQUM7Q0FDUCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0NBQ3ZCO0FBQ0E7Q0FDQTtDQUNBO0NBQ0EsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDO0NBQ3RCLE1BQU0sSUFBSSxFQUFFLFdBQVc7Q0FDdkIsTUFBTSxPQUFPLEVBQUUsQ0FBQztDQUNoQixNQUFNLE9BQU8sRUFBRSxDQUFDO0NBQ2hCLE1BQU0sS0FBSyxFQUFFLENBQUM7Q0FDZCxNQUFNLEdBQUcsRUFBRSxJQUFJO0NBQ2YsTUFBTSxPQUFPLEVBQUUsR0FBRztDQUNsQixLQUFLLENBQUMsQ0FBQztDQUNQLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7Q0FDZixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3RDLElBQUksSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0NBQzlDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hCO0NBQ0EsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUM1QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLGFBQWEsR0FBRztDQUNsQixJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Q0FDM0MsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVO0NBQ3hDLFFBQVEsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO0NBQ25ELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVTtDQUNuQyxRQUFRLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztDQUNuRCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7Q0FDN0U7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0NBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO0NBQzVDLEdBQUc7QUFDSDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxNQUFNLEdBQUcsRUFBRTtBQUNiO0NBQ0EsRUFBRSxVQUFVLEdBQUc7Q0FDZixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGVBQWU7Q0FDMUMsTUFBTSw4QkFBOEI7Q0FDcEMsTUFBTSxRQUFRO0NBQ2QsS0FBSyxDQUFDO0NBQ04sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzRTtDQUNBO0NBQ0EsR0FBRztBQUNIO0NBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFO0NBQ2QsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLE9BQU87QUFDckM7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzlELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztDQUN0QyxHQUFHO0FBQ0g7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxNQUFNLEdBQUc7Q0FDWCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztDQUN4QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLE9BQU8sR0FBRztDQUNaLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNyQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRTtDQUM1QixJQUFJLElBQUksSUFBSTtDQUNaLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO0NBQ3BCLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0NBQzVDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQ2xFLE9BQU8sQ0FBQztDQUNSO0NBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7Q0FDcEIsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Q0FDNUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Q0FDN0MsT0FBTyxDQUFDO0NBQ1I7QUFDQTtDQUNBO0NBQ0EsR0FBRztBQUNIO0NBQ0EsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0NBQ2Y7Q0FDQSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUNwQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN2QyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUU7Q0FDZixJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0NBQ3JCLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hELEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Q0FDckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0NBQzdDLEdBQUc7QUFDSDtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtDQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxRQUFRLEdBQUcsU0FBUyxDQUFDO0NBQzdELEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7Q0FDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxRQUFRLENBQUM7Q0FDN0QsR0FBRztBQUNIO0NBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0NBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7Q0FDOUIsSUFBSSxPQUFPLElBQUksQ0FBQztDQUNoQixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtDQUNWLElBQUksSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0NBQzNCLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN6QjtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRTtDQUN2QixNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsTUFBTSxRQUFRLENBQUM7Q0FDZixRQUFRLEtBQUssS0FBSztDQUNsQixVQUFVLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUN6QixVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0NBQ25ELFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7Q0FDdkQsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUM1QyxVQUFVLE1BQU07QUFDaEI7Q0FDQTtDQUNBLFFBQVEsS0FBSyxZQUFZO0NBQ3pCLFVBQVUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztDQUNwQyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0NBQ25ELFVBQVUsTUFBTTtDQUNoQixRQUFRLEtBQUssWUFBWTtDQUN6QixVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0NBQ25ELFVBQVUsTUFBTTtBQUNoQjtDQUNBO0NBQ0EsUUFBUSxLQUFLLFlBQVk7Q0FDekIsVUFBVSxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0NBQ2xDLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7Q0FDM0QsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUNoRCxVQUFVLE1BQU07Q0FDaEI7Q0FDQSxPQUFPO0FBQ1A7Q0FDQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7Q0FDeEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLFVBQVUsQ0FBQztDQUN0QixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsV0FBVyxHQUFHO0NBQ2hCLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDO0NBQzFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtDQUN0QjtDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN6QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDekIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztDQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEI7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDbkIsSUFBSSxPQUFPLElBQUksQ0FBQztDQUNoQixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtDQUNkLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUN2QixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzVDO0NBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUN6QjtDQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2xCO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BFO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxRQUFRLENBQUM7Q0FDMUUsU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUMvQztDQUNBLElBQUksT0FBTyxJQUFJLENBQUM7Q0FDaEIsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7Q0FDakI7QUFDQTtDQUNBO0NBQ0E7Q0FDQSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7Q0FDQSxJQUFJLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztDQUN2QixJQUFJLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUM1QjtDQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDL0QsSUFBSSxJQUFJLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtDQUN6QyxNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztDQUN6QixNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0NBQy9CLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO0FBQ3RCO0NBQ0EsSUFBSSxRQUFRLElBQUk7Q0FDaEIsTUFBTSxLQUFLLFNBQVM7Q0FDcEIsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdkU7Q0FDQSxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDNUQsUUFBUSxJQUFJLElBQUksS0FBSyxPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVE7Q0FDN0QsVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7Q0FDekIsVUFBVSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNsQyxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE1BQU07Q0FDZCxNQUFNLEtBQUssUUFBUTtDQUNuQixRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztDQUMzQixRQUFRLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztDQUNuRSxRQUFRLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRTtDQUNsQyxVQUFVLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ25ELFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU07Q0FDL0MsY0FBYyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztDQUNoQyxjQUFjLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakM7Q0FDQSxVQUFVLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUN0QixVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDM0IsVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3hCLFNBQVM7QUFDVDtDQUNBLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxRQUFRO0NBQ25CLFFBQVEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0NBQ25FLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0NBQ25FLFFBQVEsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3ZELFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzlFO0NBQ0EsUUFBUSxNQUFNO0NBQ2QsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztDQUNuQyxJQUFJLElBQUksV0FBVyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbkM7Q0FDQSxJQUFJLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3hDLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDMUM7Q0FDQSxJQUFJLElBQUksTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM1QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0NBQ3JCLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0NBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO0NBQy9CLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQ3pCLE1BQU0sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FFMUIsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztDQUM5QixLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFO0NBQ3JCLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUMxQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDMUIsS0FBSztDQUNMLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtDQUNiLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUM1QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3pCLElBQUksT0FBTyxJQUFJLENBQUM7Q0FDaEIsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7Q0FDZixJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPO0FBQzdCO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNyQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDN0IsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDO0NBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN4QjtDQUNBO0NBQ0EsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLEdBQUcsR0FBRztDQUNSO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztDQUN0QixJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN0QjtDQUNBLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7Q0FDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCO0NBQ0EsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUM5QyxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7Q0FDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztDQUMxRSxXQUFXO0NBQ1gsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN6QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3pCO0NBQ0EsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUNoRCxPQUFPO0NBQ1AsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQjtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLE9BQU87QUFDM0I7Q0FDQSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ25DLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoQjtDQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDekI7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxDQUFDO0NBQ2IsR0FBRztBQUNIO0NBQ0E7QUFDQTtDQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtDQUNaLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUMvQixHQUFHO0FBQ0g7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0NBQ2QsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqQyxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0NBQ25CO0NBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hELE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzdCLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ2xCLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVjtBQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNO0NBQzNCLE1BQU0sSUFBSSxDQUFDO0FBQ1g7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDaEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUM1QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN4QyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUNyQixLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDeEIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDaEIsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNqQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLE1BQU0sR0FBRztDQUNYLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3pDLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxHQUFHO0NBQ1osSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDakIsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUNwRSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdkIsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLFNBQVMsR0FBRztDQUNkLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTztBQUNqQztDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Q0FDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Q0FDdkMsR0FBRztBQUNIO0NBQ0EsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFO0NBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTztBQUNqQztDQUNBLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDdEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDckI7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7Q0FDZixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckIsTUFBTSxPQUFPO0NBQ2IsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztDQUM1QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDaEIsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtDQUN0QyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ25DLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUTtDQUN6QixVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDdEUsT0FBTztDQUNQLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtDQUNkLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2xDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFO0NBQ1gsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUI7Q0FDQSxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQztDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7Q0FDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7Q0FDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztDQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNoRCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDekIsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0NBQ1osSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDNUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdB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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbG9vcDogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKFIuaXNMb29wKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUi5sb29wKTtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBSLnVwZGF0ZSgpO1xyXG4gICAgLy8gaWYgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gYSB2YWx1ZSBnZW5lcmF0ZWQgZXh0ZXJuYWxseSwgdGhlIEdVSSBuZWVkcyB0byBiZSByZWRyYXduXHJcbiAgICBpZiAoUi51aVswXSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIlxyXG5pbXBvcnQgeyBCb29sIH0gZnJvbSAnLi4vcHJvdG8vQm9vbC5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL3Byb3RvL0J1dHRvbi5qcyc7XHJcbmltcG9ydCB7IENpcmN1bGFyIH0gZnJvbSAnLi4vcHJvdG8vQ2lyY3VsYXIuanMnO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL3Byb3RvL0NvbG9yLmpzJztcclxuaW1wb3J0IHsgRnBzIH0gZnJvbSAnLi4vcHJvdG8vRnBzLmpzJztcclxuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9wcm90by9HcmFwaC5qcyc7XHJcbmltcG9ydCB7IEdyb3VwICB9IGZyb20gJy4uL3Byb3RvL0dyb3VwLmpzJztcclxuaW1wb3J0IHsgSm95c3RpY2sgfSBmcm9tICcuLi9wcm90by9Kb3lzdGljay5qcyc7XHJcbmltcG9ydCB7IEtub2IgfSBmcm9tICcuLi9wcm90by9Lbm9iLmpzJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uL3Byb3RvL0xpc3QuanMnO1xyXG5pbXBvcnQgeyBOdW1lcmljIH0gZnJvbSAnLi4vcHJvdG8vTnVtZXJpYy5qcyc7XHJcbmltcG9ydCB7IFNsaWRlIH0gZnJvbSAnLi4vcHJvdG8vU2xpZGUuanMnO1xyXG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9wcm90by9UZXh0SW5wdXQuanMnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL3Byb3RvL1RpdGxlLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0LmpzJztcclxuaW1wb3J0IHsgQml0bWFwIH0gZnJvbSAnLi4vcHJvdG8vQml0bWFwLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICcuLi9wcm90by9TZWxlY3Rvci5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi4vcHJvdG8vRW1wdHkuanMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vcHJvdG8vSXRlbS5qcyc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi9wcm90by9HcmlkLmpzJztcclxuaW1wb3J0IHsgUGFkMkQgfSBmcm9tICcuLi9wcm90by9QYWQyRC5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcblxyXG5leHBvcnQgY29uc3QgYWRkID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGFyZ3VtZW50czsgXHJcblxyXG4gICAgICAgIGxldCB0eXBlLCBvLCByZWYgPSBmYWxzZSwgbiA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVswXSA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgICAgICB0eXBlID0gYVswXTtcclxuICAgICAgICAgICAgbyA9IGFbMV0gfHwge307XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBhWzBdID09PSAnb2JqZWN0JyApeyAvLyBsaWtlIGRhdCBndWlcclxuXHJcbiAgICAgICAgICAgIHJlZiA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoYSwge30pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzJdLnR5cGUgPyBhWzJdLnR5cGUgOiBhdXRvVHlwZSggYVswXVthWzFdXSwgYVsyXSApO1xyXG5cclxuICAgICAgICAgICAgbyA9IGFbMl07XHJcbiAgICAgICAgICAgIG8ubmFtZSA9IGFbMV07XHJcbiAgICAgICAgICAgIGlmIChvLmhhc093blByb3BlcnR5KFwiZGlzcGxheU5hbWVcIikpIG8ubmFtZSA9IG8uZGlzcGxheU5hbWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ2xpc3QnICYmICFvLmxpc3QgKXsgby5saXN0ID0gYVswXVthWzFdXTsgfVxyXG4gICAgICAgICAgICBlbHNlIG8udmFsdWUgPSBhWzBdW2FbMV1dO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2dyb3VwJyApeyBcclxuICAgICAgICAgICAgby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIC8vby5keCA9IDhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCggbmFtZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnYm9vbCc6IGNhc2UgJ2Jvb2xlYW4nOiBuID0gbmV3IEJvb2wobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdidXR0b24nOiBuID0gbmV3IEJ1dHRvbihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NpcmN1bGFyJzogbiA9IG5ldyBDaXJjdWxhcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzogbiA9IG5ldyBDb2xvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Zwcyc6IG4gPSBuZXcgRnBzKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JhcGgnOiBuID0gbmV3IEdyYXBoKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOiBuID0gbmV3IEdyb3VwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnam95c3RpY2snOiBuID0gbmV3IEpveXN0aWNrKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAna25vYic6IG4gPSBuZXcgS25vYihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xpc3QnOiBuID0gbmV3IExpc3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdudW1lcmljJzogY2FzZSAnbnVtYmVyJzogbiA9IG5ldyBOdW1lcmljKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2xpZGUnOiBuID0gbmV3IFNsaWRlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGV4dElucHV0JzogY2FzZSAnc3RyaW5nJzogbiA9IG5ldyBUZXh0SW5wdXQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6IGNhc2UgJ3RleHQnOiBuID0gbmV3IFRpdGxlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzogbiA9IG5ldyBTZWxlY3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdiaXRtYXAnOiBuID0gbmV3IEJpdG1hcChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdG9yJzogbiA9IG5ldyBTZWxlY3RvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzogY2FzZSAnc3BhY2UnOiBuID0gbmV3IEVtcHR5KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaXRlbSc6IG4gPSBuZXcgSXRlbShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyaWQnOiBuID0gbmV3IEdyaWQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwYWQyZCc6IGNhc2UgJ3BhZCc6IG4gPSBuZXcgUGFkMkQobyk7IGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggbiAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGlmKCByZWYgKSBuLnNldFJlZmVyZW5jeSggYVswXSwgYVsxXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gbjtcclxuXHJcbiAgICAgICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGF1dG9UeXBlID0gZnVuY3Rpb24gKCB2LCBvICkge1xyXG5cclxuICAgIGxldCB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIGlmKCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkgdHlwZSA9ICdib29sJyBcclxuICAgIGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgaWYoIHYuc3Vic3RyaW5nKDAsMSkgPT09ICcjJyApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3N0cmluZycgXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ251bWJlcicgKXsgXHJcblxyXG4gICAgICAgIGlmKCBvLmN0eXBlICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ2FycmF5JyAmJiB2IGluc3RhbmNlb2YgQXJyYXkgKXtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB2WzBdID09PSAnbnVtYmVyJyApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgaWYoIHR5cGVvZiB2WzBdID09PSAnc3RyaW5nJyApIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcblxyXG4gICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHlwZVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBhZGQgfSBmcm9tIFwiLi9hZGQuanNcIjtcclxuaW1wb3J0IHsgVjIgfSBmcm9tIFwiLi9WMi5qc1wiO1xyXG5cclxuLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIEd1aSB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICB0aGlzLmlzR3VpID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBcImd1aVwiO1xyXG5cclxuICAgIC8vIGZvciAzZFxyXG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xyXG4gICAgdGhpcy5zY3JlZW4gPSBudWxsO1xyXG4gICAgdGhpcy5wbGFuZSA9IG8ucGxhbmUgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjb2xvclxyXG4gICAgaWYgKG8uY29uZmlnKSBvLmNvbG9ycyA9IG8uY29uZmlnO1xyXG4gICAgaWYgKG8uY29sb3JzKSB0aGlzLnNldENvbmZpZyhvLmNvbG9ycyk7XHJcbiAgICBlbHNlIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcblxyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMuY3NzID0gVG9vbHMuY2xvbmVDc3MoKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG4gICAgdGhpcy50bXBBZGQgPSBudWxsO1xyXG4gICAgLy90aGlzLnRtcEggPSAwXHJcblxyXG4gICAgdGhpcy5pc0NhbnZhcyA9IG8uaXNDYW52YXMgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIE1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIC8vIG9wdGlvbiB0byBkZWZpbmUgd2hldGhlciB0aGUgZXZlbnQgbGlzdGVuZXJzIHNob3VsZCBiZSBhZGRlZCBvciBub3RcclxuICAgIFJvb3RzLmFkZERPTUV2ZW50TGlzdGVuZXJzID0gby5oYXNPd25Qcm9wZXJ0eShcImFkZERPTUV2ZW50TGlzdGVuZXJzXCIpXHJcbiAgICAgID8gby5hZGRET01FdmVudExpc3RlbmVyc1xyXG4gICAgICA6IHRydWU7XHJcblxyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG5cclxuICAgIHRoaXMuZm9yY2VIZWlnaHQgPSBvLm1heEhlaWdodCB8fCAwO1xyXG4gICAgdGhpcy5sb2NrSGVpZ2h0ID0gby5sb2NrSGVpZ2h0IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNJdGVtTW9kZSA9IG8uaXRlbU1vZGUgIT09IHVuZGVmaW5lZCA/IG8uaXRlbU1vZGUgOiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmNuID0gXCJcIjtcclxuXHJcbiAgICAvLyBzaXplIGRlZmluZVxyXG4gICAgdGhpcy5zaXplID0gVG9vbHMuc2l6ZTtcclxuICAgIGlmIChvLnAgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnAgPSBvLnA7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS53ID0gby53O1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUuaCA9IG8uaDtcclxuICAgIGlmIChvLnMgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnMgPSBvLnM7XHJcblxyXG4gICAgdGhpcy5zaXplLmggPSB0aGlzLnNpemUuaCA8IDExID8gMTEgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICAvLyBsb2NhbCBtb3VzZSBhbmQgem9uZVxyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG4gICAgdGhpcy56b25lID0geyB4OiAwLCB5OiAwLCB3OiB0aGlzLnNpemUudywgaDogMCB9O1xyXG5cclxuICAgIC8vIHZpcnR1YWwgbW91c2VcclxuICAgIHRoaXMubW91c2UgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmggPSAwO1xyXG4gICAgLy90aGlzLnByZXZZID0gLTE7XHJcbiAgICB0aGlzLnN3ID0gMDtcclxuXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICAvLyBib3R0b20gYW5kIGNsb3NlIGhlaWdodFxyXG4gICAgdGhpcy5pc1dpdGhDbG9zZSA9IG8uY2xvc2UgIT09IHVuZGVmaW5lZCA/IG8uY2xvc2UgOiB0cnVlO1xyXG4gICAgdGhpcy5iaCA9ICF0aGlzLmlzV2l0aENsb3NlID8gMCA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG8uYXV0b1Jlc2l6ZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG8uYXV0b1Jlc2l6ZTtcclxuXHJcbiAgICAvLyBkZWZhdWx0IHBvc2l0aW9uXHJcbiAgICB0aGlzLmlzQ2VudGVyID0gby5jZW50ZXIgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmNzc0d1aSA9XHJcbiAgICAgIG8uY3NzICE9PSB1bmRlZmluZWQgPyBvLmNzcyA6IHRoaXMuaXNDZW50ZXIgPyBcIlwiIDogXCJyaWdodDoxMHB4O1wiO1xyXG5cclxuICAgIHRoaXMuaXNPcGVuID0gby5vcGVuICE9PSB1bmRlZmluZWQgPyBvLm9wZW4gOiB0cnVlO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmRlY2FsID0gMDtcclxuICAgIHRoaXMucmF0aW8gPSAxO1xyXG4gICAgdGhpcy5veSA9IDA7XHJcblxyXG4gICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIHRoaXMuY29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiIHdpZHRoOjBweDsgaGVpZ2h0OmF1dG87IHRvcDowcHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmNvbnRlbnQgK1xyXG4gICAgICAgIFwiOyBcIiArXHJcbiAgICAgICAgdGhpcy5jc3NHdWlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyB0aGlzLmNzcy5idXR0b24gKyAnd2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyQ29udGVudCk7XHJcblxyXG4gICAgLy90aGlzLmlubmVyID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyAnKVxyXG4gICAgdGhpcy51c2VGbGV4ID0gdHJ1ZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/IFwiZGlzcGxheTpmbGV4OyBmbGV4LWZsb3c6IHJvdyB3cmFwO1wiIDogXCJcIjsgLy8nIGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnN0YXJ0OyBhbGlnbi1pdGVtczpzdGFydDtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYWxpZ24taXRlbXM6IGNlbnRlcjsnO1xyXG4gICAgdGhpcy5pbm5lciA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwid2lkdGg6MTAwJTsgbGVmdDowOyBcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuaW5uZXJDb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXIpO1xyXG5cclxuICAgIC8vIHNjcm9sbFxyXG4gICAgdGhpcy5zY3JvbGxCRyA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwicmlnaHQ6MDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSAxKSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7IGRpc3BsYXk6bm9uZTsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYmFja2dyb3VuZCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxCRyk7XHJcblxyXG4gICAgdGhpcy5zY3JvbGwgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJ1dHRvbiArXHJcbiAgICAgICAgXCI7IHJpZ2h0OjJweDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSA0KSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLnNjcm9sbEJHLmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsKTtcclxuXHJcbiAgICAvLyBib3R0b20gYnV0dG9uXHJcbiAgICB0aGlzLmJvdHRvbVRleHQgPSBvLmJvdHRvbVRleHQgfHwgW1wib3BlblwiLCBcImNsb3NlXCJdO1xyXG5cclxuICAgIGxldCByID0gY2MucmFkaXVzO1xyXG4gICAgdGhpcy5ib3R0b20gPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dCArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6YXV0bzsgYm90dG9tOjA7IGxlZnQ6MDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGhlaWdodDpcIiArXHJcbiAgICAgICAgdGhpcy5iaCArXHJcbiAgICAgICAgXCJweDsgbGluZS1oZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmJoIC0gNSkgK1xyXG4gICAgICAgIFwicHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTsgLy8gYm9yZGVyLXRvcDoxcHggc29saWQgJytUb29scy5jb2xvcnMuc3Ryb2tlKyc7Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5ib3R0b20pO1xyXG4gICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIC8vXHJcblxyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnBhcmVudCAhPT0gdW5kZWZpbmVkID8gby5wYXJlbnQgOiBudWxsO1xyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnRhcmdldCAhPT0gdW5kZWZpbmVkID8gby50YXJnZXQgOiB0aGlzLnBhcmVudDtcclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgPT09IG51bGwgJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5wYXJlbnQgPSBkb2N1bWVudC5ib2R5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcyAmJiB0aGlzLnBhcmVudCA9PT0gbnVsbCkgdGhpcy5pc0NhbnZhc09ubHkgPSB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XHJcbiAgICAgIG8udHJhbnNpdGlvbiA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGVpZ2h0IHRyYW5zaXRpb25cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9XHJcbiAgICAgIG8udHJhbnNpdGlvbiAhPT0gdW5kZWZpbmVkID8gby50cmFuc2l0aW9uIDogVG9vbHMudHJhbnNpdGlvbjtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24pIHNldFRpbWVvdXQodGhpcy5hZGRUcmFuc2l0aW9uLmJpbmQodGhpcyksIDEwMDApO1xyXG5cclxuICAgIHRoaXMuc2V0V2lkdGgoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5tYWtlQ2FudmFzKCk7XHJcblxyXG4gICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlRG93bih4LCB5KSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcmRvd25cIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VNb3ZlKCkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJtb3ZlXCIsXHJcbiAgICAgIGNsaWVudFg6IC0xLFxyXG4gICAgICBjbGllbnRZOiAtMSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcCh4LCB5KSB7XHJcbiAgICAvKlxyXG5cclxuICAgICAgICBjbGllbnRYLGNsaWVudFkgYXJlIG5vIHVzZWQgd2hlbiBpc0NhbnZhcz09dHJ1ZVxyXG4gICAgICAgICovXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcnVwXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0VG9wKHQsIGgpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS50b3AgPSB0ICsgXCJweFwiO1xyXG4gICAgaWYgKGggIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JjZUhlaWdodCA9IGg7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFkZFRyYW5zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmJvdHRvbS5zdHlsZS50cmFuc2l0aW9uID0gXCJ0b3AgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgLy90aGlzLmJvdHRvbS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBSb290cy5yZXNpemUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uYWRkVHJhbnNpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkRyYXcoKSB7fVxyXG5cclxuICBtYWtlQ2FudmFzKCkge1xyXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXHJcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFxyXG4gICAgICBcImNhbnZhc1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLnpvbmUudztcclxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyggdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCApXHJcbiAgfVxyXG5cclxuICBkcmF3KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5jYW52YXMgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuem9uZS53O1xyXG4gICAgbGV0IGggPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG4gICAgUm9vdHMudG9DYW52YXModGhpcywgdywgaCwgZm9yY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vXHJcblxyXG4gIGdldERvbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBub01vdXNlKCkge1xyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICB9XHJcblxyXG4gIHNldE1vdXNlKHV2LCBmbGlwID0gdHJ1ZSkge1xyXG4gICAgaWYgKGZsaXApXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgLSBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICAvL3RoaXMubW91c2Uuc2V0KCBtLngsIG0ueSApO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJzZXRNb3VzZSBcIit1di54K1wiIFwiK3V2LnkpXHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcobykge1xyXG4gICAgLy8gcmVzZXQgdG8gZGVmYXVsdCB0ZXh0XHJcbiAgICBUb29scy5zZXRUZXh0KCk7XHJcbiAgICB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29sb3JzKG8pIHtcclxuICAgIGZvciAobGV0IGMgaW4gbykge1xyXG4gICAgICBpZiAodGhpcy5jb2xvcnNbY10pIHRoaXMuY29sb3JzW2NdID0gb1tjXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdykge1xyXG4gICAgVG9vbHMuc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KTtcclxuICB9XHJcblxyXG4gIGhpZGUoYikge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSBiID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheSh2ID0gZmFsc2UpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gdiA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIjtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKGYpIHtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBmIHx8IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNUWUxFU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW9kZShuKSB7XHJcbiAgICBsZXQgbmVlZENoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgaWYgKG4gIT09IHRoaXMuY24pIHtcclxuICAgICAgdGhpcy5jbiA9IG47XHJcblxyXG4gICAgICBzd2l0Y2ggKG4pIHtcclxuICAgICAgICBjYXNlIFwiZGVmXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ3Njcm9sbERlZic6IHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zY3JvbGw7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxPdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJucy1yZXNpemVcIik7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbERvd25cIjpcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdib3R0b21EZWYnOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImJvdHRvbU92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcInBvaW50ZXJcIik7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9jYXNlICdib3R0b21Eb3duJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNlbGVjdDsgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSAnIzAwMCc7IGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuZWVkQ2hhbmdlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmVlZENoYW5nZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFRBUkdFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2xlYXJUYXJnZXQoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50ID09PSAtMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHRoaXMucHJvdG8ucykge1xyXG4gICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuXHJcbiAgICAvLy9jb25zb2xlLmxvZyh0aGlzLmlzRG93bikvL2lmKHRoaXMuaXNEb3duKVJvb3RzLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSb290cy5jdXJzb3IoKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgWk9ORSBURVNUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0ZXN0Wm9uZShlKSB7XHJcbiAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICBpZiAobC54ID09PSAtMSAmJiBsLnkgPT09IC0xKSByZXR1cm4gXCJcIjtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IFwiXCI7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLmlzU2Nyb2xsID8gdGhpcy56b25lLncgLSB0aGlzLnNpemUucyA6IHRoaXMuem9uZS53O1xyXG5cclxuICAgIGlmIChsLnkgPiB0aGlzLnpvbmUuaCAtIHRoaXMuYmggJiYgbC55IDwgdGhpcy56b25lLmgpIG5hbWUgPSBcImJvdHRvbVwiO1xyXG4gICAgZWxzZSBuYW1lID0gbC54ID4gcyA/IFwic2Nyb2xsXCIgOiBcImNvbnRlbnRcIjtcclxuXHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgLy9pZiggdGhpcy5jbGVhbm5pbmcgKSByZXR1cm5cclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwiR3VpLmhhbmRsZUV2ZW50XCIpXHJcbiAgICAvL2NvbnNvbGUubG9nKGUpO1xyXG4gICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IHByb3RvQ2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcIm1vdXNldXBcIiAmJiB0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmICF0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzRG93biAmJiB0aGlzLmlzTmV3VGFyZ2V0KSB7XHJcbiAgICAgIFJvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuO1xyXG5cclxuICAgIHN3aXRjaCAobmFtZSkge1xyXG4gICAgICBjYXNlIFwiY29udGVudFwiOlxyXG4gICAgICAgIGUuY2xpZW50WSA9IHRoaXMuaXNTY3JvbGwgPyBlLmNsaWVudFkgKyB0aGlzLmRlY2FsIDogZS5jbGllbnRZO1xyXG5cclxuICAgICAgICBpZiAoUm9vdHMuaXNNb2JpbGUgJiYgdHlwZSA9PT0gXCJtb3VzZWRvd25cIikgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByb3RvKSBwcm90b0NoYW5nZSA9IHRoaXMucHJvdG8uaGFuZGxlRXZlbnQoZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIiAmJiAhcHJvdG9DaGFuZ2UgJiYgdGhpcy5pc1Njcm9sbClcclxuICAgICAgICAgIGNoYW5nZSA9IHRoaXMub25XaGVlbChlKTtcclxuXHJcbiAgICAgICAgaWYgKCFSb290cy5sb2NrKSB7XHJcbiAgICAgICAgICB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJib3R0b21PdmVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRoaXMuaXNPcGVuID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICAgICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICAgICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgICAgICAgIC8vdGhpcy5zZXRIZWlnaHQoKTtcclxuICAgICAgICAgIHRoaXMuY2FsYygpO1xyXG4gICAgICAgICAgdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwic2Nyb2xsXCI6XHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJzY3JvbGxPdmVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJzY3JvbGxEb3duXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIpIGNoYW5nZSA9IHRoaXMub25XaGVlbChlKTtcclxuICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMudXBkYXRlKGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy5zaCAqIDAuNSk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmIChwcm90b0NoYW5nZSkgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXl1cFwiKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmIChjaGFuZ2UpIHRoaXMuZHJhdygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV4dChlLCBjaGFuZ2UpIHtcclxuICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCh0aGlzLnVpcywgZSk7XHJcblxyXG4gICAgaWYgKG5leHQgIT09IHRoaXMuY3VycmVudCkge1xyXG4gICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLnByb3RvID0gdGhpcy51aXNbdGhpcy5jdXJyZW50XTtcclxuICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uV2hlZWwoZSkge1xyXG4gICAgdGhpcy5veSArPSAyMCAqIGUuZGVsdGE7XHJcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLm95KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHJlc2V0KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5pc1Jlc2V0KSByZXR1cm47XHJcblxyXG4gICAgLy90aGlzLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgIC8vUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgbGV0IHIgPSB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICBsZXQgcjIgPSB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcblxyXG4gICAgaWYgKHIgfHwgcjIpIHRoaXMuZHJhdyh0cnVlKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG5cclxuICAgIC8vUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQUREIE5PREVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGFkZCgpIHtcclxuICAgIC8vaWYodGhpcy5jbGVhbm5pbmcpIHRoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICBsZXQgYSA9IGFyZ3VtZW50cztcclxuICAgIGxldCBvbnRvcCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0eXBlb2YgYVsxXSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICBhWzFdLmlzVUkgPSB0cnVlO1xyXG4gICAgICBhWzFdLm1haW4gPSB0aGlzO1xyXG5cclxuICAgICAgb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYVsxXSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBpZiAoYVsyXSA9PT0gdW5kZWZpbmVkKSBbXS5wdXNoLmNhbGwoYSwgeyBpc1VJOiB0cnVlLCBtYWluOiB0aGlzIH0pO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgIGFbMl0ubWFpbiA9IHRoaXM7XHJcbiAgICAgICAgLy9vbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgICAgb250b3AgPSBhWzJdLm9udG9wID8gYVsyXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHUgPSBhZGQuYXBwbHkodGhpcywgYSk7XHJcblxyXG4gICAgaWYgKHUgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBpZiAob250b3ApIHRoaXMudWlzLnVuc2hpZnQodSk7XHJcbiAgICBlbHNlIHRoaXMudWlzLnB1c2godSk7XHJcblxyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgdGhpcy5pc0VtcHR5ID0gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHU7XHJcbiAgfVxyXG5cclxuICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgcmVtb3ZlKG4pIHtcclxuICAgIGlmIChuLmRpc3Bvc2UpIG4uZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2FsbCBhZnRlciB1aXMgY2xlYXJcclxuXHJcbiAgY2xlYXJPbmUobikge1xyXG4gICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZihuKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIHtcclxuICAgICAgLy90aGlzLmNhbGMoIC0gKHRoaXMudWlzWyBpZCBdLmggKyAxICkgKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZCh0aGlzLnVpc1tpZF0uY1swXSk7XHJcbiAgICAgIHRoaXMudWlzLnNwbGljZShpZCwgMSk7XHJcbiAgICAgIHRoaXMuY2FsYygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gY2xlYXIgYWxsIGd1aVxyXG5cclxuICBlbXB0eSgpIHtcclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSB0cnVlXHJcblxyXG4gICAgLy90aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsXHJcbiAgICAgIGl0ZW07XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpdGVtID0gdGhpcy51aXMucG9wKCk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQoaXRlbS5jWzBdKTtcclxuICAgICAgaXRlbS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyKCkge1xyXG4gICAgdGhpcy5lbXB0eSgpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIyKCkge1xyXG4gICAgc2V0VGltZW91dCh0aGlzLmVtcHR5LmJpbmQodGhpcyksIDApO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5jb250ZW50KTtcclxuICAgIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElURU1TIFNQRUNJQUxcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHJlc2V0SXRlbSgpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5zZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbShuYW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIG5hbWUgPSBuYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZSgwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAodGhpcy51aXNbaV0udmFsdWUgPT09IG5hbWUpIHtcclxuICAgICAgICB0aGlzLnVpc1tpXS5zZWxlY3RlZCh0cnVlKTtcclxuICAgICAgICBpZiAodGhpcy5pc1Njcm9sbClcclxuICAgICAgICAgIHRoaXMudXBkYXRlKGkgKiAodGhpcy51aXNbaV0uaCArIHRoaXMubWFyZ2luKSAqIHRoaXMucmF0aW8pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTQ1JPTExcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHVwU2Nyb2xsKGIpIHtcclxuICAgIHRoaXMuc3cgPSBiID8gdGhpcy5zaXplLnMgOiAwO1xyXG4gICAgdGhpcy5veSA9IGIgPyB0aGlzLm95IDogMDtcclxuICAgIHRoaXMuc2Nyb2xsQkcuc3R5bGUuZGlzcGxheSA9IGIgPyBcImJsb2NrXCIgOiBcIm5vbmVcIjtcclxuXHJcbiAgICBpZiAoYikge1xyXG4gICAgICB0aGlzLnRvdGFsID0gdGhpcy5oO1xyXG5cclxuICAgICAgdGhpcy5tYXhWaWV3ID0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLnJhdGlvID0gdGhpcy5tYXhWaWV3IC8gdGhpcy50b3RhbDtcclxuICAgICAgdGhpcy5zaCA9IHRoaXMubWF4VmlldyAqIHRoaXMucmF0aW87XHJcblxyXG4gICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhWaWV3IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgIHRoaXMub3kgPSBUb29scy5jbGFtcCh0aGlzLm95LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICAgIHRoaXMuc2Nyb2xsQkcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhWaWV3ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLnNjcm9sbC5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLm95KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSh5KSB7XHJcbiAgICB5ID0gVG9vbHMuY2xhbXAoeSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgdGhpcy5kZWNhbCA9IE1hdGguZmxvb3IoeSAvIHRoaXMucmF0aW8pO1xyXG4gICAgdGhpcy5pbm5lci5zdHlsZS50b3AgPSAtdGhpcy5kZWNhbCArIFwicHhcIjtcclxuICAgIHRoaXMuc2Nyb2xsLnN0eWxlLnRvcCA9IE1hdGguZmxvb3IoeSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLm95ID0geTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0laRSBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpcygpIHtcclxuICAgIHJldHVybiBSb290cy5jYWxjVWlzKHRoaXMudWlzLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55KTtcclxuICB9XHJcblxyXG4gIGNhbGMoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG4gICAgdGhpcy50bXAgPSBzZXRUaW1lb3V0KHRoaXMuc2V0SGVpZ2h0LmJpbmQodGhpcyksIDEwKTtcclxuICB9XHJcblxyXG4gIHNldEhlaWdodCgpIHtcclxuICAgIGlmICh0aGlzLnRtcCkgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuXHJcbiAgICB0aGlzLnpvbmUuaCA9IHRoaXMuYmg7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHRoaXMuaCA9IHRoaXMuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbGV0IGhoaCA9IHRoaXMuZm9yY2VIZWlnaHRcclxuICAgICAgICA/IHRoaXMuZm9yY2VIZWlnaHQgKyB0aGlzLnpvbmUueVxyXG4gICAgICAgIDogd2luZG93LmlubmVySGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5tYXhIZWlnaHQgPSBoaGggLSB0aGlzLnpvbmUueSAtIHRoaXMuYmg7XHJcblxyXG4gICAgICBsZXQgZGlmZiA9IHRoaXMuaCAtIHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgaWYgKGRpZmYgPiAxKSB7XHJcbiAgICAgICAgdGhpcy5pc1Njcm9sbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLmJoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cFNjcm9sbCh0aGlzLmlzU2Nyb2xsKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCAtIHRoaXMuYmggKyBcInB4XCI7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggKyBcInB4XCI7XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS50b3AgPSB0aGlzLnpvbmUuaCAtIHRoaXMuYmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9yY2VIZWlnaHQgJiYgdGhpcy5sb2NrSGVpZ2h0KVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLmRyYXcodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNldFdpZHRoKHcpIHtcclxuICAgIGlmICh3KSB0aGlzLnpvbmUudyA9IHc7XHJcblxyXG4gICAgdGhpcy56b25lLncgPSBNYXRoLmZsb29yKHRoaXMuem9uZS53KTtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS53aWR0aCA9IHRoaXMuem9uZS53ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDZW50ZXIpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5tYXJnaW5MZWZ0ID0gLU1hdGguZmxvb3IodGhpcy56b25lLncgKiAwLjUpICsgXCJweFwiO1xyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW1XaWR0aCh3KSB7XHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdGhpcy51aXNbaV0uc2V0U2l6ZSh3KTtcclxuICAgICAgdGhpcy51aXNbaV0uclNpemUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztDQUFBO0NBQ0E7Q0FDQTtBQUNBO0FBQ1ksT0FBQyxRQUFRLEdBQUcsUUFBUTtBQUNoQztDQUNBO0FBQ0E7Q0FDQSxNQUFNLENBQUMsR0FBRztDQUNWLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDUjtDQUNBLEVBQUUsR0FBRyxFQUFFLElBQUk7QUFDWDtDQUNBLEVBQUUsRUFBRSxFQUFFLElBQUk7Q0FDVixFQUFFLElBQUksRUFBRSxLQUFLO0NBQ2IsRUFBRSxLQUFLLEVBQUUsS0FBSztDQUNkLEVBQUUsT0FBTyxF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T0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDekU7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDakM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hCLElBQUksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0NBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDbkQsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0M7Q0FDQSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDcEUsU0FBUyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNyQjtDQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUNsQztDQUNBLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQztDQUN2RSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUM7QUFDdkU7Q0FD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QixRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUc7Q0FDdEMsVUFBVSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUM7Q0FDakUsU0FBUztDQUNULFFBQVEsT0FBTyxRQUFRLENBQUM7Q0FDeEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7Q0FDOUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0NBQzNDLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzlCO0NBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzNCO0NBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDekI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDL0UsYUFBYSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7Q0FDekIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDekQsUUFBUSxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3hDLFFBQVEsT0FBTyxDQUFDLENBQUM7Q0FDakIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDekI7Q0FDQSxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzVFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDMUI7Q0FDQSxRQUFRLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pIO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7Q0FDdEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3JDLFFBQVEsT0FBTyxDQUFDLENBQUM7Q0FDakIsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwRCxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakM7Q0FDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RELFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztDQUNsQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQ2xFLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQ2pKLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFFLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0NBQ3ZCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7Q0FDM0QsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztDQUNqRSxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0NBQ2pFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNuQixTQUFTO0NBQ1QsUUFBUSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMzQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0M7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxQyxhQUFhO0NBQ2IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzNELFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzFCLFlBQVksT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztDQUN6RyxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksWUFBWSxFQUFFLFdBQVcsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHO0FBQzlEO0NBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hEO0NBQ0EsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRztDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksT0FBTyxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ2hDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFHO0NBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0NBQ3BKLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ25DLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvRixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckg7Q0FDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzdJLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLENB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RSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDdEUsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7Q0FDQTtDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0NBQzFFLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzFFO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzSDtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDNUg7Q0FDQTtBQUNBO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDdEYsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDcEcsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0Y7Q0FDQSxZQUFZLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQy9CO0NBQ0EsU0FBUyxNQUFNO0NBQ2Y7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDNUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7Q0FDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLHdCQUF3QixFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNySSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0YsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEk7Q0FDQSxZQUFZLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0NBQy9CLFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLGFBQWEsRUFBRSxZQUFZO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDcEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxvQkFBb0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Q0FDaEosUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3ZDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ25CLFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUMzQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7Q0FDeEIsUUFBVyxJQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUs7Q0FDNUQsUUFBUSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDO0NBQ2pELFFBQVEsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0NBQ3ZCO0NBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsQztDQUNBLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkIsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDOUIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztDQUNqQyxZQUFZLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUM7QUFDaEQ7Q0FDQSxZQUFZLEVBQUUsR0FBRztDQUNqQixnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzNDLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRztDQUN2RCxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzNDLGFBQWEsQ0FBQztDQUNkO0NBQ0EsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2QjtDQUNBLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RCLGdCQUFnQixNQUFNLENBQUMsRUFBRSxDQUFDO0NBQzFCLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN0RCxpQkFBaUI7QUFDakI7Q0FDQSxnQkFBZ0IsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNHO0NBQ0EsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxnQkFBZ0IsQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25KO0NBQ0EsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFIO0NBQ0EsYUFBYTtDQUNiLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUM7Q0FDNUIsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBRWhDLFNBQVM7QUFJVDtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCO0NBQ0E7Q0FDQSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ2pHLFFBQVEsQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNySTtDQUNBLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMvRSxRQUFRLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDeEk7Q0FDQSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDaEcsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNuRyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM5SSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM5SSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxvRkFBb0YsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMvSztBQUNBO0NBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFHO0NBQ0EsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUMxQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDckM7Q0FDQSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ3BCO0NBQ0EsUUFBUSxJQUFJLE9BQU8sR0FBRyxhQUFhLENBQUM7Q0FDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyw0RkFBNEYsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQ2pPLFFBQVEsT0FBTyxJQUFJO0NBQ25CLFlBQVksS0FBSyxNQUFNO0NBQ3ZCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztDQUMzRixZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLFFBQVE7Q0FDekIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0NBQzVGLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssS0FBSztDQUN0QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Q0FDekYsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxLQUFLO0NBQ3RCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztDQUN6SixZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLFFBQVE7Q0FDekIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLG1GQUFtRixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0NBQzVKLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssUUFBUTtDQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7Q0FDNUYsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxNQUFNO0NBQ3ZCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyx3SkFBd0osQ0FBQyxLQUFLLENBQUM7Q0FDdk0sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsNEtBQTRLLENBQUM7Q0FDL0wsWUFBWSxNQUFNO0NBQ2xCLFNBQVM7Q0FDVCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUM7Q0FDNUIsUUFBUSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFVBQVUsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7Q0FDQSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLENBQUM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxDQUFDO0FBQ2Q7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0NBQ0EsSUFBSSxXQUFXLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtDQUNBLElBQUksV0FBVyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0NBQ0EsRUFBQztBQUNEO0NBQ0EsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ1o7QUFDWSxPQUFDLEtBQUssR0FBRzs7Q0N2M0JyQjtBQUNBO0FBQ0E7Q0FDTyxNQUFNLEtBQUssQ0FBQztBQUNuQjtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLFNBQVMsRUFBRSxJQUFJLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDbEI7Q0FDQSxRQUFRLFFBQVEsSUFBSTtDQUNwQixZQUFZLEtBQUssS0FBSztDQUN0QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUc7Q0FDM0QsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxLQUFLO0NBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBRztDQUN2RCxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLEtBQUs7Q0FDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFHO0NBQ3hELFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssS0FBSztDQUN0QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUc7Q0FDdkQsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxLQUFLLENBQUMsQ0FBQyxLQUFLLEtBQUs7Q0FDbEMsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFHO0NBQzlHLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssTUFBTTtDQUN2QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBRztDQUMvSCxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLE1BQU07Q0FDdkIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUc7Q0FDN0YsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxJQUFJO0NBQ3JCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUc7Q0FDaEcsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxPQUFPO0NBQ3hCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBRztDQUN4RyxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLE1BQU07Q0FDdkIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFHO0NBQ2xGLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssS0FBSztDQUN0QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFHO0NBQ3hGLFlBQVksTUFBTTtBQUNsQjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxDQUFDO0FBQ2hCO0NBQ0EsS0FBSztBQUNMO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUM3QjtDQUNBLFFBQVEsSUFBSSxPQUFPLE1BQU0sQ0FBQyxrQkFBa0IsS0FBSyxVQUFVLEVBQUU7Q0FDN0QsWUFBWSxNQUFNLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLDJCQUEwQjtDQUN4RSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUk7QUFDWjtDQUNBLFNBQVMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFFO0FBQ2hDO0NBQ0EsWUFBWSxNQUFNLE9BQU8sR0FBRztDQUM1QixnQkFBZ0Isc0JBQXNCLEVBQUUsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLO0NBQzNELGdCQUFnQixRQUFRLEVBQUUsS0FBSztDQUMvQjtDQUNBLGFBQWEsQ0FBQztBQUNkO0NBQ0EsWUFBWSxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxHQUFFO0FBQ25EO0NBQ0E7Q0FDQSxZQUFZLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sR0FBRTtDQUNyRSxZQUFZLE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRTtDQUNsRDtBQUNBO0NBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sSUFBSTtBQUNuQztDQUNBLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUNsQyxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2xGO0NBQ0EsWUFBWSxNQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0NBQ2xGLFlBQVksTUFBTSxPQUFPLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztDQUMvRSxZQUFZLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7QUFDNUM7Q0FDQSxZQUFZLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLElBQUksR0FBRTtDQUM5RSxpQkFBaUIsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLEdBQUU7Q0FDdkYsaUJBQWlCLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxHQUFFO0FBQzFDO0NBQ0EsWUFBWSxNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxFQUFFO0FBQ3hDO0NBQ0EsZ0JBQWdCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTTtBQUM3QztDQUNBLGdCQUFnQixPQUFPLElBQUk7Q0FDM0Isb0JBQW9CLEtBQUssT0FBTztDQUNoQyx3QkFBd0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUM7Q0FDNUMsd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsV0FBVztDQUNoRCw0QkFBNEIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUU7Q0FDNUUsMEJBQXlCO0NBQ3pCLHdCQUF3QixHQUFHLENBQUMsR0FBRyxHQUFHLFFBQU87Q0FDekMsb0JBQW9CLE1BQU07Q0FDMUIsb0JBQW9CLEtBQUssTUFBTTtDQUMvQix3QkFBd0IsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFFO0NBQzFGLG9CQUFvQixNQUFNO0NBQzFCLG9CQUFvQjtDQUNwQix3QkFBd0IsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUU7Q0FDNUUsb0JBQW9CLE1BQU07Q0FDMUIsaUJBQWlCO0FBQ2pCO0NBQ0EsY0FBYTtBQUNiO0NBQ0EsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ25CO0NBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztDQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxHQUFFO0FBQzNEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsQ0FBQyxPQUFPLDBCQUEwQixFQUFFLE9BQU8sR0FBRztDQUM5QyxRQUFRLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUs7Q0FDeEMsWUFBWSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQzFELFlBQVksS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7Q0FDaEMsWUFBWSxLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7Q0FDOUMsWUFBWSxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLO0NBQ3hDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQztDQUMzQyxpQkFBaUIsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ2pGLGlCQUFpQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxZQUFZLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsTUFBTTtDQUNuRCxnQkFBZ0IsT0FBTztDQUN2QixvQkFBb0IsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUs7Q0FDbkQsd0JBQXdCLE9BQU87Q0FDL0IsNEJBQTRCLE9BQU8sRUFBRTtDQUNyQyxnQ0FBZ0MsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUs7Q0FDekQsb0NBQW9DLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNsRCxpQ0FBaUMsQ0FBQztDQUNsQyx5QkFBeUIsQ0FBQztDQUMxQixxQkFBcUIsQ0FBQztDQUN0QixpQkFBaUIsQ0FBQztDQUNsQixhQUFhLENBQUMsQ0FBQztBQUNmO0NBQ0EsWUFBWSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDMUIsU0FBUyxDQUFDO0NBQ1YsS0FBSztBQUNMO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksYUFBYSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUNoQztDQUNBLFFBQVEsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLE9BQU8sTUFBTSxDQUFDLGtCQUFrQixLQUFLLFVBQVUsRUFBRTtDQUM3RCxZQUFZLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsMkJBQTBCO0NBQ3hFLFlBQVksT0FBTyxHQUFHLElBQUksQ0FBQztDQUMzQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUk7QUFDWjtDQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFFO0FBQ25DO0NBQ0EsWUFBWSxNQUFNLE9BQU8sR0FBRztDQUM1QixnQkFBZ0IsYUFBYSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksT0FBTztDQUNoRCxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtDQUNsQyxhQUFhLENBQUM7QUFDZDtDQUNBLFlBQVksT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksR0FBRTtDQUNuRCxZQUFZLE9BQU8sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBQztDQUN6RSxZQUFZLE9BQU8sQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNsRjtBQUNBO0NBQ0E7Q0FDQSxZQUFZLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ3RFO0NBQ0EsWUFBWSxJQUFJLE9BQU8sR0FBRyxNQUFNO0FBQ2hDO0NBQ0E7Q0FDQSxZQUFZLE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3ZEO0NBQ0EsWUFBWSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUMvRTtDQUNBO0NBQ0EsWUFBWSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkM7Q0FDQTtDQUNBLFlBQVksTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDL0I7Q0FDQSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkI7Q0FDQSxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE9BQU8sMEJBQTBCLEVBQUUsT0FBTyxHQUFHO0NBQ2pELFFBQVEsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSztDQUN4QyxZQUFZLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbEQsWUFBWSxDQUFDLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksY0FBYTtDQUMvRCxZQUFZLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0NBQzlFLFlBQVksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksR0FBRTtBQUNoRDtDQUNBLFlBQVksQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNO0NBQzlDLGdCQUFnQixPQUFPO0NBQ3ZCLG9CQUFvQixVQUFVLEVBQUUsTUFBTSxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUU7Q0FDekUsa0JBQWlCO0NBQ2pCLGFBQWEsRUFBQztDQUNkLFlBQVksQ0FBQyxDQUFDLEtBQUssR0FBRTtDQUNyQixTQUFTLENBQUM7Q0FDVixLQUFLO0FBQ0w7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxhQUFhLFNBQVMsR0FBRztBQUM3QjtDQUNBLFFBQVEsSUFBSTtDQUNaO0NBQ0EsWUFBWSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0NBQzlELFlBQVksTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0NBQzdCLFlBQVksV0FBVyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUU7Q0FDdkQsZ0JBQWdCLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQ25ELGdCQUFnQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2pDLGFBQWE7QUFDYjtDQUNBLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUM7Q0FDOUIsWUFBWSxPQUFPLEtBQUssQ0FBQztBQUN6QjtDQUNBLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNuQjtDQUNBLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQjtDQUNBLFNBQVM7Q0FDVDtDQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBOztDQ2pRTyxNQUFNLEVBQUUsQ0FBQztBQUNoQjtDQUNBLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUM3QjtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDYixFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2I7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZDtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDYixFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2IsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZDtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hCLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hCLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEIsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxjQUFjLENBQUMsRUFBRSxNQUFNLEdBQUc7QUFDM0I7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDO0NBQ25CLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7Q0FDbkIsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLEdBQUc7QUFDekI7Q0FDQSxFQUFFLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDM0M7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLE1BQU0sQ0FBQyxHQUFHO0FBQ1g7Q0FDQSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQ1Y7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDO0NBQ0EsRUFBRSxLQUFLLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hDO0NBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNmO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNkLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsTUFBTSxDQUFDLEdBQUc7QUFDWDtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNmLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNmLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsR0FBRyxDQUFDLEdBQUc7QUFDUjtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUNkLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUNkLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsTUFBTSxDQUFDLEdBQUc7QUFDWDtDQUNBLEVBQUUsU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUMxQztDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ1o7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNmLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2Y7Q0FDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNkO0NBQ0EsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHO0FBQ3REO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3JCO0NBQ0EsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRztBQUNsRztDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNuQjtDQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0NBQ2xCLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztDQUM1QixNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Q0FDL0IsR0FBRyxNQUFNO0NBQ1QsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQztDQUN0QyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDO0NBQ3pDLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBOztDQzlIQTtDQUNBO0NBQ0E7QUFDQTtDQUNPLE1BQU0sS0FBSyxDQUFDO0NBQ25CLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Q0FDdEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7QUFDaEM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDM0I7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQztBQUN0QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0NBQy9CLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztDQUNoQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7QUFDakM7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNqQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hCO0NBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0NBQzFFLElBQUksSUFBSSxDQUFDLFlBQVk7Q0FDckIsTUFBTSxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDaEU7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQztDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDckQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVc7Q0FDbkMsTUFBTSxDQUFDO0NBQ1AsTUFBTSxJQUFJLENBQUMsSUFBSTtDQUNmLFVBQVUsSUFBSSxDQUFDLEtBQUs7Q0FDcEIsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07Q0FDN0IsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07Q0FDNUIsVUFBVSxLQUFLLENBQUMsTUFBTTtDQUN0QixLQUFLLENBQUM7QUFDTjtDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUMzQztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzNCO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDakQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN4QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDMUQsU0FBUyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hCO0NBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0NBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2pEO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztBQUN2RDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztDQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7Q0FDbEMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO0FBQ3hDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7Q0FDcEMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0NBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztDQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztBQUNuQztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsUUFB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QU8sQ0FBQyxDQUFDLEVBQUU7Q0FDYixJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLElBQUksT0FBTyxJQUFJLENBQUM7Q0FDaEIsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7Q0FDVixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztDQUN4QixJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztDQUN2QixJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RFLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztDQUN4RCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtDQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxJ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QUFRLElBQUksQ0FBQyxTQUFTO0NBQzFCLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2QsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDaEIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDakIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7Q0FDbEIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7Q0FDbkIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxPQUFPLENBQUM7Q0FDcEIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7Q0FDckIsUUFBUSxNQUFNO0NBQ2QsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQ2xELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzNDLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtDQUNkLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3BDLElBQUk7Q0FDSixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMs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QVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUU7QUFDakQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDdkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxFQUFDO0NBQ25DLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUU7Q0FDL0IsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBQztBQUNqQztDQUNBLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQzNFO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7Q0FDN0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUM7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFNO0NBQ3JDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFFO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNsQztDQUNBLFFBQVEsS0FBSyxJQUFJLENB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RDtDQUNBLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFDO0NBQzVELFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQjtDQUNBO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7Q0FDckUsU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRDtDQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0NBQy9DLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2hEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDcFBPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFLO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUM7Q0FDakMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUk7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBSztDQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDMUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFFO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFLO0NBQ2hDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsR0FBRTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRTtBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSTtDQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0NBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3BDO0NBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTTtDQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxTQUFRO0NBQ3JELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0NBQ3pCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFFO0FBQ3hCO0NBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFDO0NBQ3hCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQ3RCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0FBQ2xJO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFFO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0NBQ3pELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUMzRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUM1RjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNuQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztBQUMvQztDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07Q0FDNUIsUUFBUSxJQUFJLE1BQUs7QUFDakI7Q0FDQSxRQUFRLFFBQVEsSUFBSTtDQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDOUQsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDNUssZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDOUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNqRSxnQkFBZ0IsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVE7Q0FDL0ssZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0NBQ2pEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxPQUFPLENBQUM7Q0FDN0QsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztDQUMxRSxhQUFhLE9BQU8sVUFBVSxDQUFDO0FBQy9CO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN6QixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDOUIsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9EO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ2hDO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDekMsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEU7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNyQyxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvQztDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbkMsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztDQUM1QyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNyQyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLFVBQVUsR0FBRztDQUNsQztDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDckQ7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7Q0FDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN4RCxhQUFhLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztDQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3hELGFBQWE7Q0FDYjtDQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQztDQUNBLFlBQVksT0FBTyxJQUFJLENBQUM7Q0FDeEI7Q0FDQSxTQUFTO0NBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkIsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQ2xELFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QyxRQUFRLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNsRztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlEO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENB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QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQ3hELE9BQU8sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMvQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5QixPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN2QyxPQUFPO0FBQ1A7Q0FDQSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7Q0FDcEQ7Q0FDQSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUM1QyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNFLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNqQztDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcs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LENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDaEQ7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDeEMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuRCxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyRDtDQUNBLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPO0FBQ3BCO0NBQ0EsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3hELEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDdkUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztDQUMzRSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdD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S0FBSyxDQUFDO0FBQzFDO0NBQ0EsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN0QjtDQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDM0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzVCLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDN0MsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN0QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDN0MsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDO0NBQ0EsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEM7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEU7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1QztDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUUsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckQ7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQ1Y7Q0FDQTtDQUNBLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25CO0NBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BCO0NBQ0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ2pDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNoQztDQUNBO0FBQ0E7Q0FDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNoQztDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQztDQUM1RDtDQUNBO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQTtDQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPO0FBQ2hDO0FBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0NBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pCO0NBQ0E7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUM7Q0FDM0QsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUU7QUFDOUM7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7Q0FDOUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtDQUNuQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0NBQ3BDO0NBQ0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbkM7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFLO0NBQ2xDLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUM7Q0FDNUMsS0FBSyxJQUFJLENBQUMsU0FBUyxHQUFFO0FBQ3JCO0NBQ0EsRUFBRTtBQUNGO0FBQ0E7Q0FDQTs7Q0NwYU8sTUFBTSxHQUFHLFNBQVMsS0FBSyxDQUFDO0FBQy9CO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDNUIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0FBQ25DO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO0NBQy9CLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7Q0FDMUM7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztDQUN4QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztDQUM5QyxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdEQ7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDeEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUM5QjtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDeEI7Q0FDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRTtDQUN0QyxZQUFZLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0NBQy9CLFlBQVksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7Q0FDOUIsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM1QjtDQUNBLFlBQVksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDeEIsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN6QixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCLFlBQVksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEI7Q0FDQSxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLElBQUksR0FBRyxLQUFLLENBQUM7QUFDeEY7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUM1QjtDQUNBLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUN2QyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNyQztDQUNBLGFBQWE7QUFDYjtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQUs7QUFDdEM7Q0FDQSxTQUFTO0FBQ1Q7QUFDQTtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QyxRQUFRLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDaEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDekM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7Q0FDM0MsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRywrQkFBK0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLDhFQUE4RSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO0FBQ2hNO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxHQUFHLFFBQVEsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNqRjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDdkU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNsRSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztDQUNsRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztDQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQy9EO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyx3REFBd0QsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztDQUM3SztBQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsb0NBQW9DLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxrREFBa0QsRUFBRSxDQUFDO0FBQzFKO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDJFQUEyRSxDQUFDLENBQUM7QUFDdEo7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QjtDQUNBO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0NBQzlCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0NBQ3RFLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxZQUFZLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUNuRjtBQUNBO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDO0NBQ0EsWUFBWSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUMvQixZQUFZLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QztDQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN2RDtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDckMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoQztDQUNBLFlBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUseUJBQXlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hHO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7Q0FDOUIsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFlBQVksSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMvSyxTQUFTO0FBQ1Q7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDdkMsYUFBYSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Q0FDeEIsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0NBQ2xDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQixRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ3BDLFFBQVEsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0NBQ3RGLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDL0MsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzNDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLENBQUM7Q0FDakksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Q0FDaEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyRDtDQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNwQixZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3ZFLGtCQUFrQixDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ25DLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzFDLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMxRSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xDLFlBQVksQ0FBQyxFQUFFLENBQUM7QUFDaEI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLEtBQUssQ0FBQyxJQUFJLEdBQUU7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztDQUNsRSxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDbkQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztDQUNuRSxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMzRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7Q0FDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN0RDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFD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QUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDdEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNyQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUN0RixjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQzdEO0NBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUg7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7Q0FDckMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQztDQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDO0NBQzlDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUk7Q0FDOUMsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztDQUNyQyxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQzNDLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksR0FBRyxDQUFDO0NBQ2hGLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMs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QUksRUFBRSxDQUFDO0NBQ2pDLGFBQWE7QUFDYjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRTtDQUNyQztBQUNBO0NBQ0EsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyQztDQUNBLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBQztDQUM1QyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFHO0NBQzFCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRTtBQUN0QjtDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUs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LElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ25JLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNoRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNuRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM1RSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzdGO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQztBQUNwQjtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDM0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdB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QUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMvRTtDQUNBLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6QztDQUNBLFFBQVEsS0FBSyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRztDQUN4QyxZQUFZLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMzRCxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztDQUMzRCxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztDQUMzRCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pFO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Q0FDOUMsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7QUFDcEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzlCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzQztDQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUM1RSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUU7Q0FDQSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdkU7Q0FDQSxhQUFhO0FBQ2I7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzdCO0FBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDcEQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0NBQ2xFLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRTtDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUM1QjtDQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFD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Q0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ25JO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtDQUN6RDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNqRixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztB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Q0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZELFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RDtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDdEMsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFB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QUFNO0NBQ2YsWUFBWSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNyRCxZQUFZLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQzFCLFNBQVM7QUFDVDtDQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRztBQUMzQztDQUNBLFlBQVksQ0FBQyxHQUFHLFVBQVUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7Q0FDMUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQy9DLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUMvQyxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDaEQsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ2hELFlBQVksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQzlEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVEO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDcEMsUUFBUSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNyRTtDQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztDQUNqQyxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDakM7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDcEMsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDckY7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7Q0FDQSxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ25DLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNwQyxZQUFZLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqSTtDQUNBLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO0NBQ25LLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJ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QUksR0FBRyxJQUFJLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQy9EO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDL0Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNoRTtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2pELFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDL0MsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUM5QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzlDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Q0FDdkQsUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxN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WUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDeEQsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtDQUNBLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFD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QUFNLEVBQUUsQ0FBQztDQUNwQixLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUNyQixNQUFNLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDNUU7Q0FDQTtDQUNBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQTtDQUNBLE1BQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3REO0NBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ2hELE1BQU0sSUFBSSxVQUFVLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMzRDtDQUNBLE1BQU0sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ25EO0NBQ0EsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNsQztDQUNBLE1BQU0sSUFBSSxLQUFLLENBQUM7Q0FDaEIsTUFBTSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0NBQ3BELFFBQVEsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM5QyxRQUFRLElBQUksQ0FBQyxLQUFL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QUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQ3hELFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1o7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUNqQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUN0QyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzVELFFBQVEsTUFBTTtDQUNkLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7Q0FDYixJQUFJLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUQ7Q0FDQSxJQUFJLElBQUksT0FBTztDQUNmLE1BQU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUU7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztDQUMzQztBQUNBO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDdEQsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM1RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDakU7Q0FDQSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUN4QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLEtBQUssR0FBRztDQUNWLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xCO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDOUIsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEI7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDckIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNyRCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FB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QyxDQUFDO0NBQzVCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDckM7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQztDQUN2QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztDQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUM7Q0FDL0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPO0NBQ3RCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO0NBQ2hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBRztDQUNqQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztBQUMzQztDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7Q0FDekQsYUFBYSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwQztDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDcEM7Q0FDQSxLQUFLO0FBQ0w7QUFDQTtDQUNBOztDQ2pMTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLGlEQUFpRCxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdEo7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7QUFDM0I7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzdDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0NBQ2hEO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDO0FBQ2pEO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENB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QzdDO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEw7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0I7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzlDO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzlCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FB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QyxDQUFDLElBQUksQ0FBQztBQUN2RDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNuRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztDQUNBO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3JFO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDOUY7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUM7Q0FDQTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztDQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7Q0FDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsd0JBQXdCLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzNJLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUU7QUFDakM7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUM5QyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtDQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNoRDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ3JFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDdEY7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBRztBQUN2QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNuQixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUU7QUFDdkI7Q0FDQSxLQUFLO0NBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztDQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDakQ7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxPQUFPLENBQUM7Q0FDN0QsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztDQUMxRSxhQUFhLE9BQU8sS0FBSyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFDMUM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQy9CLFlBQVksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNoQyxZQUFZLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoQyxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFFO0NBQzFELFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDekU7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQy9CO0NBQ0EsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0NBQ2xCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNsQjtDQUNBLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0NBQ3ZELFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3ZEO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUNqQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsUUFBUSxJQUFJO0NBQ3BCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDMUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7Q0FDM0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUM7Q0FDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7Q0FDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7Q0FDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDOUQ7Q0FDQSxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztDQUNoRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRTtDQUNwRTtDQUNBLFlBQVksTUFBTTtDQUNsQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHO0FBQy9CO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3REO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFNO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUN4RSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRztBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDdkcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFFO0FBQ3BIO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMxQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBOztBQzdQWSxPQUFDLEdBQUcsR0FBRyxZQUFZO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDMUI7Q0FDQSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7Q0FDQSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3RDO0NBQ0EsWUFBWSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hCLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0I7Q0FDQSxTQUFTLE1BQU0sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDOUM7Q0FDQSxZQUFZLEdBQUcsR0FBRyxJQUFJLENBQUM7Q0FDdkIsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxT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SUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ2xFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNuRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6RDtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVO0NBQzNDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0NBQzFELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdkMsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLEdBQUc7Q0FDWCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0NBQzVCLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtDQUNkLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ2xELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUTtDQUNyQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzVFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDN0MsR0FBRztBQUNIO0NBQ0EsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFO0NBQ2xCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Q0FDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0NBQ2hCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0IsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzFCLEtBQUs7Q0FDTCxHQUFHO0NBQ0g7Ozs7Ozs7Ozs7Ozs7OyJ9 diff --git a/build/uil.min.js b/build/uil.min.js index bc00f50..c48ddc4 100644 --- a/build/uil.min.js +++ b/build/uil.min.js @@ -6808,7 +6808,12 @@ } update(up) { - let ww = Math.floor(this.ww * ((this.sliderValue - this.min) / this.range)); + let normalized = (this.value - this.min) / this.range; + + let uneased = + this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); + + let ww = Math.floor(this.ww * uneased); //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); if (this.model !== 3) this.s[5].width = ww + "px"; @@ -9061,4 +9066,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0pIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMuc2xpZGVyVmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcbiAgICAvL2xldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqICgodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2UpKTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gMykgdGhpcy5zWzVdLndpZHRoID0gd3cgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5zWzZdKSB0aGlzLnNbNl0ubGVmdCA9IHRoaXMuc2EgKyB3dyArIDMgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuXHJcbiAgICBpZiAodXApIHRoaXMuc2VuZCgpO1xyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy5zYiAtIHRoaXMuc2M7XHJcbiAgICB0aGlzLnd3ID0gdyAtIDY7XHJcblxyXG4gICAgbGV0IHR4ID0gdGhpcy5zYztcclxuICAgIGlmICh0aGlzLmlzVUkgfHwgIXRoaXMuc2ltcGxlKSB0eCA9IHRoaXMuc2MgKyAxMDtcclxuICAgIHRoaXMudHhsID0gdGhpcy53IC0gdHggKyAyO1xyXG5cclxuICAgIC8vbGV0IHR5ID0gTWF0aC5mbG9vcih0aGlzLmggKiAwLjUpIC0gODtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICBzWzJdLndpZHRoID0gdGhpcy5zYyAtIDYgKyBcInB4XCI7XHJcbiAgICBzWzJdLmxlZnQgPSB0aGlzLnR4bCArIDQgKyBcInB4XCI7XHJcbiAgICAvL3NbMl0udG9wID0gdHkgKyAncHgnO1xyXG4gICAgc1szXS5sZWZ0ID0gdGhpcy5zYSArIFwicHhcIjtcclxuICAgIHNbM10ud2lkdGggPSB3ICsgXCJweFwiO1xyXG4gICAgc1s0XS5sZWZ0ID0gdGhpcy5zYSArIFwicHhcIjtcclxuICAgIHNbNF0ud2lkdGggPSB3ICsgXCJweFwiO1xyXG4gICAgc1s1XS5sZWZ0ID0gdGhpcy5zYSArIDMgKyBcInB4XCI7XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUZXh0SW5wdXQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlICE9PSB1bmRlZmluZWQgPyBvLnZhbHVlIDogJyc7XHJcbiAgICAgICAgdGhpcy5wbGFjZUhvbGRlciA9IG8ucGxhY2VIb2xkZXIgfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZSA9IG8uZWRpdCAhPT0gdW5kZWZpbmVkID8gby5lZGl0IDogdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gdGV4dFxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonICsgKHRoaXMuaC0yKSArICdweDsgY29sb3I6JyArIGNjLnRleHQgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5iYWNrICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgLy8gZmFrZVxyXG4gICAgICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonICsgKHRoaXMuaC0yKSArICdweDsgYm9yZGVyOm5vbmU7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOicrY2MuYm9yZGVyKyc7JyApO1xyXG4gICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSAnJyApIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIFxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+PSB0aGlzLnNhICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggbmFtZSA9PT0gJ3RleHQnICkgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgLy9pZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICl7IHJldHVybjt9XHJcblxyXG4gICAgICAgIC8vaWYoIGwueCA+PSB0aGlzLnNhICkgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICAvL2Vsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RleHQnICkgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICBlbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBJbnB1dCggeCAtIHRoaXMuc2EgLTMsIHRoaXMuaXNEb3duICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2EgKyA1O1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAnMXB4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAoIGQgKyBlICkgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAgKCBkICsgZSApICArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICB3ICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgaWYoIXMpIHJldHVybjtcclxuICAgICAgICBzWzNdLndpZHRoID0gIDAgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gJ3QnXHJcbiAgICAgICAgc1s0XS53aWR0aCA9IDAgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWU7IFxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgICAgICBpZih0aGlzLnZhbHVlICE9PSAnJykgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgZWxzZSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBSRVpJU0VcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s1XS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1s1XS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBUaXRsZSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICBsZXQgcHJlZml4ID0gby5wcmVmaXggfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpyaWdodDsgd2lkdGg6NjBweDsgbGluZS1oZWlnaHQ6JysgKHRoaXMuaC04KSArICdweDsgY29sb3I6JyArIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaCA9PT0gMzEgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0udG9wID0gOCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSA4ICsgJ3B4JztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc1sxXS5qdXN0aWZ5Q29udGVudCA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIC8vc1sxXS50ZXh0QWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICBzWzFdLmZvbnRXZWlnaHQgPSBvLmZvbnRXZWlnaHQgfHwgJ2JvbGQnO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQuc3Vic3RyaW5nKDAsMSkudG9VcHBlckNhc2UoKSArIHRoaXMudHh0LnN1YnN0cmluZygxKS5yZXBsYWNlKFwiLVwiLCBcIiBcIik7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gcHJlZml4O1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQyKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcbiAgICAgICAgdGhpcy5zWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4JzsgLy8tIDUwICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0ubGVmdCA9IHRoaXMudyArICdweCc7Ly8tICggNTAgKyAyNiApICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q29sb3IoIGMgKSB7XHJcbiAgICAgICAgdGhpcy5zWzFdLmNvbG9yID0gY1xyXG4gICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMub25BY3RpZiA9IG8ub25BY3RpZiB8fCBmdW5jdGlvbigpe31cclxuXHJcbiAgICAgICAgLy9sZXQgcHJlZml4ID0gby5wcmVmaXggfHwgJyc7XHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICcgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrIGNjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuICAgICAgICAvL3RoaXMuY1syXS5zdHlsZS5jb2xvciA9IHRoaXMuZm9udENvbG9yO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IGJhY2tncm91bmQ6JyArIGNjLmlucHV0QmcgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuaW5wdXRCb3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnY3Vyc29yJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcbiAgICAgICAgdGhpcy5pc0FjdGlmID0gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3ZlcidcclxuICAgICAgICByZXR1cm4gJzAnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcbiAgICBcclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgLy90aGlzLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgLy90aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbIG5hbWUtMiBdO1xyXG4gICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhcHBseSAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8ICcnO1xyXG5cclxuICAgICAgICBpZiggdiAhPT0gdGhpcy52YWx1ZSApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSggMyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0xICkgdGhpcy5pc0FjdGlmID0gZmFsc2U7O1xyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0zICl7IFxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzQWN0aWYgKXsgdGhpcy5pc0FjdGlmID0gdHJ1ZTsgbj00OyB0aGlzLm9uQWN0aWYoIHRoaXMgKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7IHRoaXMuaXNBY3RpZiA9IGZhbHNlOyB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MiAmJiB0aGlzLmlzQWN0aWYgKSBuID0gNDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gYWN0aWZcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICh0aGlzLnNhKzgpICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBGaWxlcyB9IGZyb20gJy4uL2NvcmUvRmlsZXMuanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBCaXRtYXAgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMucmVmVGV4dHVyZSA9IG8udGV4dHVyZSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcblxyXG5cclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICcgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IGJhY2tncm91bmQ6JyArIGNjLmlucHV0QmcgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuaW5wdXRCb3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2xvYWQnIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJztcclxuICAgICAgICByZXR1cm4gJzAnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcbiAgICBcclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgLy90aGlzLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBGaWxlcy5sb2FkKCB7IGNhbGxiYWNrOnRoaXMuY2hhbmdlQml0bWFwLmJpbmQodGhpcykgfSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy90aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbIG5hbWUtMiBdO1xyXG4gICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBjaGFuZ2VCaXRtYXAoIGltZywgZm5hbWUgKXtcclxuXHJcbiAgICAgICAgaWYoIGltZyApe1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IGltZ1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCBmbmFtZSApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoICdudWxsJyApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhcHBseSAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8ICcnO1xyXG5cclxuICAgICAgICBpZiggdiAhPT0gdGhpcy52YWx1ZSApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pbWcgIT09IG51bGwgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLm9iamVjdExpbmsgIT09IG51bGwgKSB0aGlzLm9iamVjdExpbmtbIHRoaXMudmFsIF0gPSB2XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5jYWxsYmFjayApIHRoaXMuY2FsbGJhY2soIHRoaXMudmFsdWUsIHRoaXMuaW1nLCB0aGlzLm5hbWUgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSggMyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhazsgLy8gYWN0aWZcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICh0aGlzLnNhKzgpICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG59IiwiLy9pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0b3IgZXh0ZW5kcyBCdXR0b24ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgPT09IHVuZGVmaW5lZCApIG8uc2VsZWN0YWJsZSA9IHRydWVcclxuICAgICAgICBzdXBlciggbyApO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLnAgPSAxMDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudHh0O1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5pdHlwZSA9IG8uaXR5cGUgfHwgJ25vbmUnO1xyXG4gICAgICAgIHRoaXMudmFsID0gdGhpcy5pdHlwZTtcclxuXHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IHRoaXMuc3Znc1sgdGhpcy5pdHlwZSBdO1xyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTc7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5ncmFwaCwgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc1sxXS5tYXJnaW5MZWZ0ID0gMjAgKyAncHgnO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG5cclxuICAgICAgICAvL3VwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgbmFtZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkKCB0cnVlICk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdXQgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdmVyICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoNCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMik7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8qclNpemUgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgfSovXHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdHVzICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IG47XHJcbiAgICAgICAgICAgIGxldCBzID0gdGhpcy5zLCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zdGF0dXMgPSAxOyBzWzFdLmNvbG9yID0gY2MudGV4dDsgc1swXS5iYWNrZ3JvdW5kID0gJ25vbmUnOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zdGF0dXMgPSAyOyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnN0YXR1cyA9IDM7IHNbMV0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzWzBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnN0YXR1cyA9IDQ7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgIC8vIHJldHVybiB0aGlzLm1vZGUoIDEgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQgKCBiICl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcydcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnXHJcblxyXG5leHBvcnQgY2xhc3MgR3JpZCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICAvKnRoaXMudmFsdWVzID0gby52YWx1ZXMgfHwgW107XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF07Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIG8udmFsdWVzICl7XHJcbiAgICAgICAgICAgIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBTdHJpbmcgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gWyBvLnZhbHVlcyBdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8udmFsdWVzXHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy52YWx1ZXMucHVzaCggZyApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoO1xyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IG51bGw7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3BhY2VzID0gby5zcGFjZXMgfHwgWyBjYy5zeCwgY2Muc3kgXVxyXG4gICAgICAgIHRoaXMuYnNpemUgPSBvLmJzaXplIHx8IFsgOTAsIHRoaXMuaCBdO1xyXG5cclxuICAgICAgICB0aGlzLmJzaXplTWF4ID0gdGhpcy5ic2l6ZVswXVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ3JpZCA9IFsgMiwgTWF0aC5yb3VuZCggdGhpcy5sbmcgKiAwLjUgKSBdO1xyXG5cclxuICAgICAgICB0aGlzLmggPSAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuYnNpemVbMV0gKSArICggdGhpcy5ncmlkWzFdICogdGhpcy5zcGFjZXNbMV0gKSAvLysgNCAtICh0aGlzLm10b3AqMikgLy8rICh0aGlzLnNwYWNlc1sxXSAtIHRoaXMubXRvcCk7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICd0YWJsZScsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IHRvcDonKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7IGhlaWdodDphdXRvOyBib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7IGJvcmRlcjpub25lOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICd0YWJsZScsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0pKydweDsgYm9yZGVyOm5vbmU7JyApO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZCwgdGQsIHRyLCBzZWw7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IFtdOyBcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFggPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFkgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdHIgPSB0aGlzLmNbMl0uaW5zZXJ0Um93KCk7XHJcbiAgICAgICAgICAgIHRyLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG4gICAgICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGQgPSB0ci5pbnNlcnRDZWxsKCk7XHJcbiAgICAgICAgICAgICAgICB0ZC5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3Bvc2l0aW9uOnN0YXRpYzsgdG9wOjFweDsgd2lkdGg6Jyt0aGlzLmJzaXplWzBdKydweDsgaGVpZ2h0OicrKHRoaXMuYnNpemVbMV0tMikrJ3B4OyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBsZWZ0OmF1dG87IHJpZ2h0OmF1dG87IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JztcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b247XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgIGIuaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoIGIgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25zLnB1c2goYilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXQucHVzaCgxKVxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApXHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOnN0YXRpYzsgd2lkdGg6Jyt0aGlzLmJzaXplWzBdKydweDsgaGVpZ2h0OicrdGhpcy5ic2l6ZVsxXSsncHg7IHRleHQtYWxpZ246Y2VudGVyOyBsZWZ0OmF1dG87IHJpZ2h0OmF1dG87IGJhY2tncm91bmQ6bm9uZTsnXHJcbiAgICAgICAgICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoIGIgKVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZihqPT09MCkgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpyaWdodDsnO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OmxlZnQ7JztcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBuKys7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xO1xyXG5cclxuICAgICAgICBsLnkgKz0gdGhpcy5tdG9wXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IHR4ID0gdGhpcy50bXBYO1xyXG4gICAgICAgIGxldCB0eSA9IHRoaXMudG1wWTtcclxuXHJcbiAgICAgICAgbGV0IGlkID0gLTE7XHJcbiAgICAgICAgbGV0IGMgPSAtMTtcclxuICAgICAgICBsZXQgbGluZSA9IC0xO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5ncmlkWzBdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICBcdGlmKCBsLnggPiB0eFtpXVswXSAmJiBsLnggPCB0eFtpXVsxXSApIGMgPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaSA9IHRoaXMuZ3JpZFsxXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0eVtpXVswXSAmJiBsLnkgPCB0eVtpXVsxXSApIGxpbmUgPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoYyE9PS0xICYmIGxpbmUhPT0tMSl7XHJcbiAgICAgICAgICAgIGlkID0gYyArIChsaW5lKjIpO1xyXG4gICAgICAgICAgICBpZihpZD50aGlzLmxuZy0xKSBpZCA9IC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgdGhpcy5zZW5kKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIHRoaXMucmVzIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFx0dXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGUoIG4sIGkgKSApIHIgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLmJ1dHRvbnNcclxuICAgICAgICBsZXQgaSA9IGlkXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS50ZXh0Q29udGVudCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSwgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnN0eWxlLnBhZGRpbmcgPSAoIHkgfHwgMCApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0VyAoKSB7XHJcblxyXG4gICAgICAgIGxldCB2dyA9IHRoaXMuc3BhY2VzWzBdKjMgKyB0aGlzLmJzaXplTWF4KjIsIHJ6ID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHZ3ID4gdGhpcy53ICkge1xyXG4gICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gKCB0aGlzLnctKHRoaXMuc3BhY2VzWzBdKjMpICkgKiAwLjU7XHJcbiAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggdGhpcy5ic2l6ZVswXSAhPT0gdGhpcy5ic2l6ZU1heCApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSB0aGlzLmJzaXplTWF4O1xyXG4gICAgICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIXJ6ICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuYnV0dG9ucy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmJ1dHRvbnNbaV0uc3R5bGUud2lkdGggPSB0aGlzLmJzaXplWzBdICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnRlc3RXKCk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkO1xyXG5cclxuICAgICAgICB0aGlzLnRtcFggPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFkgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgaWYoaj09PTApe1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgLSAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLXRoaXMuYnNpemVbMF0sIG1pZCBdICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSArICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQsIG1pZCt0aGlzLmJzaXplWzBdIF0gKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1pZCA9IHRoaXMuc3BhY2VzWzFdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRtcFkucHVzaCggWyBtaWQsIG1pZCArIHRoaXMuYnNpemVbMV0gXSApO1xyXG4gICAgICAgICAgICBtaWQgKz0gdGhpcy5ic2l6ZVsxXSArIHRoaXMuc3BhY2VzWzFdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFkMkQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgLy90aGlzLm1hcmdpbiA9IDE1O1xyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKDAsMCk7XHJcbiAgICAgICAgdGhpcy5tYXhQb3MgPSA5MFxyXG5cclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMubWluID0gby5taW4gPT09IHVuZGVmaW5lZCA/IC0xIDogby5taW47XHJcbiAgICAgICAgdGhpcy5tYXggPSBvLm1heCA9PT0gdW5kZWZpbmVkID8gMSA6IG8ubWF4O1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gKHRoaXMubWF4IC0gdGhpcy5taW4pKjAuNTsgIFxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5yYW5nZSlcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIFxyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IDIgOiBvLnByZWNpc2lvbjtcclxuXHJcbiAgICAgICAgLyp0aGlzLmJvdW5kcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngxID0gby54MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MiA9IG8ueDIgfHwgMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MSA9IG8ueTEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTIgPSBvLnkyIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMubGVycFggPSB0aGlzLmxlcnAoIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiAsIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiApO1xyXG4gICAgICAgIHRoaXMubGVycFkgPSB0aGlzLmxlcnAoIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiAsIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiApO1xyXG5cclxuICAgICAgICB0aGlzLmFsZXJwWCA9IHRoaXMubGVycCggdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyLCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gKTtcclxuICAgICAgICB0aGlzLmFsZXJwWSA9IHRoaXMubGVycCggdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyLCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gKTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gKCBBcnJheS5pc0FycmF5KCBvLnZhbHVlICkgJiYgby52YWx1ZS5sZW5ndGggPT0gMiApID8gby52YWx1ZSA6IFsgMCwgMCBdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsgJ3B4JztcclxuXHJcbiAgICAgICAgLy8gVGl0bGVcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMudG9wIC09IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cclxuICAgICAgICAvLyBWYWx1ZVxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyAoIHRoaXMuaCAtIDIwICkgKyAncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicgKyBjYy50ZXh0ICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gUGFkXHJcblxyXG4gICAgICAgIGxldCBwYWQgPSB0aGlzLmdldFBhZDJkKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDIgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggcGFkLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gcGFkXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSgpXHJcblxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG5cclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ3BhZCc7XHJcblxyXG4gICAgICAgIC8qaWYoICggbC54ID49IHRoaXMubWFyZ2luICkgJiYgKCBsLnggPD0gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA+PSB0aGlzLnRvcCArIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPD0gdGhpcy50b3AgKyB0aGlzLncgLSB0aGlzLm1hcmdpbiApICkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BhZCc7XHJcbiAgICAgICAgfSovXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9yZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy50ZXN0Wm9uZShlKSA9PT0gJ3BhZCcgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgeCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKVxyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGxldCByID0gMjU2IC8gdGhpcy5kaWFtXHJcblxyXG4gICAgICAgIHggPSAtKHgqcilcclxuICAgICAgICB5ID0gLSh5KnIpXHJcblxyXG4gICAgICAgIHggPSBUb29scy5jbGFtcCggeCwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcbiAgICAgICAgeSA9IFRvb2xzLmNsYW1wKCB5LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuXHJcbiAgICAgICAgLy9sZXQgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG4gICAgICAgIC8vbGV0IHkgPSBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wO1xyXG5cclxuICAgICAgICAvKmlmKCB4IDwgdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHggPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHggPSB0aGlzLncgLSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA8IHRoaXMubWFyZ2luICkgeSA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47Ki9cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh4LHkpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zKCBbIHggLCB5IF0gKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5iYWNrLCAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5iYWNrb2ZmLCAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5vdmVyb2ZmLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0U2VsZWN0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICAvL2lmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcoKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA9PSAxICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kxJywgdGhpcy5wb3MueSwgMiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTInLCB0aGlzLnBvcy55LCAyICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDEnLCB0aGlzLnBvcy54LCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MicsIHRoaXMucG9zLngsIDMgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB0aGlzLnBvcy54LCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgdGhpcy5wb3MueSwgNCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRQb3MgKCBwICkge1xyXG5cclxuICAgICAgICAvL2lmKCBwID09PSB1bmRlZmluZWQgKSBwID0gWyB0aGlzLncgLyAyLCB0aGlzLncgLyAyIF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggcFswXSsxMjggLCBwWzFdKzEyOCApO1xyXG5cclxuICAgICAgICBsZXQgciA9IDEvdGhpcy5tYXhQb3NcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9ICgocFswXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAoKHBbMV0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2LCB1cCA9IGZhbHNlICkge1xyXG5cclxuICAgICAgICBpZiggdiA9PT0gdW5kZWZpbmVkICkgdiA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8qaWYgKCB2WzBdIDwgdGhpcy5ib3VuZHMueDEgKSB2WzBdID0gdGhpcy5ib3VuZHMueDE7XHJcbiAgICAgICAgaWYgKCB2WzBdID4gdGhpcy5ib3VuZHMueDIgKSB2WzBdID0gdGhpcy5ib3VuZHMueDI7XHJcbiAgICAgICAgaWYgKCB2WzFdIDwgdGhpcy5ib3VuZHMueTEgKSB2WzFdID0gdGhpcy5ib3VuZHMueTE7XHJcbiAgICAgICAgaWYgKCB2WzFdID4gdGhpcy5ib3VuZHMueTIgKSB2WzFdID0gdGhpcy5ib3VuZHMueTI7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzBdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMV0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoICgodGhpcy52YWx1ZVswXS90aGlzLnJhbmdlKSp0aGlzLm1heFBvcykrMTI4ICAsICgodGhpcy52YWx1ZVsxXS90aGlzLnJhbmdlKSp0aGlzLm1heFBvcykrMTI4IClcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnBvcylcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHVwICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qbGVycCggczEsIHMyLCBkMSwgZDIsIGMgPSB0cnVlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9ICggZDIgLSBkMSApIC8gKCBzMiAtIHMxICk7XHJcblxyXG4gICAgICAgIHJldHVybiBjID8gKCB2ICkgPT4geyBcclxuICAgICAgICAgICAgcmV0dXJuICggKCB2IDwgczEgPyBzMSA6IHYgPiBzMiA/IHMyIDogdiApIC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH0gOiAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgcmV0dXJuICggdiAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9XHJcblxyXG4gICAgfSovXHJcblxyXG59IiwiXHJcbmltcG9ydCB7IEJvb2wgfSBmcm9tICcuLi9wcm90by9Cb29sLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vcHJvdG8vQnV0dG9uLmpzJztcclxuaW1wb3J0IHsgQ2lyY3VsYXIgfSBmcm9tICcuLi9wcm90by9DaXJjdWxhci5qcyc7XHJcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnLi4vcHJvdG8vQ29sb3IuanMnO1xyXG5pbXBvcnQgeyBGcHMgfSBmcm9tICcuLi9wcm90by9GcHMuanMnO1xyXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL3Byb3RvL0dyYXBoLmpzJztcclxuaW1wb3J0IHsgR3JvdXAgIH0gZnJvbSAnLi4vcHJvdG8vR3JvdXAuanMnO1xyXG5pbXBvcnQgeyBKb3lzdGljayB9IGZyb20gJy4uL3Byb3RvL0pveXN0aWNrLmpzJztcclxuaW1wb3J0IHsgS25vYiB9IGZyb20gJy4uL3Byb3RvL0tub2IuanMnO1xyXG5pbXBvcnQgeyBMaXN0IH0gZnJvbSAnLi4vcHJvdG8vTGlzdC5qcyc7XHJcbmltcG9ydCB7IE51bWVyaWMgfSBmcm9tICcuLi9wcm90by9OdW1lcmljLmpzJztcclxuaW1wb3J0IHsgU2xpZGUgfSBmcm9tICcuLi9wcm90by9TbGlkZS5qcyc7XHJcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gJy4uL3Byb3RvL1RleHRJbnB1dC5qcyc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vcHJvdG8vVGl0bGUuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuLi9wcm90by9TZWxlY3QuanMnO1xyXG5pbXBvcnQgeyBCaXRtYXAgfSBmcm9tICcuLi9wcm90by9CaXRtYXAuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdG9yLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuLi9wcm90by9FbXB0eS5qcyc7XHJcbmltcG9ydCB7IEl0ZW0gfSBmcm9tICcuLi9wcm90by9JdGVtLmpzJztcclxuaW1wb3J0IHsgR3JpZCB9IGZyb20gJy4uL3Byb3RvL0dyaWQuanMnO1xyXG5pbXBvcnQgeyBQYWQyRCB9IGZyb20gJy4uL3Byb3RvL1BhZDJELmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0VBQUE7RUFDQTtFQUNBO0FBQ0E7QUFDWSxRQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLE1BQU0sQ0FBQyxHQUFHO0VBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0VBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0VBQ0EsRUFBRSxFQUFFLEVBQUUsSUFBSTtFQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUs7RUFDYixFQUFFLEtBQUssRUFBRSxLQUFLO0VBQ2QsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7RUFDQSxFQUFFLFVBQVUsRUFBRSxJQUFJO0VBQ2xCLEVBQUUsVUFBVSxFQUFFLEtBQUs7RUFDbkIsRUFBRSxTQUFTLEVBQUUsS0FBSztFQUNsQixFQUFFLFlBQVksRUFBRSxLQUFLO0VBQ3JCLEVB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QSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDM0QsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDOUIsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtFQUN2QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTTtFQUN2QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUM7RUFDZixNQUFNLENBQUM7RUFDUCxNQUFNLENBQUM7RUFDUCxNQUFNLENBQUMsQ0FBQztBQUNSO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEI7RUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRTtFQUMxQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUN0QixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUN0QixPQUFPLE1BQU07RUFDYixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO0VBQ3RCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7RUFDdEIsT0FBTztBQUNQO0VBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtFQUM3QixRQUFRLElBQUksR0FBRyxDQUFDLENBQUM7QUFDakI7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUU7RUFDaEMsVUFBVSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDekIsVUFBVSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUMzQixVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ25CLFNBQVM7RUFDVCxRQUFRLE1BQU07RUFDZCxPQUFPO0VBQ1AsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDcEMsR0FBRztBQUNIO0VBQ0EsRUFBRSxVQUFVLEVBQUUsWUFBWTtFQUMxQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU87RUFDdEIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ25CLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNqQixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ2hCLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ2YsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxLQUFLLEtBQUs7RUFDN0M7QUFDQTtFQUNBLElBQU8sSUFBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztFQUN2QixNQUFNLENBQUMsQ0FBQztFQUNSLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNiLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLE1BQU0sRUFBRSxDQUFDO0VBQ1QsTUFBTSxDQUFDLENBQUMsQ0FDRTtBQUNWO0VBQ0EsSUFBSSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkI7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDaEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2pCLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVjtFQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzQztFQUNBLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7RUFDbkI7QUFDQTtFQUNBLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtFQUN4QixRQUFRLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEM7RUFDQSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQy9CLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3RCO0FBQ0E7RUFDQSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNCLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDcEMsYUFBYSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUU7RUFDMUIsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENB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QUMsRUFBRTtBQUMxQjtFQUNBLFFBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakg7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtFQUN0QixRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDckMsUUFBUSxPQUFPLENBQUMsQ0FBQztFQUNqQixLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7RUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztFQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0VBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7RUFDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ25CLFNBQVM7RUFDVCxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMs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RUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNySDtFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDN0ksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNB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RUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7RUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtFQUNBO0FBQ0E7RUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtFQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7RUFDQSxTQUFTLE1BQU07RUFDZjtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvRixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwSTtFQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7RUFDL0IsU0FBUztBQUNUO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksYUFBYSxFQUFFLFlBQVk7QUFDL0I7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNwQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztFQUNoSixRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDdkMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDbkIsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQzNCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN4QixRQUFXLElBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBSztFQUM1RCxRQUFRLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUM7RUFDakQsUUFBUSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7RUFDdkI7RUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0VBQ0EsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2QixZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUM5QixZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0VBQ2pDLFlBQVksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNoRDtFQUNBLFlBQVksRUFBRSxHQUFHO0VBQ2pCLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDM0MsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHO0VBQ3ZELGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDM0MsYUFBYSxDQUFDO0VBQ2Q7RUFDQSxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RDtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCO0VBQ0EsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsZ0JBQWdCLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDMUIsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3RELGlCQUFpQjtBQUNqQjtFQUNBLGdCQUFnQixJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0c7RUFDQSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNELGdCQUFnQixDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbko7RUFDQSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUg7RUFDQSxhQUFhO0VBQ2IsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztFQUM1QixZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFFaEMsU0FBUztBQUlUO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDdkI7RUFDQTtFQUNBLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDakcsUUFBUSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JJO0VBQ0EsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQy9FLFFBQVEsQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN4STtFQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNoRyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ25HLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzlJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzlJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLG9GQUFvRixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQy9LO0FBQ0E7RUFDQSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUc7RUFDQSxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQzFCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtBQUNyQztFQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDcEI7RUFDQSxRQUFRLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQztFQUNwQztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLDRGQUE0RixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7RUFDak8sUUFBUSxPQUFPLElBQUk7RUFDbkIsWUFBWSxLQUFLLE1BQU07RUFDdkIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO0VBQzNGLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssUUFBUTtFQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7RUFDNUYsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxLQUFLO0VBQ3RCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztFQUN6RixZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLEtBQUs7RUFDdEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLG1GQUFtRixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0VBQ3pKLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssUUFBUTtFQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsbUZBQW1GLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7RUFDNUosWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxRQUFRO0VBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztFQUM1RixZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLE1BQU07RUFDdkIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLHdKQUF3SixDQUFDLEtBQUssQ0FBQztFQUN2TSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSw0S0FBNEssQ0FBQztFQUMvTCxZQUFZLE1BQU07RUFDbEIsU0FBUztFQUNULFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQztFQUM1QixRQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksVUFBVSxDQUFDLENBQUM7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtFQUNBLElBQUksV0FBVyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsQ0FBQztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLENBQUM7QUFDZDtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7RUFDQSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0VBQ0EsSUFBSSxXQUFXLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7RUFDQSxFQUFDO0FBQ0Q7RUFDQSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDWjtBQUNZLFFBQUMsS0FBSyxHQUFHOztFQ3YzQnJCO0FBQ0E7QUFDQTtFQUNPLE1BQU0sS0FBSyxDQUFDO0FBQ25CO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLE9BQU8sU0FBUyxFQUFFLElBQUksR0FBRztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUNsQjtFQUNBLFFBQVEsUUFBUSxJQUFJO0VBQ3BCLFlBQVksS0FBSyxLQUFLO0VBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBRztFQUMzRCxZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLEtBQUs7RUFDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFHO0VBQ3ZELFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssS0FBSztFQUN0QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUc7RUFDeEQsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxLQUFLO0VBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBRztFQUN2RCxZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssS0FBSztFQUNsQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsRUFBRSwwQkFBMEIsRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7RUFDOUcsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxNQUFNO0VBQ3ZCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFHO0VBQy9ILFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssTUFBTTtFQUN2QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBRztFQUM3RixZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLElBQUk7RUFDckIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBRztFQUNoRyxZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLE9BQU87RUFDeEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFHO0VBQ3hHLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssTUFBTTtFQUN2QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7RUFDbEYsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxLQUFLO0VBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7RUFDeEYsWUFBWSxNQUFNO0FBQ2xCO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLENBQUM7QUFDaEI7RUFDQSxLQUFLO0FBQ0w7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLE9BQU8sTUFBTSxDQUFDLGtCQUFrQixLQUFLLFVBQVUsRUFBRTtFQUM3RCxZQUFZLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsMkJBQTBCO0VBQ3hFLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSTtBQUNaO0VBQ0EsU0FBUyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUU7QUFDaEM7RUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHO0VBQzVCLGdCQUFnQixzQkFBc0IsRUFBRSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUs7RUFDM0QsZ0JBQWdCLFFBQVEsRUFBRSxLQUFLO0VBQy9CO0VBQ0EsYUFBYSxDQUFDO0FBQ2Q7RUFDQSxZQUFZLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUU7QUFDbkQ7RUFDQTtFQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxHQUFFO0VBQ3JFLFlBQVksTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFFO0VBQ2xEO0FBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxJQUFJO0FBQ25DO0VBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEY7RUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7RUFDbEYsWUFBWSxNQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0VBQy9FLFlBQVksTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUM1QztFQUNBLFlBQVksSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxHQUFFO0VBQzlFLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksR0FBRTtFQUN2RixpQkFBaUIsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLEdBQUU7QUFDMUM7RUFDQSxZQUFZLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUU7QUFDeEM7RUFDQSxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFNO0FBQzdDO0VBQ0EsZ0JBQWdCLE9BQU8sSUFBSTtFQUMzQixvQkFBb0IsS0FBSyxPQUFPO0VBQ2hDLHdCQUF3QixJQUFJLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQztFQUM1Qyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sR0FBRyxXQUFXO0VBQ2hELDRCQUE0QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRTtFQUM1RSwwQkFBeUI7RUFDekIsd0JBQXdCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsUUFBTztFQUN6QyxvQkFBb0IsTUFBTTtFQUMxQixvQkFBb0IsS0FBSyxNQUFNO0VBQy9CLHdCQUF3QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUU7RUFDMUYsb0JBQW9CLE1BQU07RUFDMUIsb0JBQW9CO0VBQ3BCLHdCQUF3QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRTtFQUM1RSxvQkFBb0IsTUFBTTtFQUMxQixpQkFBaUI7QUFDakI7RUFDQSxjQUFhO0FBQ2I7RUFDQSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkI7RUFDQSxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUU7QUFDM0Q7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxDQUFDLE9BQU8sMEJBQTBCLEVBQUUsT0FBTyxHQUFHO0VBQzlDLFFBQVEsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSztFQUN4QyxZQUFZLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7RUFDMUQsWUFBWSxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztFQUNoQyxZQUFZLEtBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztFQUM5QyxZQUFZLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUs7RUFDeEMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQzNDLGlCQUFpQixPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDakYsaUJBQWlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtFQUNBLFlBQVksS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxNQUFNO0VBQ25ELGdCQUFnQixPQUFPO0VBQ3ZCLG9CQUFvQixDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSztFQUNuRCx3QkFBd0IsT0FBTztFQUMvQiw0QkFBNEIsT0FBTyxFQUFFO0VBQ3JDLGdDQUFnQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSztFQUN6RCxvQ0FBb0MsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ2xELGlDQUFpQyxDQUFDO0VBQ2xDLHlCQUF5QixDQUFDO0VBQzFCLHFCQUFxQixDQUFDO0VBQ3RCLGlCQUFpQixDQUFDO0VBQ2xCLGFBQWEsQ0FBQyxDQUFDO0FBQ2Y7RUFDQSxZQUFZLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUMxQixTQUFTLENBQUM7RUFDVixLQUFLO0FBQ0w7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxhQUFhLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQ2hDO0VBQ0EsUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksT0FBTyxNQUFNLENBQUMsa0JBQWtCLEtBQUssVUFBVSxFQUFFO0VBQzdELFlBQVksTUFBTSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQywyQkFBMEI7RUFDeEUsWUFBWSxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQzNCLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSTtBQUNaO0VBQ0EsWUFBWSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUU7QUFDbkM7RUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHO0VBQzVCLGdCQUFnQixhQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPO0VBQ2hELGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO0VBQ2xDLGFBQWEsQ0FBQztBQUNkO0VBQ0EsWUFBWSxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxHQUFFO0VBQ25ELFlBQVksT0FBTyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFDO0VBQ3pFLFlBQVksT0FBTyxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xGO0FBQ0E7RUFDQTtFQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDdEU7RUFDQSxZQUFZLElBQUksT0FBTyxHQUFHLE1BQU07QUFDaEM7RUFDQTtFQUNBLFlBQVksTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdkQ7RUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQy9FO0VBQ0E7RUFDQSxZQUFZLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQztFQUNBO0VBQ0EsWUFBWSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvQjtFQUNBLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNuQjtFQUNBLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQjtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTywwQkFBMEIsRUFBRSxPQUFPLEdBQUc7RUFDakQsUUFBUSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLO0VBQ3hDLFlBQVksTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsRCxZQUFZLENBQUMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxjQUFhO0VBQy9ELFlBQVksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7RUFDOUUsWUFBWSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxHQUFFO0FBQ2hEO0VBQ0EsWUFBWSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU07RUFDOUMsZ0JBQWdCLE9BQU87RUFDdkIsb0JBQW9CLFVBQVUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRTtFQUN6RSxrQkFBaUI7RUFDakIsYUFBYSxFQUFDO0VBQ2QsWUFBWSxDQUFDLENBQUMsS0FBSyxHQUFFO0VBQ3JCLFNBQVMsQ0FBQztFQUNWLEtBQUs7QUFDTDtBQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLGFBQWEsU0FBUyxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJO0VBQ1o7RUFDQSxZQUFZLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7RUFDOUQsWUFBWSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7RUFDN0IsWUFBWSxXQUFXLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRTtFQUN2RCxnQkFBZ0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7RUFDbkQsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDakMsYUFBYTtBQUNiO0VBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQztFQUM5QixZQUFZLE9BQU8sS0FBSyxDQUFDO0FBQ3pCO0VBQ0EsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ25CO0VBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsU0FBUztFQUNUO0VBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0E7O0VDalFPLE1BQU0sRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQzdCO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNiLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNkO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNiLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDYixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNkO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEIsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sR0FBRztBQUMzQjtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7RUFDbkIsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztFQUNuQixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sR0FBRztBQUN6QjtFQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUMzQztFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEdBQUc7QUFDWDtFQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN4RDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0M7RUFDQSxFQUFFLEtBQUssS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEM7RUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2Y7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDZCxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0VBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtFQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHO0FBQ2xHO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ25CO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7RUFDbEIsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdB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QUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7RUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7RUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0VBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztFQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ25DO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7RUFDakUsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztFQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFlBQVksS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUM7RUFDN0UsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDO0FBQ2hGO0VBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7RUFDNUUsTUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDNUUsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0VBQ3pELElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU87RUFDL0IsUUFBUSw0RkFBNEY7RUFDcEcsUUFBUSxhQUFhLENBQUM7QUFDdEI7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUc7RUFDekIsTUFBTSxLQUFLO0VBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsaUNBQWlDO0VBQ25FLEtBQUssQ0FBQztBQUNOO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2hDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDakMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztFQUNsQixJQUFJLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9DO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtFQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztFQUMxQyxNQUFNLElBQUksU0FBUyxFQUFFO0VBQ3JCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztFQUN0QztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDO0VBQ2pFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztFQUNwRSxPQUFPLE1BQU07RUFDYixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsc0JBQXNCLENBQUM7RUFDdEUsT0FBTztFQUNQLEtBQUs7QUFDTDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtFQUN0QixNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUNuRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDbEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ3hDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUM3RSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRTtFQUNmLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0VBQ3RDLE1BQU0sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0VBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hDLE9BQU87RUFDUCxNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3ZCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDekMsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksR0FBRztFQUNULElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDckM7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUM1RDtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtFQUN6QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0VBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztFQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0VBQ2hDLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQ3pDLEtBQUs7QUFDTDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtFQUM5QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDdEMsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0VBQzlCLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQzFCLE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksRUFBRTtFQUNWLE1BQU0sSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJO0VBQzFCLFVBQVUsSUFBSSxDQUFDLE1BQU07RUFDckIsVUFBVSxJQUFJLENBQUMsSUFBSTtFQUNuQixVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztFQUN6QixVQUFVLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2pFLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QjtFQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQjtFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO0VBQ3BCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztFQUM3QyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdEIsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsYUFBYSxHQUFHO0VBQ2xCLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtFQUNwRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7RUFDOUUsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBO0FBQ0E7RUFDQSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0VBQy9CLElBQUksT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUM5QyxHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO0VBQ3BDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDNUMsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUNuQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUc7QUFDSDtFQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0VBQ3pCLElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDeEMsR0FBRztBQUNIO0VBQ0EsRUFBRSxZQUFZLEdBQUc7RUFDakIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7RUFDaEQsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBQ3hDLEdBQUc7QUFDSDtFQUNBLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRTtFQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDL0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ25ELEdBQUc7QUFDSDtFQUNBLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRTtFQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDbkQsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ3ZDLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRTtFQUNqQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDM0MsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ25DLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRTtFQUNsQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDM0MsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3BDLEdBQUc7QUFDSDtFQUNBO0FBQ0E7RUFDQSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUU7RUFDZixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdkIsR0FBRztBQUNIO0VBQ0E7QUFDQTtFQUNBLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFDYjtFQUNBLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDWjtFQUNBO0FBQ0E7RUFDQSxFQUFFLE9BQU8sR0FBRztFQUNaLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxHQUFHO0VBQ1gsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRztBQUNIO0VBQ0EsRUFBRSxLQUFLLEdBQUc7RUFDVixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO0VBQzFCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTztFQUNqQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztFQUM5RCxHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sR0FBRztFQUNYLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU87RUFDMUIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPO0VBQ2pDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO0VBQ2xFLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtFQUNaLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7RUFDM0QsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLEdBQUc7RUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMxQyxJQUFJLE9BQU8sSUFBSSxDQUFDO0VBQ2hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyxHQUFHO0VBQ2Q7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsT0FBTztFQUN6QyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPO0VBQzVCLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU87RUFDNUI7RUFDQSxJQUFJLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztFQUNwRSxJQUFJLE9BQU8sVUFBVSxDQUFDO0VBQ3RCLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNkLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQixJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckQ7RUFDQSxTQUFTLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ2xCLElBQUksSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0VBQzNCLElBQUksSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRTtFQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDeEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLFVBQVUsQ0FBQztFQUN0QixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNkLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU87RUFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7RUFDOUIsSUFBSSxPQUFPLElBQUksQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRTtFQUNwQixJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPO0VBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7RUFDekIsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztFQUN6QixJQUFJLE9BQU8sSUFBSSxDQUFDO0VBQ2hCLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0VBQ1osSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztFQUMxQixJQUFJLE9BQU8sSUFBSSxDQUFDO0VBQ2hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNiLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7RUFDM0IsSUFBSSxPQUFPLElBQUksQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtFQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ3ZCLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEUsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBQ3hELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDeEIsR0FBRztBQUNIO0VBQ0EsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RSxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtFQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7RUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hELEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQ3pCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztFQUMxQixHQUFHO0FBQ0g7RUFDQSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ1o7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsUUFBUSxHQUFHO0VBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ2xDLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDeEIsR0FBRztBQUNIO0VBQ0EsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPO0FBQ2hDO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQjtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3JCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDakMsS0FBSyxNQUFNO0VBQ1gsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDdkM7RUFDQTtFQUNBLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNuQyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUM3QyxLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0EsRUFBRSxLQUFLLEdBQUc7RUFDVixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU87RUFDaEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNwRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ3ZELEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFO0VBQ25CLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDekI7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ25CLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtFQUMvQixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ2hFLFdBQVcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ2hDLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQ3ZELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN0RCxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDakU7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ1Y7RUFDQSxJQUFJLFFBQVEsSUFBSSxDQUFDLFNBQVM7RUFDMUIsTUFBTSxLQUFLLENBQUM7RUFDWixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZCxRQUFRLE1BQU07RUFDZCxNQUFNLEtBQUssQ0FBQztFQUNaLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNoQixRQUFRLE1BQU07RUFDZCxNQUFNLEtBQUssQ0FBQztFQUNaLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNqQixRQUFRLE1BQU07RUFDZCxNQUFNLEtBQUssQ0FBQztFQUNaLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUNsQixRQUFRLE1BQU07RUFDZCxNQUFNLEtBQUssQ0FBQztFQUNaLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztFQUNuQixRQUFRLE1BQU07RUFDZCxNQUFNLEtBQUssQ0FBQztFQUNaLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQztFQUNwQixRQUFRLE1BQU07RUFDZCxNQUFNLEtBQUssQ0FBQztFQUNaLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztFQUNyQixRQUFRLE1BQU07RUFDZCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDbEQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNyQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDM0MsR0FBRztBQUNIO0VBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ2QsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEMsSUFBSTtFQUNKLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztFQUMzRSxNQUFNO0VBQ04sR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDakIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTztFQUMxQixJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztFQUMzQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztFQUNyQixNQUFNLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGdDQUFnQyxDQUFDLENBQUM7QUFDckU7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNCLEdBQUc7QUFDSDtFQUNBLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtFQUNYLElBQUksT0FBTyxLQUFLLENBQUM7RUFDakIsR0FBRztFQUNILEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRTtFQUNmLElBQUksT0FBTyxLQUFLLENBQUM7RUFDakIsR0FBRztFQUNILEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRTtFQUNmLElBQUksT0FBTyxLQUFLLENBQUM7RUFDakIsR0FBRztFQUNILEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNiLElBQUksT0FBTyxLQUFLLENBQUM7RUFDakIsR0FBRztFQUNILEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNiLElBQUksT0FBTyxLQUFLLENBQUM7RUFDakIsR0FBRztFQUNILEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtFQUNYLElBQUksT0FBTyxLQUFLLENBQUM7RUFDakIsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0VBQ3pCLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7RUFDMUIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztFQUN6QixHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFO0VBQ3JCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxRQUFRLENBQUM7RUFDcEQsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksR0FBRztFQUNULElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU87RUFDNUIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztFQUN2QixJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0VBQzVCLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztFQUMvQyxHQUFHO0FBQ0g7RUFDQSxFQUFFLEtBQUssR0FBRztFQUNWLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTztFQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQ3hCLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDNUIsSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0VBQ2pELEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxHQUFHO0VBQ2IsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUM1QixHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sR0FBRztFQUNYLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDNUIsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQ2I7RUFDQSxFQUFFLFFBQVEsR0FBRyxFQUFFO0FBQ2Y7RUFDQSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUU7RUFDbEIsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNoQyxHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFO0VBQ25CLElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNsQyxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNkLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0VBQy9CLEdBQUc7RUFDSDs7RUNybkJPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7RUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFLO0VBQ3JDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDdEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBRztFQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0VBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtFQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFDQUFxQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFFO0VBQ3BLLFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFDO0VBQ3RCLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMs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QUFDeEI7RUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUM7RUFDeEIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUM7RUFDdEIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUU7QUFDbEk7RUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUU7QUFDdEM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7RUFDekQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3REO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQzNFLFFBQVEsSUFBSSxD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QUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMvQixTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxHQUFHO0VBQ2xDO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNyRDtFQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztFQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYTtFQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztFQUN4QjtFQUNBLFNBQVM7RUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDbEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0MsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RDLFFBQVEsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xHO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0VBQ0Es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LFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7RUFDQSxTQUFTLE1BQU07QUFDZjtFQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7RUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0VBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDckM7RUFDQSxTQUFTLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUMvRCxTQUFTLElBQUksR0FBRyxJQUFJ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LElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtFQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7RUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0VBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztFQUN0QztFQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7RUFDdEM7RUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7RUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtFQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQ3hCO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFB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QyxHQUFHLENBQUMsQ0FBQztFQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7RUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBO0VBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVEO0VBQ0E7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7RUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDcEM7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7RUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztFQUM1QyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDckI7RUFDQSxFQUFFO0FBQ0Y7QUFDQTtFQUNBOztFQ3BhTyxNQUFNLEdBQUcsU0FBUyxLQUFLLENBQUM7QUFDL0I7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQztFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFF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QTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0VBQzdLO0FBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtEQUFrRCxFQUFFLENBQUM7QUFDMUo7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsMkVBQTJFLENBQUMsQ0FBQztBQUN0SjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0VBQ0E7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7RUFDOUI7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FB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QyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNoQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtFQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7RUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDcEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ25FLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzNEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztFQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3REO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7RUFDakM7RUFDQSxLQUFLO0FBQ0w7QUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3BDO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxHQUFHLENBQUMsR0FBRztBQUNYO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDOUIsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3hDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDdkI7RUFDQSxRQUFRLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHO0FBQzNDO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDdkY7RUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQ2pDLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUI7RUFDQSxZQUFZLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRztBQUM5QjtFQUNBLGdCQUFnQixJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztFQUNqRSxnQkFBZ0IsSUFBSSxhQUFhLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7QUFDdkU7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztFQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDO0FBQ25EO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUN2RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQztFQUNBLEtBQUs7RUFDTDtFQUNBOztFQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0VBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztFQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQ7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0VBQ3hFLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDakQ7RUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0VBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQy9DLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtFQUN6RCxhQUFhO0VBQ2I7RUFDQTtFQUNBO0VBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0VBQ0E7QUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlEQUF5RCxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM1TDtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQ7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7RUFDdEosUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0gsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEo7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztFQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtFQUNyQyxZ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R0FBRztBQUNsQjtFQUNBLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFFO0VBQ3JDO0FBQ0E7RUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JDO0VBQ0EsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFDO0VBQzVDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNwQztFQUNBLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUc7RUFDMUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RCO0VBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0VBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztFQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0VBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtFQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtFQUNBLE1BQU07QUFDTjtFQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDO0VBQ2pELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUNsQjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSTtBQUM5QjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0M7RUFD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WSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRTtFQUMvQixTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDcEM7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0VBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtBQUN2QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDN0M7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBOztFQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztFQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7RUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87RUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7RUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0VBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDbkksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2hFO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ25ELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzVFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDN0Y7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQ3BCO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUMzQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtFQUNBLFFBQVEsT0FBTyxJQUFJO0VBQ25CLFlBQVksS0FBSyxDQUFDO0VBQ2xCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ2xDLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN4RSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDbEUsaUJBQWlCLE1BQU07RUFDdkIsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNyRTtFQUNBLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDckUsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2hFLGlCQUFpQjtFQUNqQjtFQUNBLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssQ0FBQztFQUNsQixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUNsQyxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDekUsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzNFLGlCQUFpQixNQUFNO0VBQ3ZCLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDdEU7RUFDQSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3hFLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDcEUsaUJBQWlCO0VBQ2pCLFlBQVksTUFBTTtBQUdsQjtFQUNBLFNBQVM7RUFDVCxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksV0FBVyxDQUFDLEVBQUU7RUFDbEIsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztFQUN6RCxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPO0VBQ3ZDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ25GO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxZQUFZLENBQUMsRUFBRTtBQUNuQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksR0FBRyxPQUFPO0VBQzVDLFFBQVEsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztFQUN2QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0VBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0VBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztFQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtFQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtFQUNBLGFBQWE7QUFDYjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7QUFDQTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7RUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0VBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFB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QU8sRUFBRSxDQUFDO0VBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0VBQ3pEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQzVGO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0VBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFF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LEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdB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O0VBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHO0FBQzNDO0VBQ0EsWUFBWSxDQUFDLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUNoRCxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDaEQsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDOUQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztFQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNyRjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtFQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0VBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7RUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN6RDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUks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SUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDL0Q7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMvRDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2hFO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDakQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUMvQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzlDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztFQUN2RCxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztFQUMvRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7RUFDdkMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUN4QyxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHO0FBQzlCO0VBQ0EsWUFBWSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFDO0VBQzdELFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUM7RUFDcEQsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQztFQUNyRCxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDO0VBQ3pELFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVE7RUFDakQsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7RUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLFlBQVksSUFBSSxH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QUNiO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDMUIsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtFQUMvQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFFLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztFQUM1RixRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFFO0FBQzVEO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUU7RUFDaEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUNuQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDbEMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElB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LElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFH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QUssS0FBSyxDQUFDLEVBQUU7RUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDaEMsT0FBTztBQUNQO0VBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7RUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztFQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ3pDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFH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LENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtFQUNBO0VBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtFQUNBO0VBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0VBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7RUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0VBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7RUFDcEQsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzlDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNqRTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FB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SUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDeEQsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDNUQsUUFBUSxNQUFNO0VBQ2QsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtFQUNiLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ2hGO0FBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFB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QUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxJQUFJO0FBQ2Y7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0M7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDNUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztFQUMzQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQztBQUNyQztFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDO0VBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO0VBQ2hDLFFBQVEs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Q0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDaEQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7QUFDakQ7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDaEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDdkM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3BD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O0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztFQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEtBQUk7RUFDekMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksS0FBSTtFQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFJO0FBQ3RDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDdEtPLE1BQU0sTUFBTSxTQUFTLEtBQUssQ0FBQztBQUNsQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFFO0VBQ2xDLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQztFQUM1QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSTtBQUN2QjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFJO0FBQzdCO0FBQ0E7QUFDQTtFQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENB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QUMxQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUk7RUFDNUQsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDbkI7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNWTyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUM7QUFDaEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3JCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQzlCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEdBQUc7QUFDZDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRztFQUNkO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtFQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQy9CO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUM1QixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVDO0VBQ0EsWUFBWSxRQUFRLENBQUM7QUFDckI7RUFDQSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU07RUFDL0YsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtFQUNwRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FB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QUcsQ0FBQyxDQUFDLENBQUM7RUFDbkIsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RELFNBQVM7QUFDVDtFQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVELFNBQVM7QUFDVDtFQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEMsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ3ZCLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0VBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0VBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFFO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7RUFDN0IsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQztFQUNsQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0VBQzVELFNBQVMsTUFBTTtFQUNmLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FB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Q0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0VBQ0EsWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDckIsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUM3RCxhQUFhLE1BQU07RUFDbkIsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUM3RCxhQUFhO0FBQ2I7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsRDtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0VBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztFQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztFQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM5RjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztFQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztFQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FB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bEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0VBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7RUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxRQUFRLElBQUk7RUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztFQUMzRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBQztFQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztFQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztFQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUM5RDtFQUNBLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtFQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0VBQ2hELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFFO0VBQ3BFO0VBQ0EsWUFBWSxNQUFNO0VBQ2xCLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7RUFDQTtBQUNB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QUMsTUFBTTtFQUNsRCxZQUFZLEtBQUssS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDOUMsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ2xELFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNsRCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDeEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ2hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNoRCxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNyRSxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDbEQsWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDekUsWUFBWSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDL0QsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxN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O0VBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0VBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztBQUM1QztFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNwRTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0VBQzNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2Y7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3ZFO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7RUFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTTtFQUNmLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFD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QyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0VBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0VBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDaEQsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3pCLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtFQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FB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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0pIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7RUFBQTtFQUNBO0VBQ0E7QUFDQTtBQUNZLFFBQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7RUFDQTtBQUNBO0VBQ0EsTUFBTSxDQUFDLEdBQUc7RUFDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7RUFDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7RUFDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0VBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSztFQUNiLEVBQUUsS0FBSyxFQUFFLEtBQUs7RUFDZCxFQUFFLE9B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LEdBQUcsRUFBRTtFQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztFQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0VBQ3JCLE9BQU87QUFDUDtFQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0VBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7RUFDMUIsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtFQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7RUFDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUNqQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxD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QyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0VBQ2pCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0VBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0VBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0VBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0VBQ2pCLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0VBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7RUFDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztFQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtFQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0VBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7RUFDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztFQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDbkIsU0FBUztFQUNULFFBQVEsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDM0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUMsYUFBYTtFQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMzRCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMxQixZQUFZLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7RUFDekcsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFlBQVksRUFBRSxXQUFXLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRztBQUM5RDtFQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakQ7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRDtFQUNBLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQjtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0c7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLE9BQU8sRUFBRSxXQUFXLEtBQUssR0FBRztBQUNoQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBRztFQUNwQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztFQUNwSixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JIO0VBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM3SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFB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LEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0VBQ0E7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztFQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0VBQ0E7QUFDQTtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FB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QUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0VBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztFQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztFQUN2QjtFQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7RUFDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7RUFDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0VBQ0EsWUFBWSxFQUFFLEdBQUc7RUFDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7RUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxhQUFhLENBQUM7RUFDZDtFQUNBLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlEO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkI7RUFDQSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixnQkFBZ0IsTUFBTSxDQUFDLEVBQUUsQ0FBQztFQUMxQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdEQsaUJBQWlCO0FBQ2pCO0VBQ0EsZ0JBQWdCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRztFQUNBLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0QsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEs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Q0FBQyxRQUFRLENBQUM7QUFDM0M7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMzQjtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2pELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztFQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQzFELFNBQVMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QjtFQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztFQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqRDtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDdkQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7RUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0VBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUN4QztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7RUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDbkM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFD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RyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQzdFLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0VBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7RUFDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEMsT0FBTztFQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDdkIsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN6QyxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxHQUFHO0VBQ1QsSUFBSSxJQUFJ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QUFDLENBQUM7RUFDakUsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7RUFDcEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0VBQzdDLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN0QixLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0EsRUFBRSxhQUFhLEdBQUc7RUFDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0VBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztFQUM5RSxLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0E7QUFDQTtFQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7RUFDL0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQzlDLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7RUFDcEMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFB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QUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO0VBQzNFLE1BQU07RUFDTixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUNqQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO0VBQzFCLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0VBQzNDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQ3JCLE1BQU0sT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztBQUNyRTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0IsR0FBRztBQUNIO0VBQ0EsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQ1gsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0VBQ0gsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0VBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0VBQ0gsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0VBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0VBQ0gsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ2IsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0VBQ0gsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ2IsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0VBQ0gsRUFBRSxLQUFLLENB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QUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07RUFDNUI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7RUFDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0VBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMs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RUFDbEQ7RUFDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztFQUM1RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7RUFDQTtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0VBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7RUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtFQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztFQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0VBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFJO0FBQ3REO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7RUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFDO0VBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztFQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUU7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDbkM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUk7RUFDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwQztFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU07RUFDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtFQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtFQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRTtBQUN4QjtFQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQztFQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUN0QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUNsSTtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUN0QztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtFQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0VBQ0EsUUFBUSxRQUFRLElBQUk7RUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RDtFQUNBLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtFQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0VBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RDtFQUNBLFlBQVksTUFBTTtFQUNsQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztFQUNqRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0VBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7RUFDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7RUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDckMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7RUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxVQUFVLEdBQUc7RUFDbEM7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3JEO0VBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN4RCxhQUFhO0VBQ2I7RUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7RUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0VBQ3hCO0VBQ0EsU0FBUztFQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztFQUNsRCxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMzQyxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMzQyxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEMsUUFBUSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbEc7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5RDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7RUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQ2hDLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztFQUNqSixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3pEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNqT08sTUFBTSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ2pDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNuQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7RUFDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7RUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztFQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM1QztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7RUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtFQUN2TTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNB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LENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkMsT0FBTztBQUNQO0VBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3BEO0VBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDakM7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxH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QUFDLEtBQUssQ0FBQztBQUMxQztFQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7RUFDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztFQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUM7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0VBQ0E7RUFDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtFQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7RUFDQTtBQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7RUFDNUQ7RUFDQTtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtFQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0VBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0VBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtFQUNwQztFQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztFQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0VBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtFQUNBLEVBQUU7QUFDRjtBQUNBO0VBQ0E7O0VDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQztBQUMvQjtFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENB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QUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0VBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0VBQ25DO0VBQ0EsS0FBSztFQUNMO0VBQ0E7O0VDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7RUFDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0VBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxRDtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FB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QUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtFQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcs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QUMsR0FBRyxDQUFDLE9BQU07RUFDL0IsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2xCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRTtFQUN6QyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFFO0VBQy9CLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNwQztFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtFQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7RUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNB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RUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzNCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksRUFB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QyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7RUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7RUFDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7RUFDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDM0QsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0VBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtFQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0VBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM3QjtBQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztFQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7RUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7RUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsU0FBUyxNQUFNO0VBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRjtFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FB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QUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7RUFDekQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDakYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVB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QUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztFQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDL0IsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztFQUM5QjtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDckQ7RUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJ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Q0FBQyxHQUFHO0FBQzlCO0VBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7RUFDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztFQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3pEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztFQUNyQztBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0VBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7RUFDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtFQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcscUNBQXFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNERBQTRELENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNyVSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsZ0RBQWdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNySztFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0VBQ2xJLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFlBQVks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QUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3RDLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0VBQzNCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDM0IsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0VBQzdDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUM3QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUk7RUFDakQsWUFBWSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztFQUN0QyxTQUFTO0FBQ1Q7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7RUFDL0MsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksZ0JBQWU7RUFDckQsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQUs7RUFDbkMsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksTUFBSztFQUN6QyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxLQUFJO0VBQzVDLFFBQVEsSUFBSSxD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Q0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEM7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksWUFBWSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7RUFDNUIsUUFBUSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDeEU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7RUFDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxPQUFPO0FBQ3JDO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENB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LENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtFQUN0RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQ3BDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzdCO0VBQ0EsU0FBUztBQUNUO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDckMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztBQUMxUDtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pKO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDcEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQzFCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztFQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQ3hCO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7RUFDckQsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRTtBQUNyQztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDMUIsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7RUFDOUIsWUFBWSxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7RUFDN0IsYUFBYSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7RUFDaEMsYUFBYSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFVBQVUsRUFBRSxJQUFJLENB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RUFDZCxRQUFRLEVBQUUsR0FBRyxDQUFDO0VBQ2QsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQ3ZCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoQjtFQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtFQUM1QixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztFQUNoQyxPQUFPO0FBQ1A7RUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUM3RDtFQUNBLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDL0MsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUN6QyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0VBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxL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QUMsTUFBTSxFQUFFLENBQUM7RUFDcEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDckIsTUFBTSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVFO0VBQ0E7RUFDQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0E7RUFDQSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RDtFQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNoRCxNQUFNLElBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDM0Q7RUFDQSxNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRDtFQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEM7RUFDQSxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ2hCLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtFQUNwRCxRQUFRLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDOUMsUUFBUSxJQUFJLENBQUMs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USxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDbEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUN4RCxRQUFRLE1BQU07RUFDZCxNQUFNLEtBQUssQ0FBQztFQUNaO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDdEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztFQUM1RCxRQUFRLE1BQU07RUFDZCxLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO0VBQ2IsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFEO0VBQ0EsSUFBSSxJQUFJLE9BQU87RUFDZixNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7RUFDM0M7QUFDQTtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0VBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDeEIsR0FBRztBQUNIO0VBQ0EsRUFBRSxLQUFLLEdBQUc7RUFDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7RUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDcEM7RUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNsQixHQUFHO0VBQ0g7O0VDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7RUFDMUQsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ3hDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUM3RDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRyxlQUFlLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDck4sUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcscUNBQXFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyx3Q0FBd0MsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLGVBQWUsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLG1DQUFtQyxDQUFDLENBQUM7QUFDOU87RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLDRCQUE0QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkk7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHNFQUFzRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDbkwsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDekU7RUFDQTtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7RUFDakQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLE1BQU0sQ0FBQztFQUMzQyxRQUFRLE9BQU8sRUFBRSxDQUFDO0FBQ2xCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3pCLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDaEMsWUFBWSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDdkMsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtFQUMxQixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQy9CLFlBQVksSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzdELFlBQVksT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3ZDLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0VBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQztFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0VBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7RUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7RUFDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0VBQy9CO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztFQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztFQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7RUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdkM7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7QUFDM0M7RUFDQSxRQUFR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SSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7RUFDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUMzQixLQUFLO0FBQ0w7RUFDQTs7RUMxRE8sTUFBTSxNQUFNLFNBQVMsS0FBSyxDQUFDO0FBQ2xDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUU7RUFDbEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7RUFDM0IsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksVUFBVSxHQUFFO0FBQ2hEO0VBQ0E7RUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzlCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsOENBQThDLEdBQUU7RUFDOU07QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxFQUFFLENBQUMsT0FBTyxHQUFHLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUU7RUFDNUwsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBSztBQUMxQztFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7RUFDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDekw7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBQztFQUNyQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBSztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztFQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtFQUNoRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNO0VBQzdELFFBQVEsT0FBTyxHQUFHO0FBQ2xCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztFQUNsQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3pCO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7RUFDL0I7RUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7RUFDdEMsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEtBQUs7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxLQUFLO0FBQ2hDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7RUFDMUI7RUFDQTtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxNQUFLO0VBQ3RCLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtFQUM3QixZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7RUFDbkMsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUU7RUFDakQsU0FBUyxNQUFNO0VBQ2YsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUM3QixTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sRUFBRTtBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUc7RUFDL0IsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUMzQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDL0MsWUFBWSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDeEIsU0FBUztFQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRztBQUNkO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3ZCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtFQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsTUFBSztFQUMxQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQzdCO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQzVDO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7RUFDdkIsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0VBQ3RGLHFCQUFxQixFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUU7RUFDOUMsYUFBYTtBQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDekI7RUFDQSxZQUFZLFFBQVEsQ0FBQztBQUNyQjtFQUNBLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07RUFDL0YsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTTtFQUNwRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0VBQ25HLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07QUFDckc7RUFDQSxhQUFhO0FBQ2I7RUFDQSxZQUFZLE1BQU0sR0FBRyxLQUFJO0FBQ3pCO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLE1BQU07QUFDckI7QUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2hEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUc7QUFDbkM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0VBQ3RCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7RUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksS0FBSTtFQUN6QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxLQUFJO0VBQzFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUk7QUFDdEM7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUN0S08sTUFBTSxNQUFNLFNBQVMsS0FBSyxDQUFDO0FBQ2xDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUU7RUFDbEMsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO0VBQzVDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFJO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7RUFDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7QUFDN0I7QUFDQTtBQUNBO0VBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM5QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDhDQUE4QyxHQUFFO0FBQzdNO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRTtFQUM1TCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0VBQzVDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQ3ZMO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDckI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0VBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLE1BQU0sQ0FBQztFQUM5RCxRQUFRLE9BQU8sR0FBRztBQUNsQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7RUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtFQUN6QjtFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDaEM7RUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN2QyxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDakM7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtFQUM3QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSTtFQUM5QixZQUFZLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRTtBQUNuRTtFQUNBLFNBQVM7QUFDVDtFQUNBO0VBQ0E7RUFDQTtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25DO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztBQUN2QjtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO0VBQzdCLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztFQUNuQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRTtFQUNqRCxTQUFTLE1BQU07RUFDZixZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDOUIsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQSxJQUFJLFlBQVksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQzlCO0VBQ0EsUUFBUSxJQUFJLEdBQUcsRUFBRTtFQUNqQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBRztFQUMxQixZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFFO0VBQy9CLFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFJO0VBQzNCLFlBQVksSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUU7RUFDaEMsU0FBUztFQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRztFQUMvQixZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvQztFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRTtFQUNuQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFDO0VBQzlFLGdCQUFnQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRTtFQUNwRixhQUFhO0VBQ2I7RUFDQSxTQUFTO0VBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNmO0VBQ0EsUUFBUSxJQUFJLE1BQU0sR0FBRyxNQUFLO0VBQzFCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDN0I7RUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBQztBQUN6QjtFQUNBLFlBQVksUUFBUSxDQUFDO0FBQ3JCO0VBQ0EsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtFQUMvRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNO0VBQ3BHLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07RUFDakcsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUNyRztFQUNBLGFBQWE7QUFDYjtFQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEI7QUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDakQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNqQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3BDO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztFQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7RUFDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDL0xBO0FBRUE7RUFDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtFQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNuQjtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztFQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM5QjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFD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Q0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztFQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtFQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ25DO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENB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LENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDM0QsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDMVRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7RUFDL0IsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFFO0FBQ3hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0VBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7RUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzlGO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0VBQ0E7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7RUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0VBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtFQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0VBQ0EsS0FBSztFQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7RUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0I7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFL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QSxRQUFRLFFBQVEsSUFBSTtFQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtFQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0VBQzNELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0VBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0VBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0VBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQzlEO0VBQ0EsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7RUFDaEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7RUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7RUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7RUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7RUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUU7RUFDcEU7RUFDQSxZQUFZLE1BQU07RUFDbEIsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztFQUMxQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0VBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7RUFDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMs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QUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZjtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxH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Q2xDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkQ7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFO0VBQ1gsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUI7RUFDQSxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQztFQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztFQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7RUFDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7RUFDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNoRCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDekIsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0VBQ1osSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDNUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztFQUM5QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNqRCxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2hCLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxPQUFPLEdBQUc7RUFDWixJQUFJLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMzRCxHQUFHO0FBQ0g7RUFDQSxFQUFFLElBQUksR0FBRztFQUNULElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQ3pELEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyxHQUFHO0VBQ2QsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDckIsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QjtFQUNBLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVc7RUFDaEMsVUFBVSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN4QyxVQUFVLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFDN0I7RUFDQSxNQUFNLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDbkQ7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN6QztFQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO0VBQ3BCLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7RUFDN0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDL0MsT0FBTyxNQUFNO0VBQ2IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDdkMsT0FBTztFQUNQLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakM7RUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNsRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDbkQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekQ7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVTtFQUMzQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztFQUMxRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3ZDLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxHQUFHO0VBQ1gsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUM1QixHQUFHO0FBQ0g7RUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDZCxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNsRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVE7RUFDckIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM1RSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzdDLEdBQUc7QUFDSDtFQUNBLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRTtFQUNsQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0VBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNoQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUMxQixLQUFLO0VBQ0wsR0FBRztFQUNIOzs7Ozs7Ozs7Ozs7OzsifQ== diff --git a/build/uil.module.js b/build/uil.module.js index fadb43a..2125e8b 100644 --- a/build/uil.module.js +++ b/build/uil.module.js @@ -6802,7 +6802,12 @@ class Slide extends Proto { } update(up) { - let ww = Math.floor(this.ww * ((this.sliderValue - this.min) / this.range)); + let normalized = (this.value - this.min) / this.range; + + let uneased = + this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); + + let ww = Math.floor(this.ww * uneased); //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); if (this.model !== 3) this.s[5].width = ww + "px"; @@ -9047,4 +9052,4 @@ class Gui { } export { Files, Gui, REVISION, Tools, add }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0pIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMuc2xpZGVyVmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcbiAgICAvL2xldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqICgodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2UpKTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gMykgdGhpcy5zWzVdLndpZHRoID0gd3cgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5zWzZdKSB0aGlzLnNbNl0ubGVmdCA9IHRoaXMuc2EgKyB3dyArIDMgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuXHJcbiAgICBpZiAodXApIHRoaXMuc2VuZCgpO1xyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy5zYiAtIHRoaXMuc2M7XHJcbiAgICB0aGlzLnd3ID0gdyAtIDY7XHJcblxyXG4gICAgbGV0IHR4ID0gdGhpcy5zYztcclxuICAgIGlmICh0aGlzLmlzVUkgfHwgIXRoaXMuc2ltcGxlKSB0eCA9IHRoaXMuc2MgKyAxMDtcclxuICAgIHRoaXMudHhsID0gdGhpcy53IC0gdHggKyAyO1xyXG5cclxuICAgIC8vbGV0IHR5ID0gTWF0aC5mbG9vcih0aGlzLmggKiAwLjUpIC0gODtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICBzWzJdLndpZHRoID0gdGhpcy5zYyAtIDYgKyBcInB4XCI7XHJcbiAgICBzWzJdLmxlZnQgPSB0aGlzLnR4bCArIDQgKyBcInB4XCI7XHJcbiAgICAvL3NbMl0udG9wID0gdHkgKyAncHgnO1xyXG4gICAgc1szXS5sZWZ0ID0gdGhpcy5zYSArIFwicHhcIjtcclxuICAgIHNbM10ud2lkdGggPSB3ICsgXCJweFwiO1xyXG4gICAgc1s0XS5sZWZ0ID0gdGhpcy5zYSArIFwicHhcIjtcclxuICAgIHNbNF0ud2lkdGggPSB3ICsgXCJweFwiO1xyXG4gICAgc1s1XS5sZWZ0ID0gdGhpcy5zYSArIDMgKyBcInB4XCI7XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUZXh0SW5wdXQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlICE9PSB1bmRlZmluZWQgPyBvLnZhbHVlIDogJyc7XHJcbiAgICAgICAgdGhpcy5wbGFjZUhvbGRlciA9IG8ucGxhY2VIb2xkZXIgfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZSA9IG8uZWRpdCAhPT0gdW5kZWZpbmVkID8gby5lZGl0IDogdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gdGV4dFxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonICsgKHRoaXMuaC0yKSArICdweDsgY29sb3I6JyArIGNjLnRleHQgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5iYWNrICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgLy8gZmFrZVxyXG4gICAgICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonICsgKHRoaXMuaC0yKSArICdweDsgYm9yZGVyOm5vbmU7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOicrY2MuYm9yZGVyKyc7JyApO1xyXG4gICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSAnJyApIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIFxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+PSB0aGlzLnNhICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggbmFtZSA9PT0gJ3RleHQnICkgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgLy9pZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICl7IHJldHVybjt9XHJcblxyXG4gICAgICAgIC8vaWYoIGwueCA+PSB0aGlzLnNhICkgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICAvL2Vsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RleHQnICkgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICBlbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBJbnB1dCggeCAtIHRoaXMuc2EgLTMsIHRoaXMuaXNEb3duICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2EgKyA1O1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAnMXB4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAoIGQgKyBlICkgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAgKCBkICsgZSApICArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICB3ICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgaWYoIXMpIHJldHVybjtcclxuICAgICAgICBzWzNdLndpZHRoID0gIDAgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gJ3QnXHJcbiAgICAgICAgc1s0XS53aWR0aCA9IDAgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWU7IFxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgICAgICBpZih0aGlzLnZhbHVlICE9PSAnJykgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgZWxzZSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBSRVpJU0VcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s1XS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1s1XS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBUaXRsZSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICBsZXQgcHJlZml4ID0gby5wcmVmaXggfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpyaWdodDsgd2lkdGg6NjBweDsgbGluZS1oZWlnaHQ6JysgKHRoaXMuaC04KSArICdweDsgY29sb3I6JyArIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaCA9PT0gMzEgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0udG9wID0gOCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSA4ICsgJ3B4JztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc1sxXS5qdXN0aWZ5Q29udGVudCA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIC8vc1sxXS50ZXh0QWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICBzWzFdLmZvbnRXZWlnaHQgPSBvLmZvbnRXZWlnaHQgfHwgJ2JvbGQnO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQuc3Vic3RyaW5nKDAsMSkudG9VcHBlckNhc2UoKSArIHRoaXMudHh0LnN1YnN0cmluZygxKS5yZXBsYWNlKFwiLVwiLCBcIiBcIik7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gcHJlZml4O1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQyKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcbiAgICAgICAgdGhpcy5zWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4JzsgLy8tIDUwICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0ubGVmdCA9IHRoaXMudyArICdweCc7Ly8tICggNTAgKyAyNiApICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q29sb3IoIGMgKSB7XHJcbiAgICAgICAgdGhpcy5zWzFdLmNvbG9yID0gY1xyXG4gICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMub25BY3RpZiA9IG8ub25BY3RpZiB8fCBmdW5jdGlvbigpe31cclxuXHJcbiAgICAgICAgLy9sZXQgcHJlZml4ID0gby5wcmVmaXggfHwgJyc7XHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICcgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrIGNjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuICAgICAgICAvL3RoaXMuY1syXS5zdHlsZS5jb2xvciA9IHRoaXMuZm9udENvbG9yO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IGJhY2tncm91bmQ6JyArIGNjLmlucHV0QmcgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuaW5wdXRCb3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnY3Vyc29yJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcbiAgICAgICAgdGhpcy5pc0FjdGlmID0gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3ZlcidcclxuICAgICAgICByZXR1cm4gJzAnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcbiAgICBcclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgLy90aGlzLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgLy90aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbIG5hbWUtMiBdO1xyXG4gICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhcHBseSAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8ICcnO1xyXG5cclxuICAgICAgICBpZiggdiAhPT0gdGhpcy52YWx1ZSApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSggMyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0xICkgdGhpcy5pc0FjdGlmID0gZmFsc2U7O1xyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0zICl7IFxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzQWN0aWYgKXsgdGhpcy5pc0FjdGlmID0gdHJ1ZTsgbj00OyB0aGlzLm9uQWN0aWYoIHRoaXMgKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7IHRoaXMuaXNBY3RpZiA9IGZhbHNlOyB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MiAmJiB0aGlzLmlzQWN0aWYgKSBuID0gNDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gYWN0aWZcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICh0aGlzLnNhKzgpICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBGaWxlcyB9IGZyb20gJy4uL2NvcmUvRmlsZXMuanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBCaXRtYXAgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMucmVmVGV4dHVyZSA9IG8udGV4dHVyZSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcblxyXG5cclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICcgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IGJhY2tncm91bmQ6JyArIGNjLmlucHV0QmcgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuaW5wdXRCb3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2xvYWQnIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJztcclxuICAgICAgICByZXR1cm4gJzAnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcbiAgICBcclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgLy90aGlzLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBGaWxlcy5sb2FkKCB7IGNhbGxiYWNrOnRoaXMuY2hhbmdlQml0bWFwLmJpbmQodGhpcykgfSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy90aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbIG5hbWUtMiBdO1xyXG4gICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBjaGFuZ2VCaXRtYXAoIGltZywgZm5hbWUgKXtcclxuXHJcbiAgICAgICAgaWYoIGltZyApe1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IGltZ1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCBmbmFtZSApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoICdudWxsJyApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhcHBseSAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8ICcnO1xyXG5cclxuICAgICAgICBpZiggdiAhPT0gdGhpcy52YWx1ZSApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pbWcgIT09IG51bGwgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLm9iamVjdExpbmsgIT09IG51bGwgKSB0aGlzLm9iamVjdExpbmtbIHRoaXMudmFsIF0gPSB2XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5jYWxsYmFjayApIHRoaXMuY2FsbGJhY2soIHRoaXMudmFsdWUsIHRoaXMuaW1nLCB0aGlzLm5hbWUgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSggMyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhazsgLy8gYWN0aWZcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICh0aGlzLnNhKzgpICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG59IiwiLy9pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0b3IgZXh0ZW5kcyBCdXR0b24ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgPT09IHVuZGVmaW5lZCApIG8uc2VsZWN0YWJsZSA9IHRydWVcclxuICAgICAgICBzdXBlciggbyApO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLnAgPSAxMDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudHh0O1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5pdHlwZSA9IG8uaXR5cGUgfHwgJ25vbmUnO1xyXG4gICAgICAgIHRoaXMudmFsID0gdGhpcy5pdHlwZTtcclxuXHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IHRoaXMuc3Znc1sgdGhpcy5pdHlwZSBdO1xyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTc7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5ncmFwaCwgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc1sxXS5tYXJnaW5MZWZ0ID0gMjAgKyAncHgnO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG5cclxuICAgICAgICAvL3VwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgbmFtZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkKCB0cnVlICk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdXQgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdmVyICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoNCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMik7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8qclNpemUgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgfSovXHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdHVzICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IG47XHJcbiAgICAgICAgICAgIGxldCBzID0gdGhpcy5zLCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zdGF0dXMgPSAxOyBzWzFdLmNvbG9yID0gY2MudGV4dDsgc1swXS5iYWNrZ3JvdW5kID0gJ25vbmUnOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zdGF0dXMgPSAyOyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnN0YXR1cyA9IDM7IHNbMV0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzWzBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnN0YXR1cyA9IDQ7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgIC8vIHJldHVybiB0aGlzLm1vZGUoIDEgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQgKCBiICl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcydcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnXHJcblxyXG5leHBvcnQgY2xhc3MgR3JpZCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICAvKnRoaXMudmFsdWVzID0gby52YWx1ZXMgfHwgW107XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF07Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIG8udmFsdWVzICl7XHJcbiAgICAgICAgICAgIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBTdHJpbmcgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gWyBvLnZhbHVlcyBdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8udmFsdWVzXHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy52YWx1ZXMucHVzaCggZyApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoO1xyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IG51bGw7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3BhY2VzID0gby5zcGFjZXMgfHwgWyBjYy5zeCwgY2Muc3kgXVxyXG4gICAgICAgIHRoaXMuYnNpemUgPSBvLmJzaXplIHx8IFsgOTAsIHRoaXMuaCBdO1xyXG5cclxuICAgICAgICB0aGlzLmJzaXplTWF4ID0gdGhpcy5ic2l6ZVswXVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ3JpZCA9IFsgMiwgTWF0aC5yb3VuZCggdGhpcy5sbmcgKiAwLjUgKSBdO1xyXG5cclxuICAgICAgICB0aGlzLmggPSAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuYnNpemVbMV0gKSArICggdGhpcy5ncmlkWzFdICogdGhpcy5zcGFjZXNbMV0gKSAvLysgNCAtICh0aGlzLm10b3AqMikgLy8rICh0aGlzLnNwYWNlc1sxXSAtIHRoaXMubXRvcCk7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICd0YWJsZScsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IHRvcDonKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7IGhlaWdodDphdXRvOyBib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7IGJvcmRlcjpub25lOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICd0YWJsZScsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0pKydweDsgYm9yZGVyOm5vbmU7JyApO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZCwgdGQsIHRyLCBzZWw7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IFtdOyBcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFggPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFkgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdHIgPSB0aGlzLmNbMl0uaW5zZXJ0Um93KCk7XHJcbiAgICAgICAgICAgIHRyLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG4gICAgICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGQgPSB0ci5pbnNlcnRDZWxsKCk7XHJcbiAgICAgICAgICAgICAgICB0ZC5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3Bvc2l0aW9uOnN0YXRpYzsgdG9wOjFweDsgd2lkdGg6Jyt0aGlzLmJzaXplWzBdKydweDsgaGVpZ2h0OicrKHRoaXMuYnNpemVbMV0tMikrJ3B4OyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBsZWZ0OmF1dG87IHJpZ2h0OmF1dG87IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JztcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b247XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgIGIuaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoIGIgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25zLnB1c2goYilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXQucHVzaCgxKVxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApXHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOnN0YXRpYzsgd2lkdGg6Jyt0aGlzLmJzaXplWzBdKydweDsgaGVpZ2h0OicrdGhpcy5ic2l6ZVsxXSsncHg7IHRleHQtYWxpZ246Y2VudGVyOyBsZWZ0OmF1dG87IHJpZ2h0OmF1dG87IGJhY2tncm91bmQ6bm9uZTsnXHJcbiAgICAgICAgICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoIGIgKVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZihqPT09MCkgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpyaWdodDsnO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OmxlZnQ7JztcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBuKys7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xO1xyXG5cclxuICAgICAgICBsLnkgKz0gdGhpcy5tdG9wXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IHR4ID0gdGhpcy50bXBYO1xyXG4gICAgICAgIGxldCB0eSA9IHRoaXMudG1wWTtcclxuXHJcbiAgICAgICAgbGV0IGlkID0gLTE7XHJcbiAgICAgICAgbGV0IGMgPSAtMTtcclxuICAgICAgICBsZXQgbGluZSA9IC0xO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5ncmlkWzBdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICBcdGlmKCBsLnggPiB0eFtpXVswXSAmJiBsLnggPCB0eFtpXVsxXSApIGMgPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaSA9IHRoaXMuZ3JpZFsxXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0eVtpXVswXSAmJiBsLnkgPCB0eVtpXVsxXSApIGxpbmUgPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoYyE9PS0xICYmIGxpbmUhPT0tMSl7XHJcbiAgICAgICAgICAgIGlkID0gYyArIChsaW5lKjIpO1xyXG4gICAgICAgICAgICBpZihpZD50aGlzLmxuZy0xKSBpZCA9IC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgdGhpcy5zZW5kKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIHRoaXMucmVzIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFx0dXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGUoIG4sIGkgKSApIHIgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLmJ1dHRvbnNcclxuICAgICAgICBsZXQgaSA9IGlkXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS50ZXh0Q29udGVudCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSwgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnN0eWxlLnBhZGRpbmcgPSAoIHkgfHwgMCApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0VyAoKSB7XHJcblxyXG4gICAgICAgIGxldCB2dyA9IHRoaXMuc3BhY2VzWzBdKjMgKyB0aGlzLmJzaXplTWF4KjIsIHJ6ID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHZ3ID4gdGhpcy53ICkge1xyXG4gICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gKCB0aGlzLnctKHRoaXMuc3BhY2VzWzBdKjMpICkgKiAwLjU7XHJcbiAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggdGhpcy5ic2l6ZVswXSAhPT0gdGhpcy5ic2l6ZU1heCApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSB0aGlzLmJzaXplTWF4O1xyXG4gICAgICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIXJ6ICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuYnV0dG9ucy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmJ1dHRvbnNbaV0uc3R5bGUud2lkdGggPSB0aGlzLmJzaXplWzBdICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnRlc3RXKCk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkO1xyXG5cclxuICAgICAgICB0aGlzLnRtcFggPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFkgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgaWYoaj09PTApe1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgLSAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLXRoaXMuYnNpemVbMF0sIG1pZCBdICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSArICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQsIG1pZCt0aGlzLmJzaXplWzBdIF0gKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1pZCA9IHRoaXMuc3BhY2VzWzFdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRtcFkucHVzaCggWyBtaWQsIG1pZCArIHRoaXMuYnNpemVbMV0gXSApO1xyXG4gICAgICAgICAgICBtaWQgKz0gdGhpcy5ic2l6ZVsxXSArIHRoaXMuc3BhY2VzWzFdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFkMkQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgLy90aGlzLm1hcmdpbiA9IDE1O1xyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKDAsMCk7XHJcbiAgICAgICAgdGhpcy5tYXhQb3MgPSA5MFxyXG5cclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMubWluID0gby5taW4gPT09IHVuZGVmaW5lZCA/IC0xIDogby5taW47XHJcbiAgICAgICAgdGhpcy5tYXggPSBvLm1heCA9PT0gdW5kZWZpbmVkID8gMSA6IG8ubWF4O1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gKHRoaXMubWF4IC0gdGhpcy5taW4pKjAuNTsgIFxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5yYW5nZSlcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIFxyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IDIgOiBvLnByZWNpc2lvbjtcclxuXHJcbiAgICAgICAgLyp0aGlzLmJvdW5kcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngxID0gby54MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MiA9IG8ueDIgfHwgMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MSA9IG8ueTEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTIgPSBvLnkyIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMubGVycFggPSB0aGlzLmxlcnAoIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiAsIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiApO1xyXG4gICAgICAgIHRoaXMubGVycFkgPSB0aGlzLmxlcnAoIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiAsIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiApO1xyXG5cclxuICAgICAgICB0aGlzLmFsZXJwWCA9IHRoaXMubGVycCggdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyLCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gKTtcclxuICAgICAgICB0aGlzLmFsZXJwWSA9IHRoaXMubGVycCggdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyLCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gKTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gKCBBcnJheS5pc0FycmF5KCBvLnZhbHVlICkgJiYgby52YWx1ZS5sZW5ndGggPT0gMiApID8gby52YWx1ZSA6IFsgMCwgMCBdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsgJ3B4JztcclxuXHJcbiAgICAgICAgLy8gVGl0bGVcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMudG9wIC09IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cclxuICAgICAgICAvLyBWYWx1ZVxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyAoIHRoaXMuaCAtIDIwICkgKyAncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicgKyBjYy50ZXh0ICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gUGFkXHJcblxyXG4gICAgICAgIGxldCBwYWQgPSB0aGlzLmdldFBhZDJkKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDIgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggcGFkLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gcGFkXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSgpXHJcblxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG5cclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ3BhZCc7XHJcblxyXG4gICAgICAgIC8qaWYoICggbC54ID49IHRoaXMubWFyZ2luICkgJiYgKCBsLnggPD0gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA+PSB0aGlzLnRvcCArIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPD0gdGhpcy50b3AgKyB0aGlzLncgLSB0aGlzLm1hcmdpbiApICkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BhZCc7XHJcbiAgICAgICAgfSovXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9yZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy50ZXN0Wm9uZShlKSA9PT0gJ3BhZCcgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgeCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKVxyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGxldCByID0gMjU2IC8gdGhpcy5kaWFtXHJcblxyXG4gICAgICAgIHggPSAtKHgqcilcclxuICAgICAgICB5ID0gLSh5KnIpXHJcblxyXG4gICAgICAgIHggPSBUb29scy5jbGFtcCggeCwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcbiAgICAgICAgeSA9IFRvb2xzLmNsYW1wKCB5LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuXHJcbiAgICAgICAgLy9sZXQgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG4gICAgICAgIC8vbGV0IHkgPSBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wO1xyXG5cclxuICAgICAgICAvKmlmKCB4IDwgdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHggPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHggPSB0aGlzLncgLSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA8IHRoaXMubWFyZ2luICkgeSA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47Ki9cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh4LHkpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zKCBbIHggLCB5IF0gKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5iYWNrLCAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5iYWNrb2ZmLCAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5vdmVyb2ZmLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0U2VsZWN0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICAvL2lmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcoKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA9PSAxICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kxJywgdGhpcy5wb3MueSwgMiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTInLCB0aGlzLnBvcy55LCAyICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDEnLCB0aGlzLnBvcy54LCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MicsIHRoaXMucG9zLngsIDMgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB0aGlzLnBvcy54LCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgdGhpcy5wb3MueSwgNCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRQb3MgKCBwICkge1xyXG5cclxuICAgICAgICAvL2lmKCBwID09PSB1bmRlZmluZWQgKSBwID0gWyB0aGlzLncgLyAyLCB0aGlzLncgLyAyIF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggcFswXSsxMjggLCBwWzFdKzEyOCApO1xyXG5cclxuICAgICAgICBsZXQgciA9IDEvdGhpcy5tYXhQb3NcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9ICgocFswXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAoKHBbMV0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2LCB1cCA9IGZhbHNlICkge1xyXG5cclxuICAgICAgICBpZiggdiA9PT0gdW5kZWZpbmVkICkgdiA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8qaWYgKCB2WzBdIDwgdGhpcy5ib3VuZHMueDEgKSB2WzBdID0gdGhpcy5ib3VuZHMueDE7XHJcbiAgICAgICAgaWYgKCB2WzBdID4gdGhpcy5ib3VuZHMueDIgKSB2WzBdID0gdGhpcy5ib3VuZHMueDI7XHJcbiAgICAgICAgaWYgKCB2WzFdIDwgdGhpcy5ib3VuZHMueTEgKSB2WzFdID0gdGhpcy5ib3VuZHMueTE7XHJcbiAgICAgICAgaWYgKCB2WzFdID4gdGhpcy5ib3VuZHMueTIgKSB2WzFdID0gdGhpcy5ib3VuZHMueTI7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzBdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMV0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoICgodGhpcy52YWx1ZVswXS90aGlzLnJhbmdlKSp0aGlzLm1heFBvcykrMTI4ICAsICgodGhpcy52YWx1ZVsxXS90aGlzLnJhbmdlKSp0aGlzLm1heFBvcykrMTI4IClcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnBvcylcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHVwICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qbGVycCggczEsIHMyLCBkMSwgZDIsIGMgPSB0cnVlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9ICggZDIgLSBkMSApIC8gKCBzMiAtIHMxICk7XHJcblxyXG4gICAgICAgIHJldHVybiBjID8gKCB2ICkgPT4geyBcclxuICAgICAgICAgICAgcmV0dXJuICggKCB2IDwgczEgPyBzMSA6IHYgPiBzMiA/IHMyIDogdiApIC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH0gOiAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgcmV0dXJuICggdiAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9XHJcblxyXG4gICAgfSovXHJcblxyXG59IiwiXHJcbmltcG9ydCB7IEJvb2wgfSBmcm9tICcuLi9wcm90by9Cb29sLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vcHJvdG8vQnV0dG9uLmpzJztcclxuaW1wb3J0IHsgQ2lyY3VsYXIgfSBmcm9tICcuLi9wcm90by9DaXJjdWxhci5qcyc7XHJcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnLi4vcHJvdG8vQ29sb3IuanMnO1xyXG5pbXBvcnQgeyBGcHMgfSBmcm9tICcuLi9wcm90by9GcHMuanMnO1xyXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL3Byb3RvL0dyYXBoLmpzJztcclxuaW1wb3J0IHsgR3JvdXAgIH0gZnJvbSAnLi4vcHJvdG8vR3JvdXAuanMnO1xyXG5pbXBvcnQgeyBKb3lzdGljayB9IGZyb20gJy4uL3Byb3RvL0pveXN0aWNrLmpzJztcclxuaW1wb3J0IHsgS25vYiB9IGZyb20gJy4uL3Byb3RvL0tub2IuanMnO1xyXG5pbXBvcnQgeyBMaXN0IH0gZnJvbSAnLi4vcHJvdG8vTGlzdC5qcyc7XHJcbmltcG9ydCB7IE51bWVyaWMgfSBmcm9tICcuLi9wcm90by9OdW1lcmljLmpzJztcclxuaW1wb3J0IHsgU2xpZGUgfSBmcm9tICcuLi9wcm90by9TbGlkZS5qcyc7XHJcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gJy4uL3Byb3RvL1RleHRJbnB1dC5qcyc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vcHJvdG8vVGl0bGUuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuLi9wcm90by9TZWxlY3QuanMnO1xyXG5pbXBvcnQgeyBCaXRtYXAgfSBmcm9tICcuLi9wcm90by9CaXRtYXAuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdG9yLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuLi9wcm90by9FbXB0eS5qcyc7XHJcbmltcG9ydCB7IEl0ZW0gfSBmcm9tICcuLi9wcm90by9JdGVtLmpzJztcclxuaW1wb3J0IHsgR3JpZCB9IGZyb20gJy4uL3Byb3RvL0dyaWQuanMnO1xyXG5pbXBvcnQgeyBQYWQyRCB9IGZyb20gJy4uL3Byb3RvL1BhZDJELmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDWSxNQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxHQUFHO0FBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0FBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0FBQ0EsRUFBRSxFQUFFLEVBQUUsSUFBSTtBQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUs7QUFDYixFQUFFLEtBQUssRUFBRSxLQUFLO0FBQ2QsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7QUFDQSxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsVUFBVSxFQUFFLEtBQUs7QUFDbkIsRUFBRSxTQUFTLEVBQUUsS0FBSztBQUNsQixFQUFFLFlBQVksRUFBRSxLQUFLO0FBQ3JCLEVBQUUs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QUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDM0QsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDOUIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN2QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTTtBQUN2QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUM7QUFDZixNQUFNLENBQUM7QUFDUCxNQUFNLENBQUM7QUFDUCxNQUFNLENBQUMsQ0FBQztBQUNSO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEI7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRTtBQUMxQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0QixPQUFPLE1BQU07QUFDYixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3RCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUM3QixRQUFRLElBQUksR0FBRyxDQUFDLENBQUM7QUFDakI7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDaEMsVUFBVSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDekIsVUFBVSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUMzQixVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLFNBQVM7QUFDVCxRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDcEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxVQUFVLEVBQUUsWUFBWTtBQUMxQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDdEIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2YsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxLQUFLLEtBQUs7QUFDN0M7QUFDQTtBQUNBLElBQU8sSUFBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUN2QixNQUFNLENBQUMsQ0FBQztBQUNSLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNiLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaLE1BQU0sRUFBRSxDQUFDO0FBQ1QsTUFBTSxDQUFDLENBQUMsQ0FDRTtBQUNWO0FBQ0EsSUFBSSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkI7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDaEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVjtBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzQztBQUNBLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDbkI7QUFDQTtBQUNBLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtBQUN4QixRQUFRLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEM7QUFDQSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9CLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3RCO0FBQ0E7QUFDQSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEMsYUFBYSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDMUIsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7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RUFBRTtBQUMxQjtBQUNBLFFBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakg7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN0QixRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLFNBQVM7QUFDVCxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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RSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNySDtBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0ksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMs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RSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtBQUNBO0FBQ0E7QUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtBQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMvRixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FB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QUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0FBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHO0FBQ2xHO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ25CO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDbEIsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcs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RUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ25DO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDakUsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFlBQVksS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxZQUFZ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QUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFDQUFxQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFFO0FBQ3BLLFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQ3RCLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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eEI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUM7QUFDdEIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUU7QUFDbEk7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUU7QUFDdEM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7QUFDekQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3REO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQzNFLFFBQVEsSUFBSSxDQUFD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Q0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxHQUFHO0FBQ2xDO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNyRDtBQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztBQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QjtBQUNBLFNBQVM7QUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLFFBQVEsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xHO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0FBQ0EsWUFB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QVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7QUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckM7QUFDQSxTQUFTLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMvRCxTQUFTLElBQUksR0FBRyxJQUFJLElB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QUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtBQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7QUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUN0QztBQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7QUFDdEM7QUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7QUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtBQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0FBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7QUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0M7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNmO0FBQ0EsRUFBRSxJQUFJLENBQUMsWUFBWSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVELGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsYUFBYSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM1QjtBQUNBLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQzdCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDcEI7QUFDQSxLQUFLLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUMxQztBQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzVCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFNO0FBQzFCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDOUM7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3ZCLE1BQU07QUFDTixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDaEI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM5QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDekIsS0FBSyxPQUFPLElBQUksQ0FBQztBQUNqQjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsV0FBVyxDQUFDLEdBQUc7QUFDaEI7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ2pCLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBSztBQUNmO0FBQ0EsS0FBYyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPO0FBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ25DLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0FBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7QUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBO0FBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVEO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDcEM7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztBQUM1QyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDckI7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQ3BhTyxNQUFNLEdBQUcsU0FBUyxLQUFLLENBQUM7QUFDL0I7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQztBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENB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QUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQzdLO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtEQUFrRCxFQUFFLENBQUM7QUFDMUo7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsMkVBQTJFLENBQUMsQ0FBQztBQUN0SjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0E7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJ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QUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtBQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzNEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3REO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDakM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxHQUFHLENBQUMsR0FBRztBQUNYO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3hDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDdkI7QUFDQSxRQUFRLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHO0FBQzNDO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDdkY7QUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUI7QUFDQSxZQUFZLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRztBQUM5QjtBQUNBLGdCQUFnQixJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztBQUNqRSxnQkFBZ0IsSUFBSSxhQUFhLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7QUFDdkU7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztBQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDO0FBQ25EO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN2RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQztBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztBQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDakQ7QUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQy9DLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtBQUN6RCxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlEQUF5RCxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1TDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQ7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDdEosUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0gsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEo7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSTtBQUM5QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUM7QUFDaEYsaUJBQWlCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDM0QsU0FBUztBQUNULFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxXQUFXLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsa0NBQWlDO0FBQ3BFLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQzlCLFFBQVEsSUFBSSxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFJO0FBQ3JDLFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNsQixZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLHFCQUFvQjtBQUNqRyxpQkFBaUIsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBTztBQUN0RSxZQUFZLENBQUMsR0FBRTtBQUNmLFNBQVM7QUFDVCxRQUFRLE9BQU8sQ0FBQztBQUNoQixLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUU7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hDO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNuRixZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BILGlCQUFpQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BHO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNqRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDakQ7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3hDLFNBQVMsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNyQixhQUFhLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDdkQsVUFBVTtBQUNWLE1BQU07QUFDTjtBQUNBLFFBQVEsT0FBTyxFQUFFO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ3JCO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNYO0FBQ0EsUUFBUSxPQUFPLENBQUM7QUFDaEIsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTTtBQUNqQyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNO0FBQ2pDLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDL0IsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUM5RCxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLEtBQUssSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3JCO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekIsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2xCLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNyQyxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNyRSxnQkFBZ0IsR0FBRyxHQUFHLElBQUksQ0FBQztBQUMzQixhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QixRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN4QixRQUFRLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsS0FBSyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDckI7QUFDQSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakM7QUFDQSxLQUFLLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUN0QjtBQUNBLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvQjtBQUNBO0FBQ0EsU0FBUyxNQUFNO0FBQ2Y7QUFDQSxZQUFZLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN6RDtBQUNBLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzNCLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5RyxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDakMsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtBQUNBLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFFO0FBQ3JDO0FBQ0E7QUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JDO0FBQ0EsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFDO0FBQzVDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNwQztBQUNBLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUc7QUFDMUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RCO0FBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVB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QUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRTtBQUMvQixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDcEM7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtBQUN2QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDN0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztBQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJ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RztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0FBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0FBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtBQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0FBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxD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RUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQzVGO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1B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QUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcs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Q0EsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHO0FBQzNDO0FBQ0EsWUFBWSxDQUFDLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNoRCxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDaEQsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDOUQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtBQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0FBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6RDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFB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SSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDL0Q7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMvRDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMvQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUN2RCxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUMvRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDdkMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QyxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFDO0FBQzdELFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUM7QUFDcEQsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQztBQUNyRCxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDO0FBQ3pELFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVE7QUFDakQsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7QUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFlBQVksSUFBSSxHQUFH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O0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDMUIsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUMvQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RixRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUU7QUFDaEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNuQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUks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QUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0I7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDNUQsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDMzBCTyxNQUFNLE9BQU8sU0FBUyxLQUFLLENBQUM7QUFDbkM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQUs7QUFDdkM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUMzQixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUM7QUFDdEIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUk7QUFDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQUs7QUFDNUIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQUs7QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUN2QixZQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUMvQixZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQUs7QUFDcEMsWUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFLO0FBQ3ZDLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQUs7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7QUFDbkMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNqQyxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUM7QUFDdEMsYUFBYSxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxLQUFLLEVBQUU7QUFDakQsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE1BQUs7QUFDcEMsZ0JBQWdCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBSztBQUNyQyxhQUFhLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLE1BQU0sRUFBRTtBQUNsRCxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFFO0FBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQztBQUN2RSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUM7QUFDdkUsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDO0FBQ3ZFLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQztBQUN2RSxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFLO0FBQ3JDLGdCQUFnQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUk7QUFDcEMsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU07QUFDcEMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUU7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDMUM7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsY0FBYyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsK0JBQStCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUU7QUFDekk7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRTtBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUc7QUFDeEIsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2xCO0FBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDeEcsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLGVBQWUsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUM7QUFDck4sWUFBWSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFRO0FBQy9ELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ25ELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7QUFDdEQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSTtBQUNwQyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUM3QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcscUNBQXFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyx3Q0FBd0MsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLGVBQWUsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLG1DQUFtQyxDQUFDLENBQUM7QUFDMVA7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNyQyxRQUFRLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGtCQUFrQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsNEJBQTRCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqSjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUNoRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUc7QUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztBQUN4QjtBQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3JELFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxFQUFFO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzFCLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0FBQzlCLFlBQVksSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQzdCLGFBQWEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0FBQ2hDLGFBQWEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRTtBQUNoSixhQUFhLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFFO0FBQ3hELGFBQWE7QUFDYixZQUFZLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7QUFDdEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEtBQUs7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3RCO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7QUFDL0IsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUM5QztBQUNBLFlBQVksT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUN0QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sS0FBSztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxNQUFLO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBQztBQUNqQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3ZDLGFBQVk7QUFDWixTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUMsY0FBYyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO0FBQ3RFLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN6QjtBQUNBLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2xDO0FBQ0EsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRTtBQUNyRjtBQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFDO0FBQ2hFO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDO0FBQzdELGdCQUFnQixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBQztBQUNqRjtBQUNBLGdCQUFnQixJQUFJLENBQUMsUUFBUSxHQUFFO0FBQy9CO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFPO0FBQ3ZDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBTztBQUN2QztBQUNBLGdCQUFnQixHQUFHLEdBQUcsS0FBSTtBQUMxQixjQUFjO0FBQ2Q7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUM7QUFDekQsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNqRSxTQUFTLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QztBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxHQUFHO0FBQ2xCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsTUFBSztBQUN2QixRQUFRLE9BQU8sR0FBRztBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMzQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztBQUN2RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztBQUN2RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztBQUN2RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztBQUN2RCxTQUFTLE1BQU07QUFDZixZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDaEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTTtBQUNqQyxRQUFRLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLElBQUc7QUFDcEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFNO0FBQ2pDO0FBQ0EsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2xCLGFBQWEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUMzRSxhQUFhLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQztBQUN4RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNmO0FBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFLO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7QUFDMUI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7QUFDdEM7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMvQixnQkFBZ0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRTtBQUNoRSxhQUFhLE1BQU07QUFDbkIsZ0JBQWdCLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUM7QUFDckQsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUM5RCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUMzQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUMxQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0FBQ3ZFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBSztBQUN0QyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFJO0FBQ2hELFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUk7QUFDbEQsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSTtBQUMzQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0FBQzNDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU07QUFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRTtBQUM1QyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFJO0FBQ3pDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUk7QUFDekM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRTtBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQ3hCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLEtBQUk7QUFDdEM7QUFDQSxRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDbEIsU0FBUyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xELGdCQUFnQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3RFLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEdBQUcsR0FBRTtBQUNoRCxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQ2xDLGFBQWEsTUFBTTtBQUNuQixnQkFBZ0IsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQzNELGFBQWE7QUFDYjtBQUNBLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDM0MsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU07QUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRTtBQUMvQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFFO0FBQy9CLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBRztBQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUc7QUFDeEI7QUFDQSxRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDbEI7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFFO0FBQ2xFLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQzVELFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25ELFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ3BELFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ3pUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUN0QixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNiO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNwQztBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRztBQUN4QixNQUFNLEtBQUs7QUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUztBQUN4QixRQUFRLGtEQUFrRDtBQUMxRCxRQUFRLEVBQUUsQ0FBQyxJQUFJO0FBQ2YsUUFBUSxHQUFHO0FBQ1gsS0FBSyxDQUFDO0FBQ047QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUc7QUFDeEIsTUFBTSxLQUFLO0FBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUs7QUFDekQsS0FBSyxDQUFDO0FBQ047QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUc7QUFDeEIsTUFBTSxLQUFLO0FBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7QUFDcEIsUUFBUSxhQUFhO0FBQ3JCLFFBQVEsRUFBRSxDQUFDLElBQUk7QUFDZixRQUFRLG9CQUFvQjtBQUM1QixTQUFTLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsS0FBSztBQUNiLEtBQUssQ0FBQztBQUNOLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRztBQUN4QixNQUFNLEtBQUs7QUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztBQUNwQixRQUFRLDRCQUE0QjtBQUNwQyxTQUFTLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFFBQVEsaUJBQWlCO0FBQ3pCLFFBQVEsRUFBRSxDQUFDLElBQUk7QUFDZixRQUFRLEdBQUc7QUFDWCxLQUFLLENBQUM7QUFDTjtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzNCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDL0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BEO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzFCLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztBQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDaEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVB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QUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtBQUNBO0FBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtBQUNBO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0FBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDcEQsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxD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SSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDeEQsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDNUQsUUFBUSxNQUFNO0FBQ2QsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtBQUNiLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hGO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxD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LEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxJQUFJO0FBQ2Y7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDNUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQztBQUNyQztBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDO0FBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ2hDLFFBQVEsSUFB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QyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDaEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7QUFDakQ7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDdkM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3BDO0FB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Q0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEtBQUk7QUFDekMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksS0FBSTtBQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFJO0FBQ3RDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDdEtPLE1BQU0sTUFBTSxTQUFTLEtBQUssQ0FBQztBQUNsQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFFO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSTtBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFJO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMs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QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUk7QUFDNUQsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNWTyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUM7QUFDaEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzlCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEdBQUc7QUFDZDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRztBQUNkO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQy9CO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM1QixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVDO0FBQ0EsWUFBWSxRQUFRLENBQUM7QUFDckI7QUFDQSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU07QUFDL0YsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtBQUNwRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxN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Q0FBQyxDQUFDLENBQUM7QUFDbkIsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELFNBQVM7QUFDVDtBQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVELFNBQVM7QUFDVDtBQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0FBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFFO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDN0IsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQztBQUNsQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQzVELFNBQVMsTUFBTTtBQUNmLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMzQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sRUFBRSxDQUFDO0FBQ2xCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQUs7QUFDekM7QUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7QUFDQSxZQUFZLENBQUMsR0FBRyxFQUFDO0FBQ2pCLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQUs7QUFDM0U7QUFDQSxZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMxQixnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztBQUN4QyxhQUFhLE1BQU07QUFDbkIsZ0JBQWdCLENBQUMsR0FBRyxFQUFDO0FBQ3JCLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztBQUM3QixhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUk7QUFDNUM7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQztBQUNoQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQU87QUFDOUMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2pDO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QjtBQUNBLFlBQVksUUFBUSxDQUFDO0FBQ3JCO0FBQ0EsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUM3RixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNO0FBQ2xHLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07QUFDL0YsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUNuRztBQUNBLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBQztBQUNyQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDckIsUUFBUSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDM0I7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRztBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzdDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUMxQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUM7QUFDN0QsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDM0M7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDaEUsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHO0FBQzFCLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7QUFDaEUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLEdBQUc7QUFDbEQsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUM5QyxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMxQixhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU87QUFDekI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3BDLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsUUFBVyxJQUFXLElBQUk7QUFDMUI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0FBQ0EsWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckIsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUM3RCxhQUFhLE1BQU07QUFDbkIsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM3RCxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRDtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5RjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxH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UUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0FBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUMzRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBQztBQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUM5RDtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0FBQ2hELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFFO0FBQ3BFO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7QUFDQTtBQUNBO0FB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TUFBTTtBQUNsRCxZQUFZLEtBQUssS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDOUMsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2xELFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNsRCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDeEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNoRCxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNyRSxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDbEQsWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDekUsWUFBWSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDL0QsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFN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Q0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztBQUM1QztBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNwRTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3ZFO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTTtBQUNmLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdB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QUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0FBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0pIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNZLE1BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsTUFBTSxDQUFDLEdBQUc7QUFDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7QUFDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7QUFDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0FBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSztBQUNiLEVBQUUsS0FBSyxFQUFFLEtBQUs7QUFDZCxFQUFFLE9BQU8s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QUcsRUFBRTtBQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDMUIsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtBQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7QUFDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNqQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFD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QUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0FBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0FBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtBQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkIsU0FBUztBQUNULFFBQVEsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDM0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUMsYUFBYTtBQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQixZQUFZLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDekcsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFlBQVksRUFBRSxXQUFXLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRztBQUM5RDtBQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakQ7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRDtBQUNBLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0c7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sRUFBRSxXQUFXLEtBQUssR0FBRztBQUNoQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBRztBQUNwQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUNwSixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JIO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxD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QUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0FBQ0E7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0FBQ0E7QUFDQTtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxX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Q0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0FBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN2QjtBQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7QUFDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsWUFBWSxFQUFFLEdBQUc7QUFDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7QUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxhQUFhLENBQUM7QUFDZDtBQUNBLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlEO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkI7QUFDQSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixnQkFBZ0IsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUMxQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRztBQUNBLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0QsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FB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QyxRQUFRLENBQUM7QUFDM0M7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMzQjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFELFNBQVMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QjtBQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztBQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqRDtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDdkQ7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUN4QztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDbkM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFB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QUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzdFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0FBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsT0FBTztBQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN6QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxHQUFHO0FBQ1QsSUFBSSxJQUFJLENB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LENBQUM7QUFDakUsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDcEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBQzdDLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxhQUFhLEdBQUc7QUFDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztBQUM5RSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7QUFDL0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7QUFDcEMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJ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LElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO0FBQzNFLE1BQU07QUFDTixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRTtBQUNqQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO0FBQzFCLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzNDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3JCLE1BQU0sT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ1gsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0FBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0FBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0FBQ2IsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0FBQ2IsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ1gsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDekIsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMxQixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7QUFDckIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsU0FBUyxHQUFHLFFBQVEsQ0FBQztBQUNwRCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxHQUFHO0FBQ1QsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTztBQUM1QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDNUIsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQy9DLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPO0FBQzdCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEIsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUM1QixJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDakQsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLEdBQUc7QUFDYixJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxHQUFHO0FBQ1gsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUM1QixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFDYjtBQUNBLEVBQUUsUUFBUSxHQUFHLEVBQUU7QUFDZjtBQUNBLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUNsQixJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hDLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUU7QUFDbkIsSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDL0IsR0FBRztBQUNIOztBQ3JuQk8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQUs7QUFDckMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBQztBQUN0RDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFHO0FBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0FBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUNB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bEQ7QUFDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztBQUM1RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7QUFDQTtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0FBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztBQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFJO0FBQ3REO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7QUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztBQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUU7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDbkM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUk7QUFDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwQztBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU07QUFDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtBQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtBQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRTtBQUN4QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQztBQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUN0QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUNsSTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUN0QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtBQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0FBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RDtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0FBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RDtBQUNBLFlBQVksTUFBTTtBQUNsQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0FBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7QUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7QUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxVQUFVLEdBQUc7QUFDbEM7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JEO0FBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7QUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN4RCxhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7QUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCO0FBQ0EsU0FBUztBQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNsRCxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsUUFBUSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbEc7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5RDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7QUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ2hDLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztBQUNqSixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3pEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNqT08sTUFBTSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNuQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7QUFDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztBQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7QUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUN2TTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsT0FBTztBQUNQO0FBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakM7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFH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LEtBQUssQ0FBQztBQUMxQztBQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7QUFDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztBQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUM7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0FBQ0E7QUFDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtBQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7QUFDNUQ7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0FBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtBQUNwQztBQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0FBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQztBQUMvQjtBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMs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Q0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ25DO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxD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SUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQztBQUM5QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFJO0FBQzlDLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckMsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQztBQUNoRixpQkFBaUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUMzRCxTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFdBQVcsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQ0FBaUM7QUFDcEUsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUc7QUFDOUIsUUFBUSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUk7QUFDckMsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2xCLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQW9CO0FBQ2pHLGlCQUFpQixDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFPO0FBQ3RFLFlBQVksQ0FBQyxHQUFFO0FBQ2YsU0FBUztBQUNULFFBQVEsT0FBTyxDQUFDO0FBQ2hCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEM7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25GLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEgsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEc7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekI7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsU0FBUyxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3JCLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUN2RCxVQUFVO0FBQ1YsTUFBTTtBQUNOO0FBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDckI7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ1g7QUFDQSxRQUFRLE9BQU8sQ0FBQztBQUNoQixZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNO0FBQ2pDLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU07QUFDakMsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUMvQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQzlELFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0I7QUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsS0FBSyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDckI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN6QixRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDbEIsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3JDLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ3JFLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQzNCLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3REO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxLQUFLLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztBQUNyQjtBQUNBLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQztBQUNBLEtBQUssSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ3RCO0FBQ0EsWUFBWSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9CO0FBQ0E7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3pEO0FBQ0EsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0IsYUFBYSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzlHLGFBQWEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNqQyxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0EsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUU7QUFDckM7QUFDQTtBQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckM7QUFDQSxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUM7QUFDNUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBRztBQUMxQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7QUFDdEI7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUM7QUFDekQsV0FBVyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ3hFLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUM7QUFDbEQ7QUFDQSxNQUFNLEVBQUUsR0FBRyxHQUFFO0FBQ2IsTUFBTSxFQUFFLEdBQUcsRUFBQztBQUNaO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsS0FBSyxPQUFPLENBQUM7QUFDYjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDNUIsUUFBUSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUM7QUFDakQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQ2xCO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxLQUFJO0FBQzlCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFFO0FBQzlDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ3ZDO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNsVE8sTUFBTSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLEtBQUssQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFJO0FBQ3JCLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFDO0FBQ3BCLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQ3pCLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkI7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUMzQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUk7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtBQUNyQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQUM7QUFDcEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0FBQzVDO0FBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0FBQzNCLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxvQ0FBb0MsR0FBRyxHQUFFO0FBQy9FO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyw0Q0FBNEMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDO0FBQzVILFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyx3REFBd0QsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUM1SztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSTtBQUMxRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw2QkFBNkIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLEVBQUM7QUFDMUk7QUFDQSxRQUFnQixJQUFJLENBQUMsRUFBRTtBQUN2QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQU87QUFDaEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFFO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3hCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxHQUFFO0FBQzdDLFFBQVEsR0FBRyxFQUFFLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxXQUFVO0FBQzFELFlBQVksRUFBRSxDQUFDLFVBQVUsR0FBRyxPQUFNO0FBQ2xDO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUNqQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU07QUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFNO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO0FBQ25DLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztBQUMvRCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0I7QUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0FBQ2hELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7QUFDaEQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0FBQ2pEO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQztBQUM1RCxhQUFhO0FBQ2IsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUMvQyxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksV0FBVyxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEtBQUssQ0FBQztBQUMvQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDMUI7QUFDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9CLFNBQVM7QUFDVCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFFO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUN0QjtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMxQjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU87QUFDM0I7QUFDQSxRQUFRLFFBQVEsSUFBSTtBQUNwQjtBQUNBLFlBQVksS0FBSyxTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRTtBQUNsRjtBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzVCO0FBQ0EsZ0JBQWdCLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUU7QUFDekQsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUU7QUFDdkQ7QUFDQSxZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLE9BQU87QUFDeEI7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFDO0FBQ2xDLFlBQVksSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFO0FBQ3RDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUM5QyxxQkFBcUIsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNoQyxhQUFhO0FBQ2IsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxXQUFXLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN4QztBQUNBLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUc7QUFDMUI7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuRDtBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNuQyxZQUFZLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMvQixZQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBRWhDLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDekIsWUFBWSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25ELFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNoQyxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksR0FBRyxHQUFHO0FBQ1Y7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUMxQjtBQUNBLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDdEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQ2pDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNuQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDakMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDN0IsU0FBUyxNQUFNLElBQUksT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3JELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZHLGlCQUFnQjtBQUNoQixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3RDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNsQyxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDdkI7QUFDQSxZQUFZLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBQztBQUNwQixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDMUI7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBSztBQUM1QjtBQUNBLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLEdBQUc7QUFDZDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtBQUN4QyxRQUFRLEtBQUssQ0FBQyxPQUFPLEdBQUU7QUFDdkI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssR0FBRztBQUNaO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztBQUN0QztBQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRTtBQUNqQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDOUMsWUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksR0FBRTtBQUM5QjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkM7QUFDQSxRQUFRLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHO0FBQ3pCLFlBQVksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRTtBQUM3RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFO0FBQ3hELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRTtBQUNwQztBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDdkMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLGdCQUFnQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0IsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHO0FBQ1o7QUFDQSxRQUFRLEtBQUssQ0FBQyxJQUFJLEdBQUU7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUU7QUFDbkQsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFFO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDeEIsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM5QjtBQUNBO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUk7QUFDNUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFNO0FBQ25DO0FBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDdkI7QUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsTUFBSztBQUNyQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsTUFBSztBQUNyQztBQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtBQUN2RCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7QUFDeEQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0FBQzFELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtBQUMzRCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7QUFDbkM7QUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87QUFDbkUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0FBQ3BFO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0FBQy9ELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDcEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMseUJBQXdCO0FBQ3RFO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFFO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRTtBQUNuRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUMzQjtBQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDeEIsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM5QjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbkM7QUFDQTtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFJO0FBQzVDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxPQUFNO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO0FBQ25DO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE9BQU07QUFDaEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE9BQU07QUFDaEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0FBQy9ELFNBQVM7QUFDVDtBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0FBQzVEO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFFO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRztBQUNmO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDOUQ7QUFDQSxhQUFhLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDeEk7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7QUFDdkQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUN2QjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdkQsYUFBYSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2pEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTTtBQUNqQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtBQUN4QyxhQUFhLElBQUksQ0FBQyxPQUFPLEdBQUU7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDeEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU07QUFDL0IsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2xCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRTtBQUN6QyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFFO0FBQy9CLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNwQztBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7QUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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RSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksRUFBRSxH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QUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7QUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7QUFDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7QUFDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDM0QsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtBQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0FBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7QUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7QUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsU0FBUyxNQUFNO0FBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRjtBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQy9PTyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUM7QUFDaEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDMUMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUMvQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFJO0FBQzVDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7QUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDcEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFNO0FBQzFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFNBQVE7QUFDckQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7QUFDekQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDakYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7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LENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0IsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztBQUM5QjtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDckQ7QUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7QUFDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENB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LEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1RDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDckU7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDakMsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JGO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7QUFDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztBQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3pEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUNyQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0FBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7QUFDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcscUNBQXFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNERBQTRELENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyVSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsZ0RBQWdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNySztBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2xJLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzdKO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUN4QztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUU7QUFDdEIsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtBQUNwQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxLQUFLLEVBQUU7QUFDekMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUk7QUFDbEMsYUFBYSxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxNQUFNLEVBQUU7QUFDakQsZ0JBQWdCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUk7QUFDdkMsZ0JBQWdCLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDbEUsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNCO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDaEQ7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEIsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUM1QjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDO0FBQ3JDLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDckI7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDekMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN6QztBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNyRCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNsRDtBQUNBLFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3BELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw2Q0FBNkMsQ0FBQyxDQUFDO0FBQ3ZHLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ25ELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO0FBQ25DLFlBQVksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsRSxpQkFBaUIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3RDLFNBQVMsS0FBSTtBQUNiLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzNCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDM0IsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQzdDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUk7QUFDakQsWUFBWSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztBQUN0QyxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7QUFDL0MsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksZ0JBQWU7QUFDckQsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQUs7QUFDbkMsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksTUFBSztBQUN6QyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxLQUFJO0FBQzVDLFFBQVEsSUFBSSxDQUFD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LFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3hELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0I7QUFDQSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksWUFBWSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDNUIsUUFBUSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7QUFDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxPQUFPO0FBQ3JDO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMs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QUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtBQUN0RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ3BDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzdCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDckMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztBQUMxUDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pKO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQzFCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztBQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQ3hCO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDckQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRTtBQUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDMUIsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7QUFDOUIsWUFBWSxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDN0IsYUFBYSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7QUFDaEMsYUFBYSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFVBQVUsRUFBRSxJQUFJLENBQUMs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ZCxRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ2QsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3ZCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoQjtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtBQUM1QixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUNoQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUM3RDtBQUNBLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0MsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFL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TUFBTSxFQUFFLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDckIsTUFBTSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVFO0FBQ0E7QUFDQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0E7QUFDQSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RDtBQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNoRCxNQUFNLElBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDM0Q7QUFDQSxNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRDtBQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEM7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ2hCLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUNwRCxRQUFRLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pFO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxHQUFHLENBQUM7QUFDZixHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDWCxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtBQUMzQixNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQy9DO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3hCLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2hELE9BQU8sTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQy9CLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2hELE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QjtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsUUFBUSxHQUFHO0FBQ2IsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztBQUNsQztBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNuQixNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEIsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDeEUsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLEdBQUc7QUFDVjtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtBQUNiLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuQixJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDekI7QUFDQSxJQUFJLFFBQVEsSUFBSTtBQUNoQixNQUFNLEtBQUssQ0FBQztBQUNaO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDN0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUN4RCxRQUFRLE1BQU07QUFDZCxNQUFNLEtBQUssQ0FBQztBQUNaO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDdEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztBQUM1RCxRQUFRLE1BQU07QUFDZCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO0FBQ2IsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFEO0FBQ0EsSUFBSSxJQUFJLE9BQU87QUFDZixNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDM0M7QUFDQTtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0FBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLEdBQUc7QUFDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7QUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEM7QUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsQixHQUFHO0FBQ0g7O0FDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxT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QyxRQUFRLEVBQUUsT0FBTztBQUNsQztBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7QUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0FBQy9CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztBQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztBQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7QUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdkM7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7QUFDM0M7QUFDQSxRQUFRLEdB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QUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7QUFDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUMzQixLQUFLO0FBQ0w7QUFDQTs7QUMxRE8sTUFBTSxNQUFNLFNBQVMsS0FBSyxD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LElBQUksQ0FBQztBQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDL0xBO0FBRUE7QUFDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtBQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztBQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRztBQUNkO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNmO0FBQ0EsUUFBUSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0I7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUM7QUFDQSxZQUFZLFFBQVEsQ0FBQztBQUNyQjtBQUNBLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUMvRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO0FBQ3BHLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07QUFDeEcsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtBQUNwRztBQUNBLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDbkM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUNwSE8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsWUFBWSxJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQVksS0FBSyxFQUFFO0FBQzNDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQ3RDLGFBQWEsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQVksTUFBTSxFQUFFO0FBQ25ELGdCQUFnQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzNDLGFBQWEsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQVksTUFBTSxFQUFFO0FBQ25ELGdCQUFnQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQ3pDLGdCQUFnQixLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3BFLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztBQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtBQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMs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QUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDM0QsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDMVRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFFO0FBQ3hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzlGO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0FBQ0E7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENB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QUFRLFFBQVEsSUFBSTtBQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0FBQzNELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0FBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0FBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0FBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzlEO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7QUFDaEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUU7QUFDcEU7QUFDQSxZQUFZLE1BQU07QUFDbEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUMxQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFB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LENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZjtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFH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LElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkQ7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFO0FBQ1gsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUI7QUFDQSxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQztBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7QUFDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNoRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFB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LElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNsRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekQ7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVTtBQUMzQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUMxRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxHQUFHO0FBQ1gsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUM1QixHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDZCxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVE7QUFDckIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM1RSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRTtBQUNsQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNoQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxQixLQUFLO0FBQ0wsR0FBRztBQUNIOzs7OyJ9 diff --git a/examples/uil_lumicles.html b/examples/uil_lumicles.html index 7f543ae..f9decf1 100644 --- a/examples/uil_lumicles.html +++ b/examples/uil_lumicles.html @@ -45,10 +45,16 @@ linear:10, easein:10, easeout:10, + listen:0., + axis:"x" } window.params=params; + setInterval(function(){ + params.listen+=0.1; + if (params.listen>20) params.listen=0; + },50); function initGUI () { @@ -95,19 +101,6 @@ gRender.add(params,"bloom",{type:"slide",displayName:"bloom",min:0,max:10,step:0.01}).listen(); gRender.open(); - //ui.add("button", { name: "setOrbitalCam", values: ["save", "load"] }); - /* - ui.add(params,"speed", { type:"slide", min: 0, max: 1, precision:3, name:"mongo",displayName:"speedFactor" }) - .onChange((v)=>{ - params.speedMapped = Math.pow(v,2)*10; - }).listen(); - ui.add("slide", { name:"value1", min: 0, max: 1, precision:3, value:8 }) - */ - //ui.add('title', { name: 'LOD' }) - //ui.add('list', { name: 'defaultLOD', list: ['250K', '500K', '1M', '2M'], listOnly: false }) - //ui.add('list', { name: 'includeEvery', list: ['1', '2', '4', '8'], listOnly: false }) - //ui.add("slide", { name: "minSize", min: 1, max: 50, step: 1,value:14 }); - // test item removal gCam.remove(o1) o1=gCam.add(params,"fov",{displayName:"FOV",min:20,max:30,step:0.1}) @@ -117,6 +110,9 @@ gTest.add(params,"linear",{type:"slide",displayName:"linear",min:0,max:20,easing:1,precision:4}).listen(); gTest.add(params,"easein",{type:"slide",displayName:"easein",min:0,max:20,easing:5,precision:4}).listen(); gTest.add(params,"easeout",{type:"slide",displayName:"easeout",min:0,max:20,easing:0.2,precision:4}).listen(); + gTest.add(params,"listen",{type:"slide",displayName:"listen",min:0,max:20,easing:0.25,precision:4}).listen(); + gTest.add(params,"axis",{type:"selector",values:["x","y","z"],value:"x"}) + gTest.add(params,"axis",{type:"list",values:["1","2","3"],value:"2"}) } initGUI(); diff --git a/src/proto/Slide.js b/src/proto/Slide.js index acda56a..c8ab9ce 100644 --- a/src/proto/Slide.js +++ b/src/proto/Slide.js @@ -261,7 +261,12 @@ export class Slide extends Proto { } update(up) { - let ww = Math.floor(this.ww * ((this.sliderValue - this.min) / this.range)); + let normalized = (this.value - this.min) / this.range; + + let uneased = + this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); + + let ww = Math.floor(this.ww * uneased); //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); if (this.model !== 3) this.s[5].width = ww + "px"; From ea0192d256aabd8f4be4b869a3f9021e88b25543 Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Sun, 31 Aug 2025 00:40:07 -0300 Subject: [PATCH 04/17] metodo loop --- build/uil.js | 16111 +++++++++++++++------------------ build/uil.min.js | 9075 +------------------ build/uil.module.js | 9061 +----------------- examples/uil_to_canvas2.html | 162 + src/core/Roots.js | 13 +- 5 files changed, 7299 insertions(+), 27123 deletions(-) create mode 100644 examples/uil_to_canvas2.html diff --git a/build/uil.js b/build/uil.js index 3eae299..965c59c 100644 --- a/build/uil.js +++ b/build/uil.js @@ -1,9060 +1,7176 @@ +/** + * @license + * Copyright 2010-2021 Uil.js Authors + * SPDX-License-Identifier: MIT + */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.UIL = {})); })(this, (function (exports) { 'use strict'; - /** - * @author lth / https://github.com/lo-th - */ - - const REVISION = "4.3.0"; - - // INTENAL FUNCTION - - const R = { - ui: [], - - dom: null, - - ID: null, - lock: false, - wlock: false, - current: -1, - - needReZone: true, - needResize: false, - forceZone: false, - isEventsInit: false, - isLeave: false, - addDOMEventListeners: true, - - downTime: 0, - prevTime: 0, - - //prevDefault: ['contextmenu', 'wheel'], - prevDefault: ["contextmenu"], - pointerEvent: ["pointerdown", "pointermove", "pointerup"], - eventOut: ["pointercancel", "pointerout", "pointerleave"], - - xmlserializer: null, - tmpTime: null, - tmpImage: null, - - oldCursor: "auto", - - input: null, - parent: null, - firstImput: true, - - hiddenImput: null, - hiddenSizer: null, - hasFocus: false, - startInput: false, - inputRange: [0, 0], - cursorId: 0, - str: "", - pos: 0, - startX: -1, - moveX: -1, - - debugInput: false, - - isLoop: false, - listens: [], - - e: { - type: null, - clientX: 0, - clientY: 0, - keyCode: NaN, - key: null, - delta: 0, - }, - - isMobile: false, - - now: null, - needsUpdate: false, - - getTime: function () { - return self.performance && self.performance.now - ? self.performance.now.bind(performance) - : Date.now; - }, - - add: function (o) { - // R.ui[0] is de GUI object that is added first by the constructor - R.ui.push(o); - R.getZone(o); - - if (!R.isEventsInit) R.initEvents(); - }, - - testMobile: function () { - let n = navigator.userAgent; - if ( - n.match(/Android/i) || - n.match(/webOS/i) || - n.match(/iPhone/i) || - n.match(/iPad/i) || - n.match(/iPod/i) || - n.match(/BlackBerry/i) || - n.match(/Windows Phone/i) - ) - return true; - else return false; - }, - - remove: function (o) { - let i = R.ui.indexOf(o); - - if (i !== -1) { - R.removeListen(o); - R.ui.splice(i, 1); - } - - if (R.ui.length === 0) { - R.removeEvents(); - } - }, - - // ---------------------- - // EVENTS - // ---------------------- - - initEvents: function () { - if (R.isEventsInit) return; - - let dom = document.body; - - R.isMobile = R.testMobile(); - R.now = R.getTime(); - - if (!R.isMobile) { - dom.addEventListener("wheel", R, { passive: false }); - } else { - dom.style.touchAction = "none"; - } - - console.log("R.addDOMEventListeners " + R.addDOMEventListeners); - if (R.addDOMEventListeners) { - dom.addEventListener("pointercancel", R); - dom.addEventListener("pointerleave", R); - //dom.addEventListener( 'pointerout', R ) - - dom.addEventListener("pointermove", R); - dom.addEventListener("pointerdown", R); - dom.addEventListener("pointerup", R); - - dom.addEventListener("keydown", R, false); - dom.addEventListener("keyup", R, false); - } - window.addEventListener("resize", R.resize, false); - - //window.onblur = R.out; - //window.onfocus = R.in; - - R.isEventsInit = true; - R.dom = dom; - }, - - removeEvents: function () { - if (!R.isEventsInit) return; - - let dom = document.body; - - if (!R.isMobile) { - dom.removeEventListener("wheel", R); - } - - if (R.addDOMEventListeners) { - dom.removeEventListener("pointercancel", R); - dom.removeEventListener("pointerleave", R); - //dom.removeEventListener( 'pointerout', R ); - - dom.removeEventListener("pointermove", R); - dom.removeEventListener("pointerdown", R); - dom.removeEventListener("pointerup", R); - - dom.removeEventListener("keydown", R); - dom.removeEventListener("keyup", R); - } - window.removeEventListener("resize", R.resize); - - R.isEventsInit = false; - }, - - resize: function () { - let i = R.ui.length, - u; - - while (i--) { - u = R.ui[i]; - if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); - } - - R.needReZone = true; - R.needResize = false; - }, - - out: function () { - console.log("im am out"); - R.clearOldID(); - }, - - in: function () { - console.log("im am in"); - // R.clearOldID(); - }, - - // ---------------------- - // HANDLE EVENTS - // ---------------------- - - fakeUp: function () { - this.handleEvent({ type: "pointerup" }); - }, - - handleEvent: function (event) { - //console.log("Roots.handleEvent "+event.type) - //if(!event.type) return; - - if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); - - if (R.needResize) R.resize(); - - R.findZone(R.forceZone); - - let e = R.e; - let leave = false; - - if (event.type === "keydown") R.keydown(event); - if (event.type === "keyup") R.keyup(event); - - if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; - else e.delta = 0; - - let ptype = event.pointerType; // mouse, pen, touch - - e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; - e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; - - e.type = event.type; - - if (R.eventOut.indexOf(event.type) !== -1) { - leave = true; - e.type = "mouseup"; - } - - if (event.type === "pointerleave") R.isLeave = true; - - if (event.type === "pointerdown") e.type = "mousedown"; - if (event.type === "pointerup") e.type = "mouseup"; - if (event.type === "pointermove") { - if (R.isLeave) { - // if user resize outside this document - R.isLeave = false; - R.resize(); - } - e.type = "mousemove"; - } - - // double click test - if (e.type === "mousedown") { - R.downTime = R.now(); - let time = R.downTime - R.prevTime; - - // double click on imput - if (time < 200) { - R.selectAll(); - return false; - } - - R.prevTime = R.downTime; - R.forceZone = false; - } - - // for imput - if (e.type === "mousedown") R.clearInput(); - - // mouse lock - if (e.type === "mousedown") R.lock = true; - if (e.type === "mouseup") R.lock = false; - - //if( R.current !== null && R.current.neverlock ) R.lock = false; - - /*if( e.type === 'mousedown' && event.button === 1){ - R.cursor() - e.preventDefault(); - e.stopPropagation(); - }*/ - - //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) - - if (R.isMobile && e.type === "mousedown") R.findID(e); - if (e.type === "mousemove" && !R.lock) R.findID(e); - - if (R.ID !== null) { - if (R.ID.isCanvasOnly) { - e.clientX = R.ID.mouse.x; - e.clientY = R.ID.mouse.y; - } - - //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 - - R.ID.handleEvent(e); - } - - if (R.isMobile && e.type === "mouseup") R.clearOldID(); - if (leave) R.clearOldID(); - }, - - // ---------------------- - // ID - // ---------------------- - - findID: function (e) { - let i = R.ui.length, - next = -1, - u, - x, - y; - - while (i--) { - u = R.ui[i]; - - if (u.isCanvasOnly) { - x = u.mouse.x; - y = u.mouse.y; - } else { - x = e.clientX; - y = e.clientY; - } - - if (R.onZone(u, x, y)) { - next = i; - - if (next !== R.current) { - R.clearOldID(); - R.current = next; - R.ID = u; - } - break; - } - } - - if (next === -1) R.clearOldID(); - }, - - clearOldID: function () { - if (!R.ID) return; - R.current = -1; - R.ID.reset(); - R.ID = null; - R.cursor(); - }, - - // ---------------------- - // GUI / GROUP FUNCTION - // ---------------------- - - calcUis: (uis, zone, py, group = false) => { - //console.log('calc_uis') - - let i = uis.length, - u, - px = 0, - n = 0, - tw, - m; - - let height = 0; - - while (i--) { - u = uis[n]; - n++; - - if (!group && u.isGroup) u.calcUis(); - - m = u.margin; - //div = u.marginDiv - - u.zone.w = u.w; - u.zone.h = u.h + m; - - if (!u.autoWidth) { - if (px === 0) height += u.h + m; - - u.zone.x = zone.x + px; - u.zone.y = py; // + u.mtop - //if(div) u.zone.y += m * 0.5 - - tw = R.getWidth(u); - if (tw) u.zone.w = u.w = tw; - else if (u.fw) u.zone.w = u.w = u.fw; - - px += u.zone.w; - - if (px >= zone.w) { - py += u.h + m; - //if(div) py += m * 0.5 - px = 0; - } - } else { - px = 0; - - u.zone.x = zone.x + u.dx; - u.zone.y = py; - py += u.h + m; - - height += u.h + m; - } - } - - return height; - }, - - findTarget: function (uis, e) { - let i = uis.length; - - while (i--) { - if (R.onZone(uis[i], e.clientX, e.clientY)) return i; - } - - return -1; - }, - - // ---------------------- - // ZONE - // ---------------------- - - findZone: function (force) { - if (!R.needReZone && !force) return; - - var i = R.ui.length, - u; - - while (i--) { - u = R.ui[i]; - R.getZone(u); - if (u.isGui) u.calcUis(); - } - - R.needReZone = false; - }, - - onZone: function (o, x, y) { - if (x === undefined || y === undefined) return false; - - let z = o.zone; - let mx = x - z.x; // - o.dx; - let my = y - z.y; - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 - //if( o.group !== null ) mx -= o.dx - - let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; - - //if( o.marginDiv ) my -= o.margin * 0.5 - - if (over) o.local.set(mx, my); - else o.local.neg(); - - return over; - }, - - getWidth: function (o) { - //return o.getDom().offsetWidth - return o.getDom().clientWidth; - - //let r = o.getDom().getBoundingClientRect(); - //return (r.width) - //return Math.floor(r.width) - }, - - getZone: function (o) { - if (o.isCanvasOnly) return; - let r = o.getDom().getBoundingClientRect(); - - //if( !r.width ) return - //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; - //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; - o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; - - //console.log(o.name, o.zone) - }, - - // ---------------------- - // CURSOR - // ---------------------- - - cursor: function (name) { - name = name ? name : "auto"; - if (name !== R.oldCursor) { - document.body.style.cursor = name; - R.oldCursor = name; - } - }, - - // ---------------------- - // CANVAS - // ---------------------- - - toCanvas: function (o, w, h, force) { - if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); - - // prevent exesive redraw - - if (force && R.tmpTime !== null) { - clearTimeout(R.tmpTime); - R.tmpTime = null; - } - - if (R.tmpTime !== null) return; - - if (R.lock) - R.tmpTime = setTimeout(function () { - R.tmpTime = null; - }, 10); - - /// - - let isNewSize = false; - if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; - - if (R.tmpImage === null) R.tmpImage = new Image(); - - let img = R.tmpImage; //new Image(); - - let htmlString = R.xmlserializer.serializeToString(o.content); - - let svg = - '' + - htmlString + - ""; - - img.onload = function () { - let ctx = o.canvas.getContext("2d"); - - if (isNewSize) { - o.canvas.width = w; - o.canvas.height = h; - } else { - ctx.clearRect(0, 0, w, h); - } - ctx.drawImage(this, 0, 0); - - o.onDraw(); - }; - - img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); - //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); - img.crossOrigin = ""; - R.needsUpdate = false; - }, - - // ---------------------- - // INPUT - // ---------------------- - - setHidden: function () { - if (R.hiddenImput === null) { - //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' - //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' - //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; - - R.hiddenImput = document.createElement("input"); - R.hiddenImput.type = "text"; - //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); - - R.hiddenSizer = document.createElement("div"); - //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; - - document.body.appendChild(R.hiddenImput); - document.body.appendChild(R.hiddenSizer); - } - - let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; - let css = - R.parent.css.txtselect + - "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + - hide; - R.hiddenImput.style.cssText = - css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); - R.hiddenSizer.style.cssText = css + "bottom:40px;"; - - R.hiddenImput.style.width = R.input.clientWidth + "px"; - R.hiddenImput.value = R.str; - R.hiddenSizer.innerHTML = R.str; - - R.hasFocus = true; - }, - - clearHidden: function (p) { - if (R.hiddenImput === null) return; - R.hasFocus = false; - }, - - clickPos: function (x) { - let i = R.str.length, - l = 0, - n = 0; - while (i--) { - l += R.textWidth(R.str[n]); - if (l >= x) break; - n++; - } - return n; - }, - - upInput: function (x, down) { - if (R.parent === null) return false; - - let up = false; - - if (down) { - let id = R.clickPos(x); - - R.moveX = id; - - if (R.startX === -1) { - R.startX = id; - R.cursorId = id; - R.inputRange = [R.startX, R.startX]; - } else { - let isSelection = R.moveX !== R.startX; - - if (isSelection) { - if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; - else R.inputRange = [R.startX, R.moveX]; - } - } - - up = true; - } else { - if (R.startX !== -1) { - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.startX = -1; - - up = true; - } - } - - if (up) R.selectParent(); - - return up; - }, - - selectAll: function () { - if (!R.parent) return; - - R.str = R.input.textContent; - R.inputRange = [0, R.str.length]; - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.cursorId = R.inputRange[1]; - R.selectParent(); - }, - - selectParent: function () { - var c = R.textWidth(R.str.substring(0, R.cursorId)); - var e = R.textWidth(R.str.substring(0, R.inputRange[0])); - var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); - - R.parent.select(c, e, s, R.hiddenSizer.innerHTML); - }, - - textWidth: function (text) { - if (R.hiddenSizer === null) return 0; - text = text.replace(/ /g, " "); - R.hiddenSizer.innerHTML = text; - return R.hiddenSizer.clientWidth; - }, - - clearInput: function () { - if (R.parent === null) return; - if (!R.firstImput) R.parent.validate(true); - - R.clearHidden(); - R.parent.unselect(); - - //R.input.style.background = 'none'; - R.input.style.background = R.parent.colors.back; - R.input.style.borderColor = R.parent.colors.border; - //R.input.style.color = R.parent.colors.text; - R.parent.isEdit = false; - - R.input = null; - R.parent = null; - (R.str = ""), (R.firstImput = true); - }, - - setInput: function (Input, parent) { - R.clearInput(); - - R.input = Input; - R.parent = parent; - - R.input.style.background = R.parent.colors.backoff; - R.input.style.borderColor = R.parent.colors.select; - //R.input.style.color = R.parent.colors.textSelect; - R.str = R.input.textContent; - - R.setHidden(); - }, - - keydown: function (e) { - if (R.parent === null) return; - - let keyCode = e.which; - e.shiftKey; - - //console.log( keyCode ) - - R.firstImput = false; - - if (R.hasFocus) { - // hack to fix touch event bug in iOS Safari - window.focus(); - R.hiddenImput.focus(); - } - - R.parent.isEdit = true; - - // e.preventDefault(); - - // add support for Ctrl/Cmd+A selection - //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { - //R.selectText(); - //e.preventDefault(); - //return self.render(); - //} - - if (keyCode === 13) { - //enter - - R.clearInput(); - - //} else if( keyCode === 9 ){ //tab key - - // R.input.textContent = ''; - } else { - if (R.input.isNum) { - if ( - (e.keyCode > 47 && e.keyCode < 58) || - (e.keyCode > 95 && e.keyCode < 106) || - e.keyCode === 190 || - e.keyCode === 110 || - e.keyCode === 8 || - e.keyCode === 109 - ) { - R.hiddenImput.readOnly = false; - } else { - R.hiddenImput.readOnly = true; - } - } else { - R.hiddenImput.readOnly = false; - } - } - }, - - keyup: function (e) { - if (R.parent === null) return; - - R.str = R.hiddenImput.value; - - if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value - else R.input.textContent = R.str; - - R.cursorId = R.hiddenImput.selectionStart; - R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; - - R.selectParent(); - - //if( R.parent.allway ) - R.parent.validate(); - }, - - // ---------------------- - // - // LISTENING - // - // ---------------------- - - loop: function () { - // modified by Fedemarino - if (R.isLoop) requestAnimationFrame(R.loop); - R.needsUpdate = R.update(); - // if there is a change in a value generated externally, the GUI needs to be redrawn - if (R.ui[0]) R.ui[0].draw(); - }, - - update: function () { - // modified by Fedemarino - let i = R.listens.length; - let needsUpdate = false; - while (i--) { - //check if the value of the object has changed - let hasChanged = R.listens[i].listening(); - if (hasChanged) needsUpdate = true; - } - return needsUpdate; - }, - - removeListen: function (proto) { - let id = R.listens.indexOf(proto); - if (id !== -1) R.listens.splice(id, 1); - if (R.listens.length === 0) R.isLoop = false; - }, - - addListen: function (proto) { - let id = R.listens.indexOf(proto); - - if (id !== -1) return false; - - R.listens.push(proto); - - if (!R.isLoop) { - R.isLoop = true; - R.loop(); - } - - return true; - }, - }; - + /** + * @author lth / https://github.com/lo-th + */ + + const REVISION = "4.3.0"; + + // INTENAL FUNCTION + + const R = { + ui: [], + dom: null, + ID: null, + lock: false, + wlock: false, + current: -1, + needReZone: true, + needResize: false, + forceZone: false, + isEventsInit: false, + isLeave: false, + addDOMEventListeners: true, + downTime: 0, + prevTime: 0, + //prevDefault: ['contextmenu', 'wheel'], + prevDefault: ["contextmenu"], + pointerEvent: ["pointerdown", "pointermove", "pointerup"], + eventOut: ["pointercancel", "pointerout", "pointerleave"], + xmlserializer: null, + tmpTime: null, + tmpImage: null, + oldCursor: "auto", + input: null, + parent: null, + firstImput: true, + hiddenImput: null, + hiddenSizer: null, + hasFocus: false, + startInput: false, + inputRange: [0, 0], + cursorId: 0, + str: "", + pos: 0, + startX: -1, + moveX: -1, + debugInput: false, + isLoop: false, + listens: [], + e: { + type: null, + clientX: 0, + clientY: 0, + keyCode: NaN, + key: null, + delta: 0 + }, + isMobile: false, + now: null, + needsUpdate: false, + getTime: function () { + return self.performance && self.performance.now ? self.performance.now.bind(performance) : Date.now; + }, + add: function (o) { + // R.ui[0] is de GUI object that is added first by the constructor + R.ui.push(o); + R.getZone(o); + if (!R.isEventsInit) R.initEvents(); + }, + testMobile: function () { + let n = navigator.userAgent; + if (n.match(/Android/i) || n.match(/webOS/i) || n.match(/iPhone/i) || n.match(/iPad/i) || n.match(/iPod/i) || n.match(/BlackBerry/i) || n.match(/Windows Phone/i)) return true;else return false; + }, + remove: function (o) { + let i = R.ui.indexOf(o); + if (i !== -1) { + R.removeListen(o); + R.ui.splice(i, 1); + } + if (R.ui.length === 0) { + R.removeEvents(); + } + }, + // ---------------------- + // EVENTS + // ---------------------- + + initEvents: function () { + if (R.isEventsInit) return; + let dom = document.body; + R.isMobile = R.testMobile(); + R.now = R.getTime(); + if (!R.isMobile) { + dom.addEventListener("wheel", R, { + passive: false + }); + } else { + dom.style.touchAction = "none"; + } + console.log("R.addDOMEventListeners " + R.addDOMEventListeners); + if (R.addDOMEventListeners) { + dom.addEventListener("pointercancel", R); + dom.addEventListener("pointerleave", R); + //dom.addEventListener( 'pointerout', R ) + + dom.addEventListener("pointermove", R); + dom.addEventListener("pointerdown", R); + dom.addEventListener("pointerup", R); + dom.addEventListener("keydown", R, false); + dom.addEventListener("keyup", R, false); + } + window.addEventListener("resize", R.resize, false); + + //window.onblur = R.out; + //window.onfocus = R.in; + + R.isEventsInit = true; + R.dom = dom; + }, + removeEvents: function () { + if (!R.isEventsInit) return; + let dom = document.body; + if (!R.isMobile) { + dom.removeEventListener("wheel", R); + } + if (R.addDOMEventListeners) { + dom.removeEventListener("pointercancel", R); + dom.removeEventListener("pointerleave", R); + //dom.removeEventListener( 'pointerout', R ); + + dom.removeEventListener("pointermove", R); + dom.removeEventListener("pointerdown", R); + dom.removeEventListener("pointerup", R); + dom.removeEventListener("keydown", R); + dom.removeEventListener("keyup", R); + } + window.removeEventListener("resize", R.resize); + R.isEventsInit = false; + }, + resize: function () { + let i = R.ui.length, + u; + while (i--) { + u = R.ui[i]; + if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); + } + R.needReZone = true; + R.needResize = false; + }, + out: function () { + console.log("im am out"); + R.clearOldID(); + }, + in: function () { + console.log("im am in"); + // R.clearOldID(); + }, + // ---------------------- + // HANDLE EVENTS + // ---------------------- + + fakeUp: function () { + this.handleEvent({ + type: "pointerup" + }); + }, + handleEvent: function (event) { + //console.log("Roots.handleEvent "+event.type) + //if(!event.type) return; + + if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); + if (R.needResize) R.resize(); + R.findZone(R.forceZone); + let e = R.e; + let leave = false; + if (event.type === "keydown") R.keydown(event); + if (event.type === "keyup") R.keyup(event); + if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1;else e.delta = 0; + let ptype = event.pointerType; // mouse, pen, touch + + e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; + e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; + e.type = event.type; + if (R.eventOut.indexOf(event.type) !== -1) { + leave = true; + e.type = "mouseup"; + } + if (event.type === "pointerleave") R.isLeave = true; + if (event.type === "pointerdown") e.type = "mousedown"; + if (event.type === "pointerup") e.type = "mouseup"; + if (event.type === "pointermove") { + if (R.isLeave) { + // if user resize outside this document + R.isLeave = false; + R.resize(); + } + e.type = "mousemove"; + } + + // double click test + if (e.type === "mousedown") { + R.downTime = R.now(); + let time = R.downTime - R.prevTime; + + // double click on imput + if (time < 200) { + R.selectAll(); + return false; + } + R.prevTime = R.downTime; + R.forceZone = false; + } + + // for imput + if (e.type === "mousedown") R.clearInput(); + + // mouse lock + if (e.type === "mousedown") R.lock = true; + if (e.type === "mouseup") R.lock = false; + + //if( R.current !== null && R.current.neverlock ) R.lock = false; + + /*if( e.type === 'mousedown' && event.button === 1){ + R.cursor() + e.preventDefault(); + e.stopPropagation(); + }*/ + + //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) + + if (R.isMobile && e.type === "mousedown") R.findID(e); + if (e.type === "mousemove" && !R.lock) R.findID(e); + if (R.ID !== null) { + if (R.ID.isCanvasOnly) { + e.clientX = R.ID.mouse.x; + e.clientY = R.ID.mouse.y; + } + + //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 + + R.ID.handleEvent(e); + } + if (R.isMobile && e.type === "mouseup") R.clearOldID(); + if (leave) R.clearOldID(); + }, + // ---------------------- + // ID + // ---------------------- + + findID: function (e) { + let i = R.ui.length, + next = -1, + u, + x, + y; + while (i--) { + u = R.ui[i]; + if (u.isCanvasOnly) { + x = u.mouse.x; + y = u.mouse.y; + } else { + x = e.clientX; + y = e.clientY; + } + if (R.onZone(u, x, y)) { + next = i; + if (next !== R.current) { + R.clearOldID(); + R.current = next; + R.ID = u; + } + break; + } + } + if (next === -1) R.clearOldID(); + }, + clearOldID: function () { + if (!R.ID) return; + R.current = -1; + R.ID.reset(); + R.ID = null; + R.cursor(); + }, + // ---------------------- + // GUI / GROUP FUNCTION + // ---------------------- + + calcUis: (uis, zone, py, group = false) => { + //console.log('calc_uis') + + let i = uis.length, + u, + px = 0, + n = 0, + tw, + m; + let height = 0; + while (i--) { + u = uis[n]; + n++; + if (!group && u.isGroup) u.calcUis(); + m = u.margin; + //div = u.marginDiv + + u.zone.w = u.w; + u.zone.h = u.h + m; + if (!u.autoWidth) { + if (px === 0) height += u.h + m; + u.zone.x = zone.x + px; + u.zone.y = py; // + u.mtop + //if(div) u.zone.y += m * 0.5 + + tw = R.getWidth(u); + if (tw) u.zone.w = u.w = tw;else if (u.fw) u.zone.w = u.w = u.fw; + px += u.zone.w; + if (px >= zone.w) { + py += u.h + m; + //if(div) py += m * 0.5 + px = 0; + } + } else { + px = 0; + u.zone.x = zone.x + u.dx; + u.zone.y = py; + py += u.h + m; + height += u.h + m; + } + } + return height; + }, + findTarget: function (uis, e) { + let i = uis.length; + while (i--) { + if (R.onZone(uis[i], e.clientX, e.clientY)) return i; + } + return -1; + }, + // ---------------------- + // ZONE + // ---------------------- + + findZone: function (force) { + if (!R.needReZone && !force) return; + var i = R.ui.length, + u; + while (i--) { + u = R.ui[i]; + R.getZone(u); + if (u.isGui) u.calcUis(); + } + R.needReZone = false; + }, + onZone: function (o, x, y) { + if (x === undefined || y === undefined) return false; + let z = o.zone; + let mx = x - z.x; // - o.dx; + let my = y - z.y; + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 + //if( o.group !== null ) mx -= o.dx + + let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; + + //if( o.marginDiv ) my -= o.margin * 0.5 + + if (over) o.local.set(mx, my);else o.local.neg(); + return over; + }, + getWidth: function (o) { + //return o.getDom().offsetWidth + return o.getDom().clientWidth; + + //let r = o.getDom().getBoundingClientRect(); + //return (r.width) + //return Math.floor(r.width) + }, + getZone: function (o) { + if (o.isCanvasOnly) return; + let r = o.getDom().getBoundingClientRect(); + + //if( !r.width ) return + //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; + //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; + o.zone = { + x: r.left, + y: r.top, + w: r.width, + h: r.height + }; + + //console.log(o.name, o.zone) + }, + // ---------------------- + // CURSOR + // ---------------------- + + cursor: function (name) { + name = name ? name : "auto"; + if (name !== R.oldCursor) { + document.body.style.cursor = name; + R.oldCursor = name; + } + }, + // ---------------------- + // CANVAS + // ---------------------- + + toCanvas: function (o, w, h, force) { + if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); + + // prevent exesive redraw + + if (force && R.tmpTime !== null) { + clearTimeout(R.tmpTime); + R.tmpTime = null; + } + if (R.tmpTime !== null) return; + if (R.lock) R.tmpTime = setTimeout(function () { + R.tmpTime = null; + }, 10); + + /// + + let isNewSize = false; + if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; + if (R.tmpImage === null) R.tmpImage = new Image(); + let img = R.tmpImage; //new Image(); + + let htmlString = R.xmlserializer.serializeToString(o.content); + let svg = '' + htmlString + ""; + img.onload = function () { + let ctx = o.canvas.getContext("2d"); + if (isNewSize) { + o.canvas.width = w; + o.canvas.height = h; + } else { + ctx.clearRect(0, 0, w, h); + } + ctx.drawImage(this, 0, 0); + o.onDraw(); + }; + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); + //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); + img.crossOrigin = ""; + R.needsUpdate = false; + }, + // ---------------------- + // INPUT + // ---------------------- + + setHidden: function () { + if (R.hiddenImput === null) { + //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' + //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' + //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; + + R.hiddenImput = document.createElement("input"); + R.hiddenImput.type = "text"; + //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); + + R.hiddenSizer = document.createElement("div"); + //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; + + document.body.appendChild(R.hiddenImput); + document.body.appendChild(R.hiddenSizer); + } + let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; + let css = R.parent.css.txtselect + "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + hide; + R.hiddenImput.style.cssText = css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); + R.hiddenSizer.style.cssText = css + "bottom:40px;"; + R.hiddenImput.style.width = R.input.clientWidth + "px"; + R.hiddenImput.value = R.str; + R.hiddenSizer.innerHTML = R.str; + R.hasFocus = true; + }, + clearHidden: function (p) { + if (R.hiddenImput === null) return; + R.hasFocus = false; + }, + clickPos: function (x) { + let i = R.str.length, + l = 0, + n = 0; + while (i--) { + l += R.textWidth(R.str[n]); + if (l >= x) break; + n++; + } + return n; + }, + upInput: function (x, down) { + if (R.parent === null) return false; + let up = false; + if (down) { + let id = R.clickPos(x); + R.moveX = id; + if (R.startX === -1) { + R.startX = id; + R.cursorId = id; + R.inputRange = [R.startX, R.startX]; + } else { + let isSelection = R.moveX !== R.startX; + if (isSelection) { + if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX];else R.inputRange = [R.startX, R.moveX]; + } + } + up = true; + } else { + if (R.startX !== -1) { + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.startX = -1; + up = true; + } + } + if (up) R.selectParent(); + return up; + }, + selectAll: function () { + if (!R.parent) return; + R.str = R.input.textContent; + R.inputRange = [0, R.str.length]; + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.cursorId = R.inputRange[1]; + R.selectParent(); + }, + selectParent: function () { + var c = R.textWidth(R.str.substring(0, R.cursorId)); + var e = R.textWidth(R.str.substring(0, R.inputRange[0])); + var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); + R.parent.select(c, e, s, R.hiddenSizer.innerHTML); + }, + textWidth: function (text) { + if (R.hiddenSizer === null) return 0; + text = text.replace(/ /g, " "); + R.hiddenSizer.innerHTML = text; + return R.hiddenSizer.clientWidth; + }, + clearInput: function () { + if (R.parent === null) return; + if (!R.firstImput) R.parent.validate(true); + R.clearHidden(); + R.parent.unselect(); + + //R.input.style.background = 'none'; + R.input.style.background = R.parent.colors.back; + R.input.style.borderColor = R.parent.colors.border; + //R.input.style.color = R.parent.colors.text; + R.parent.isEdit = false; + R.input = null; + R.parent = null; + R.str = "", R.firstImput = true; + }, + setInput: function (Input, parent) { + R.clearInput(); + R.input = Input; + R.parent = parent; + R.input.style.background = R.parent.colors.backoff; + R.input.style.borderColor = R.parent.colors.select; + //R.input.style.color = R.parent.colors.textSelect; + R.str = R.input.textContent; + R.setHidden(); + }, + keydown: function (e) { + if (R.parent === null) return; + let keyCode = e.which; + e.shiftKey; + + //console.log( keyCode ) + + R.firstImput = false; + if (R.hasFocus) { + // hack to fix touch event bug in iOS Safari + window.focus(); + R.hiddenImput.focus(); + } + R.parent.isEdit = true; + + // e.preventDefault(); + + // add support for Ctrl/Cmd+A selection + //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { + //R.selectText(); + //e.preventDefault(); + //return self.render(); + //} + + if (keyCode === 13) { + //enter + + R.clearInput(); + + //} else if( keyCode === 9 ){ //tab key + + // R.input.textContent = ''; + } else { + if (R.input.isNum) { + if (e.keyCode > 47 && e.keyCode < 58 || e.keyCode > 95 && e.keyCode < 106 || e.keyCode === 190 || e.keyCode === 110 || e.keyCode === 8 || e.keyCode === 109) { + R.hiddenImput.readOnly = false; + } else { + R.hiddenImput.readOnly = true; + } + } else { + R.hiddenImput.readOnly = false; + } + } + }, + keyup: function (e) { + if (R.parent === null) return; + R.str = R.hiddenImput.value; + if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value + else R.input.textContent = R.str; + R.cursorId = R.hiddenImput.selectionStart; + R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; + R.selectParent(); + + //if( R.parent.allway ) + R.parent.validate(); + }, + // ---------------------- + // + // LISTENING + // + // ---------------------- + + /* + // esta era la funcion original + loop: function () { + if( R.isLoop ) requestAnimationFrame( R.loop ); + R.update(); + }, + */ + + loop: function () { + // modified by Fedemarino + if (R.isLoop) requestAnimationFrame(R.loop); + R.needsUpdate = R.update(); + // if there is a change in a value generated externally, the GUI needs to be redrawn + if (R.ui[0] && R.needsUpdate) R.ui[0].draw(); + }, + update: function () { + // modified by Fedemarino + let i = R.listens.length; + let needsUpdate = false; + while (i--) { + //check if the value of the object has changed + let hasChanged = R.listens[i].listening(); + if (hasChanged) needsUpdate = true; + } + return needsUpdate; + }, + removeListen: function (proto) { + let id = R.listens.indexOf(proto); + if (id !== -1) R.listens.splice(id, 1); + if (R.listens.length === 0) R.isLoop = false; + }, + addListen: function (proto) { + let id = R.listens.indexOf(proto); + if (id !== -1) return false; + R.listens.push(proto); + if (!R.isLoop) { + R.isLoop = true; + R.loop(); + } + return true; + } + }; const Roots = R; - /** - * @author lth / https://github.com/lo-th - */ - - const T = { - - transition: 0.2, - - frag: document.createDocumentFragment(), - - colorRing: null, - joystick_0: null, - joystick_1: null, - circular: null, - knob: null, - pad2d: null, - - svgns: "http://www.w3.org/2000/svg", - links: "http://www.w3.org/1999/xlink", - htmls: "http://www.w3.org/1999/xhtml", - - DOM_SIZE: [ 'height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], - SVG_TYPE_D: [ 'pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix' ], - SVG_TYPE_G: [ 'svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject' ], - - PI: Math.PI, - TwoPI: Math.PI*2, - pi90: Math.PI * 0.5, - pi60: Math.PI/3, - - torad: Math.PI / 180, - todeg: 180 / Math.PI, - - clamp: ( v, min, max ) => { - - v = v < min ? min : v; - v = v > max ? max : v; - return v; - - }, - - isDivid: ( v ) => ( v*0.5 === Math.floor(v*0.5) ), - - size: { w: 240, h: 20, p: 30, s: 8 }, - - // ---------------------- - // COLOR - // ---------------------- - - defineColor: ( o, cc = T.colors ) => { - - let color = { ...cc }; - - let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize' ]; - let changeText = false; - - if( o.font ) o.fontFamily = o.font; - if( o.shadow ) o.fontShadow = o.shadow; - if( o.weight ) o.fontWeight = o.weight; - - if( o.fontColor ) o.text = o.fontColor; - if( o.color ) o.text = o.color; - - if( o.text ){ - color.text = o.text; - if( !o.fontColor && !o.color ){ - color.title = T.ColorLuma( o.text, -0.25 ); - color.titleoff = T.ColorLuma( o.text, -0.5 ); - } - color.textOver = T.ColorLuma( o.text, 0.25 ); - color.textSelect = T.ColorLuma( o.text, 0.5 ); - } - - if( o.button ){ - color.button = o.button; - color.border = T.ColorLuma( o.button, 0.1 ); - color.overoff = T.ColorLuma( o.button, 0.2 ); - } - - if( o.select ){ - color.select = o.select; - color.over = T.ColorLuma( o.select, -0.1 ); - } - - if( o.itemBg ) o.back = o.itemBg; - - if( o.back ){ - color.back = o.back; - color.backoff = T.ColorLuma( o.back, -0.1 ); - } - - if( o.fontSelect ) color.textSelect = o.fontSelect; - if( o.groupBorder ) color.gborder = o.groupBorder; - - //if( o.transparent ) o.bg = 'none' - //if( o.bg ) color.background = color.backgroundOver = o.bg - if( o.bgOver ) color.backgroundOver = o.bgOver; - - for( let m in color ){ - if(o[m]!==undefined) color[m] = o[m]; - } - - for( let m in o ){ - if( textChange.indexOf(m) !== -1 ) changeText = true; - } - - if( changeText ) T.defineText( color ); - - return color - - }, - - colors: { - - sx: 4,//4 - sy: 2,//2 - radius:2, - - showOver : 1, - //groupOver : 1, - - content:'none', - background: 'rgba(50,50,50,0.15)', - backgroundOver: 'rgba(50,50,50,0.3)', - - title : '#CCC', - titleoff : '#BBB', - text : '#DDD', - textOver : '#EEE', - textSelect : '#FFF', - - back:'rgba(0,0,0,0.2)', - backoff:'rgba(0,0,0,0.3)', - - // input and button border - border : '#4c4c4c', - borderSize : 1, - - gborder : 'none', - groups : 'none', - - - button : '#3c3c3c', - overoff : '#5c5c5c', - over : '#024699', - select : '#308AFF', - action: '#FF3300', - - //fontFamily: 'Tahoma', - fontFamily: 'Consolas, monospace', - //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", - fontWeight: 'normal', - fontShadow: 'none',//'#000', - fontSize:12, - - joyOver:'rgba(48,138,255,0.25)', - joyOut: 'rgba(100,100,100,0.5)', - joySelect: '#308AFF', - - - hide: 'rgba(0,0,0,0)', - - }, - - // style css - - css : { - - basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', - button:'display:flex; align-items:center; justify-content:center; text-align:center;', - middle:'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' - }, - - // svg path - - svgs: { - - g1:'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', - g2:'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', - - group:'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', - arrow:'M 3 8 L 8 5 3 2 3 8 Z', - - arrowDown:'M 5 8 L 8 3 2 3 5 8 Z', - arrowUp:'M 5 2 L 2 7 8 7 5 2 Z', - - solid:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', - body:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', - vehicle:'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', - articulation:'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', - character:'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', - terrain:'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', - joint:'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', - ray:'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', - collision:'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', - map:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - material:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - texture:'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', - object:'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', - none:'M 9 5 L 5 5 5 9 9 9 9 5 Z', - cursor:'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', - load:'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', - save:'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', - extern:'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z', - - }, - - rezone () { - Roots.needReZone = true; - }, - - getImput: function(){ - - return Roots.input ? true : false - - }, - - setStyle : function ( data ){ - - for ( var o in data ){ - if( T.colors[o] ) T.colors[o] = data[o]; - } - - T.setText(); - - }, - - // ---------------------- - // custom text - // ---------------------- - - defineText: function( o ){ - - T.setText( o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight ); - - }, - - setText: function( size, color, font, shadow, weight ){ - - let cc = T.colors; - - if( font === undefined ) font = cc.fontFamily; - if( size === undefined ) size = cc.fontSize; - if( shadow === undefined ) shadow = cc.fontShadow; - if( weight === undefined ) weight = cc.fontWeight; - if( color === undefined ) color = cc.text; - - if( isNaN(size) ){ if( size.search('em')===-1 ) size += 'px';} - else size += 'px'; - - - //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' - - T.css.txt = T.css.basic + T.css.middle + ' font-family:'+ font +'; font-weight:'+weight+'; font-size:'+size+'; color:'+cc.text+'; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; - if( shadow !== 'none' ) T.css.txt += ' text-shadow: 1px 1px 1px '+shadow+';'; - - T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; - T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; - - }, - - - // note - - //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container - - /*cloneColor: function () { - - let cc = Object.assign({}, T.colors ); - return cc; - - },*/ - - // intern function - - cloneCss: function () { - - //let cc = Object.assign({}, T.css ); - return { ...T.css }; - - }, - - clone: function ( o ) { - - return o.cloneNode( true ); - - }, - - setSvg: function( dom, type, value, id, id2 ){ - - if( id === -1 ) dom.setAttributeNS( null, type, value ); - else if( id2 !== undefined ) dom.childNodes[ id || 0 ].childNodes[ id2 || 0 ].setAttributeNS( null, type, value ); - else dom.childNodes[ id || 0 ].setAttributeNS( null, type, value ); - - }, - - setCss: function( dom, css ){ - - for( let r in css ){ - if( T.DOM_SIZE.indexOf(r) !== -1 ) dom.style[r] = css[r] + 'px'; - else dom.style[r] = css[r]; - } - - }, - - set: function( g, o ){ - - for( let att in o ){ - if( att === 'txt' ) g.textContent = o[ att ]; - if( att === 'link' ) g.setAttributeNS( T.links, 'xlink:href', o[ att ] ); - else g.setAttributeNS( null, att, o[ att ] ); - } - - }, - - get: function( dom, id ){ - - if( id === undefined ) return dom; // root - else if( !isNaN( id ) ) return dom.childNodes[ id ]; // first child - else if( id instanceof Array ){ - if(id.length === 2) return dom.childNodes[ id[0] ].childNodes[ id[1] ]; - if(id.length === 3) return dom.childNodes[ id[0] ].childNodes[ id[1] ].childNodes[ id[2] ]; - } - - }, - - dom : function ( type, css, obj, dom, id ) { - - type = type || 'div'; - - if( T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1 ){ // is svg element - - if( type ==='svg' ){ - - dom = document.createElementNS( T.svgns, 'svg' ); - T.set( dom, obj ); - - /* } else if ( type === 'use' ) { - - dom = document.createElementNS( T.svgns, 'use' ); - T.set( dom, obj ); - */ - } else { - // create new svg if not def - if( dom === undefined ) dom = document.createElementNS( T.svgns, 'svg' ); - T.addAttributes( dom, type, obj, id ); - - } - - } else { // is html element - - if( dom === undefined ) dom = document.createElementNS( T.htmls, type ); - else dom = dom.appendChild( document.createElementNS( T.htmls, type ) ); - - } - - if( css ) dom.style.cssText = css; - - if( id === undefined ) return dom; - else return dom.childNodes[ id || 0 ]; - - }, - - addAttributes : function( dom, type, o, id ){ - - let g = document.createElementNS( T.svgns, type ); - T.set( g, o ); - T.get( dom, id ).appendChild( g ); - if( T.SVG_TYPE_G.indexOf(type) !== -1 ) g.style.pointerEvents = 'none'; - return g; - - }, - - clear : function( dom ){ - - T.purge( dom ); - while (dom.firstChild) { - if ( dom.firstChild.firstChild ) T.clear( dom.firstChild ); - dom.removeChild( dom.firstChild ); - } - - }, - - purge : function ( dom ) { - - let a = dom.attributes, i, n; - if (a) { - i = a.length; - while(i--){ - n = a[i].name; - if (typeof dom[n] === 'function') dom[n] = null; - } - } - a = dom.childNodes; - if (a) { - i = a.length; - while(i--){ - T.purge( dom.childNodes[i] ); - } - } - - }, - - // ---------------------- - // SVG Effects function - // ---------------------- - - addSVGGlowEffect: function () { - - if ( document.getElementById( 'UILGlow') !== null ) return; - - let svgFilter = T.initUILEffects(); - - let filter = T.addAttributes( svgFilter, 'filter', { id: 'UILGlow', x: '-20%', y: '-20%', width: '140%', height: '140%' } ); - T.addAttributes( filter, 'feGaussianBlur', { in: 'SourceGraphic', stdDeviation: '3', result: 'uilBlur' } ); - let feMerge = T.addAttributes( filter, 'feMerge', { } ); - - for( let i = 0; i <= 3; i++ ) { - - T.addAttributes( feMerge, 'feMergeNode', { in: 'uilBlur' } ); - - } - - T.addAttributes( feMerge, 'feMergeNode', { in: 'SourceGraphic' } ); - - }, - - initUILEffects: function () { - - let svgFilter = document.getElementById( 'UILSVGEffects'); - - if ( svgFilter === null ) { - - svgFilter = T.dom( 'svg', undefined , { id: 'UILSVGEffects', width: '0', height: '0' } ); - document.body.appendChild( svgFilter ); - - } - - return svgFilter; - - }, - - // ---------------------- - // Color function - // ---------------------- - - ColorLuma : function ( hex, l ) { - - //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; - - if( hex === 'n' ) hex = '#000'; - - // validate hex string - hex = String(hex).replace(/[^0-9a-f]/gi, ''); - if (hex.length < 6) { - hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; - } - l = l || 0; - - // convert to decimal and change luminosity - let rgb = "#", c, i; - for (i = 0; i < 3; i++) { - c = parseInt(hex.substr(i*2,2), 16); - c = Math.round(Math.min(Math.max(0, c + (c * l)), 255)).toString(16); - rgb += ("00"+c).substr(c.length); - } - - return rgb; - - }, - - findDeepInver: function ( c ) { - - return (c[0] * 0.3 + c[1] * .59 + c[2] * .11) <= 0.6; - - }, - - lerpColor: function( c1, c2, factor ) { - let newColor = {}; - for ( let i = 0; i < 3; i++ ) { - newColor[i] = c1[ i ] + ( c2[ i ] - c1[ i ] ) * factor; - } - return newColor; - }, - - hexToHtml: function ( v ) { - v = v === undefined ? 0x000000 : v; - return "#" + ("000000" + v.toString(16)).substr(-6); - - }, - - htmlToHex: function ( v ) { - - return v.toUpperCase().replace("#", "0x"); - - }, - - u255: function (c, i) { - - return parseInt(c.substring(i, i + 2), 16) / 255; - - }, - - u16: function ( c, i ) { - - return parseInt(c.substring(i, i + 1), 16) / 15; - - }, - - unpack: function( c ){ - - if (c.length == 7) return [ T.u255(c, 1), T.u255(c, 3), T.u255(c, 5) ]; - else if (c.length == 4) return [ T.u16(c,1), T.u16(c,2), T.u16(c,3) ]; - - }, - - p255: function ( c ) { - let h = Math.round( ( c * 255 ) ).toString( 16 ); - if ( h.length < 2 ) h = '0' + h; - return h; - }, - - pack: function ( c ) { - - return '#' + T.p255( c[ 0 ] ) + T.p255( c[ 1 ] ) + T.p255( c[ 2 ] ); - - }, - - htmlRgb: function( c ){ - - return 'rgb(' + Math.round(c[0] * 255) + ','+ Math.round(c[1] * 255) + ','+ Math.round(c[2] * 255) + ')'; - - }, - - pad: function( n ){ - if(n.length == 1)n = '0' + n; - return n; - }, - - rgbToHex : function( c ){ - - let r = Math.round(c[0] * 255).toString(16); - let g = Math.round(c[1] * 255).toString(16); - let b = Math.round(c[2] * 255).toString(16); - return '#' + T.pad(r) + T.pad(g) + T.pad(b); - - // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); - - }, - - hueToRgb: function( p, q, t ){ - - if ( t < 0 ) t += 1; - if ( t > 1 ) t -= 1; - if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; - if ( t < 1 / 2 ) return q; - if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); - return p; - - }, - - rgbToHsl: function ( c ) { - - let r = c[0], g = c[1], b = c[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h = 0, s = 0, l = (min + max) / 2; - if (l > 0 && l < 1) s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); - if (delta > 0) { - if (max == r && max != g) h += (g - b) / delta; - if (max == g && max != b) h += (2 + (b - r) / delta); - if (max == b && max != r) h += (4 + (r - g) / delta); - h /= 6; - } - return [ h, s, l ]; - - }, - - hslToRgb: function ( c ) { - - let p, q, h = c[0], s = c[1], l = c[2]; - - if ( s === 0 ) return [ l, l, l ]; - else { - q = l <= 0.5 ? l * (s + 1) : l + s - ( l * s ); - p = l * 2 - q; - return [ T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333) ]; - } - - }, - - // ---------------------- - // SVG MODEL - // ---------------------- - - makeGradiant: function ( type, settings, parent, colors ) { - - T.dom( type, null, settings, parent, 0 ); - - let n = parent.childNodes[0].childNodes.length - 1, c; - - for( let i = 0; i < colors.length; i++ ){ - - c = colors[i]; - //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); - T.dom( 'stop', null, { offset:c[0]+'%', 'stop-color':c[1], 'stop-opacity':c[2] }, parent, [0,n] ); - - } - - }, - - /*makeGraph: function () { - - let w = 128; - let radius = 34; - let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 - //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 - //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 - - //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 - //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 - T.graph = svg; - - },*/ - - makePad: function ( model ) { - - let ww = 256; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+ww+' '+ww, width:ww, height:ww, preserveAspectRatio:'none' } ); - let w = 200; - let d = (ww-w)*0.5, m = 20; - Tools.dom( 'rect', '', { x: d, y: d, width: w, height: w, fill:T.colors.back }, svg ); // 0 - Tools.dom( 'rect', '', { x: d+m*0.5, y: d+m*0.5, width: w - m , height: w - m, fill:T.colors.button }, svg ); // 1 - // Pointer - Tools.dom( 'line', '', { x1: d+(m*0.5), y1: ww *0.5, x2: d+(w-m*0.5), y2: ww * 0.5, stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 2 - Tools.dom( 'line', '', { x1: ww * 0.5, x2: ww * 0.5, y1: d+(m*0.5), y2: d+(w-m*0.5), stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 3 - Tools.dom( 'circle', '', { cx: ww * 0.5, cy: ww * 0.5, r:5, stroke: T.colors.text, 'stroke-width': 5, fill:'none' }, svg ); // 4 - T.pad2d = svg; - - }, - - makeKnob: function ( model ) { - - let w = 128; - let radius = 34; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'round' }, svg );//1 - T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.1)', 'stroke-width':7 , fill:'none'}, svg );//2 - T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 - T.knob = svg; - - }, - - makeCircular: function ( model ) { - - let w = 128; - let radius = 40; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'circle', '', { cx:64, cy:64, r:radius, stroke:'rgba(0,0,0,0.1)', 'stroke-width':10, fill:'none' }, svg );//0 - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':7, fill:'none', 'stroke-linecap':'butt' }, svg );//1 - T.circular = svg; - - }, - - makeJoystick: function ( model ) { - - //+' background:#f00;' - - let w = 128, ccc; - let radius = Math.floor((w-30)*0.5); - let innerRadius = Math.floor(radius*0.6); - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'defs', null, {}, svg ); - T.dom( 'g', null, {}, svg ); - - if( model === 0 ){ - - - - // gradian background - ccc = [ [40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'grad', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // gradian shadow - ccc = [ [60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'gradS', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // gradian stick - let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; - let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; - - ccc = [ [30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1] ]; - T.makeGradiant( 'radialGradient', { id:'gradIn', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - ccc = [ [30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1] ]; - T.makeGradiant( 'radialGradient', { id:'gradIn2', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // graph - - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'url(#grad)' }, svg );//2 - T.dom( 'circle', '', { cx:64+5, cy:64+10, r:innerRadius+10, fill:'url(#gradS)' }, svg );//3 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'url(#gradIn)' }, svg );//4 - - T.joystick_0 = svg; - - } else { - // gradian shadow - ccc = [ [69, 'rgb(0,0,0)', 0],[70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'gradX', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'none', stroke:'rgba(100,100,100,0.25)', 'stroke-width':'4' }, svg );//2 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius+14, fill:'url(#gradX)' }, svg );//3 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'none', stroke:'rgb(100,100,100)', 'stroke-width':'4' }, svg );//4 - - T.joystick_1 = svg; - } - - - - }, - - makeColorRing: function () { - - let w = 256; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'defs', null, {}, svg ); - T.dom( 'g', null, {}, svg ); - - let s = 30;//stroke - let r =( w-s )*0.5; - let mid = w*0.5; - let n = 24, nudge = 8 / r / n * Math.PI, a1 = 0; - let am, tan, d2, a2, ar, i, j, path, ccc; - let color = []; - - for ( i = 0; i <= n; ++i) { - - d2 = i / n; - a2 = d2 * T.TwoPI; - am = (a1 + a2) * 0.5; - tan = 1 / Math.cos((a2 - a1) * 0.5); - - ar = [ - Math.sin(a1), -Math.cos(a1), - Math.sin(am) * tan, -Math.cos(am) * tan, - Math.sin(a2), -Math.cos(a2) - ]; - - color[1] = T.rgbToHex( T.hslToRgb([d2, 1, 0.5]) ); - - if (i > 0) { - - j = 6; - while(j--){ - ar[j] = ((ar[j]*r)+mid).toFixed(2); - } - - path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; - - ccc = [ [0,color[0],1], [100,color[1],1] ]; - T.makeGradiant( 'linearGradient', { id:'G'+i, x1:ar[0], y1:ar[1], x2:ar[4], y2:ar[5], gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - T.dom( 'path', '', { d:path, 'stroke-width':s, stroke:'url(#G'+i+')', 'stroke-linecap':"butt" }, svg, 1 ); - - } - a1 = a2 - nudge; - color[0] = color[1]; - } - - let tw = 84.90; - - // black / white - ccc = [ [0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1] ]; - T.makeGradiant( 'linearGradient', { id:'GL0', x1:0, y1:mid-tw, x2:0, y2:mid+tw, gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - ccc = [ [0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0] ]; - T.makeGradiant( 'linearGradient', { id:'GL1', x1:mid-49.05, y1:0, x2:mid+98, y2:0, gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - T.dom( 'g', null, { 'transform-origin': '128px 128px', 'transform':'rotate(0)' }, svg );//2 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'red' }, svg, 2 );// 2,0 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL1)','stroke-width':1, stroke:'url(#GL1)' }, svg, 2 );//2,1 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL0)','stroke-width':1, stroke:'url(#GL0)' }, svg, 2 );//2,2 - T.dom( 'path', '', { d:'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill:'none','stroke-width':2, stroke:'#000' }, svg, 2 );//2,3 - //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 - - T.dom( 'circle', '', { cx:128, cy:128, r:6, 'stroke-width':2, stroke:'#000', fill:'none' }, svg );//3 - - T.colorRing = svg; - - }, - - icon: function ( type, color, w ){ - - w = w || 40; - //color = color || '#DEDEDE'; - let viewBox = '0 0 256 256'; - //let viewBox = '0 0 '+ w +' '+ w; - let t = [""]; - switch(type){ - case 'logo': - t[1]=""; - break; - case 'donate': - t[1]=""; - break; - case 'neo': - t[1]=""; - break; - case 'phy': - t[1]=""; - break; - case 'config': - t[1]=""; - break; - case 'github': - t[1]=""; - break; - case 'save': - t[1]=""; - break; - } - t[2] = ""; - return t.join("\n"); - - }, - - logoFill_d:` - M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 - L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 - M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 - Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z - `, - - logo_github:` - M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 - 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 - 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 - 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 - 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z - `, - - logo_neo:` - M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 - 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 - 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 - 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L - 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z - `, - - logo_phy:` - M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 - Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 - `, - - logo_config:` - M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 - L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 - Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 - `, - - logo_donate:` - M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 - 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 - 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 - 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 - 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 - Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 - 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 - 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 - 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M - 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 - 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 - 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 - 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 - 200.9 187.5 200.9 187.5 195.35 Z - `, - - }; - - T.setText(); - + /** + * @author lth / https://github.com/lo-th + */ + const T = { + transition: 0.2, + frag: document.createDocumentFragment(), + colorRing: null, + joystick_0: null, + joystick_1: null, + circular: null, + knob: null, + pad2d: null, + svgns: "http://www.w3.org/2000/svg", + links: "http://www.w3.org/1999/xlink", + htmls: "http://www.w3.org/1999/xhtml", + DOM_SIZE: ['height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], + SVG_TYPE_D: ['pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix'], + SVG_TYPE_G: ['svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject'], + PI: Math.PI, + TwoPI: Math.PI * 2, + pi90: Math.PI * 0.5, + pi60: Math.PI / 3, + torad: Math.PI / 180, + todeg: 180 / Math.PI, + clamp: (v, min, max) => { + v = v < min ? min : v; + v = v > max ? max : v; + return v; + }, + isDivid: v => v * 0.5 === Math.floor(v * 0.5), + size: { + w: 240, + h: 20, + p: 30, + s: 8 + }, + // ---------------------- + // COLOR + // ---------------------- + + defineColor: (o, cc = T.colors) => { + let color = { + ...cc + }; + let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize']; + let changeText = false; + if (o.font) o.fontFamily = o.font; + if (o.shadow) o.fontShadow = o.shadow; + if (o.weight) o.fontWeight = o.weight; + if (o.fontColor) o.text = o.fontColor; + if (o.color) o.text = o.color; + if (o.text) { + color.text = o.text; + if (!o.fontColor && !o.color) { + color.title = T.ColorLuma(o.text, -0.25); + color.titleoff = T.ColorLuma(o.text, -0.5); + } + color.textOver = T.ColorLuma(o.text, 0.25); + color.textSelect = T.ColorLuma(o.text, 0.5); + } + if (o.button) { + color.button = o.button; + color.border = T.ColorLuma(o.button, 0.1); + color.overoff = T.ColorLuma(o.button, 0.2); + } + if (o.select) { + color.select = o.select; + color.over = T.ColorLuma(o.select, -0.1); + } + if (o.itemBg) o.back = o.itemBg; + if (o.back) { + color.back = o.back; + color.backoff = T.ColorLuma(o.back, -0.1); + } + if (o.fontSelect) color.textSelect = o.fontSelect; + if (o.groupBorder) color.gborder = o.groupBorder; + + //if( o.transparent ) o.bg = 'none' + //if( o.bg ) color.background = color.backgroundOver = o.bg + if (o.bgOver) color.backgroundOver = o.bgOver; + for (let m in color) { + if (o[m] !== undefined) color[m] = o[m]; + } + for (let m in o) { + if (textChange.indexOf(m) !== -1) changeText = true; + } + if (changeText) T.defineText(color); + return color; + }, + colors: { + sx: 4, + //4 + sy: 2, + //2 + radius: 2, + showOver: 1, + //groupOver : 1, + + content: 'none', + background: 'rgba(50,50,50,0.15)', + backgroundOver: 'rgba(50,50,50,0.3)', + title: '#CCC', + titleoff: '#BBB', + text: '#DDD', + textOver: '#EEE', + textSelect: '#FFF', + back: 'rgba(0,0,0,0.2)', + backoff: 'rgba(0,0,0,0.3)', + // input and button border + border: '#4c4c4c', + borderSize: 1, + gborder: 'none', + groups: 'none', + button: '#3c3c3c', + overoff: '#5c5c5c', + over: '#024699', + select: '#308AFF', + action: '#FF3300', + //fontFamily: 'Tahoma', + fontFamily: 'Consolas, monospace', + //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", + fontWeight: 'normal', + fontShadow: 'none', + //'#000', + fontSize: 12, + joyOver: 'rgba(48,138,255,0.25)', + joyOut: 'rgba(100,100,100,0.5)', + joySelect: '#308AFF', + hide: 'rgba(0,0,0,0)' + }, + // style css + + css: { + basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', + button: 'display:flex; align-items:center; justify-content:center; text-align:center;', + middle: 'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' + }, + // svg path + + svgs: { + g1: 'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', + g2: 'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', + group: 'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', + arrow: 'M 3 8 L 8 5 3 2 3 8 Z', + arrowDown: 'M 5 8 L 8 3 2 3 5 8 Z', + arrowUp: 'M 5 2 L 2 7 8 7 5 2 Z', + solid: 'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', + body: 'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', + vehicle: 'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', + articulation: 'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', + character: 'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', + terrain: 'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', + joint: 'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', + ray: 'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', + collision: 'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', + map: 'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + material: 'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + texture: 'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', + object: 'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', + none: 'M 9 5 L 5 5 5 9 9 9 9 5 Z', + cursor: 'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', + load: 'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', + save: 'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', + extern: 'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z' + }, + rezone() { + Roots.needReZone = true; + }, + getImput: function () { + return Roots.input ? true : false; + }, + setStyle: function (data) { + for (var o in data) { + if (T.colors[o]) T.colors[o] = data[o]; + } + T.setText(); + }, + // ---------------------- + // custom text + // ---------------------- + + defineText: function (o) { + T.setText(o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight); + }, + setText: function (size, color, font, shadow, weight) { + let cc = T.colors; + if (font === undefined) font = cc.fontFamily; + if (size === undefined) size = cc.fontSize; + if (shadow === undefined) shadow = cc.fontShadow; + if (weight === undefined) weight = cc.fontWeight; + if (color === undefined) color = cc.text; + if (isNaN(size)) { + if (size.search('em') === -1) size += 'px'; + } else size += 'px'; + + //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' + + T.css.txt = T.css.basic + T.css.middle + ' font-family:' + font + '; font-weight:' + weight + '; font-size:' + size + '; color:' + cc.text + '; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; + if (shadow !== 'none') T.css.txt += ' text-shadow: 1px 1px 1px ' + shadow + ';'; + T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; + T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; + }, + // note + + //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container + + /*cloneColor: function () { + let cc = Object.assign({}, T.colors ); + return cc; + },*/ + + // intern function + + cloneCss: function () { + //let cc = Object.assign({}, T.css ); + return { + ...T.css + }; + }, + clone: function (o) { + return o.cloneNode(true); + }, + setSvg: function (dom, type, value, id, id2) { + if (id === -1) dom.setAttributeNS(null, type, value);else if (id2 !== undefined) dom.childNodes[id || 0].childNodes[id2 || 0].setAttributeNS(null, type, value);else dom.childNodes[id || 0].setAttributeNS(null, type, value); + }, + setCss: function (dom, css) { + for (let r in css) { + if (T.DOM_SIZE.indexOf(r) !== -1) dom.style[r] = css[r] + 'px';else dom.style[r] = css[r]; + } + }, + set: function (g, o) { + for (let att in o) { + if (att === 'txt') g.textContent = o[att]; + if (att === 'link') g.setAttributeNS(T.links, 'xlink:href', o[att]);else g.setAttributeNS(null, att, o[att]); + } + }, + get: function (dom, id) { + if (id === undefined) return dom; // root + else if (!isNaN(id)) return dom.childNodes[id]; // first child + else if (id instanceof Array) { + if (id.length === 2) return dom.childNodes[id[0]].childNodes[id[1]]; + if (id.length === 3) return dom.childNodes[id[0]].childNodes[id[1]].childNodes[id[2]]; + } + }, + dom: function (type, css, obj, dom, id) { + type = type || 'div'; + if (T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1) { + // is svg element + + if (type === 'svg') { + dom = document.createElementNS(T.svgns, 'svg'); + T.set(dom, obj); + + /* } else if ( type === 'use' ) { + dom = document.createElementNS( T.svgns, 'use' ); + T.set( dom, obj ); + */ + } else { + // create new svg if not def + if (dom === undefined) dom = document.createElementNS(T.svgns, 'svg'); + T.addAttributes(dom, type, obj, id); + } + } else { + // is html element + + if (dom === undefined) dom = document.createElementNS(T.htmls, type);else dom = dom.appendChild(document.createElementNS(T.htmls, type)); + } + if (css) dom.style.cssText = css; + if (id === undefined) return dom;else return dom.childNodes[id || 0]; + }, + addAttributes: function (dom, type, o, id) { + let g = document.createElementNS(T.svgns, type); + T.set(g, o); + T.get(dom, id).appendChild(g); + if (T.SVG_TYPE_G.indexOf(type) !== -1) g.style.pointerEvents = 'none'; + return g; + }, + clear: function (dom) { + T.purge(dom); + while (dom.firstChild) { + if (dom.firstChild.firstChild) T.clear(dom.firstChild); + dom.removeChild(dom.firstChild); + } + }, + purge: function (dom) { + let a = dom.attributes, + i, + n; + if (a) { + i = a.length; + while (i--) { + n = a[i].name; + if (typeof dom[n] === 'function') dom[n] = null; + } + } + a = dom.childNodes; + if (a) { + i = a.length; + while (i--) { + T.purge(dom.childNodes[i]); + } + } + }, + // ---------------------- + // SVG Effects function + // ---------------------- + + addSVGGlowEffect: function () { + if (document.getElementById('UILGlow') !== null) return; + let svgFilter = T.initUILEffects(); + let filter = T.addAttributes(svgFilter, 'filter', { + id: 'UILGlow', + x: '-20%', + y: '-20%', + width: '140%', + height: '140%' + }); + T.addAttributes(filter, 'feGaussianBlur', { + in: 'SourceGraphic', + stdDeviation: '3', + result: 'uilBlur' + }); + let feMerge = T.addAttributes(filter, 'feMerge', {}); + for (let i = 0; i <= 3; i++) { + T.addAttributes(feMerge, 'feMergeNode', { + in: 'uilBlur' + }); + } + T.addAttributes(feMerge, 'feMergeNode', { + in: 'SourceGraphic' + }); + }, + initUILEffects: function () { + let svgFilter = document.getElementById('UILSVGEffects'); + if (svgFilter === null) { + svgFilter = T.dom('svg', undefined, { + id: 'UILSVGEffects', + width: '0', + height: '0' + }); + document.body.appendChild(svgFilter); + } + return svgFilter; + }, + // ---------------------- + // Color function + // ---------------------- + + ColorLuma: function (hex, l) { + //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; + + if (hex === 'n') hex = '#000'; + + // validate hex string + hex = String(hex).replace(/[^0-9a-f]/gi, ''); + if (hex.length < 6) { + hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; + } + l = l || 0; + + // convert to decimal and change luminosity + let rgb = "#", + c, + i; + for (i = 0; i < 3; i++) { + c = parseInt(hex.substr(i * 2, 2), 16); + c = Math.round(Math.min(Math.max(0, c + c * l), 255)).toString(16); + rgb += ("00" + c).substr(c.length); + } + return rgb; + }, + findDeepInver: function (c) { + return c[0] * 0.3 + c[1] * .59 + c[2] * .11 <= 0.6; + }, + lerpColor: function (c1, c2, factor) { + let newColor = {}; + for (let i = 0; i < 3; i++) { + newColor[i] = c1[i] + (c2[i] - c1[i]) * factor; + } + return newColor; + }, + hexToHtml: function (v) { + v = v === undefined ? 0x000000 : v; + return "#" + ("000000" + v.toString(16)).substr(-6); + }, + htmlToHex: function (v) { + return v.toUpperCase().replace("#", "0x"); + }, + u255: function (c, i) { + return parseInt(c.substring(i, i + 2), 16) / 255; + }, + u16: function (c, i) { + return parseInt(c.substring(i, i + 1), 16) / 15; + }, + unpack: function (c) { + if (c.length == 7) return [T.u255(c, 1), T.u255(c, 3), T.u255(c, 5)];else if (c.length == 4) return [T.u16(c, 1), T.u16(c, 2), T.u16(c, 3)]; + }, + p255: function (c) { + let h = Math.round(c * 255).toString(16); + if (h.length < 2) h = '0' + h; + return h; + }, + pack: function (c) { + return '#' + T.p255(c[0]) + T.p255(c[1]) + T.p255(c[2]); + }, + htmlRgb: function (c) { + return 'rgb(' + Math.round(c[0] * 255) + ',' + Math.round(c[1] * 255) + ',' + Math.round(c[2] * 255) + ')'; + }, + pad: function (n) { + if (n.length == 1) n = '0' + n; + return n; + }, + rgbToHex: function (c) { + let r = Math.round(c[0] * 255).toString(16); + let g = Math.round(c[1] * 255).toString(16); + let b = Math.round(c[2] * 255).toString(16); + return '#' + T.pad(r) + T.pad(g) + T.pad(b); + + // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); + }, + hueToRgb: function (p, q, t) { + if (t < 0) t += 1; + if (t > 1) t -= 1; + if (t < 1 / 6) return p + (q - p) * 6 * t; + if (t < 1 / 2) return q; + if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t); + return p; + }, + rgbToHsl: function (c) { + let r = c[0], + g = c[1], + b = c[2], + min = Math.min(r, g, b), + max = Math.max(r, g, b), + delta = max - min, + h = 0, + s = 0, + l = (min + max) / 2; + if (l > 0 && l < 1) s = delta / (l < 0.5 ? 2 * l : 2 - 2 * l); + if (delta > 0) { + if (max == r && max != g) h += (g - b) / delta; + if (max == g && max != b) h += 2 + (b - r) / delta; + if (max == b && max != r) h += 4 + (r - g) / delta; + h /= 6; + } + return [h, s, l]; + }, + hslToRgb: function (c) { + let p, + q, + h = c[0], + s = c[1], + l = c[2]; + if (s === 0) return [l, l, l];else { + q = l <= 0.5 ? l * (s + 1) : l + s - l * s; + p = l * 2 - q; + return [T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333)]; + } + }, + // ---------------------- + // SVG MODEL + // ---------------------- + + makeGradiant: function (type, settings, parent, colors) { + T.dom(type, null, settings, parent, 0); + let n = parent.childNodes[0].childNodes.length - 1, + c; + for (let i = 0; i < colors.length; i++) { + c = colors[i]; + //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); + T.dom('stop', null, { + offset: c[0] + '%', + 'stop-color': c[1], + 'stop-opacity': c[2] + }, parent, [0, n]); + } + }, + /*makeGraph: function () { + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 + //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 + //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + + //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 + //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.graph = svg; + },*/ + + makePad: function (model) { + let ww = 256; + let svg = T.dom('svg', T.css.basic + 'position:relative;', { + viewBox: '0 0 ' + ww + ' ' + ww, + width: ww, + height: ww, + preserveAspectRatio: 'none' + }); + let w = 200; + let d = (ww - w) * 0.5, + m = 20; + Tools.dom('rect', '', { + x: d, + y: d, + width: w, + height: w, + fill: T.colors.back + }, svg); // 0 + Tools.dom('rect', '', { + x: d + m * 0.5, + y: d + m * 0.5, + width: w - m, + height: w - m, + fill: T.colors.button + }, svg); // 1 + // Pointer + Tools.dom('line', '', { + x1: d + m * 0.5, + y1: ww * 0.5, + x2: d + (w - m * 0.5), + y2: ww * 0.5, + stroke: T.colors.back, + 'stroke-width': 2 + }, svg); // 2 + Tools.dom('line', '', { + x1: ww * 0.5, + x2: ww * 0.5, + y1: d + m * 0.5, + y2: d + (w - m * 0.5), + stroke: T.colors.back, + 'stroke-width': 2 + }, svg); // 3 + Tools.dom('circle', '', { + cx: ww * 0.5, + cy: ww * 0.5, + r: 5, + stroke: T.colors.text, + 'stroke-width': 5, + fill: 'none' + }, svg); // 4 + T.pad2d = svg; + }, + makeKnob: function (model) { + let w = 128; + let radius = 34; + let svg = T.dom('svg', T.css.basic + 'position:relative;', { + viewBox: '0 0 ' + w + ' ' + w, + width: w, + height: w, + preserveAspectRatio: 'none' + }); + T.dom('circle', '', { + cx: 64, + cy: 64, + r: radius, + fill: T.colors.button, + stroke: 'rgba(0,0,0,0.3)', + 'stroke-width': 8 + }, svg); //0 + T.dom('path', '', { + d: '', + stroke: T.colors.text, + 'stroke-width': 4, + fill: 'none', + 'stroke-linecap': 'round' + }, svg); //1 + T.dom('circle', '', { + cx: 64, + cy: 64, + r: radius + 7, + stroke: 'rgba(0,0,0,0.1)', + 'stroke-width': 7, + fill: 'none' + }, svg); //2 + T.dom('path', '', { + d: '', + stroke: 'rgba(255,255,255,0.3)', + 'stroke-width': 2, + fill: 'none', + 'stroke-linecap': 'round', + 'stroke-opacity': 0.5 + }, svg); //3 + T.knob = svg; + }, + makeCircular: function (model) { + let w = 128; + let radius = 40; + let svg = T.dom('svg', T.css.basic + 'position:relative;', { + viewBox: '0 0 ' + w + ' ' + w, + width: w, + height: w, + preserveAspectRatio: 'none' + }); + T.dom('circle', '', { + cx: 64, + cy: 64, + r: radius, + stroke: 'rgba(0,0,0,0.1)', + 'stroke-width': 10, + fill: 'none' + }, svg); //0 + T.dom('path', '', { + d: '', + stroke: T.colors.text, + 'stroke-width': 7, + fill: 'none', + 'stroke-linecap': 'butt' + }, svg); //1 + T.circular = svg; + }, + makeJoystick: function (model) { + //+' background:#f00;' + + let w = 128, + ccc; + let radius = Math.floor((w - 30) * 0.5); + let innerRadius = Math.floor(radius * 0.6); + let svg = T.dom('svg', T.css.basic + 'position:relative;', { + viewBox: '0 0 ' + w + ' ' + w, + width: w, + height: w, + preserveAspectRatio: 'none' + }); + T.dom('defs', null, {}, svg); + T.dom('g', null, {}, svg); + if (model === 0) { + // gradian background + ccc = [[40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0]]; + T.makeGradiant('radialGradient', { + id: 'grad', + cx: '50%', + cy: '50%', + r: '50%', + fx: '50%', + fy: '50%' + }, svg, ccc); + + // gradian shadow + ccc = [[60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0]]; + T.makeGradiant('radialGradient', { + id: 'gradS', + cx: '50%', + cy: '50%', + r: '50%', + fx: '50%', + fy: '50%' + }, svg, ccc); + + // gradian stick + let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; + let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; + ccc = [[30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1]]; + T.makeGradiant('radialGradient', { + id: 'gradIn', + cx: '50%', + cy: '50%', + r: '50%', + fx: '50%', + fy: '50%' + }, svg, ccc); + ccc = [[30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1]]; + T.makeGradiant('radialGradient', { + id: 'gradIn2', + cx: '50%', + cy: '50%', + r: '50%', + fx: '50%', + fy: '50%' + }, svg, ccc); + + // graph + + T.dom('circle', '', { + cx: 64, + cy: 64, + r: radius, + fill: 'url(#grad)' + }, svg); //2 + T.dom('circle', '', { + cx: 64 + 5, + cy: 64 + 10, + r: innerRadius + 10, + fill: 'url(#gradS)' + }, svg); //3 + T.dom('circle', '', { + cx: 64, + cy: 64, + r: innerRadius, + fill: 'url(#gradIn)' + }, svg); //4 + + T.joystick_0 = svg; + } else { + // gradian shadow + ccc = [[69, 'rgb(0,0,0)', 0], [70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0]]; + T.makeGradiant('radialGradient', { + id: 'gradX', + cx: '50%', + cy: '50%', + r: '50%', + fx: '50%', + fy: '50%' + }, svg, ccc); + T.dom('circle', '', { + cx: 64, + cy: 64, + r: radius, + fill: 'none', + stroke: 'rgba(100,100,100,0.25)', + 'stroke-width': '4' + }, svg); //2 + T.dom('circle', '', { + cx: 64, + cy: 64, + r: innerRadius + 14, + fill: 'url(#gradX)' + }, svg); //3 + T.dom('circle', '', { + cx: 64, + cy: 64, + r: innerRadius, + fill: 'none', + stroke: 'rgb(100,100,100)', + 'stroke-width': '4' + }, svg); //4 + + T.joystick_1 = svg; + } + }, + makeColorRing: function () { + let w = 256; + let svg = T.dom('svg', T.css.basic + 'position:relative;', { + viewBox: '0 0 ' + w + ' ' + w, + width: w, + height: w, + preserveAspectRatio: 'none' + }); + T.dom('defs', null, {}, svg); + T.dom('g', null, {}, svg); + let s = 30; //stroke + let r = (w - s) * 0.5; + let mid = w * 0.5; + let n = 24, + nudge = 8 / r / n * Math.PI, + a1 = 0; + let am, tan, d2, a2, ar, i, j, path, ccc; + let color = []; + for (i = 0; i <= n; ++i) { + d2 = i / n; + a2 = d2 * T.TwoPI; + am = (a1 + a2) * 0.5; + tan = 1 / Math.cos((a2 - a1) * 0.5); + ar = [Math.sin(a1), -Math.cos(a1), Math.sin(am) * tan, -Math.cos(am) * tan, Math.sin(a2), -Math.cos(a2)]; + color[1] = T.rgbToHex(T.hslToRgb([d2, 1, 0.5])); + if (i > 0) { + j = 6; + while (j--) { + ar[j] = (ar[j] * r + mid).toFixed(2); + } + path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; + ccc = [[0, color[0], 1], [100, color[1], 1]]; + T.makeGradiant('linearGradient', { + id: 'G' + i, + x1: ar[0], + y1: ar[1], + x2: ar[4], + y2: ar[5], + gradientUnits: "userSpaceOnUse" + }, svg, ccc); + T.dom('path', '', { + d: path, + 'stroke-width': s, + stroke: 'url(#G' + i + ')', + 'stroke-linecap': "butt" + }, svg, 1); + } + a1 = a2 - nudge; + color[0] = color[1]; + } + let tw = 84.90; + + // black / white + ccc = [[0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1]]; + T.makeGradiant('linearGradient', { + id: 'GL0', + x1: 0, + y1: mid - tw, + x2: 0, + y2: mid + tw, + gradientUnits: "userSpaceOnUse" + }, svg, ccc); + ccc = [[0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0]]; + T.makeGradiant('linearGradient', { + id: 'GL1', + x1: mid - 49.05, + y1: 0, + x2: mid + 98, + y2: 0, + gradientUnits: "userSpaceOnUse" + }, svg, ccc); + T.dom('g', null, { + 'transform-origin': '128px 128px', + 'transform': 'rotate(0)' + }, svg); //2 + T.dom('polygon', '', { + points: '78.95 43.1 78.95 212.85 226 128', + fill: 'red' + }, svg, 2); // 2,0 + T.dom('polygon', '', { + points: '78.95 43.1 78.95 212.85 226 128', + fill: 'url(#GL1)', + 'stroke-width': 1, + stroke: 'url(#GL1)' + }, svg, 2); //2,1 + T.dom('polygon', '', { + points: '78.95 43.1 78.95 212.85 226 128', + fill: 'url(#GL0)', + 'stroke-width': 1, + stroke: 'url(#GL0)' + }, svg, 2); //2,2 + T.dom('path', '', { + d: 'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', + fill: 'none', + 'stroke-width': 2, + stroke: '#000' + }, svg, 2); //2,3 + //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 + + T.dom('circle', '', { + cx: 128, + cy: 128, + r: 6, + 'stroke-width': 2, + stroke: '#000', + fill: 'none' + }, svg); //3 + + T.colorRing = svg; + }, + icon: function (type, color, w) { + w = w || 40; + //color = color || '#DEDEDE'; + let viewBox = '0 0 256 256'; + //let viewBox = '0 0 '+ w +' '+ w; + let t = [""]; + switch (type) { + case 'logo': + t[1] = ""; + break; + case 'donate': + t[1] = ""; + break; + case 'neo': + t[1] = ""; + break; + case 'phy': + t[1] = ""; + break; + case 'config': + t[1] = ""; + break; + case 'github': + t[1] = ""; + break; + case 'save': + t[1] = ""; + break; + } + t[2] = ""; + return t.join("\n"); + }, + logoFill_d: ` + M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 + L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 + M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 + Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z + `, + logo_github: ` + M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 + 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 + 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 + 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 + 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z + `, + logo_neo: ` + M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 + 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 + 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 + 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L + 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z + `, + logo_phy: ` + M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 + Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 + `, + logo_config: ` + M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 + L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 + Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 + `, + logo_donate: ` + M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 + 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 + 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 + 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 + 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 + Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 + 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 + 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 + 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M + 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 + 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 + 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 + 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 + 200.9 187.5 200.9 187.5 195.35 Z + ` + }; + T.setText(); const Tools = T; - ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile - - - class Files { - - //----------------------------- - // FILE TYPE - //----------------------------- - - static autoTypes( type ) { - - let t = []; - - switch( type ){ - case 'svg': - t = [ { accept: { 'image/svg+xml': '.svg'} }, ]; - break; - case 'wav': - t = [ { accept: { 'audio/wav': '.wav'} }, ]; - break; - case 'mp3': - t = [ { accept: { 'audio/mpeg': '.mp3'} }, ]; - break; - case 'mp4': - t = [ { accept: { 'video/mp4': '.mp4'} }, ]; - break; - case 'bin': case 'hex': - t = [ { description: 'Binary Files', accept: { 'application/octet-stream': ['.bin', '.hex'] } }, ]; - break; - case 'text': - t = [ { description: 'Text Files', accept: { 'text/plain': ['.txt', '.text'], 'text/html': ['.html', '.htm'] } }, ]; - break; - case 'json': - t = [ { description: 'JSON Files', accept: { 'application/json': ['.json'] } }, ];//text/plain - break; - case 'js': - t = [ { description: 'JavaScript Files', accept: { 'text/javascript': ['.js'] } }, ]; - break; - case 'image': - t = [ { description: 'Images', accept: { 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] } }, ]; - break; - case 'icon': - t = [ { description: 'Icons', accept: { 'image/x-ico': ['.ico'] } }, ]; - break; - case 'lut': - t = [ { description: 'Lut', accept: { 'text/plain': ['.cube', '.3dl'] } }, ]; - break; - - } - - return t - - } - - - //----------------------------- - // LOAD - //----------------------------- - - static async load( o = {} ) { - - if (typeof window.showOpenFilePicker !== 'function') { - window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; - } - - try { - - let type = o.type || ''; - - const options = { - excludeAcceptAllOption: type ? true : false, - multiple: false, - //startIn:'./assets' - }; - - options.types = Files.autoTypes( type ); - - // create a new handle - const handle = await window.showOpenFilePicker( options ); - const file = await handle[0].getFile(); - //let content = await file.text() - - if( !file ) return null - - let fname = file.name; - let ftype = fname.substring( fname.lastIndexOf('.')+1, fname.length ); - - const dataUrl = [ 'png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3' ]; - const dataBuf = [ 'sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf' ]; - const reader = new FileReader(); - - if( dataUrl.indexOf( ftype ) !== -1 ) reader.readAsDataURL( file ); - else if( dataBuf.indexOf( ftype ) !== -1 ) reader.readAsArrayBuffer( file ); - else reader.readAsText( file ); - - reader.onload = function(e) { - - let content = e.target.result; - - switch(type){ - case 'image': - let img = new Image; - img.onload = function() { - if( o.callback ) o.callback( img, fname, ftype ); - }; - img.src = content; - break; - case 'json': - if( o.callback ) o.callback( JSON.parse( content ), fname, ftype ); - break; - default: - if( o.callback ) o.callback( content, fname, ftype ); - break; - } - - }; - - } catch(e) { - - console.log(e); - if( o.always && o.callback ) o.callback( null ); - - } - - } - - static showOpenFilePickerPolyfill( options ) { - return new Promise((resolve) => { - const input = document.createElement("input"); - input.type = "file"; - input.multiple = options.multiple; - input.accept = options.types - .map((type) => type.accept) - .flatMap((inst) => Object.keys(inst).flatMap((key) => inst[key])) - .join(","); - - input.addEventListener("change", () => { - resolve( - [...input.files].map((file) => { - return { - getFile: async () => - new Promise((resolve) => { - resolve(file); - }), - }; - }) - ); - }); - - input.click(); - }) - } - - - //----------------------------- - // SAVE - //----------------------------- - - static async save( o = {} ) { - - let usePoly = false; - - if (typeof window.showSaveFilePicker !== 'function') { - window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; - usePoly = true; - } - - try { - - let type = o.type || ''; - - const options = { - suggestedName: o.name || 'hello', - data: o.data || '' - }; - - options.types = Files.autoTypes( type ); - options.finalType = Object.keys( options.types[0].accept )[0]; - options.suggestedName += options.types[0].accept[options.finalType][0]; - - - // create a new handle - const handle = await window.showSaveFilePicker( options ); - - if( usePoly ) return - - // create a FileSystemWritableFileStream to write to - const file = await handle.createWritable(); - - let blob = new Blob([ options.data ], { type: options.finalType }); - - // write our file - await file.write(blob); - - // close the file and write the contents to disk. - await file.close(); - - } catch(e) { - - console.log(e); - - } - - } - - static showSaveFilePickerPolyfill( options ) { - return new Promise((resolve) => { - const a = document.createElement("a"); - a.download = options.suggestedName || "my-file.txt"; - let blob = new Blob([ options.data ], { type:options.finalType }); - a.href = URL.createObjectURL( blob ); - - a.addEventListener("click", () => { - resolve( - setTimeout( () => URL.revokeObjectURL(a.href), 1000 ) - ); - }); - a.click(); - }) - } - - - //----------------------------- - // FOLDER not possible in poly - //----------------------------- - - static async getFolder() { - - try { - - const handle = await window.showDirectoryPicker(); - const files = []; - for await (const entry of handle.values()) { - const file = await entry.getFile(); - files.push(file); - } - - console.log(files); - return files; - - } catch(e) { - - console.log(e); - - } - - } - - - - - - - - - - + ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile + + class Files { + //----------------------------- + // FILE TYPE + //----------------------------- + + static autoTypes(type) { + let t = []; + switch (type) { + case 'svg': + t = [{ + accept: { + 'image/svg+xml': '.svg' + } + }]; + break; + case 'wav': + t = [{ + accept: { + 'audio/wav': '.wav' + } + }]; + break; + case 'mp3': + t = [{ + accept: { + 'audio/mpeg': '.mp3' + } + }]; + break; + case 'mp4': + t = [{ + accept: { + 'video/mp4': '.mp4' + } + }]; + break; + case 'bin': + case 'hex': + t = [{ + description: 'Binary Files', + accept: { + 'application/octet-stream': ['.bin', '.hex'] + } + }]; + break; + case 'text': + t = [{ + description: 'Text Files', + accept: { + 'text/plain': ['.txt', '.text'], + 'text/html': ['.html', '.htm'] + } + }]; + break; + case 'json': + t = [{ + description: 'JSON Files', + accept: { + 'application/json': ['.json'] + } + }]; //text/plain + break; + case 'js': + t = [{ + description: 'JavaScript Files', + accept: { + 'text/javascript': ['.js'] + } + }]; + break; + case 'image': + t = [{ + description: 'Images', + accept: { + 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] + } + }]; + break; + case 'icon': + t = [{ + description: 'Icons', + accept: { + 'image/x-ico': ['.ico'] + } + }]; + break; + case 'lut': + t = [{ + description: 'Lut', + accept: { + 'text/plain': ['.cube', '.3dl'] + } + }]; + break; + } + return t; + } + + //----------------------------- + // LOAD + //----------------------------- + + static async load(o = {}) { + if (typeof window.showOpenFilePicker !== 'function') { + window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; + } + try { + let type = o.type || ''; + const options = { + excludeAcceptAllOption: type ? true : false, + multiple: false + //startIn:'./assets' + }; + options.types = Files.autoTypes(type); + + // create a new handle + const handle = await window.showOpenFilePicker(options); + const file = await handle[0].getFile(); + //let content = await file.text() + + if (!file) return null; + let fname = file.name; + let ftype = fname.substring(fname.lastIndexOf('.') + 1, fname.length); + const dataUrl = ['png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3']; + const dataBuf = ['sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf']; + const reader = new FileReader(); + if (dataUrl.indexOf(ftype) !== -1) reader.readAsDataURL(file);else if (dataBuf.indexOf(ftype) !== -1) reader.readAsArrayBuffer(file);else reader.readAsText(file); + reader.onload = function (e) { + let content = e.target.result; + switch (type) { + case 'image': + let img = new Image(); + img.onload = function () { + if (o.callback) o.callback(img, fname, ftype); + }; + img.src = content; + break; + case 'json': + if (o.callback) o.callback(JSON.parse(content), fname, ftype); + break; + default: + if (o.callback) o.callback(content, fname, ftype); + break; + } + }; + } catch (e) { + console.log(e); + if (o.always && o.callback) o.callback(null); + } + } + static showOpenFilePickerPolyfill(options) { + return new Promise(resolve => { + const input = document.createElement("input"); + input.type = "file"; + input.multiple = options.multiple; + input.accept = options.types.map(type => type.accept).flatMap(inst => Object.keys(inst).flatMap(key => inst[key])).join(","); + input.addEventListener("change", () => { + resolve([...input.files].map(file => { + return { + getFile: async () => new Promise(resolve => { + resolve(file); + }) + }; + })); + }); + input.click(); + }); + } + + //----------------------------- + // SAVE + //----------------------------- + + static async save(o = {}) { + let usePoly = false; + if (typeof window.showSaveFilePicker !== 'function') { + window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; + usePoly = true; + } + try { + let type = o.type || ''; + const options = { + suggestedName: o.name || 'hello', + data: o.data || '' + }; + options.types = Files.autoTypes(type); + options.finalType = Object.keys(options.types[0].accept)[0]; + options.suggestedName += options.types[0].accept[options.finalType][0]; + + // create a new handle + const handle = await window.showSaveFilePicker(options); + if (usePoly) return; + + // create a FileSystemWritableFileStream to write to + const file = await handle.createWritable(); + let blob = new Blob([options.data], { + type: options.finalType + }); + + // write our file + await file.write(blob); + + // close the file and write the contents to disk. + await file.close(); + } catch (e) { + console.log(e); + } + } + static showSaveFilePickerPolyfill(options) { + return new Promise(resolve => { + const a = document.createElement("a"); + a.download = options.suggestedName || "my-file.txt"; + let blob = new Blob([options.data], { + type: options.finalType + }); + a.href = URL.createObjectURL(blob); + a.addEventListener("click", () => { + resolve(setTimeout(() => URL.revokeObjectURL(a.href), 1000)); + }); + a.click(); + }); + } + + //----------------------------- + // FOLDER not possible in poly + //----------------------------- + + static async getFolder() { + try { + const handle = await window.showDirectoryPicker(); + const files = []; + for await (const entry of handle.values()) { + const file = await entry.getFile(); + files.push(file); + } + console.log(files); + return files; + } catch (e) { + console.log(e); + } + } } - class V2 { - - constructor( x = 0, y = 0 ) { - - this.x = x; - this.y = y; - - } - - set ( x, y ) { - - this.x = x; - this.y = y; - return this; - - } - - divide ( v ) { - - this.x /= v.x; - this.y /= v.y; - return this; - - } - - multiply ( v ) { - - this.x *= v.x; - this.y *= v.y; - return this; - - } - - multiplyScalar ( scalar ) { - - this.x *= scalar; - this.y *= scalar; - return this; - - } - - divideScalar ( scalar ) { - - return this.multiplyScalar( 1 / scalar ); - - } - - length () { - - return Math.sqrt( this.x * this.x + this.y * this.y ); - - } - - angle () { - - // computes the angle in radians with respect to the positive x-axis - - var angle = Math.atan2( this.y, this.x ); - - if ( angle < 0 ) angle += 2 * Math.PI; - - return angle; - - } - - addScalar ( s ) { - - this.x += s; - this.y += s; - return this; - - } - - negate () { - - this.x *= -1; - this.y *= -1; - return this; - - } - - neg () { - - this.x = -1; - this.y = -1; - return this; - - } - - isZero () { - - return ( this.x === 0 && this.y === 0 ); - - } - - copy ( v ) { - - this.x = v.x; - this.y = v.y; - - return this; - - } - - equals ( v ) { - - return ( ( v.x === this.x ) && ( v.y === this.y ) ); - - } - - nearEquals ( v, n ) { - - return ( ( v.x.toFixed(n) === this.x.toFixed(n) ) && ( v.y.toFixed(n) === this.y.toFixed(n) ) ); - - } - - lerp ( v, alpha ) { - - if( v === null ){ - this.x -= this.x * alpha; - this.y -= this.y * alpha; - } else { - this.x += ( v.x - this.x ) * alpha; - this.y += ( v.y - this.y ) * alpha; - } - - return this; - - } - + class V2 { + constructor(x = 0, y = 0) { + this.x = x; + this.y = y; + } + set(x, y) { + this.x = x; + this.y = y; + return this; + } + divide(v) { + this.x /= v.x; + this.y /= v.y; + return this; + } + multiply(v) { + this.x *= v.x; + this.y *= v.y; + return this; + } + multiplyScalar(scalar) { + this.x *= scalar; + this.y *= scalar; + return this; + } + divideScalar(scalar) { + return this.multiplyScalar(1 / scalar); + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y); + } + angle() { + // computes the angle in radians with respect to the positive x-axis + + var angle = Math.atan2(this.y, this.x); + if (angle < 0) angle += 2 * Math.PI; + return angle; + } + addScalar(s) { + this.x += s; + this.y += s; + return this; + } + negate() { + this.x *= -1; + this.y *= -1; + return this; + } + neg() { + this.x = -1; + this.y = -1; + return this; + } + isZero() { + return this.x === 0 && this.y === 0; + } + copy(v) { + this.x = v.x; + this.y = v.y; + return this; + } + equals(v) { + return v.x === this.x && v.y === this.y; + } + nearEquals(v, n) { + return v.x.toFixed(n) === this.x.toFixed(n) && v.y.toFixed(n) === this.y.toFixed(n); + } + lerp(v, alpha) { + if (v === null) { + this.x -= this.x * alpha; + this.y -= this.y * alpha; + } else { + this.x += (v.x - this.x) * alpha; + this.y += (v.y - this.y) * alpha; + } + return this; + } } - /** - * @author lth / https://github.com/lo-th - */ - - class Proto { - constructor(o = {}) { - // disable mouse controle - this.lock = o.lock || false; - - // for button - this.neverlock = false; - - // only simple space - this.isSpace = o.isSpace || false; - - // if is on gui or group - this.main = o.main || null; - this.isUI = o.isUI || false; - this.group = o.group || null; - - this.isListen = false; - - this.top = 0; - this.ytop = 0; - - this.dx = o.dx || 0; - - this.isSelectable = o.selectable !== undefined ? o.selectable : false; - this.unselectable = - o.unselect !== undefined ? o.unselect : this.isSelectable; - - this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' - - this.css = this.main ? this.main.css : Tools.css; - - this.colors = Tools.defineColor( - o, - this.main - ? this.group - ? this.group.colors - : this.main.colors - : Tools.colors - ); - - this.overEffect = this.colors.showOver; - - this.svgs = Tools.svgs; - - this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; - this.local = new V2().neg(); - - this.isCanvasOnly = false; - this.isSelect = false; - - // percent of title - this.p = o.p !== undefined ? o.p : Tools.size.p; - - this.w = this.isUI ? this.main.size.w : Tools.size.w; - if (o.w !== undefined) this.w = o.w; - - this.h = this.isUI ? this.main.size.h : Tools.size.h; - if (o.h !== undefined) this.h = o.h; - if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; - else this.lock = true; - - // decale for canvas only - this.fw = o.fw || 0; - - this.autoWidth = o.auto || true; // auto width or flex - this.isOpen = false; //false// open statu - - // radius for toolbox - this.radius = o.radius || this.colors.radius; - - this.transition = o.transition || Tools.transition; - - // only for number - this.isNumber = false; - this.noNeg = o.noNeg || false; - this.allEqual = o.allEqual || false; - - // only most simple - this.mono = false; - - // stop listening for edit slide text - this.isEdit = false; - - // no title - this.simple = o.simple || false; - if (this.simple) this.sa = 0; - - // define obj size - this.setSize(this.w); - - // title size - if (o.sa !== undefined) this.sa = o.sa; - if (o.sb !== undefined) this.sb = o.sb; - if (this.simple) this.sb = this.w - this.sa; - - // last number size for slide - this.sc = o.sc === undefined ? 47 : o.sc; - - // for listening object - this.objectLink = null; - this.isSend = false; - this.objectKey = null; - - this.txt = o.name || ""; - this.name = o.rename || this.txt; - this.target = o.target || null; - - // callback - this.callback = o.callback === undefined ? null : o.callback; - this.endCallback = null; - this.openCallback = o.openCallback === undefined ? null : o.openCallback; - this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; - - // if no callback take one from group or gui - if (this.callback === null && this.isUI && this.main.callback !== null) { - this.callback = this.group ? this.group.callback : this.main.callback; - } - - // elements - this.c = []; - - // style - this.s = []; - - this.useFlex = this.isUI ? this.main.useFlex : false; - let flexible = this.useFlex - ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" - : "float:left;"; - - this.c[0] = Tools.dom( - "div", - this.css.basic + flexible + "position:relative; height:20px;" - ); - - this.s[0] = this.c[0].style; - - // bottom margin - this.margin = this.colors.sy; - this.mtop = 0; - let marginDiv = Tools.isDivid(this.margin); - - if (this.isUI && this.margin) { - this.s[0].boxSizing = "content-box"; - if (marginDiv) { - this.mtop = this.margin * 0.5; - //this.s[0].borderTop = '${this.mtop}px solid transparent' - //console.log(`${this.mtop}px solid transparent`) - this.s[0].borderTop = this.mtop + "px solid transparent"; - this.s[0].borderBottom = this.mtop + "px solid transparent"; - } else { - this.s[0].borderBottom = this.margin + "px solid transparent"; - } - } - - // with title - if (!this.simple) { - this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); - this.s[1] = this.c[1].style; - this.c[1].textContent = this.name; - this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; - } - - if (o.pos) { - this.s[0].position = "absolute"; - for (let p in o.pos) { - this.s[0][p] = o.pos[p]; - } - this.mono = true; - } - - if (o.css) this.s[0].cssText = o.css; - } - - // ---------------------- - // make the node - // ---------------------- - - init() { - this.ytop = this.top + this.mtop; - - this.zone.h = this.h + this.margin; - this.zone.w = this.w; - - let s = this.s; // style cache - let c = this.c; // div cach - - s[0].height = this.h + "px"; - - if (this.isUI) s[0].background = this.colors.background; - - if (!this.autoWidth && this.useFlex) { - s[0].flex = "1 0 auto"; - s[0].minWidth = this.minw + "px"; - s[0].textAlign = "center"; - } else { - if (this.isUI) s[0].width = "100%"; - } - - //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; - if (c[1] !== undefined && this.autoWidth) { - s[1] = c[1].style; - s[1].top = 1 + "px"; - s[1].height = this.h - 2 + "px"; - } - - let frag = Tools.frag; - - for (let i = 1, lng = c.length; i !== lng; i++) { - if (c[i] !== undefined) { - frag.appendChild(c[i]); - s[i] = c[i].style; - } - } - - let pp = - this.target !== null - ? this.target - : this.isUI - ? this.main.inner - : document.body; - - if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); - else pp.appendChild(c[0]); - - c[0].appendChild(frag); - - this.rSize(); - - // ! solo proto - if (!this.isUI) { - this.c[0].style.pointerEvents = "auto"; - Roots.add(this); - } - } - - addTransition() { - if (this.baseH && this.transition && this.isUI) { - this.c[0].style.transition = "height " + this.transition + "s ease-out"; - } - } - - // from Tools - - dom(type, css, obj, dom, id) { - return Tools.dom(type, css, obj, dom, id); - } - - setSvg(dom, type, value, id, id2) { - Tools.setSvg(dom, type, value, id, id2); - } - - setCss(dom, css) { - Tools.setCss(dom, css); - } - - clamp(value, min, max) { - return Tools.clamp(value, min, max); - } - - getColorRing() { - if (!Tools.colorRing) Tools.makeColorRing(); - return Tools.clone(Tools.colorRing); - } - - getJoystick(model) { - if (!Tools["joystick_" + model]) Tools.makeJoystick(model); - return Tools.clone(Tools["joystick_" + model]); - } - - getCircular(model) { - if (!Tools.circular) Tools.makeCircular(model); - return Tools.clone(Tools.circular); - } - - getKnob(model) { - if (!Tools.knob) Tools.makeKnob(model); - return Tools.clone(Tools.knob); - } - - getPad2d(model) { - if (!Tools.pad2d) Tools.makePad(model); - return Tools.clone(Tools.pad2d); - } - - // from Roots - - cursor(name) { - Roots.cursor(name); - } - - ///////// - - update() {} - - reset() {} - - ///////// - - content() { - return this.c[0]; - } - - getDom() { - return this.c[0]; - } - - uiout() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.background; - } - - uiover() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.backgroundOver; - } - - rename(s) { - if (this.c[1] !== undefined) this.c[1].textContent = s; - } - - listen() { - this.isListen = Roots.addListen(this); - return this; - } - - listening() { - // modified by Fedemarino - if (this.objectLink === null) return; - if (this.isSend) return; - if (this.isEdit) return; - // check if value has changed - let hasChanged = this.setValue(this.objectLink[this.objectKey]); - return hasChanged; - } - - setValue(v) { - const old = this.value; - if (this.isNumber) this.value = this.numValue(v); - //else if( v instanceof Array && v.length === 1 ) v = v[0]; - else this.value = v; - this.update(); - let hasChanged = false; - if (old !== this.value) { - hasChanged = true; - } - - return hasChanged; - } - - // ---------------------- - // update every change - // ---------------------- - - onChange(f) { - if (this.isSpace) return; - this.callback = f || null; - return this; - } - - // ---------------------- - // update only on end - // ---------------------- - - onFinishChange(f) { - if (this.isSpace) return; - this.callback = null; - this.endCallback = f; - return this; - } - - // ---------------------- - // event on open close - // ---------------------- - - onOpen(f) { - this.openCallback = f; - return this; - } - - onClose(f) { - this.closeCallback = f; - return this; - } - - // ---------------------- - // send back value - // ---------------------- - - send(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - - this.isSend = true; - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - if (this.callback) this.callback(v, this.objectKey); - this.isSend = false; - } - - sendEnd(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - - if (this.endCallback) this.endCallback(v); - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - } - - // ---------------------- - // clear node - // ---------------------- - - dispose() { - if (this.isListen) Roots.removeListen(this); - - Tools.clear(this.c[0]); - - if (this.target !== null) { - if (this.group !== null) this.group.clearOne(this); - else this.target.removeChild(this.c[0]); - } else { - if (this.isUI) this.main.clearOne(this); - else document.body.removeChild(this.c[0]); - } - - if (!this.isUI) Roots.remove(this); - - this.c = null; - this.s = null; - this.callback = null; - this.target = null; - this.isListen = false; - } - - clear() {} - - // ---------------------- - // change size - // ---------------------- - - getWidth() { - let nw = Roots.getWidth(this); - if (nw) this.w = nw; - } - - setSize(sx) { - if (!this.autoWidth) return; - - this.w = sx; - - if (this.simple) { - this.sb = this.w - this.sa; - } else { - let pp = this.w * (this.p / 100); - //this.sa = Math.floor( pp + 10 ) - //this.sb = Math.floor( this.w - pp - 20 ) - this.sa = Math.floor(pp + 8); - this.sb = Math.floor(this.w - pp - 16); - } - } - - rSize() { - if (!this.autoWidth) return; - if (!this.isUI) this.s[0].width = this.w + "px"; - if (!this.simple) this.s[1].width = this.sa + "px"; - } - - // ---------------------- - // for numeric value - // ---------------------- - - setTypeNumber(o) { - this.isNumber = true; - - this.value = 0; - if (o.value !== undefined) { - if (typeof o.value === "string") this.value = o.value * 1; - else this.value = o.value; - } - - this.min = o.min === undefined ? -Infinity : o.min; - this.max = o.max === undefined ? Infinity : o.max; - this.precision = o.precision === undefined ? 2 : o.precision; - - let s; - - switch (this.precision) { - case 0: - s = 1; - break; - case 1: - s = 0.1; - break; - case 2: - s = 0.01; - break; - case 3: - s = 0.001; - break; - case 4: - s = 0.0001; - break; - case 5: - s = 0.00001; - break; - case 6: - s = 0.000001; - break; - } - - this.step = o.step === undefined ? s : o.step; - this.range = this.max - this.min; - this.value = this.numValue(this.value); - } - - numValue(n) { - if (this.noNeg) n = Math.abs(n); - return ( - Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 - ); - } - - // ---------------------- - // EVENTS DEFAULT - // ---------------------- - - handleEvent(e) { - if (this.lock) return; - if (this.neverlock) Roots.lock = false; - if (!this[e.type]) - return console.error(e.type, "this type of event no existe !"); - - // TODO !!!! - - //if( this.marginDiv ) z.d -= this.margin * 0.5 - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 - - return this[e.type](e); - } - - wheel(e) { - return false; - } - mousedown(e) { - return false; - } - mousemove(e) { - return false; - } - mouseup(e) { - return false; - } - keydown(e) { - return false; - } - keyup(e) { - return false; - } - - // ---------------------- - // object referency - // ---------------------- - - setReferency(obj, key) { - this.objectLink = obj; - this.objectKey = key; - } - - display(v = false) { - this.s[0].visibility = v ? "visible" : "hidden"; - } - - // ---------------------- - // resize height - // ---------------------- - - open() { - if (this.isOpen) return; - this.isOpen = true; - Roots.needResize = true; - if (this.openCallback) this.openCallback(); - } - - close() { - if (!this.isOpen) return; - this.isOpen = false; - Roots.needResize = true; - if (this.closeCallback) this.closeCallback(); - } - - needZone() { - Roots.needReZone = true; - } - - rezone() { - Roots.needReZone = true; - } - - // ---------------------- - // INPUT - // ---------------------- - - select() {} - - unselect() {} - - setInput(Input) { - Roots.setInput(Input, this); - } - - upInput(x, down) { - return Roots.upInput(x, down); - } - - // ---------------------- - // special item - // ---------------------- - - selected(b) { - this.isSelect = b || false; - } + /** + * @author lth / https://github.com/lo-th + */ + + class Proto { + constructor(o = {}) { + // disable mouse controle + this.lock = o.lock || false; + + // for button + this.neverlock = false; + + // only simple space + this.isSpace = o.isSpace || false; + + // if is on gui or group + this.main = o.main || null; + this.isUI = o.isUI || false; + this.group = o.group || null; + this.isListen = false; + this.top = 0; + this.ytop = 0; + this.dx = o.dx || 0; + this.isSelectable = o.selectable !== undefined ? o.selectable : false; + this.unselectable = o.unselect !== undefined ? o.unselect : this.isSelectable; + this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' + + this.css = this.main ? this.main.css : Tools.css; + this.colors = Tools.defineColor(o, this.main ? this.group ? this.group.colors : this.main.colors : Tools.colors); + this.overEffect = this.colors.showOver; + this.svgs = Tools.svgs; + this.zone = { + x: 0, + y: 0, + w: 0, + h: 0, + d: 0 + }; + this.local = new V2().neg(); + this.isCanvasOnly = false; + this.isSelect = false; + + // percent of title + this.p = o.p !== undefined ? o.p : Tools.size.p; + this.w = this.isUI ? this.main.size.w : Tools.size.w; + if (o.w !== undefined) this.w = o.w; + this.h = this.isUI ? this.main.size.h : Tools.size.h; + if (o.h !== undefined) this.h = o.h; + if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h;else this.lock = true; + + // decale for canvas only + this.fw = o.fw || 0; + this.autoWidth = o.auto || true; // auto width or flex + this.isOpen = false; //false// open statu + + // radius for toolbox + this.radius = o.radius || this.colors.radius; + this.transition = o.transition || Tools.transition; + + // only for number + this.isNumber = false; + this.noNeg = o.noNeg || false; + this.allEqual = o.allEqual || false; + + // only most simple + this.mono = false; + + // stop listening for edit slide text + this.isEdit = false; + + // no title + this.simple = o.simple || false; + if (this.simple) this.sa = 0; + + // define obj size + this.setSize(this.w); + + // title size + if (o.sa !== undefined) this.sa = o.sa; + if (o.sb !== undefined) this.sb = o.sb; + if (this.simple) this.sb = this.w - this.sa; + + // last number size for slide + this.sc = o.sc === undefined ? 47 : o.sc; + + // for listening object + this.objectLink = null; + this.isSend = false; + this.objectKey = null; + this.txt = o.name || ""; + this.name = o.rename || this.txt; + this.target = o.target || null; + + // callback + this.callback = o.callback === undefined ? null : o.callback; + this.endCallback = null; + this.openCallback = o.openCallback === undefined ? null : o.openCallback; + this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; + + // if no callback take one from group or gui + if (this.callback === null && this.isUI && this.main.callback !== null) { + this.callback = this.group ? this.group.callback : this.main.callback; + } + + // elements + this.c = []; + + // style + this.s = []; + this.useFlex = this.isUI ? this.main.useFlex : false; + let flexible = this.useFlex ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" : "float:left;"; + this.c[0] = Tools.dom("div", this.css.basic + flexible + "position:relative; height:20px;"); + this.s[0] = this.c[0].style; + + // bottom margin + this.margin = this.colors.sy; + this.mtop = 0; + let marginDiv = Tools.isDivid(this.margin); + if (this.isUI && this.margin) { + this.s[0].boxSizing = "content-box"; + if (marginDiv) { + this.mtop = this.margin * 0.5; + //this.s[0].borderTop = '${this.mtop}px solid transparent' + //console.log(`${this.mtop}px solid transparent`) + this.s[0].borderTop = this.mtop + "px solid transparent"; + this.s[0].borderBottom = this.mtop + "px solid transparent"; + } else { + this.s[0].borderBottom = this.margin + "px solid transparent"; + } + } + + // with title + if (!this.simple) { + this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); + this.s[1] = this.c[1].style; + this.c[1].textContent = this.name; + this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; + } + if (o.pos) { + this.s[0].position = "absolute"; + for (let p in o.pos) { + this.s[0][p] = o.pos[p]; + } + this.mono = true; + } + if (o.css) this.s[0].cssText = o.css; + } + + // ---------------------- + // make the node + // ---------------------- + + init() { + this.ytop = this.top + this.mtop; + this.zone.h = this.h + this.margin; + this.zone.w = this.w; + let s = this.s; // style cache + let c = this.c; // div cach + + s[0].height = this.h + "px"; + if (this.isUI) s[0].background = this.colors.background; + if (!this.autoWidth && this.useFlex) { + s[0].flex = "1 0 auto"; + s[0].minWidth = this.minw + "px"; + s[0].textAlign = "center"; + } else { + if (this.isUI) s[0].width = "100%"; + } + + //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; + if (c[1] !== undefined && this.autoWidth) { + s[1] = c[1].style; + s[1].top = 1 + "px"; + s[1].height = this.h - 2 + "px"; + } + let frag = Tools.frag; + for (let i = 1, lng = c.length; i !== lng; i++) { + if (c[i] !== undefined) { + frag.appendChild(c[i]); + s[i] = c[i].style; + } + } + let pp = this.target !== null ? this.target : this.isUI ? this.main.inner : document.body; + if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]);else pp.appendChild(c[0]); + c[0].appendChild(frag); + this.rSize(); + + // ! solo proto + if (!this.isUI) { + this.c[0].style.pointerEvents = "auto"; + Roots.add(this); + } + } + addTransition() { + if (this.baseH && this.transition && this.isUI) { + this.c[0].style.transition = "height " + this.transition + "s ease-out"; + } + } + + // from Tools + + dom(type, css, obj, dom, id) { + return Tools.dom(type, css, obj, dom, id); + } + setSvg(dom, type, value, id, id2) { + Tools.setSvg(dom, type, value, id, id2); + } + setCss(dom, css) { + Tools.setCss(dom, css); + } + clamp(value, min, max) { + return Tools.clamp(value, min, max); + } + getColorRing() { + if (!Tools.colorRing) Tools.makeColorRing(); + return Tools.clone(Tools.colorRing); + } + getJoystick(model) { + if (!Tools["joystick_" + model]) Tools.makeJoystick(model); + return Tools.clone(Tools["joystick_" + model]); + } + getCircular(model) { + if (!Tools.circular) Tools.makeCircular(model); + return Tools.clone(Tools.circular); + } + getKnob(model) { + if (!Tools.knob) Tools.makeKnob(model); + return Tools.clone(Tools.knob); + } + getPad2d(model) { + if (!Tools.pad2d) Tools.makePad(model); + return Tools.clone(Tools.pad2d); + } + + // from Roots + + cursor(name) { + Roots.cursor(name); + } + + ///////// + + update() {} + reset() {} + + ///////// + + content() { + return this.c[0]; + } + getDom() { + return this.c[0]; + } + uiout() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.background; + } + uiover() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.backgroundOver; + } + rename(s) { + if (this.c[1] !== undefined) this.c[1].textContent = s; + } + listen() { + this.isListen = Roots.addListen(this); + return this; + } + listening() { + // modified by Fedemarino + if (this.objectLink === null) return; + if (this.isSend) return; + if (this.isEdit) return; + // check if value has changed + let hasChanged = this.setValue(this.objectLink[this.objectKey]); + return hasChanged; + } + setValue(v) { + const old = this.value; + if (this.isNumber) this.value = this.numValue(v); + //else if( v instanceof Array && v.length === 1 ) v = v[0]; + else this.value = v; + this.update(); + let hasChanged = false; + if (old !== this.value) { + hasChanged = true; + } + return hasChanged; + } + + // ---------------------- + // update every change + // ---------------------- + + onChange(f) { + if (this.isSpace) return; + this.callback = f || null; + return this; + } + + // ---------------------- + // update only on end + // ---------------------- + + onFinishChange(f) { + if (this.isSpace) return; + this.callback = null; + this.endCallback = f; + return this; + } + + // ---------------------- + // event on open close + // ---------------------- + + onOpen(f) { + this.openCallback = f; + return this; + } + onClose(f) { + this.closeCallback = f; + return this; + } + + // ---------------------- + // send back value + // ---------------------- + + send(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + this.isSend = true; + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + if (this.callback) this.callback(v, this.objectKey); + this.isSend = false; + } + sendEnd(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + if (this.endCallback) this.endCallback(v); + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + } + + // ---------------------- + // clear node + // ---------------------- + + dispose() { + if (this.isListen) Roots.removeListen(this); + Tools.clear(this.c[0]); + if (this.target !== null) { + if (this.group !== null) this.group.clearOne(this);else this.target.removeChild(this.c[0]); + } else { + if (this.isUI) this.main.clearOne(this);else document.body.removeChild(this.c[0]); + } + if (!this.isUI) Roots.remove(this); + this.c = null; + this.s = null; + this.callback = null; + this.target = null; + this.isListen = false; + } + clear() {} + + // ---------------------- + // change size + // ---------------------- + + getWidth() { + let nw = Roots.getWidth(this); + if (nw) this.w = nw; + } + setSize(sx) { + if (!this.autoWidth) return; + this.w = sx; + if (this.simple) { + this.sb = this.w - this.sa; + } else { + let pp = this.w * (this.p / 100); + //this.sa = Math.floor( pp + 10 ) + //this.sb = Math.floor( this.w - pp - 20 ) + this.sa = Math.floor(pp + 8); + this.sb = Math.floor(this.w - pp - 16); + } + } + rSize() { + if (!this.autoWidth) return; + if (!this.isUI) this.s[0].width = this.w + "px"; + if (!this.simple) this.s[1].width = this.sa + "px"; + } + + // ---------------------- + // for numeric value + // ---------------------- + + setTypeNumber(o) { + this.isNumber = true; + this.value = 0; + if (o.value !== undefined) { + if (typeof o.value === "string") this.value = o.value * 1;else this.value = o.value; + } + this.min = o.min === undefined ? -Infinity : o.min; + this.max = o.max === undefined ? Infinity : o.max; + this.precision = o.precision === undefined ? 2 : o.precision; + let s; + switch (this.precision) { + case 0: + s = 1; + break; + case 1: + s = 0.1; + break; + case 2: + s = 0.01; + break; + case 3: + s = 0.001; + break; + case 4: + s = 0.0001; + break; + case 5: + s = 0.00001; + break; + case 6: + s = 0.000001; + break; + } + this.step = o.step === undefined ? s : o.step; + this.range = this.max - this.min; + this.value = this.numValue(this.value); + } + numValue(n) { + if (this.noNeg) n = Math.abs(n); + return Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1; + } + + // ---------------------- + // EVENTS DEFAULT + // ---------------------- + + handleEvent(e) { + if (this.lock) return; + if (this.neverlock) Roots.lock = false; + if (!this[e.type]) return console.error(e.type, "this type of event no existe !"); + + // TODO !!!! + + //if( this.marginDiv ) z.d -= this.margin * 0.5 + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 + + return this[e.type](e); + } + wheel(e) { + return false; + } + mousedown(e) { + return false; + } + mousemove(e) { + return false; + } + mouseup(e) { + return false; + } + keydown(e) { + return false; + } + keyup(e) { + return false; + } + + // ---------------------- + // object referency + // ---------------------- + + setReferency(obj, key) { + this.objectLink = obj; + this.objectKey = key; + } + display(v = false) { + this.s[0].visibility = v ? "visible" : "hidden"; + } + + // ---------------------- + // resize height + // ---------------------- + + open() { + if (this.isOpen) return; + this.isOpen = true; + Roots.needResize = true; + if (this.openCallback) this.openCallback(); + } + close() { + if (!this.isOpen) return; + this.isOpen = false; + Roots.needResize = true; + if (this.closeCallback) this.closeCallback(); + } + needZone() { + Roots.needReZone = true; + } + rezone() { + Roots.needReZone = true; + } + + // ---------------------- + // INPUT + // ---------------------- + + select() {} + unselect() {} + setInput(Input) { + Roots.setInput(Input, this); + } + upInput(x, down) { + return Roots.upInput(x, down); + } + + // ---------------------- + // special item + // ---------------------- + + selected(b) { + this.isSelect = b || false; + } } - class Bool extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || false; - this.model = o.mode !== undefined ? o.mode : 0; - - this.onName = o.rename || this.txt; - if( o.onName ) o.onname = o.onName; - if( o.onname ) this.onName = o.onname; - - this.inh = o.inh || Math.floor( this.h*0.8 ); - this.inw = o.inw || 36; - - let cc = this.colors; - - if( this.model === 0 ){ - let t = Math.floor(this.h*0.5)-((this.inh-2)*0.5); - this.c[2] = this.dom( 'div', this.css.basic + 'background:'+ cc.inputBg +'; height:'+(this.inh-2)+'px; width:'+this.inw+'px; top:'+t+'px; border-radius:10px; border:2px solid '+ cc.back ); - this.c[3] = this.dom( 'div', this.css.basic + 'height:'+(this.inh-6)+'px; width:16px; top:'+(t+2)+'px; border-radius:10px; background:'+ cc.button+';' ); - } else { - this.p = 0; - if( this.c[1] !== undefined ) this.c[1].textContent = ''; - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - } - - this.stat = -1; - - this.init(); - this.update(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown ( e ) { - - this.value = !this.value; - this.update( true ); - return this.mousemove( e ) - - } - - mousemove ( e ) { - - this.cursor('pointer'); - return this.mode( true ) - - } - - reset () { - - this.cursor(); - return this.mode() - - } - - // ---------------------- - // MODE - // ---------------------- - - mode ( over ) { - - let change = false; - let cc = this.colors, s = this.s, n, v = this.value; - - if( over ) n = v ? 4 : 3; - else n = v ? 2 : 1; - - if( this.stat !== n ){ - - this.stat = n; - - if( this.model !== 0 ){ - - switch( n ){ - - case 1: s[2].color = cc.text; s[2].background = cc.button; break; - case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; - case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; - case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; - - } - - this.c[2].innerHTML = v ? this.onName : this.name; - - } else { - - switch( n ){ - - case 1: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.button; break;// off out - case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break;// on over - case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break;// off over - case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break;// on out - - } - - s[3].marginLeft = v ? '17px' : '2px'; - this.c[1].textContent = v ? this.onName : this.name; - - } - - change = true; - - } - - return change - - } - - // ---------------------- - - update ( up ) { - - this.mode(); - if( up ) this.send(); - - } - - rSize () { - - super.rSize(); - - let s = this.s; - let w = (this.w - 10 ) - this.inw; - if( this.model === 0 ){ - s[2].left = w + 'px'; - s[3].left = w + 'px'; - } else { - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - } - - } - + class Bool extends Proto { + constructor(o = {}) { + super(o); + this.value = o.value || false; + this.model = o.mode !== undefined ? o.mode : 0; + this.onName = o.rename || this.txt; + if (o.onName) o.onname = o.onName; + if (o.onname) this.onName = o.onname; + this.inh = o.inh || Math.floor(this.h * 0.8); + this.inw = o.inw || 36; + let cc = this.colors; + if (this.model === 0) { + let t = Math.floor(this.h * 0.5) - (this.inh - 2) * 0.5; + this.c[2] = this.dom('div', this.css.basic + 'background:' + cc.inputBg + '; height:' + (this.inh - 2) + 'px; width:' + this.inw + 'px; top:' + t + 'px; border-radius:10px; border:2px solid ' + cc.back); + this.c[3] = this.dom('div', this.css.basic + 'height:' + (this.inh - 6) + 'px; width:16px; top:' + (t + 2) + 'px; border-radius:10px; background:' + cc.button + ';'); + } else { + this.p = 0; + if (this.c[1] !== undefined) this.c[1].textContent = ''; + this.c[2] = this.dom('div', this.css.txt + this.css.button + 'top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.borderSize + 'px solid ' + cc.border + '; border-radius:' + this.radius + 'px;'); + } + this.stat = -1; + this.init(); + this.update(); + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown(e) { + this.value = !this.value; + this.update(true); + return this.mousemove(e); + } + mousemove(e) { + this.cursor('pointer'); + return this.mode(true); + } + reset() { + this.cursor(); + return this.mode(); + } + + // ---------------------- + // MODE + // ---------------------- + + mode(over) { + let change = false; + let cc = this.colors, + s = this.s, + n, + v = this.value; + if (over) n = v ? 4 : 3;else n = v ? 2 : 1; + if (this.stat !== n) { + this.stat = n; + if (this.model !== 0) { + switch (n) { + case 1: + s[2].color = cc.text; + s[2].background = cc.button; + break; + case 2: + s[2].color = cc.textSelect; + s[2].background = cc.select; + break; + case 3: + s[2].color = cc.textOver; + s[2].background = cc.overoff; + break; + case 4: + s[2].color = cc.textOver; + s[2].background = cc.over; + break; + } + this.c[2].innerHTML = v ? this.onName : this.name; + } else { + switch (n) { + case 1: + s[2].background = s[2].borderColor = cc.backoff; + s[3].background = cc.button; + break; + // off out + case 2: + s[2].background = s[2].borderColor = cc.back; + s[3].background = cc.textOver; + break; + // on over + case 3: + s[2].background = s[2].borderColor = cc.back; + s[3].background = cc.overoff; + break; + // off over + case 4: + s[2].background = s[2].borderColor = cc.backoff; + s[3].background = cc.textSelect; + break; + // on out + } + s[3].marginLeft = v ? '17px' : '2px'; + this.c[1].textContent = v ? this.onName : this.name; + } + change = true; + } + return change; + } + + // ---------------------- + + update(up) { + this.mode(); + if (up) this.send(); + } + rSize() { + super.rSize(); + let s = this.s; + let w = this.w - 10 - this.inw; + if (this.model === 0) { + s[2].left = w + 'px'; + s[3].left = w + 'px'; + } else { + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + } + } } - class Button extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = ''; - if( o.value !== undefined ) this.value = o.value; - - this.values = o.value || this.txt; - if( o.values ) this.values = o.values; - - if( !o.values && !o.value ) this.txt = ''; - - this.onName = o.onName || null; - - this.on = false; - - // force button width - this.bw = o.forceWidth || 0; - if(o.bw) this.bw = o.bw; - this.space = o.space || 3; - - if( typeof this.values === 'string' ) this.values = [ this.values ]; - - this.isDown = false; - this.neverlock = true; - this.res = 0; - - this.lng = this.values.length; - this.tmp = []; - this.stat = []; - - let sel, cc = this.colors; - - for( let i = 0; i < this.lng; i++ ){ - - sel = false; - if( this.values[i] === this.value && this.isSelectable ) sel = true; - - this.c[i+2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[i+2].style.background = sel ? cc.select : cc.button; - this.c[i+2].style.color = sel ? cc.textSelect : cc.text; - this.c[i+2].innerHTML = this.values[i]; - this.stat[i] = sel ? 3:1; - - } - - - if( this.txt==='' ) this.p = 0; - - if( (!o.value && !o.values) || this.p === 0 ){ - if( this.c[1] !== undefined ) this.c[1].textContent = ''; - } - - - this.init(); - - } - - onOff() { - - this.on = !this.on; - this.label( this.on ? this.onName : this.value ); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return -1 - - let i = this.lng; - let t = this.tmp; - - while( i-- ){ - if( l.x>t[i][0] && l.x t[i][0] && l.x < t[i][2]) return i; + } + return -1; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (!this.isDown) return false; + this.isDown = false; + if (this.res !== -1) { + if (this.value === this.values[this.res] && this.unselectable) this.value = '';else this.value = this.values[this.res]; + if (this.onName !== null) this.onOff(); + this.send(); + } + return this.mousemove(e); + } + mousedown(e) { + if (this.isDown) return false; + this.isDown = true; + return this.mousemove(e); + } + mousemove(e) { + let up = false; + this.res = this.testZone(e); + if (this.res !== -1) { + this.cursor('pointer'); + up = this.modes(this.isDown ? 3 : 2, this.res); + } else { + up = this.reset(); + } + return up; + } + + // ---------------------- + + modes(N = 1, id = -1) { + let i = this.lng, + w, + n, + r = false; + while (i--) { + n = N; + w = this.isSelectable ? this.values[i] === this.value : false; + if (i === id) { + if (w && n === 2) n = 3; + } else { + n = 1; + if (w) n = 4; + } + + //if( this.mode( n, i ) ) r = true + r = this.mode(n, i); + } + return r; + } + mode(n, id) { + //if(!this.s) return false + + let change = false; + let cc = this.colors, + s = this.s; + let i = id + 2; + if (this.stat[id] !== n) { + this.stat[id] = n; + switch (n) { + case 1: + s[i].color = cc.text; + s[i].background = cc.button; + break; + case 2: + s[i].color = cc.textOver; + s[i].background = cc.overoff; + break; + case 3: + s[i].color = cc.textOver; + s[i].background = cc.over; + break; + case 4: + s[i].color = cc.textSelect; + s[i].background = cc.select; + break; + } + change = true; + } + return change; + } + + // ---------------------- + + reset() { + this.res = -1; + this.cursor(); + return this.modes(); + } + label(string, n) { + n = n || 2; + this.c[n].textContent = string; + } + switchValues(n, string) { + this.c[n + 2].innerHTML = this.values[n] = string; + } + icon(string, y = 0, n = 2) { + //if(y) this.s[n].margin = ( y ) +'px 0px'; + this.s[n].padding = y + 'px 0px'; + this.c[n].innerHTML = string; + return this; + } + rSize() { + super.rSize(); + let s = this.s; + let w = this.sb; + let d = this.sa; + let i = this.lng; + let sx = this.colors.sx; //this.space; + //let size = Math.floor( ( w-(dc*(i-1)) ) / i ); + let size = (w - sx * (i - 1)) / i; + if (this.bw) { + size = this.bw < size ? this.bw : size; + //d = Math.floor((this.w-( (size * i) + (dc * (i-1)) ))*0.5) + d = (this.w - (size * i + sx * (i - 1))) * 0.5; + } + while (i--) { + //this.tmp[i] = [ Math.floor( d + ( size * i ) + ( dc * i )), size ]; + this.tmp[i] = [d + size * i + sx * i, size]; + this.tmp[i][2] = this.tmp[i][0] + this.tmp[i][1]; + s[i + 2].left = this.tmp[i][0] + 'px'; + s[i + 2].width = this.tmp[i][1] + 'px'; + } + } } - class Circular extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.isCyclic = o.cyclic || false; - this.model = o.stype || 0; - if( o.mode !== undefined ) this.model = o.mode; - - this.autoWidth = false; - this.minw = this.w; - this.diam = o.diam || this.w; - - this.setTypeNumber( o ); - - this.twoPi = Tools.TwoPI; - this.pi90 = Tools.pi90; - - this.offset = new V2(); - - this.h = o.h || this.w + 10; - - this.c[0].style.width = this.w +'px'; - this.c[0].style.display = 'block'; - - if(this.c[1] !== undefined) { - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - - } - - - - this.percent = 0; - this.cmode = 0; - let cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); - - // svg - - this.c[3] = this.getCircular(); - - this.setSvg( this.c[3], 'stroke', cc.back, 0 ); - this.setSvg( this.c[3], 'd', this.makePath(), 1 ); - this.setSvg( this.c[3], 'stroke', cc.text, 1 ); - - this.setSvg( this.c[3], 'viewBox', '0 0 '+this.diam+' '+this.diam ); - this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); - - this.init(); - this.update(); - - } - - mode ( mode ) { - - if( this.cmode === mode ) return false; - - let cc = this.colors; - let color; - - switch( mode ){ - case 0: // base - - this.s[2].color = cc.text; - this.setSvg( this.c[3], 'stroke', cc.back, 0); - color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.text; - this.setSvg( this.c[3], 'stroke', color, 1 ); - - break; - case 1: // down - - this.s[2].color = cc.textOver; - this.setSvg( this.c[3], 'stroke', cc.backoff, 0); - color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.textOver; - this.setSvg( this.c[3], 'stroke', color, 1 ); - - break; - } - - this.cmode = mode; - return true; - - } - - reset () { - - this.isDown = false; - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'circular'; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.sendEnd(); - return this.mode(0); - - } - - mousedown ( e ) { - - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove( e ); - return this.mode(1); - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - //console.log('over') - - let off = this.offset; - off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); - off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - this.r = off.angle() - this.pi90; - this.r = (((this.r%this.twoPi)+this.twoPi)%this.twoPi); - - if( this.oldr !== null ){ - - let dif = this.r - this.oldr; - this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; - - if( dif > 6 ) this.r = 0; - if( dif < -6 ) this.r = this.twoPi; - - } - - let steps = 1 / this.twoPi; - let value = this.r * steps; - - let n = ( ( this.range * value ) + this.min ) - this.old; - - if(n >= this.step || n <= this.step){ - n = ~~ ( n / this.step ); - this.value = this.numValue( this.old + ( n * this.step ) ); - this.update( true ); - this.old = this.value; - this.oldr = this.r; - } - - } - - wheel ( e ) { - - let name = this.testZone( e ); - - if( name === 'circular' ) { - - let v = this.value - this.step * e.delta; - - if ( v > this.max ) { - v = this.isCyclic ? this.min : this.max; - } else if ( v < this.min ) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue( v ); - this.old = v; - this.update( true ); - - return true; - - } - return false; - - } - - // ---------------------- - - makePath () { - - let r = 40; - let d = 24; - let a = this.percent * this.twoPi - 0.001; - let x2 = (r + r * Math.sin(a)) + d; - let y2 = (r - r * Math.cos(a)) + d; - let big = a > Math.PI ? 1 : 0; - return "M " + (r+d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; - - } - - update ( up ) { - - this.c[2].textContent = this.value; - this.percent = ( this.value - this.min ) / this.range; - - this.setSvg( this.c[3], 'd', this.makePath(), 1 ); - - if ( this.model > 0 ) { - - let cc = this.colors; - let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ); - this.setSvg( this.c[3], 'stroke', color, 1 ); - - } - - if( up ) this.send(); - - } - + class Circular extends Proto { + constructor(o = {}) { + super(o); + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + this.setTypeNumber(o); + this.twoPi = Tools.TwoPI; + this.pi90 = Tools.pi90; + this.offset = new V2(); + this.h = o.h || this.w + 10; + this.c[0].style.width = this.w + 'px'; + this.c[0].style.display = 'block'; + if (this.c[1] !== undefined) { + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + } + this.percent = 0; + this.cmode = 0; + let cc = this.colors; + this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); + + // svg + + this.c[3] = this.getCircular(); + this.setSvg(this.c[3], 'stroke', cc.back, 0); + this.setSvg(this.c[3], 'd', this.makePath(), 1); + this.setSvg(this.c[3], 'stroke', cc.text, 1); + this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); + this.setCss(this.c[3], { + width: this.diam, + height: this.diam, + left: 0, + top: this.top + }); + this.init(); + this.update(); + } + mode(mode) { + if (this.cmode === mode) return false; + let cc = this.colors; + let color; + switch (mode) { + case 0: + // base + + this.s[2].color = cc.text; + this.setSvg(this.c[3], 'stroke', cc.back, 0); + color = this.model > 0 ? Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)) : cc.text; + this.setSvg(this.c[3], 'stroke', color, 1); + break; + case 1: + // down + + this.s[2].color = cc.textOver; + this.setSvg(this.c[3], 'stroke', cc.backoff, 0); + color = this.model > 0 ? Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)) : cc.textOver; + this.setSvg(this.c[3], 'stroke', color, 1); + break; + } + this.cmode = mode; + return true; + } + reset() { + this.isDown = false; + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'circular'; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + this.isDown = false; + this.sendEnd(); + return this.mode(0); + } + mousedown(e) { + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove(e); + return this.mode(1); + } + mousemove(e) { + if (!this.isDown) return; + + //console.log('over') + + let off = this.offset; + off.x = this.w * 0.5 - (e.clientX - this.zone.x); + off.y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); + this.r = off.angle() - this.pi90; + this.r = (this.r % this.twoPi + this.twoPi) % this.twoPi; + if (this.oldr !== null) { + let dif = this.r - this.oldr; + this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; + if (dif > 6) this.r = 0; + if (dif < -6) this.r = this.twoPi; + } + let steps = 1 / this.twoPi; + let value = this.r * steps; + let n = this.range * value + this.min - this.old; + if (n >= this.step || n <= this.step) { + n = ~~(n / this.step); + this.value = this.numValue(this.old + n * this.step); + this.update(true); + this.old = this.value; + this.oldr = this.r; + } + } + wheel(e) { + let name = this.testZone(e); + if (name === 'circular') { + let v = this.value - this.step * e.delta; + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } + this.setValue(v); + this.old = v; + this.update(true); + return true; + } + return false; + } + + // ---------------------- + + makePath() { + let r = 40; + let d = 24; + let a = this.percent * this.twoPi - 0.001; + let x2 = r + r * Math.sin(a) + d; + let y2 = r - r * Math.cos(a) + d; + let big = a > Math.PI ? 1 : 0; + return "M " + (r + d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; + } + update(up) { + this.c[2].textContent = this.value; + this.percent = (this.value - this.min) / this.range; + this.setSvg(this.c[3], 'd', this.makePath(), 1); + if (this.model > 0) { + let cc = this.colors; + let color = Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)); + this.setSvg(this.c[3], 'stroke', color, 1); + } + if (up) this.send(); + } } - class Color extends Proto { - - constructor( o = {} ) { - - super( o ); - - //this.autoHeight = true; - - this.ctype = o.ctype || 'hex'; - - this.wfixe = 256; - - this.cw = this.sb > 256 ? 256 : this.sb; - if(o.cw != undefined ) this.cw = o.cw; - - - - // color up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - - this.baseH = this.h; - - this.offset = new V2(); - this.decal = new V2(); - this.pp = new V2(); - - let cc = this.colors; - - // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) - - this.c[2] = this.dom( 'div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};` ); - //this.s[2] = this.c[2].style; - - //this.s[2].textShadow = 'none' - - /*if( this.up ){ - this.s[2].top = 'auto'; - this.s[2].bottom = '2px'; - }*/ - - //this.c[0].style.textAlign = 'center'; - this.c[0].style.display = 'block'; - - this.c[3] = this.getColorRing(); - this.c[3].style.visibility = 'hidden'; - - this.hsl = null; - this.value = '#ffffff'; - if( o.value !== undefined ){ - if( o.value instanceof Array ) this.value = Tools.rgbToHex( o.value ); - else if(!isNaN(o.value)) this.value = Tools.hexToHtml( o.value ); - else this.value = o.value; - } - - this.bcolor = null; - this.isDown = false; - this.fistDown = false; - - this.notext = o.notext || false; - - this.tr = 98; - this.tsl = Math.sqrt(3) * this.tr; - - this.hue = 0; - this.d = 256; - - this.init(); - - this.setColor( this.value ); - - if( o.open !== undefined ) this.open(); - - } - - testZone ( mx, my ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - - if( this.up && this.isOpen ){ - - if( l.y > this.wfixe ) return 'title' - else return 'color' - - } else { - - if( l.y < this.baseH+2 ) return 'title' - else if( this.isOpen ) return 'color' - - } - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.d = 256; - - } - - mousedown ( e ) { - - - let name = this.testZone( e.clientX, e.clientY ); - - - //if( !name ) return; - if(name === 'title'){ - if( !this.isOpen ) this.open(); - else this.close(); - return true; - } - - - if( name === 'color' ){ - - this.isDown = true; - this.fistDown = true; - this.mousemove( e ); - } - } - - mousemove ( e ) { - - let name = this.testZone( e.clientX, e.clientY ); - - let off, d, hue, sat, lum, rad, x, y, rr, T = Tools; - - if( name === 'title' ) this.cursor('pointer'); - - if( name === 'color' ){ - - off = this.offset; - off.x = e.clientX - ( this.zone.x + this.decal.x + this.mid ); - off.y = e.clientY - ( this.zone.y + this.decal.y + this.mid ) - this.ytop; - d = off.length() * this.ratio; - rr = off.angle(); - if(rr < 0) rr += 2 * T.PI; - - - if ( d < 128 ) this.cursor('crosshair'); - else if( !this.isDown ) this.cursor(); - - if( this.isDown ){ - - if( this.fistDown ){ - this.d = d; - this.fistDown = false; - } - - if ( this.d < 128 ) { - - if ( this.d > this.tr ) { // outside hue - - hue = ( rr + T.pi90 ) / T.TwoPI; - this.hue = (hue + 1) % 1; - this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); - - } else { // triangle - - x = off.x * this.ratio; - y = off.y * this.ratio; - - let rr = (this.hue * T.TwoPI) + T.PI; - if(rr < 0) rr += 2 * T.PI; - - rad = Math.atan2(-y, x); - if(rad < 0) rad += 2 * T.PI; - - let rad0 = ( rad + T.pi90 + T.TwoPI + rr ) % (T.TwoPI), - rad1 = rad0 % ((2/3) * T.PI) - (T.pi60), - a = 0.5 * this.tr, - b = Math.tan(rad1) * a, - r = Math.sqrt(x*x + y*y), - maxR = Math.sqrt(a*a + b*b); - - if( r > maxR ) { - let dx = Math.tan(rad1) * r; - let rad2 = Math.atan(dx / maxR); - if(rad2 > T.pi60) rad2 = T.pi60; - else if( rad2 < -T.pi60 ) rad2 = -T.pi60; - - rad += rad2 - rad1; - - rad0 = (rad + T.pi90 + T.TwoPI + rr) % (T.TwoPI), - rad1 = rad0 % ((2/3) * T.PI) - (T.pi60); - b = Math.tan(rad1) * a; - r = maxR = Math.sqrt(a*a + b*b); - } - - lum = ((Math.sin(rad0) * r) / this.tsl) + 0.5; - - let w = 1 - (Math.abs(lum - 0.5) * 2); - sat = (((Math.cos(rad0) * r) + (this.tr / 2)) / (1.5 * this.tr)) / w; - sat = T.clamp( sat, 0, 1 ); - - this.setHSL([this.hsl[0], sat, lum]); - - } - } - } - } - - } - - // ---------------------- - - setHeight () { - - this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; - this.s[0].height = this.h + 'px'; - this.zone.h = this.h; - - } - - parentHeight ( t ) { - - if ( this.group !== null ) this.group.calc( t ); - else if ( this.isUI ) this.main.calc( t ); - - } - - open () { - - super.open(); - - this.setHeight(); - - if( this.up ) this.zone.y -= this.wfixe + 5; - - let t = this.h - this.baseH; - - this.s[3].visibility = 'visible'; - //this.s[3].display = 'block'; - this.parentHeight( t ); - - } - - close () { - - super.close(); - - if( this.up ) this.zone.y += this.wfixe + 5; - - let t = this.h - this.baseH; - - this.setHeight(); - - this.s[3].visibility = 'hidden'; - //this.s[3].display = 'none'; - this.parentHeight( -t ); - - } - - update ( up ) { - - let cc = Tools.rgbToHex( Tools.hslToRgb([ this.hsl[0], 1, 0.5 ]) ); - - this.moveMarkers(); - - this.value = this.bcolor; - - this.setSvg( this.c[3], 'fill', cc, 2, 0 ); - - this.s[2].background = this.bcolor; - if(!this.notext) this.c[2].textContent = Tools.htmlToHex( this.bcolor ); - - this.invert = Tools.findDeepInver( this.rgb ); - this.s[2].color = this.invert ? '#fff' : '#000'; - - if(!up) return; - - if( this.ctype === 'array' ) this.send( this.rgb ); - if( this.ctype === 'rgb' ) this.send( Tools.htmlRgb( this.rgb ) ); - if( this.ctype === 'hex' ) this.send( Tools.htmlToHex( this.value ) ); - if( this.ctype === 'html' ) this.send(); - - } - - setValue ( v ){ - - if( v instanceof Array ) this.value = Tools.rgbToHex( v ); - else if(!isNaN(v)) this.value = Tools.hexToHtml( v ); - else this.value = v; - - this.setColor( this.value ); - this.update(); - - } - - setColor ( color ) { - - let unpack = Tools.unpack(color); - if (this.bcolor !== color && unpack) { - - this.bcolor = color; - this.rgb = unpack; - this.hsl = Tools.rgbToHsl( this.rgb ); - - this.hue = this.hsl[0]; - - this.update(); - } - return this; - - } - - setHSL ( hsl ) { - - this.hsl = hsl; - this.rgb = Tools.hslToRgb( hsl ); - this.bcolor = Tools.rgbToHex( this.rgb ); - this.update( true ); - return this; - - } - - moveMarkers () { - - let p = this.pp; - let T = Tools; - - this.invert ? '#fff' : '#000'; - let a = this.hsl[0] * T.TwoPI; - let third = (2/3) * T.PI; - let r = this.tr; - let h = this.hsl[0]; - let s = this.hsl[1]; - let l = this.hsl[2]; - - let angle = ( a - T.pi90 ) * T.todeg; - - h = - a + T.pi90; - - let hx = Math.cos(h) * r; - let hy = -Math.sin(h) * r; - let sx = Math.cos(h - third) * r; - let sy = -Math.sin(h - third) * r; - let vx = Math.cos(h + third) * r; - let vy = -Math.sin(h + third) * r; - let mx = (sx + vx) / 2, my = (sy + vy) / 2; - a = (1 - 2 * Math.abs(l - .5)) * s; - let x = sx + (vx - sx) * l + (hx - mx) * a; - let y = sy + (vy - sy) * l + (hy - my) * a; - - p.set( x, y ).addScalar(128); - - //let ff = (1-l)*255; - // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); - - this.setSvg( this.c[3], 'transform', 'rotate('+angle+' )', 2 ); - - this.setSvg( this.c[3], 'cx', p.x, 3 ); - this.setSvg( this.c[3], 'cy', p.y, 3 ); - - this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3 ); - this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3 ); - this.setSvg( this.c[3], 'fill',this.bcolor, 3 ); - - } - - rSize () { - - //Proto.prototype.rSize.call( this ); - super.rSize(); - - let s = this.s; - - s[2].width = this.sb + 'px'; - s[2].left = this.sa + 'px'; - - //console.log(this.sb) - - this.cw = this.sb > 256 ? 256 : this.sb; - - - - this.rSizeColor( this.cw ); - - this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - //s[3].left = this.decal.x + 'px'; - - } - - rSizeColor ( w ) { - - - if( w === this.wfixe ) return; - - - - this.wfixe = w; - - - - let s = this.s; - - //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; - this.mid = Math.floor( this.wfixe * 0.5 ); - - this.setSvg( this.c[3], 'viewBox', '0 0 '+ this.wfixe + ' '+ this.wfixe ); - s[3].width = this.wfixe + 'px'; - s[3].height = this.wfixe + 'px'; - //s[3].left = this.decal.x + 'px'; - s[3].top = this.decal.y + 'px'; - - this.ratio = 256 / this.wfixe; - this.square = 1 / (60*(this.wfixe/256)); - this.setHeight(); - - } - - + class Color extends Proto { + constructor(o = {}) { + super(o); + + //this.autoHeight = true; + + this.ctype = o.ctype || 'hex'; + this.wfixe = 256; + this.cw = this.sb > 256 ? 256 : this.sb; + if (o.cw != undefined) this.cw = o.cw; + + // color up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + this.baseH = this.h; + this.offset = new V2(); + this.decal = new V2(); + this.pp = new V2(); + let cc = this.colors; + + // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) + + this.c[2] = this.dom('div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h - 2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};`); + //this.s[2] = this.c[2].style; + + //this.s[2].textShadow = 'none' + + /*if( this.up ){ + this.s[2].top = 'auto'; + this.s[2].bottom = '2px'; + }*/ + + //this.c[0].style.textAlign = 'center'; + this.c[0].style.display = 'block'; + this.c[3] = this.getColorRing(); + this.c[3].style.visibility = 'hidden'; + this.hsl = null; + this.value = '#ffffff'; + if (o.value !== undefined) { + if (o.value instanceof Array) this.value = Tools.rgbToHex(o.value);else if (!isNaN(o.value)) this.value = Tools.hexToHtml(o.value);else this.value = o.value; + } + this.bcolor = null; + this.isDown = false; + this.fistDown = false; + this.notext = o.notext || false; + this.tr = 98; + this.tsl = Math.sqrt(3) * this.tr; + this.hue = 0; + this.d = 256; + this.init(); + this.setColor(this.value); + if (o.open !== undefined) this.open(); + } + testZone(mx, my) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (this.up && this.isOpen) { + if (l.y > this.wfixe) return 'title';else return 'color'; + } else { + if (l.y < this.baseH + 2) return 'title';else if (this.isOpen) return 'color'; + } + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + this.isDown = false; + this.d = 256; + } + mousedown(e) { + let name = this.testZone(e.clientX, e.clientY); + + //if( !name ) return; + if (name === 'title') { + if (!this.isOpen) this.open();else this.close(); + return true; + } + if (name === 'color') { + this.isDown = true; + this.fistDown = true; + this.mousemove(e); + } + } + mousemove(e) { + let name = this.testZone(e.clientX, e.clientY); + let off, + d, + hue, + sat, + lum, + rad, + x, + y, + rr, + T = Tools; + if (name === 'title') this.cursor('pointer'); + if (name === 'color') { + off = this.offset; + off.x = e.clientX - (this.zone.x + this.decal.x + this.mid); + off.y = e.clientY - (this.zone.y + this.decal.y + this.mid) - this.ytop; + d = off.length() * this.ratio; + rr = off.angle(); + if (rr < 0) rr += 2 * T.PI; + if (d < 128) this.cursor('crosshair');else if (!this.isDown) this.cursor(); + if (this.isDown) { + if (this.fistDown) { + this.d = d; + this.fistDown = false; + } + if (this.d < 128) { + if (this.d > this.tr) { + // outside hue + + hue = (rr + T.pi90) / T.TwoPI; + this.hue = (hue + 1) % 1; + this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); + } else { + // triangle + + x = off.x * this.ratio; + y = off.y * this.ratio; + let rr = this.hue * T.TwoPI + T.PI; + if (rr < 0) rr += 2 * T.PI; + rad = Math.atan2(-y, x); + if (rad < 0) rad += 2 * T.PI; + let rad0 = (rad + T.pi90 + T.TwoPI + rr) % T.TwoPI, + rad1 = rad0 % (2 / 3 * T.PI) - T.pi60, + a = 0.5 * this.tr, + b = Math.tan(rad1) * a, + r = Math.sqrt(x * x + y * y), + maxR = Math.sqrt(a * a + b * b); + if (r > maxR) { + let dx = Math.tan(rad1) * r; + let rad2 = Math.atan(dx / maxR); + if (rad2 > T.pi60) rad2 = T.pi60;else if (rad2 < -T.pi60) rad2 = -T.pi60; + rad += rad2 - rad1; + rad0 = (rad + T.pi90 + T.TwoPI + rr) % T.TwoPI, rad1 = rad0 % (2 / 3 * T.PI) - T.pi60; + b = Math.tan(rad1) * a; + r = maxR = Math.sqrt(a * a + b * b); + } + lum = Math.sin(rad0) * r / this.tsl + 0.5; + let w = 1 - Math.abs(lum - 0.5) * 2; + sat = (Math.cos(rad0) * r + this.tr / 2) / (1.5 * this.tr) / w; + sat = T.clamp(sat, 0, 1); + this.setHSL([this.hsl[0], sat, lum]); + } + } + } + } + } + + // ---------------------- + + setHeight() { + this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; + this.s[0].height = this.h + 'px'; + this.zone.h = this.h; + } + parentHeight(t) { + if (this.group !== null) this.group.calc(t);else if (this.isUI) this.main.calc(t); + } + open() { + super.open(); + this.setHeight(); + if (this.up) this.zone.y -= this.wfixe + 5; + let t = this.h - this.baseH; + this.s[3].visibility = 'visible'; + //this.s[3].display = 'block'; + this.parentHeight(t); + } + close() { + super.close(); + if (this.up) this.zone.y += this.wfixe + 5; + let t = this.h - this.baseH; + this.setHeight(); + this.s[3].visibility = 'hidden'; + //this.s[3].display = 'none'; + this.parentHeight(-t); + } + update(up) { + let cc = Tools.rgbToHex(Tools.hslToRgb([this.hsl[0], 1, 0.5])); + this.moveMarkers(); + this.value = this.bcolor; + this.setSvg(this.c[3], 'fill', cc, 2, 0); + this.s[2].background = this.bcolor; + if (!this.notext) this.c[2].textContent = Tools.htmlToHex(this.bcolor); + this.invert = Tools.findDeepInver(this.rgb); + this.s[2].color = this.invert ? '#fff' : '#000'; + if (!up) return; + if (this.ctype === 'array') this.send(this.rgb); + if (this.ctype === 'rgb') this.send(Tools.htmlRgb(this.rgb)); + if (this.ctype === 'hex') this.send(Tools.htmlToHex(this.value)); + if (this.ctype === 'html') this.send(); + } + setValue(v) { + if (v instanceof Array) this.value = Tools.rgbToHex(v);else if (!isNaN(v)) this.value = Tools.hexToHtml(v);else this.value = v; + this.setColor(this.value); + this.update(); + } + setColor(color) { + let unpack = Tools.unpack(color); + if (this.bcolor !== color && unpack) { + this.bcolor = color; + this.rgb = unpack; + this.hsl = Tools.rgbToHsl(this.rgb); + this.hue = this.hsl[0]; + this.update(); + } + return this; + } + setHSL(hsl) { + this.hsl = hsl; + this.rgb = Tools.hslToRgb(hsl); + this.bcolor = Tools.rgbToHex(this.rgb); + this.update(true); + return this; + } + moveMarkers() { + let p = this.pp; + let T = Tools; + this.invert ? '#fff' : '#000'; + let a = this.hsl[0] * T.TwoPI; + let third = 2 / 3 * T.PI; + let r = this.tr; + let h = this.hsl[0]; + let s = this.hsl[1]; + let l = this.hsl[2]; + let angle = (a - T.pi90) * T.todeg; + h = -a + T.pi90; + let hx = Math.cos(h) * r; + let hy = -Math.sin(h) * r; + let sx = Math.cos(h - third) * r; + let sy = -Math.sin(h - third) * r; + let vx = Math.cos(h + third) * r; + let vy = -Math.sin(h + third) * r; + let mx = (sx + vx) / 2, + my = (sy + vy) / 2; + a = (1 - 2 * Math.abs(l - .5)) * s; + let x = sx + (vx - sx) * l + (hx - mx) * a; + let y = sy + (vy - sy) * l + (hy - my) * a; + p.set(x, y).addScalar(128); + + //let ff = (1-l)*255; + // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); + + this.setSvg(this.c[3], 'transform', 'rotate(' + angle + ' )', 2); + this.setSvg(this.c[3], 'cx', p.x, 3); + this.setSvg(this.c[3], 'cy', p.y, 3); + this.setSvg(this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3); + this.setSvg(this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3); + this.setSvg(this.c[3], 'fill', this.bcolor, 3); + } + rSize() { + //Proto.prototype.rSize.call( this ); + super.rSize(); + let s = this.s; + s[2].width = this.sb + 'px'; + s[2].left = this.sa + 'px'; + + //console.log(this.sb) + + this.cw = this.sb > 256 ? 256 : this.sb; + this.rSizeColor(this.cw); + this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + //s[3].left = this.decal.x + 'px'; + } + rSizeColor(w) { + if (w === this.wfixe) return; + this.wfixe = w; + let s = this.s; + + //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; + this.mid = Math.floor(this.wfixe * 0.5); + this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.wfixe + ' ' + this.wfixe); + s[3].width = this.wfixe + 'px'; + s[3].height = this.wfixe + 'px'; + //s[3].left = this.decal.x + 'px'; + s[3].top = this.decal.y + 'px'; + this.ratio = 256 / this.wfixe; + this.square = 1 / (60 * (this.wfixe / 256)); + this.setHeight(); + } } - class Fps extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.round = Math.round; - - //this.autoHeight = true; - - this.baseH = this.h; - this.hplus = o.hplus || 50; - - this.res = o.res || 40; - this.l = 1; - - this.precision = o.precision || 0; - - - this.custom = o.custom || false; - this.names = o.names || ['FPS', 'MS']; - let cc = o.cc || ['220,220,220', '255,255,0']; - - // this.divid = [ 100, 100, 100 ]; - // this.multy = [ 30, 30, 30 ]; - - this.adding = o.adding || false; - - this.range = o.range || [ 165, 100, 100 ]; - - this.alpha = o.alpha || 0.25; - - this.values = []; - this.points = []; - this.textDisplay = []; - - if(!this.custom){ - - this.now = Roots.getTime(); - this.startTime = 0;//this.now() - this.prevTime = 0;//this.startTime; - this.frames = 0; - - this.ms = 0; - this.fps = 0; - this.mem = 0; - this.mm = 0; - - this.isMem = ( self.performance && self.performance.memory ) ? true : false; - - // this.divid = [ 100, 200, 1 ]; - // this.multy = [ 30, 30, 30 ]; - - if( this.isMem ){ - - this.names.push('MEM'); - cc.push('0,255,255'); - - } - - this.txt = o.name || 'Fps'; - - } - - - let fltop = Math.floor(this.h*0.5)-3; - const ccc = this.colors; - - this.c[1].textContent = this.txt; - //this.c[1].innerHTML = ' ' + this.txt - this.c[0].style.cursor = 'pointer'; - this.c[0].style.pointerEvents = 'auto'; - - let panelCss = 'display:none; left:10px; top:'+ this.h + 'px; height:'+(this.hplus - 8)+'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid '+ ccc.border +';'; - - if( this.radius !== 0 ) panelCss += 'border-radius:' + this.radius+'px;'; - - this.c[2] = this.dom( 'path', this.css.basic + panelCss , {} ); - - this.c[2].setAttribute('viewBox', '0 0 '+this.res+' 50' ); - this.c[2].setAttribute('height', '100%' ); - this.c[2].setAttribute('width', '100%' ); - this.c[2].setAttribute('preserveAspectRatio', 'none' ); - - - //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - - // arrow - this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:ccc.text, stroke:'none'}); - //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); - - // result test - this.c[4] = this.dom( 'div', this.css.txt + 'position:absolute; left:10px; top:'+(this.h+2) +'px; display:none; width:100%; text-align:center;' ); - - // bottom line - if( o.bottomLine ) this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); - - this.isShow = false; - - - - let s = this.s; - - //s[1].marginLeft = '10px'; - s[1].lineHeight = this.h-4; - s[1].color = ccc.text; - //s[1].paddingLeft = '18px'; - //s[1].fontWeight = 'bold'; - - if( this.radius !== 0 ) s[0].borderRadius = this.radius+'px'; - if( this.colors.gborder!=='none') s[0].border = '1px solid ' + ccc.gborder; - - - - - let j = 0; - - for( j=0; j " + this.names[j] +" "); - - } - - j = this.names.length; - while(j--){ - this.dom( 'path', null, { fill:'rgba('+cc[j]+','+this.alpha+')', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - } - - - this.init(); - - //if( this.isShow ) this.show(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown ( e ) { - - if( this.isShow ) this.close(); - else this.open(); - - } - - // ---------------------- - - /*mode: function ( mode ) { - - let s = this.s; - - switch(mode){ - case 0: // base - s[1].color = this.colors.text; - //s[1].background = 'none'; - break; - case 1: // over - s[1].color = '#FFF'; - //s[1].background = UIL.SELECT; - break; - case 2: // edit / down - s[1].color = this.colors.text; - //s[1].background = UIL.SELECTDOWN; - break; - - } - },*/ - - tick ( v ) { - - this.values = v; - if( !this.isShow ) return; - this.drawGraph(); - this.upText(); - - } - - makePath ( point ) { - - let p = ''; - p += 'M ' + (-1) + ' ' + 50; - for ( let i = 0; i < this.res + 1; i ++ ) { p += ' L ' + i + ' ' + point[i]; } - p += ' L ' + (this.res + 1) + ' ' + 50; - return p; - - } - - upText ( val ) { - - let v = val || this.values, t = ''; - for( let j=0, lng =this.names.length; j'; - this.c[4].innerHTML = t; - - } - - drawGraph () { - - let svg = this.c[2]; - let i = this.names.length, v, old = 0, n = 0; - - while( i-- ){ - if( this.adding ) v = (this.values[n]+old) * this.range[n]; - else v = (this.values[n] * this.range[n]); - this.points[n].shift(); - this.points[n].push( 50 - v ); - this.setSvg( svg, 'd', this.makePath( this.points[n] ), i+1 ); - old += this.values[n]; - n++; - - } - - } - - open () { - - super.open(); - - this.h = this.hplus + this.baseH; - - this.setSvg( this.c[3], 'd', this.svgs.g2 ); - - if( this.group !== null ){ this.group.calc( this.hplus );} - else if( this.isUI ) this.main.calc( this.hplus ); - - this.s[0].height = this.h +'px'; - this.s[2].display = 'block'; - this.s[4].display = 'block'; - this.isShow = true; - - if( !this.custom ) Roots.addListen( this ); - - } - - close () { - - super.close(); - - this.h = this.baseH; - - this.setSvg( this.c[3], 'd', this.svgs.g1 ); - - if( this.group !== null ){ this.group.calc( -this.hplus );} - else if( this.isUI ) this.main.calc( -this.hplus ); - - this.s[0].height = this.h +'px'; - this.s[2].display = 'none'; - this.s[4].display = 'none'; - this.isShow = false; - - if( !this.custom ) Roots.removeListen( this ); - - this.c[4].innerHTML = ''; - - } - - - ///// AUTO FPS ////// - - begin () { - - this.startTime = this.now(); - - } - - end () { - - let time = this.now(); - this.ms = time - this.startTime; - - this.frames ++; - - if ( time > this.prevTime + 1000 ) { - - this.fps = this.round( ( this.frames * 1000 ) / ( time - this.prevTime ) ); - - this.prevTime = time; - this.frames = 0; - - if ( this.isMem ) { - - let heapSize = performance.memory.usedJSHeapSize; - let heapSizeLimit = performance.memory.jsHeapSizeLimit; - - this.mem = this.round( heapSize * 0.000000954 ); - this.mm = heapSize / heapSizeLimit; - - } - - } - - this.values = [ this.fps, this.ms , this.mm ]; - - this.drawGraph(); - this.upText( [ this.fps, this.ms, this.mem ] ); - - return time; - - } - - listening () { - - if( !this.custom ) this.startTime = this.end(); - - } - - rSize () { - - let s = this.s; - let w = this.w; - - s[3].left = ( this.sa + this.sb - 6 ) + 'px'; - - s[0].width = w + 'px'; - s[1].width = w + 'px'; - s[2].left = 10 + 'px'; - s[2].width = (w-20) + 'px'; - s[4].width = (w-20) + 'px'; - - } - + class Fps extends Proto { + constructor(o = {}) { + super(o); + this.round = Math.round; + + //this.autoHeight = true; + + this.baseH = this.h; + this.hplus = o.hplus || 50; + this.res = o.res || 40; + this.l = 1; + this.precision = o.precision || 0; + this.custom = o.custom || false; + this.names = o.names || ['FPS', 'MS']; + let cc = o.cc || ['220,220,220', '255,255,0']; + + // this.divid = [ 100, 100, 100 ]; + // this.multy = [ 30, 30, 30 ]; + + this.adding = o.adding || false; + this.range = o.range || [165, 100, 100]; + this.alpha = o.alpha || 0.25; + this.values = []; + this.points = []; + this.textDisplay = []; + if (!this.custom) { + this.now = Roots.getTime(); + this.startTime = 0; //this.now() + this.prevTime = 0; //this.startTime; + this.frames = 0; + this.ms = 0; + this.fps = 0; + this.mem = 0; + this.mm = 0; + this.isMem = self.performance && self.performance.memory ? true : false; + + // this.divid = [ 100, 200, 1 ]; + // this.multy = [ 30, 30, 30 ]; + + if (this.isMem) { + this.names.push('MEM'); + cc.push('0,255,255'); + } + this.txt = o.name || 'Fps'; + } + let fltop = Math.floor(this.h * 0.5) - 3; + const ccc = this.colors; + this.c[1].textContent = this.txt; + //this.c[1].innerHTML = ' ' + this.txt + this.c[0].style.cursor = 'pointer'; + this.c[0].style.pointerEvents = 'auto'; + let panelCss = 'display:none; left:10px; top:' + this.h + 'px; height:' + (this.hplus - 8) + 'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid ' + ccc.border + ';'; + if (this.radius !== 0) panelCss += 'border-radius:' + this.radius + 'px;'; + this.c[2] = this.dom('path', this.css.basic + panelCss, {}); + this.c[2].setAttribute('viewBox', '0 0 ' + this.res + ' 50'); + this.c[2].setAttribute('height', '100%'); + this.c[2].setAttribute('width', '100%'); + this.c[2].setAttribute('preserveAspectRatio', 'none'); + + //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + + // arrow + this.c[3] = this.dom('path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:' + fltop + 'px;', { + d: this.svgs.g1, + fill: ccc.text, + stroke: 'none' + }); + //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); + + // result test + this.c[4] = this.dom('div', this.css.txt + 'position:absolute; left:10px; top:' + (this.h + 2) + 'px; display:none; width:100%; text-align:center;'); + + // bottom line + if (o.bottomLine) this.c[4] = this.dom('div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); + this.isShow = false; + let s = this.s; + + //s[1].marginLeft = '10px'; + s[1].lineHeight = this.h - 4; + s[1].color = ccc.text; + //s[1].paddingLeft = '18px'; + //s[1].fontWeight = 'bold'; + + if (this.radius !== 0) s[0].borderRadius = this.radius + 'px'; + if (this.colors.gborder !== 'none') s[0].border = '1px solid ' + ccc.gborder; + let j = 0; + for (j = 0; j < this.names.length; j++) { + let base = []; + let i = this.res + 1; + while (i--) base.push(50); + this.range[j] = 1 / this.range[j] * 49; + this.points.push(base); + this.values.push(0); + // this.dom( 'path', null, { fill:'rgba('+cc[j]+',0.5)', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + this.textDisplay.push(" " + this.names[j] + " "); + } + j = this.names.length; + while (j--) { + this.dom('path', null, { + fill: 'rgba(' + cc[j] + ',' + this.alpha + ')', + 'stroke-width': 1, + stroke: 'rgba(' + cc[j] + ',1)', + 'vector-effect': 'non-scaling-stroke' + }, this.c[2]); + } + this.init(); + + //if( this.isShow ) this.show(); + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown(e) { + if (this.isShow) this.close();else this.open(); + } + + // ---------------------- + + /*mode: function ( mode ) { + let s = this.s; + switch(mode){ + case 0: // base + s[1].color = this.colors.text; + //s[1].background = 'none'; + break; + case 1: // over + s[1].color = '#FFF'; + //s[1].background = UIL.SELECT; + break; + case 2: // edit / down + s[1].color = this.colors.text; + //s[1].background = UIL.SELECTDOWN; + break; + } + },*/ + + tick(v) { + this.values = v; + if (!this.isShow) return; + this.drawGraph(); + this.upText(); + } + makePath(point) { + let p = ''; + p += 'M ' + -1 + ' ' + 50; + for (let i = 0; i < this.res + 1; i++) { + p += ' L ' + i + ' ' + point[i]; + } + p += ' L ' + (this.res + 1) + ' ' + 50; + return p; + } + upText(val) { + let v = val || this.values, + t = ''; + for (let j = 0, lng = this.names.length; j < lng; j++) t += this.textDisplay[j] + v[j].toFixed(this.precision) + ''; + this.c[4].innerHTML = t; + } + drawGraph() { + let svg = this.c[2]; + let i = this.names.length, + v, + old = 0, + n = 0; + while (i--) { + if (this.adding) v = (this.values[n] + old) * this.range[n];else v = this.values[n] * this.range[n]; + this.points[n].shift(); + this.points[n].push(50 - v); + this.setSvg(svg, 'd', this.makePath(this.points[n]), i + 1); + old += this.values[n]; + n++; + } + } + open() { + super.open(); + this.h = this.hplus + this.baseH; + this.setSvg(this.c[3], 'd', this.svgs.g2); + if (this.group !== null) { + this.group.calc(this.hplus); + } else if (this.isUI) this.main.calc(this.hplus); + this.s[0].height = this.h + 'px'; + this.s[2].display = 'block'; + this.s[4].display = 'block'; + this.isShow = true; + if (!this.custom) Roots.addListen(this); + } + close() { + super.close(); + this.h = this.baseH; + this.setSvg(this.c[3], 'd', this.svgs.g1); + if (this.group !== null) { + this.group.calc(-this.hplus); + } else if (this.isUI) this.main.calc(-this.hplus); + this.s[0].height = this.h + 'px'; + this.s[2].display = 'none'; + this.s[4].display = 'none'; + this.isShow = false; + if (!this.custom) Roots.removeListen(this); + this.c[4].innerHTML = ''; + } + + ///// AUTO FPS ////// + + begin() { + this.startTime = this.now(); + } + end() { + let time = this.now(); + this.ms = time - this.startTime; + this.frames++; + if (time > this.prevTime + 1000) { + this.fps = this.round(this.frames * 1000 / (time - this.prevTime)); + this.prevTime = time; + this.frames = 0; + if (this.isMem) { + let heapSize = performance.memory.usedJSHeapSize; + let heapSizeLimit = performance.memory.jsHeapSizeLimit; + this.mem = this.round(heapSize * 0.000000954); + this.mm = heapSize / heapSizeLimit; + } + } + this.values = [this.fps, this.ms, this.mm]; + this.drawGraph(); + this.upText([this.fps, this.ms, this.mem]); + return time; + } + listening() { + if (!this.custom) this.startTime = this.end(); + } + rSize() { + let s = this.s; + let w = this.w; + s[3].left = this.sa + this.sb - 6 + 'px'; + s[0].width = w + 'px'; + s[1].width = w + 'px'; + s[2].left = 10 + 'px'; + s[2].width = w - 20 + 'px'; + s[4].width = w - 20 + 'px'; + } } - class Graph extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value !== undefined ? o.value : [0,0,0]; - this.lng = this.value.length; - - this.precision = o.precision !== undefined ? o.precision : 2; - this.multiplicator = o.multiplicator || 1; - this.neg = o.neg || false; - - this.line = o.line !== undefined ? o.line : true; - - //if(this.neg)this.multiplicator*=2; - - this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; - this.isNumber = false; - - this.isDown = false; - - this.h = o.h || 128 + 10; - this.rh = this.h - 10; - this.top = 0; - - this.c[0].style.width = this.w +'px'; - - if( this.c[1] !== undefined ) { // with title - - this.c[1].style.width = this.w +'px'; - - if(!this.autoWidth){ - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - } - - - //this.c[1].style.background = '#ff0000'; - //this.c[1].style.textAlign = 'center'; - this.top = 10; - this.h += 10; - - } - - this.gh = this.rh - 28; - this.gw = this.w - 28; - - //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); - - //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' - this.c[2] = this.dom( 'div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:'+(this.h-20)+'px; left:14px; width:'+this.gw+'px; color:'+ this.colors.text ); - - //this.c[2].textContent = this.value; - this.c[2].innerHTML = this.valueToHtml(); - - let svg = this.dom( 'svg', this.css.basic , { viewBox:'0 0 '+this.w+' '+this.rh, width:this.w, height:this.rh, preserveAspectRatio:'none' } ); - this.setCss( svg, { width:this.w, height:this.rh, left:0, top:this.top }); - - this.dom( 'path', '', { d:'', stroke:this.colors.text, 'stroke-width':2, fill:'none', 'stroke-linecap':'butt' }, svg ); - this.dom( 'rect', '', { x:10, y:10, width:this.gw+8, height:this.gh+8, stroke:'rgba(0,0,0,0.3)', 'stroke-width':1 , fill:'none'}, svg ); - - this.iw = ((this.gw-(4*(this.lng-1)))/this.lng); - let t = []; - this.cMode = []; - - this.v = []; - - for( let i = 0; i < this.lng; i++ ){ - - t[i] = [ 14 + (i*this.iw) + (i*4), this.iw ]; - t[i][2] = t[i][0] + t[i][1]; - this.cMode[i] = 0; - - if( this.neg ) this.v[i] = ((1+(this.value[i] / this.multiplicator))*0.5); - else this.v[i] = this.value[i] / this.multiplicator; - - this.dom( 'rect', '', { x:t[i][0], y:14, width:t[i][1], height:1, fill:this.colors.text, 'fill-opacity':0.3 }, svg ); - - } - - this.tmp = t; - this.c[3] = svg; - - //console.log(this.w) - - this.init(); - - if( this.c[1] !== undefined ){ - this.c[1].style.top = 0 +'px'; - this.c[1].style.height = 20 +'px'; - this.s[1].lineHeight = (20-5)+'px'; - } - - this.update( false ); - - } - - setValue ( value ) { - - this.value = value; - this.lng = this.value.length; - for (var i = 0; i < this.lng; i++) { - if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5; - else this.v[i] = value[i] / this.multiplicator; - } - this.update(); - - } - - valueToHtml() { - - let i = this.lng, n=0, r = ''; - let w = 100 / this.lng; - let style = 'width:'+ w +'%;';//' text-align:center;' - while(i--){ - if(n===this.lng-1) r += '
' + this.value[n] + '
'; - else r += '' + this.value[n] + ''; - n++; - } - return r - } - - updateSVG () { - - if( this.line ) this.setSvg( this.c[3], 'd', this.makePath(), 0 ); - - for(let i = 0; ithis.top && l.yt[i][0] && l.x' + this.value[n] + '';else r += '' + this.value[n] + ''; + n++; + } + return r; + } + updateSVG() { + if (this.line) this.setSvg(this.c[3], 'd', this.makePath(), 0); + for (let i = 0; i < this.lng; i++) { + this.setSvg(this.c[3], 'height', this.v[i] * this.gh, i + 2); + this.setSvg(this.c[3], 'y', 14 + (this.gh - this.v[i] * this.gh), i + 2); + if (this.neg) this.value[i] = ((this.v[i] * 2 - 1) * this.multiplicator).toFixed(this.precision) * 1;else this.value[i] = (this.v[i] * this.multiplicator).toFixed(this.precision) * 1; + } + + //this.c[2].textContent = this.value; + this.c[2].innerHTML = this.valueToHtml(); + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + let i = this.lng; + let t = this.tmp; + if (l.y > this.top && l.y < this.h - 20) { + while (i--) { + if (l.x > t[i][0] && l.x < t[i][2]) return i; + } + } + return ''; + } + mode(n, name) { + if (n === this.cMode[name]) return false; + let a; + switch (n) { + case 0: + a = 0.3; + break; + case 1: + a = 0.6; + break; + case 2: + a = 1; + break; + } + this.reset(); + this.setSvg(this.c[3], 'fill-opacity', a, name + 2); + this.cMode[name] = n; + return true; + } + + // ---------------------- + // EVENTS + // ---------------------- + + reset() { + let nup = false; + //this.isDown = false; + + let i = this.lng; + while (i--) { + if (this.cMode[i] !== 0) { + this.cMode[i] = 0; + this.setSvg(this.c[3], 'fill-opacity', 0.3, i + 2); + nup = true; + } + } + return nup; + } + mouseup(e) { + this.isDown = false; + if (this.current !== -1) return this.reset(); + } + mousedown(e) { + this.isDown = true; + return this.mousemove(e); + } + mousemove(e) { + let nup = false; + let name = this.testZone(e); + if (name === '') { + nup = this.reset(); + //this.cursor(); + } else { + nup = this.mode(this.isDown ? 2 : 1, name); + //this.cursor( this.current !== -1 ? 'move' : 'pointer' ); + if (this.isDown) { + this.v[name] = this.clamp(1 - (e.clientY - this.zone.y - this.ytop - 10) / this.gh, 0, 1); + this.update(true); + } + } + return nup; + } + + // ---------------------- + + update(up) { + this.updateSVG(); + if (up) this.send(); + } + makePath() { + let p = "", + h, + w, + wn, + wm, + ow, + oh; + //let g = this.iw*0.5 + + for (let i = 0; i < this.lng; i++) { + h = 14 + (this.gh - this.v[i] * this.gh); + w = 14 + i * this.iw + i * 4; + wm = w + this.iw * 0.5; + wn = w + this.iw; + if (i === 0) p += 'M ' + w + ' ' + h + ' T ' + wm + ' ' + h;else p += ' C ' + ow + ' ' + oh + ',' + w + ' ' + h + ',' + wm + ' ' + h; + if (i === this.lng - 1) p += ' T ' + wn + ' ' + h; + ow = wn; + oh = h; + } + return p; + } + rSize() { + super.rSize(); + let s = this.s; + if (this.c[1] !== undefined) s[1].width = this.w + 'px'; + s[3].width = this.w + 'px'; + let gw = this.w - 28; + let iw = (gw - 4 * (this.lng - 1)) / this.lng; + let t = []; + s[2].width = gw + 'px'; + for (let i = 0; i < this.lng; i++) { + t[i] = [14 + i * iw + i * 4, iw]; + t[i][2] = t[i][0] + t[i][1]; + } + this.tmp = t; + } } - class Empty extends Proto { - - constructor( o = {} ) { - - o.isSpace = true; - o.margin = 0; - if(!o.h) o.h = 10; - super( o ); - this.init(); - - } - + class Empty extends Proto { + constructor(o = {}) { + o.isSpace = true; + o.margin = 0; + if (!o.h) o.h = 10; + super(o); + this.init(); + } } - class Group extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.isGroup = true; - - this.ADD = o.add; - - this.autoHeight = true; - - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - - this.decal = o.group ? 8 : 0; - //this.dd = o.group ? o.group.decal + 8 : 0 - - this.baseH = this.h; - - this.spaceY = new Empty({h:this.margin}); - - - - let fltop = Math.floor(this.h*0.5)-3; - - const cc = this.colors; - - this.useFlex = true; - let flexible = this.useFlex ? 'display:flex; flex-flow: row wrap;' : ''; - - this.c[2] = this.dom( 'div', this.css.basic + flexible + 'width:100%; left:0; overflow:hidden; top:'+(this.h)+'px'); - this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); - - let bh = this.mtop === 0 ? this.margin : this.mtop; - - this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; left:0; height:'+(bh+1)+'px; top:'+((this.h-1))+'px; background:none;'); - - this.s; - this.c[1].name = 'group'; - - this.init(); - - this.setBG( o.bg ); - - if( o.open ) this.open(); - - } - - setBG ( bg ) { - - const cc = this.colors; - const s = this.s; - - if( bg !== undefined ) cc.groups = bg; - if(cc.groups === 'none') cc.groups = cc.background; - cc.background = 'none'; - - s[0].background = 'none'; - s[1].background = cc.groups; - s[2].background = cc.groups; - - if( cc.gborder !== 'none' ){ - s[1].border = cc.borderSize+'px solid '+ cc.gborder; - } - - if( this.radius !== 0 ){ - - s[1].borderRadius = this.radius+'px'; - s[2].borderRadius = this.radius+'px'; - - } - - /*let i = this.uis.length; - while(i--){ - this.uis[i].setBG( 'none' ); - //this.uis[i].setBG( this.colors.background ); - }*/ - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - - let name = ''; - - if( l.y < this.baseH + this.margin ) name = 'title'; - else { - if( this.isOpen ) name = 'content'; - } - - //console.log(name) - - return name; - - } - - clearTarget () { - - if( this.current === -1 ) return false; - if( this.proto.s ){ - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } - this.proto = null; - this.current = -1; - this.cursor(); - return true; - - } - - reset () { - - this.clearTarget(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - handleEvent ( e ) { - - let type = e.type; - - let change = false; - let protoChange = false; - - let name = this.testZone( e ); - - if( !name ) return; - - switch( name ){ - - case 'content': - - //this.cursor() - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - - if( Roots.isMobile && type === 'mousedown' ) this.getNext( e, change ); - - if( this.proto ){ - //e.clientY -= this.margin - protoChange = this.proto.handleEvent( e ); - } - - if( !Roots.lock ) this.getNext( e, change ); - - break; - case 'title': - //this.cursor( this.isOpen ? 'n-resize':'s-resize' ); - this.cursor('pointer'); - if( type === 'mousedown' ){ - if( this.isOpen ) this.close(); - else this.open(); - } - break; - - - } - - if( this.isDown ) change = true; - if( protoChange ) change = true; - - return change; - - } - - getNext ( e, change ) { - - let next = Roots.findTarget( this.uis, e ); - - if( next !== this.current ){ - this.clearTarget(); - this.current = next; - } - - if( next !== -1 ){ - this.proto = this.uis[ this.current ]; - this.proto.uiover(); - } - - } - - // ---------------------- - - - - add() { - - let a = arguments; - - if( typeof a[1] === 'object' ){ - a[1].isUI = this.isUI; - a[1].target = this.c[2]; - a[1].main = this.main; - a[1].group = this; - } else if( typeof arguments[1] === 'string' ){ - if( a[2] === undefined ) [].push.call( a, { isUI:true, target:this.c[2], main:this.main }); - else { - a[2].isUI = true; - a[2].target = this.c[2]; - a[2].main = this.main; - a[2].group = this; - } - } - - let u = this.ADD.apply( this, a ); - - if( u.isGroup ){ - //o.add = add; - u.dx = 8; - } - - //u.dx += 4 - //console.log(this.decal) - //u.zone.d -= 8 - Roots.forceZone = true; - //u.margin += this.margin - - //console.log( u.margin ) - //Roots.needReZone = true - - //Roots.resize() - //console.log(Roots.needResize) - - this.uis.push( u ); - - this.isEmpty = false; - - return u; - - } - - // remove one node - - remove ( n ) { - - if( n.dispose ) n.dispose(); - - } - - // clear all iner - - dispose() { - - this.clear(); - if( this.isUI ) this.main.calc(); - super.dispose(); - - } - - clear() { - - this.empty(); - - } - - empty () { - - this.close(); - - let i = this.uis.length, item; - - while( i-- ){ - item = this.uis.pop(); - this.c[2].removeChild( item.c[0] ); - item.clear( true ); - - //this.uis[i].clear() - } - - this.isEmpty = true; - this.h = this.baseH; - - } - - // clear one element - - clearOne ( n ) { - - let id = this.uis.indexOf( n ); - - if ( id !== -1 ) { - this.calc( - ( this.uis[ id ].h + this.margin ) ); - this.c[2].removeChild( this.uis[ id ].c[0] ); - this.uis.splice( id, 1 ); - - if( this.uis.length === 0 ){ - this.isEmpty = true; - this.close(); - } - } - - } - - - - open () { - - super.open(); - - this.setSvg( this.c[3], 'd', this.svgs.g2 ); - this.rSizeContent(); - - //let t = this.h - this.baseH - - const s = this.s; - const cc = this.colors; - - //s[2].top = (this.h-1) + 'px' - s[2].top = (this.h+this.mtop) + 'px'; - s[4].background = cc.groups;//'#0f0' - - if(this.radius){ - - s[1].borderRadius = '0px'; - s[2].borderRadius = '0px'; - - s[1].borderTopLeftRadius = this.radius+'px'; - s[1].borderTopRightRadius = this.radius+'px'; - s[2].borderBottomLeftRadius = this.radius+'px'; - s[2].borderBottomRightRadius = this.radius+'px'; - } - - if( cc.gborder !== 'none' ){ - - s[4].borderLeft = cc.borderSize+'px solid '+ cc.gborder; - s[4].borderRight = cc.borderSize+'px solid '+ cc.gborder; - - s[2].border = cc.borderSize+'px solid '+ cc.gborder; - s[2].borderTop = 'none'; - s[1].borderBottom = cc.borderSize+'px solid rgba(0,0,0,0)'; - - } - - this.parentHeight(); - - //Roots.isLeave = true - //Roots.needResize = true - - } - - close () { - - super.close(); - - //let t = this.h - this.baseH - - this.setSvg( this.c[3], 'd', this.svgs.g1 ); - - this.h = this.baseH; - - const s = this.s; - const cc = this.colors; - - s[0].height = this.h + 'px'; - //s[1].height = (this.h-2) + 'px' - //s[2].top = this.h + 'px' - s[2].top = (this.h+this.mtop) + 'px'; - s[4].background = 'none'; - - if( cc.gborder !== 'none' ){ - - s[4].border = 'none'; - s[2].border = 'none'; - s[1].border = cc.borderSize+'px solid '+ cc.gborder; - } - - if(this.radius) s[1].borderRadius = this.radius+'px'; - - this.parentHeight(); - - } - - calcUis () { - - if( !this.isOpen || this.isEmpty ) this.h = this.baseH; - //else this.h = Roots.calcUis( this.uis, this.zone, this.zone.y + this.baseH ) + this.baseH; - else this.h = Roots.calcUis( [...this.uis, this.spaceY ], this.zone, this.zone.y + this.baseH + this.margin, true ) + this.baseH; - - this.s[0].height = this.h + 'px'; - this.s[2].height =( this.h - this.baseH )+ 'px'; - - } - - parentHeight ( t ) { - - if ( this.group !== null ) this.group.calc( t ); - else if ( this.isUI ) this.main.calc( t ); - - } - - calc ( y ) { - - if( !this.isOpen ) return - if( this.isUI ) this.main.calc(); - else this.calcUis(); - this.s[0].height = this.h + 'px'; - this.s[2].height = this.h + 'px'; - - } - - rSizeContent () { - - let i = this.uis.length; - while(i--){ - this.uis[i].setSize( this.w ); - this.uis[i].rSize(); - } - - } - - rSize () { - - super.rSize(); - - let s = this.s; - - this.w = this.w - this.decal; - - s[3].left = ( this.sa + this.sb - 6 ) + 'px'; - - s[1].width = this.w + 'px'; - s[2].width = this.w + 'px'; - s[1].left = (this.decal) + 'px'; - s[2].left = (this.decal) + 'px'; - - if( this.isOpen ) this.rSizeContent(); - - } - - // - /* - uiout() { - - if( this.lock ) return; - if(!this.overEffect) return; - if(this.s) this.s[0].background = this.colors.background; - - } - - uiover() { - - if( this.lock ) return; - if(!this.overEffect) return; - //if( this.isOpen ) return; - if(this.s) this.s[0].background = this.colors.backgroundOver; - - } - */ + class Group extends Proto { + constructor(o = {}) { + super(o); + this.isGroup = true; + this.ADD = o.add; + this.autoHeight = true; + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = o.group ? 8 : 0; + //this.dd = o.group ? o.group.decal + 8 : 0 + + this.baseH = this.h; + this.spaceY = new Empty({ + h: this.margin + }); + let fltop = Math.floor(this.h * 0.5) - 3; + const cc = this.colors; + this.useFlex = true; + let flexible = this.useFlex ? 'display:flex; flex-flow: row wrap;' : ''; + this.c[2] = this.dom('div', this.css.basic + flexible + 'width:100%; left:0; overflow:hidden; top:' + this.h + 'px'); + this.c[3] = this.dom('path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:' + fltop + 'px;', { + d: this.svgs.g1, + fill: cc.text, + stroke: 'none' + }); + let bh = this.mtop === 0 ? this.margin : this.mtop; + this.c[4] = this.dom('div', this.css.basic + 'width:100%; left:0; height:' + (bh + 1) + 'px; top:' + (this.h - 1) + 'px; background:none;'); + this.s; + this.c[1].name = 'group'; + this.init(); + this.setBG(o.bg); + if (o.open) this.open(); + } + setBG(bg) { + const cc = this.colors; + const s = this.s; + if (bg !== undefined) cc.groups = bg; + if (cc.groups === 'none') cc.groups = cc.background; + cc.background = 'none'; + s[0].background = 'none'; + s[1].background = cc.groups; + s[2].background = cc.groups; + if (cc.gborder !== 'none') { + s[1].border = cc.borderSize + 'px solid ' + cc.gborder; + } + if (this.radius !== 0) { + s[1].borderRadius = this.radius + 'px'; + s[2].borderRadius = this.radius + 'px'; + } + + /*let i = this.uis.length; + while(i--){ + this.uis[i].setBG( 'none' ); + //this.uis[i].setBG( this.colors.background ); + }*/ + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + let name = ''; + if (l.y < this.baseH + this.margin) name = 'title';else { + if (this.isOpen) name = 'content'; + } + + //console.log(name) + + return name; + } + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + this.proto = null; + this.current = -1; + this.cursor(); + return true; + } + reset() { + this.clearTarget(); + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent(e) { + let type = e.type; + let change = false; + let protoChange = false; + let name = this.testZone(e); + if (!name) return; + switch (name) { + case 'content': + //this.cursor() + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + + if (Roots.isMobile && type === 'mousedown') this.getNext(e, change); + if (this.proto) { + //e.clientY -= this.margin + protoChange = this.proto.handleEvent(e); + } + if (!Roots.lock) this.getNext(e, change); + break; + case 'title': + //this.cursor( this.isOpen ? 'n-resize':'s-resize' ); + this.cursor('pointer'); + if (type === 'mousedown') { + if (this.isOpen) this.close();else this.open(); + } + break; + } + if (this.isDown) change = true; + if (protoChange) change = true; + return change; + } + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); + if (next !== this.current) { + this.clearTarget(); + this.current = next; + } + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } + + // ---------------------- + + add() { + let a = arguments; + if (typeof a[1] === 'object') { + a[1].isUI = this.isUI; + a[1].target = this.c[2]; + a[1].main = this.main; + a[1].group = this; + } else if (typeof arguments[1] === 'string') { + if (a[2] === undefined) [].push.call(a, { + isUI: true, + target: this.c[2], + main: this.main + });else { + a[2].isUI = true; + a[2].target = this.c[2]; + a[2].main = this.main; + a[2].group = this; + } + } + let u = this.ADD.apply(this, a); + if (u.isGroup) { + //o.add = add; + u.dx = 8; + } + + //u.dx += 4 + //console.log(this.decal) + //u.zone.d -= 8 + Roots.forceZone = true; + //u.margin += this.margin + + //console.log( u.margin ) + //Roots.needReZone = true + + //Roots.resize() + //console.log(Roots.needResize) + + this.uis.push(u); + this.isEmpty = false; + return u; + } + + // remove one node + + remove(n) { + if (n.dispose) n.dispose(); + } + + // clear all iner + + dispose() { + this.clear(); + if (this.isUI) this.main.calc(); + super.dispose(); + } + clear() { + this.empty(); + } + empty() { + this.close(); + let i = this.uis.length, + item; + while (i--) { + item = this.uis.pop(); + this.c[2].removeChild(item.c[0]); + item.clear(true); + + //this.uis[i].clear() + } + this.isEmpty = true; + this.h = this.baseH; + } + + // clear one element + + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + this.calc(-(this.uis[id].h + this.margin)); + this.c[2].removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + if (this.uis.length === 0) { + this.isEmpty = true; + this.close(); + } + } + } + open() { + super.open(); + this.setSvg(this.c[3], 'd', this.svgs.g2); + this.rSizeContent(); + + //let t = this.h - this.baseH + + const s = this.s; + const cc = this.colors; + + //s[2].top = (this.h-1) + 'px' + s[2].top = this.h + this.mtop + 'px'; + s[4].background = cc.groups; //'#0f0' + + if (this.radius) { + s[1].borderRadius = '0px'; + s[2].borderRadius = '0px'; + s[1].borderTopLeftRadius = this.radius + 'px'; + s[1].borderTopRightRadius = this.radius + 'px'; + s[2].borderBottomLeftRadius = this.radius + 'px'; + s[2].borderBottomRightRadius = this.radius + 'px'; + } + if (cc.gborder !== 'none') { + s[4].borderLeft = cc.borderSize + 'px solid ' + cc.gborder; + s[4].borderRight = cc.borderSize + 'px solid ' + cc.gborder; + s[2].border = cc.borderSize + 'px solid ' + cc.gborder; + s[2].borderTop = 'none'; + s[1].borderBottom = cc.borderSize + 'px solid rgba(0,0,0,0)'; + } + this.parentHeight(); + + //Roots.isLeave = true + //Roots.needResize = true + } + close() { + super.close(); + + //let t = this.h - this.baseH + + this.setSvg(this.c[3], 'd', this.svgs.g1); + this.h = this.baseH; + const s = this.s; + const cc = this.colors; + s[0].height = this.h + 'px'; + //s[1].height = (this.h-2) + 'px' + //s[2].top = this.h + 'px' + s[2].top = this.h + this.mtop + 'px'; + s[4].background = 'none'; + if (cc.gborder !== 'none') { + s[4].border = 'none'; + s[2].border = 'none'; + s[1].border = cc.borderSize + 'px solid ' + cc.gborder; + } + if (this.radius) s[1].borderRadius = this.radius + 'px'; + this.parentHeight(); + } + calcUis() { + if (!this.isOpen || this.isEmpty) this.h = this.baseH; + //else this.h = Roots.calcUis( this.uis, this.zone, this.zone.y + this.baseH ) + this.baseH; + else this.h = Roots.calcUis([...this.uis, this.spaceY], this.zone, this.zone.y + this.baseH + this.margin, true) + this.baseH; + this.s[0].height = this.h + 'px'; + this.s[2].height = this.h - this.baseH + 'px'; + } + parentHeight(t) { + if (this.group !== null) this.group.calc(t);else if (this.isUI) this.main.calc(t); + } + calc(y) { + if (!this.isOpen) return; + if (this.isUI) this.main.calc();else this.calcUis(); + this.s[0].height = this.h + 'px'; + this.s[2].height = this.h + 'px'; + } + rSizeContent() { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(this.w); + this.uis[i].rSize(); + } + } + rSize() { + super.rSize(); + let s = this.s; + this.w = this.w - this.decal; + s[3].left = this.sa + this.sb - 6 + 'px'; + s[1].width = this.w + 'px'; + s[2].width = this.w + 'px'; + s[1].left = this.decal + 'px'; + s[2].left = this.decal + 'px'; + if (this.isOpen) this.rSizeContent(); + } + + // + /* + uiout() { + + if( this.lock ) return; + if(!this.overEffect) return; + if(this.s) this.s[0].background = this.colors.background; + + } + + uiover() { + + if( this.lock ) return; + if(!this.overEffect) return; + //if( this.isOpen ) return; + if(this.s) this.s[0].background = this.colors.backgroundOver; + + } + */ } - class Joystick extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.autoWidth = false; - - this.value = [0,0]; - - this.minw = this.w; - this.diam = o.diam || this.w; - - this.joyType = 'analogique'; - this.model = o.mode !== undefined ? o.mode : 0; - - this.precision = o.precision || 2; - this.multiplicator = o.multiplicator || 1; - - this.pos = new V2(); - this.tmp = new V2(); - - this.interval = null; - this.c[0].style.display = 'block'; - this.haveText = o.text !== undefined ? o.text : true; - - //this.radius = this.w * 0.5; - //this.distance = this.radius*0.25; - this.distance = (this.diam*0.5)*0.25; - - this.h = o.h || this.w + (this.haveText ? 10 : 0); - - this.c[0].style.width = this.w +'px'; - - if( this.c[1] !== undefined ) { // with title - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - - } - - let cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); - this.c[2].textContent = this.haveText ? this.value : ''; - - this.c[3] = this.getJoystick( this.model ); - this.setSvg( this.c[3], 'viewBox', '0 0 '+this.diam+' '+this.diam ); - this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); - - this.mode(0); - - - this.ratio = 128/this.w; - - this.init(); - - this.update(false); - - } - - mode ( mode ) { - - let cc = this.colors; - - switch(mode){ - case 0: // base - if(this.model===0){ - this.setSvg( this.c[3], 'fill', 'url(#gradIn)', 4 ); - this.setSvg( this.c[3], 'stroke', '#000', 4 ); - } else { - this.setSvg( this.c[3], 'stroke', cc.joyOut, 2 ); - //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.1)', 3 ); - this.setSvg( this.c[3], 'stroke', cc.joyOut, 4 ); - this.setSvg( this.c[3], 'fill', 'none', 4 ); - } - - break; - case 1: // over - if(this.model===0){ - this.setSvg( this.c[3], 'fill', 'url(#gradIn2)', 4 ); - this.setSvg( this.c[3], 'stroke', 'rgba(0,0,0,0)', 4 ); - } else { - this.setSvg( this.c[3], 'stroke', cc.joyOver, 2 ); - //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.3)', 3 ); - this.setSvg( this.c[3], 'stroke', cc.joySelect, 4 ); - this.setSvg( this.c[3], 'fill', cc.joyOver, 4 ); - } - break; - - } - } - - // ---------------------- - // EVENTS - // ---------------------- - - addInterval (){ - if( this.interval !== null ) this.stopInterval(); - if( this.pos.isZero() ) return; - this.interval = setInterval( function(){ this.update(); }.bind(this), 10 ); - - } - - stopInterval (){ - - if( this.interval === null ) return; - clearInterval( this.interval ); - this.interval = null; - - } - - reset () { - - this.addInterval(); - this.mode(0); - - } - - mouseup ( e ) { - - this.addInterval(); - this.isDown = false; - - } - - mousedown ( e ) { - - this.isDown = true; - this.mousemove( e ); - this.mode( 2 ); - - } - - mousemove ( e ) { - - this.mode(1); - - if( !this.isDown ) return; - - //this.tmp.x = this.radius - ( e.clientX - this.zone.x ); - //this.tmp.y = this.radius - ( e.clientY - this.zone.y - this.top ); - - this.tmp.x = (this.w*0.5) - ( e.clientX - this.zone.x ); - this.tmp.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - let distance = this.tmp.length(); - - if ( distance > this.distance ) { - let angle = Math.atan2(this.tmp.x, this.tmp.y); - this.tmp.x = Math.sin( angle ) * this.distance; - this.tmp.y = Math.cos( angle ) * this.distance; - } - - this.pos.copy( this.tmp ).divideScalar( this.distance ).negate(); - - this.update(); - - } - - setValue ( v ) { - - if(v===undefined) v=[0,0]; - - this.pos.set( v[0] || 0, v[1] || 0 ); - this.updateSVG(); - - } - - update ( up ) { - - if( up === undefined ) up = true; - - if( this.interval !== null ){ - - if( !this.isDown ){ - - this.pos.lerp( null, 0.3 ); - - this.pos.x = Math.abs( this.pos.x ) < 0.01 ? 0 : this.pos.x; - this.pos.y = Math.abs( this.pos.y ) < 0.01 ? 0 : this.pos.y; - - if( this.isUI && this.main.isCanvas ) this.main.draw(); - - } - - } - - this.updateSVG(); - - if( up ) this.send(); - - - if( this.pos.isZero() ) this.stopInterval(); - - } - - updateSVG () { - - //let x = this.radius - ( -this.pos.x * this.distance ); - //let y = this.radius - ( -this.pos.y * this.distance ); - - let x = (this.diam*0.5) - ( -this.pos.x * this.distance ); - let y = (this.diam*0.5) - ( -this.pos.y * this.distance ); - - if(this.model === 0){ - - let sx = x + ((this.pos.x)*5) + 5; - let sy = y + ((this.pos.y)*5) + 10; - - this.setSvg( this.c[3], 'cx', sx*this.ratio, 3 ); - this.setSvg( this.c[3], 'cy', sy*this.ratio, 3 ); - } else { - this.setSvg( this.c[3], 'cx', x*this.ratio, 3 ); - this.setSvg( this.c[3], 'cy', y*this.ratio, 3 ); - } - - - - this.setSvg( this.c[3], 'cx', x*this.ratio, 4 ); - this.setSvg( this.c[3], 'cy', y*this.ratio, 4 ); - - this.value[0] = ( this.pos.x * this.multiplicator ).toFixed( this.precision ) * 1; - this.value[1] = ( this.pos.y * this.multiplicator ).toFixed( this.precision ) * 1; - - if(this.haveText) this.c[2].textContent = this.value; - - } - - clear () { - - this.stopInterval(); - super.clear(); - - } - + class Joystick extends Proto { + constructor(o = {}) { + super(o); + this.autoWidth = false; + this.value = [0, 0]; + this.minw = this.w; + this.diam = o.diam || this.w; + this.joyType = 'analogique'; + this.model = o.mode !== undefined ? o.mode : 0; + this.precision = o.precision || 2; + this.multiplicator = o.multiplicator || 1; + this.pos = new V2(); + this.tmp = new V2(); + this.interval = null; + this.c[0].style.display = 'block'; + this.haveText = o.text !== undefined ? o.text : true; + + //this.radius = this.w * 0.5; + //this.distance = this.radius*0.25; + this.distance = this.diam * 0.5 * 0.25; + this.h = o.h || this.w + (this.haveText ? 10 : 0); + this.c[0].style.width = this.w + 'px'; + if (this.c[1] !== undefined) { + // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + } + let cc = this.colors; + this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); + this.c[2].textContent = this.haveText ? this.value : ''; + this.c[3] = this.getJoystick(this.model); + this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); + this.setCss(this.c[3], { + width: this.diam, + height: this.diam, + left: 0, + top: this.top + }); + this.mode(0); + this.ratio = 128 / this.w; + this.init(); + this.update(false); + } + mode(mode) { + let cc = this.colors; + switch (mode) { + case 0: + // base + if (this.model === 0) { + this.setSvg(this.c[3], 'fill', 'url(#gradIn)', 4); + this.setSvg(this.c[3], 'stroke', '#000', 4); + } else { + this.setSvg(this.c[3], 'stroke', cc.joyOut, 2); + //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.1)', 3 ); + this.setSvg(this.c[3], 'stroke', cc.joyOut, 4); + this.setSvg(this.c[3], 'fill', 'none', 4); + } + break; + case 1: + // over + if (this.model === 0) { + this.setSvg(this.c[3], 'fill', 'url(#gradIn2)', 4); + this.setSvg(this.c[3], 'stroke', 'rgba(0,0,0,0)', 4); + } else { + this.setSvg(this.c[3], 'stroke', cc.joyOver, 2); + //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.3)', 3 ); + this.setSvg(this.c[3], 'stroke', cc.joySelect, 4); + this.setSvg(this.c[3], 'fill', cc.joyOver, 4); + } + break; + } + } + + // ---------------------- + // EVENTS + // ---------------------- + + addInterval() { + if (this.interval !== null) this.stopInterval(); + if (this.pos.isZero()) return; + this.interval = setInterval(function () { + this.update(); + }.bind(this), 10); + } + stopInterval() { + if (this.interval === null) return; + clearInterval(this.interval); + this.interval = null; + } + reset() { + this.addInterval(); + this.mode(0); + } + mouseup(e) { + this.addInterval(); + this.isDown = false; + } + mousedown(e) { + this.isDown = true; + this.mousemove(e); + this.mode(2); + } + mousemove(e) { + this.mode(1); + if (!this.isDown) return; + + //this.tmp.x = this.radius - ( e.clientX - this.zone.x ); + //this.tmp.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + this.tmp.x = this.w * 0.5 - (e.clientX - this.zone.x); + this.tmp.y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); + let distance = this.tmp.length(); + if (distance > this.distance) { + let angle = Math.atan2(this.tmp.x, this.tmp.y); + this.tmp.x = Math.sin(angle) * this.distance; + this.tmp.y = Math.cos(angle) * this.distance; + } + this.pos.copy(this.tmp).divideScalar(this.distance).negate(); + this.update(); + } + setValue(v) { + if (v === undefined) v = [0, 0]; + this.pos.set(v[0] || 0, v[1] || 0); + this.updateSVG(); + } + update(up) { + if (up === undefined) up = true; + if (this.interval !== null) { + if (!this.isDown) { + this.pos.lerp(null, 0.3); + this.pos.x = Math.abs(this.pos.x) < 0.01 ? 0 : this.pos.x; + this.pos.y = Math.abs(this.pos.y) < 0.01 ? 0 : this.pos.y; + if (this.isUI && this.main.isCanvas) this.main.draw(); + } + } + this.updateSVG(); + if (up) this.send(); + if (this.pos.isZero()) this.stopInterval(); + } + updateSVG() { + //let x = this.radius - ( -this.pos.x * this.distance ); + //let y = this.radius - ( -this.pos.y * this.distance ); + + let x = this.diam * 0.5 - -this.pos.x * this.distance; + let y = this.diam * 0.5 - -this.pos.y * this.distance; + if (this.model === 0) { + let sx = x + this.pos.x * 5 + 5; + let sy = y + this.pos.y * 5 + 10; + this.setSvg(this.c[3], 'cx', sx * this.ratio, 3); + this.setSvg(this.c[3], 'cy', sy * this.ratio, 3); + } else { + this.setSvg(this.c[3], 'cx', x * this.ratio, 3); + this.setSvg(this.c[3], 'cy', y * this.ratio, 3); + } + this.setSvg(this.c[3], 'cx', x * this.ratio, 4); + this.setSvg(this.c[3], 'cy', y * this.ratio, 4); + this.value[0] = (this.pos.x * this.multiplicator).toFixed(this.precision) * 1; + this.value[1] = (this.pos.y * this.multiplicator).toFixed(this.precision) * 1; + if (this.haveText) this.c[2].textContent = this.value; + } + clear() { + this.stopInterval(); + super.clear(); + } } - class Knob extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.isCyclic = o.cyclic || false; - this.model = o.stype || 0; - if( o.mode !== undefined ) this.model = o.mode; - - this.autoWidth = false; - - this.setTypeNumber( o ); - - this.minw = this.w; - this.diam = o.diam || this.w; - - this.mPI = Math.PI * 0.8; - this.toDeg = 180 / Math.PI; - this.cirRange = this.mPI * 2; - - this.offset = new V2(); - - this.h = o.h || this.w + 10; - - this.c[0].style.width = this.w +'px'; - this.c[0].style.display = 'block'; - - if(this.c[1] !== undefined) { - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - - } - - this.percent = 0; - - this.cmode = 0; - let cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); - - this.c[3] = this.getKnob(); - this.setSvg( this.c[3], 'fill', cc.button, 0 ); - this.setSvg( this.c[3], 'stroke', cc.text, 1 ); - this.setSvg( this.c[3], 'stroke', cc.text, 3 ); - this.setSvg( this.c[3], 'd', this.makeGrad(), 3 ); - - this.setSvg( this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam ); - this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); - - if ( this.model > 0 ) { - - Tools.dom( 'path', '', { d: '', stroke:cc.text, 'stroke-width': 2, fill: 'none', 'stroke-linecap': 'round' }, this.c[3] ); //4 - - if ( this.model == 2) { - - Tools.addSVGGlowEffect(); - this.setSvg( this.c[3], 'style', 'filter: url("#UILGlow");', 4 ); - - } - - } - - this.r = 0; - - this.init(); - - this.update(); - - } - - mode ( mode ) { - - let cc = this.colors; - - if( this.cmode === mode ) return false; - - switch( mode ) { - case 0: // base - this.s[2].color = cc.text; - this.setSvg( this.c[3], 'fill', cc.button, 0); - //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); - this.setSvg( this.c[3], 'stroke', cc.text, 1 ); - break; - case 1: // down - this.s[2].color = cc.textOver; - this.setSvg( this.c[3], 'fill', cc.select, 0); - //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); - this.setSvg( this.c[3], 'stroke', cc.textOver, 1 ); - break; - } - - this.cmode = mode; - return true; - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'knob'; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.sendEnd(); - return this.mode(0) - - } - - mousedown ( e ) { - - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove( e ); - return this.mode(1) - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - let off = this.offset; - - //off.x = this.radius - ( e.clientX - this.zone.x ); - //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); - - off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); - off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - this.r = - Math.atan2( off.x, off.y ); - - if( this.oldr !== null ) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; - - this.r = this.r > this.mPI ? this.mPI : this.r; - this.r = this.r < -this.mPI ? -this.mPI : this.r; - - let steps = 1 / this.cirRange; - let value = (this.r + this.mPI) * steps; - - let n = ( ( this.range * value ) + this.min ) - this.old; - - if(n >= this.step || n <= this.step){ - n = Math.floor( n / this.step ); - this.value = this.numValue( this.old + ( n * this.step ) ); - this.update( true ); - this.old = this.value; - this.oldr = this.r; - } - - } - - wheel ( e ) { - - let name = this.testZone( e ); - - if( name === 'knob' ) { - - let v = this.value - this.step * e.delta; - - if ( v > this.max ) { - v = this.isCyclic ? this.min : this.max; - } else if ( v < this.min ) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue( v ); - this.old = v; - this.update( true ); - - return true; - - } - return false; - - } - - makeGrad () { - - let d = '', step, range, a, x, y, x2, y2, r = 64; - let startangle = Math.PI + this.mPI; - let endangle = Math.PI - this.mPI; - //let step = this.step>5 ? this.step : 1; - - if(this.step>5){ - range = this.range / this.step; - step = ( startangle - endangle ) / range; - } else { - step = (( startangle - endangle ) / r)*2; - range = r*0.5; - } - - for ( let i = 0; i <= range; ++i ) { - - a = startangle - ( step * i ); - x = r + Math.sin( a ) * ( r - 20 ); - y = r + Math.cos( a ) * ( r - 20 ); - x2 = r + Math.sin( a ) * ( r - 24 ); - y2 = r + Math.cos( a ) * ( r - 24 ); - d += 'M' + x + ' ' + y + ' L' + x2 + ' '+y2 + ' '; - - } - - return d; - - } - - update ( up ) { - - this.c[2].textContent = this.value; - this.percent = (this.value - this.min) / this.range; - - let sa = Math.PI + this.mPI; - let ea = ( ( this.percent * this.cirRange ) - ( this.mPI ) ); - - let sin = Math.sin( ea ); - let cos = Math.cos( ea ); - - let x1 = ( 25 * sin ) + 64; - let y1 = -( 25 * cos ) + 64; - let x2 = ( 20 * sin ) + 64; - let y2 = -( 20 * cos ) + 64; - - this.setSvg( this.c[3], 'd', 'M ' + x1 +' ' + y1 + ' L ' + x2 +' ' + y2, 1 ); - - if ( this.model > 0 ) { - - let x1 = 36 * Math.sin( sa ) + 64; - let y1 = 36 * Math.cos( sa ) + 64; - let x2 = 36 * sin + 64; - let y2 = -36 * cos + 64; - let big = ea <= Math.PI - this.mPI ? 0 : 1; - this.setSvg( this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4 ); - - let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( this.colors.text, -0.75) ), Tools.unpack( this.colors.text ), this.percent ) ); - this.setSvg( this.c[3], 'stroke', color, 4 ); - - } - - if( up ) this.send(); - - } - + class Knob extends Proto { + constructor(o = {}) { + super(o); + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + this.autoWidth = false; + this.setTypeNumber(o); + this.minw = this.w; + this.diam = o.diam || this.w; + this.mPI = Math.PI * 0.8; + this.toDeg = 180 / Math.PI; + this.cirRange = this.mPI * 2; + this.offset = new V2(); + this.h = o.h || this.w + 10; + this.c[0].style.width = this.w + 'px'; + this.c[0].style.display = 'block'; + if (this.c[1] !== undefined) { + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + } + this.percent = 0; + this.cmode = 0; + let cc = this.colors; + this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); + this.c[3] = this.getKnob(); + this.setSvg(this.c[3], 'fill', cc.button, 0); + this.setSvg(this.c[3], 'stroke', cc.text, 1); + this.setSvg(this.c[3], 'stroke', cc.text, 3); + this.setSvg(this.c[3], 'd', this.makeGrad(), 3); + this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); + this.setCss(this.c[3], { + width: this.diam, + height: this.diam, + left: 0, + top: this.top + }); + if (this.model > 0) { + Tools.dom('path', '', { + d: '', + stroke: cc.text, + 'stroke-width': 2, + fill: 'none', + 'stroke-linecap': 'round' + }, this.c[3]); //4 + + if (this.model == 2) { + Tools.addSVGGlowEffect(); + this.setSvg(this.c[3], 'style', 'filter: url("#UILGlow");', 4); + } + } + this.r = 0; + this.init(); + this.update(); + } + mode(mode) { + let cc = this.colors; + if (this.cmode === mode) return false; + switch (mode) { + case 0: + // base + this.s[2].color = cc.text; + this.setSvg(this.c[3], 'fill', cc.button, 0); + //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); + this.setSvg(this.c[3], 'stroke', cc.text, 1); + break; + case 1: + // down + this.s[2].color = cc.textOver; + this.setSvg(this.c[3], 'fill', cc.select, 0); + //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); + this.setSvg(this.c[3], 'stroke', cc.textOver, 1); + break; + } + this.cmode = mode; + return true; + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'knob'; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + this.isDown = false; + this.sendEnd(); + return this.mode(0); + } + mousedown(e) { + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove(e); + return this.mode(1); + } + mousemove(e) { + if (!this.isDown) return; + let off = this.offset; + + //off.x = this.radius - ( e.clientX - this.zone.x ); + //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + off.x = this.w * 0.5 - (e.clientX - this.zone.x); + off.y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); + this.r = -Math.atan2(off.x, off.y); + if (this.oldr !== null) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; + this.r = this.r > this.mPI ? this.mPI : this.r; + this.r = this.r < -this.mPI ? -this.mPI : this.r; + let steps = 1 / this.cirRange; + let value = (this.r + this.mPI) * steps; + let n = this.range * value + this.min - this.old; + if (n >= this.step || n <= this.step) { + n = Math.floor(n / this.step); + this.value = this.numValue(this.old + n * this.step); + this.update(true); + this.old = this.value; + this.oldr = this.r; + } + } + wheel(e) { + let name = this.testZone(e); + if (name === 'knob') { + let v = this.value - this.step * e.delta; + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } + this.setValue(v); + this.old = v; + this.update(true); + return true; + } + return false; + } + makeGrad() { + let d = '', + step, + range, + a, + x, + y, + x2, + y2, + r = 64; + let startangle = Math.PI + this.mPI; + let endangle = Math.PI - this.mPI; + //let step = this.step>5 ? this.step : 1; + + if (this.step > 5) { + range = this.range / this.step; + step = (startangle - endangle) / range; + } else { + step = (startangle - endangle) / r * 2; + range = r * 0.5; + } + for (let i = 0; i <= range; ++i) { + a = startangle - step * i; + x = r + Math.sin(a) * (r - 20); + y = r + Math.cos(a) * (r - 20); + x2 = r + Math.sin(a) * (r - 24); + y2 = r + Math.cos(a) * (r - 24); + d += 'M' + x + ' ' + y + ' L' + x2 + ' ' + y2 + ' '; + } + return d; + } + update(up) { + this.c[2].textContent = this.value; + this.percent = (this.value - this.min) / this.range; + let sa = Math.PI + this.mPI; + let ea = this.percent * this.cirRange - this.mPI; + let sin = Math.sin(ea); + let cos = Math.cos(ea); + let x1 = 25 * sin + 64; + let y1 = -(25 * cos) + 64; + let x2 = 20 * sin + 64; + let y2 = -(20 * cos) + 64; + this.setSvg(this.c[3], 'd', 'M ' + x1 + ' ' + y1 + ' L ' + x2 + ' ' + y2, 1); + if (this.model > 0) { + let x1 = 36 * Math.sin(sa) + 64; + let y1 = 36 * Math.cos(sa) + 64; + let x2 = 36 * sin + 64; + let y2 = -36 * cos + 64; + let big = ea <= Math.PI - this.mPI ? 0 : 1; + this.setSvg(this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4); + let color = Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(this.colors.text, -0.75)), Tools.unpack(this.colors.text), this.percent)); + this.setSvg(this.c[3], 'stroke', color, 4); + } + if (up) this.send(); + } } - class List extends Proto { - - constructor( o = {} ) { - - super( o ); - - // TODO not work - this.hideCurrent = false; - - // images - this.path = o.path || ''; - this.format = o.format || ''; - - - this.isWithImage = this.path !== '' ? true:false; - this.preLoadComplete = false; - - this.tmpImage = {}; - this.tmpUrl = []; - - this.m = o.m !== undefined ? o.m : 5; - - - let align = o.align || 'left'; - - // scroll size - let ss = o.scrollSize || 10; - this.ss = ss+1; - - this.sMode = 0; - this.tMode = 0; - - this.listOnly = o.listOnly || false; - this.staticTop = o.staticTop || false; - - this.isSelectable = this.listOnly; - if( o.select !== undefined ) o.selectable = o.select; - if( o.selectable !== undefined ) this.isSelectable = o.selectable; - - if( this.txt === '' ) this.p = 0; - - - let fltop = Math.floor(this.h*0.5)-3; - let cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.basic + 'top:0; display:none; border-radius:'+this.radius+'px;' ); - this.c[3] = this.dom( 'div', this.css.item + 'padding:0px '+this.m+'px; margin-bottom:0px; position:absolute; justify-content:'+align+'; text-align:'+align+'; line-height:'+(this.h-4)+'px; top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:1px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); - - this.scrollerBack = this.dom( 'div', this.css.basic + 'right:0px; width:'+ss+'px; background:'+cc.back+'; display:none;'); - this.scroller = this.dom( 'div', this.css.basic + 'right:'+((ss-(ss*0.25))*0.5)+'px; width:'+(ss*0.25)+'px; background:'+cc.text+'; display:none; '); - - this.c[3].style.color = cc.text; - - - this.list = []; - this.refObject = null; - - if( o.list ){ - if( o.list instanceof Array ){ - this.list = o.list; - } else if( o.list instanceof Object ){ - this.refObject = o.list; - for( let g in this.refObject ) this.list.push( g ); - } - } - - this.items = []; - - this.prevName = ''; - - - this.tmpId = 0; - - this.baseH = this.h; - - this.itemHeight = o.itemHeight || this.h;//(this.h-3); - - // force full list - this.full = o.full || false; - - this.py = 0; - this.ww = this.sb; - this.scroll = false; - this.isDown = false; - - this.current = null; - - // list up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - - if( this.up ){ - - this.c[2].style.top = 'auto'; - this.c[3].style.top = 'auto'; - this.c[4].style.top = 'auto'; - - this.c[2].style.bottom = this.h-2 + 'px'; - this.c[3].style.bottom = '1px'; - this.c[4].style.bottom = fltop + 'px'; - - } else { - this.c[2].style.top = this.baseH + 'px'; - } - - this.listIn = this.dom( 'div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); - this.listIn.name = 'list'; - - this.topList = 0; - - this.c[2].appendChild( this.listIn ); - this.c[2].appendChild( this.scrollerBack ); - this.c[2].appendChild( this.scroller ); - - if( o.value !== undefined ){ - if(!isNaN(o.value)) this.value = this.list[ o.value ]; - else this.value = o.value; - }else { - this.value = this.list[0]; - } - - this.isOpenOnStart = o.open || false; - - if( this.listOnly ){ - this.baseH = 5; - this.c[3].style.display = 'none'; - this.c[4].style.display = 'none'; - this.c[2].style.top = this.baseH+'px'; - this.isOpenOnStart = true; - } - - - this.miniCanvas = o.miniCanvas || false; - this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; - this.imageSize = o.imageSize || [20,20]; - - // dragout function - this.drag = o.drag || false; - this.dragout = o.dragout || false; - this.dragstart = o.dragstart || null; - this.dragend = o.dragend || null; - - - - //this.c[0].style.background = '#FF0000' - ///if( this.isWithImage ) this.preloadImage(); - - this.setList( this.list ); - this.init(); - if( this.isWithImage ) this.preloadImage(); - if( this.isOpenOnStart ) this.open( true ); - - this.baseH += this.mtop; - - } - - // image list - - preloadImage () { - - - - this.preLoadComplete = false; - - this.tmpImage = {}; - for( let i=0; i this.h - this.baseH ) return 'title'; - else { - if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; - if(l.x > this.sa) return this.testItems( l.y-this.baseH ); - } - - } else { - if( l.y < this.baseH+2 ) return 'title'; - else { - if( this.isOpen ){ - if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; - if(l.x > this.sa) return this.testItems( l.y-this.baseH ); - } - } - - } - - return ''; - - } - - testItems ( y ) { - - let name = ''; - - let items = this.items; - - /*if(this.hideCurrent){ - //items = [...this.items] - items = this.items.slice(this.tmpId) - - }*/ - - let i = items.length, item, a, b; - while(i--){ - item = items[i]; - a = item.posy + this.topList; - b = item.posy + this.itemHeight + 1 + this.topList; - if( y >= a && y <= b ){ - name = 'item' + i; - this.modeItem(0); - this.current = item; - this.modeItem(1); - return name; - } - - } - - return name; - - } - - modeItem ( mode ) { - - if( !this.current ) return - - if( this.current.select && mode===0) mode = 2; - let cc = this.colors; - - switch( mode ){ - - case 0: // base - this.current.style.background = cc.back; - this.current.style.color = cc.text; - break; - case 1: // over - this.current.style.background = cc.over; - this.current.style.color = cc.textOver; - break; - case 2: // edit / down - this.current.style.background = cc.select; - this.current.style.color = cc.textSelect; - break; - - } - } - - unSelected() { - - if( !this.current ) return - this.modeItem(0); - this.current = null; - - } - - selected() { - - if( !this.current ) return - this.resetItems(); - this.modeItem(2); - this.current.select = true; - - - - } - - resetItems() { - - let i = this.items.length; - while(i--){ - this.items[i].select = false; - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text; - } - - } - - hideActive() { - - if( !this.hideCurrent ) return - //if( !this.current ) return - if( this.current )this.tmpId = this.current.id; - this.resetHide(); - //this.items[this.tmpId].style.height = 0+'px' - - } - - resetHide() { - - console.log(this.tmpId); - - let i = this.items.length; - while(i--){ - if(i===this.tmpId){ - this.items[i].style.height = 0+'px'; - this.items[i].posy = -1; - } else { - this.items[i].style.height = this.itemHeight+'px'; - this.items[i].posy = (this.itemHeight+1)*(i-1); - } - //this.items[i].style.display = 'flex' - - /*this.items[i].select = false - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text;*/ - } - - } - - // ---------------------- - // EVENTS - // ---------------------- - - - mouseup ( e ) { - - this.isDown = false; - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false; - - if( name === 'scroll' ){ - - this.isDown = true; - this.mousemove( e ); - - } else if( name === 'title' ){ - - this.modeTitle(2); - if( !this.listOnly ){ - this.hideActive(); - if( !this.isOpen ) this.open(); - else this.close(); - } - } else { - // is item - if( this.current ){ - - this.value = this.list[ this.current.id ]; - //this.tmpId = this.current.id - - if( this.isSelectable ) this.selected(); - - //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); - this.send( this.value ); - - if( !this.listOnly ) { - this.close(); - this.setTopItem(); - //this.hideActive() - } - } - - } - - return true; - - } - - mousemove ( e ) { - - let nup = false; - let name = this.testZone( e ); - - if( !name ) return nup; - - if( name === 'title' ){ - this.unSelected(); - this.modeTitle(1); - this.cursor('pointer'); - - } else if( name === 'scroll' ){ - - this.cursor('s-resize'); - this.modeScroll(1); - if( this.isDown ){ - this.modeScroll(2); - //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - let top = this.zone.y+this.baseH-2; - this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - } - //if(this.isDown) this.listmove(e); - } else { - - // is item - this.modeTitle(0); - this.modeScroll(0); - this.cursor('pointer'); - - } - - if( name !== this.prevName ) nup = true; - this.prevName = name; - - return nup; - - } - - wheel ( e ) { - - let name = this.testZone( e ); - if( name === 'title' ) return false; - this.py += e.delta*10; - this.update(this.py); - return true; - - } - - - - // ---------------------- - - reset () { - - this.prevName = ''; - this.unSelected(); - this.modeTitle(0); - this.modeScroll(0); - - //console.log('this is reset') - - } - - modeScroll ( mode ) { - - if( mode === this.sMode ) return; - - let s = this.scroller.style; - let cc = this.colors; - - switch(mode){ - case 0: // base - s.background = cc.text; - break; - case 1: // over - s.background = cc.select; - break; - case 2: // edit / down - s.background = cc.select; - break; - - } - - this.sMode = mode; - } - - modeTitle ( mode ) { - - if( mode === this.tMode ) return; - - let s = this.s; - let cc = this.colors; - - switch(mode){ - case 0: // base - s[3].color = cc.text; - s[3].background = cc.button; - break; - case 1: // over - s[3].color = cc.textOver; - s[3].background = cc.overoff; - break; - case 2: // edit / down - s[3].color = cc.textSelect; - s[3].background = cc.overoff; - break; - - } - - this.tMode = mode; - - } - - clearList () { - - while ( this.listIn.children.length ) this.listIn.removeChild( this.listIn.lastChild ); - this.items = []; - - } - - setList ( list ) { - - this.clearList(); - - this.list = list; - this.length = this.list.length; - - let lng = this.hideCurrent? this.length-1 : this.length; - - this.maxItem = this.full ? lng : 5; - this.maxItem = lng < this.maxItem ? lng : this.maxItem; - - this.maxHeight = this.maxItem * (this.itemHeight+1) + 2; - - - - this.max = lng * (this.itemHeight+1) + 2; - this.ratio = this.maxHeight / this.max; - this.sh = this.maxHeight * this.ratio; - this.range = this.maxHeight - this.sh; - - this.c[2].style.height = this.maxHeight + 'px'; - this.scrollerBack.style.height = this.maxHeight + 'px'; - this.scroller.style.height = this.sh + 'px'; - - if( this.max > this.maxHeight ){ - this.ww = this.sb - this.ss; - this.scroll = true; - } - - if( this.miniCanvas ) { - - this.tmpCanvas = document.createElement('canvas'); - this.tmpCanvas.width = this.imageSize[0]; - this.tmpCanvas.height = this.imageSize[1]; - this.tmpCtx = this.tmpCanvas.getContext("2d"); - this.tmpCtx.fillStyle = this.canvasBg; - this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); - - } - - let item, n;//, l = this.sb; - for( let i=0; i this.range ? this.range : y; - - this.topList = -Math.floor( y / this.ratio ); - - this.listIn.style.top = this.topList+'px'; - this.scroller.style.top = Math.floor( y ) + 'px'; - - this.py = y; - - } - - parentHeight ( t ) { - - if ( this.group !== null ) this.group.calc( t ); - else if ( this.isUI ) this.main.calc( t ); - - } - - open ( first ) { - - super.open(); - - this.update( 0 ); - - this.h = this.maxHeight + this.baseH + 5; - if( !this.scroll ){ - this.topList = 0; - this.h = this.baseH + 5 + this.max; - this.scroller.style.display = 'none'; - this.scrollerBack.style.display = 'none'; - } else { - this.scroller.style.display = 'block'; - this.scrollerBack.style.display = 'block'; - } - this.s[0].height = this.h + 'px'; - this.s[2].display = 'block'; - - if( this.up ){ - this.zone.y -= this.h - (this.baseH-10); - this.setSvg( this.c[4], 'd', this.svgs.g1 ); - } else { - this.setSvg( this.c[4], 'd', this.svgs.g2 ); - } - - this.rSizeContent(); - - let t = this.h - this.baseH; - - this.zone.h = this.h; - - if(!first) this.parentHeight( t ); - - } - - close () { - - super.close(); - - if( this.up ) this.zone.y += this.h - (this.baseH-10); - - let t = this.h - this.baseH; - - this.h = this.baseH; - this.s[0].height = this.h + 'px'; - this.s[2].display = 'none'; - this.setSvg( this.c[4], 'd', this.svgs.g1 ); - - this.zone.h = this.h; - - this.parentHeight( -t ); - - } - - // ----- - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSizeContent () { - - let i = this.length; - while(i--) this.listIn.children[i].style.width = this.ww + 'px'; - - } - - rSize () { - - super.rSize(); - - //Proto.prototype.rSize.call( this ); - - let s = this.s; - let w = this.sb; - let d = this.sa; - - if(s[2]=== undefined) return; - - s[2].width = w + 'px'; - s[2].left = d +'px'; - - s[3].width = w + 'px'; - s[3].left = d + 'px'; - - s[4].left = d + w - 15 + 'px'; - - this.ww = w; - if( this.max > this.maxHeight ) this.ww = w-this.ss; - if(this.isOpen) this.rSizeContent(); - - } - + class List extends Proto { + constructor(o = {}) { + super(o); + + // TODO not work + this.hideCurrent = false; + + // images + this.path = o.path || ''; + this.format = o.format || ''; + this.isWithImage = this.path !== '' ? true : false; + this.preLoadComplete = false; + this.tmpImage = {}; + this.tmpUrl = []; + this.m = o.m !== undefined ? o.m : 5; + let align = o.align || 'left'; + + // scroll size + let ss = o.scrollSize || 10; + this.ss = ss + 1; + this.sMode = 0; + this.tMode = 0; + this.listOnly = o.listOnly || false; + this.staticTop = o.staticTop || false; + this.isSelectable = this.listOnly; + if (o.select !== undefined) o.selectable = o.select; + if (o.selectable !== undefined) this.isSelectable = o.selectable; + if (this.txt === '') this.p = 0; + let fltop = Math.floor(this.h * 0.5) - 3; + let cc = this.colors; + this.c[2] = this.dom('div', this.css.basic + 'top:0; display:none; border-radius:' + this.radius + 'px;'); + this.c[3] = this.dom('div', this.css.item + 'padding:0px ' + this.m + 'px; margin-bottom:0px; position:absolute; justify-content:' + align + '; text-align:' + align + '; line-height:' + (this.h - 4) + 'px; top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:1px solid ' + cc.border + '; border-radius:' + this.radius + 'px;'); + this.c[4] = this.dom('path', this.css.basic + 'position:absolute; width:6px; height:6px; top:' + fltop + 'px;', { + d: this.svgs.g1, + fill: cc.text, + stroke: 'none' + }); + this.scrollerBack = this.dom('div', this.css.basic + 'right:0px; width:' + ss + 'px; background:' + cc.back + '; display:none;'); + this.scroller = this.dom('div', this.css.basic + 'right:' + (ss - ss * 0.25) * 0.5 + 'px; width:' + ss * 0.25 + 'px; background:' + cc.text + '; display:none; '); + this.c[3].style.color = cc.text; + this.list = []; + this.refObject = null; + if (o.list) { + if (o.list instanceof Array) { + this.list = o.list; + } else if (o.list instanceof Object) { + this.refObject = o.list; + for (let g in this.refObject) this.list.push(g); + } + } + this.items = []; + this.prevName = ''; + this.tmpId = 0; + this.baseH = this.h; + this.itemHeight = o.itemHeight || this.h; //(this.h-3); + + // force full list + this.full = o.full || false; + this.py = 0; + this.ww = this.sb; + this.scroll = false; + this.isDown = false; + this.current = null; + + // list up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + if (this.up) { + this.c[2].style.top = 'auto'; + this.c[3].style.top = 'auto'; + this.c[4].style.top = 'auto'; + this.c[2].style.bottom = this.h - 2 + 'px'; + this.c[3].style.bottom = '1px'; + this.c[4].style.bottom = fltop + 'px'; + } else { + this.c[2].style.top = this.baseH + 'px'; + } + this.listIn = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); + this.listIn.name = 'list'; + this.topList = 0; + this.c[2].appendChild(this.listIn); + this.c[2].appendChild(this.scrollerBack); + this.c[2].appendChild(this.scroller); + if (o.value !== undefined) { + if (!isNaN(o.value)) this.value = this.list[o.value];else this.value = o.value; + } else { + this.value = this.list[0]; + } + this.isOpenOnStart = o.open || false; + if (this.listOnly) { + this.baseH = 5; + this.c[3].style.display = 'none'; + this.c[4].style.display = 'none'; + this.c[2].style.top = this.baseH + 'px'; + this.isOpenOnStart = true; + } + this.miniCanvas = o.miniCanvas || false; + this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; + this.imageSize = o.imageSize || [20, 20]; + + // dragout function + this.drag = o.drag || false; + this.dragout = o.dragout || false; + this.dragstart = o.dragstart || null; + this.dragend = o.dragend || null; + + //this.c[0].style.background = '#FF0000' + ///if( this.isWithImage ) this.preloadImage(); + + this.setList(this.list); + this.init(); + if (this.isWithImage) this.preloadImage(); + if (this.isOpenOnStart) this.open(true); + this.baseH += this.mtop; + } + + // image list + + preloadImage() { + this.preLoadComplete = false; + this.tmpImage = {}; + for (let i = 0; i < this.list.length; i++) this.tmpUrl.push(this.list[i]); + this.loadOne(); + } + nextImg() { + if (this.c === null) return; + this.tmpUrl.shift(); + if (this.tmpUrl.length === 0) { + this.preLoadComplete = true; + this.addImages(); + /*this.setList( this.list ); + this.init(); + if( this.isOpenOnStart ) this.open();*/ + } else this.loadOne(); + } + loadOne() { + let self = this; + let name = this.tmpUrl[0]; + let img = document.createElement('img'); + img.style.cssText = 'position:absolute; width:' + self.imageSize[0] + 'px; height:' + self.imageSize[1] + 'px'; + img.setAttribute('src', this.path + name + this.format); + img.addEventListener('load', function () { + self.imageSize[2] = img.width; + self.imageSize[3] = img.height; + self.tmpImage[name] = img; + self.nextImg(); + }); + } + + // + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (this.up && this.isOpen) { + if (l.y > this.h - this.baseH) return 'title';else { + if (this.scroll && l.x > this.sa + this.sb - this.ss) return 'scroll'; + if (l.x > this.sa) return this.testItems(l.y - this.baseH); + } + } else { + if (l.y < this.baseH + 2) return 'title';else { + if (this.isOpen) { + if (this.scroll && l.x > this.sa + this.sb - this.ss) return 'scroll'; + if (l.x > this.sa) return this.testItems(l.y - this.baseH); + } + } + } + return ''; + } + testItems(y) { + let name = ''; + let items = this.items; + + /*if(this.hideCurrent){ + //items = [...this.items] + items = this.items.slice(this.tmpId) + }*/ + + let i = items.length, + item, + a, + b; + while (i--) { + item = items[i]; + a = item.posy + this.topList; + b = item.posy + this.itemHeight + 1 + this.topList; + if (y >= a && y <= b) { + name = 'item' + i; + this.modeItem(0); + this.current = item; + this.modeItem(1); + return name; + } + } + return name; + } + modeItem(mode) { + if (!this.current) return; + if (this.current.select && mode === 0) mode = 2; + let cc = this.colors; + switch (mode) { + case 0: + // base + this.current.style.background = cc.back; + this.current.style.color = cc.text; + break; + case 1: + // over + this.current.style.background = cc.over; + this.current.style.color = cc.textOver; + break; + case 2: + // edit / down + this.current.style.background = cc.select; + this.current.style.color = cc.textSelect; + break; + } + } + unSelected() { + if (!this.current) return; + this.modeItem(0); + this.current = null; + } + selected() { + if (!this.current) return; + this.resetItems(); + this.modeItem(2); + this.current.select = true; + } + resetItems() { + let i = this.items.length; + while (i--) { + this.items[i].select = false; + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text; + } + } + hideActive() { + if (!this.hideCurrent) return; + //if( !this.current ) return + if (this.current) this.tmpId = this.current.id; + this.resetHide(); + //this.items[this.tmpId].style.height = 0+'px' + } + resetHide() { + console.log(this.tmpId); + let i = this.items.length; + while (i--) { + if (i === this.tmpId) { + this.items[i].style.height = 0 + 'px'; + this.items[i].posy = -1; + } else { + this.items[i].style.height = this.itemHeight + 'px'; + this.items[i].posy = (this.itemHeight + 1) * (i - 1); + } + //this.items[i].style.display = 'flex' + + /*this.items[i].select = false + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text;*/ + } + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + this.isDown = false; + } + mousedown(e) { + let name = this.testZone(e); + if (!name) return false; + if (name === 'scroll') { + this.isDown = true; + this.mousemove(e); + } else if (name === 'title') { + this.modeTitle(2); + if (!this.listOnly) { + this.hideActive(); + if (!this.isOpen) this.open();else this.close(); + } + } else { + // is item + if (this.current) { + this.value = this.list[this.current.id]; + //this.tmpId = this.current.id + + if (this.isSelectable) this.selected(); + + //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); + this.send(this.value); + if (!this.listOnly) { + this.close(); + this.setTopItem(); + //this.hideActive() + } + } + } + return true; + } + mousemove(e) { + let nup = false; + let name = this.testZone(e); + if (!name) return nup; + if (name === 'title') { + this.unSelected(); + this.modeTitle(1); + this.cursor('pointer'); + } else if (name === 'scroll') { + this.cursor('s-resize'); + this.modeScroll(1); + if (this.isDown) { + this.modeScroll(2); + //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + let top = this.zone.y + this.baseH - 2; + this.update(e.clientY - top - this.sh * 0.5); + } + //if(this.isDown) this.listmove(e); + } else { + // is item + this.modeTitle(0); + this.modeScroll(0); + this.cursor('pointer'); + } + if (name !== this.prevName) nup = true; + this.prevName = name; + return nup; + } + wheel(e) { + let name = this.testZone(e); + if (name === 'title') return false; + this.py += e.delta * 10; + this.update(this.py); + return true; + } + + // ---------------------- + + reset() { + this.prevName = ''; + this.unSelected(); + this.modeTitle(0); + this.modeScroll(0); + + //console.log('this is reset') + } + modeScroll(mode) { + if (mode === this.sMode) return; + let s = this.scroller.style; + let cc = this.colors; + switch (mode) { + case 0: + // base + s.background = cc.text; + break; + case 1: + // over + s.background = cc.select; + break; + case 2: + // edit / down + s.background = cc.select; + break; + } + this.sMode = mode; + } + modeTitle(mode) { + if (mode === this.tMode) return; + let s = this.s; + let cc = this.colors; + switch (mode) { + case 0: + // base + s[3].color = cc.text; + s[3].background = cc.button; + break; + case 1: + // over + s[3].color = cc.textOver; + s[3].background = cc.overoff; + break; + case 2: + // edit / down + s[3].color = cc.textSelect; + s[3].background = cc.overoff; + break; + } + this.tMode = mode; + } + clearList() { + while (this.listIn.children.length) this.listIn.removeChild(this.listIn.lastChild); + this.items = []; + } + setList(list) { + this.clearList(); + this.list = list; + this.length = this.list.length; + let lng = this.hideCurrent ? this.length - 1 : this.length; + this.maxItem = this.full ? lng : 5; + this.maxItem = lng < this.maxItem ? lng : this.maxItem; + this.maxHeight = this.maxItem * (this.itemHeight + 1) + 2; + this.max = lng * (this.itemHeight + 1) + 2; + this.ratio = this.maxHeight / this.max; + this.sh = this.maxHeight * this.ratio; + this.range = this.maxHeight - this.sh; + this.c[2].style.height = this.maxHeight + 'px'; + this.scrollerBack.style.height = this.maxHeight + 'px'; + this.scroller.style.height = this.sh + 'px'; + if (this.max > this.maxHeight) { + this.ww = this.sb - this.ss; + this.scroll = true; + } + if (this.miniCanvas) { + this.tmpCanvas = document.createElement('canvas'); + this.tmpCanvas.width = this.imageSize[0]; + this.tmpCanvas.height = this.imageSize[1]; + this.tmpCtx = this.tmpCanvas.getContext("2d"); + this.tmpCtx.fillStyle = this.canvasBg; + this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); + } + let item, n; //, l = this.sb; + for (let i = 0; i < this.length; i++) { + n = this.list[i]; + item = this.dom('div', this.css.item + 'padding:0px ' + (this.m + 1) + 'px; width:' + this.ww + 'px; height:' + this.itemHeight + 'px; line-height:' + (this.itemHeight - 2) + 'px; color:' + this.colors.text + '; background:' + this.colors.back + ';'); + item.name = 'item' + i; + item.id = i; + item.select = false; + item.posy = (this.itemHeight + 1) * i; + this.listIn.appendChild(item); + this.items.push(item); + if (n === this.value) this.current = item; + + //if( this.isWithImage ) item.appendChild( this.tmpImage[n] ); + if (!this.isWithImage) item.textContent = n; + if (this.miniCanvas) { + let c = new Image(); + c.src = this.tmpCanvas.toDataURL(); + + //item.style.marginLeft = (this.imageSize[0]+8)+'px' + + /*let c = document.createElement('canvas') + c.width = this.imageSize[0] + c.height = this.imageSize[1] + let ctx = c.getContext("2d") + ctx.fillStyle = this.canvasBg + ctx.fillRect(0, 0, this.imageSize[0], this.imageSize[1])*/ + + //c.style.cssText = 'position:relative; pointer-events:none; display:inline-block; float:left; margin-left:0px; margin-right:5px; top:2px' + // c.style.cssText =' flex-shrink: 0;' + + c.style.cssText = 'margin-right:4px;'; + + //c.style.cssText = 'display:flex; align-content: flex-start; flex-wrap: wrap;' + //item.style.float = 'right' + item.appendChild(c); + this.tmpImage[n] = c; + } + if (this.dragout) { + item.img = this.tmpImage[n]; + item.style.pointerEvents = 'auto'; + item.draggable = "true"; + item.addEventListener('dragstart', this.dragstart || function () {/*console.log('drag start')*/}); + item.addEventListener('drag', this.drag || function () {/*console.log('drag start')*/}); + //item.addEventListener('dragover', this); + //item.addEventListener('dragenter', this); + item.addEventListener('dragleave', function () { + Roots.fakeUp(); + }); + item.addEventListener('dragend', this.dragend || function () {/*console.log('drag end')*/}.bind(this)); + //item.addEventListener('drop', function(){console.log('drop')}) + } + } + this.setTopItem(); + if (this.isSelectable) this.selected(); + } + drawImage(name, image, x, y, w, h) { + this.tmpCtx.clearRect(0, 0, this.imageSize[0], this.imageSize[1]); + this.tmpCtx.drawImage(image, x, y, w, h, 0, 0, this.imageSize[0], this.imageSize[1]); + this.tmpImage[name].src = this.tmpCanvas.toDataURL(); + + /*let c = this.tmpImage[name] + let ctx = c.getContext("2d") + ctx.drawImage(image, x, y, w, h, 0, 0, this.imageSize[0], this.imageSize[1])*/ + } + addImages() { + let lng = this.list.length; + for (let i = 0; i < lng; i++) { + this.items[i].appendChild(this.tmpImage[this.list[i]]); + } + this.setTopItem(); + } + setValue(value) { + if (!isNaN(value)) this.value = this.list[value];else this.value = value; + + //this.tmpId = value + + this.setTopItem(); + } + setTopItem() { + if (this.staticTop) return; + if (this.isWithImage) { + if (!this.preLoadComplete) return; + if (!this.c[3].children.length) { + this.canvas = document.createElement('canvas'); + this.canvas.width = this.imageSize[0]; + this.canvas.height = this.imageSize[1]; + this.canvas.style.cssText = 'margin-right:4px;'; + this.ctx = this.canvas.getContext("2d"); + this.c[3].style.textAlign = 'left'; + this.c[3].style.justifyContent = 'left'; + this.c[3].appendChild(this.canvas); + } + this.tmpImage[this.value]; + this.ctx.drawImage(this.tmpImage[this.value], 0, 0, this.imageSize[2], this.imageSize[3], 0, 0, this.imageSize[0], this.imageSize[1]); + } else this.c[3].textContent = this.value; + if (this.miniCanvas) { + if (!this.c[3].children.length) { + this.canvas = document.createElement('canvas'); + this.canvas.width = this.imageSize[0]; + this.canvas.height = this.imageSize[1]; + this.canvas.style.cssText = 'margin-right:4px;'; + this.ctx = this.canvas.getContext("2d"); + this.c[3].style.textAlign = 'left'; + this.c[3].style.justifyContent = 'left'; + this.c[3].appendChild(this.canvas); + } + this.ctx.drawImage(this.tmpImage[this.value], 0, 0); + } + } + + // ----- LIST + + update(y) { + if (!this.scroll) return; + y = y < 0 ? 0 : y; + y = y > this.range ? this.range : y; + this.topList = -Math.floor(y / this.ratio); + this.listIn.style.top = this.topList + 'px'; + this.scroller.style.top = Math.floor(y) + 'px'; + this.py = y; + } + parentHeight(t) { + if (this.group !== null) this.group.calc(t);else if (this.isUI) this.main.calc(t); + } + open(first) { + super.open(); + this.update(0); + this.h = this.maxHeight + this.baseH + 5; + if (!this.scroll) { + this.topList = 0; + this.h = this.baseH + 5 + this.max; + this.scroller.style.display = 'none'; + this.scrollerBack.style.display = 'none'; + } else { + this.scroller.style.display = 'block'; + this.scrollerBack.style.display = 'block'; + } + this.s[0].height = this.h + 'px'; + this.s[2].display = 'block'; + if (this.up) { + this.zone.y -= this.h - (this.baseH - 10); + this.setSvg(this.c[4], 'd', this.svgs.g1); + } else { + this.setSvg(this.c[4], 'd', this.svgs.g2); + } + this.rSizeContent(); + let t = this.h - this.baseH; + this.zone.h = this.h; + if (!first) this.parentHeight(t); + } + close() { + super.close(); + if (this.up) this.zone.y += this.h - (this.baseH - 10); + let t = this.h - this.baseH; + this.h = this.baseH; + this.s[0].height = this.h + 'px'; + this.s[2].display = 'none'; + this.setSvg(this.c[4], 'd', this.svgs.g1); + this.zone.h = this.h; + this.parentHeight(-t); + } + + // ----- + + text(txt) { + this.c[3].textContent = txt; + } + rSizeContent() { + let i = this.length; + while (i--) this.listIn.children[i].style.width = this.ww + 'px'; + } + rSize() { + super.rSize(); + + //Proto.prototype.rSize.call( this ); + + let s = this.s; + let w = this.sb; + let d = this.sa; + if (s[2] === undefined) return; + s[2].width = w + 'px'; + s[2].left = d + 'px'; + s[3].width = w + 'px'; + s[3].left = d + 'px'; + s[4].left = d + w - 15 + 'px'; + this.ww = w; + if (this.max > this.maxHeight) this.ww = w - this.ss; + if (this.isOpen) this.rSizeContent(); + } } - class Numeric extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.setTypeNumber( o ); - - this.allway = o.allway || false; - - this.isDown = false; - this.value = [0]; - this.multy = 1; - this.invmulty = 1; - this.isSingle = true; - this.isAngle = false; - this.isVector = false; - - if( o.isAngle ){ - this.isAngle = true; - this.multy = Tools.torad; - this.invmulty = Tools.todeg; - } - - this.isDrag = o.drag || false; - - if( o.value !== undefined ){ - if( !isNaN(o.value) ){ - this.value = [o.value]; - } else if( o.value instanceof Array ){ - this.value = o.value; - this.isSingle = false; - } else if( o.value instanceof Object ){ - this.value = []; - if( o.value.x !== undefined ) this.value[0] = o.value.x; - if( o.value.y !== undefined ) this.value[1] = o.value.y; - if( o.value.z !== undefined ) this.value[2] = o.value.z; - if( o.value.w !== undefined ) this.value[3] = o.value.w; - this.isSingle = false; - this.isVector = true; - } - } - - this.lng = this.value.length; - this.tmp = []; - - this.current = -1; - this.prev = { x:0, y:0, d:0, v:0 }; - - let cc = this.colors; - - // bg - this.c[2] = this.dom( 'div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h-8) + 'px;' ); - - this.cMode = []; - - let i = this.lng; - while(i--){ - - if( this.isAngle ) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed( this.precision ); - this.c[3+i] = this.dom( 'div', this.css.txtselect + 'top:1px; height:'+(this.h-2)+'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;'); - if(o.center) this.c[2+i].style.textAlign = 'center'; - this.c[3+i].textContent = this.value[i]; - this.c[3+i].style.color = this.colors.text; - this.c[3+i].isNum = true; - this.cMode[i] = 0; - - } - - // selection - this.selectId = 3 + this.lng; - this.c[this.selectId] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.cursorId = 4 + this.lng; - this.c[ this.cursorId ] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); - - this.init(); - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - - let i = this.lng; - let t = this.tmp; - - while( i-- ){ - if( l.x>t[i][0] && l.x t[i][0] && l.x < t[i][2]) return i; + } + return ''; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown(e) { + let name = this.testZone(e); + if (!this.isDown) { + this.isDown = true; + if (name !== '') { + this.current = name; + this.prev = { + x: e.clientX, + y: e.clientY, + d: 0, + v: this.isSingle ? parseFloat(this.value) : parseFloat(this.value[this.current]) + }; + this.setInput(this.c[3 + this.current]); + } + return this.mousemove(e); + } + return false; + } + mouseup(e) { + if (this.isDown) { + this.isDown = false; + this.prev = { + x: 0, + y: 0, + d: 0, + v: 0 + }; + return this.mousemove(e); + } + return false; + } + mousemove(e) { + let nup = false; + let x = 0; + let name = this.testZone(e); + if (name === '') this.cursor();else { + if (!this.isDrag) this.cursor('text');else this.cursor(this.current !== -1 ? 'move' : 'pointer'); + } + if (this.isDrag) { + if (this.current !== -1) { + this.prev.d += e.clientX - this.prev.x - (e.clientY - this.prev.y); + let n = this.prev.v + this.prev.d * this.step; + this.value[this.current] = this.numValue(n); + this.c[3 + this.current].textContent = this.value[this.current]; + this.validate(); + this.prev.x = e.clientX; + this.prev.y = e.clientY; + nup = true; + } + } else { + if (this.isDown) x = e.clientX - this.zone.x - 3; + if (this.current !== -1) x -= this.tmp[this.current][0]; + return this.upInput(x, this.isDown); + } + return nup; + } + + // ---------------------- + + reset() { + let nup = false; + return nup; + } + setValue(v) { + if (this.isVector) { + if (v.x !== undefined) this.value[0] = v.x; + if (v.y !== undefined) this.value[1] = v.y; + if (v.z !== undefined) this.value[2] = v.z; + if (v.w !== undefined) this.value[3] = v.w; + } else { + this.value = this.isSingle ? [v] : v; + } + this.update(); + } + sameStr(str) { + let i = this.value.length; + while (i--) this.c[3 + i].textContent = str; + } + update(up) { + let i = this.value.length; + while (i--) { + this.value[i] = this.numValue(this.value[i] * this.invmulty); + this.c[3 + i].textContent = this.value[i]; + } + if (up) this.send(); + } + send(v) { + v = v || this.value; + this.isSend = true; + if (this.objectLink !== null) { + if (this.isVector) { + this.objectLink[this.objectKey].fromArray(v); + } else { + this.objectLink[this.objectKey] = v; + } + } + if (this.callback) this.callback(v, this.objectKey); + this.isSend = false; + } + + // ---------------------- + // INPUT + // ---------------------- + + select(c, e, w, t) { + let s = this.s; + let d = this.current !== -1 ? this.tmp[this.current][0] + 5 : 0; + s[this.cursorId].width = '1px'; + s[this.cursorId].left = d + c + 'px'; + s[this.selectId].left = d + e + 'px'; + s[this.selectId].width = w + 'px'; + this.c[this.selectId].innerHTML = t; + } + unselect() { + let s = this.s; + if (!s) return; + this.c[this.selectId].innerHTML = ''; + s[this.selectId].width = 0 + 'px'; + s[this.cursorId].width = 0 + 'px'; + } + validate(force) { + let ar = []; + let i = this.lng; + if (this.allway) force = true; + while (i--) { + if (!isNaN(this.c[3 + i].textContent)) { + let nx = this.numValue(this.c[3 + i].textContent); + this.c[3 + i].textContent = nx; + this.value[i] = nx; + } else { + // not number + this.c[3 + i].textContent = this.value[i]; + } + ar[i] = this.value[i] * this.multy; + } + if (!force) return; + this.send(this.isSingle ? ar[0] : ar); + } + + // ---------------------- + // REZISE + // ---------------------- + + rSize() { + super.rSize(); + let sx = this.colors.sx; + let ss = sx * (this.lng - 1); + let w = (this.sb - ss) / this.lng; //(( this.sb + sx ) / this.lng )-sx + let s = this.s; + let i = this.lng; + while (i--) { + //this.tmp[i] = [ Math.floor( this.sa + ( w * i )+( 5 * i )), w ]; + this.tmp[i] = [this.sa + w * i + sx * i, w]; + this.tmp[i][2] = this.tmp[i][0] + this.tmp[i][1]; + s[3 + i].left = this.tmp[i][0] + 'px'; + s[3 + i].width = this.tmp[i][1] + 'px'; + } + } } - class Slide extends Proto { - constructor(o = {}) { - super(o); - - if (o.easing <= 0) throw "Easing must be > 0"; - this.easing = o.easing || 1; - - this.setTypeNumber(o); - - this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; - - //this.defaultBorderColor = this.colors.hide; - - this.isDown = false; - this.isOver = false; - this.allway = o.allway || false; - - this.isDeg = o.isDeg || false; - this.isCyclic = o.cyclic || false; - - this.firstImput = false; - - let cc = this.colors; - - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - this.c[2] = this.dom( - "div", - this.css.txtselect + - "border:none; background:none; width:47px; color:" + - cc.text + - ";" - ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); - this.c[3] = this.dom( - "div", - this.css.basic + " top:0; height:" + this.h + "px;" - ); - - this.c[4] = this.dom( - "div", - this.css.basic + - "background:" + - cc.back + - "; top:2px; height:" + - (this.h - 4) + - "px;" - ); - this.c[5] = this.dom( - "div", - this.css.basic + - "left:4px; top:5px; height:" + - (this.h - 10) + - "px; background:" + - cc.text + - ";" - ); - - this.c[2].isNum = true; - //this.c[2].style.height = (this.h-4) + 'px'; - //this.c[2].style.lineHeight = (this.h-8) + 'px'; - this.c[2].style.height = this.h - 2 + "px"; - this.c[2].style.lineHeight = this.h - 10 + "px"; - - if (this.model !== 0) { - let r1 = 4, - h1 = 4, - h2 = 8, - ww = this.h - 6, - ra = 16; - - if (this.model === 2) { - r1 = 0; - h1 = 2; - h2 = 4; - ra = 2; - ww = (this.h - 6) * 0.5; - } - - if (this.model === 3) this.c[5].style.visible = "none"; - - this.c[4].style.borderRadius = r1 + "px"; - this.c[4].style.height = h2 + "px"; - this.c[4].style.top = this.h * 0.5 - h1 + "px"; - this.c[5].style.borderRadius = r1 * 0.5 + "px"; - this.c[5].style.height = h1 + "px"; - this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; - - //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); - this.c[6] = this.dom( - "div", - this.css.basic + - "border-radius:" + - ra + - "px; margin-left:" + - -ww * 0.5 + - "px; background:" + - cc.text + - "; left:4px; top:3px; height:" + - (this.h - 6) + - "px; width:" + - ww + - "px;" - ); - } - - this.init(); - } - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - - if (l.x >= this.txl) return "text"; - else if (l.x >= this.sa) return "scroll"; - else return ""; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (this.isDown) this.isDown = false; - } - - mousedown(e) { - let name = this.testZone(e); - - if (!name) return false; - - if (name === "scroll") { - this.isDown = true; - this.old = this.value; - this.mousemove(e); - } - - /*if( name === 'text' ){ - this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); - }*/ - - return true; - } - - mousemove(e) { - let nup = false; - - let name = this.testZone(e); - - if (name === "scroll") { - this.mode(1); - this.cursor("w-resize"); - //} else if(name === 'text'){ - //this.cursor('pointer'); - } else { - this.cursor(); - } - - if (this.isDown) { - let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; - - // lo mapeo al rango 0 ... 1 - nNormalized = Math.min(1, Math.max(0, nNormalized)); - - // aplico easing - let nEased = Math.pow(nNormalized, this.easing); // easing - - let nNew = nEased * this.range + this.min; - let nNewSlider = nNormalized * this.range + this.min; - - this.sliderValue = this.numValue(nNewSlider); - - let delta = nNew - this.old; - - let steps; - if (delta >= this.step || delta <= this.step) { - steps = Math.floor(delta / this.step); - this.value = this.numValue(this.old + steps * this.step); - // value without easing applied - - this.update(true); - this.old = this.value; - } - //console.log("n, normalized, value", nNew, nNormalized, this.value); - nup = true; - } - - return nup; - } - - wheel(e) { - let name = this.testZone(e); - - if (name === "scroll") { - let v = this.value - this.step * e.delta; - - if (v > this.max) { - v = this.isCyclic ? this.min : this.max; - } else if (v < this.min) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue(v); - this.old = v; - this.update(true); - - return true; - } - - return false; - } - - //keydown: function ( e ) { return true; }, - - // ---------------------- - - validate() { - let n = this.c[2].textContent; - - if (!isNaN(n)) { - this.value = this.numValue(n); - this.update(true); - } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - } - - reset() { - //this.clearInput(); - this.isDown = false; - this.mode(0); - } - - mode(mode) { - let s = this.s; - let cc = this.colors; - - switch (mode) { - case 0: // base - // s[2].border = '1px solid ' + this.colors.hide; - s[2].color = cc.text; - s[4].background = cc.back; - s[5].background = cc.text; - if (this.model !== 0) s[6].background = cc.text; //cc.button; - break; - case 1: // scroll over - //s[2].border = '1px dashed ' + this.colors.hide; - s[2].color = cc.textOver; - s[4].background = cc.back; - s[5].background = cc.textOver; - if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; - break; - } - } - - update(up) { - let normalized = (this.value - this.min) / this.range; - - let uneased = - this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); - - let ww = Math.floor(this.ww * uneased); - //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); - - if (this.model !== 3) this.s[5].width = ww + "px"; - if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; - this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - - if (up) this.send(); - } - - rSize() { - super.rSize(); - - let w = this.sb - this.sc; - this.ww = w - 6; - - let tx = this.sc; - if (this.isUI || !this.simple) tx = this.sc + 10; - this.txl = this.w - tx + 2; - - //let ty = Math.floor(this.h * 0.5) - 8; - - let s = this.s; - - s[2].width = this.sc - 6 + "px"; - s[2].left = this.txl + 4 + "px"; - //s[2].top = ty + 'px'; - s[3].left = this.sa + "px"; - s[3].width = w + "px"; - s[4].left = this.sa + "px"; - s[4].width = w + "px"; - s[5].left = this.sa + 3 + "px"; - - this.update(); - } + class Slide extends Proto { + constructor(o = {}) { + super(o); + if (o.easing <= 0) throw "Easing must be > 0"; + this.easing = o.easing || 1; + this.setTypeNumber(o); + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + + //this.defaultBorderColor = this.colors.hide; + + this.isDown = false; + this.isOver = false; + this.allway = o.allway || false; + this.isDeg = o.isDeg || false; + this.isCyclic = o.cyclic || false; + this.firstImput = false; + let cc = this.colors; + + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + this.c[2] = this.dom("div", this.css.txtselect + "border:none; background:none; width:47px; color:" + cc.text + ";"); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); + this.c[3] = this.dom("div", this.css.basic + " top:0; height:" + this.h + "px;"); + this.c[4] = this.dom("div", this.css.basic + "background:" + cc.back + "; top:2px; height:" + (this.h - 4) + "px;"); + this.c[5] = this.dom("div", this.css.basic + "left:4px; top:5px; height:" + (this.h - 10) + "px; background:" + cc.text + ";"); + this.c[2].isNum = true; + //this.c[2].style.height = (this.h-4) + 'px'; + //this.c[2].style.lineHeight = (this.h-8) + 'px'; + this.c[2].style.height = this.h - 2 + "px"; + this.c[2].style.lineHeight = this.h - 10 + "px"; + if (this.model !== 0) { + let r1 = 4, + h1 = 4, + h2 = 8, + ww = this.h - 6, + ra = 16; + if (this.model === 2) { + r1 = 0; + h1 = 2; + h2 = 4; + ra = 2; + ww = (this.h - 6) * 0.5; + } + if (this.model === 3) this.c[5].style.visible = "none"; + this.c[4].style.borderRadius = r1 + "px"; + this.c[4].style.height = h2 + "px"; + this.c[4].style.top = this.h * 0.5 - h1 + "px"; + this.c[5].style.borderRadius = r1 * 0.5 + "px"; + this.c[5].style.height = h1 + "px"; + this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; + + //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); + this.c[6] = this.dom("div", this.css.basic + "border-radius:" + ra + "px; margin-left:" + -ww * 0.5 + "px; background:" + cc.text + "; left:4px; top:3px; height:" + (this.h - 6) + "px; width:" + ww + "px;"); + } + this.init(); + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + if (l.x >= this.txl) return "text";else if (l.x >= this.sa) return "scroll";else return ""; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (this.isDown) this.isDown = false; + } + mousedown(e) { + let name = this.testZone(e); + if (!name) return false; + if (name === "scroll") { + this.isDown = true; + this.old = this.value; + this.mousemove(e); + } + + /*if( name === 'text' ){ + this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); + }*/ + + return true; + } + mousemove(e) { + let nup = false; + let name = this.testZone(e); + if (name === "scroll") { + this.mode(1); + this.cursor("w-resize"); + //} else if(name === 'text'){ + //this.cursor('pointer'); + } else { + this.cursor(); + } + if (this.isDown) { + let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; + + // lo mapeo al rango 0 ... 1 + nNormalized = Math.min(1, Math.max(0, nNormalized)); + + // aplico easing + let nEased = Math.pow(nNormalized, this.easing); // easing + + let nNew = nEased * this.range + this.min; + let nNewSlider = nNormalized * this.range + this.min; + this.sliderValue = this.numValue(nNewSlider); + let delta = nNew - this.old; + let steps; + if (delta >= this.step || delta <= this.step) { + steps = Math.floor(delta / this.step); + this.value = this.numValue(this.old + steps * this.step); + // value without easing applied + + this.update(true); + this.old = this.value; + } + //console.log("n, normalized, value", nNew, nNormalized, this.value); + nup = true; + } + return nup; + } + wheel(e) { + let name = this.testZone(e); + if (name === "scroll") { + let v = this.value - this.step * e.delta; + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } + this.setValue(v); + this.old = v; + this.update(true); + return true; + } + return false; + } + + //keydown: function ( e ) { return true; }, + + // ---------------------- + + validate() { + let n = this.c[2].textContent; + if (!isNaN(n)) { + this.value = this.numValue(n); + this.update(true); + } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + } + reset() { + //this.clearInput(); + this.isDown = false; + this.mode(0); + } + mode(mode) { + let s = this.s; + let cc = this.colors; + switch (mode) { + case 0: + // base + // s[2].border = '1px solid ' + this.colors.hide; + s[2].color = cc.text; + s[4].background = cc.back; + s[5].background = cc.text; + if (this.model !== 0) s[6].background = cc.text; //cc.button; + break; + case 1: + // scroll over + //s[2].border = '1px dashed ' + this.colors.hide; + s[2].color = cc.textOver; + s[4].background = cc.back; + s[5].background = cc.textOver; + if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; + break; + } + } + update(up) { + let normalized = (this.value - this.min) / this.range; + let uneased = this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); + let ww = Math.floor(this.ww * uneased); + //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); + + if (this.model !== 3) this.s[5].width = ww + "px"; + if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; + this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + if (up) this.send(); + } + rSize() { + super.rSize(); + let w = this.sb - this.sc; + this.ww = w - 6; + let tx = this.sc; + if (this.isUI || !this.simple) tx = this.sc + 10; + this.txl = this.w - tx + 2; + + //let ty = Math.floor(this.h * 0.5) - 8; + + let s = this.s; + s[2].width = this.sc - 6 + "px"; + s[2].left = this.txl + 4 + "px"; + //s[2].top = ty + 'px'; + s[3].left = this.sa + "px"; + s[3].width = w + "px"; + s[4].left = this.sa + "px"; + s[4].width = w + "px"; + s[5].left = this.sa + 3 + "px"; + this.update(); + } } - class TextInput extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.cmode = 0; - - this.value = o.value !== undefined ? o.value : ''; - this.placeHolder = o.placeHolder || ''; - - this.allway = o.allway || false; - this.editable = o.edit !== undefined ? o.edit : true; - - this.isDown = false; - - let cc = this.colors; - - // text - this.c[2] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[2].textContent = this.value; - - // selection - this.c[3] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.c[4] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); - - // fake - this.c[5] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; border:none; justify-content: center; font-style: italic; color:'+cc.border+';' ); - if( this.value === '' ) this.c[5].textContent = this.placeHolder; - - - - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.x >= this.sa ) return 'text'; - return ''; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if(!this.editable) return; - - if( this.isDown ){ - this.isDown = false; - return this.mousemove( e ); - } - - return false; - - } - - mousedown ( e ) { - - if(!this.editable) return; - - let name = this.testZone( e ); - - if( !this.isDown ){ - this.isDown = true; - if( name === 'text' ) this.setInput( this.c[2] ); - return this.mousemove( e ); - } - - return false; - - } - - mousemove ( e ) { - - if(!this.editable) return; - - let name = this.testZone( e ); - - //let l = this.local; - //if( l.x === -1 && l.y === -1 ){ return;} - - //if( l.x >= this.sa ) this.cursor('text'); - //else this.cursor(); - - let x = 0; - - if( name === 'text' ) this.cursor('text'); - else this.cursor(); - - if( this.isDown ) x = e.clientX - this.zone.x; - - return this.upInput( x - this.sa -3, this.isDown ); - - } - - update ( ) { - - this.c[2].textContent = this.value; - - } - - // ---------------------- - - reset () { - - this.cursor(); - - } - - // ---------------------- - // INPUT - // ---------------------- - - select ( c, e, w, t ) { - - let s = this.s; - let d = this.sa + 5; - s[4].width = '1px'; - s[4].left = ( d + e ) + 'px'; - - s[3].left = ( d + e ) + 'px'; - s[3].width = w + 'px'; - this.c[3].innerHTML = t; - - } - - unselect () { - - let s = this.s; - if(!s) return; - s[3].width = 0 + 'px'; - this.c[3].innerHTML = 't'; - s[4].width = 0 + 'px'; - - } - - validate ( force ) { - - if( this.allway ) force = true; - - this.value = this.c[2].textContent; - - if(this.value !== '') this.c[5].textContent = ''; - else this.c[5].textContent = this.placeHolder; - - if( !force ) return; - - this.send(); - - } - - // ---------------------- - // REZISE - // ---------------------- - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - - s[5].left = this.sa + 'px'; - s[5].width = this.sb + 'px'; - - } - - + class TextInput extends Proto { + constructor(o = {}) { + super(o); + this.cmode = 0; + this.value = o.value !== undefined ? o.value : ''; + this.placeHolder = o.placeHolder || ''; + this.allway = o.allway || false; + this.editable = o.edit !== undefined ? o.edit : true; + this.isDown = false; + let cc = this.colors; + + // text + this.c[2] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border + '; border-radius:' + this.radius + 'px;'); + this.c[2].textContent = this.value; + + // selection + this.c[3] = this.dom('div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h - 4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.c[4] = this.dom('div', this.css.basic + 'top:2px; height:' + (this.h - 4) + 'px; width:0px; background:' + cc.text + ';'); + + // fake + this.c[5] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; border:none; justify-content: center; font-style: italic; color:' + cc.border + ';'); + if (this.value === '') this.c[5].textContent = this.placeHolder; + this.init(); + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (l.x >= this.sa) return 'text'; + return ''; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (!this.editable) return; + if (this.isDown) { + this.isDown = false; + return this.mousemove(e); + } + return false; + } + mousedown(e) { + if (!this.editable) return; + let name = this.testZone(e); + if (!this.isDown) { + this.isDown = true; + if (name === 'text') this.setInput(this.c[2]); + return this.mousemove(e); + } + return false; + } + mousemove(e) { + if (!this.editable) return; + let name = this.testZone(e); + + //let l = this.local; + //if( l.x === -1 && l.y === -1 ){ return;} + + //if( l.x >= this.sa ) this.cursor('text'); + //else this.cursor(); + + let x = 0; + if (name === 'text') this.cursor('text');else this.cursor(); + if (this.isDown) x = e.clientX - this.zone.x; + return this.upInput(x - this.sa - 3, this.isDown); + } + update() { + this.c[2].textContent = this.value; + } + + // ---------------------- + + reset() { + this.cursor(); + } + + // ---------------------- + // INPUT + // ---------------------- + + select(c, e, w, t) { + let s = this.s; + let d = this.sa + 5; + s[4].width = '1px'; + s[4].left = d + e + 'px'; + s[3].left = d + e + 'px'; + s[3].width = w + 'px'; + this.c[3].innerHTML = t; + } + unselect() { + let s = this.s; + if (!s) return; + s[3].width = 0 + 'px'; + this.c[3].innerHTML = 't'; + s[4].width = 0 + 'px'; + } + validate(force) { + if (this.allway) force = true; + this.value = this.c[2].textContent; + if (this.value !== '') this.c[5].textContent = '';else this.c[5].textContent = this.placeHolder; + if (!force) return; + this.send(); + } + + // ---------------------- + // REZISE + // ---------------------- + + rSize() { + super.rSize(); + let s = this.s; + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + s[5].left = this.sa + 'px'; + s[5].width = this.sb + 'px'; + } } - class Title extends Proto { - - constructor( o = {} ) { - - super( o ); - - let prefix = o.prefix || ''; - - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:right; width:60px; line-height:'+ (this.h-8) + 'px; color:' + this.colors.text ); - - if( this.h === 31 ){ - - this.s[0].height = this.h + 'px'; - this.s[1].top = 8 + 'px'; - this.c[2].style.top = 8 + 'px'; - - } - - let s = this.s; - - s[1].justifyContent = o.align || 'left'; - //s[1].textAlign = o.align || 'left'; - s[1].fontWeight = o.fontWeight || 'bold'; - - - this.c[1].textContent = this.txt.substring(0,1).toUpperCase() + this.txt.substring(1).replace("-", " "); - this.c[2].textContent = prefix; - - this.init(); - - } - - text( txt ) { - - this.c[1].textContent = txt; - - } - - text2( txt ) { - - this.c[2].textContent = txt; - - } - - rSize() { - - super.rSize(); - this.s[1].width = this.w + 'px'; //- 50 + 'px'; - this.s[2].left = this.w + 'px';//- ( 50 + 26 ) + 'px'; - - } - - setColor( c ) { - this.s[1].color = c; - this.s[2].color = c; - } - + class Title extends Proto { + constructor(o = {}) { + super(o); + let prefix = o.prefix || ''; + this.c[2] = this.dom('div', this.css.txt + 'justify-content:right; width:60px; line-height:' + (this.h - 8) + 'px; color:' + this.colors.text); + if (this.h === 31) { + this.s[0].height = this.h + 'px'; + this.s[1].top = 8 + 'px'; + this.c[2].style.top = 8 + 'px'; + } + let s = this.s; + s[1].justifyContent = o.align || 'left'; + //s[1].textAlign = o.align || 'left'; + s[1].fontWeight = o.fontWeight || 'bold'; + this.c[1].textContent = this.txt.substring(0, 1).toUpperCase() + this.txt.substring(1).replace("-", " "); + this.c[2].textContent = prefix; + this.init(); + } + text(txt) { + this.c[1].textContent = txt; + } + text2(txt) { + this.c[2].textContent = txt; + } + rSize() { + super.rSize(); + this.s[1].width = this.w + 'px'; //- 50 + 'px'; + this.s[2].left = this.w + 'px'; //- ( 50 + 26 ) + 'px'; + } + setColor(c) { + this.s[1].color = c; + this.s[2].color = c; + } } - class Select extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || ''; - this.isDown = false; - this.onActif = o.onActif || function(){}; - - //let prefix = o.prefix || ''; - const cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+ cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); - //this.c[2].style.color = this.fontColor; - - this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); - this.c[3].textContent = this.value; - - let fltop = Math.floor(this.h*0.5)-7; - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'cursor' ], fill:cc.text, stroke:'none'}); - - this.stat = 1; - this.isActif = false; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - if( l.x > this.sa && l.x < this.sa+30 ) return 'over' - return '0' - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( this.isDown ){ - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove( e ) - } - - return false - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false - - this.isDown = true; - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove( e ) - - } - - mousemove ( e ) { - - let up = false; - let name = this.testZone( e ); - - if( name === 'over' ){ - this.cursor('pointer'); - up = this.mode( this.isDown ? 3 : 2 ); - } else { - up = this.reset(); - } - - return up - - } - - // ---------------------- - - apply ( v ) { - - v = v || ''; - - if( v !== this.value ) { - this.value = v; - this.c[3].textContent = this.value; - this.send(); - } - - this.mode(1); - - } - - update () { - - this.mode( 3 ); - - } - - mode ( n ) { - - let change = false; - let cc = this.colors; - - if( this.stat !== n ){ - - if( n===1 ) this.isActif = false; - if( n===3 ){ - if( !this.isActif ){ this.isActif = true; n=4; this.onActif( this ); } - else { this.isActif = false; } - } - - if( n===2 && this.isActif ) n = 4; - - this.stat = n; - - switch( n ){ - - case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base - case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over - case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.action; break; // down - case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.action; break; // actif - - } - - change = true; - - } - - return change - - - - } - - reset () { - - this.cursor(); - return this.mode( this.isActif ? 4 : 1 ) - - } - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = (this.sa + 40) + 'px'; - s[3].width = (this.sb - 40) + 'px'; - s[4].left = (this.sa+8) + 'px'; - - } - + class Select extends Proto { + constructor(o = {}) { + super(o); + this.value = o.value || ''; + this.isDown = false; + this.onActif = o.onActif || function () {}; + + //let prefix = o.prefix || ''; + const cc = this.colors; + this.c[2] = this.dom('div', this.css.txt + this.css.button + ' top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.buttonBorder + '; border-radius:15px; width:30px; left:10px;'); + //this.c[2].style.color = this.fontColor; + + this.c[3] = this.dom('div', this.css.txtselect + 'height:' + (this.h - 4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder + '; border-radius:' + this.radius + 'px;'); + this.c[3].textContent = this.value; + let fltop = Math.floor(this.h * 0.5) - 7; + this.c[4] = this.dom('path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:' + fltop + 'px;', { + d: this.svgs['cursor'], + fill: cc.text, + stroke: 'none' + }); + this.stat = 1; + this.isActif = false; + this.init(); + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (l.x > this.sa && l.x < this.sa + 30) return 'over'; + return '0'; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (this.isDown) { + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove(e); + } + return false; + } + mousedown(e) { + let name = this.testZone(e); + if (!name) return false; + this.isDown = true; + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove(e); + } + mousemove(e) { + let up = false; + let name = this.testZone(e); + if (name === 'over') { + this.cursor('pointer'); + up = this.mode(this.isDown ? 3 : 2); + } else { + up = this.reset(); + } + return up; + } + + // ---------------------- + + apply(v) { + v = v || ''; + if (v !== this.value) { + this.value = v; + this.c[3].textContent = this.value; + this.send(); + } + this.mode(1); + } + update() { + this.mode(3); + } + mode(n) { + let change = false; + let cc = this.colors; + if (this.stat !== n) { + if (n === 1) this.isActif = false; + if (n === 3) { + if (!this.isActif) { + this.isActif = true; + n = 4; + this.onActif(this); + } else { + this.isActif = false; + } + } + if (n === 2 && this.isActif) n = 4; + this.stat = n; + switch (n) { + case 1: + this.s[2].color = cc.text; + this.s[2].background = cc.button; + break; + // base + case 2: + this.s[2].color = cc.textOver; + this.s[2].background = cc.overoff; + break; + // over + case 3: + this.s[2].color = cc.textOver; + this.s[2].background = cc.action; + break; + // down + case 4: + this.s[2].color = cc.textSelect; + this.s[2].background = cc.action; + break; + // actif + } + change = true; + } + return change; + } + reset() { + this.cursor(); + return this.mode(this.isActif ? 4 : 1); + } + text(txt) { + this.c[3].textContent = txt; + } + rSize() { + super.rSize(); + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = this.sa + 40 + 'px'; + s[3].width = this.sb - 40 + 'px'; + s[4].left = this.sa + 8 + 'px'; + } } - class Bitmap extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || ''; - this.refTexture = o.texture || null; - this.img = null; - - this.isDown = false; - this.neverlock = true; - - - - const cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); - - this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); - this.c[3].textContent = this.value; - - let fltop = Math.floor(this.h*0.5)-7; - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'load' ], fill:cc.text, stroke:'none'}); - - this.stat = 1; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.x > this.sa && l.x < this.sa+30 ) return 'over'; - return '0' - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( this.isDown ){ - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove( e ); - } - - return false; - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false; - - if( name === 'over' ){ - this.isDown = true; - Files.load( { callback:this.changeBitmap.bind(this) } ); - - } - - - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove( e ); - - } - - mousemove ( e ) { - - let up = false; - - let name = this.testZone( e ); - - if( name === 'over' ){ - this.cursor('pointer'); - up = this.mode( this.isDown ? 3 : 2 ); - } else { - up = this.reset(); - } - - return up; - - } - - // ---------------------- - - changeBitmap( img, fname ){ - - if( img ){ - this.img = img; - this.apply( fname ); - } else { - this.img = null; - this.apply( 'null' ); - } - - } - - // ---------------------- - - apply ( v ) { - - v = v || ''; - - if( v !== this.value ) { - this.value = v; - this.c[3].textContent = this.value; - - if( this.img !== null ){ - if( this.objectLink !== null ) this.objectLink[ this.val ] = v; - if( this.callback ) this.callback( this.value, this.img, this.name ); - } - - } - - this.mode(1); - - } - - update () { - - this.mode( 3 ); - - } - - mode ( n ) { - - let change = false; - let cc = this.colors; - - if( this.stat !== n ){ - - this.stat = n; - - switch( n ){ - - case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base - case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over - case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.over; break; // down - case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.select; break; // actif - - } - - change = true; - - } - - return change; - - - - } - - reset () { - - this.cursor(); - return this.mode( this.isActif ? 4 : 1 ); - - } - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = (this.sa + 40) + 'px'; - s[3].width = (this.sb - 40) + 'px'; - s[4].left = (this.sa+8) + 'px'; - - } - + class Bitmap extends Proto { + constructor(o = {}) { + super(o); + this.value = o.value || ''; + this.refTexture = o.texture || null; + this.img = null; + this.isDown = false; + this.neverlock = true; + const cc = this.colors; + this.c[2] = this.dom('div', this.css.txt + this.css.button + ' top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.buttonBorder + '; border-radius:15px; width:30px; left:10px;'); + this.c[3] = this.dom('div', this.css.txtselect + 'height:' + (this.h - 4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder + '; border-radius:' + this.radius + 'px;'); + this.c[3].textContent = this.value; + let fltop = Math.floor(this.h * 0.5) - 7; + this.c[4] = this.dom('path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:' + fltop + 'px;', { + d: this.svgs['load'], + fill: cc.text, + stroke: 'none' + }); + this.stat = 1; + this.init(); + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (l.x > this.sa && l.x < this.sa + 30) return 'over'; + return '0'; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (this.isDown) { + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove(e); + } + return false; + } + mousedown(e) { + let name = this.testZone(e); + if (!name) return false; + if (name === 'over') { + this.isDown = true; + Files.load({ + callback: this.changeBitmap.bind(this) + }); + } + + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove(e); + } + mousemove(e) { + let up = false; + let name = this.testZone(e); + if (name === 'over') { + this.cursor('pointer'); + up = this.mode(this.isDown ? 3 : 2); + } else { + up = this.reset(); + } + return up; + } + + // ---------------------- + + changeBitmap(img, fname) { + if (img) { + this.img = img; + this.apply(fname); + } else { + this.img = null; + this.apply('null'); + } + } + + // ---------------------- + + apply(v) { + v = v || ''; + if (v !== this.value) { + this.value = v; + this.c[3].textContent = this.value; + if (this.img !== null) { + if (this.objectLink !== null) this.objectLink[this.val] = v; + if (this.callback) this.callback(this.value, this.img, this.name); + } + } + this.mode(1); + } + update() { + this.mode(3); + } + mode(n) { + let change = false; + let cc = this.colors; + if (this.stat !== n) { + this.stat = n; + switch (n) { + case 1: + this.s[2].color = cc.text; + this.s[2].background = cc.button; + break; + // base + case 2: + this.s[2].color = cc.textOver; + this.s[2].background = cc.overoff; + break; + // over + case 3: + this.s[2].color = cc.textOver; + this.s[2].background = cc.over; + break; + // down + case 4: + this.s[2].color = cc.textSelect; + this.s[2].background = cc.select; + break; + // actif + } + change = true; + } + return change; + } + reset() { + this.cursor(); + return this.mode(this.isActif ? 4 : 1); + } + text(txt) { + this.c[3].textContent = txt; + } + rSize() { + super.rSize(); + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = this.sa + 40 + 'px'; + s[3].width = this.sb - 40 + 'px'; + s[4].left = this.sa + 8 + 'px'; + } } - //import { Proto } from '../core/Proto.js'; - - class Selector extends Button { - - constructor( o = {} ) { - - if( o.selectable === undefined ) o.selectable = true; - super( o ); - - } - + //import { Proto } from '../core/Proto.js'; + class Selector extends Button { + constructor(o = {}) { + if (o.selectable === undefined) o.selectable = true; + super(o); + } } - class Item extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.p = 100; - this.value = this.txt; - this.status = 1; - - this.itype = o.itype || 'none'; - this.val = this.itype; - - this.graph = this.svgs[ this.itype ]; - - let fltop = Math.floor(this.h*0.5)-7; - - this.c[2] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.graph, fill:this.colors.text, stroke:'none'}); - - this.s[1].marginLeft = 20 + 'px'; - - this.init(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousemove ( e ) { - - this.cursor('pointer'); - - //up = this.modes( this.isDown ? 3 : 2, name ); - - } - - mousedown ( e ) { - - if( this.isUI ) this.main.resetItem(); - - this.selected( true ); - - this.send(); - - return true; - - } - - uiout () { - - if( this.isSelect ) this.mode(3); - else this.mode(1); - - } - - uiover () { - - if( this.isSelect ) this.mode(4); - else this.mode(2); - - } - - update () { - - } - - /*rSize () { - - super.rSize(); - - }*/ - - mode ( n ) { - - let change = false; - - if( this.status !== n ){ - - this.status = n; - let s = this.s, cc = this.colors; - - switch( n ){ - - case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; - case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; - case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; - case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; - - } - - change = true; - - } - - return change; - - } - - reset () { - - this.cursor(); - // return this.mode( 1 ); - - } - - selected ( b ){ - - if( this.isSelect ) this.mode(1); - - this.isSelect = b || false; - - if( this.isSelect ) this.mode(3); - - } - - + class Item extends Proto { + constructor(o = {}) { + super(o); + this.p = 100; + this.value = this.txt; + this.status = 1; + this.itype = o.itype || 'none'; + this.val = this.itype; + this.graph = this.svgs[this.itype]; + let fltop = Math.floor(this.h * 0.5) - 7; + this.c[2] = this.dom('path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:' + fltop + 'px;', { + d: this.graph, + fill: this.colors.text, + stroke: 'none' + }); + this.s[1].marginLeft = 20 + 'px'; + this.init(); + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousemove(e) { + this.cursor('pointer'); + + //up = this.modes( this.isDown ? 3 : 2, name ); + } + mousedown(e) { + if (this.isUI) this.main.resetItem(); + this.selected(true); + this.send(); + return true; + } + uiout() { + if (this.isSelect) this.mode(3);else this.mode(1); + } + uiover() { + if (this.isSelect) this.mode(4);else this.mode(2); + } + update() {} + + /*rSize () { + + super.rSize(); + }*/ + + mode(n) { + let change = false; + if (this.status !== n) { + this.status = n; + let s = this.s, + cc = this.colors; + switch (n) { + case 1: + this.status = 1; + s[1].color = cc.text; + s[0].background = 'none'; + break; + case 2: + this.status = 2; + s[1].color = cc.textOver; + s[0].background = cc.back; + break; + case 3: + this.status = 3; + s[1].color = cc.textSelect; + s[0].background = cc.select; + break; + case 4: + this.status = 4; + s[1].color = cc.textOver; + s[0].background = cc.over; + break; + } + change = true; + } + return change; + } + reset() { + this.cursor(); + // return this.mode( 1 ); + } + selected(b) { + if (this.isSelect) this.mode(1); + this.isSelect = b || false; + if (this.isSelect) this.mode(3); + } } - class Grid extends Proto { - - constructor( o = {} ) { - - super( o ); - - /*this.values = o.values || []; - - if( typeof this.values === 'string' ) this.values = [ this.values ];*/ - - this.values = []; - - if( o.values ){ - if( o.values instanceof Array ){ - this.values = o.values; - } else if( o.values instanceof String ){ - this.values = [ o.values ]; - } else if( o.values instanceof Object ){ - this.refObject = o.values; - for( let g in this.refObject ) this.values.push( g ); - } - } - - this.lng = this.values.length; - - - - this.value = o.value || null; - - - - - let cc = this.colors; - - - this.isSelectable = o.selectable || false; - this.spaces = o.spaces || [ cc.sx, cc.sy ]; - this.bsize = o.bsize || [ 90, this.h ]; - - this.bsizeMax = this.bsize[0]; - - this.tmp = []; - this.stat = []; - this.grid = [ 2, Math.round( this.lng * 0.5 ) ]; - - this.h = ( this.grid[1] * this.bsize[1] ) + ( this.grid[1] * this.spaces[1] ); //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); - - this.c[1].textContent = ''; - //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); - this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1])+'px; border:none;' ); - - let n = 0, b, td, tr, sel; - - this.res = -1; - this.isDown = false; - this.neverlock = true; - - this.buttons = []; - this.stat = []; - this.tmpX = []; - this.tmpY = []; - - for( let i = 0; i < this.grid[1]; i++ ){ - - tr = this.c[2].insertRow(); - tr.style.cssText = 'pointer-events:none;'; - for( let j = 0; j < this.grid[0]; j++ ){ - - td = tr.insertCell(); - td.style.cssText = 'pointer-events:none;'; - - if( this.values[n] ){ - - sel = false; - if( this.values[n] === this.value && this.isSelectable ) sel = true; - - b = document.createElement( 'div' ); - b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:'+this.bsize[0]+'px; height:'+(this.bsize[1]-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; left:auto; right:auto; border-radius:'+this.radius+'px;'; - b.style.background = sel ? cc.select : cc.button; - b.style.color = sel ? cc.textSelect : cc.text; - b.innerHTML = this.values[n]; - td.appendChild( b ); - - this.buttons.push(b); - this.stat.push(1); - - } else { - - b = document.createElement( 'div' ); - b.style.cssText = this.css.txt + 'position:static; width:'+this.bsize[0]+'px; height:'+this.bsize[1]+'px; text-align:center; left:auto; right:auto; background:none;'; - td.appendChild( b ); - - } - - if(j===0) b.style.cssText += 'float:right;'; - else b.style.cssText += 'float:left;'; - - n++; - - } - } - - this.s[0].border = 'none'; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return -1; - - l.y += this.mtop; - - let tx = this.tmpX; - let ty = this.tmpY; - - let id = -1; - let c = -1; - let line = -1; - let i = this.grid[0]; - while( i-- ){ - if( l.x > tx[i][0] && l.x < tx[i][1] ) c = i; - } - - i = this.grid[1]; - while( i-- ){ - if( l.y > ty[i][0] && l.y < ty[i][1] ) line = i; - } - - if(c!==-1 && line!==-1){ - id = c + (line*2); - if(id>this.lng-1) id = -1; - } - - return id; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( !this.isDown ) return false - - this.isDown = false; - if( this.res !== -1 ){ - this.value = this.values[this.res]; - this.send(); - } - - return this.mousemove( e ) - - } - - mousedown ( e ) { - - if( this.isDown ) return false - this.isDown = true; - return this.mousemove( e ) - - } - - mousemove ( e ) { - - let up = false; - this.res = this.testZone( e ); - - if( this.res !== -1 ){ - this.cursor('pointer'); - up = this.modes( this.isDown ? 3 : 2, this.res ); - } else { - up = this.reset(); - } - - return up; - - } - - // ---------------------- - // MODE - // ----------------------- - - modes ( N = 1, id = -1 ) { - - let i = this.lng, w, n, r = false; - - while( i-- ){ - - n = N; - w = this.isSelectable ? this.values[ i ] === this.value : false; - - if( i === id ){ - if( w && n === 2 ) n = 3; - } else { - n = 1; - if( w ) n = 4; - } - - if( this.mode( n, i ) ) r = true; - - } - - return r - - } - - mode ( n, id ) { - - let change = false; - let cc = this.colors, s = this.buttons; - let i = id; - - if( this.stat[id] !== n ){ - - this.stat[id] = n; - - switch( n ){ - - case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; - case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; - case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; - case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; - - } - - change = true; - - } - - return change; - - } - - // ---------------------- - - reset () { - - this.res = -1; - this.cursor(); - return this.modes() - - } - - - label ( string, n ) { - - this.buttons[n].textContent = string; - - } - - icon ( string, y, n ) { - - this.buttons[n].style.padding = ( y || 0 ) +'px 0px'; - this.buttons[n].innerHTML = string; - - } - - testW () { - - let vw = this.spaces[0]*3 + this.bsizeMax*2, rz = false; - if( vw > this.w ) { - this.bsize[0] = ( this.w-(this.spaces[0]*3) ) * 0.5; - rz = true; - } else { - if( this.bsize[0] !== this.bsizeMax ) { - this.bsize[0] = this.bsizeMax; - rz = true; - } - } - - if( !rz ) return; - - let i = this.buttons.length; - while(i--) this.buttons[i].style.width = this.bsize[0] + 'px'; - - } - - rSize () { - - super.rSize(); - - this.testW(); - - let mid; - - this.tmpX = []; - this.tmpY = []; - - for( let j = 0; j < this.grid[0]; j++ ){ - - if(j===0){ - mid = ( this.w*0.5 ) - ( this.spaces[0]*0.5 ); - this.tmpX.push( [ mid-this.bsize[0], mid ] ); - } else { - mid = ( this.w*0.5 ) + ( this.spaces[0]*0.5 ); - this.tmpX.push( [ mid, mid+this.bsize[0] ] ); - } - - } - - mid = this.spaces[1]; - - for( let i = 0; i < this.grid[1]; i++ ){ - - this.tmpY.push( [ mid, mid + this.bsize[1] ] ); - mid += this.bsize[1] + this.spaces[1]; - - } - - } - + class Grid extends Proto { + constructor(o = {}) { + super(o); + + /*this.values = o.values || []; + if( typeof this.values === 'string' ) this.values = [ this.values ];*/ + + this.values = []; + if (o.values) { + if (o.values instanceof Array) { + this.values = o.values; + } else if (o.values instanceof String) { + this.values = [o.values]; + } else if (o.values instanceof Object) { + this.refObject = o.values; + for (let g in this.refObject) this.values.push(g); + } + } + this.lng = this.values.length; + this.value = o.value || null; + let cc = this.colors; + this.isSelectable = o.selectable || false; + this.spaces = o.spaces || [cc.sx, cc.sy]; + this.bsize = o.bsize || [90, this.h]; + this.bsizeMax = this.bsize[0]; + this.tmp = []; + this.stat = []; + this.grid = [2, Math.round(this.lng * 0.5)]; + this.h = this.grid[1] * this.bsize[1] + this.grid[1] * this.spaces[1]; //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); + + this.c[1].textContent = ''; + //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); + this.c[2] = this.dom('table', this.css.basic + 'width:100%; border-spacing: ' + (this.spaces[0] - 2) + 'px ' + this.spaces[1] + 'px; border:none;'); + let n = 0, + b, + td, + tr, + sel; + this.res = -1; + this.isDown = false; + this.neverlock = true; + this.buttons = []; + this.stat = []; + this.tmpX = []; + this.tmpY = []; + for (let i = 0; i < this.grid[1]; i++) { + tr = this.c[2].insertRow(); + tr.style.cssText = 'pointer-events:none;'; + for (let j = 0; j < this.grid[0]; j++) { + td = tr.insertCell(); + td.style.cssText = 'pointer-events:none;'; + if (this.values[n]) { + sel = false; + if (this.values[n] === this.value && this.isSelectable) sel = true; + b = document.createElement('div'); + b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:' + this.bsize[0] + 'px; height:' + (this.bsize[1] - 2) + 'px; border:' + cc.borderSize + 'px solid ' + cc.border + '; left:auto; right:auto; border-radius:' + this.radius + 'px;'; + b.style.background = sel ? cc.select : cc.button; + b.style.color = sel ? cc.textSelect : cc.text; + b.innerHTML = this.values[n]; + td.appendChild(b); + this.buttons.push(b); + this.stat.push(1); + } else { + b = document.createElement('div'); + b.style.cssText = this.css.txt + 'position:static; width:' + this.bsize[0] + 'px; height:' + this.bsize[1] + 'px; text-align:center; left:auto; right:auto; background:none;'; + td.appendChild(b); + } + if (j === 0) b.style.cssText += 'float:right;';else b.style.cssText += 'float:left;'; + n++; + } + } + this.s[0].border = 'none'; + this.init(); + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return -1; + l.y += this.mtop; + let tx = this.tmpX; + let ty = this.tmpY; + let id = -1; + let c = -1; + let line = -1; + let i = this.grid[0]; + while (i--) { + if (l.x > tx[i][0] && l.x < tx[i][1]) c = i; + } + i = this.grid[1]; + while (i--) { + if (l.y > ty[i][0] && l.y < ty[i][1]) line = i; + } + if (c !== -1 && line !== -1) { + id = c + line * 2; + if (id > this.lng - 1) id = -1; + } + return id; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (!this.isDown) return false; + this.isDown = false; + if (this.res !== -1) { + this.value = this.values[this.res]; + this.send(); + } + return this.mousemove(e); + } + mousedown(e) { + if (this.isDown) return false; + this.isDown = true; + return this.mousemove(e); + } + mousemove(e) { + let up = false; + this.res = this.testZone(e); + if (this.res !== -1) { + this.cursor('pointer'); + up = this.modes(this.isDown ? 3 : 2, this.res); + } else { + up = this.reset(); + } + return up; + } + + // ---------------------- + // MODE + // ----------------------- + + modes(N = 1, id = -1) { + let i = this.lng, + w, + n, + r = false; + while (i--) { + n = N; + w = this.isSelectable ? this.values[i] === this.value : false; + if (i === id) { + if (w && n === 2) n = 3; + } else { + n = 1; + if (w) n = 4; + } + if (this.mode(n, i)) r = true; + } + return r; + } + mode(n, id) { + let change = false; + let cc = this.colors, + s = this.buttons; + let i = id; + if (this.stat[id] !== n) { + this.stat[id] = n; + switch (n) { + case 1: + s[i].style.color = cc.text; + s[i].style.background = cc.button; + break; + case 2: + s[i].style.color = cc.textOver; + s[i].style.background = cc.overoff; + break; + case 3: + s[i].style.color = cc.textOver; + s[i].style.background = cc.over; + break; + case 4: + s[i].style.color = cc.textSelect; + s[i].style.background = cc.select; + break; + } + change = true; + } + return change; + } + + // ---------------------- + + reset() { + this.res = -1; + this.cursor(); + return this.modes(); + } + label(string, n) { + this.buttons[n].textContent = string; + } + icon(string, y, n) { + this.buttons[n].style.padding = (y || 0) + 'px 0px'; + this.buttons[n].innerHTML = string; + } + testW() { + let vw = this.spaces[0] * 3 + this.bsizeMax * 2, + rz = false; + if (vw > this.w) { + this.bsize[0] = (this.w - this.spaces[0] * 3) * 0.5; + rz = true; + } else { + if (this.bsize[0] !== this.bsizeMax) { + this.bsize[0] = this.bsizeMax; + rz = true; + } + } + if (!rz) return; + let i = this.buttons.length; + while (i--) this.buttons[i].style.width = this.bsize[0] + 'px'; + } + rSize() { + super.rSize(); + this.testW(); + let mid; + this.tmpX = []; + this.tmpY = []; + for (let j = 0; j < this.grid[0]; j++) { + if (j === 0) { + mid = this.w * 0.5 - this.spaces[0] * 0.5; + this.tmpX.push([mid - this.bsize[0], mid]); + } else { + mid = this.w * 0.5 + this.spaces[0] * 0.5; + this.tmpX.push([mid, mid + this.bsize[0]]); + } + } + mid = this.spaces[1]; + for (let i = 0; i < this.grid[1]; i++) { + this.tmpY.push([mid, mid + this.bsize[1]]); + mid += this.bsize[1] + this.spaces[1]; + } + } } - class Pad2D extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.autoWidth = false; - this.minw = this.w; - this.diam = o.diam || this.w; - - //this.margin = 15; - this.pos = new V2(0,0); - this.maxPos = 90; - - this.model = o.stype || 0; - if( o.mode !== undefined ) this.model = o.mode; - - this.min = o.min === undefined ? -1 : o.min; - this.max = o.max === undefined ? 1 : o.max; - - this.range = (this.max - this.min)*0.5; - - this.cmode = 0; - - - //console.log(this.range) - - this.c[0].style.display = 'block'; - - - - - - this.precision = o.precision === undefined ? 2 : o.precision; - - /*this.bounds = {}; - this.bounds.x1 = o.x1 || -1; - this.bounds.x2 = o.x2 || 1; - this.bounds.y1 = o.y1 || -1; - this.bounds.y2 = o.y2 || 1; - - this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); - this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); - - this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); - this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ - - this.value = ( Array.isArray( o.value ) && o.value.length == 2 ) ? o.value : [ 0, 0 ]; - - - this.h = o.h || this.w + 10; - - this.c[0].style.width = this.w + 'px'; - - // Title - if( this.c[1] !== undefined ) { // with title - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - - } - - //this.top -= this.margin - - let cc = this.colors; - - - // Value - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+ ( this.h - 20 ) + 'px; width:100%; color:' + cc.text ); - this.c[2].textContent = this.value; - - // Pad - - let pad = this.getPad2d(); - - this.setSvg( pad, 'fill', cc.back, 0 ); - this.setSvg( pad, 'fill', cc.button, 1 ); - this.setSvg( pad, 'stroke', cc.back, 2 ); - this.setSvg( pad, 'stroke', cc.back, 3 ); - this.setSvg( pad, 'stroke', cc.text, 4 ); - - this.setSvg( pad, 'viewBox', '0 0 '+this.diam+' '+this.diam ); - this.setCss( pad, { width:this.diam, height:this.diam, left:0, top:this.top }); - - this.c[3] = pad; - - this.init(); - this.setValue(); - - } - - testZone ( e ) { - - let l = this.local; - - if( l.x === -1 && l.y === -1 ) return ''; - - - - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'pad'; - - /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { - return 'pad'; - }*/ - - //return ''; - - } - - mouseup ( e ) { - - this.isDown = false; - return this.mode(0); - - } - - mousedown ( e ) { - - if ( this.testZone(e) === 'pad' ) { - - this.isDown = true; - this.mousemove( e ); - return this.mode(1); - } - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - let x = (this.w*0.5) - ( e.clientX - this.zone.x ); - let y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - - let r = 256 / this.diam; - - x = -(x*r); - y = -(y*r); - - x = Tools.clamp( x, -this.maxPos, this.maxPos ); - y = Tools.clamp( y, -this.maxPos, this.maxPos ); - - //let x = e.clientX - this.zone.x; - //let y = e.clientY - this.zone.y - this.top; - - /*if( x < this.margin ) x = this.margin; - if( x > this.w - this.margin ) x = this.w - this.margin; - if( y < this.margin ) y = this.margin; - if( y > this.w - this.margin ) y = this.w - this.margin;*/ - - //console.log(x,y) - - this.setPos( [ x , y ] ); - - this.update( true ); - - } - - mode ( mode ) { - - if( this.cmode === mode ) return false; - - let cc = this.colors; - - switch( mode ){ - case 0: // base - - this.s[2].color = cc.text; - this.setSvg( this.c[3], 'fill', cc.back, 0); - this.setSvg( this.c[3], 'fill', cc.button, 1); - this.setSvg( this.c[3], 'stroke', cc.back, 2); - this.setSvg( this.c[3], 'stroke', cc.back, 3); - this.setSvg( this.c[3], 'stroke', cc.text, 4 ); - - break; - case 1: // down - - this.s[2].color = cc.textSelect; - this.setSvg( this.c[3], 'fill', cc.backoff, 0); - this.setSvg( this.c[3], 'fill', cc.overoff, 1); - this.setSvg( this.c[3], 'stroke', cc.backoff, 2); - this.setSvg( this.c[3], 'stroke', cc.backoff, 3); - this.setSvg( this.c[3], 'stroke', cc.textSelect, 4 ); - - break; - } - - this.cmode = mode; - return true; - - - - } - - update ( up ) { - - //if( up === undefined ) up = true; - - this.c[2].textContent = this.value; - - this.updateSVG(); - - if( up ) this.send(); - - } - - updateSVG() { - - if ( this.model == 1 ) { - - this.setSvg( this.c[3], 'y1', this.pos.y, 2 ); - this.setSvg( this.c[3], 'y2', this.pos.y, 2 ); - - this.setSvg( this.c[3], 'x1', this.pos.x, 3 ); - this.setSvg( this.c[3], 'x2', this.pos.x, 3 ); - - } - - this.setSvg( this.c[3], 'cx', this.pos.x, 4 ); - this.setSvg( this.c[3], 'cy', this.pos.y, 4 ); - - } - - setPos ( p ) { - - //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; - - this.pos.set( p[0]+128 , p[1]+128 ); - - let r = 1/this.maxPos; - - this.value[0] = ((p[0]*r)*this.range).toFixed( this.precision ); - this.value[1] = ((p[1]*r)*this.range).toFixed( this.precision ); - - } - - setValue ( v, up = false ) { - - if( v === undefined ) v = this.value; - - /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; - if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; - if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; - if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ - - this.value[0] = Math.min( this.max, Math.max( this.min, v[0] ) ).toFixed( this.precision ) * 1; - this.value[1] = Math.min( this.max, Math.max( this.min, v[1] ) ).toFixed( this.precision ) * 1; - - this.pos.set( ((this.value[0]/this.range)*this.maxPos)+128 , ((this.value[1]/this.range)*this.maxPos)+128 ); - - //console.log(this.pos) - - this.update( up ); - - } - - /*lerp( s1, s2, d1, d2, c = true ) { - - let s = ( d2 - d1 ) / ( s2 - s1 ); - - return c ? ( v ) => { - return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 - } : ( v ) => { - return ( v - s1 ) * s + d1 - } - - }*/ - + class Pad2D extends Proto { + constructor(o = {}) { + super(o); + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + + //this.margin = 15; + this.pos = new V2(0, 0); + this.maxPos = 90; + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + this.min = o.min === undefined ? -1 : o.min; + this.max = o.max === undefined ? 1 : o.max; + this.range = (this.max - this.min) * 0.5; + this.cmode = 0; + + //console.log(this.range) + + this.c[0].style.display = 'block'; + this.precision = o.precision === undefined ? 2 : o.precision; + + /*this.bounds = {}; + this.bounds.x1 = o.x1 || -1; + this.bounds.x2 = o.x2 || 1; + this.bounds.y1 = o.y1 || -1; + this.bounds.y2 = o.y2 || 1; + this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); + this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); + this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); + this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ + + this.value = Array.isArray(o.value) && o.value.length == 2 ? o.value : [0, 0]; + this.h = o.h || this.w + 10; + this.c[0].style.width = this.w + 'px'; + + // Title + if (this.c[1] !== undefined) { + // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + } + + //this.top -= this.margin + + let cc = this.colors; + + // Value + this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); + this.c[2].textContent = this.value; + + // Pad + + let pad = this.getPad2d(); + this.setSvg(pad, 'fill', cc.back, 0); + this.setSvg(pad, 'fill', cc.button, 1); + this.setSvg(pad, 'stroke', cc.back, 2); + this.setSvg(pad, 'stroke', cc.back, 3); + this.setSvg(pad, 'stroke', cc.text, 4); + this.setSvg(pad, 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); + this.setCss(pad, { + width: this.diam, + height: this.diam, + left: 0, + top: this.top + }); + this.c[3] = pad; + this.init(); + this.setValue(); + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'pad'; + + /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { + return 'pad'; + }*/ + + //return ''; + } + mouseup(e) { + this.isDown = false; + return this.mode(0); + } + mousedown(e) { + if (this.testZone(e) === 'pad') { + this.isDown = true; + this.mousemove(e); + return this.mode(1); + } + } + mousemove(e) { + if (!this.isDown) return; + let x = this.w * 0.5 - (e.clientX - this.zone.x); + let y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); + let r = 256 / this.diam; + x = -(x * r); + y = -(y * r); + x = Tools.clamp(x, -this.maxPos, this.maxPos); + y = Tools.clamp(y, -this.maxPos, this.maxPos); + + //let x = e.clientX - this.zone.x; + //let y = e.clientY - this.zone.y - this.top; + + /*if( x < this.margin ) x = this.margin; + if( x > this.w - this.margin ) x = this.w - this.margin; + if( y < this.margin ) y = this.margin; + if( y > this.w - this.margin ) y = this.w - this.margin;*/ + + //console.log(x,y) + + this.setPos([x, y]); + this.update(true); + } + mode(mode) { + if (this.cmode === mode) return false; + let cc = this.colors; + switch (mode) { + case 0: + // base + + this.s[2].color = cc.text; + this.setSvg(this.c[3], 'fill', cc.back, 0); + this.setSvg(this.c[3], 'fill', cc.button, 1); + this.setSvg(this.c[3], 'stroke', cc.back, 2); + this.setSvg(this.c[3], 'stroke', cc.back, 3); + this.setSvg(this.c[3], 'stroke', cc.text, 4); + break; + case 1: + // down + + this.s[2].color = cc.textSelect; + this.setSvg(this.c[3], 'fill', cc.backoff, 0); + this.setSvg(this.c[3], 'fill', cc.overoff, 1); + this.setSvg(this.c[3], 'stroke', cc.backoff, 2); + this.setSvg(this.c[3], 'stroke', cc.backoff, 3); + this.setSvg(this.c[3], 'stroke', cc.textSelect, 4); + break; + } + this.cmode = mode; + return true; + } + update(up) { + //if( up === undefined ) up = true; + + this.c[2].textContent = this.value; + this.updateSVG(); + if (up) this.send(); + } + updateSVG() { + if (this.model == 1) { + this.setSvg(this.c[3], 'y1', this.pos.y, 2); + this.setSvg(this.c[3], 'y2', this.pos.y, 2); + this.setSvg(this.c[3], 'x1', this.pos.x, 3); + this.setSvg(this.c[3], 'x2', this.pos.x, 3); + } + this.setSvg(this.c[3], 'cx', this.pos.x, 4); + this.setSvg(this.c[3], 'cy', this.pos.y, 4); + } + setPos(p) { + //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; + + this.pos.set(p[0] + 128, p[1] + 128); + let r = 1 / this.maxPos; + this.value[0] = (p[0] * r * this.range).toFixed(this.precision); + this.value[1] = (p[1] * r * this.range).toFixed(this.precision); + } + setValue(v, up = false) { + if (v === undefined) v = this.value; + + /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; + if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; + if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; + if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ + + this.value[0] = Math.min(this.max, Math.max(this.min, v[0])).toFixed(this.precision) * 1; + this.value[1] = Math.min(this.max, Math.max(this.min, v[1])).toFixed(this.precision) * 1; + this.pos.set(this.value[0] / this.range * this.maxPos + 128, this.value[1] / this.range * this.maxPos + 128); + + //console.log(this.pos) + + this.update(up); + } + + /*lerp( s1, s2, d1, d2, c = true ) { + let s = ( d2 - d1 ) / ( s2 - s1 ); + return c ? ( v ) => { + return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 + } : ( v ) => { + return ( v - s1 ) * s + d1 + } + }*/ } - const add = function () { - - let a = arguments; - - let type, o, ref = false, n = null; - - if( typeof a[0] === 'string' ){ - - type = a[0]; - o = a[1] || {}; - - } else if ( typeof a[0] === 'object' ){ // like dat gui - - ref = true; - if( a[2] === undefined ) [].push.call(a, {}); - - type = a[2].type ? a[2].type : autoType( a[0][a[1]], a[2] ); - - o = a[2]; - o.name = a[1]; - if (o.hasOwnProperty("displayName")) o.name = o.displayName; - - if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } - else o.value = a[0][a[1]]; - - } - - let name = type.toLowerCase(); - - if( name === 'group' ){ - o.add = add; - //o.dx = 8 - } - - switch( name ){ - - case 'bool': case 'boolean': n = new Bool(o); break; - case 'button': n = new Button(o); break; - case 'circular': n = new Circular(o); break; - case 'color': n = new Color(o); break; - case 'fps': n = new Fps(o); break; - case 'graph': n = new Graph(o); break; - case 'group': n = new Group(o); break; - case 'joystick': n = new Joystick(o); break; - case 'knob': n = new Knob(o); break; - case 'list': n = new List(o); break; - case 'numeric': case 'number': n = new Numeric(o); break; - case 'slide': n = new Slide(o); break; - case 'textInput': case 'string': n = new TextInput(o); break; - case 'title': case 'text': n = new Title(o); break; - case 'select': n = new Select(o); break; - case 'bitmap': n = new Bitmap(o); break; - case 'selector': n = new Selector(o); break; - case 'empty': case 'space': n = new Empty(o); break; - case 'item': n = new Item(o); break; - case 'grid': n = new Grid(o); break; - case 'pad2d': case 'pad': n = new Pad2D(o); break; - - } - - - - if( n !== null ){ - - Roots.needResize = true; - - if( ref ) n.setReferency( a[0], a[1] ); - return n; - - } - - }; - - const autoType = function ( v, o ) { - - let type = 'slide'; - - if( typeof v === 'boolean' ) type = 'bool'; - else if( typeof v === 'string' ){ - - if( v.substring(0,1) === '#' ) type = 'color'; - else type = 'string'; - - } else if( typeof v === 'number' ){ - - if( o.ctype ) type = 'color'; - else type = 'slide'; - - } else if( typeof v === 'array' && v instanceof Array ){ - - if( typeof v[0] === 'number' ) type = 'number'; - else if( typeof v[0] === 'string' ) type = 'list'; - - } else if( typeof v === 'object' && v instanceof Object ){ - - if( v.x !== undefined ) type = 'number'; - else type = 'list'; - - } - - return type - + const add = function () { + let a = arguments; + let type, + o, + ref = false, + n = null; + if (typeof a[0] === 'string') { + type = a[0]; + o = a[1] || {}; + } else if (typeof a[0] === 'object') { + // like dat gui + + ref = true; + if (a[2] === undefined) [].push.call(a, {}); + type = a[2].type ? a[2].type : autoType(a[0][a[1]], a[2]); + o = a[2]; + o.name = a[1]; + if (o.hasOwnProperty("displayName")) o.name = o.displayName; + if (type === 'list' && !o.list) { + o.list = a[0][a[1]]; + } else o.value = a[0][a[1]]; + } + let name = type.toLowerCase(); + if (name === 'group') { + o.add = add; + //o.dx = 8 + } + switch (name) { + case 'bool': + case 'boolean': + n = new Bool(o); + break; + case 'button': + n = new Button(o); + break; + case 'circular': + n = new Circular(o); + break; + case 'color': + n = new Color(o); + break; + case 'fps': + n = new Fps(o); + break; + case 'graph': + n = new Graph(o); + break; + case 'group': + n = new Group(o); + break; + case 'joystick': + n = new Joystick(o); + break; + case 'knob': + n = new Knob(o); + break; + case 'list': + n = new List(o); + break; + case 'numeric': + case 'number': + n = new Numeric(o); + break; + case 'slide': + n = new Slide(o); + break; + case 'textInput': + case 'string': + n = new TextInput(o); + break; + case 'title': + case 'text': + n = new Title(o); + break; + case 'select': + n = new Select(o); + break; + case 'bitmap': + n = new Bitmap(o); + break; + case 'selector': + n = new Selector(o); + break; + case 'empty': + case 'space': + n = new Empty(o); + break; + case 'item': + n = new Item(o); + break; + case 'grid': + n = new Grid(o); + break; + case 'pad2d': + case 'pad': + n = new Pad2D(o); + break; + } + if (n !== null) { + Roots.needResize = true; + if (ref) n.setReferency(a[0], a[1]); + return n; + } }; + const autoType = function (v, o) { + let type = 'slide'; + if (typeof v === 'boolean') type = 'bool';else if (typeof v === 'string') { + if (v.substring(0, 1) === '#') type = 'color';else type = 'string'; + } else if (typeof v === 'number') { + if (o.ctype) type = 'color';else type = 'slide'; + } else if (typeof v === 'array' && v instanceof Array) { + if (typeof v[0] === 'number') type = 'number';else if (typeof v[0] === 'string') type = 'list'; + } else if (typeof v === 'object' && v instanceof Object) { + if (v.x !== undefined) type = 'number';else type = 'list'; + } + return type; + }; + + /** + * @author lth / https://github.com/lo-th + */ + + class Gui { + constructor(o = {}) { + this.isGui = true; + this.name = "gui"; + + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; + + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors);else this.colors = Tools.defineColor(o); + + //this.cleanning = false + + // style + this.css = Tools.cloneCss(); + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 + + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; + + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") ? o.addDOMEventListeners : true; + this.callback = o.callback === undefined ? null : o.callback; + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + this.cn = ""; + + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; + this.size.h = this.size.h < 11 ? 11 : this.size.h; + + // local mouse and zone + this.local = new V2().neg(); + this.zone = { + x: 0, + y: 0, + w: this.size.w, + h: 0 + }; + + // virtual mouse + this.mouse = new V2().neg(); + this.h = 0; + //this.prevY = -1; + this.sw = 0; + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); + + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; + this.autoResize = o.autoResize === undefined ? true : o.autoResize; + + // default position + this.isCenter = o.center || false; + this.cssGui = o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; + this.isNewTarget = false; + let cc = this.colors; + this.content = Tools.dom("div", this.css.basic + " width:0px; height:auto; top:0px; background:" + cc.content + "; " + this.cssGui); + this.innerContent = Tools.dom("div", this.css.basic + "width:100%; top:0; left:0; height:auto; overflow:hidden;"); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); + + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom("div", this.css.basic + flexible + "width:100%; left:0; "); + this.innerContent.appendChild(this.inner); + + // scroll + this.scrollBG = Tools.dom("div", this.css.basic + "right:0; top:0; width:" + (this.size.s - 1) + "px; height:10px; display:none; background:" + cc.background + ";"); + this.content.appendChild(this.scrollBG); + this.scroll = Tools.dom("div", this.css.basic + "background:" + cc.button + "; right:2px; top:0; width:" + (this.size.s - 4) + "px; height:10px;"); + this.scrollBG.appendChild(this.scroll); + + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; + let r = cc.radius; + this.bottom = Tools.dom("div", this.css.txt + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + r + "px; border-bottom-left-radius:" + r + "px; justify-content:center; height:" + this.bh + "px; line-height:" + (this.bh - 5) + "px; color:" + cc.text + ";"); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen ? this.bottomText[1] : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } + if (this.parent !== null) this.parent.appendChild(this.content); + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } + + // height transition + this.transition = o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + this.setWidth(); + if (this.isCanvas) this.makeCanvas(); + Roots.add(this); + } + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN + }); + } + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN + }); + } + triggerMouseUp(x, y) { + /* + clientX,clientY are no used when isCanvas==true + */ + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN + }); + } + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); + Roots.needReZone = true; + } + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = "height " + this.transition + "s ease-out"; + this.content.style.transition = "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } + + // ---------------------- + // CANVAS + // ---------------------- + + onDraw() {} + makeCanvas() { + this.canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + + //console.log( this.canvas.width, this.canvas.height ) + } + draw(force) { + if (this.canvas === null) return; + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } + + ////// + + getDom() { + return this.content; + } + noMouse() { + this.mouse.neg(); + } + setMouse(uv, flip = true) { + if (flip) this.mouse.set(Math.round(uv.x * this.canvas.width), this.canvas.height - Math.round(uv.y * this.canvas.height));else this.mouse.set(Math.round(uv.x * this.canvas.width), Math.round(uv.y * this.canvas.height)); + //this.mouse.set( m.x, m.y ); + + //console.log("setMouse "+uv.x+" "+uv.y) + } + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } + onChange(f) { + this.callback = f || null; + return this; + } + + // ---------------------- + // STYLES + // ---------------------- + + mode(n) { + let needChange = false; + let cc = this.colors; + if (n !== this.cn) { + this.cn = n; + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } + needChange = true; + } + return needChange; + } + + // ---------------------- + // TARGET + // ---------------------- + + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + this.proto = null; + this.current = -1; + + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + + Roots.cursor(); + return true; + } + + // ---------------------- + // ZONE TEST + // ---------------------- + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + this.isReset = false; + let name = ""; + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom";else name = l.x > s ? "scroll" : "content"; + return name; + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent(e) { + //if( this.cleanning ) return + + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; + let change = false; + let protoChange = false; + let name = this.testZone(e); + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } + if (!name) return; + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); + if (this.proto) protoChange = this.proto.handleEvent(e); + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) change = this.onWheel(e); + if (!Roots.lock) { + this.getNext(e, change); + } + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen ? this.bottomText[1] : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + break; + } + if (this.isDown) change = true; + if (protoChange) change = true; + if (type === "keyup") change = true; + if (type === "keydown") change = true; + if (change) this.draw(); + } + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } + + // ---------------------- + // RESET + // ---------------------- + + reset(force) { + if (this.isReset) return; + + //this.resetItem(); + + this.mouse.neg(); + this.isDown = false; + + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); + if (r || r2) this.draw(true); + this.isReset = true; + + //Roots.lock = false; + } + + // ---------------------- + // ADD NODE + // ---------------------- + + add() { + //if(this.cleanning) this.cleanning = false + + let a = arguments; + let ontop = false; + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { + isUI: true, + main: this + });else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } + let u = add.apply(this, a); + if (u === null) return; + if (ontop) this.uis.unshift(u);else this.uis.push(u); + this.calc(); + this.isEmpty = false; + return u; + } + + // remove one node + + remove(n) { + if (n.dispose) n.dispose(); + } + + // call after uis clear + + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } + + // clear all gui + + empty() { + //this.cleanning = true + + //this.close(); + + let i = this.uis.length, + item; + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } + this.uis = []; + this.isEmpty = true; + this.calc(); + } + clear() { + this.empty(); + } + clear2() { + setTimeout(this.empty.bind(this), 0); + } + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } + + // ---------------------- + // ITEMS SPECIAL + // ---------------------- + + resetItem() { + if (!this.isItemMode) return; + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } + setItem(name) { + if (!this.isItemMode) return; + name = name || ""; + this.resetItem(); + if (!name) { + this.update(0); + return; + } + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } + + // ---------------------- + // SCROLL + // ---------------------- + + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; + if (b) { + this.total = this.h; + this.maxView = this.maxHeight; + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; + this.range = this.maxView - this.sh; + this.oy = Tools.clamp(this.oy, 0, this.range); + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } + update(y) { + y = Tools.clamp(y, 0, this.range); + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } + + // ---------------------- + // RESIZE FUNCTION + // ---------------------- - /** - * @author lth / https://github.com/lo-th - */ - - class Gui { - constructor(o = {}) { - this.isGui = true; - - this.name = "gui"; - - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; - - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors); - else this.colors = Tools.defineColor(o); - - //this.cleanning = false - - // style - this.css = Tools.cloneCss(); - - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 - - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; - - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") - ? o.addDOMEventListeners - : true; - - this.callback = o.callback === undefined ? null : o.callback; - - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; - - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - - this.cn = ""; - - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; - - this.size.h = this.size.h < 11 ? 11 : this.size.h; - - // local mouse and zone - this.local = new V2().neg(); - this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; - - // virtual mouse - this.mouse = new V2().neg(); - - this.h = 0; - //this.prevY = -1; - this.sw = 0; - - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); - - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; - - this.autoResize = o.autoResize === undefined ? true : o.autoResize; - - // default position - this.isCenter = o.center || false; - this.cssGui = - o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; - - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; - - this.isNewTarget = false; - - let cc = this.colors; - - this.content = Tools.dom( - "div", - this.css.basic + - " width:0px; height:auto; top:0px; background:" + - cc.content + - "; " + - this.cssGui - ); - - this.innerContent = Tools.dom( - "div", - this.css.basic + - "width:100%; top:0; left:0; height:auto; overflow:hidden;" - ); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); - - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom( - "div", - this.css.basic + flexible + "width:100%; left:0; " - ); - this.innerContent.appendChild(this.inner); - - // scroll - this.scrollBG = Tools.dom( - "div", - this.css.basic + - "right:0; top:0; width:" + - (this.size.s - 1) + - "px; height:10px; display:none; background:" + - cc.background + - ";" - ); - this.content.appendChild(this.scrollBG); - - this.scroll = Tools.dom( - "div", - this.css.basic + - "background:" + - cc.button + - "; right:2px; top:0; width:" + - (this.size.s - 4) + - "px; height:10px;" - ); - this.scrollBG.appendChild(this.scroll); - - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; - - let r = cc.radius; - this.bottom = Tools.dom( - "div", - this.css.txt + - "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + - r + - "px; border-bottom-left-radius:" + - r + - "px; justify-content:center; height:" + - this.bh + - "px; line-height:" + - (this.bh - 5) + - "px; color:" + - cc.text + - ";" - ); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - this.bottom.style.background = cc.background; - - // - - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; - - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } - - if (this.parent !== null) this.parent.appendChild(this.content); - - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } - - // height transition - this.transition = - o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - - this.setWidth(); - - if (this.isCanvas) this.makeCanvas(); - - Roots.add(this); - } - - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseUp(x, y) { - /* - - clientX,clientY are no used when isCanvas==true - */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); - - Roots.needReZone = true; - } - - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = - "height " + this.transition + "s ease-out"; - this.content.style.transition = - "height " + this.transition + "s ease-out"; - this.bottom.style.transition = "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } - - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } - - // ---------------------- - // CANVAS - // ---------------------- - - onDraw() {} - - makeCanvas() { - this.canvas = document.createElementNS( - "http://www.w3.org/1999/xhtml", - "canvas" - ); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - - //console.log( this.canvas.width, this.canvas.height ) - } - - draw(force) { - if (this.canvas === null) return; - - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } - - ////// - - getDom() { - return this.content; - } - - noMouse() { - this.mouse.neg(); - } - - setMouse(uv, flip = true) { - if (flip) - this.mouse.set( - Math.round(uv.x * this.canvas.width), - this.canvas.height - Math.round(uv.y * this.canvas.height) - ); - else - this.mouse.set( - Math.round(uv.x * this.canvas.width), - Math.round(uv.y * this.canvas.height) - ); - //this.mouse.set( m.x, m.y ); - - //console.log("setMouse "+uv.x+" "+uv.y) - } - - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } - - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } - - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } - - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } - - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } - - onChange(f) { - this.callback = f || null; - return this; - } - - // ---------------------- - // STYLES - // ---------------------- - - mode(n) { - let needChange = false; - let cc = this.colors; - - if (n !== this.cn) { - this.cn = n; - - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } - - needChange = true; - } - - return needChange; - } - - // ---------------------- - // TARGET - // ---------------------- - - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } - - this.proto = null; - this.current = -1; - - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - - Roots.cursor(); - return true; - } - - // ---------------------- - // ZONE TEST - // ---------------------- - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - - this.isReset = false; - - let name = ""; - - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; - else name = l.x > s ? "scroll" : "content"; - - return name; - } - - // ---------------------- - // EVENTS - // ---------------------- - - handleEvent(e) { - //if( this.cleanning ) return - - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; - - let change = false; - let protoChange = false; - - let name = this.testZone(e); - - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; - - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } - - if (!name) return; - - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - - if (Roots.isMobile && type === "mousedown") this.getNext(e, change); - - if (this.proto) protoChange = this.proto.handleEvent(e); - - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) - change = this.onWheel(e); - - if (!Roots.lock) { - this.getNext(e, change); - } - - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } - - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); - - break; - } - - if (this.isDown) change = true; - if (protoChange) change = true; - - if (type === "keyup") change = true; - if (type === "keydown") change = true; - - if (change) this.draw(); - } - - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); - - if (next !== this.current) { - this.clearTarget(); - this.current = next; - this.isNewTarget = true; - } - - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } - - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } - - // ---------------------- - // RESET - // ---------------------- - - reset(force) { - if (this.isReset) return; - - //this.resetItem(); - - this.mouse.neg(); - this.isDown = false; - - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); - - if (r || r2) this.draw(true); - - this.isReset = true; - - //Roots.lock = false; - } - - // ---------------------- - // ADD NODE - // ---------------------- - - add() { - //if(this.cleanning) this.cleanning = false - - let a = arguments; - let ontop = false; - - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; - - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); - else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } - - let u = add.apply(this, a); - - if (u === null) return; - - if (ontop) this.uis.unshift(u); - else this.uis.push(u); - - this.calc(); - - this.isEmpty = false; - - return u; - } - - // remove one node - - remove(n) { - if (n.dispose) n.dispose(); - } - - // call after uis clear - - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } - - // clear all gui - - empty() { - //this.cleanning = true - - //this.close(); - - let i = this.uis.length, - item; - - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } - - this.uis = []; - this.isEmpty = true; - this.calc(); - } - - clear() { - this.empty(); - } - - clear2() { - setTimeout(this.empty.bind(this), 0); - } - - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } - - // ---------------------- - // ITEMS SPECIAL - // ---------------------- - - resetItem() { - if (!this.isItemMode) return; - - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } - - setItem(name) { - if (!this.isItemMode) return; - - name = name || ""; - this.resetItem(); - - if (!name) { - this.update(0); - return; - } - - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) - this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } - - // ---------------------- - // SCROLL - // ---------------------- - - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; - - if (b) { - this.total = this.h; - - this.maxView = this.maxHeight; - - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; - - this.range = this.maxView - this.sh; - - this.oy = Tools.clamp(this.oy, 0, this.range); - - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } - - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } - - update(y) { - y = Tools.clamp(y, 0, this.range); - - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } - - // ---------------------- - // RESIZE FUNCTION - // ---------------------- - - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } - - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } - - setHeight() { - if (this.tmp) clearTimeout(this.tmp); - - this.zone.h = this.bh; - this.isScroll = false; - - if (this.isOpen) { - this.h = this.calcUis(); - - let hhh = this.forceHeight - ? this.forceHeight + this.zone.y - : window.innerHeight; - - this.maxHeight = hhh - this.zone.y - this.bh; - - let diff = this.h - this.maxHeight; - - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } - - this.upScroll(this.isScroll); - - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; - - if (this.forceHeight && this.lockHeight) - this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } - - rezone() { - Roots.needReZone = true; - } - - setWidth(w) { - if (w) this.zone.w = w; - - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) - this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } - - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } + setHeight() { + if (this.tmp) clearTimeout(this.tmp); + this.zone.h = this.bh; + this.isScroll = false; + if (this.isOpen) { + this.h = this.calcUis(); + let hhh = this.forceHeight ? this.forceHeight + this.zone.y : window.innerHeight; + this.maxHeight = hhh - this.zone.y - this.bh; + let diff = this.h - this.maxHeight; + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + this.upScroll(this.isScroll); + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + if (this.forceHeight && this.lockHeight) this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + rezone() { + Roots.needReZone = true; + } + setWidth(w) { + if (w) this.zone.w = w; + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } } exports.Files = Files; @@ -9066,4 +7182,3 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbG9vcDogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKFIuaXNMb29wKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUi5sb29wKTtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBSLnVwZGF0ZSgpO1xyXG4gICAgLy8gaWYgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gYSB2YWx1ZSBnZW5lcmF0ZWQgZXh0ZXJuYWxseSwgdGhlIEdVSSBuZWVkcyB0byBiZSByZWRyYXduXHJcbiAgICBpZiAoUi51aVswXSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIlxyXG5pbXBvcnQgeyBCb29sIH0gZnJvbSAnLi4vcHJvdG8vQm9vbC5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL3Byb3RvL0J1dHRvbi5qcyc7XHJcbmltcG9ydCB7IENpcmN1bGFyIH0gZnJvbSAnLi4vcHJvdG8vQ2lyY3VsYXIuanMnO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL3Byb3RvL0NvbG9yLmpzJztcclxuaW1wb3J0IHsgRnBzIH0gZnJvbSAnLi4vcHJvdG8vRnBzLmpzJztcclxuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9wcm90by9HcmFwaC5qcyc7XHJcbmltcG9ydCB7IEdyb3VwICB9IGZyb20gJy4uL3Byb3RvL0dyb3VwLmpzJztcclxuaW1wb3J0IHsgSm95c3RpY2sgfSBmcm9tICcuLi9wcm90by9Kb3lzdGljay5qcyc7XHJcbmltcG9ydCB7IEtub2IgfSBmcm9tICcuLi9wcm90by9Lbm9iLmpzJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uL3Byb3RvL0xpc3QuanMnO1xyXG5pbXBvcnQgeyBOdW1lcmljIH0gZnJvbSAnLi4vcHJvdG8vTnVtZXJpYy5qcyc7XHJcbmltcG9ydCB7IFNsaWRlIH0gZnJvbSAnLi4vcHJvdG8vU2xpZGUuanMnO1xyXG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9wcm90by9UZXh0SW5wdXQuanMnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL3Byb3RvL1RpdGxlLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0LmpzJztcclxuaW1wb3J0IHsgQml0bWFwIH0gZnJvbSAnLi4vcHJvdG8vQml0bWFwLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICcuLi9wcm90by9TZWxlY3Rvci5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi4vcHJvdG8vRW1wdHkuanMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vcHJvdG8vSXRlbS5qcyc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi9wcm90by9HcmlkLmpzJztcclxuaW1wb3J0IHsgUGFkMkQgfSBmcm9tICcuLi9wcm90by9QYWQyRC5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcblxyXG5leHBvcnQgY29uc3QgYWRkID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGFyZ3VtZW50czsgXHJcblxyXG4gICAgICAgIGxldCB0eXBlLCBvLCByZWYgPSBmYWxzZSwgbiA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVswXSA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgICAgICB0eXBlID0gYVswXTtcclxuICAgICAgICAgICAgbyA9IGFbMV0gfHwge307XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBhWzBdID09PSAnb2JqZWN0JyApeyAvLyBsaWtlIGRhdCBndWlcclxuXHJcbiAgICAgICAgICAgIHJlZiA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoYSwge30pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzJdLnR5cGUgPyBhWzJdLnR5cGUgOiBhdXRvVHlwZSggYVswXVthWzFdXSwgYVsyXSApO1xyXG5cclxuICAgICAgICAgICAgbyA9IGFbMl07XHJcbiAgICAgICAgICAgIG8ubmFtZSA9IGFbMV07XHJcbiAgICAgICAgICAgIGlmIChvLmhhc093blByb3BlcnR5KFwiZGlzcGxheU5hbWVcIikpIG8ubmFtZSA9IG8uZGlzcGxheU5hbWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ2xpc3QnICYmICFvLmxpc3QgKXsgby5saXN0ID0gYVswXVthWzFdXTsgfVxyXG4gICAgICAgICAgICBlbHNlIG8udmFsdWUgPSBhWzBdW2FbMV1dO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2dyb3VwJyApeyBcclxuICAgICAgICAgICAgby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIC8vby5keCA9IDhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCggbmFtZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnYm9vbCc6IGNhc2UgJ2Jvb2xlYW4nOiBuID0gbmV3IEJvb2wobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdidXR0b24nOiBuID0gbmV3IEJ1dHRvbihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NpcmN1bGFyJzogbiA9IG5ldyBDaXJjdWxhcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzogbiA9IG5ldyBDb2xvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Zwcyc6IG4gPSBuZXcgRnBzKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JhcGgnOiBuID0gbmV3IEdyYXBoKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOiBuID0gbmV3IEdyb3VwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnam95c3RpY2snOiBuID0gbmV3IEpveXN0aWNrKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAna25vYic6IG4gPSBuZXcgS25vYihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xpc3QnOiBuID0gbmV3IExpc3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdudW1lcmljJzogY2FzZSAnbnVtYmVyJzogbiA9IG5ldyBOdW1lcmljKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2xpZGUnOiBuID0gbmV3IFNsaWRlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGV4dElucHV0JzogY2FzZSAnc3RyaW5nJzogbiA9IG5ldyBUZXh0SW5wdXQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6IGNhc2UgJ3RleHQnOiBuID0gbmV3IFRpdGxlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzogbiA9IG5ldyBTZWxlY3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdiaXRtYXAnOiBuID0gbmV3IEJpdG1hcChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdG9yJzogbiA9IG5ldyBTZWxlY3RvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzogY2FzZSAnc3BhY2UnOiBuID0gbmV3IEVtcHR5KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaXRlbSc6IG4gPSBuZXcgSXRlbShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyaWQnOiBuID0gbmV3IEdyaWQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwYWQyZCc6IGNhc2UgJ3BhZCc6IG4gPSBuZXcgUGFkMkQobyk7IGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggbiAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGlmKCByZWYgKSBuLnNldFJlZmVyZW5jeSggYVswXSwgYVsxXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gbjtcclxuXHJcbiAgICAgICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGF1dG9UeXBlID0gZnVuY3Rpb24gKCB2LCBvICkge1xyXG5cclxuICAgIGxldCB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIGlmKCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkgdHlwZSA9ICdib29sJyBcclxuICAgIGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgaWYoIHYuc3Vic3RyaW5nKDAsMSkgPT09ICcjJyApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3N0cmluZycgXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ251bWJlcicgKXsgXHJcblxyXG4gICAgICAgIGlmKCBvLmN0eXBlICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ2FycmF5JyAmJiB2IGluc3RhbmNlb2YgQXJyYXkgKXtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB2WzBdID09PSAnbnVtYmVyJyApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgaWYoIHR5cGVvZiB2WzBdID09PSAnc3RyaW5nJyApIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcblxyXG4gICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHlwZVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBhZGQgfSBmcm9tIFwiLi9hZGQuanNcIjtcclxuaW1wb3J0IHsgVjIgfSBmcm9tIFwiLi9WMi5qc1wiO1xyXG5cclxuLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIEd1aSB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICB0aGlzLmlzR3VpID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBcImd1aVwiO1xyXG5cclxuICAgIC8vIGZvciAzZFxyXG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xyXG4gICAgdGhpcy5zY3JlZW4gPSBudWxsO1xyXG4gICAgdGhpcy5wbGFuZSA9IG8ucGxhbmUgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjb2xvclxyXG4gICAgaWYgKG8uY29uZmlnKSBvLmNvbG9ycyA9IG8uY29uZmlnO1xyXG4gICAgaWYgKG8uY29sb3JzKSB0aGlzLnNldENvbmZpZyhvLmNvbG9ycyk7XHJcbiAgICBlbHNlIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcblxyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMuY3NzID0gVG9vbHMuY2xvbmVDc3MoKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG4gICAgdGhpcy50bXBBZGQgPSBudWxsO1xyXG4gICAgLy90aGlzLnRtcEggPSAwXHJcblxyXG4gICAgdGhpcy5pc0NhbnZhcyA9IG8uaXNDYW52YXMgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIE1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIC8vIG9wdGlvbiB0byBkZWZpbmUgd2hldGhlciB0aGUgZXZlbnQgbGlzdGVuZXJzIHNob3VsZCBiZSBhZGRlZCBvciBub3RcclxuICAgIFJvb3RzLmFkZERPTUV2ZW50TGlzdGVuZXJzID0gby5oYXNPd25Qcm9wZXJ0eShcImFkZERPTUV2ZW50TGlzdGVuZXJzXCIpXHJcbiAgICAgID8gby5hZGRET01FdmVudExpc3RlbmVyc1xyXG4gICAgICA6IHRydWU7XHJcblxyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG5cclxuICAgIHRoaXMuZm9yY2VIZWlnaHQgPSBvLm1heEhlaWdodCB8fCAwO1xyXG4gICAgdGhpcy5sb2NrSGVpZ2h0ID0gby5sb2NrSGVpZ2h0IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNJdGVtTW9kZSA9IG8uaXRlbU1vZGUgIT09IHVuZGVmaW5lZCA/IG8uaXRlbU1vZGUgOiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmNuID0gXCJcIjtcclxuXHJcbiAgICAvLyBzaXplIGRlZmluZVxyXG4gICAgdGhpcy5zaXplID0gVG9vbHMuc2l6ZTtcclxuICAgIGlmIChvLnAgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnAgPSBvLnA7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS53ID0gby53O1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUuaCA9IG8uaDtcclxuICAgIGlmIChvLnMgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnMgPSBvLnM7XHJcblxyXG4gICAgdGhpcy5zaXplLmggPSB0aGlzLnNpemUuaCA8IDExID8gMTEgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICAvLyBsb2NhbCBtb3VzZSBhbmQgem9uZVxyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG4gICAgdGhpcy56b25lID0geyB4OiAwLCB5OiAwLCB3OiB0aGlzLnNpemUudywgaDogMCB9O1xyXG5cclxuICAgIC8vIHZpcnR1YWwgbW91c2VcclxuICAgIHRoaXMubW91c2UgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmggPSAwO1xyXG4gICAgLy90aGlzLnByZXZZID0gLTE7XHJcbiAgICB0aGlzLnN3ID0gMDtcclxuXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICAvLyBib3R0b20gYW5kIGNsb3NlIGhlaWdodFxyXG4gICAgdGhpcy5pc1dpdGhDbG9zZSA9IG8uY2xvc2UgIT09IHVuZGVmaW5lZCA/IG8uY2xvc2UgOiB0cnVlO1xyXG4gICAgdGhpcy5iaCA9ICF0aGlzLmlzV2l0aENsb3NlID8gMCA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG8uYXV0b1Jlc2l6ZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG8uYXV0b1Jlc2l6ZTtcclxuXHJcbiAgICAvLyBkZWZhdWx0IHBvc2l0aW9uXHJcbiAgICB0aGlzLmlzQ2VudGVyID0gby5jZW50ZXIgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmNzc0d1aSA9XHJcbiAgICAgIG8uY3NzICE9PSB1bmRlZmluZWQgPyBvLmNzcyA6IHRoaXMuaXNDZW50ZXIgPyBcIlwiIDogXCJyaWdodDoxMHB4O1wiO1xyXG5cclxuICAgIHRoaXMuaXNPcGVuID0gby5vcGVuICE9PSB1bmRlZmluZWQgPyBvLm9wZW4gOiB0cnVlO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmRlY2FsID0gMDtcclxuICAgIHRoaXMucmF0aW8gPSAxO1xyXG4gICAgdGhpcy5veSA9IDA7XHJcblxyXG4gICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIHRoaXMuY29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiIHdpZHRoOjBweDsgaGVpZ2h0OmF1dG87IHRvcDowcHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmNvbnRlbnQgK1xyXG4gICAgICAgIFwiOyBcIiArXHJcbiAgICAgICAgdGhpcy5jc3NHdWlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyB0aGlzLmNzcy5idXR0b24gKyAnd2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyQ29udGVudCk7XHJcblxyXG4gICAgLy90aGlzLmlubmVyID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyAnKVxyXG4gICAgdGhpcy51c2VGbGV4ID0gdHJ1ZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/IFwiZGlzcGxheTpmbGV4OyBmbGV4LWZsb3c6IHJvdyB3cmFwO1wiIDogXCJcIjsgLy8nIGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnN0YXJ0OyBhbGlnbi1pdGVtczpzdGFydDtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYWxpZ24taXRlbXM6IGNlbnRlcjsnO1xyXG4gICAgdGhpcy5pbm5lciA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwid2lkdGg6MTAwJTsgbGVmdDowOyBcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuaW5uZXJDb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXIpO1xyXG5cclxuICAgIC8vIHNjcm9sbFxyXG4gICAgdGhpcy5zY3JvbGxCRyA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwicmlnaHQ6MDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSAxKSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7IGRpc3BsYXk6bm9uZTsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYmFja2dyb3VuZCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxCRyk7XHJcblxyXG4gICAgdGhpcy5zY3JvbGwgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJ1dHRvbiArXHJcbiAgICAgICAgXCI7IHJpZ2h0OjJweDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSA0KSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLnNjcm9sbEJHLmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsKTtcclxuXHJcbiAgICAvLyBib3R0b20gYnV0dG9uXHJcbiAgICB0aGlzLmJvdHRvbVRleHQgPSBvLmJvdHRvbVRleHQgfHwgW1wib3BlblwiLCBcImNsb3NlXCJdO1xyXG5cclxuICAgIGxldCByID0gY2MucmFkaXVzO1xyXG4gICAgdGhpcy5ib3R0b20gPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dCArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6YXV0bzsgYm90dG9tOjA7IGxlZnQ6MDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGhlaWdodDpcIiArXHJcbiAgICAgICAgdGhpcy5iaCArXHJcbiAgICAgICAgXCJweDsgbGluZS1oZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmJoIC0gNSkgK1xyXG4gICAgICAgIFwicHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTsgLy8gYm9yZGVyLXRvcDoxcHggc29saWQgJytUb29scy5jb2xvcnMuc3Ryb2tlKyc7Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5ib3R0b20pO1xyXG4gICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIC8vXHJcblxyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnBhcmVudCAhPT0gdW5kZWZpbmVkID8gby5wYXJlbnQgOiBudWxsO1xyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnRhcmdldCAhPT0gdW5kZWZpbmVkID8gby50YXJnZXQgOiB0aGlzLnBhcmVudDtcclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgPT09IG51bGwgJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5wYXJlbnQgPSBkb2N1bWVudC5ib2R5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcyAmJiB0aGlzLnBhcmVudCA9PT0gbnVsbCkgdGhpcy5pc0NhbnZhc09ubHkgPSB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XHJcbiAgICAgIG8udHJhbnNpdGlvbiA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGVpZ2h0IHRyYW5zaXRpb25cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9XHJcbiAgICAgIG8udHJhbnNpdGlvbiAhPT0gdW5kZWZpbmVkID8gby50cmFuc2l0aW9uIDogVG9vbHMudHJhbnNpdGlvbjtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24pIHNldFRpbWVvdXQodGhpcy5hZGRUcmFuc2l0aW9uLmJpbmQodGhpcyksIDEwMDApO1xyXG5cclxuICAgIHRoaXMuc2V0V2lkdGgoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5tYWtlQ2FudmFzKCk7XHJcblxyXG4gICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlRG93bih4LCB5KSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcmRvd25cIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VNb3ZlKCkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJtb3ZlXCIsXHJcbiAgICAgIGNsaWVudFg6IC0xLFxyXG4gICAgICBjbGllbnRZOiAtMSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcCh4LCB5KSB7XHJcbiAgICAvKlxyXG5cclxuICAgICAgICBjbGllbnRYLGNsaWVudFkgYXJlIG5vIHVzZWQgd2hlbiBpc0NhbnZhcz09dHJ1ZVxyXG4gICAgICAgICovXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcnVwXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0VG9wKHQsIGgpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS50b3AgPSB0ICsgXCJweFwiO1xyXG4gICAgaWYgKGggIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JjZUhlaWdodCA9IGg7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFkZFRyYW5zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmJvdHRvbS5zdHlsZS50cmFuc2l0aW9uID0gXCJ0b3AgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgLy90aGlzLmJvdHRvbS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBSb290cy5yZXNpemUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uYWRkVHJhbnNpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkRyYXcoKSB7fVxyXG5cclxuICBtYWtlQ2FudmFzKCkge1xyXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXHJcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFxyXG4gICAgICBcImNhbnZhc1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLnpvbmUudztcclxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyggdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCApXHJcbiAgfVxyXG5cclxuICBkcmF3KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5jYW52YXMgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuem9uZS53O1xyXG4gICAgbGV0IGggPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG4gICAgUm9vdHMudG9DYW52YXModGhpcywgdywgaCwgZm9yY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vXHJcblxyXG4gIGdldERvbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBub01vdXNlKCkge1xyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICB9XHJcblxyXG4gIHNldE1vdXNlKHV2LCBmbGlwID0gdHJ1ZSkge1xyXG4gICAgaWYgKGZsaXApXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgLSBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICAvL3RoaXMubW91c2Uuc2V0KCBtLngsIG0ueSApO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJzZXRNb3VzZSBcIit1di54K1wiIFwiK3V2LnkpXHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcobykge1xyXG4gICAgLy8gcmVzZXQgdG8gZGVmYXVsdCB0ZXh0XHJcbiAgICBUb29scy5zZXRUZXh0KCk7XHJcbiAgICB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29sb3JzKG8pIHtcclxuICAgIGZvciAobGV0IGMgaW4gbykge1xyXG4gICAgICBpZiAodGhpcy5jb2xvcnNbY10pIHRoaXMuY29sb3JzW2NdID0gb1tjXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdykge1xyXG4gICAgVG9vbHMuc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KTtcclxuICB9XHJcblxyXG4gIGhpZGUoYikge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSBiID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheSh2ID0gZmFsc2UpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gdiA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIjtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKGYpIHtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBmIHx8IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNUWUxFU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW9kZShuKSB7XHJcbiAgICBsZXQgbmVlZENoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgaWYgKG4gIT09IHRoaXMuY24pIHtcclxuICAgICAgdGhpcy5jbiA9IG47XHJcblxyXG4gICAgICBzd2l0Y2ggKG4pIHtcclxuICAgICAgICBjYXNlIFwiZGVmXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ3Njcm9sbERlZic6IHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zY3JvbGw7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxPdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJucy1yZXNpemVcIik7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbERvd25cIjpcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdib3R0b21EZWYnOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImJvdHRvbU92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcInBvaW50ZXJcIik7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9jYXNlICdib3R0b21Eb3duJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNlbGVjdDsgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSAnIzAwMCc7IGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuZWVkQ2hhbmdlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmVlZENoYW5nZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFRBUkdFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2xlYXJUYXJnZXQoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50ID09PSAtMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHRoaXMucHJvdG8ucykge1xyXG4gICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuXHJcbiAgICAvLy9jb25zb2xlLmxvZyh0aGlzLmlzRG93bikvL2lmKHRoaXMuaXNEb3duKVJvb3RzLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSb290cy5jdXJzb3IoKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgWk9ORSBURVNUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0ZXN0Wm9uZShlKSB7XHJcbiAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICBpZiAobC54ID09PSAtMSAmJiBsLnkgPT09IC0xKSByZXR1cm4gXCJcIjtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IFwiXCI7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLmlzU2Nyb2xsID8gdGhpcy56b25lLncgLSB0aGlzLnNpemUucyA6IHRoaXMuem9uZS53O1xyXG5cclxuICAgIGlmIChsLnkgPiB0aGlzLnpvbmUuaCAtIHRoaXMuYmggJiYgbC55IDwgdGhpcy56b25lLmgpIG5hbWUgPSBcImJvdHRvbVwiO1xyXG4gICAgZWxzZSBuYW1lID0gbC54ID4gcyA/IFwic2Nyb2xsXCIgOiBcImNvbnRlbnRcIjtcclxuXHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgLy9pZiggdGhpcy5jbGVhbm5pbmcgKSByZXR1cm5cclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwiR3VpLmhhbmRsZUV2ZW50XCIpXHJcbiAgICAvL2NvbnNvbGUubG9nKGUpO1xyXG4gICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IHByb3RvQ2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcIm1vdXNldXBcIiAmJiB0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmICF0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzRG93biAmJiB0aGlzLmlzTmV3VGFyZ2V0KSB7XHJcbiAgICAgIFJvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuO1xyXG5cclxuICAgIHN3aXRjaCAobmFtZSkge1xyXG4gICAgICBjYXNlIFwiY29udGVudFwiOlxyXG4gICAgICAgIGUuY2xpZW50WSA9IHRoaXMuaXNTY3JvbGwgPyBlLmNsaWVudFkgKyB0aGlzLmRlY2FsIDogZS5jbGllbnRZO1xyXG5cclxuICAgICAgICBpZiAoUm9vdHMuaXNNb2JpbGUgJiYgdHlwZSA9PT0gXCJtb3VzZWRvd25cIikgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByb3RvKSBwcm90b0NoYW5nZSA9IHRoaXMucHJvdG8uaGFuZGxlRXZlbnQoZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIiAmJiAhcHJvdG9DaGFuZ2UgJiYgdGhpcy5pc1Njcm9sbClcclxuICAgICAgICAgIGNoYW5nZSA9IHRoaXMub25XaGVlbChlKTtcclxuXHJcbiAgICAgICAgaWYgKCFSb290cy5sb2NrKSB7XHJcbiAgICAgICAgICB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJib3R0b21PdmVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRoaXMuaXNPcGVuID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICAgICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICAgICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgICAgICAgIC8vdGhpcy5zZXRIZWlnaHQoKTtcclxuICAgICAgICAgIHRoaXMuY2FsYygpO1xyXG4gICAgICAgICAgdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwic2Nyb2xsXCI6XHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJzY3JvbGxPdmVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJzY3JvbGxEb3duXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIpIGNoYW5nZSA9IHRoaXMub25XaGVlbChlKTtcclxuICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMudXBkYXRlKGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy5zaCAqIDAuNSk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmIChwcm90b0NoYW5nZSkgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXl1cFwiKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmIChjaGFuZ2UpIHRoaXMuZHJhdygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV4dChlLCBjaGFuZ2UpIHtcclxuICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCh0aGlzLnVpcywgZSk7XHJcblxyXG4gICAgaWYgKG5leHQgIT09IHRoaXMuY3VycmVudCkge1xyXG4gICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLnByb3RvID0gdGhpcy51aXNbdGhpcy5jdXJyZW50XTtcclxuICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uV2hlZWwoZSkge1xyXG4gICAgdGhpcy5veSArPSAyMCAqIGUuZGVsdGE7XHJcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLm95KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHJlc2V0KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5pc1Jlc2V0KSByZXR1cm47XHJcblxyXG4gICAgLy90aGlzLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgIC8vUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgbGV0IHIgPSB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICBsZXQgcjIgPSB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcblxyXG4gICAgaWYgKHIgfHwgcjIpIHRoaXMuZHJhdyh0cnVlKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG5cclxuICAgIC8vUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQUREIE5PREVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGFkZCgpIHtcclxuICAgIC8vaWYodGhpcy5jbGVhbm5pbmcpIHRoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICBsZXQgYSA9IGFyZ3VtZW50cztcclxuICAgIGxldCBvbnRvcCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0eXBlb2YgYVsxXSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICBhWzFdLmlzVUkgPSB0cnVlO1xyXG4gICAgICBhWzFdLm1haW4gPSB0aGlzO1xyXG5cclxuICAgICAgb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYVsxXSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBpZiAoYVsyXSA9PT0gdW5kZWZpbmVkKSBbXS5wdXNoLmNhbGwoYSwgeyBpc1VJOiB0cnVlLCBtYWluOiB0aGlzIH0pO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgIGFbMl0ubWFpbiA9IHRoaXM7XHJcbiAgICAgICAgLy9vbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgICAgb250b3AgPSBhWzJdLm9udG9wID8gYVsyXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHUgPSBhZGQuYXBwbHkodGhpcywgYSk7XHJcblxyXG4gICAgaWYgKHUgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBpZiAob250b3ApIHRoaXMudWlzLnVuc2hpZnQodSk7XHJcbiAgICBlbHNlIHRoaXMudWlzLnB1c2godSk7XHJcblxyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgdGhpcy5pc0VtcHR5ID0gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHU7XHJcbiAgfVxyXG5cclxuICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgcmVtb3ZlKG4pIHtcclxuICAgIGlmIChuLmRpc3Bvc2UpIG4uZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2FsbCBhZnRlciB1aXMgY2xlYXJcclxuXHJcbiAgY2xlYXJPbmUobikge1xyXG4gICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZihuKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIHtcclxuICAgICAgLy90aGlzLmNhbGMoIC0gKHRoaXMudWlzWyBpZCBdLmggKyAxICkgKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZCh0aGlzLnVpc1tpZF0uY1swXSk7XHJcbiAgICAgIHRoaXMudWlzLnNwbGljZShpZCwgMSk7XHJcbiAgICAgIHRoaXMuY2FsYygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gY2xlYXIgYWxsIGd1aVxyXG5cclxuICBlbXB0eSgpIHtcclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSB0cnVlXHJcblxyXG4gICAgLy90aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsXHJcbiAgICAgIGl0ZW07XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpdGVtID0gdGhpcy51aXMucG9wKCk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQoaXRlbS5jWzBdKTtcclxuICAgICAgaXRlbS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyKCkge1xyXG4gICAgdGhpcy5lbXB0eSgpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIyKCkge1xyXG4gICAgc2V0VGltZW91dCh0aGlzLmVtcHR5LmJpbmQodGhpcyksIDApO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5jb250ZW50KTtcclxuICAgIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElURU1TIFNQRUNJQUxcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHJlc2V0SXRlbSgpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5zZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbShuYW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIG5hbWUgPSBuYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZSgwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAodGhpcy51aXNbaV0udmFsdWUgPT09IG5hbWUpIHtcclxuICAgICAgICB0aGlzLnVpc1tpXS5zZWxlY3RlZCh0cnVlKTtcclxuICAgICAgICBpZiAodGhpcy5pc1Njcm9sbClcclxuICAgICAgICAgIHRoaXMudXBkYXRlKGkgKiAodGhpcy51aXNbaV0uaCArIHRoaXMubWFyZ2luKSAqIHRoaXMucmF0aW8pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTQ1JPTExcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHVwU2Nyb2xsKGIpIHtcclxuICAgIHRoaXMuc3cgPSBiID8gdGhpcy5zaXplLnMgOiAwO1xyXG4gICAgdGhpcy5veSA9IGIgPyB0aGlzLm95IDogMDtcclxuICAgIHRoaXMuc2Nyb2xsQkcuc3R5bGUuZGlzcGxheSA9IGIgPyBcImJsb2NrXCIgOiBcIm5vbmVcIjtcclxuXHJcbiAgICBpZiAoYikge1xyXG4gICAgICB0aGlzLnRvdGFsID0gdGhpcy5oO1xyXG5cclxuICAgICAgdGhpcy5tYXhWaWV3ID0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLnJhdGlvID0gdGhpcy5tYXhWaWV3IC8gdGhpcy50b3RhbDtcclxuICAgICAgdGhpcy5zaCA9IHRoaXMubWF4VmlldyAqIHRoaXMucmF0aW87XHJcblxyXG4gICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhWaWV3IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgIHRoaXMub3kgPSBUb29scy5jbGFtcCh0aGlzLm95LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICAgIHRoaXMuc2Nyb2xsQkcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhWaWV3ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLnNjcm9sbC5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLm95KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSh5KSB7XHJcbiAgICB5ID0gVG9vbHMuY2xhbXAoeSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgdGhpcy5kZWNhbCA9IE1hdGguZmxvb3IoeSAvIHRoaXMucmF0aW8pO1xyXG4gICAgdGhpcy5pbm5lci5zdHlsZS50b3AgPSAtdGhpcy5kZWNhbCArIFwicHhcIjtcclxuICAgIHRoaXMuc2Nyb2xsLnN0eWxlLnRvcCA9IE1hdGguZmxvb3IoeSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLm95ID0geTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0laRSBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpcygpIHtcclxuICAgIHJldHVybiBSb290cy5jYWxjVWlzKHRoaXMudWlzLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55KTtcclxuICB9XHJcblxyXG4gIGNhbGMoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG4gICAgdGhpcy50bXAgPSBzZXRUaW1lb3V0KHRoaXMuc2V0SGVpZ2h0LmJpbmQodGhpcyksIDEwKTtcclxuICB9XHJcblxyXG4gIHNldEhlaWdodCgpIHtcclxuICAgIGlmICh0aGlzLnRtcCkgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuXHJcbiAgICB0aGlzLnpvbmUuaCA9IHRoaXMuYmg7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHRoaXMuaCA9IHRoaXMuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbGV0IGhoaCA9IHRoaXMuZm9yY2VIZWlnaHRcclxuICAgICAgICA/IHRoaXMuZm9yY2VIZWlnaHQgKyB0aGlzLnpvbmUueVxyXG4gICAgICAgIDogd2luZG93LmlubmVySGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5tYXhIZWlnaHQgPSBoaGggLSB0aGlzLnpvbmUueSAtIHRoaXMuYmg7XHJcblxyXG4gICAgICBsZXQgZGlmZiA9IHRoaXMuaCAtIHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgaWYgKGRpZmYgPiAxKSB7XHJcbiAgICAgICAgdGhpcy5pc1Njcm9sbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLmJoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cFNjcm9sbCh0aGlzLmlzU2Nyb2xsKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCAtIHRoaXMuYmggKyBcInB4XCI7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggKyBcInB4XCI7XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS50b3AgPSB0aGlzLnpvbmUuaCAtIHRoaXMuYmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9yY2VIZWlnaHQgJiYgdGhpcy5sb2NrSGVpZ2h0KVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLmRyYXcodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNldFdpZHRoKHcpIHtcclxuICAgIGlmICh3KSB0aGlzLnpvbmUudyA9IHc7XHJcblxyXG4gICAgdGhpcy56b25lLncgPSBNYXRoLmZsb29yKHRoaXMuem9uZS53KTtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS53aWR0aCA9IHRoaXMuem9uZS53ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDZW50ZXIpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5tYXJnaW5MZWZ0ID0gLU1hdGguZmxvb3IodGhpcy56b25lLncgKiAwLjUpICsgXCJweFwiO1xyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW1XaWR0aCh3KSB7XHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdGhpcy51aXNbaV0uc2V0U2l6ZSh3KTtcclxuICAgICAgdGhpcy51aXNbaV0uclNpemUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztDQUFBO0NBQ0E7Q0FDQTtBQUNBO0FBQ1ksT0FBQyxRQUFRLEdBQUcsUUFBUTtBQUNoQztDQUNBO0FBQ0E7Q0FDQSxNQUFNLENBQUMsR0FBRztDQUNWLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDUjtDQUNBLEVBQUUsR0FBRyxFQUFFLElBQUk7QUFDWDtDQUNBLEVBQUUsRUFBRSxFQUFFLElBQUk7Q0FDVixFQUFFLElBQUksRUFBRSxLQUFLO0NBQ2IsRUFBRSxLQUFLLEVBQUUsS0FBSztDQUNkLEVBQUUsT0FBTyxF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T0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDekU7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDakM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hCLElBQUksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0NBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDbkQsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0M7Q0FDQSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDcEUsU0FBUyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNyQjtDQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUNsQztDQUNBLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQztDQUN2RSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUM7QUFDdkU7Q0FD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QixRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUc7Q0FDdEMsVUFBVSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUM7Q0FDakUsU0FBUztDQUNULFFBQVEsT0FBTyxRQUFRLENBQUM7Q0FDeEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7Q0FDOUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0NBQzNDLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzlCO0NBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzNCO0NBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDekI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDL0UsYUFBYSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7Q0FDekIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDekQsUUFBUSxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3hDLFFBQVEsT0FBTyxDQUFDLENBQUM7Q0FDakIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDekI7Q0FDQSxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzVFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDMUI7Q0FDQSxRQUFRLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pIO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7Q0FDdEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3JDLFFBQVEsT0FBTyxDQUFDLENBQUM7Q0FDakIsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwRCxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakM7Q0FDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RELFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztDQUNsQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQ2xFLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQ2pKLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFFLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0NBQ3ZCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7Q0FDM0QsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztDQUNqRSxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0NBQ2pFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNuQixTQUFTO0NBQ1QsUUFBUSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMzQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0M7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxQyxhQUFhO0NBQ2IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzNELFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzFCLFlBQVksT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztDQUN6RyxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksWUFBWSxFQUFFLFdBQVcsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHO0FBQzlEO0NBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hEO0NBQ0EsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRztDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksT0FBTyxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ2hDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFHO0NBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0NBQ3BKLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ25DLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvRixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckg7Q0FDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzdJLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNuSSxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3RCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxLQUFLLEdBQUc7QUFDakM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUNwQixRQUFRLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztDQUN4QixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztDQUNoSixRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ2pJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzFILFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMxSCxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLHVCQUF1QixFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDMUosUUFBUSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksWUFBWSxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ3JDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDcEIsUUFBUSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7Q0FDeEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxvQkFBb0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Q0FDaEosUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDekgsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDekgsUUFBUSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUN6QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksWUFBWSxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ3JDO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQztDQUN6QixRQUFRLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQzVDLFFBQVEsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDakQsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxvQkFBb0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Q0FDaEosUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3ZDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCO0NBQ0E7QUFDQTtDQUNBO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUM1SCxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN6SDtDQUNBO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDdEUsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7Q0FDQTtDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0NBQzFFLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzFFO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzSDtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDNUg7Q0FDQTtBQUNBO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDdEYsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDcEcsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0Y7Q0FDQSxZQUFZLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQy9CO0NBQ0EsU0FBUyxNQUFNO0NBQ2Y7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDNUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7Q0FDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLHdCQUF3QixFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNySSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0YsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEk7Q0FDQSxZQUFZLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0NBQy9CLFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLGFBQWEsRUFBRSxZQUFZO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDcEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxvQkFBb0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Q0FDaEosUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3ZDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ25CLFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUMzQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7Q0FDeEIsUUFBVyxJQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUs7Q0FDNUQsUUFBUSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDO0NBQ2pELFFBQVEsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0NBQ3ZCO0NBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsQztDQUNBLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkIsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDOUIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztDQUNqQyxZQUFZLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUM7QUFDaEQ7Q0FDQSxZQUFZLEVBQUUsR0FBRztDQUNqQixnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzNDLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRztDQUN2RCxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzNDLGFBQWEsQ0FBQztDQUNkO0NBQ0EsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFB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LFFBQVEsQ0FBQztBQUMzQztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzNCO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDakQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN4QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDMUQsU0FBUyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hCO0NBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0NBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2pEO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztBQUN2RDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztDQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7Q0FDbEMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO0FBQ3hDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7Q0FDcEMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0NBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztDQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztBQUNuQztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsUUFB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QU8sQ0FBQyxDQUFDLEVBQUU7Q0FDYixJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLElBQUksT0FBTyxJQUFJLENBQUM7Q0FDaEIsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7Q0FDVixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztDQUN4QixJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztDQUN2QixJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RFLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztDQUN4RCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtDQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxJ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QUFRLElBQUksQ0FBQyxTQUFTO0NBQzFCLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2QsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDaEIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDakIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7Q0FDbEIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7Q0FDbkIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxPQUFPLENBQUM7Q0FDcEIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7Q0FDckIsUUFBUSxNQUFNO0NBQ2QsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQ2xELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzNDLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtDQUNkLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3BDLElBQUk7Q0FDSixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMs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QVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUU7QUFDakQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDdkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxFQUFDO0NBQ25DLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUU7Q0FDL0IsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBQztBQUNqQztDQUNBLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQzNFO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7Q0FDN0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUM7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFNO0NBQ3JDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFFO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNsQztDQUNBLFFBQVEsS0FBSyxJQUFJLENB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RDtDQUNBLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFDO0NBQzVELFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQjtDQUNBO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7Q0FDckUsU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRDtDQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0NBQy9DLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2hEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDcFBPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFLO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUM7Q0FDakMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUk7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBSztDQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDMUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFFO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFLO0NBQ2hDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsR0FBRTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRTtBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSTtDQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0NBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3BDO0NBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTTtDQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxTQUFRO0NBQ3JELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0NBQ3pCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFFO0FBQ3hCO0NBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFDO0NBQ3hCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQ3RCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0FBQ2xJO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFFO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0NBQ3pELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUMzRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUM1RjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNuQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztBQUMvQztDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07Q0FDNUIsUUFBUSxJQUFJLE1BQUs7QUFDakI7Q0FDQSxRQUFRLFFBQVEsSUFBSTtDQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDOUQsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDNUssZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDOUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNqRSxnQkFBZ0IsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVE7Q0FDL0ssZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0NBQ2pEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxPQUFPLENBQUM7Q0FDN0QsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztDQUMxRSxhQUFhLE9BQU8sVUFBVSxDQUFDO0FBQy9CO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN6QixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDOUIsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9EO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ2hDO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDekMsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEU7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNyQyxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvQztDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbkMsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztDQUM1QyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNyQyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLFVBQVUsR0FBRztDQUNsQztDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDckQ7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7Q0FDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN4RCxhQUFhLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztDQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3hELGFBQWE7Q0FDYjtDQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQztDQUNBLFlBQVksT0FBTyxJQUFJLENBQUM7Q0FDeEI7Q0FDQSxTQUFTO0NBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkIsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQ2xELFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QyxRQUFRLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNsRztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlEO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENB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QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQ3hELE9BQU8sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMvQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5QixPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN2QyxPQUFPO0FBQ1A7Q0FDQSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7Q0FDcEQ7Q0FDQSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUM1QyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNFLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNqQztDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcs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LENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDaEQ7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDeEMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuRCxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyRDtDQUNBLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPO0FBQ3BCO0NBQ0EsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3hELEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDdkUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztDQUMzRSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdD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S0FBSyxDQUFDO0FBQzFDO0NBQ0EsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN0QjtDQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDM0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzVCLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDN0MsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN0QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDN0MsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDO0NBQ0EsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEM7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEU7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1QztDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUUsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVB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QUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMxRSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xDLFlBQVksQ0FBQyxFQUFFLENBQUM7QUFDaEI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLEtBQUssQ0FBQyxJQUFJLEdBQUU7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztDQUNsRSxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDbkQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztDQUNuRSxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMzRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7Q0FDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN0RDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0NBQ2pDO0NBQ0EsS0FBSztBQUNMO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNwQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxDQUFDLEdBQUc7QUFDWDtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzlCLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN4QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0FBQ3ZCO0NBQ0EsUUFBUSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRztBQUMzQztDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO0FBQ3ZGO0NBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztDQUNqQyxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsWUFBWSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUc7QUFDOUI7Q0FDQSxnQkFBZ0IsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7Q0FDakUsZ0JBQWdCLElBQUksYUFBYSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO0FBQ3ZFO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEdBQUcsV0FBVyxFQUFFLENBQUM7Q0FDaEUsZ0JBQWdCLElBQUksQ0FBQyxFQUFFLEdBQUcsUUFBUSxHQUFHLGFBQWEsQ0FBQztBQUNuRDtDQUNBLGFBQWE7QUFDYjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUN6QixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDdkQ7Q0FDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDdkQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxLQUFJO0FBQ3BEO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7Q0FDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7Q0FDbkM7Q0FDQSxLQUFLO0NBQ0w7Q0FDQTs7Q0MzVU8sTUFBTSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ2pDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzVELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNyQztDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztDQUNyRSxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7Q0FDbEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2xDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFEO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztDQUN4RSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzlCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDakMsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzlCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ2pEO0NBQ0EsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztDQUMvQixnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztDQUMvQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFNBQVE7Q0FDekQsYUFBYTtDQUNiO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9CLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM5QjtDQUNBO0FBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyx5REFBeUQsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDNUw7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pEO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0NBQ3RKLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNsRjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9ILFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2hKO0NBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN4RCxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0M7Q0FDQSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDdEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNyQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUN0RixjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQzdEO0NBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUg7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7Q0FDckMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQztDQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDO0NBQzlDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUk7Q0FDOUMsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztDQUNyQyxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQzNDLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksR0FBRyxDQUFDO0NBQ2hGLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMs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QUksRUFBRSxDQUFDO0NBQ2pDLGFBQWE7QUFDYjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRTtDQUNyQztBQUNBO0NBQ0EsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyQztDQUNBLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBQztDQUM1QyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFHO0NBQzFCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRTtBQUN0QjtDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztDQUN6RCxXQUFXLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUM7Q0FDeEUsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztBQUNsRDtDQUNBLE1BQU0sRUFBRSxHQUFHLEdBQUU7Q0FDYixNQUFNLEVBQUUsR0FBRyxFQUFDO0FBQ1o7Q0FDQSxNQUFNO0FBQ047Q0FDQSxLQUFLLE9BQU8sQ0FBQztBQUNiO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0NBQ2hFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEM7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRTtDQUM1QixRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQztDQUNqRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDbEI7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUk7QUFDOUI7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0NBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUU7Q0FDOUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDdkM7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ2xUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsS0FBSyxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUk7Q0FDckIsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUM7Q0FDcEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7Q0FDekIsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0NBQ2xCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQjtDQUNBLEtBQUs7Q0FDTDtDQUNBOztDQ1RPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0FBQzNCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7Q0FDekIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBQztDQUNwQztBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQzNCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7QUFDNUM7Q0FDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzlCO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7Q0FDM0IsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLG9DQUFvQyxHQUFHLEdBQUU7QUFDL0U7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLDRDQUE0QyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUM7Q0FDNUgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQzVLO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFJO0NBQzFEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFBQztBQUMxSTtDQUNBLFFBQWdCLElBQUksQ0FBQyxFQUFFO0NBQ3ZCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBTztBQUNoQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUU7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ2hDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDakI7Q0FDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0NBQzlCLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDeEI7Q0FDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLEdBQUU7Q0FDN0MsUUFBUSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFdBQVU7Q0FDMUQsWUFBWSxFQUFFLENBQUMsVUFBVSxHQUFHLE9BQU07QUFDbEM7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0NBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTTtDQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU07QUFDbkM7Q0FDQSxRQUFRLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7Q0FDbkMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0NBQy9ELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQjtDQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7Q0FDaEQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtBQUNoRDtDQUNBLFNBQVM7QUFDVDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDakQ7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDO0NBQzVELGFBQWE7Q0FDYixZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsU0FBUyxDQUFDO0NBQy9DLFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxXQUFXLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDO0NBQy9DLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtDQUMxQjtDQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDL0IsU0FBUztDQUNULFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDMUIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQzFCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQ3RCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUU7QUFDMUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDaEM7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTztBQUMzQjtDQUNBLFFBQVEsUUFBUSxJQUFJO0FBQ3BCO0NBQ0EsWUFBWSxLQUFLLFNBQVM7QUFDMUI7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBLFlBQVksSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksS0FBSyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFFO0FBQ2xGO0NBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Q0FDNUI7Q0FDQSxnQkFBZ0IsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRTtDQUN6RCxhQUFhO0FBQ2I7Q0FDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRTtBQUN2RDtDQUNBLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssT0FBTztDQUN4QjtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUM7Q0FDbEMsWUFBWSxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUU7Q0FDdEMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQzlDLHFCQUFxQixJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ2hDLGFBQWE7Q0FDYixZQUFZLE1BQU07QUFDbEI7QUFDQTtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDeEMsUUFBUSxJQUFJLFdBQVcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3hDO0NBQ0EsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRztBQUMxQjtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25EO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO0NBQ25DLFlBQVksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQy9CLFlBQVksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FFaEMsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRTtDQUN6QixZQUFZLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDbkQsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQ2hDLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxHQUFHLEdBQUc7QUFDVjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtDQUN0QyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUk7Q0FDakMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0NBQ25DLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSTtDQUNqQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSTtDQUM3QixTQUFTLE1BQU0sSUFBSSxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7Q0FDckQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Q0FDdkcsaUJBQWdCO0NBQ2hCLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUNqQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDdEMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ2xDLGFBQWE7Q0FDYixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDekM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtDQUN2QjtDQUNBLFlBQVksQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFDO0NBQ3BCLFNBQVM7Q0FDVDtDQUNBO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFJO0NBQzlCO0FBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUMxQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFLO0FBQzVCO0NBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNwQztDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sR0FBRztBQUNkO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQ3BCLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ3hDLFFBQVEsS0FBSyxDQUFDLE9BQU8sR0FBRTtBQUN2QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO0FBQ3RDO0NBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0NBQ3BCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFFO0NBQ2pDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRTtDQUM5QyxZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxHQUFFO0FBQzlCO0NBQ0E7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2QztDQUNBLFFBQVEsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUc7Q0FDekIsWUFBWSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFFO0NBQzdELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUU7Q0FDeEQsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQ3BDO0NBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtDQUN2QyxnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDcEMsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUM3QixhQUFhO0NBQ2IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtDQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRTtDQUNuRCxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDM0I7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztDQUN4QixRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzlCO0NBQ0E7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSTtDQUM1QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU07QUFDbkM7Q0FDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN2QjtDQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxNQUFLO0NBQ3JDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxNQUFLO0FBQ3JDO0NBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0NBQ3ZELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUN4RCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7Q0FDMUQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0NBQzNELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtBQUNuQztDQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztDQUNuRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87QUFDcEU7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87Q0FDL0QsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztDQUNwQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyx5QkFBd0I7QUFDdEU7Q0FDQSxTQUFTO0NBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDM0I7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFFO0FBQ25EO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQzNCO0NBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztDQUN4QixRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0NBQzlCO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUNuQztDQUNBO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUk7Q0FDNUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE9BQU07QUFDaEM7Q0FDQSxRQUFRLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7QUFDbkM7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsT0FBTTtDQUNoQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsT0FBTTtDQUNoQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87Q0FDL0QsU0FBUztBQUNUO0NBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7QUFDNUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDM0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHO0FBQ2Y7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztDQUM5RDtDQUNBLGFBQWEsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBSztBQUN4STtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtBQUN2RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3ZCO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN2RCxhQUFhLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDakQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNmO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNO0NBQ2pDLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ3hDLGFBQWEsSUFBSSxDQUFDLE9BQU8sR0FBRTtDQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUN4QztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksWUFBWSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTTtDQUMvQixRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDbEIsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFFO0NBQ3pDLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUU7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQ3BDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxLQUFJO0FBQ3BEO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0NBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtDQUN2QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7QUFDdkM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFFO0FBQzdDO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTs7Q0M1Y08sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0FBQ3BDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztDQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUM7Q0FDcEMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZEO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0NBQzFDLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztBQUNsRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztDQUM3QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUk7QUFDNUQ7Q0FDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0NBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0NBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztDQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ25JLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNoRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNuRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM1RSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzdGO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQztBQUNwQjtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDM0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdB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QUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMvRTtDQUNBLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6QztDQUNBLFFBQVEsS0FBSyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRztDQUN4QyxZQUFZLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMzRCxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztDQUMzRCxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztDQUMzRCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pFO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Q0FDOUMsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7QUFDcEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzlCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzQztDQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUM1RSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUU7Q0FDQSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdkU7Q0FDQSxhQUFhO0FBQ2I7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzdCO0FBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDcEQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0NBQ2xFLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRTtDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUM1QjtDQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFD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Q0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ25JO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtDQUN6RDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNqRixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztB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Q0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZELFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RDtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDdEMsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFB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QUFNO0NBQ2YsWUFBWSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNyRCxZQUFZLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQzFCLFNBQVM7QUFDVDtDQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRztBQUMzQztDQUNBLFlBQVksQ0FBQyxHQUFHLFVBQVUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7Q0FDMUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQy9DLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUMvQyxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDaEQsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ2hELFlBQVksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQzlEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVEO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDcEMsUUFBUSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNyRTtDQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztDQUNqQyxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDakM7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDcEMsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDckY7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7Q0FDQSxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ25DLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNwQyxZQUFZLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqSTtDQUNBLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO0NBQ25LLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJ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QUksR0FBRyxJQUFJLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQy9EO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDL0Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNoRTtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2pELFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDL0MsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUM5QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzlDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Q0FDdkQsUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxN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WUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDeEQsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtDQUNBLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFD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QUFNLEVBQUUsQ0FBQztDQUNwQixLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUNyQixNQUFNLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDNUU7Q0FDQTtDQUNBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQTtDQUNBLE1BQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3REO0NBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ2hELE1BQU0sSUFBSSxVQUFVLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMzRDtDQUNBLE1BQU0sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ25EO0NBQ0EsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNsQztDQUNBLE1BQU0sSUFBSSxLQUFLLENBQUM7Q0FDaEIsTUFBTSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0NBQ3BELFFBQVEsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM5QyxRQUFRLElBQUksQ0FBQyxLQUFL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QUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQ3hELFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1o7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUNqQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUN0QyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzVELFFBQVEsTUFBTTtDQUNkLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7Q0FDYixJQUFJLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUQ7Q0FDQSxJQUFJLElBQUksT0FBTztDQUNmLE1BQU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUU7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztDQUMzQztBQUNBO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDdEQsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM1RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDakU7Q0FDQSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUN4QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLEtBQUssR0FBRztDQUNWLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xCO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDOUIsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEI7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDckIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNyRCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FB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QyxDQUFDO0NBQzVCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDckM7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQztDQUN2QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztDQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUM7Q0FDL0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPO0NBQ3RCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO0NBQ2hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBRztDQUNqQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztBQUMzQztDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7Q0FDekQsYUFBYSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwQztDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDcEM7Q0FDQSxLQUFLO0FBQ0w7QUFDQTtDQUNBOztDQ2pMTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLGlEQUFpRCxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdEo7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7QUFDM0I7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzdDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0NBQ2hEO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDO0FBQ2pEO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENB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QzdDO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEw7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0I7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzlDO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzlCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FB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QyxDQUFDLElBQUksQ0FBQztBQUN2RDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNuRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztDQUNBO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3JFO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDOUY7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUM7Q0FDQTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztDQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7Q0FDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsd0JBQXdCLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzNJLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUU7QUFDakM7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUM5QyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtDQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNoRDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ3JFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDdEY7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBRztBQUN2QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNuQixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUU7QUFDdkI7Q0FDQSxLQUFLO0NBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztDQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDakQ7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxPQUFPLENBQUM7Q0FDN0QsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztDQUMxRSxhQUFhLE9BQU8sS0FBSyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFDMUM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQy9CLFlBQVksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNoQyxZQUFZLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoQyxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFFO0NBQzFELFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDekU7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQy9CO0NBQ0EsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0NBQ2xCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNsQjtDQUNBLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0NBQ3ZELFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3ZEO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUNqQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsUUFBUSxJQUFJO0NBQ3BCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDMUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7Q0FDM0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUM7Q0FDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7Q0FDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7Q0FDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDOUQ7Q0FDQSxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztDQUNoRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRTtDQUNwRTtDQUNBLFlBQVksTUFBTTtDQUNsQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHO0FBQy9CO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3REO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFNO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUN4RSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRztBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDdkcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFFO0FBQ3BIO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMxQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBOztBQzdQWSxPQUFDLEdBQUcsR0FBRyxZQUFZO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDMUI7Q0FDQSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7Q0FDQSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3RDO0NBQ0EsWUFBWSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hCLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0I7Q0FDQSxTQUFTLE1BQU0sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDOUM7Q0FDQSxZQUFZLEdBQUcsR0FBRyxJQUFJLENBQUM7Q0FDdkIsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxT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SUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ2xFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNuRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6RDtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVO0NBQzNDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0NBQzFELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdkMsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLEdBQUc7Q0FDWCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0NBQzVCLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtDQUNkLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ2xELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUTtDQUNyQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzVFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDN0MsR0FBRztBQUNIO0NBQ0EsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFO0NBQ2xCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Q0FDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0NBQ2hCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0IsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzFCLEtBQUs7Q0FDTCxHQUFHO0NBQ0g7Ozs7Ozs7Ozs7Ozs7OyJ9 diff --git a/build/uil.min.js b/build/uil.min.js index c48ddc4..7e15540 100644 --- a/build/uil.min.js +++ b/build/uil.min.js @@ -1,9069 +1,6 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.UIL = {})); -})(this, (function (exports) { 'use strict'; - - /** - * @author lth / https://github.com/lo-th - */ - - const REVISION = "4.3.0"; - - // INTENAL FUNCTION - - const R = { - ui: [], - - dom: null, - - ID: null, - lock: false, - wlock: false, - current: -1, - - needReZone: true, - needResize: false, - forceZone: false, - isEventsInit: false, - isLeave: false, - addDOMEventListeners: true, - - downTime: 0, - prevTime: 0, - - //prevDefault: ['contextmenu', 'wheel'], - prevDefault: ["contextmenu"], - pointerEvent: ["pointerdown", "pointermove", "pointerup"], - eventOut: ["pointercancel", "pointerout", "pointerleave"], - - xmlserializer: null, - tmpTime: null, - tmpImage: null, - - oldCursor: "auto", - - input: null, - parent: null, - firstImput: true, - - hiddenImput: null, - hiddenSizer: null, - hasFocus: false, - startInput: false, - inputRange: [0, 0], - cursorId: 0, - str: "", - pos: 0, - startX: -1, - moveX: -1, - - debugInput: false, - - isLoop: false, - listens: [], - - e: { - type: null, - clientX: 0, - clientY: 0, - keyCode: NaN, - key: null, - delta: 0, - }, - - isMobile: false, - - now: null, - needsUpdate: false, - - getTime: function () { - return self.performance && self.performance.now - ? self.performance.now.bind(performance) - : Date.now; - }, - - add: function (o) { - // R.ui[0] is de GUI object that is added first by the constructor - R.ui.push(o); - R.getZone(o); - - if (!R.isEventsInit) R.initEvents(); - }, - - testMobile: function () { - let n = navigator.userAgent; - if ( - n.match(/Android/i) || - n.match(/webOS/i) || - n.match(/iPhone/i) || - n.match(/iPad/i) || - n.match(/iPod/i) || - n.match(/BlackBerry/i) || - n.match(/Windows Phone/i) - ) - return true; - else return false; - }, - - remove: function (o) { - let i = R.ui.indexOf(o); - - if (i !== -1) { - R.removeListen(o); - R.ui.splice(i, 1); - } - - if (R.ui.length === 0) { - R.removeEvents(); - } - }, - - // ---------------------- - // EVENTS - // ---------------------- - - initEvents: function () { - if (R.isEventsInit) return; - - let dom = document.body; - - R.isMobile = R.testMobile(); - R.now = R.getTime(); - - if (!R.isMobile) { - dom.addEventListener("wheel", R, { passive: false }); - } else { - dom.style.touchAction = "none"; - } - - console.log("R.addDOMEventListeners " + R.addDOMEventListeners); - if (R.addDOMEventListeners) { - dom.addEventListener("pointercancel", R); - dom.addEventListener("pointerleave", R); - //dom.addEventListener( 'pointerout', R ) - - dom.addEventListener("pointermove", R); - dom.addEventListener("pointerdown", R); - dom.addEventListener("pointerup", R); - - dom.addEventListener("keydown", R, false); - dom.addEventListener("keyup", R, false); - } - window.addEventListener("resize", R.resize, false); - - //window.onblur = R.out; - //window.onfocus = R.in; - - R.isEventsInit = true; - R.dom = dom; - }, - - removeEvents: function () { - if (!R.isEventsInit) return; - - let dom = document.body; - - if (!R.isMobile) { - dom.removeEventListener("wheel", R); - } - - if (R.addDOMEventListeners) { - dom.removeEventListener("pointercancel", R); - dom.removeEventListener("pointerleave", R); - //dom.removeEventListener( 'pointerout', R ); - - dom.removeEventListener("pointermove", R); - dom.removeEventListener("pointerdown", R); - dom.removeEventListener("pointerup", R); - - dom.removeEventListener("keydown", R); - dom.removeEventListener("keyup", R); - } - window.removeEventListener("resize", R.resize); - - R.isEventsInit = false; - }, - - resize: function () { - let i = R.ui.length, - u; - - while (i--) { - u = R.ui[i]; - if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); - } - - R.needReZone = true; - R.needResize = false; - }, - - out: function () { - console.log("im am out"); - R.clearOldID(); - }, - - in: function () { - console.log("im am in"); - // R.clearOldID(); - }, - - // ---------------------- - // HANDLE EVENTS - // ---------------------- - - fakeUp: function () { - this.handleEvent({ type: "pointerup" }); - }, - - handleEvent: function (event) { - //console.log("Roots.handleEvent "+event.type) - //if(!event.type) return; - - if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); - - if (R.needResize) R.resize(); - - R.findZone(R.forceZone); - - let e = R.e; - let leave = false; - - if (event.type === "keydown") R.keydown(event); - if (event.type === "keyup") R.keyup(event); - - if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; - else e.delta = 0; - - let ptype = event.pointerType; // mouse, pen, touch - - e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; - e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; - - e.type = event.type; - - if (R.eventOut.indexOf(event.type) !== -1) { - leave = true; - e.type = "mouseup"; - } - - if (event.type === "pointerleave") R.isLeave = true; - - if (event.type === "pointerdown") e.type = "mousedown"; - if (event.type === "pointerup") e.type = "mouseup"; - if (event.type === "pointermove") { - if (R.isLeave) { - // if user resize outside this document - R.isLeave = false; - R.resize(); - } - e.type = "mousemove"; - } - - // double click test - if (e.type === "mousedown") { - R.downTime = R.now(); - let time = R.downTime - R.prevTime; - - // double click on imput - if (time < 200) { - R.selectAll(); - return false; - } - - R.prevTime = R.downTime; - R.forceZone = false; - } - - // for imput - if (e.type === "mousedown") R.clearInput(); - - // mouse lock - if (e.type === "mousedown") R.lock = true; - if (e.type === "mouseup") R.lock = false; - - //if( R.current !== null && R.current.neverlock ) R.lock = false; - - /*if( e.type === 'mousedown' && event.button === 1){ - R.cursor() - e.preventDefault(); - e.stopPropagation(); - }*/ - - //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) - - if (R.isMobile && e.type === "mousedown") R.findID(e); - if (e.type === "mousemove" && !R.lock) R.findID(e); - - if (R.ID !== null) { - if (R.ID.isCanvasOnly) { - e.clientX = R.ID.mouse.x; - e.clientY = R.ID.mouse.y; - } - - //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 - - R.ID.handleEvent(e); - } - - if (R.isMobile && e.type === "mouseup") R.clearOldID(); - if (leave) R.clearOldID(); - }, - - // ---------------------- - // ID - // ---------------------- - - findID: function (e) { - let i = R.ui.length, - next = -1, - u, - x, - y; - - while (i--) { - u = R.ui[i]; - - if (u.isCanvasOnly) { - x = u.mouse.x; - y = u.mouse.y; - } else { - x = e.clientX; - y = e.clientY; - } - - if (R.onZone(u, x, y)) { - next = i; - - if (next !== R.current) { - R.clearOldID(); - R.current = next; - R.ID = u; - } - break; - } - } - - if (next === -1) R.clearOldID(); - }, - - clearOldID: function () { - if (!R.ID) return; - R.current = -1; - R.ID.reset(); - R.ID = null; - R.cursor(); - }, - - // ---------------------- - // GUI / GROUP FUNCTION - // ---------------------- - - calcUis: (uis, zone, py, group = false) => { - //console.log('calc_uis') - - let i = uis.length, - u, - px = 0, - n = 0, - tw, - m; - - let height = 0; - - while (i--) { - u = uis[n]; - n++; - - if (!group && u.isGroup) u.calcUis(); - - m = u.margin; - //div = u.marginDiv - - u.zone.w = u.w; - u.zone.h = u.h + m; - - if (!u.autoWidth) { - if (px === 0) height += u.h + m; - - u.zone.x = zone.x + px; - u.zone.y = py; // + u.mtop - //if(div) u.zone.y += m * 0.5 - - tw = R.getWidth(u); - if (tw) u.zone.w = u.w = tw; - else if (u.fw) u.zone.w = u.w = u.fw; - - px += u.zone.w; - - if (px >= zone.w) { - py += u.h + m; - //if(div) py += m * 0.5 - px = 0; - } - } else { - px = 0; - - u.zone.x = zone.x + u.dx; - u.zone.y = py; - py += u.h + m; - - height += u.h + m; - } - } - - return height; - }, - - findTarget: function (uis, e) { - let i = uis.length; - - while (i--) { - if (R.onZone(uis[i], e.clientX, e.clientY)) return i; - } - - return -1; - }, - - // ---------------------- - // ZONE - // ---------------------- - - findZone: function (force) { - if (!R.needReZone && !force) return; - - var i = R.ui.length, - u; - - while (i--) { - u = R.ui[i]; - R.getZone(u); - if (u.isGui) u.calcUis(); - } - - R.needReZone = false; - }, - - onZone: function (o, x, y) { - if (x === undefined || y === undefined) return false; - - let z = o.zone; - let mx = x - z.x; // - o.dx; - let my = y - z.y; - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 - //if( o.group !== null ) mx -= o.dx - - let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; - - //if( o.marginDiv ) my -= o.margin * 0.5 - - if (over) o.local.set(mx, my); - else o.local.neg(); - - return over; - }, - - getWidth: function (o) { - //return o.getDom().offsetWidth - return o.getDom().clientWidth; - - //let r = o.getDom().getBoundingClientRect(); - //return (r.width) - //return Math.floor(r.width) - }, - - getZone: function (o) { - if (o.isCanvasOnly) return; - let r = o.getDom().getBoundingClientRect(); - - //if( !r.width ) return - //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; - //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; - o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; - - //console.log(o.name, o.zone) - }, - - // ---------------------- - // CURSOR - // ---------------------- - - cursor: function (name) { - name = name ? name : "auto"; - if (name !== R.oldCursor) { - document.body.style.cursor = name; - R.oldCursor = name; - } - }, - - // ---------------------- - // CANVAS - // ---------------------- - - toCanvas: function (o, w, h, force) { - if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); - - // prevent exesive redraw - - if (force && R.tmpTime !== null) { - clearTimeout(R.tmpTime); - R.tmpTime = null; - } - - if (R.tmpTime !== null) return; - - if (R.lock) - R.tmpTime = setTimeout(function () { - R.tmpTime = null; - }, 10); - - /// - - let isNewSize = false; - if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; - - if (R.tmpImage === null) R.tmpImage = new Image(); - - let img = R.tmpImage; //new Image(); - - let htmlString = R.xmlserializer.serializeToString(o.content); - - let svg = - '' + - htmlString + - ""; - - img.onload = function () { - let ctx = o.canvas.getContext("2d"); - - if (isNewSize) { - o.canvas.width = w; - o.canvas.height = h; - } else { - ctx.clearRect(0, 0, w, h); - } - ctx.drawImage(this, 0, 0); - - o.onDraw(); - }; - - img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); - //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); - img.crossOrigin = ""; - R.needsUpdate = false; - }, - - // ---------------------- - // INPUT - // ---------------------- - - setHidden: function () { - if (R.hiddenImput === null) { - //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' - //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' - //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; - - R.hiddenImput = document.createElement("input"); - R.hiddenImput.type = "text"; - //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); - - R.hiddenSizer = document.createElement("div"); - //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; - - document.body.appendChild(R.hiddenImput); - document.body.appendChild(R.hiddenSizer); - } - - let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; - let css = - R.parent.css.txtselect + - "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + - hide; - R.hiddenImput.style.cssText = - css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); - R.hiddenSizer.style.cssText = css + "bottom:40px;"; - - R.hiddenImput.style.width = R.input.clientWidth + "px"; - R.hiddenImput.value = R.str; - R.hiddenSizer.innerHTML = R.str; - - R.hasFocus = true; - }, - - clearHidden: function (p) { - if (R.hiddenImput === null) return; - R.hasFocus = false; - }, - - clickPos: function (x) { - let i = R.str.length, - l = 0, - n = 0; - while (i--) { - l += R.textWidth(R.str[n]); - if (l >= x) break; - n++; - } - return n; - }, - - upInput: function (x, down) { - if (R.parent === null) return false; - - let up = false; - - if (down) { - let id = R.clickPos(x); - - R.moveX = id; - - if (R.startX === -1) { - R.startX = id; - R.cursorId = id; - R.inputRange = [R.startX, R.startX]; - } else { - let isSelection = R.moveX !== R.startX; - - if (isSelection) { - if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; - else R.inputRange = [R.startX, R.moveX]; - } - } - - up = true; - } else { - if (R.startX !== -1) { - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.startX = -1; - - up = true; - } - } - - if (up) R.selectParent(); - - return up; - }, - - selectAll: function () { - if (!R.parent) return; - - R.str = R.input.textContent; - R.inputRange = [0, R.str.length]; - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.cursorId = R.inputRange[1]; - R.selectParent(); - }, - - selectParent: function () { - var c = R.textWidth(R.str.substring(0, R.cursorId)); - var e = R.textWidth(R.str.substring(0, R.inputRange[0])); - var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); - - R.parent.select(c, e, s, R.hiddenSizer.innerHTML); - }, - - textWidth: function (text) { - if (R.hiddenSizer === null) return 0; - text = text.replace(/ /g, " "); - R.hiddenSizer.innerHTML = text; - return R.hiddenSizer.clientWidth; - }, - - clearInput: function () { - if (R.parent === null) return; - if (!R.firstImput) R.parent.validate(true); - - R.clearHidden(); - R.parent.unselect(); - - //R.input.style.background = 'none'; - R.input.style.background = R.parent.colors.back; - R.input.style.borderColor = R.parent.colors.border; - //R.input.style.color = R.parent.colors.text; - R.parent.isEdit = false; - - R.input = null; - R.parent = null; - (R.str = ""), (R.firstImput = true); - }, - - setInput: function (Input, parent) { - R.clearInput(); - - R.input = Input; - R.parent = parent; - - R.input.style.background = R.parent.colors.backoff; - R.input.style.borderColor = R.parent.colors.select; - //R.input.style.color = R.parent.colors.textSelect; - R.str = R.input.textContent; - - R.setHidden(); - }, - - keydown: function (e) { - if (R.parent === null) return; - - let keyCode = e.which; - e.shiftKey; - - //console.log( keyCode ) - - R.firstImput = false; - - if (R.hasFocus) { - // hack to fix touch event bug in iOS Safari - window.focus(); - R.hiddenImput.focus(); - } - - R.parent.isEdit = true; - - // e.preventDefault(); - - // add support for Ctrl/Cmd+A selection - //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { - //R.selectText(); - //e.preventDefault(); - //return self.render(); - //} - - if (keyCode === 13) { - //enter - - R.clearInput(); - - //} else if( keyCode === 9 ){ //tab key - - // R.input.textContent = ''; - } else { - if (R.input.isNum) { - if ( - (e.keyCode > 47 && e.keyCode < 58) || - (e.keyCode > 95 && e.keyCode < 106) || - e.keyCode === 190 || - e.keyCode === 110 || - e.keyCode === 8 || - e.keyCode === 109 - ) { - R.hiddenImput.readOnly = false; - } else { - R.hiddenImput.readOnly = true; - } - } else { - R.hiddenImput.readOnly = false; - } - } - }, - - keyup: function (e) { - if (R.parent === null) return; - - R.str = R.hiddenImput.value; - - if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value - else R.input.textContent = R.str; - - R.cursorId = R.hiddenImput.selectionStart; - R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; - - R.selectParent(); - - //if( R.parent.allway ) - R.parent.validate(); - }, - - // ---------------------- - // - // LISTENING - // - // ---------------------- - - loop: function () { - // modified by Fedemarino - if (R.isLoop) requestAnimationFrame(R.loop); - R.needsUpdate = R.update(); - // if there is a change in a value generated externally, the GUI needs to be redrawn - if (R.ui[0]) R.ui[0].draw(); - }, - - update: function () { - // modified by Fedemarino - let i = R.listens.length; - let needsUpdate = false; - while (i--) { - //check if the value of the object has changed - let hasChanged = R.listens[i].listening(); - if (hasChanged) needsUpdate = true; - } - return needsUpdate; - }, - - removeListen: function (proto) { - let id = R.listens.indexOf(proto); - if (id !== -1) R.listens.splice(id, 1); - if (R.listens.length === 0) R.isLoop = false; - }, - - addListen: function (proto) { - let id = R.listens.indexOf(proto); - - if (id !== -1) return false; - - R.listens.push(proto); - - if (!R.isLoop) { - R.isLoop = true; - R.loop(); - } - - return true; - }, - }; - - const Roots = R; - - /** - * @author lth / https://github.com/lo-th - */ - - const T = { - - transition: 0.2, - - frag: document.createDocumentFragment(), - - colorRing: null, - joystick_0: null, - joystick_1: null, - circular: null, - knob: null, - pad2d: null, - - svgns: "http://www.w3.org/2000/svg", - links: "http://www.w3.org/1999/xlink", - htmls: "http://www.w3.org/1999/xhtml", - - DOM_SIZE: [ 'height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], - SVG_TYPE_D: [ 'pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix' ], - SVG_TYPE_G: [ 'svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject' ], - - PI: Math.PI, - TwoPI: Math.PI*2, - pi90: Math.PI * 0.5, - pi60: Math.PI/3, - - torad: Math.PI / 180, - todeg: 180 / Math.PI, - - clamp: ( v, min, max ) => { - - v = v < min ? min : v; - v = v > max ? max : v; - return v; - - }, - - isDivid: ( v ) => ( v*0.5 === Math.floor(v*0.5) ), - - size: { w: 240, h: 20, p: 30, s: 8 }, - - // ---------------------- - // COLOR - // ---------------------- - - defineColor: ( o, cc = T.colors ) => { - - let color = { ...cc }; - - let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize' ]; - let changeText = false; - - if( o.font ) o.fontFamily = o.font; - if( o.shadow ) o.fontShadow = o.shadow; - if( o.weight ) o.fontWeight = o.weight; - - if( o.fontColor ) o.text = o.fontColor; - if( o.color ) o.text = o.color; - - if( o.text ){ - color.text = o.text; - if( !o.fontColor && !o.color ){ - color.title = T.ColorLuma( o.text, -0.25 ); - color.titleoff = T.ColorLuma( o.text, -0.5 ); - } - color.textOver = T.ColorLuma( o.text, 0.25 ); - color.textSelect = T.ColorLuma( o.text, 0.5 ); - } - - if( o.button ){ - color.button = o.button; - color.border = T.ColorLuma( o.button, 0.1 ); - color.overoff = T.ColorLuma( o.button, 0.2 ); - } - - if( o.select ){ - color.select = o.select; - color.over = T.ColorLuma( o.select, -0.1 ); - } - - if( o.itemBg ) o.back = o.itemBg; - - if( o.back ){ - color.back = o.back; - color.backoff = T.ColorLuma( o.back, -0.1 ); - } - - if( o.fontSelect ) color.textSelect = o.fontSelect; - if( o.groupBorder ) color.gborder = o.groupBorder; - - //if( o.transparent ) o.bg = 'none' - //if( o.bg ) color.background = color.backgroundOver = o.bg - if( o.bgOver ) color.backgroundOver = o.bgOver; - - for( let m in color ){ - if(o[m]!==undefined) color[m] = o[m]; - } - - for( let m in o ){ - if( textChange.indexOf(m) !== -1 ) changeText = true; - } - - if( changeText ) T.defineText( color ); - - return color - - }, - - colors: { - - sx: 4,//4 - sy: 2,//2 - radius:2, - - showOver : 1, - //groupOver : 1, - - content:'none', - background: 'rgba(50,50,50,0.15)', - backgroundOver: 'rgba(50,50,50,0.3)', - - title : '#CCC', - titleoff : '#BBB', - text : '#DDD', - textOver : '#EEE', - textSelect : '#FFF', - - back:'rgba(0,0,0,0.2)', - backoff:'rgba(0,0,0,0.3)', - - // input and button border - border : '#4c4c4c', - borderSize : 1, - - gborder : 'none', - groups : 'none', - - - button : '#3c3c3c', - overoff : '#5c5c5c', - over : '#024699', - select : '#308AFF', - action: '#FF3300', - - //fontFamily: 'Tahoma', - fontFamily: 'Consolas, monospace', - //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", - fontWeight: 'normal', - fontShadow: 'none',//'#000', - fontSize:12, - - joyOver:'rgba(48,138,255,0.25)', - joyOut: 'rgba(100,100,100,0.5)', - joySelect: '#308AFF', - - - hide: 'rgba(0,0,0,0)', - - }, - - // style css - - css : { - - basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', - button:'display:flex; align-items:center; justify-content:center; text-align:center;', - middle:'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' - }, - - // svg path - - svgs: { - - g1:'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', - g2:'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', - - group:'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', - arrow:'M 3 8 L 8 5 3 2 3 8 Z', - - arrowDown:'M 5 8 L 8 3 2 3 5 8 Z', - arrowUp:'M 5 2 L 2 7 8 7 5 2 Z', - - solid:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', - body:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', - vehicle:'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', - articulation:'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', - character:'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', - terrain:'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', - joint:'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', - ray:'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', - collision:'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', - map:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - material:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - texture:'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', - object:'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', - none:'M 9 5 L 5 5 5 9 9 9 9 5 Z', - cursor:'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', - load:'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', - save:'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', - extern:'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z', - - }, - - rezone () { - Roots.needReZone = true; - }, - - getImput: function(){ - - return Roots.input ? true : false - - }, - - setStyle : function ( data ){ - - for ( var o in data ){ - if( T.colors[o] ) T.colors[o] = data[o]; - } - - T.setText(); - - }, - - // ---------------------- - // custom text - // ---------------------- - - defineText: function( o ){ - - T.setText( o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight ); - - }, - - setText: function( size, color, font, shadow, weight ){ - - let cc = T.colors; - - if( font === undefined ) font = cc.fontFamily; - if( size === undefined ) size = cc.fontSize; - if( shadow === undefined ) shadow = cc.fontShadow; - if( weight === undefined ) weight = cc.fontWeight; - if( color === undefined ) color = cc.text; - - if( isNaN(size) ){ if( size.search('em')===-1 ) size += 'px';} - else size += 'px'; - - - //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' - - T.css.txt = T.css.basic + T.css.middle + ' font-family:'+ font +'; font-weight:'+weight+'; font-size:'+size+'; color:'+cc.text+'; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; - if( shadow !== 'none' ) T.css.txt += ' text-shadow: 1px 1px 1px '+shadow+';'; - - T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; - T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; - - }, - - - // note - - //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container - - /*cloneColor: function () { - - let cc = Object.assign({}, T.colors ); - return cc; - - },*/ - - // intern function - - cloneCss: function () { - - //let cc = Object.assign({}, T.css ); - return { ...T.css }; - - }, - - clone: function ( o ) { - - return o.cloneNode( true ); - - }, - - setSvg: function( dom, type, value, id, id2 ){ - - if( id === -1 ) dom.setAttributeNS( null, type, value ); - else if( id2 !== undefined ) dom.childNodes[ id || 0 ].childNodes[ id2 || 0 ].setAttributeNS( null, type, value ); - else dom.childNodes[ id || 0 ].setAttributeNS( null, type, value ); - - }, - - setCss: function( dom, css ){ - - for( let r in css ){ - if( T.DOM_SIZE.indexOf(r) !== -1 ) dom.style[r] = css[r] + 'px'; - else dom.style[r] = css[r]; - } - - }, - - set: function( g, o ){ - - for( let att in o ){ - if( att === 'txt' ) g.textContent = o[ att ]; - if( att === 'link' ) g.setAttributeNS( T.links, 'xlink:href', o[ att ] ); - else g.setAttributeNS( null, att, o[ att ] ); - } - - }, - - get: function( dom, id ){ - - if( id === undefined ) return dom; // root - else if( !isNaN( id ) ) return dom.childNodes[ id ]; // first child - else if( id instanceof Array ){ - if(id.length === 2) return dom.childNodes[ id[0] ].childNodes[ id[1] ]; - if(id.length === 3) return dom.childNodes[ id[0] ].childNodes[ id[1] ].childNodes[ id[2] ]; - } - - }, - - dom : function ( type, css, obj, dom, id ) { - - type = type || 'div'; - - if( T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1 ){ // is svg element - - if( type ==='svg' ){ - - dom = document.createElementNS( T.svgns, 'svg' ); - T.set( dom, obj ); - - /* } else if ( type === 'use' ) { - - dom = document.createElementNS( T.svgns, 'use' ); - T.set( dom, obj ); - */ - } else { - // create new svg if not def - if( dom === undefined ) dom = document.createElementNS( T.svgns, 'svg' ); - T.addAttributes( dom, type, obj, id ); - - } - - } else { // is html element - - if( dom === undefined ) dom = document.createElementNS( T.htmls, type ); - else dom = dom.appendChild( document.createElementNS( T.htmls, type ) ); - - } - - if( css ) dom.style.cssText = css; - - if( id === undefined ) return dom; - else return dom.childNodes[ id || 0 ]; - - }, - - addAttributes : function( dom, type, o, id ){ - - let g = document.createElementNS( T.svgns, type ); - T.set( g, o ); - T.get( dom, id ).appendChild( g ); - if( T.SVG_TYPE_G.indexOf(type) !== -1 ) g.style.pointerEvents = 'none'; - return g; - - }, - - clear : function( dom ){ - - T.purge( dom ); - while (dom.firstChild) { - if ( dom.firstChild.firstChild ) T.clear( dom.firstChild ); - dom.removeChild( dom.firstChild ); - } - - }, - - purge : function ( dom ) { - - let a = dom.attributes, i, n; - if (a) { - i = a.length; - while(i--){ - n = a[i].name; - if (typeof dom[n] === 'function') dom[n] = null; - } - } - a = dom.childNodes; - if (a) { - i = a.length; - while(i--){ - T.purge( dom.childNodes[i] ); - } - } - - }, - - // ---------------------- - // SVG Effects function - // ---------------------- - - addSVGGlowEffect: function () { - - if ( document.getElementById( 'UILGlow') !== null ) return; - - let svgFilter = T.initUILEffects(); - - let filter = T.addAttributes( svgFilter, 'filter', { id: 'UILGlow', x: '-20%', y: '-20%', width: '140%', height: '140%' } ); - T.addAttributes( filter, 'feGaussianBlur', { in: 'SourceGraphic', stdDeviation: '3', result: 'uilBlur' } ); - let feMerge = T.addAttributes( filter, 'feMerge', { } ); - - for( let i = 0; i <= 3; i++ ) { - - T.addAttributes( feMerge, 'feMergeNode', { in: 'uilBlur' } ); - - } - - T.addAttributes( feMerge, 'feMergeNode', { in: 'SourceGraphic' } ); - - }, - - initUILEffects: function () { - - let svgFilter = document.getElementById( 'UILSVGEffects'); - - if ( svgFilter === null ) { - - svgFilter = T.dom( 'svg', undefined , { id: 'UILSVGEffects', width: '0', height: '0' } ); - document.body.appendChild( svgFilter ); - - } - - return svgFilter; - - }, - - // ---------------------- - // Color function - // ---------------------- - - ColorLuma : function ( hex, l ) { - - //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; - - if( hex === 'n' ) hex = '#000'; - - // validate hex string - hex = String(hex).replace(/[^0-9a-f]/gi, ''); - if (hex.length < 6) { - hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; - } - l = l || 0; - - // convert to decimal and change luminosity - let rgb = "#", c, i; - for (i = 0; i < 3; i++) { - c = parseInt(hex.substr(i*2,2), 16); - c = Math.round(Math.min(Math.max(0, c + (c * l)), 255)).toString(16); - rgb += ("00"+c).substr(c.length); - } - - return rgb; - - }, - - findDeepInver: function ( c ) { - - return (c[0] * 0.3 + c[1] * .59 + c[2] * .11) <= 0.6; - - }, - - lerpColor: function( c1, c2, factor ) { - let newColor = {}; - for ( let i = 0; i < 3; i++ ) { - newColor[i] = c1[ i ] + ( c2[ i ] - c1[ i ] ) * factor; - } - return newColor; - }, - - hexToHtml: function ( v ) { - v = v === undefined ? 0x000000 : v; - return "#" + ("000000" + v.toString(16)).substr(-6); - - }, - - htmlToHex: function ( v ) { - - return v.toUpperCase().replace("#", "0x"); - - }, - - u255: function (c, i) { - - return parseInt(c.substring(i, i + 2), 16) / 255; - - }, - - u16: function ( c, i ) { - - return parseInt(c.substring(i, i + 1), 16) / 15; - - }, - - unpack: function( c ){ - - if (c.length == 7) return [ T.u255(c, 1), T.u255(c, 3), T.u255(c, 5) ]; - else if (c.length == 4) return [ T.u16(c,1), T.u16(c,2), T.u16(c,3) ]; - - }, - - p255: function ( c ) { - let h = Math.round( ( c * 255 ) ).toString( 16 ); - if ( h.length < 2 ) h = '0' + h; - return h; - }, - - pack: function ( c ) { - - return '#' + T.p255( c[ 0 ] ) + T.p255( c[ 1 ] ) + T.p255( c[ 2 ] ); - - }, - - htmlRgb: function( c ){ - - return 'rgb(' + Math.round(c[0] * 255) + ','+ Math.round(c[1] * 255) + ','+ Math.round(c[2] * 255) + ')'; - - }, - - pad: function( n ){ - if(n.length == 1)n = '0' + n; - return n; - }, - - rgbToHex : function( c ){ - - let r = Math.round(c[0] * 255).toString(16); - let g = Math.round(c[1] * 255).toString(16); - let b = Math.round(c[2] * 255).toString(16); - return '#' + T.pad(r) + T.pad(g) + T.pad(b); - - // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); - - }, - - hueToRgb: function( p, q, t ){ - - if ( t < 0 ) t += 1; - if ( t > 1 ) t -= 1; - if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; - if ( t < 1 / 2 ) return q; - if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); - return p; - - }, - - rgbToHsl: function ( c ) { - - let r = c[0], g = c[1], b = c[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h = 0, s = 0, l = (min + max) / 2; - if (l > 0 && l < 1) s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); - if (delta > 0) { - if (max == r && max != g) h += (g - b) / delta; - if (max == g && max != b) h += (2 + (b - r) / delta); - if (max == b && max != r) h += (4 + (r - g) / delta); - h /= 6; - } - return [ h, s, l ]; - - }, - - hslToRgb: function ( c ) { - - let p, q, h = c[0], s = c[1], l = c[2]; - - if ( s === 0 ) return [ l, l, l ]; - else { - q = l <= 0.5 ? l * (s + 1) : l + s - ( l * s ); - p = l * 2 - q; - return [ T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333) ]; - } - - }, - - // ---------------------- - // SVG MODEL - // ---------------------- - - makeGradiant: function ( type, settings, parent, colors ) { - - T.dom( type, null, settings, parent, 0 ); - - let n = parent.childNodes[0].childNodes.length - 1, c; - - for( let i = 0; i < colors.length; i++ ){ - - c = colors[i]; - //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); - T.dom( 'stop', null, { offset:c[0]+'%', 'stop-color':c[1], 'stop-opacity':c[2] }, parent, [0,n] ); - - } - - }, - - /*makeGraph: function () { - - let w = 128; - let radius = 34; - let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 - //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 - //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 - - //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 - //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 - T.graph = svg; - - },*/ - - makePad: function ( model ) { - - let ww = 256; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+ww+' '+ww, width:ww, height:ww, preserveAspectRatio:'none' } ); - let w = 200; - let d = (ww-w)*0.5, m = 20; - Tools.dom( 'rect', '', { x: d, y: d, width: w, height: w, fill:T.colors.back }, svg ); // 0 - Tools.dom( 'rect', '', { x: d+m*0.5, y: d+m*0.5, width: w - m , height: w - m, fill:T.colors.button }, svg ); // 1 - // Pointer - Tools.dom( 'line', '', { x1: d+(m*0.5), y1: ww *0.5, x2: d+(w-m*0.5), y2: ww * 0.5, stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 2 - Tools.dom( 'line', '', { x1: ww * 0.5, x2: ww * 0.5, y1: d+(m*0.5), y2: d+(w-m*0.5), stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 3 - Tools.dom( 'circle', '', { cx: ww * 0.5, cy: ww * 0.5, r:5, stroke: T.colors.text, 'stroke-width': 5, fill:'none' }, svg ); // 4 - T.pad2d = svg; - - }, - - makeKnob: function ( model ) { - - let w = 128; - let radius = 34; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'round' }, svg );//1 - T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.1)', 'stroke-width':7 , fill:'none'}, svg );//2 - T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 - T.knob = svg; - - }, - - makeCircular: function ( model ) { - - let w = 128; - let radius = 40; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'circle', '', { cx:64, cy:64, r:radius, stroke:'rgba(0,0,0,0.1)', 'stroke-width':10, fill:'none' }, svg );//0 - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':7, fill:'none', 'stroke-linecap':'butt' }, svg );//1 - T.circular = svg; - - }, - - makeJoystick: function ( model ) { - - //+' background:#f00;' - - let w = 128, ccc; - let radius = Math.floor((w-30)*0.5); - let innerRadius = Math.floor(radius*0.6); - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'defs', null, {}, svg ); - T.dom( 'g', null, {}, svg ); - - if( model === 0 ){ - - - - // gradian background - ccc = [ [40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'grad', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // gradian shadow - ccc = [ [60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'gradS', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // gradian stick - let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; - let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; - - ccc = [ [30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1] ]; - T.makeGradiant( 'radialGradient', { id:'gradIn', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - ccc = [ [30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1] ]; - T.makeGradiant( 'radialGradient', { id:'gradIn2', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // graph - - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'url(#grad)' }, svg );//2 - T.dom( 'circle', '', { cx:64+5, cy:64+10, r:innerRadius+10, fill:'url(#gradS)' }, svg );//3 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'url(#gradIn)' }, svg );//4 - - T.joystick_0 = svg; - - } else { - // gradian shadow - ccc = [ [69, 'rgb(0,0,0)', 0],[70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'gradX', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'none', stroke:'rgba(100,100,100,0.25)', 'stroke-width':'4' }, svg );//2 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius+14, fill:'url(#gradX)' }, svg );//3 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'none', stroke:'rgb(100,100,100)', 'stroke-width':'4' }, svg );//4 - - T.joystick_1 = svg; - } - - - - }, - - makeColorRing: function () { - - let w = 256; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'defs', null, {}, svg ); - T.dom( 'g', null, {}, svg ); - - let s = 30;//stroke - let r =( w-s )*0.5; - let mid = w*0.5; - let n = 24, nudge = 8 / r / n * Math.PI, a1 = 0; - let am, tan, d2, a2, ar, i, j, path, ccc; - let color = []; - - for ( i = 0; i <= n; ++i) { - - d2 = i / n; - a2 = d2 * T.TwoPI; - am = (a1 + a2) * 0.5; - tan = 1 / Math.cos((a2 - a1) * 0.5); - - ar = [ - Math.sin(a1), -Math.cos(a1), - Math.sin(am) * tan, -Math.cos(am) * tan, - Math.sin(a2), -Math.cos(a2) - ]; - - color[1] = T.rgbToHex( T.hslToRgb([d2, 1, 0.5]) ); - - if (i > 0) { - - j = 6; - while(j--){ - ar[j] = ((ar[j]*r)+mid).toFixed(2); - } - - path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; - - ccc = [ [0,color[0],1], [100,color[1],1] ]; - T.makeGradiant( 'linearGradient', { id:'G'+i, x1:ar[0], y1:ar[1], x2:ar[4], y2:ar[5], gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - T.dom( 'path', '', { d:path, 'stroke-width':s, stroke:'url(#G'+i+')', 'stroke-linecap':"butt" }, svg, 1 ); - - } - a1 = a2 - nudge; - color[0] = color[1]; - } - - let tw = 84.90; - - // black / white - ccc = [ [0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1] ]; - T.makeGradiant( 'linearGradient', { id:'GL0', x1:0, y1:mid-tw, x2:0, y2:mid+tw, gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - ccc = [ [0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0] ]; - T.makeGradiant( 'linearGradient', { id:'GL1', x1:mid-49.05, y1:0, x2:mid+98, y2:0, gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - T.dom( 'g', null, { 'transform-origin': '128px 128px', 'transform':'rotate(0)' }, svg );//2 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'red' }, svg, 2 );// 2,0 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL1)','stroke-width':1, stroke:'url(#GL1)' }, svg, 2 );//2,1 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL0)','stroke-width':1, stroke:'url(#GL0)' }, svg, 2 );//2,2 - T.dom( 'path', '', { d:'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill:'none','stroke-width':2, stroke:'#000' }, svg, 2 );//2,3 - //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 - - T.dom( 'circle', '', { cx:128, cy:128, r:6, 'stroke-width':2, stroke:'#000', fill:'none' }, svg );//3 - - T.colorRing = svg; - - }, - - icon: function ( type, color, w ){ - - w = w || 40; - //color = color || '#DEDEDE'; - let viewBox = '0 0 256 256'; - //let viewBox = '0 0 '+ w +' '+ w; - let t = [""]; - switch(type){ - case 'logo': - t[1]=""; - break; - case 'donate': - t[1]=""; - break; - case 'neo': - t[1]=""; - break; - case 'phy': - t[1]=""; - break; - case 'config': - t[1]=""; - break; - case 'github': - t[1]=""; - break; - case 'save': - t[1]=""; - break; - } - t[2] = ""; - return t.join("\n"); - - }, - - logoFill_d:` - M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 - L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 - M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 - Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z - `, - - logo_github:` - M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 - 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 - 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 - 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 - 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z - `, - - logo_neo:` - M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 - 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 - 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 - 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L - 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z - `, - - logo_phy:` - M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 - Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 - `, - - logo_config:` - M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 - L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 - Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 - `, - - logo_donate:` - M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 - 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 - 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 - 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 - 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 - Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 - 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 - 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 - 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M - 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 - 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 - 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 - 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 - 200.9 187.5 200.9 187.5 195.35 Z - `, - - }; - - T.setText(); - - const Tools = T; - - ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile - - - class Files { - - //----------------------------- - // FILE TYPE - //----------------------------- - - static autoTypes( type ) { - - let t = []; - - switch( type ){ - case 'svg': - t = [ { accept: { 'image/svg+xml': '.svg'} }, ]; - break; - case 'wav': - t = [ { accept: { 'audio/wav': '.wav'} }, ]; - break; - case 'mp3': - t = [ { accept: { 'audio/mpeg': '.mp3'} }, ]; - break; - case 'mp4': - t = [ { accept: { 'video/mp4': '.mp4'} }, ]; - break; - case 'bin': case 'hex': - t = [ { description: 'Binary Files', accept: { 'application/octet-stream': ['.bin', '.hex'] } }, ]; - break; - case 'text': - t = [ { description: 'Text Files', accept: { 'text/plain': ['.txt', '.text'], 'text/html': ['.html', '.htm'] } }, ]; - break; - case 'json': - t = [ { description: 'JSON Files', accept: { 'application/json': ['.json'] } }, ];//text/plain - break; - case 'js': - t = [ { description: 'JavaScript Files', accept: { 'text/javascript': ['.js'] } }, ]; - break; - case 'image': - t = [ { description: 'Images', accept: { 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] } }, ]; - break; - case 'icon': - t = [ { description: 'Icons', accept: { 'image/x-ico': ['.ico'] } }, ]; - break; - case 'lut': - t = [ { description: 'Lut', accept: { 'text/plain': ['.cube', '.3dl'] } }, ]; - break; - - } - - return t - - } - - - //----------------------------- - // LOAD - //----------------------------- - - static async load( o = {} ) { - - if (typeof window.showOpenFilePicker !== 'function') { - window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; - } - - try { - - let type = o.type || ''; - - const options = { - excludeAcceptAllOption: type ? true : false, - multiple: false, - //startIn:'./assets' - }; - - options.types = Files.autoTypes( type ); - - // create a new handle - const handle = await window.showOpenFilePicker( options ); - const file = await handle[0].getFile(); - //let content = await file.text() - - if( !file ) return null - - let fname = file.name; - let ftype = fname.substring( fname.lastIndexOf('.')+1, fname.length ); - - const dataUrl = [ 'png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3' ]; - const dataBuf = [ 'sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf' ]; - const reader = new FileReader(); - - if( dataUrl.indexOf( ftype ) !== -1 ) reader.readAsDataURL( file ); - else if( dataBuf.indexOf( ftype ) !== -1 ) reader.readAsArrayBuffer( file ); - else reader.readAsText( file ); - - reader.onload = function(e) { - - let content = e.target.result; - - switch(type){ - case 'image': - let img = new Image; - img.onload = function() { - if( o.callback ) o.callback( img, fname, ftype ); - }; - img.src = content; - break; - case 'json': - if( o.callback ) o.callback( JSON.parse( content ), fname, ftype ); - break; - default: - if( o.callback ) o.callback( content, fname, ftype ); - break; - } - - }; - - } catch(e) { - - console.log(e); - if( o.always && o.callback ) o.callback( null ); - - } - - } - - static showOpenFilePickerPolyfill( options ) { - return new Promise((resolve) => { - const input = document.createElement("input"); - input.type = "file"; - input.multiple = options.multiple; - input.accept = options.types - .map((type) => type.accept) - .flatMap((inst) => Object.keys(inst).flatMap((key) => inst[key])) - .join(","); - - input.addEventListener("change", () => { - resolve( - [...input.files].map((file) => { - return { - getFile: async () => - new Promise((resolve) => { - resolve(file); - }), - }; - }) - ); - }); - - input.click(); - }) - } - - - //----------------------------- - // SAVE - //----------------------------- - - static async save( o = {} ) { - - let usePoly = false; - - if (typeof window.showSaveFilePicker !== 'function') { - window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; - usePoly = true; - } - - try { - - let type = o.type || ''; - - const options = { - suggestedName: o.name || 'hello', - data: o.data || '' - }; - - options.types = Files.autoTypes( type ); - options.finalType = Object.keys( options.types[0].accept )[0]; - options.suggestedName += options.types[0].accept[options.finalType][0]; - - - // create a new handle - const handle = await window.showSaveFilePicker( options ); - - if( usePoly ) return - - // create a FileSystemWritableFileStream to write to - const file = await handle.createWritable(); - - let blob = new Blob([ options.data ], { type: options.finalType }); - - // write our file - await file.write(blob); - - // close the file and write the contents to disk. - await file.close(); - - } catch(e) { - - console.log(e); - - } - - } - - static showSaveFilePickerPolyfill( options ) { - return new Promise((resolve) => { - const a = document.createElement("a"); - a.download = options.suggestedName || "my-file.txt"; - let blob = new Blob([ options.data ], { type:options.finalType }); - a.href = URL.createObjectURL( blob ); - - a.addEventListener("click", () => { - resolve( - setTimeout( () => URL.revokeObjectURL(a.href), 1000 ) - ); - }); - a.click(); - }) - } - - - //----------------------------- - // FOLDER not possible in poly - //----------------------------- - - static async getFolder() { - - try { - - const handle = await window.showDirectoryPicker(); - const files = []; - for await (const entry of handle.values()) { - const file = await entry.getFile(); - files.push(file); - } - - console.log(files); - return files; - - } catch(e) { - - console.log(e); - - } - - } - - - - - - - - - - - } - - class V2 { - - constructor( x = 0, y = 0 ) { - - this.x = x; - this.y = y; - - } - - set ( x, y ) { - - this.x = x; - this.y = y; - return this; - - } - - divide ( v ) { - - this.x /= v.x; - this.y /= v.y; - return this; - - } - - multiply ( v ) { - - this.x *= v.x; - this.y *= v.y; - return this; - - } - - multiplyScalar ( scalar ) { - - this.x *= scalar; - this.y *= scalar; - return this; - - } - - divideScalar ( scalar ) { - - return this.multiplyScalar( 1 / scalar ); - - } - - length () { - - return Math.sqrt( this.x * this.x + this.y * this.y ); - - } - - angle () { - - // computes the angle in radians with respect to the positive x-axis - - var angle = Math.atan2( this.y, this.x ); - - if ( angle < 0 ) angle += 2 * Math.PI; - - return angle; - - } - - addScalar ( s ) { - - this.x += s; - this.y += s; - return this; - - } - - negate () { - - this.x *= -1; - this.y *= -1; - return this; - - } - - neg () { - - this.x = -1; - this.y = -1; - return this; - - } - - isZero () { - - return ( this.x === 0 && this.y === 0 ); - - } - - copy ( v ) { - - this.x = v.x; - this.y = v.y; - - return this; - - } - - equals ( v ) { - - return ( ( v.x === this.x ) && ( v.y === this.y ) ); - - } - - nearEquals ( v, n ) { - - return ( ( v.x.toFixed(n) === this.x.toFixed(n) ) && ( v.y.toFixed(n) === this.y.toFixed(n) ) ); - - } - - lerp ( v, alpha ) { - - if( v === null ){ - this.x -= this.x * alpha; - this.y -= this.y * alpha; - } else { - this.x += ( v.x - this.x ) * alpha; - this.y += ( v.y - this.y ) * alpha; - } - - return this; - - } - - } - - /** - * @author lth / https://github.com/lo-th - */ - - class Proto { - constructor(o = {}) { - // disable mouse controle - this.lock = o.lock || false; - - // for button - this.neverlock = false; - - // only simple space - this.isSpace = o.isSpace || false; - - // if is on gui or group - this.main = o.main || null; - this.isUI = o.isUI || false; - this.group = o.group || null; - - this.isListen = false; - - this.top = 0; - this.ytop = 0; - - this.dx = o.dx || 0; - - this.isSelectable = o.selectable !== undefined ? o.selectable : false; - this.unselectable = - o.unselect !== undefined ? o.unselect : this.isSelectable; - - this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' - - this.css = this.main ? this.main.css : Tools.css; - - this.colors = Tools.defineColor( - o, - this.main - ? this.group - ? this.group.colors - : this.main.colors - : Tools.colors - ); - - this.overEffect = this.colors.showOver; - - this.svgs = Tools.svgs; - - this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; - this.local = new V2().neg(); - - this.isCanvasOnly = false; - this.isSelect = false; - - // percent of title - this.p = o.p !== undefined ? o.p : Tools.size.p; - - this.w = this.isUI ? this.main.size.w : Tools.size.w; - if (o.w !== undefined) this.w = o.w; - - this.h = this.isUI ? this.main.size.h : Tools.size.h; - if (o.h !== undefined) this.h = o.h; - if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; - else this.lock = true; - - // decale for canvas only - this.fw = o.fw || 0; - - this.autoWidth = o.auto || true; // auto width or flex - this.isOpen = false; //false// open statu - - // radius for toolbox - this.radius = o.radius || this.colors.radius; - - this.transition = o.transition || Tools.transition; - - // only for number - this.isNumber = false; - this.noNeg = o.noNeg || false; - this.allEqual = o.allEqual || false; - - // only most simple - this.mono = false; - - // stop listening for edit slide text - this.isEdit = false; - - // no title - this.simple = o.simple || false; - if (this.simple) this.sa = 0; - - // define obj size - this.setSize(this.w); - - // title size - if (o.sa !== undefined) this.sa = o.sa; - if (o.sb !== undefined) this.sb = o.sb; - if (this.simple) this.sb = this.w - this.sa; - - // last number size for slide - this.sc = o.sc === undefined ? 47 : o.sc; - - // for listening object - this.objectLink = null; - this.isSend = false; - this.objectKey = null; - - this.txt = o.name || ""; - this.name = o.rename || this.txt; - this.target = o.target || null; - - // callback - this.callback = o.callback === undefined ? null : o.callback; - this.endCallback = null; - this.openCallback = o.openCallback === undefined ? null : o.openCallback; - this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; - - // if no callback take one from group or gui - if (this.callback === null && this.isUI && this.main.callback !== null) { - this.callback = this.group ? this.group.callback : this.main.callback; - } - - // elements - this.c = []; - - // style - this.s = []; - - this.useFlex = this.isUI ? this.main.useFlex : false; - let flexible = this.useFlex - ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" - : "float:left;"; - - this.c[0] = Tools.dom( - "div", - this.css.basic + flexible + "position:relative; height:20px;" - ); - - this.s[0] = this.c[0].style; - - // bottom margin - this.margin = this.colors.sy; - this.mtop = 0; - let marginDiv = Tools.isDivid(this.margin); - - if (this.isUI && this.margin) { - this.s[0].boxSizing = "content-box"; - if (marginDiv) { - this.mtop = this.margin * 0.5; - //this.s[0].borderTop = '${this.mtop}px solid transparent' - //console.log(`${this.mtop}px solid transparent`) - this.s[0].borderTop = this.mtop + "px solid transparent"; - this.s[0].borderBottom = this.mtop + "px solid transparent"; - } else { - this.s[0].borderBottom = this.margin + "px solid transparent"; - } - } - - // with title - if (!this.simple) { - this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); - this.s[1] = this.c[1].style; - this.c[1].textContent = this.name; - this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; - } - - if (o.pos) { - this.s[0].position = "absolute"; - for (let p in o.pos) { - this.s[0][p] = o.pos[p]; - } - this.mono = true; - } - - if (o.css) this.s[0].cssText = o.css; - } - - // ---------------------- - // make the node - // ---------------------- - - init() { - this.ytop = this.top + this.mtop; - - this.zone.h = this.h + this.margin; - this.zone.w = this.w; - - let s = this.s; // style cache - let c = this.c; // div cach - - s[0].height = this.h + "px"; - - if (this.isUI) s[0].background = this.colors.background; - - if (!this.autoWidth && this.useFlex) { - s[0].flex = "1 0 auto"; - s[0].minWidth = this.minw + "px"; - s[0].textAlign = "center"; - } else { - if (this.isUI) s[0].width = "100%"; - } - - //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; - if (c[1] !== undefined && this.autoWidth) { - s[1] = c[1].style; - s[1].top = 1 + "px"; - s[1].height = this.h - 2 + "px"; - } - - let frag = Tools.frag; - - for (let i = 1, lng = c.length; i !== lng; i++) { - if (c[i] !== undefined) { - frag.appendChild(c[i]); - s[i] = c[i].style; - } - } - - let pp = - this.target !== null - ? this.target - : this.isUI - ? this.main.inner - : document.body; - - if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); - else pp.appendChild(c[0]); - - c[0].appendChild(frag); - - this.rSize(); - - // ! solo proto - if (!this.isUI) { - this.c[0].style.pointerEvents = "auto"; - Roots.add(this); - } - } - - addTransition() { - if (this.baseH && this.transition && this.isUI) { - this.c[0].style.transition = "height " + this.transition + "s ease-out"; - } - } - - // from Tools - - dom(type, css, obj, dom, id) { - return Tools.dom(type, css, obj, dom, id); - } - - setSvg(dom, type, value, id, id2) { - Tools.setSvg(dom, type, value, id, id2); - } - - setCss(dom, css) { - Tools.setCss(dom, css); - } - - clamp(value, min, max) { - return Tools.clamp(value, min, max); - } - - getColorRing() { - if (!Tools.colorRing) Tools.makeColorRing(); - return Tools.clone(Tools.colorRing); - } - - getJoystick(model) { - if (!Tools["joystick_" + model]) Tools.makeJoystick(model); - return Tools.clone(Tools["joystick_" + model]); - } - - getCircular(model) { - if (!Tools.circular) Tools.makeCircular(model); - return Tools.clone(Tools.circular); - } - - getKnob(model) { - if (!Tools.knob) Tools.makeKnob(model); - return Tools.clone(Tools.knob); - } - - getPad2d(model) { - if (!Tools.pad2d) Tools.makePad(model); - return Tools.clone(Tools.pad2d); - } - - // from Roots - - cursor(name) { - Roots.cursor(name); - } - - ///////// - - update() {} - - reset() {} - - ///////// - - content() { - return this.c[0]; - } - - getDom() { - return this.c[0]; - } - - uiout() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.background; - } - - uiover() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.backgroundOver; - } - - rename(s) { - if (this.c[1] !== undefined) this.c[1].textContent = s; - } - - listen() { - this.isListen = Roots.addListen(this); - return this; - } - - listening() { - // modified by Fedemarino - if (this.objectLink === null) return; - if (this.isSend) return; - if (this.isEdit) return; - // check if value has changed - let hasChanged = this.setValue(this.objectLink[this.objectKey]); - return hasChanged; - } - - setValue(v) { - const old = this.value; - if (this.isNumber) this.value = this.numValue(v); - //else if( v instanceof Array && v.length === 1 ) v = v[0]; - else this.value = v; - this.update(); - let hasChanged = false; - if (old !== this.value) { - hasChanged = true; - } - - return hasChanged; - } - - // ---------------------- - // update every change - // ---------------------- - - onChange(f) { - if (this.isSpace) return; - this.callback = f || null; - return this; - } - - // ---------------------- - // update only on end - // ---------------------- - - onFinishChange(f) { - if (this.isSpace) return; - this.callback = null; - this.endCallback = f; - return this; - } - - // ---------------------- - // event on open close - // ---------------------- - - onOpen(f) { - this.openCallback = f; - return this; - } - - onClose(f) { - this.closeCallback = f; - return this; - } - - // ---------------------- - // send back value - // ---------------------- - - send(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - - this.isSend = true; - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - if (this.callback) this.callback(v, this.objectKey); - this.isSend = false; - } - - sendEnd(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - - if (this.endCallback) this.endCallback(v); - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - } - - // ---------------------- - // clear node - // ---------------------- - - dispose() { - if (this.isListen) Roots.removeListen(this); - - Tools.clear(this.c[0]); - - if (this.target !== null) { - if (this.group !== null) this.group.clearOne(this); - else this.target.removeChild(this.c[0]); - } else { - if (this.isUI) this.main.clearOne(this); - else document.body.removeChild(this.c[0]); - } - - if (!this.isUI) Roots.remove(this); - - this.c = null; - this.s = null; - this.callback = null; - this.target = null; - this.isListen = false; - } - - clear() {} - - // ---------------------- - // change size - // ---------------------- - - getWidth() { - let nw = Roots.getWidth(this); - if (nw) this.w = nw; - } - - setSize(sx) { - if (!this.autoWidth) return; - - this.w = sx; - - if (this.simple) { - this.sb = this.w - this.sa; - } else { - let pp = this.w * (this.p / 100); - //this.sa = Math.floor( pp + 10 ) - //this.sb = Math.floor( this.w - pp - 20 ) - this.sa = Math.floor(pp + 8); - this.sb = Math.floor(this.w - pp - 16); - } - } - - rSize() { - if (!this.autoWidth) return; - if (!this.isUI) this.s[0].width = this.w + "px"; - if (!this.simple) this.s[1].width = this.sa + "px"; - } - - // ---------------------- - // for numeric value - // ---------------------- - - setTypeNumber(o) { - this.isNumber = true; - - this.value = 0; - if (o.value !== undefined) { - if (typeof o.value === "string") this.value = o.value * 1; - else this.value = o.value; - } - - this.min = o.min === undefined ? -Infinity : o.min; - this.max = o.max === undefined ? Infinity : o.max; - this.precision = o.precision === undefined ? 2 : o.precision; - - let s; - - switch (this.precision) { - case 0: - s = 1; - break; - case 1: - s = 0.1; - break; - case 2: - s = 0.01; - break; - case 3: - s = 0.001; - break; - case 4: - s = 0.0001; - break; - case 5: - s = 0.00001; - break; - case 6: - s = 0.000001; - break; - } - - this.step = o.step === undefined ? s : o.step; - this.range = this.max - this.min; - this.value = this.numValue(this.value); - } - - numValue(n) { - if (this.noNeg) n = Math.abs(n); - return ( - Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 - ); - } - - // ---------------------- - // EVENTS DEFAULT - // ---------------------- - - handleEvent(e) { - if (this.lock) return; - if (this.neverlock) Roots.lock = false; - if (!this[e.type]) - return console.error(e.type, "this type of event no existe !"); - - // TODO !!!! - - //if( this.marginDiv ) z.d -= this.margin * 0.5 - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 - - return this[e.type](e); - } - - wheel(e) { - return false; - } - mousedown(e) { - return false; - } - mousemove(e) { - return false; - } - mouseup(e) { - return false; - } - keydown(e) { - return false; - } - keyup(e) { - return false; - } - - // ---------------------- - // object referency - // ---------------------- - - setReferency(obj, key) { - this.objectLink = obj; - this.objectKey = key; - } - - display(v = false) { - this.s[0].visibility = v ? "visible" : "hidden"; - } - - // ---------------------- - // resize height - // ---------------------- - - open() { - if (this.isOpen) return; - this.isOpen = true; - Roots.needResize = true; - if (this.openCallback) this.openCallback(); - } - - close() { - if (!this.isOpen) return; - this.isOpen = false; - Roots.needResize = true; - if (this.closeCallback) this.closeCallback(); - } - - needZone() { - Roots.needReZone = true; - } - - rezone() { - Roots.needReZone = true; - } - - // ---------------------- - // INPUT - // ---------------------- - - select() {} - - unselect() {} - - setInput(Input) { - Roots.setInput(Input, this); - } - - upInput(x, down) { - return Roots.upInput(x, down); - } - - // ---------------------- - // special item - // ---------------------- - - selected(b) { - this.isSelect = b || false; - } - } - - class Bool extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || false; - this.model = o.mode !== undefined ? o.mode : 0; - - this.onName = o.rename || this.txt; - if( o.onName ) o.onname = o.onName; - if( o.onname ) this.onName = o.onname; - - this.inh = o.inh || Math.floor( this.h*0.8 ); - this.inw = o.inw || 36; - - let cc = this.colors; - - if( this.model === 0 ){ - let t = Math.floor(this.h*0.5)-((this.inh-2)*0.5); - this.c[2] = this.dom( 'div', this.css.basic + 'background:'+ cc.inputBg +'; height:'+(this.inh-2)+'px; width:'+this.inw+'px; top:'+t+'px; border-radius:10px; border:2px solid '+ cc.back ); - this.c[3] = this.dom( 'div', this.css.basic + 'height:'+(this.inh-6)+'px; width:16px; top:'+(t+2)+'px; border-radius:10px; background:'+ cc.button+';' ); - } else { - this.p = 0; - if( this.c[1] !== undefined ) this.c[1].textContent = ''; - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - } - - this.stat = -1; - - this.init(); - this.update(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown ( e ) { - - this.value = !this.value; - this.update( true ); - return this.mousemove( e ) - - } - - mousemove ( e ) { - - this.cursor('pointer'); - return this.mode( true ) - - } - - reset () { - - this.cursor(); - return this.mode() - - } - - // ---------------------- - // MODE - // ---------------------- - - mode ( over ) { - - let change = false; - let cc = this.colors, s = this.s, n, v = this.value; - - if( over ) n = v ? 4 : 3; - else n = v ? 2 : 1; - - if( this.stat !== n ){ - - this.stat = n; - - if( this.model !== 0 ){ - - switch( n ){ - - case 1: s[2].color = cc.text; s[2].background = cc.button; break; - case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; - case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; - case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; - - } - - this.c[2].innerHTML = v ? this.onName : this.name; - - } else { - - switch( n ){ - - case 1: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.button; break;// off out - case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break;// on over - case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break;// off over - case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break;// on out - - } - - s[3].marginLeft = v ? '17px' : '2px'; - this.c[1].textContent = v ? this.onName : this.name; - - } - - change = true; - - } - - return change - - } - - // ---------------------- - - update ( up ) { - - this.mode(); - if( up ) this.send(); - - } - - rSize () { - - super.rSize(); - - let s = this.s; - let w = (this.w - 10 ) - this.inw; - if( this.model === 0 ){ - s[2].left = w + 'px'; - s[3].left = w + 'px'; - } else { - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - } - - } - - } - - class Button extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = ''; - if( o.value !== undefined ) this.value = o.value; - - this.values = o.value || this.txt; - if( o.values ) this.values = o.values; - - if( !o.values && !o.value ) this.txt = ''; - - this.onName = o.onName || null; - - this.on = false; - - // force button width - this.bw = o.forceWidth || 0; - if(o.bw) this.bw = o.bw; - this.space = o.space || 3; - - if( typeof this.values === 'string' ) this.values = [ this.values ]; - - this.isDown = false; - this.neverlock = true; - this.res = 0; - - this.lng = this.values.length; - this.tmp = []; - this.stat = []; - - let sel, cc = this.colors; - - for( let i = 0; i < this.lng; i++ ){ - - sel = false; - if( this.values[i] === this.value && this.isSelectable ) sel = true; - - this.c[i+2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[i+2].style.background = sel ? cc.select : cc.button; - this.c[i+2].style.color = sel ? cc.textSelect : cc.text; - this.c[i+2].innerHTML = this.values[i]; - this.stat[i] = sel ? 3:1; - - } - - - if( this.txt==='' ) this.p = 0; - - if( (!o.value && !o.values) || this.p === 0 ){ - if( this.c[1] !== undefined ) this.c[1].textContent = ''; - } - - - this.init(); - - } - - onOff() { - - this.on = !this.on; - this.label( this.on ? this.onName : this.value ); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return -1 - - let i = this.lng; - let t = this.tmp; - - while( i-- ){ - if( l.x>t[i][0] && l.x 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.text; - this.setSvg( this.c[3], 'stroke', color, 1 ); - - break; - case 1: // down - - this.s[2].color = cc.textOver; - this.setSvg( this.c[3], 'stroke', cc.backoff, 0); - color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.textOver; - this.setSvg( this.c[3], 'stroke', color, 1 ); - - break; - } - - this.cmode = mode; - return true; - - } - - reset () { - - this.isDown = false; - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'circular'; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.sendEnd(); - return this.mode(0); - - } - - mousedown ( e ) { - - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove( e ); - return this.mode(1); - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - //console.log('over') - - let off = this.offset; - off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); - off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - this.r = off.angle() - this.pi90; - this.r = (((this.r%this.twoPi)+this.twoPi)%this.twoPi); - - if( this.oldr !== null ){ - - let dif = this.r - this.oldr; - this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; - - if( dif > 6 ) this.r = 0; - if( dif < -6 ) this.r = this.twoPi; - - } - - let steps = 1 / this.twoPi; - let value = this.r * steps; - - let n = ( ( this.range * value ) + this.min ) - this.old; - - if(n >= this.step || n <= this.step){ - n = ~~ ( n / this.step ); - this.value = this.numValue( this.old + ( n * this.step ) ); - this.update( true ); - this.old = this.value; - this.oldr = this.r; - } - - } - - wheel ( e ) { - - let name = this.testZone( e ); - - if( name === 'circular' ) { - - let v = this.value - this.step * e.delta; - - if ( v > this.max ) { - v = this.isCyclic ? this.min : this.max; - } else if ( v < this.min ) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue( v ); - this.old = v; - this.update( true ); - - return true; - - } - return false; - - } - - // ---------------------- - - makePath () { - - let r = 40; - let d = 24; - let a = this.percent * this.twoPi - 0.001; - let x2 = (r + r * Math.sin(a)) + d; - let y2 = (r - r * Math.cos(a)) + d; - let big = a > Math.PI ? 1 : 0; - return "M " + (r+d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; - - } - - update ( up ) { - - this.c[2].textContent = this.value; - this.percent = ( this.value - this.min ) / this.range; - - this.setSvg( this.c[3], 'd', this.makePath(), 1 ); - - if ( this.model > 0 ) { - - let cc = this.colors; - let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ); - this.setSvg( this.c[3], 'stroke', color, 1 ); - - } - - if( up ) this.send(); - - } - - } - - class Color extends Proto { - - constructor( o = {} ) { - - super( o ); - - //this.autoHeight = true; - - this.ctype = o.ctype || 'hex'; - - this.wfixe = 256; - - this.cw = this.sb > 256 ? 256 : this.sb; - if(o.cw != undefined ) this.cw = o.cw; - - - - // color up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - - this.baseH = this.h; - - this.offset = new V2(); - this.decal = new V2(); - this.pp = new V2(); - - let cc = this.colors; - - // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) - - this.c[2] = this.dom( 'div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};` ); - //this.s[2] = this.c[2].style; - - //this.s[2].textShadow = 'none' - - /*if( this.up ){ - this.s[2].top = 'auto'; - this.s[2].bottom = '2px'; - }*/ - - //this.c[0].style.textAlign = 'center'; - this.c[0].style.display = 'block'; - - this.c[3] = this.getColorRing(); - this.c[3].style.visibility = 'hidden'; - - this.hsl = null; - this.value = '#ffffff'; - if( o.value !== undefined ){ - if( o.value instanceof Array ) this.value = Tools.rgbToHex( o.value ); - else if(!isNaN(o.value)) this.value = Tools.hexToHtml( o.value ); - else this.value = o.value; - } - - this.bcolor = null; - this.isDown = false; - this.fistDown = false; - - this.notext = o.notext || false; - - this.tr = 98; - this.tsl = Math.sqrt(3) * this.tr; - - this.hue = 0; - this.d = 256; - - this.init(); - - this.setColor( this.value ); - - if( o.open !== undefined ) this.open(); - - } - - testZone ( mx, my ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - - if( this.up && this.isOpen ){ - - if( l.y > this.wfixe ) return 'title' - else return 'color' - - } else { - - if( l.y < this.baseH+2 ) return 'title' - else if( this.isOpen ) return 'color' - - } - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.d = 256; - - } - - mousedown ( e ) { - - - let name = this.testZone( e.clientX, e.clientY ); - - - //if( !name ) return; - if(name === 'title'){ - if( !this.isOpen ) this.open(); - else this.close(); - return true; - } - - - if( name === 'color' ){ - - this.isDown = true; - this.fistDown = true; - this.mousemove( e ); - } - } - - mousemove ( e ) { - - let name = this.testZone( e.clientX, e.clientY ); - - let off, d, hue, sat, lum, rad, x, y, rr, T = Tools; - - if( name === 'title' ) this.cursor('pointer'); - - if( name === 'color' ){ - - off = this.offset; - off.x = e.clientX - ( this.zone.x + this.decal.x + this.mid ); - off.y = e.clientY - ( this.zone.y + this.decal.y + this.mid ) - this.ytop; - d = off.length() * this.ratio; - rr = off.angle(); - if(rr < 0) rr += 2 * T.PI; - - - if ( d < 128 ) this.cursor('crosshair'); - else if( !this.isDown ) this.cursor(); - - if( this.isDown ){ - - if( this.fistDown ){ - this.d = d; - this.fistDown = false; - } - - if ( this.d < 128 ) { - - if ( this.d > this.tr ) { // outside hue - - hue = ( rr + T.pi90 ) / T.TwoPI; - this.hue = (hue + 1) % 1; - this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); - - } else { // triangle - - x = off.x * this.ratio; - y = off.y * this.ratio; - - let rr = (this.hue * T.TwoPI) + T.PI; - if(rr < 0) rr += 2 * T.PI; - - rad = Math.atan2(-y, x); - if(rad < 0) rad += 2 * T.PI; - - let rad0 = ( rad + T.pi90 + T.TwoPI + rr ) % (T.TwoPI), - rad1 = rad0 % ((2/3) * T.PI) - (T.pi60), - a = 0.5 * this.tr, - b = Math.tan(rad1) * a, - r = Math.sqrt(x*x + y*y), - maxR = Math.sqrt(a*a + b*b); - - if( r > maxR ) { - let dx = Math.tan(rad1) * r; - let rad2 = Math.atan(dx / maxR); - if(rad2 > T.pi60) rad2 = T.pi60; - else if( rad2 < -T.pi60 ) rad2 = -T.pi60; - - rad += rad2 - rad1; - - rad0 = (rad + T.pi90 + T.TwoPI + rr) % (T.TwoPI), - rad1 = rad0 % ((2/3) * T.PI) - (T.pi60); - b = Math.tan(rad1) * a; - r = maxR = Math.sqrt(a*a + b*b); - } - - lum = ((Math.sin(rad0) * r) / this.tsl) + 0.5; - - let w = 1 - (Math.abs(lum - 0.5) * 2); - sat = (((Math.cos(rad0) * r) + (this.tr / 2)) / (1.5 * this.tr)) / w; - sat = T.clamp( sat, 0, 1 ); - - this.setHSL([this.hsl[0], sat, lum]); - - } - } - } - } - - } - - // ---------------------- - - setHeight () { - - this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; - this.s[0].height = this.h + 'px'; - this.zone.h = this.h; - - } - - parentHeight ( t ) { - - if ( this.group !== null ) this.group.calc( t ); - else if ( this.isUI ) this.main.calc( t ); - - } - - open () { - - super.open(); - - this.setHeight(); - - if( this.up ) this.zone.y -= this.wfixe + 5; - - let t = this.h - this.baseH; - - this.s[3].visibility = 'visible'; - //this.s[3].display = 'block'; - this.parentHeight( t ); - - } - - close () { - - super.close(); - - if( this.up ) this.zone.y += this.wfixe + 5; - - let t = this.h - this.baseH; - - this.setHeight(); - - this.s[3].visibility = 'hidden'; - //this.s[3].display = 'none'; - this.parentHeight( -t ); - - } - - update ( up ) { - - let cc = Tools.rgbToHex( Tools.hslToRgb([ this.hsl[0], 1, 0.5 ]) ); - - this.moveMarkers(); - - this.value = this.bcolor; - - this.setSvg( this.c[3], 'fill', cc, 2, 0 ); - - this.s[2].background = this.bcolor; - if(!this.notext) this.c[2].textContent = Tools.htmlToHex( this.bcolor ); - - this.invert = Tools.findDeepInver( this.rgb ); - this.s[2].color = this.invert ? '#fff' : '#000'; - - if(!up) return; - - if( this.ctype === 'array' ) this.send( this.rgb ); - if( this.ctype === 'rgb' ) this.send( Tools.htmlRgb( this.rgb ) ); - if( this.ctype === 'hex' ) this.send( Tools.htmlToHex( this.value ) ); - if( this.ctype === 'html' ) this.send(); - - } - - setValue ( v ){ - - if( v instanceof Array ) this.value = Tools.rgbToHex( v ); - else if(!isNaN(v)) this.value = Tools.hexToHtml( v ); - else this.value = v; - - this.setColor( this.value ); - this.update(); - - } - - setColor ( color ) { - - let unpack = Tools.unpack(color); - if (this.bcolor !== color && unpack) { - - this.bcolor = color; - this.rgb = unpack; - this.hsl = Tools.rgbToHsl( this.rgb ); - - this.hue = this.hsl[0]; - - this.update(); - } - return this; - - } - - setHSL ( hsl ) { - - this.hsl = hsl; - this.rgb = Tools.hslToRgb( hsl ); - this.bcolor = Tools.rgbToHex( this.rgb ); - this.update( true ); - return this; - - } - - moveMarkers () { - - let p = this.pp; - let T = Tools; - - this.invert ? '#fff' : '#000'; - let a = this.hsl[0] * T.TwoPI; - let third = (2/3) * T.PI; - let r = this.tr; - let h = this.hsl[0]; - let s = this.hsl[1]; - let l = this.hsl[2]; - - let angle = ( a - T.pi90 ) * T.todeg; - - h = - a + T.pi90; - - let hx = Math.cos(h) * r; - let hy = -Math.sin(h) * r; - let sx = Math.cos(h - third) * r; - let sy = -Math.sin(h - third) * r; - let vx = Math.cos(h + third) * r; - let vy = -Math.sin(h + third) * r; - let mx = (sx + vx) / 2, my = (sy + vy) / 2; - a = (1 - 2 * Math.abs(l - .5)) * s; - let x = sx + (vx - sx) * l + (hx - mx) * a; - let y = sy + (vy - sy) * l + (hy - my) * a; - - p.set( x, y ).addScalar(128); - - //let ff = (1-l)*255; - // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); - - this.setSvg( this.c[3], 'transform', 'rotate('+angle+' )', 2 ); - - this.setSvg( this.c[3], 'cx', p.x, 3 ); - this.setSvg( this.c[3], 'cy', p.y, 3 ); - - this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3 ); - this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3 ); - this.setSvg( this.c[3], 'fill',this.bcolor, 3 ); - - } - - rSize () { - - //Proto.prototype.rSize.call( this ); - super.rSize(); - - let s = this.s; - - s[2].width = this.sb + 'px'; - s[2].left = this.sa + 'px'; - - //console.log(this.sb) - - this.cw = this.sb > 256 ? 256 : this.sb; - - - - this.rSizeColor( this.cw ); - - this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - //s[3].left = this.decal.x + 'px'; - - } - - rSizeColor ( w ) { - - - if( w === this.wfixe ) return; - - - - this.wfixe = w; - - - - let s = this.s; - - //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; - this.mid = Math.floor( this.wfixe * 0.5 ); - - this.setSvg( this.c[3], 'viewBox', '0 0 '+ this.wfixe + ' '+ this.wfixe ); - s[3].width = this.wfixe + 'px'; - s[3].height = this.wfixe + 'px'; - //s[3].left = this.decal.x + 'px'; - s[3].top = this.decal.y + 'px'; - - this.ratio = 256 / this.wfixe; - this.square = 1 / (60*(this.wfixe/256)); - this.setHeight(); - - } - - - } - - class Fps extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.round = Math.round; - - //this.autoHeight = true; - - this.baseH = this.h; - this.hplus = o.hplus || 50; - - this.res = o.res || 40; - this.l = 1; - - this.precision = o.precision || 0; - - - this.custom = o.custom || false; - this.names = o.names || ['FPS', 'MS']; - let cc = o.cc || ['220,220,220', '255,255,0']; - - // this.divid = [ 100, 100, 100 ]; - // this.multy = [ 30, 30, 30 ]; - - this.adding = o.adding || false; - - this.range = o.range || [ 165, 100, 100 ]; - - this.alpha = o.alpha || 0.25; - - this.values = []; - this.points = []; - this.textDisplay = []; - - if(!this.custom){ - - this.now = Roots.getTime(); - this.startTime = 0;//this.now() - this.prevTime = 0;//this.startTime; - this.frames = 0; - - this.ms = 0; - this.fps = 0; - this.mem = 0; - this.mm = 0; - - this.isMem = ( self.performance && self.performance.memory ) ? true : false; - - // this.divid = [ 100, 200, 1 ]; - // this.multy = [ 30, 30, 30 ]; - - if( this.isMem ){ - - this.names.push('MEM'); - cc.push('0,255,255'); - - } - - this.txt = o.name || 'Fps'; - - } - - - let fltop = Math.floor(this.h*0.5)-3; - const ccc = this.colors; - - this.c[1].textContent = this.txt; - //this.c[1].innerHTML = ' ' + this.txt - this.c[0].style.cursor = 'pointer'; - this.c[0].style.pointerEvents = 'auto'; - - let panelCss = 'display:none; left:10px; top:'+ this.h + 'px; height:'+(this.hplus - 8)+'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid '+ ccc.border +';'; - - if( this.radius !== 0 ) panelCss += 'border-radius:' + this.radius+'px;'; - - this.c[2] = this.dom( 'path', this.css.basic + panelCss , {} ); - - this.c[2].setAttribute('viewBox', '0 0 '+this.res+' 50' ); - this.c[2].setAttribute('height', '100%' ); - this.c[2].setAttribute('width', '100%' ); - this.c[2].setAttribute('preserveAspectRatio', 'none' ); - - - //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - - // arrow - this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:ccc.text, stroke:'none'}); - //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); - - // result test - this.c[4] = this.dom( 'div', this.css.txt + 'position:absolute; left:10px; top:'+(this.h+2) +'px; display:none; width:100%; text-align:center;' ); - - // bottom line - if( o.bottomLine ) this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); - - this.isShow = false; - - - - let s = this.s; - - //s[1].marginLeft = '10px'; - s[1].lineHeight = this.h-4; - s[1].color = ccc.text; - //s[1].paddingLeft = '18px'; - //s[1].fontWeight = 'bold'; - - if( this.radius !== 0 ) s[0].borderRadius = this.radius+'px'; - if( this.colors.gborder!=='none') s[0].border = '1px solid ' + ccc.gborder; - - - - - let j = 0; - - for( j=0; j " + this.names[j] +" "); - - } - - j = this.names.length; - while(j--){ - this.dom( 'path', null, { fill:'rgba('+cc[j]+','+this.alpha+')', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - } - - - this.init(); - - //if( this.isShow ) this.show(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown ( e ) { - - if( this.isShow ) this.close(); - else this.open(); - - } - - // ---------------------- - - /*mode: function ( mode ) { - - let s = this.s; - - switch(mode){ - case 0: // base - s[1].color = this.colors.text; - //s[1].background = 'none'; - break; - case 1: // over - s[1].color = '#FFF'; - //s[1].background = UIL.SELECT; - break; - case 2: // edit / down - s[1].color = this.colors.text; - //s[1].background = UIL.SELECTDOWN; - break; - - } - },*/ - - tick ( v ) { - - this.values = v; - if( !this.isShow ) return; - this.drawGraph(); - this.upText(); - - } - - makePath ( point ) { - - let p = ''; - p += 'M ' + (-1) + ' ' + 50; - for ( let i = 0; i < this.res + 1; i ++ ) { p += ' L ' + i + ' ' + point[i]; } - p += ' L ' + (this.res + 1) + ' ' + 50; - return p; - - } - - upText ( val ) { - - let v = val || this.values, t = ''; - for( let j=0, lng =this.names.length; j'; - this.c[4].innerHTML = t; - - } - - drawGraph () { - - let svg = this.c[2]; - let i = this.names.length, v, old = 0, n = 0; - - while( i-- ){ - if( this.adding ) v = (this.values[n]+old) * this.range[n]; - else v = (this.values[n] * this.range[n]); - this.points[n].shift(); - this.points[n].push( 50 - v ); - this.setSvg( svg, 'd', this.makePath( this.points[n] ), i+1 ); - old += this.values[n]; - n++; - - } - - } - - open () { - - super.open(); - - this.h = this.hplus + this.baseH; - - this.setSvg( this.c[3], 'd', this.svgs.g2 ); - - if( this.group !== null ){ this.group.calc( this.hplus );} - else if( this.isUI ) this.main.calc( this.hplus ); - - this.s[0].height = this.h +'px'; - this.s[2].display = 'block'; - this.s[4].display = 'block'; - this.isShow = true; - - if( !this.custom ) Roots.addListen( this ); - - } - - close () { - - super.close(); - - this.h = this.baseH; - - this.setSvg( this.c[3], 'd', this.svgs.g1 ); - - if( this.group !== null ){ this.group.calc( -this.hplus );} - else if( this.isUI ) this.main.calc( -this.hplus ); - - this.s[0].height = this.h +'px'; - this.s[2].display = 'none'; - this.s[4].display = 'none'; - this.isShow = false; - - if( !this.custom ) Roots.removeListen( this ); - - this.c[4].innerHTML = ''; - - } - - - ///// AUTO FPS ////// - - begin () { - - this.startTime = this.now(); - - } - - end () { - - let time = this.now(); - this.ms = time - this.startTime; - - this.frames ++; - - if ( time > this.prevTime + 1000 ) { - - this.fps = this.round( ( this.frames * 1000 ) / ( time - this.prevTime ) ); - - this.prevTime = time; - this.frames = 0; - - if ( this.isMem ) { - - let heapSize = performance.memory.usedJSHeapSize; - let heapSizeLimit = performance.memory.jsHeapSizeLimit; - - this.mem = this.round( heapSize * 0.000000954 ); - this.mm = heapSize / heapSizeLimit; - - } - - } - - this.values = [ this.fps, this.ms , this.mm ]; - - this.drawGraph(); - this.upText( [ this.fps, this.ms, this.mem ] ); - - return time; - - } - - listening () { - - if( !this.custom ) this.startTime = this.end(); - - } - - rSize () { - - let s = this.s; - let w = this.w; - - s[3].left = ( this.sa + this.sb - 6 ) + 'px'; - - s[0].width = w + 'px'; - s[1].width = w + 'px'; - s[2].left = 10 + 'px'; - s[2].width = (w-20) + 'px'; - s[4].width = (w-20) + 'px'; - - } - - } - - class Graph extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value !== undefined ? o.value : [0,0,0]; - this.lng = this.value.length; - - this.precision = o.precision !== undefined ? o.precision : 2; - this.multiplicator = o.multiplicator || 1; - this.neg = o.neg || false; - - this.line = o.line !== undefined ? o.line : true; - - //if(this.neg)this.multiplicator*=2; - - this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; - this.isNumber = false; - - this.isDown = false; - - this.h = o.h || 128 + 10; - this.rh = this.h - 10; - this.top = 0; - - this.c[0].style.width = this.w +'px'; - - if( this.c[1] !== undefined ) { // with title - - this.c[1].style.width = this.w +'px'; - - if(!this.autoWidth){ - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - } - - - //this.c[1].style.background = '#ff0000'; - //this.c[1].style.textAlign = 'center'; - this.top = 10; - this.h += 10; - - } - - this.gh = this.rh - 28; - this.gw = this.w - 28; - - //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); - - //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' - this.c[2] = this.dom( 'div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:'+(this.h-20)+'px; left:14px; width:'+this.gw+'px; color:'+ this.colors.text ); - - //this.c[2].textContent = this.value; - this.c[2].innerHTML = this.valueToHtml(); - - let svg = this.dom( 'svg', this.css.basic , { viewBox:'0 0 '+this.w+' '+this.rh, width:this.w, height:this.rh, preserveAspectRatio:'none' } ); - this.setCss( svg, { width:this.w, height:this.rh, left:0, top:this.top }); - - this.dom( 'path', '', { d:'', stroke:this.colors.text, 'stroke-width':2, fill:'none', 'stroke-linecap':'butt' }, svg ); - this.dom( 'rect', '', { x:10, y:10, width:this.gw+8, height:this.gh+8, stroke:'rgba(0,0,0,0.3)', 'stroke-width':1 , fill:'none'}, svg ); - - this.iw = ((this.gw-(4*(this.lng-1)))/this.lng); - let t = []; - this.cMode = []; - - this.v = []; - - for( let i = 0; i < this.lng; i++ ){ - - t[i] = [ 14 + (i*this.iw) + (i*4), this.iw ]; - t[i][2] = t[i][0] + t[i][1]; - this.cMode[i] = 0; - - if( this.neg ) this.v[i] = ((1+(this.value[i] / this.multiplicator))*0.5); - else this.v[i] = this.value[i] / this.multiplicator; - - this.dom( 'rect', '', { x:t[i][0], y:14, width:t[i][1], height:1, fill:this.colors.text, 'fill-opacity':0.3 }, svg ); - - } - - this.tmp = t; - this.c[3] = svg; - - //console.log(this.w) - - this.init(); - - if( this.c[1] !== undefined ){ - this.c[1].style.top = 0 +'px'; - this.c[1].style.height = 20 +'px'; - this.s[1].lineHeight = (20-5)+'px'; - } - - this.update( false ); - - } - - setValue ( value ) { - - this.value = value; - this.lng = this.value.length; - for (var i = 0; i < this.lng; i++) { - if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5; - else this.v[i] = value[i] / this.multiplicator; - } - this.update(); - - } - - valueToHtml() { - - let i = this.lng, n=0, r = ''; - let w = 100 / this.lng; - let style = 'width:'+ w +'%;';//' text-align:center;' - while(i--){ - if(n===this.lng-1) r += '
' + this.value[n] + '
'; - else r += '' + this.value[n] + ''; - n++; - } - return r - } - - updateSVG () { - - if( this.line ) this.setSvg( this.c[3], 'd', this.makePath(), 0 ); - - for(let i = 0; ithis.top && l.yt[i][0] && l.x this.distance ) { - let angle = Math.atan2(this.tmp.x, this.tmp.y); - this.tmp.x = Math.sin( angle ) * this.distance; - this.tmp.y = Math.cos( angle ) * this.distance; - } - - this.pos.copy( this.tmp ).divideScalar( this.distance ).negate(); - - this.update(); - - } - - setValue ( v ) { - - if(v===undefined) v=[0,0]; - - this.pos.set( v[0] || 0, v[1] || 0 ); - this.updateSVG(); - - } - - update ( up ) { - - if( up === undefined ) up = true; - - if( this.interval !== null ){ - - if( !this.isDown ){ - - this.pos.lerp( null, 0.3 ); - - this.pos.x = Math.abs( this.pos.x ) < 0.01 ? 0 : this.pos.x; - this.pos.y = Math.abs( this.pos.y ) < 0.01 ? 0 : this.pos.y; - - if( this.isUI && this.main.isCanvas ) this.main.draw(); - - } - - } - - this.updateSVG(); - - if( up ) this.send(); - - - if( this.pos.isZero() ) this.stopInterval(); - - } - - updateSVG () { - - //let x = this.radius - ( -this.pos.x * this.distance ); - //let y = this.radius - ( -this.pos.y * this.distance ); - - let x = (this.diam*0.5) - ( -this.pos.x * this.distance ); - let y = (this.diam*0.5) - ( -this.pos.y * this.distance ); - - if(this.model === 0){ - - let sx = x + ((this.pos.x)*5) + 5; - let sy = y + ((this.pos.y)*5) + 10; - - this.setSvg( this.c[3], 'cx', sx*this.ratio, 3 ); - this.setSvg( this.c[3], 'cy', sy*this.ratio, 3 ); - } else { - this.setSvg( this.c[3], 'cx', x*this.ratio, 3 ); - this.setSvg( this.c[3], 'cy', y*this.ratio, 3 ); - } - - - - this.setSvg( this.c[3], 'cx', x*this.ratio, 4 ); - this.setSvg( this.c[3], 'cy', y*this.ratio, 4 ); - - this.value[0] = ( this.pos.x * this.multiplicator ).toFixed( this.precision ) * 1; - this.value[1] = ( this.pos.y * this.multiplicator ).toFixed( this.precision ) * 1; - - if(this.haveText) this.c[2].textContent = this.value; - - } - - clear () { - - this.stopInterval(); - super.clear(); - - } - - } - - class Knob extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.isCyclic = o.cyclic || false; - this.model = o.stype || 0; - if( o.mode !== undefined ) this.model = o.mode; - - this.autoWidth = false; - - this.setTypeNumber( o ); - - this.minw = this.w; - this.diam = o.diam || this.w; - - this.mPI = Math.PI * 0.8; - this.toDeg = 180 / Math.PI; - this.cirRange = this.mPI * 2; - - this.offset = new V2(); - - this.h = o.h || this.w + 10; - - this.c[0].style.width = this.w +'px'; - this.c[0].style.display = 'block'; - - if(this.c[1] !== undefined) { - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - - } - - this.percent = 0; - - this.cmode = 0; - let cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); - - this.c[3] = this.getKnob(); - this.setSvg( this.c[3], 'fill', cc.button, 0 ); - this.setSvg( this.c[3], 'stroke', cc.text, 1 ); - this.setSvg( this.c[3], 'stroke', cc.text, 3 ); - this.setSvg( this.c[3], 'd', this.makeGrad(), 3 ); - - this.setSvg( this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam ); - this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); - - if ( this.model > 0 ) { - - Tools.dom( 'path', '', { d: '', stroke:cc.text, 'stroke-width': 2, fill: 'none', 'stroke-linecap': 'round' }, this.c[3] ); //4 - - if ( this.model == 2) { - - Tools.addSVGGlowEffect(); - this.setSvg( this.c[3], 'style', 'filter: url("#UILGlow");', 4 ); - - } - - } - - this.r = 0; - - this.init(); - - this.update(); - - } - - mode ( mode ) { - - let cc = this.colors; - - if( this.cmode === mode ) return false; - - switch( mode ) { - case 0: // base - this.s[2].color = cc.text; - this.setSvg( this.c[3], 'fill', cc.button, 0); - //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); - this.setSvg( this.c[3], 'stroke', cc.text, 1 ); - break; - case 1: // down - this.s[2].color = cc.textOver; - this.setSvg( this.c[3], 'fill', cc.select, 0); - //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); - this.setSvg( this.c[3], 'stroke', cc.textOver, 1 ); - break; - } - - this.cmode = mode; - return true; - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'knob'; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.sendEnd(); - return this.mode(0) - - } - - mousedown ( e ) { - - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove( e ); - return this.mode(1) - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - let off = this.offset; - - //off.x = this.radius - ( e.clientX - this.zone.x ); - //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); - - off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); - off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - this.r = - Math.atan2( off.x, off.y ); - - if( this.oldr !== null ) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; - - this.r = this.r > this.mPI ? this.mPI : this.r; - this.r = this.r < -this.mPI ? -this.mPI : this.r; - - let steps = 1 / this.cirRange; - let value = (this.r + this.mPI) * steps; - - let n = ( ( this.range * value ) + this.min ) - this.old; - - if(n >= this.step || n <= this.step){ - n = Math.floor( n / this.step ); - this.value = this.numValue( this.old + ( n * this.step ) ); - this.update( true ); - this.old = this.value; - this.oldr = this.r; - } - - } - - wheel ( e ) { - - let name = this.testZone( e ); - - if( name === 'knob' ) { - - let v = this.value - this.step * e.delta; - - if ( v > this.max ) { - v = this.isCyclic ? this.min : this.max; - } else if ( v < this.min ) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue( v ); - this.old = v; - this.update( true ); - - return true; - - } - return false; - - } - - makeGrad () { - - let d = '', step, range, a, x, y, x2, y2, r = 64; - let startangle = Math.PI + this.mPI; - let endangle = Math.PI - this.mPI; - //let step = this.step>5 ? this.step : 1; - - if(this.step>5){ - range = this.range / this.step; - step = ( startangle - endangle ) / range; - } else { - step = (( startangle - endangle ) / r)*2; - range = r*0.5; - } - - for ( let i = 0; i <= range; ++i ) { - - a = startangle - ( step * i ); - x = r + Math.sin( a ) * ( r - 20 ); - y = r + Math.cos( a ) * ( r - 20 ); - x2 = r + Math.sin( a ) * ( r - 24 ); - y2 = r + Math.cos( a ) * ( r - 24 ); - d += 'M' + x + ' ' + y + ' L' + x2 + ' '+y2 + ' '; - - } - - return d; - - } - - update ( up ) { - - this.c[2].textContent = this.value; - this.percent = (this.value - this.min) / this.range; - - let sa = Math.PI + this.mPI; - let ea = ( ( this.percent * this.cirRange ) - ( this.mPI ) ); - - let sin = Math.sin( ea ); - let cos = Math.cos( ea ); - - let x1 = ( 25 * sin ) + 64; - let y1 = -( 25 * cos ) + 64; - let x2 = ( 20 * sin ) + 64; - let y2 = -( 20 * cos ) + 64; - - this.setSvg( this.c[3], 'd', 'M ' + x1 +' ' + y1 + ' L ' + x2 +' ' + y2, 1 ); - - if ( this.model > 0 ) { - - let x1 = 36 * Math.sin( sa ) + 64; - let y1 = 36 * Math.cos( sa ) + 64; - let x2 = 36 * sin + 64; - let y2 = -36 * cos + 64; - let big = ea <= Math.PI - this.mPI ? 0 : 1; - this.setSvg( this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4 ); - - let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( this.colors.text, -0.75) ), Tools.unpack( this.colors.text ), this.percent ) ); - this.setSvg( this.c[3], 'stroke', color, 4 ); - - } - - if( up ) this.send(); - - } - - } - - class List extends Proto { - - constructor( o = {} ) { - - super( o ); - - // TODO not work - this.hideCurrent = false; - - // images - this.path = o.path || ''; - this.format = o.format || ''; - - - this.isWithImage = this.path !== '' ? true:false; - this.preLoadComplete = false; - - this.tmpImage = {}; - this.tmpUrl = []; - - this.m = o.m !== undefined ? o.m : 5; - - - let align = o.align || 'left'; - - // scroll size - let ss = o.scrollSize || 10; - this.ss = ss+1; - - this.sMode = 0; - this.tMode = 0; - - this.listOnly = o.listOnly || false; - this.staticTop = o.staticTop || false; - - this.isSelectable = this.listOnly; - if( o.select !== undefined ) o.selectable = o.select; - if( o.selectable !== undefined ) this.isSelectable = o.selectable; - - if( this.txt === '' ) this.p = 0; - - - let fltop = Math.floor(this.h*0.5)-3; - let cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.basic + 'top:0; display:none; border-radius:'+this.radius+'px;' ); - this.c[3] = this.dom( 'div', this.css.item + 'padding:0px '+this.m+'px; margin-bottom:0px; position:absolute; justify-content:'+align+'; text-align:'+align+'; line-height:'+(this.h-4)+'px; top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:1px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); - - this.scrollerBack = this.dom( 'div', this.css.basic + 'right:0px; width:'+ss+'px; background:'+cc.back+'; display:none;'); - this.scroller = this.dom( 'div', this.css.basic + 'right:'+((ss-(ss*0.25))*0.5)+'px; width:'+(ss*0.25)+'px; background:'+cc.text+'; display:none; '); - - this.c[3].style.color = cc.text; - - - this.list = []; - this.refObject = null; - - if( o.list ){ - if( o.list instanceof Array ){ - this.list = o.list; - } else if( o.list instanceof Object ){ - this.refObject = o.list; - for( let g in this.refObject ) this.list.push( g ); - } - } - - this.items = []; - - this.prevName = ''; - - - this.tmpId = 0; - - this.baseH = this.h; - - this.itemHeight = o.itemHeight || this.h;//(this.h-3); - - // force full list - this.full = o.full || false; - - this.py = 0; - this.ww = this.sb; - this.scroll = false; - this.isDown = false; - - this.current = null; - - // list up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - - if( this.up ){ - - this.c[2].style.top = 'auto'; - this.c[3].style.top = 'auto'; - this.c[4].style.top = 'auto'; - - this.c[2].style.bottom = this.h-2 + 'px'; - this.c[3].style.bottom = '1px'; - this.c[4].style.bottom = fltop + 'px'; - - } else { - this.c[2].style.top = this.baseH + 'px'; - } - - this.listIn = this.dom( 'div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); - this.listIn.name = 'list'; - - this.topList = 0; - - this.c[2].appendChild( this.listIn ); - this.c[2].appendChild( this.scrollerBack ); - this.c[2].appendChild( this.scroller ); - - if( o.value !== undefined ){ - if(!isNaN(o.value)) this.value = this.list[ o.value ]; - else this.value = o.value; - }else { - this.value = this.list[0]; - } - - this.isOpenOnStart = o.open || false; - - if( this.listOnly ){ - this.baseH = 5; - this.c[3].style.display = 'none'; - this.c[4].style.display = 'none'; - this.c[2].style.top = this.baseH+'px'; - this.isOpenOnStart = true; - } - - - this.miniCanvas = o.miniCanvas || false; - this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; - this.imageSize = o.imageSize || [20,20]; - - // dragout function - this.drag = o.drag || false; - this.dragout = o.dragout || false; - this.dragstart = o.dragstart || null; - this.dragend = o.dragend || null; - - - - //this.c[0].style.background = '#FF0000' - ///if( this.isWithImage ) this.preloadImage(); - - this.setList( this.list ); - this.init(); - if( this.isWithImage ) this.preloadImage(); - if( this.isOpenOnStart ) this.open( true ); - - this.baseH += this.mtop; - - } - - // image list - - preloadImage () { - - - - this.preLoadComplete = false; - - this.tmpImage = {}; - for( let i=0; i this.h - this.baseH ) return 'title'; - else { - if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; - if(l.x > this.sa) return this.testItems( l.y-this.baseH ); - } - - } else { - if( l.y < this.baseH+2 ) return 'title'; - else { - if( this.isOpen ){ - if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; - if(l.x > this.sa) return this.testItems( l.y-this.baseH ); - } - } - - } - - return ''; - - } - - testItems ( y ) { - - let name = ''; - - let items = this.items; - - /*if(this.hideCurrent){ - //items = [...this.items] - items = this.items.slice(this.tmpId) - - }*/ - - let i = items.length, item, a, b; - while(i--){ - item = items[i]; - a = item.posy + this.topList; - b = item.posy + this.itemHeight + 1 + this.topList; - if( y >= a && y <= b ){ - name = 'item' + i; - this.modeItem(0); - this.current = item; - this.modeItem(1); - return name; - } - - } - - return name; - - } - - modeItem ( mode ) { - - if( !this.current ) return - - if( this.current.select && mode===0) mode = 2; - let cc = this.colors; - - switch( mode ){ - - case 0: // base - this.current.style.background = cc.back; - this.current.style.color = cc.text; - break; - case 1: // over - this.current.style.background = cc.over; - this.current.style.color = cc.textOver; - break; - case 2: // edit / down - this.current.style.background = cc.select; - this.current.style.color = cc.textSelect; - break; - - } - } - - unSelected() { - - if( !this.current ) return - this.modeItem(0); - this.current = null; - - } - - selected() { - - if( !this.current ) return - this.resetItems(); - this.modeItem(2); - this.current.select = true; - - - - } - - resetItems() { - - let i = this.items.length; - while(i--){ - this.items[i].select = false; - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text; - } - - } - - hideActive() { - - if( !this.hideCurrent ) return - //if( !this.current ) return - if( this.current )this.tmpId = this.current.id; - this.resetHide(); - //this.items[this.tmpId].style.height = 0+'px' - - } - - resetHide() { - - console.log(this.tmpId); - - let i = this.items.length; - while(i--){ - if(i===this.tmpId){ - this.items[i].style.height = 0+'px'; - this.items[i].posy = -1; - } else { - this.items[i].style.height = this.itemHeight+'px'; - this.items[i].posy = (this.itemHeight+1)*(i-1); - } - //this.items[i].style.display = 'flex' - - /*this.items[i].select = false - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text;*/ - } - - } - - // ---------------------- - // EVENTS - // ---------------------- - - - mouseup ( e ) { - - this.isDown = false; - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false; - - if( name === 'scroll' ){ - - this.isDown = true; - this.mousemove( e ); - - } else if( name === 'title' ){ - - this.modeTitle(2); - if( !this.listOnly ){ - this.hideActive(); - if( !this.isOpen ) this.open(); - else this.close(); - } - } else { - // is item - if( this.current ){ - - this.value = this.list[ this.current.id ]; - //this.tmpId = this.current.id - - if( this.isSelectable ) this.selected(); - - //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); - this.send( this.value ); - - if( !this.listOnly ) { - this.close(); - this.setTopItem(); - //this.hideActive() - } - } - - } - - return true; - - } - - mousemove ( e ) { - - let nup = false; - let name = this.testZone( e ); - - if( !name ) return nup; - - if( name === 'title' ){ - this.unSelected(); - this.modeTitle(1); - this.cursor('pointer'); - - } else if( name === 'scroll' ){ - - this.cursor('s-resize'); - this.modeScroll(1); - if( this.isDown ){ - this.modeScroll(2); - //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - let top = this.zone.y+this.baseH-2; - this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - } - //if(this.isDown) this.listmove(e); - } else { - - // is item - this.modeTitle(0); - this.modeScroll(0); - this.cursor('pointer'); - - } - - if( name !== this.prevName ) nup = true; - this.prevName = name; - - return nup; - - } - - wheel ( e ) { - - let name = this.testZone( e ); - if( name === 'title' ) return false; - this.py += e.delta*10; - this.update(this.py); - return true; - - } - - - - // ---------------------- - - reset () { - - this.prevName = ''; - this.unSelected(); - this.modeTitle(0); - this.modeScroll(0); - - //console.log('this is reset') - - } - - modeScroll ( mode ) { - - if( mode === this.sMode ) return; - - let s = this.scroller.style; - let cc = this.colors; - - switch(mode){ - case 0: // base - s.background = cc.text; - break; - case 1: // over - s.background = cc.select; - break; - case 2: // edit / down - s.background = cc.select; - break; - - } - - this.sMode = mode; - } - - modeTitle ( mode ) { - - if( mode === this.tMode ) return; - - let s = this.s; - let cc = this.colors; - - switch(mode){ - case 0: // base - s[3].color = cc.text; - s[3].background = cc.button; - break; - case 1: // over - s[3].color = cc.textOver; - s[3].background = cc.overoff; - break; - case 2: // edit / down - s[3].color = cc.textSelect; - s[3].background = cc.overoff; - break; - - } - - this.tMode = mode; - - } - - clearList () { - - while ( this.listIn.children.length ) this.listIn.removeChild( this.listIn.lastChild ); - this.items = []; - - } - - setList ( list ) { - - this.clearList(); - - this.list = list; - this.length = this.list.length; - - let lng = this.hideCurrent? this.length-1 : this.length; - - this.maxItem = this.full ? lng : 5; - this.maxItem = lng < this.maxItem ? lng : this.maxItem; - - this.maxHeight = this.maxItem * (this.itemHeight+1) + 2; - - - - this.max = lng * (this.itemHeight+1) + 2; - this.ratio = this.maxHeight / this.max; - this.sh = this.maxHeight * this.ratio; - this.range = this.maxHeight - this.sh; - - this.c[2].style.height = this.maxHeight + 'px'; - this.scrollerBack.style.height = this.maxHeight + 'px'; - this.scroller.style.height = this.sh + 'px'; - - if( this.max > this.maxHeight ){ - this.ww = this.sb - this.ss; - this.scroll = true; - } - - if( this.miniCanvas ) { - - this.tmpCanvas = document.createElement('canvas'); - this.tmpCanvas.width = this.imageSize[0]; - this.tmpCanvas.height = this.imageSize[1]; - this.tmpCtx = this.tmpCanvas.getContext("2d"); - this.tmpCtx.fillStyle = this.canvasBg; - this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); - - } - - let item, n;//, l = this.sb; - for( let i=0; i this.range ? this.range : y; - - this.topList = -Math.floor( y / this.ratio ); - - this.listIn.style.top = this.topList+'px'; - this.scroller.style.top = Math.floor( y ) + 'px'; - - this.py = y; - - } - - parentHeight ( t ) { - - if ( this.group !== null ) this.group.calc( t ); - else if ( this.isUI ) this.main.calc( t ); - - } - - open ( first ) { - - super.open(); - - this.update( 0 ); - - this.h = this.maxHeight + this.baseH + 5; - if( !this.scroll ){ - this.topList = 0; - this.h = this.baseH + 5 + this.max; - this.scroller.style.display = 'none'; - this.scrollerBack.style.display = 'none'; - } else { - this.scroller.style.display = 'block'; - this.scrollerBack.style.display = 'block'; - } - this.s[0].height = this.h + 'px'; - this.s[2].display = 'block'; - - if( this.up ){ - this.zone.y -= this.h - (this.baseH-10); - this.setSvg( this.c[4], 'd', this.svgs.g1 ); - } else { - this.setSvg( this.c[4], 'd', this.svgs.g2 ); - } - - this.rSizeContent(); - - let t = this.h - this.baseH; - - this.zone.h = this.h; - - if(!first) this.parentHeight( t ); - - } - - close () { - - super.close(); - - if( this.up ) this.zone.y += this.h - (this.baseH-10); - - let t = this.h - this.baseH; - - this.h = this.baseH; - this.s[0].height = this.h + 'px'; - this.s[2].display = 'none'; - this.setSvg( this.c[4], 'd', this.svgs.g1 ); - - this.zone.h = this.h; - - this.parentHeight( -t ); - - } - - // ----- - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSizeContent () { - - let i = this.length; - while(i--) this.listIn.children[i].style.width = this.ww + 'px'; - - } - - rSize () { - - super.rSize(); - - //Proto.prototype.rSize.call( this ); - - let s = this.s; - let w = this.sb; - let d = this.sa; - - if(s[2]=== undefined) return; - - s[2].width = w + 'px'; - s[2].left = d +'px'; - - s[3].width = w + 'px'; - s[3].left = d + 'px'; - - s[4].left = d + w - 15 + 'px'; - - this.ww = w; - if( this.max > this.maxHeight ) this.ww = w-this.ss; - if(this.isOpen) this.rSizeContent(); - - } - - } - - class Numeric extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.setTypeNumber( o ); - - this.allway = o.allway || false; - - this.isDown = false; - this.value = [0]; - this.multy = 1; - this.invmulty = 1; - this.isSingle = true; - this.isAngle = false; - this.isVector = false; - - if( o.isAngle ){ - this.isAngle = true; - this.multy = Tools.torad; - this.invmulty = Tools.todeg; - } - - this.isDrag = o.drag || false; - - if( o.value !== undefined ){ - if( !isNaN(o.value) ){ - this.value = [o.value]; - } else if( o.value instanceof Array ){ - this.value = o.value; - this.isSingle = false; - } else if( o.value instanceof Object ){ - this.value = []; - if( o.value.x !== undefined ) this.value[0] = o.value.x; - if( o.value.y !== undefined ) this.value[1] = o.value.y; - if( o.value.z !== undefined ) this.value[2] = o.value.z; - if( o.value.w !== undefined ) this.value[3] = o.value.w; - this.isSingle = false; - this.isVector = true; - } - } - - this.lng = this.value.length; - this.tmp = []; - - this.current = -1; - this.prev = { x:0, y:0, d:0, v:0 }; - - let cc = this.colors; - - // bg - this.c[2] = this.dom( 'div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h-8) + 'px;' ); - - this.cMode = []; - - let i = this.lng; - while(i--){ - - if( this.isAngle ) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed( this.precision ); - this.c[3+i] = this.dom( 'div', this.css.txtselect + 'top:1px; height:'+(this.h-2)+'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;'); - if(o.center) this.c[2+i].style.textAlign = 'center'; - this.c[3+i].textContent = this.value[i]; - this.c[3+i].style.color = this.colors.text; - this.c[3+i].isNum = true; - this.cMode[i] = 0; - - } - - // selection - this.selectId = 3 + this.lng; - this.c[this.selectId] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.cursorId = 4 + this.lng; - this.c[ this.cursorId ] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); - - this.init(); - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - - let i = this.lng; - let t = this.tmp; - - while( i-- ){ - if( l.x>t[i][0] && l.x 0"; - this.easing = o.easing || 1; - - this.setTypeNumber(o); - - this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; - - //this.defaultBorderColor = this.colors.hide; - - this.isDown = false; - this.isOver = false; - this.allway = o.allway || false; - - this.isDeg = o.isDeg || false; - this.isCyclic = o.cyclic || false; - - this.firstImput = false; - - let cc = this.colors; - - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - this.c[2] = this.dom( - "div", - this.css.txtselect + - "border:none; background:none; width:47px; color:" + - cc.text + - ";" - ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); - this.c[3] = this.dom( - "div", - this.css.basic + " top:0; height:" + this.h + "px;" - ); - - this.c[4] = this.dom( - "div", - this.css.basic + - "background:" + - cc.back + - "; top:2px; height:" + - (this.h - 4) + - "px;" - ); - this.c[5] = this.dom( - "div", - this.css.basic + - "left:4px; top:5px; height:" + - (this.h - 10) + - "px; background:" + - cc.text + - ";" - ); - - this.c[2].isNum = true; - //this.c[2].style.height = (this.h-4) + 'px'; - //this.c[2].style.lineHeight = (this.h-8) + 'px'; - this.c[2].style.height = this.h - 2 + "px"; - this.c[2].style.lineHeight = this.h - 10 + "px"; - - if (this.model !== 0) { - let r1 = 4, - h1 = 4, - h2 = 8, - ww = this.h - 6, - ra = 16; - - if (this.model === 2) { - r1 = 0; - h1 = 2; - h2 = 4; - ra = 2; - ww = (this.h - 6) * 0.5; - } - - if (this.model === 3) this.c[5].style.visible = "none"; - - this.c[4].style.borderRadius = r1 + "px"; - this.c[4].style.height = h2 + "px"; - this.c[4].style.top = this.h * 0.5 - h1 + "px"; - this.c[5].style.borderRadius = r1 * 0.5 + "px"; - this.c[5].style.height = h1 + "px"; - this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; - - //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); - this.c[6] = this.dom( - "div", - this.css.basic + - "border-radius:" + - ra + - "px; margin-left:" + - -ww * 0.5 + - "px; background:" + - cc.text + - "; left:4px; top:3px; height:" + - (this.h - 6) + - "px; width:" + - ww + - "px;" - ); - } - - this.init(); - } - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - - if (l.x >= this.txl) return "text"; - else if (l.x >= this.sa) return "scroll"; - else return ""; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (this.isDown) this.isDown = false; - } - - mousedown(e) { - let name = this.testZone(e); - - if (!name) return false; - - if (name === "scroll") { - this.isDown = true; - this.old = this.value; - this.mousemove(e); - } - - /*if( name === 'text' ){ - this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); - }*/ - - return true; - } - - mousemove(e) { - let nup = false; - - let name = this.testZone(e); - - if (name === "scroll") { - this.mode(1); - this.cursor("w-resize"); - //} else if(name === 'text'){ - //this.cursor('pointer'); - } else { - this.cursor(); - } - - if (this.isDown) { - let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; - - // lo mapeo al rango 0 ... 1 - nNormalized = Math.min(1, Math.max(0, nNormalized)); - - // aplico easing - let nEased = Math.pow(nNormalized, this.easing); // easing - - let nNew = nEased * this.range + this.min; - let nNewSlider = nNormalized * this.range + this.min; - - this.sliderValue = this.numValue(nNewSlider); - - let delta = nNew - this.old; - - let steps; - if (delta >= this.step || delta <= this.step) { - steps = Math.floor(delta / this.step); - this.value = this.numValue(this.old + steps * this.step); - // value without easing applied - - this.update(true); - this.old = this.value; - } - //console.log("n, normalized, value", nNew, nNormalized, this.value); - nup = true; - } - - return nup; - } - - wheel(e) { - let name = this.testZone(e); - - if (name === "scroll") { - let v = this.value - this.step * e.delta; - - if (v > this.max) { - v = this.isCyclic ? this.min : this.max; - } else if (v < this.min) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue(v); - this.old = v; - this.update(true); - - return true; - } - - return false; - } - - //keydown: function ( e ) { return true; }, - - // ---------------------- - - validate() { - let n = this.c[2].textContent; - - if (!isNaN(n)) { - this.value = this.numValue(n); - this.update(true); - } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - } - - reset() { - //this.clearInput(); - this.isDown = false; - this.mode(0); - } - - mode(mode) { - let s = this.s; - let cc = this.colors; - - switch (mode) { - case 0: // base - // s[2].border = '1px solid ' + this.colors.hide; - s[2].color = cc.text; - s[4].background = cc.back; - s[5].background = cc.text; - if (this.model !== 0) s[6].background = cc.text; //cc.button; - break; - case 1: // scroll over - //s[2].border = '1px dashed ' + this.colors.hide; - s[2].color = cc.textOver; - s[4].background = cc.back; - s[5].background = cc.textOver; - if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; - break; - } - } - - update(up) { - let normalized = (this.value - this.min) / this.range; - - let uneased = - this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); - - let ww = Math.floor(this.ww * uneased); - //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); - - if (this.model !== 3) this.s[5].width = ww + "px"; - if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; - this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - - if (up) this.send(); - } - - rSize() { - super.rSize(); - - let w = this.sb - this.sc; - this.ww = w - 6; - - let tx = this.sc; - if (this.isUI || !this.simple) tx = this.sc + 10; - this.txl = this.w - tx + 2; - - //let ty = Math.floor(this.h * 0.5) - 8; - - let s = this.s; - - s[2].width = this.sc - 6 + "px"; - s[2].left = this.txl + 4 + "px"; - //s[2].top = ty + 'px'; - s[3].left = this.sa + "px"; - s[3].width = w + "px"; - s[4].left = this.sa + "px"; - s[4].width = w + "px"; - s[5].left = this.sa + 3 + "px"; - - this.update(); - } - } - - class TextInput extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.cmode = 0; - - this.value = o.value !== undefined ? o.value : ''; - this.placeHolder = o.placeHolder || ''; - - this.allway = o.allway || false; - this.editable = o.edit !== undefined ? o.edit : true; - - this.isDown = false; - - let cc = this.colors; - - // text - this.c[2] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[2].textContent = this.value; - - // selection - this.c[3] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.c[4] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); - - // fake - this.c[5] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; border:none; justify-content: center; font-style: italic; color:'+cc.border+';' ); - if( this.value === '' ) this.c[5].textContent = this.placeHolder; - - - - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.x >= this.sa ) return 'text'; - return ''; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if(!this.editable) return; - - if( this.isDown ){ - this.isDown = false; - return this.mousemove( e ); - } - - return false; - - } - - mousedown ( e ) { - - if(!this.editable) return; - - let name = this.testZone( e ); - - if( !this.isDown ){ - this.isDown = true; - if( name === 'text' ) this.setInput( this.c[2] ); - return this.mousemove( e ); - } - - return false; - - } - - mousemove ( e ) { - - if(!this.editable) return; - - let name = this.testZone( e ); - - //let l = this.local; - //if( l.x === -1 && l.y === -1 ){ return;} - - //if( l.x >= this.sa ) this.cursor('text'); - //else this.cursor(); - - let x = 0; - - if( name === 'text' ) this.cursor('text'); - else this.cursor(); - - if( this.isDown ) x = e.clientX - this.zone.x; - - return this.upInput( x - this.sa -3, this.isDown ); - - } - - update ( ) { - - this.c[2].textContent = this.value; - - } - - // ---------------------- - - reset () { - - this.cursor(); - - } - - // ---------------------- - // INPUT - // ---------------------- - - select ( c, e, w, t ) { - - let s = this.s; - let d = this.sa + 5; - s[4].width = '1px'; - s[4].left = ( d + e ) + 'px'; - - s[3].left = ( d + e ) + 'px'; - s[3].width = w + 'px'; - this.c[3].innerHTML = t; - - } - - unselect () { - - let s = this.s; - if(!s) return; - s[3].width = 0 + 'px'; - this.c[3].innerHTML = 't'; - s[4].width = 0 + 'px'; - - } - - validate ( force ) { - - if( this.allway ) force = true; - - this.value = this.c[2].textContent; - - if(this.value !== '') this.c[5].textContent = ''; - else this.c[5].textContent = this.placeHolder; - - if( !force ) return; - - this.send(); - - } - - // ---------------------- - // REZISE - // ---------------------- - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - - s[5].left = this.sa + 'px'; - s[5].width = this.sb + 'px'; - - } - - - } - - class Title extends Proto { - - constructor( o = {} ) { - - super( o ); - - let prefix = o.prefix || ''; - - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:right; width:60px; line-height:'+ (this.h-8) + 'px; color:' + this.colors.text ); - - if( this.h === 31 ){ - - this.s[0].height = this.h + 'px'; - this.s[1].top = 8 + 'px'; - this.c[2].style.top = 8 + 'px'; - - } - - let s = this.s; - - s[1].justifyContent = o.align || 'left'; - //s[1].textAlign = o.align || 'left'; - s[1].fontWeight = o.fontWeight || 'bold'; - - - this.c[1].textContent = this.txt.substring(0,1).toUpperCase() + this.txt.substring(1).replace("-", " "); - this.c[2].textContent = prefix; - - this.init(); - - } - - text( txt ) { - - this.c[1].textContent = txt; - - } - - text2( txt ) { - - this.c[2].textContent = txt; - - } - - rSize() { - - super.rSize(); - this.s[1].width = this.w + 'px'; //- 50 + 'px'; - this.s[2].left = this.w + 'px';//- ( 50 + 26 ) + 'px'; - - } - - setColor( c ) { - this.s[1].color = c; - this.s[2].color = c; - } - - } - - class Select extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || ''; - this.isDown = false; - this.onActif = o.onActif || function(){}; - - //let prefix = o.prefix || ''; - const cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+ cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); - //this.c[2].style.color = this.fontColor; - - this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); - this.c[3].textContent = this.value; - - let fltop = Math.floor(this.h*0.5)-7; - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'cursor' ], fill:cc.text, stroke:'none'}); - - this.stat = 1; - this.isActif = false; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - if( l.x > this.sa && l.x < this.sa+30 ) return 'over' - return '0' - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( this.isDown ){ - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove( e ) - } - - return false - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false - - this.isDown = true; - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove( e ) - - } - - mousemove ( e ) { - - let up = false; - let name = this.testZone( e ); - - if( name === 'over' ){ - this.cursor('pointer'); - up = this.mode( this.isDown ? 3 : 2 ); - } else { - up = this.reset(); - } - - return up - - } - - // ---------------------- - - apply ( v ) { - - v = v || ''; - - if( v !== this.value ) { - this.value = v; - this.c[3].textContent = this.value; - this.send(); - } - - this.mode(1); - - } - - update () { - - this.mode( 3 ); - - } - - mode ( n ) { - - let change = false; - let cc = this.colors; - - if( this.stat !== n ){ - - if( n===1 ) this.isActif = false; - if( n===3 ){ - if( !this.isActif ){ this.isActif = true; n=4; this.onActif( this ); } - else { this.isActif = false; } - } - - if( n===2 && this.isActif ) n = 4; - - this.stat = n; - - switch( n ){ - - case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base - case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over - case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.action; break; // down - case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.action; break; // actif - - } - - change = true; - - } - - return change - - - - } - - reset () { - - this.cursor(); - return this.mode( this.isActif ? 4 : 1 ) - - } - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = (this.sa + 40) + 'px'; - s[3].width = (this.sb - 40) + 'px'; - s[4].left = (this.sa+8) + 'px'; - - } - - } - - class Bitmap extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || ''; - this.refTexture = o.texture || null; - this.img = null; - - this.isDown = false; - this.neverlock = true; - - - - const cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); - - this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); - this.c[3].textContent = this.value; - - let fltop = Math.floor(this.h*0.5)-7; - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'load' ], fill:cc.text, stroke:'none'}); - - this.stat = 1; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.x > this.sa && l.x < this.sa+30 ) return 'over'; - return '0' - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( this.isDown ){ - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove( e ); - } - - return false; - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false; - - if( name === 'over' ){ - this.isDown = true; - Files.load( { callback:this.changeBitmap.bind(this) } ); - - } - - - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove( e ); - - } - - mousemove ( e ) { - - let up = false; - - let name = this.testZone( e ); - - if( name === 'over' ){ - this.cursor('pointer'); - up = this.mode( this.isDown ? 3 : 2 ); - } else { - up = this.reset(); - } - - return up; - - } - - // ---------------------- - - changeBitmap( img, fname ){ - - if( img ){ - this.img = img; - this.apply( fname ); - } else { - this.img = null; - this.apply( 'null' ); - } - - } - - // ---------------------- - - apply ( v ) { - - v = v || ''; - - if( v !== this.value ) { - this.value = v; - this.c[3].textContent = this.value; - - if( this.img !== null ){ - if( this.objectLink !== null ) this.objectLink[ this.val ] = v; - if( this.callback ) this.callback( this.value, this.img, this.name ); - } - - } - - this.mode(1); - - } - - update () { - - this.mode( 3 ); - - } - - mode ( n ) { - - let change = false; - let cc = this.colors; - - if( this.stat !== n ){ - - this.stat = n; - - switch( n ){ - - case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base - case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over - case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.over; break; // down - case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.select; break; // actif - - } - - change = true; - - } - - return change; - - - - } - - reset () { - - this.cursor(); - return this.mode( this.isActif ? 4 : 1 ); - - } - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = (this.sa + 40) + 'px'; - s[3].width = (this.sb - 40) + 'px'; - s[4].left = (this.sa+8) + 'px'; - - } - - } - - //import { Proto } from '../core/Proto.js'; - - class Selector extends Button { - - constructor( o = {} ) { - - if( o.selectable === undefined ) o.selectable = true; - super( o ); - - } - - } - - class Item extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.p = 100; - this.value = this.txt; - this.status = 1; - - this.itype = o.itype || 'none'; - this.val = this.itype; - - this.graph = this.svgs[ this.itype ]; - - let fltop = Math.floor(this.h*0.5)-7; - - this.c[2] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.graph, fill:this.colors.text, stroke:'none'}); - - this.s[1].marginLeft = 20 + 'px'; - - this.init(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousemove ( e ) { - - this.cursor('pointer'); - - //up = this.modes( this.isDown ? 3 : 2, name ); - - } - - mousedown ( e ) { - - if( this.isUI ) this.main.resetItem(); - - this.selected( true ); - - this.send(); - - return true; - - } - - uiout () { - - if( this.isSelect ) this.mode(3); - else this.mode(1); - - } - - uiover () { - - if( this.isSelect ) this.mode(4); - else this.mode(2); - - } - - update () { - - } - - /*rSize () { - - super.rSize(); - - }*/ - - mode ( n ) { - - let change = false; - - if( this.status !== n ){ - - this.status = n; - let s = this.s, cc = this.colors; - - switch( n ){ - - case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; - case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; - case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; - case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; - - } - - change = true; - - } - - return change; - - } - - reset () { - - this.cursor(); - // return this.mode( 1 ); - - } - - selected ( b ){ - - if( this.isSelect ) this.mode(1); - - this.isSelect = b || false; - - if( this.isSelect ) this.mode(3); - - } - - - } - - class Grid extends Proto { - - constructor( o = {} ) { - - super( o ); - - /*this.values = o.values || []; - - if( typeof this.values === 'string' ) this.values = [ this.values ];*/ - - this.values = []; - - if( o.values ){ - if( o.values instanceof Array ){ - this.values = o.values; - } else if( o.values instanceof String ){ - this.values = [ o.values ]; - } else if( o.values instanceof Object ){ - this.refObject = o.values; - for( let g in this.refObject ) this.values.push( g ); - } - } - - this.lng = this.values.length; - - - - this.value = o.value || null; - - - - - let cc = this.colors; - - - this.isSelectable = o.selectable || false; - this.spaces = o.spaces || [ cc.sx, cc.sy ]; - this.bsize = o.bsize || [ 90, this.h ]; - - this.bsizeMax = this.bsize[0]; - - this.tmp = []; - this.stat = []; - this.grid = [ 2, Math.round( this.lng * 0.5 ) ]; - - this.h = ( this.grid[1] * this.bsize[1] ) + ( this.grid[1] * this.spaces[1] ); //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); - - this.c[1].textContent = ''; - //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); - this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1])+'px; border:none;' ); - - let n = 0, b, td, tr, sel; - - this.res = -1; - this.isDown = false; - this.neverlock = true; - - this.buttons = []; - this.stat = []; - this.tmpX = []; - this.tmpY = []; - - for( let i = 0; i < this.grid[1]; i++ ){ - - tr = this.c[2].insertRow(); - tr.style.cssText = 'pointer-events:none;'; - for( let j = 0; j < this.grid[0]; j++ ){ - - td = tr.insertCell(); - td.style.cssText = 'pointer-events:none;'; - - if( this.values[n] ){ - - sel = false; - if( this.values[n] === this.value && this.isSelectable ) sel = true; - - b = document.createElement( 'div' ); - b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:'+this.bsize[0]+'px; height:'+(this.bsize[1]-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; left:auto; right:auto; border-radius:'+this.radius+'px;'; - b.style.background = sel ? cc.select : cc.button; - b.style.color = sel ? cc.textSelect : cc.text; - b.innerHTML = this.values[n]; - td.appendChild( b ); - - this.buttons.push(b); - this.stat.push(1); - - } else { - - b = document.createElement( 'div' ); - b.style.cssText = this.css.txt + 'position:static; width:'+this.bsize[0]+'px; height:'+this.bsize[1]+'px; text-align:center; left:auto; right:auto; background:none;'; - td.appendChild( b ); - - } - - if(j===0) b.style.cssText += 'float:right;'; - else b.style.cssText += 'float:left;'; - - n++; - - } - } - - this.s[0].border = 'none'; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return -1; - - l.y += this.mtop; - - let tx = this.tmpX; - let ty = this.tmpY; - - let id = -1; - let c = -1; - let line = -1; - let i = this.grid[0]; - while( i-- ){ - if( l.x > tx[i][0] && l.x < tx[i][1] ) c = i; - } - - i = this.grid[1]; - while( i-- ){ - if( l.y > ty[i][0] && l.y < ty[i][1] ) line = i; - } - - if(c!==-1 && line!==-1){ - id = c + (line*2); - if(id>this.lng-1) id = -1; - } - - return id; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( !this.isDown ) return false - - this.isDown = false; - if( this.res !== -1 ){ - this.value = this.values[this.res]; - this.send(); - } - - return this.mousemove( e ) - - } - - mousedown ( e ) { - - if( this.isDown ) return false - this.isDown = true; - return this.mousemove( e ) - - } - - mousemove ( e ) { - - let up = false; - this.res = this.testZone( e ); - - if( this.res !== -1 ){ - this.cursor('pointer'); - up = this.modes( this.isDown ? 3 : 2, this.res ); - } else { - up = this.reset(); - } - - return up; - - } - - // ---------------------- - // MODE - // ----------------------- - - modes ( N = 1, id = -1 ) { - - let i = this.lng, w, n, r = false; - - while( i-- ){ - - n = N; - w = this.isSelectable ? this.values[ i ] === this.value : false; - - if( i === id ){ - if( w && n === 2 ) n = 3; - } else { - n = 1; - if( w ) n = 4; - } - - if( this.mode( n, i ) ) r = true; - - } - - return r - - } - - mode ( n, id ) { - - let change = false; - let cc = this.colors, s = this.buttons; - let i = id; - - if( this.stat[id] !== n ){ - - this.stat[id] = n; - - switch( n ){ - - case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; - case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; - case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; - case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; - - } - - change = true; - - } - - return change; - - } - - // ---------------------- - - reset () { - - this.res = -1; - this.cursor(); - return this.modes() - - } - - - label ( string, n ) { - - this.buttons[n].textContent = string; - - } - - icon ( string, y, n ) { - - this.buttons[n].style.padding = ( y || 0 ) +'px 0px'; - this.buttons[n].innerHTML = string; - - } - - testW () { - - let vw = this.spaces[0]*3 + this.bsizeMax*2, rz = false; - if( vw > this.w ) { - this.bsize[0] = ( this.w-(this.spaces[0]*3) ) * 0.5; - rz = true; - } else { - if( this.bsize[0] !== this.bsizeMax ) { - this.bsize[0] = this.bsizeMax; - rz = true; - } - } - - if( !rz ) return; - - let i = this.buttons.length; - while(i--) this.buttons[i].style.width = this.bsize[0] + 'px'; - - } - - rSize () { - - super.rSize(); - - this.testW(); - - let mid; - - this.tmpX = []; - this.tmpY = []; - - for( let j = 0; j < this.grid[0]; j++ ){ - - if(j===0){ - mid = ( this.w*0.5 ) - ( this.spaces[0]*0.5 ); - this.tmpX.push( [ mid-this.bsize[0], mid ] ); - } else { - mid = ( this.w*0.5 ) + ( this.spaces[0]*0.5 ); - this.tmpX.push( [ mid, mid+this.bsize[0] ] ); - } - - } - - mid = this.spaces[1]; - - for( let i = 0; i < this.grid[1]; i++ ){ - - this.tmpY.push( [ mid, mid + this.bsize[1] ] ); - mid += this.bsize[1] + this.spaces[1]; - - } - - } - - } - - class Pad2D extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.autoWidth = false; - this.minw = this.w; - this.diam = o.diam || this.w; - - //this.margin = 15; - this.pos = new V2(0,0); - this.maxPos = 90; - - this.model = o.stype || 0; - if( o.mode !== undefined ) this.model = o.mode; - - this.min = o.min === undefined ? -1 : o.min; - this.max = o.max === undefined ? 1 : o.max; - - this.range = (this.max - this.min)*0.5; - - this.cmode = 0; - - - //console.log(this.range) - - this.c[0].style.display = 'block'; - - - - - - this.precision = o.precision === undefined ? 2 : o.precision; - - /*this.bounds = {}; - this.bounds.x1 = o.x1 || -1; - this.bounds.x2 = o.x2 || 1; - this.bounds.y1 = o.y1 || -1; - this.bounds.y2 = o.y2 || 1; - - this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); - this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); - - this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); - this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ - - this.value = ( Array.isArray( o.value ) && o.value.length == 2 ) ? o.value : [ 0, 0 ]; - - - this.h = o.h || this.w + 10; - - this.c[0].style.width = this.w + 'px'; - - // Title - if( this.c[1] !== undefined ) { // with title - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - - } - - //this.top -= this.margin - - let cc = this.colors; - - - // Value - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+ ( this.h - 20 ) + 'px; width:100%; color:' + cc.text ); - this.c[2].textContent = this.value; - - // Pad - - let pad = this.getPad2d(); - - this.setSvg( pad, 'fill', cc.back, 0 ); - this.setSvg( pad, 'fill', cc.button, 1 ); - this.setSvg( pad, 'stroke', cc.back, 2 ); - this.setSvg( pad, 'stroke', cc.back, 3 ); - this.setSvg( pad, 'stroke', cc.text, 4 ); - - this.setSvg( pad, 'viewBox', '0 0 '+this.diam+' '+this.diam ); - this.setCss( pad, { width:this.diam, height:this.diam, left:0, top:this.top }); - - this.c[3] = pad; - - this.init(); - this.setValue(); - - } - - testZone ( e ) { - - let l = this.local; - - if( l.x === -1 && l.y === -1 ) return ''; - - - - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'pad'; - - /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { - return 'pad'; - }*/ - - //return ''; - - } - - mouseup ( e ) { - - this.isDown = false; - return this.mode(0); - - } - - mousedown ( e ) { - - if ( this.testZone(e) === 'pad' ) { - - this.isDown = true; - this.mousemove( e ); - return this.mode(1); - } - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - let x = (this.w*0.5) - ( e.clientX - this.zone.x ); - let y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - - let r = 256 / this.diam; - - x = -(x*r); - y = -(y*r); - - x = Tools.clamp( x, -this.maxPos, this.maxPos ); - y = Tools.clamp( y, -this.maxPos, this.maxPos ); - - //let x = e.clientX - this.zone.x; - //let y = e.clientY - this.zone.y - this.top; - - /*if( x < this.margin ) x = this.margin; - if( x > this.w - this.margin ) x = this.w - this.margin; - if( y < this.margin ) y = this.margin; - if( y > this.w - this.margin ) y = this.w - this.margin;*/ - - //console.log(x,y) - - this.setPos( [ x , y ] ); - - this.update( true ); - - } - - mode ( mode ) { - - if( this.cmode === mode ) return false; - - let cc = this.colors; - - switch( mode ){ - case 0: // base - - this.s[2].color = cc.text; - this.setSvg( this.c[3], 'fill', cc.back, 0); - this.setSvg( this.c[3], 'fill', cc.button, 1); - this.setSvg( this.c[3], 'stroke', cc.back, 2); - this.setSvg( this.c[3], 'stroke', cc.back, 3); - this.setSvg( this.c[3], 'stroke', cc.text, 4 ); - - break; - case 1: // down - - this.s[2].color = cc.textSelect; - this.setSvg( this.c[3], 'fill', cc.backoff, 0); - this.setSvg( this.c[3], 'fill', cc.overoff, 1); - this.setSvg( this.c[3], 'stroke', cc.backoff, 2); - this.setSvg( this.c[3], 'stroke', cc.backoff, 3); - this.setSvg( this.c[3], 'stroke', cc.textSelect, 4 ); - - break; - } - - this.cmode = mode; - return true; - - - - } - - update ( up ) { - - //if( up === undefined ) up = true; - - this.c[2].textContent = this.value; - - this.updateSVG(); - - if( up ) this.send(); - - } - - updateSVG() { - - if ( this.model == 1 ) { - - this.setSvg( this.c[3], 'y1', this.pos.y, 2 ); - this.setSvg( this.c[3], 'y2', this.pos.y, 2 ); - - this.setSvg( this.c[3], 'x1', this.pos.x, 3 ); - this.setSvg( this.c[3], 'x2', this.pos.x, 3 ); - - } - - this.setSvg( this.c[3], 'cx', this.pos.x, 4 ); - this.setSvg( this.c[3], 'cy', this.pos.y, 4 ); - - } - - setPos ( p ) { - - //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; - - this.pos.set( p[0]+128 , p[1]+128 ); - - let r = 1/this.maxPos; - - this.value[0] = ((p[0]*r)*this.range).toFixed( this.precision ); - this.value[1] = ((p[1]*r)*this.range).toFixed( this.precision ); - - } - - setValue ( v, up = false ) { - - if( v === undefined ) v = this.value; - - /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; - if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; - if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; - if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ - - this.value[0] = Math.min( this.max, Math.max( this.min, v[0] ) ).toFixed( this.precision ) * 1; - this.value[1] = Math.min( this.max, Math.max( this.min, v[1] ) ).toFixed( this.precision ) * 1; - - this.pos.set( ((this.value[0]/this.range)*this.maxPos)+128 , ((this.value[1]/this.range)*this.maxPos)+128 ); - - //console.log(this.pos) - - this.update( up ); - - } - - /*lerp( s1, s2, d1, d2, c = true ) { - - let s = ( d2 - d1 ) / ( s2 - s1 ); - - return c ? ( v ) => { - return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 - } : ( v ) => { - return ( v - s1 ) * s + d1 - } - - }*/ - - } - - const add = function () { - - let a = arguments; - - let type, o, ref = false, n = null; - - if( typeof a[0] === 'string' ){ - - type = a[0]; - o = a[1] || {}; - - } else if ( typeof a[0] === 'object' ){ // like dat gui - - ref = true; - if( a[2] === undefined ) [].push.call(a, {}); - - type = a[2].type ? a[2].type : autoType( a[0][a[1]], a[2] ); - - o = a[2]; - o.name = a[1]; - if (o.hasOwnProperty("displayName")) o.name = o.displayName; - - if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } - else o.value = a[0][a[1]]; - - } - - let name = type.toLowerCase(); - - if( name === 'group' ){ - o.add = add; - //o.dx = 8 - } - - switch( name ){ - - case 'bool': case 'boolean': n = new Bool(o); break; - case 'button': n = new Button(o); break; - case 'circular': n = new Circular(o); break; - case 'color': n = new Color(o); break; - case 'fps': n = new Fps(o); break; - case 'graph': n = new Graph(o); break; - case 'group': n = new Group(o); break; - case 'joystick': n = new Joystick(o); break; - case 'knob': n = new Knob(o); break; - case 'list': n = new List(o); break; - case 'numeric': case 'number': n = new Numeric(o); break; - case 'slide': n = new Slide(o); break; - case 'textInput': case 'string': n = new TextInput(o); break; - case 'title': case 'text': n = new Title(o); break; - case 'select': n = new Select(o); break; - case 'bitmap': n = new Bitmap(o); break; - case 'selector': n = new Selector(o); break; - case 'empty': case 'space': n = new Empty(o); break; - case 'item': n = new Item(o); break; - case 'grid': n = new Grid(o); break; - case 'pad2d': case 'pad': n = new Pad2D(o); break; - - } - - - - if( n !== null ){ - - Roots.needResize = true; - - if( ref ) n.setReferency( a[0], a[1] ); - return n; - - } - - }; - - const autoType = function ( v, o ) { - - let type = 'slide'; - - if( typeof v === 'boolean' ) type = 'bool'; - else if( typeof v === 'string' ){ - - if( v.substring(0,1) === '#' ) type = 'color'; - else type = 'string'; - - } else if( typeof v === 'number' ){ - - if( o.ctype ) type = 'color'; - else type = 'slide'; - - } else if( typeof v === 'array' && v instanceof Array ){ - - if( typeof v[0] === 'number' ) type = 'number'; - else if( typeof v[0] === 'string' ) type = 'list'; - - } else if( typeof v === 'object' && v instanceof Object ){ - - if( v.x !== undefined ) type = 'number'; - else type = 'list'; - - } - - return type - - }; - - /** - * @author lth / https://github.com/lo-th - */ - - class Gui { - constructor(o = {}) { - this.isGui = true; - - this.name = "gui"; - - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; - - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors); - else this.colors = Tools.defineColor(o); - - //this.cleanning = false - - // style - this.css = Tools.cloneCss(); - - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 - - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; - - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") - ? o.addDOMEventListeners - : true; - - this.callback = o.callback === undefined ? null : o.callback; - - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; - - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - - this.cn = ""; - - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; - - this.size.h = this.size.h < 11 ? 11 : this.size.h; - - // local mouse and zone - this.local = new V2().neg(); - this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; - - // virtual mouse - this.mouse = new V2().neg(); - - this.h = 0; - //this.prevY = -1; - this.sw = 0; - - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); - - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; - - this.autoResize = o.autoResize === undefined ? true : o.autoResize; - - // default position - this.isCenter = o.center || false; - this.cssGui = - o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; - - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; - - this.isNewTarget = false; - - let cc = this.colors; - - this.content = Tools.dom( - "div", - this.css.basic + - " width:0px; height:auto; top:0px; background:" + - cc.content + - "; " + - this.cssGui - ); - - this.innerContent = Tools.dom( - "div", - this.css.basic + - "width:100%; top:0; left:0; height:auto; overflow:hidden;" - ); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); - - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom( - "div", - this.css.basic + flexible + "width:100%; left:0; " - ); - this.innerContent.appendChild(this.inner); - - // scroll - this.scrollBG = Tools.dom( - "div", - this.css.basic + - "right:0; top:0; width:" + - (this.size.s - 1) + - "px; height:10px; display:none; background:" + - cc.background + - ";" - ); - this.content.appendChild(this.scrollBG); - - this.scroll = Tools.dom( - "div", - this.css.basic + - "background:" + - cc.button + - "; right:2px; top:0; width:" + - (this.size.s - 4) + - "px; height:10px;" - ); - this.scrollBG.appendChild(this.scroll); - - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; - - let r = cc.radius; - this.bottom = Tools.dom( - "div", - this.css.txt + - "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + - r + - "px; border-bottom-left-radius:" + - r + - "px; justify-content:center; height:" + - this.bh + - "px; line-height:" + - (this.bh - 5) + - "px; color:" + - cc.text + - ";" - ); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - this.bottom.style.background = cc.background; - - // - - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; - - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } - - if (this.parent !== null) this.parent.appendChild(this.content); - - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } - - // height transition - this.transition = - o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - - this.setWidth(); - - if (this.isCanvas) this.makeCanvas(); - - Roots.add(this); - } - - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseUp(x, y) { - /* - - clientX,clientY are no used when isCanvas==true - */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); - - Roots.needReZone = true; - } - - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = - "height " + this.transition + "s ease-out"; - this.content.style.transition = - "height " + this.transition + "s ease-out"; - this.bottom.style.transition = "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } - - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } - - // ---------------------- - // CANVAS - // ---------------------- - - onDraw() {} - - makeCanvas() { - this.canvas = document.createElementNS( - "http://www.w3.org/1999/xhtml", - "canvas" - ); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - - //console.log( this.canvas.width, this.canvas.height ) - } - - draw(force) { - if (this.canvas === null) return; - - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } - - ////// - - getDom() { - return this.content; - } - - noMouse() { - this.mouse.neg(); - } - - setMouse(uv, flip = true) { - if (flip) - this.mouse.set( - Math.round(uv.x * this.canvas.width), - this.canvas.height - Math.round(uv.y * this.canvas.height) - ); - else - this.mouse.set( - Math.round(uv.x * this.canvas.width), - Math.round(uv.y * this.canvas.height) - ); - //this.mouse.set( m.x, m.y ); - - //console.log("setMouse "+uv.x+" "+uv.y) - } - - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } - - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } - - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } - - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } - - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } - - onChange(f) { - this.callback = f || null; - return this; - } - - // ---------------------- - // STYLES - // ---------------------- - - mode(n) { - let needChange = false; - let cc = this.colors; - - if (n !== this.cn) { - this.cn = n; - - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } - - needChange = true; - } - - return needChange; - } - - // ---------------------- - // TARGET - // ---------------------- - - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } - - this.proto = null; - this.current = -1; - - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - - Roots.cursor(); - return true; - } - - // ---------------------- - // ZONE TEST - // ---------------------- - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - - this.isReset = false; - - let name = ""; - - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; - else name = l.x > s ? "scroll" : "content"; - - return name; - } - - // ---------------------- - // EVENTS - // ---------------------- - - handleEvent(e) { - //if( this.cleanning ) return - - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; - - let change = false; - let protoChange = false; - - let name = this.testZone(e); - - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; - - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } - - if (!name) return; - - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - - if (Roots.isMobile && type === "mousedown") this.getNext(e, change); - - if (this.proto) protoChange = this.proto.handleEvent(e); - - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) - change = this.onWheel(e); - - if (!Roots.lock) { - this.getNext(e, change); - } - - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } - - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); - - break; - } - - if (this.isDown) change = true; - if (protoChange) change = true; - - if (type === "keyup") change = true; - if (type === "keydown") change = true; - - if (change) this.draw(); - } - - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); - - if (next !== this.current) { - this.clearTarget(); - this.current = next; - this.isNewTarget = true; - } - - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } - - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } - - // ---------------------- - // RESET - // ---------------------- - - reset(force) { - if (this.isReset) return; - - //this.resetItem(); - - this.mouse.neg(); - this.isDown = false; - - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); - - if (r || r2) this.draw(true); - - this.isReset = true; - - //Roots.lock = false; - } - - // ---------------------- - // ADD NODE - // ---------------------- - - add() { - //if(this.cleanning) this.cleanning = false - - let a = arguments; - let ontop = false; - - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; - - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); - else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } - - let u = add.apply(this, a); - - if (u === null) return; - - if (ontop) this.uis.unshift(u); - else this.uis.push(u); - - this.calc(); - - this.isEmpty = false; - - return u; - } - - // remove one node - - remove(n) { - if (n.dispose) n.dispose(); - } - - // call after uis clear - - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } - - // clear all gui - - empty() { - //this.cleanning = true - - //this.close(); - - let i = this.uis.length, - item; - - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } - - this.uis = []; - this.isEmpty = true; - this.calc(); - } - - clear() { - this.empty(); - } - - clear2() { - setTimeout(this.empty.bind(this), 0); - } - - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } - - // ---------------------- - // ITEMS SPECIAL - // ---------------------- - - resetItem() { - if (!this.isItemMode) return; - - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } - - setItem(name) { - if (!this.isItemMode) return; - - name = name || ""; - this.resetItem(); - - if (!name) { - this.update(0); - return; - } - - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) - this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } - - // ---------------------- - // SCROLL - // ---------------------- - - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; - - if (b) { - this.total = this.h; - - this.maxView = this.maxHeight; - - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; - - this.range = this.maxView - this.sh; - - this.oy = Tools.clamp(this.oy, 0, this.range); - - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } - - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } - - update(y) { - y = Tools.clamp(y, 0, this.range); - - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } - - // ---------------------- - // RESIZE FUNCTION - // ---------------------- - - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } - - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } - - setHeight() { - if (this.tmp) clearTimeout(this.tmp); - - this.zone.h = this.bh; - this.isScroll = false; - - if (this.isOpen) { - this.h = this.calcUis(); - - let hhh = this.forceHeight - ? this.forceHeight + this.zone.y - : window.innerHeight; - - this.maxHeight = hhh - this.zone.y - this.bh; - - let diff = this.h - this.maxHeight; - - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } - - this.upScroll(this.isScroll); - - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; - - if (this.forceHeight && this.lockHeight) - this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } - - rezone() { - Roots.needReZone = true; - } - - setWidth(w) { - if (w) this.zone.w = w; - - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) - this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } - - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } - } - - exports.Files = Files; - exports.Gui = Gui; - exports.REVISION = REVISION; - exports.Tools = Tools; - exports.add = add; - - Object.defineProperty(exports, '__esModule', { value: true }); - -})); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0pIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7RUFBQTtFQUNBO0VBQ0E7QUFDQTtBQUNZLFFBQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7RUFDQTtBQUNBO0VBQ0EsTUFBTSxDQUFDLEdBQUc7RUFDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7RUFDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7RUFDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0VBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSztFQUNiLEVBQUUsS0FBSyxFQUFFLEtBQUs7RUFDZCxFQUFFLE9B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LEdBQUcsRUFBRTtFQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztFQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0VBQ3JCLE9BQU87QUFDUDtFQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0VBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7RUFDMUIsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtFQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7RUFDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUNqQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxD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QyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0VBQ2pCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0VBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0VBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0VBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0VBQ2pCLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0VBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7RUFDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztFQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtFQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0VBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7RUFDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztFQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDbkIsU0FBUztFQUNULFFBQVEsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDM0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUMsYUFBYTtFQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMzRCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMxQixZQUFZLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7RUFDekcsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFlBQVksRUFBRSxXQUFXLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRztBQUM5RDtFQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakQ7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRDtFQUNBLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQjtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0c7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLE9BQU8sRUFBRSxXQUFXLEtBQUssR0FBRztBQUNoQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBRztFQUNwQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztFQUNwSixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JIO0VBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM3SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFB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LEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0VBQ0E7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztFQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0VBQ0E7QUFDQTtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdGO0VBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMvQjtFQUNBLFNBQVMsTUFBTTtFQUNmO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzVGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0VBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckksWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9GLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BJO0VBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztFQUMvQixTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxhQUFhLEVBQUUsWUFBWTtBQUMvQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0VBQ2hKLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN2QyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDM0IsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQ3hCLFFBQVcsSUFBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0VBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztFQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztFQUN2QjtFQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7RUFDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7RUFDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0VBQ0EsWUFBWSxFQUFFLEdBQUc7RUFDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7RUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxhQUFhLENBQUM7RUFDZDtFQUNBLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlEO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkI7RUFDQSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixnQkFBZ0IsTUFBTSxDQUFDLEVBQUUsQ0FBQztFQUMxQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdEQsaUJBQWlCO0FBQ2pCO0VBQ0EsZ0JBQWdCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRztFQUNBLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0QsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuSjtFQUNBLGdCQUFnQixDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxSDtFQUNBLGFBQWE7RUFDYixZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDO0VBQzVCLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUVoQyxTQUFTO0FBSVQ7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztBQUN2QjtFQUNBO0VBQ0EsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUNqRyxRQUFRLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckk7RUFDQSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDL0UsUUFBUSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3hJO0VBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDbkcsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDOUksUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDOUksUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsb0ZBQW9GLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDL0s7QUFDQTtFQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxRztFQUNBLFFBQVEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDMUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksRUFBRSxXQUFXLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDO0VBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNwQjtFQUNBLFFBQVEsSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDO0VBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsNEZBQTRGLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztFQUNqTyxRQUFRLE9BQU8sSUFBSTtFQUNuQixZQUFZLEtBQUssTUFBTTtFQUN2QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7RUFDM0YsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxRQUFRO0VBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztFQUM1RixZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLEtBQUs7RUFDdEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0VBQ3pGLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssS0FBSztFQUN0QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsbUZBQW1GLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7RUFDekosWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxRQUFRO0VBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztFQUM1SixZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLFFBQVE7RUFDekIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0VBQzVGLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssTUFBTTtFQUN2QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsd0pBQXdKLENBQUMsS0FBSyxDQUFDO0VBQ3ZNLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLDRLQUE0SyxDQUFDO0VBQy9MLFlBQVksTUFBTTtFQUNsQixTQUFTO0VBQ1QsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDO0VBQzVCLFFBQVEsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxVQUFVLENBQUMsQ0FBQztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0VBQ0EsSUFBSSxXQUFXLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxDQUFDO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsQ0FBQztBQUNkO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtFQUNBLElBQUksV0FBVyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7RUFDQSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtFQUNBLEVBQUM7QUFDRDtFQUNBLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNaO0FBQ1ksUUFBQyxLQUFLLEdBQUc7O0VDdjNCckI7QUFDQTtBQUNBO0VBQ08sTUFBTSxLQUFLLENBQUM7QUFDbkI7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksT0FBTyxTQUFTLEVBQUUsSUFBSSxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQ2xCO0VBQ0EsUUFBUSxRQUFRLElBQUk7RUFDcEIsWUFBWSxLQUFLLEtBQUs7RUFDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFHO0VBQzNELFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssS0FBSztFQUN0QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUc7RUFDdkQsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxLQUFLO0VBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBRztFQUN4RCxZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLEtBQUs7RUFDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFHO0VBQ3ZELFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxLQUFLO0VBQ2xDLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxFQUFFLDBCQUEwQixFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBRztFQUM5RyxZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLE1BQU07RUFDdkIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7RUFDL0gsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxNQUFNO0VBQ3ZCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUFFLGtCQUFrQixFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFHO0VBQzdGLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssSUFBSTtFQUNyQixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxFQUFFLGlCQUFpQixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFHO0VBQ2hHLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssT0FBTztFQUN4QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7RUFDeEcsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxNQUFNO0VBQ3ZCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBRztFQUNsRixZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLEtBQUs7RUFDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBRztFQUN4RixZQUFZLE1BQU07QUFDbEI7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sQ0FBQztBQUNoQjtFQUNBLEtBQUs7QUFDTDtBQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDN0I7RUFDQSxRQUFRLElBQUksT0FBTyxNQUFNLENBQUMsa0JBQWtCLEtBQUssVUFBVSxFQUFFO0VBQzdELFlBQVksTUFBTSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQywyQkFBMEI7RUFDeEUsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJO0FBQ1o7RUFDQSxTQUFTLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRTtBQUNoQztFQUNBLFlBQVksTUFBTSxPQUFPLEdBQUc7RUFDNUIsZ0JBQWdCLHNCQUFzQixFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztFQUMzRCxnQkFBZ0IsUUFBUSxFQUFFLEtBQUs7RUFDL0I7RUFDQSxhQUFhLENBQUM7QUFDZDtFQUNBLFlBQVksT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksR0FBRTtBQUNuRDtFQUNBO0VBQ0EsWUFBWSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEdBQUU7RUFDckUsWUFBWSxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUU7RUFDbEQ7QUFDQTtFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLElBQUk7QUFDbkM7RUFDQSxZQUFZLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDbEMsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsRjtFQUNBLFlBQVksTUFBTSxPQUFPLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztFQUNsRixZQUFZLE1BQU0sT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7RUFDL0UsWUFBWSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQzVDO0VBQ0EsWUFBWSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxJQUFJLEdBQUU7RUFDOUUsaUJBQWlCLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxHQUFFO0VBQ3ZGLGlCQUFpQixNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksR0FBRTtBQUMxQztFQUNBLFlBQVksTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsRUFBRTtBQUN4QztFQUNBLGdCQUFnQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU07QUFDN0M7RUFDQSxnQkFBZ0IsT0FBTyxJQUFJO0VBQzNCLG9CQUFvQixLQUFLLE9BQU87RUFDaEMsd0JBQXdCLElBQUksR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDO0VBQzVDLHdCQUF3QixHQUFHLENBQUMsTUFBTSxHQUFHLFdBQVc7RUFDaEQsNEJBQTRCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFFO0VBQzVFLDBCQUF5QjtFQUN6Qix3QkFBd0IsR0FBRyxDQUFDLEdBQUcsR0FBRyxRQUFPO0VBQ3pDLG9CQUFvQixNQUFNO0VBQzFCLG9CQUFvQixLQUFLLE1BQU07RUFDL0Isd0JBQXdCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRTtFQUMxRixvQkFBb0IsTUFBTTtFQUMxQixvQkFBb0I7RUFDcEIsd0JBQXdCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFFO0VBQzVFLG9CQUFvQixNQUFNO0VBQzFCLGlCQUFpQjtBQUNqQjtFQUNBLGNBQWE7QUFDYjtFQUNBLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNuQjtFQUNBLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksR0FBRTtBQUMzRDtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLENBQUMsT0FBTywwQkFBMEIsRUFBRSxPQUFPLEdBQUc7RUFDOUMsUUFBUSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLO0VBQ3hDLFlBQVksTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztFQUMxRCxZQUFZLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0VBQ2hDLFlBQVksS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0VBQzlDLFlBQVksS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSztFQUN4QyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUM7RUFDM0MsaUJBQWlCLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNqRixpQkFBaUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsWUFBWSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE1BQU07RUFDbkQsZ0JBQWdCLE9BQU87RUFDdkIsb0JBQW9CLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLO0VBQ25ELHdCQUF3QixPQUFPO0VBQy9CLDRCQUE0QixPQUFPLEVBQUU7RUFDckMsZ0NBQWdDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLO0VBQ3pELG9DQUFvQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDbEQsaUNBQWlDLENBQUM7RUFDbEMseUJBQXlCLENBQUM7RUFDMUIscUJBQXFCLENBQUM7RUFDdEIsaUJBQWlCLENBQUM7RUFDbEIsYUFBYSxDQUFDLENBQUM7QUFDZjtFQUNBLFlBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzFCLFNBQVMsQ0FBQztFQUNWLEtBQUs7QUFDTDtBQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLGFBQWEsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDaEM7RUFDQSxRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxPQUFPLE1BQU0sQ0FBQyxrQkFBa0IsS0FBSyxVQUFVLEVBQUU7RUFDN0QsWUFBWSxNQUFNLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLDJCQUEwQjtFQUN4RSxZQUFZLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDM0IsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJO0FBQ1o7RUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRTtBQUNuQztFQUNBLFlBQVksTUFBTSxPQUFPLEdBQUc7RUFDNUIsZ0JBQWdCLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLE9BQU87RUFDaEQsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7RUFDbEMsYUFBYSxDQUFDO0FBQ2Q7RUFDQSxZQUFZLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUU7RUFDbkQsWUFBWSxPQUFPLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUM7RUFDekUsWUFBWSxPQUFPLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbEY7QUFDQTtFQUNBO0VBQ0EsWUFBWSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUN0RTtFQUNBLFlBQVksSUFBSSxPQUFPLEdBQUcsTUFBTTtBQUNoQztFQUNBO0VBQ0EsWUFBWSxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN2RDtFQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDL0U7RUFDQTtFQUNBLFlBQVksTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DO0VBQ0E7RUFDQSxZQUFZLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9CO0VBQ0EsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ25CO0VBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLDBCQUEwQixFQUFFLE9BQU8sR0FBRztFQUNqRCxRQUFRLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUs7RUFDeEMsWUFBWSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xELFlBQVksQ0FBQyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLGNBQWE7RUFDL0QsWUFBWSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztFQUM5RSxZQUFZLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLEdBQUU7QUFDaEQ7RUFDQSxZQUFZLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTTtFQUM5QyxnQkFBZ0IsT0FBTztFQUN2QixvQkFBb0IsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFO0VBQ3pFLGtCQUFpQjtFQUNqQixhQUFhLEVBQUM7RUFDZCxZQUFZLENBQUMsQ0FBQyxLQUFLLEdBQUU7RUFDckIsU0FBUyxDQUFDO0VBQ1YsS0FBSztBQUNMO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksYUFBYSxTQUFTLEdBQUc7QUFDN0I7RUFDQSxRQUFRLElBQUk7RUFDWjtFQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztFQUM5RCxZQUFZLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztFQUM3QixZQUFZLFdBQVcsTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFO0VBQ3ZELGdCQUFnQixNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztFQUNuRCxnQkFBZ0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNqQyxhQUFhO0FBQ2I7RUFDQSxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDO0VBQzlCLFlBQVksT0FBTyxLQUFLLENBQUM7QUFDekI7RUFDQSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkI7RUFDQSxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7RUFDQSxTQUFTO0VBQ1Q7RUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTs7RUNqUU8sTUFBTSxFQUFFLENBQUM7QUFDaEI7RUFDQSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUc7QUFDN0I7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2IsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2IsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNiLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hCLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hCLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxHQUFHO0FBQzNCO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztFQUNuQixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDO0VBQ25CLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsWUFBWSxDQUFDLEVBQUUsTUFBTSxHQUFHO0FBQ3pCO0VBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQzNDO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0VBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3hEO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0VBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztFQUNBLEVBQUUsS0FBSyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QztFQUNBLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNkLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDZCxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLE1BQU0sQ0FBQyxHQUFHO0FBQ1g7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDZixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDZixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQ1I7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDZCxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDZCxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLE1BQU0sQ0FBQyxHQUFHO0FBQ1g7RUFDQSxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDMUM7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNaO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmO0VBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZDtFQUNBLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRztBQUN0RDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNyQjtFQUNBLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDbEc7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDbkI7RUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtFQUNsQixHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDNUIsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQy9CLEdBQUcsTUFBTTtFQUNULEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUM7RUFDdEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQztFQUN6QyxHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7RUFDQSxFQUFFO0FBQ0Y7RUFDQTs7RUM5SEE7RUFDQTtFQUNBO0FBQ0E7RUFDTyxNQUFNLEtBQUssQ0FBQztFQUNuQixFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0VBQ3RCO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDO0FBQ2hDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQzNCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUM7QUFDdEM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztFQUMvQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7RUFDaEMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ2pDO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDakIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNsQjtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QjtFQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztFQUMxRSxJQUFJLElBQUksQ0FBQyxZQUFZO0VBQ3JCLE1BQU0sQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQ2hFO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0M7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ3JEO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXO0VBQ25DLE1BQU0sQ0FBQztFQUNQLE1BQU0sSUFBSSxDQUFDLElBQUk7RUFDZixVQUFVLElBQUksQ0FBQyxLQUFLO0VBQ3BCLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO0VBQzdCLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO0VBQzVCLFVBQVUsS0FBSyxDQUFDLE1BQU07RUFDdEIsS0FBSyxDQUFDO0FBQ047RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDM0M7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMzQjtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2pELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztFQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQzFELFNBQVMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QjtFQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztFQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqRDtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDdkQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7RUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0VBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUN4QztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7RUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDbkM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFD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RyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQzdFLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0VBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7RUFDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEMsT0FBTztFQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDdkIsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN6QyxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxHQUFHO0VBQ1QsSUFBSSxJQUFJ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QUFDLENBQUM7RUFDakUsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7RUFDcEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0VBQzdDLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN0QixLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0EsRUFBRSxhQUFhLEdBQUc7RUFDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0VBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztFQUM5RSxLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0E7QUFDQTtFQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7RUFDL0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQzlDLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7RUFDcEMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFB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QUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO0VBQzNFLE1BQU07RUFDTixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUNqQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO0VBQzFCLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0VBQzNDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQ3JCLE1BQU0sT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztBQUNyRTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0IsR0FBRztBQUNIO0VBQ0EsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQ1gsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0VBQ0gsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0VBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0VBQ0gsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0VBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0VBQ0gsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ2IsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0VBQ0gsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ2IsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0VBQ0gsRUFBRSxLQUFLLENB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QUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07RUFDNUI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7RUFDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0VBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMs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RUFDbEQ7RUFDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztFQUM1RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7RUFDQTtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0VBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7RUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtFQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztFQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0VBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFJO0FBQ3REO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7RUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFDO0VBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztFQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUU7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDbkM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUk7RUFDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwQztFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU07RUFDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtFQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtFQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRTtBQUN4QjtFQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQztFQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUN0QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUNsSTtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUN0QztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtFQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0VBQ0EsUUFBUSxRQUFRLElBQUk7RUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RDtFQUNBLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtFQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0VBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RDtFQUNBLFlBQVksTUFBTTtFQUNsQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztFQUNqRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0VBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7RUFDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7RUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDckMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7RUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxVQUFVLEdBQUc7RUFDbEM7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3JEO0VBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN4RCxhQUFhO0VBQ2I7RUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7RUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0VBQ3hCO0VBQ0EsU0FBUztFQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztFQUNsRCxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMzQyxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMzQyxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEMsUUFBUSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbEc7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5RDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7RUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQ2hDLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztFQUNqSixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3pEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNqT08sTUFBTSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ2pDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNuQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7RUFDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7RUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztFQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM1QztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7RUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtFQUN2TTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNB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LENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkMsT0FBTztBQUNQO0VBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3BEO0VBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDakM7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxH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QUFDLEtBQUssQ0FBQztBQUMxQztFQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7RUFDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztFQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUM7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0VBQ0E7RUFDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtFQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7RUFDQTtBQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7RUFDNUQ7RUFDQTtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtFQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0VBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0VBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtFQUNwQztFQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztFQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0VBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtFQUNBLEVBQUU7QUFDRjtBQUNBO0VBQ0E7O0VDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQztBQUMvQjtFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENB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QUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0VBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0VBQ25DO0VBQ0EsS0FBSztFQUNMO0VBQ0E7O0VDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7RUFDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0VBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxRDtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FB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QUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtFQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcs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QUMsR0FBRyxDQUFDLE9BQU07RUFDL0IsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2xCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRTtFQUN6QyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFFO0VBQy9CLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNwQztFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtFQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7RUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNB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RUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzNCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksRUFB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QyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7RUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7RUFDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7RUFDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDM0QsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0VBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtFQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0VBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM3QjtBQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztFQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7RUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7RUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsU0FBUyxNQUFNO0VBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRjtFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FB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QUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7RUFDekQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDakYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVB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QUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztFQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDL0IsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztFQUM5QjtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDckQ7RUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJ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Q0FBQyxHQUFHO0FBQzlCO0VBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7RUFDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztFQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3pEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztFQUNyQztBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0VBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7RUFDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtFQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcscUNBQXFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNERBQTRELENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNyVSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsZ0RBQWdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNySztFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0VBQ2xJLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFlBQVks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QUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3RDLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0VBQzNCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDM0IsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0VBQzdDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUM3QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUk7RUFDakQsWUFBWSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztFQUN0QyxTQUFTO0FBQ1Q7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7RUFDL0MsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksZ0JBQWU7RUFDckQsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQUs7RUFDbkMsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksTUFBSztFQUN6QyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxLQUFJO0VBQzVDLFFBQVEsSUFBSSxD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Q0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEM7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksWUFBWSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7RUFDNUIsUUFBUSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDeEU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7RUFDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxPQUFPO0FBQ3JDO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENB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LENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtFQUN0RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQ3BDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzdCO0VBQ0EsU0FBUztBQUNUO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDckMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztBQUMxUDtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pKO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDcEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQzFCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztFQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQ3hCO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7RUFDckQsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRTtBQUNyQztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDMUIsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7RUFDOUIsWUFBWSxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7RUFDN0IsYUFBYSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7RUFDaEMsYUFBYSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFFO0VBQ2hKLGFBQWEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUU7RUFDeEQsYUFBYTtFQUNiLFlBQVksT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtFQUN0QyxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sS0FBSztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0VBQ0EsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDdEI7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztFQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFFO0FBQzlDO0VBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0VBQ3RDLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxLQUFLO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLE1BQUs7RUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFDO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRTtBQUNyQztFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUU7RUFDdkMsYUFBWTtFQUNaLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUM5QyxjQUFjLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUM7RUFDdEUsU0FBUztBQUNUO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3pCO0VBQ0EsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDbEM7RUFDQSxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFFO0FBQ3JGO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUM7QUFDaEU7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUM7RUFDN0QsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFDO0FBQ2pGO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxRQUFRLEdBQUU7QUFDL0I7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQU87RUFDdkMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFPO0FBQ3ZDO0VBQ0EsZ0JBQWdCLEdBQUcsR0FBRyxLQUFJO0VBQzFCLGNBQWM7QUFDZDtFQUNBLFNBQVMsTUFBTTtBQUNmO0VBQ0EsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBQztFQUN6RCxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFDO0VBQ2pFLFNBQVMsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzlDO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEdBQUc7QUFDbEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxNQUFLO0VBQ3ZCLFFBQVEsT0FBTyxHQUFHO0FBQ2xCO0VBQ0EsS0FBSztBQUNMO0FBQ0E7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0VBQzNCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0VBQ3ZELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0VBQ3ZELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0VBQ3ZELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0VBQ3ZELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQztFQUNoRCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFNO0VBQ2pDLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEdBQUcsSUFBRztBQUNwRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU07QUFDakM7RUFDQSxRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDbEIsYUFBYSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0VBQzNFLGFBQWEsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0VBQ3hELFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Y7RUFDQSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQUs7QUFDM0I7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSTtBQUMxQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRTtBQUN0QztFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0VBQy9CLGdCQUFnQixJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFFO0VBQ2hFLGFBQWEsTUFBTTtFQUNuQixnQkFBZ0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBQztFQUNyRCxhQUFhO0FBQ2I7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFFO0VBQzlELFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzNCO0VBQ0EsS0FBSztBQUNMO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztFQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUM7RUFDdkUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFLO0VBQ3RDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUk7RUFDaEQsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSTtFQUNsRCxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFJO0VBQzNDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUM7RUFDM0M7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztFQUN0QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTTtFQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFFO0VBQzVDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUk7RUFDekMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSTtBQUN6QztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFFO0VBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUc7QUFDeEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsS0FBSTtBQUN0QztFQUNBLFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQztFQUNsQixTQUFTLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDbEQsZ0JBQWdCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDdEUsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxHQUFFO0VBQ2hELGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7RUFDbEMsYUFBYSxNQUFNO0VBQ25CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7RUFDM0QsYUFBYTtBQUNiO0VBQ0EsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztFQUMzQyxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTTtFQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFFO0FBQy9DO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7RUFDckIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUU7RUFDL0IsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7RUFDbEMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFHO0VBQ3ZDLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7RUFDdEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztBQUN4QjtFQUNBLFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQztFQUNsQjtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUU7RUFDbEUsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7RUFDNUQsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDbkQsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDcEQsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDelRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztFQUNqQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0VBQ3RCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztFQUNsRCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7RUFDOUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNsRDtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0VBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN0QztFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDNUI7RUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDekI7RUFDQTtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHO0VBQ3hCLE1BQU0sS0FBSztFQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTO0VBQ3hCLFFBQVEsa0RBQWtEO0VBQzFELFFBQVEsRUFBRSxDQUFDLElBQUk7RUFDZixRQUFRLEdBQUc7RUFDWCxLQUFLLENBQUM7RUFDTjtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRztFQUN4QixNQUFNLEtBQUs7RUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGlCQUFpQixHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSztFQUN6RCxLQUFLLENBQUM7QUFDTjtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRztFQUN4QixNQUFNLEtBQUs7RUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztFQUNwQixRQUFRLGFBQWE7RUFDckIsUUFBUSxFQUFFLENBQUMsSUFBSTtFQUNmLFFBQVEsb0JBQW9CO0VBQzVCLFNBQVMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsUUFBUSxLQUFLO0VBQ2IsS0FBSyxDQUFDO0VBQ04sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHO0VBQ3hCLE1BQU0sS0FBSztFQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO0VBQ3BCLFFBQVEsNEJBQTRCO0VBQ3BDLFNBQVMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDckIsUUFBUSxpQkFBaUI7RUFDekIsUUFBUSxFQUFFLENBQUMsSUFBSTtFQUNmLFFBQVEsR0FBRztFQUNYLEtBQUssQ0FBQztBQUNOO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDM0I7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMvQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDcEQ7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7RUFDMUIsTUFBTSxJQUFJLEVBQUUsR0FBRyxDQUFDO0VBQ2hCLFFBQVEsRUFBRSxHQUFHLENBQUM7RUFDZCxRQUFRLEVBQUUsR0FBRyxDQUFDO0VBQ2QsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQ3ZCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoQjtFQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtFQUM1QixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztFQUNoQyxPQUFPO0FBQ1A7RUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUM3RDtFQUNBLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDL0MsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUN6QyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0VBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxL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QUMsTUFBTSxFQUFFLENBQUM7RUFDcEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDckIsTUFBTSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVFO0VBQ0E7RUFDQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0E7RUFDQSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RDtFQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNoRCxNQUFNLElBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDM0Q7RUFDQSxNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRDtFQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEM7RUFDQSxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ2hCLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtFQUNwRCxRQUFRLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDOUMsUUFBUSxJQUFJLENBQUMs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USxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDbEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUN4RCxRQUFRLE1BQU07RUFDZCxNQUFNLEtBQUssQ0FBQztFQUNaO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDdEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztFQUM1RCxRQUFRLE1BQU07RUFDZCxLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO0VBQ2IsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFEO0VBQ0EsSUFBSSxJQUFJLE9BQU87RUFDZixNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7RUFDM0M7QUFDQTtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0VBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDeEIsR0FBRztBQUNIO0VBQ0EsRUFBRSxLQUFLLEdBQUc7RUFDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7RUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDcEM7RUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNsQixHQUFHO0VBQ0g7O0VDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FB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Q0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0VBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQztFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0VBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7RUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7RUFDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0VBQy9CO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztFQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztFQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7RUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdkM7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7QUFDM0M7RUFDQSxRQUFR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SSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7RUFDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUMzQixLQUFLO0FBQ0w7RUFDQTs7RUMxRE8sTUFBTSxNQUFNLFNBQVMsS0FB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QUFJLElBQUksQ0FBQztFQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7RUFDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDL0xBO0FBRUE7RUFDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtFQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNuQjtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztFQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM5QjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFD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Q0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztFQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtFQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ25DO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENB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LENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDM0QsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDMVRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7RUFDL0IsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFFO0FBQ3hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0VBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7RUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzlGO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0VBQ0E7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7RUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0VBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtFQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0VBQ0EsS0FBSztFQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7RUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0I7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFL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QSxRQUFRLFFBQVEsSUFBSTtFQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtFQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0VBQzNELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0VBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0VBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0VBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQzlEO0VBQ0EsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7RUFDaEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7RUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7RUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7RUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7RUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUU7RUFDcEU7RUFDQSxZQUFZLE1BQU07RUFDbEIsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztFQUMxQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0VBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7RUFDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMs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QUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZjtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxH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Q2xDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkQ7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFO0VBQ1gsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUI7RUFDQSxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQztFQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztFQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7RUFDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7RUFDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNoRCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzdDLElBQUks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QUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNsRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDbkQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekQ7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVTtFQUMzQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztFQUMxRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3ZDLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxHQUFHO0VBQ1gsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUM1QixHQUFHO0FBQ0g7RUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDZCxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNsRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVE7RUFDckIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM1RSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzdDLEdBQUc7QUFDSDtFQUNBLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRTtFQUNsQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0VBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNoQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUMxQixLQUFLO0VBQ0wsR0FBRztFQUNIOzs7Ozs7Ozs7Ozs7OzsifQ== +/** + * @license + * Copyright 2010-2021 Uil.js Authors + * SPDX-License-Identifier: MIT + */ +!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?s(exports):"function"==typeof define&&define.amd?define(["exports"],s):s((t="undefined"!=typeof globalThis?globalThis:t||self).UIL={})}(this,(function(t){"use strict";const s={ui:[],dom:null,ID:null,lock:!1,wlock:!1,current:-1,needReZone:!0,needResize:!1,forceZone:!1,isEventsInit:!1,isLeave:!1,addDOMEventListeners:!0,downTime:0,prevTime:0,prevDefault:["contextmenu"],pointerEvent:["pointerdown","pointermove","pointerup"],eventOut:["pointercancel","pointerout","pointerleave"],xmlserializer:null,tmpTime:null,tmpImage:null,oldCursor:"auto",input:null,parent:null,firstImput:!0,hiddenImput:null,hiddenSizer:null,hasFocus:!1,startInput:!1,inputRange:[0,0],cursorId:0,str:"",pos:0,startX:-1,moveX:-1,debugInput:!1,isLoop:!1,listens:[],e:{type:null,clientX:0,clientY:0,keyCode:NaN,key:null,delta:0},isMobile:!1,now:null,needsUpdate:!1,getTime:function(){return self.performance&&self.performance.now?self.performance.now.bind(performance):Date.now},add:function(t){s.ui.push(t),s.getZone(t),s.isEventsInit||s.initEvents()},testMobile:function(){let t=navigator.userAgent;return!!(t.match(/Android/i)||t.match(/webOS/i)||t.match(/iPhone/i)||t.match(/iPad/i)||t.match(/iPod/i)||t.match(/BlackBerry/i)||t.match(/Windows Phone/i))},remove:function(t){let i=s.ui.indexOf(t);-1!==i&&(s.removeListen(t),s.ui.splice(i,1)),0===s.ui.length&&s.removeEvents()},initEvents:function(){if(s.isEventsInit)return;let t=document.body;s.isMobile=s.testMobile(),s.now=s.getTime(),s.isMobile?t.style.touchAction="none":t.addEventListener("wheel",s,{passive:!1}),console.log("R.addDOMEventListeners "+s.addDOMEventListeners),s.addDOMEventListeners&&(t.addEventListener("pointercancel",s),t.addEventListener("pointerleave",s),t.addEventListener("pointermove",s),t.addEventListener("pointerdown",s),t.addEventListener("pointerup",s),t.addEventListener("keydown",s,!1),t.addEventListener("keyup",s,!1)),window.addEventListener("resize",s.resize,!1),s.isEventsInit=!0,s.dom=t},removeEvents:function(){if(!s.isEventsInit)return;let t=document.body;s.isMobile||t.removeEventListener("wheel",s),s.addDOMEventListeners&&(t.removeEventListener("pointercancel",s),t.removeEventListener("pointerleave",s),t.removeEventListener("pointermove",s),t.removeEventListener("pointerdown",s),t.removeEventListener("pointerup",s),t.removeEventListener("keydown",s),t.removeEventListener("keyup",s)),window.removeEventListener("resize",s.resize),s.isEventsInit=!1},resize:function(){let t,i=s.ui.length;for(;i--;)t=s.ui[i],t.isGui&&!t.isCanvasOnly&&t.autoResize&&t.calc();s.needReZone=!0,s.needResize=!1},out:function(){console.log("im am out"),s.clearOldID()},in:function(){console.log("im am in")},fakeUp:function(){this.handleEvent({type:"pointerup"})},handleEvent:function(t){-1!==s.prevDefault.indexOf(t.type)&&t.preventDefault(),s.needResize&&s.resize(),s.findZone(s.forceZone);let i=s.e,e=!1;"keydown"===t.type&&s.keydown(t),"keyup"===t.type&&s.keyup(t),"wheel"===t.type?i.delta=t.deltaY>0?1:-1:i.delta=0;let h=t.pointerType;if(i.clientX=("touch"===h?t.pageX:t.clientX)||0,i.clientY=("touch"===h?t.pageY:t.clientY)||0,i.type=t.type,-1!==s.eventOut.indexOf(t.type)&&(e=!0,i.type="mouseup"),"pointerleave"===t.type&&(s.isLeave=!0),"pointerdown"===t.type&&(i.type="mousedown"),"pointerup"===t.type&&(i.type="mouseup"),"pointermove"===t.type&&(s.isLeave&&(s.isLeave=!1,s.resize()),i.type="mousemove"),"mousedown"===i.type){if(s.downTime=s.now(),s.downTime-s.prevTime<200)return s.selectAll(),!1;s.prevTime=s.downTime,s.forceZone=!1}"mousedown"===i.type&&s.clearInput(),"mousedown"===i.type&&(s.lock=!0),"mouseup"===i.type&&(s.lock=!1),s.isMobile&&"mousedown"===i.type&&s.findID(i),"mousemove"!==i.type||s.lock||s.findID(i),null!==s.ID&&(s.ID.isCanvasOnly&&(i.clientX=s.ID.mouse.x,i.clientY=s.ID.mouse.y),s.ID.handleEvent(i)),s.isMobile&&"mouseup"===i.type&&s.clearOldID(),e&&s.clearOldID()},findID:function(t){let i,e,h,o=s.ui.length,n=-1;for(;o--;)if(i=s.ui[o],i.isCanvasOnly?(e=i.mouse.x,h=i.mouse.y):(e=t.clientX,h=t.clientY),s.onZone(i,e,h)){n=o,n!==s.current&&(s.clearOldID(),s.current=n,s.ID=i);break}-1===n&&s.clearOldID()},clearOldID:function(){s.ID&&(s.current=-1,s.ID.reset(),s.ID=null,s.cursor())},calcUis:(t,i,e,h=!1)=>{let o,n,r,l=t.length,a=0,c=0,d=0;for(;l--;)o=t[c],c++,!h&&o.isGroup&&o.calcUis(),r=o.margin,o.zone.w=o.w,o.zone.h=o.h+r,o.autoWidth?(a=0,o.zone.x=i.x+o.dx,o.zone.y=e,e+=o.h+r,d+=o.h+r):(0===a&&(d+=o.h+r),o.zone.x=i.x+a,o.zone.y=e,n=s.getWidth(o),n?o.zone.w=o.w=n:o.fw&&(o.zone.w=o.w=o.fw),a+=o.zone.w,a>=i.w&&(e+=o.h+r,a=0));return d},findTarget:function(t,i){let e=t.length;for(;e--;)if(s.onZone(t[e],i.clientX,i.clientY))return e;return-1},findZone:function(t){if(s.needReZone||t){for(var i,e=s.ui.length;e--;)i=s.ui[e],s.getZone(i),i.isGui&&i.calcUis();s.needReZone=!1}},onZone:function(t,s,i){if(void 0===s||void 0===i)return!1;let e=t.zone,h=s-e.x,o=i-e.y,n=h>=0&&o>=0&&h<=e.w&&o<=e.h;return n?t.local.set(h,o):t.local.neg(),n},getWidth:function(t){return t.getDom().clientWidth},getZone:function(t){if(t.isCanvasOnly)return;let s=t.getDom().getBoundingClientRect();t.zone={x:s.left,y:s.top,w:s.width,h:s.height}},cursor:function(t){(t=t||"auto")!==s.oldCursor&&(document.body.style.cursor=t,s.oldCursor=t)},toCanvas:function(t,i,e,h){if(s.xmlserializer||(s.xmlserializer=new XMLSerializer),h&&null!==s.tmpTime&&(clearTimeout(s.tmpTime),s.tmpTime=null),null!==s.tmpTime)return;s.lock&&(s.tmpTime=setTimeout((function(){s.tmpTime=null}),10));let o=!1;i===t.canvas.width&&e===t.canvas.height||(o=!0),null===s.tmpImage&&(s.tmpImage=new Image);let n=s.tmpImage,r=s.xmlserializer.serializeToString(t.content),l=''+r+"";n.onload=function(){let s=t.canvas.getContext("2d");o?(t.canvas.width=i,t.canvas.height=e):s.clearRect(0,0,i,e),s.drawImage(this,0,0),t.onDraw()},n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(l),n.crossOrigin="",s.needsUpdate=!1},setHidden:function(){null===s.hiddenImput&&(s.hiddenImput=document.createElement("input"),s.hiddenImput.type="text",s.hiddenSizer=document.createElement("div"),document.body.appendChild(s.hiddenImput),document.body.appendChild(s.hiddenSizer));let t=s.debugInput?"":"opacity:0; zIndex:0;",i=s.parent.css.txtselect+"padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;"+t;s.hiddenImput.style.cssText=i+"bottom:10px;"+(s.debugInput?"":"transform:scale(0);"),s.hiddenSizer.style.cssText=i+"bottom:40px;",s.hiddenImput.style.width=s.input.clientWidth+"px",s.hiddenImput.value=s.str,s.hiddenSizer.innerHTML=s.str,s.hasFocus=!0},clearHidden:function(t){null!==s.hiddenImput&&(s.hasFocus=!1)},clickPos:function(t){let i=s.str.length,e=0,h=0;for(;i--&&(e+=s.textWidth(s.str[h]),!(e>=t));)h++;return h},upInput:function(t,i){if(null===s.parent)return!1;let e=!1;if(i){let i=s.clickPos(t);if(s.moveX=i,-1===s.startX)s.startX=i,s.cursorId=i,s.inputRange=[s.startX,s.startX];else{s.moveX!==s.startX&&(s.startX>s.moveX?s.inputRange=[s.moveX,s.startX]:s.inputRange=[s.startX,s.moveX])}e=!0}else-1!==s.startX&&(s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.startX=-1,e=!0);return e&&s.selectParent(),e},selectAll:function(){s.parent&&(s.str=s.input.textContent,s.inputRange=[0,s.str.length],s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.cursorId=s.inputRange[1],s.selectParent())},selectParent:function(){var t=s.textWidth(s.str.substring(0,s.cursorId)),i=s.textWidth(s.str.substring(0,s.inputRange[0])),e=s.textWidth(s.str.substring(s.inputRange[0],s.inputRange[1]));s.parent.select(t,i,e,s.hiddenSizer.innerHTML)},textWidth:function(t){return null===s.hiddenSizer?0:(t=t.replace(/ /g," "),s.hiddenSizer.innerHTML=t,s.hiddenSizer.clientWidth)},clearInput:function(){null!==s.parent&&(s.firstImput||s.parent.validate(!0),s.clearHidden(),s.parent.unselect(),s.input.style.background=s.parent.colors.back,s.input.style.borderColor=s.parent.colors.border,s.parent.isEdit=!1,s.input=null,s.parent=null,s.str="",s.firstImput=!0)},setInput:function(t,i){s.clearInput(),s.input=t,s.parent=i,s.input.style.background=s.parent.colors.backoff,s.input.style.borderColor=s.parent.colors.select,s.str=s.input.textContent,s.setHidden()},keydown:function(t){if(null===s.parent)return;let i=t.which;t.shiftKey,s.firstImput=!1,s.hasFocus&&(window.focus(),s.hiddenImput.focus()),s.parent.isEdit=!0,13===i?s.clearInput():s.input.isNum?t.keyCode>47&&t.keyCode<58||t.keyCode>95&&t.keyCode<106||190===t.keyCode||110===t.keyCode||8===t.keyCode||109===t.keyCode?s.hiddenImput.readOnly=!1:s.hiddenImput.readOnly=!0:s.hiddenImput.readOnly=!1},keyup:function(t){null!==s.parent&&(s.str=s.hiddenImput.value,s.parent.allEqual?s.parent.sameStr(s.str):s.input.textContent=s.str,s.cursorId=s.hiddenImput.selectionStart,s.inputRange=[s.hiddenImput.selectionStart,s.hiddenImput.selectionEnd],s.selectParent(),s.parent.validate())},loop:function(){s.isLoop&&requestAnimationFrame(s.loop),s.needsUpdate=s.update(),s.ui[0]&&s.needsUpdate&&s.ui[0].draw()},update:function(){let t=s.listens.length,i=!1;for(;t--;){s.listens[t].listening()&&(i=!0)}return i},removeListen:function(t){let i=s.listens.indexOf(t);-1!==i&&s.listens.splice(i,1),0===s.listens.length&&(s.isLoop=!1)},addListen:function(t){return-1===s.listens.indexOf(t)&&(s.listens.push(t),s.isLoop||(s.isLoop=!0,s.loop()),!0)}},i=s,e={transition:.2,frag:document.createDocumentFragment(),colorRing:null,joystick_0:null,joystick_1:null,circular:null,knob:null,pad2d:null,svgns:"http://www.w3.org/2000/svg",links:"http://www.w3.org/1999/xlink",htmls:"http://www.w3.org/1999/xhtml",DOM_SIZE:["height","width","top","left","bottom","right","margin-left","margin-right","margin-top","margin-bottom"],SVG_TYPE_D:["pattern","defs","transform","stop","animate","radialGradient","linearGradient","animateMotion","use","filter","feColorMatrix"],SVG_TYPE_G:["svg","rect","circle","path","polygon","text","g","line","foreignObject"],PI:Math.PI,TwoPI:2*Math.PI,pi90:.5*Math.PI,pi60:Math.PI/3,torad:Math.PI/180,todeg:180/Math.PI,clamp:(t,s,i)=>t=(t=ti?i:t,isDivid:t=>.5*t===Math.floor(.5*t),size:{w:240,h:20,p:30,s:8},defineColor:(t,s=e.colors)=>{let i={...s},h=["fontFamily","fontWeight","fontShadow","fontSize"],o=!1;t.font&&(t.fontFamily=t.font),t.shadow&&(t.fontShadow=t.shadow),t.weight&&(t.fontWeight=t.weight),t.fontColor&&(t.text=t.fontColor),t.color&&(t.text=t.color),t.text&&(i.text=t.text,t.fontColor||t.color||(i.title=e.ColorLuma(t.text,-.25),i.titleoff=e.ColorLuma(t.text,-.5)),i.textOver=e.ColorLuma(t.text,.25),i.textSelect=e.ColorLuma(t.text,.5)),t.button&&(i.button=t.button,i.border=e.ColorLuma(t.button,.1),i.overoff=e.ColorLuma(t.button,.2)),t.select&&(i.select=t.select,i.over=e.ColorLuma(t.select,-.1)),t.itemBg&&(t.back=t.itemBg),t.back&&(i.back=t.back,i.backoff=e.ColorLuma(t.back,-.1)),t.fontSelect&&(i.textSelect=t.fontSelect),t.groupBorder&&(i.gborder=t.groupBorder),t.bgOver&&(i.backgroundOver=t.bgOver);for(let s in i)void 0!==t[s]&&(i[s]=t[s]);for(let s in t)-1!==h.indexOf(s)&&(o=!0);return o&&e.defineText(i),i},colors:{sx:4,sy:2,radius:2,showOver:1,content:"none",background:"rgba(50,50,50,0.15)",backgroundOver:"rgba(50,50,50,0.3)",title:"#CCC",titleoff:"#BBB",text:"#DDD",textOver:"#EEE",textSelect:"#FFF",back:"rgba(0,0,0,0.2)",backoff:"rgba(0,0,0,0.3)",border:"#4c4c4c",borderSize:1,gborder:"none",groups:"none",button:"#3c3c3c",overoff:"#5c5c5c",over:"#024699",select:"#308AFF",action:"#FF3300",fontFamily:"Consolas, monospace",fontWeight:"normal",fontShadow:"none",fontSize:12,joyOver:"rgba(48,138,255,0.25)",joyOut:"rgba(100,100,100,0.5)",joySelect:"#308AFF",hide:"rgba(0,0,0,0)"},css:{basic:"position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; -o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;",button:"display:flex; align-items:center; justify-content:center; text-align:center;",middle:"display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;"},svgs:{g1:"M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z",g2:"M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z",group:"M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z",arrow:"M 3 8 L 8 5 3 2 3 8 Z",arrowDown:"M 5 8 L 8 3 2 3 5 8 Z",arrowUp:"M 5 2 L 2 7 8 7 5 2 Z",solid:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z",body:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z",vehicle:"M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z",articulation:"M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z",character:"M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z",terrain:"M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z",joint:"M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z",ray:"M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z",collision:"M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z",map:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",material:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",texture:"M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z",object:"M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z",none:"M 9 5 L 5 5 5 9 9 9 9 5 Z",cursor:"M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z",load:"M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z",save:"M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z",extern:"M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z"},rezone(){i.needReZone=!0},getImput:function(){return!!i.input},setStyle:function(t){for(var s in t)e.colors[s]&&(e.colors[s]=t[s]);e.setText()},defineText:function(t){e.setText(t.fontSize,t.text,t.fontFamily,t.fontShadow,t.fontWeight)},setText:function(t,s,i,h,o){let n=e.colors;void 0===i&&(i=n.fontFamily),void 0===t&&(t=n.fontSize),void 0===h&&(h=n.fontShadow),void 0===o&&(o=n.fontWeight),void 0===s&&(s=n.text),isNaN(t)?-1===t.search("em")&&(t+="px"):t+="px",e.css.txt=e.css.basic+e.css.middle+" font-family:"+i+"; font-weight:"+o+"; font-size:"+t+"; color:"+n.text+"; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;","none"!==h&&(e.css.txt+=" text-shadow: 1px 1px 1px "+h+";"),e.css.txtselect=e.css.txt+"padding:0px 4px; border:1px dashed "+n.border+";",e.css.item=e.css.txt+"padding:0px 4px; position:relative; margin-bottom:1px; "},cloneCss:function(){return{...e.css}},clone:function(t){return t.cloneNode(!0)},setSvg:function(t,s,i,e,h){-1===e?t.setAttributeNS(null,s,i):void 0!==h?t.childNodes[e||0].childNodes[h||0].setAttributeNS(null,s,i):t.childNodes[e||0].setAttributeNS(null,s,i)},setCss:function(t,s){for(let i in s)-1!==e.DOM_SIZE.indexOf(i)?t.style[i]=s[i]+"px":t.style[i]=s[i]},set:function(t,s){for(let i in s)"txt"===i&&(t.textContent=s[i]),"link"===i?t.setAttributeNS(e.links,"xlink:href",s[i]):t.setAttributeNS(null,i,s[i])},get:function(t,s){if(void 0===s)return t;if(!isNaN(s))return t.childNodes[s];if(s instanceof Array){if(2===s.length)return t.childNodes[s[0]].childNodes[s[1]];if(3===s.length)return t.childNodes[s[0]].childNodes[s[1]].childNodes[s[2]]}},dom:function(t,s,i,h,o){return t=t||"div",-1!==e.SVG_TYPE_D.indexOf(t)||-1!==e.SVG_TYPE_G.indexOf(t)?"svg"===t?(h=document.createElementNS(e.svgns,"svg"),e.set(h,i)):(void 0===h&&(h=document.createElementNS(e.svgns,"svg")),e.addAttributes(h,t,i,o)):h=void 0===h?document.createElementNS(e.htmls,t):h.appendChild(document.createElementNS(e.htmls,t)),s&&(h.style.cssText=s),void 0===o?h:h.childNodes[o||0]},addAttributes:function(t,s,i,h){let o=document.createElementNS(e.svgns,s);return e.set(o,i),e.get(t,h).appendChild(o),-1!==e.SVG_TYPE_G.indexOf(s)&&(o.style.pointerEvents="none"),o},clear:function(t){for(e.purge(t);t.firstChild;)t.firstChild.firstChild&&e.clear(t.firstChild),t.removeChild(t.firstChild)},purge:function(t){let s,i,h=t.attributes;if(h)for(s=h.length;s--;)i=h[s].name,"function"==typeof t[i]&&(t[i]=null);if(h=t.childNodes,h)for(s=h.length;s--;)e.purge(t.childNodes[s])},addSVGGlowEffect:function(){if(null!==document.getElementById("UILGlow"))return;let t=e.initUILEffects(),s=e.addAttributes(t,"filter",{id:"UILGlow",x:"-20%",y:"-20%",width:"140%",height:"140%"});e.addAttributes(s,"feGaussianBlur",{in:"SourceGraphic",stdDeviation:"3",result:"uilBlur"});let i=e.addAttributes(s,"feMerge",{});for(let t=0;t<=3;t++)e.addAttributes(i,"feMergeNode",{in:"uilBlur"});e.addAttributes(i,"feMergeNode",{in:"SourceGraphic"})},initUILEffects:function(){let t=document.getElementById("UILSVGEffects");return null===t&&(t=e.dom("svg",void 0,{id:"UILSVGEffects",width:"0",height:"0"}),document.body.appendChild(t)),t},ColorLuma:function(t,s){"n"===t&&(t="#000"),(t=String(t).replace(/[^0-9a-f]/gi,"")).length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),s=s||0;let i,e,h="#";for(e=0;e<3;e++)i=parseInt(t.substr(2*e,2),16),i=Math.round(Math.min(Math.max(0,i+i*s),255)).toString(16),h+=("00"+i).substr(i.length);return h},findDeepInver:function(t){return.3*t[0]+.59*t[1]+.11*t[2]<=.6},lerpColor:function(t,s,i){let e={};for(let h=0;h<3;h++)e[h]=t[h]+(s[h]-t[h])*i;return e},hexToHtml:function(t){return"#"+("000000"+(t=void 0===t?0:t).toString(16)).substr(-6)},htmlToHex:function(t){return t.toUpperCase().replace("#","0x")},u255:function(t,s){return parseInt(t.substring(s,s+2),16)/255},u16:function(t,s){return parseInt(t.substring(s,s+1),16)/15},unpack:function(t){return 7==t.length?[e.u255(t,1),e.u255(t,3),e.u255(t,5)]:4==t.length?[e.u16(t,1),e.u16(t,2),e.u16(t,3)]:void 0},p255:function(t){let s=Math.round(255*t).toString(16);return s.length<2&&(s="0"+s),s},pack:function(t){return"#"+e.p255(t[0])+e.p255(t[1])+e.p255(t[2])},htmlRgb:function(t){return"rgb("+Math.round(255*t[0])+","+Math.round(255*t[1])+","+Math.round(255*t[2])+")"},pad:function(t){return 1==t.length&&(t="0"+t),t},rgbToHex:function(t){let s=Math.round(255*t[0]).toString(16),i=Math.round(255*t[1]).toString(16),h=Math.round(255*t[2]).toString(16);return"#"+e.pad(s)+e.pad(i)+e.pad(h)},hueToRgb:function(t,s,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(s-t)*i:i<.5?s:i<2/3?t+6*(s-t)*(2/3-i):t},rgbToHsl:function(t){let s=t[0],i=t[1],e=t[2],h=Math.min(s,i,e),o=Math.max(s,i,e),n=o-h,r=0,l=0,a=(h+o)/2;return a>0&&a<1&&(l=n/(a<.5?2*a:2-2*a)),n>0&&(o==s&&o!=i&&(r+=(i-e)/n),o==i&&o!=e&&(r+=2+(e-s)/n),o==e&&o!=s&&(r+=4+(s-i)/n),r/=6),[r,l,a]},hslToRgb:function(t){let s,i,h=t[0],o=t[1],n=t[2];return 0===o?[n,n,n]:(i=n<=.5?n*(o+1):n+o-n*o,s=2*n-i,[e.hueToRgb(s,i,h+.33333),e.hueToRgb(s,i,h),e.hueToRgb(s,i,h-.33333)])},makeGradiant:function(t,s,i,h){e.dom(t,null,s,i,0);let o,n=i.childNodes[0].childNodes.length-1;for(let t=0;t0){for(a=6;a--;)r[a]=(113*r[a]+u).toFixed(2);c=" M"+r[0]+" "+r[1]+" Q"+r[2]+" "+r[3]+" "+r[4]+" "+r[5],d=[[0,g[0],1],[100,g[1],1]],e.makeGradiant("linearGradient",{id:"G"+l,x1:r[0],y1:r[1],x2:r[4],y2:r[5],gradientUnits:"userSpaceOnUse"},s,d),e.dom("path","",{d:c,"stroke-width":30,stroke:"url(#G"+l+")","stroke-linecap":"butt"},s,1)}m=n-p,g[0]=g[1]}d=[[0,"#FFFFFF",1],[50,"#FFFFFF",0],[50,"#000000",0],[100,"#000000",1]],e.makeGradiant("linearGradient",{id:"GL0",x1:0,y1:u-84.9,x2:0,y2:212.9,gradientUnits:"userSpaceOnUse"},s,d),d=[[0,"#7f7f7f",1],[50,"#7f7f7f",.5],[100,"#7f7f7f",0]],e.makeGradiant("linearGradient",{id:"GL1",x1:78.95,y1:0,x2:226,y2:0,gradientUnits:"userSpaceOnUse"},s,d),e.dom("g",null,{"transform-origin":"128px 128px",transform:"rotate(0)"},s),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"red"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL1)","stroke-width":1,stroke:"url(#GL1)"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL0)","stroke-width":1,stroke:"url(#GL0)"},s,2),e.dom("path","",{d:"M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z",fill:"none","stroke-width":2,stroke:"#000"},s,2),e.dom("circle","",{cx:128,cy:128,r:6,"stroke-width":2,stroke:"#000",fill:"none"},s),e.colorRing=s},icon:function(t,s,i){i=i||40;let h=[""];switch(t){case"logo":h[1]="";break;case"donate":h[1]="";break;case"neo":h[1]="";break;case"phy":h[1]="";break;case"config":h[1]="";break;case"github":h[1]="";break;case"save":h[1]=""}return h[2]="",h.join("\n")},logoFill_d:"\n\t\tM 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 \n\t\tL 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 \n\t\tM 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 \n\t\tQ 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z\n\t\t",logo_github:"\n\t\tM 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 \n\t\t159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 \n\t\t216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 \n\t\t166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 \n\t\t82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z\n\t\t",logo_neo:"\n\t\tM 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 \n\t\t60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 \n\t\t186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 \n\t\t67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L \n\t\t134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z\n\t\t",logo_phy:"\n\t\tM 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 \n\t\tQ 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95\n\t\t",logo_config:"\n\t\tM 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 \n\t\tL 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 \n\t\tQ 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75\n\t\t",logo_donate:"\n\t\tM 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 \n\t\t106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 \n\t\t112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 \n\t\t154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 \n\t\t194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 \n\t\tQ 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 \n\t\t83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 \n\t\t94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 \n\t\t149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M \n\t\t66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 \n\t\t72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 \n\t\t54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 \n\t\t197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 \n\t\t200.9 187.5 200.9 187.5 195.35 Z\n\t\t"};e.setText();const h=e;class o{static autoTypes(t){let s=[];switch(t){case"svg":s=[{accept:{"image/svg+xml":".svg"}}];break;case"wav":s=[{accept:{"audio/wav":".wav"}}];break;case"mp3":s=[{accept:{"audio/mpeg":".mp3"}}];break;case"mp4":s=[{accept:{"video/mp4":".mp4"}}];break;case"bin":case"hex":s=[{description:"Binary Files",accept:{"application/octet-stream":[".bin",".hex"]}}];break;case"text":s=[{description:"Text Files",accept:{"text/plain":[".txt",".text"],"text/html":[".html",".htm"]}}];break;case"json":s=[{description:"JSON Files",accept:{"application/json":[".json"]}}];break;case"js":s=[{description:"JavaScript Files",accept:{"text/javascript":[".js"]}}];break;case"image":s=[{description:"Images",accept:{"image/*":[".png",".gif",".jpeg",".jpg"]}}];break;case"icon":s=[{description:"Icons",accept:{"image/x-ico":[".ico"]}}];break;case"lut":s=[{description:"Lut",accept:{"text/plain":[".cube",".3dl"]}}]}return s}static async load(t={}){"function"!=typeof window.showOpenFilePicker&&(window.showOpenFilePicker=o.showOpenFilePickerPolyfill);try{let s=t.type||"";const i={excludeAcceptAllOption:!!s,multiple:!1};i.types=o.autoTypes(s);const e=await window.showOpenFilePicker(i),h=await e[0].getFile();if(!h)return null;let n=h.name,r=n.substring(n.lastIndexOf(".")+1,n.length);const l=["png","jpg","jpeg","mp4","webm","ogg","mp3"],a=["sea","z","hex","bvh","BVH","glb","gltf"],c=new FileReader;-1!==l.indexOf(r)?c.readAsDataURL(h):-1!==a.indexOf(r)?c.readAsArrayBuffer(h):c.readAsText(h),c.onload=function(i){let e=i.target.result;switch(s){case"image":let s=new Image;s.onload=function(){t.callback&&t.callback(s,n,r)},s.src=e;break;case"json":t.callback&&t.callback(JSON.parse(e),n,r);break;default:t.callback&&t.callback(e,n,r)}}}catch(s){console.log(s),t.always&&t.callback&&t.callback(null)}}static showOpenFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("input");i.type="file",i.multiple=t.multiple,i.accept=t.types.map((t=>t.accept)).flatMap((t=>Object.keys(t).flatMap((s=>t[s])))).join(","),i.addEventListener("change",(()=>{s([...i.files].map((t=>({getFile:async()=>new Promise((s=>{s(t)}))}))))})),i.click()}))}static async save(t={}){let s=!1;"function"!=typeof window.showSaveFilePicker&&(window.showSaveFilePicker=o.showSaveFilePickerPolyfill,s=!0);try{let i=t.type||"";const e={suggestedName:t.name||"hello",data:t.data||""};e.types=o.autoTypes(i),e.finalType=Object.keys(e.types[0].accept)[0],e.suggestedName+=e.types[0].accept[e.finalType][0];const h=await window.showSaveFilePicker(e);if(s)return;const n=await h.createWritable();let r=new Blob([e.data],{type:e.finalType});await n.write(r),await n.close()}catch(t){console.log(t)}}static showSaveFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("a");i.download=t.suggestedName||"my-file.txt";let e=new Blob([t.data],{type:t.finalType});i.href=URL.createObjectURL(e),i.addEventListener("click",(()=>{s(setTimeout((()=>URL.revokeObjectURL(i.href)),1e3))})),i.click()}))}static async getFolder(){try{const t=await window.showDirectoryPicker(),s=[];for await(const i of t.values()){const t=await i.getFile();s.push(t)}return console.log(s),s}catch(t){console.log(t)}}}class n{constructor(t=0,s=0){this.x=t,this.y=s}set(t,s){return this.x=t,this.y=s,this}divide(t){return this.x/=t.x,this.y/=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divideScalar(t){return this.multiplyScalar(1/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}angle(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t}addScalar(t){return this.x+=t,this.y+=t,this}negate(){return this.x*=-1,this.y*=-1,this}neg(){return this.x=-1,this.y=-1,this}isZero(){return 0===this.x&&0===this.y}copy(t){return this.x=t.x,this.y=t.y,this}equals(t){return t.x===this.x&&t.y===this.y}nearEquals(t,s){return t.x.toFixed(s)===this.x.toFixed(s)&&t.y.toFixed(s)===this.y.toFixed(s)}lerp(t,s){return null===t?(this.x-=this.x*s,this.y-=this.y*s):(this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s),this}}class r{constructor(t={}){this.lock=t.lock||!1,this.neverlock=!1,this.isSpace=t.isSpace||!1,this.main=t.main||null,this.isUI=t.isUI||!1,this.group=t.group||null,this.isListen=!1,this.top=0,this.ytop=0,this.dx=t.dx||0,this.isSelectable=void 0!==t.selectable&&t.selectable,this.unselectable=void 0!==t.unselect?t.unselect:this.isSelectable,this.ontop=!!t.ontop&&t.ontop,this.css=this.main?this.main.css:h.css,this.colors=h.defineColor(t,this.main?this.group?this.group.colors:this.main.colors:h.colors),this.overEffect=this.colors.showOver,this.svgs=h.svgs,this.zone={x:0,y:0,w:0,h:0,d:0},this.local=(new n).neg(),this.isCanvasOnly=!1,this.isSelect=!1,this.p=void 0!==t.p?t.p:h.size.p,this.w=this.isUI?this.main.size.w:h.size.w,void 0!==t.w&&(this.w=t.w),this.h=this.isUI?this.main.size.h:h.size.h,void 0!==t.h&&(this.h=t.h),this.isSpace?this.lock=!0:this.h=this.h<11?11:this.h,this.fw=t.fw||0,this.autoWidth=t.auto||!0,this.isOpen=!1,this.radius=t.radius||this.colors.radius,this.transition=t.transition||h.transition,this.isNumber=!1,this.noNeg=t.noNeg||!1,this.allEqual=t.allEqual||!1,this.mono=!1,this.isEdit=!1,this.simple=t.simple||!1,this.simple&&(this.sa=0),this.setSize(this.w),void 0!==t.sa&&(this.sa=t.sa),void 0!==t.sb&&(this.sb=t.sb),this.simple&&(this.sb=this.w-this.sa),this.sc=void 0===t.sc?47:t.sc,this.objectLink=null,this.isSend=!1,this.objectKey=null,this.txt=t.name||"",this.name=t.rename||this.txt,this.target=t.target||null,this.callback=void 0===t.callback?null:t.callback,this.endCallback=null,this.openCallback=void 0===t.openCallback?null:t.openCallback,this.closeCallback=void 0===t.closeCallback?null:t.closeCallback,null===this.callback&&this.isUI&&null!==this.main.callback&&(this.callback=this.group?this.group.callback:this.main.callback),this.c=[],this.s=[],this.useFlex=!!this.isUI&&this.main.useFlex;let s=this.useFlex?"display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;":"float:left;";this.c[0]=h.dom("div",this.css.basic+s+"position:relative; height:20px;"),this.s[0]=this.c[0].style,this.margin=this.colors.sy,this.mtop=0;let i=h.isDivid(this.margin);if(this.isUI&&this.margin&&(this.s[0].boxSizing="content-box",i?(this.mtop=.5*this.margin,this.s[0].borderTop=this.mtop+"px solid transparent",this.s[0].borderBottom=this.mtop+"px solid transparent"):this.s[0].borderBottom=this.margin+"px solid transparent"),this.simple||(this.c[1]=h.dom("div",this.css.txt+this.css.middle),this.s[1]=this.c[1].style,this.c[1].textContent=this.name,this.s[1].color=this.lock?this.colors.titleoff:this.colors.title),t.pos){this.s[0].position="absolute";for(let s in t.pos)this.s[0][s]=t.pos[s];this.mono=!0}t.css&&(this.s[0].cssText=t.css)}init(){this.ytop=this.top+this.mtop,this.zone.h=this.h+this.margin,this.zone.w=this.w;let t=this.s,s=this.c;t[0].height=this.h+"px",this.isUI&&(t[0].background=this.colors.background),!this.autoWidth&&this.useFlex?(t[0].flex="1 0 auto",t[0].minWidth=this.minw+"px",t[0].textAlign="center"):this.isUI&&(t[0].width="100%"),void 0!==s[1]&&this.autoWidth&&(t[1]=s[1].style,t[1].top="1px",t[1].height=this.h-2+"px");let e=h.frag;for(let i=1,h=s.length;i!==h;i++)void 0!==s[i]&&(e.appendChild(s[i]),t[i]=s[i].style);let o=null!==this.target?this.target:this.isUI?this.main.inner:document.body;this.ontop?o.insertAdjacentElement("afterbegin",s[0]):o.appendChild(s[0]),s[0].appendChild(e),this.rSize(),this.isUI||(this.c[0].style.pointerEvents="auto",i.add(this))}addTransition(){this.baseH&&this.transition&&this.isUI&&(this.c[0].style.transition="height "+this.transition+"s ease-out")}dom(t,s,i,e,o){return h.dom(t,s,i,e,o)}setSvg(t,s,i,e,o){h.setSvg(t,s,i,e,o)}setCss(t,s){h.setCss(t,s)}clamp(t,s,i){return h.clamp(t,s,i)}getColorRing(){return h.colorRing||h.makeColorRing(),h.clone(h.colorRing)}getJoystick(t){return h["joystick_"+t]||h.makeJoystick(t),h.clone(h["joystick_"+t])}getCircular(t){return h.circular||h.makeCircular(t),h.clone(h.circular)}getKnob(t){return h.knob||h.makeKnob(t),h.clone(h.knob)}getPad2d(t){return h.pad2d||h.makePad(t),h.clone(h.pad2d)}cursor(t){i.cursor(t)}update(){}reset(){}content(){return this.c[0]}getDom(){return this.c[0]}uiout(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.background)}uiover(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.backgroundOver)}rename(t){void 0!==this.c[1]&&(this.c[1].textContent=t)}listen(){return this.isListen=i.addListen(this),this}listening(){if(null===this.objectLink)return;if(this.isSend)return;if(this.isEdit)return;return this.setValue(this.objectLink[this.objectKey])}setValue(t){const s=this.value;this.isNumber?this.value=this.numValue(t):this.value=t,this.update();let i=!1;return s!==this.value&&(i=!0),i}onChange(t){if(!this.isSpace)return this.callback=t||null,this}onFinishChange(t){if(!this.isSpace)return this.callback=null,this.endCallback=t,this}onOpen(t){return this.openCallback=t,this}onClose(t){return this.closeCallback=t,this}send(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.isSend=!0,null!==this.objectLink&&(this.objectLink[this.objectKey]=t),this.callback&&this.callback(t,this.objectKey),this.isSend=!1}sendEnd(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.endCallback&&this.endCallback(t),null!==this.objectLink&&(this.objectLink[this.objectKey]=t)}dispose(){this.isListen&&i.removeListen(this),h.clear(this.c[0]),null!==this.target?null!==this.group?this.group.clearOne(this):this.target.removeChild(this.c[0]):this.isUI?this.main.clearOne(this):document.body.removeChild(this.c[0]),this.isUI||i.remove(this),this.c=null,this.s=null,this.callback=null,this.target=null,this.isListen=!1}clear(){}getWidth(){let t=i.getWidth(this);t&&(this.w=t)}setSize(t){if(this.autoWidth)if(this.w=t,this.simple)this.sb=this.w-this.sa;else{let t=this.w*(this.p/100);this.sa=Math.floor(t+8),this.sb=Math.floor(this.w-t-16)}}rSize(){this.autoWidth&&(this.isUI||(this.s[0].width=this.w+"px"),this.simple||(this.s[1].width=this.sa+"px"))}setTypeNumber(t){let s;switch(this.isNumber=!0,this.value=0,void 0!==t.value&&("string"==typeof t.value?this.value=1*t.value:this.value=t.value),this.min=void 0===t.min?-1/0:t.min,this.max=void 0===t.max?1/0:t.max,this.precision=void 0===t.precision?2:t.precision,this.precision){case 0:s=1;break;case 1:s=.1;break;case 2:s=.01;break;case 3:s=.001;break;case 4:s=1e-4;break;case 5:s=1e-5;break;case 6:s=1e-6}this.step=void 0===t.step?s:t.step,this.range=this.max-this.min,this.value=this.numValue(this.value)}numValue(t){return this.noNeg&&(t=Math.abs(t)),1*Math.min(this.max,Math.max(this.min,t)).toFixed(this.precision)}handleEvent(t){if(!this.lock)return this.neverlock&&(i.lock=!1),this[t.type]?this[t.type](t):console.error(t.type,"this type of event no existe !")}wheel(t){return!1}mousedown(t){return!1}mousemove(t){return!1}mouseup(t){return!1}keydown(t){return!1}keyup(t){return!1}setReferency(t,s){this.objectLink=t,this.objectKey=s}display(t=!1){this.s[0].visibility=t?"visible":"hidden"}open(){this.isOpen||(this.isOpen=!0,i.needResize=!0,this.openCallback&&this.openCallback())}close(){this.isOpen&&(this.isOpen=!1,i.needResize=!0,this.closeCallback&&this.closeCallback())}needZone(){i.needReZone=!0}rezone(){i.needReZone=!0}select(){}unselect(){}setInput(t){i.setInput(t,this)}upInput(t,s){return i.upInput(t,s)}selected(t){this.isSelect=t||!1}}class l extends r{constructor(t={}){super(t),this.value=t.value||!1,this.model=void 0!==t.mode?t.mode:0,this.onName=t.rename||this.txt,t.onName&&(t.onname=t.onName),t.onname&&(this.onName=t.onname),this.inh=t.inh||Math.floor(.8*this.h),this.inw=t.inw||36;let s=this.colors;if(0===this.model){let t=Math.floor(.5*this.h)-.5*(this.inh-2);this.c[2]=this.dom("div",this.css.basic+"background:"+s.inputBg+"; height:"+(this.inh-2)+"px; width:"+this.inw+"px; top:"+t+"px; border-radius:10px; border:2px solid "+s.back),this.c[3]=this.dom("div",this.css.basic+"height:"+(this.inh-6)+"px; width:16px; top:"+(t+2)+"px; border-radius:10px; background:"+s.button+";")}else this.p=0,void 0!==this.c[1]&&(this.c[1].textContent=""),this.c[2]=this.dom("div",this.css.txt+this.css.button+"top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.borderSize+"px solid "+s.border+"; border-radius:"+this.radius+"px;");this.stat=-1,this.init(),this.update()}mousedown(t){return this.value=!this.value,this.update(!0),this.mousemove(t)}mousemove(t){return this.cursor("pointer"),this.mode(!0)}reset(){return this.cursor(),this.mode()}mode(t){let s,i=!1,e=this.colors,h=this.s,o=this.value;if(s=t?o?4:3:o?2:1,this.stat!==s){if(this.stat=s,0!==this.model){switch(s){case 1:h[2].color=e.text,h[2].background=e.button;break;case 2:h[2].color=e.textSelect,h[2].background=e.select;break;case 3:h[2].color=e.textOver,h[2].background=e.overoff;break;case 4:h[2].color=e.textOver,h[2].background=e.over}this.c[2].innerHTML=o?this.onName:this.name}else{switch(s){case 1:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.button;break;case 2:h[2].background=h[2].borderColor=e.back,h[3].background=e.textOver;break;case 3:h[2].background=h[2].borderColor=e.back,h[3].background=e.overoff;break;case 4:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.textSelect}h[3].marginLeft=o?"17px":"2px",this.c[1].textContent=o?this.onName:this.name}i=!0}return i}update(t){this.mode(),t&&this.send()}rSize(){super.rSize();let t=this.s,s=this.w-10-this.inw;0===this.model?(t[2].left=s+"px",t[3].left=s+"px"):(t[2].left=this.sa+"px",t[2].width=this.sb+"px")}}class a extends r{constructor(t={}){super(t),this.value="",void 0!==t.value&&(this.value=t.value),this.values=t.value||this.txt,t.values&&(this.values=t.values),t.values||t.value||(this.txt=""),this.onName=t.onName||null,this.on=!1,this.bw=t.forceWidth||0,t.bw&&(this.bw=t.bw),this.space=t.space||3,"string"==typeof this.values&&(this.values=[this.values]),this.isDown=!1,this.neverlock=!0,this.res=0,this.lng=this.values.length,this.tmp=[],this.stat=[];let s,i=this.colors;for(let t=0;te[i][0]&&s.x0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.text,this.setSvg(this.c[3],"stroke",s,1);break;case 1:this.s[2].color=i.textOver,this.setSvg(this.c[3],"stroke",i.backoff,0),s=this.model>0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.textOver,this.setSvg(this.c[3],"stroke",s,1)}return this.cmode=t,!0}reset(){this.isDown=!1}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"circular"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;if(s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=s.angle()-this.pi90,this.r=(this.r%this.twoPi+this.twoPi)%this.twoPi,null!==this.oldr){let t=this.r-this.oldr;this.r=Math.abs(t)>Math.PI?this.oldr:this.r,t>6&&(this.r=0),t<-6&&(this.r=this.twoPi)}let i=1/this.twoPi,e=this.r*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=~~(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("circular"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:sMath.PI?1:0)+" 1 "+i+","+e}update(t){if(this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range,this.setSvg(this.c[3],"d",this.makePath(),1),this.model>0){let t=this.colors,s=h.pack(h.lerpColor(h.unpack(h.ColorLuma(t.text,-.75)),h.unpack(t.text),this.percent));this.setSvg(this.c[3],"stroke",s,1)}t&&this.send()}}class d extends r{constructor(t={}){super(t),this.ctype=t.ctype||"hex",this.wfixe=256,this.cw=this.sb>256?256:this.sb,null!=t.cw&&(this.cw=t.cw),this.side=t.side||"down",this.up="down"===this.side?0:1,this.baseH=this.h,this.offset=new n,this.decal=new n,this.pp=new n;let s=this.colors;this.c[2]=this.dom("div",`${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${s.borderSize}px solid ${s.border};`),this.c[0].style.display="block",this.c[3]=this.getColorRing(),this.c[3].style.visibility="hidden",this.hsl=null,this.value="#ffffff",void 0!==t.value&&(t.value instanceof Array?this.value=h.rgbToHex(t.value):isNaN(t.value)?this.value=t.value:this.value=h.hexToHtml(t.value)),this.bcolor=null,this.isDown=!1,this.fistDown=!1,this.notext=t.notext||!1,this.tr=98,this.tsl=Math.sqrt(3)*this.tr,this.hue=0,this.d=256,this.init(),this.setColor(this.value),void 0!==t.open&&this.open()}testZone(t,s){let i=this.local;return-1===i.x&&-1===i.y?"":this.up&&this.isOpen?i.y>this.wfixe?"title":"color":i.ythis.tr)e=(c+u.pi90)/u.TwoPI,this.hue=(e+1)%1,this.setHSL([(e+1)%1,this.hsl[1],this.hsl[2]]);else{l=s.x*this.ratio,a=s.y*this.ratio;let t=this.hue*u.TwoPI+u.PI;t<0&&(t+=2*u.PI),r=Math.atan2(-a,l),r<0&&(r+=2*u.PI);let i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,h=.5*this.tr,c=Math.tan(e)*h,d=Math.sqrt(l*l+a*a),p=Math.sqrt(h*h+c*c);if(d>p){let s=Math.tan(e)*d,o=Math.atan(s/p);o>u.pi60?o=u.pi60:o<-u.pi60&&(o=-u.pi60),r+=o-e,i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,c=Math.tan(e)*h,d=p=Math.sqrt(h*h+c*c)}n=Math.sin(i)*d/this.tsl+.5;let m=1-2*Math.abs(n-.5);o=(Math.cos(i)*d+this.tr/2)/(1.5*this.tr)/m,o=u.clamp(o,0,1),this.setHSL([this.hsl[0],o,n])}}setHeight(){this.h=this.isOpen?this.wfixe+this.baseH+5:this.baseH,this.s[0].height=this.h+"px",this.zone.h=this.h}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(){super.open(),this.setHeight(),this.up&&(this.zone.y-=this.wfixe+5);let t=this.h-this.baseH;this.s[3].visibility="visible",this.parentHeight(t)}close(){super.close(),this.up&&(this.zone.y+=this.wfixe+5);let t=this.h-this.baseH;this.setHeight(),this.s[3].visibility="hidden",this.parentHeight(-t)}update(t){let s=h.rgbToHex(h.hslToRgb([this.hsl[0],1,.5]));this.moveMarkers(),this.value=this.bcolor,this.setSvg(this.c[3],"fill",s,2,0),this.s[2].background=this.bcolor,this.notext||(this.c[2].textContent=h.htmlToHex(this.bcolor)),this.invert=h.findDeepInver(this.rgb),this.s[2].color=this.invert?"#fff":"#000",t&&("array"===this.ctype&&this.send(this.rgb),"rgb"===this.ctype&&this.send(h.htmlRgb(this.rgb)),"hex"===this.ctype&&this.send(h.htmlToHex(this.value)),"html"===this.ctype&&this.send())}setValue(t){t instanceof Array?this.value=h.rgbToHex(t):isNaN(t)?this.value=t:this.value=h.hexToHtml(t),this.setColor(this.value),this.update()}setColor(t){let s=h.unpack(t);return this.bcolor!==t&&s&&(this.bcolor=t,this.rgb=s,this.hsl=h.rgbToHsl(this.rgb),this.hue=this.hsl[0],this.update()),this}setHSL(t){return this.hsl=t,this.rgb=h.hslToRgb(t),this.bcolor=h.rgbToHex(this.rgb),this.update(!0),this}moveMarkers(){let t=this.pp,s=h;this.invert;let i=this.hsl[0]*s.TwoPI,e=2/3*s.PI,o=this.tr,n=this.hsl[0],r=this.hsl[1],l=this.hsl[2],a=(i-s.pi90)*s.todeg;n=-i+s.pi90;let c=Math.cos(n)*o,d=-Math.sin(n)*o,u=Math.cos(n-e)*o,p=-Math.sin(n-e)*o,m=Math.cos(n+e)*o,g=-Math.sin(n+e)*o,x=(u+m)/2,v=(p+g)/2;i=(1-2*Math.abs(l-.5))*r;let b=u+(m-u)*l+(c-x)*i,f=p+(g-p)*l+(d-v)*i;t.set(b,f).addScalar(128),this.setSvg(this.c[3],"transform","rotate("+a+" )",2),this.setSvg(this.c[3],"cx",t.x,3),this.setSvg(this.c[3],"cy",t.y,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",2,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",3),this.setSvg(this.c[3],"fill",this.bcolor,3)}rSize(){super.rSize();let t=this.s;t[2].width=this.sb+"px",t[2].left=this.sa+"px",this.cw=this.sb>256?256:this.sb,this.rSizeColor(this.cw),this.decal.x=Math.floor(.5*(this.w-this.wfixe))}rSizeColor(t){if(t===this.wfixe)return;this.wfixe=t;let s=this.s;this.decal.y="up"===this.side?2:this.baseH+2,this.mid=Math.floor(.5*this.wfixe),this.setSvg(this.c[3],"viewBox","0 0 "+this.wfixe+" "+this.wfixe),s[3].width=this.wfixe+"px",s[3].height=this.wfixe+"px",s[3].top=this.decal.y+"px",this.ratio=256/this.wfixe,this.square=1/(this.wfixe/256*60),this.setHeight()}}class u extends r{constructor(t={}){super(t),this.round=Math.round,this.baseH=this.h,this.hplus=t.hplus||50,this.res=t.res||40,this.l=1,this.precision=t.precision||0,this.custom=t.custom||!1,this.names=t.names||["FPS","MS"];let s=t.cc||["220,220,220","255,255,0"];this.adding=t.adding||!1,this.range=t.range||[165,100,100],this.alpha=t.alpha||.25,this.values=[],this.points=[],this.textDisplay=[],this.custom||(this.now=i.getTime(),this.startTime=0,this.prevTime=0,this.frames=0,this.ms=0,this.fps=0,this.mem=0,this.mm=0,this.isMem=!(!self.performance||!self.performance.memory),this.isMem&&(this.names.push("MEM"),s.push("0,255,255")),this.txt=t.name||"Fps");let e=Math.floor(.5*this.h)-3;const h=this.colors;this.c[1].textContent=this.txt,this.c[0].style.cursor="pointer",this.c[0].style.pointerEvents="auto";let o="display:none; left:10px; top:"+this.h+"px; height:"+(this.hplus-8)+"px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid "+h.border+";";0!==this.radius&&(o+="border-radius:"+this.radius+"px;"),this.c[2]=this.dom("path",this.css.basic+o,{}),this.c[2].setAttribute("viewBox","0 0 "+this.res+" 50"),this.c[2].setAttribute("height","100%"),this.c[2].setAttribute("width","100%"),this.c[2].setAttribute("preserveAspectRatio","none"),this.c[3]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; left:0; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.c[4]=this.dom("div",this.css.txt+"position:absolute; left:10px; top:"+(this.h+2)+"px; display:none; width:100%; text-align:center;"),t.bottomLine&&(this.c[4]=this.dom("div",this.css.basic+"width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);")),this.isShow=!1;let n=this.s;n[1].lineHeight=this.h-4,n[1].color=h.text,0!==this.radius&&(n[0].borderRadius=this.radius+"px"),"none"!==this.colors.gborder&&(n[0].border="1px solid "+h.gborder);let r=0;for(r=0;r "+this.names[r]+" ")}for(r=this.names.length;r--;)this.dom("path",null,{fill:"rgba("+s[r]+","+this.alpha+")","stroke-width":1,stroke:"rgba("+s[r]+",1)","vector-effect":"non-scaling-stroke"},this.c[2]);this.init()}mousedown(t){this.isShow?this.close():this.open()}tick(t){this.values=t,this.isShow&&(this.drawGraph(),this.upText())}makePath(t){let s="";s+="M -1 50";for(let i=0;i";this.c[4].innerHTML=i}drawGraph(){let t,s=this.c[2],i=this.names.length,e=0,h=0;for(;i--;)t=this.adding?(this.values[h]+e)*this.range[h]:this.values[h]*this.range[h],this.points[h].shift(),this.points[h].push(50-t),this.setSvg(s,"d",this.makePath(this.points[h]),i+1),e+=this.values[h],h++}open(){super.open(),this.h=this.hplus+this.baseH,this.setSvg(this.c[3],"d",this.svgs.g2),null!==this.group?this.group.calc(this.hplus):this.isUI&&this.main.calc(this.hplus),this.s[0].height=this.h+"px",this.s[2].display="block",this.s[4].display="block",this.isShow=!0,this.custom||i.addListen(this)}close(){super.close(),this.h=this.baseH,this.setSvg(this.c[3],"d",this.svgs.g1),null!==this.group?this.group.calc(-this.hplus):this.isUI&&this.main.calc(-this.hplus),this.s[0].height=this.h+"px",this.s[2].display="none",this.s[4].display="none",this.isShow=!1,this.custom||i.removeListen(this),this.c[4].innerHTML=""}begin(){this.startTime=this.now()}end(){let t=this.now();if(this.ms=t-this.startTime,this.frames++,t>this.prevTime+1e3&&(this.fps=this.round(1e3*this.frames/(t-this.prevTime)),this.prevTime=t,this.frames=0,this.isMem)){let t=performance.memory.usedJSHeapSize,s=performance.memory.jsHeapSizeLimit;this.mem=this.round(954e-9*t),this.mm=t/s}return this.values=[this.fps,this.ms,this.mm],this.drawGraph(),this.upText([this.fps,this.ms,this.mem]),t}listening(){this.custom||(this.startTime=this.end())}rSize(){let t=this.s,s=this.w;t[3].left=this.sa+this.sb-6+"px",t[0].width=s+"px",t[1].width=s+"px",t[2].left="10px",t[2].width=s-20+"px",t[4].width=s-20+"px"}}class p extends r{constructor(t={}){super(t),this.value=void 0!==t.value?t.value:[0,0,0],this.lng=this.value.length,this.precision=void 0!==t.precision?t.precision:2,this.multiplicator=t.multiplicator||1,this.neg=t.neg||!1,this.line=void 0===t.line||t.line,this.autoWidth=void 0===t.autoWidth||t.autoWidth,this.isNumber=!1,this.isDown=!1,this.h=t.h||138,this.rh=this.h-10,this.top=0,this.c[0].style.width=this.w+"px",void 0!==this.c[1]&&(this.c[1].style.width=this.w+"px",this.autoWidth||(this.c[1].style.width="100%",this.c[1].style.justifyContent="center"),this.top=10,this.h+=10),this.gh=this.rh-28,this.gw=this.w-28,this.c[2]=this.dom("div",this.css.txt+"display:block; text-align:center; padding:0px 0px; top:"+(this.h-20)+"px; left:14px; width:"+this.gw+"px;\tcolor:"+this.colors.text),this.c[2].innerHTML=this.valueToHtml();let s=this.dom("svg",this.css.basic,{viewBox:"0 0 "+this.w+" "+this.rh,width:this.w,height:this.rh,preserveAspectRatio:"none"});this.setCss(s,{width:this.w,height:this.rh,left:0,top:this.top}),this.dom("path","",{d:"",stroke:this.colors.text,"stroke-width":2,fill:"none","stroke-linecap":"butt"},s),this.dom("rect","",{x:10,y:10,width:this.gw+8,height:this.gh+8,stroke:"rgba(0,0,0,0.3)","stroke-width":1,fill:"none"},s),this.iw=(this.gw-4*(this.lng-1))/this.lng;let i=[];this.cMode=[],this.v=[];for(let t=0;t',e="width:"+100/this.lng+"%;";for(;t--;)s===this.lng-1?i+=""+this.value[s]+"":i+=""+this.value[s]+"",s++;return i}updateSVG(){this.line&&this.setSvg(this.c[3],"d",this.makePath(),0);for(let t=0;tthis.top&&s.ye[i][0]&&s.xthis.distance){let t=Math.atan2(this.tmp.x,this.tmp.y);this.tmp.x=Math.sin(t)*this.distance,this.tmp.y=Math.cos(t)*this.distance}this.pos.copy(this.tmp).divideScalar(this.distance).negate(),this.update()}setValue(t){void 0===t&&(t=[0,0]),this.pos.set(t[0]||0,t[1]||0),this.updateSVG()}update(t){void 0===t&&(t=!0),null!==this.interval&&(this.isDown||(this.pos.lerp(null,.3),this.pos.x=Math.abs(this.pos.x)<.01?0:this.pos.x,this.pos.y=Math.abs(this.pos.y)<.01?0:this.pos.y,this.isUI&&this.main.isCanvas&&this.main.draw())),this.updateSVG(),t&&this.send(),this.pos.isZero()&&this.stopInterval()}updateSVG(){let t=.5*this.diam- -this.pos.x*this.distance,s=.5*this.diam- -this.pos.y*this.distance;if(0===this.model){let i=t+5*this.pos.x+5,e=s+5*this.pos.y+10;this.setSvg(this.c[3],"cx",i*this.ratio,3),this.setSvg(this.c[3],"cy",e*this.ratio,3)}else this.setSvg(this.c[3],"cx",t*this.ratio,3),this.setSvg(this.c[3],"cy",s*this.ratio,3);this.setSvg(this.c[3],"cx",t*this.ratio,4),this.setSvg(this.c[3],"cy",s*this.ratio,4),this.value[0]=1*(this.pos.x*this.multiplicator).toFixed(this.precision),this.value[1]=1*(this.pos.y*this.multiplicator).toFixed(this.precision),this.haveText&&(this.c[2].textContent=this.value)}clear(){this.stopInterval(),super.clear()}}class v extends r{constructor(t={}){super(t),this.isCyclic=t.cyclic||!1,this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.autoWidth=!1,this.setTypeNumber(t),this.minw=this.w,this.diam=t.diam||this.w,this.mPI=.8*Math.PI,this.toDeg=180/Math.PI,this.cirRange=2*this.mPI,this.offset=new n,this.h=t.h||this.w+10,this.c[0].style.width=this.w+"px",this.c[0].style.display="block",void 0!==this.c[1]&&(this.c[1].style.width="100%",this.c[1].style.justifyContent="center",this.top=10,this.h+=10),this.percent=0,this.cmode=0;let s=this.colors;this.c[2]=this.dom("div",this.css.txt+"justify-content:center; top:"+(this.h-20)+"px; width:100%; color:"+s.text),this.c[3]=this.getKnob(),this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1),this.setSvg(this.c[3],"stroke",s.text,3),this.setSvg(this.c[3],"d",this.makeGrad(),3),this.setSvg(this.c[3],"viewBox","0 0 "+this.diam+" "+this.diam),this.setCss(this.c[3],{width:this.diam,height:this.diam,left:0,top:this.top}),this.model>0&&(h.dom("path","",{d:"",stroke:s.text,"stroke-width":2,fill:"none","stroke-linecap":"round"},this.c[3]),2==this.model&&(h.addSVGGlowEffect(),this.setSvg(this.c[3],"style",'filter: url("#UILGlow");',4))),this.r=0,this.init(),this.update()}mode(t){let s=this.colors;if(this.cmode===t)return!1;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1);break;case 1:this.s[2].color=s.textOver,this.setSvg(this.c[3],"fill",s.select,0),this.setSvg(this.c[3],"stroke",s.textOver,1)}return this.cmode=t,!0}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"knob"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=-Math.atan2(s.x,s.y),null!==this.oldr&&(this.r=Math.abs(this.r-this.oldr)>Math.PI?this.oldr:this.r),this.r=this.r>this.mPI?this.mPI:this.r,this.r=this.r<-this.mPI?-this.mPI:this.r;let i=1/this.cirRange,e=(this.r+this.mPI)*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=Math.floor(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("knob"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s5?(s=this.range/this.step,t=(a-c)/s):(t=(a-c)/l*2,s=32);for(let c=0;c<=s;++c)i=a-t*c,e=l+44*Math.sin(i),h=l+44*Math.cos(i),o=l+40*Math.sin(i),n=l+40*Math.cos(i),r+="M"+e+" "+h+" L"+o+" "+n+" ";return r}update(t){this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range;let s=Math.PI+this.mPI,i=this.percent*this.cirRange-this.mPI,e=Math.sin(i),o=Math.cos(i),n=25*e+64,r=-25*o+64,l=20*e+64,a=-20*o+64;if(this.setSvg(this.c[3],"d","M "+n+" "+r+" L "+l+" "+a,1),this.model>0){let t=36*Math.sin(s)+64,n=36*Math.cos(s)+64,r=36*e+64,l=-36*o+64,a=i<=Math.PI-this.mPI?0:1;this.setSvg(this.c[3],"d","M "+t+","+n+" A 36,36 1 "+a+" 1 "+r+","+l,4);let c=h.pack(h.lerpColor(h.unpack(h.ColorLuma(this.colors.text,-.75)),h.unpack(this.colors.text),this.percent));this.setSvg(this.c[3],"stroke",c,4)}t&&this.send()}}class b extends r{constructor(t={}){super(t),this.hideCurrent=!1,this.path=t.path||"",this.format=t.format||"",this.isWithImage=""!==this.path,this.preLoadComplete=!1,this.tmpImage={},this.tmpUrl=[],this.m=void 0!==t.m?t.m:5;let s=t.align||"left",i=t.scrollSize||10;this.ss=i+1,this.sMode=0,this.tMode=0,this.listOnly=t.listOnly||!1,this.staticTop=t.staticTop||!1,this.isSelectable=this.listOnly,void 0!==t.select&&(t.selectable=t.select),void 0!==t.selectable&&(this.isSelectable=t.selectable),""===this.txt&&(this.p=0);let e=Math.floor(.5*this.h)-3,h=this.colors;if(this.c[2]=this.dom("div",this.css.basic+"top:0; display:none; border-radius:"+this.radius+"px;"),this.c[3]=this.dom("div",this.css.item+"padding:0px "+this.m+"px; margin-bottom:0px; position:absolute; justify-content:"+s+"; text-align:"+s+"; line-height:"+(this.h-4)+"px; top:1px; background:"+h.button+"; height:"+(this.h-2)+"px; border:1px solid "+h.border+"; border-radius:"+this.radius+"px;"),this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.scrollerBack=this.dom("div",this.css.basic+"right:0px; width:"+i+"px; background:"+h.back+"; display:none;"),this.scroller=this.dom("div",this.css.basic+"right:"+.5*(i-.25*i)+"px; width:"+.25*i+"px; background:"+h.text+"; display:none; "),this.c[3].style.color=h.text,this.list=[],this.refObject=null,t.list)if(t.list instanceof Array)this.list=t.list;else if(t.list instanceof Object){this.refObject=t.list;for(let t in this.refObject)this.list.push(t)}this.items=[],this.prevName="",this.tmpId=0,this.baseH=this.h,this.itemHeight=t.itemHeight||this.h,this.full=t.full||!1,this.py=0,this.ww=this.sb,this.scroll=!1,this.isDown=!1,this.current=null,this.side=t.side||"down",this.up="down"===this.side?0:1,this.up?(this.c[2].style.top="auto",this.c[3].style.top="auto",this.c[4].style.top="auto",this.c[2].style.bottom=this.h-2+"px",this.c[3].style.bottom="1px",this.c[4].style.bottom=e+"px"):this.c[2].style.top=this.baseH+"px",this.listIn=this.dom("div",this.css.basic+"left:0; top:0; width:100%; background:none;"),this.listIn.name="list",this.topList=0,this.c[2].appendChild(this.listIn),this.c[2].appendChild(this.scrollerBack),this.c[2].appendChild(this.scroller),void 0!==t.value?isNaN(t.value)?this.value=t.value:this.value=this.list[t.value]:this.value=this.list[0],this.isOpenOnStart=t.open||!1,this.listOnly&&(this.baseH=5,this.c[3].style.display="none",this.c[4].style.display="none",this.c[2].style.top=this.baseH+"px",this.isOpenOnStart=!0),this.miniCanvas=t.miniCanvas||!1,this.canvasBg=t.canvasBg||"rgba(0,0,0,0)",this.imageSize=t.imageSize||[20,20],this.drag=t.drag||!1,this.dragout=t.dragout||!1,this.dragstart=t.dragstart||null,this.dragend=t.dragend||null,this.setList(this.list),this.init(),this.isWithImage&&this.preloadImage(),this.isOpenOnStart&&this.open(!0),this.baseH+=this.mtop}preloadImage(){this.preLoadComplete=!1,this.tmpImage={};for(let t=0;tthis.h-this.baseH)return"title";if(this.scroll&&s.x>this.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}else{if(s.ythis.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}}return""}testItems(t){let s,i,e,h="",o=this.items,n=o.length;for(;n--;)if(s=o[n],i=s.posy+this.topList,e=s.posy+this.itemHeight+1+this.topList,t>=i&&t<=e)return h="item"+n,this.modeItem(0),this.current=s,this.modeItem(1),h;return h}modeItem(t){if(!this.current)return;this.current.select&&0===t&&(t=2);let s=this.colors;switch(t){case 0:this.current.style.background=s.back,this.current.style.color=s.text;break;case 1:this.current.style.background=s.over,this.current.style.color=s.textOver;break;case 2:this.current.style.background=s.select,this.current.style.color=s.textSelect}}unSelected(){this.current&&(this.modeItem(0),this.current=null)}selected(){this.current&&(this.resetItems(),this.modeItem(2),this.current.select=!0)}resetItems(){let t=this.items.length;for(;t--;)this.items[t].select=!1,this.items[t].style.background=this.colors.back,this.items[t].style.color=this.colors.text}hideActive(){this.hideCurrent&&(this.current&&(this.tmpId=this.current.id),this.resetHide())}resetHide(){console.log(this.tmpId);let t=this.items.length;for(;t--;)t===this.tmpId?(this.items[t].style.height="0px",this.items[t].posy=-1):(this.items[t].style.height=this.itemHeight+"px",this.items[t].posy=(this.itemHeight+1)*(t-1))}mouseup(t){this.isDown=!1}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s?(this.isDown=!0,this.mousemove(t)):"title"===s?(this.modeTitle(2),this.listOnly||(this.hideActive(),this.isOpen?this.close():this.open())):this.current&&(this.value=this.list[this.current.id],this.isSelectable&&this.selected(),this.send(this.value),this.listOnly||(this.close(),this.setTopItem())),!0)}mousemove(t){let s=!1,i=this.testZone(t);if(!i)return s;if("title"===i)this.unSelected(),this.modeTitle(1),this.cursor("pointer");else if("scroll"===i){if(this.cursor("s-resize"),this.modeScroll(1),this.isDown){this.modeScroll(2);let s=this.zone.y+this.baseH-2;this.update(t.clientY-s-.5*this.sh)}}else this.modeTitle(0),this.modeScroll(0),this.cursor("pointer");return i!==this.prevName&&(s=!0),this.prevName=i,s}wheel(t){return"title"!==this.testZone(t)&&(this.py+=10*t.delta,this.update(this.py),!0)}reset(){this.prevName="",this.unSelected(),this.modeTitle(0),this.modeScroll(0)}modeScroll(t){if(t===this.sMode)return;let s=this.scroller.style,i=this.colors;switch(t){case 0:s.background=i.text;break;case 1:case 2:s.background=i.select}this.sMode=t}modeTitle(t){if(t===this.tMode)return;let s=this.s,i=this.colors;switch(t){case 0:s[3].color=i.text,s[3].background=i.button;break;case 1:s[3].color=i.textOver,s[3].background=i.overoff;break;case 2:s[3].color=i.textSelect,s[3].background=i.overoff}this.tMode=t}clearList(){for(;this.listIn.children.length;)this.listIn.removeChild(this.listIn.lastChild);this.items=[]}setList(t){this.clearList(),this.list=t,this.length=this.list.length;let s,e,h=this.hideCurrent?this.length-1:this.length;this.maxItem=this.full?h:5,this.maxItem=hthis.maxHeight&&(this.ww=this.sb-this.ss,this.scroll=!0),this.miniCanvas&&(this.tmpCanvas=document.createElement("canvas"),this.tmpCanvas.width=this.imageSize[0],this.tmpCanvas.height=this.imageSize[1],this.tmpCtx=this.tmpCanvas.getContext("2d"),this.tmpCtx.fillStyle=this.canvasBg,this.tmpCtx.fillRect(0,0,this.imageSize[0],this.imageSize[1]));for(let t=0;tthis.range?this.range:t,this.topList=-Math.floor(t/this.ratio),this.listIn.style.top=this.topList+"px",this.scroller.style.top=Math.floor(t)+"px",this.py=t)}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(t){super.open(),this.update(0),this.h=this.maxHeight+this.baseH+5,this.scroll?(this.scroller.style.display="block",this.scrollerBack.style.display="block"):(this.topList=0,this.h=this.baseH+5+this.max,this.scroller.style.display="none",this.scrollerBack.style.display="none"),this.s[0].height=this.h+"px",this.s[2].display="block",this.up?(this.zone.y-=this.h-(this.baseH-10),this.setSvg(this.c[4],"d",this.svgs.g1)):this.setSvg(this.c[4],"d",this.svgs.g2),this.rSizeContent();let s=this.h-this.baseH;this.zone.h=this.h,t||this.parentHeight(s)}close(){super.close(),this.up&&(this.zone.y+=this.h-(this.baseH-10));let t=this.h-this.baseH;this.h=this.baseH,this.s[0].height=this.h+"px",this.s[2].display="none",this.setSvg(this.c[4],"d",this.svgs.g1),this.zone.h=this.h,this.parentHeight(-t)}text(t){this.c[3].textContent=t}rSizeContent(){let t=this.length;for(;t--;)this.listIn.children[t].style.width=this.ww+"px"}rSize(){super.rSize();let t=this.s,s=this.sb,i=this.sa;void 0!==t[2]&&(t[2].width=s+"px",t[2].left=i+"px",t[3].width=s+"px",t[3].left=i+"px",t[4].left=i+s-15+"px",this.ww=s,this.max>this.maxHeight&&(this.ww=s-this.ss),this.isOpen&&this.rSizeContent())}}class f extends r{constructor(t={}){super(t),this.setTypeNumber(t),this.allway=t.allway||!1,this.isDown=!1,this.value=[0],this.multy=1,this.invmulty=1,this.isSingle=!0,this.isAngle=!1,this.isVector=!1,t.isAngle&&(this.isAngle=!0,this.multy=h.torad,this.invmulty=h.todeg),this.isDrag=t.drag||!1,void 0!==t.value&&(isNaN(t.value)?t.value instanceof Array?(this.value=t.value,this.isSingle=!1):t.value instanceof Object&&(this.value=[],void 0!==t.value.x&&(this.value[0]=t.value.x),void 0!==t.value.y&&(this.value[1]=t.value.y),void 0!==t.value.z&&(this.value[2]=t.value.z),void 0!==t.value.w&&(this.value[3]=t.value.w),this.isSingle=!1,this.isVector=!0):this.value=[t.value]),this.lng=this.value.length,this.tmp=[],this.current=-1,this.prev={x:0,y:0,d:0,v:0};let s=this.colors;this.c[2]=this.dom("div",this.css.basic+" background:"+s.select+"; top:4px; width:0px; height:"+(this.h-8)+"px;"),this.cMode=[];let i=this.lng;for(;i--;)this.isAngle&&(this.value[i]=(180*this.value[i]/Math.PI).toFixed(this.precision)),this.c[3+i]=this.dom("div",this.css.txtselect+"top:1px; height:"+(this.h-2)+"px; color:"+s.text+"; background:"+s.back+"; borderColor:"+s.border+"; border-radius:"+this.radius+"px;"),t.center&&(this.c[2+i].style.textAlign="center"),this.c[3+i].textContent=this.value[i],this.c[3+i].style.color=this.colors.text,this.c[3+i].isNum=!0,this.cMode[i]=0;this.selectId=3+this.lng,this.c[this.selectId]=this.dom("div",this.css.txtselect+"position:absolute; top:2px; height:"+(this.h-4)+"px; padding:0px 0px; width:0px; color:"+s.textSelect+"; background:"+s.select+"; border:none; border-radius:0px;"),this.cursorId=4+this.lng,this.c[this.cursorId]=this.dom("div",this.css.basic+"top:2px; height:"+(this.h-4)+"px; width:0px; background:"+s.text+";"),this.init()}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";let i=this.lng,e=this.tmp;for(;i--;)if(s.x>e[i][0]&&s.x 0";this.easing=t.easing||1,this.setTypeNumber(t),this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.isDown=!1,this.isOver=!1,this.allway=t.allway||!1,this.isDeg=t.isDeg||!1,this.isCyclic=t.cyclic||!1,this.firstImput=!1;let s=this.colors;if(this.c[2]=this.dom("div",this.css.txtselect+"border:none; background:none; width:47px; color:"+s.text+";"),this.c[3]=this.dom("div",this.css.basic+" top:0; height:"+this.h+"px;"),this.c[4]=this.dom("div",this.css.basic+"background:"+s.back+"; top:2px; height:"+(this.h-4)+"px;"),this.c[5]=this.dom("div",this.css.basic+"left:4px; top:5px; height:"+(this.h-10)+"px; background:"+s.text+";"),this.c[2].isNum=!0,this.c[2].style.height=this.h-2+"px",this.c[2].style.lineHeight=this.h-10+"px",0!==this.model){let t=4,i=4,e=8,h=this.h-6,o=16;2===this.model&&(t=0,i=2,e=4,o=2,h=.5*(this.h-6)),3===this.model&&(this.c[5].style.visible="none"),this.c[4].style.borderRadius=t+"px",this.c[4].style.height=e+"px",this.c[4].style.top=.5*this.h-i+"px",this.c[5].style.borderRadius=.5*t+"px",this.c[5].style.height=i+"px",this.c[5].style.top=.5*this.h-.5*i+"px",this.c[6]=this.dom("div",this.css.basic+"border-radius:"+o+"px; margin-left:"+.5*-h+"px; background:"+s.text+"; left:4px; top:3px; height:"+(this.h-6)+"px; width:"+h+"px;")}this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>=this.txl?"text":s.x>=this.sa?"scroll":""}mouseup(t){this.isDown&&(this.isDown=!1)}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s&&(this.isDown=!0,this.old=this.value,this.mousemove(t)),!0)}mousemove(t){let s=!1;if("scroll"===this.testZone(t)?(this.mode(1),this.cursor("w-resize")):this.cursor(),this.isDown){let i=(t.clientX-(this.zone.x+this.sa)-3)/this.ww;i=Math.min(1,Math.max(0,i));let e=Math.pow(i,this.easing)*this.range+this.min,h=i*this.range+this.min;this.sliderValue=this.numValue(h);let o,n=e-this.old;(n>=this.step||n<=this.step)&&(o=Math.floor(n/this.step),this.value=this.numValue(this.old+o*this.step),this.update(!0),this.old=this.value),s=!0}return s}wheel(t){if("scroll"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s=this.sa?"text":""}mouseup(t){if(this.editable)return!!this.isDown&&(this.isDown=!1,this.mousemove(t))}mousedown(t){if(!this.editable)return;let s=this.testZone(t);return!this.isDown&&(this.isDown=!0,"text"===s&&this.setInput(this.c[2]),this.mousemove(t))}mousemove(t){if(!this.editable)return;let s=0;return"text"===this.testZone(t)?this.cursor("text"):this.cursor(),this.isDown&&(s=t.clientX-this.zone.x),this.upInput(s-this.sa-3,this.isDown)}update(){this.c[2].textContent=this.value}reset(){this.cursor()}select(t,s,i,e){let h=this.s,o=this.sa+5;h[4].width="1px",h[4].left=o+s+"px",h[3].left=o+s+"px",h[3].width=i+"px",this.c[3].innerHTML=e}unselect(){let t=this.s;t&&(t[3].width="0px",this.c[3].innerHTML="t",t[4].width="0px")}validate(t){this.allway&&(t=!0),this.value=this.c[2].textContent,""!==this.value?this.c[5].textContent="":this.c[5].textContent=this.placeHolder,t&&this.send()}rSize(){super.rSize();let t=this.s;t[2].left=this.sa+"px",t[2].width=this.sb+"px",t[5].left=this.sa+"px",t[5].width=this.sb+"px"}}class k extends r{constructor(t={}){super(t);let s=t.prefix||"";this.c[2]=this.dom("div",this.css.txt+"justify-content:right; width:60px; line-height:"+(this.h-8)+"px; color:"+this.colors.text),31===this.h&&(this.s[0].height=this.h+"px",this.s[1].top="8px",this.c[2].style.top="8px");let i=this.s;i[1].justifyContent=t.align||"left",i[1].fontWeight=t.fontWeight||"bold",this.c[1].textContent=this.txt.substring(0,1).toUpperCase()+this.txt.substring(1).replace("-"," "),this.c[2].textContent=s,this.init()}text(t){this.c[1].textContent=t}text2(t){this.c[2].textContent=t}rSize(){super.rSize(),this.s[1].width=this.w+"px",this.s[2].left=this.w+"px"}setColor(t){this.s[1].color=t,this.s[2].color=t}}class S extends r{constructor(t={}){super(t),this.value=t.value||"",this.isDown=!1,this.onActif=t.onActif||function(){};const s=this.colors;this.c[2]=this.dom("div",this.css.txt+this.css.button+" top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.buttonBorder+"; border-radius:15px; width:30px; left:10px;"),this.c[3]=this.dom("div",this.css.txtselect+"height:"+(this.h-4)+"px; background:"+s.inputBg+"; borderColor:"+s.inputBorder+"; border-radius:"+this.radius+"px;"),this.c[3].textContent=this.value;let i=Math.floor(.5*this.h)-7;this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:14px; height:14px; left:5px; top:"+i+"px;",{d:this.svgs.cursor,fill:s.text,stroke:"none"}),this.stat=1,this.isActif=!1,this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>this.sa&&s.xthis.sa&&s.xi[r][0]&&s.xe[r][0]&&s.ythis.lng-1&&(h=-1)),h}mouseup(t){return!!this.isDown&&(this.isDown=!1,-1!==this.res&&(this.value=this.values[this.res],this.send()),this.mousemove(t))}mousedown(t){return!this.isDown&&(this.isDown=!0,this.mousemove(t))}mousemove(t){let s=!1;return this.res=this.testZone(t),-1!==this.res?(this.cursor("pointer"),s=this.modes(this.isDown?3:2,this.res)):s=this.reset(),s}modes(t=1,s=-1){let i,e,h=this.lng,o=!1;for(;h--;)e=t,i=!!this.isSelectable&&this.values[h]===this.value,h===s?i&&2===e&&(e=3):(e=1,i&&(e=4)),this.mode(e,h)&&(o=!0);return o}mode(t,s){let i=!1,e=this.colors,h=this.buttons,o=s;if(this.stat[s]!==t){switch(this.stat[s]=t,t){case 1:h[o].style.color=e.text,h[o].style.background=e.button;break;case 2:h[o].style.color=e.textOver,h[o].style.background=e.overoff;break;case 3:h[o].style.color=e.textOver,h[o].style.background=e.over;break;case 4:h[o].style.color=e.textSelect,h[o].style.background=e.select}i=!0}return i}reset(){return this.res=-1,this.cursor(),this.modes()}label(t,s){this.buttons[s].textContent=t}icon(t,s,i){this.buttons[i].style.padding=(s||0)+"px 0px",this.buttons[i].innerHTML=t}testW(){let t=!1;if(3*this.spaces[0]+2*this.bsizeMax>this.w?(this.bsize[0]=.5*(this.w-3*this.spaces[0]),t=!0):this.bsize[0]!==this.bsizeMax&&(this.bsize[0]=this.bsizeMax,t=!0),!t)return;let s=this.buttons.length;for(;s--;)this.buttons[s].style.width=this.bsize[0]+"px"}rSize(){let t;super.rSize(),this.testW(),this.tmpX=[],this.tmpY=[];for(let s=0;sthis.h-this.c[2].offsetHeight?"text":"pad"}mouseup(t){return this.isDown=!1,this.mode(0)}mousedown(t){if("pad"===this.testZone(t))return this.isDown=!0,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=.5*this.w-(t.clientX-this.zone.x),i=.5*this.diam-(t.clientY-this.zone.y-this.ytop),e=256/this.diam;s=-s*e,i=-i*e,s=h.clamp(s,-this.maxPos,this.maxPos),i=h.clamp(i,-this.maxPos,this.maxPos),this.setPos([s,i]),this.update(!0)}mode(t){if(this.cmode===t)return!1;let s=this.colors;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.back,0),this.setSvg(this.c[3],"fill",s.button,1),this.setSvg(this.c[3],"stroke",s.back,2),this.setSvg(this.c[3],"stroke",s.back,3),this.setSvg(this.c[3],"stroke",s.text,4);break;case 1:this.s[2].color=s.textSelect,this.setSvg(this.c[3],"fill",s.backoff,0),this.setSvg(this.c[3],"fill",s.overoff,1),this.setSvg(this.c[3],"stroke",s.backoff,2),this.setSvg(this.c[3],"stroke",s.backoff,3),this.setSvg(this.c[3],"stroke",s.textSelect,4)}return this.cmode=t,!0}update(t){this.c[2].textContent=this.value,this.updateSVG(),t&&this.send()}updateSVG(){1==this.model&&(this.setSvg(this.c[3],"y1",this.pos.y,2),this.setSvg(this.c[3],"y2",this.pos.y,2),this.setSvg(this.c[3],"x1",this.pos.x,3),this.setSvg(this.c[3],"x2",this.pos.x,3)),this.setSvg(this.c[3],"cx",this.pos.x,4),this.setSvg(this.c[3],"cy",this.pos.y,4)}setPos(t){this.pos.set(t[0]+128,t[1]+128);let s=1/this.maxPos;this.value[0]=(t[0]*s*this.range).toFixed(this.precision),this.value[1]=(t[1]*s*this.range).toFixed(this.precision)}setValue(t,s=!1){void 0===t&&(t=this.value),this.value[0]=1*Math.min(this.max,Math.max(this.min,t[0])).toFixed(this.precision),this.value[1]=1*Math.min(this.max,Math.max(this.min,t[1])).toFixed(this.precision),this.pos.set(this.value[0]/this.range*this.maxPos+128,this.value[1]/this.range*this.maxPos+128),this.update(s)}}const T=function(){let t,s,e=arguments,h=!1,o=null;"string"==typeof e[0]?(t=e[0],s=e[1]||{}):"object"==typeof e[0]&&(h=!0,void 0===e[2]&&[].push.call(e,{}),t=e[2].type?e[2].type:O(e[0][e[1]],e[2]),s=e[2],s.name=e[1],s.hasOwnProperty("displayName")&&(s.name=s.displayName),"list"!==t||s.list?s.value=e[0][e[1]]:s.list=e[0][e[1]]);let n=t.toLowerCase();switch("group"===n&&(s.add=T),n){case"bool":case"boolean":o=new l(s);break;case"button":o=new a(s);break;case"circular":o=new c(s);break;case"color":o=new d(s);break;case"fps":o=new u(s);break;case"graph":o=new p(s);break;case"group":o=new g(s);break;case"joystick":o=new x(s);break;case"knob":o=new v(s);break;case"list":o=new b(s);break;case"numeric":case"number":o=new f(s);break;case"slide":o=new w(s);break;case"textInput":case"string":o=new y(s);break;case"title":case"text":o=new k(s);break;case"select":o=new S(s);break;case"bitmap":o=new M(s);break;case"selector":o=new I(s);break;case"empty":case"space":o=new m(s);break;case"item":o=new C(s);break;case"grid":o=new L(s);break;case"pad2d":case"pad":o=new z(s)}if(null!==o)return i.needResize=!0,h&&o.setReferency(e[0],e[1]),o},O=function(t,s){let i="slide";return"boolean"==typeof t?i="bool":"string"==typeof t?i="#"===t.substring(0,1)?"color":"string":"number"==typeof t?i=s.ctype?"color":"slide":"array"==typeof t&&t instanceof Array?"number"==typeof t[0]?i="number":"string"==typeof t[0]&&(i="list"):"object"==typeof t&&t instanceof Object&&(i=void 0!==t.x?"number":"list"),i};t.Files=o,t.Gui=class{constructor(t={}){this.isGui=!0,this.name="gui",this.canvas=null,this.screen=null,this.plane=t.plane||null,t.config&&(t.colors=t.config),t.colors?this.setConfig(t.colors):this.colors=h.defineColor(t),this.css=h.cloneCss(),this.isReset=!0,this.tmpAdd=null,this.isCanvas=t.isCanvas||!1,this.isCanvasOnly=!1,i.addDOMEventListeners=!t.hasOwnProperty("addDOMEventListeners")||t.addDOMEventListeners,this.callback=void 0===t.callback?null:t.callback,this.forceHeight=t.maxHeight||0,this.lockHeight=t.lockHeight||!1,this.isItemMode=void 0!==t.itemMode&&t.itemMode,this.cn="",this.size=h.size,void 0!==t.p&&(this.size.p=t.p),void 0!==t.w&&(this.size.w=t.w),void 0!==t.h&&(this.size.h=t.h),void 0!==t.s&&(this.size.s=t.s),this.size.h=this.size.h<11?11:this.size.h,this.local=(new n).neg(),this.zone={x:0,y:0,w:this.size.w,h:0},this.mouse=(new n).neg(),this.h=0,this.sw=0,this.margin=this.colors.sy,this.marginDiv=h.isDivid(this.margin),this.isWithClose=void 0===t.close||t.close,this.bh=this.isWithClose?this.size.h:0,this.autoResize=void 0===t.autoResize||t.autoResize,this.isCenter=t.center||!1,this.cssGui=void 0!==t.css?t.css:this.isCenter?"":"right:10px;",this.isOpen=void 0===t.open||t.open,this.isDown=!1,this.isScroll=!1,this.uis=[],this.current=-1,this.proto=null,this.isEmpty=!0,this.decal=0,this.ratio=1,this.oy=0,this.isNewTarget=!1;let s=this.colors;this.content=h.dom("div",this.css.basic+" width:0px; height:auto; top:0px; background:"+s.content+"; "+this.cssGui),this.innerContent=h.dom("div",this.css.basic+"width:100%; top:0; left:0; height:auto; overflow:hidden;"),this.content.appendChild(this.innerContent),this.useFlex=!0;let e=this.useFlex?"display:flex; flex-flow: row wrap;":"";this.inner=h.dom("div",this.css.basic+e+"width:100%; left:0; "),this.innerContent.appendChild(this.inner),this.scrollBG=h.dom("div",this.css.basic+"right:0; top:0; width:"+(this.size.s-1)+"px; height:10px; display:none; background:"+s.background+";"),this.content.appendChild(this.scrollBG),this.scroll=h.dom("div",this.css.basic+"background:"+s.button+"; right:2px; top:0; width:"+(this.size.s-4)+"px; height:10px;"),this.scrollBG.appendChild(this.scroll),this.bottomText=t.bottomText||["open","close"];let o=s.radius;this.bottom=h.dom("div",this.css.txt+"width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:"+o+"px; border-bottom-left-radius:"+o+"px; justify-content:center; height:"+this.bh+"px; line-height:"+(this.bh-5)+"px; color:"+s.text+";"),this.content.appendChild(this.bottom),this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.bottom.style.background=s.background,this.parent=void 0!==t.parent?t.parent:null,this.parent=void 0!==t.target?t.target:this.parent,null!==this.parent||this.isCanvas||(this.parent=document.body),null!==this.parent&&this.parent.appendChild(this.content),this.isCanvas&&null===this.parent&&(this.isCanvasOnly=!0),this.isCanvasOnly?(this.content.style.left="0px",this.content.style.right="auto",t.transition=0):this.content.style.pointerEvents="auto",this.transition=void 0!==t.transition?t.transition:h.transition,this.transition&&setTimeout(this.addTransition.bind(this),1e3),this.setWidth(),this.isCanvas&&this.makeCanvas(),i.add(this)}triggerMouseDown(t,s){i.handleEvent({type:"pointerdown",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}triggerMouseMove(){i.handleEvent({type:"pointermove",clientX:-1,clientY:-1,delta:0,key:null,keyCode:NaN})}triggerMouseUp(t,s){i.handleEvent({type:"pointerup",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}setTop(t,s){this.content.style.top=t+"px",void 0!==s&&(this.forceHeight=s),this.calc(),i.needReZone=!0}addTransition(){this.transition&&!this.isCanvas&&(this.innerContent.style.transition="height "+this.transition+"s ease-out",this.content.style.transition="height "+this.transition+"s ease-out",this.bottom.style.transition="top "+this.transition+"s ease-out");let t=this.uis.length;for(;t--;)this.uis[t].addTransition()}onDraw(){}makeCanvas(){this.canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),this.canvas.width=this.zone.w,this.canvas.height=this.forceHeight?this.forceHeight:this.zone.h}draw(t){if(null===this.canvas)return;let s=this.zone.w,e=this.forceHeight?this.forceHeight:this.zone.h;i.toCanvas(this,s,e,t)}getDom(){return this.content}noMouse(){this.mouse.neg()}setMouse(t,s=!0){s?this.mouse.set(Math.round(t.x*this.canvas.width),this.canvas.height-Math.round(t.y*this.canvas.height)):this.mouse.set(Math.round(t.x*this.canvas.width),Math.round(t.y*this.canvas.height))}setConfig(t){h.setText(),this.colors=h.defineColor(t)}setColors(t){for(let s in t)this.colors[s]&&(this.colors[s]=t[s])}setText(t,s,i,e){h.setText(t,s,i,e)}hide(t){this.content.style.visibility=t?"hidden":"visible"}display(t=!1){this.content.style.visibility=t?"visible":"hidden"}onChange(t){return this.callback=t||null,this}mode(t){let s=!1,e=this.colors;if(t!==this.cn){switch(this.cn=t,t){case"def":i.cursor(),this.scroll.style.background=e.button,this.bottom.style.background=e.background,this.bottom.style.color=e.text;break;case"scrollOver":i.cursor("ns-resize"),this.scroll.style.background=e.select;break;case"scrollDown":this.scroll.style.background=e.select;break;case"bottomOver":i.cursor("pointer"),this.bottom.style.background=e.backgroundOver,this.bottom.style.color=e.textOver}s=!0}return s}clearTarget(){return-1!==this.current&&(this.proto.s&&(this.proto.uiout(),this.proto.reset()),this.proto=null,this.current=-1,i.cursor(),!0)}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";this.isReset=!1;let i="",e=this.isScroll?this.zone.w-this.size.s:this.zone.w;return i=s.y>this.zone.h-this.bh&&s.ye?"scroll":"content",i}handleEvent(t){let s=t.type,e=!1,h=!1,o=this.testZone(t);if("mouseup"===s&&this.isDown&&(this.isDown=!1),"mousedown"!==s||this.isDown||(this.isDown=!0),this.isDown&&this.isNewTarget&&(i.clearInput(),this.isNewTarget=!1),o){switch(o){case"content":t.clientY=this.isScroll?t.clientY+this.decal:t.clientY,i.isMobile&&"mousedown"===s&&this.getNext(t,e),this.proto&&(h=this.proto.handleEvent(t)),"mousemove"===s&&(e=this.mode("def")),"wheel"===s&&!h&&this.isScroll&&(e=this.onWheel(t)),i.lock||this.getNext(t,e);break;case"bottom":this.clearTarget(),"mousemove"===s&&(e=this.mode("bottomOver")),"mousedown"===s&&(this.isOpen=!this.isOpen,this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.calc(),this.mode("def"),e=!0);break;case"scroll":this.clearTarget(),"mousemove"===s&&(e=this.mode("scrollOver")),"mousedown"===s&&(e=this.mode("scrollDown")),"wheel"===s&&(e=this.onWheel(t)),this.isDown&&this.update(t.clientY-this.zone.y-.5*this.sh)}this.isDown&&(e=!0),h&&(e=!0),"keyup"===s&&(e=!0),"keydown"===s&&(e=!0),e&&this.draw()}}getNext(t,s){let e=i.findTarget(this.uis,t);e!==this.current&&(this.clearTarget(),this.current=e,this.isNewTarget=!0),-1!==e&&(this.proto=this.uis[this.current],this.proto.uiover())}onWheel(t){return this.oy+=20*t.delta,this.update(this.oy),!0}reset(t){if(this.isReset)return;this.mouse.neg(),this.isDown=!1;let s=this.mode("def"),i=this.clearTarget();(s||i)&&this.draw(!0),this.isReset=!0}add(){let t=arguments,s=!1;"object"==typeof t[1]?(t[1].isUI=!0,t[1].main=this,s=!!t[1].ontop&&t[1].ontop):"string"==typeof t[1]&&(void 0===t[2]?[].push.call(t,{isUI:!0,main:this}):(t[2].isUI=!0,t[2].main=this,s=!!t[2].ontop&&t[2].ontop));let i=T.apply(this,t);if(null!==i)return s?this.uis.unshift(i):this.uis.push(i),this.calc(),this.isEmpty=!1,i}remove(t){t.dispose&&t.dispose()}clearOne(t){let s=this.uis.indexOf(t);-1!==s&&(this.inner.removeChild(this.uis[s].c[0]),this.uis.splice(s,1),this.calc())}empty(){let t,s=this.uis.length;for(;s--;)t=this.uis.pop(),this.inner.removeChild(t.c[0]),t.dispose();this.uis=[],this.isEmpty=!0,this.calc()}clear(){this.empty()}clear2(){setTimeout(this.empty.bind(this),0)}dispose(){this.clear(),null!==this.parent&&this.parent.removeChild(this.content),i.remove(this)}resetItem(){if(!this.isItemMode)return;let t=this.uis.length;for(;t--;)this.uis[t].selected()}setItem(t){if(!this.isItemMode)return;if(t=t||"",this.resetItem(),!t)return void this.update(0);let s=this.uis.length;for(;s--;)this.uis[s].value===t&&(this.uis[s].selected(!0),this.isScroll&&this.update(s*(this.uis[s].h+this.margin)*this.ratio))}upScroll(t){this.sw=t?this.size.s:0,this.oy=t?this.oy:0,this.scrollBG.style.display=t?"block":"none",t&&(this.total=this.h,this.maxView=this.maxHeight,this.ratio=this.maxView/this.total,this.sh=this.maxView*this.ratio,this.range=this.maxView-this.sh,this.oy=h.clamp(this.oy,0,this.range),this.scrollBG.style.height=this.maxView+"px",this.scroll.style.height=this.sh+"px"),this.setItemWidth(this.zone.w-this.sw),this.update(this.oy)}update(t){t=h.clamp(t,0,this.range),this.decal=Math.floor(t/this.ratio),this.inner.style.top=-this.decal+"px",this.scroll.style.top=Math.floor(t)+"px",this.oy=t}calcUis(){return i.calcUis(this.uis,this.zone,this.zone.y)}calc(){clearTimeout(this.tmp),this.tmp=setTimeout(this.setHeight.bind(this),10)}setHeight(){if(this.tmp&&clearTimeout(this.tmp),this.zone.h=this.bh,this.isScroll=!1,this.isOpen){this.h=this.calcUis();let t=this.forceHeight?this.forceHeight+this.zone.y:window.innerHeight;this.maxHeight=t-this.zone.y-this.bh,this.h-this.maxHeight>1?(this.isScroll=!0,this.zone.h=this.maxHeight+this.bh):this.zone.h=this.h+this.bh}this.upScroll(this.isScroll),this.innerContent.style.height=this.zone.h-this.bh+"px",this.content.style.height=this.zone.h+"px",this.bottom.style.top=this.zone.h-this.bh+"px",this.forceHeight&&this.lockHeight&&(this.content.style.height=this.forceHeight+"px"),this.isCanvas&&this.draw(!0)}rezone(){i.needReZone=!0}setWidth(t){t&&(this.zone.w=t),this.zone.w=Math.floor(this.zone.w),this.content.style.width=this.zone.w+"px",this.isCenter&&(this.content.style.marginLeft=-Math.floor(.5*this.zone.w)+"px"),this.setItemWidth(this.zone.w-this.sw)}setItemWidth(t){let s=this.uis.length;for(;s--;)this.uis[s].setSize(t),this.uis[s].rSize()}},t.REVISION="4.3.0",t.Tools=h,t.add=T,Object.defineProperty(t,"__esModule",{value:!0})})); diff --git a/build/uil.module.js b/build/uil.module.js index 2125e8b..c2d2ad8 100644 --- a/build/uil.module.js +++ b/build/uil.module.js @@ -1,9055 +1,6 @@ -/** - * @author lth / https://github.com/lo-th - */ - -const REVISION = "4.3.0"; - -// INTENAL FUNCTION - -const R = { - ui: [], - - dom: null, - - ID: null, - lock: false, - wlock: false, - current: -1, - - needReZone: true, - needResize: false, - forceZone: false, - isEventsInit: false, - isLeave: false, - addDOMEventListeners: true, - - downTime: 0, - prevTime: 0, - - //prevDefault: ['contextmenu', 'wheel'], - prevDefault: ["contextmenu"], - pointerEvent: ["pointerdown", "pointermove", "pointerup"], - eventOut: ["pointercancel", "pointerout", "pointerleave"], - - xmlserializer: null, - tmpTime: null, - tmpImage: null, - - oldCursor: "auto", - - input: null, - parent: null, - firstImput: true, - - hiddenImput: null, - hiddenSizer: null, - hasFocus: false, - startInput: false, - inputRange: [0, 0], - cursorId: 0, - str: "", - pos: 0, - startX: -1, - moveX: -1, - - debugInput: false, - - isLoop: false, - listens: [], - - e: { - type: null, - clientX: 0, - clientY: 0, - keyCode: NaN, - key: null, - delta: 0, - }, - - isMobile: false, - - now: null, - needsUpdate: false, - - getTime: function () { - return self.performance && self.performance.now - ? self.performance.now.bind(performance) - : Date.now; - }, - - add: function (o) { - // R.ui[0] is de GUI object that is added first by the constructor - R.ui.push(o); - R.getZone(o); - - if (!R.isEventsInit) R.initEvents(); - }, - - testMobile: function () { - let n = navigator.userAgent; - if ( - n.match(/Android/i) || - n.match(/webOS/i) || - n.match(/iPhone/i) || - n.match(/iPad/i) || - n.match(/iPod/i) || - n.match(/BlackBerry/i) || - n.match(/Windows Phone/i) - ) - return true; - else return false; - }, - - remove: function (o) { - let i = R.ui.indexOf(o); - - if (i !== -1) { - R.removeListen(o); - R.ui.splice(i, 1); - } - - if (R.ui.length === 0) { - R.removeEvents(); - } - }, - - // ---------------------- - // EVENTS - // ---------------------- - - initEvents: function () { - if (R.isEventsInit) return; - - let dom = document.body; - - R.isMobile = R.testMobile(); - R.now = R.getTime(); - - if (!R.isMobile) { - dom.addEventListener("wheel", R, { passive: false }); - } else { - dom.style.touchAction = "none"; - } - - console.log("R.addDOMEventListeners " + R.addDOMEventListeners); - if (R.addDOMEventListeners) { - dom.addEventListener("pointercancel", R); - dom.addEventListener("pointerleave", R); - //dom.addEventListener( 'pointerout', R ) - - dom.addEventListener("pointermove", R); - dom.addEventListener("pointerdown", R); - dom.addEventListener("pointerup", R); - - dom.addEventListener("keydown", R, false); - dom.addEventListener("keyup", R, false); - } - window.addEventListener("resize", R.resize, false); - - //window.onblur = R.out; - //window.onfocus = R.in; - - R.isEventsInit = true; - R.dom = dom; - }, - - removeEvents: function () { - if (!R.isEventsInit) return; - - let dom = document.body; - - if (!R.isMobile) { - dom.removeEventListener("wheel", R); - } - - if (R.addDOMEventListeners) { - dom.removeEventListener("pointercancel", R); - dom.removeEventListener("pointerleave", R); - //dom.removeEventListener( 'pointerout', R ); - - dom.removeEventListener("pointermove", R); - dom.removeEventListener("pointerdown", R); - dom.removeEventListener("pointerup", R); - - dom.removeEventListener("keydown", R); - dom.removeEventListener("keyup", R); - } - window.removeEventListener("resize", R.resize); - - R.isEventsInit = false; - }, - - resize: function () { - let i = R.ui.length, - u; - - while (i--) { - u = R.ui[i]; - if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); - } - - R.needReZone = true; - R.needResize = false; - }, - - out: function () { - console.log("im am out"); - R.clearOldID(); - }, - - in: function () { - console.log("im am in"); - // R.clearOldID(); - }, - - // ---------------------- - // HANDLE EVENTS - // ---------------------- - - fakeUp: function () { - this.handleEvent({ type: "pointerup" }); - }, - - handleEvent: function (event) { - //console.log("Roots.handleEvent "+event.type) - //if(!event.type) return; - - if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); - - if (R.needResize) R.resize(); - - R.findZone(R.forceZone); - - let e = R.e; - let leave = false; - - if (event.type === "keydown") R.keydown(event); - if (event.type === "keyup") R.keyup(event); - - if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; - else e.delta = 0; - - let ptype = event.pointerType; // mouse, pen, touch - - e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; - e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; - - e.type = event.type; - - if (R.eventOut.indexOf(event.type) !== -1) { - leave = true; - e.type = "mouseup"; - } - - if (event.type === "pointerleave") R.isLeave = true; - - if (event.type === "pointerdown") e.type = "mousedown"; - if (event.type === "pointerup") e.type = "mouseup"; - if (event.type === "pointermove") { - if (R.isLeave) { - // if user resize outside this document - R.isLeave = false; - R.resize(); - } - e.type = "mousemove"; - } - - // double click test - if (e.type === "mousedown") { - R.downTime = R.now(); - let time = R.downTime - R.prevTime; - - // double click on imput - if (time < 200) { - R.selectAll(); - return false; - } - - R.prevTime = R.downTime; - R.forceZone = false; - } - - // for imput - if (e.type === "mousedown") R.clearInput(); - - // mouse lock - if (e.type === "mousedown") R.lock = true; - if (e.type === "mouseup") R.lock = false; - - //if( R.current !== null && R.current.neverlock ) R.lock = false; - - /*if( e.type === 'mousedown' && event.button === 1){ - R.cursor() - e.preventDefault(); - e.stopPropagation(); - }*/ - - //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) - - if (R.isMobile && e.type === "mousedown") R.findID(e); - if (e.type === "mousemove" && !R.lock) R.findID(e); - - if (R.ID !== null) { - if (R.ID.isCanvasOnly) { - e.clientX = R.ID.mouse.x; - e.clientY = R.ID.mouse.y; - } - - //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 - - R.ID.handleEvent(e); - } - - if (R.isMobile && e.type === "mouseup") R.clearOldID(); - if (leave) R.clearOldID(); - }, - - // ---------------------- - // ID - // ---------------------- - - findID: function (e) { - let i = R.ui.length, - next = -1, - u, - x, - y; - - while (i--) { - u = R.ui[i]; - - if (u.isCanvasOnly) { - x = u.mouse.x; - y = u.mouse.y; - } else { - x = e.clientX; - y = e.clientY; - } - - if (R.onZone(u, x, y)) { - next = i; - - if (next !== R.current) { - R.clearOldID(); - R.current = next; - R.ID = u; - } - break; - } - } - - if (next === -1) R.clearOldID(); - }, - - clearOldID: function () { - if (!R.ID) return; - R.current = -1; - R.ID.reset(); - R.ID = null; - R.cursor(); - }, - - // ---------------------- - // GUI / GROUP FUNCTION - // ---------------------- - - calcUis: (uis, zone, py, group = false) => { - //console.log('calc_uis') - - let i = uis.length, - u, - px = 0, - n = 0, - tw, - m; - - let height = 0; - - while (i--) { - u = uis[n]; - n++; - - if (!group && u.isGroup) u.calcUis(); - - m = u.margin; - //div = u.marginDiv - - u.zone.w = u.w; - u.zone.h = u.h + m; - - if (!u.autoWidth) { - if (px === 0) height += u.h + m; - - u.zone.x = zone.x + px; - u.zone.y = py; // + u.mtop - //if(div) u.zone.y += m * 0.5 - - tw = R.getWidth(u); - if (tw) u.zone.w = u.w = tw; - else if (u.fw) u.zone.w = u.w = u.fw; - - px += u.zone.w; - - if (px >= zone.w) { - py += u.h + m; - //if(div) py += m * 0.5 - px = 0; - } - } else { - px = 0; - - u.zone.x = zone.x + u.dx; - u.zone.y = py; - py += u.h + m; - - height += u.h + m; - } - } - - return height; - }, - - findTarget: function (uis, e) { - let i = uis.length; - - while (i--) { - if (R.onZone(uis[i], e.clientX, e.clientY)) return i; - } - - return -1; - }, - - // ---------------------- - // ZONE - // ---------------------- - - findZone: function (force) { - if (!R.needReZone && !force) return; - - var i = R.ui.length, - u; - - while (i--) { - u = R.ui[i]; - R.getZone(u); - if (u.isGui) u.calcUis(); - } - - R.needReZone = false; - }, - - onZone: function (o, x, y) { - if (x === undefined || y === undefined) return false; - - let z = o.zone; - let mx = x - z.x; // - o.dx; - let my = y - z.y; - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 - //if( o.group !== null ) mx -= o.dx - - let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; - - //if( o.marginDiv ) my -= o.margin * 0.5 - - if (over) o.local.set(mx, my); - else o.local.neg(); - - return over; - }, - - getWidth: function (o) { - //return o.getDom().offsetWidth - return o.getDom().clientWidth; - - //let r = o.getDom().getBoundingClientRect(); - //return (r.width) - //return Math.floor(r.width) - }, - - getZone: function (o) { - if (o.isCanvasOnly) return; - let r = o.getDom().getBoundingClientRect(); - - //if( !r.width ) return - //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; - //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; - o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; - - //console.log(o.name, o.zone) - }, - - // ---------------------- - // CURSOR - // ---------------------- - - cursor: function (name) { - name = name ? name : "auto"; - if (name !== R.oldCursor) { - document.body.style.cursor = name; - R.oldCursor = name; - } - }, - - // ---------------------- - // CANVAS - // ---------------------- - - toCanvas: function (o, w, h, force) { - if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); - - // prevent exesive redraw - - if (force && R.tmpTime !== null) { - clearTimeout(R.tmpTime); - R.tmpTime = null; - } - - if (R.tmpTime !== null) return; - - if (R.lock) - R.tmpTime = setTimeout(function () { - R.tmpTime = null; - }, 10); - - /// - - let isNewSize = false; - if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; - - if (R.tmpImage === null) R.tmpImage = new Image(); - - let img = R.tmpImage; //new Image(); - - let htmlString = R.xmlserializer.serializeToString(o.content); - - let svg = - '' + - htmlString + - ""; - - img.onload = function () { - let ctx = o.canvas.getContext("2d"); - - if (isNewSize) { - o.canvas.width = w; - o.canvas.height = h; - } else { - ctx.clearRect(0, 0, w, h); - } - ctx.drawImage(this, 0, 0); - - o.onDraw(); - }; - - img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); - //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); - img.crossOrigin = ""; - R.needsUpdate = false; - }, - - // ---------------------- - // INPUT - // ---------------------- - - setHidden: function () { - if (R.hiddenImput === null) { - //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' - //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' - //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; - - R.hiddenImput = document.createElement("input"); - R.hiddenImput.type = "text"; - //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); - - R.hiddenSizer = document.createElement("div"); - //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; - - document.body.appendChild(R.hiddenImput); - document.body.appendChild(R.hiddenSizer); - } - - let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; - let css = - R.parent.css.txtselect + - "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + - hide; - R.hiddenImput.style.cssText = - css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); - R.hiddenSizer.style.cssText = css + "bottom:40px;"; - - R.hiddenImput.style.width = R.input.clientWidth + "px"; - R.hiddenImput.value = R.str; - R.hiddenSizer.innerHTML = R.str; - - R.hasFocus = true; - }, - - clearHidden: function (p) { - if (R.hiddenImput === null) return; - R.hasFocus = false; - }, - - clickPos: function (x) { - let i = R.str.length, - l = 0, - n = 0; - while (i--) { - l += R.textWidth(R.str[n]); - if (l >= x) break; - n++; - } - return n; - }, - - upInput: function (x, down) { - if (R.parent === null) return false; - - let up = false; - - if (down) { - let id = R.clickPos(x); - - R.moveX = id; - - if (R.startX === -1) { - R.startX = id; - R.cursorId = id; - R.inputRange = [R.startX, R.startX]; - } else { - let isSelection = R.moveX !== R.startX; - - if (isSelection) { - if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; - else R.inputRange = [R.startX, R.moveX]; - } - } - - up = true; - } else { - if (R.startX !== -1) { - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.startX = -1; - - up = true; - } - } - - if (up) R.selectParent(); - - return up; - }, - - selectAll: function () { - if (!R.parent) return; - - R.str = R.input.textContent; - R.inputRange = [0, R.str.length]; - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.cursorId = R.inputRange[1]; - R.selectParent(); - }, - - selectParent: function () { - var c = R.textWidth(R.str.substring(0, R.cursorId)); - var e = R.textWidth(R.str.substring(0, R.inputRange[0])); - var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); - - R.parent.select(c, e, s, R.hiddenSizer.innerHTML); - }, - - textWidth: function (text) { - if (R.hiddenSizer === null) return 0; - text = text.replace(/ /g, " "); - R.hiddenSizer.innerHTML = text; - return R.hiddenSizer.clientWidth; - }, - - clearInput: function () { - if (R.parent === null) return; - if (!R.firstImput) R.parent.validate(true); - - R.clearHidden(); - R.parent.unselect(); - - //R.input.style.background = 'none'; - R.input.style.background = R.parent.colors.back; - R.input.style.borderColor = R.parent.colors.border; - //R.input.style.color = R.parent.colors.text; - R.parent.isEdit = false; - - R.input = null; - R.parent = null; - (R.str = ""), (R.firstImput = true); - }, - - setInput: function (Input, parent) { - R.clearInput(); - - R.input = Input; - R.parent = parent; - - R.input.style.background = R.parent.colors.backoff; - R.input.style.borderColor = R.parent.colors.select; - //R.input.style.color = R.parent.colors.textSelect; - R.str = R.input.textContent; - - R.setHidden(); - }, - - keydown: function (e) { - if (R.parent === null) return; - - let keyCode = e.which; - e.shiftKey; - - //console.log( keyCode ) - - R.firstImput = false; - - if (R.hasFocus) { - // hack to fix touch event bug in iOS Safari - window.focus(); - R.hiddenImput.focus(); - } - - R.parent.isEdit = true; - - // e.preventDefault(); - - // add support for Ctrl/Cmd+A selection - //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { - //R.selectText(); - //e.preventDefault(); - //return self.render(); - //} - - if (keyCode === 13) { - //enter - - R.clearInput(); - - //} else if( keyCode === 9 ){ //tab key - - // R.input.textContent = ''; - } else { - if (R.input.isNum) { - if ( - (e.keyCode > 47 && e.keyCode < 58) || - (e.keyCode > 95 && e.keyCode < 106) || - e.keyCode === 190 || - e.keyCode === 110 || - e.keyCode === 8 || - e.keyCode === 109 - ) { - R.hiddenImput.readOnly = false; - } else { - R.hiddenImput.readOnly = true; - } - } else { - R.hiddenImput.readOnly = false; - } - } - }, - - keyup: function (e) { - if (R.parent === null) return; - - R.str = R.hiddenImput.value; - - if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value - else R.input.textContent = R.str; - - R.cursorId = R.hiddenImput.selectionStart; - R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; - - R.selectParent(); - - //if( R.parent.allway ) - R.parent.validate(); - }, - - // ---------------------- - // - // LISTENING - // - // ---------------------- - - loop: function () { - // modified by Fedemarino - if (R.isLoop) requestAnimationFrame(R.loop); - R.needsUpdate = R.update(); - // if there is a change in a value generated externally, the GUI needs to be redrawn - if (R.ui[0]) R.ui[0].draw(); - }, - - update: function () { - // modified by Fedemarino - let i = R.listens.length; - let needsUpdate = false; - while (i--) { - //check if the value of the object has changed - let hasChanged = R.listens[i].listening(); - if (hasChanged) needsUpdate = true; - } - return needsUpdate; - }, - - removeListen: function (proto) { - let id = R.listens.indexOf(proto); - if (id !== -1) R.listens.splice(id, 1); - if (R.listens.length === 0) R.isLoop = false; - }, - - addListen: function (proto) { - let id = R.listens.indexOf(proto); - - if (id !== -1) return false; - - R.listens.push(proto); - - if (!R.isLoop) { - R.isLoop = true; - R.loop(); - } - - return true; - }, -}; - -const Roots = R; - -/** - * @author lth / https://github.com/lo-th - */ - -const T = { - - transition: 0.2, - - frag: document.createDocumentFragment(), - - colorRing: null, - joystick_0: null, - joystick_1: null, - circular: null, - knob: null, - pad2d: null, - - svgns: "http://www.w3.org/2000/svg", - links: "http://www.w3.org/1999/xlink", - htmls: "http://www.w3.org/1999/xhtml", - - DOM_SIZE: [ 'height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], - SVG_TYPE_D: [ 'pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix' ], - SVG_TYPE_G: [ 'svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject' ], - - PI: Math.PI, - TwoPI: Math.PI*2, - pi90: Math.PI * 0.5, - pi60: Math.PI/3, - - torad: Math.PI / 180, - todeg: 180 / Math.PI, - - clamp: ( v, min, max ) => { - - v = v < min ? min : v; - v = v > max ? max : v; - return v; - - }, - - isDivid: ( v ) => ( v*0.5 === Math.floor(v*0.5) ), - - size: { w: 240, h: 20, p: 30, s: 8 }, - - // ---------------------- - // COLOR - // ---------------------- - - defineColor: ( o, cc = T.colors ) => { - - let color = { ...cc }; - - let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize' ]; - let changeText = false; - - if( o.font ) o.fontFamily = o.font; - if( o.shadow ) o.fontShadow = o.shadow; - if( o.weight ) o.fontWeight = o.weight; - - if( o.fontColor ) o.text = o.fontColor; - if( o.color ) o.text = o.color; - - if( o.text ){ - color.text = o.text; - if( !o.fontColor && !o.color ){ - color.title = T.ColorLuma( o.text, -0.25 ); - color.titleoff = T.ColorLuma( o.text, -0.5 ); - } - color.textOver = T.ColorLuma( o.text, 0.25 ); - color.textSelect = T.ColorLuma( o.text, 0.5 ); - } - - if( o.button ){ - color.button = o.button; - color.border = T.ColorLuma( o.button, 0.1 ); - color.overoff = T.ColorLuma( o.button, 0.2 ); - } - - if( o.select ){ - color.select = o.select; - color.over = T.ColorLuma( o.select, -0.1 ); - } - - if( o.itemBg ) o.back = o.itemBg; - - if( o.back ){ - color.back = o.back; - color.backoff = T.ColorLuma( o.back, -0.1 ); - } - - if( o.fontSelect ) color.textSelect = o.fontSelect; - if( o.groupBorder ) color.gborder = o.groupBorder; - - //if( o.transparent ) o.bg = 'none' - //if( o.bg ) color.background = color.backgroundOver = o.bg - if( o.bgOver ) color.backgroundOver = o.bgOver; - - for( let m in color ){ - if(o[m]!==undefined) color[m] = o[m]; - } - - for( let m in o ){ - if( textChange.indexOf(m) !== -1 ) changeText = true; - } - - if( changeText ) T.defineText( color ); - - return color - - }, - - colors: { - - sx: 4,//4 - sy: 2,//2 - radius:2, - - showOver : 1, - //groupOver : 1, - - content:'none', - background: 'rgba(50,50,50,0.15)', - backgroundOver: 'rgba(50,50,50,0.3)', - - title : '#CCC', - titleoff : '#BBB', - text : '#DDD', - textOver : '#EEE', - textSelect : '#FFF', - - back:'rgba(0,0,0,0.2)', - backoff:'rgba(0,0,0,0.3)', - - // input and button border - border : '#4c4c4c', - borderSize : 1, - - gborder : 'none', - groups : 'none', - - - button : '#3c3c3c', - overoff : '#5c5c5c', - over : '#024699', - select : '#308AFF', - action: '#FF3300', - - //fontFamily: 'Tahoma', - fontFamily: 'Consolas, monospace', - //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", - fontWeight: 'normal', - fontShadow: 'none',//'#000', - fontSize:12, - - joyOver:'rgba(48,138,255,0.25)', - joyOut: 'rgba(100,100,100,0.5)', - joySelect: '#308AFF', - - - hide: 'rgba(0,0,0,0)', - - }, - - // style css - - css : { - - basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', - button:'display:flex; align-items:center; justify-content:center; text-align:center;', - middle:'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' - }, - - // svg path - - svgs: { - - g1:'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', - g2:'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', - - group:'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', - arrow:'M 3 8 L 8 5 3 2 3 8 Z', - - arrowDown:'M 5 8 L 8 3 2 3 5 8 Z', - arrowUp:'M 5 2 L 2 7 8 7 5 2 Z', - - solid:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', - body:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', - vehicle:'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', - articulation:'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', - character:'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', - terrain:'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', - joint:'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', - ray:'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', - collision:'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', - map:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - material:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - texture:'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', - object:'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', - none:'M 9 5 L 5 5 5 9 9 9 9 5 Z', - cursor:'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', - load:'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', - save:'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', - extern:'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z', - - }, - - rezone () { - Roots.needReZone = true; - }, - - getImput: function(){ - - return Roots.input ? true : false - - }, - - setStyle : function ( data ){ - - for ( var o in data ){ - if( T.colors[o] ) T.colors[o] = data[o]; - } - - T.setText(); - - }, - - // ---------------------- - // custom text - // ---------------------- - - defineText: function( o ){ - - T.setText( o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight ); - - }, - - setText: function( size, color, font, shadow, weight ){ - - let cc = T.colors; - - if( font === undefined ) font = cc.fontFamily; - if( size === undefined ) size = cc.fontSize; - if( shadow === undefined ) shadow = cc.fontShadow; - if( weight === undefined ) weight = cc.fontWeight; - if( color === undefined ) color = cc.text; - - if( isNaN(size) ){ if( size.search('em')===-1 ) size += 'px';} - else size += 'px'; - - - //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' - - T.css.txt = T.css.basic + T.css.middle + ' font-family:'+ font +'; font-weight:'+weight+'; font-size:'+size+'; color:'+cc.text+'; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; - if( shadow !== 'none' ) T.css.txt += ' text-shadow: 1px 1px 1px '+shadow+';'; - - T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; - T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; - - }, - - - // note - - //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container - - /*cloneColor: function () { - - let cc = Object.assign({}, T.colors ); - return cc; - - },*/ - - // intern function - - cloneCss: function () { - - //let cc = Object.assign({}, T.css ); - return { ...T.css }; - - }, - - clone: function ( o ) { - - return o.cloneNode( true ); - - }, - - setSvg: function( dom, type, value, id, id2 ){ - - if( id === -1 ) dom.setAttributeNS( null, type, value ); - else if( id2 !== undefined ) dom.childNodes[ id || 0 ].childNodes[ id2 || 0 ].setAttributeNS( null, type, value ); - else dom.childNodes[ id || 0 ].setAttributeNS( null, type, value ); - - }, - - setCss: function( dom, css ){ - - for( let r in css ){ - if( T.DOM_SIZE.indexOf(r) !== -1 ) dom.style[r] = css[r] + 'px'; - else dom.style[r] = css[r]; - } - - }, - - set: function( g, o ){ - - for( let att in o ){ - if( att === 'txt' ) g.textContent = o[ att ]; - if( att === 'link' ) g.setAttributeNS( T.links, 'xlink:href', o[ att ] ); - else g.setAttributeNS( null, att, o[ att ] ); - } - - }, - - get: function( dom, id ){ - - if( id === undefined ) return dom; // root - else if( !isNaN( id ) ) return dom.childNodes[ id ]; // first child - else if( id instanceof Array ){ - if(id.length === 2) return dom.childNodes[ id[0] ].childNodes[ id[1] ]; - if(id.length === 3) return dom.childNodes[ id[0] ].childNodes[ id[1] ].childNodes[ id[2] ]; - } - - }, - - dom : function ( type, css, obj, dom, id ) { - - type = type || 'div'; - - if( T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1 ){ // is svg element - - if( type ==='svg' ){ - - dom = document.createElementNS( T.svgns, 'svg' ); - T.set( dom, obj ); - - /* } else if ( type === 'use' ) { - - dom = document.createElementNS( T.svgns, 'use' ); - T.set( dom, obj ); -*/ - } else { - // create new svg if not def - if( dom === undefined ) dom = document.createElementNS( T.svgns, 'svg' ); - T.addAttributes( dom, type, obj, id ); - - } - - } else { // is html element - - if( dom === undefined ) dom = document.createElementNS( T.htmls, type ); - else dom = dom.appendChild( document.createElementNS( T.htmls, type ) ); - - } - - if( css ) dom.style.cssText = css; - - if( id === undefined ) return dom; - else return dom.childNodes[ id || 0 ]; - - }, - - addAttributes : function( dom, type, o, id ){ - - let g = document.createElementNS( T.svgns, type ); - T.set( g, o ); - T.get( dom, id ).appendChild( g ); - if( T.SVG_TYPE_G.indexOf(type) !== -1 ) g.style.pointerEvents = 'none'; - return g; - - }, - - clear : function( dom ){ - - T.purge( dom ); - while (dom.firstChild) { - if ( dom.firstChild.firstChild ) T.clear( dom.firstChild ); - dom.removeChild( dom.firstChild ); - } - - }, - - purge : function ( dom ) { - - let a = dom.attributes, i, n; - if (a) { - i = a.length; - while(i--){ - n = a[i].name; - if (typeof dom[n] === 'function') dom[n] = null; - } - } - a = dom.childNodes; - if (a) { - i = a.length; - while(i--){ - T.purge( dom.childNodes[i] ); - } - } - - }, - - // ---------------------- - // SVG Effects function - // ---------------------- - - addSVGGlowEffect: function () { - - if ( document.getElementById( 'UILGlow') !== null ) return; - - let svgFilter = T.initUILEffects(); - - let filter = T.addAttributes( svgFilter, 'filter', { id: 'UILGlow', x: '-20%', y: '-20%', width: '140%', height: '140%' } ); - T.addAttributes( filter, 'feGaussianBlur', { in: 'SourceGraphic', stdDeviation: '3', result: 'uilBlur' } ); - let feMerge = T.addAttributes( filter, 'feMerge', { } ); - - for( let i = 0; i <= 3; i++ ) { - - T.addAttributes( feMerge, 'feMergeNode', { in: 'uilBlur' } ); - - } - - T.addAttributes( feMerge, 'feMergeNode', { in: 'SourceGraphic' } ); - - }, - - initUILEffects: function () { - - let svgFilter = document.getElementById( 'UILSVGEffects'); - - if ( svgFilter === null ) { - - svgFilter = T.dom( 'svg', undefined , { id: 'UILSVGEffects', width: '0', height: '0' } ); - document.body.appendChild( svgFilter ); - - } - - return svgFilter; - - }, - - // ---------------------- - // Color function - // ---------------------- - - ColorLuma : function ( hex, l ) { - - //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; - - if( hex === 'n' ) hex = '#000'; - - // validate hex string - hex = String(hex).replace(/[^0-9a-f]/gi, ''); - if (hex.length < 6) { - hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; - } - l = l || 0; - - // convert to decimal and change luminosity - let rgb = "#", c, i; - for (i = 0; i < 3; i++) { - c = parseInt(hex.substr(i*2,2), 16); - c = Math.round(Math.min(Math.max(0, c + (c * l)), 255)).toString(16); - rgb += ("00"+c).substr(c.length); - } - - return rgb; - - }, - - findDeepInver: function ( c ) { - - return (c[0] * 0.3 + c[1] * .59 + c[2] * .11) <= 0.6; - - }, - - lerpColor: function( c1, c2, factor ) { - let newColor = {}; - for ( let i = 0; i < 3; i++ ) { - newColor[i] = c1[ i ] + ( c2[ i ] - c1[ i ] ) * factor; - } - return newColor; - }, - - hexToHtml: function ( v ) { - v = v === undefined ? 0x000000 : v; - return "#" + ("000000" + v.toString(16)).substr(-6); - - }, - - htmlToHex: function ( v ) { - - return v.toUpperCase().replace("#", "0x"); - - }, - - u255: function (c, i) { - - return parseInt(c.substring(i, i + 2), 16) / 255; - - }, - - u16: function ( c, i ) { - - return parseInt(c.substring(i, i + 1), 16) / 15; - - }, - - unpack: function( c ){ - - if (c.length == 7) return [ T.u255(c, 1), T.u255(c, 3), T.u255(c, 5) ]; - else if (c.length == 4) return [ T.u16(c,1), T.u16(c,2), T.u16(c,3) ]; - - }, - - p255: function ( c ) { - let h = Math.round( ( c * 255 ) ).toString( 16 ); - if ( h.length < 2 ) h = '0' + h; - return h; - }, - - pack: function ( c ) { - - return '#' + T.p255( c[ 0 ] ) + T.p255( c[ 1 ] ) + T.p255( c[ 2 ] ); - - }, - - htmlRgb: function( c ){ - - return 'rgb(' + Math.round(c[0] * 255) + ','+ Math.round(c[1] * 255) + ','+ Math.round(c[2] * 255) + ')'; - - }, - - pad: function( n ){ - if(n.length == 1)n = '0' + n; - return n; - }, - - rgbToHex : function( c ){ - - let r = Math.round(c[0] * 255).toString(16); - let g = Math.round(c[1] * 255).toString(16); - let b = Math.round(c[2] * 255).toString(16); - return '#' + T.pad(r) + T.pad(g) + T.pad(b); - - // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); - - }, - - hueToRgb: function( p, q, t ){ - - if ( t < 0 ) t += 1; - if ( t > 1 ) t -= 1; - if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; - if ( t < 1 / 2 ) return q; - if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); - return p; - - }, - - rgbToHsl: function ( c ) { - - let r = c[0], g = c[1], b = c[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h = 0, s = 0, l = (min + max) / 2; - if (l > 0 && l < 1) s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); - if (delta > 0) { - if (max == r && max != g) h += (g - b) / delta; - if (max == g && max != b) h += (2 + (b - r) / delta); - if (max == b && max != r) h += (4 + (r - g) / delta); - h /= 6; - } - return [ h, s, l ]; - - }, - - hslToRgb: function ( c ) { - - let p, q, h = c[0], s = c[1], l = c[2]; - - if ( s === 0 ) return [ l, l, l ]; - else { - q = l <= 0.5 ? l * (s + 1) : l + s - ( l * s ); - p = l * 2 - q; - return [ T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333) ]; - } - - }, - - // ---------------------- - // SVG MODEL - // ---------------------- - - makeGradiant: function ( type, settings, parent, colors ) { - - T.dom( type, null, settings, parent, 0 ); - - let n = parent.childNodes[0].childNodes.length - 1, c; - - for( let i = 0; i < colors.length; i++ ){ - - c = colors[i]; - //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); - T.dom( 'stop', null, { offset:c[0]+'%', 'stop-color':c[1], 'stop-opacity':c[2] }, parent, [0,n] ); - - } - - }, - - /*makeGraph: function () { - - let w = 128; - let radius = 34; - let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 - //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 - //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 - - //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 - //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 - T.graph = svg; - - },*/ - - makePad: function ( model ) { - - let ww = 256; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+ww+' '+ww, width:ww, height:ww, preserveAspectRatio:'none' } ); - let w = 200; - let d = (ww-w)*0.5, m = 20; - Tools.dom( 'rect', '', { x: d, y: d, width: w, height: w, fill:T.colors.back }, svg ); // 0 - Tools.dom( 'rect', '', { x: d+m*0.5, y: d+m*0.5, width: w - m , height: w - m, fill:T.colors.button }, svg ); // 1 - // Pointer - Tools.dom( 'line', '', { x1: d+(m*0.5), y1: ww *0.5, x2: d+(w-m*0.5), y2: ww * 0.5, stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 2 - Tools.dom( 'line', '', { x1: ww * 0.5, x2: ww * 0.5, y1: d+(m*0.5), y2: d+(w-m*0.5), stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 3 - Tools.dom( 'circle', '', { cx: ww * 0.5, cy: ww * 0.5, r:5, stroke: T.colors.text, 'stroke-width': 5, fill:'none' }, svg ); // 4 - T.pad2d = svg; - - }, - - makeKnob: function ( model ) { - - let w = 128; - let radius = 34; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'round' }, svg );//1 - T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.1)', 'stroke-width':7 , fill:'none'}, svg );//2 - T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 - T.knob = svg; - - }, - - makeCircular: function ( model ) { - - let w = 128; - let radius = 40; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'circle', '', { cx:64, cy:64, r:radius, stroke:'rgba(0,0,0,0.1)', 'stroke-width':10, fill:'none' }, svg );//0 - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':7, fill:'none', 'stroke-linecap':'butt' }, svg );//1 - T.circular = svg; - - }, - - makeJoystick: function ( model ) { - - //+' background:#f00;' - - let w = 128, ccc; - let radius = Math.floor((w-30)*0.5); - let innerRadius = Math.floor(radius*0.6); - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'defs', null, {}, svg ); - T.dom( 'g', null, {}, svg ); - - if( model === 0 ){ - - - - // gradian background - ccc = [ [40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'grad', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // gradian shadow - ccc = [ [60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'gradS', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // gradian stick - let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; - let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; - - ccc = [ [30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1] ]; - T.makeGradiant( 'radialGradient', { id:'gradIn', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - ccc = [ [30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1] ]; - T.makeGradiant( 'radialGradient', { id:'gradIn2', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // graph - - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'url(#grad)' }, svg );//2 - T.dom( 'circle', '', { cx:64+5, cy:64+10, r:innerRadius+10, fill:'url(#gradS)' }, svg );//3 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'url(#gradIn)' }, svg );//4 - - T.joystick_0 = svg; - - } else { - // gradian shadow - ccc = [ [69, 'rgb(0,0,0)', 0],[70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'gradX', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'none', stroke:'rgba(100,100,100,0.25)', 'stroke-width':'4' }, svg );//2 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius+14, fill:'url(#gradX)' }, svg );//3 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'none', stroke:'rgb(100,100,100)', 'stroke-width':'4' }, svg );//4 - - T.joystick_1 = svg; - } - - - - }, - - makeColorRing: function () { - - let w = 256; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'defs', null, {}, svg ); - T.dom( 'g', null, {}, svg ); - - let s = 30;//stroke - let r =( w-s )*0.5; - let mid = w*0.5; - let n = 24, nudge = 8 / r / n * Math.PI, a1 = 0; - let am, tan, d2, a2, ar, i, j, path, ccc; - let color = []; - - for ( i = 0; i <= n; ++i) { - - d2 = i / n; - a2 = d2 * T.TwoPI; - am = (a1 + a2) * 0.5; - tan = 1 / Math.cos((a2 - a1) * 0.5); - - ar = [ - Math.sin(a1), -Math.cos(a1), - Math.sin(am) * tan, -Math.cos(am) * tan, - Math.sin(a2), -Math.cos(a2) - ]; - - color[1] = T.rgbToHex( T.hslToRgb([d2, 1, 0.5]) ); - - if (i > 0) { - - j = 6; - while(j--){ - ar[j] = ((ar[j]*r)+mid).toFixed(2); - } - - path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; - - ccc = [ [0,color[0],1], [100,color[1],1] ]; - T.makeGradiant( 'linearGradient', { id:'G'+i, x1:ar[0], y1:ar[1], x2:ar[4], y2:ar[5], gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - T.dom( 'path', '', { d:path, 'stroke-width':s, stroke:'url(#G'+i+')', 'stroke-linecap':"butt" }, svg, 1 ); - - } - a1 = a2 - nudge; - color[0] = color[1]; - } - - let tw = 84.90; - - // black / white - ccc = [ [0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1] ]; - T.makeGradiant( 'linearGradient', { id:'GL0', x1:0, y1:mid-tw, x2:0, y2:mid+tw, gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - ccc = [ [0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0] ]; - T.makeGradiant( 'linearGradient', { id:'GL1', x1:mid-49.05, y1:0, x2:mid+98, y2:0, gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - T.dom( 'g', null, { 'transform-origin': '128px 128px', 'transform':'rotate(0)' }, svg );//2 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'red' }, svg, 2 );// 2,0 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL1)','stroke-width':1, stroke:'url(#GL1)' }, svg, 2 );//2,1 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL0)','stroke-width':1, stroke:'url(#GL0)' }, svg, 2 );//2,2 - T.dom( 'path', '', { d:'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill:'none','stroke-width':2, stroke:'#000' }, svg, 2 );//2,3 - //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 - - T.dom( 'circle', '', { cx:128, cy:128, r:6, 'stroke-width':2, stroke:'#000', fill:'none' }, svg );//3 - - T.colorRing = svg; - - }, - - icon: function ( type, color, w ){ - - w = w || 40; - //color = color || '#DEDEDE'; - let viewBox = '0 0 256 256'; - //let viewBox = '0 0 '+ w +' '+ w; - let t = [""]; - switch(type){ - case 'logo': - t[1]=""; - break; - case 'donate': - t[1]=""; - break; - case 'neo': - t[1]=""; - break; - case 'phy': - t[1]=""; - break; - case 'config': - t[1]=""; - break; - case 'github': - t[1]=""; - break; - case 'save': - t[1]=""; - break; - } - t[2] = ""; - return t.join("\n"); - - }, - - logoFill_d:` - M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 - L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 - M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 - Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z - `, - - logo_github:` - M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 - 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 - 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 - 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 - 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z - `, - - logo_neo:` - M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 - 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 - 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 - 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L - 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z - `, - - logo_phy:` - M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 - Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 - `, - - logo_config:` - M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 - L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 - Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 - `, - - logo_donate:` - M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 - 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 - 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 - 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 - 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 - Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 - 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 - 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 - 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M - 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 - 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 - 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 - 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 - 200.9 187.5 200.9 187.5 195.35 Z - `, - -}; - -T.setText(); - -const Tools = T; - -///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile - - -class Files { - - //----------------------------- - // FILE TYPE - //----------------------------- - - static autoTypes( type ) { - - let t = []; - - switch( type ){ - case 'svg': - t = [ { accept: { 'image/svg+xml': '.svg'} }, ]; - break; - case 'wav': - t = [ { accept: { 'audio/wav': '.wav'} }, ]; - break; - case 'mp3': - t = [ { accept: { 'audio/mpeg': '.mp3'} }, ]; - break; - case 'mp4': - t = [ { accept: { 'video/mp4': '.mp4'} }, ]; - break; - case 'bin': case 'hex': - t = [ { description: 'Binary Files', accept: { 'application/octet-stream': ['.bin', '.hex'] } }, ]; - break; - case 'text': - t = [ { description: 'Text Files', accept: { 'text/plain': ['.txt', '.text'], 'text/html': ['.html', '.htm'] } }, ]; - break; - case 'json': - t = [ { description: 'JSON Files', accept: { 'application/json': ['.json'] } }, ];//text/plain - break; - case 'js': - t = [ { description: 'JavaScript Files', accept: { 'text/javascript': ['.js'] } }, ]; - break; - case 'image': - t = [ { description: 'Images', accept: { 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] } }, ]; - break; - case 'icon': - t = [ { description: 'Icons', accept: { 'image/x-ico': ['.ico'] } }, ]; - break; - case 'lut': - t = [ { description: 'Lut', accept: { 'text/plain': ['.cube', '.3dl'] } }, ]; - break; - - } - - return t - - } - - - //----------------------------- - // LOAD - //----------------------------- - - static async load( o = {} ) { - - if (typeof window.showOpenFilePicker !== 'function') { - window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; - } - - try { - - let type = o.type || ''; - - const options = { - excludeAcceptAllOption: type ? true : false, - multiple: false, - //startIn:'./assets' - }; - - options.types = Files.autoTypes( type ); - - // create a new handle - const handle = await window.showOpenFilePicker( options ); - const file = await handle[0].getFile(); - //let content = await file.text() - - if( !file ) return null - - let fname = file.name; - let ftype = fname.substring( fname.lastIndexOf('.')+1, fname.length ); - - const dataUrl = [ 'png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3' ]; - const dataBuf = [ 'sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf' ]; - const reader = new FileReader(); - - if( dataUrl.indexOf( ftype ) !== -1 ) reader.readAsDataURL( file ); - else if( dataBuf.indexOf( ftype ) !== -1 ) reader.readAsArrayBuffer( file ); - else reader.readAsText( file ); - - reader.onload = function(e) { - - let content = e.target.result; - - switch(type){ - case 'image': - let img = new Image; - img.onload = function() { - if( o.callback ) o.callback( img, fname, ftype ); - }; - img.src = content; - break; - case 'json': - if( o.callback ) o.callback( JSON.parse( content ), fname, ftype ); - break; - default: - if( o.callback ) o.callback( content, fname, ftype ); - break; - } - - }; - - } catch(e) { - - console.log(e); - if( o.always && o.callback ) o.callback( null ); - - } - - } - - static showOpenFilePickerPolyfill( options ) { - return new Promise((resolve) => { - const input = document.createElement("input"); - input.type = "file"; - input.multiple = options.multiple; - input.accept = options.types - .map((type) => type.accept) - .flatMap((inst) => Object.keys(inst).flatMap((key) => inst[key])) - .join(","); - - input.addEventListener("change", () => { - resolve( - [...input.files].map((file) => { - return { - getFile: async () => - new Promise((resolve) => { - resolve(file); - }), - }; - }) - ); - }); - - input.click(); - }) - } - - - //----------------------------- - // SAVE - //----------------------------- - - static async save( o = {} ) { - - let usePoly = false; - - if (typeof window.showSaveFilePicker !== 'function') { - window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; - usePoly = true; - } - - try { - - let type = o.type || ''; - - const options = { - suggestedName: o.name || 'hello', - data: o.data || '' - }; - - options.types = Files.autoTypes( type ); - options.finalType = Object.keys( options.types[0].accept )[0]; - options.suggestedName += options.types[0].accept[options.finalType][0]; - - - // create a new handle - const handle = await window.showSaveFilePicker( options ); - - if( usePoly ) return - - // create a FileSystemWritableFileStream to write to - const file = await handle.createWritable(); - - let blob = new Blob([ options.data ], { type: options.finalType }); - - // write our file - await file.write(blob); - - // close the file and write the contents to disk. - await file.close(); - - } catch(e) { - - console.log(e); - - } - - } - - static showSaveFilePickerPolyfill( options ) { - return new Promise((resolve) => { - const a = document.createElement("a"); - a.download = options.suggestedName || "my-file.txt"; - let blob = new Blob([ options.data ], { type:options.finalType }); - a.href = URL.createObjectURL( blob ); - - a.addEventListener("click", () => { - resolve( - setTimeout( () => URL.revokeObjectURL(a.href), 1000 ) - ); - }); - a.click(); - }) - } - - - //----------------------------- - // FOLDER not possible in poly - //----------------------------- - - static async getFolder() { - - try { - - const handle = await window.showDirectoryPicker(); - const files = []; - for await (const entry of handle.values()) { - const file = await entry.getFile(); - files.push(file); - } - - console.log(files); - return files; - - } catch(e) { - - console.log(e); - - } - - } - - - - - - - - - - -} - -class V2 { - - constructor( x = 0, y = 0 ) { - - this.x = x; - this.y = y; - - } - - set ( x, y ) { - - this.x = x; - this.y = y; - return this; - - } - - divide ( v ) { - - this.x /= v.x; - this.y /= v.y; - return this; - - } - - multiply ( v ) { - - this.x *= v.x; - this.y *= v.y; - return this; - - } - - multiplyScalar ( scalar ) { - - this.x *= scalar; - this.y *= scalar; - return this; - - } - - divideScalar ( scalar ) { - - return this.multiplyScalar( 1 / scalar ); - - } - - length () { - - return Math.sqrt( this.x * this.x + this.y * this.y ); - - } - - angle () { - - // computes the angle in radians with respect to the positive x-axis - - var angle = Math.atan2( this.y, this.x ); - - if ( angle < 0 ) angle += 2 * Math.PI; - - return angle; - - } - - addScalar ( s ) { - - this.x += s; - this.y += s; - return this; - - } - - negate () { - - this.x *= -1; - this.y *= -1; - return this; - - } - - neg () { - - this.x = -1; - this.y = -1; - return this; - - } - - isZero () { - - return ( this.x === 0 && this.y === 0 ); - - } - - copy ( v ) { - - this.x = v.x; - this.y = v.y; - - return this; - - } - - equals ( v ) { - - return ( ( v.x === this.x ) && ( v.y === this.y ) ); - - } - - nearEquals ( v, n ) { - - return ( ( v.x.toFixed(n) === this.x.toFixed(n) ) && ( v.y.toFixed(n) === this.y.toFixed(n) ) ); - - } - - lerp ( v, alpha ) { - - if( v === null ){ - this.x -= this.x * alpha; - this.y -= this.y * alpha; - } else { - this.x += ( v.x - this.x ) * alpha; - this.y += ( v.y - this.y ) * alpha; - } - - return this; - - } - -} - -/** - * @author lth / https://github.com/lo-th - */ - -class Proto { - constructor(o = {}) { - // disable mouse controle - this.lock = o.lock || false; - - // for button - this.neverlock = false; - - // only simple space - this.isSpace = o.isSpace || false; - - // if is on gui or group - this.main = o.main || null; - this.isUI = o.isUI || false; - this.group = o.group || null; - - this.isListen = false; - - this.top = 0; - this.ytop = 0; - - this.dx = o.dx || 0; - - this.isSelectable = o.selectable !== undefined ? o.selectable : false; - this.unselectable = - o.unselect !== undefined ? o.unselect : this.isSelectable; - - this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' - - this.css = this.main ? this.main.css : Tools.css; - - this.colors = Tools.defineColor( - o, - this.main - ? this.group - ? this.group.colors - : this.main.colors - : Tools.colors - ); - - this.overEffect = this.colors.showOver; - - this.svgs = Tools.svgs; - - this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; - this.local = new V2().neg(); - - this.isCanvasOnly = false; - this.isSelect = false; - - // percent of title - this.p = o.p !== undefined ? o.p : Tools.size.p; - - this.w = this.isUI ? this.main.size.w : Tools.size.w; - if (o.w !== undefined) this.w = o.w; - - this.h = this.isUI ? this.main.size.h : Tools.size.h; - if (o.h !== undefined) this.h = o.h; - if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; - else this.lock = true; - - // decale for canvas only - this.fw = o.fw || 0; - - this.autoWidth = o.auto || true; // auto width or flex - this.isOpen = false; //false// open statu - - // radius for toolbox - this.radius = o.radius || this.colors.radius; - - this.transition = o.transition || Tools.transition; - - // only for number - this.isNumber = false; - this.noNeg = o.noNeg || false; - this.allEqual = o.allEqual || false; - - // only most simple - this.mono = false; - - // stop listening for edit slide text - this.isEdit = false; - - // no title - this.simple = o.simple || false; - if (this.simple) this.sa = 0; - - // define obj size - this.setSize(this.w); - - // title size - if (o.sa !== undefined) this.sa = o.sa; - if (o.sb !== undefined) this.sb = o.sb; - if (this.simple) this.sb = this.w - this.sa; - - // last number size for slide - this.sc = o.sc === undefined ? 47 : o.sc; - - // for listening object - this.objectLink = null; - this.isSend = false; - this.objectKey = null; - - this.txt = o.name || ""; - this.name = o.rename || this.txt; - this.target = o.target || null; - - // callback - this.callback = o.callback === undefined ? null : o.callback; - this.endCallback = null; - this.openCallback = o.openCallback === undefined ? null : o.openCallback; - this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; - - // if no callback take one from group or gui - if (this.callback === null && this.isUI && this.main.callback !== null) { - this.callback = this.group ? this.group.callback : this.main.callback; - } - - // elements - this.c = []; - - // style - this.s = []; - - this.useFlex = this.isUI ? this.main.useFlex : false; - let flexible = this.useFlex - ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" - : "float:left;"; - - this.c[0] = Tools.dom( - "div", - this.css.basic + flexible + "position:relative; height:20px;" - ); - - this.s[0] = this.c[0].style; - - // bottom margin - this.margin = this.colors.sy; - this.mtop = 0; - let marginDiv = Tools.isDivid(this.margin); - - if (this.isUI && this.margin) { - this.s[0].boxSizing = "content-box"; - if (marginDiv) { - this.mtop = this.margin * 0.5; - //this.s[0].borderTop = '${this.mtop}px solid transparent' - //console.log(`${this.mtop}px solid transparent`) - this.s[0].borderTop = this.mtop + "px solid transparent"; - this.s[0].borderBottom = this.mtop + "px solid transparent"; - } else { - this.s[0].borderBottom = this.margin + "px solid transparent"; - } - } - - // with title - if (!this.simple) { - this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); - this.s[1] = this.c[1].style; - this.c[1].textContent = this.name; - this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; - } - - if (o.pos) { - this.s[0].position = "absolute"; - for (let p in o.pos) { - this.s[0][p] = o.pos[p]; - } - this.mono = true; - } - - if (o.css) this.s[0].cssText = o.css; - } - - // ---------------------- - // make the node - // ---------------------- - - init() { - this.ytop = this.top + this.mtop; - - this.zone.h = this.h + this.margin; - this.zone.w = this.w; - - let s = this.s; // style cache - let c = this.c; // div cach - - s[0].height = this.h + "px"; - - if (this.isUI) s[0].background = this.colors.background; - - if (!this.autoWidth && this.useFlex) { - s[0].flex = "1 0 auto"; - s[0].minWidth = this.minw + "px"; - s[0].textAlign = "center"; - } else { - if (this.isUI) s[0].width = "100%"; - } - - //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; - if (c[1] !== undefined && this.autoWidth) { - s[1] = c[1].style; - s[1].top = 1 + "px"; - s[1].height = this.h - 2 + "px"; - } - - let frag = Tools.frag; - - for (let i = 1, lng = c.length; i !== lng; i++) { - if (c[i] !== undefined) { - frag.appendChild(c[i]); - s[i] = c[i].style; - } - } - - let pp = - this.target !== null - ? this.target - : this.isUI - ? this.main.inner - : document.body; - - if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); - else pp.appendChild(c[0]); - - c[0].appendChild(frag); - - this.rSize(); - - // ! solo proto - if (!this.isUI) { - this.c[0].style.pointerEvents = "auto"; - Roots.add(this); - } - } - - addTransition() { - if (this.baseH && this.transition && this.isUI) { - this.c[0].style.transition = "height " + this.transition + "s ease-out"; - } - } - - // from Tools - - dom(type, css, obj, dom, id) { - return Tools.dom(type, css, obj, dom, id); - } - - setSvg(dom, type, value, id, id2) { - Tools.setSvg(dom, type, value, id, id2); - } - - setCss(dom, css) { - Tools.setCss(dom, css); - } - - clamp(value, min, max) { - return Tools.clamp(value, min, max); - } - - getColorRing() { - if (!Tools.colorRing) Tools.makeColorRing(); - return Tools.clone(Tools.colorRing); - } - - getJoystick(model) { - if (!Tools["joystick_" + model]) Tools.makeJoystick(model); - return Tools.clone(Tools["joystick_" + model]); - } - - getCircular(model) { - if (!Tools.circular) Tools.makeCircular(model); - return Tools.clone(Tools.circular); - } - - getKnob(model) { - if (!Tools.knob) Tools.makeKnob(model); - return Tools.clone(Tools.knob); - } - - getPad2d(model) { - if (!Tools.pad2d) Tools.makePad(model); - return Tools.clone(Tools.pad2d); - } - - // from Roots - - cursor(name) { - Roots.cursor(name); - } - - ///////// - - update() {} - - reset() {} - - ///////// - - content() { - return this.c[0]; - } - - getDom() { - return this.c[0]; - } - - uiout() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.background; - } - - uiover() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.backgroundOver; - } - - rename(s) { - if (this.c[1] !== undefined) this.c[1].textContent = s; - } - - listen() { - this.isListen = Roots.addListen(this); - return this; - } - - listening() { - // modified by Fedemarino - if (this.objectLink === null) return; - if (this.isSend) return; - if (this.isEdit) return; - // check if value has changed - let hasChanged = this.setValue(this.objectLink[this.objectKey]); - return hasChanged; - } - - setValue(v) { - const old = this.value; - if (this.isNumber) this.value = this.numValue(v); - //else if( v instanceof Array && v.length === 1 ) v = v[0]; - else this.value = v; - this.update(); - let hasChanged = false; - if (old !== this.value) { - hasChanged = true; - } - - return hasChanged; - } - - // ---------------------- - // update every change - // ---------------------- - - onChange(f) { - if (this.isSpace) return; - this.callback = f || null; - return this; - } - - // ---------------------- - // update only on end - // ---------------------- - - onFinishChange(f) { - if (this.isSpace) return; - this.callback = null; - this.endCallback = f; - return this; - } - - // ---------------------- - // event on open close - // ---------------------- - - onOpen(f) { - this.openCallback = f; - return this; - } - - onClose(f) { - this.closeCallback = f; - return this; - } - - // ---------------------- - // send back value - // ---------------------- - - send(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - - this.isSend = true; - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - if (this.callback) this.callback(v, this.objectKey); - this.isSend = false; - } - - sendEnd(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - - if (this.endCallback) this.endCallback(v); - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - } - - // ---------------------- - // clear node - // ---------------------- - - dispose() { - if (this.isListen) Roots.removeListen(this); - - Tools.clear(this.c[0]); - - if (this.target !== null) { - if (this.group !== null) this.group.clearOne(this); - else this.target.removeChild(this.c[0]); - } else { - if (this.isUI) this.main.clearOne(this); - else document.body.removeChild(this.c[0]); - } - - if (!this.isUI) Roots.remove(this); - - this.c = null; - this.s = null; - this.callback = null; - this.target = null; - this.isListen = false; - } - - clear() {} - - // ---------------------- - // change size - // ---------------------- - - getWidth() { - let nw = Roots.getWidth(this); - if (nw) this.w = nw; - } - - setSize(sx) { - if (!this.autoWidth) return; - - this.w = sx; - - if (this.simple) { - this.sb = this.w - this.sa; - } else { - let pp = this.w * (this.p / 100); - //this.sa = Math.floor( pp + 10 ) - //this.sb = Math.floor( this.w - pp - 20 ) - this.sa = Math.floor(pp + 8); - this.sb = Math.floor(this.w - pp - 16); - } - } - - rSize() { - if (!this.autoWidth) return; - if (!this.isUI) this.s[0].width = this.w + "px"; - if (!this.simple) this.s[1].width = this.sa + "px"; - } - - // ---------------------- - // for numeric value - // ---------------------- - - setTypeNumber(o) { - this.isNumber = true; - - this.value = 0; - if (o.value !== undefined) { - if (typeof o.value === "string") this.value = o.value * 1; - else this.value = o.value; - } - - this.min = o.min === undefined ? -Infinity : o.min; - this.max = o.max === undefined ? Infinity : o.max; - this.precision = o.precision === undefined ? 2 : o.precision; - - let s; - - switch (this.precision) { - case 0: - s = 1; - break; - case 1: - s = 0.1; - break; - case 2: - s = 0.01; - break; - case 3: - s = 0.001; - break; - case 4: - s = 0.0001; - break; - case 5: - s = 0.00001; - break; - case 6: - s = 0.000001; - break; - } - - this.step = o.step === undefined ? s : o.step; - this.range = this.max - this.min; - this.value = this.numValue(this.value); - } - - numValue(n) { - if (this.noNeg) n = Math.abs(n); - return ( - Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 - ); - } - - // ---------------------- - // EVENTS DEFAULT - // ---------------------- - - handleEvent(e) { - if (this.lock) return; - if (this.neverlock) Roots.lock = false; - if (!this[e.type]) - return console.error(e.type, "this type of event no existe !"); - - // TODO !!!! - - //if( this.marginDiv ) z.d -= this.margin * 0.5 - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 - - return this[e.type](e); - } - - wheel(e) { - return false; - } - mousedown(e) { - return false; - } - mousemove(e) { - return false; - } - mouseup(e) { - return false; - } - keydown(e) { - return false; - } - keyup(e) { - return false; - } - - // ---------------------- - // object referency - // ---------------------- - - setReferency(obj, key) { - this.objectLink = obj; - this.objectKey = key; - } - - display(v = false) { - this.s[0].visibility = v ? "visible" : "hidden"; - } - - // ---------------------- - // resize height - // ---------------------- - - open() { - if (this.isOpen) return; - this.isOpen = true; - Roots.needResize = true; - if (this.openCallback) this.openCallback(); - } - - close() { - if (!this.isOpen) return; - this.isOpen = false; - Roots.needResize = true; - if (this.closeCallback) this.closeCallback(); - } - - needZone() { - Roots.needReZone = true; - } - - rezone() { - Roots.needReZone = true; - } - - // ---------------------- - // INPUT - // ---------------------- - - select() {} - - unselect() {} - - setInput(Input) { - Roots.setInput(Input, this); - } - - upInput(x, down) { - return Roots.upInput(x, down); - } - - // ---------------------- - // special item - // ---------------------- - - selected(b) { - this.isSelect = b || false; - } -} - -class Bool extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || false; - this.model = o.mode !== undefined ? o.mode : 0; - - this.onName = o.rename || this.txt; - if( o.onName ) o.onname = o.onName; - if( o.onname ) this.onName = o.onname; - - this.inh = o.inh || Math.floor( this.h*0.8 ); - this.inw = o.inw || 36; - - let cc = this.colors; - - if( this.model === 0 ){ - let t = Math.floor(this.h*0.5)-((this.inh-2)*0.5); - this.c[2] = this.dom( 'div', this.css.basic + 'background:'+ cc.inputBg +'; height:'+(this.inh-2)+'px; width:'+this.inw+'px; top:'+t+'px; border-radius:10px; border:2px solid '+ cc.back ); - this.c[3] = this.dom( 'div', this.css.basic + 'height:'+(this.inh-6)+'px; width:16px; top:'+(t+2)+'px; border-radius:10px; background:'+ cc.button+';' ); - } else { - this.p = 0; - if( this.c[1] !== undefined ) this.c[1].textContent = ''; - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - } - - this.stat = -1; - - this.init(); - this.update(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown ( e ) { - - this.value = !this.value; - this.update( true ); - return this.mousemove( e ) - - } - - mousemove ( e ) { - - this.cursor('pointer'); - return this.mode( true ) - - } - - reset () { - - this.cursor(); - return this.mode() - - } - - // ---------------------- - // MODE - // ---------------------- - - mode ( over ) { - - let change = false; - let cc = this.colors, s = this.s, n, v = this.value; - - if( over ) n = v ? 4 : 3; - else n = v ? 2 : 1; - - if( this.stat !== n ){ - - this.stat = n; - - if( this.model !== 0 ){ - - switch( n ){ - - case 1: s[2].color = cc.text; s[2].background = cc.button; break; - case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; - case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; - case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; - - } - - this.c[2].innerHTML = v ? this.onName : this.name; - - } else { - - switch( n ){ - - case 1: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.button; break;// off out - case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break;// on over - case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break;// off over - case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break;// on out - - } - - s[3].marginLeft = v ? '17px' : '2px'; - this.c[1].textContent = v ? this.onName : this.name; - - } - - change = true; - - } - - return change - - } - - // ---------------------- - - update ( up ) { - - this.mode(); - if( up ) this.send(); - - } - - rSize () { - - super.rSize(); - - let s = this.s; - let w = (this.w - 10 ) - this.inw; - if( this.model === 0 ){ - s[2].left = w + 'px'; - s[3].left = w + 'px'; - } else { - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - } - - } - -} - -class Button extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = ''; - if( o.value !== undefined ) this.value = o.value; - - this.values = o.value || this.txt; - if( o.values ) this.values = o.values; - - if( !o.values && !o.value ) this.txt = ''; - - this.onName = o.onName || null; - - this.on = false; - - // force button width - this.bw = o.forceWidth || 0; - if(o.bw) this.bw = o.bw; - this.space = o.space || 3; - - if( typeof this.values === 'string' ) this.values = [ this.values ]; - - this.isDown = false; - this.neverlock = true; - this.res = 0; - - this.lng = this.values.length; - this.tmp = []; - this.stat = []; - - let sel, cc = this.colors; - - for( let i = 0; i < this.lng; i++ ){ - - sel = false; - if( this.values[i] === this.value && this.isSelectable ) sel = true; - - this.c[i+2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[i+2].style.background = sel ? cc.select : cc.button; - this.c[i+2].style.color = sel ? cc.textSelect : cc.text; - this.c[i+2].innerHTML = this.values[i]; - this.stat[i] = sel ? 3:1; - - } - - - if( this.txt==='' ) this.p = 0; - - if( (!o.value && !o.values) || this.p === 0 ){ - if( this.c[1] !== undefined ) this.c[1].textContent = ''; - } - - - this.init(); - - } - - onOff() { - - this.on = !this.on; - this.label( this.on ? this.onName : this.value ); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return -1 - - let i = this.lng; - let t = this.tmp; - - while( i-- ){ - if( l.x>t[i][0] && l.x 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.text; - this.setSvg( this.c[3], 'stroke', color, 1 ); - - break; - case 1: // down - - this.s[2].color = cc.textOver; - this.setSvg( this.c[3], 'stroke', cc.backoff, 0); - color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.textOver; - this.setSvg( this.c[3], 'stroke', color, 1 ); - - break; - } - - this.cmode = mode; - return true; - - } - - reset () { - - this.isDown = false; - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'circular'; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.sendEnd(); - return this.mode(0); - - } - - mousedown ( e ) { - - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove( e ); - return this.mode(1); - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - //console.log('over') - - let off = this.offset; - off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); - off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - this.r = off.angle() - this.pi90; - this.r = (((this.r%this.twoPi)+this.twoPi)%this.twoPi); - - if( this.oldr !== null ){ - - let dif = this.r - this.oldr; - this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; - - if( dif > 6 ) this.r = 0; - if( dif < -6 ) this.r = this.twoPi; - - } - - let steps = 1 / this.twoPi; - let value = this.r * steps; - - let n = ( ( this.range * value ) + this.min ) - this.old; - - if(n >= this.step || n <= this.step){ - n = ~~ ( n / this.step ); - this.value = this.numValue( this.old + ( n * this.step ) ); - this.update( true ); - this.old = this.value; - this.oldr = this.r; - } - - } - - wheel ( e ) { - - let name = this.testZone( e ); - - if( name === 'circular' ) { - - let v = this.value - this.step * e.delta; - - if ( v > this.max ) { - v = this.isCyclic ? this.min : this.max; - } else if ( v < this.min ) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue( v ); - this.old = v; - this.update( true ); - - return true; - - } - return false; - - } - - // ---------------------- - - makePath () { - - let r = 40; - let d = 24; - let a = this.percent * this.twoPi - 0.001; - let x2 = (r + r * Math.sin(a)) + d; - let y2 = (r - r * Math.cos(a)) + d; - let big = a > Math.PI ? 1 : 0; - return "M " + (r+d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; - - } - - update ( up ) { - - this.c[2].textContent = this.value; - this.percent = ( this.value - this.min ) / this.range; - - this.setSvg( this.c[3], 'd', this.makePath(), 1 ); - - if ( this.model > 0 ) { - - let cc = this.colors; - let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ); - this.setSvg( this.c[3], 'stroke', color, 1 ); - - } - - if( up ) this.send(); - - } - -} - -class Color extends Proto { - - constructor( o = {} ) { - - super( o ); - - //this.autoHeight = true; - - this.ctype = o.ctype || 'hex'; - - this.wfixe = 256; - - this.cw = this.sb > 256 ? 256 : this.sb; - if(o.cw != undefined ) this.cw = o.cw; - - - - // color up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - - this.baseH = this.h; - - this.offset = new V2(); - this.decal = new V2(); - this.pp = new V2(); - - let cc = this.colors; - - // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) - - this.c[2] = this.dom( 'div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};` ); - //this.s[2] = this.c[2].style; - - //this.s[2].textShadow = 'none' - - /*if( this.up ){ - this.s[2].top = 'auto'; - this.s[2].bottom = '2px'; - }*/ - - //this.c[0].style.textAlign = 'center'; - this.c[0].style.display = 'block'; - - this.c[3] = this.getColorRing(); - this.c[3].style.visibility = 'hidden'; - - this.hsl = null; - this.value = '#ffffff'; - if( o.value !== undefined ){ - if( o.value instanceof Array ) this.value = Tools.rgbToHex( o.value ); - else if(!isNaN(o.value)) this.value = Tools.hexToHtml( o.value ); - else this.value = o.value; - } - - this.bcolor = null; - this.isDown = false; - this.fistDown = false; - - this.notext = o.notext || false; - - this.tr = 98; - this.tsl = Math.sqrt(3) * this.tr; - - this.hue = 0; - this.d = 256; - - this.init(); - - this.setColor( this.value ); - - if( o.open !== undefined ) this.open(); - - } - - testZone ( mx, my ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - - if( this.up && this.isOpen ){ - - if( l.y > this.wfixe ) return 'title' - else return 'color' - - } else { - - if( l.y < this.baseH+2 ) return 'title' - else if( this.isOpen ) return 'color' - - } - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.d = 256; - - } - - mousedown ( e ) { - - - let name = this.testZone( e.clientX, e.clientY ); - - - //if( !name ) return; - if(name === 'title'){ - if( !this.isOpen ) this.open(); - else this.close(); - return true; - } - - - if( name === 'color' ){ - - this.isDown = true; - this.fistDown = true; - this.mousemove( e ); - } - } - - mousemove ( e ) { - - let name = this.testZone( e.clientX, e.clientY ); - - let off, d, hue, sat, lum, rad, x, y, rr, T = Tools; - - if( name === 'title' ) this.cursor('pointer'); - - if( name === 'color' ){ - - off = this.offset; - off.x = e.clientX - ( this.zone.x + this.decal.x + this.mid ); - off.y = e.clientY - ( this.zone.y + this.decal.y + this.mid ) - this.ytop; - d = off.length() * this.ratio; - rr = off.angle(); - if(rr < 0) rr += 2 * T.PI; - - - if ( d < 128 ) this.cursor('crosshair'); - else if( !this.isDown ) this.cursor(); - - if( this.isDown ){ - - if( this.fistDown ){ - this.d = d; - this.fistDown = false; - } - - if ( this.d < 128 ) { - - if ( this.d > this.tr ) { // outside hue - - hue = ( rr + T.pi90 ) / T.TwoPI; - this.hue = (hue + 1) % 1; - this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); - - } else { // triangle - - x = off.x * this.ratio; - y = off.y * this.ratio; - - let rr = (this.hue * T.TwoPI) + T.PI; - if(rr < 0) rr += 2 * T.PI; - - rad = Math.atan2(-y, x); - if(rad < 0) rad += 2 * T.PI; - - let rad0 = ( rad + T.pi90 + T.TwoPI + rr ) % (T.TwoPI), - rad1 = rad0 % ((2/3) * T.PI) - (T.pi60), - a = 0.5 * this.tr, - b = Math.tan(rad1) * a, - r = Math.sqrt(x*x + y*y), - maxR = Math.sqrt(a*a + b*b); - - if( r > maxR ) { - let dx = Math.tan(rad1) * r; - let rad2 = Math.atan(dx / maxR); - if(rad2 > T.pi60) rad2 = T.pi60; - else if( rad2 < -T.pi60 ) rad2 = -T.pi60; - - rad += rad2 - rad1; - - rad0 = (rad + T.pi90 + T.TwoPI + rr) % (T.TwoPI), - rad1 = rad0 % ((2/3) * T.PI) - (T.pi60); - b = Math.tan(rad1) * a; - r = maxR = Math.sqrt(a*a + b*b); - } - - lum = ((Math.sin(rad0) * r) / this.tsl) + 0.5; - - let w = 1 - (Math.abs(lum - 0.5) * 2); - sat = (((Math.cos(rad0) * r) + (this.tr / 2)) / (1.5 * this.tr)) / w; - sat = T.clamp( sat, 0, 1 ); - - this.setHSL([this.hsl[0], sat, lum]); - - } - } - } - } - - } - - // ---------------------- - - setHeight () { - - this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; - this.s[0].height = this.h + 'px'; - this.zone.h = this.h; - - } - - parentHeight ( t ) { - - if ( this.group !== null ) this.group.calc( t ); - else if ( this.isUI ) this.main.calc( t ); - - } - - open () { - - super.open(); - - this.setHeight(); - - if( this.up ) this.zone.y -= this.wfixe + 5; - - let t = this.h - this.baseH; - - this.s[3].visibility = 'visible'; - //this.s[3].display = 'block'; - this.parentHeight( t ); - - } - - close () { - - super.close(); - - if( this.up ) this.zone.y += this.wfixe + 5; - - let t = this.h - this.baseH; - - this.setHeight(); - - this.s[3].visibility = 'hidden'; - //this.s[3].display = 'none'; - this.parentHeight( -t ); - - } - - update ( up ) { - - let cc = Tools.rgbToHex( Tools.hslToRgb([ this.hsl[0], 1, 0.5 ]) ); - - this.moveMarkers(); - - this.value = this.bcolor; - - this.setSvg( this.c[3], 'fill', cc, 2, 0 ); - - this.s[2].background = this.bcolor; - if(!this.notext) this.c[2].textContent = Tools.htmlToHex( this.bcolor ); - - this.invert = Tools.findDeepInver( this.rgb ); - this.s[2].color = this.invert ? '#fff' : '#000'; - - if(!up) return; - - if( this.ctype === 'array' ) this.send( this.rgb ); - if( this.ctype === 'rgb' ) this.send( Tools.htmlRgb( this.rgb ) ); - if( this.ctype === 'hex' ) this.send( Tools.htmlToHex( this.value ) ); - if( this.ctype === 'html' ) this.send(); - - } - - setValue ( v ){ - - if( v instanceof Array ) this.value = Tools.rgbToHex( v ); - else if(!isNaN(v)) this.value = Tools.hexToHtml( v ); - else this.value = v; - - this.setColor( this.value ); - this.update(); - - } - - setColor ( color ) { - - let unpack = Tools.unpack(color); - if (this.bcolor !== color && unpack) { - - this.bcolor = color; - this.rgb = unpack; - this.hsl = Tools.rgbToHsl( this.rgb ); - - this.hue = this.hsl[0]; - - this.update(); - } - return this; - - } - - setHSL ( hsl ) { - - this.hsl = hsl; - this.rgb = Tools.hslToRgb( hsl ); - this.bcolor = Tools.rgbToHex( this.rgb ); - this.update( true ); - return this; - - } - - moveMarkers () { - - let p = this.pp; - let T = Tools; - - this.invert ? '#fff' : '#000'; - let a = this.hsl[0] * T.TwoPI; - let third = (2/3) * T.PI; - let r = this.tr; - let h = this.hsl[0]; - let s = this.hsl[1]; - let l = this.hsl[2]; - - let angle = ( a - T.pi90 ) * T.todeg; - - h = - a + T.pi90; - - let hx = Math.cos(h) * r; - let hy = -Math.sin(h) * r; - let sx = Math.cos(h - third) * r; - let sy = -Math.sin(h - third) * r; - let vx = Math.cos(h + third) * r; - let vy = -Math.sin(h + third) * r; - let mx = (sx + vx) / 2, my = (sy + vy) / 2; - a = (1 - 2 * Math.abs(l - .5)) * s; - let x = sx + (vx - sx) * l + (hx - mx) * a; - let y = sy + (vy - sy) * l + (hy - my) * a; - - p.set( x, y ).addScalar(128); - - //let ff = (1-l)*255; - // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); - - this.setSvg( this.c[3], 'transform', 'rotate('+angle+' )', 2 ); - - this.setSvg( this.c[3], 'cx', p.x, 3 ); - this.setSvg( this.c[3], 'cy', p.y, 3 ); - - this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3 ); - this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3 ); - this.setSvg( this.c[3], 'fill',this.bcolor, 3 ); - - } - - rSize () { - - //Proto.prototype.rSize.call( this ); - super.rSize(); - - let s = this.s; - - s[2].width = this.sb + 'px'; - s[2].left = this.sa + 'px'; - - //console.log(this.sb) - - this.cw = this.sb > 256 ? 256 : this.sb; - - - - this.rSizeColor( this.cw ); - - this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - //s[3].left = this.decal.x + 'px'; - - } - - rSizeColor ( w ) { - - - if( w === this.wfixe ) return; - - - - this.wfixe = w; - - - - let s = this.s; - - //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; - this.mid = Math.floor( this.wfixe * 0.5 ); - - this.setSvg( this.c[3], 'viewBox', '0 0 '+ this.wfixe + ' '+ this.wfixe ); - s[3].width = this.wfixe + 'px'; - s[3].height = this.wfixe + 'px'; - //s[3].left = this.decal.x + 'px'; - s[3].top = this.decal.y + 'px'; - - this.ratio = 256 / this.wfixe; - this.square = 1 / (60*(this.wfixe/256)); - this.setHeight(); - - } - - -} - -class Fps extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.round = Math.round; - - //this.autoHeight = true; - - this.baseH = this.h; - this.hplus = o.hplus || 50; - - this.res = o.res || 40; - this.l = 1; - - this.precision = o.precision || 0; - - - this.custom = o.custom || false; - this.names = o.names || ['FPS', 'MS']; - let cc = o.cc || ['220,220,220', '255,255,0']; - - // this.divid = [ 100, 100, 100 ]; - // this.multy = [ 30, 30, 30 ]; - - this.adding = o.adding || false; - - this.range = o.range || [ 165, 100, 100 ]; - - this.alpha = o.alpha || 0.25; - - this.values = []; - this.points = []; - this.textDisplay = []; - - if(!this.custom){ - - this.now = Roots.getTime(); - this.startTime = 0;//this.now() - this.prevTime = 0;//this.startTime; - this.frames = 0; - - this.ms = 0; - this.fps = 0; - this.mem = 0; - this.mm = 0; - - this.isMem = ( self.performance && self.performance.memory ) ? true : false; - - // this.divid = [ 100, 200, 1 ]; - // this.multy = [ 30, 30, 30 ]; - - if( this.isMem ){ - - this.names.push('MEM'); - cc.push('0,255,255'); - - } - - this.txt = o.name || 'Fps'; - - } - - - let fltop = Math.floor(this.h*0.5)-3; - const ccc = this.colors; - - this.c[1].textContent = this.txt; - //this.c[1].innerHTML = ' ' + this.txt - this.c[0].style.cursor = 'pointer'; - this.c[0].style.pointerEvents = 'auto'; - - let panelCss = 'display:none; left:10px; top:'+ this.h + 'px; height:'+(this.hplus - 8)+'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid '+ ccc.border +';'; - - if( this.radius !== 0 ) panelCss += 'border-radius:' + this.radius+'px;'; - - this.c[2] = this.dom( 'path', this.css.basic + panelCss , {} ); - - this.c[2].setAttribute('viewBox', '0 0 '+this.res+' 50' ); - this.c[2].setAttribute('height', '100%' ); - this.c[2].setAttribute('width', '100%' ); - this.c[2].setAttribute('preserveAspectRatio', 'none' ); - - - //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - - // arrow - this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:ccc.text, stroke:'none'}); - //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); - - // result test - this.c[4] = this.dom( 'div', this.css.txt + 'position:absolute; left:10px; top:'+(this.h+2) +'px; display:none; width:100%; text-align:center;' ); - - // bottom line - if( o.bottomLine ) this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); - - this.isShow = false; - - - - let s = this.s; - - //s[1].marginLeft = '10px'; - s[1].lineHeight = this.h-4; - s[1].color = ccc.text; - //s[1].paddingLeft = '18px'; - //s[1].fontWeight = 'bold'; - - if( this.radius !== 0 ) s[0].borderRadius = this.radius+'px'; - if( this.colors.gborder!=='none') s[0].border = '1px solid ' + ccc.gborder; - - - - - let j = 0; - - for( j=0; j " + this.names[j] +" "); - - } - - j = this.names.length; - while(j--){ - this.dom( 'path', null, { fill:'rgba('+cc[j]+','+this.alpha+')', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - } - - - this.init(); - - //if( this.isShow ) this.show(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown ( e ) { - - if( this.isShow ) this.close(); - else this.open(); - - } - - // ---------------------- - - /*mode: function ( mode ) { - - let s = this.s; - - switch(mode){ - case 0: // base - s[1].color = this.colors.text; - //s[1].background = 'none'; - break; - case 1: // over - s[1].color = '#FFF'; - //s[1].background = UIL.SELECT; - break; - case 2: // edit / down - s[1].color = this.colors.text; - //s[1].background = UIL.SELECTDOWN; - break; - - } - },*/ - - tick ( v ) { - - this.values = v; - if( !this.isShow ) return; - this.drawGraph(); - this.upText(); - - } - - makePath ( point ) { - - let p = ''; - p += 'M ' + (-1) + ' ' + 50; - for ( let i = 0; i < this.res + 1; i ++ ) { p += ' L ' + i + ' ' + point[i]; } - p += ' L ' + (this.res + 1) + ' ' + 50; - return p; - - } - - upText ( val ) { - - let v = val || this.values, t = ''; - for( let j=0, lng =this.names.length; j'; - this.c[4].innerHTML = t; - - } - - drawGraph () { - - let svg = this.c[2]; - let i = this.names.length, v, old = 0, n = 0; - - while( i-- ){ - if( this.adding ) v = (this.values[n]+old) * this.range[n]; - else v = (this.values[n] * this.range[n]); - this.points[n].shift(); - this.points[n].push( 50 - v ); - this.setSvg( svg, 'd', this.makePath( this.points[n] ), i+1 ); - old += this.values[n]; - n++; - - } - - } - - open () { - - super.open(); - - this.h = this.hplus + this.baseH; - - this.setSvg( this.c[3], 'd', this.svgs.g2 ); - - if( this.group !== null ){ this.group.calc( this.hplus );} - else if( this.isUI ) this.main.calc( this.hplus ); - - this.s[0].height = this.h +'px'; - this.s[2].display = 'block'; - this.s[4].display = 'block'; - this.isShow = true; - - if( !this.custom ) Roots.addListen( this ); - - } - - close () { - - super.close(); - - this.h = this.baseH; - - this.setSvg( this.c[3], 'd', this.svgs.g1 ); - - if( this.group !== null ){ this.group.calc( -this.hplus );} - else if( this.isUI ) this.main.calc( -this.hplus ); - - this.s[0].height = this.h +'px'; - this.s[2].display = 'none'; - this.s[4].display = 'none'; - this.isShow = false; - - if( !this.custom ) Roots.removeListen( this ); - - this.c[4].innerHTML = ''; - - } - - - ///// AUTO FPS ////// - - begin () { - - this.startTime = this.now(); - - } - - end () { - - let time = this.now(); - this.ms = time - this.startTime; - - this.frames ++; - - if ( time > this.prevTime + 1000 ) { - - this.fps = this.round( ( this.frames * 1000 ) / ( time - this.prevTime ) ); - - this.prevTime = time; - this.frames = 0; - - if ( this.isMem ) { - - let heapSize = performance.memory.usedJSHeapSize; - let heapSizeLimit = performance.memory.jsHeapSizeLimit; - - this.mem = this.round( heapSize * 0.000000954 ); - this.mm = heapSize / heapSizeLimit; - - } - - } - - this.values = [ this.fps, this.ms , this.mm ]; - - this.drawGraph(); - this.upText( [ this.fps, this.ms, this.mem ] ); - - return time; - - } - - listening () { - - if( !this.custom ) this.startTime = this.end(); - - } - - rSize () { - - let s = this.s; - let w = this.w; - - s[3].left = ( this.sa + this.sb - 6 ) + 'px'; - - s[0].width = w + 'px'; - s[1].width = w + 'px'; - s[2].left = 10 + 'px'; - s[2].width = (w-20) + 'px'; - s[4].width = (w-20) + 'px'; - - } - -} - -class Graph extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value !== undefined ? o.value : [0,0,0]; - this.lng = this.value.length; - - this.precision = o.precision !== undefined ? o.precision : 2; - this.multiplicator = o.multiplicator || 1; - this.neg = o.neg || false; - - this.line = o.line !== undefined ? o.line : true; - - //if(this.neg)this.multiplicator*=2; - - this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; - this.isNumber = false; - - this.isDown = false; - - this.h = o.h || 128 + 10; - this.rh = this.h - 10; - this.top = 0; - - this.c[0].style.width = this.w +'px'; - - if( this.c[1] !== undefined ) { // with title - - this.c[1].style.width = this.w +'px'; - - if(!this.autoWidth){ - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - } - - - //this.c[1].style.background = '#ff0000'; - //this.c[1].style.textAlign = 'center'; - this.top = 10; - this.h += 10; - - } - - this.gh = this.rh - 28; - this.gw = this.w - 28; - - //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); - - //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' - this.c[2] = this.dom( 'div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:'+(this.h-20)+'px; left:14px; width:'+this.gw+'px; color:'+ this.colors.text ); - - //this.c[2].textContent = this.value; - this.c[2].innerHTML = this.valueToHtml(); - - let svg = this.dom( 'svg', this.css.basic , { viewBox:'0 0 '+this.w+' '+this.rh, width:this.w, height:this.rh, preserveAspectRatio:'none' } ); - this.setCss( svg, { width:this.w, height:this.rh, left:0, top:this.top }); - - this.dom( 'path', '', { d:'', stroke:this.colors.text, 'stroke-width':2, fill:'none', 'stroke-linecap':'butt' }, svg ); - this.dom( 'rect', '', { x:10, y:10, width:this.gw+8, height:this.gh+8, stroke:'rgba(0,0,0,0.3)', 'stroke-width':1 , fill:'none'}, svg ); - - this.iw = ((this.gw-(4*(this.lng-1)))/this.lng); - let t = []; - this.cMode = []; - - this.v = []; - - for( let i = 0; i < this.lng; i++ ){ - - t[i] = [ 14 + (i*this.iw) + (i*4), this.iw ]; - t[i][2] = t[i][0] + t[i][1]; - this.cMode[i] = 0; - - if( this.neg ) this.v[i] = ((1+(this.value[i] / this.multiplicator))*0.5); - else this.v[i] = this.value[i] / this.multiplicator; - - this.dom( 'rect', '', { x:t[i][0], y:14, width:t[i][1], height:1, fill:this.colors.text, 'fill-opacity':0.3 }, svg ); - - } - - this.tmp = t; - this.c[3] = svg; - - //console.log(this.w) - - this.init(); - - if( this.c[1] !== undefined ){ - this.c[1].style.top = 0 +'px'; - this.c[1].style.height = 20 +'px'; - this.s[1].lineHeight = (20-5)+'px'; - } - - this.update( false ); - - } - - setValue ( value ) { - - this.value = value; - this.lng = this.value.length; - for (var i = 0; i < this.lng; i++) { - if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5; - else this.v[i] = value[i] / this.multiplicator; - } - this.update(); - - } - - valueToHtml() { - - let i = this.lng, n=0, r = ''; - let w = 100 / this.lng; - let style = 'width:'+ w +'%;';//' text-align:center;' - while(i--){ - if(n===this.lng-1) r += '
' + this.value[n] + '
'; - else r += '' + this.value[n] + ''; - n++; - } - return r - } - - updateSVG () { - - if( this.line ) this.setSvg( this.c[3], 'd', this.makePath(), 0 ); - - for(let i = 0; ithis.top && l.yt[i][0] && l.x this.distance ) { - let angle = Math.atan2(this.tmp.x, this.tmp.y); - this.tmp.x = Math.sin( angle ) * this.distance; - this.tmp.y = Math.cos( angle ) * this.distance; - } - - this.pos.copy( this.tmp ).divideScalar( this.distance ).negate(); - - this.update(); - - } - - setValue ( v ) { - - if(v===undefined) v=[0,0]; - - this.pos.set( v[0] || 0, v[1] || 0 ); - this.updateSVG(); - - } - - update ( up ) { - - if( up === undefined ) up = true; - - if( this.interval !== null ){ - - if( !this.isDown ){ - - this.pos.lerp( null, 0.3 ); - - this.pos.x = Math.abs( this.pos.x ) < 0.01 ? 0 : this.pos.x; - this.pos.y = Math.abs( this.pos.y ) < 0.01 ? 0 : this.pos.y; - - if( this.isUI && this.main.isCanvas ) this.main.draw(); - - } - - } - - this.updateSVG(); - - if( up ) this.send(); - - - if( this.pos.isZero() ) this.stopInterval(); - - } - - updateSVG () { - - //let x = this.radius - ( -this.pos.x * this.distance ); - //let y = this.radius - ( -this.pos.y * this.distance ); - - let x = (this.diam*0.5) - ( -this.pos.x * this.distance ); - let y = (this.diam*0.5) - ( -this.pos.y * this.distance ); - - if(this.model === 0){ - - let sx = x + ((this.pos.x)*5) + 5; - let sy = y + ((this.pos.y)*5) + 10; - - this.setSvg( this.c[3], 'cx', sx*this.ratio, 3 ); - this.setSvg( this.c[3], 'cy', sy*this.ratio, 3 ); - } else { - this.setSvg( this.c[3], 'cx', x*this.ratio, 3 ); - this.setSvg( this.c[3], 'cy', y*this.ratio, 3 ); - } - - - - this.setSvg( this.c[3], 'cx', x*this.ratio, 4 ); - this.setSvg( this.c[3], 'cy', y*this.ratio, 4 ); - - this.value[0] = ( this.pos.x * this.multiplicator ).toFixed( this.precision ) * 1; - this.value[1] = ( this.pos.y * this.multiplicator ).toFixed( this.precision ) * 1; - - if(this.haveText) this.c[2].textContent = this.value; - - } - - clear () { - - this.stopInterval(); - super.clear(); - - } - -} - -class Knob extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.isCyclic = o.cyclic || false; - this.model = o.stype || 0; - if( o.mode !== undefined ) this.model = o.mode; - - this.autoWidth = false; - - this.setTypeNumber( o ); - - this.minw = this.w; - this.diam = o.diam || this.w; - - this.mPI = Math.PI * 0.8; - this.toDeg = 180 / Math.PI; - this.cirRange = this.mPI * 2; - - this.offset = new V2(); - - this.h = o.h || this.w + 10; - - this.c[0].style.width = this.w +'px'; - this.c[0].style.display = 'block'; - - if(this.c[1] !== undefined) { - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - - } - - this.percent = 0; - - this.cmode = 0; - let cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); - - this.c[3] = this.getKnob(); - this.setSvg( this.c[3], 'fill', cc.button, 0 ); - this.setSvg( this.c[3], 'stroke', cc.text, 1 ); - this.setSvg( this.c[3], 'stroke', cc.text, 3 ); - this.setSvg( this.c[3], 'd', this.makeGrad(), 3 ); - - this.setSvg( this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam ); - this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); - - if ( this.model > 0 ) { - - Tools.dom( 'path', '', { d: '', stroke:cc.text, 'stroke-width': 2, fill: 'none', 'stroke-linecap': 'round' }, this.c[3] ); //4 - - if ( this.model == 2) { - - Tools.addSVGGlowEffect(); - this.setSvg( this.c[3], 'style', 'filter: url("#UILGlow");', 4 ); - - } - - } - - this.r = 0; - - this.init(); - - this.update(); - - } - - mode ( mode ) { - - let cc = this.colors; - - if( this.cmode === mode ) return false; - - switch( mode ) { - case 0: // base - this.s[2].color = cc.text; - this.setSvg( this.c[3], 'fill', cc.button, 0); - //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); - this.setSvg( this.c[3], 'stroke', cc.text, 1 ); - break; - case 1: // down - this.s[2].color = cc.textOver; - this.setSvg( this.c[3], 'fill', cc.select, 0); - //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); - this.setSvg( this.c[3], 'stroke', cc.textOver, 1 ); - break; - } - - this.cmode = mode; - return true; - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'knob'; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.sendEnd(); - return this.mode(0) - - } - - mousedown ( e ) { - - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove( e ); - return this.mode(1) - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - let off = this.offset; - - //off.x = this.radius - ( e.clientX - this.zone.x ); - //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); - - off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); - off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - this.r = - Math.atan2( off.x, off.y ); - - if( this.oldr !== null ) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; - - this.r = this.r > this.mPI ? this.mPI : this.r; - this.r = this.r < -this.mPI ? -this.mPI : this.r; - - let steps = 1 / this.cirRange; - let value = (this.r + this.mPI) * steps; - - let n = ( ( this.range * value ) + this.min ) - this.old; - - if(n >= this.step || n <= this.step){ - n = Math.floor( n / this.step ); - this.value = this.numValue( this.old + ( n * this.step ) ); - this.update( true ); - this.old = this.value; - this.oldr = this.r; - } - - } - - wheel ( e ) { - - let name = this.testZone( e ); - - if( name === 'knob' ) { - - let v = this.value - this.step * e.delta; - - if ( v > this.max ) { - v = this.isCyclic ? this.min : this.max; - } else if ( v < this.min ) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue( v ); - this.old = v; - this.update( true ); - - return true; - - } - return false; - - } - - makeGrad () { - - let d = '', step, range, a, x, y, x2, y2, r = 64; - let startangle = Math.PI + this.mPI; - let endangle = Math.PI - this.mPI; - //let step = this.step>5 ? this.step : 1; - - if(this.step>5){ - range = this.range / this.step; - step = ( startangle - endangle ) / range; - } else { - step = (( startangle - endangle ) / r)*2; - range = r*0.5; - } - - for ( let i = 0; i <= range; ++i ) { - - a = startangle - ( step * i ); - x = r + Math.sin( a ) * ( r - 20 ); - y = r + Math.cos( a ) * ( r - 20 ); - x2 = r + Math.sin( a ) * ( r - 24 ); - y2 = r + Math.cos( a ) * ( r - 24 ); - d += 'M' + x + ' ' + y + ' L' + x2 + ' '+y2 + ' '; - - } - - return d; - - } - - update ( up ) { - - this.c[2].textContent = this.value; - this.percent = (this.value - this.min) / this.range; - - let sa = Math.PI + this.mPI; - let ea = ( ( this.percent * this.cirRange ) - ( this.mPI ) ); - - let sin = Math.sin( ea ); - let cos = Math.cos( ea ); - - let x1 = ( 25 * sin ) + 64; - let y1 = -( 25 * cos ) + 64; - let x2 = ( 20 * sin ) + 64; - let y2 = -( 20 * cos ) + 64; - - this.setSvg( this.c[3], 'd', 'M ' + x1 +' ' + y1 + ' L ' + x2 +' ' + y2, 1 ); - - if ( this.model > 0 ) { - - let x1 = 36 * Math.sin( sa ) + 64; - let y1 = 36 * Math.cos( sa ) + 64; - let x2 = 36 * sin + 64; - let y2 = -36 * cos + 64; - let big = ea <= Math.PI - this.mPI ? 0 : 1; - this.setSvg( this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4 ); - - let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( this.colors.text, -0.75) ), Tools.unpack( this.colors.text ), this.percent ) ); - this.setSvg( this.c[3], 'stroke', color, 4 ); - - } - - if( up ) this.send(); - - } - -} - -class List extends Proto { - - constructor( o = {} ) { - - super( o ); - - // TODO not work - this.hideCurrent = false; - - // images - this.path = o.path || ''; - this.format = o.format || ''; - - - this.isWithImage = this.path !== '' ? true:false; - this.preLoadComplete = false; - - this.tmpImage = {}; - this.tmpUrl = []; - - this.m = o.m !== undefined ? o.m : 5; - - - let align = o.align || 'left'; - - // scroll size - let ss = o.scrollSize || 10; - this.ss = ss+1; - - this.sMode = 0; - this.tMode = 0; - - this.listOnly = o.listOnly || false; - this.staticTop = o.staticTop || false; - - this.isSelectable = this.listOnly; - if( o.select !== undefined ) o.selectable = o.select; - if( o.selectable !== undefined ) this.isSelectable = o.selectable; - - if( this.txt === '' ) this.p = 0; - - - let fltop = Math.floor(this.h*0.5)-3; - let cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.basic + 'top:0; display:none; border-radius:'+this.radius+'px;' ); - this.c[3] = this.dom( 'div', this.css.item + 'padding:0px '+this.m+'px; margin-bottom:0px; position:absolute; justify-content:'+align+'; text-align:'+align+'; line-height:'+(this.h-4)+'px; top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:1px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); - - this.scrollerBack = this.dom( 'div', this.css.basic + 'right:0px; width:'+ss+'px; background:'+cc.back+'; display:none;'); - this.scroller = this.dom( 'div', this.css.basic + 'right:'+((ss-(ss*0.25))*0.5)+'px; width:'+(ss*0.25)+'px; background:'+cc.text+'; display:none; '); - - this.c[3].style.color = cc.text; - - - this.list = []; - this.refObject = null; - - if( o.list ){ - if( o.list instanceof Array ){ - this.list = o.list; - } else if( o.list instanceof Object ){ - this.refObject = o.list; - for( let g in this.refObject ) this.list.push( g ); - } - } - - this.items = []; - - this.prevName = ''; - - - this.tmpId = 0; - - this.baseH = this.h; - - this.itemHeight = o.itemHeight || this.h;//(this.h-3); - - // force full list - this.full = o.full || false; - - this.py = 0; - this.ww = this.sb; - this.scroll = false; - this.isDown = false; - - this.current = null; - - // list up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - - if( this.up ){ - - this.c[2].style.top = 'auto'; - this.c[3].style.top = 'auto'; - this.c[4].style.top = 'auto'; - - this.c[2].style.bottom = this.h-2 + 'px'; - this.c[3].style.bottom = '1px'; - this.c[4].style.bottom = fltop + 'px'; - - } else { - this.c[2].style.top = this.baseH + 'px'; - } - - this.listIn = this.dom( 'div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); - this.listIn.name = 'list'; - - this.topList = 0; - - this.c[2].appendChild( this.listIn ); - this.c[2].appendChild( this.scrollerBack ); - this.c[2].appendChild( this.scroller ); - - if( o.value !== undefined ){ - if(!isNaN(o.value)) this.value = this.list[ o.value ]; - else this.value = o.value; - }else { - this.value = this.list[0]; - } - - this.isOpenOnStart = o.open || false; - - if( this.listOnly ){ - this.baseH = 5; - this.c[3].style.display = 'none'; - this.c[4].style.display = 'none'; - this.c[2].style.top = this.baseH+'px'; - this.isOpenOnStart = true; - } - - - this.miniCanvas = o.miniCanvas || false; - this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; - this.imageSize = o.imageSize || [20,20]; - - // dragout function - this.drag = o.drag || false; - this.dragout = o.dragout || false; - this.dragstart = o.dragstart || null; - this.dragend = o.dragend || null; - - - - //this.c[0].style.background = '#FF0000' - ///if( this.isWithImage ) this.preloadImage(); - - this.setList( this.list ); - this.init(); - if( this.isWithImage ) this.preloadImage(); - if( this.isOpenOnStart ) this.open( true ); - - this.baseH += this.mtop; - - } - - // image list - - preloadImage () { - - - - this.preLoadComplete = false; - - this.tmpImage = {}; - for( let i=0; i this.h - this.baseH ) return 'title'; - else { - if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; - if(l.x > this.sa) return this.testItems( l.y-this.baseH ); - } - - } else { - if( l.y < this.baseH+2 ) return 'title'; - else { - if( this.isOpen ){ - if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; - if(l.x > this.sa) return this.testItems( l.y-this.baseH ); - } - } - - } - - return ''; - - } - - testItems ( y ) { - - let name = ''; - - let items = this.items; - - /*if(this.hideCurrent){ - //items = [...this.items] - items = this.items.slice(this.tmpId) - - }*/ - - let i = items.length, item, a, b; - while(i--){ - item = items[i]; - a = item.posy + this.topList; - b = item.posy + this.itemHeight + 1 + this.topList; - if( y >= a && y <= b ){ - name = 'item' + i; - this.modeItem(0); - this.current = item; - this.modeItem(1); - return name; - } - - } - - return name; - - } - - modeItem ( mode ) { - - if( !this.current ) return - - if( this.current.select && mode===0) mode = 2; - let cc = this.colors; - - switch( mode ){ - - case 0: // base - this.current.style.background = cc.back; - this.current.style.color = cc.text; - break; - case 1: // over - this.current.style.background = cc.over; - this.current.style.color = cc.textOver; - break; - case 2: // edit / down - this.current.style.background = cc.select; - this.current.style.color = cc.textSelect; - break; - - } - } - - unSelected() { - - if( !this.current ) return - this.modeItem(0); - this.current = null; - - } - - selected() { - - if( !this.current ) return - this.resetItems(); - this.modeItem(2); - this.current.select = true; - - - - } - - resetItems() { - - let i = this.items.length; - while(i--){ - this.items[i].select = false; - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text; - } - - } - - hideActive() { - - if( !this.hideCurrent ) return - //if( !this.current ) return - if( this.current )this.tmpId = this.current.id; - this.resetHide(); - //this.items[this.tmpId].style.height = 0+'px' - - } - - resetHide() { - - console.log(this.tmpId); - - let i = this.items.length; - while(i--){ - if(i===this.tmpId){ - this.items[i].style.height = 0+'px'; - this.items[i].posy = -1; - } else { - this.items[i].style.height = this.itemHeight+'px'; - this.items[i].posy = (this.itemHeight+1)*(i-1); - } - //this.items[i].style.display = 'flex' - - /*this.items[i].select = false - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text;*/ - } - - } - - // ---------------------- - // EVENTS - // ---------------------- - - - mouseup ( e ) { - - this.isDown = false; - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false; - - if( name === 'scroll' ){ - - this.isDown = true; - this.mousemove( e ); - - } else if( name === 'title' ){ - - this.modeTitle(2); - if( !this.listOnly ){ - this.hideActive(); - if( !this.isOpen ) this.open(); - else this.close(); - } - } else { - // is item - if( this.current ){ - - this.value = this.list[ this.current.id ]; - //this.tmpId = this.current.id - - if( this.isSelectable ) this.selected(); - - //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); - this.send( this.value ); - - if( !this.listOnly ) { - this.close(); - this.setTopItem(); - //this.hideActive() - } - } - - } - - return true; - - } - - mousemove ( e ) { - - let nup = false; - let name = this.testZone( e ); - - if( !name ) return nup; - - if( name === 'title' ){ - this.unSelected(); - this.modeTitle(1); - this.cursor('pointer'); - - } else if( name === 'scroll' ){ - - this.cursor('s-resize'); - this.modeScroll(1); - if( this.isDown ){ - this.modeScroll(2); - //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - let top = this.zone.y+this.baseH-2; - this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - } - //if(this.isDown) this.listmove(e); - } else { - - // is item - this.modeTitle(0); - this.modeScroll(0); - this.cursor('pointer'); - - } - - if( name !== this.prevName ) nup = true; - this.prevName = name; - - return nup; - - } - - wheel ( e ) { - - let name = this.testZone( e ); - if( name === 'title' ) return false; - this.py += e.delta*10; - this.update(this.py); - return true; - - } - - - - // ---------------------- - - reset () { - - this.prevName = ''; - this.unSelected(); - this.modeTitle(0); - this.modeScroll(0); - - //console.log('this is reset') - - } - - modeScroll ( mode ) { - - if( mode === this.sMode ) return; - - let s = this.scroller.style; - let cc = this.colors; - - switch(mode){ - case 0: // base - s.background = cc.text; - break; - case 1: // over - s.background = cc.select; - break; - case 2: // edit / down - s.background = cc.select; - break; - - } - - this.sMode = mode; - } - - modeTitle ( mode ) { - - if( mode === this.tMode ) return; - - let s = this.s; - let cc = this.colors; - - switch(mode){ - case 0: // base - s[3].color = cc.text; - s[3].background = cc.button; - break; - case 1: // over - s[3].color = cc.textOver; - s[3].background = cc.overoff; - break; - case 2: // edit / down - s[3].color = cc.textSelect; - s[3].background = cc.overoff; - break; - - } - - this.tMode = mode; - - } - - clearList () { - - while ( this.listIn.children.length ) this.listIn.removeChild( this.listIn.lastChild ); - this.items = []; - - } - - setList ( list ) { - - this.clearList(); - - this.list = list; - this.length = this.list.length; - - let lng = this.hideCurrent? this.length-1 : this.length; - - this.maxItem = this.full ? lng : 5; - this.maxItem = lng < this.maxItem ? lng : this.maxItem; - - this.maxHeight = this.maxItem * (this.itemHeight+1) + 2; - - - - this.max = lng * (this.itemHeight+1) + 2; - this.ratio = this.maxHeight / this.max; - this.sh = this.maxHeight * this.ratio; - this.range = this.maxHeight - this.sh; - - this.c[2].style.height = this.maxHeight + 'px'; - this.scrollerBack.style.height = this.maxHeight + 'px'; - this.scroller.style.height = this.sh + 'px'; - - if( this.max > this.maxHeight ){ - this.ww = this.sb - this.ss; - this.scroll = true; - } - - if( this.miniCanvas ) { - - this.tmpCanvas = document.createElement('canvas'); - this.tmpCanvas.width = this.imageSize[0]; - this.tmpCanvas.height = this.imageSize[1]; - this.tmpCtx = this.tmpCanvas.getContext("2d"); - this.tmpCtx.fillStyle = this.canvasBg; - this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); - - } - - let item, n;//, l = this.sb; - for( let i=0; i this.range ? this.range : y; - - this.topList = -Math.floor( y / this.ratio ); - - this.listIn.style.top = this.topList+'px'; - this.scroller.style.top = Math.floor( y ) + 'px'; - - this.py = y; - - } - - parentHeight ( t ) { - - if ( this.group !== null ) this.group.calc( t ); - else if ( this.isUI ) this.main.calc( t ); - - } - - open ( first ) { - - super.open(); - - this.update( 0 ); - - this.h = this.maxHeight + this.baseH + 5; - if( !this.scroll ){ - this.topList = 0; - this.h = this.baseH + 5 + this.max; - this.scroller.style.display = 'none'; - this.scrollerBack.style.display = 'none'; - } else { - this.scroller.style.display = 'block'; - this.scrollerBack.style.display = 'block'; - } - this.s[0].height = this.h + 'px'; - this.s[2].display = 'block'; - - if( this.up ){ - this.zone.y -= this.h - (this.baseH-10); - this.setSvg( this.c[4], 'd', this.svgs.g1 ); - } else { - this.setSvg( this.c[4], 'd', this.svgs.g2 ); - } - - this.rSizeContent(); - - let t = this.h - this.baseH; - - this.zone.h = this.h; - - if(!first) this.parentHeight( t ); - - } - - close () { - - super.close(); - - if( this.up ) this.zone.y += this.h - (this.baseH-10); - - let t = this.h - this.baseH; - - this.h = this.baseH; - this.s[0].height = this.h + 'px'; - this.s[2].display = 'none'; - this.setSvg( this.c[4], 'd', this.svgs.g1 ); - - this.zone.h = this.h; - - this.parentHeight( -t ); - - } - - // ----- - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSizeContent () { - - let i = this.length; - while(i--) this.listIn.children[i].style.width = this.ww + 'px'; - - } - - rSize () { - - super.rSize(); - - //Proto.prototype.rSize.call( this ); - - let s = this.s; - let w = this.sb; - let d = this.sa; - - if(s[2]=== undefined) return; - - s[2].width = w + 'px'; - s[2].left = d +'px'; - - s[3].width = w + 'px'; - s[3].left = d + 'px'; - - s[4].left = d + w - 15 + 'px'; - - this.ww = w; - if( this.max > this.maxHeight ) this.ww = w-this.ss; - if(this.isOpen) this.rSizeContent(); - - } - -} - -class Numeric extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.setTypeNumber( o ); - - this.allway = o.allway || false; - - this.isDown = false; - this.value = [0]; - this.multy = 1; - this.invmulty = 1; - this.isSingle = true; - this.isAngle = false; - this.isVector = false; - - if( o.isAngle ){ - this.isAngle = true; - this.multy = Tools.torad; - this.invmulty = Tools.todeg; - } - - this.isDrag = o.drag || false; - - if( o.value !== undefined ){ - if( !isNaN(o.value) ){ - this.value = [o.value]; - } else if( o.value instanceof Array ){ - this.value = o.value; - this.isSingle = false; - } else if( o.value instanceof Object ){ - this.value = []; - if( o.value.x !== undefined ) this.value[0] = o.value.x; - if( o.value.y !== undefined ) this.value[1] = o.value.y; - if( o.value.z !== undefined ) this.value[2] = o.value.z; - if( o.value.w !== undefined ) this.value[3] = o.value.w; - this.isSingle = false; - this.isVector = true; - } - } - - this.lng = this.value.length; - this.tmp = []; - - this.current = -1; - this.prev = { x:0, y:0, d:0, v:0 }; - - let cc = this.colors; - - // bg - this.c[2] = this.dom( 'div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h-8) + 'px;' ); - - this.cMode = []; - - let i = this.lng; - while(i--){ - - if( this.isAngle ) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed( this.precision ); - this.c[3+i] = this.dom( 'div', this.css.txtselect + 'top:1px; height:'+(this.h-2)+'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;'); - if(o.center) this.c[2+i].style.textAlign = 'center'; - this.c[3+i].textContent = this.value[i]; - this.c[3+i].style.color = this.colors.text; - this.c[3+i].isNum = true; - this.cMode[i] = 0; - - } - - // selection - this.selectId = 3 + this.lng; - this.c[this.selectId] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.cursorId = 4 + this.lng; - this.c[ this.cursorId ] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); - - this.init(); - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - - let i = this.lng; - let t = this.tmp; - - while( i-- ){ - if( l.x>t[i][0] && l.x 0"; - this.easing = o.easing || 1; - - this.setTypeNumber(o); - - this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; - - //this.defaultBorderColor = this.colors.hide; - - this.isDown = false; - this.isOver = false; - this.allway = o.allway || false; - - this.isDeg = o.isDeg || false; - this.isCyclic = o.cyclic || false; - - this.firstImput = false; - - let cc = this.colors; - - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - this.c[2] = this.dom( - "div", - this.css.txtselect + - "border:none; background:none; width:47px; color:" + - cc.text + - ";" - ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); - this.c[3] = this.dom( - "div", - this.css.basic + " top:0; height:" + this.h + "px;" - ); - - this.c[4] = this.dom( - "div", - this.css.basic + - "background:" + - cc.back + - "; top:2px; height:" + - (this.h - 4) + - "px;" - ); - this.c[5] = this.dom( - "div", - this.css.basic + - "left:4px; top:5px; height:" + - (this.h - 10) + - "px; background:" + - cc.text + - ";" - ); - - this.c[2].isNum = true; - //this.c[2].style.height = (this.h-4) + 'px'; - //this.c[2].style.lineHeight = (this.h-8) + 'px'; - this.c[2].style.height = this.h - 2 + "px"; - this.c[2].style.lineHeight = this.h - 10 + "px"; - - if (this.model !== 0) { - let r1 = 4, - h1 = 4, - h2 = 8, - ww = this.h - 6, - ra = 16; - - if (this.model === 2) { - r1 = 0; - h1 = 2; - h2 = 4; - ra = 2; - ww = (this.h - 6) * 0.5; - } - - if (this.model === 3) this.c[5].style.visible = "none"; - - this.c[4].style.borderRadius = r1 + "px"; - this.c[4].style.height = h2 + "px"; - this.c[4].style.top = this.h * 0.5 - h1 + "px"; - this.c[5].style.borderRadius = r1 * 0.5 + "px"; - this.c[5].style.height = h1 + "px"; - this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; - - //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); - this.c[6] = this.dom( - "div", - this.css.basic + - "border-radius:" + - ra + - "px; margin-left:" + - -ww * 0.5 + - "px; background:" + - cc.text + - "; left:4px; top:3px; height:" + - (this.h - 6) + - "px; width:" + - ww + - "px;" - ); - } - - this.init(); - } - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - - if (l.x >= this.txl) return "text"; - else if (l.x >= this.sa) return "scroll"; - else return ""; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (this.isDown) this.isDown = false; - } - - mousedown(e) { - let name = this.testZone(e); - - if (!name) return false; - - if (name === "scroll") { - this.isDown = true; - this.old = this.value; - this.mousemove(e); - } - - /*if( name === 'text' ){ - this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); - }*/ - - return true; - } - - mousemove(e) { - let nup = false; - - let name = this.testZone(e); - - if (name === "scroll") { - this.mode(1); - this.cursor("w-resize"); - //} else if(name === 'text'){ - //this.cursor('pointer'); - } else { - this.cursor(); - } - - if (this.isDown) { - let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; - - // lo mapeo al rango 0 ... 1 - nNormalized = Math.min(1, Math.max(0, nNormalized)); - - // aplico easing - let nEased = Math.pow(nNormalized, this.easing); // easing - - let nNew = nEased * this.range + this.min; - let nNewSlider = nNormalized * this.range + this.min; - - this.sliderValue = this.numValue(nNewSlider); - - let delta = nNew - this.old; - - let steps; - if (delta >= this.step || delta <= this.step) { - steps = Math.floor(delta / this.step); - this.value = this.numValue(this.old + steps * this.step); - // value without easing applied - - this.update(true); - this.old = this.value; - } - //console.log("n, normalized, value", nNew, nNormalized, this.value); - nup = true; - } - - return nup; - } - - wheel(e) { - let name = this.testZone(e); - - if (name === "scroll") { - let v = this.value - this.step * e.delta; - - if (v > this.max) { - v = this.isCyclic ? this.min : this.max; - } else if (v < this.min) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue(v); - this.old = v; - this.update(true); - - return true; - } - - return false; - } - - //keydown: function ( e ) { return true; }, - - // ---------------------- - - validate() { - let n = this.c[2].textContent; - - if (!isNaN(n)) { - this.value = this.numValue(n); - this.update(true); - } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - } - - reset() { - //this.clearInput(); - this.isDown = false; - this.mode(0); - } - - mode(mode) { - let s = this.s; - let cc = this.colors; - - switch (mode) { - case 0: // base - // s[2].border = '1px solid ' + this.colors.hide; - s[2].color = cc.text; - s[4].background = cc.back; - s[5].background = cc.text; - if (this.model !== 0) s[6].background = cc.text; //cc.button; - break; - case 1: // scroll over - //s[2].border = '1px dashed ' + this.colors.hide; - s[2].color = cc.textOver; - s[4].background = cc.back; - s[5].background = cc.textOver; - if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; - break; - } - } - - update(up) { - let normalized = (this.value - this.min) / this.range; - - let uneased = - this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); - - let ww = Math.floor(this.ww * uneased); - //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); - - if (this.model !== 3) this.s[5].width = ww + "px"; - if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; - this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - - if (up) this.send(); - } - - rSize() { - super.rSize(); - - let w = this.sb - this.sc; - this.ww = w - 6; - - let tx = this.sc; - if (this.isUI || !this.simple) tx = this.sc + 10; - this.txl = this.w - tx + 2; - - //let ty = Math.floor(this.h * 0.5) - 8; - - let s = this.s; - - s[2].width = this.sc - 6 + "px"; - s[2].left = this.txl + 4 + "px"; - //s[2].top = ty + 'px'; - s[3].left = this.sa + "px"; - s[3].width = w + "px"; - s[4].left = this.sa + "px"; - s[4].width = w + "px"; - s[5].left = this.sa + 3 + "px"; - - this.update(); - } -} - -class TextInput extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.cmode = 0; - - this.value = o.value !== undefined ? o.value : ''; - this.placeHolder = o.placeHolder || ''; - - this.allway = o.allway || false; - this.editable = o.edit !== undefined ? o.edit : true; - - this.isDown = false; - - let cc = this.colors; - - // text - this.c[2] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[2].textContent = this.value; - - // selection - this.c[3] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.c[4] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); - - // fake - this.c[5] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; border:none; justify-content: center; font-style: italic; color:'+cc.border+';' ); - if( this.value === '' ) this.c[5].textContent = this.placeHolder; - - - - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.x >= this.sa ) return 'text'; - return ''; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if(!this.editable) return; - - if( this.isDown ){ - this.isDown = false; - return this.mousemove( e ); - } - - return false; - - } - - mousedown ( e ) { - - if(!this.editable) return; - - let name = this.testZone( e ); - - if( !this.isDown ){ - this.isDown = true; - if( name === 'text' ) this.setInput( this.c[2] ); - return this.mousemove( e ); - } - - return false; - - } - - mousemove ( e ) { - - if(!this.editable) return; - - let name = this.testZone( e ); - - //let l = this.local; - //if( l.x === -1 && l.y === -1 ){ return;} - - //if( l.x >= this.sa ) this.cursor('text'); - //else this.cursor(); - - let x = 0; - - if( name === 'text' ) this.cursor('text'); - else this.cursor(); - - if( this.isDown ) x = e.clientX - this.zone.x; - - return this.upInput( x - this.sa -3, this.isDown ); - - } - - update ( ) { - - this.c[2].textContent = this.value; - - } - - // ---------------------- - - reset () { - - this.cursor(); - - } - - // ---------------------- - // INPUT - // ---------------------- - - select ( c, e, w, t ) { - - let s = this.s; - let d = this.sa + 5; - s[4].width = '1px'; - s[4].left = ( d + e ) + 'px'; - - s[3].left = ( d + e ) + 'px'; - s[3].width = w + 'px'; - this.c[3].innerHTML = t; - - } - - unselect () { - - let s = this.s; - if(!s) return; - s[3].width = 0 + 'px'; - this.c[3].innerHTML = 't'; - s[4].width = 0 + 'px'; - - } - - validate ( force ) { - - if( this.allway ) force = true; - - this.value = this.c[2].textContent; - - if(this.value !== '') this.c[5].textContent = ''; - else this.c[5].textContent = this.placeHolder; - - if( !force ) return; - - this.send(); - - } - - // ---------------------- - // REZISE - // ---------------------- - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - - s[5].left = this.sa + 'px'; - s[5].width = this.sb + 'px'; - - } - - -} - -class Title extends Proto { - - constructor( o = {} ) { - - super( o ); - - let prefix = o.prefix || ''; - - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:right; width:60px; line-height:'+ (this.h-8) + 'px; color:' + this.colors.text ); - - if( this.h === 31 ){ - - this.s[0].height = this.h + 'px'; - this.s[1].top = 8 + 'px'; - this.c[2].style.top = 8 + 'px'; - - } - - let s = this.s; - - s[1].justifyContent = o.align || 'left'; - //s[1].textAlign = o.align || 'left'; - s[1].fontWeight = o.fontWeight || 'bold'; - - - this.c[1].textContent = this.txt.substring(0,1).toUpperCase() + this.txt.substring(1).replace("-", " "); - this.c[2].textContent = prefix; - - this.init(); - - } - - text( txt ) { - - this.c[1].textContent = txt; - - } - - text2( txt ) { - - this.c[2].textContent = txt; - - } - - rSize() { - - super.rSize(); - this.s[1].width = this.w + 'px'; //- 50 + 'px'; - this.s[2].left = this.w + 'px';//- ( 50 + 26 ) + 'px'; - - } - - setColor( c ) { - this.s[1].color = c; - this.s[2].color = c; - } - -} - -class Select extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || ''; - this.isDown = false; - this.onActif = o.onActif || function(){}; - - //let prefix = o.prefix || ''; - const cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+ cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); - //this.c[2].style.color = this.fontColor; - - this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); - this.c[3].textContent = this.value; - - let fltop = Math.floor(this.h*0.5)-7; - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'cursor' ], fill:cc.text, stroke:'none'}); - - this.stat = 1; - this.isActif = false; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - if( l.x > this.sa && l.x < this.sa+30 ) return 'over' - return '0' - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( this.isDown ){ - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove( e ) - } - - return false - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false - - this.isDown = true; - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove( e ) - - } - - mousemove ( e ) { - - let up = false; - let name = this.testZone( e ); - - if( name === 'over' ){ - this.cursor('pointer'); - up = this.mode( this.isDown ? 3 : 2 ); - } else { - up = this.reset(); - } - - return up - - } - - // ---------------------- - - apply ( v ) { - - v = v || ''; - - if( v !== this.value ) { - this.value = v; - this.c[3].textContent = this.value; - this.send(); - } - - this.mode(1); - - } - - update () { - - this.mode( 3 ); - - } - - mode ( n ) { - - let change = false; - let cc = this.colors; - - if( this.stat !== n ){ - - if( n===1 ) this.isActif = false; - if( n===3 ){ - if( !this.isActif ){ this.isActif = true; n=4; this.onActif( this ); } - else { this.isActif = false; } - } - - if( n===2 && this.isActif ) n = 4; - - this.stat = n; - - switch( n ){ - - case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base - case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over - case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.action; break; // down - case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.action; break; // actif - - } - - change = true; - - } - - return change - - - - } - - reset () { - - this.cursor(); - return this.mode( this.isActif ? 4 : 1 ) - - } - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = (this.sa + 40) + 'px'; - s[3].width = (this.sb - 40) + 'px'; - s[4].left = (this.sa+8) + 'px'; - - } - -} - -class Bitmap extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || ''; - this.refTexture = o.texture || null; - this.img = null; - - this.isDown = false; - this.neverlock = true; - - - - const cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); - - this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); - this.c[3].textContent = this.value; - - let fltop = Math.floor(this.h*0.5)-7; - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'load' ], fill:cc.text, stroke:'none'}); - - this.stat = 1; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.x > this.sa && l.x < this.sa+30 ) return 'over'; - return '0' - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( this.isDown ){ - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove( e ); - } - - return false; - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false; - - if( name === 'over' ){ - this.isDown = true; - Files.load( { callback:this.changeBitmap.bind(this) } ); - - } - - - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove( e ); - - } - - mousemove ( e ) { - - let up = false; - - let name = this.testZone( e ); - - if( name === 'over' ){ - this.cursor('pointer'); - up = this.mode( this.isDown ? 3 : 2 ); - } else { - up = this.reset(); - } - - return up; - - } - - // ---------------------- - - changeBitmap( img, fname ){ - - if( img ){ - this.img = img; - this.apply( fname ); - } else { - this.img = null; - this.apply( 'null' ); - } - - } - - // ---------------------- - - apply ( v ) { - - v = v || ''; - - if( v !== this.value ) { - this.value = v; - this.c[3].textContent = this.value; - - if( this.img !== null ){ - if( this.objectLink !== null ) this.objectLink[ this.val ] = v; - if( this.callback ) this.callback( this.value, this.img, this.name ); - } - - } - - this.mode(1); - - } - - update () { - - this.mode( 3 ); - - } - - mode ( n ) { - - let change = false; - let cc = this.colors; - - if( this.stat !== n ){ - - this.stat = n; - - switch( n ){ - - case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base - case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over - case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.over; break; // down - case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.select; break; // actif - - } - - change = true; - - } - - return change; - - - - } - - reset () { - - this.cursor(); - return this.mode( this.isActif ? 4 : 1 ); - - } - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = (this.sa + 40) + 'px'; - s[3].width = (this.sb - 40) + 'px'; - s[4].left = (this.sa+8) + 'px'; - - } - -} - -//import { Proto } from '../core/Proto.js'; - -class Selector extends Button { - - constructor( o = {} ) { - - if( o.selectable === undefined ) o.selectable = true; - super( o ); - - } - -} - -class Item extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.p = 100; - this.value = this.txt; - this.status = 1; - - this.itype = o.itype || 'none'; - this.val = this.itype; - - this.graph = this.svgs[ this.itype ]; - - let fltop = Math.floor(this.h*0.5)-7; - - this.c[2] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.graph, fill:this.colors.text, stroke:'none'}); - - this.s[1].marginLeft = 20 + 'px'; - - this.init(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousemove ( e ) { - - this.cursor('pointer'); - - //up = this.modes( this.isDown ? 3 : 2, name ); - - } - - mousedown ( e ) { - - if( this.isUI ) this.main.resetItem(); - - this.selected( true ); - - this.send(); - - return true; - - } - - uiout () { - - if( this.isSelect ) this.mode(3); - else this.mode(1); - - } - - uiover () { - - if( this.isSelect ) this.mode(4); - else this.mode(2); - - } - - update () { - - } - - /*rSize () { - - super.rSize(); - - }*/ - - mode ( n ) { - - let change = false; - - if( this.status !== n ){ - - this.status = n; - let s = this.s, cc = this.colors; - - switch( n ){ - - case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; - case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; - case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; - case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; - - } - - change = true; - - } - - return change; - - } - - reset () { - - this.cursor(); - // return this.mode( 1 ); - - } - - selected ( b ){ - - if( this.isSelect ) this.mode(1); - - this.isSelect = b || false; - - if( this.isSelect ) this.mode(3); - - } - - -} - -class Grid extends Proto { - - constructor( o = {} ) { - - super( o ); - - /*this.values = o.values || []; - - if( typeof this.values === 'string' ) this.values = [ this.values ];*/ - - this.values = []; - - if( o.values ){ - if( o.values instanceof Array ){ - this.values = o.values; - } else if( o.values instanceof String ){ - this.values = [ o.values ]; - } else if( o.values instanceof Object ){ - this.refObject = o.values; - for( let g in this.refObject ) this.values.push( g ); - } - } - - this.lng = this.values.length; - - - - this.value = o.value || null; - - - - - let cc = this.colors; - - - this.isSelectable = o.selectable || false; - this.spaces = o.spaces || [ cc.sx, cc.sy ]; - this.bsize = o.bsize || [ 90, this.h ]; - - this.bsizeMax = this.bsize[0]; - - this.tmp = []; - this.stat = []; - this.grid = [ 2, Math.round( this.lng * 0.5 ) ]; - - this.h = ( this.grid[1] * this.bsize[1] ) + ( this.grid[1] * this.spaces[1] ); //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); - - this.c[1].textContent = ''; - //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); - this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1])+'px; border:none;' ); - - let n = 0, b, td, tr, sel; - - this.res = -1; - this.isDown = false; - this.neverlock = true; - - this.buttons = []; - this.stat = []; - this.tmpX = []; - this.tmpY = []; - - for( let i = 0; i < this.grid[1]; i++ ){ - - tr = this.c[2].insertRow(); - tr.style.cssText = 'pointer-events:none;'; - for( let j = 0; j < this.grid[0]; j++ ){ - - td = tr.insertCell(); - td.style.cssText = 'pointer-events:none;'; - - if( this.values[n] ){ - - sel = false; - if( this.values[n] === this.value && this.isSelectable ) sel = true; - - b = document.createElement( 'div' ); - b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:'+this.bsize[0]+'px; height:'+(this.bsize[1]-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; left:auto; right:auto; border-radius:'+this.radius+'px;'; - b.style.background = sel ? cc.select : cc.button; - b.style.color = sel ? cc.textSelect : cc.text; - b.innerHTML = this.values[n]; - td.appendChild( b ); - - this.buttons.push(b); - this.stat.push(1); - - } else { - - b = document.createElement( 'div' ); - b.style.cssText = this.css.txt + 'position:static; width:'+this.bsize[0]+'px; height:'+this.bsize[1]+'px; text-align:center; left:auto; right:auto; background:none;'; - td.appendChild( b ); - - } - - if(j===0) b.style.cssText += 'float:right;'; - else b.style.cssText += 'float:left;'; - - n++; - - } - } - - this.s[0].border = 'none'; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return -1; - - l.y += this.mtop; - - let tx = this.tmpX; - let ty = this.tmpY; - - let id = -1; - let c = -1; - let line = -1; - let i = this.grid[0]; - while( i-- ){ - if( l.x > tx[i][0] && l.x < tx[i][1] ) c = i; - } - - i = this.grid[1]; - while( i-- ){ - if( l.y > ty[i][0] && l.y < ty[i][1] ) line = i; - } - - if(c!==-1 && line!==-1){ - id = c + (line*2); - if(id>this.lng-1) id = -1; - } - - return id; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( !this.isDown ) return false - - this.isDown = false; - if( this.res !== -1 ){ - this.value = this.values[this.res]; - this.send(); - } - - return this.mousemove( e ) - - } - - mousedown ( e ) { - - if( this.isDown ) return false - this.isDown = true; - return this.mousemove( e ) - - } - - mousemove ( e ) { - - let up = false; - this.res = this.testZone( e ); - - if( this.res !== -1 ){ - this.cursor('pointer'); - up = this.modes( this.isDown ? 3 : 2, this.res ); - } else { - up = this.reset(); - } - - return up; - - } - - // ---------------------- - // MODE - // ----------------------- - - modes ( N = 1, id = -1 ) { - - let i = this.lng, w, n, r = false; - - while( i-- ){ - - n = N; - w = this.isSelectable ? this.values[ i ] === this.value : false; - - if( i === id ){ - if( w && n === 2 ) n = 3; - } else { - n = 1; - if( w ) n = 4; - } - - if( this.mode( n, i ) ) r = true; - - } - - return r - - } - - mode ( n, id ) { - - let change = false; - let cc = this.colors, s = this.buttons; - let i = id; - - if( this.stat[id] !== n ){ - - this.stat[id] = n; - - switch( n ){ - - case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; - case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; - case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; - case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; - - } - - change = true; - - } - - return change; - - } - - // ---------------------- - - reset () { - - this.res = -1; - this.cursor(); - return this.modes() - - } - - - label ( string, n ) { - - this.buttons[n].textContent = string; - - } - - icon ( string, y, n ) { - - this.buttons[n].style.padding = ( y || 0 ) +'px 0px'; - this.buttons[n].innerHTML = string; - - } - - testW () { - - let vw = this.spaces[0]*3 + this.bsizeMax*2, rz = false; - if( vw > this.w ) { - this.bsize[0] = ( this.w-(this.spaces[0]*3) ) * 0.5; - rz = true; - } else { - if( this.bsize[0] !== this.bsizeMax ) { - this.bsize[0] = this.bsizeMax; - rz = true; - } - } - - if( !rz ) return; - - let i = this.buttons.length; - while(i--) this.buttons[i].style.width = this.bsize[0] + 'px'; - - } - - rSize () { - - super.rSize(); - - this.testW(); - - let mid; - - this.tmpX = []; - this.tmpY = []; - - for( let j = 0; j < this.grid[0]; j++ ){ - - if(j===0){ - mid = ( this.w*0.5 ) - ( this.spaces[0]*0.5 ); - this.tmpX.push( [ mid-this.bsize[0], mid ] ); - } else { - mid = ( this.w*0.5 ) + ( this.spaces[0]*0.5 ); - this.tmpX.push( [ mid, mid+this.bsize[0] ] ); - } - - } - - mid = this.spaces[1]; - - for( let i = 0; i < this.grid[1]; i++ ){ - - this.tmpY.push( [ mid, mid + this.bsize[1] ] ); - mid += this.bsize[1] + this.spaces[1]; - - } - - } - -} - -class Pad2D extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.autoWidth = false; - this.minw = this.w; - this.diam = o.diam || this.w; - - //this.margin = 15; - this.pos = new V2(0,0); - this.maxPos = 90; - - this.model = o.stype || 0; - if( o.mode !== undefined ) this.model = o.mode; - - this.min = o.min === undefined ? -1 : o.min; - this.max = o.max === undefined ? 1 : o.max; - - this.range = (this.max - this.min)*0.5; - - this.cmode = 0; - - - //console.log(this.range) - - this.c[0].style.display = 'block'; - - - - - - this.precision = o.precision === undefined ? 2 : o.precision; - - /*this.bounds = {}; - this.bounds.x1 = o.x1 || -1; - this.bounds.x2 = o.x2 || 1; - this.bounds.y1 = o.y1 || -1; - this.bounds.y2 = o.y2 || 1; - - this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); - this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); - - this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); - this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ - - this.value = ( Array.isArray( o.value ) && o.value.length == 2 ) ? o.value : [ 0, 0 ]; - - - this.h = o.h || this.w + 10; - - this.c[0].style.width = this.w + 'px'; - - // Title - if( this.c[1] !== undefined ) { // with title - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - - } - - //this.top -= this.margin - - let cc = this.colors; - - - // Value - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+ ( this.h - 20 ) + 'px; width:100%; color:' + cc.text ); - this.c[2].textContent = this.value; - - // Pad - - let pad = this.getPad2d(); - - this.setSvg( pad, 'fill', cc.back, 0 ); - this.setSvg( pad, 'fill', cc.button, 1 ); - this.setSvg( pad, 'stroke', cc.back, 2 ); - this.setSvg( pad, 'stroke', cc.back, 3 ); - this.setSvg( pad, 'stroke', cc.text, 4 ); - - this.setSvg( pad, 'viewBox', '0 0 '+this.diam+' '+this.diam ); - this.setCss( pad, { width:this.diam, height:this.diam, left:0, top:this.top }); - - this.c[3] = pad; - - this.init(); - this.setValue(); - - } - - testZone ( e ) { - - let l = this.local; - - if( l.x === -1 && l.y === -1 ) return ''; - - - - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'pad'; - - /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { - return 'pad'; - }*/ - - //return ''; - - } - - mouseup ( e ) { - - this.isDown = false; - return this.mode(0); - - } - - mousedown ( e ) { - - if ( this.testZone(e) === 'pad' ) { - - this.isDown = true; - this.mousemove( e ); - return this.mode(1); - } - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - let x = (this.w*0.5) - ( e.clientX - this.zone.x ); - let y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - - let r = 256 / this.diam; - - x = -(x*r); - y = -(y*r); - - x = Tools.clamp( x, -this.maxPos, this.maxPos ); - y = Tools.clamp( y, -this.maxPos, this.maxPos ); - - //let x = e.clientX - this.zone.x; - //let y = e.clientY - this.zone.y - this.top; - - /*if( x < this.margin ) x = this.margin; - if( x > this.w - this.margin ) x = this.w - this.margin; - if( y < this.margin ) y = this.margin; - if( y > this.w - this.margin ) y = this.w - this.margin;*/ - - //console.log(x,y) - - this.setPos( [ x , y ] ); - - this.update( true ); - - } - - mode ( mode ) { - - if( this.cmode === mode ) return false; - - let cc = this.colors; - - switch( mode ){ - case 0: // base - - this.s[2].color = cc.text; - this.setSvg( this.c[3], 'fill', cc.back, 0); - this.setSvg( this.c[3], 'fill', cc.button, 1); - this.setSvg( this.c[3], 'stroke', cc.back, 2); - this.setSvg( this.c[3], 'stroke', cc.back, 3); - this.setSvg( this.c[3], 'stroke', cc.text, 4 ); - - break; - case 1: // down - - this.s[2].color = cc.textSelect; - this.setSvg( this.c[3], 'fill', cc.backoff, 0); - this.setSvg( this.c[3], 'fill', cc.overoff, 1); - this.setSvg( this.c[3], 'stroke', cc.backoff, 2); - this.setSvg( this.c[3], 'stroke', cc.backoff, 3); - this.setSvg( this.c[3], 'stroke', cc.textSelect, 4 ); - - break; - } - - this.cmode = mode; - return true; - - - - } - - update ( up ) { - - //if( up === undefined ) up = true; - - this.c[2].textContent = this.value; - - this.updateSVG(); - - if( up ) this.send(); - - } - - updateSVG() { - - if ( this.model == 1 ) { - - this.setSvg( this.c[3], 'y1', this.pos.y, 2 ); - this.setSvg( this.c[3], 'y2', this.pos.y, 2 ); - - this.setSvg( this.c[3], 'x1', this.pos.x, 3 ); - this.setSvg( this.c[3], 'x2', this.pos.x, 3 ); - - } - - this.setSvg( this.c[3], 'cx', this.pos.x, 4 ); - this.setSvg( this.c[3], 'cy', this.pos.y, 4 ); - - } - - setPos ( p ) { - - //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; - - this.pos.set( p[0]+128 , p[1]+128 ); - - let r = 1/this.maxPos; - - this.value[0] = ((p[0]*r)*this.range).toFixed( this.precision ); - this.value[1] = ((p[1]*r)*this.range).toFixed( this.precision ); - - } - - setValue ( v, up = false ) { - - if( v === undefined ) v = this.value; - - /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; - if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; - if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; - if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ - - this.value[0] = Math.min( this.max, Math.max( this.min, v[0] ) ).toFixed( this.precision ) * 1; - this.value[1] = Math.min( this.max, Math.max( this.min, v[1] ) ).toFixed( this.precision ) * 1; - - this.pos.set( ((this.value[0]/this.range)*this.maxPos)+128 , ((this.value[1]/this.range)*this.maxPos)+128 ); - - //console.log(this.pos) - - this.update( up ); - - } - - /*lerp( s1, s2, d1, d2, c = true ) { - - let s = ( d2 - d1 ) / ( s2 - s1 ); - - return c ? ( v ) => { - return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 - } : ( v ) => { - return ( v - s1 ) * s + d1 - } - - }*/ - -} - -const add = function () { - - let a = arguments; - - let type, o, ref = false, n = null; - - if( typeof a[0] === 'string' ){ - - type = a[0]; - o = a[1] || {}; - - } else if ( typeof a[0] === 'object' ){ // like dat gui - - ref = true; - if( a[2] === undefined ) [].push.call(a, {}); - - type = a[2].type ? a[2].type : autoType( a[0][a[1]], a[2] ); - - o = a[2]; - o.name = a[1]; - if (o.hasOwnProperty("displayName")) o.name = o.displayName; - - if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } - else o.value = a[0][a[1]]; - - } - - let name = type.toLowerCase(); - - if( name === 'group' ){ - o.add = add; - //o.dx = 8 - } - - switch( name ){ - - case 'bool': case 'boolean': n = new Bool(o); break; - case 'button': n = new Button(o); break; - case 'circular': n = new Circular(o); break; - case 'color': n = new Color(o); break; - case 'fps': n = new Fps(o); break; - case 'graph': n = new Graph(o); break; - case 'group': n = new Group(o); break; - case 'joystick': n = new Joystick(o); break; - case 'knob': n = new Knob(o); break; - case 'list': n = new List(o); break; - case 'numeric': case 'number': n = new Numeric(o); break; - case 'slide': n = new Slide(o); break; - case 'textInput': case 'string': n = new TextInput(o); break; - case 'title': case 'text': n = new Title(o); break; - case 'select': n = new Select(o); break; - case 'bitmap': n = new Bitmap(o); break; - case 'selector': n = new Selector(o); break; - case 'empty': case 'space': n = new Empty(o); break; - case 'item': n = new Item(o); break; - case 'grid': n = new Grid(o); break; - case 'pad2d': case 'pad': n = new Pad2D(o); break; - - } - - - - if( n !== null ){ - - Roots.needResize = true; - - if( ref ) n.setReferency( a[0], a[1] ); - return n; - - } - -}; - -const autoType = function ( v, o ) { - - let type = 'slide'; - - if( typeof v === 'boolean' ) type = 'bool'; - else if( typeof v === 'string' ){ - - if( v.substring(0,1) === '#' ) type = 'color'; - else type = 'string'; - - } else if( typeof v === 'number' ){ - - if( o.ctype ) type = 'color'; - else type = 'slide'; - - } else if( typeof v === 'array' && v instanceof Array ){ - - if( typeof v[0] === 'number' ) type = 'number'; - else if( typeof v[0] === 'string' ) type = 'list'; - - } else if( typeof v === 'object' && v instanceof Object ){ - - if( v.x !== undefined ) type = 'number'; - else type = 'list'; - - } - - return type - -}; - -/** - * @author lth / https://github.com/lo-th - */ - -class Gui { - constructor(o = {}) { - this.isGui = true; - - this.name = "gui"; - - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; - - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors); - else this.colors = Tools.defineColor(o); - - //this.cleanning = false - - // style - this.css = Tools.cloneCss(); - - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 - - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; - - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") - ? o.addDOMEventListeners - : true; - - this.callback = o.callback === undefined ? null : o.callback; - - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; - - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - - this.cn = ""; - - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; - - this.size.h = this.size.h < 11 ? 11 : this.size.h; - - // local mouse and zone - this.local = new V2().neg(); - this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; - - // virtual mouse - this.mouse = new V2().neg(); - - this.h = 0; - //this.prevY = -1; - this.sw = 0; - - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); - - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; - - this.autoResize = o.autoResize === undefined ? true : o.autoResize; - - // default position - this.isCenter = o.center || false; - this.cssGui = - o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; - - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; - - this.isNewTarget = false; - - let cc = this.colors; - - this.content = Tools.dom( - "div", - this.css.basic + - " width:0px; height:auto; top:0px; background:" + - cc.content + - "; " + - this.cssGui - ); - - this.innerContent = Tools.dom( - "div", - this.css.basic + - "width:100%; top:0; left:0; height:auto; overflow:hidden;" - ); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); - - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom( - "div", - this.css.basic + flexible + "width:100%; left:0; " - ); - this.innerContent.appendChild(this.inner); - - // scroll - this.scrollBG = Tools.dom( - "div", - this.css.basic + - "right:0; top:0; width:" + - (this.size.s - 1) + - "px; height:10px; display:none; background:" + - cc.background + - ";" - ); - this.content.appendChild(this.scrollBG); - - this.scroll = Tools.dom( - "div", - this.css.basic + - "background:" + - cc.button + - "; right:2px; top:0; width:" + - (this.size.s - 4) + - "px; height:10px;" - ); - this.scrollBG.appendChild(this.scroll); - - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; - - let r = cc.radius; - this.bottom = Tools.dom( - "div", - this.css.txt + - "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + - r + - "px; border-bottom-left-radius:" + - r + - "px; justify-content:center; height:" + - this.bh + - "px; line-height:" + - (this.bh - 5) + - "px; color:" + - cc.text + - ";" - ); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - this.bottom.style.background = cc.background; - - // - - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; - - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } - - if (this.parent !== null) this.parent.appendChild(this.content); - - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } - - // height transition - this.transition = - o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - - this.setWidth(); - - if (this.isCanvas) this.makeCanvas(); - - Roots.add(this); - } - - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseUp(x, y) { - /* - - clientX,clientY are no used when isCanvas==true - */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); - - Roots.needReZone = true; - } - - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = - "height " + this.transition + "s ease-out"; - this.content.style.transition = - "height " + this.transition + "s ease-out"; - this.bottom.style.transition = "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } - - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } - - // ---------------------- - // CANVAS - // ---------------------- - - onDraw() {} - - makeCanvas() { - this.canvas = document.createElementNS( - "http://www.w3.org/1999/xhtml", - "canvas" - ); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - - //console.log( this.canvas.width, this.canvas.height ) - } - - draw(force) { - if (this.canvas === null) return; - - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } - - ////// - - getDom() { - return this.content; - } - - noMouse() { - this.mouse.neg(); - } - - setMouse(uv, flip = true) { - if (flip) - this.mouse.set( - Math.round(uv.x * this.canvas.width), - this.canvas.height - Math.round(uv.y * this.canvas.height) - ); - else - this.mouse.set( - Math.round(uv.x * this.canvas.width), - Math.round(uv.y * this.canvas.height) - ); - //this.mouse.set( m.x, m.y ); - - //console.log("setMouse "+uv.x+" "+uv.y) - } - - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } - - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } - - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } - - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } - - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } - - onChange(f) { - this.callback = f || null; - return this; - } - - // ---------------------- - // STYLES - // ---------------------- - - mode(n) { - let needChange = false; - let cc = this.colors; - - if (n !== this.cn) { - this.cn = n; - - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } - - needChange = true; - } - - return needChange; - } - - // ---------------------- - // TARGET - // ---------------------- - - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } - - this.proto = null; - this.current = -1; - - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - - Roots.cursor(); - return true; - } - - // ---------------------- - // ZONE TEST - // ---------------------- - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - - this.isReset = false; - - let name = ""; - - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; - else name = l.x > s ? "scroll" : "content"; - - return name; - } - - // ---------------------- - // EVENTS - // ---------------------- - - handleEvent(e) { - //if( this.cleanning ) return - - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; - - let change = false; - let protoChange = false; - - let name = this.testZone(e); - - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; - - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } - - if (!name) return; - - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - - if (Roots.isMobile && type === "mousedown") this.getNext(e, change); - - if (this.proto) protoChange = this.proto.handleEvent(e); - - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) - change = this.onWheel(e); - - if (!Roots.lock) { - this.getNext(e, change); - } - - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } - - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); - - break; - } - - if (this.isDown) change = true; - if (protoChange) change = true; - - if (type === "keyup") change = true; - if (type === "keydown") change = true; - - if (change) this.draw(); - } - - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); - - if (next !== this.current) { - this.clearTarget(); - this.current = next; - this.isNewTarget = true; - } - - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } - - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } - - // ---------------------- - // RESET - // ---------------------- - - reset(force) { - if (this.isReset) return; - - //this.resetItem(); - - this.mouse.neg(); - this.isDown = false; - - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); - - if (r || r2) this.draw(true); - - this.isReset = true; - - //Roots.lock = false; - } - - // ---------------------- - // ADD NODE - // ---------------------- - - add() { - //if(this.cleanning) this.cleanning = false - - let a = arguments; - let ontop = false; - - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; - - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); - else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } - - let u = add.apply(this, a); - - if (u === null) return; - - if (ontop) this.uis.unshift(u); - else this.uis.push(u); - - this.calc(); - - this.isEmpty = false; - - return u; - } - - // remove one node - - remove(n) { - if (n.dispose) n.dispose(); - } - - // call after uis clear - - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } - - // clear all gui - - empty() { - //this.cleanning = true - - //this.close(); - - let i = this.uis.length, - item; - - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } - - this.uis = []; - this.isEmpty = true; - this.calc(); - } - - clear() { - this.empty(); - } - - clear2() { - setTimeout(this.empty.bind(this), 0); - } - - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } - - // ---------------------- - // ITEMS SPECIAL - // ---------------------- - - resetItem() { - if (!this.isItemMode) return; - - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } - - setItem(name) { - if (!this.isItemMode) return; - - name = name || ""; - this.resetItem(); - - if (!name) { - this.update(0); - return; - } - - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) - this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } - - // ---------------------- - // SCROLL - // ---------------------- - - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; - - if (b) { - this.total = this.h; - - this.maxView = this.maxHeight; - - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; - - this.range = this.maxView - this.sh; - - this.oy = Tools.clamp(this.oy, 0, this.range); - - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } - - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } - - update(y) { - y = Tools.clamp(y, 0, this.range); - - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } - - // ---------------------- - // RESIZE FUNCTION - // ---------------------- - - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } - - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } - - setHeight() { - if (this.tmp) clearTimeout(this.tmp); - - this.zone.h = this.bh; - this.isScroll = false; - - if (this.isOpen) { - this.h = this.calcUis(); - - let hhh = this.forceHeight - ? this.forceHeight + this.zone.y - : window.innerHeight; - - this.maxHeight = hhh - this.zone.y - this.bh; - - let diff = this.h - this.maxHeight; - - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } - - this.upScroll(this.isScroll); - - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; - - if (this.forceHeight && this.lockHeight) - this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } - - rezone() { - Roots.needReZone = true; - } - - setWidth(w) { - if (w) this.zone.w = w; - - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) - this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } - - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } -} - -export { Files, Gui, REVISION, Tools, add }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0pIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNZLE1BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsTUFBTSxDQUFDLEdBQUc7QUFDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7QUFDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7QUFDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0FBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSztBQUNiLEVBQUUsS0FBSyxFQUFFLEtBQUs7QUFDZCxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDYjtBQUNBLEVBQUUsVUFBVSxFQUFFLElBQUk7QUFDbEIsRUFBRSxVQUFVLEVBQUUsS0FBSztBQUNuQixFQUFFLFNBQVMsRUFBRSxLQUFLO0FBQ2xCLEVBQUUsWUFBWSxFQUFFLEtBQUs7QUFDckIsRUFBRSxPQUFPLEVBQUUsS0FBSztBQUNoQixFQUFFLG9CQUFvQixFQUFFLElBQUk7QUFDNUI7QUFDQSxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQ2IsRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUNiO0FBQ0E7QUFDQSxFQUFFLFdBQVcsRUFBRSxDQUFDLGFBQWEsQ0FBQztBQUM5QixFQUFFLFlBQVksRUFBRSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDO0FBQzNELEVBQUUsUUFBUSxFQUFFLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUM7QUFDM0Q7QUFDQSxFQUFFLGFBQWEsRUFBRSxJQUFJO0FBQ3JCLEVBQUUsT0FBTyxFQUFFLElBQUk7QUFDZixFQUFFLFFBQVEsRUFBRSxJQUFJO0FBQ2hCO0FBQ0EsRUFBRSxTQUFTLEVBQUUsTUFBTTtBQUNuQjtBQUNBLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixFQUFFLE1BQU0sRUFBRSxJQUFJO0FBQ2QsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQjtBQUNBLEVBQUUsV0FBVyxFQUFFLElBQUk7QUFDbkIsRUFBRSxXQUFXLEVBQUUsSUFBSTtBQUNuQixFQUFFLFFBQVEsRUFBRSxLQUFLO0FBQ2pCLEVBQUUsVUFBVSxFQUFFLEtBQUs7QUFDbkIsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsUUFBUSxFQUFFLENBQUM7QUFDYixFQUFFLEdBQUcsRUFBRSxFQUFFO0FBQ1QsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNSLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNaLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNYO0FBQ0EsRUFBRSxVQUFVLEVBQUUsS0FBSztBQUNuQjtBQUNBLEVBQUUsTUFBTSxFQUFFLEtBQUs7QUFDZixFQUFFLE9BQU8sRUFBRSxFQUFFO0FBQ2I7QUFDQSxFQUFFLENBQUMsRUFBRTtBQUNMLElBQUksSUFBSSxFQUFFLElBQUk7QUFDZCxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksT0FBTyxFQUFFLEdBQUc7QUFDaEIsSUFBSSxHQUFHLEVBQUUsSUFBSTtBQUNiLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsRUFBRSxLQUFLO0FBQ2pCO0FBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYLEVBQUUsV0FBVyxFQUFFLEtBQUs7QUFDcEI7QUFDQSxFQUFFLE9BQU8sRUFBRSxZQUFZO0FBQ3ZCLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRztBQUNuRCxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDOUMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3BCO0FBQ0EsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakI7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN4QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFVBQVUsRUFBRSxZQUFZO0FBQzFCLElBQUksSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztBQUNoQyxJQUFJO0FBQ0osTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztBQUN6QixNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDeEIsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztBQUN0QixNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3RCLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7QUFDNUIsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0FBQy9CO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixTQUFTLE9BQU8sS0FBSyxDQUFDO0FBQ3RCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2xCLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzNCLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsVUFBVSxFQUFFLFlBQVk7QUFDMUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTztBQUMvQjtBQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUM1QjtBQUNBLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDaEMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN4QjtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7QUFDckIsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzNELEtBQUssTUFBTTtBQUNYLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNwRSxJQUFJLElBQUksQ0FBQyxDQUFDLG9CQUFvQixFQUFFO0FBQ2hDLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUM7QUFDQTtBQUNBLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDO0FBQ0EsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoRCxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlDLEtBQUs7QUFDTCxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDMUIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksRUFBRSxZQUFZO0FBQzVCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTztBQUNoQztBQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUM1QjtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7QUFDckIsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsb0JBQW9CLEVBQUU7QUFDaEMsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sR0FBRyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBO0FBQ0EsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hELE1BQU0sR0FBRyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRCxNQUFNLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUM7QUFDQSxNQUFNLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUMsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFDLEtBQUs7QUFDTCxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25EO0FBQ0EsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztBQUMzQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sRUFBRSxZQUFZO0FBQ3RCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNO0FBQ3ZCLE1BQU0sQ0FBQyxDQUFDO0FBQ1I7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0QsS0FBSztBQUNMO0FBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxFQUFFLFlBQVk7QUFDbkIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzdCLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ25CLEdBQUc7QUFDSDtBQUNBLEVBQUUsRUFBRSxFQUFFLFlBQVk7QUFDbEIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLE1BQU0sRUFBRSxZQUFZO0FBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxFQUFFLFVBQVUsS0FBSyxFQUFFO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3pFO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QjtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN0QjtBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25ELElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9DO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLFNBQVMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDckI7QUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDbEM7QUFDQSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUM7QUFDdkUsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDO0FBQ3ZFO0FBQ0EsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQztBQUNuQixNQUFNLENBQUMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN4RDtBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztBQUMzRCxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7QUFDdkQsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO0FBQ3RDLE1BQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQ3JCO0FBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUMxQixRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNuQixPQUFPO0FBQ1AsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztBQUMzQixLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtBQUNoQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ3pDO0FBQ0E7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtBQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDMUIsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtBQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7QUFDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNqQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFD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QUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0FBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0FBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtBQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkIsU0FBUztBQUNULFFBQVEsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDM0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUMsYUFBYTtBQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQixZQUFZLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDekcsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFlBQVksRUFBRSxXQUFXLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRztBQUM5RDtBQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakQ7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRDtBQUNBLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0c7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sRUFBRSxXQUFXLEtBQUssR0FBRztBQUNoQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBRztBQUNwQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUNwSixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JIO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxD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QUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0FBQ0E7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0FBQ0E7QUFDQTtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxX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Q0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0FBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN2QjtBQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7QUFDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsWUFBWSxFQUFFLEdBQUc7QUFDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7QUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxhQUFhLENBQUM7QUFDZDtBQUNBLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlEO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkI7QUFDQSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixnQkFBZ0IsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUMxQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRztBQUNBLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0QsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FB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QyxRQUFRLENBQUM7QUFDM0M7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMzQjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFELFNBQVMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QjtBQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztBQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqRDtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDdkQ7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUN4QztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDbkM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFB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QUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzdFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0FBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsT0FBTztBQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN6QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxHQUFHO0FBQ1QsSUFBSSxJQUFJLENB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LENBQUM7QUFDakUsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDcEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBQzdDLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxhQUFhLEdBQUc7QUFDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztBQUM5RSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7QUFDL0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7QUFDcEMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJ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LElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO0FBQzNFLE1BQU07QUFDTixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRTtBQUNqQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO0FBQzFCLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzNDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3JCLE1BQU0sT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ1gsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0FBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0FBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0FBQ2IsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0FBQ2IsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsRUFBRSxLQUFLLENBQUMs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LENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0FBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUNB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bEQ7QUFDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztBQUM1RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7QUFDQTtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0FBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztBQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFJO0FBQ3REO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7QUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztBQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUU7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDbkM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUk7QUFDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwQztBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU07QUFDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtBQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtBQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRTtBQUN4QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQztBQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUN0QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUNsSTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUN0QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtBQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0FBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RDtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0FBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RDtBQUNBLFlBQVksTUFBTTtBQUNsQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0FBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7QUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7QUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxVQUFVLEdBQUc7QUFDbEM7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JEO0FBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7QUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN4RCxhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7QUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCO0FBQ0EsU0FBUztBQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNsRCxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsUUFBUSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbEc7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5RDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7QUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ2hDLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztBQUNqSixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3pEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNqT08sTUFBTSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNuQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7QUFDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztBQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7QUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUN2TTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsT0FBTztBQUNQO0FBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakM7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFH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LEtBQUssQ0FBQztBQUMxQztBQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7QUFDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztBQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUM7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0FBQ0E7QUFDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtBQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7QUFDNUQ7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0FBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtBQUNwQztBQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0FBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQztBQUMvQjtBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMs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Q0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ25DO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxD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SUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FB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R0FBRyxDQUFDLE9BQU07QUFDL0IsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2xCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRTtBQUN6QyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFFO0FBQy9CLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNwQztBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7QUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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RSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksRUFBRSxH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QUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7QUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7QUFDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7QUFDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDM0QsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtBQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0FBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7QUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7QUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsU0FBUyxNQUFNO0FBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRjtBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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LENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7QUFDekQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDakYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7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LENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0IsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztBQUM5QjtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDckQ7QUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7QUFDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENB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LEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1RDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDckU7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDakMsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JGO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7QUFDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztBQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3pEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUNyQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0FBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7QUFDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcscUNBQXFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNERBQTRELENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyVSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsZ0RBQWdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNySztBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2xJLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFB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LEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzNCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDM0IsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQzdDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUk7QUFDakQsWUFBWSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztBQUN0QyxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7QUFDL0MsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksZ0JBQWU7QUFDckQsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQUs7QUFDbkMsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksTUFBSztBQUN6QyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxLQUFJO0FBQzVDLFFBQVEsSUFBSSxDQUFD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LFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3hELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0I7QUFDQSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksWUFBWSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDNUIsUUFBUSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7QUFDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxPQUFPO0FBQ3JDO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMs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QUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtBQUN0RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ3BDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzdCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDckMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztBQUMxUDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pKO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQzFCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztBQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQ3hCO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDckQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRTtBQUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDMUIsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7QUFDOUIsWUFBWSxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDN0IsYUFBYSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7QUFDaEMsYUFBYSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFVBQVUsRUFBRSxJQUFJLENBQUMs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ZCxRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ2QsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3ZCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoQjtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtBQUM1QixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUNoQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUM3RDtBQUNBLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0MsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFL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TUFBTSxFQUFFLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDckIsTUFBTSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVFO0FBQ0E7QUFDQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0E7QUFDQSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RDtBQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNoRCxNQUFNLElBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDM0Q7QUFDQSxNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRDtBQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEM7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ2hCLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUNwRCxRQUFRLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsUUFBUSxJQUFJLENBQUMsS0FB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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUN4RCxRQUFRLE1BQU07QUFDZCxNQUFNLEtBQUssQ0FBQztBQUNaO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDdEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztBQUM1RCxRQUFRLE1BQU07QUFDZCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO0FBQ2IsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFEO0FBQ0EsSUFBSSxJQUFJLE9BQU87QUFDZixNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDM0M7QUFDQTtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0FBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLEdBQUc7QUFDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7QUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEM7QUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsQixHQUFHO0FBQ0g7O0FDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxT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QyxRQUFRLEVBQUUsT0FBTztBQUNsQztBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7QUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0FBQy9CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztBQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztBQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7QUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdkM7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7QUFDM0M7QUFDQSxRQUFRLEdB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QUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7QUFDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUMzQixLQUFLO0FBQ0w7QUFDQTs7QUMxRE8sTUFBTSxNQUFNLFNBQVMsS0FBSyxDQUFDO0FBQ2xDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUU7QUFDbEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7QUFDM0IsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksVUFBVSxHQUFFO0FBQ2hEO0FBQ0E7QUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsOENBQThDLEdBQUU7QUFDOU07QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxFQUFFLENBQUMsT0FBTyxHQUFHLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUU7QUFDNUwsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBSztBQUMxQztBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7QUFDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDekw7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBQztBQUNyQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBSztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUNoRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNO0FBQzdELFFBQVEsT0FBTyxHQUFHO0FBQ2xCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3pCO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7QUFDL0I7QUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7QUFDdEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEtBQUs7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxLQUFLO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7QUFDMUI7QUFDQTtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxNQUFLO0FBQ3RCLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtBQUM3QixZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkMsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUU7QUFDakQsU0FBUyxNQUFNO0FBQ2YsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUM3QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sRUFBRTtBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUc7QUFDL0IsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUMzQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0MsWUFBWSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRztBQUNkO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3ZCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsTUFBSztBQUMxQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQzdCO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQzVDO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0FBQ3RGLHFCQUFxQixFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUU7QUFDOUMsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDekI7QUFDQSxZQUFZLFFBQVEsQ0FBQztBQUNyQjtBQUNBLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07QUFDL0YsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTTtBQUNwRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0FBQ25HLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07QUFDckc7QUFDQSxhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU0sR0FBRyxLQUFJO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLE1BQU07QUFDckI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2hEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUc7QUFDbkM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7QUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksS0FBSTtBQUN6QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxLQUFJO0FBQzFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUk7QUFDdEM7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUN0S08sTUFBTSxNQUFNLFNBQVMsS0FBSyxDQUFDO0FBQ2xDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUU7QUFDbEMsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO0FBQzVDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFJO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7QUFDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDhDQUE4QyxHQUFFO0FBQzdNO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRTtBQUM1TCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0FBQzVDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQ3ZMO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLE1BQU0sQ0FBQztBQUM5RCxRQUFRLE9BQU8sR0FBRztBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN6QjtBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDaEM7QUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDakM7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtBQUM3QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSTtBQUM5QixZQUFZLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRTtBQUNuRTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztBQUN2QjtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO0FBQzdCLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRTtBQUNqRCxTQUFTLE1BQU07QUFDZixZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDOUIsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLFlBQVksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLEdBQUcsRUFBRTtBQUNqQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBRztBQUMxQixZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFFO0FBQy9CLFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFJO0FBQzNCLFlBQVksSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUU7QUFDaEMsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRztBQUMvQixZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvQztBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRTtBQUNuQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFDO0FBQzlFLGdCQUFnQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNwRixhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNmO0FBQ0EsUUFBUSxJQUFJLE1BQU0sR0FBRyxNQUFLO0FBQzFCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDN0I7QUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBQztBQUN6QjtBQUNBLFlBQVksUUFBUSxDQUFDO0FBQ3JCO0FBQ0EsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUMvRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNO0FBQ3BHLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07QUFDakcsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUNyRztBQUNBLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDakQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNqQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3BDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztBQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDL0xBO0FBRUE7QUFDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtBQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztBQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdB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UUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztBQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtBQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMs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QUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDM0QsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDMVRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFFO0FBQ3hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzlGO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0FBQ0E7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENB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QUFRLFFBQVEsSUFBSTtBQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0FBQzNELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0FBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0FBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0FBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzlEO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7QUFDaEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUU7QUFDcEU7QUFDQSxZQUFZLE1BQU07QUFDbEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUMxQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkc7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNwSDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDMUI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3UFksTUFBQyxHQUFHLEdBQUcsWUFBWTtBQUMvQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDO0FBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUN0QztBQUNBLFlBQVksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNCO0FBQ0EsU0FBUyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQzlDO0FBQ0EsWUFBWSxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6RDtBQUNBLFlBQVksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3hFO0FBQ0EsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDO0FBQ3hFO0FBQ0EsWUFBWSxJQUFJLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNwRSxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEM7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQzlCLFlBQVksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDeEI7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLFFBQVEsSUFBSTtBQUNwQjtBQUNBLFlBQVksS0FBSyxNQUFNLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2hFLFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNwRCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDeEQsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2xELFlBQVksS0FBSyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUM5QyxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDbEQsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2xELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN4RCxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDaEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2hELFlBQVksS0FBSyxTQUFTLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3JFLFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNsRCxZQUFZLEtBQUssV0FBVyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN6RSxZQUFZLEtBQUssT0FBTyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUMvRCxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDcEQsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3BELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN4RCxZQUFZLEtBQUssT0FBTyxDQUFDLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNoRSxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDaEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2hELFlBQVksS0FBSyxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQzlEO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3hCO0FBQ0EsWUFBWSxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUk7QUFDbkM7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25ELFlBQVksT0FBTyxDQUFDLENBQUM7QUFDckI7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxFQUFDO0FBQ0Q7QUFDTyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUM7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLFFBQU87QUFDdEI7QUFDQSxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxPQUFNO0FBQzlDLFNBQVMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksR0FBRyxRQUFPO0FBQ3JELGFBQWEsSUFBSSxHQUFHLFNBQVE7QUFDNUI7QUFDQSxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDdEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsUUFBTztBQUNwQyxhQUFhLElBQUksR0FBRyxRQUFPO0FBQzNCO0FBQ0EsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLEVBQUU7QUFDM0Q7QUFDQSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxHQUFHLElBQUksR0FBRyxTQUFRO0FBQ3RELGFBQWEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEdBQUcsSUFBSSxHQUFHLE9BQU07QUFDekQ7QUFDQSxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxZQUFZLE1BQU0sRUFBRTtBQUM3RDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsU0FBUTtBQUMvQyxhQUFhLElBQUksR0FBRyxPQUFNO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUk7QUFDZjtBQUNBOztBQ3pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU0sR0FBRyxDQUFDO0FBQ2pCLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN0QjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7QUFDakM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN0QyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQyxTQUFTLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdkI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUM7QUFDekUsUUFBUSxDQUFDLENBQUMsb0JBQW9CO0FBQzlCLFFBQVEsSUFBSSxDQUFDO0FBQ2I7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDakU7QUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO0FBQzVDO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3BFO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZjtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFH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LElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkQ7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFO0FBQ1gsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUI7QUFDQSxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQztBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7QUFDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNoRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFB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LElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNsRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekQ7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVTtBQUMzQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUMxRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxHQUFHO0FBQ1gsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUM1QixHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDZCxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVE7QUFDckIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM1RSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRTtBQUNsQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNoQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxQixLQUFLO0FBQ0wsR0FBRztBQUNIOzs7OyJ9 +/** + * @license + * Copyright 2010-2021 Uil.js Authors + * SPDX-License-Identifier: MIT + */ +const t="4.3.0",s={ui:[],dom:null,ID:null,lock:!1,wlock:!1,current:-1,needReZone:!0,needResize:!1,forceZone:!1,isEventsInit:!1,isLeave:!1,addDOMEventListeners:!0,downTime:0,prevTime:0,prevDefault:["contextmenu"],pointerEvent:["pointerdown","pointermove","pointerup"],eventOut:["pointercancel","pointerout","pointerleave"],xmlserializer:null,tmpTime:null,tmpImage:null,oldCursor:"auto",input:null,parent:null,firstImput:!0,hiddenImput:null,hiddenSizer:null,hasFocus:!1,startInput:!1,inputRange:[0,0],cursorId:0,str:"",pos:0,startX:-1,moveX:-1,debugInput:!1,isLoop:!1,listens:[],e:{type:null,clientX:0,clientY:0,keyCode:NaN,key:null,delta:0},isMobile:!1,now:null,needsUpdate:!1,getTime:function(){return self.performance&&self.performance.now?self.performance.now.bind(performance):Date.now},add:function(t){s.ui.push(t),s.getZone(t),s.isEventsInit||s.initEvents()},testMobile:function(){let t=navigator.userAgent;return!!(t.match(/Android/i)||t.match(/webOS/i)||t.match(/iPhone/i)||t.match(/iPad/i)||t.match(/iPod/i)||t.match(/BlackBerry/i)||t.match(/Windows Phone/i))},remove:function(t){let i=s.ui.indexOf(t);-1!==i&&(s.removeListen(t),s.ui.splice(i,1)),0===s.ui.length&&s.removeEvents()},initEvents:function(){if(s.isEventsInit)return;let t=document.body;s.isMobile=s.testMobile(),s.now=s.getTime(),s.isMobile?t.style.touchAction="none":t.addEventListener("wheel",s,{passive:!1}),console.log("R.addDOMEventListeners "+s.addDOMEventListeners),s.addDOMEventListeners&&(t.addEventListener("pointercancel",s),t.addEventListener("pointerleave",s),t.addEventListener("pointermove",s),t.addEventListener("pointerdown",s),t.addEventListener("pointerup",s),t.addEventListener("keydown",s,!1),t.addEventListener("keyup",s,!1)),window.addEventListener("resize",s.resize,!1),s.isEventsInit=!0,s.dom=t},removeEvents:function(){if(!s.isEventsInit)return;let t=document.body;s.isMobile||t.removeEventListener("wheel",s),s.addDOMEventListeners&&(t.removeEventListener("pointercancel",s),t.removeEventListener("pointerleave",s),t.removeEventListener("pointermove",s),t.removeEventListener("pointerdown",s),t.removeEventListener("pointerup",s),t.removeEventListener("keydown",s),t.removeEventListener("keyup",s)),window.removeEventListener("resize",s.resize),s.isEventsInit=!1},resize:function(){let t,i=s.ui.length;for(;i--;)t=s.ui[i],t.isGui&&!t.isCanvasOnly&&t.autoResize&&t.calc();s.needReZone=!0,s.needResize=!1},out:function(){console.log("im am out"),s.clearOldID()},in:function(){console.log("im am in")},fakeUp:function(){this.handleEvent({type:"pointerup"})},handleEvent:function(t){-1!==s.prevDefault.indexOf(t.type)&&t.preventDefault(),s.needResize&&s.resize(),s.findZone(s.forceZone);let i=s.e,e=!1;"keydown"===t.type&&s.keydown(t),"keyup"===t.type&&s.keyup(t),"wheel"===t.type?i.delta=t.deltaY>0?1:-1:i.delta=0;let h=t.pointerType;if(i.clientX=("touch"===h?t.pageX:t.clientX)||0,i.clientY=("touch"===h?t.pageY:t.clientY)||0,i.type=t.type,-1!==s.eventOut.indexOf(t.type)&&(e=!0,i.type="mouseup"),"pointerleave"===t.type&&(s.isLeave=!0),"pointerdown"===t.type&&(i.type="mousedown"),"pointerup"===t.type&&(i.type="mouseup"),"pointermove"===t.type&&(s.isLeave&&(s.isLeave=!1,s.resize()),i.type="mousemove"),"mousedown"===i.type){if(s.downTime=s.now(),s.downTime-s.prevTime<200)return s.selectAll(),!1;s.prevTime=s.downTime,s.forceZone=!1}"mousedown"===i.type&&s.clearInput(),"mousedown"===i.type&&(s.lock=!0),"mouseup"===i.type&&(s.lock=!1),s.isMobile&&"mousedown"===i.type&&s.findID(i),"mousemove"!==i.type||s.lock||s.findID(i),null!==s.ID&&(s.ID.isCanvasOnly&&(i.clientX=s.ID.mouse.x,i.clientY=s.ID.mouse.y),s.ID.handleEvent(i)),s.isMobile&&"mouseup"===i.type&&s.clearOldID(),e&&s.clearOldID()},findID:function(t){let i,e,h,o=s.ui.length,n=-1;for(;o--;)if(i=s.ui[o],i.isCanvasOnly?(e=i.mouse.x,h=i.mouse.y):(e=t.clientX,h=t.clientY),s.onZone(i,e,h)){n=o,n!==s.current&&(s.clearOldID(),s.current=n,s.ID=i);break}-1===n&&s.clearOldID()},clearOldID:function(){s.ID&&(s.current=-1,s.ID.reset(),s.ID=null,s.cursor())},calcUis:(t,i,e,h=!1)=>{let o,n,r,l=t.length,a=0,c=0,d=0;for(;l--;)o=t[c],c++,!h&&o.isGroup&&o.calcUis(),r=o.margin,o.zone.w=o.w,o.zone.h=o.h+r,o.autoWidth?(a=0,o.zone.x=i.x+o.dx,o.zone.y=e,e+=o.h+r,d+=o.h+r):(0===a&&(d+=o.h+r),o.zone.x=i.x+a,o.zone.y=e,n=s.getWidth(o),n?o.zone.w=o.w=n:o.fw&&(o.zone.w=o.w=o.fw),a+=o.zone.w,a>=i.w&&(e+=o.h+r,a=0));return d},findTarget:function(t,i){let e=t.length;for(;e--;)if(s.onZone(t[e],i.clientX,i.clientY))return e;return-1},findZone:function(t){if(s.needReZone||t){for(var i,e=s.ui.length;e--;)i=s.ui[e],s.getZone(i),i.isGui&&i.calcUis();s.needReZone=!1}},onZone:function(t,s,i){if(void 0===s||void 0===i)return!1;let e=t.zone,h=s-e.x,o=i-e.y,n=h>=0&&o>=0&&h<=e.w&&o<=e.h;return n?t.local.set(h,o):t.local.neg(),n},getWidth:function(t){return t.getDom().clientWidth},getZone:function(t){if(t.isCanvasOnly)return;let s=t.getDom().getBoundingClientRect();t.zone={x:s.left,y:s.top,w:s.width,h:s.height}},cursor:function(t){(t=t||"auto")!==s.oldCursor&&(document.body.style.cursor=t,s.oldCursor=t)},toCanvas:function(t,i,e,h){if(s.xmlserializer||(s.xmlserializer=new XMLSerializer),h&&null!==s.tmpTime&&(clearTimeout(s.tmpTime),s.tmpTime=null),null!==s.tmpTime)return;s.lock&&(s.tmpTime=setTimeout((function(){s.tmpTime=null}),10));let o=!1;i===t.canvas.width&&e===t.canvas.height||(o=!0),null===s.tmpImage&&(s.tmpImage=new Image);let n=s.tmpImage,r=s.xmlserializer.serializeToString(t.content),l=''+r+"";n.onload=function(){let s=t.canvas.getContext("2d");o?(t.canvas.width=i,t.canvas.height=e):s.clearRect(0,0,i,e),s.drawImage(this,0,0),t.onDraw()},n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(l),n.crossOrigin="",s.needsUpdate=!1},setHidden:function(){null===s.hiddenImput&&(s.hiddenImput=document.createElement("input"),s.hiddenImput.type="text",s.hiddenSizer=document.createElement("div"),document.body.appendChild(s.hiddenImput),document.body.appendChild(s.hiddenSizer));let t=s.debugInput?"":"opacity:0; zIndex:0;",i=s.parent.css.txtselect+"padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;"+t;s.hiddenImput.style.cssText=i+"bottom:10px;"+(s.debugInput?"":"transform:scale(0);"),s.hiddenSizer.style.cssText=i+"bottom:40px;",s.hiddenImput.style.width=s.input.clientWidth+"px",s.hiddenImput.value=s.str,s.hiddenSizer.innerHTML=s.str,s.hasFocus=!0},clearHidden:function(t){null!==s.hiddenImput&&(s.hasFocus=!1)},clickPos:function(t){let i=s.str.length,e=0,h=0;for(;i--&&(e+=s.textWidth(s.str[h]),!(e>=t));)h++;return h},upInput:function(t,i){if(null===s.parent)return!1;let e=!1;if(i){let i=s.clickPos(t);if(s.moveX=i,-1===s.startX)s.startX=i,s.cursorId=i,s.inputRange=[s.startX,s.startX];else{s.moveX!==s.startX&&(s.startX>s.moveX?s.inputRange=[s.moveX,s.startX]:s.inputRange=[s.startX,s.moveX])}e=!0}else-1!==s.startX&&(s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.startX=-1,e=!0);return e&&s.selectParent(),e},selectAll:function(){s.parent&&(s.str=s.input.textContent,s.inputRange=[0,s.str.length],s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.cursorId=s.inputRange[1],s.selectParent())},selectParent:function(){var t=s.textWidth(s.str.substring(0,s.cursorId)),i=s.textWidth(s.str.substring(0,s.inputRange[0])),e=s.textWidth(s.str.substring(s.inputRange[0],s.inputRange[1]));s.parent.select(t,i,e,s.hiddenSizer.innerHTML)},textWidth:function(t){return null===s.hiddenSizer?0:(t=t.replace(/ /g," "),s.hiddenSizer.innerHTML=t,s.hiddenSizer.clientWidth)},clearInput:function(){null!==s.parent&&(s.firstImput||s.parent.validate(!0),s.clearHidden(),s.parent.unselect(),s.input.style.background=s.parent.colors.back,s.input.style.borderColor=s.parent.colors.border,s.parent.isEdit=!1,s.input=null,s.parent=null,s.str="",s.firstImput=!0)},setInput:function(t,i){s.clearInput(),s.input=t,s.parent=i,s.input.style.background=s.parent.colors.backoff,s.input.style.borderColor=s.parent.colors.select,s.str=s.input.textContent,s.setHidden()},keydown:function(t){if(null===s.parent)return;let i=t.which;t.shiftKey,s.firstImput=!1,s.hasFocus&&(window.focus(),s.hiddenImput.focus()),s.parent.isEdit=!0,13===i?s.clearInput():s.input.isNum?t.keyCode>47&&t.keyCode<58||t.keyCode>95&&t.keyCode<106||190===t.keyCode||110===t.keyCode||8===t.keyCode||109===t.keyCode?s.hiddenImput.readOnly=!1:s.hiddenImput.readOnly=!0:s.hiddenImput.readOnly=!1},keyup:function(t){null!==s.parent&&(s.str=s.hiddenImput.value,s.parent.allEqual?s.parent.sameStr(s.str):s.input.textContent=s.str,s.cursorId=s.hiddenImput.selectionStart,s.inputRange=[s.hiddenImput.selectionStart,s.hiddenImput.selectionEnd],s.selectParent(),s.parent.validate())},loop:function(){s.isLoop&&requestAnimationFrame(s.loop),s.needsUpdate=s.update(),s.ui[0]&&s.needsUpdate&&s.ui[0].draw()},update:function(){let t=s.listens.length,i=!1;for(;t--;){s.listens[t].listening()&&(i=!0)}return i},removeListen:function(t){let i=s.listens.indexOf(t);-1!==i&&s.listens.splice(i,1),0===s.listens.length&&(s.isLoop=!1)},addListen:function(t){return-1===s.listens.indexOf(t)&&(s.listens.push(t),s.isLoop||(s.isLoop=!0,s.loop()),!0)}},i=s,e={transition:.2,frag:document.createDocumentFragment(),colorRing:null,joystick_0:null,joystick_1:null,circular:null,knob:null,pad2d:null,svgns:"http://www.w3.org/2000/svg",links:"http://www.w3.org/1999/xlink",htmls:"http://www.w3.org/1999/xhtml",DOM_SIZE:["height","width","top","left","bottom","right","margin-left","margin-right","margin-top","margin-bottom"],SVG_TYPE_D:["pattern","defs","transform","stop","animate","radialGradient","linearGradient","animateMotion","use","filter","feColorMatrix"],SVG_TYPE_G:["svg","rect","circle","path","polygon","text","g","line","foreignObject"],PI:Math.PI,TwoPI:2*Math.PI,pi90:.5*Math.PI,pi60:Math.PI/3,torad:Math.PI/180,todeg:180/Math.PI,clamp:(t,s,i)=>t=(t=ti?i:t,isDivid:t=>.5*t===Math.floor(.5*t),size:{w:240,h:20,p:30,s:8},defineColor:(t,s=e.colors)=>{let i={...s},h=["fontFamily","fontWeight","fontShadow","fontSize"],o=!1;t.font&&(t.fontFamily=t.font),t.shadow&&(t.fontShadow=t.shadow),t.weight&&(t.fontWeight=t.weight),t.fontColor&&(t.text=t.fontColor),t.color&&(t.text=t.color),t.text&&(i.text=t.text,t.fontColor||t.color||(i.title=e.ColorLuma(t.text,-.25),i.titleoff=e.ColorLuma(t.text,-.5)),i.textOver=e.ColorLuma(t.text,.25),i.textSelect=e.ColorLuma(t.text,.5)),t.button&&(i.button=t.button,i.border=e.ColorLuma(t.button,.1),i.overoff=e.ColorLuma(t.button,.2)),t.select&&(i.select=t.select,i.over=e.ColorLuma(t.select,-.1)),t.itemBg&&(t.back=t.itemBg),t.back&&(i.back=t.back,i.backoff=e.ColorLuma(t.back,-.1)),t.fontSelect&&(i.textSelect=t.fontSelect),t.groupBorder&&(i.gborder=t.groupBorder),t.bgOver&&(i.backgroundOver=t.bgOver);for(let s in i)void 0!==t[s]&&(i[s]=t[s]);for(let s in t)-1!==h.indexOf(s)&&(o=!0);return o&&e.defineText(i),i},colors:{sx:4,sy:2,radius:2,showOver:1,content:"none",background:"rgba(50,50,50,0.15)",backgroundOver:"rgba(50,50,50,0.3)",title:"#CCC",titleoff:"#BBB",text:"#DDD",textOver:"#EEE",textSelect:"#FFF",back:"rgba(0,0,0,0.2)",backoff:"rgba(0,0,0,0.3)",border:"#4c4c4c",borderSize:1,gborder:"none",groups:"none",button:"#3c3c3c",overoff:"#5c5c5c",over:"#024699",select:"#308AFF",action:"#FF3300",fontFamily:"Consolas, monospace",fontWeight:"normal",fontShadow:"none",fontSize:12,joyOver:"rgba(48,138,255,0.25)",joyOut:"rgba(100,100,100,0.5)",joySelect:"#308AFF",hide:"rgba(0,0,0,0)"},css:{basic:"position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; -o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;",button:"display:flex; align-items:center; justify-content:center; text-align:center;",middle:"display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;"},svgs:{g1:"M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z",g2:"M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z",group:"M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z",arrow:"M 3 8 L 8 5 3 2 3 8 Z",arrowDown:"M 5 8 L 8 3 2 3 5 8 Z",arrowUp:"M 5 2 L 2 7 8 7 5 2 Z",solid:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z",body:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z",vehicle:"M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z",articulation:"M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z",character:"M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z",terrain:"M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z",joint:"M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z",ray:"M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z",collision:"M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z",map:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",material:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",texture:"M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z",object:"M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z",none:"M 9 5 L 5 5 5 9 9 9 9 5 Z",cursor:"M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z",load:"M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z",save:"M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z",extern:"M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z"},rezone(){i.needReZone=!0},getImput:function(){return!!i.input},setStyle:function(t){for(var s in t)e.colors[s]&&(e.colors[s]=t[s]);e.setText()},defineText:function(t){e.setText(t.fontSize,t.text,t.fontFamily,t.fontShadow,t.fontWeight)},setText:function(t,s,i,h,o){let n=e.colors;void 0===i&&(i=n.fontFamily),void 0===t&&(t=n.fontSize),void 0===h&&(h=n.fontShadow),void 0===o&&(o=n.fontWeight),void 0===s&&(s=n.text),isNaN(t)?-1===t.search("em")&&(t+="px"):t+="px",e.css.txt=e.css.basic+e.css.middle+" font-family:"+i+"; font-weight:"+o+"; font-size:"+t+"; color:"+n.text+"; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;","none"!==h&&(e.css.txt+=" text-shadow: 1px 1px 1px "+h+";"),e.css.txtselect=e.css.txt+"padding:0px 4px; border:1px dashed "+n.border+";",e.css.item=e.css.txt+"padding:0px 4px; position:relative; margin-bottom:1px; "},cloneCss:function(){return{...e.css}},clone:function(t){return t.cloneNode(!0)},setSvg:function(t,s,i,e,h){-1===e?t.setAttributeNS(null,s,i):void 0!==h?t.childNodes[e||0].childNodes[h||0].setAttributeNS(null,s,i):t.childNodes[e||0].setAttributeNS(null,s,i)},setCss:function(t,s){for(let i in s)-1!==e.DOM_SIZE.indexOf(i)?t.style[i]=s[i]+"px":t.style[i]=s[i]},set:function(t,s){for(let i in s)"txt"===i&&(t.textContent=s[i]),"link"===i?t.setAttributeNS(e.links,"xlink:href",s[i]):t.setAttributeNS(null,i,s[i])},get:function(t,s){if(void 0===s)return t;if(!isNaN(s))return t.childNodes[s];if(s instanceof Array){if(2===s.length)return t.childNodes[s[0]].childNodes[s[1]];if(3===s.length)return t.childNodes[s[0]].childNodes[s[1]].childNodes[s[2]]}},dom:function(t,s,i,h,o){return t=t||"div",-1!==e.SVG_TYPE_D.indexOf(t)||-1!==e.SVG_TYPE_G.indexOf(t)?"svg"===t?(h=document.createElementNS(e.svgns,"svg"),e.set(h,i)):(void 0===h&&(h=document.createElementNS(e.svgns,"svg")),e.addAttributes(h,t,i,o)):h=void 0===h?document.createElementNS(e.htmls,t):h.appendChild(document.createElementNS(e.htmls,t)),s&&(h.style.cssText=s),void 0===o?h:h.childNodes[o||0]},addAttributes:function(t,s,i,h){let o=document.createElementNS(e.svgns,s);return e.set(o,i),e.get(t,h).appendChild(o),-1!==e.SVG_TYPE_G.indexOf(s)&&(o.style.pointerEvents="none"),o},clear:function(t){for(e.purge(t);t.firstChild;)t.firstChild.firstChild&&e.clear(t.firstChild),t.removeChild(t.firstChild)},purge:function(t){let s,i,h=t.attributes;if(h)for(s=h.length;s--;)i=h[s].name,"function"==typeof t[i]&&(t[i]=null);if(h=t.childNodes,h)for(s=h.length;s--;)e.purge(t.childNodes[s])},addSVGGlowEffect:function(){if(null!==document.getElementById("UILGlow"))return;let t=e.initUILEffects(),s=e.addAttributes(t,"filter",{id:"UILGlow",x:"-20%",y:"-20%",width:"140%",height:"140%"});e.addAttributes(s,"feGaussianBlur",{in:"SourceGraphic",stdDeviation:"3",result:"uilBlur"});let i=e.addAttributes(s,"feMerge",{});for(let t=0;t<=3;t++)e.addAttributes(i,"feMergeNode",{in:"uilBlur"});e.addAttributes(i,"feMergeNode",{in:"SourceGraphic"})},initUILEffects:function(){let t=document.getElementById("UILSVGEffects");return null===t&&(t=e.dom("svg",void 0,{id:"UILSVGEffects",width:"0",height:"0"}),document.body.appendChild(t)),t},ColorLuma:function(t,s){"n"===t&&(t="#000"),(t=String(t).replace(/[^0-9a-f]/gi,"")).length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),s=s||0;let i,e,h="#";for(e=0;e<3;e++)i=parseInt(t.substr(2*e,2),16),i=Math.round(Math.min(Math.max(0,i+i*s),255)).toString(16),h+=("00"+i).substr(i.length);return h},findDeepInver:function(t){return.3*t[0]+.59*t[1]+.11*t[2]<=.6},lerpColor:function(t,s,i){let e={};for(let h=0;h<3;h++)e[h]=t[h]+(s[h]-t[h])*i;return e},hexToHtml:function(t){return"#"+("000000"+(t=void 0===t?0:t).toString(16)).substr(-6)},htmlToHex:function(t){return t.toUpperCase().replace("#","0x")},u255:function(t,s){return parseInt(t.substring(s,s+2),16)/255},u16:function(t,s){return parseInt(t.substring(s,s+1),16)/15},unpack:function(t){return 7==t.length?[e.u255(t,1),e.u255(t,3),e.u255(t,5)]:4==t.length?[e.u16(t,1),e.u16(t,2),e.u16(t,3)]:void 0},p255:function(t){let s=Math.round(255*t).toString(16);return s.length<2&&(s="0"+s),s},pack:function(t){return"#"+e.p255(t[0])+e.p255(t[1])+e.p255(t[2])},htmlRgb:function(t){return"rgb("+Math.round(255*t[0])+","+Math.round(255*t[1])+","+Math.round(255*t[2])+")"},pad:function(t){return 1==t.length&&(t="0"+t),t},rgbToHex:function(t){let s=Math.round(255*t[0]).toString(16),i=Math.round(255*t[1]).toString(16),h=Math.round(255*t[2]).toString(16);return"#"+e.pad(s)+e.pad(i)+e.pad(h)},hueToRgb:function(t,s,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(s-t)*i:i<.5?s:i<2/3?t+6*(s-t)*(2/3-i):t},rgbToHsl:function(t){let s=t[0],i=t[1],e=t[2],h=Math.min(s,i,e),o=Math.max(s,i,e),n=o-h,r=0,l=0,a=(h+o)/2;return a>0&&a<1&&(l=n/(a<.5?2*a:2-2*a)),n>0&&(o==s&&o!=i&&(r+=(i-e)/n),o==i&&o!=e&&(r+=2+(e-s)/n),o==e&&o!=s&&(r+=4+(s-i)/n),r/=6),[r,l,a]},hslToRgb:function(t){let s,i,h=t[0],o=t[1],n=t[2];return 0===o?[n,n,n]:(i=n<=.5?n*(o+1):n+o-n*o,s=2*n-i,[e.hueToRgb(s,i,h+.33333),e.hueToRgb(s,i,h),e.hueToRgb(s,i,h-.33333)])},makeGradiant:function(t,s,i,h){e.dom(t,null,s,i,0);let o,n=i.childNodes[0].childNodes.length-1;for(let t=0;t0){for(a=6;a--;)r[a]=(113*r[a]+u).toFixed(2);c=" M"+r[0]+" "+r[1]+" Q"+r[2]+" "+r[3]+" "+r[4]+" "+r[5],d=[[0,g[0],1],[100,g[1],1]],e.makeGradiant("linearGradient",{id:"G"+l,x1:r[0],y1:r[1],x2:r[4],y2:r[5],gradientUnits:"userSpaceOnUse"},s,d),e.dom("path","",{d:c,"stroke-width":30,stroke:"url(#G"+l+")","stroke-linecap":"butt"},s,1)}m=n-p,g[0]=g[1]}d=[[0,"#FFFFFF",1],[50,"#FFFFFF",0],[50,"#000000",0],[100,"#000000",1]],e.makeGradiant("linearGradient",{id:"GL0",x1:0,y1:u-84.9,x2:0,y2:212.9,gradientUnits:"userSpaceOnUse"},s,d),d=[[0,"#7f7f7f",1],[50,"#7f7f7f",.5],[100,"#7f7f7f",0]],e.makeGradiant("linearGradient",{id:"GL1",x1:78.95,y1:0,x2:226,y2:0,gradientUnits:"userSpaceOnUse"},s,d),e.dom("g",null,{"transform-origin":"128px 128px",transform:"rotate(0)"},s),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"red"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL1)","stroke-width":1,stroke:"url(#GL1)"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL0)","stroke-width":1,stroke:"url(#GL0)"},s,2),e.dom("path","",{d:"M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z",fill:"none","stroke-width":2,stroke:"#000"},s,2),e.dom("circle","",{cx:128,cy:128,r:6,"stroke-width":2,stroke:"#000",fill:"none"},s),e.colorRing=s},icon:function(t,s,i){i=i||40;let h=[""];switch(t){case"logo":h[1]="";break;case"donate":h[1]="";break;case"neo":h[1]="";break;case"phy":h[1]="";break;case"config":h[1]="";break;case"github":h[1]="";break;case"save":h[1]=""}return h[2]="",h.join("\n")},logoFill_d:"\n M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 \n L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 \n M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 \n Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z\n ",logo_github:"\n M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 \n 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 \n 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 \n 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 \n 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z\n ",logo_neo:"\n M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 \n 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 \n 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 \n 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L \n 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z\n ",logo_phy:"\n M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 \n Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95\n ",logo_config:"\n M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 \n L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 \n Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75\n ",logo_donate:"\n M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 \n 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 \n 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 \n 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 \n 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 \n Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 \n 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 \n 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 \n 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M \n 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 \n 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 \n 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 \n 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 \n 200.9 187.5 200.9 187.5 195.35 Z\n "};e.setText();const h=e;class o{static autoTypes(t){let s=[];switch(t){case"svg":s=[{accept:{"image/svg+xml":".svg"}}];break;case"wav":s=[{accept:{"audio/wav":".wav"}}];break;case"mp3":s=[{accept:{"audio/mpeg":".mp3"}}];break;case"mp4":s=[{accept:{"video/mp4":".mp4"}}];break;case"bin":case"hex":s=[{description:"Binary Files",accept:{"application/octet-stream":[".bin",".hex"]}}];break;case"text":s=[{description:"Text Files",accept:{"text/plain":[".txt",".text"],"text/html":[".html",".htm"]}}];break;case"json":s=[{description:"JSON Files",accept:{"application/json":[".json"]}}];break;case"js":s=[{description:"JavaScript Files",accept:{"text/javascript":[".js"]}}];break;case"image":s=[{description:"Images",accept:{"image/*":[".png",".gif",".jpeg",".jpg"]}}];break;case"icon":s=[{description:"Icons",accept:{"image/x-ico":[".ico"]}}];break;case"lut":s=[{description:"Lut",accept:{"text/plain":[".cube",".3dl"]}}]}return s}static async load(t={}){"function"!=typeof window.showOpenFilePicker&&(window.showOpenFilePicker=o.showOpenFilePickerPolyfill);try{let s=t.type||"";const i={excludeAcceptAllOption:!!s,multiple:!1};i.types=o.autoTypes(s);const e=await window.showOpenFilePicker(i),h=await e[0].getFile();if(!h)return null;let n=h.name,r=n.substring(n.lastIndexOf(".")+1,n.length);const l=["png","jpg","jpeg","mp4","webm","ogg","mp3"],a=["sea","z","hex","bvh","BVH","glb","gltf"],c=new FileReader;-1!==l.indexOf(r)?c.readAsDataURL(h):-1!==a.indexOf(r)?c.readAsArrayBuffer(h):c.readAsText(h),c.onload=function(i){let e=i.target.result;switch(s){case"image":let s=new Image;s.onload=function(){t.callback&&t.callback(s,n,r)},s.src=e;break;case"json":t.callback&&t.callback(JSON.parse(e),n,r);break;default:t.callback&&t.callback(e,n,r)}}}catch(s){console.log(s),t.always&&t.callback&&t.callback(null)}}static showOpenFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("input");i.type="file",i.multiple=t.multiple,i.accept=t.types.map((t=>t.accept)).flatMap((t=>Object.keys(t).flatMap((s=>t[s])))).join(","),i.addEventListener("change",(()=>{s([...i.files].map((t=>({getFile:async()=>new Promise((s=>{s(t)}))}))))})),i.click()}))}static async save(t={}){let s=!1;"function"!=typeof window.showSaveFilePicker&&(window.showSaveFilePicker=o.showSaveFilePickerPolyfill,s=!0);try{let i=t.type||"";const e={suggestedName:t.name||"hello",data:t.data||""};e.types=o.autoTypes(i),e.finalType=Object.keys(e.types[0].accept)[0],e.suggestedName+=e.types[0].accept[e.finalType][0];const h=await window.showSaveFilePicker(e);if(s)return;const n=await h.createWritable();let r=new Blob([e.data],{type:e.finalType});await n.write(r),await n.close()}catch(t){console.log(t)}}static showSaveFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("a");i.download=t.suggestedName||"my-file.txt";let e=new Blob([t.data],{type:t.finalType});i.href=URL.createObjectURL(e),i.addEventListener("click",(()=>{s(setTimeout((()=>URL.revokeObjectURL(i.href)),1e3))})),i.click()}))}static async getFolder(){try{const t=await window.showDirectoryPicker(),s=[];for await(const i of t.values()){const t=await i.getFile();s.push(t)}return console.log(s),s}catch(t){console.log(t)}}}class n{constructor(t=0,s=0){this.x=t,this.y=s}set(t,s){return this.x=t,this.y=s,this}divide(t){return this.x/=t.x,this.y/=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divideScalar(t){return this.multiplyScalar(1/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}angle(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t}addScalar(t){return this.x+=t,this.y+=t,this}negate(){return this.x*=-1,this.y*=-1,this}neg(){return this.x=-1,this.y=-1,this}isZero(){return 0===this.x&&0===this.y}copy(t){return this.x=t.x,this.y=t.y,this}equals(t){return t.x===this.x&&t.y===this.y}nearEquals(t,s){return t.x.toFixed(s)===this.x.toFixed(s)&&t.y.toFixed(s)===this.y.toFixed(s)}lerp(t,s){return null===t?(this.x-=this.x*s,this.y-=this.y*s):(this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s),this}}class r{constructor(t={}){this.lock=t.lock||!1,this.neverlock=!1,this.isSpace=t.isSpace||!1,this.main=t.main||null,this.isUI=t.isUI||!1,this.group=t.group||null,this.isListen=!1,this.top=0,this.ytop=0,this.dx=t.dx||0,this.isSelectable=void 0!==t.selectable&&t.selectable,this.unselectable=void 0!==t.unselect?t.unselect:this.isSelectable,this.ontop=!!t.ontop&&t.ontop,this.css=this.main?this.main.css:h.css,this.colors=h.defineColor(t,this.main?this.group?this.group.colors:this.main.colors:h.colors),this.overEffect=this.colors.showOver,this.svgs=h.svgs,this.zone={x:0,y:0,w:0,h:0,d:0},this.local=(new n).neg(),this.isCanvasOnly=!1,this.isSelect=!1,this.p=void 0!==t.p?t.p:h.size.p,this.w=this.isUI?this.main.size.w:h.size.w,void 0!==t.w&&(this.w=t.w),this.h=this.isUI?this.main.size.h:h.size.h,void 0!==t.h&&(this.h=t.h),this.isSpace?this.lock=!0:this.h=this.h<11?11:this.h,this.fw=t.fw||0,this.autoWidth=t.auto||!0,this.isOpen=!1,this.radius=t.radius||this.colors.radius,this.transition=t.transition||h.transition,this.isNumber=!1,this.noNeg=t.noNeg||!1,this.allEqual=t.allEqual||!1,this.mono=!1,this.isEdit=!1,this.simple=t.simple||!1,this.simple&&(this.sa=0),this.setSize(this.w),void 0!==t.sa&&(this.sa=t.sa),void 0!==t.sb&&(this.sb=t.sb),this.simple&&(this.sb=this.w-this.sa),this.sc=void 0===t.sc?47:t.sc,this.objectLink=null,this.isSend=!1,this.objectKey=null,this.txt=t.name||"",this.name=t.rename||this.txt,this.target=t.target||null,this.callback=void 0===t.callback?null:t.callback,this.endCallback=null,this.openCallback=void 0===t.openCallback?null:t.openCallback,this.closeCallback=void 0===t.closeCallback?null:t.closeCallback,null===this.callback&&this.isUI&&null!==this.main.callback&&(this.callback=this.group?this.group.callback:this.main.callback),this.c=[],this.s=[],this.useFlex=!!this.isUI&&this.main.useFlex;let s=this.useFlex?"display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;":"float:left;";this.c[0]=h.dom("div",this.css.basic+s+"position:relative; height:20px;"),this.s[0]=this.c[0].style,this.margin=this.colors.sy,this.mtop=0;let i=h.isDivid(this.margin);if(this.isUI&&this.margin&&(this.s[0].boxSizing="content-box",i?(this.mtop=.5*this.margin,this.s[0].borderTop=this.mtop+"px solid transparent",this.s[0].borderBottom=this.mtop+"px solid transparent"):this.s[0].borderBottom=this.margin+"px solid transparent"),this.simple||(this.c[1]=h.dom("div",this.css.txt+this.css.middle),this.s[1]=this.c[1].style,this.c[1].textContent=this.name,this.s[1].color=this.lock?this.colors.titleoff:this.colors.title),t.pos){this.s[0].position="absolute";for(let s in t.pos)this.s[0][s]=t.pos[s];this.mono=!0}t.css&&(this.s[0].cssText=t.css)}init(){this.ytop=this.top+this.mtop,this.zone.h=this.h+this.margin,this.zone.w=this.w;let t=this.s,s=this.c;t[0].height=this.h+"px",this.isUI&&(t[0].background=this.colors.background),!this.autoWidth&&this.useFlex?(t[0].flex="1 0 auto",t[0].minWidth=this.minw+"px",t[0].textAlign="center"):this.isUI&&(t[0].width="100%"),void 0!==s[1]&&this.autoWidth&&(t[1]=s[1].style,t[1].top="1px",t[1].height=this.h-2+"px");let e=h.frag;for(let i=1,h=s.length;i!==h;i++)void 0!==s[i]&&(e.appendChild(s[i]),t[i]=s[i].style);let o=null!==this.target?this.target:this.isUI?this.main.inner:document.body;this.ontop?o.insertAdjacentElement("afterbegin",s[0]):o.appendChild(s[0]),s[0].appendChild(e),this.rSize(),this.isUI||(this.c[0].style.pointerEvents="auto",i.add(this))}addTransition(){this.baseH&&this.transition&&this.isUI&&(this.c[0].style.transition="height "+this.transition+"s ease-out")}dom(t,s,i,e,o){return h.dom(t,s,i,e,o)}setSvg(t,s,i,e,o){h.setSvg(t,s,i,e,o)}setCss(t,s){h.setCss(t,s)}clamp(t,s,i){return h.clamp(t,s,i)}getColorRing(){return h.colorRing||h.makeColorRing(),h.clone(h.colorRing)}getJoystick(t){return h["joystick_"+t]||h.makeJoystick(t),h.clone(h["joystick_"+t])}getCircular(t){return h.circular||h.makeCircular(t),h.clone(h.circular)}getKnob(t){return h.knob||h.makeKnob(t),h.clone(h.knob)}getPad2d(t){return h.pad2d||h.makePad(t),h.clone(h.pad2d)}cursor(t){i.cursor(t)}update(){}reset(){}content(){return this.c[0]}getDom(){return this.c[0]}uiout(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.background)}uiover(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.backgroundOver)}rename(t){void 0!==this.c[1]&&(this.c[1].textContent=t)}listen(){return this.isListen=i.addListen(this),this}listening(){if(null===this.objectLink)return;if(this.isSend)return;if(this.isEdit)return;return this.setValue(this.objectLink[this.objectKey])}setValue(t){const s=this.value;this.isNumber?this.value=this.numValue(t):this.value=t,this.update();let i=!1;return s!==this.value&&(i=!0),i}onChange(t){if(!this.isSpace)return this.callback=t||null,this}onFinishChange(t){if(!this.isSpace)return this.callback=null,this.endCallback=t,this}onOpen(t){return this.openCallback=t,this}onClose(t){return this.closeCallback=t,this}send(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.isSend=!0,null!==this.objectLink&&(this.objectLink[this.objectKey]=t),this.callback&&this.callback(t,this.objectKey),this.isSend=!1}sendEnd(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.endCallback&&this.endCallback(t),null!==this.objectLink&&(this.objectLink[this.objectKey]=t)}dispose(){this.isListen&&i.removeListen(this),h.clear(this.c[0]),null!==this.target?null!==this.group?this.group.clearOne(this):this.target.removeChild(this.c[0]):this.isUI?this.main.clearOne(this):document.body.removeChild(this.c[0]),this.isUI||i.remove(this),this.c=null,this.s=null,this.callback=null,this.target=null,this.isListen=!1}clear(){}getWidth(){let t=i.getWidth(this);t&&(this.w=t)}setSize(t){if(this.autoWidth)if(this.w=t,this.simple)this.sb=this.w-this.sa;else{let t=this.w*(this.p/100);this.sa=Math.floor(t+8),this.sb=Math.floor(this.w-t-16)}}rSize(){this.autoWidth&&(this.isUI||(this.s[0].width=this.w+"px"),this.simple||(this.s[1].width=this.sa+"px"))}setTypeNumber(t){let s;switch(this.isNumber=!0,this.value=0,void 0!==t.value&&("string"==typeof t.value?this.value=1*t.value:this.value=t.value),this.min=void 0===t.min?-1/0:t.min,this.max=void 0===t.max?1/0:t.max,this.precision=void 0===t.precision?2:t.precision,this.precision){case 0:s=1;break;case 1:s=.1;break;case 2:s=.01;break;case 3:s=.001;break;case 4:s=1e-4;break;case 5:s=1e-5;break;case 6:s=1e-6}this.step=void 0===t.step?s:t.step,this.range=this.max-this.min,this.value=this.numValue(this.value)}numValue(t){return this.noNeg&&(t=Math.abs(t)),1*Math.min(this.max,Math.max(this.min,t)).toFixed(this.precision)}handleEvent(t){if(!this.lock)return this.neverlock&&(i.lock=!1),this[t.type]?this[t.type](t):console.error(t.type,"this type of event no existe !")}wheel(t){return!1}mousedown(t){return!1}mousemove(t){return!1}mouseup(t){return!1}keydown(t){return!1}keyup(t){return!1}setReferency(t,s){this.objectLink=t,this.objectKey=s}display(t=!1){this.s[0].visibility=t?"visible":"hidden"}open(){this.isOpen||(this.isOpen=!0,i.needResize=!0,this.openCallback&&this.openCallback())}close(){this.isOpen&&(this.isOpen=!1,i.needResize=!0,this.closeCallback&&this.closeCallback())}needZone(){i.needReZone=!0}rezone(){i.needReZone=!0}select(){}unselect(){}setInput(t){i.setInput(t,this)}upInput(t,s){return i.upInput(t,s)}selected(t){this.isSelect=t||!1}}class l extends r{constructor(t={}){super(t),this.value=t.value||!1,this.model=void 0!==t.mode?t.mode:0,this.onName=t.rename||this.txt,t.onName&&(t.onname=t.onName),t.onname&&(this.onName=t.onname),this.inh=t.inh||Math.floor(.8*this.h),this.inw=t.inw||36;let s=this.colors;if(0===this.model){let t=Math.floor(.5*this.h)-.5*(this.inh-2);this.c[2]=this.dom("div",this.css.basic+"background:"+s.inputBg+"; height:"+(this.inh-2)+"px; width:"+this.inw+"px; top:"+t+"px; border-radius:10px; border:2px solid "+s.back),this.c[3]=this.dom("div",this.css.basic+"height:"+(this.inh-6)+"px; width:16px; top:"+(t+2)+"px; border-radius:10px; background:"+s.button+";")}else this.p=0,void 0!==this.c[1]&&(this.c[1].textContent=""),this.c[2]=this.dom("div",this.css.txt+this.css.button+"top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.borderSize+"px solid "+s.border+"; border-radius:"+this.radius+"px;");this.stat=-1,this.init(),this.update()}mousedown(t){return this.value=!this.value,this.update(!0),this.mousemove(t)}mousemove(t){return this.cursor("pointer"),this.mode(!0)}reset(){return this.cursor(),this.mode()}mode(t){let s,i=!1,e=this.colors,h=this.s,o=this.value;if(s=t?o?4:3:o?2:1,this.stat!==s){if(this.stat=s,0!==this.model){switch(s){case 1:h[2].color=e.text,h[2].background=e.button;break;case 2:h[2].color=e.textSelect,h[2].background=e.select;break;case 3:h[2].color=e.textOver,h[2].background=e.overoff;break;case 4:h[2].color=e.textOver,h[2].background=e.over}this.c[2].innerHTML=o?this.onName:this.name}else{switch(s){case 1:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.button;break;case 2:h[2].background=h[2].borderColor=e.back,h[3].background=e.textOver;break;case 3:h[2].background=h[2].borderColor=e.back,h[3].background=e.overoff;break;case 4:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.textSelect}h[3].marginLeft=o?"17px":"2px",this.c[1].textContent=o?this.onName:this.name}i=!0}return i}update(t){this.mode(),t&&this.send()}rSize(){super.rSize();let t=this.s,s=this.w-10-this.inw;0===this.model?(t[2].left=s+"px",t[3].left=s+"px"):(t[2].left=this.sa+"px",t[2].width=this.sb+"px")}}class a extends r{constructor(t={}){super(t),this.value="",void 0!==t.value&&(this.value=t.value),this.values=t.value||this.txt,t.values&&(this.values=t.values),t.values||t.value||(this.txt=""),this.onName=t.onName||null,this.on=!1,this.bw=t.forceWidth||0,t.bw&&(this.bw=t.bw),this.space=t.space||3,"string"==typeof this.values&&(this.values=[this.values]),this.isDown=!1,this.neverlock=!0,this.res=0,this.lng=this.values.length,this.tmp=[],this.stat=[];let s,i=this.colors;for(let t=0;te[i][0]&&s.x0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.text,this.setSvg(this.c[3],"stroke",s,1);break;case 1:this.s[2].color=i.textOver,this.setSvg(this.c[3],"stroke",i.backoff,0),s=this.model>0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.textOver,this.setSvg(this.c[3],"stroke",s,1)}return this.cmode=t,!0}reset(){this.isDown=!1}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"circular"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;if(s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=s.angle()-this.pi90,this.r=(this.r%this.twoPi+this.twoPi)%this.twoPi,null!==this.oldr){let t=this.r-this.oldr;this.r=Math.abs(t)>Math.PI?this.oldr:this.r,t>6&&(this.r=0),t<-6&&(this.r=this.twoPi)}let i=1/this.twoPi,e=this.r*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=~~(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("circular"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:sMath.PI?1:0)+" 1 "+i+","+e}update(t){if(this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range,this.setSvg(this.c[3],"d",this.makePath(),1),this.model>0){let t=this.colors,s=h.pack(h.lerpColor(h.unpack(h.ColorLuma(t.text,-.75)),h.unpack(t.text),this.percent));this.setSvg(this.c[3],"stroke",s,1)}t&&this.send()}}class d extends r{constructor(t={}){super(t),this.ctype=t.ctype||"hex",this.wfixe=256,this.cw=this.sb>256?256:this.sb,null!=t.cw&&(this.cw=t.cw),this.side=t.side||"down",this.up="down"===this.side?0:1,this.baseH=this.h,this.offset=new n,this.decal=new n,this.pp=new n;let s=this.colors;this.c[2]=this.dom("div",`${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${s.borderSize}px solid ${s.border};`),this.c[0].style.display="block",this.c[3]=this.getColorRing(),this.c[3].style.visibility="hidden",this.hsl=null,this.value="#ffffff",void 0!==t.value&&(t.value instanceof Array?this.value=h.rgbToHex(t.value):isNaN(t.value)?this.value=t.value:this.value=h.hexToHtml(t.value)),this.bcolor=null,this.isDown=!1,this.fistDown=!1,this.notext=t.notext||!1,this.tr=98,this.tsl=Math.sqrt(3)*this.tr,this.hue=0,this.d=256,this.init(),this.setColor(this.value),void 0!==t.open&&this.open()}testZone(t,s){let i=this.local;return-1===i.x&&-1===i.y?"":this.up&&this.isOpen?i.y>this.wfixe?"title":"color":i.ythis.tr)e=(c+u.pi90)/u.TwoPI,this.hue=(e+1)%1,this.setHSL([(e+1)%1,this.hsl[1],this.hsl[2]]);else{l=s.x*this.ratio,a=s.y*this.ratio;let t=this.hue*u.TwoPI+u.PI;t<0&&(t+=2*u.PI),r=Math.atan2(-a,l),r<0&&(r+=2*u.PI);let i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,h=.5*this.tr,c=Math.tan(e)*h,d=Math.sqrt(l*l+a*a),p=Math.sqrt(h*h+c*c);if(d>p){let s=Math.tan(e)*d,o=Math.atan(s/p);o>u.pi60?o=u.pi60:o<-u.pi60&&(o=-u.pi60),r+=o-e,i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,c=Math.tan(e)*h,d=p=Math.sqrt(h*h+c*c)}n=Math.sin(i)*d/this.tsl+.5;let m=1-2*Math.abs(n-.5);o=(Math.cos(i)*d+this.tr/2)/(1.5*this.tr)/m,o=u.clamp(o,0,1),this.setHSL([this.hsl[0],o,n])}}setHeight(){this.h=this.isOpen?this.wfixe+this.baseH+5:this.baseH,this.s[0].height=this.h+"px",this.zone.h=this.h}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(){super.open(),this.setHeight(),this.up&&(this.zone.y-=this.wfixe+5);let t=this.h-this.baseH;this.s[3].visibility="visible",this.parentHeight(t)}close(){super.close(),this.up&&(this.zone.y+=this.wfixe+5);let t=this.h-this.baseH;this.setHeight(),this.s[3].visibility="hidden",this.parentHeight(-t)}update(t){let s=h.rgbToHex(h.hslToRgb([this.hsl[0],1,.5]));this.moveMarkers(),this.value=this.bcolor,this.setSvg(this.c[3],"fill",s,2,0),this.s[2].background=this.bcolor,this.notext||(this.c[2].textContent=h.htmlToHex(this.bcolor)),this.invert=h.findDeepInver(this.rgb),this.s[2].color=this.invert?"#fff":"#000",t&&("array"===this.ctype&&this.send(this.rgb),"rgb"===this.ctype&&this.send(h.htmlRgb(this.rgb)),"hex"===this.ctype&&this.send(h.htmlToHex(this.value)),"html"===this.ctype&&this.send())}setValue(t){t instanceof Array?this.value=h.rgbToHex(t):isNaN(t)?this.value=t:this.value=h.hexToHtml(t),this.setColor(this.value),this.update()}setColor(t){let s=h.unpack(t);return this.bcolor!==t&&s&&(this.bcolor=t,this.rgb=s,this.hsl=h.rgbToHsl(this.rgb),this.hue=this.hsl[0],this.update()),this}setHSL(t){return this.hsl=t,this.rgb=h.hslToRgb(t),this.bcolor=h.rgbToHex(this.rgb),this.update(!0),this}moveMarkers(){let t=this.pp,s=h;this.invert;let i=this.hsl[0]*s.TwoPI,e=2/3*s.PI,o=this.tr,n=this.hsl[0],r=this.hsl[1],l=this.hsl[2],a=(i-s.pi90)*s.todeg;n=-i+s.pi90;let c=Math.cos(n)*o,d=-Math.sin(n)*o,u=Math.cos(n-e)*o,p=-Math.sin(n-e)*o,m=Math.cos(n+e)*o,g=-Math.sin(n+e)*o,x=(u+m)/2,v=(p+g)/2;i=(1-2*Math.abs(l-.5))*r;let b=u+(m-u)*l+(c-x)*i,f=p+(g-p)*l+(d-v)*i;t.set(b,f).addScalar(128),this.setSvg(this.c[3],"transform","rotate("+a+" )",2),this.setSvg(this.c[3],"cx",t.x,3),this.setSvg(this.c[3],"cy",t.y,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",2,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",3),this.setSvg(this.c[3],"fill",this.bcolor,3)}rSize(){super.rSize();let t=this.s;t[2].width=this.sb+"px",t[2].left=this.sa+"px",this.cw=this.sb>256?256:this.sb,this.rSizeColor(this.cw),this.decal.x=Math.floor(.5*(this.w-this.wfixe))}rSizeColor(t){if(t===this.wfixe)return;this.wfixe=t;let s=this.s;this.decal.y="up"===this.side?2:this.baseH+2,this.mid=Math.floor(.5*this.wfixe),this.setSvg(this.c[3],"viewBox","0 0 "+this.wfixe+" "+this.wfixe),s[3].width=this.wfixe+"px",s[3].height=this.wfixe+"px",s[3].top=this.decal.y+"px",this.ratio=256/this.wfixe,this.square=1/(this.wfixe/256*60),this.setHeight()}}class u extends r{constructor(t={}){super(t),this.round=Math.round,this.baseH=this.h,this.hplus=t.hplus||50,this.res=t.res||40,this.l=1,this.precision=t.precision||0,this.custom=t.custom||!1,this.names=t.names||["FPS","MS"];let s=t.cc||["220,220,220","255,255,0"];this.adding=t.adding||!1,this.range=t.range||[165,100,100],this.alpha=t.alpha||.25,this.values=[],this.points=[],this.textDisplay=[],this.custom||(this.now=i.getTime(),this.startTime=0,this.prevTime=0,this.frames=0,this.ms=0,this.fps=0,this.mem=0,this.mm=0,this.isMem=!(!self.performance||!self.performance.memory),this.isMem&&(this.names.push("MEM"),s.push("0,255,255")),this.txt=t.name||"Fps");let e=Math.floor(.5*this.h)-3;const h=this.colors;this.c[1].textContent=this.txt,this.c[0].style.cursor="pointer",this.c[0].style.pointerEvents="auto";let o="display:none; left:10px; top:"+this.h+"px; height:"+(this.hplus-8)+"px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid "+h.border+";";0!==this.radius&&(o+="border-radius:"+this.radius+"px;"),this.c[2]=this.dom("path",this.css.basic+o,{}),this.c[2].setAttribute("viewBox","0 0 "+this.res+" 50"),this.c[2].setAttribute("height","100%"),this.c[2].setAttribute("width","100%"),this.c[2].setAttribute("preserveAspectRatio","none"),this.c[3]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; left:0; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.c[4]=this.dom("div",this.css.txt+"position:absolute; left:10px; top:"+(this.h+2)+"px; display:none; width:100%; text-align:center;"),t.bottomLine&&(this.c[4]=this.dom("div",this.css.basic+"width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);")),this.isShow=!1;let n=this.s;n[1].lineHeight=this.h-4,n[1].color=h.text,0!==this.radius&&(n[0].borderRadius=this.radius+"px"),"none"!==this.colors.gborder&&(n[0].border="1px solid "+h.gborder);let r=0;for(r=0;r "+this.names[r]+" ")}for(r=this.names.length;r--;)this.dom("path",null,{fill:"rgba("+s[r]+","+this.alpha+")","stroke-width":1,stroke:"rgba("+s[r]+",1)","vector-effect":"non-scaling-stroke"},this.c[2]);this.init()}mousedown(t){this.isShow?this.close():this.open()}tick(t){this.values=t,this.isShow&&(this.drawGraph(),this.upText())}makePath(t){let s="";s+="M -1 50";for(let i=0;i";this.c[4].innerHTML=i}drawGraph(){let t,s=this.c[2],i=this.names.length,e=0,h=0;for(;i--;)t=this.adding?(this.values[h]+e)*this.range[h]:this.values[h]*this.range[h],this.points[h].shift(),this.points[h].push(50-t),this.setSvg(s,"d",this.makePath(this.points[h]),i+1),e+=this.values[h],h++}open(){super.open(),this.h=this.hplus+this.baseH,this.setSvg(this.c[3],"d",this.svgs.g2),null!==this.group?this.group.calc(this.hplus):this.isUI&&this.main.calc(this.hplus),this.s[0].height=this.h+"px",this.s[2].display="block",this.s[4].display="block",this.isShow=!0,this.custom||i.addListen(this)}close(){super.close(),this.h=this.baseH,this.setSvg(this.c[3],"d",this.svgs.g1),null!==this.group?this.group.calc(-this.hplus):this.isUI&&this.main.calc(-this.hplus),this.s[0].height=this.h+"px",this.s[2].display="none",this.s[4].display="none",this.isShow=!1,this.custom||i.removeListen(this),this.c[4].innerHTML=""}begin(){this.startTime=this.now()}end(){let t=this.now();if(this.ms=t-this.startTime,this.frames++,t>this.prevTime+1e3&&(this.fps=this.round(1e3*this.frames/(t-this.prevTime)),this.prevTime=t,this.frames=0,this.isMem)){let t=performance.memory.usedJSHeapSize,s=performance.memory.jsHeapSizeLimit;this.mem=this.round(954e-9*t),this.mm=t/s}return this.values=[this.fps,this.ms,this.mm],this.drawGraph(),this.upText([this.fps,this.ms,this.mem]),t}listening(){this.custom||(this.startTime=this.end())}rSize(){let t=this.s,s=this.w;t[3].left=this.sa+this.sb-6+"px",t[0].width=s+"px",t[1].width=s+"px",t[2].left="10px",t[2].width=s-20+"px",t[4].width=s-20+"px"}}class p extends r{constructor(t={}){super(t),this.value=void 0!==t.value?t.value:[0,0,0],this.lng=this.value.length,this.precision=void 0!==t.precision?t.precision:2,this.multiplicator=t.multiplicator||1,this.neg=t.neg||!1,this.line=void 0===t.line||t.line,this.autoWidth=void 0===t.autoWidth||t.autoWidth,this.isNumber=!1,this.isDown=!1,this.h=t.h||138,this.rh=this.h-10,this.top=0,this.c[0].style.width=this.w+"px",void 0!==this.c[1]&&(this.c[1].style.width=this.w+"px",this.autoWidth||(this.c[1].style.width="100%",this.c[1].style.justifyContent="center"),this.top=10,this.h+=10),this.gh=this.rh-28,this.gw=this.w-28,this.c[2]=this.dom("div",this.css.txt+"display:block; text-align:center; padding:0px 0px; top:"+(this.h-20)+"px; left:14px; width:"+this.gw+"px; color:"+this.colors.text),this.c[2].innerHTML=this.valueToHtml();let s=this.dom("svg",this.css.basic,{viewBox:"0 0 "+this.w+" "+this.rh,width:this.w,height:this.rh,preserveAspectRatio:"none"});this.setCss(s,{width:this.w,height:this.rh,left:0,top:this.top}),this.dom("path","",{d:"",stroke:this.colors.text,"stroke-width":2,fill:"none","stroke-linecap":"butt"},s),this.dom("rect","",{x:10,y:10,width:this.gw+8,height:this.gh+8,stroke:"rgba(0,0,0,0.3)","stroke-width":1,fill:"none"},s),this.iw=(this.gw-4*(this.lng-1))/this.lng;let i=[];this.cMode=[],this.v=[];for(let t=0;t',e="width:"+100/this.lng+"%;";for(;t--;)s===this.lng-1?i+=""+this.value[s]+"":i+=""+this.value[s]+"",s++;return i}updateSVG(){this.line&&this.setSvg(this.c[3],"d",this.makePath(),0);for(let t=0;tthis.top&&s.ye[i][0]&&s.xthis.distance){let t=Math.atan2(this.tmp.x,this.tmp.y);this.tmp.x=Math.sin(t)*this.distance,this.tmp.y=Math.cos(t)*this.distance}this.pos.copy(this.tmp).divideScalar(this.distance).negate(),this.update()}setValue(t){void 0===t&&(t=[0,0]),this.pos.set(t[0]||0,t[1]||0),this.updateSVG()}update(t){void 0===t&&(t=!0),null!==this.interval&&(this.isDown||(this.pos.lerp(null,.3),this.pos.x=Math.abs(this.pos.x)<.01?0:this.pos.x,this.pos.y=Math.abs(this.pos.y)<.01?0:this.pos.y,this.isUI&&this.main.isCanvas&&this.main.draw())),this.updateSVG(),t&&this.send(),this.pos.isZero()&&this.stopInterval()}updateSVG(){let t=.5*this.diam- -this.pos.x*this.distance,s=.5*this.diam- -this.pos.y*this.distance;if(0===this.model){let i=t+5*this.pos.x+5,e=s+5*this.pos.y+10;this.setSvg(this.c[3],"cx",i*this.ratio,3),this.setSvg(this.c[3],"cy",e*this.ratio,3)}else this.setSvg(this.c[3],"cx",t*this.ratio,3),this.setSvg(this.c[3],"cy",s*this.ratio,3);this.setSvg(this.c[3],"cx",t*this.ratio,4),this.setSvg(this.c[3],"cy",s*this.ratio,4),this.value[0]=1*(this.pos.x*this.multiplicator).toFixed(this.precision),this.value[1]=1*(this.pos.y*this.multiplicator).toFixed(this.precision),this.haveText&&(this.c[2].textContent=this.value)}clear(){this.stopInterval(),super.clear()}}class v extends r{constructor(t={}){super(t),this.isCyclic=t.cyclic||!1,this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.autoWidth=!1,this.setTypeNumber(t),this.minw=this.w,this.diam=t.diam||this.w,this.mPI=.8*Math.PI,this.toDeg=180/Math.PI,this.cirRange=2*this.mPI,this.offset=new n,this.h=t.h||this.w+10,this.c[0].style.width=this.w+"px",this.c[0].style.display="block",void 0!==this.c[1]&&(this.c[1].style.width="100%",this.c[1].style.justifyContent="center",this.top=10,this.h+=10),this.percent=0,this.cmode=0;let s=this.colors;this.c[2]=this.dom("div",this.css.txt+"justify-content:center; top:"+(this.h-20)+"px; width:100%; color:"+s.text),this.c[3]=this.getKnob(),this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1),this.setSvg(this.c[3],"stroke",s.text,3),this.setSvg(this.c[3],"d",this.makeGrad(),3),this.setSvg(this.c[3],"viewBox","0 0 "+this.diam+" "+this.diam),this.setCss(this.c[3],{width:this.diam,height:this.diam,left:0,top:this.top}),this.model>0&&(h.dom("path","",{d:"",stroke:s.text,"stroke-width":2,fill:"none","stroke-linecap":"round"},this.c[3]),2==this.model&&(h.addSVGGlowEffect(),this.setSvg(this.c[3],"style",'filter: url("#UILGlow");',4))),this.r=0,this.init(),this.update()}mode(t){let s=this.colors;if(this.cmode===t)return!1;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1);break;case 1:this.s[2].color=s.textOver,this.setSvg(this.c[3],"fill",s.select,0),this.setSvg(this.c[3],"stroke",s.textOver,1)}return this.cmode=t,!0}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"knob"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=-Math.atan2(s.x,s.y),null!==this.oldr&&(this.r=Math.abs(this.r-this.oldr)>Math.PI?this.oldr:this.r),this.r=this.r>this.mPI?this.mPI:this.r,this.r=this.r<-this.mPI?-this.mPI:this.r;let i=1/this.cirRange,e=(this.r+this.mPI)*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=Math.floor(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("knob"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s5?(s=this.range/this.step,t=(a-c)/s):(t=(a-c)/l*2,s=32);for(let c=0;c<=s;++c)i=a-t*c,e=l+44*Math.sin(i),h=l+44*Math.cos(i),o=l+40*Math.sin(i),n=l+40*Math.cos(i),r+="M"+e+" "+h+" L"+o+" "+n+" ";return r}update(t){this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range;let s=Math.PI+this.mPI,i=this.percent*this.cirRange-this.mPI,e=Math.sin(i),o=Math.cos(i),n=25*e+64,r=-25*o+64,l=20*e+64,a=-20*o+64;if(this.setSvg(this.c[3],"d","M "+n+" "+r+" L "+l+" "+a,1),this.model>0){let t=36*Math.sin(s)+64,n=36*Math.cos(s)+64,r=36*e+64,l=-36*o+64,a=i<=Math.PI-this.mPI?0:1;this.setSvg(this.c[3],"d","M "+t+","+n+" A 36,36 1 "+a+" 1 "+r+","+l,4);let c=h.pack(h.lerpColor(h.unpack(h.ColorLuma(this.colors.text,-.75)),h.unpack(this.colors.text),this.percent));this.setSvg(this.c[3],"stroke",c,4)}t&&this.send()}}class b extends r{constructor(t={}){super(t),this.hideCurrent=!1,this.path=t.path||"",this.format=t.format||"",this.isWithImage=""!==this.path,this.preLoadComplete=!1,this.tmpImage={},this.tmpUrl=[],this.m=void 0!==t.m?t.m:5;let s=t.align||"left",i=t.scrollSize||10;this.ss=i+1,this.sMode=0,this.tMode=0,this.listOnly=t.listOnly||!1,this.staticTop=t.staticTop||!1,this.isSelectable=this.listOnly,void 0!==t.select&&(t.selectable=t.select),void 0!==t.selectable&&(this.isSelectable=t.selectable),""===this.txt&&(this.p=0);let e=Math.floor(.5*this.h)-3,h=this.colors;if(this.c[2]=this.dom("div",this.css.basic+"top:0; display:none; border-radius:"+this.radius+"px;"),this.c[3]=this.dom("div",this.css.item+"padding:0px "+this.m+"px; margin-bottom:0px; position:absolute; justify-content:"+s+"; text-align:"+s+"; line-height:"+(this.h-4)+"px; top:1px; background:"+h.button+"; height:"+(this.h-2)+"px; border:1px solid "+h.border+"; border-radius:"+this.radius+"px;"),this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.scrollerBack=this.dom("div",this.css.basic+"right:0px; width:"+i+"px; background:"+h.back+"; display:none;"),this.scroller=this.dom("div",this.css.basic+"right:"+.5*(i-.25*i)+"px; width:"+.25*i+"px; background:"+h.text+"; display:none; "),this.c[3].style.color=h.text,this.list=[],this.refObject=null,t.list)if(t.list instanceof Array)this.list=t.list;else if(t.list instanceof Object){this.refObject=t.list;for(let t in this.refObject)this.list.push(t)}this.items=[],this.prevName="",this.tmpId=0,this.baseH=this.h,this.itemHeight=t.itemHeight||this.h,this.full=t.full||!1,this.py=0,this.ww=this.sb,this.scroll=!1,this.isDown=!1,this.current=null,this.side=t.side||"down",this.up="down"===this.side?0:1,this.up?(this.c[2].style.top="auto",this.c[3].style.top="auto",this.c[4].style.top="auto",this.c[2].style.bottom=this.h-2+"px",this.c[3].style.bottom="1px",this.c[4].style.bottom=e+"px"):this.c[2].style.top=this.baseH+"px",this.listIn=this.dom("div",this.css.basic+"left:0; top:0; width:100%; background:none;"),this.listIn.name="list",this.topList=0,this.c[2].appendChild(this.listIn),this.c[2].appendChild(this.scrollerBack),this.c[2].appendChild(this.scroller),void 0!==t.value?isNaN(t.value)?this.value=t.value:this.value=this.list[t.value]:this.value=this.list[0],this.isOpenOnStart=t.open||!1,this.listOnly&&(this.baseH=5,this.c[3].style.display="none",this.c[4].style.display="none",this.c[2].style.top=this.baseH+"px",this.isOpenOnStart=!0),this.miniCanvas=t.miniCanvas||!1,this.canvasBg=t.canvasBg||"rgba(0,0,0,0)",this.imageSize=t.imageSize||[20,20],this.drag=t.drag||!1,this.dragout=t.dragout||!1,this.dragstart=t.dragstart||null,this.dragend=t.dragend||null,this.setList(this.list),this.init(),this.isWithImage&&this.preloadImage(),this.isOpenOnStart&&this.open(!0),this.baseH+=this.mtop}preloadImage(){this.preLoadComplete=!1,this.tmpImage={};for(let t=0;tthis.h-this.baseH)return"title";if(this.scroll&&s.x>this.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}else{if(s.ythis.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}}return""}testItems(t){let s,i,e,h="",o=this.items,n=o.length;for(;n--;)if(s=o[n],i=s.posy+this.topList,e=s.posy+this.itemHeight+1+this.topList,t>=i&&t<=e)return h="item"+n,this.modeItem(0),this.current=s,this.modeItem(1),h;return h}modeItem(t){if(!this.current)return;this.current.select&&0===t&&(t=2);let s=this.colors;switch(t){case 0:this.current.style.background=s.back,this.current.style.color=s.text;break;case 1:this.current.style.background=s.over,this.current.style.color=s.textOver;break;case 2:this.current.style.background=s.select,this.current.style.color=s.textSelect}}unSelected(){this.current&&(this.modeItem(0),this.current=null)}selected(){this.current&&(this.resetItems(),this.modeItem(2),this.current.select=!0)}resetItems(){let t=this.items.length;for(;t--;)this.items[t].select=!1,this.items[t].style.background=this.colors.back,this.items[t].style.color=this.colors.text}hideActive(){this.hideCurrent&&(this.current&&(this.tmpId=this.current.id),this.resetHide())}resetHide(){console.log(this.tmpId);let t=this.items.length;for(;t--;)t===this.tmpId?(this.items[t].style.height="0px",this.items[t].posy=-1):(this.items[t].style.height=this.itemHeight+"px",this.items[t].posy=(this.itemHeight+1)*(t-1))}mouseup(t){this.isDown=!1}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s?(this.isDown=!0,this.mousemove(t)):"title"===s?(this.modeTitle(2),this.listOnly||(this.hideActive(),this.isOpen?this.close():this.open())):this.current&&(this.value=this.list[this.current.id],this.isSelectable&&this.selected(),this.send(this.value),this.listOnly||(this.close(),this.setTopItem())),!0)}mousemove(t){let s=!1,i=this.testZone(t);if(!i)return s;if("title"===i)this.unSelected(),this.modeTitle(1),this.cursor("pointer");else if("scroll"===i){if(this.cursor("s-resize"),this.modeScroll(1),this.isDown){this.modeScroll(2);let s=this.zone.y+this.baseH-2;this.update(t.clientY-s-.5*this.sh)}}else this.modeTitle(0),this.modeScroll(0),this.cursor("pointer");return i!==this.prevName&&(s=!0),this.prevName=i,s}wheel(t){return"title"!==this.testZone(t)&&(this.py+=10*t.delta,this.update(this.py),!0)}reset(){this.prevName="",this.unSelected(),this.modeTitle(0),this.modeScroll(0)}modeScroll(t){if(t===this.sMode)return;let s=this.scroller.style,i=this.colors;switch(t){case 0:s.background=i.text;break;case 1:case 2:s.background=i.select}this.sMode=t}modeTitle(t){if(t===this.tMode)return;let s=this.s,i=this.colors;switch(t){case 0:s[3].color=i.text,s[3].background=i.button;break;case 1:s[3].color=i.textOver,s[3].background=i.overoff;break;case 2:s[3].color=i.textSelect,s[3].background=i.overoff}this.tMode=t}clearList(){for(;this.listIn.children.length;)this.listIn.removeChild(this.listIn.lastChild);this.items=[]}setList(t){this.clearList(),this.list=t,this.length=this.list.length;let s,e,h=this.hideCurrent?this.length-1:this.length;this.maxItem=this.full?h:5,this.maxItem=hthis.maxHeight&&(this.ww=this.sb-this.ss,this.scroll=!0),this.miniCanvas&&(this.tmpCanvas=document.createElement("canvas"),this.tmpCanvas.width=this.imageSize[0],this.tmpCanvas.height=this.imageSize[1],this.tmpCtx=this.tmpCanvas.getContext("2d"),this.tmpCtx.fillStyle=this.canvasBg,this.tmpCtx.fillRect(0,0,this.imageSize[0],this.imageSize[1]));for(let t=0;tthis.range?this.range:t,this.topList=-Math.floor(t/this.ratio),this.listIn.style.top=this.topList+"px",this.scroller.style.top=Math.floor(t)+"px",this.py=t)}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(t){super.open(),this.update(0),this.h=this.maxHeight+this.baseH+5,this.scroll?(this.scroller.style.display="block",this.scrollerBack.style.display="block"):(this.topList=0,this.h=this.baseH+5+this.max,this.scroller.style.display="none",this.scrollerBack.style.display="none"),this.s[0].height=this.h+"px",this.s[2].display="block",this.up?(this.zone.y-=this.h-(this.baseH-10),this.setSvg(this.c[4],"d",this.svgs.g1)):this.setSvg(this.c[4],"d",this.svgs.g2),this.rSizeContent();let s=this.h-this.baseH;this.zone.h=this.h,t||this.parentHeight(s)}close(){super.close(),this.up&&(this.zone.y+=this.h-(this.baseH-10));let t=this.h-this.baseH;this.h=this.baseH,this.s[0].height=this.h+"px",this.s[2].display="none",this.setSvg(this.c[4],"d",this.svgs.g1),this.zone.h=this.h,this.parentHeight(-t)}text(t){this.c[3].textContent=t}rSizeContent(){let t=this.length;for(;t--;)this.listIn.children[t].style.width=this.ww+"px"}rSize(){super.rSize();let t=this.s,s=this.sb,i=this.sa;void 0!==t[2]&&(t[2].width=s+"px",t[2].left=i+"px",t[3].width=s+"px",t[3].left=i+"px",t[4].left=i+s-15+"px",this.ww=s,this.max>this.maxHeight&&(this.ww=s-this.ss),this.isOpen&&this.rSizeContent())}}class f extends r{constructor(t={}){super(t),this.setTypeNumber(t),this.allway=t.allway||!1,this.isDown=!1,this.value=[0],this.multy=1,this.invmulty=1,this.isSingle=!0,this.isAngle=!1,this.isVector=!1,t.isAngle&&(this.isAngle=!0,this.multy=h.torad,this.invmulty=h.todeg),this.isDrag=t.drag||!1,void 0!==t.value&&(isNaN(t.value)?t.value instanceof Array?(this.value=t.value,this.isSingle=!1):t.value instanceof Object&&(this.value=[],void 0!==t.value.x&&(this.value[0]=t.value.x),void 0!==t.value.y&&(this.value[1]=t.value.y),void 0!==t.value.z&&(this.value[2]=t.value.z),void 0!==t.value.w&&(this.value[3]=t.value.w),this.isSingle=!1,this.isVector=!0):this.value=[t.value]),this.lng=this.value.length,this.tmp=[],this.current=-1,this.prev={x:0,y:0,d:0,v:0};let s=this.colors;this.c[2]=this.dom("div",this.css.basic+" background:"+s.select+"; top:4px; width:0px; height:"+(this.h-8)+"px;"),this.cMode=[];let i=this.lng;for(;i--;)this.isAngle&&(this.value[i]=(180*this.value[i]/Math.PI).toFixed(this.precision)),this.c[3+i]=this.dom("div",this.css.txtselect+"top:1px; height:"+(this.h-2)+"px; color:"+s.text+"; background:"+s.back+"; borderColor:"+s.border+"; border-radius:"+this.radius+"px;"),t.center&&(this.c[2+i].style.textAlign="center"),this.c[3+i].textContent=this.value[i],this.c[3+i].style.color=this.colors.text,this.c[3+i].isNum=!0,this.cMode[i]=0;this.selectId=3+this.lng,this.c[this.selectId]=this.dom("div",this.css.txtselect+"position:absolute; top:2px; height:"+(this.h-4)+"px; padding:0px 0px; width:0px; color:"+s.textSelect+"; background:"+s.select+"; border:none; border-radius:0px;"),this.cursorId=4+this.lng,this.c[this.cursorId]=this.dom("div",this.css.basic+"top:2px; height:"+(this.h-4)+"px; width:0px; background:"+s.text+";"),this.init()}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";let i=this.lng,e=this.tmp;for(;i--;)if(s.x>e[i][0]&&s.x 0";this.easing=t.easing||1,this.setTypeNumber(t),this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.isDown=!1,this.isOver=!1,this.allway=t.allway||!1,this.isDeg=t.isDeg||!1,this.isCyclic=t.cyclic||!1,this.firstImput=!1;let s=this.colors;if(this.c[2]=this.dom("div",this.css.txtselect+"border:none; background:none; width:47px; color:"+s.text+";"),this.c[3]=this.dom("div",this.css.basic+" top:0; height:"+this.h+"px;"),this.c[4]=this.dom("div",this.css.basic+"background:"+s.back+"; top:2px; height:"+(this.h-4)+"px;"),this.c[5]=this.dom("div",this.css.basic+"left:4px; top:5px; height:"+(this.h-10)+"px; background:"+s.text+";"),this.c[2].isNum=!0,this.c[2].style.height=this.h-2+"px",this.c[2].style.lineHeight=this.h-10+"px",0!==this.model){let t=4,i=4,e=8,h=this.h-6,o=16;2===this.model&&(t=0,i=2,e=4,o=2,h=.5*(this.h-6)),3===this.model&&(this.c[5].style.visible="none"),this.c[4].style.borderRadius=t+"px",this.c[4].style.height=e+"px",this.c[4].style.top=.5*this.h-i+"px",this.c[5].style.borderRadius=.5*t+"px",this.c[5].style.height=i+"px",this.c[5].style.top=.5*this.h-.5*i+"px",this.c[6]=this.dom("div",this.css.basic+"border-radius:"+o+"px; margin-left:"+.5*-h+"px; background:"+s.text+"; left:4px; top:3px; height:"+(this.h-6)+"px; width:"+h+"px;")}this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>=this.txl?"text":s.x>=this.sa?"scroll":""}mouseup(t){this.isDown&&(this.isDown=!1)}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s&&(this.isDown=!0,this.old=this.value,this.mousemove(t)),!0)}mousemove(t){let s=!1;if("scroll"===this.testZone(t)?(this.mode(1),this.cursor("w-resize")):this.cursor(),this.isDown){let i=(t.clientX-(this.zone.x+this.sa)-3)/this.ww;i=Math.min(1,Math.max(0,i));let e=Math.pow(i,this.easing)*this.range+this.min,h=i*this.range+this.min;this.sliderValue=this.numValue(h);let o,n=e-this.old;(n>=this.step||n<=this.step)&&(o=Math.floor(n/this.step),this.value=this.numValue(this.old+o*this.step),this.update(!0),this.old=this.value),s=!0}return s}wheel(t){if("scroll"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s=this.sa?"text":""}mouseup(t){if(this.editable)return!!this.isDown&&(this.isDown=!1,this.mousemove(t))}mousedown(t){if(!this.editable)return;let s=this.testZone(t);return!this.isDown&&(this.isDown=!0,"text"===s&&this.setInput(this.c[2]),this.mousemove(t))}mousemove(t){if(!this.editable)return;let s=0;return"text"===this.testZone(t)?this.cursor("text"):this.cursor(),this.isDown&&(s=t.clientX-this.zone.x),this.upInput(s-this.sa-3,this.isDown)}update(){this.c[2].textContent=this.value}reset(){this.cursor()}select(t,s,i,e){let h=this.s,o=this.sa+5;h[4].width="1px",h[4].left=o+s+"px",h[3].left=o+s+"px",h[3].width=i+"px",this.c[3].innerHTML=e}unselect(){let t=this.s;t&&(t[3].width="0px",this.c[3].innerHTML="t",t[4].width="0px")}validate(t){this.allway&&(t=!0),this.value=this.c[2].textContent,""!==this.value?this.c[5].textContent="":this.c[5].textContent=this.placeHolder,t&&this.send()}rSize(){super.rSize();let t=this.s;t[2].left=this.sa+"px",t[2].width=this.sb+"px",t[5].left=this.sa+"px",t[5].width=this.sb+"px"}}class k extends r{constructor(t={}){super(t);let s=t.prefix||"";this.c[2]=this.dom("div",this.css.txt+"justify-content:right; width:60px; line-height:"+(this.h-8)+"px; color:"+this.colors.text),31===this.h&&(this.s[0].height=this.h+"px",this.s[1].top="8px",this.c[2].style.top="8px");let i=this.s;i[1].justifyContent=t.align||"left",i[1].fontWeight=t.fontWeight||"bold",this.c[1].textContent=this.txt.substring(0,1).toUpperCase()+this.txt.substring(1).replace("-"," "),this.c[2].textContent=s,this.init()}text(t){this.c[1].textContent=t}text2(t){this.c[2].textContent=t}rSize(){super.rSize(),this.s[1].width=this.w+"px",this.s[2].left=this.w+"px"}setColor(t){this.s[1].color=t,this.s[2].color=t}}class S extends r{constructor(t={}){super(t),this.value=t.value||"",this.isDown=!1,this.onActif=t.onActif||function(){};const s=this.colors;this.c[2]=this.dom("div",this.css.txt+this.css.button+" top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.buttonBorder+"; border-radius:15px; width:30px; left:10px;"),this.c[3]=this.dom("div",this.css.txtselect+"height:"+(this.h-4)+"px; background:"+s.inputBg+"; borderColor:"+s.inputBorder+"; border-radius:"+this.radius+"px;"),this.c[3].textContent=this.value;let i=Math.floor(.5*this.h)-7;this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:14px; height:14px; left:5px; top:"+i+"px;",{d:this.svgs.cursor,fill:s.text,stroke:"none"}),this.stat=1,this.isActif=!1,this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>this.sa&&s.xthis.sa&&s.xi[r][0]&&s.xe[r][0]&&s.ythis.lng-1&&(h=-1)),h}mouseup(t){return!!this.isDown&&(this.isDown=!1,-1!==this.res&&(this.value=this.values[this.res],this.send()),this.mousemove(t))}mousedown(t){return!this.isDown&&(this.isDown=!0,this.mousemove(t))}mousemove(t){let s=!1;return this.res=this.testZone(t),-1!==this.res?(this.cursor("pointer"),s=this.modes(this.isDown?3:2,this.res)):s=this.reset(),s}modes(t=1,s=-1){let i,e,h=this.lng,o=!1;for(;h--;)e=t,i=!!this.isSelectable&&this.values[h]===this.value,h===s?i&&2===e&&(e=3):(e=1,i&&(e=4)),this.mode(e,h)&&(o=!0);return o}mode(t,s){let i=!1,e=this.colors,h=this.buttons,o=s;if(this.stat[s]!==t){switch(this.stat[s]=t,t){case 1:h[o].style.color=e.text,h[o].style.background=e.button;break;case 2:h[o].style.color=e.textOver,h[o].style.background=e.overoff;break;case 3:h[o].style.color=e.textOver,h[o].style.background=e.over;break;case 4:h[o].style.color=e.textSelect,h[o].style.background=e.select}i=!0}return i}reset(){return this.res=-1,this.cursor(),this.modes()}label(t,s){this.buttons[s].textContent=t}icon(t,s,i){this.buttons[i].style.padding=(s||0)+"px 0px",this.buttons[i].innerHTML=t}testW(){let t=!1;if(3*this.spaces[0]+2*this.bsizeMax>this.w?(this.bsize[0]=.5*(this.w-3*this.spaces[0]),t=!0):this.bsize[0]!==this.bsizeMax&&(this.bsize[0]=this.bsizeMax,t=!0),!t)return;let s=this.buttons.length;for(;s--;)this.buttons[s].style.width=this.bsize[0]+"px"}rSize(){let t;super.rSize(),this.testW(),this.tmpX=[],this.tmpY=[];for(let s=0;sthis.h-this.c[2].offsetHeight?"text":"pad"}mouseup(t){return this.isDown=!1,this.mode(0)}mousedown(t){if("pad"===this.testZone(t))return this.isDown=!0,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=.5*this.w-(t.clientX-this.zone.x),i=.5*this.diam-(t.clientY-this.zone.y-this.ytop),e=256/this.diam;s=-s*e,i=-i*e,s=h.clamp(s,-this.maxPos,this.maxPos),i=h.clamp(i,-this.maxPos,this.maxPos),this.setPos([s,i]),this.update(!0)}mode(t){if(this.cmode===t)return!1;let s=this.colors;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.back,0),this.setSvg(this.c[3],"fill",s.button,1),this.setSvg(this.c[3],"stroke",s.back,2),this.setSvg(this.c[3],"stroke",s.back,3),this.setSvg(this.c[3],"stroke",s.text,4);break;case 1:this.s[2].color=s.textSelect,this.setSvg(this.c[3],"fill",s.backoff,0),this.setSvg(this.c[3],"fill",s.overoff,1),this.setSvg(this.c[3],"stroke",s.backoff,2),this.setSvg(this.c[3],"stroke",s.backoff,3),this.setSvg(this.c[3],"stroke",s.textSelect,4)}return this.cmode=t,!0}update(t){this.c[2].textContent=this.value,this.updateSVG(),t&&this.send()}updateSVG(){1==this.model&&(this.setSvg(this.c[3],"y1",this.pos.y,2),this.setSvg(this.c[3],"y2",this.pos.y,2),this.setSvg(this.c[3],"x1",this.pos.x,3),this.setSvg(this.c[3],"x2",this.pos.x,3)),this.setSvg(this.c[3],"cx",this.pos.x,4),this.setSvg(this.c[3],"cy",this.pos.y,4)}setPos(t){this.pos.set(t[0]+128,t[1]+128);let s=1/this.maxPos;this.value[0]=(t[0]*s*this.range).toFixed(this.precision),this.value[1]=(t[1]*s*this.range).toFixed(this.precision)}setValue(t,s=!1){void 0===t&&(t=this.value),this.value[0]=1*Math.min(this.max,Math.max(this.min,t[0])).toFixed(this.precision),this.value[1]=1*Math.min(this.max,Math.max(this.min,t[1])).toFixed(this.precision),this.pos.set(this.value[0]/this.range*this.maxPos+128,this.value[1]/this.range*this.maxPos+128),this.update(s)}}const T=function(){let t,s,e=arguments,h=!1,o=null;"string"==typeof e[0]?(t=e[0],s=e[1]||{}):"object"==typeof e[0]&&(h=!0,void 0===e[2]&&[].push.call(e,{}),t=e[2].type?e[2].type:O(e[0][e[1]],e[2]),s=e[2],s.name=e[1],s.hasOwnProperty("displayName")&&(s.name=s.displayName),"list"!==t||s.list?s.value=e[0][e[1]]:s.list=e[0][e[1]]);let n=t.toLowerCase();switch("group"===n&&(s.add=T),n){case"bool":case"boolean":o=new l(s);break;case"button":o=new a(s);break;case"circular":o=new c(s);break;case"color":o=new d(s);break;case"fps":o=new u(s);break;case"graph":o=new p(s);break;case"group":o=new g(s);break;case"joystick":o=new x(s);break;case"knob":o=new v(s);break;case"list":o=new b(s);break;case"numeric":case"number":o=new f(s);break;case"slide":o=new w(s);break;case"textInput":case"string":o=new y(s);break;case"title":case"text":o=new k(s);break;case"select":o=new S(s);break;case"bitmap":o=new M(s);break;case"selector":o=new I(s);break;case"empty":case"space":o=new m(s);break;case"item":o=new C(s);break;case"grid":o=new L(s);break;case"pad2d":case"pad":o=new z(s)}if(null!==o)return i.needResize=!0,h&&o.setReferency(e[0],e[1]),o},O=function(t,s){let i="slide";return"boolean"==typeof t?i="bool":"string"==typeof t?i="#"===t.substring(0,1)?"color":"string":"number"==typeof t?i=s.ctype?"color":"slide":"array"==typeof t&&t instanceof Array?"number"==typeof t[0]?i="number":"string"==typeof t[0]&&(i="list"):"object"==typeof t&&t instanceof Object&&(i=void 0!==t.x?"number":"list"),i};class D{constructor(t={}){this.isGui=!0,this.name="gui",this.canvas=null,this.screen=null,this.plane=t.plane||null,t.config&&(t.colors=t.config),t.colors?this.setConfig(t.colors):this.colors=h.defineColor(t),this.css=h.cloneCss(),this.isReset=!0,this.tmpAdd=null,this.isCanvas=t.isCanvas||!1,this.isCanvasOnly=!1,i.addDOMEventListeners=!t.hasOwnProperty("addDOMEventListeners")||t.addDOMEventListeners,this.callback=void 0===t.callback?null:t.callback,this.forceHeight=t.maxHeight||0,this.lockHeight=t.lockHeight||!1,this.isItemMode=void 0!==t.itemMode&&t.itemMode,this.cn="",this.size=h.size,void 0!==t.p&&(this.size.p=t.p),void 0!==t.w&&(this.size.w=t.w),void 0!==t.h&&(this.size.h=t.h),void 0!==t.s&&(this.size.s=t.s),this.size.h=this.size.h<11?11:this.size.h,this.local=(new n).neg(),this.zone={x:0,y:0,w:this.size.w,h:0},this.mouse=(new n).neg(),this.h=0,this.sw=0,this.margin=this.colors.sy,this.marginDiv=h.isDivid(this.margin),this.isWithClose=void 0===t.close||t.close,this.bh=this.isWithClose?this.size.h:0,this.autoResize=void 0===t.autoResize||t.autoResize,this.isCenter=t.center||!1,this.cssGui=void 0!==t.css?t.css:this.isCenter?"":"right:10px;",this.isOpen=void 0===t.open||t.open,this.isDown=!1,this.isScroll=!1,this.uis=[],this.current=-1,this.proto=null,this.isEmpty=!0,this.decal=0,this.ratio=1,this.oy=0,this.isNewTarget=!1;let s=this.colors;this.content=h.dom("div",this.css.basic+" width:0px; height:auto; top:0px; background:"+s.content+"; "+this.cssGui),this.innerContent=h.dom("div",this.css.basic+"width:100%; top:0; left:0; height:auto; overflow:hidden;"),this.content.appendChild(this.innerContent),this.useFlex=!0;let e=this.useFlex?"display:flex; flex-flow: row wrap;":"";this.inner=h.dom("div",this.css.basic+e+"width:100%; left:0; "),this.innerContent.appendChild(this.inner),this.scrollBG=h.dom("div",this.css.basic+"right:0; top:0; width:"+(this.size.s-1)+"px; height:10px; display:none; background:"+s.background+";"),this.content.appendChild(this.scrollBG),this.scroll=h.dom("div",this.css.basic+"background:"+s.button+"; right:2px; top:0; width:"+(this.size.s-4)+"px; height:10px;"),this.scrollBG.appendChild(this.scroll),this.bottomText=t.bottomText||["open","close"];let o=s.radius;this.bottom=h.dom("div",this.css.txt+"width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:"+o+"px; border-bottom-left-radius:"+o+"px; justify-content:center; height:"+this.bh+"px; line-height:"+(this.bh-5)+"px; color:"+s.text+";"),this.content.appendChild(this.bottom),this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.bottom.style.background=s.background,this.parent=void 0!==t.parent?t.parent:null,this.parent=void 0!==t.target?t.target:this.parent,null!==this.parent||this.isCanvas||(this.parent=document.body),null!==this.parent&&this.parent.appendChild(this.content),this.isCanvas&&null===this.parent&&(this.isCanvasOnly=!0),this.isCanvasOnly?(this.content.style.left="0px",this.content.style.right="auto",t.transition=0):this.content.style.pointerEvents="auto",this.transition=void 0!==t.transition?t.transition:h.transition,this.transition&&setTimeout(this.addTransition.bind(this),1e3),this.setWidth(),this.isCanvas&&this.makeCanvas(),i.add(this)}triggerMouseDown(t,s){i.handleEvent({type:"pointerdown",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}triggerMouseMove(){i.handleEvent({type:"pointermove",clientX:-1,clientY:-1,delta:0,key:null,keyCode:NaN})}triggerMouseUp(t,s){i.handleEvent({type:"pointerup",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}setTop(t,s){this.content.style.top=t+"px",void 0!==s&&(this.forceHeight=s),this.calc(),i.needReZone=!0}addTransition(){this.transition&&!this.isCanvas&&(this.innerContent.style.transition="height "+this.transition+"s ease-out",this.content.style.transition="height "+this.transition+"s ease-out",this.bottom.style.transition="top "+this.transition+"s ease-out");let t=this.uis.length;for(;t--;)this.uis[t].addTransition()}onDraw(){}makeCanvas(){this.canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),this.canvas.width=this.zone.w,this.canvas.height=this.forceHeight?this.forceHeight:this.zone.h}draw(t){if(null===this.canvas)return;let s=this.zone.w,e=this.forceHeight?this.forceHeight:this.zone.h;i.toCanvas(this,s,e,t)}getDom(){return this.content}noMouse(){this.mouse.neg()}setMouse(t,s=!0){s?this.mouse.set(Math.round(t.x*this.canvas.width),this.canvas.height-Math.round(t.y*this.canvas.height)):this.mouse.set(Math.round(t.x*this.canvas.width),Math.round(t.y*this.canvas.height))}setConfig(t){h.setText(),this.colors=h.defineColor(t)}setColors(t){for(let s in t)this.colors[s]&&(this.colors[s]=t[s])}setText(t,s,i,e){h.setText(t,s,i,e)}hide(t){this.content.style.visibility=t?"hidden":"visible"}display(t=!1){this.content.style.visibility=t?"visible":"hidden"}onChange(t){return this.callback=t||null,this}mode(t){let s=!1,e=this.colors;if(t!==this.cn){switch(this.cn=t,t){case"def":i.cursor(),this.scroll.style.background=e.button,this.bottom.style.background=e.background,this.bottom.style.color=e.text;break;case"scrollOver":i.cursor("ns-resize"),this.scroll.style.background=e.select;break;case"scrollDown":this.scroll.style.background=e.select;break;case"bottomOver":i.cursor("pointer"),this.bottom.style.background=e.backgroundOver,this.bottom.style.color=e.textOver}s=!0}return s}clearTarget(){return-1!==this.current&&(this.proto.s&&(this.proto.uiout(),this.proto.reset()),this.proto=null,this.current=-1,i.cursor(),!0)}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";this.isReset=!1;let i="",e=this.isScroll?this.zone.w-this.size.s:this.zone.w;return i=s.y>this.zone.h-this.bh&&s.ye?"scroll":"content",i}handleEvent(t){let s=t.type,e=!1,h=!1,o=this.testZone(t);if("mouseup"===s&&this.isDown&&(this.isDown=!1),"mousedown"!==s||this.isDown||(this.isDown=!0),this.isDown&&this.isNewTarget&&(i.clearInput(),this.isNewTarget=!1),o){switch(o){case"content":t.clientY=this.isScroll?t.clientY+this.decal:t.clientY,i.isMobile&&"mousedown"===s&&this.getNext(t,e),this.proto&&(h=this.proto.handleEvent(t)),"mousemove"===s&&(e=this.mode("def")),"wheel"===s&&!h&&this.isScroll&&(e=this.onWheel(t)),i.lock||this.getNext(t,e);break;case"bottom":this.clearTarget(),"mousemove"===s&&(e=this.mode("bottomOver")),"mousedown"===s&&(this.isOpen=!this.isOpen,this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.calc(),this.mode("def"),e=!0);break;case"scroll":this.clearTarget(),"mousemove"===s&&(e=this.mode("scrollOver")),"mousedown"===s&&(e=this.mode("scrollDown")),"wheel"===s&&(e=this.onWheel(t)),this.isDown&&this.update(t.clientY-this.zone.y-.5*this.sh)}this.isDown&&(e=!0),h&&(e=!0),"keyup"===s&&(e=!0),"keydown"===s&&(e=!0),e&&this.draw()}}getNext(t,s){let e=i.findTarget(this.uis,t);e!==this.current&&(this.clearTarget(),this.current=e,this.isNewTarget=!0),-1!==e&&(this.proto=this.uis[this.current],this.proto.uiover())}onWheel(t){return this.oy+=20*t.delta,this.update(this.oy),!0}reset(t){if(this.isReset)return;this.mouse.neg(),this.isDown=!1;let s=this.mode("def"),i=this.clearTarget();(s||i)&&this.draw(!0),this.isReset=!0}add(){let t=arguments,s=!1;"object"==typeof t[1]?(t[1].isUI=!0,t[1].main=this,s=!!t[1].ontop&&t[1].ontop):"string"==typeof t[1]&&(void 0===t[2]?[].push.call(t,{isUI:!0,main:this}):(t[2].isUI=!0,t[2].main=this,s=!!t[2].ontop&&t[2].ontop));let i=T.apply(this,t);if(null!==i)return s?this.uis.unshift(i):this.uis.push(i),this.calc(),this.isEmpty=!1,i}remove(t){t.dispose&&t.dispose()}clearOne(t){let s=this.uis.indexOf(t);-1!==s&&(this.inner.removeChild(this.uis[s].c[0]),this.uis.splice(s,1),this.calc())}empty(){let t,s=this.uis.length;for(;s--;)t=this.uis.pop(),this.inner.removeChild(t.c[0]),t.dispose();this.uis=[],this.isEmpty=!0,this.calc()}clear(){this.empty()}clear2(){setTimeout(this.empty.bind(this),0)}dispose(){this.clear(),null!==this.parent&&this.parent.removeChild(this.content),i.remove(this)}resetItem(){if(!this.isItemMode)return;let t=this.uis.length;for(;t--;)this.uis[t].selected()}setItem(t){if(!this.isItemMode)return;if(t=t||"",this.resetItem(),!t)return void this.update(0);let s=this.uis.length;for(;s--;)this.uis[s].value===t&&(this.uis[s].selected(!0),this.isScroll&&this.update(s*(this.uis[s].h+this.margin)*this.ratio))}upScroll(t){this.sw=t?this.size.s:0,this.oy=t?this.oy:0,this.scrollBG.style.display=t?"block":"none",t&&(this.total=this.h,this.maxView=this.maxHeight,this.ratio=this.maxView/this.total,this.sh=this.maxView*this.ratio,this.range=this.maxView-this.sh,this.oy=h.clamp(this.oy,0,this.range),this.scrollBG.style.height=this.maxView+"px",this.scroll.style.height=this.sh+"px"),this.setItemWidth(this.zone.w-this.sw),this.update(this.oy)}update(t){t=h.clamp(t,0,this.range),this.decal=Math.floor(t/this.ratio),this.inner.style.top=-this.decal+"px",this.scroll.style.top=Math.floor(t)+"px",this.oy=t}calcUis(){return i.calcUis(this.uis,this.zone,this.zone.y)}calc(){clearTimeout(this.tmp),this.tmp=setTimeout(this.setHeight.bind(this),10)}setHeight(){if(this.tmp&&clearTimeout(this.tmp),this.zone.h=this.bh,this.isScroll=!1,this.isOpen){this.h=this.calcUis();let t=this.forceHeight?this.forceHeight+this.zone.y:window.innerHeight;this.maxHeight=t-this.zone.y-this.bh,this.h-this.maxHeight>1?(this.isScroll=!0,this.zone.h=this.maxHeight+this.bh):this.zone.h=this.h+this.bh}this.upScroll(this.isScroll),this.innerContent.style.height=this.zone.h-this.bh+"px",this.content.style.height=this.zone.h+"px",this.bottom.style.top=this.zone.h-this.bh+"px",this.forceHeight&&this.lockHeight&&(this.content.style.height=this.forceHeight+"px"),this.isCanvas&&this.draw(!0)}rezone(){i.needReZone=!0}setWidth(t){t&&(this.zone.w=t),this.zone.w=Math.floor(this.zone.w),this.content.style.width=this.zone.w+"px",this.isCenter&&(this.content.style.marginLeft=-Math.floor(.5*this.zone.w)+"px"),this.setItemWidth(this.zone.w-this.sw)}setItemWidth(t){let s=this.uis.length;for(;s--;)this.uis[s].setSize(t),this.uis[s].rSize()}}export{o as Files,D as Gui,t as REVISION,h as Tools,T as add}; diff --git a/examples/uil_to_canvas2.html b/examples/uil_to_canvas2.html new file mode 100644 index 0000000..3d8227c --- /dev/null +++ b/examples/uil_to_canvas2.html @@ -0,0 +1,162 @@ + + + + +Uil to Canvas + + + + + + + + + +
+
+
+ + + \ No newline at end of file diff --git a/src/core/Roots.js b/src/core/Roots.js index c6a238d..d4601f5 100644 --- a/src/core/Roots.js +++ b/src/core/Roots.js @@ -787,12 +787,23 @@ const R = { // // ---------------------- + /* + // esta era la funcion original + loop: function () { + + if( R.isLoop ) requestAnimationFrame( R.loop ); + R.update(); + + }, + + */ + loop: function () { // modified by Fedemarino if (R.isLoop) requestAnimationFrame(R.loop); R.needsUpdate = R.update(); // if there is a change in a value generated externally, the GUI needs to be redrawn - if (R.ui[0]) R.ui[0].draw(); + if (R.ui[0] && R.needsUpdate) R.ui[0].draw(); }, update: function () { From 89013ba16699c938585fea35131f974f94227299 Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Sun, 31 Aug 2025 10:08:56 -0300 Subject: [PATCH 05/17] todo --- TODO especificacion-selector-jerarquico | 78 +++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 TODO especificacion-selector-jerarquico diff --git a/TODO especificacion-selector-jerarquico b/TODO especificacion-selector-jerarquico new file mode 100644 index 0000000..baee467 --- /dev/null +++ b/TODO especificacion-selector-jerarquico @@ -0,0 +1,78 @@ +# Especificación de un selector jerárquico por niveles (agnóstico de UI) + +## Objetivo +Implementar un selector jerárquico “por niveles” que permita elegir una ruta dentro de un árbol. +Al seleccionar una opción en un nivel intermedio, el componente recorta la ruta hasta ese nivel y autocompleta descendiendo por la +primera opción de cada rama hasta llegar a la hoja (sin elegir automáticamente el ítem final). + +--- + +## Modelo de datos +- **Árbol** + - Nodos intermedios: mapa `clave → subárbol`. + - Nodos hoja: listas de opciones finales. +- **Ruta seleccionada (`value`)** + Arreglo de strings que codifica las elecciones desde raíz hasta (posible) hoja; determina qué opción está marcada como *seleccionada* en cada nivel. +- **Ruta de foco (`focusPath`)** y **nivel de foco (`focusLevel`)** + Permiten previsualizar y resaltar una rama sin modificar la selección definitiva. Cuando hay foco, la construcción visual sigue `focusPath`; si no, sigue `value`. + +--- + +## Entradas requeridas +- `tree` (objeto o array) +- `value` (array de strings) +- `focused` (boolean), `focusPath` (array), `focusLevel` (number) +- Identificadores de contexto a devolver en el cambio (p. ej., `tabIndex`, `itemIndex`) +- `onChange(...)` (callback de notificación) +Estas entradas deben estar disponibles como API pública del componente. + +--- + +## Salida / eventos +- **`onChange(tabIndex, itemIndex, newPath)`** al seleccionar una opción en cualquier nivel. + `newPath` debe incluir la ruta recortada hasta el nivel elegido y la autocompletación posterior hasta la hoja (sin elegir el ítem final de la hoja). + +--- + +## Reglas de construcción de niveles (render lógico) +- La “ruta activa” para construir niveles es `focusPath` si `focused=true`; de lo contrario, `value`. +- Por nivel: + - Si el nodo es **mapa**: las opciones son sus **claves** (nivel intermedio). + - Si el nodo es **lista**: las opciones son los **elementos** (nivel hoja). + - En cada nivel, la opción *seleccionada* es la que coincide con `value[nivel]`. + +--- + +## Reglas de selección y autocompletado +- Selección en nivel **L**: + 1) Recortar `value` hasta **L** e insertar la opción elegida. + 2) Mientras el nodo actual sea un **mapa**, avanzar determinísticamente por su **primera clave** hasta alcanzar una **lista** (hoja). + 3) Notificar `onChange(...)` con la nueva ruta. + +--- + +## Estados visuales y foco (semántica) +- **Seleccionado**: opción que coincide con `value[nivel]`. +- **En foco**: si `focused=true` y `focusLevel === nivel`, resaltar la opción que coincide con `focusPath[nivel]`. Esto no modifica `value` hasta que el usuario confirme una selección. + +--- + +## Layout y alineación +- Niveles intermedios (mapa): disposición **horizontal** de opciones. +- Último nivel (lista/hoja): disposición **vertical** de opciones. +- Calcular el **máximo tamaño de hoja** del árbol y reservar ese alto para el último nivel; + completar con espacio vacio para estabilizar el layout. + +--- + +## Interacción mínima requerida +- Click/tap en una opción de nivel **L** → disparar `onChange(...)` con la ruta recortada hasta **L**, opción elegida y autocompletado hasta la hoja. +- El modo **foco** solo afecta lo resaltado y la expansión visual; no altera `value` hasta una selección efectiva. + +--- + +## Invariantes y validaciones +- Si la ruta activa apunta a una clave inexistente, **detener** la expansión de niveles. +- No asumir que siempre existen opciones: si un mapa está vacío, **detener** el autocompletado. + +--- From 3eb9a32a7b3673c8e4e5bb5e5b143b3459d91dde Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Fri, 5 Sep 2025 10:41:54 -0300 Subject: [PATCH 06/17] version 1 --- build/uil.js | 16494 ++++++++++++++++++++--------------- build/uil.min.js | 9460 +++++++++++++++++++- build/uil.module.js | 9446 +++++++++++++++++++- examples/uil_treelist.html | 128 + index.html | 3 + src/core/add.js | 2 + src/proto/TreeList.js | 379 + 7 files changed, 28788 insertions(+), 7124 deletions(-) create mode 100644 examples/uil_treelist.html create mode 100644 src/proto/TreeList.js diff --git a/build/uil.js b/build/uil.js index 965c59c..9f58559 100644 --- a/build/uil.js +++ b/build/uil.js @@ -1,7176 +1,9445 @@ -/** - * @license - * Copyright 2010-2021 Uil.js Authors - * SPDX-License-Identifier: MIT - */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.UIL = {})); })(this, (function (exports) { 'use strict'; - /** - * @author lth / https://github.com/lo-th - */ - - const REVISION = "4.3.0"; - - // INTENAL FUNCTION - - const R = { - ui: [], - dom: null, - ID: null, - lock: false, - wlock: false, - current: -1, - needReZone: true, - needResize: false, - forceZone: false, - isEventsInit: false, - isLeave: false, - addDOMEventListeners: true, - downTime: 0, - prevTime: 0, - //prevDefault: ['contextmenu', 'wheel'], - prevDefault: ["contextmenu"], - pointerEvent: ["pointerdown", "pointermove", "pointerup"], - eventOut: ["pointercancel", "pointerout", "pointerleave"], - xmlserializer: null, - tmpTime: null, - tmpImage: null, - oldCursor: "auto", - input: null, - parent: null, - firstImput: true, - hiddenImput: null, - hiddenSizer: null, - hasFocus: false, - startInput: false, - inputRange: [0, 0], - cursorId: 0, - str: "", - pos: 0, - startX: -1, - moveX: -1, - debugInput: false, - isLoop: false, - listens: [], - e: { - type: null, - clientX: 0, - clientY: 0, - keyCode: NaN, - key: null, - delta: 0 - }, - isMobile: false, - now: null, - needsUpdate: false, - getTime: function () { - return self.performance && self.performance.now ? self.performance.now.bind(performance) : Date.now; - }, - add: function (o) { - // R.ui[0] is de GUI object that is added first by the constructor - R.ui.push(o); - R.getZone(o); - if (!R.isEventsInit) R.initEvents(); - }, - testMobile: function () { - let n = navigator.userAgent; - if (n.match(/Android/i) || n.match(/webOS/i) || n.match(/iPhone/i) || n.match(/iPad/i) || n.match(/iPod/i) || n.match(/BlackBerry/i) || n.match(/Windows Phone/i)) return true;else return false; - }, - remove: function (o) { - let i = R.ui.indexOf(o); - if (i !== -1) { - R.removeListen(o); - R.ui.splice(i, 1); - } - if (R.ui.length === 0) { - R.removeEvents(); - } - }, - // ---------------------- - // EVENTS - // ---------------------- - - initEvents: function () { - if (R.isEventsInit) return; - let dom = document.body; - R.isMobile = R.testMobile(); - R.now = R.getTime(); - if (!R.isMobile) { - dom.addEventListener("wheel", R, { - passive: false - }); - } else { - dom.style.touchAction = "none"; - } - console.log("R.addDOMEventListeners " + R.addDOMEventListeners); - if (R.addDOMEventListeners) { - dom.addEventListener("pointercancel", R); - dom.addEventListener("pointerleave", R); - //dom.addEventListener( 'pointerout', R ) - - dom.addEventListener("pointermove", R); - dom.addEventListener("pointerdown", R); - dom.addEventListener("pointerup", R); - dom.addEventListener("keydown", R, false); - dom.addEventListener("keyup", R, false); - } - window.addEventListener("resize", R.resize, false); - - //window.onblur = R.out; - //window.onfocus = R.in; - - R.isEventsInit = true; - R.dom = dom; - }, - removeEvents: function () { - if (!R.isEventsInit) return; - let dom = document.body; - if (!R.isMobile) { - dom.removeEventListener("wheel", R); - } - if (R.addDOMEventListeners) { - dom.removeEventListener("pointercancel", R); - dom.removeEventListener("pointerleave", R); - //dom.removeEventListener( 'pointerout', R ); - - dom.removeEventListener("pointermove", R); - dom.removeEventListener("pointerdown", R); - dom.removeEventListener("pointerup", R); - dom.removeEventListener("keydown", R); - dom.removeEventListener("keyup", R); - } - window.removeEventListener("resize", R.resize); - R.isEventsInit = false; - }, - resize: function () { - let i = R.ui.length, - u; - while (i--) { - u = R.ui[i]; - if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); - } - R.needReZone = true; - R.needResize = false; - }, - out: function () { - console.log("im am out"); - R.clearOldID(); - }, - in: function () { - console.log("im am in"); - // R.clearOldID(); - }, - // ---------------------- - // HANDLE EVENTS - // ---------------------- - - fakeUp: function () { - this.handleEvent({ - type: "pointerup" - }); - }, - handleEvent: function (event) { - //console.log("Roots.handleEvent "+event.type) - //if(!event.type) return; - - if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); - if (R.needResize) R.resize(); - R.findZone(R.forceZone); - let e = R.e; - let leave = false; - if (event.type === "keydown") R.keydown(event); - if (event.type === "keyup") R.keyup(event); - if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1;else e.delta = 0; - let ptype = event.pointerType; // mouse, pen, touch - - e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; - e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; - e.type = event.type; - if (R.eventOut.indexOf(event.type) !== -1) { - leave = true; - e.type = "mouseup"; - } - if (event.type === "pointerleave") R.isLeave = true; - if (event.type === "pointerdown") e.type = "mousedown"; - if (event.type === "pointerup") e.type = "mouseup"; - if (event.type === "pointermove") { - if (R.isLeave) { - // if user resize outside this document - R.isLeave = false; - R.resize(); - } - e.type = "mousemove"; - } - - // double click test - if (e.type === "mousedown") { - R.downTime = R.now(); - let time = R.downTime - R.prevTime; - - // double click on imput - if (time < 200) { - R.selectAll(); - return false; - } - R.prevTime = R.downTime; - R.forceZone = false; - } - - // for imput - if (e.type === "mousedown") R.clearInput(); - - // mouse lock - if (e.type === "mousedown") R.lock = true; - if (e.type === "mouseup") R.lock = false; - - //if( R.current !== null && R.current.neverlock ) R.lock = false; - - /*if( e.type === 'mousedown' && event.button === 1){ - R.cursor() - e.preventDefault(); - e.stopPropagation(); - }*/ - - //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) - - if (R.isMobile && e.type === "mousedown") R.findID(e); - if (e.type === "mousemove" && !R.lock) R.findID(e); - if (R.ID !== null) { - if (R.ID.isCanvasOnly) { - e.clientX = R.ID.mouse.x; - e.clientY = R.ID.mouse.y; - } - - //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 - - R.ID.handleEvent(e); - } - if (R.isMobile && e.type === "mouseup") R.clearOldID(); - if (leave) R.clearOldID(); - }, - // ---------------------- - // ID - // ---------------------- - - findID: function (e) { - let i = R.ui.length, - next = -1, - u, - x, - y; - while (i--) { - u = R.ui[i]; - if (u.isCanvasOnly) { - x = u.mouse.x; - y = u.mouse.y; - } else { - x = e.clientX; - y = e.clientY; - } - if (R.onZone(u, x, y)) { - next = i; - if (next !== R.current) { - R.clearOldID(); - R.current = next; - R.ID = u; - } - break; - } - } - if (next === -1) R.clearOldID(); - }, - clearOldID: function () { - if (!R.ID) return; - R.current = -1; - R.ID.reset(); - R.ID = null; - R.cursor(); - }, - // ---------------------- - // GUI / GROUP FUNCTION - // ---------------------- - - calcUis: (uis, zone, py, group = false) => { - //console.log('calc_uis') - - let i = uis.length, - u, - px = 0, - n = 0, - tw, - m; - let height = 0; - while (i--) { - u = uis[n]; - n++; - if (!group && u.isGroup) u.calcUis(); - m = u.margin; - //div = u.marginDiv - - u.zone.w = u.w; - u.zone.h = u.h + m; - if (!u.autoWidth) { - if (px === 0) height += u.h + m; - u.zone.x = zone.x + px; - u.zone.y = py; // + u.mtop - //if(div) u.zone.y += m * 0.5 - - tw = R.getWidth(u); - if (tw) u.zone.w = u.w = tw;else if (u.fw) u.zone.w = u.w = u.fw; - px += u.zone.w; - if (px >= zone.w) { - py += u.h + m; - //if(div) py += m * 0.5 - px = 0; - } - } else { - px = 0; - u.zone.x = zone.x + u.dx; - u.zone.y = py; - py += u.h + m; - height += u.h + m; - } - } - return height; - }, - findTarget: function (uis, e) { - let i = uis.length; - while (i--) { - if (R.onZone(uis[i], e.clientX, e.clientY)) return i; - } - return -1; - }, - // ---------------------- - // ZONE - // ---------------------- - - findZone: function (force) { - if (!R.needReZone && !force) return; - var i = R.ui.length, - u; - while (i--) { - u = R.ui[i]; - R.getZone(u); - if (u.isGui) u.calcUis(); - } - R.needReZone = false; - }, - onZone: function (o, x, y) { - if (x === undefined || y === undefined) return false; - let z = o.zone; - let mx = x - z.x; // - o.dx; - let my = y - z.y; - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 - //if( o.group !== null ) mx -= o.dx - - let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; - - //if( o.marginDiv ) my -= o.margin * 0.5 - - if (over) o.local.set(mx, my);else o.local.neg(); - return over; - }, - getWidth: function (o) { - //return o.getDom().offsetWidth - return o.getDom().clientWidth; - - //let r = o.getDom().getBoundingClientRect(); - //return (r.width) - //return Math.floor(r.width) - }, - getZone: function (o) { - if (o.isCanvasOnly) return; - let r = o.getDom().getBoundingClientRect(); - - //if( !r.width ) return - //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; - //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; - o.zone = { - x: r.left, - y: r.top, - w: r.width, - h: r.height - }; - - //console.log(o.name, o.zone) - }, - // ---------------------- - // CURSOR - // ---------------------- - - cursor: function (name) { - name = name ? name : "auto"; - if (name !== R.oldCursor) { - document.body.style.cursor = name; - R.oldCursor = name; - } - }, - // ---------------------- - // CANVAS - // ---------------------- - - toCanvas: function (o, w, h, force) { - if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); - - // prevent exesive redraw - - if (force && R.tmpTime !== null) { - clearTimeout(R.tmpTime); - R.tmpTime = null; - } - if (R.tmpTime !== null) return; - if (R.lock) R.tmpTime = setTimeout(function () { - R.tmpTime = null; - }, 10); - - /// - - let isNewSize = false; - if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; - if (R.tmpImage === null) R.tmpImage = new Image(); - let img = R.tmpImage; //new Image(); - - let htmlString = R.xmlserializer.serializeToString(o.content); - let svg = '' + htmlString + ""; - img.onload = function () { - let ctx = o.canvas.getContext("2d"); - if (isNewSize) { - o.canvas.width = w; - o.canvas.height = h; - } else { - ctx.clearRect(0, 0, w, h); - } - ctx.drawImage(this, 0, 0); - o.onDraw(); - }; - img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); - //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); - img.crossOrigin = ""; - R.needsUpdate = false; - }, - // ---------------------- - // INPUT - // ---------------------- - - setHidden: function () { - if (R.hiddenImput === null) { - //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' - //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' - //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; - - R.hiddenImput = document.createElement("input"); - R.hiddenImput.type = "text"; - //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); - - R.hiddenSizer = document.createElement("div"); - //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; - - document.body.appendChild(R.hiddenImput); - document.body.appendChild(R.hiddenSizer); - } - let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; - let css = R.parent.css.txtselect + "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + hide; - R.hiddenImput.style.cssText = css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); - R.hiddenSizer.style.cssText = css + "bottom:40px;"; - R.hiddenImput.style.width = R.input.clientWidth + "px"; - R.hiddenImput.value = R.str; - R.hiddenSizer.innerHTML = R.str; - R.hasFocus = true; - }, - clearHidden: function (p) { - if (R.hiddenImput === null) return; - R.hasFocus = false; - }, - clickPos: function (x) { - let i = R.str.length, - l = 0, - n = 0; - while (i--) { - l += R.textWidth(R.str[n]); - if (l >= x) break; - n++; - } - return n; - }, - upInput: function (x, down) { - if (R.parent === null) return false; - let up = false; - if (down) { - let id = R.clickPos(x); - R.moveX = id; - if (R.startX === -1) { - R.startX = id; - R.cursorId = id; - R.inputRange = [R.startX, R.startX]; - } else { - let isSelection = R.moveX !== R.startX; - if (isSelection) { - if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX];else R.inputRange = [R.startX, R.moveX]; - } - } - up = true; - } else { - if (R.startX !== -1) { - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.startX = -1; - up = true; - } - } - if (up) R.selectParent(); - return up; - }, - selectAll: function () { - if (!R.parent) return; - R.str = R.input.textContent; - R.inputRange = [0, R.str.length]; - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.cursorId = R.inputRange[1]; - R.selectParent(); - }, - selectParent: function () { - var c = R.textWidth(R.str.substring(0, R.cursorId)); - var e = R.textWidth(R.str.substring(0, R.inputRange[0])); - var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); - R.parent.select(c, e, s, R.hiddenSizer.innerHTML); - }, - textWidth: function (text) { - if (R.hiddenSizer === null) return 0; - text = text.replace(/ /g, " "); - R.hiddenSizer.innerHTML = text; - return R.hiddenSizer.clientWidth; - }, - clearInput: function () { - if (R.parent === null) return; - if (!R.firstImput) R.parent.validate(true); - R.clearHidden(); - R.parent.unselect(); - - //R.input.style.background = 'none'; - R.input.style.background = R.parent.colors.back; - R.input.style.borderColor = R.parent.colors.border; - //R.input.style.color = R.parent.colors.text; - R.parent.isEdit = false; - R.input = null; - R.parent = null; - R.str = "", R.firstImput = true; - }, - setInput: function (Input, parent) { - R.clearInput(); - R.input = Input; - R.parent = parent; - R.input.style.background = R.parent.colors.backoff; - R.input.style.borderColor = R.parent.colors.select; - //R.input.style.color = R.parent.colors.textSelect; - R.str = R.input.textContent; - R.setHidden(); - }, - keydown: function (e) { - if (R.parent === null) return; - let keyCode = e.which; - e.shiftKey; - - //console.log( keyCode ) - - R.firstImput = false; - if (R.hasFocus) { - // hack to fix touch event bug in iOS Safari - window.focus(); - R.hiddenImput.focus(); - } - R.parent.isEdit = true; - - // e.preventDefault(); - - // add support for Ctrl/Cmd+A selection - //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { - //R.selectText(); - //e.preventDefault(); - //return self.render(); - //} - - if (keyCode === 13) { - //enter - - R.clearInput(); - - //} else if( keyCode === 9 ){ //tab key - - // R.input.textContent = ''; - } else { - if (R.input.isNum) { - if (e.keyCode > 47 && e.keyCode < 58 || e.keyCode > 95 && e.keyCode < 106 || e.keyCode === 190 || e.keyCode === 110 || e.keyCode === 8 || e.keyCode === 109) { - R.hiddenImput.readOnly = false; - } else { - R.hiddenImput.readOnly = true; - } - } else { - R.hiddenImput.readOnly = false; - } - } - }, - keyup: function (e) { - if (R.parent === null) return; - R.str = R.hiddenImput.value; - if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value - else R.input.textContent = R.str; - R.cursorId = R.hiddenImput.selectionStart; - R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; - R.selectParent(); - - //if( R.parent.allway ) - R.parent.validate(); - }, - // ---------------------- - // - // LISTENING - // - // ---------------------- - - /* - // esta era la funcion original - loop: function () { - if( R.isLoop ) requestAnimationFrame( R.loop ); - R.update(); - }, - */ - - loop: function () { - // modified by Fedemarino - if (R.isLoop) requestAnimationFrame(R.loop); - R.needsUpdate = R.update(); - // if there is a change in a value generated externally, the GUI needs to be redrawn - if (R.ui[0] && R.needsUpdate) R.ui[0].draw(); - }, - update: function () { - // modified by Fedemarino - let i = R.listens.length; - let needsUpdate = false; - while (i--) { - //check if the value of the object has changed - let hasChanged = R.listens[i].listening(); - if (hasChanged) needsUpdate = true; - } - return needsUpdate; - }, - removeListen: function (proto) { - let id = R.listens.indexOf(proto); - if (id !== -1) R.listens.splice(id, 1); - if (R.listens.length === 0) R.isLoop = false; - }, - addListen: function (proto) { - let id = R.listens.indexOf(proto); - if (id !== -1) return false; - R.listens.push(proto); - if (!R.isLoop) { - R.isLoop = true; - R.loop(); - } - return true; - } - }; + /** + * @author lth / https://github.com/lo-th + */ + + const REVISION = "4.3.0"; + + // INTENAL FUNCTION + + const R = { + ui: [], + + dom: null, + + ID: null, + lock: false, + wlock: false, + current: -1, + + needReZone: true, + needResize: false, + forceZone: false, + isEventsInit: false, + isLeave: false, + addDOMEventListeners: true, + + downTime: 0, + prevTime: 0, + + //prevDefault: ['contextmenu', 'wheel'], + prevDefault: ["contextmenu"], + pointerEvent: ["pointerdown", "pointermove", "pointerup"], + eventOut: ["pointercancel", "pointerout", "pointerleave"], + + xmlserializer: null, + tmpTime: null, + tmpImage: null, + + oldCursor: "auto", + + input: null, + parent: null, + firstImput: true, + + hiddenImput: null, + hiddenSizer: null, + hasFocus: false, + startInput: false, + inputRange: [0, 0], + cursorId: 0, + str: "", + pos: 0, + startX: -1, + moveX: -1, + + debugInput: false, + + isLoop: false, + listens: [], + + e: { + type: null, + clientX: 0, + clientY: 0, + keyCode: NaN, + key: null, + delta: 0, + }, + + isMobile: false, + + now: null, + needsUpdate: false, + + getTime: function () { + return self.performance && self.performance.now + ? self.performance.now.bind(performance) + : Date.now; + }, + + add: function (o) { + // R.ui[0] is de GUI object that is added first by the constructor + R.ui.push(o); + R.getZone(o); + + if (!R.isEventsInit) R.initEvents(); + }, + + testMobile: function () { + let n = navigator.userAgent; + if ( + n.match(/Android/i) || + n.match(/webOS/i) || + n.match(/iPhone/i) || + n.match(/iPad/i) || + n.match(/iPod/i) || + n.match(/BlackBerry/i) || + n.match(/Windows Phone/i) + ) + return true; + else return false; + }, + + remove: function (o) { + let i = R.ui.indexOf(o); + + if (i !== -1) { + R.removeListen(o); + R.ui.splice(i, 1); + } + + if (R.ui.length === 0) { + R.removeEvents(); + } + }, + + // ---------------------- + // EVENTS + // ---------------------- + + initEvents: function () { + if (R.isEventsInit) return; + + let dom = document.body; + + R.isMobile = R.testMobile(); + R.now = R.getTime(); + + if (!R.isMobile) { + dom.addEventListener("wheel", R, { passive: false }); + } else { + dom.style.touchAction = "none"; + } + + console.log("R.addDOMEventListeners " + R.addDOMEventListeners); + if (R.addDOMEventListeners) { + dom.addEventListener("pointercancel", R); + dom.addEventListener("pointerleave", R); + //dom.addEventListener( 'pointerout', R ) + + dom.addEventListener("pointermove", R); + dom.addEventListener("pointerdown", R); + dom.addEventListener("pointerup", R); + + dom.addEventListener("keydown", R, false); + dom.addEventListener("keyup", R, false); + } + window.addEventListener("resize", R.resize, false); + + //window.onblur = R.out; + //window.onfocus = R.in; + + R.isEventsInit = true; + R.dom = dom; + }, + + removeEvents: function () { + if (!R.isEventsInit) return; + + let dom = document.body; + + if (!R.isMobile) { + dom.removeEventListener("wheel", R); + } + + if (R.addDOMEventListeners) { + dom.removeEventListener("pointercancel", R); + dom.removeEventListener("pointerleave", R); + //dom.removeEventListener( 'pointerout', R ); + + dom.removeEventListener("pointermove", R); + dom.removeEventListener("pointerdown", R); + dom.removeEventListener("pointerup", R); + + dom.removeEventListener("keydown", R); + dom.removeEventListener("keyup", R); + } + window.removeEventListener("resize", R.resize); + + R.isEventsInit = false; + }, + + resize: function () { + let i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); + } + + R.needReZone = true; + R.needResize = false; + }, + + out: function () { + console.log("im am out"); + R.clearOldID(); + }, + + in: function () { + console.log("im am in"); + // R.clearOldID(); + }, + + // ---------------------- + // HANDLE EVENTS + // ---------------------- + + fakeUp: function () { + this.handleEvent({ type: "pointerup" }); + }, + + handleEvent: function (event) { + //console.log("Roots.handleEvent "+event.type) + //if(!event.type) return; + + if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); + + if (R.needResize) R.resize(); + + R.findZone(R.forceZone); + + let e = R.e; + let leave = false; + + if (event.type === "keydown") R.keydown(event); + if (event.type === "keyup") R.keyup(event); + + if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; + else e.delta = 0; + + let ptype = event.pointerType; // mouse, pen, touch + + e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; + e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; + + e.type = event.type; + + if (R.eventOut.indexOf(event.type) !== -1) { + leave = true; + e.type = "mouseup"; + } + + if (event.type === "pointerleave") R.isLeave = true; + + if (event.type === "pointerdown") e.type = "mousedown"; + if (event.type === "pointerup") e.type = "mouseup"; + if (event.type === "pointermove") { + if (R.isLeave) { + // if user resize outside this document + R.isLeave = false; + R.resize(); + } + e.type = "mousemove"; + } + + // double click test + if (e.type === "mousedown") { + R.downTime = R.now(); + let time = R.downTime - R.prevTime; + + // double click on imput + if (time < 200) { + R.selectAll(); + return false; + } + + R.prevTime = R.downTime; + R.forceZone = false; + } + + // for imput + if (e.type === "mousedown") R.clearInput(); + + // mouse lock + if (e.type === "mousedown") R.lock = true; + if (e.type === "mouseup") R.lock = false; + + //if( R.current !== null && R.current.neverlock ) R.lock = false; + + /*if( e.type === 'mousedown' && event.button === 1){ + R.cursor() + e.preventDefault(); + e.stopPropagation(); + }*/ + + //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) + + if (R.isMobile && e.type === "mousedown") R.findID(e); + if (e.type === "mousemove" && !R.lock) R.findID(e); + + if (R.ID !== null) { + if (R.ID.isCanvasOnly) { + e.clientX = R.ID.mouse.x; + e.clientY = R.ID.mouse.y; + } + + //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 + + R.ID.handleEvent(e); + } + + if (R.isMobile && e.type === "mouseup") R.clearOldID(); + if (leave) R.clearOldID(); + }, + + // ---------------------- + // ID + // ---------------------- + + findID: function (e) { + let i = R.ui.length, + next = -1, + u, + x, + y; + + while (i--) { + u = R.ui[i]; + + if (u.isCanvasOnly) { + x = u.mouse.x; + y = u.mouse.y; + } else { + x = e.clientX; + y = e.clientY; + } + + if (R.onZone(u, x, y)) { + next = i; + + if (next !== R.current) { + R.clearOldID(); + R.current = next; + R.ID = u; + } + break; + } + } + + if (next === -1) R.clearOldID(); + }, + + clearOldID: function () { + if (!R.ID) return; + R.current = -1; + R.ID.reset(); + R.ID = null; + R.cursor(); + }, + + // ---------------------- + // GUI / GROUP FUNCTION + // ---------------------- + + calcUis: (uis, zone, py, group = false) => { + //console.log('calc_uis') + + let i = uis.length, + u, + px = 0, + n = 0, + tw, + m; + + let height = 0; + + while (i--) { + u = uis[n]; + n++; + + if (!group && u.isGroup) u.calcUis(); + + m = u.margin; + //div = u.marginDiv + + u.zone.w = u.w; + u.zone.h = u.h + m; + + if (!u.autoWidth) { + if (px === 0) height += u.h + m; + + u.zone.x = zone.x + px; + u.zone.y = py; // + u.mtop + //if(div) u.zone.y += m * 0.5 + + tw = R.getWidth(u); + if (tw) u.zone.w = u.w = tw; + else if (u.fw) u.zone.w = u.w = u.fw; + + px += u.zone.w; + + if (px >= zone.w) { + py += u.h + m; + //if(div) py += m * 0.5 + px = 0; + } + } else { + px = 0; + + u.zone.x = zone.x + u.dx; + u.zone.y = py; + py += u.h + m; + + height += u.h + m; + } + } + + return height; + }, + + findTarget: function (uis, e) { + let i = uis.length; + + while (i--) { + if (R.onZone(uis[i], e.clientX, e.clientY)) return i; + } + + return -1; + }, + + // ---------------------- + // ZONE + // ---------------------- + + findZone: function (force) { + if (!R.needReZone && !force) return; + + var i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + R.getZone(u); + if (u.isGui) u.calcUis(); + } + + R.needReZone = false; + }, + + onZone: function (o, x, y) { + if (x === undefined || y === undefined) return false; + + let z = o.zone; + let mx = x - z.x; // - o.dx; + let my = y - z.y; + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 + //if( o.group !== null ) mx -= o.dx + + let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; + + //if( o.marginDiv ) my -= o.margin * 0.5 + + if (over) o.local.set(mx, my); + else o.local.neg(); + + return over; + }, + + getWidth: function (o) { + //return o.getDom().offsetWidth + return o.getDom().clientWidth; + + //let r = o.getDom().getBoundingClientRect(); + //return (r.width) + //return Math.floor(r.width) + }, + + getZone: function (o) { + if (o.isCanvasOnly) return; + let r = o.getDom().getBoundingClientRect(); + + //if( !r.width ) return + //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; + //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; + o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; + + //console.log(o.name, o.zone) + }, + + // ---------------------- + // CURSOR + // ---------------------- + + cursor: function (name) { + name = name ? name : "auto"; + if (name !== R.oldCursor) { + document.body.style.cursor = name; + R.oldCursor = name; + } + }, + + // ---------------------- + // CANVAS + // ---------------------- + + toCanvas: function (o, w, h, force) { + if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); + + // prevent exesive redraw + + if (force && R.tmpTime !== null) { + clearTimeout(R.tmpTime); + R.tmpTime = null; + } + + if (R.tmpTime !== null) return; + + if (R.lock) + R.tmpTime = setTimeout(function () { + R.tmpTime = null; + }, 10); + + /// + + let isNewSize = false; + if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; + + if (R.tmpImage === null) R.tmpImage = new Image(); + + let img = R.tmpImage; //new Image(); + + let htmlString = R.xmlserializer.serializeToString(o.content); + + let svg = + '' + + htmlString + + ""; + + img.onload = function () { + let ctx = o.canvas.getContext("2d"); + + if (isNewSize) { + o.canvas.width = w; + o.canvas.height = h; + } else { + ctx.clearRect(0, 0, w, h); + } + ctx.drawImage(this, 0, 0); + + o.onDraw(); + }; + + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); + //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); + img.crossOrigin = ""; + R.needsUpdate = false; + }, + + // ---------------------- + // INPUT + // ---------------------- + + setHidden: function () { + if (R.hiddenImput === null) { + //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' + //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' + //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; + + R.hiddenImput = document.createElement("input"); + R.hiddenImput.type = "text"; + //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); + + R.hiddenSizer = document.createElement("div"); + //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; + + document.body.appendChild(R.hiddenImput); + document.body.appendChild(R.hiddenSizer); + } + + let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; + let css = + R.parent.css.txtselect + + "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + + hide; + R.hiddenImput.style.cssText = + css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); + R.hiddenSizer.style.cssText = css + "bottom:40px;"; + + R.hiddenImput.style.width = R.input.clientWidth + "px"; + R.hiddenImput.value = R.str; + R.hiddenSizer.innerHTML = R.str; + + R.hasFocus = true; + }, + + clearHidden: function (p) { + if (R.hiddenImput === null) return; + R.hasFocus = false; + }, + + clickPos: function (x) { + let i = R.str.length, + l = 0, + n = 0; + while (i--) { + l += R.textWidth(R.str[n]); + if (l >= x) break; + n++; + } + return n; + }, + + upInput: function (x, down) { + if (R.parent === null) return false; + + let up = false; + + if (down) { + let id = R.clickPos(x); + + R.moveX = id; + + if (R.startX === -1) { + R.startX = id; + R.cursorId = id; + R.inputRange = [R.startX, R.startX]; + } else { + let isSelection = R.moveX !== R.startX; + + if (isSelection) { + if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; + else R.inputRange = [R.startX, R.moveX]; + } + } + + up = true; + } else { + if (R.startX !== -1) { + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.startX = -1; + + up = true; + } + } + + if (up) R.selectParent(); + + return up; + }, + + selectAll: function () { + if (!R.parent) return; + + R.str = R.input.textContent; + R.inputRange = [0, R.str.length]; + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.cursorId = R.inputRange[1]; + R.selectParent(); + }, + + selectParent: function () { + var c = R.textWidth(R.str.substring(0, R.cursorId)); + var e = R.textWidth(R.str.substring(0, R.inputRange[0])); + var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); + + R.parent.select(c, e, s, R.hiddenSizer.innerHTML); + }, + + textWidth: function (text) { + if (R.hiddenSizer === null) return 0; + text = text.replace(/ /g, " "); + R.hiddenSizer.innerHTML = text; + return R.hiddenSizer.clientWidth; + }, + + clearInput: function () { + if (R.parent === null) return; + if (!R.firstImput) R.parent.validate(true); + + R.clearHidden(); + R.parent.unselect(); + + //R.input.style.background = 'none'; + R.input.style.background = R.parent.colors.back; + R.input.style.borderColor = R.parent.colors.border; + //R.input.style.color = R.parent.colors.text; + R.parent.isEdit = false; + + R.input = null; + R.parent = null; + (R.str = ""), (R.firstImput = true); + }, + + setInput: function (Input, parent) { + R.clearInput(); + + R.input = Input; + R.parent = parent; + + R.input.style.background = R.parent.colors.backoff; + R.input.style.borderColor = R.parent.colors.select; + //R.input.style.color = R.parent.colors.textSelect; + R.str = R.input.textContent; + + R.setHidden(); + }, + + keydown: function (e) { + if (R.parent === null) return; + + let keyCode = e.which; + e.shiftKey; + + //console.log( keyCode ) + + R.firstImput = false; + + if (R.hasFocus) { + // hack to fix touch event bug in iOS Safari + window.focus(); + R.hiddenImput.focus(); + } + + R.parent.isEdit = true; + + // e.preventDefault(); + + // add support for Ctrl/Cmd+A selection + //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { + //R.selectText(); + //e.preventDefault(); + //return self.render(); + //} + + if (keyCode === 13) { + //enter + + R.clearInput(); + + //} else if( keyCode === 9 ){ //tab key + + // R.input.textContent = ''; + } else { + if (R.input.isNum) { + if ( + (e.keyCode > 47 && e.keyCode < 58) || + (e.keyCode > 95 && e.keyCode < 106) || + e.keyCode === 190 || + e.keyCode === 110 || + e.keyCode === 8 || + e.keyCode === 109 + ) { + R.hiddenImput.readOnly = false; + } else { + R.hiddenImput.readOnly = true; + } + } else { + R.hiddenImput.readOnly = false; + } + } + }, + + keyup: function (e) { + if (R.parent === null) return; + + R.str = R.hiddenImput.value; + + if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value + else R.input.textContent = R.str; + + R.cursorId = R.hiddenImput.selectionStart; + R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; + + R.selectParent(); + + //if( R.parent.allway ) + R.parent.validate(); + }, + + // ---------------------- + // + // LISTENING + // + // ---------------------- + + /* + // esta era la funcion original + loop: function () { + + if( R.isLoop ) requestAnimationFrame( R.loop ); + R.update(); + + }, + + */ + + loop: function () { + // modified by Fedemarino + if (R.isLoop) requestAnimationFrame(R.loop); + R.needsUpdate = R.update(); + // if there is a change in a value generated externally, the GUI needs to be redrawn + if (R.ui[0] && R.needsUpdate) R.ui[0].draw(); + }, + + update: function () { + // modified by Fedemarino + let i = R.listens.length; + let needsUpdate = false; + while (i--) { + //check if the value of the object has changed + let hasChanged = R.listens[i].listening(); + if (hasChanged) needsUpdate = true; + } + return needsUpdate; + }, + + removeListen: function (proto) { + let id = R.listens.indexOf(proto); + if (id !== -1) R.listens.splice(id, 1); + if (R.listens.length === 0) R.isLoop = false; + }, + + addListen: function (proto) { + let id = R.listens.indexOf(proto); + + if (id !== -1) return false; + + R.listens.push(proto); + + if (!R.isLoop) { + R.isLoop = true; + R.loop(); + } + + return true; + }, + }; + const Roots = R; - /** - * @author lth / https://github.com/lo-th - */ - const T = { - transition: 0.2, - frag: document.createDocumentFragment(), - colorRing: null, - joystick_0: null, - joystick_1: null, - circular: null, - knob: null, - pad2d: null, - svgns: "http://www.w3.org/2000/svg", - links: "http://www.w3.org/1999/xlink", - htmls: "http://www.w3.org/1999/xhtml", - DOM_SIZE: ['height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], - SVG_TYPE_D: ['pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix'], - SVG_TYPE_G: ['svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject'], - PI: Math.PI, - TwoPI: Math.PI * 2, - pi90: Math.PI * 0.5, - pi60: Math.PI / 3, - torad: Math.PI / 180, - todeg: 180 / Math.PI, - clamp: (v, min, max) => { - v = v < min ? min : v; - v = v > max ? max : v; - return v; - }, - isDivid: v => v * 0.5 === Math.floor(v * 0.5), - size: { - w: 240, - h: 20, - p: 30, - s: 8 - }, - // ---------------------- - // COLOR - // ---------------------- - - defineColor: (o, cc = T.colors) => { - let color = { - ...cc - }; - let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize']; - let changeText = false; - if (o.font) o.fontFamily = o.font; - if (o.shadow) o.fontShadow = o.shadow; - if (o.weight) o.fontWeight = o.weight; - if (o.fontColor) o.text = o.fontColor; - if (o.color) o.text = o.color; - if (o.text) { - color.text = o.text; - if (!o.fontColor && !o.color) { - color.title = T.ColorLuma(o.text, -0.25); - color.titleoff = T.ColorLuma(o.text, -0.5); - } - color.textOver = T.ColorLuma(o.text, 0.25); - color.textSelect = T.ColorLuma(o.text, 0.5); - } - if (o.button) { - color.button = o.button; - color.border = T.ColorLuma(o.button, 0.1); - color.overoff = T.ColorLuma(o.button, 0.2); - } - if (o.select) { - color.select = o.select; - color.over = T.ColorLuma(o.select, -0.1); - } - if (o.itemBg) o.back = o.itemBg; - if (o.back) { - color.back = o.back; - color.backoff = T.ColorLuma(o.back, -0.1); - } - if (o.fontSelect) color.textSelect = o.fontSelect; - if (o.groupBorder) color.gborder = o.groupBorder; - - //if( o.transparent ) o.bg = 'none' - //if( o.bg ) color.background = color.backgroundOver = o.bg - if (o.bgOver) color.backgroundOver = o.bgOver; - for (let m in color) { - if (o[m] !== undefined) color[m] = o[m]; - } - for (let m in o) { - if (textChange.indexOf(m) !== -1) changeText = true; - } - if (changeText) T.defineText(color); - return color; - }, - colors: { - sx: 4, - //4 - sy: 2, - //2 - radius: 2, - showOver: 1, - //groupOver : 1, - - content: 'none', - background: 'rgba(50,50,50,0.15)', - backgroundOver: 'rgba(50,50,50,0.3)', - title: '#CCC', - titleoff: '#BBB', - text: '#DDD', - textOver: '#EEE', - textSelect: '#FFF', - back: 'rgba(0,0,0,0.2)', - backoff: 'rgba(0,0,0,0.3)', - // input and button border - border: '#4c4c4c', - borderSize: 1, - gborder: 'none', - groups: 'none', - button: '#3c3c3c', - overoff: '#5c5c5c', - over: '#024699', - select: '#308AFF', - action: '#FF3300', - //fontFamily: 'Tahoma', - fontFamily: 'Consolas, monospace', - //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", - fontWeight: 'normal', - fontShadow: 'none', - //'#000', - fontSize: 12, - joyOver: 'rgba(48,138,255,0.25)', - joyOut: 'rgba(100,100,100,0.5)', - joySelect: '#308AFF', - hide: 'rgba(0,0,0,0)' - }, - // style css - - css: { - basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', - button: 'display:flex; align-items:center; justify-content:center; text-align:center;', - middle: 'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' - }, - // svg path - - svgs: { - g1: 'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', - g2: 'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', - group: 'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', - arrow: 'M 3 8 L 8 5 3 2 3 8 Z', - arrowDown: 'M 5 8 L 8 3 2 3 5 8 Z', - arrowUp: 'M 5 2 L 2 7 8 7 5 2 Z', - solid: 'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', - body: 'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', - vehicle: 'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', - articulation: 'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', - character: 'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', - terrain: 'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', - joint: 'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', - ray: 'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', - collision: 'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', - map: 'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - material: 'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - texture: 'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', - object: 'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', - none: 'M 9 5 L 5 5 5 9 9 9 9 5 Z', - cursor: 'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', - load: 'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', - save: 'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', - extern: 'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z' - }, - rezone() { - Roots.needReZone = true; - }, - getImput: function () { - return Roots.input ? true : false; - }, - setStyle: function (data) { - for (var o in data) { - if (T.colors[o]) T.colors[o] = data[o]; - } - T.setText(); - }, - // ---------------------- - // custom text - // ---------------------- - - defineText: function (o) { - T.setText(o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight); - }, - setText: function (size, color, font, shadow, weight) { - let cc = T.colors; - if (font === undefined) font = cc.fontFamily; - if (size === undefined) size = cc.fontSize; - if (shadow === undefined) shadow = cc.fontShadow; - if (weight === undefined) weight = cc.fontWeight; - if (color === undefined) color = cc.text; - if (isNaN(size)) { - if (size.search('em') === -1) size += 'px'; - } else size += 'px'; - - //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' - - T.css.txt = T.css.basic + T.css.middle + ' font-family:' + font + '; font-weight:' + weight + '; font-size:' + size + '; color:' + cc.text + '; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; - if (shadow !== 'none') T.css.txt += ' text-shadow: 1px 1px 1px ' + shadow + ';'; - T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; - T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; - }, - // note - - //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container - - /*cloneColor: function () { - let cc = Object.assign({}, T.colors ); - return cc; - },*/ - - // intern function - - cloneCss: function () { - //let cc = Object.assign({}, T.css ); - return { - ...T.css - }; - }, - clone: function (o) { - return o.cloneNode(true); - }, - setSvg: function (dom, type, value, id, id2) { - if (id === -1) dom.setAttributeNS(null, type, value);else if (id2 !== undefined) dom.childNodes[id || 0].childNodes[id2 || 0].setAttributeNS(null, type, value);else dom.childNodes[id || 0].setAttributeNS(null, type, value); - }, - setCss: function (dom, css) { - for (let r in css) { - if (T.DOM_SIZE.indexOf(r) !== -1) dom.style[r] = css[r] + 'px';else dom.style[r] = css[r]; - } - }, - set: function (g, o) { - for (let att in o) { - if (att === 'txt') g.textContent = o[att]; - if (att === 'link') g.setAttributeNS(T.links, 'xlink:href', o[att]);else g.setAttributeNS(null, att, o[att]); - } - }, - get: function (dom, id) { - if (id === undefined) return dom; // root - else if (!isNaN(id)) return dom.childNodes[id]; // first child - else if (id instanceof Array) { - if (id.length === 2) return dom.childNodes[id[0]].childNodes[id[1]]; - if (id.length === 3) return dom.childNodes[id[0]].childNodes[id[1]].childNodes[id[2]]; - } - }, - dom: function (type, css, obj, dom, id) { - type = type || 'div'; - if (T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1) { - // is svg element - - if (type === 'svg') { - dom = document.createElementNS(T.svgns, 'svg'); - T.set(dom, obj); - - /* } else if ( type === 'use' ) { - dom = document.createElementNS( T.svgns, 'use' ); - T.set( dom, obj ); - */ - } else { - // create new svg if not def - if (dom === undefined) dom = document.createElementNS(T.svgns, 'svg'); - T.addAttributes(dom, type, obj, id); - } - } else { - // is html element - - if (dom === undefined) dom = document.createElementNS(T.htmls, type);else dom = dom.appendChild(document.createElementNS(T.htmls, type)); - } - if (css) dom.style.cssText = css; - if (id === undefined) return dom;else return dom.childNodes[id || 0]; - }, - addAttributes: function (dom, type, o, id) { - let g = document.createElementNS(T.svgns, type); - T.set(g, o); - T.get(dom, id).appendChild(g); - if (T.SVG_TYPE_G.indexOf(type) !== -1) g.style.pointerEvents = 'none'; - return g; - }, - clear: function (dom) { - T.purge(dom); - while (dom.firstChild) { - if (dom.firstChild.firstChild) T.clear(dom.firstChild); - dom.removeChild(dom.firstChild); - } - }, - purge: function (dom) { - let a = dom.attributes, - i, - n; - if (a) { - i = a.length; - while (i--) { - n = a[i].name; - if (typeof dom[n] === 'function') dom[n] = null; - } - } - a = dom.childNodes; - if (a) { - i = a.length; - while (i--) { - T.purge(dom.childNodes[i]); - } - } - }, - // ---------------------- - // SVG Effects function - // ---------------------- - - addSVGGlowEffect: function () { - if (document.getElementById('UILGlow') !== null) return; - let svgFilter = T.initUILEffects(); - let filter = T.addAttributes(svgFilter, 'filter', { - id: 'UILGlow', - x: '-20%', - y: '-20%', - width: '140%', - height: '140%' - }); - T.addAttributes(filter, 'feGaussianBlur', { - in: 'SourceGraphic', - stdDeviation: '3', - result: 'uilBlur' - }); - let feMerge = T.addAttributes(filter, 'feMerge', {}); - for (let i = 0; i <= 3; i++) { - T.addAttributes(feMerge, 'feMergeNode', { - in: 'uilBlur' - }); - } - T.addAttributes(feMerge, 'feMergeNode', { - in: 'SourceGraphic' - }); - }, - initUILEffects: function () { - let svgFilter = document.getElementById('UILSVGEffects'); - if (svgFilter === null) { - svgFilter = T.dom('svg', undefined, { - id: 'UILSVGEffects', - width: '0', - height: '0' - }); - document.body.appendChild(svgFilter); - } - return svgFilter; - }, - // ---------------------- - // Color function - // ---------------------- - - ColorLuma: function (hex, l) { - //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; - - if (hex === 'n') hex = '#000'; - - // validate hex string - hex = String(hex).replace(/[^0-9a-f]/gi, ''); - if (hex.length < 6) { - hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; - } - l = l || 0; - - // convert to decimal and change luminosity - let rgb = "#", - c, - i; - for (i = 0; i < 3; i++) { - c = parseInt(hex.substr(i * 2, 2), 16); - c = Math.round(Math.min(Math.max(0, c + c * l), 255)).toString(16); - rgb += ("00" + c).substr(c.length); - } - return rgb; - }, - findDeepInver: function (c) { - return c[0] * 0.3 + c[1] * .59 + c[2] * .11 <= 0.6; - }, - lerpColor: function (c1, c2, factor) { - let newColor = {}; - for (let i = 0; i < 3; i++) { - newColor[i] = c1[i] + (c2[i] - c1[i]) * factor; - } - return newColor; - }, - hexToHtml: function (v) { - v = v === undefined ? 0x000000 : v; - return "#" + ("000000" + v.toString(16)).substr(-6); - }, - htmlToHex: function (v) { - return v.toUpperCase().replace("#", "0x"); - }, - u255: function (c, i) { - return parseInt(c.substring(i, i + 2), 16) / 255; - }, - u16: function (c, i) { - return parseInt(c.substring(i, i + 1), 16) / 15; - }, - unpack: function (c) { - if (c.length == 7) return [T.u255(c, 1), T.u255(c, 3), T.u255(c, 5)];else if (c.length == 4) return [T.u16(c, 1), T.u16(c, 2), T.u16(c, 3)]; - }, - p255: function (c) { - let h = Math.round(c * 255).toString(16); - if (h.length < 2) h = '0' + h; - return h; - }, - pack: function (c) { - return '#' + T.p255(c[0]) + T.p255(c[1]) + T.p255(c[2]); - }, - htmlRgb: function (c) { - return 'rgb(' + Math.round(c[0] * 255) + ',' + Math.round(c[1] * 255) + ',' + Math.round(c[2] * 255) + ')'; - }, - pad: function (n) { - if (n.length == 1) n = '0' + n; - return n; - }, - rgbToHex: function (c) { - let r = Math.round(c[0] * 255).toString(16); - let g = Math.round(c[1] * 255).toString(16); - let b = Math.round(c[2] * 255).toString(16); - return '#' + T.pad(r) + T.pad(g) + T.pad(b); - - // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); - }, - hueToRgb: function (p, q, t) { - if (t < 0) t += 1; - if (t > 1) t -= 1; - if (t < 1 / 6) return p + (q - p) * 6 * t; - if (t < 1 / 2) return q; - if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t); - return p; - }, - rgbToHsl: function (c) { - let r = c[0], - g = c[1], - b = c[2], - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h = 0, - s = 0, - l = (min + max) / 2; - if (l > 0 && l < 1) s = delta / (l < 0.5 ? 2 * l : 2 - 2 * l); - if (delta > 0) { - if (max == r && max != g) h += (g - b) / delta; - if (max == g && max != b) h += 2 + (b - r) / delta; - if (max == b && max != r) h += 4 + (r - g) / delta; - h /= 6; - } - return [h, s, l]; - }, - hslToRgb: function (c) { - let p, - q, - h = c[0], - s = c[1], - l = c[2]; - if (s === 0) return [l, l, l];else { - q = l <= 0.5 ? l * (s + 1) : l + s - l * s; - p = l * 2 - q; - return [T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333)]; - } - }, - // ---------------------- - // SVG MODEL - // ---------------------- - - makeGradiant: function (type, settings, parent, colors) { - T.dom(type, null, settings, parent, 0); - let n = parent.childNodes[0].childNodes.length - 1, - c; - for (let i = 0; i < colors.length; i++) { - c = colors[i]; - //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); - T.dom('stop', null, { - offset: c[0] + '%', - 'stop-color': c[1], - 'stop-opacity': c[2] - }, parent, [0, n]); - } - }, - /*makeGraph: function () { - let w = 128; - let radius = 34; - let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 - //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 - //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 - - //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 - //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 - T.graph = svg; - },*/ - - makePad: function (model) { - let ww = 256; - let svg = T.dom('svg', T.css.basic + 'position:relative;', { - viewBox: '0 0 ' + ww + ' ' + ww, - width: ww, - height: ww, - preserveAspectRatio: 'none' - }); - let w = 200; - let d = (ww - w) * 0.5, - m = 20; - Tools.dom('rect', '', { - x: d, - y: d, - width: w, - height: w, - fill: T.colors.back - }, svg); // 0 - Tools.dom('rect', '', { - x: d + m * 0.5, - y: d + m * 0.5, - width: w - m, - height: w - m, - fill: T.colors.button - }, svg); // 1 - // Pointer - Tools.dom('line', '', { - x1: d + m * 0.5, - y1: ww * 0.5, - x2: d + (w - m * 0.5), - y2: ww * 0.5, - stroke: T.colors.back, - 'stroke-width': 2 - }, svg); // 2 - Tools.dom('line', '', { - x1: ww * 0.5, - x2: ww * 0.5, - y1: d + m * 0.5, - y2: d + (w - m * 0.5), - stroke: T.colors.back, - 'stroke-width': 2 - }, svg); // 3 - Tools.dom('circle', '', { - cx: ww * 0.5, - cy: ww * 0.5, - r: 5, - stroke: T.colors.text, - 'stroke-width': 5, - fill: 'none' - }, svg); // 4 - T.pad2d = svg; - }, - makeKnob: function (model) { - let w = 128; - let radius = 34; - let svg = T.dom('svg', T.css.basic + 'position:relative;', { - viewBox: '0 0 ' + w + ' ' + w, - width: w, - height: w, - preserveAspectRatio: 'none' - }); - T.dom('circle', '', { - cx: 64, - cy: 64, - r: radius, - fill: T.colors.button, - stroke: 'rgba(0,0,0,0.3)', - 'stroke-width': 8 - }, svg); //0 - T.dom('path', '', { - d: '', - stroke: T.colors.text, - 'stroke-width': 4, - fill: 'none', - 'stroke-linecap': 'round' - }, svg); //1 - T.dom('circle', '', { - cx: 64, - cy: 64, - r: radius + 7, - stroke: 'rgba(0,0,0,0.1)', - 'stroke-width': 7, - fill: 'none' - }, svg); //2 - T.dom('path', '', { - d: '', - stroke: 'rgba(255,255,255,0.3)', - 'stroke-width': 2, - fill: 'none', - 'stroke-linecap': 'round', - 'stroke-opacity': 0.5 - }, svg); //3 - T.knob = svg; - }, - makeCircular: function (model) { - let w = 128; - let radius = 40; - let svg = T.dom('svg', T.css.basic + 'position:relative;', { - viewBox: '0 0 ' + w + ' ' + w, - width: w, - height: w, - preserveAspectRatio: 'none' - }); - T.dom('circle', '', { - cx: 64, - cy: 64, - r: radius, - stroke: 'rgba(0,0,0,0.1)', - 'stroke-width': 10, - fill: 'none' - }, svg); //0 - T.dom('path', '', { - d: '', - stroke: T.colors.text, - 'stroke-width': 7, - fill: 'none', - 'stroke-linecap': 'butt' - }, svg); //1 - T.circular = svg; - }, - makeJoystick: function (model) { - //+' background:#f00;' - - let w = 128, - ccc; - let radius = Math.floor((w - 30) * 0.5); - let innerRadius = Math.floor(radius * 0.6); - let svg = T.dom('svg', T.css.basic + 'position:relative;', { - viewBox: '0 0 ' + w + ' ' + w, - width: w, - height: w, - preserveAspectRatio: 'none' - }); - T.dom('defs', null, {}, svg); - T.dom('g', null, {}, svg); - if (model === 0) { - // gradian background - ccc = [[40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0]]; - T.makeGradiant('radialGradient', { - id: 'grad', - cx: '50%', - cy: '50%', - r: '50%', - fx: '50%', - fy: '50%' - }, svg, ccc); - - // gradian shadow - ccc = [[60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0]]; - T.makeGradiant('radialGradient', { - id: 'gradS', - cx: '50%', - cy: '50%', - r: '50%', - fx: '50%', - fy: '50%' - }, svg, ccc); - - // gradian stick - let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; - let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; - ccc = [[30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1]]; - T.makeGradiant('radialGradient', { - id: 'gradIn', - cx: '50%', - cy: '50%', - r: '50%', - fx: '50%', - fy: '50%' - }, svg, ccc); - ccc = [[30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1]]; - T.makeGradiant('radialGradient', { - id: 'gradIn2', - cx: '50%', - cy: '50%', - r: '50%', - fx: '50%', - fy: '50%' - }, svg, ccc); - - // graph - - T.dom('circle', '', { - cx: 64, - cy: 64, - r: radius, - fill: 'url(#grad)' - }, svg); //2 - T.dom('circle', '', { - cx: 64 + 5, - cy: 64 + 10, - r: innerRadius + 10, - fill: 'url(#gradS)' - }, svg); //3 - T.dom('circle', '', { - cx: 64, - cy: 64, - r: innerRadius, - fill: 'url(#gradIn)' - }, svg); //4 - - T.joystick_0 = svg; - } else { - // gradian shadow - ccc = [[69, 'rgb(0,0,0)', 0], [70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0]]; - T.makeGradiant('radialGradient', { - id: 'gradX', - cx: '50%', - cy: '50%', - r: '50%', - fx: '50%', - fy: '50%' - }, svg, ccc); - T.dom('circle', '', { - cx: 64, - cy: 64, - r: radius, - fill: 'none', - stroke: 'rgba(100,100,100,0.25)', - 'stroke-width': '4' - }, svg); //2 - T.dom('circle', '', { - cx: 64, - cy: 64, - r: innerRadius + 14, - fill: 'url(#gradX)' - }, svg); //3 - T.dom('circle', '', { - cx: 64, - cy: 64, - r: innerRadius, - fill: 'none', - stroke: 'rgb(100,100,100)', - 'stroke-width': '4' - }, svg); //4 - - T.joystick_1 = svg; - } - }, - makeColorRing: function () { - let w = 256; - let svg = T.dom('svg', T.css.basic + 'position:relative;', { - viewBox: '0 0 ' + w + ' ' + w, - width: w, - height: w, - preserveAspectRatio: 'none' - }); - T.dom('defs', null, {}, svg); - T.dom('g', null, {}, svg); - let s = 30; //stroke - let r = (w - s) * 0.5; - let mid = w * 0.5; - let n = 24, - nudge = 8 / r / n * Math.PI, - a1 = 0; - let am, tan, d2, a2, ar, i, j, path, ccc; - let color = []; - for (i = 0; i <= n; ++i) { - d2 = i / n; - a2 = d2 * T.TwoPI; - am = (a1 + a2) * 0.5; - tan = 1 / Math.cos((a2 - a1) * 0.5); - ar = [Math.sin(a1), -Math.cos(a1), Math.sin(am) * tan, -Math.cos(am) * tan, Math.sin(a2), -Math.cos(a2)]; - color[1] = T.rgbToHex(T.hslToRgb([d2, 1, 0.5])); - if (i > 0) { - j = 6; - while (j--) { - ar[j] = (ar[j] * r + mid).toFixed(2); - } - path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; - ccc = [[0, color[0], 1], [100, color[1], 1]]; - T.makeGradiant('linearGradient', { - id: 'G' + i, - x1: ar[0], - y1: ar[1], - x2: ar[4], - y2: ar[5], - gradientUnits: "userSpaceOnUse" - }, svg, ccc); - T.dom('path', '', { - d: path, - 'stroke-width': s, - stroke: 'url(#G' + i + ')', - 'stroke-linecap': "butt" - }, svg, 1); - } - a1 = a2 - nudge; - color[0] = color[1]; - } - let tw = 84.90; - - // black / white - ccc = [[0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1]]; - T.makeGradiant('linearGradient', { - id: 'GL0', - x1: 0, - y1: mid - tw, - x2: 0, - y2: mid + tw, - gradientUnits: "userSpaceOnUse" - }, svg, ccc); - ccc = [[0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0]]; - T.makeGradiant('linearGradient', { - id: 'GL1', - x1: mid - 49.05, - y1: 0, - x2: mid + 98, - y2: 0, - gradientUnits: "userSpaceOnUse" - }, svg, ccc); - T.dom('g', null, { - 'transform-origin': '128px 128px', - 'transform': 'rotate(0)' - }, svg); //2 - T.dom('polygon', '', { - points: '78.95 43.1 78.95 212.85 226 128', - fill: 'red' - }, svg, 2); // 2,0 - T.dom('polygon', '', { - points: '78.95 43.1 78.95 212.85 226 128', - fill: 'url(#GL1)', - 'stroke-width': 1, - stroke: 'url(#GL1)' - }, svg, 2); //2,1 - T.dom('polygon', '', { - points: '78.95 43.1 78.95 212.85 226 128', - fill: 'url(#GL0)', - 'stroke-width': 1, - stroke: 'url(#GL0)' - }, svg, 2); //2,2 - T.dom('path', '', { - d: 'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', - fill: 'none', - 'stroke-width': 2, - stroke: '#000' - }, svg, 2); //2,3 - //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 - - T.dom('circle', '', { - cx: 128, - cy: 128, - r: 6, - 'stroke-width': 2, - stroke: '#000', - fill: 'none' - }, svg); //3 - - T.colorRing = svg; - }, - icon: function (type, color, w) { - w = w || 40; - //color = color || '#DEDEDE'; - let viewBox = '0 0 256 256'; - //let viewBox = '0 0 '+ w +' '+ w; - let t = [""]; - switch (type) { - case 'logo': - t[1] = ""; - break; - case 'donate': - t[1] = ""; - break; - case 'neo': - t[1] = ""; - break; - case 'phy': - t[1] = ""; - break; - case 'config': - t[1] = ""; - break; - case 'github': - t[1] = ""; - break; - case 'save': - t[1] = ""; - break; - } - t[2] = ""; - return t.join("\n"); - }, - logoFill_d: ` - M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 - L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 - M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 - Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z - `, - logo_github: ` - M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 - 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 - 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 - 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 - 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z - `, - logo_neo: ` - M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 - 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 - 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 - 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L - 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z - `, - logo_phy: ` - M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 - Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 - `, - logo_config: ` - M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 - L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 - Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 - `, - logo_donate: ` - M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 - 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 - 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 - 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 - 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 - Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 - 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 - 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 - 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M - 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 - 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 - 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 - 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 - 200.9 187.5 200.9 187.5 195.35 Z - ` - }; - T.setText(); + /** + * @author lth / https://github.com/lo-th + */ + + const T = { + + transition: 0.2, + + frag: document.createDocumentFragment(), + + colorRing: null, + joystick_0: null, + joystick_1: null, + circular: null, + knob: null, + pad2d: null, + + svgns: "http://www.w3.org/2000/svg", + links: "http://www.w3.org/1999/xlink", + htmls: "http://www.w3.org/1999/xhtml", + + DOM_SIZE: [ 'height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], + SVG_TYPE_D: [ 'pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix' ], + SVG_TYPE_G: [ 'svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject' ], + + PI: Math.PI, + TwoPI: Math.PI*2, + pi90: Math.PI * 0.5, + pi60: Math.PI/3, + + torad: Math.PI / 180, + todeg: 180 / Math.PI, + + clamp: ( v, min, max ) => { + + v = v < min ? min : v; + v = v > max ? max : v; + return v; + + }, + + isDivid: ( v ) => ( v*0.5 === Math.floor(v*0.5) ), + + size: { w: 240, h: 20, p: 30, s: 8 }, + + // ---------------------- + // COLOR + // ---------------------- + + defineColor: ( o, cc = T.colors ) => { + + let color = { ...cc }; + + let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize' ]; + let changeText = false; + + if( o.font ) o.fontFamily = o.font; + if( o.shadow ) o.fontShadow = o.shadow; + if( o.weight ) o.fontWeight = o.weight; + + if( o.fontColor ) o.text = o.fontColor; + if( o.color ) o.text = o.color; + + if( o.text ){ + color.text = o.text; + if( !o.fontColor && !o.color ){ + color.title = T.ColorLuma( o.text, -0.25 ); + color.titleoff = T.ColorLuma( o.text, -0.5 ); + } + color.textOver = T.ColorLuma( o.text, 0.25 ); + color.textSelect = T.ColorLuma( o.text, 0.5 ); + } + + if( o.button ){ + color.button = o.button; + color.border = T.ColorLuma( o.button, 0.1 ); + color.overoff = T.ColorLuma( o.button, 0.2 ); + } + + if( o.select ){ + color.select = o.select; + color.over = T.ColorLuma( o.select, -0.1 ); + } + + if( o.itemBg ) o.back = o.itemBg; + + if( o.back ){ + color.back = o.back; + color.backoff = T.ColorLuma( o.back, -0.1 ); + } + + if( o.fontSelect ) color.textSelect = o.fontSelect; + if( o.groupBorder ) color.gborder = o.groupBorder; + + //if( o.transparent ) o.bg = 'none' + //if( o.bg ) color.background = color.backgroundOver = o.bg + if( o.bgOver ) color.backgroundOver = o.bgOver; + + for( let m in color ){ + if(o[m]!==undefined) color[m] = o[m]; + } + + for( let m in o ){ + if( textChange.indexOf(m) !== -1 ) changeText = true; + } + + if( changeText ) T.defineText( color ); + + return color + + }, + + colors: { + + sx: 4,//4 + sy: 2,//2 + radius:2, + + showOver : 1, + //groupOver : 1, + + content:'none', + background: 'rgba(50,50,50,0.15)', + backgroundOver: 'rgba(50,50,50,0.3)', + + title : '#CCC', + titleoff : '#BBB', + text : '#DDD', + textOver : '#EEE', + textSelect : '#FFF', + + back:'rgba(0,0,0,0.2)', + backoff:'rgba(0,0,0,0.3)', + + // input and button border + border : '#4c4c4c', + borderSize : 1, + + gborder : 'none', + groups : 'none', + + + button : '#3c3c3c', + overoff : '#5c5c5c', + over : '#024699', + select : '#308AFF', + action: '#FF3300', + + //fontFamily: 'Tahoma', + fontFamily: 'Consolas, monospace', + //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", + fontWeight: 'normal', + fontShadow: 'none',//'#000', + fontSize:12, + + joyOver:'rgba(48,138,255,0.25)', + joyOut: 'rgba(100,100,100,0.5)', + joySelect: '#308AFF', + + + hide: 'rgba(0,0,0,0)', + + }, + + // style css + + css : { + + basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', + button:'display:flex; align-items:center; justify-content:center; text-align:center;', + middle:'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' + }, + + // svg path + + svgs: { + + g1:'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', + g2:'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', + + group:'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', + arrow:'M 3 8 L 8 5 3 2 3 8 Z', + + arrowDown:'M 5 8 L 8 3 2 3 5 8 Z', + arrowUp:'M 5 2 L 2 7 8 7 5 2 Z', + + solid:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', + body:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', + vehicle:'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', + articulation:'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', + character:'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', + terrain:'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', + joint:'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', + ray:'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', + collision:'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', + map:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + material:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + texture:'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', + object:'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', + none:'M 9 5 L 5 5 5 9 9 9 9 5 Z', + cursor:'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', + load:'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', + save:'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', + extern:'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z', + + }, + + rezone () { + Roots.needReZone = true; + }, + + getImput: function(){ + + return Roots.input ? true : false + + }, + + setStyle : function ( data ){ + + for ( var o in data ){ + if( T.colors[o] ) T.colors[o] = data[o]; + } + + T.setText(); + + }, + + // ---------------------- + // custom text + // ---------------------- + + defineText: function( o ){ + + T.setText( o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight ); + + }, + + setText: function( size, color, font, shadow, weight ){ + + let cc = T.colors; + + if( font === undefined ) font = cc.fontFamily; + if( size === undefined ) size = cc.fontSize; + if( shadow === undefined ) shadow = cc.fontShadow; + if( weight === undefined ) weight = cc.fontWeight; + if( color === undefined ) color = cc.text; + + if( isNaN(size) ){ if( size.search('em')===-1 ) size += 'px';} + else size += 'px'; + + + //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' + + T.css.txt = T.css.basic + T.css.middle + ' font-family:'+ font +'; font-weight:'+weight+'; font-size:'+size+'; color:'+cc.text+'; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; + if( shadow !== 'none' ) T.css.txt += ' text-shadow: 1px 1px 1px '+shadow+';'; + + T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; + T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; + + }, + + + // note + + //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container + + /*cloneColor: function () { + + let cc = Object.assign({}, T.colors ); + return cc; + + },*/ + + // intern function + + cloneCss: function () { + + //let cc = Object.assign({}, T.css ); + return { ...T.css }; + + }, + + clone: function ( o ) { + + return o.cloneNode( true ); + + }, + + setSvg: function( dom, type, value, id, id2 ){ + + if( id === -1 ) dom.setAttributeNS( null, type, value ); + else if( id2 !== undefined ) dom.childNodes[ id || 0 ].childNodes[ id2 || 0 ].setAttributeNS( null, type, value ); + else dom.childNodes[ id || 0 ].setAttributeNS( null, type, value ); + + }, + + setCss: function( dom, css ){ + + for( let r in css ){ + if( T.DOM_SIZE.indexOf(r) !== -1 ) dom.style[r] = css[r] + 'px'; + else dom.style[r] = css[r]; + } + + }, + + set: function( g, o ){ + + for( let att in o ){ + if( att === 'txt' ) g.textContent = o[ att ]; + if( att === 'link' ) g.setAttributeNS( T.links, 'xlink:href', o[ att ] ); + else g.setAttributeNS( null, att, o[ att ] ); + } + + }, + + get: function( dom, id ){ + + if( id === undefined ) return dom; // root + else if( !isNaN( id ) ) return dom.childNodes[ id ]; // first child + else if( id instanceof Array ){ + if(id.length === 2) return dom.childNodes[ id[0] ].childNodes[ id[1] ]; + if(id.length === 3) return dom.childNodes[ id[0] ].childNodes[ id[1] ].childNodes[ id[2] ]; + } + + }, + + dom : function ( type, css, obj, dom, id ) { + + type = type || 'div'; + + if( T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1 ){ // is svg element + + if( type ==='svg' ){ + + dom = document.createElementNS( T.svgns, 'svg' ); + T.set( dom, obj ); + + /* } else if ( type === 'use' ) { + + dom = document.createElementNS( T.svgns, 'use' ); + T.set( dom, obj ); + */ + } else { + // create new svg if not def + if( dom === undefined ) dom = document.createElementNS( T.svgns, 'svg' ); + T.addAttributes( dom, type, obj, id ); + + } + + } else { // is html element + + if( dom === undefined ) dom = document.createElementNS( T.htmls, type ); + else dom = dom.appendChild( document.createElementNS( T.htmls, type ) ); + + } + + if( css ) dom.style.cssText = css; + + if( id === undefined ) return dom; + else return dom.childNodes[ id || 0 ]; + + }, + + addAttributes : function( dom, type, o, id ){ + + let g = document.createElementNS( T.svgns, type ); + T.set( g, o ); + T.get( dom, id ).appendChild( g ); + if( T.SVG_TYPE_G.indexOf(type) !== -1 ) g.style.pointerEvents = 'none'; + return g; + + }, + + clear : function( dom ){ + + T.purge( dom ); + while (dom.firstChild) { + if ( dom.firstChild.firstChild ) T.clear( dom.firstChild ); + dom.removeChild( dom.firstChild ); + } + + }, + + purge : function ( dom ) { + + let a = dom.attributes, i, n; + if (a) { + i = a.length; + while(i--){ + n = a[i].name; + if (typeof dom[n] === 'function') dom[n] = null; + } + } + a = dom.childNodes; + if (a) { + i = a.length; + while(i--){ + T.purge( dom.childNodes[i] ); + } + } + + }, + + // ---------------------- + // SVG Effects function + // ---------------------- + + addSVGGlowEffect: function () { + + if ( document.getElementById( 'UILGlow') !== null ) return; + + let svgFilter = T.initUILEffects(); + + let filter = T.addAttributes( svgFilter, 'filter', { id: 'UILGlow', x: '-20%', y: '-20%', width: '140%', height: '140%' } ); + T.addAttributes( filter, 'feGaussianBlur', { in: 'SourceGraphic', stdDeviation: '3', result: 'uilBlur' } ); + let feMerge = T.addAttributes( filter, 'feMerge', { } ); + + for( let i = 0; i <= 3; i++ ) { + + T.addAttributes( feMerge, 'feMergeNode', { in: 'uilBlur' } ); + + } + + T.addAttributes( feMerge, 'feMergeNode', { in: 'SourceGraphic' } ); + + }, + + initUILEffects: function () { + + let svgFilter = document.getElementById( 'UILSVGEffects'); + + if ( svgFilter === null ) { + + svgFilter = T.dom( 'svg', undefined , { id: 'UILSVGEffects', width: '0', height: '0' } ); + document.body.appendChild( svgFilter ); + + } + + return svgFilter; + + }, + + // ---------------------- + // Color function + // ---------------------- + + ColorLuma : function ( hex, l ) { + + //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; + + if( hex === 'n' ) hex = '#000'; + + // validate hex string + hex = String(hex).replace(/[^0-9a-f]/gi, ''); + if (hex.length < 6) { + hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; + } + l = l || 0; + + // convert to decimal and change luminosity + let rgb = "#", c, i; + for (i = 0; i < 3; i++) { + c = parseInt(hex.substr(i*2,2), 16); + c = Math.round(Math.min(Math.max(0, c + (c * l)), 255)).toString(16); + rgb += ("00"+c).substr(c.length); + } + + return rgb; + + }, + + findDeepInver: function ( c ) { + + return (c[0] * 0.3 + c[1] * .59 + c[2] * .11) <= 0.6; + + }, + + lerpColor: function( c1, c2, factor ) { + let newColor = {}; + for ( let i = 0; i < 3; i++ ) { + newColor[i] = c1[ i ] + ( c2[ i ] - c1[ i ] ) * factor; + } + return newColor; + }, + + hexToHtml: function ( v ) { + v = v === undefined ? 0x000000 : v; + return "#" + ("000000" + v.toString(16)).substr(-6); + + }, + + htmlToHex: function ( v ) { + + return v.toUpperCase().replace("#", "0x"); + + }, + + u255: function (c, i) { + + return parseInt(c.substring(i, i + 2), 16) / 255; + + }, + + u16: function ( c, i ) { + + return parseInt(c.substring(i, i + 1), 16) / 15; + + }, + + unpack: function( c ){ + + if (c.length == 7) return [ T.u255(c, 1), T.u255(c, 3), T.u255(c, 5) ]; + else if (c.length == 4) return [ T.u16(c,1), T.u16(c,2), T.u16(c,3) ]; + + }, + + p255: function ( c ) { + let h = Math.round( ( c * 255 ) ).toString( 16 ); + if ( h.length < 2 ) h = '0' + h; + return h; + }, + + pack: function ( c ) { + + return '#' + T.p255( c[ 0 ] ) + T.p255( c[ 1 ] ) + T.p255( c[ 2 ] ); + + }, + + htmlRgb: function( c ){ + + return 'rgb(' + Math.round(c[0] * 255) + ','+ Math.round(c[1] * 255) + ','+ Math.round(c[2] * 255) + ')'; + + }, + + pad: function( n ){ + if(n.length == 1)n = '0' + n; + return n; + }, + + rgbToHex : function( c ){ + + let r = Math.round(c[0] * 255).toString(16); + let g = Math.round(c[1] * 255).toString(16); + let b = Math.round(c[2] * 255).toString(16); + return '#' + T.pad(r) + T.pad(g) + T.pad(b); + + // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); + + }, + + hueToRgb: function( p, q, t ){ + + if ( t < 0 ) t += 1; + if ( t > 1 ) t -= 1; + if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; + if ( t < 1 / 2 ) return q; + if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); + return p; + + }, + + rgbToHsl: function ( c ) { + + let r = c[0], g = c[1], b = c[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h = 0, s = 0, l = (min + max) / 2; + if (l > 0 && l < 1) s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); + if (delta > 0) { + if (max == r && max != g) h += (g - b) / delta; + if (max == g && max != b) h += (2 + (b - r) / delta); + if (max == b && max != r) h += (4 + (r - g) / delta); + h /= 6; + } + return [ h, s, l ]; + + }, + + hslToRgb: function ( c ) { + + let p, q, h = c[0], s = c[1], l = c[2]; + + if ( s === 0 ) return [ l, l, l ]; + else { + q = l <= 0.5 ? l * (s + 1) : l + s - ( l * s ); + p = l * 2 - q; + return [ T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333) ]; + } + + }, + + // ---------------------- + // SVG MODEL + // ---------------------- + + makeGradiant: function ( type, settings, parent, colors ) { + + T.dom( type, null, settings, parent, 0 ); + + let n = parent.childNodes[0].childNodes.length - 1, c; + + for( let i = 0; i < colors.length; i++ ){ + + c = colors[i]; + //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); + T.dom( 'stop', null, { offset:c[0]+'%', 'stop-color':c[1], 'stop-opacity':c[2] }, parent, [0,n] ); + + } + + }, + + /*makeGraph: function () { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 + //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 + //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + + //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 + //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.graph = svg; + + },*/ + + makePad: function ( model ) { + + let ww = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+ww+' '+ww, width:ww, height:ww, preserveAspectRatio:'none' } ); + let w = 200; + let d = (ww-w)*0.5, m = 20; + Tools.dom( 'rect', '', { x: d, y: d, width: w, height: w, fill:T.colors.back }, svg ); // 0 + Tools.dom( 'rect', '', { x: d+m*0.5, y: d+m*0.5, width: w - m , height: w - m, fill:T.colors.button }, svg ); // 1 + // Pointer + Tools.dom( 'line', '', { x1: d+(m*0.5), y1: ww *0.5, x2: d+(w-m*0.5), y2: ww * 0.5, stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 2 + Tools.dom( 'line', '', { x1: ww * 0.5, x2: ww * 0.5, y1: d+(m*0.5), y2: d+(w-m*0.5), stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 3 + Tools.dom( 'circle', '', { cx: ww * 0.5, cy: ww * 0.5, r:5, stroke: T.colors.text, 'stroke-width': 5, fill:'none' }, svg ); // 4 + T.pad2d = svg; + + }, + + makeKnob: function ( model ) { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'round' }, svg );//1 + T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.1)', 'stroke-width':7 , fill:'none'}, svg );//2 + T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.knob = svg; + + }, + + makeCircular: function ( model ) { + + let w = 128; + let radius = 40; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, stroke:'rgba(0,0,0,0.1)', 'stroke-width':10, fill:'none' }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':7, fill:'none', 'stroke-linecap':'butt' }, svg );//1 + T.circular = svg; + + }, + + makeJoystick: function ( model ) { + + //+' background:#f00;' + + let w = 128, ccc; + let radius = Math.floor((w-30)*0.5); + let innerRadius = Math.floor(radius*0.6); + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + if( model === 0 ){ + + + + // gradian background + ccc = [ [40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'grad', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian shadow + ccc = [ [60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradS', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian stick + let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; + let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; + + ccc = [ [30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + ccc = [ [30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn2', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // graph + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'url(#grad)' }, svg );//2 + T.dom( 'circle', '', { cx:64+5, cy:64+10, r:innerRadius+10, fill:'url(#gradS)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'url(#gradIn)' }, svg );//4 + + T.joystick_0 = svg; + + } else { + // gradian shadow + ccc = [ [69, 'rgb(0,0,0)', 0],[70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradX', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'none', stroke:'rgba(100,100,100,0.25)', 'stroke-width':'4' }, svg );//2 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius+14, fill:'url(#gradX)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'none', stroke:'rgb(100,100,100)', 'stroke-width':'4' }, svg );//4 + + T.joystick_1 = svg; + } + + + + }, + + makeColorRing: function () { + + let w = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + let s = 30;//stroke + let r =( w-s )*0.5; + let mid = w*0.5; + let n = 24, nudge = 8 / r / n * Math.PI, a1 = 0; + let am, tan, d2, a2, ar, i, j, path, ccc; + let color = []; + + for ( i = 0; i <= n; ++i) { + + d2 = i / n; + a2 = d2 * T.TwoPI; + am = (a1 + a2) * 0.5; + tan = 1 / Math.cos((a2 - a1) * 0.5); + + ar = [ + Math.sin(a1), -Math.cos(a1), + Math.sin(am) * tan, -Math.cos(am) * tan, + Math.sin(a2), -Math.cos(a2) + ]; + + color[1] = T.rgbToHex( T.hslToRgb([d2, 1, 0.5]) ); + + if (i > 0) { + + j = 6; + while(j--){ + ar[j] = ((ar[j]*r)+mid).toFixed(2); + } + + path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; + + ccc = [ [0,color[0],1], [100,color[1],1] ]; + T.makeGradiant( 'linearGradient', { id:'G'+i, x1:ar[0], y1:ar[1], x2:ar[4], y2:ar[5], gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'path', '', { d:path, 'stroke-width':s, stroke:'url(#G'+i+')', 'stroke-linecap':"butt" }, svg, 1 ); + + } + a1 = a2 - nudge; + color[0] = color[1]; + } + + let tw = 84.90; + + // black / white + ccc = [ [0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1] ]; + T.makeGradiant( 'linearGradient', { id:'GL0', x1:0, y1:mid-tw, x2:0, y2:mid+tw, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + ccc = [ [0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0] ]; + T.makeGradiant( 'linearGradient', { id:'GL1', x1:mid-49.05, y1:0, x2:mid+98, y2:0, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'g', null, { 'transform-origin': '128px 128px', 'transform':'rotate(0)' }, svg );//2 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'red' }, svg, 2 );// 2,0 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL1)','stroke-width':1, stroke:'url(#GL1)' }, svg, 2 );//2,1 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL0)','stroke-width':1, stroke:'url(#GL0)' }, svg, 2 );//2,2 + T.dom( 'path', '', { d:'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill:'none','stroke-width':2, stroke:'#000' }, svg, 2 );//2,3 + //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 + + T.dom( 'circle', '', { cx:128, cy:128, r:6, 'stroke-width':2, stroke:'#000', fill:'none' }, svg );//3 + + T.colorRing = svg; + + }, + + icon: function ( type, color, w ){ + + w = w || 40; + //color = color || '#DEDEDE'; + let viewBox = '0 0 256 256'; + //let viewBox = '0 0 '+ w +' '+ w; + let t = [""]; + switch(type){ + case 'logo': + t[1]=""; + break; + case 'donate': + t[1]=""; + break; + case 'neo': + t[1]=""; + break; + case 'phy': + t[1]=""; + break; + case 'config': + t[1]=""; + break; + case 'github': + t[1]=""; + break; + case 'save': + t[1]=""; + break; + } + t[2] = ""; + return t.join("\n"); + + }, + + logoFill_d:` + M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 + L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 + M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 + Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z + `, + + logo_github:` + M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 + 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 + 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 + 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 + 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z + `, + + logo_neo:` + M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 + 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 + 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 + 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L + 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z + `, + + logo_phy:` + M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 + Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 + `, + + logo_config:` + M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 + L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 + Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 + `, + + logo_donate:` + M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 + 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 + 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 + 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 + 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 + Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 + 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 + 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 + 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M + 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 + 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 + 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 + 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 + 200.9 187.5 200.9 187.5 195.35 Z + `, + + }; + + T.setText(); + const Tools = T; - ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile - - class Files { - //----------------------------- - // FILE TYPE - //----------------------------- - - static autoTypes(type) { - let t = []; - switch (type) { - case 'svg': - t = [{ - accept: { - 'image/svg+xml': '.svg' - } - }]; - break; - case 'wav': - t = [{ - accept: { - 'audio/wav': '.wav' - } - }]; - break; - case 'mp3': - t = [{ - accept: { - 'audio/mpeg': '.mp3' - } - }]; - break; - case 'mp4': - t = [{ - accept: { - 'video/mp4': '.mp4' - } - }]; - break; - case 'bin': - case 'hex': - t = [{ - description: 'Binary Files', - accept: { - 'application/octet-stream': ['.bin', '.hex'] - } - }]; - break; - case 'text': - t = [{ - description: 'Text Files', - accept: { - 'text/plain': ['.txt', '.text'], - 'text/html': ['.html', '.htm'] - } - }]; - break; - case 'json': - t = [{ - description: 'JSON Files', - accept: { - 'application/json': ['.json'] - } - }]; //text/plain - break; - case 'js': - t = [{ - description: 'JavaScript Files', - accept: { - 'text/javascript': ['.js'] - } - }]; - break; - case 'image': - t = [{ - description: 'Images', - accept: { - 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] - } - }]; - break; - case 'icon': - t = [{ - description: 'Icons', - accept: { - 'image/x-ico': ['.ico'] - } - }]; - break; - case 'lut': - t = [{ - description: 'Lut', - accept: { - 'text/plain': ['.cube', '.3dl'] - } - }]; - break; - } - return t; - } - - //----------------------------- - // LOAD - //----------------------------- - - static async load(o = {}) { - if (typeof window.showOpenFilePicker !== 'function') { - window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; - } - try { - let type = o.type || ''; - const options = { - excludeAcceptAllOption: type ? true : false, - multiple: false - //startIn:'./assets' - }; - options.types = Files.autoTypes(type); - - // create a new handle - const handle = await window.showOpenFilePicker(options); - const file = await handle[0].getFile(); - //let content = await file.text() - - if (!file) return null; - let fname = file.name; - let ftype = fname.substring(fname.lastIndexOf('.') + 1, fname.length); - const dataUrl = ['png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3']; - const dataBuf = ['sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf']; - const reader = new FileReader(); - if (dataUrl.indexOf(ftype) !== -1) reader.readAsDataURL(file);else if (dataBuf.indexOf(ftype) !== -1) reader.readAsArrayBuffer(file);else reader.readAsText(file); - reader.onload = function (e) { - let content = e.target.result; - switch (type) { - case 'image': - let img = new Image(); - img.onload = function () { - if (o.callback) o.callback(img, fname, ftype); - }; - img.src = content; - break; - case 'json': - if (o.callback) o.callback(JSON.parse(content), fname, ftype); - break; - default: - if (o.callback) o.callback(content, fname, ftype); - break; - } - }; - } catch (e) { - console.log(e); - if (o.always && o.callback) o.callback(null); - } - } - static showOpenFilePickerPolyfill(options) { - return new Promise(resolve => { - const input = document.createElement("input"); - input.type = "file"; - input.multiple = options.multiple; - input.accept = options.types.map(type => type.accept).flatMap(inst => Object.keys(inst).flatMap(key => inst[key])).join(","); - input.addEventListener("change", () => { - resolve([...input.files].map(file => { - return { - getFile: async () => new Promise(resolve => { - resolve(file); - }) - }; - })); - }); - input.click(); - }); - } - - //----------------------------- - // SAVE - //----------------------------- - - static async save(o = {}) { - let usePoly = false; - if (typeof window.showSaveFilePicker !== 'function') { - window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; - usePoly = true; - } - try { - let type = o.type || ''; - const options = { - suggestedName: o.name || 'hello', - data: o.data || '' - }; - options.types = Files.autoTypes(type); - options.finalType = Object.keys(options.types[0].accept)[0]; - options.suggestedName += options.types[0].accept[options.finalType][0]; - - // create a new handle - const handle = await window.showSaveFilePicker(options); - if (usePoly) return; - - // create a FileSystemWritableFileStream to write to - const file = await handle.createWritable(); - let blob = new Blob([options.data], { - type: options.finalType - }); - - // write our file - await file.write(blob); - - // close the file and write the contents to disk. - await file.close(); - } catch (e) { - console.log(e); - } - } - static showSaveFilePickerPolyfill(options) { - return new Promise(resolve => { - const a = document.createElement("a"); - a.download = options.suggestedName || "my-file.txt"; - let blob = new Blob([options.data], { - type: options.finalType - }); - a.href = URL.createObjectURL(blob); - a.addEventListener("click", () => { - resolve(setTimeout(() => URL.revokeObjectURL(a.href), 1000)); - }); - a.click(); - }); - } - - //----------------------------- - // FOLDER not possible in poly - //----------------------------- - - static async getFolder() { - try { - const handle = await window.showDirectoryPicker(); - const files = []; - for await (const entry of handle.values()) { - const file = await entry.getFile(); - files.push(file); - } - console.log(files); - return files; - } catch (e) { - console.log(e); - } - } + ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile + + + class Files { + + //----------------------------- + // FILE TYPE + //----------------------------- + + static autoTypes( type ) { + + let t = []; + + switch( type ){ + case 'svg': + t = [ { accept: { 'image/svg+xml': '.svg'} }, ]; + break; + case 'wav': + t = [ { accept: { 'audio/wav': '.wav'} }, ]; + break; + case 'mp3': + t = [ { accept: { 'audio/mpeg': '.mp3'} }, ]; + break; + case 'mp4': + t = [ { accept: { 'video/mp4': '.mp4'} }, ]; + break; + case 'bin': case 'hex': + t = [ { description: 'Binary Files', accept: { 'application/octet-stream': ['.bin', '.hex'] } }, ]; + break; + case 'text': + t = [ { description: 'Text Files', accept: { 'text/plain': ['.txt', '.text'], 'text/html': ['.html', '.htm'] } }, ]; + break; + case 'json': + t = [ { description: 'JSON Files', accept: { 'application/json': ['.json'] } }, ];//text/plain + break; + case 'js': + t = [ { description: 'JavaScript Files', accept: { 'text/javascript': ['.js'] } }, ]; + break; + case 'image': + t = [ { description: 'Images', accept: { 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] } }, ]; + break; + case 'icon': + t = [ { description: 'Icons', accept: { 'image/x-ico': ['.ico'] } }, ]; + break; + case 'lut': + t = [ { description: 'Lut', accept: { 'text/plain': ['.cube', '.3dl'] } }, ]; + break; + + } + + return t + + } + + + //----------------------------- + // LOAD + //----------------------------- + + static async load( o = {} ) { + + if (typeof window.showOpenFilePicker !== 'function') { + window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; + } + + try { + + let type = o.type || ''; + + const options = { + excludeAcceptAllOption: type ? true : false, + multiple: false, + //startIn:'./assets' + }; + + options.types = Files.autoTypes( type ); + + // create a new handle + const handle = await window.showOpenFilePicker( options ); + const file = await handle[0].getFile(); + //let content = await file.text() + + if( !file ) return null + + let fname = file.name; + let ftype = fname.substring( fname.lastIndexOf('.')+1, fname.length ); + + const dataUrl = [ 'png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3' ]; + const dataBuf = [ 'sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf' ]; + const reader = new FileReader(); + + if( dataUrl.indexOf( ftype ) !== -1 ) reader.readAsDataURL( file ); + else if( dataBuf.indexOf( ftype ) !== -1 ) reader.readAsArrayBuffer( file ); + else reader.readAsText( file ); + + reader.onload = function(e) { + + let content = e.target.result; + + switch(type){ + case 'image': + let img = new Image; + img.onload = function() { + if( o.callback ) o.callback( img, fname, ftype ); + }; + img.src = content; + break; + case 'json': + if( o.callback ) o.callback( JSON.parse( content ), fname, ftype ); + break; + default: + if( o.callback ) o.callback( content, fname, ftype ); + break; + } + + }; + + } catch(e) { + + console.log(e); + if( o.always && o.callback ) o.callback( null ); + + } + + } + + static showOpenFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const input = document.createElement("input"); + input.type = "file"; + input.multiple = options.multiple; + input.accept = options.types + .map((type) => type.accept) + .flatMap((inst) => Object.keys(inst).flatMap((key) => inst[key])) + .join(","); + + input.addEventListener("change", () => { + resolve( + [...input.files].map((file) => { + return { + getFile: async () => + new Promise((resolve) => { + resolve(file); + }), + }; + }) + ); + }); + + input.click(); + }) + } + + + //----------------------------- + // SAVE + //----------------------------- + + static async save( o = {} ) { + + let usePoly = false; + + if (typeof window.showSaveFilePicker !== 'function') { + window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; + usePoly = true; + } + + try { + + let type = o.type || ''; + + const options = { + suggestedName: o.name || 'hello', + data: o.data || '' + }; + + options.types = Files.autoTypes( type ); + options.finalType = Object.keys( options.types[0].accept )[0]; + options.suggestedName += options.types[0].accept[options.finalType][0]; + + + // create a new handle + const handle = await window.showSaveFilePicker( options ); + + if( usePoly ) return + + // create a FileSystemWritableFileStream to write to + const file = await handle.createWritable(); + + let blob = new Blob([ options.data ], { type: options.finalType }); + + // write our file + await file.write(blob); + + // close the file and write the contents to disk. + await file.close(); + + } catch(e) { + + console.log(e); + + } + + } + + static showSaveFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const a = document.createElement("a"); + a.download = options.suggestedName || "my-file.txt"; + let blob = new Blob([ options.data ], { type:options.finalType }); + a.href = URL.createObjectURL( blob ); + + a.addEventListener("click", () => { + resolve( + setTimeout( () => URL.revokeObjectURL(a.href), 1000 ) + ); + }); + a.click(); + }) + } + + + //----------------------------- + // FOLDER not possible in poly + //----------------------------- + + static async getFolder() { + + try { + + const handle = await window.showDirectoryPicker(); + const files = []; + for await (const entry of handle.values()) { + const file = await entry.getFile(); + files.push(file); + } + + console.log(files); + return files; + + } catch(e) { + + console.log(e); + + } + + } + + + + + + + + + + } - class V2 { - constructor(x = 0, y = 0) { - this.x = x; - this.y = y; - } - set(x, y) { - this.x = x; - this.y = y; - return this; - } - divide(v) { - this.x /= v.x; - this.y /= v.y; - return this; - } - multiply(v) { - this.x *= v.x; - this.y *= v.y; - return this; - } - multiplyScalar(scalar) { - this.x *= scalar; - this.y *= scalar; - return this; - } - divideScalar(scalar) { - return this.multiplyScalar(1 / scalar); - } - length() { - return Math.sqrt(this.x * this.x + this.y * this.y); - } - angle() { - // computes the angle in radians with respect to the positive x-axis - - var angle = Math.atan2(this.y, this.x); - if (angle < 0) angle += 2 * Math.PI; - return angle; - } - addScalar(s) { - this.x += s; - this.y += s; - return this; - } - negate() { - this.x *= -1; - this.y *= -1; - return this; - } - neg() { - this.x = -1; - this.y = -1; - return this; - } - isZero() { - return this.x === 0 && this.y === 0; - } - copy(v) { - this.x = v.x; - this.y = v.y; - return this; - } - equals(v) { - return v.x === this.x && v.y === this.y; - } - nearEquals(v, n) { - return v.x.toFixed(n) === this.x.toFixed(n) && v.y.toFixed(n) === this.y.toFixed(n); - } - lerp(v, alpha) { - if (v === null) { - this.x -= this.x * alpha; - this.y -= this.y * alpha; - } else { - this.x += (v.x - this.x) * alpha; - this.y += (v.y - this.y) * alpha; - } - return this; - } + class V2 { + + constructor( x = 0, y = 0 ) { + + this.x = x; + this.y = y; + + } + + set ( x, y ) { + + this.x = x; + this.y = y; + return this; + + } + + divide ( v ) { + + this.x /= v.x; + this.y /= v.y; + return this; + + } + + multiply ( v ) { + + this.x *= v.x; + this.y *= v.y; + return this; + + } + + multiplyScalar ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + return this; + + } + + divideScalar ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + } + + length () { + + return Math.sqrt( this.x * this.x + this.y * this.y ); + + } + + angle () { + + // computes the angle in radians with respect to the positive x-axis + + var angle = Math.atan2( this.y, this.x ); + + if ( angle < 0 ) angle += 2 * Math.PI; + + return angle; + + } + + addScalar ( s ) { + + this.x += s; + this.y += s; + return this; + + } + + negate () { + + this.x *= -1; + this.y *= -1; + return this; + + } + + neg () { + + this.x = -1; + this.y = -1; + return this; + + } + + isZero () { + + return ( this.x === 0 && this.y === 0 ); + + } + + copy ( v ) { + + this.x = v.x; + this.y = v.y; + + return this; + + } + + equals ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) ); + + } + + nearEquals ( v, n ) { + + return ( ( v.x.toFixed(n) === this.x.toFixed(n) ) && ( v.y.toFixed(n) === this.y.toFixed(n) ) ); + + } + + lerp ( v, alpha ) { + + if( v === null ){ + this.x -= this.x * alpha; + this.y -= this.y * alpha; + } else { + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + } + + return this; + + } + } - /** - * @author lth / https://github.com/lo-th - */ - - class Proto { - constructor(o = {}) { - // disable mouse controle - this.lock = o.lock || false; - - // for button - this.neverlock = false; - - // only simple space - this.isSpace = o.isSpace || false; - - // if is on gui or group - this.main = o.main || null; - this.isUI = o.isUI || false; - this.group = o.group || null; - this.isListen = false; - this.top = 0; - this.ytop = 0; - this.dx = o.dx || 0; - this.isSelectable = o.selectable !== undefined ? o.selectable : false; - this.unselectable = o.unselect !== undefined ? o.unselect : this.isSelectable; - this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' - - this.css = this.main ? this.main.css : Tools.css; - this.colors = Tools.defineColor(o, this.main ? this.group ? this.group.colors : this.main.colors : Tools.colors); - this.overEffect = this.colors.showOver; - this.svgs = Tools.svgs; - this.zone = { - x: 0, - y: 0, - w: 0, - h: 0, - d: 0 - }; - this.local = new V2().neg(); - this.isCanvasOnly = false; - this.isSelect = false; - - // percent of title - this.p = o.p !== undefined ? o.p : Tools.size.p; - this.w = this.isUI ? this.main.size.w : Tools.size.w; - if (o.w !== undefined) this.w = o.w; - this.h = this.isUI ? this.main.size.h : Tools.size.h; - if (o.h !== undefined) this.h = o.h; - if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h;else this.lock = true; - - // decale for canvas only - this.fw = o.fw || 0; - this.autoWidth = o.auto || true; // auto width or flex - this.isOpen = false; //false// open statu - - // radius for toolbox - this.radius = o.radius || this.colors.radius; - this.transition = o.transition || Tools.transition; - - // only for number - this.isNumber = false; - this.noNeg = o.noNeg || false; - this.allEqual = o.allEqual || false; - - // only most simple - this.mono = false; - - // stop listening for edit slide text - this.isEdit = false; - - // no title - this.simple = o.simple || false; - if (this.simple) this.sa = 0; - - // define obj size - this.setSize(this.w); - - // title size - if (o.sa !== undefined) this.sa = o.sa; - if (o.sb !== undefined) this.sb = o.sb; - if (this.simple) this.sb = this.w - this.sa; - - // last number size for slide - this.sc = o.sc === undefined ? 47 : o.sc; - - // for listening object - this.objectLink = null; - this.isSend = false; - this.objectKey = null; - this.txt = o.name || ""; - this.name = o.rename || this.txt; - this.target = o.target || null; - - // callback - this.callback = o.callback === undefined ? null : o.callback; - this.endCallback = null; - this.openCallback = o.openCallback === undefined ? null : o.openCallback; - this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; - - // if no callback take one from group or gui - if (this.callback === null && this.isUI && this.main.callback !== null) { - this.callback = this.group ? this.group.callback : this.main.callback; - } - - // elements - this.c = []; - - // style - this.s = []; - this.useFlex = this.isUI ? this.main.useFlex : false; - let flexible = this.useFlex ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" : "float:left;"; - this.c[0] = Tools.dom("div", this.css.basic + flexible + "position:relative; height:20px;"); - this.s[0] = this.c[0].style; - - // bottom margin - this.margin = this.colors.sy; - this.mtop = 0; - let marginDiv = Tools.isDivid(this.margin); - if (this.isUI && this.margin) { - this.s[0].boxSizing = "content-box"; - if (marginDiv) { - this.mtop = this.margin * 0.5; - //this.s[0].borderTop = '${this.mtop}px solid transparent' - //console.log(`${this.mtop}px solid transparent`) - this.s[0].borderTop = this.mtop + "px solid transparent"; - this.s[0].borderBottom = this.mtop + "px solid transparent"; - } else { - this.s[0].borderBottom = this.margin + "px solid transparent"; - } - } - - // with title - if (!this.simple) { - this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); - this.s[1] = this.c[1].style; - this.c[1].textContent = this.name; - this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; - } - if (o.pos) { - this.s[0].position = "absolute"; - for (let p in o.pos) { - this.s[0][p] = o.pos[p]; - } - this.mono = true; - } - if (o.css) this.s[0].cssText = o.css; - } - - // ---------------------- - // make the node - // ---------------------- - - init() { - this.ytop = this.top + this.mtop; - this.zone.h = this.h + this.margin; - this.zone.w = this.w; - let s = this.s; // style cache - let c = this.c; // div cach - - s[0].height = this.h + "px"; - if (this.isUI) s[0].background = this.colors.background; - if (!this.autoWidth && this.useFlex) { - s[0].flex = "1 0 auto"; - s[0].minWidth = this.minw + "px"; - s[0].textAlign = "center"; - } else { - if (this.isUI) s[0].width = "100%"; - } - - //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; - if (c[1] !== undefined && this.autoWidth) { - s[1] = c[1].style; - s[1].top = 1 + "px"; - s[1].height = this.h - 2 + "px"; - } - let frag = Tools.frag; - for (let i = 1, lng = c.length; i !== lng; i++) { - if (c[i] !== undefined) { - frag.appendChild(c[i]); - s[i] = c[i].style; - } - } - let pp = this.target !== null ? this.target : this.isUI ? this.main.inner : document.body; - if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]);else pp.appendChild(c[0]); - c[0].appendChild(frag); - this.rSize(); - - // ! solo proto - if (!this.isUI) { - this.c[0].style.pointerEvents = "auto"; - Roots.add(this); - } - } - addTransition() { - if (this.baseH && this.transition && this.isUI) { - this.c[0].style.transition = "height " + this.transition + "s ease-out"; - } - } - - // from Tools - - dom(type, css, obj, dom, id) { - return Tools.dom(type, css, obj, dom, id); - } - setSvg(dom, type, value, id, id2) { - Tools.setSvg(dom, type, value, id, id2); - } - setCss(dom, css) { - Tools.setCss(dom, css); - } - clamp(value, min, max) { - return Tools.clamp(value, min, max); - } - getColorRing() { - if (!Tools.colorRing) Tools.makeColorRing(); - return Tools.clone(Tools.colorRing); - } - getJoystick(model) { - if (!Tools["joystick_" + model]) Tools.makeJoystick(model); - return Tools.clone(Tools["joystick_" + model]); - } - getCircular(model) { - if (!Tools.circular) Tools.makeCircular(model); - return Tools.clone(Tools.circular); - } - getKnob(model) { - if (!Tools.knob) Tools.makeKnob(model); - return Tools.clone(Tools.knob); - } - getPad2d(model) { - if (!Tools.pad2d) Tools.makePad(model); - return Tools.clone(Tools.pad2d); - } - - // from Roots - - cursor(name) { - Roots.cursor(name); - } - - ///////// - - update() {} - reset() {} - - ///////// - - content() { - return this.c[0]; - } - getDom() { - return this.c[0]; - } - uiout() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.background; - } - uiover() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.backgroundOver; - } - rename(s) { - if (this.c[1] !== undefined) this.c[1].textContent = s; - } - listen() { - this.isListen = Roots.addListen(this); - return this; - } - listening() { - // modified by Fedemarino - if (this.objectLink === null) return; - if (this.isSend) return; - if (this.isEdit) return; - // check if value has changed - let hasChanged = this.setValue(this.objectLink[this.objectKey]); - return hasChanged; - } - setValue(v) { - const old = this.value; - if (this.isNumber) this.value = this.numValue(v); - //else if( v instanceof Array && v.length === 1 ) v = v[0]; - else this.value = v; - this.update(); - let hasChanged = false; - if (old !== this.value) { - hasChanged = true; - } - return hasChanged; - } - - // ---------------------- - // update every change - // ---------------------- - - onChange(f) { - if (this.isSpace) return; - this.callback = f || null; - return this; - } - - // ---------------------- - // update only on end - // ---------------------- - - onFinishChange(f) { - if (this.isSpace) return; - this.callback = null; - this.endCallback = f; - return this; - } - - // ---------------------- - // event on open close - // ---------------------- - - onOpen(f) { - this.openCallback = f; - return this; - } - onClose(f) { - this.closeCallback = f; - return this; - } - - // ---------------------- - // send back value - // ---------------------- - - send(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - this.isSend = true; - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - if (this.callback) this.callback(v, this.objectKey); - this.isSend = false; - } - sendEnd(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - if (this.endCallback) this.endCallback(v); - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - } - - // ---------------------- - // clear node - // ---------------------- - - dispose() { - if (this.isListen) Roots.removeListen(this); - Tools.clear(this.c[0]); - if (this.target !== null) { - if (this.group !== null) this.group.clearOne(this);else this.target.removeChild(this.c[0]); - } else { - if (this.isUI) this.main.clearOne(this);else document.body.removeChild(this.c[0]); - } - if (!this.isUI) Roots.remove(this); - this.c = null; - this.s = null; - this.callback = null; - this.target = null; - this.isListen = false; - } - clear() {} - - // ---------------------- - // change size - // ---------------------- - - getWidth() { - let nw = Roots.getWidth(this); - if (nw) this.w = nw; - } - setSize(sx) { - if (!this.autoWidth) return; - this.w = sx; - if (this.simple) { - this.sb = this.w - this.sa; - } else { - let pp = this.w * (this.p / 100); - //this.sa = Math.floor( pp + 10 ) - //this.sb = Math.floor( this.w - pp - 20 ) - this.sa = Math.floor(pp + 8); - this.sb = Math.floor(this.w - pp - 16); - } - } - rSize() { - if (!this.autoWidth) return; - if (!this.isUI) this.s[0].width = this.w + "px"; - if (!this.simple) this.s[1].width = this.sa + "px"; - } - - // ---------------------- - // for numeric value - // ---------------------- - - setTypeNumber(o) { - this.isNumber = true; - this.value = 0; - if (o.value !== undefined) { - if (typeof o.value === "string") this.value = o.value * 1;else this.value = o.value; - } - this.min = o.min === undefined ? -Infinity : o.min; - this.max = o.max === undefined ? Infinity : o.max; - this.precision = o.precision === undefined ? 2 : o.precision; - let s; - switch (this.precision) { - case 0: - s = 1; - break; - case 1: - s = 0.1; - break; - case 2: - s = 0.01; - break; - case 3: - s = 0.001; - break; - case 4: - s = 0.0001; - break; - case 5: - s = 0.00001; - break; - case 6: - s = 0.000001; - break; - } - this.step = o.step === undefined ? s : o.step; - this.range = this.max - this.min; - this.value = this.numValue(this.value); - } - numValue(n) { - if (this.noNeg) n = Math.abs(n); - return Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1; - } - - // ---------------------- - // EVENTS DEFAULT - // ---------------------- - - handleEvent(e) { - if (this.lock) return; - if (this.neverlock) Roots.lock = false; - if (!this[e.type]) return console.error(e.type, "this type of event no existe !"); - - // TODO !!!! - - //if( this.marginDiv ) z.d -= this.margin * 0.5 - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 - - return this[e.type](e); - } - wheel(e) { - return false; - } - mousedown(e) { - return false; - } - mousemove(e) { - return false; - } - mouseup(e) { - return false; - } - keydown(e) { - return false; - } - keyup(e) { - return false; - } - - // ---------------------- - // object referency - // ---------------------- - - setReferency(obj, key) { - this.objectLink = obj; - this.objectKey = key; - } - display(v = false) { - this.s[0].visibility = v ? "visible" : "hidden"; - } - - // ---------------------- - // resize height - // ---------------------- - - open() { - if (this.isOpen) return; - this.isOpen = true; - Roots.needResize = true; - if (this.openCallback) this.openCallback(); - } - close() { - if (!this.isOpen) return; - this.isOpen = false; - Roots.needResize = true; - if (this.closeCallback) this.closeCallback(); - } - needZone() { - Roots.needReZone = true; - } - rezone() { - Roots.needReZone = true; - } - - // ---------------------- - // INPUT - // ---------------------- - - select() {} - unselect() {} - setInput(Input) { - Roots.setInput(Input, this); - } - upInput(x, down) { - return Roots.upInput(x, down); - } - - // ---------------------- - // special item - // ---------------------- - - selected(b) { - this.isSelect = b || false; - } + /** + * @author lth / https://github.com/lo-th + */ + + class Proto { + constructor(o = {}) { + // disable mouse controle + this.lock = o.lock || false; + + // for button + this.neverlock = false; + + // only simple space + this.isSpace = o.isSpace || false; + + // if is on gui or group + this.main = o.main || null; + this.isUI = o.isUI || false; + this.group = o.group || null; + + this.isListen = false; + + this.top = 0; + this.ytop = 0; + + this.dx = o.dx || 0; + + this.isSelectable = o.selectable !== undefined ? o.selectable : false; + this.unselectable = + o.unselect !== undefined ? o.unselect : this.isSelectable; + + this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' + + this.css = this.main ? this.main.css : Tools.css; + + this.colors = Tools.defineColor( + o, + this.main + ? this.group + ? this.group.colors + : this.main.colors + : Tools.colors + ); + + this.overEffect = this.colors.showOver; + + this.svgs = Tools.svgs; + + this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; + this.local = new V2().neg(); + + this.isCanvasOnly = false; + this.isSelect = false; + + // percent of title + this.p = o.p !== undefined ? o.p : Tools.size.p; + + this.w = this.isUI ? this.main.size.w : Tools.size.w; + if (o.w !== undefined) this.w = o.w; + + this.h = this.isUI ? this.main.size.h : Tools.size.h; + if (o.h !== undefined) this.h = o.h; + if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; + else this.lock = true; + + // decale for canvas only + this.fw = o.fw || 0; + + this.autoWidth = o.auto || true; // auto width or flex + this.isOpen = false; //false// open statu + + // radius for toolbox + this.radius = o.radius || this.colors.radius; + + this.transition = o.transition || Tools.transition; + + // only for number + this.isNumber = false; + this.noNeg = o.noNeg || false; + this.allEqual = o.allEqual || false; + + // only most simple + this.mono = false; + + // stop listening for edit slide text + this.isEdit = false; + + // no title + this.simple = o.simple || false; + if (this.simple) this.sa = 0; + + // define obj size + this.setSize(this.w); + + // title size + if (o.sa !== undefined) this.sa = o.sa; + if (o.sb !== undefined) this.sb = o.sb; + if (this.simple) this.sb = this.w - this.sa; + + // last number size for slide + this.sc = o.sc === undefined ? 47 : o.sc; + + // for listening object + this.objectLink = null; + this.isSend = false; + this.objectKey = null; + + this.txt = o.name || ""; + this.name = o.rename || this.txt; + this.target = o.target || null; + + // callback + this.callback = o.callback === undefined ? null : o.callback; + this.endCallback = null; + this.openCallback = o.openCallback === undefined ? null : o.openCallback; + this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; + + // if no callback take one from group or gui + if (this.callback === null && this.isUI && this.main.callback !== null) { + this.callback = this.group ? this.group.callback : this.main.callback; + } + + // elements + this.c = []; + + // style + this.s = []; + + this.useFlex = this.isUI ? this.main.useFlex : false; + let flexible = this.useFlex + ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" + : "float:left;"; + + this.c[0] = Tools.dom( + "div", + this.css.basic + flexible + "position:relative; height:20px;" + ); + + this.s[0] = this.c[0].style; + + // bottom margin + this.margin = this.colors.sy; + this.mtop = 0; + let marginDiv = Tools.isDivid(this.margin); + + if (this.isUI && this.margin) { + this.s[0].boxSizing = "content-box"; + if (marginDiv) { + this.mtop = this.margin * 0.5; + //this.s[0].borderTop = '${this.mtop}px solid transparent' + //console.log(`${this.mtop}px solid transparent`) + this.s[0].borderTop = this.mtop + "px solid transparent"; + this.s[0].borderBottom = this.mtop + "px solid transparent"; + } else { + this.s[0].borderBottom = this.margin + "px solid transparent"; + } + } + + // with title + if (!this.simple) { + this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); + this.s[1] = this.c[1].style; + this.c[1].textContent = this.name; + this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; + } + + if (o.pos) { + this.s[0].position = "absolute"; + for (let p in o.pos) { + this.s[0][p] = o.pos[p]; + } + this.mono = true; + } + + if (o.css) this.s[0].cssText = o.css; + } + + // ---------------------- + // make the node + // ---------------------- + + init() { + this.ytop = this.top + this.mtop; + + this.zone.h = this.h + this.margin; + this.zone.w = this.w; + + let s = this.s; // style cache + let c = this.c; // div cach + + s[0].height = this.h + "px"; + + if (this.isUI) s[0].background = this.colors.background; + + if (!this.autoWidth && this.useFlex) { + s[0].flex = "1 0 auto"; + s[0].minWidth = this.minw + "px"; + s[0].textAlign = "center"; + } else { + if (this.isUI) s[0].width = "100%"; + } + + //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; + if (c[1] !== undefined && this.autoWidth) { + s[1] = c[1].style; + s[1].top = 1 + "px"; + s[1].height = this.h - 2 + "px"; + } + + let frag = Tools.frag; + + for (let i = 1, lng = c.length; i !== lng; i++) { + if (c[i] !== undefined) { + frag.appendChild(c[i]); + s[i] = c[i].style; + } + } + + let pp = + this.target !== null + ? this.target + : this.isUI + ? this.main.inner + : document.body; + + if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); + else pp.appendChild(c[0]); + + c[0].appendChild(frag); + + this.rSize(); + + // ! solo proto + if (!this.isUI) { + this.c[0].style.pointerEvents = "auto"; + Roots.add(this); + } + } + + addTransition() { + if (this.baseH && this.transition && this.isUI) { + this.c[0].style.transition = "height " + this.transition + "s ease-out"; + } + } + + // from Tools + + dom(type, css, obj, dom, id) { + return Tools.dom(type, css, obj, dom, id); + } + + setSvg(dom, type, value, id, id2) { + Tools.setSvg(dom, type, value, id, id2); + } + + setCss(dom, css) { + Tools.setCss(dom, css); + } + + clamp(value, min, max) { + return Tools.clamp(value, min, max); + } + + getColorRing() { + if (!Tools.colorRing) Tools.makeColorRing(); + return Tools.clone(Tools.colorRing); + } + + getJoystick(model) { + if (!Tools["joystick_" + model]) Tools.makeJoystick(model); + return Tools.clone(Tools["joystick_" + model]); + } + + getCircular(model) { + if (!Tools.circular) Tools.makeCircular(model); + return Tools.clone(Tools.circular); + } + + getKnob(model) { + if (!Tools.knob) Tools.makeKnob(model); + return Tools.clone(Tools.knob); + } + + getPad2d(model) { + if (!Tools.pad2d) Tools.makePad(model); + return Tools.clone(Tools.pad2d); + } + + // from Roots + + cursor(name) { + Roots.cursor(name); + } + + ///////// + + update() {} + + reset() {} + + ///////// + + content() { + return this.c[0]; + } + + getDom() { + return this.c[0]; + } + + uiout() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.background; + } + + uiover() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.backgroundOver; + } + + rename(s) { + if (this.c[1] !== undefined) this.c[1].textContent = s; + } + + listen() { + this.isListen = Roots.addListen(this); + return this; + } + + listening() { + // modified by Fedemarino + if (this.objectLink === null) return; + if (this.isSend) return; + if (this.isEdit) return; + // check if value has changed + let hasChanged = this.setValue(this.objectLink[this.objectKey]); + return hasChanged; + } + + setValue(v) { + const old = this.value; + if (this.isNumber) this.value = this.numValue(v); + //else if( v instanceof Array && v.length === 1 ) v = v[0]; + else this.value = v; + this.update(); + let hasChanged = false; + if (old !== this.value) { + hasChanged = true; + } + + return hasChanged; + } + + // ---------------------- + // update every change + // ---------------------- + + onChange(f) { + if (this.isSpace) return; + this.callback = f || null; + return this; + } + + // ---------------------- + // update only on end + // ---------------------- + + onFinishChange(f) { + if (this.isSpace) return; + this.callback = null; + this.endCallback = f; + return this; + } + + // ---------------------- + // event on open close + // ---------------------- + + onOpen(f) { + this.openCallback = f; + return this; + } + + onClose(f) { + this.closeCallback = f; + return this; + } + + // ---------------------- + // send back value + // ---------------------- + + send(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + this.isSend = true; + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + if (this.callback) this.callback(v, this.objectKey); + this.isSend = false; + } + + sendEnd(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + if (this.endCallback) this.endCallback(v); + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + } + + // ---------------------- + // clear node + // ---------------------- + + dispose() { + if (this.isListen) Roots.removeListen(this); + + Tools.clear(this.c[0]); + + if (this.target !== null) { + if (this.group !== null) this.group.clearOne(this); + else this.target.removeChild(this.c[0]); + } else { + if (this.isUI) this.main.clearOne(this); + else document.body.removeChild(this.c[0]); + } + + if (!this.isUI) Roots.remove(this); + + this.c = null; + this.s = null; + this.callback = null; + this.target = null; + this.isListen = false; + } + + clear() {} + + // ---------------------- + // change size + // ---------------------- + + getWidth() { + let nw = Roots.getWidth(this); + if (nw) this.w = nw; + } + + setSize(sx) { + if (!this.autoWidth) return; + + this.w = sx; + + if (this.simple) { + this.sb = this.w - this.sa; + } else { + let pp = this.w * (this.p / 100); + //this.sa = Math.floor( pp + 10 ) + //this.sb = Math.floor( this.w - pp - 20 ) + this.sa = Math.floor(pp + 8); + this.sb = Math.floor(this.w - pp - 16); + } + } + + rSize() { + if (!this.autoWidth) return; + if (!this.isUI) this.s[0].width = this.w + "px"; + if (!this.simple) this.s[1].width = this.sa + "px"; + } + + // ---------------------- + // for numeric value + // ---------------------- + + setTypeNumber(o) { + this.isNumber = true; + + this.value = 0; + if (o.value !== undefined) { + if (typeof o.value === "string") this.value = o.value * 1; + else this.value = o.value; + } + + this.min = o.min === undefined ? -Infinity : o.min; + this.max = o.max === undefined ? Infinity : o.max; + this.precision = o.precision === undefined ? 2 : o.precision; + + let s; + + switch (this.precision) { + case 0: + s = 1; + break; + case 1: + s = 0.1; + break; + case 2: + s = 0.01; + break; + case 3: + s = 0.001; + break; + case 4: + s = 0.0001; + break; + case 5: + s = 0.00001; + break; + case 6: + s = 0.000001; + break; + } + + this.step = o.step === undefined ? s : o.step; + this.range = this.max - this.min; + this.value = this.numValue(this.value); + } + + numValue(n) { + if (this.noNeg) n = Math.abs(n); + return ( + Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 + ); + } + + // ---------------------- + // EVENTS DEFAULT + // ---------------------- + + handleEvent(e) { + if (this.lock) return; + if (this.neverlock) Roots.lock = false; + if (!this[e.type]) + return console.error(e.type, "this type of event no existe !"); + + // TODO !!!! + + //if( this.marginDiv ) z.d -= this.margin * 0.5 + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 + + return this[e.type](e); + } + + wheel(e) { + return false; + } + mousedown(e) { + return false; + } + mousemove(e) { + return false; + } + mouseup(e) { + return false; + } + keydown(e) { + return false; + } + keyup(e) { + return false; + } + + // ---------------------- + // object referency + // ---------------------- + + setReferency(obj, key) { + this.objectLink = obj; + this.objectKey = key; + } + + display(v = false) { + this.s[0].visibility = v ? "visible" : "hidden"; + } + + // ---------------------- + // resize height + // ---------------------- + + open() { + if (this.isOpen) return; + this.isOpen = true; + Roots.needResize = true; + if (this.openCallback) this.openCallback(); + } + + close() { + if (!this.isOpen) return; + this.isOpen = false; + Roots.needResize = true; + if (this.closeCallback) this.closeCallback(); + } + + needZone() { + Roots.needReZone = true; + } + + rezone() { + Roots.needReZone = true; + } + + // ---------------------- + // INPUT + // ---------------------- + + select() {} + + unselect() {} + + setInput(Input) { + Roots.setInput(Input, this); + } + + upInput(x, down) { + return Roots.upInput(x, down); + } + + // ---------------------- + // special item + // ---------------------- + + selected(b) { + this.isSelect = b || false; + } } - class Bool extends Proto { - constructor(o = {}) { - super(o); - this.value = o.value || false; - this.model = o.mode !== undefined ? o.mode : 0; - this.onName = o.rename || this.txt; - if (o.onName) o.onname = o.onName; - if (o.onname) this.onName = o.onname; - this.inh = o.inh || Math.floor(this.h * 0.8); - this.inw = o.inw || 36; - let cc = this.colors; - if (this.model === 0) { - let t = Math.floor(this.h * 0.5) - (this.inh - 2) * 0.5; - this.c[2] = this.dom('div', this.css.basic + 'background:' + cc.inputBg + '; height:' + (this.inh - 2) + 'px; width:' + this.inw + 'px; top:' + t + 'px; border-radius:10px; border:2px solid ' + cc.back); - this.c[3] = this.dom('div', this.css.basic + 'height:' + (this.inh - 6) + 'px; width:16px; top:' + (t + 2) + 'px; border-radius:10px; background:' + cc.button + ';'); - } else { - this.p = 0; - if (this.c[1] !== undefined) this.c[1].textContent = ''; - this.c[2] = this.dom('div', this.css.txt + this.css.button + 'top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.borderSize + 'px solid ' + cc.border + '; border-radius:' + this.radius + 'px;'); - } - this.stat = -1; - this.init(); - this.update(); - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown(e) { - this.value = !this.value; - this.update(true); - return this.mousemove(e); - } - mousemove(e) { - this.cursor('pointer'); - return this.mode(true); - } - reset() { - this.cursor(); - return this.mode(); - } - - // ---------------------- - // MODE - // ---------------------- - - mode(over) { - let change = false; - let cc = this.colors, - s = this.s, - n, - v = this.value; - if (over) n = v ? 4 : 3;else n = v ? 2 : 1; - if (this.stat !== n) { - this.stat = n; - if (this.model !== 0) { - switch (n) { - case 1: - s[2].color = cc.text; - s[2].background = cc.button; - break; - case 2: - s[2].color = cc.textSelect; - s[2].background = cc.select; - break; - case 3: - s[2].color = cc.textOver; - s[2].background = cc.overoff; - break; - case 4: - s[2].color = cc.textOver; - s[2].background = cc.over; - break; - } - this.c[2].innerHTML = v ? this.onName : this.name; - } else { - switch (n) { - case 1: - s[2].background = s[2].borderColor = cc.backoff; - s[3].background = cc.button; - break; - // off out - case 2: - s[2].background = s[2].borderColor = cc.back; - s[3].background = cc.textOver; - break; - // on over - case 3: - s[2].background = s[2].borderColor = cc.back; - s[3].background = cc.overoff; - break; - // off over - case 4: - s[2].background = s[2].borderColor = cc.backoff; - s[3].background = cc.textSelect; - break; - // on out - } - s[3].marginLeft = v ? '17px' : '2px'; - this.c[1].textContent = v ? this.onName : this.name; - } - change = true; - } - return change; - } - - // ---------------------- - - update(up) { - this.mode(); - if (up) this.send(); - } - rSize() { - super.rSize(); - let s = this.s; - let w = this.w - 10 - this.inw; - if (this.model === 0) { - s[2].left = w + 'px'; - s[3].left = w + 'px'; - } else { - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - } - } + class Bool extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || false; + this.model = o.mode !== undefined ? o.mode : 0; + + this.onName = o.rename || this.txt; + if( o.onName ) o.onname = o.onName; + if( o.onname ) this.onName = o.onname; + + this.inh = o.inh || Math.floor( this.h*0.8 ); + this.inw = o.inw || 36; + + let cc = this.colors; + + if( this.model === 0 ){ + let t = Math.floor(this.h*0.5)-((this.inh-2)*0.5); + this.c[2] = this.dom( 'div', this.css.basic + 'background:'+ cc.inputBg +'; height:'+(this.inh-2)+'px; width:'+this.inw+'px; top:'+t+'px; border-radius:10px; border:2px solid '+ cc.back ); + this.c[3] = this.dom( 'div', this.css.basic + 'height:'+(this.inh-6)+'px; width:16px; top:'+(t+2)+'px; border-radius:10px; background:'+ cc.button+';' ); + } else { + this.p = 0; + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + } + + this.stat = -1; + + this.init(); + this.update(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + this.value = !this.value; + this.update( true ); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + this.cursor('pointer'); + return this.mode( true ) + + } + + reset () { + + this.cursor(); + return this.mode() + + } + + // ---------------------- + // MODE + // ---------------------- + + mode ( over ) { + + let change = false; + let cc = this.colors, s = this.s, n, v = this.value; + + if( over ) n = v ? 4 : 3; + else n = v ? 2 : 1; + + if( this.stat !== n ){ + + this.stat = n; + + if( this.model !== 0 ){ + + switch( n ){ + + case 1: s[2].color = cc.text; s[2].background = cc.button; break; + case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; + case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; + case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; + + } + + this.c[2].innerHTML = v ? this.onName : this.name; + + } else { + + switch( n ){ + + case 1: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.button; break;// off out + case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break;// on over + case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break;// off over + case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break;// on out + + } + + s[3].marginLeft = v ? '17px' : '2px'; + this.c[1].textContent = v ? this.onName : this.name; + + } + + change = true; + + } + + return change + + } + + // ---------------------- + + update ( up ) { + + this.mode(); + if( up ) this.send(); + + } + + rSize () { + + super.rSize(); + + let s = this.s; + let w = (this.w - 10 ) - this.inw; + if( this.model === 0 ){ + s[2].left = w + 'px'; + s[3].left = w + 'px'; + } else { + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + } + + } + } - class Button extends Proto { - constructor(o = {}) { - super(o); - this.value = ''; - if (o.value !== undefined) this.value = o.value; - this.values = o.value || this.txt; - if (o.values) this.values = o.values; - if (!o.values && !o.value) this.txt = ''; - this.onName = o.onName || null; - this.on = false; - - // force button width - this.bw = o.forceWidth || 0; - if (o.bw) this.bw = o.bw; - this.space = o.space || 3; - if (typeof this.values === 'string') this.values = [this.values]; - this.isDown = false; - this.neverlock = true; - this.res = 0; - this.lng = this.values.length; - this.tmp = []; - this.stat = []; - let sel, - cc = this.colors; - for (let i = 0; i < this.lng; i++) { - sel = false; - if (this.values[i] === this.value && this.isSelectable) sel = true; - this.c[i + 2] = this.dom('div', this.css.txt + this.css.button + 'top:1px; height:' + (this.h - 2) + 'px; border:' + cc.borderSize + 'px solid ' + cc.border + '; border-radius:' + this.radius + 'px;'); - this.c[i + 2].style.background = sel ? cc.select : cc.button; - this.c[i + 2].style.color = sel ? cc.textSelect : cc.text; - this.c[i + 2].innerHTML = this.values[i]; - this.stat[i] = sel ? 3 : 1; - } - if (this.txt === '') this.p = 0; - if (!o.value && !o.values || this.p === 0) { - if (this.c[1] !== undefined) this.c[1].textContent = ''; - } - this.init(); - } - onOff() { - this.on = !this.on; - this.label(this.on ? this.onName : this.value); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return -1; - let i = this.lng; - let t = this.tmp; - while (i--) { - if (l.x > t[i][0] && l.x < t[i][2]) return i; - } - return -1; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (!this.isDown) return false; - this.isDown = false; - if (this.res !== -1) { - if (this.value === this.values[this.res] && this.unselectable) this.value = '';else this.value = this.values[this.res]; - if (this.onName !== null) this.onOff(); - this.send(); - } - return this.mousemove(e); - } - mousedown(e) { - if (this.isDown) return false; - this.isDown = true; - return this.mousemove(e); - } - mousemove(e) { - let up = false; - this.res = this.testZone(e); - if (this.res !== -1) { - this.cursor('pointer'); - up = this.modes(this.isDown ? 3 : 2, this.res); - } else { - up = this.reset(); - } - return up; - } - - // ---------------------- - - modes(N = 1, id = -1) { - let i = this.lng, - w, - n, - r = false; - while (i--) { - n = N; - w = this.isSelectable ? this.values[i] === this.value : false; - if (i === id) { - if (w && n === 2) n = 3; - } else { - n = 1; - if (w) n = 4; - } - - //if( this.mode( n, i ) ) r = true - r = this.mode(n, i); - } - return r; - } - mode(n, id) { - //if(!this.s) return false - - let change = false; - let cc = this.colors, - s = this.s; - let i = id + 2; - if (this.stat[id] !== n) { - this.stat[id] = n; - switch (n) { - case 1: - s[i].color = cc.text; - s[i].background = cc.button; - break; - case 2: - s[i].color = cc.textOver; - s[i].background = cc.overoff; - break; - case 3: - s[i].color = cc.textOver; - s[i].background = cc.over; - break; - case 4: - s[i].color = cc.textSelect; - s[i].background = cc.select; - break; - } - change = true; - } - return change; - } - - // ---------------------- - - reset() { - this.res = -1; - this.cursor(); - return this.modes(); - } - label(string, n) { - n = n || 2; - this.c[n].textContent = string; - } - switchValues(n, string) { - this.c[n + 2].innerHTML = this.values[n] = string; - } - icon(string, y = 0, n = 2) { - //if(y) this.s[n].margin = ( y ) +'px 0px'; - this.s[n].padding = y + 'px 0px'; - this.c[n].innerHTML = string; - return this; - } - rSize() { - super.rSize(); - let s = this.s; - let w = this.sb; - let d = this.sa; - let i = this.lng; - let sx = this.colors.sx; //this.space; - //let size = Math.floor( ( w-(dc*(i-1)) ) / i ); - let size = (w - sx * (i - 1)) / i; - if (this.bw) { - size = this.bw < size ? this.bw : size; - //d = Math.floor((this.w-( (size * i) + (dc * (i-1)) ))*0.5) - d = (this.w - (size * i + sx * (i - 1))) * 0.5; - } - while (i--) { - //this.tmp[i] = [ Math.floor( d + ( size * i ) + ( dc * i )), size ]; - this.tmp[i] = [d + size * i + sx * i, size]; - this.tmp[i][2] = this.tmp[i][0] + this.tmp[i][1]; - s[i + 2].left = this.tmp[i][0] + 'px'; - s[i + 2].width = this.tmp[i][1] + 'px'; - } - } + class Button extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = ''; + if( o.value !== undefined ) this.value = o.value; + + this.values = o.value || this.txt; + if( o.values ) this.values = o.values; + + if( !o.values && !o.value ) this.txt = ''; + + this.onName = o.onName || null; + + this.on = false; + + // force button width + this.bw = o.forceWidth || 0; + if(o.bw) this.bw = o.bw; + this.space = o.space || 3; + + if( typeof this.values === 'string' ) this.values = [ this.values ]; + + this.isDown = false; + this.neverlock = true; + this.res = 0; + + this.lng = this.values.length; + this.tmp = []; + this.stat = []; + + let sel, cc = this.colors; + + for( let i = 0; i < this.lng; i++ ){ + + sel = false; + if( this.values[i] === this.value && this.isSelectable ) sel = true; + + this.c[i+2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[i+2].style.background = sel ? cc.select : cc.button; + this.c[i+2].style.color = sel ? cc.textSelect : cc.text; + this.c[i+2].innerHTML = this.values[i]; + this.stat[i] = sel ? 3:1; + + } + + + if( this.txt==='' ) this.p = 0; + + if( (!o.value && !o.values) || this.p === 0 ){ + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + } + + + this.init(); + + } + + onOff() { + + this.on = !this.on; + this.label( this.on ? this.onName : this.value ); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1 + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0 ? Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)) : cc.text; - this.setSvg(this.c[3], 'stroke', color, 1); - break; - case 1: - // down - - this.s[2].color = cc.textOver; - this.setSvg(this.c[3], 'stroke', cc.backoff, 0); - color = this.model > 0 ? Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)) : cc.textOver; - this.setSvg(this.c[3], 'stroke', color, 1); - break; - } - this.cmode = mode; - return true; - } - reset() { - this.isDown = false; - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'circular'; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - this.isDown = false; - this.sendEnd(); - return this.mode(0); - } - mousedown(e) { - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove(e); - return this.mode(1); - } - mousemove(e) { - if (!this.isDown) return; - - //console.log('over') - - let off = this.offset; - off.x = this.w * 0.5 - (e.clientX - this.zone.x); - off.y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); - this.r = off.angle() - this.pi90; - this.r = (this.r % this.twoPi + this.twoPi) % this.twoPi; - if (this.oldr !== null) { - let dif = this.r - this.oldr; - this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; - if (dif > 6) this.r = 0; - if (dif < -6) this.r = this.twoPi; - } - let steps = 1 / this.twoPi; - let value = this.r * steps; - let n = this.range * value + this.min - this.old; - if (n >= this.step || n <= this.step) { - n = ~~(n / this.step); - this.value = this.numValue(this.old + n * this.step); - this.update(true); - this.old = this.value; - this.oldr = this.r; - } - } - wheel(e) { - let name = this.testZone(e); - if (name === 'circular') { - let v = this.value - this.step * e.delta; - if (v > this.max) { - v = this.isCyclic ? this.min : this.max; - } else if (v < this.min) { - v = this.isCyclic ? this.max : this.min; - } - this.setValue(v); - this.old = v; - this.update(true); - return true; - } - return false; - } - - // ---------------------- - - makePath() { - let r = 40; - let d = 24; - let a = this.percent * this.twoPi - 0.001; - let x2 = r + r * Math.sin(a) + d; - let y2 = r - r * Math.cos(a) + d; - let big = a > Math.PI ? 1 : 0; - return "M " + (r + d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; - } - update(up) { - this.c[2].textContent = this.value; - this.percent = (this.value - this.min) / this.range; - this.setSvg(this.c[3], 'd', this.makePath(), 1); - if (this.model > 0) { - let cc = this.colors; - let color = Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)); - this.setSvg(this.c[3], 'stroke', color, 1); - } - if (up) this.send(); - } + class Circular extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + + this.setTypeNumber( o ); + + this.twoPi = Tools.TwoPI; + this.pi90 = Tools.pi90; + + this.offset = new V2(); + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w +'px'; + this.c[0].style.display = 'block'; + + if(this.c[1] !== undefined) { + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + + + this.percent = 0; + this.cmode = 0; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); + + // svg + + this.c[3] = this.getCircular(); + + this.setSvg( this.c[3], 'stroke', cc.back, 0 ); + this.setSvg( this.c[3], 'd', this.makePath(), 1 ); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 '+this.diam+' '+this.diam ); + this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); + + this.init(); + this.update(); + + } + + mode ( mode ) { + + if( this.cmode === mode ) return false; + + let cc = this.colors; + let color; + + switch( mode ){ + case 0: // base + + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'stroke', cc.back, 0); + color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.text; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + case 1: // down + + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'stroke', cc.backoff, 0); + color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.textOver; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + } + + this.cmode = mode; + return true; + + } + + reset () { + + this.isDown = false; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'circular'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0); + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1); + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + //console.log('over') + + let off = this.offset; + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = off.angle() - this.pi90; + this.r = (((this.r%this.twoPi)+this.twoPi)%this.twoPi); + + if( this.oldr !== null ){ + + let dif = this.r - this.oldr; + this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; + + if( dif > 6 ) this.r = 0; + if( dif < -6 ) this.r = this.twoPi; + + } + + let steps = 1 / this.twoPi; + let value = this.r * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = ~~ ( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'circular' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + // ---------------------- + + makePath () { + + let r = 40; + let d = 24; + let a = this.percent * this.twoPi - 0.001; + let x2 = (r + r * Math.sin(a)) + d; + let y2 = (r - r * Math.cos(a)) + d; + let big = a > Math.PI ? 1 : 0; + return "M " + (r+d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = ( this.value - this.min ) / this.range; + + this.setSvg( this.c[3], 'd', this.makePath(), 1 ); + + if ( this.model > 0 ) { + + let cc = this.colors; + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 1 ); + + } + + if( up ) this.send(); + + } + } - class Color extends Proto { - constructor(o = {}) { - super(o); - - //this.autoHeight = true; - - this.ctype = o.ctype || 'hex'; - this.wfixe = 256; - this.cw = this.sb > 256 ? 256 : this.sb; - if (o.cw != undefined) this.cw = o.cw; - - // color up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - this.baseH = this.h; - this.offset = new V2(); - this.decal = new V2(); - this.pp = new V2(); - let cc = this.colors; - - // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) - - this.c[2] = this.dom('div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h - 2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};`); - //this.s[2] = this.c[2].style; - - //this.s[2].textShadow = 'none' - - /*if( this.up ){ - this.s[2].top = 'auto'; - this.s[2].bottom = '2px'; - }*/ - - //this.c[0].style.textAlign = 'center'; - this.c[0].style.display = 'block'; - this.c[3] = this.getColorRing(); - this.c[3].style.visibility = 'hidden'; - this.hsl = null; - this.value = '#ffffff'; - if (o.value !== undefined) { - if (o.value instanceof Array) this.value = Tools.rgbToHex(o.value);else if (!isNaN(o.value)) this.value = Tools.hexToHtml(o.value);else this.value = o.value; - } - this.bcolor = null; - this.isDown = false; - this.fistDown = false; - this.notext = o.notext || false; - this.tr = 98; - this.tsl = Math.sqrt(3) * this.tr; - this.hue = 0; - this.d = 256; - this.init(); - this.setColor(this.value); - if (o.open !== undefined) this.open(); - } - testZone(mx, my) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (this.up && this.isOpen) { - if (l.y > this.wfixe) return 'title';else return 'color'; - } else { - if (l.y < this.baseH + 2) return 'title';else if (this.isOpen) return 'color'; - } - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - this.isDown = false; - this.d = 256; - } - mousedown(e) { - let name = this.testZone(e.clientX, e.clientY); - - //if( !name ) return; - if (name === 'title') { - if (!this.isOpen) this.open();else this.close(); - return true; - } - if (name === 'color') { - this.isDown = true; - this.fistDown = true; - this.mousemove(e); - } - } - mousemove(e) { - let name = this.testZone(e.clientX, e.clientY); - let off, - d, - hue, - sat, - lum, - rad, - x, - y, - rr, - T = Tools; - if (name === 'title') this.cursor('pointer'); - if (name === 'color') { - off = this.offset; - off.x = e.clientX - (this.zone.x + this.decal.x + this.mid); - off.y = e.clientY - (this.zone.y + this.decal.y + this.mid) - this.ytop; - d = off.length() * this.ratio; - rr = off.angle(); - if (rr < 0) rr += 2 * T.PI; - if (d < 128) this.cursor('crosshair');else if (!this.isDown) this.cursor(); - if (this.isDown) { - if (this.fistDown) { - this.d = d; - this.fistDown = false; - } - if (this.d < 128) { - if (this.d > this.tr) { - // outside hue - - hue = (rr + T.pi90) / T.TwoPI; - this.hue = (hue + 1) % 1; - this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); - } else { - // triangle - - x = off.x * this.ratio; - y = off.y * this.ratio; - let rr = this.hue * T.TwoPI + T.PI; - if (rr < 0) rr += 2 * T.PI; - rad = Math.atan2(-y, x); - if (rad < 0) rad += 2 * T.PI; - let rad0 = (rad + T.pi90 + T.TwoPI + rr) % T.TwoPI, - rad1 = rad0 % (2 / 3 * T.PI) - T.pi60, - a = 0.5 * this.tr, - b = Math.tan(rad1) * a, - r = Math.sqrt(x * x + y * y), - maxR = Math.sqrt(a * a + b * b); - if (r > maxR) { - let dx = Math.tan(rad1) * r; - let rad2 = Math.atan(dx / maxR); - if (rad2 > T.pi60) rad2 = T.pi60;else if (rad2 < -T.pi60) rad2 = -T.pi60; - rad += rad2 - rad1; - rad0 = (rad + T.pi90 + T.TwoPI + rr) % T.TwoPI, rad1 = rad0 % (2 / 3 * T.PI) - T.pi60; - b = Math.tan(rad1) * a; - r = maxR = Math.sqrt(a * a + b * b); - } - lum = Math.sin(rad0) * r / this.tsl + 0.5; - let w = 1 - Math.abs(lum - 0.5) * 2; - sat = (Math.cos(rad0) * r + this.tr / 2) / (1.5 * this.tr) / w; - sat = T.clamp(sat, 0, 1); - this.setHSL([this.hsl[0], sat, lum]); - } - } - } - } - } - - // ---------------------- - - setHeight() { - this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; - this.s[0].height = this.h + 'px'; - this.zone.h = this.h; - } - parentHeight(t) { - if (this.group !== null) this.group.calc(t);else if (this.isUI) this.main.calc(t); - } - open() { - super.open(); - this.setHeight(); - if (this.up) this.zone.y -= this.wfixe + 5; - let t = this.h - this.baseH; - this.s[3].visibility = 'visible'; - //this.s[3].display = 'block'; - this.parentHeight(t); - } - close() { - super.close(); - if (this.up) this.zone.y += this.wfixe + 5; - let t = this.h - this.baseH; - this.setHeight(); - this.s[3].visibility = 'hidden'; - //this.s[3].display = 'none'; - this.parentHeight(-t); - } - update(up) { - let cc = Tools.rgbToHex(Tools.hslToRgb([this.hsl[0], 1, 0.5])); - this.moveMarkers(); - this.value = this.bcolor; - this.setSvg(this.c[3], 'fill', cc, 2, 0); - this.s[2].background = this.bcolor; - if (!this.notext) this.c[2].textContent = Tools.htmlToHex(this.bcolor); - this.invert = Tools.findDeepInver(this.rgb); - this.s[2].color = this.invert ? '#fff' : '#000'; - if (!up) return; - if (this.ctype === 'array') this.send(this.rgb); - if (this.ctype === 'rgb') this.send(Tools.htmlRgb(this.rgb)); - if (this.ctype === 'hex') this.send(Tools.htmlToHex(this.value)); - if (this.ctype === 'html') this.send(); - } - setValue(v) { - if (v instanceof Array) this.value = Tools.rgbToHex(v);else if (!isNaN(v)) this.value = Tools.hexToHtml(v);else this.value = v; - this.setColor(this.value); - this.update(); - } - setColor(color) { - let unpack = Tools.unpack(color); - if (this.bcolor !== color && unpack) { - this.bcolor = color; - this.rgb = unpack; - this.hsl = Tools.rgbToHsl(this.rgb); - this.hue = this.hsl[0]; - this.update(); - } - return this; - } - setHSL(hsl) { - this.hsl = hsl; - this.rgb = Tools.hslToRgb(hsl); - this.bcolor = Tools.rgbToHex(this.rgb); - this.update(true); - return this; - } - moveMarkers() { - let p = this.pp; - let T = Tools; - this.invert ? '#fff' : '#000'; - let a = this.hsl[0] * T.TwoPI; - let third = 2 / 3 * T.PI; - let r = this.tr; - let h = this.hsl[0]; - let s = this.hsl[1]; - let l = this.hsl[2]; - let angle = (a - T.pi90) * T.todeg; - h = -a + T.pi90; - let hx = Math.cos(h) * r; - let hy = -Math.sin(h) * r; - let sx = Math.cos(h - third) * r; - let sy = -Math.sin(h - third) * r; - let vx = Math.cos(h + third) * r; - let vy = -Math.sin(h + third) * r; - let mx = (sx + vx) / 2, - my = (sy + vy) / 2; - a = (1 - 2 * Math.abs(l - .5)) * s; - let x = sx + (vx - sx) * l + (hx - mx) * a; - let y = sy + (vy - sy) * l + (hy - my) * a; - p.set(x, y).addScalar(128); - - //let ff = (1-l)*255; - // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); - - this.setSvg(this.c[3], 'transform', 'rotate(' + angle + ' )', 2); - this.setSvg(this.c[3], 'cx', p.x, 3); - this.setSvg(this.c[3], 'cy', p.y, 3); - this.setSvg(this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3); - this.setSvg(this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3); - this.setSvg(this.c[3], 'fill', this.bcolor, 3); - } - rSize() { - //Proto.prototype.rSize.call( this ); - super.rSize(); - let s = this.s; - s[2].width = this.sb + 'px'; - s[2].left = this.sa + 'px'; - - //console.log(this.sb) - - this.cw = this.sb > 256 ? 256 : this.sb; - this.rSizeColor(this.cw); - this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - //s[3].left = this.decal.x + 'px'; - } - rSizeColor(w) { - if (w === this.wfixe) return; - this.wfixe = w; - let s = this.s; - - //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; - this.mid = Math.floor(this.wfixe * 0.5); - this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.wfixe + ' ' + this.wfixe); - s[3].width = this.wfixe + 'px'; - s[3].height = this.wfixe + 'px'; - //s[3].left = this.decal.x + 'px'; - s[3].top = this.decal.y + 'px'; - this.ratio = 256 / this.wfixe; - this.square = 1 / (60 * (this.wfixe / 256)); - this.setHeight(); - } + class Color extends Proto { + + constructor( o = {} ) { + + super( o ); + + //this.autoHeight = true; + + this.ctype = o.ctype || 'hex'; + + this.wfixe = 256; + + this.cw = this.sb > 256 ? 256 : this.sb; + if(o.cw != undefined ) this.cw = o.cw; + + + + // color up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + this.baseH = this.h; + + this.offset = new V2(); + this.decal = new V2(); + this.pp = new V2(); + + let cc = this.colors; + + // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) + + this.c[2] = this.dom( 'div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};` ); + //this.s[2] = this.c[2].style; + + //this.s[2].textShadow = 'none' + + /*if( this.up ){ + this.s[2].top = 'auto'; + this.s[2].bottom = '2px'; + }*/ + + //this.c[0].style.textAlign = 'center'; + this.c[0].style.display = 'block'; + + this.c[3] = this.getColorRing(); + this.c[3].style.visibility = 'hidden'; + + this.hsl = null; + this.value = '#ffffff'; + if( o.value !== undefined ){ + if( o.value instanceof Array ) this.value = Tools.rgbToHex( o.value ); + else if(!isNaN(o.value)) this.value = Tools.hexToHtml( o.value ); + else this.value = o.value; + } + + this.bcolor = null; + this.isDown = false; + this.fistDown = false; + + this.notext = o.notext || false; + + this.tr = 98; + this.tsl = Math.sqrt(3) * this.tr; + + this.hue = 0; + this.d = 256; + + this.init(); + + this.setColor( this.value ); + + if( o.open !== undefined ) this.open(); + + } + + testZone ( mx, my ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + if( this.up && this.isOpen ){ + + if( l.y > this.wfixe ) return 'title' + else return 'color' + + } else { + + if( l.y < this.baseH+2 ) return 'title' + else if( this.isOpen ) return 'color' + + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.d = 256; + + } + + mousedown ( e ) { + + + let name = this.testZone( e.clientX, e.clientY ); + + + //if( !name ) return; + if(name === 'title'){ + if( !this.isOpen ) this.open(); + else this.close(); + return true; + } + + + if( name === 'color' ){ + + this.isDown = true; + this.fistDown = true; + this.mousemove( e ); + } + } + + mousemove ( e ) { + + let name = this.testZone( e.clientX, e.clientY ); + + let off, d, hue, sat, lum, rad, x, y, rr, T = Tools; + + if( name === 'title' ) this.cursor('pointer'); + + if( name === 'color' ){ + + off = this.offset; + off.x = e.clientX - ( this.zone.x + this.decal.x + this.mid ); + off.y = e.clientY - ( this.zone.y + this.decal.y + this.mid ) - this.ytop; + d = off.length() * this.ratio; + rr = off.angle(); + if(rr < 0) rr += 2 * T.PI; + + + if ( d < 128 ) this.cursor('crosshair'); + else if( !this.isDown ) this.cursor(); + + if( this.isDown ){ + + if( this.fistDown ){ + this.d = d; + this.fistDown = false; + } + + if ( this.d < 128 ) { + + if ( this.d > this.tr ) { // outside hue + + hue = ( rr + T.pi90 ) / T.TwoPI; + this.hue = (hue + 1) % 1; + this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); + + } else { // triangle + + x = off.x * this.ratio; + y = off.y * this.ratio; + + let rr = (this.hue * T.TwoPI) + T.PI; + if(rr < 0) rr += 2 * T.PI; + + rad = Math.atan2(-y, x); + if(rad < 0) rad += 2 * T.PI; + + let rad0 = ( rad + T.pi90 + T.TwoPI + rr ) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60), + a = 0.5 * this.tr, + b = Math.tan(rad1) * a, + r = Math.sqrt(x*x + y*y), + maxR = Math.sqrt(a*a + b*b); + + if( r > maxR ) { + let dx = Math.tan(rad1) * r; + let rad2 = Math.atan(dx / maxR); + if(rad2 > T.pi60) rad2 = T.pi60; + else if( rad2 < -T.pi60 ) rad2 = -T.pi60; + + rad += rad2 - rad1; + + rad0 = (rad + T.pi90 + T.TwoPI + rr) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60); + b = Math.tan(rad1) * a; + r = maxR = Math.sqrt(a*a + b*b); + } + + lum = ((Math.sin(rad0) * r) / this.tsl) + 0.5; + + let w = 1 - (Math.abs(lum - 0.5) * 2); + sat = (((Math.cos(rad0) * r) + (this.tr / 2)) / (1.5 * this.tr)) / w; + sat = T.clamp( sat, 0, 1 ); + + this.setHSL([this.hsl[0], sat, lum]); + + } + } + } + } + + } + + // ---------------------- + + setHeight () { + + this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; + this.s[0].height = this.h + 'px'; + this.zone.h = this.h; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open () { + + super.open(); + + this.setHeight(); + + if( this.up ) this.zone.y -= this.wfixe + 5; + + let t = this.h - this.baseH; + + this.s[3].visibility = 'visible'; + //this.s[3].display = 'block'; + this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.wfixe + 5; + + let t = this.h - this.baseH; + + this.setHeight(); + + this.s[3].visibility = 'hidden'; + //this.s[3].display = 'none'; + this.parentHeight( -t ); + + } + + update ( up ) { + + let cc = Tools.rgbToHex( Tools.hslToRgb([ this.hsl[0], 1, 0.5 ]) ); + + this.moveMarkers(); + + this.value = this.bcolor; + + this.setSvg( this.c[3], 'fill', cc, 2, 0 ); + + this.s[2].background = this.bcolor; + if(!this.notext) this.c[2].textContent = Tools.htmlToHex( this.bcolor ); + + this.invert = Tools.findDeepInver( this.rgb ); + this.s[2].color = this.invert ? '#fff' : '#000'; + + if(!up) return; + + if( this.ctype === 'array' ) this.send( this.rgb ); + if( this.ctype === 'rgb' ) this.send( Tools.htmlRgb( this.rgb ) ); + if( this.ctype === 'hex' ) this.send( Tools.htmlToHex( this.value ) ); + if( this.ctype === 'html' ) this.send(); + + } + + setValue ( v ){ + + if( v instanceof Array ) this.value = Tools.rgbToHex( v ); + else if(!isNaN(v)) this.value = Tools.hexToHtml( v ); + else this.value = v; + + this.setColor( this.value ); + this.update(); + + } + + setColor ( color ) { + + let unpack = Tools.unpack(color); + if (this.bcolor !== color && unpack) { + + this.bcolor = color; + this.rgb = unpack; + this.hsl = Tools.rgbToHsl( this.rgb ); + + this.hue = this.hsl[0]; + + this.update(); + } + return this; + + } + + setHSL ( hsl ) { + + this.hsl = hsl; + this.rgb = Tools.hslToRgb( hsl ); + this.bcolor = Tools.rgbToHex( this.rgb ); + this.update( true ); + return this; + + } + + moveMarkers () { + + let p = this.pp; + let T = Tools; + + this.invert ? '#fff' : '#000'; + let a = this.hsl[0] * T.TwoPI; + let third = (2/3) * T.PI; + let r = this.tr; + let h = this.hsl[0]; + let s = this.hsl[1]; + let l = this.hsl[2]; + + let angle = ( a - T.pi90 ) * T.todeg; + + h = - a + T.pi90; + + let hx = Math.cos(h) * r; + let hy = -Math.sin(h) * r; + let sx = Math.cos(h - third) * r; + let sy = -Math.sin(h - third) * r; + let vx = Math.cos(h + third) * r; + let vy = -Math.sin(h + third) * r; + let mx = (sx + vx) / 2, my = (sy + vy) / 2; + a = (1 - 2 * Math.abs(l - .5)) * s; + let x = sx + (vx - sx) * l + (hx - mx) * a; + let y = sy + (vy - sy) * l + (hy - my) * a; + + p.set( x, y ).addScalar(128); + + //let ff = (1-l)*255; + // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); + + this.setSvg( this.c[3], 'transform', 'rotate('+angle+' )', 2 ); + + this.setSvg( this.c[3], 'cx', p.x, 3 ); + this.setSvg( this.c[3], 'cy', p.y, 3 ); + + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3 ); + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3 ); + this.setSvg( this.c[3], 'fill',this.bcolor, 3 ); + + } + + rSize () { + + //Proto.prototype.rSize.call( this ); + super.rSize(); + + let s = this.s; + + s[2].width = this.sb + 'px'; + s[2].left = this.sa + 'px'; + + //console.log(this.sb) + + this.cw = this.sb > 256 ? 256 : this.sb; + + + + this.rSizeColor( this.cw ); + + this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + //s[3].left = this.decal.x + 'px'; + + } + + rSizeColor ( w ) { + + + if( w === this.wfixe ) return; + + + + this.wfixe = w; + + + + let s = this.s; + + //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; + this.mid = Math.floor( this.wfixe * 0.5 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 '+ this.wfixe + ' '+ this.wfixe ); + s[3].width = this.wfixe + 'px'; + s[3].height = this.wfixe + 'px'; + //s[3].left = this.decal.x + 'px'; + s[3].top = this.decal.y + 'px'; + + this.ratio = 256 / this.wfixe; + this.square = 1 / (60*(this.wfixe/256)); + this.setHeight(); + + } + + } - class Fps extends Proto { - constructor(o = {}) { - super(o); - this.round = Math.round; - - //this.autoHeight = true; - - this.baseH = this.h; - this.hplus = o.hplus || 50; - this.res = o.res || 40; - this.l = 1; - this.precision = o.precision || 0; - this.custom = o.custom || false; - this.names = o.names || ['FPS', 'MS']; - let cc = o.cc || ['220,220,220', '255,255,0']; - - // this.divid = [ 100, 100, 100 ]; - // this.multy = [ 30, 30, 30 ]; - - this.adding = o.adding || false; - this.range = o.range || [165, 100, 100]; - this.alpha = o.alpha || 0.25; - this.values = []; - this.points = []; - this.textDisplay = []; - if (!this.custom) { - this.now = Roots.getTime(); - this.startTime = 0; //this.now() - this.prevTime = 0; //this.startTime; - this.frames = 0; - this.ms = 0; - this.fps = 0; - this.mem = 0; - this.mm = 0; - this.isMem = self.performance && self.performance.memory ? true : false; - - // this.divid = [ 100, 200, 1 ]; - // this.multy = [ 30, 30, 30 ]; - - if (this.isMem) { - this.names.push('MEM'); - cc.push('0,255,255'); - } - this.txt = o.name || 'Fps'; - } - let fltop = Math.floor(this.h * 0.5) - 3; - const ccc = this.colors; - this.c[1].textContent = this.txt; - //this.c[1].innerHTML = ' ' + this.txt - this.c[0].style.cursor = 'pointer'; - this.c[0].style.pointerEvents = 'auto'; - let panelCss = 'display:none; left:10px; top:' + this.h + 'px; height:' + (this.hplus - 8) + 'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid ' + ccc.border + ';'; - if (this.radius !== 0) panelCss += 'border-radius:' + this.radius + 'px;'; - this.c[2] = this.dom('path', this.css.basic + panelCss, {}); - this.c[2].setAttribute('viewBox', '0 0 ' + this.res + ' 50'); - this.c[2].setAttribute('height', '100%'); - this.c[2].setAttribute('width', '100%'); - this.c[2].setAttribute('preserveAspectRatio', 'none'); - - //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - - // arrow - this.c[3] = this.dom('path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:' + fltop + 'px;', { - d: this.svgs.g1, - fill: ccc.text, - stroke: 'none' - }); - //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); - - // result test - this.c[4] = this.dom('div', this.css.txt + 'position:absolute; left:10px; top:' + (this.h + 2) + 'px; display:none; width:100%; text-align:center;'); - - // bottom line - if (o.bottomLine) this.c[4] = this.dom('div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); - this.isShow = false; - let s = this.s; - - //s[1].marginLeft = '10px'; - s[1].lineHeight = this.h - 4; - s[1].color = ccc.text; - //s[1].paddingLeft = '18px'; - //s[1].fontWeight = 'bold'; - - if (this.radius !== 0) s[0].borderRadius = this.radius + 'px'; - if (this.colors.gborder !== 'none') s[0].border = '1px solid ' + ccc.gborder; - let j = 0; - for (j = 0; j < this.names.length; j++) { - let base = []; - let i = this.res + 1; - while (i--) base.push(50); - this.range[j] = 1 / this.range[j] * 49; - this.points.push(base); - this.values.push(0); - // this.dom( 'path', null, { fill:'rgba('+cc[j]+',0.5)', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - this.textDisplay.push(" " + this.names[j] + " "); - } - j = this.names.length; - while (j--) { - this.dom('path', null, { - fill: 'rgba(' + cc[j] + ',' + this.alpha + ')', - 'stroke-width': 1, - stroke: 'rgba(' + cc[j] + ',1)', - 'vector-effect': 'non-scaling-stroke' - }, this.c[2]); - } - this.init(); - - //if( this.isShow ) this.show(); - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown(e) { - if (this.isShow) this.close();else this.open(); - } - - // ---------------------- - - /*mode: function ( mode ) { - let s = this.s; - switch(mode){ - case 0: // base - s[1].color = this.colors.text; - //s[1].background = 'none'; - break; - case 1: // over - s[1].color = '#FFF'; - //s[1].background = UIL.SELECT; - break; - case 2: // edit / down - s[1].color = this.colors.text; - //s[1].background = UIL.SELECTDOWN; - break; - } - },*/ - - tick(v) { - this.values = v; - if (!this.isShow) return; - this.drawGraph(); - this.upText(); - } - makePath(point) { - let p = ''; - p += 'M ' + -1 + ' ' + 50; - for (let i = 0; i < this.res + 1; i++) { - p += ' L ' + i + ' ' + point[i]; - } - p += ' L ' + (this.res + 1) + ' ' + 50; - return p; - } - upText(val) { - let v = val || this.values, - t = ''; - for (let j = 0, lng = this.names.length; j < lng; j++) t += this.textDisplay[j] + v[j].toFixed(this.precision) + ''; - this.c[4].innerHTML = t; - } - drawGraph() { - let svg = this.c[2]; - let i = this.names.length, - v, - old = 0, - n = 0; - while (i--) { - if (this.adding) v = (this.values[n] + old) * this.range[n];else v = this.values[n] * this.range[n]; - this.points[n].shift(); - this.points[n].push(50 - v); - this.setSvg(svg, 'd', this.makePath(this.points[n]), i + 1); - old += this.values[n]; - n++; - } - } - open() { - super.open(); - this.h = this.hplus + this.baseH; - this.setSvg(this.c[3], 'd', this.svgs.g2); - if (this.group !== null) { - this.group.calc(this.hplus); - } else if (this.isUI) this.main.calc(this.hplus); - this.s[0].height = this.h + 'px'; - this.s[2].display = 'block'; - this.s[4].display = 'block'; - this.isShow = true; - if (!this.custom) Roots.addListen(this); - } - close() { - super.close(); - this.h = this.baseH; - this.setSvg(this.c[3], 'd', this.svgs.g1); - if (this.group !== null) { - this.group.calc(-this.hplus); - } else if (this.isUI) this.main.calc(-this.hplus); - this.s[0].height = this.h + 'px'; - this.s[2].display = 'none'; - this.s[4].display = 'none'; - this.isShow = false; - if (!this.custom) Roots.removeListen(this); - this.c[4].innerHTML = ''; - } - - ///// AUTO FPS ////// - - begin() { - this.startTime = this.now(); - } - end() { - let time = this.now(); - this.ms = time - this.startTime; - this.frames++; - if (time > this.prevTime + 1000) { - this.fps = this.round(this.frames * 1000 / (time - this.prevTime)); - this.prevTime = time; - this.frames = 0; - if (this.isMem) { - let heapSize = performance.memory.usedJSHeapSize; - let heapSizeLimit = performance.memory.jsHeapSizeLimit; - this.mem = this.round(heapSize * 0.000000954); - this.mm = heapSize / heapSizeLimit; - } - } - this.values = [this.fps, this.ms, this.mm]; - this.drawGraph(); - this.upText([this.fps, this.ms, this.mem]); - return time; - } - listening() { - if (!this.custom) this.startTime = this.end(); - } - rSize() { - let s = this.s; - let w = this.w; - s[3].left = this.sa + this.sb - 6 + 'px'; - s[0].width = w + 'px'; - s[1].width = w + 'px'; - s[2].left = 10 + 'px'; - s[2].width = w - 20 + 'px'; - s[4].width = w - 20 + 'px'; - } + class Fps extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.round = Math.round; + + //this.autoHeight = true; + + this.baseH = this.h; + this.hplus = o.hplus || 50; + + this.res = o.res || 40; + this.l = 1; + + this.precision = o.precision || 0; + + + this.custom = o.custom || false; + this.names = o.names || ['FPS', 'MS']; + let cc = o.cc || ['220,220,220', '255,255,0']; + + // this.divid = [ 100, 100, 100 ]; + // this.multy = [ 30, 30, 30 ]; + + this.adding = o.adding || false; + + this.range = o.range || [ 165, 100, 100 ]; + + this.alpha = o.alpha || 0.25; + + this.values = []; + this.points = []; + this.textDisplay = []; + + if(!this.custom){ + + this.now = Roots.getTime(); + this.startTime = 0;//this.now() + this.prevTime = 0;//this.startTime; + this.frames = 0; + + this.ms = 0; + this.fps = 0; + this.mem = 0; + this.mm = 0; + + this.isMem = ( self.performance && self.performance.memory ) ? true : false; + + // this.divid = [ 100, 200, 1 ]; + // this.multy = [ 30, 30, 30 ]; + + if( this.isMem ){ + + this.names.push('MEM'); + cc.push('0,255,255'); + + } + + this.txt = o.name || 'Fps'; + + } + + + let fltop = Math.floor(this.h*0.5)-3; + const ccc = this.colors; + + this.c[1].textContent = this.txt; + //this.c[1].innerHTML = ' ' + this.txt + this.c[0].style.cursor = 'pointer'; + this.c[0].style.pointerEvents = 'auto'; + + let panelCss = 'display:none; left:10px; top:'+ this.h + 'px; height:'+(this.hplus - 8)+'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid '+ ccc.border +';'; + + if( this.radius !== 0 ) panelCss += 'border-radius:' + this.radius+'px;'; + + this.c[2] = this.dom( 'path', this.css.basic + panelCss , {} ); + + this.c[2].setAttribute('viewBox', '0 0 '+this.res+' 50' ); + this.c[2].setAttribute('height', '100%' ); + this.c[2].setAttribute('width', '100%' ); + this.c[2].setAttribute('preserveAspectRatio', 'none' ); + + + //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + + // arrow + this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:ccc.text, stroke:'none'}); + //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); + + // result test + this.c[4] = this.dom( 'div', this.css.txt + 'position:absolute; left:10px; top:'+(this.h+2) +'px; display:none; width:100%; text-align:center;' ); + + // bottom line + if( o.bottomLine ) this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); + + this.isShow = false; + + + + let s = this.s; + + //s[1].marginLeft = '10px'; + s[1].lineHeight = this.h-4; + s[1].color = ccc.text; + //s[1].paddingLeft = '18px'; + //s[1].fontWeight = 'bold'; + + if( this.radius !== 0 ) s[0].borderRadius = this.radius+'px'; + if( this.colors.gborder!=='none') s[0].border = '1px solid ' + ccc.gborder; + + + + + let j = 0; + + for( j=0; j " + this.names[j] +" "); + + } + + j = this.names.length; + while(j--){ + this.dom( 'path', null, { fill:'rgba('+cc[j]+','+this.alpha+')', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + } + + + this.init(); + + //if( this.isShow ) this.show(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + if( this.isShow ) this.close(); + else this.open(); + + } + + // ---------------------- + + /*mode: function ( mode ) { + + let s = this.s; + + switch(mode){ + case 0: // base + s[1].color = this.colors.text; + //s[1].background = 'none'; + break; + case 1: // over + s[1].color = '#FFF'; + //s[1].background = UIL.SELECT; + break; + case 2: // edit / down + s[1].color = this.colors.text; + //s[1].background = UIL.SELECTDOWN; + break; + + } + },*/ + + tick ( v ) { + + this.values = v; + if( !this.isShow ) return; + this.drawGraph(); + this.upText(); + + } + + makePath ( point ) { + + let p = ''; + p += 'M ' + (-1) + ' ' + 50; + for ( let i = 0; i < this.res + 1; i ++ ) { p += ' L ' + i + ' ' + point[i]; } + p += ' L ' + (this.res + 1) + ' ' + 50; + return p; + + } + + upText ( val ) { + + let v = val || this.values, t = ''; + for( let j=0, lng =this.names.length; j'; + this.c[4].innerHTML = t; + + } + + drawGraph () { + + let svg = this.c[2]; + let i = this.names.length, v, old = 0, n = 0; + + while( i-- ){ + if( this.adding ) v = (this.values[n]+old) * this.range[n]; + else v = (this.values[n] * this.range[n]); + this.points[n].shift(); + this.points[n].push( 50 - v ); + this.setSvg( svg, 'd', this.makePath( this.points[n] ), i+1 ); + old += this.values[n]; + n++; + + } + + } + + open () { + + super.open(); + + this.h = this.hplus + this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g2 ); + + if( this.group !== null ){ this.group.calc( this.hplus );} + else if( this.isUI ) this.main.calc( this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'block'; + this.s[4].display = 'block'; + this.isShow = true; + + if( !this.custom ) Roots.addListen( this ); + + } + + close () { + + super.close(); + + this.h = this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g1 ); + + if( this.group !== null ){ this.group.calc( -this.hplus );} + else if( this.isUI ) this.main.calc( -this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'none'; + this.s[4].display = 'none'; + this.isShow = false; + + if( !this.custom ) Roots.removeListen( this ); + + this.c[4].innerHTML = ''; + + } + + + ///// AUTO FPS ////// + + begin () { + + this.startTime = this.now(); + + } + + end () { + + let time = this.now(); + this.ms = time - this.startTime; + + this.frames ++; + + if ( time > this.prevTime + 1000 ) { + + this.fps = this.round( ( this.frames * 1000 ) / ( time - this.prevTime ) ); + + this.prevTime = time; + this.frames = 0; + + if ( this.isMem ) { + + let heapSize = performance.memory.usedJSHeapSize; + let heapSizeLimit = performance.memory.jsHeapSizeLimit; + + this.mem = this.round( heapSize * 0.000000954 ); + this.mm = heapSize / heapSizeLimit; + + } + + } + + this.values = [ this.fps, this.ms , this.mm ]; + + this.drawGraph(); + this.upText( [ this.fps, this.ms, this.mem ] ); + + return time; + + } + + listening () { + + if( !this.custom ) this.startTime = this.end(); + + } + + rSize () { + + let s = this.s; + let w = this.w; + + s[3].left = ( this.sa + this.sb - 6 ) + 'px'; + + s[0].width = w + 'px'; + s[1].width = w + 'px'; + s[2].left = 10 + 'px'; + s[2].width = (w-20) + 'px'; + s[4].width = (w-20) + 'px'; + + } + } - class Graph extends Proto { - constructor(o = {}) { - super(o); - this.value = o.value !== undefined ? o.value : [0, 0, 0]; - this.lng = this.value.length; - this.precision = o.precision !== undefined ? o.precision : 2; - this.multiplicator = o.multiplicator || 1; - this.neg = o.neg || false; - this.line = o.line !== undefined ? o.line : true; - - //if(this.neg)this.multiplicator*=2; - - this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; - this.isNumber = false; - this.isDown = false; - this.h = o.h || 128 + 10; - this.rh = this.h - 10; - this.top = 0; - this.c[0].style.width = this.w + 'px'; - if (this.c[1] !== undefined) { - // with title - - this.c[1].style.width = this.w + 'px'; - if (!this.autoWidth) { - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - } - - //this.c[1].style.background = '#ff0000'; - //this.c[1].style.textAlign = 'center'; - this.top = 10; - this.h += 10; - } - this.gh = this.rh - 28; - this.gw = this.w - 28; - - //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); - - //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' - this.c[2] = this.dom('div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:' + (this.h - 20) + 'px; left:14px; width:' + this.gw + 'px; color:' + this.colors.text); - - //this.c[2].textContent = this.value; - this.c[2].innerHTML = this.valueToHtml(); - let svg = this.dom('svg', this.css.basic, { - viewBox: '0 0 ' + this.w + ' ' + this.rh, - width: this.w, - height: this.rh, - preserveAspectRatio: 'none' - }); - this.setCss(svg, { - width: this.w, - height: this.rh, - left: 0, - top: this.top - }); - this.dom('path', '', { - d: '', - stroke: this.colors.text, - 'stroke-width': 2, - fill: 'none', - 'stroke-linecap': 'butt' - }, svg); - this.dom('rect', '', { - x: 10, - y: 10, - width: this.gw + 8, - height: this.gh + 8, - stroke: 'rgba(0,0,0,0.3)', - 'stroke-width': 1, - fill: 'none' - }, svg); - this.iw = (this.gw - 4 * (this.lng - 1)) / this.lng; - let t = []; - this.cMode = []; - this.v = []; - for (let i = 0; i < this.lng; i++) { - t[i] = [14 + i * this.iw + i * 4, this.iw]; - t[i][2] = t[i][0] + t[i][1]; - this.cMode[i] = 0; - if (this.neg) this.v[i] = (1 + this.value[i] / this.multiplicator) * 0.5;else this.v[i] = this.value[i] / this.multiplicator; - this.dom('rect', '', { - x: t[i][0], - y: 14, - width: t[i][1], - height: 1, - fill: this.colors.text, - 'fill-opacity': 0.3 - }, svg); - } - this.tmp = t; - this.c[3] = svg; - - //console.log(this.w) - - this.init(); - if (this.c[1] !== undefined) { - this.c[1].style.top = 0 + 'px'; - this.c[1].style.height = 20 + 'px'; - this.s[1].lineHeight = 20 - 5 + 'px'; - } - this.update(false); - } - setValue(value) { - this.value = value; - this.lng = this.value.length; - for (var i = 0; i < this.lng; i++) { - if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5;else this.v[i] = value[i] / this.multiplicator; - } - this.update(); - } - valueToHtml() { - let i = this.lng, - n = 0, - r = ''; - let w = 100 / this.lng; - let style = 'width:' + w + '%;'; //' text-align:center;' - while (i--) { - if (n === this.lng - 1) r += '
' + this.value[n] + '
';else r += '' + this.value[n] + ''; - n++; - } - return r; - } - updateSVG() { - if (this.line) this.setSvg(this.c[3], 'd', this.makePath(), 0); - for (let i = 0; i < this.lng; i++) { - this.setSvg(this.c[3], 'height', this.v[i] * this.gh, i + 2); - this.setSvg(this.c[3], 'y', 14 + (this.gh - this.v[i] * this.gh), i + 2); - if (this.neg) this.value[i] = ((this.v[i] * 2 - 1) * this.multiplicator).toFixed(this.precision) * 1;else this.value[i] = (this.v[i] * this.multiplicator).toFixed(this.precision) * 1; - } - - //this.c[2].textContent = this.value; - this.c[2].innerHTML = this.valueToHtml(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - let i = this.lng; - let t = this.tmp; - if (l.y > this.top && l.y < this.h - 20) { - while (i--) { - if (l.x > t[i][0] && l.x < t[i][2]) return i; - } - } - return ''; - } - mode(n, name) { - if (n === this.cMode[name]) return false; - let a; - switch (n) { - case 0: - a = 0.3; - break; - case 1: - a = 0.6; - break; - case 2: - a = 1; - break; - } - this.reset(); - this.setSvg(this.c[3], 'fill-opacity', a, name + 2); - this.cMode[name] = n; - return true; - } - - // ---------------------- - // EVENTS - // ---------------------- - - reset() { - let nup = false; - //this.isDown = false; - - let i = this.lng; - while (i--) { - if (this.cMode[i] !== 0) { - this.cMode[i] = 0; - this.setSvg(this.c[3], 'fill-opacity', 0.3, i + 2); - nup = true; - } - } - return nup; - } - mouseup(e) { - this.isDown = false; - if (this.current !== -1) return this.reset(); - } - mousedown(e) { - this.isDown = true; - return this.mousemove(e); - } - mousemove(e) { - let nup = false; - let name = this.testZone(e); - if (name === '') { - nup = this.reset(); - //this.cursor(); - } else { - nup = this.mode(this.isDown ? 2 : 1, name); - //this.cursor( this.current !== -1 ? 'move' : 'pointer' ); - if (this.isDown) { - this.v[name] = this.clamp(1 - (e.clientY - this.zone.y - this.ytop - 10) / this.gh, 0, 1); - this.update(true); - } - } - return nup; - } - - // ---------------------- - - update(up) { - this.updateSVG(); - if (up) this.send(); - } - makePath() { - let p = "", - h, - w, - wn, - wm, - ow, - oh; - //let g = this.iw*0.5 - - for (let i = 0; i < this.lng; i++) { - h = 14 + (this.gh - this.v[i] * this.gh); - w = 14 + i * this.iw + i * 4; - wm = w + this.iw * 0.5; - wn = w + this.iw; - if (i === 0) p += 'M ' + w + ' ' + h + ' T ' + wm + ' ' + h;else p += ' C ' + ow + ' ' + oh + ',' + w + ' ' + h + ',' + wm + ' ' + h; - if (i === this.lng - 1) p += ' T ' + wn + ' ' + h; - ow = wn; - oh = h; - } - return p; - } - rSize() { - super.rSize(); - let s = this.s; - if (this.c[1] !== undefined) s[1].width = this.w + 'px'; - s[3].width = this.w + 'px'; - let gw = this.w - 28; - let iw = (gw - 4 * (this.lng - 1)) / this.lng; - let t = []; - s[2].width = gw + 'px'; - for (let i = 0; i < this.lng; i++) { - t[i] = [14 + i * iw + i * 4, iw]; - t[i][2] = t[i][0] + t[i][1]; - } - this.tmp = t; - } + class Graph extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value !== undefined ? o.value : [0,0,0]; + this.lng = this.value.length; + + this.precision = o.precision !== undefined ? o.precision : 2; + this.multiplicator = o.multiplicator || 1; + this.neg = o.neg || false; + + this.line = o.line !== undefined ? o.line : true; + + //if(this.neg)this.multiplicator*=2; + + this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; + this.isNumber = false; + + this.isDown = false; + + this.h = o.h || 128 + 10; + this.rh = this.h - 10; + this.top = 0; + + this.c[0].style.width = this.w +'px'; + + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = this.w +'px'; + + if(!this.autoWidth){ + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + } + + + //this.c[1].style.background = '#ff0000'; + //this.c[1].style.textAlign = 'center'; + this.top = 10; + this.h += 10; + + } + + this.gh = this.rh - 28; + this.gw = this.w - 28; + + //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); + + //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' + this.c[2] = this.dom( 'div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:'+(this.h-20)+'px; left:14px; width:'+this.gw+'px; color:'+ this.colors.text ); + + //this.c[2].textContent = this.value; + this.c[2].innerHTML = this.valueToHtml(); + + let svg = this.dom( 'svg', this.css.basic , { viewBox:'0 0 '+this.w+' '+this.rh, width:this.w, height:this.rh, preserveAspectRatio:'none' } ); + this.setCss( svg, { width:this.w, height:this.rh, left:0, top:this.top }); + + this.dom( 'path', '', { d:'', stroke:this.colors.text, 'stroke-width':2, fill:'none', 'stroke-linecap':'butt' }, svg ); + this.dom( 'rect', '', { x:10, y:10, width:this.gw+8, height:this.gh+8, stroke:'rgba(0,0,0,0.3)', 'stroke-width':1 , fill:'none'}, svg ); + + this.iw = ((this.gw-(4*(this.lng-1)))/this.lng); + let t = []; + this.cMode = []; + + this.v = []; + + for( let i = 0; i < this.lng; i++ ){ + + t[i] = [ 14 + (i*this.iw) + (i*4), this.iw ]; + t[i][2] = t[i][0] + t[i][1]; + this.cMode[i] = 0; + + if( this.neg ) this.v[i] = ((1+(this.value[i] / this.multiplicator))*0.5); + else this.v[i] = this.value[i] / this.multiplicator; + + this.dom( 'rect', '', { x:t[i][0], y:14, width:t[i][1], height:1, fill:this.colors.text, 'fill-opacity':0.3 }, svg ); + + } + + this.tmp = t; + this.c[3] = svg; + + //console.log(this.w) + + this.init(); + + if( this.c[1] !== undefined ){ + this.c[1].style.top = 0 +'px'; + this.c[1].style.height = 20 +'px'; + this.s[1].lineHeight = (20-5)+'px'; + } + + this.update( false ); + + } + + setValue ( value ) { + + this.value = value; + this.lng = this.value.length; + for (var i = 0; i < this.lng; i++) { + if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5; + else this.v[i] = value[i] / this.multiplicator; + } + this.update(); + + } + + valueToHtml() { + + let i = this.lng, n=0, r = ''; + let w = 100 / this.lng; + let style = 'width:'+ w +'%;';//' text-align:center;' + while(i--){ + if(n===this.lng-1) r += '
' + this.value[n] + '
'; + else r += '' + this.value[n] + ''; + n++; + } + return r + } + + updateSVG () { + + if( this.line ) this.setSvg( this.c[3], 'd', this.makePath(), 0 ); + + for(let i = 0; ithis.top && l.yt[i][0] && l.x this.distance) { - let angle = Math.atan2(this.tmp.x, this.tmp.y); - this.tmp.x = Math.sin(angle) * this.distance; - this.tmp.y = Math.cos(angle) * this.distance; - } - this.pos.copy(this.tmp).divideScalar(this.distance).negate(); - this.update(); - } - setValue(v) { - if (v === undefined) v = [0, 0]; - this.pos.set(v[0] || 0, v[1] || 0); - this.updateSVG(); - } - update(up) { - if (up === undefined) up = true; - if (this.interval !== null) { - if (!this.isDown) { - this.pos.lerp(null, 0.3); - this.pos.x = Math.abs(this.pos.x) < 0.01 ? 0 : this.pos.x; - this.pos.y = Math.abs(this.pos.y) < 0.01 ? 0 : this.pos.y; - if (this.isUI && this.main.isCanvas) this.main.draw(); - } - } - this.updateSVG(); - if (up) this.send(); - if (this.pos.isZero()) this.stopInterval(); - } - updateSVG() { - //let x = this.radius - ( -this.pos.x * this.distance ); - //let y = this.radius - ( -this.pos.y * this.distance ); - - let x = this.diam * 0.5 - -this.pos.x * this.distance; - let y = this.diam * 0.5 - -this.pos.y * this.distance; - if (this.model === 0) { - let sx = x + this.pos.x * 5 + 5; - let sy = y + this.pos.y * 5 + 10; - this.setSvg(this.c[3], 'cx', sx * this.ratio, 3); - this.setSvg(this.c[3], 'cy', sy * this.ratio, 3); - } else { - this.setSvg(this.c[3], 'cx', x * this.ratio, 3); - this.setSvg(this.c[3], 'cy', y * this.ratio, 3); - } - this.setSvg(this.c[3], 'cx', x * this.ratio, 4); - this.setSvg(this.c[3], 'cy', y * this.ratio, 4); - this.value[0] = (this.pos.x * this.multiplicator).toFixed(this.precision) * 1; - this.value[1] = (this.pos.y * this.multiplicator).toFixed(this.precision) * 1; - if (this.haveText) this.c[2].textContent = this.value; - } - clear() { - this.stopInterval(); - super.clear(); - } + class Joystick extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.autoWidth = false; + + this.value = [0,0]; + + this.minw = this.w; + this.diam = o.diam || this.w; + + this.joyType = 'analogique'; + this.model = o.mode !== undefined ? o.mode : 0; + + this.precision = o.precision || 2; + this.multiplicator = o.multiplicator || 1; + + this.pos = new V2(); + this.tmp = new V2(); + + this.interval = null; + this.c[0].style.display = 'block'; + this.haveText = o.text !== undefined ? o.text : true; + + //this.radius = this.w * 0.5; + //this.distance = this.radius*0.25; + this.distance = (this.diam*0.5)*0.25; + + this.h = o.h || this.w + (this.haveText ? 10 : 0); + + this.c[0].style.width = this.w +'px'; + + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); + this.c[2].textContent = this.haveText ? this.value : ''; + + this.c[3] = this.getJoystick( this.model ); + this.setSvg( this.c[3], 'viewBox', '0 0 '+this.diam+' '+this.diam ); + this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); + + this.mode(0); + + + this.ratio = 128/this.w; + + this.init(); + + this.update(false); + + } + + mode ( mode ) { + + let cc = this.colors; + + switch(mode){ + case 0: // base + if(this.model===0){ + this.setSvg( this.c[3], 'fill', 'url(#gradIn)', 4 ); + this.setSvg( this.c[3], 'stroke', '#000', 4 ); + } else { + this.setSvg( this.c[3], 'stroke', cc.joyOut, 2 ); + //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.1)', 3 ); + this.setSvg( this.c[3], 'stroke', cc.joyOut, 4 ); + this.setSvg( this.c[3], 'fill', 'none', 4 ); + } + + break; + case 1: // over + if(this.model===0){ + this.setSvg( this.c[3], 'fill', 'url(#gradIn2)', 4 ); + this.setSvg( this.c[3], 'stroke', 'rgba(0,0,0,0)', 4 ); + } else { + this.setSvg( this.c[3], 'stroke', cc.joyOver, 2 ); + //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.3)', 3 ); + this.setSvg( this.c[3], 'stroke', cc.joySelect, 4 ); + this.setSvg( this.c[3], 'fill', cc.joyOver, 4 ); + } + break; + + } + } + + // ---------------------- + // EVENTS + // ---------------------- + + addInterval (){ + if( this.interval !== null ) this.stopInterval(); + if( this.pos.isZero() ) return; + this.interval = setInterval( function(){ this.update(); }.bind(this), 10 ); + + } + + stopInterval (){ + + if( this.interval === null ) return; + clearInterval( this.interval ); + this.interval = null; + + } + + reset () { + + this.addInterval(); + this.mode(0); + + } + + mouseup ( e ) { + + this.addInterval(); + this.isDown = false; + + } + + mousedown ( e ) { + + this.isDown = true; + this.mousemove( e ); + this.mode( 2 ); + + } + + mousemove ( e ) { + + this.mode(1); + + if( !this.isDown ) return; + + //this.tmp.x = this.radius - ( e.clientX - this.zone.x ); + //this.tmp.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + this.tmp.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + this.tmp.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + let distance = this.tmp.length(); + + if ( distance > this.distance ) { + let angle = Math.atan2(this.tmp.x, this.tmp.y); + this.tmp.x = Math.sin( angle ) * this.distance; + this.tmp.y = Math.cos( angle ) * this.distance; + } + + this.pos.copy( this.tmp ).divideScalar( this.distance ).negate(); + + this.update(); + + } + + setValue ( v ) { + + if(v===undefined) v=[0,0]; + + this.pos.set( v[0] || 0, v[1] || 0 ); + this.updateSVG(); + + } + + update ( up ) { + + if( up === undefined ) up = true; + + if( this.interval !== null ){ + + if( !this.isDown ){ + + this.pos.lerp( null, 0.3 ); + + this.pos.x = Math.abs( this.pos.x ) < 0.01 ? 0 : this.pos.x; + this.pos.y = Math.abs( this.pos.y ) < 0.01 ? 0 : this.pos.y; + + if( this.isUI && this.main.isCanvas ) this.main.draw(); + + } + + } + + this.updateSVG(); + + if( up ) this.send(); + + + if( this.pos.isZero() ) this.stopInterval(); + + } + + updateSVG () { + + //let x = this.radius - ( -this.pos.x * this.distance ); + //let y = this.radius - ( -this.pos.y * this.distance ); + + let x = (this.diam*0.5) - ( -this.pos.x * this.distance ); + let y = (this.diam*0.5) - ( -this.pos.y * this.distance ); + + if(this.model === 0){ + + let sx = x + ((this.pos.x)*5) + 5; + let sy = y + ((this.pos.y)*5) + 10; + + this.setSvg( this.c[3], 'cx', sx*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', sy*this.ratio, 3 ); + } else { + this.setSvg( this.c[3], 'cx', x*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 3 ); + } + + + + this.setSvg( this.c[3], 'cx', x*this.ratio, 4 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 4 ); + + this.value[0] = ( this.pos.x * this.multiplicator ).toFixed( this.precision ) * 1; + this.value[1] = ( this.pos.y * this.multiplicator ).toFixed( this.precision ) * 1; + + if(this.haveText) this.c[2].textContent = this.value; + + } + + clear () { + + this.stopInterval(); + super.clear(); + + } + } - class Knob extends Proto { - constructor(o = {}) { - super(o); - this.isCyclic = o.cyclic || false; - this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; - this.autoWidth = false; - this.setTypeNumber(o); - this.minw = this.w; - this.diam = o.diam || this.w; - this.mPI = Math.PI * 0.8; - this.toDeg = 180 / Math.PI; - this.cirRange = this.mPI * 2; - this.offset = new V2(); - this.h = o.h || this.w + 10; - this.c[0].style.width = this.w + 'px'; - this.c[0].style.display = 'block'; - if (this.c[1] !== undefined) { - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - } - this.percent = 0; - this.cmode = 0; - let cc = this.colors; - this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); - this.c[3] = this.getKnob(); - this.setSvg(this.c[3], 'fill', cc.button, 0); - this.setSvg(this.c[3], 'stroke', cc.text, 1); - this.setSvg(this.c[3], 'stroke', cc.text, 3); - this.setSvg(this.c[3], 'd', this.makeGrad(), 3); - this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); - this.setCss(this.c[3], { - width: this.diam, - height: this.diam, - left: 0, - top: this.top - }); - if (this.model > 0) { - Tools.dom('path', '', { - d: '', - stroke: cc.text, - 'stroke-width': 2, - fill: 'none', - 'stroke-linecap': 'round' - }, this.c[3]); //4 - - if (this.model == 2) { - Tools.addSVGGlowEffect(); - this.setSvg(this.c[3], 'style', 'filter: url("#UILGlow");', 4); - } - } - this.r = 0; - this.init(); - this.update(); - } - mode(mode) { - let cc = this.colors; - if (this.cmode === mode) return false; - switch (mode) { - case 0: - // base - this.s[2].color = cc.text; - this.setSvg(this.c[3], 'fill', cc.button, 0); - //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); - this.setSvg(this.c[3], 'stroke', cc.text, 1); - break; - case 1: - // down - this.s[2].color = cc.textOver; - this.setSvg(this.c[3], 'fill', cc.select, 0); - //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); - this.setSvg(this.c[3], 'stroke', cc.textOver, 1); - break; - } - this.cmode = mode; - return true; - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'knob'; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - this.isDown = false; - this.sendEnd(); - return this.mode(0); - } - mousedown(e) { - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove(e); - return this.mode(1); - } - mousemove(e) { - if (!this.isDown) return; - let off = this.offset; - - //off.x = this.radius - ( e.clientX - this.zone.x ); - //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); - - off.x = this.w * 0.5 - (e.clientX - this.zone.x); - off.y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); - this.r = -Math.atan2(off.x, off.y); - if (this.oldr !== null) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; - this.r = this.r > this.mPI ? this.mPI : this.r; - this.r = this.r < -this.mPI ? -this.mPI : this.r; - let steps = 1 / this.cirRange; - let value = (this.r + this.mPI) * steps; - let n = this.range * value + this.min - this.old; - if (n >= this.step || n <= this.step) { - n = Math.floor(n / this.step); - this.value = this.numValue(this.old + n * this.step); - this.update(true); - this.old = this.value; - this.oldr = this.r; - } - } - wheel(e) { - let name = this.testZone(e); - if (name === 'knob') { - let v = this.value - this.step * e.delta; - if (v > this.max) { - v = this.isCyclic ? this.min : this.max; - } else if (v < this.min) { - v = this.isCyclic ? this.max : this.min; - } - this.setValue(v); - this.old = v; - this.update(true); - return true; - } - return false; - } - makeGrad() { - let d = '', - step, - range, - a, - x, - y, - x2, - y2, - r = 64; - let startangle = Math.PI + this.mPI; - let endangle = Math.PI - this.mPI; - //let step = this.step>5 ? this.step : 1; - - if (this.step > 5) { - range = this.range / this.step; - step = (startangle - endangle) / range; - } else { - step = (startangle - endangle) / r * 2; - range = r * 0.5; - } - for (let i = 0; i <= range; ++i) { - a = startangle - step * i; - x = r + Math.sin(a) * (r - 20); - y = r + Math.cos(a) * (r - 20); - x2 = r + Math.sin(a) * (r - 24); - y2 = r + Math.cos(a) * (r - 24); - d += 'M' + x + ' ' + y + ' L' + x2 + ' ' + y2 + ' '; - } - return d; - } - update(up) { - this.c[2].textContent = this.value; - this.percent = (this.value - this.min) / this.range; - let sa = Math.PI + this.mPI; - let ea = this.percent * this.cirRange - this.mPI; - let sin = Math.sin(ea); - let cos = Math.cos(ea); - let x1 = 25 * sin + 64; - let y1 = -(25 * cos) + 64; - let x2 = 20 * sin + 64; - let y2 = -(20 * cos) + 64; - this.setSvg(this.c[3], 'd', 'M ' + x1 + ' ' + y1 + ' L ' + x2 + ' ' + y2, 1); - if (this.model > 0) { - let x1 = 36 * Math.sin(sa) + 64; - let y1 = 36 * Math.cos(sa) + 64; - let x2 = 36 * sin + 64; - let y2 = -36 * cos + 64; - let big = ea <= Math.PI - this.mPI ? 0 : 1; - this.setSvg(this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4); - let color = Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(this.colors.text, -0.75)), Tools.unpack(this.colors.text), this.percent)); - this.setSvg(this.c[3], 'stroke', color, 4); - } - if (up) this.send(); - } + class Knob extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.autoWidth = false; + + this.setTypeNumber( o ); + + this.minw = this.w; + this.diam = o.diam || this.w; + + this.mPI = Math.PI * 0.8; + this.toDeg = 180 / Math.PI; + this.cirRange = this.mPI * 2; + + this.offset = new V2(); + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w +'px'; + this.c[0].style.display = 'block'; + + if(this.c[1] !== undefined) { + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + this.percent = 0; + + this.cmode = 0; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); + + this.c[3] = this.getKnob(); + this.setSvg( this.c[3], 'fill', cc.button, 0 ); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + this.setSvg( this.c[3], 'stroke', cc.text, 3 ); + this.setSvg( this.c[3], 'd', this.makeGrad(), 3 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam ); + this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); + + if ( this.model > 0 ) { + + Tools.dom( 'path', '', { d: '', stroke:cc.text, 'stroke-width': 2, fill: 'none', 'stroke-linecap': 'round' }, this.c[3] ); //4 + + if ( this.model == 2) { + + Tools.addSVGGlowEffect(); + this.setSvg( this.c[3], 'style', 'filter: url("#UILGlow");', 4 ); + + } + + } + + this.r = 0; + + this.init(); + + this.update(); + + } + + mode ( mode ) { + + let cc = this.colors; + + if( this.cmode === mode ) return false; + + switch( mode ) { + case 0: // base + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.button, 0); + //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + break; + case 1: // down + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'fill', cc.select, 0); + //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); + this.setSvg( this.c[3], 'stroke', cc.textOver, 1 ); + break; + } + + this.cmode = mode; + return true; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'knob'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0) + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1) + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let off = this.offset; + + //off.x = this.radius - ( e.clientX - this.zone.x ); + //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = - Math.atan2( off.x, off.y ); + + if( this.oldr !== null ) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; + + this.r = this.r > this.mPI ? this.mPI : this.r; + this.r = this.r < -this.mPI ? -this.mPI : this.r; + + let steps = 1 / this.cirRange; + let value = (this.r + this.mPI) * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = Math.floor( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'knob' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + makeGrad () { + + let d = '', step, range, a, x, y, x2, y2, r = 64; + let startangle = Math.PI + this.mPI; + let endangle = Math.PI - this.mPI; + //let step = this.step>5 ? this.step : 1; + + if(this.step>5){ + range = this.range / this.step; + step = ( startangle - endangle ) / range; + } else { + step = (( startangle - endangle ) / r)*2; + range = r*0.5; + } + + for ( let i = 0; i <= range; ++i ) { + + a = startangle - ( step * i ); + x = r + Math.sin( a ) * ( r - 20 ); + y = r + Math.cos( a ) * ( r - 20 ); + x2 = r + Math.sin( a ) * ( r - 24 ); + y2 = r + Math.cos( a ) * ( r - 24 ); + d += 'M' + x + ' ' + y + ' L' + x2 + ' '+y2 + ' '; + + } + + return d; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = (this.value - this.min) / this.range; + + let sa = Math.PI + this.mPI; + let ea = ( ( this.percent * this.cirRange ) - ( this.mPI ) ); + + let sin = Math.sin( ea ); + let cos = Math.cos( ea ); + + let x1 = ( 25 * sin ) + 64; + let y1 = -( 25 * cos ) + 64; + let x2 = ( 20 * sin ) + 64; + let y2 = -( 20 * cos ) + 64; + + this.setSvg( this.c[3], 'd', 'M ' + x1 +' ' + y1 + ' L ' + x2 +' ' + y2, 1 ); + + if ( this.model > 0 ) { + + let x1 = 36 * Math.sin( sa ) + 64; + let y1 = 36 * Math.cos( sa ) + 64; + let x2 = 36 * sin + 64; + let y2 = -36 * cos + 64; + let big = ea <= Math.PI - this.mPI ? 0 : 1; + this.setSvg( this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4 ); + + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( this.colors.text, -0.75) ), Tools.unpack( this.colors.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 4 ); + + } + + if( up ) this.send(); + + } + } - class List extends Proto { - constructor(o = {}) { - super(o); - - // TODO not work - this.hideCurrent = false; - - // images - this.path = o.path || ''; - this.format = o.format || ''; - this.isWithImage = this.path !== '' ? true : false; - this.preLoadComplete = false; - this.tmpImage = {}; - this.tmpUrl = []; - this.m = o.m !== undefined ? o.m : 5; - let align = o.align || 'left'; - - // scroll size - let ss = o.scrollSize || 10; - this.ss = ss + 1; - this.sMode = 0; - this.tMode = 0; - this.listOnly = o.listOnly || false; - this.staticTop = o.staticTop || false; - this.isSelectable = this.listOnly; - if (o.select !== undefined) o.selectable = o.select; - if (o.selectable !== undefined) this.isSelectable = o.selectable; - if (this.txt === '') this.p = 0; - let fltop = Math.floor(this.h * 0.5) - 3; - let cc = this.colors; - this.c[2] = this.dom('div', this.css.basic + 'top:0; display:none; border-radius:' + this.radius + 'px;'); - this.c[3] = this.dom('div', this.css.item + 'padding:0px ' + this.m + 'px; margin-bottom:0px; position:absolute; justify-content:' + align + '; text-align:' + align + '; line-height:' + (this.h - 4) + 'px; top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:1px solid ' + cc.border + '; border-radius:' + this.radius + 'px;'); - this.c[4] = this.dom('path', this.css.basic + 'position:absolute; width:6px; height:6px; top:' + fltop + 'px;', { - d: this.svgs.g1, - fill: cc.text, - stroke: 'none' - }); - this.scrollerBack = this.dom('div', this.css.basic + 'right:0px; width:' + ss + 'px; background:' + cc.back + '; display:none;'); - this.scroller = this.dom('div', this.css.basic + 'right:' + (ss - ss * 0.25) * 0.5 + 'px; width:' + ss * 0.25 + 'px; background:' + cc.text + '; display:none; '); - this.c[3].style.color = cc.text; - this.list = []; - this.refObject = null; - if (o.list) { - if (o.list instanceof Array) { - this.list = o.list; - } else if (o.list instanceof Object) { - this.refObject = o.list; - for (let g in this.refObject) this.list.push(g); - } - } - this.items = []; - this.prevName = ''; - this.tmpId = 0; - this.baseH = this.h; - this.itemHeight = o.itemHeight || this.h; //(this.h-3); - - // force full list - this.full = o.full || false; - this.py = 0; - this.ww = this.sb; - this.scroll = false; - this.isDown = false; - this.current = null; - - // list up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - if (this.up) { - this.c[2].style.top = 'auto'; - this.c[3].style.top = 'auto'; - this.c[4].style.top = 'auto'; - this.c[2].style.bottom = this.h - 2 + 'px'; - this.c[3].style.bottom = '1px'; - this.c[4].style.bottom = fltop + 'px'; - } else { - this.c[2].style.top = this.baseH + 'px'; - } - this.listIn = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); - this.listIn.name = 'list'; - this.topList = 0; - this.c[2].appendChild(this.listIn); - this.c[2].appendChild(this.scrollerBack); - this.c[2].appendChild(this.scroller); - if (o.value !== undefined) { - if (!isNaN(o.value)) this.value = this.list[o.value];else this.value = o.value; - } else { - this.value = this.list[0]; - } - this.isOpenOnStart = o.open || false; - if (this.listOnly) { - this.baseH = 5; - this.c[3].style.display = 'none'; - this.c[4].style.display = 'none'; - this.c[2].style.top = this.baseH + 'px'; - this.isOpenOnStart = true; - } - this.miniCanvas = o.miniCanvas || false; - this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; - this.imageSize = o.imageSize || [20, 20]; - - // dragout function - this.drag = o.drag || false; - this.dragout = o.dragout || false; - this.dragstart = o.dragstart || null; - this.dragend = o.dragend || null; - - //this.c[0].style.background = '#FF0000' - ///if( this.isWithImage ) this.preloadImage(); - - this.setList(this.list); - this.init(); - if (this.isWithImage) this.preloadImage(); - if (this.isOpenOnStart) this.open(true); - this.baseH += this.mtop; - } - - // image list - - preloadImage() { - this.preLoadComplete = false; - this.tmpImage = {}; - for (let i = 0; i < this.list.length; i++) this.tmpUrl.push(this.list[i]); - this.loadOne(); - } - nextImg() { - if (this.c === null) return; - this.tmpUrl.shift(); - if (this.tmpUrl.length === 0) { - this.preLoadComplete = true; - this.addImages(); - /*this.setList( this.list ); - this.init(); - if( this.isOpenOnStart ) this.open();*/ - } else this.loadOne(); - } - loadOne() { - let self = this; - let name = this.tmpUrl[0]; - let img = document.createElement('img'); - img.style.cssText = 'position:absolute; width:' + self.imageSize[0] + 'px; height:' + self.imageSize[1] + 'px'; - img.setAttribute('src', this.path + name + this.format); - img.addEventListener('load', function () { - self.imageSize[2] = img.width; - self.imageSize[3] = img.height; - self.tmpImage[name] = img; - self.nextImg(); - }); - } - - // - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (this.up && this.isOpen) { - if (l.y > this.h - this.baseH) return 'title';else { - if (this.scroll && l.x > this.sa + this.sb - this.ss) return 'scroll'; - if (l.x > this.sa) return this.testItems(l.y - this.baseH); - } - } else { - if (l.y < this.baseH + 2) return 'title';else { - if (this.isOpen) { - if (this.scroll && l.x > this.sa + this.sb - this.ss) return 'scroll'; - if (l.x > this.sa) return this.testItems(l.y - this.baseH); - } - } - } - return ''; - } - testItems(y) { - let name = ''; - let items = this.items; - - /*if(this.hideCurrent){ - //items = [...this.items] - items = this.items.slice(this.tmpId) - }*/ - - let i = items.length, - item, - a, - b; - while (i--) { - item = items[i]; - a = item.posy + this.topList; - b = item.posy + this.itemHeight + 1 + this.topList; - if (y >= a && y <= b) { - name = 'item' + i; - this.modeItem(0); - this.current = item; - this.modeItem(1); - return name; - } - } - return name; - } - modeItem(mode) { - if (!this.current) return; - if (this.current.select && mode === 0) mode = 2; - let cc = this.colors; - switch (mode) { - case 0: - // base - this.current.style.background = cc.back; - this.current.style.color = cc.text; - break; - case 1: - // over - this.current.style.background = cc.over; - this.current.style.color = cc.textOver; - break; - case 2: - // edit / down - this.current.style.background = cc.select; - this.current.style.color = cc.textSelect; - break; - } - } - unSelected() { - if (!this.current) return; - this.modeItem(0); - this.current = null; - } - selected() { - if (!this.current) return; - this.resetItems(); - this.modeItem(2); - this.current.select = true; - } - resetItems() { - let i = this.items.length; - while (i--) { - this.items[i].select = false; - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text; - } - } - hideActive() { - if (!this.hideCurrent) return; - //if( !this.current ) return - if (this.current) this.tmpId = this.current.id; - this.resetHide(); - //this.items[this.tmpId].style.height = 0+'px' - } - resetHide() { - console.log(this.tmpId); - let i = this.items.length; - while (i--) { - if (i === this.tmpId) { - this.items[i].style.height = 0 + 'px'; - this.items[i].posy = -1; - } else { - this.items[i].style.height = this.itemHeight + 'px'; - this.items[i].posy = (this.itemHeight + 1) * (i - 1); - } - //this.items[i].style.display = 'flex' - - /*this.items[i].select = false - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text;*/ - } - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - this.isDown = false; - } - mousedown(e) { - let name = this.testZone(e); - if (!name) return false; - if (name === 'scroll') { - this.isDown = true; - this.mousemove(e); - } else if (name === 'title') { - this.modeTitle(2); - if (!this.listOnly) { - this.hideActive(); - if (!this.isOpen) this.open();else this.close(); - } - } else { - // is item - if (this.current) { - this.value = this.list[this.current.id]; - //this.tmpId = this.current.id - - if (this.isSelectable) this.selected(); - - //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); - this.send(this.value); - if (!this.listOnly) { - this.close(); - this.setTopItem(); - //this.hideActive() - } - } - } - return true; - } - mousemove(e) { - let nup = false; - let name = this.testZone(e); - if (!name) return nup; - if (name === 'title') { - this.unSelected(); - this.modeTitle(1); - this.cursor('pointer'); - } else if (name === 'scroll') { - this.cursor('s-resize'); - this.modeScroll(1); - if (this.isDown) { - this.modeScroll(2); - //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - let top = this.zone.y + this.baseH - 2; - this.update(e.clientY - top - this.sh * 0.5); - } - //if(this.isDown) this.listmove(e); - } else { - // is item - this.modeTitle(0); - this.modeScroll(0); - this.cursor('pointer'); - } - if (name !== this.prevName) nup = true; - this.prevName = name; - return nup; - } - wheel(e) { - let name = this.testZone(e); - if (name === 'title') return false; - this.py += e.delta * 10; - this.update(this.py); - return true; - } - - // ---------------------- - - reset() { - this.prevName = ''; - this.unSelected(); - this.modeTitle(0); - this.modeScroll(0); - - //console.log('this is reset') - } - modeScroll(mode) { - if (mode === this.sMode) return; - let s = this.scroller.style; - let cc = this.colors; - switch (mode) { - case 0: - // base - s.background = cc.text; - break; - case 1: - // over - s.background = cc.select; - break; - case 2: - // edit / down - s.background = cc.select; - break; - } - this.sMode = mode; - } - modeTitle(mode) { - if (mode === this.tMode) return; - let s = this.s; - let cc = this.colors; - switch (mode) { - case 0: - // base - s[3].color = cc.text; - s[3].background = cc.button; - break; - case 1: - // over - s[3].color = cc.textOver; - s[3].background = cc.overoff; - break; - case 2: - // edit / down - s[3].color = cc.textSelect; - s[3].background = cc.overoff; - break; - } - this.tMode = mode; - } - clearList() { - while (this.listIn.children.length) this.listIn.removeChild(this.listIn.lastChild); - this.items = []; - } - setList(list) { - this.clearList(); - this.list = list; - this.length = this.list.length; - let lng = this.hideCurrent ? this.length - 1 : this.length; - this.maxItem = this.full ? lng : 5; - this.maxItem = lng < this.maxItem ? lng : this.maxItem; - this.maxHeight = this.maxItem * (this.itemHeight + 1) + 2; - this.max = lng * (this.itemHeight + 1) + 2; - this.ratio = this.maxHeight / this.max; - this.sh = this.maxHeight * this.ratio; - this.range = this.maxHeight - this.sh; - this.c[2].style.height = this.maxHeight + 'px'; - this.scrollerBack.style.height = this.maxHeight + 'px'; - this.scroller.style.height = this.sh + 'px'; - if (this.max > this.maxHeight) { - this.ww = this.sb - this.ss; - this.scroll = true; - } - if (this.miniCanvas) { - this.tmpCanvas = document.createElement('canvas'); - this.tmpCanvas.width = this.imageSize[0]; - this.tmpCanvas.height = this.imageSize[1]; - this.tmpCtx = this.tmpCanvas.getContext("2d"); - this.tmpCtx.fillStyle = this.canvasBg; - this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); - } - let item, n; //, l = this.sb; - for (let i = 0; i < this.length; i++) { - n = this.list[i]; - item = this.dom('div', this.css.item + 'padding:0px ' + (this.m + 1) + 'px; width:' + this.ww + 'px; height:' + this.itemHeight + 'px; line-height:' + (this.itemHeight - 2) + 'px; color:' + this.colors.text + '; background:' + this.colors.back + ';'); - item.name = 'item' + i; - item.id = i; - item.select = false; - item.posy = (this.itemHeight + 1) * i; - this.listIn.appendChild(item); - this.items.push(item); - if (n === this.value) this.current = item; - - //if( this.isWithImage ) item.appendChild( this.tmpImage[n] ); - if (!this.isWithImage) item.textContent = n; - if (this.miniCanvas) { - let c = new Image(); - c.src = this.tmpCanvas.toDataURL(); - - //item.style.marginLeft = (this.imageSize[0]+8)+'px' - - /*let c = document.createElement('canvas') - c.width = this.imageSize[0] - c.height = this.imageSize[1] - let ctx = c.getContext("2d") - ctx.fillStyle = this.canvasBg - ctx.fillRect(0, 0, this.imageSize[0], this.imageSize[1])*/ - - //c.style.cssText = 'position:relative; pointer-events:none; display:inline-block; float:left; margin-left:0px; margin-right:5px; top:2px' - // c.style.cssText =' flex-shrink: 0;' - - c.style.cssText = 'margin-right:4px;'; - - //c.style.cssText = 'display:flex; align-content: flex-start; flex-wrap: wrap;' - //item.style.float = 'right' - item.appendChild(c); - this.tmpImage[n] = c; - } - if (this.dragout) { - item.img = this.tmpImage[n]; - item.style.pointerEvents = 'auto'; - item.draggable = "true"; - item.addEventListener('dragstart', this.dragstart || function () {/*console.log('drag start')*/}); - item.addEventListener('drag', this.drag || function () {/*console.log('drag start')*/}); - //item.addEventListener('dragover', this); - //item.addEventListener('dragenter', this); - item.addEventListener('dragleave', function () { - Roots.fakeUp(); - }); - item.addEventListener('dragend', this.dragend || function () {/*console.log('drag end')*/}.bind(this)); - //item.addEventListener('drop', function(){console.log('drop')}) - } - } - this.setTopItem(); - if (this.isSelectable) this.selected(); - } - drawImage(name, image, x, y, w, h) { - this.tmpCtx.clearRect(0, 0, this.imageSize[0], this.imageSize[1]); - this.tmpCtx.drawImage(image, x, y, w, h, 0, 0, this.imageSize[0], this.imageSize[1]); - this.tmpImage[name].src = this.tmpCanvas.toDataURL(); - - /*let c = this.tmpImage[name] - let ctx = c.getContext("2d") - ctx.drawImage(image, x, y, w, h, 0, 0, this.imageSize[0], this.imageSize[1])*/ - } - addImages() { - let lng = this.list.length; - for (let i = 0; i < lng; i++) { - this.items[i].appendChild(this.tmpImage[this.list[i]]); - } - this.setTopItem(); - } - setValue(value) { - if (!isNaN(value)) this.value = this.list[value];else this.value = value; - - //this.tmpId = value - - this.setTopItem(); - } - setTopItem() { - if (this.staticTop) return; - if (this.isWithImage) { - if (!this.preLoadComplete) return; - if (!this.c[3].children.length) { - this.canvas = document.createElement('canvas'); - this.canvas.width = this.imageSize[0]; - this.canvas.height = this.imageSize[1]; - this.canvas.style.cssText = 'margin-right:4px;'; - this.ctx = this.canvas.getContext("2d"); - this.c[3].style.textAlign = 'left'; - this.c[3].style.justifyContent = 'left'; - this.c[3].appendChild(this.canvas); - } - this.tmpImage[this.value]; - this.ctx.drawImage(this.tmpImage[this.value], 0, 0, this.imageSize[2], this.imageSize[3], 0, 0, this.imageSize[0], this.imageSize[1]); - } else this.c[3].textContent = this.value; - if (this.miniCanvas) { - if (!this.c[3].children.length) { - this.canvas = document.createElement('canvas'); - this.canvas.width = this.imageSize[0]; - this.canvas.height = this.imageSize[1]; - this.canvas.style.cssText = 'margin-right:4px;'; - this.ctx = this.canvas.getContext("2d"); - this.c[3].style.textAlign = 'left'; - this.c[3].style.justifyContent = 'left'; - this.c[3].appendChild(this.canvas); - } - this.ctx.drawImage(this.tmpImage[this.value], 0, 0); - } - } - - // ----- LIST - - update(y) { - if (!this.scroll) return; - y = y < 0 ? 0 : y; - y = y > this.range ? this.range : y; - this.topList = -Math.floor(y / this.ratio); - this.listIn.style.top = this.topList + 'px'; - this.scroller.style.top = Math.floor(y) + 'px'; - this.py = y; - } - parentHeight(t) { - if (this.group !== null) this.group.calc(t);else if (this.isUI) this.main.calc(t); - } - open(first) { - super.open(); - this.update(0); - this.h = this.maxHeight + this.baseH + 5; - if (!this.scroll) { - this.topList = 0; - this.h = this.baseH + 5 + this.max; - this.scroller.style.display = 'none'; - this.scrollerBack.style.display = 'none'; - } else { - this.scroller.style.display = 'block'; - this.scrollerBack.style.display = 'block'; - } - this.s[0].height = this.h + 'px'; - this.s[2].display = 'block'; - if (this.up) { - this.zone.y -= this.h - (this.baseH - 10); - this.setSvg(this.c[4], 'd', this.svgs.g1); - } else { - this.setSvg(this.c[4], 'd', this.svgs.g2); - } - this.rSizeContent(); - let t = this.h - this.baseH; - this.zone.h = this.h; - if (!first) this.parentHeight(t); - } - close() { - super.close(); - if (this.up) this.zone.y += this.h - (this.baseH - 10); - let t = this.h - this.baseH; - this.h = this.baseH; - this.s[0].height = this.h + 'px'; - this.s[2].display = 'none'; - this.setSvg(this.c[4], 'd', this.svgs.g1); - this.zone.h = this.h; - this.parentHeight(-t); - } - - // ----- - - text(txt) { - this.c[3].textContent = txt; - } - rSizeContent() { - let i = this.length; - while (i--) this.listIn.children[i].style.width = this.ww + 'px'; - } - rSize() { - super.rSize(); - - //Proto.prototype.rSize.call( this ); - - let s = this.s; - let w = this.sb; - let d = this.sa; - if (s[2] === undefined) return; - s[2].width = w + 'px'; - s[2].left = d + 'px'; - s[3].width = w + 'px'; - s[3].left = d + 'px'; - s[4].left = d + w - 15 + 'px'; - this.ww = w; - if (this.max > this.maxHeight) this.ww = w - this.ss; - if (this.isOpen) this.rSizeContent(); - } + class List extends Proto { + + constructor( o = {} ) { + + super( o ); + + // TODO not work + this.hideCurrent = false; + + // images + this.path = o.path || ''; + this.format = o.format || ''; + + + this.isWithImage = this.path !== '' ? true:false; + this.preLoadComplete = false; + + this.tmpImage = {}; + this.tmpUrl = []; + + this.m = o.m !== undefined ? o.m : 5; + + + let align = o.align || 'left'; + + // scroll size + let ss = o.scrollSize || 10; + this.ss = ss+1; + + this.sMode = 0; + this.tMode = 0; + + this.listOnly = o.listOnly || false; + this.staticTop = o.staticTop || false; + + this.isSelectable = this.listOnly; + if( o.select !== undefined ) o.selectable = o.select; + if( o.selectable !== undefined ) this.isSelectable = o.selectable; + + if( this.txt === '' ) this.p = 0; + + + let fltop = Math.floor(this.h*0.5)-3; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.basic + 'top:0; display:none; border-radius:'+this.radius+'px;' ); + this.c[3] = this.dom( 'div', this.css.item + 'padding:0px '+this.m+'px; margin-bottom:0px; position:absolute; justify-content:'+align+'; text-align:'+align+'; line-height:'+(this.h-4)+'px; top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:1px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); + + this.scrollerBack = this.dom( 'div', this.css.basic + 'right:0px; width:'+ss+'px; background:'+cc.back+'; display:none;'); + this.scroller = this.dom( 'div', this.css.basic + 'right:'+((ss-(ss*0.25))*0.5)+'px; width:'+(ss*0.25)+'px; background:'+cc.text+'; display:none; '); + + this.c[3].style.color = cc.text; + + + this.list = []; + this.refObject = null; + + if( o.list ){ + if( o.list instanceof Array ){ + this.list = o.list; + } else if( o.list instanceof Object ){ + this.refObject = o.list; + for( let g in this.refObject ) this.list.push( g ); + } + } + + this.items = []; + + this.prevName = ''; + + + this.tmpId = 0; + + this.baseH = this.h; + + this.itemHeight = o.itemHeight || this.h;//(this.h-3); + + // force full list + this.full = o.full || false; + + this.py = 0; + this.ww = this.sb; + this.scroll = false; + this.isDown = false; + + this.current = null; + + // list up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + if( this.up ){ + + this.c[2].style.top = 'auto'; + this.c[3].style.top = 'auto'; + this.c[4].style.top = 'auto'; + + this.c[2].style.bottom = this.h-2 + 'px'; + this.c[3].style.bottom = '1px'; + this.c[4].style.bottom = fltop + 'px'; + + } else { + this.c[2].style.top = this.baseH + 'px'; + } + + this.listIn = this.dom( 'div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); + this.listIn.name = 'list'; + + this.topList = 0; + + this.c[2].appendChild( this.listIn ); + this.c[2].appendChild( this.scrollerBack ); + this.c[2].appendChild( this.scroller ); + + if( o.value !== undefined ){ + if(!isNaN(o.value)) this.value = this.list[ o.value ]; + else this.value = o.value; + }else { + this.value = this.list[0]; + } + + this.isOpenOnStart = o.open || false; + + if( this.listOnly ){ + this.baseH = 5; + this.c[3].style.display = 'none'; + this.c[4].style.display = 'none'; + this.c[2].style.top = this.baseH+'px'; + this.isOpenOnStart = true; + } + + + this.miniCanvas = o.miniCanvas || false; + this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; + this.imageSize = o.imageSize || [20,20]; + + // dragout function + this.drag = o.drag || false; + this.dragout = o.dragout || false; + this.dragstart = o.dragstart || null; + this.dragend = o.dragend || null; + + + + //this.c[0].style.background = '#FF0000' + ///if( this.isWithImage ) this.preloadImage(); + + this.setList( this.list ); + this.init(); + if( this.isWithImage ) this.preloadImage(); + if( this.isOpenOnStart ) this.open( true ); + + this.baseH += this.mtop; + + } + + // image list + + preloadImage () { + + + + this.preLoadComplete = false; + + this.tmpImage = {}; + for( let i=0; i this.h - this.baseH ) return 'title'; + else { + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + + } else { + if( l.y < this.baseH+2 ) return 'title'; + else { + if( this.isOpen ){ + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + } + + } + + return ''; + + } + + testItems ( y ) { + + let name = ''; + + let items = this.items; + + /*if(this.hideCurrent){ + //items = [...this.items] + items = this.items.slice(this.tmpId) + + }*/ + + let i = items.length, item, a, b; + while(i--){ + item = items[i]; + a = item.posy + this.topList; + b = item.posy + this.itemHeight + 1 + this.topList; + if( y >= a && y <= b ){ + name = 'item' + i; + this.modeItem(0); + this.current = item; + this.modeItem(1); + return name; + } + + } + + return name; + + } + + modeItem ( mode ) { + + if( !this.current ) return + + if( this.current.select && mode===0) mode = 2; + let cc = this.colors; + + switch( mode ){ + + case 0: // base + this.current.style.background = cc.back; + this.current.style.color = cc.text; + break; + case 1: // over + this.current.style.background = cc.over; + this.current.style.color = cc.textOver; + break; + case 2: // edit / down + this.current.style.background = cc.select; + this.current.style.color = cc.textSelect; + break; + + } + } + + unSelected() { + + if( !this.current ) return + this.modeItem(0); + this.current = null; + + } + + selected() { + + if( !this.current ) return + this.resetItems(); + this.modeItem(2); + this.current.select = true; + + + + } + + resetItems() { + + let i = this.items.length; + while(i--){ + this.items[i].select = false; + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text; + } + + } + + hideActive() { + + if( !this.hideCurrent ) return + //if( !this.current ) return + if( this.current )this.tmpId = this.current.id; + this.resetHide(); + //this.items[this.tmpId].style.height = 0+'px' + + } + + resetHide() { + + console.log(this.tmpId); + + let i = this.items.length; + while(i--){ + if(i===this.tmpId){ + this.items[i].style.height = 0+'px'; + this.items[i].posy = -1; + } else { + this.items[i].style.height = this.itemHeight+'px'; + this.items[i].posy = (this.itemHeight+1)*(i-1); + } + //this.items[i].style.display = 'flex' + + /*this.items[i].select = false + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text;*/ + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + + mouseup ( e ) { + + this.isDown = false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'scroll' ){ + + this.isDown = true; + this.mousemove( e ); + + } else if( name === 'title' ){ + + this.modeTitle(2); + if( !this.listOnly ){ + this.hideActive(); + if( !this.isOpen ) this.open(); + else this.close(); + } + } else { + // is item + if( this.current ){ + + this.value = this.list[ this.current.id ]; + //this.tmpId = this.current.id + + if( this.isSelectable ) this.selected(); + + //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); + this.send( this.value ); + + if( !this.listOnly ) { + this.close(); + this.setTopItem(); + //this.hideActive() + } + } + + } + + return true; + + } + + mousemove ( e ) { + + let nup = false; + let name = this.testZone( e ); + + if( !name ) return nup; + + if( name === 'title' ){ + this.unSelected(); + this.modeTitle(1); + this.cursor('pointer'); + + } else if( name === 'scroll' ){ + + this.cursor('s-resize'); + this.modeScroll(1); + if( this.isDown ){ + this.modeScroll(2); + //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + let top = this.zone.y+this.baseH-2; + this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + } + //if(this.isDown) this.listmove(e); + } else { + + // is item + this.modeTitle(0); + this.modeScroll(0); + this.cursor('pointer'); + + } + + if( name !== this.prevName ) nup = true; + this.prevName = name; + + return nup; + + } + + wheel ( e ) { + + let name = this.testZone( e ); + if( name === 'title' ) return false; + this.py += e.delta*10; + this.update(this.py); + return true; + + } + + + + // ---------------------- + + reset () { + + this.prevName = ''; + this.unSelected(); + this.modeTitle(0); + this.modeScroll(0); + + //console.log('this is reset') + + } + + modeScroll ( mode ) { + + if( mode === this.sMode ) return; + + let s = this.scroller.style; + let cc = this.colors; + + switch(mode){ + case 0: // base + s.background = cc.text; + break; + case 1: // over + s.background = cc.select; + break; + case 2: // edit / down + s.background = cc.select; + break; + + } + + this.sMode = mode; + } + + modeTitle ( mode ) { + + if( mode === this.tMode ) return; + + let s = this.s; + let cc = this.colors; + + switch(mode){ + case 0: // base + s[3].color = cc.text; + s[3].background = cc.button; + break; + case 1: // over + s[3].color = cc.textOver; + s[3].background = cc.overoff; + break; + case 2: // edit / down + s[3].color = cc.textSelect; + s[3].background = cc.overoff; + break; + + } + + this.tMode = mode; + + } + + clearList () { + + while ( this.listIn.children.length ) this.listIn.removeChild( this.listIn.lastChild ); + this.items = []; + + } + + setList ( list ) { + + this.clearList(); + + this.list = list; + this.length = this.list.length; + + let lng = this.hideCurrent? this.length-1 : this.length; + + this.maxItem = this.full ? lng : 5; + this.maxItem = lng < this.maxItem ? lng : this.maxItem; + + this.maxHeight = this.maxItem * (this.itemHeight+1) + 2; + + + + this.max = lng * (this.itemHeight+1) + 2; + this.ratio = this.maxHeight / this.max; + this.sh = this.maxHeight * this.ratio; + this.range = this.maxHeight - this.sh; + + this.c[2].style.height = this.maxHeight + 'px'; + this.scrollerBack.style.height = this.maxHeight + 'px'; + this.scroller.style.height = this.sh + 'px'; + + if( this.max > this.maxHeight ){ + this.ww = this.sb - this.ss; + this.scroll = true; + } + + if( this.miniCanvas ) { + + this.tmpCanvas = document.createElement('canvas'); + this.tmpCanvas.width = this.imageSize[0]; + this.tmpCanvas.height = this.imageSize[1]; + this.tmpCtx = this.tmpCanvas.getContext("2d"); + this.tmpCtx.fillStyle = this.canvasBg; + this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); + + } + + let item, n;//, l = this.sb; + for( let i=0; i this.range ? this.range : y; + + this.topList = -Math.floor( y / this.ratio ); + + this.listIn.style.top = this.topList+'px'; + this.scroller.style.top = Math.floor( y ) + 'px'; + + this.py = y; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open ( first ) { + + super.open(); + + this.update( 0 ); + + this.h = this.maxHeight + this.baseH + 5; + if( !this.scroll ){ + this.topList = 0; + this.h = this.baseH + 5 + this.max; + this.scroller.style.display = 'none'; + this.scrollerBack.style.display = 'none'; + } else { + this.scroller.style.display = 'block'; + this.scrollerBack.style.display = 'block'; + } + this.s[0].height = this.h + 'px'; + this.s[2].display = 'block'; + + if( this.up ){ + this.zone.y -= this.h - (this.baseH-10); + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + } else { + this.setSvg( this.c[4], 'd', this.svgs.g2 ); + } + + this.rSizeContent(); + + let t = this.h - this.baseH; + + this.zone.h = this.h; + + if(!first) this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.h - (this.baseH-10); + + let t = this.h - this.baseH; + + this.h = this.baseH; + this.s[0].height = this.h + 'px'; + this.s[2].display = 'none'; + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + + this.zone.h = this.h; + + this.parentHeight( -t ); + + } + + // ----- + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSizeContent () { + + let i = this.length; + while(i--) this.listIn.children[i].style.width = this.ww + 'px'; + + } + + rSize () { + + super.rSize(); + + //Proto.prototype.rSize.call( this ); + + let s = this.s; + let w = this.sb; + let d = this.sa; + + if(s[2]=== undefined) return; + + s[2].width = w + 'px'; + s[2].left = d +'px'; + + s[3].width = w + 'px'; + s[3].left = d + 'px'; + + s[4].left = d + w - 15 + 'px'; + + this.ww = w; + if( this.max > this.maxHeight ) this.ww = w-this.ss; + if(this.isOpen) this.rSizeContent(); + + } + } - class Numeric extends Proto { - constructor(o = {}) { - super(o); - this.setTypeNumber(o); - this.allway = o.allway || false; - this.isDown = false; - this.value = [0]; - this.multy = 1; - this.invmulty = 1; - this.isSingle = true; - this.isAngle = false; - this.isVector = false; - if (o.isAngle) { - this.isAngle = true; - this.multy = Tools.torad; - this.invmulty = Tools.todeg; - } - this.isDrag = o.drag || false; - if (o.value !== undefined) { - if (!isNaN(o.value)) { - this.value = [o.value]; - } else if (o.value instanceof Array) { - this.value = o.value; - this.isSingle = false; - } else if (o.value instanceof Object) { - this.value = []; - if (o.value.x !== undefined) this.value[0] = o.value.x; - if (o.value.y !== undefined) this.value[1] = o.value.y; - if (o.value.z !== undefined) this.value[2] = o.value.z; - if (o.value.w !== undefined) this.value[3] = o.value.w; - this.isSingle = false; - this.isVector = true; - } - } - this.lng = this.value.length; - this.tmp = []; - this.current = -1; - this.prev = { - x: 0, - y: 0, - d: 0, - v: 0 - }; - let cc = this.colors; - - // bg - this.c[2] = this.dom('div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h - 8) + 'px;'); - this.cMode = []; - let i = this.lng; - while (i--) { - if (this.isAngle) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed(this.precision); - this.c[3 + i] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border + '; border-radius:' + this.radius + 'px;'); - if (o.center) this.c[2 + i].style.textAlign = 'center'; - this.c[3 + i].textContent = this.value[i]; - this.c[3 + i].style.color = this.colors.text; - this.c[3 + i].isNum = true; - this.cMode[i] = 0; - } - - // selection - this.selectId = 3 + this.lng; - this.c[this.selectId] = this.dom('div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h - 4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.cursorId = 4 + this.lng; - this.c[this.cursorId] = this.dom('div', this.css.basic + 'top:2px; height:' + (this.h - 4) + 'px; width:0px; background:' + cc.text + ';'); - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - let i = this.lng; - let t = this.tmp; - while (i--) { - if (l.x > t[i][0] && l.x < t[i][2]) return i; - } - return ''; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown(e) { - let name = this.testZone(e); - if (!this.isDown) { - this.isDown = true; - if (name !== '') { - this.current = name; - this.prev = { - x: e.clientX, - y: e.clientY, - d: 0, - v: this.isSingle ? parseFloat(this.value) : parseFloat(this.value[this.current]) - }; - this.setInput(this.c[3 + this.current]); - } - return this.mousemove(e); - } - return false; - } - mouseup(e) { - if (this.isDown) { - this.isDown = false; - this.prev = { - x: 0, - y: 0, - d: 0, - v: 0 - }; - return this.mousemove(e); - } - return false; - } - mousemove(e) { - let nup = false; - let x = 0; - let name = this.testZone(e); - if (name === '') this.cursor();else { - if (!this.isDrag) this.cursor('text');else this.cursor(this.current !== -1 ? 'move' : 'pointer'); - } - if (this.isDrag) { - if (this.current !== -1) { - this.prev.d += e.clientX - this.prev.x - (e.clientY - this.prev.y); - let n = this.prev.v + this.prev.d * this.step; - this.value[this.current] = this.numValue(n); - this.c[3 + this.current].textContent = this.value[this.current]; - this.validate(); - this.prev.x = e.clientX; - this.prev.y = e.clientY; - nup = true; - } - } else { - if (this.isDown) x = e.clientX - this.zone.x - 3; - if (this.current !== -1) x -= this.tmp[this.current][0]; - return this.upInput(x, this.isDown); - } - return nup; - } - - // ---------------------- - - reset() { - let nup = false; - return nup; - } - setValue(v) { - if (this.isVector) { - if (v.x !== undefined) this.value[0] = v.x; - if (v.y !== undefined) this.value[1] = v.y; - if (v.z !== undefined) this.value[2] = v.z; - if (v.w !== undefined) this.value[3] = v.w; - } else { - this.value = this.isSingle ? [v] : v; - } - this.update(); - } - sameStr(str) { - let i = this.value.length; - while (i--) this.c[3 + i].textContent = str; - } - update(up) { - let i = this.value.length; - while (i--) { - this.value[i] = this.numValue(this.value[i] * this.invmulty); - this.c[3 + i].textContent = this.value[i]; - } - if (up) this.send(); - } - send(v) { - v = v || this.value; - this.isSend = true; - if (this.objectLink !== null) { - if (this.isVector) { - this.objectLink[this.objectKey].fromArray(v); - } else { - this.objectLink[this.objectKey] = v; - } - } - if (this.callback) this.callback(v, this.objectKey); - this.isSend = false; - } - - // ---------------------- - // INPUT - // ---------------------- - - select(c, e, w, t) { - let s = this.s; - let d = this.current !== -1 ? this.tmp[this.current][0] + 5 : 0; - s[this.cursorId].width = '1px'; - s[this.cursorId].left = d + c + 'px'; - s[this.selectId].left = d + e + 'px'; - s[this.selectId].width = w + 'px'; - this.c[this.selectId].innerHTML = t; - } - unselect() { - let s = this.s; - if (!s) return; - this.c[this.selectId].innerHTML = ''; - s[this.selectId].width = 0 + 'px'; - s[this.cursorId].width = 0 + 'px'; - } - validate(force) { - let ar = []; - let i = this.lng; - if (this.allway) force = true; - while (i--) { - if (!isNaN(this.c[3 + i].textContent)) { - let nx = this.numValue(this.c[3 + i].textContent); - this.c[3 + i].textContent = nx; - this.value[i] = nx; - } else { - // not number - this.c[3 + i].textContent = this.value[i]; - } - ar[i] = this.value[i] * this.multy; - } - if (!force) return; - this.send(this.isSingle ? ar[0] : ar); - } - - // ---------------------- - // REZISE - // ---------------------- - - rSize() { - super.rSize(); - let sx = this.colors.sx; - let ss = sx * (this.lng - 1); - let w = (this.sb - ss) / this.lng; //(( this.sb + sx ) / this.lng )-sx - let s = this.s; - let i = this.lng; - while (i--) { - //this.tmp[i] = [ Math.floor( this.sa + ( w * i )+( 5 * i )), w ]; - this.tmp[i] = [this.sa + w * i + sx * i, w]; - this.tmp[i][2] = this.tmp[i][0] + this.tmp[i][1]; - s[3 + i].left = this.tmp[i][0] + 'px'; - s[3 + i].width = this.tmp[i][1] + 'px'; - } - } + class Numeric extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.setTypeNumber( o ); + + this.allway = o.allway || false; + + this.isDown = false; + this.value = [0]; + this.multy = 1; + this.invmulty = 1; + this.isSingle = true; + this.isAngle = false; + this.isVector = false; + + if( o.isAngle ){ + this.isAngle = true; + this.multy = Tools.torad; + this.invmulty = Tools.todeg; + } + + this.isDrag = o.drag || false; + + if( o.value !== undefined ){ + if( !isNaN(o.value) ){ + this.value = [o.value]; + } else if( o.value instanceof Array ){ + this.value = o.value; + this.isSingle = false; + } else if( o.value instanceof Object ){ + this.value = []; + if( o.value.x !== undefined ) this.value[0] = o.value.x; + if( o.value.y !== undefined ) this.value[1] = o.value.y; + if( o.value.z !== undefined ) this.value[2] = o.value.z; + if( o.value.w !== undefined ) this.value[3] = o.value.w; + this.isSingle = false; + this.isVector = true; + } + } + + this.lng = this.value.length; + this.tmp = []; + + this.current = -1; + this.prev = { x:0, y:0, d:0, v:0 }; + + let cc = this.colors; + + // bg + this.c[2] = this.dom( 'div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h-8) + 'px;' ); + + this.cMode = []; + + let i = this.lng; + while(i--){ + + if( this.isAngle ) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed( this.precision ); + this.c[3+i] = this.dom( 'div', this.css.txtselect + 'top:1px; height:'+(this.h-2)+'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;'); + if(o.center) this.c[2+i].style.textAlign = 'center'; + this.c[3+i].textContent = this.value[i]; + this.c[3+i].style.color = this.colors.text; + this.c[3+i].isNum = true; + this.cMode[i] = 0; + + } + + // selection + this.selectId = 3 + this.lng; + this.c[this.selectId] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.cursorId = 4 + this.lng; + this.c[ this.cursorId ] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + this.init(); + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0"; - this.easing = o.easing || 1; - this.setTypeNumber(o); - this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; - - //this.defaultBorderColor = this.colors.hide; - - this.isDown = false; - this.isOver = false; - this.allway = o.allway || false; - this.isDeg = o.isDeg || false; - this.isCyclic = o.cyclic || false; - this.firstImput = false; - let cc = this.colors; - - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - this.c[2] = this.dom("div", this.css.txtselect + "border:none; background:none; width:47px; color:" + cc.text + ";"); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); - this.c[3] = this.dom("div", this.css.basic + " top:0; height:" + this.h + "px;"); - this.c[4] = this.dom("div", this.css.basic + "background:" + cc.back + "; top:2px; height:" + (this.h - 4) + "px;"); - this.c[5] = this.dom("div", this.css.basic + "left:4px; top:5px; height:" + (this.h - 10) + "px; background:" + cc.text + ";"); - this.c[2].isNum = true; - //this.c[2].style.height = (this.h-4) + 'px'; - //this.c[2].style.lineHeight = (this.h-8) + 'px'; - this.c[2].style.height = this.h - 2 + "px"; - this.c[2].style.lineHeight = this.h - 10 + "px"; - if (this.model !== 0) { - let r1 = 4, - h1 = 4, - h2 = 8, - ww = this.h - 6, - ra = 16; - if (this.model === 2) { - r1 = 0; - h1 = 2; - h2 = 4; - ra = 2; - ww = (this.h - 6) * 0.5; - } - if (this.model === 3) this.c[5].style.visible = "none"; - this.c[4].style.borderRadius = r1 + "px"; - this.c[4].style.height = h2 + "px"; - this.c[4].style.top = this.h * 0.5 - h1 + "px"; - this.c[5].style.borderRadius = r1 * 0.5 + "px"; - this.c[5].style.height = h1 + "px"; - this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; - - //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); - this.c[6] = this.dom("div", this.css.basic + "border-radius:" + ra + "px; margin-left:" + -ww * 0.5 + "px; background:" + cc.text + "; left:4px; top:3px; height:" + (this.h - 6) + "px; width:" + ww + "px;"); - } - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - if (l.x >= this.txl) return "text";else if (l.x >= this.sa) return "scroll";else return ""; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (this.isDown) this.isDown = false; - } - mousedown(e) { - let name = this.testZone(e); - if (!name) return false; - if (name === "scroll") { - this.isDown = true; - this.old = this.value; - this.mousemove(e); - } - - /*if( name === 'text' ){ - this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); - }*/ - - return true; - } - mousemove(e) { - let nup = false; - let name = this.testZone(e); - if (name === "scroll") { - this.mode(1); - this.cursor("w-resize"); - //} else if(name === 'text'){ - //this.cursor('pointer'); - } else { - this.cursor(); - } - if (this.isDown) { - let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; - - // lo mapeo al rango 0 ... 1 - nNormalized = Math.min(1, Math.max(0, nNormalized)); - - // aplico easing - let nEased = Math.pow(nNormalized, this.easing); // easing - - let nNew = nEased * this.range + this.min; - let nNewSlider = nNormalized * this.range + this.min; - this.sliderValue = this.numValue(nNewSlider); - let delta = nNew - this.old; - let steps; - if (delta >= this.step || delta <= this.step) { - steps = Math.floor(delta / this.step); - this.value = this.numValue(this.old + steps * this.step); - // value without easing applied - - this.update(true); - this.old = this.value; - } - //console.log("n, normalized, value", nNew, nNormalized, this.value); - nup = true; - } - return nup; - } - wheel(e) { - let name = this.testZone(e); - if (name === "scroll") { - let v = this.value - this.step * e.delta; - if (v > this.max) { - v = this.isCyclic ? this.min : this.max; - } else if (v < this.min) { - v = this.isCyclic ? this.max : this.min; - } - this.setValue(v); - this.old = v; - this.update(true); - return true; - } - return false; - } - - //keydown: function ( e ) { return true; }, - - // ---------------------- - - validate() { - let n = this.c[2].textContent; - if (!isNaN(n)) { - this.value = this.numValue(n); - this.update(true); - } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - } - reset() { - //this.clearInput(); - this.isDown = false; - this.mode(0); - } - mode(mode) { - let s = this.s; - let cc = this.colors; - switch (mode) { - case 0: - // base - // s[2].border = '1px solid ' + this.colors.hide; - s[2].color = cc.text; - s[4].background = cc.back; - s[5].background = cc.text; - if (this.model !== 0) s[6].background = cc.text; //cc.button; - break; - case 1: - // scroll over - //s[2].border = '1px dashed ' + this.colors.hide; - s[2].color = cc.textOver; - s[4].background = cc.back; - s[5].background = cc.textOver; - if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; - break; - } - } - update(up) { - let normalized = (this.value - this.min) / this.range; - let uneased = this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); - let ww = Math.floor(this.ww * uneased); - //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); - - if (this.model !== 3) this.s[5].width = ww + "px"; - if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; - this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - if (up) this.send(); - } - rSize() { - super.rSize(); - let w = this.sb - this.sc; - this.ww = w - 6; - let tx = this.sc; - if (this.isUI || !this.simple) tx = this.sc + 10; - this.txl = this.w - tx + 2; - - //let ty = Math.floor(this.h * 0.5) - 8; - - let s = this.s; - s[2].width = this.sc - 6 + "px"; - s[2].left = this.txl + 4 + "px"; - //s[2].top = ty + 'px'; - s[3].left = this.sa + "px"; - s[3].width = w + "px"; - s[4].left = this.sa + "px"; - s[4].width = w + "px"; - s[5].left = this.sa + 3 + "px"; - this.update(); - } + class Slide extends Proto { + constructor(o = {}) { + super(o); + + if (o.easing <= 0) throw "Easing must be > 0"; + this.easing = o.easing || 1; + + this.setTypeNumber(o); + + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + + //this.defaultBorderColor = this.colors.hide; + + this.isDown = false; + this.isOver = false; + this.allway = o.allway || false; + + this.isDeg = o.isDeg || false; + this.isCyclic = o.cyclic || false; + + this.firstImput = false; + + let cc = this.colors; + + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + this.c[2] = this.dom( + "div", + this.css.txtselect + + "border:none; background:none; width:47px; color:" + + cc.text + + ";" + ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); + this.c[3] = this.dom( + "div", + this.css.basic + " top:0; height:" + this.h + "px;" + ); + + this.c[4] = this.dom( + "div", + this.css.basic + + "background:" + + cc.back + + "; top:2px; height:" + + (this.h - 4) + + "px;" + ); + this.c[5] = this.dom( + "div", + this.css.basic + + "left:4px; top:5px; height:" + + (this.h - 10) + + "px; background:" + + cc.text + + ";" + ); + + this.c[2].isNum = true; + //this.c[2].style.height = (this.h-4) + 'px'; + //this.c[2].style.lineHeight = (this.h-8) + 'px'; + this.c[2].style.height = this.h - 2 + "px"; + this.c[2].style.lineHeight = this.h - 10 + "px"; + + if (this.model !== 0) { + let r1 = 4, + h1 = 4, + h2 = 8, + ww = this.h - 6, + ra = 16; + + if (this.model === 2) { + r1 = 0; + h1 = 2; + h2 = 4; + ra = 2; + ww = (this.h - 6) * 0.5; + } + + if (this.model === 3) this.c[5].style.visible = "none"; + + this.c[4].style.borderRadius = r1 + "px"; + this.c[4].style.height = h2 + "px"; + this.c[4].style.top = this.h * 0.5 - h1 + "px"; + this.c[5].style.borderRadius = r1 * 0.5 + "px"; + this.c[5].style.height = h1 + "px"; + this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; + + //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); + this.c[6] = this.dom( + "div", + this.css.basic + + "border-radius:" + + ra + + "px; margin-left:" + + -ww * 0.5 + + "px; background:" + + cc.text + + "; left:4px; top:3px; height:" + + (this.h - 6) + + "px; width:" + + ww + + "px;" + ); + } + + this.init(); + } + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + if (l.x >= this.txl) return "text"; + else if (l.x >= this.sa) return "scroll"; + else return ""; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (this.isDown) this.isDown = false; + } + + mousedown(e) { + let name = this.testZone(e); + + if (!name) return false; + + if (name === "scroll") { + this.isDown = true; + this.old = this.value; + this.mousemove(e); + } + + /*if( name === 'text' ){ + this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); + }*/ + + return true; + } + + mousemove(e) { + let nup = false; + + let name = this.testZone(e); + + if (name === "scroll") { + this.mode(1); + this.cursor("w-resize"); + //} else if(name === 'text'){ + //this.cursor('pointer'); + } else { + this.cursor(); + } + + if (this.isDown) { + let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; + + // lo mapeo al rango 0 ... 1 + nNormalized = Math.min(1, Math.max(0, nNormalized)); + + // aplico easing + let nEased = Math.pow(nNormalized, this.easing); // easing + + let nNew = nEased * this.range + this.min; + let nNewSlider = nNormalized * this.range + this.min; + + this.sliderValue = this.numValue(nNewSlider); + + let delta = nNew - this.old; + + let steps; + if (delta >= this.step || delta <= this.step) { + steps = Math.floor(delta / this.step); + this.value = this.numValue(this.old + steps * this.step); + // value without easing applied + + this.update(true); + this.old = this.value; + } + //console.log("n, normalized, value", nNew, nNormalized, this.value); + nup = true; + } + + return nup; + } + + wheel(e) { + let name = this.testZone(e); + + if (name === "scroll") { + let v = this.value - this.step * e.delta; + + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue(v); + this.old = v; + this.update(true); + + return true; + } + + return false; + } + + //keydown: function ( e ) { return true; }, + + // ---------------------- + + validate() { + let n = this.c[2].textContent; + + if (!isNaN(n)) { + this.value = this.numValue(n); + this.update(true); + } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + } + + reset() { + //this.clearInput(); + this.isDown = false; + this.mode(0); + } + + mode(mode) { + let s = this.s; + let cc = this.colors; + + switch (mode) { + case 0: // base + // s[2].border = '1px solid ' + this.colors.hide; + s[2].color = cc.text; + s[4].background = cc.back; + s[5].background = cc.text; + if (this.model !== 0) s[6].background = cc.text; //cc.button; + break; + case 1: // scroll over + //s[2].border = '1px dashed ' + this.colors.hide; + s[2].color = cc.textOver; + s[4].background = cc.back; + s[5].background = cc.textOver; + if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; + break; + } + } + + update(up) { + let normalized = (this.value - this.min) / this.range; + + let uneased = + this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); + + let ww = Math.floor(this.ww * uneased); + //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); + + if (this.model !== 3) this.s[5].width = ww + "px"; + if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; + this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + + if (up) this.send(); + } + + rSize() { + super.rSize(); + + let w = this.sb - this.sc; + this.ww = w - 6; + + let tx = this.sc; + if (this.isUI || !this.simple) tx = this.sc + 10; + this.txl = this.w - tx + 2; + + //let ty = Math.floor(this.h * 0.5) - 8; + + let s = this.s; + + s[2].width = this.sc - 6 + "px"; + s[2].left = this.txl + 4 + "px"; + //s[2].top = ty + 'px'; + s[3].left = this.sa + "px"; + s[3].width = w + "px"; + s[4].left = this.sa + "px"; + s[4].width = w + "px"; + s[5].left = this.sa + 3 + "px"; + + this.update(); + } } - class TextInput extends Proto { - constructor(o = {}) { - super(o); - this.cmode = 0; - this.value = o.value !== undefined ? o.value : ''; - this.placeHolder = o.placeHolder || ''; - this.allway = o.allway || false; - this.editable = o.edit !== undefined ? o.edit : true; - this.isDown = false; - let cc = this.colors; - - // text - this.c[2] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border + '; border-radius:' + this.radius + 'px;'); - this.c[2].textContent = this.value; - - // selection - this.c[3] = this.dom('div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h - 4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.c[4] = this.dom('div', this.css.basic + 'top:2px; height:' + (this.h - 4) + 'px; width:0px; background:' + cc.text + ';'); - - // fake - this.c[5] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; border:none; justify-content: center; font-style: italic; color:' + cc.border + ';'); - if (this.value === '') this.c[5].textContent = this.placeHolder; - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.x >= this.sa) return 'text'; - return ''; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (!this.editable) return; - if (this.isDown) { - this.isDown = false; - return this.mousemove(e); - } - return false; - } - mousedown(e) { - if (!this.editable) return; - let name = this.testZone(e); - if (!this.isDown) { - this.isDown = true; - if (name === 'text') this.setInput(this.c[2]); - return this.mousemove(e); - } - return false; - } - mousemove(e) { - if (!this.editable) return; - let name = this.testZone(e); - - //let l = this.local; - //if( l.x === -1 && l.y === -1 ){ return;} - - //if( l.x >= this.sa ) this.cursor('text'); - //else this.cursor(); - - let x = 0; - if (name === 'text') this.cursor('text');else this.cursor(); - if (this.isDown) x = e.clientX - this.zone.x; - return this.upInput(x - this.sa - 3, this.isDown); - } - update() { - this.c[2].textContent = this.value; - } - - // ---------------------- - - reset() { - this.cursor(); - } - - // ---------------------- - // INPUT - // ---------------------- - - select(c, e, w, t) { - let s = this.s; - let d = this.sa + 5; - s[4].width = '1px'; - s[4].left = d + e + 'px'; - s[3].left = d + e + 'px'; - s[3].width = w + 'px'; - this.c[3].innerHTML = t; - } - unselect() { - let s = this.s; - if (!s) return; - s[3].width = 0 + 'px'; - this.c[3].innerHTML = 't'; - s[4].width = 0 + 'px'; - } - validate(force) { - if (this.allway) force = true; - this.value = this.c[2].textContent; - if (this.value !== '') this.c[5].textContent = '';else this.c[5].textContent = this.placeHolder; - if (!force) return; - this.send(); - } - - // ---------------------- - // REZISE - // ---------------------- - - rSize() { - super.rSize(); - let s = this.s; - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - s[5].left = this.sa + 'px'; - s[5].width = this.sb + 'px'; - } + class TextInput extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.cmode = 0; + + this.value = o.value !== undefined ? o.value : ''; + this.placeHolder = o.placeHolder || ''; + + this.allway = o.allway || false; + this.editable = o.edit !== undefined ? o.edit : true; + + this.isDown = false; + + let cc = this.colors; + + // text + this.c[2] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[2].textContent = this.value; + + // selection + this.c[3] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.c[4] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + // fake + this.c[5] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; border:none; justify-content: center; font-style: italic; color:'+cc.border+';' ); + if( this.value === '' ) this.c[5].textContent = this.placeHolder; + + + + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x >= this.sa ) return 'text'; + return ''; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if(!this.editable) return; + + if( this.isDown ){ + this.isDown = false; + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + if( !this.isDown ){ + this.isDown = true; + if( name === 'text' ) this.setInput( this.c[2] ); + return this.mousemove( e ); + } + + return false; + + } + + mousemove ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + //let l = this.local; + //if( l.x === -1 && l.y === -1 ){ return;} + + //if( l.x >= this.sa ) this.cursor('text'); + //else this.cursor(); + + let x = 0; + + if( name === 'text' ) this.cursor('text'); + else this.cursor(); + + if( this.isDown ) x = e.clientX - this.zone.x; + + return this.upInput( x - this.sa -3, this.isDown ); + + } + + update ( ) { + + this.c[2].textContent = this.value; + + } + + // ---------------------- + + reset () { + + this.cursor(); + + } + + // ---------------------- + // INPUT + // ---------------------- + + select ( c, e, w, t ) { + + let s = this.s; + let d = this.sa + 5; + s[4].width = '1px'; + s[4].left = ( d + e ) + 'px'; + + s[3].left = ( d + e ) + 'px'; + s[3].width = w + 'px'; + this.c[3].innerHTML = t; + + } + + unselect () { + + let s = this.s; + if(!s) return; + s[3].width = 0 + 'px'; + this.c[3].innerHTML = 't'; + s[4].width = 0 + 'px'; + + } + + validate ( force ) { + + if( this.allway ) force = true; + + this.value = this.c[2].textContent; + + if(this.value !== '') this.c[5].textContent = ''; + else this.c[5].textContent = this.placeHolder; + + if( !force ) return; + + this.send(); + + } + + // ---------------------- + // REZISE + // ---------------------- + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + + s[5].left = this.sa + 'px'; + s[5].width = this.sb + 'px'; + + } + + } - class Title extends Proto { - constructor(o = {}) { - super(o); - let prefix = o.prefix || ''; - this.c[2] = this.dom('div', this.css.txt + 'justify-content:right; width:60px; line-height:' + (this.h - 8) + 'px; color:' + this.colors.text); - if (this.h === 31) { - this.s[0].height = this.h + 'px'; - this.s[1].top = 8 + 'px'; - this.c[2].style.top = 8 + 'px'; - } - let s = this.s; - s[1].justifyContent = o.align || 'left'; - //s[1].textAlign = o.align || 'left'; - s[1].fontWeight = o.fontWeight || 'bold'; - this.c[1].textContent = this.txt.substring(0, 1).toUpperCase() + this.txt.substring(1).replace("-", " "); - this.c[2].textContent = prefix; - this.init(); - } - text(txt) { - this.c[1].textContent = txt; - } - text2(txt) { - this.c[2].textContent = txt; - } - rSize() { - super.rSize(); - this.s[1].width = this.w + 'px'; //- 50 + 'px'; - this.s[2].left = this.w + 'px'; //- ( 50 + 26 ) + 'px'; - } - setColor(c) { - this.s[1].color = c; - this.s[2].color = c; - } + class Title extends Proto { + + constructor( o = {} ) { + + super( o ); + + let prefix = o.prefix || ''; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:right; width:60px; line-height:'+ (this.h-8) + 'px; color:' + this.colors.text ); + + if( this.h === 31 ){ + + this.s[0].height = this.h + 'px'; + this.s[1].top = 8 + 'px'; + this.c[2].style.top = 8 + 'px'; + + } + + let s = this.s; + + s[1].justifyContent = o.align || 'left'; + //s[1].textAlign = o.align || 'left'; + s[1].fontWeight = o.fontWeight || 'bold'; + + + this.c[1].textContent = this.txt.substring(0,1).toUpperCase() + this.txt.substring(1).replace("-", " "); + this.c[2].textContent = prefix; + + this.init(); + + } + + text( txt ) { + + this.c[1].textContent = txt; + + } + + text2( txt ) { + + this.c[2].textContent = txt; + + } + + rSize() { + + super.rSize(); + this.s[1].width = this.w + 'px'; //- 50 + 'px'; + this.s[2].left = this.w + 'px';//- ( 50 + 26 ) + 'px'; + + } + + setColor( c ) { + this.s[1].color = c; + this.s[2].color = c; + } + } - class Select extends Proto { - constructor(o = {}) { - super(o); - this.value = o.value || ''; - this.isDown = false; - this.onActif = o.onActif || function () {}; - - //let prefix = o.prefix || ''; - const cc = this.colors; - this.c[2] = this.dom('div', this.css.txt + this.css.button + ' top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.buttonBorder + '; border-radius:15px; width:30px; left:10px;'); - //this.c[2].style.color = this.fontColor; - - this.c[3] = this.dom('div', this.css.txtselect + 'height:' + (this.h - 4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder + '; border-radius:' + this.radius + 'px;'); - this.c[3].textContent = this.value; - let fltop = Math.floor(this.h * 0.5) - 7; - this.c[4] = this.dom('path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:' + fltop + 'px;', { - d: this.svgs['cursor'], - fill: cc.text, - stroke: 'none' - }); - this.stat = 1; - this.isActif = false; - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.x > this.sa && l.x < this.sa + 30) return 'over'; - return '0'; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (this.isDown) { - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove(e); - } - return false; - } - mousedown(e) { - let name = this.testZone(e); - if (!name) return false; - this.isDown = true; - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove(e); - } - mousemove(e) { - let up = false; - let name = this.testZone(e); - if (name === 'over') { - this.cursor('pointer'); - up = this.mode(this.isDown ? 3 : 2); - } else { - up = this.reset(); - } - return up; - } - - // ---------------------- - - apply(v) { - v = v || ''; - if (v !== this.value) { - this.value = v; - this.c[3].textContent = this.value; - this.send(); - } - this.mode(1); - } - update() { - this.mode(3); - } - mode(n) { - let change = false; - let cc = this.colors; - if (this.stat !== n) { - if (n === 1) this.isActif = false; - if (n === 3) { - if (!this.isActif) { - this.isActif = true; - n = 4; - this.onActif(this); - } else { - this.isActif = false; - } - } - if (n === 2 && this.isActif) n = 4; - this.stat = n; - switch (n) { - case 1: - this.s[2].color = cc.text; - this.s[2].background = cc.button; - break; - // base - case 2: - this.s[2].color = cc.textOver; - this.s[2].background = cc.overoff; - break; - // over - case 3: - this.s[2].color = cc.textOver; - this.s[2].background = cc.action; - break; - // down - case 4: - this.s[2].color = cc.textSelect; - this.s[2].background = cc.action; - break; - // actif - } - change = true; - } - return change; - } - reset() { - this.cursor(); - return this.mode(this.isActif ? 4 : 1); - } - text(txt) { - this.c[3].textContent = txt; - } - rSize() { - super.rSize(); - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = this.sa + 40 + 'px'; - s[3].width = this.sb - 40 + 'px'; - s[4].left = this.sa + 8 + 'px'; - } + class Select extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.isDown = false; + this.onActif = o.onActif || function(){}; + + //let prefix = o.prefix || ''; + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+ cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + //this.c[2].style.color = this.fontColor; + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'cursor' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + this.isActif = false; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + if( l.x > this.sa && l.x < this.sa+30 ) return 'over' + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ) + } + + return false + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false + + this.isDown = true; + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + this.send(); + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + if( n===1 ) this.isActif = false; + if( n===3 ){ + if( !this.isActif ){ this.isActif = true; n=4; this.onActif( this ); } + else { this.isActif = false; } + } + + if( n===2 && this.isActif ) n = 4; + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.action; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.action; break; // actif + + } + + change = true; + + } + + return change + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ) + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + } - class Bitmap extends Proto { - constructor(o = {}) { - super(o); - this.value = o.value || ''; - this.refTexture = o.texture || null; - this.img = null; - this.isDown = false; - this.neverlock = true; - const cc = this.colors; - this.c[2] = this.dom('div', this.css.txt + this.css.button + ' top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.buttonBorder + '; border-radius:15px; width:30px; left:10px;'); - this.c[3] = this.dom('div', this.css.txtselect + 'height:' + (this.h - 4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder + '; border-radius:' + this.radius + 'px;'); - this.c[3].textContent = this.value; - let fltop = Math.floor(this.h * 0.5) - 7; - this.c[4] = this.dom('path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:' + fltop + 'px;', { - d: this.svgs['load'], - fill: cc.text, - stroke: 'none' - }); - this.stat = 1; - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.x > this.sa && l.x < this.sa + 30) return 'over'; - return '0'; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (this.isDown) { - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove(e); - } - return false; - } - mousedown(e) { - let name = this.testZone(e); - if (!name) return false; - if (name === 'over') { - this.isDown = true; - Files.load({ - callback: this.changeBitmap.bind(this) - }); - } - - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove(e); - } - mousemove(e) { - let up = false; - let name = this.testZone(e); - if (name === 'over') { - this.cursor('pointer'); - up = this.mode(this.isDown ? 3 : 2); - } else { - up = this.reset(); - } - return up; - } - - // ---------------------- - - changeBitmap(img, fname) { - if (img) { - this.img = img; - this.apply(fname); - } else { - this.img = null; - this.apply('null'); - } - } - - // ---------------------- - - apply(v) { - v = v || ''; - if (v !== this.value) { - this.value = v; - this.c[3].textContent = this.value; - if (this.img !== null) { - if (this.objectLink !== null) this.objectLink[this.val] = v; - if (this.callback) this.callback(this.value, this.img, this.name); - } - } - this.mode(1); - } - update() { - this.mode(3); - } - mode(n) { - let change = false; - let cc = this.colors; - if (this.stat !== n) { - this.stat = n; - switch (n) { - case 1: - this.s[2].color = cc.text; - this.s[2].background = cc.button; - break; - // base - case 2: - this.s[2].color = cc.textOver; - this.s[2].background = cc.overoff; - break; - // over - case 3: - this.s[2].color = cc.textOver; - this.s[2].background = cc.over; - break; - // down - case 4: - this.s[2].color = cc.textSelect; - this.s[2].background = cc.select; - break; - // actif - } - change = true; - } - return change; - } - reset() { - this.cursor(); - return this.mode(this.isActif ? 4 : 1); - } - text(txt) { - this.c[3].textContent = txt; - } - rSize() { - super.rSize(); - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = this.sa + 40 + 'px'; - s[3].width = this.sb - 40 + 'px'; - s[4].left = this.sa + 8 + 'px'; - } + class Bitmap extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.refTexture = o.texture || null; + this.img = null; + + this.isDown = false; + this.neverlock = true; + + + + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'load' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x > this.sa && l.x < this.sa+30 ) return 'over'; + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'over' ){ + this.isDown = true; + Files.load( { callback:this.changeBitmap.bind(this) } ); + + } + + + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ); + + } + + mousemove ( e ) { + + let up = false; + + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + + changeBitmap( img, fname ){ + + if( img ){ + this.img = img; + this.apply( fname ); + } else { + this.img = null; + this.apply( 'null' ); + } + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + + if( this.img !== null ){ + if( this.objectLink !== null ) this.objectLink[ this.val ] = v; + if( this.callback ) this.callback( this.value, this.img, this.name ); + } + + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.over; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.select; break; // actif + + } + + change = true; + + } + + return change; + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ); + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + } - //import { Proto } from '../core/Proto.js'; - class Selector extends Button { - constructor(o = {}) { - if (o.selectable === undefined) o.selectable = true; - super(o); - } + //import { Proto } from '../core/Proto.js'; + + class Selector extends Button { + + constructor( o = {} ) { + + if( o.selectable === undefined ) o.selectable = true; + super( o ); + + } + } - class Item extends Proto { - constructor(o = {}) { - super(o); - this.p = 100; - this.value = this.txt; - this.status = 1; - this.itype = o.itype || 'none'; - this.val = this.itype; - this.graph = this.svgs[this.itype]; - let fltop = Math.floor(this.h * 0.5) - 7; - this.c[2] = this.dom('path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:' + fltop + 'px;', { - d: this.graph, - fill: this.colors.text, - stroke: 'none' - }); - this.s[1].marginLeft = 20 + 'px'; - this.init(); - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousemove(e) { - this.cursor('pointer'); - - //up = this.modes( this.isDown ? 3 : 2, name ); - } - mousedown(e) { - if (this.isUI) this.main.resetItem(); - this.selected(true); - this.send(); - return true; - } - uiout() { - if (this.isSelect) this.mode(3);else this.mode(1); - } - uiover() { - if (this.isSelect) this.mode(4);else this.mode(2); - } - update() {} - - /*rSize () { - - super.rSize(); - }*/ - - mode(n) { - let change = false; - if (this.status !== n) { - this.status = n; - let s = this.s, - cc = this.colors; - switch (n) { - case 1: - this.status = 1; - s[1].color = cc.text; - s[0].background = 'none'; - break; - case 2: - this.status = 2; - s[1].color = cc.textOver; - s[0].background = cc.back; - break; - case 3: - this.status = 3; - s[1].color = cc.textSelect; - s[0].background = cc.select; - break; - case 4: - this.status = 4; - s[1].color = cc.textOver; - s[0].background = cc.over; - break; - } - change = true; - } - return change; - } - reset() { - this.cursor(); - // return this.mode( 1 ); - } - selected(b) { - if (this.isSelect) this.mode(1); - this.isSelect = b || false; - if (this.isSelect) this.mode(3); - } + class Item extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.p = 100; + this.value = this.txt; + this.status = 1; + + this.itype = o.itype || 'none'; + this.val = this.itype; + + this.graph = this.svgs[ this.itype ]; + + let fltop = Math.floor(this.h*0.5)-7; + + this.c[2] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.graph, fill:this.colors.text, stroke:'none'}); + + this.s[1].marginLeft = 20 + 'px'; + + this.init(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousemove ( e ) { + + this.cursor('pointer'); + + //up = this.modes( this.isDown ? 3 : 2, name ); + + } + + mousedown ( e ) { + + if( this.isUI ) this.main.resetItem(); + + this.selected( true ); + + this.send(); + + return true; + + } + + uiout () { + + if( this.isSelect ) this.mode(3); + else this.mode(1); + + } + + uiover () { + + if( this.isSelect ) this.mode(4); + else this.mode(2); + + } + + update () { + + } + + /*rSize () { + + super.rSize(); + + }*/ + + mode ( n ) { + + let change = false; + + if( this.status !== n ){ + + this.status = n; + let s = this.s, cc = this.colors; + + switch( n ){ + + case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; + case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; + case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; + case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; + + } + + change = true; + + } + + return change; + + } + + reset () { + + this.cursor(); + // return this.mode( 1 ); + + } + + selected ( b ){ + + if( this.isSelect ) this.mode(1); + + this.isSelect = b || false; + + if( this.isSelect ) this.mode(3); + + } + + } - class Grid extends Proto { - constructor(o = {}) { - super(o); - - /*this.values = o.values || []; - if( typeof this.values === 'string' ) this.values = [ this.values ];*/ - - this.values = []; - if (o.values) { - if (o.values instanceof Array) { - this.values = o.values; - } else if (o.values instanceof String) { - this.values = [o.values]; - } else if (o.values instanceof Object) { - this.refObject = o.values; - for (let g in this.refObject) this.values.push(g); - } - } - this.lng = this.values.length; - this.value = o.value || null; - let cc = this.colors; - this.isSelectable = o.selectable || false; - this.spaces = o.spaces || [cc.sx, cc.sy]; - this.bsize = o.bsize || [90, this.h]; - this.bsizeMax = this.bsize[0]; - this.tmp = []; - this.stat = []; - this.grid = [2, Math.round(this.lng * 0.5)]; - this.h = this.grid[1] * this.bsize[1] + this.grid[1] * this.spaces[1]; //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); - - this.c[1].textContent = ''; - //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); - this.c[2] = this.dom('table', this.css.basic + 'width:100%; border-spacing: ' + (this.spaces[0] - 2) + 'px ' + this.spaces[1] + 'px; border:none;'); - let n = 0, - b, - td, - tr, - sel; - this.res = -1; - this.isDown = false; - this.neverlock = true; - this.buttons = []; - this.stat = []; - this.tmpX = []; - this.tmpY = []; - for (let i = 0; i < this.grid[1]; i++) { - tr = this.c[2].insertRow(); - tr.style.cssText = 'pointer-events:none;'; - for (let j = 0; j < this.grid[0]; j++) { - td = tr.insertCell(); - td.style.cssText = 'pointer-events:none;'; - if (this.values[n]) { - sel = false; - if (this.values[n] === this.value && this.isSelectable) sel = true; - b = document.createElement('div'); - b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:' + this.bsize[0] + 'px; height:' + (this.bsize[1] - 2) + 'px; border:' + cc.borderSize + 'px solid ' + cc.border + '; left:auto; right:auto; border-radius:' + this.radius + 'px;'; - b.style.background = sel ? cc.select : cc.button; - b.style.color = sel ? cc.textSelect : cc.text; - b.innerHTML = this.values[n]; - td.appendChild(b); - this.buttons.push(b); - this.stat.push(1); - } else { - b = document.createElement('div'); - b.style.cssText = this.css.txt + 'position:static; width:' + this.bsize[0] + 'px; height:' + this.bsize[1] + 'px; text-align:center; left:auto; right:auto; background:none;'; - td.appendChild(b); - } - if (j === 0) b.style.cssText += 'float:right;';else b.style.cssText += 'float:left;'; - n++; - } - } - this.s[0].border = 'none'; - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return -1; - l.y += this.mtop; - let tx = this.tmpX; - let ty = this.tmpY; - let id = -1; - let c = -1; - let line = -1; - let i = this.grid[0]; - while (i--) { - if (l.x > tx[i][0] && l.x < tx[i][1]) c = i; - } - i = this.grid[1]; - while (i--) { - if (l.y > ty[i][0] && l.y < ty[i][1]) line = i; - } - if (c !== -1 && line !== -1) { - id = c + line * 2; - if (id > this.lng - 1) id = -1; - } - return id; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (!this.isDown) return false; - this.isDown = false; - if (this.res !== -1) { - this.value = this.values[this.res]; - this.send(); - } - return this.mousemove(e); - } - mousedown(e) { - if (this.isDown) return false; - this.isDown = true; - return this.mousemove(e); - } - mousemove(e) { - let up = false; - this.res = this.testZone(e); - if (this.res !== -1) { - this.cursor('pointer'); - up = this.modes(this.isDown ? 3 : 2, this.res); - } else { - up = this.reset(); - } - return up; - } - - // ---------------------- - // MODE - // ----------------------- - - modes(N = 1, id = -1) { - let i = this.lng, - w, - n, - r = false; - while (i--) { - n = N; - w = this.isSelectable ? this.values[i] === this.value : false; - if (i === id) { - if (w && n === 2) n = 3; - } else { - n = 1; - if (w) n = 4; - } - if (this.mode(n, i)) r = true; - } - return r; - } - mode(n, id) { - let change = false; - let cc = this.colors, - s = this.buttons; - let i = id; - if (this.stat[id] !== n) { - this.stat[id] = n; - switch (n) { - case 1: - s[i].style.color = cc.text; - s[i].style.background = cc.button; - break; - case 2: - s[i].style.color = cc.textOver; - s[i].style.background = cc.overoff; - break; - case 3: - s[i].style.color = cc.textOver; - s[i].style.background = cc.over; - break; - case 4: - s[i].style.color = cc.textSelect; - s[i].style.background = cc.select; - break; - } - change = true; - } - return change; - } - - // ---------------------- - - reset() { - this.res = -1; - this.cursor(); - return this.modes(); - } - label(string, n) { - this.buttons[n].textContent = string; - } - icon(string, y, n) { - this.buttons[n].style.padding = (y || 0) + 'px 0px'; - this.buttons[n].innerHTML = string; - } - testW() { - let vw = this.spaces[0] * 3 + this.bsizeMax * 2, - rz = false; - if (vw > this.w) { - this.bsize[0] = (this.w - this.spaces[0] * 3) * 0.5; - rz = true; - } else { - if (this.bsize[0] !== this.bsizeMax) { - this.bsize[0] = this.bsizeMax; - rz = true; - } - } - if (!rz) return; - let i = this.buttons.length; - while (i--) this.buttons[i].style.width = this.bsize[0] + 'px'; - } - rSize() { - super.rSize(); - this.testW(); - let mid; - this.tmpX = []; - this.tmpY = []; - for (let j = 0; j < this.grid[0]; j++) { - if (j === 0) { - mid = this.w * 0.5 - this.spaces[0] * 0.5; - this.tmpX.push([mid - this.bsize[0], mid]); - } else { - mid = this.w * 0.5 + this.spaces[0] * 0.5; - this.tmpX.push([mid, mid + this.bsize[0]]); - } - } - mid = this.spaces[1]; - for (let i = 0; i < this.grid[1]; i++) { - this.tmpY.push([mid, mid + this.bsize[1]]); - mid += this.bsize[1] + this.spaces[1]; - } - } + class Grid extends Proto { + + constructor( o = {} ) { + + super( o ); + + /*this.values = o.values || []; + + if( typeof this.values === 'string' ) this.values = [ this.values ];*/ + + this.values = []; + + if( o.values ){ + if( o.values instanceof Array ){ + this.values = o.values; + } else if( o.values instanceof String ){ + this.values = [ o.values ]; + } else if( o.values instanceof Object ){ + this.refObject = o.values; + for( let g in this.refObject ) this.values.push( g ); + } + } + + this.lng = this.values.length; + + + + this.value = o.value || null; + + + + + let cc = this.colors; + + + this.isSelectable = o.selectable || false; + this.spaces = o.spaces || [ cc.sx, cc.sy ]; + this.bsize = o.bsize || [ 90, this.h ]; + + this.bsizeMax = this.bsize[0]; + + this.tmp = []; + this.stat = []; + this.grid = [ 2, Math.round( this.lng * 0.5 ) ]; + + this.h = ( this.grid[1] * this.bsize[1] ) + ( this.grid[1] * this.spaces[1] ); //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); + + this.c[1].textContent = ''; + //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); + this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1])+'px; border:none;' ); + + let n = 0, b, td, tr, sel; + + this.res = -1; + this.isDown = false; + this.neverlock = true; + + this.buttons = []; + this.stat = []; + this.tmpX = []; + this.tmpY = []; + + for( let i = 0; i < this.grid[1]; i++ ){ + + tr = this.c[2].insertRow(); + tr.style.cssText = 'pointer-events:none;'; + for( let j = 0; j < this.grid[0]; j++ ){ + + td = tr.insertCell(); + td.style.cssText = 'pointer-events:none;'; + + if( this.values[n] ){ + + sel = false; + if( this.values[n] === this.value && this.isSelectable ) sel = true; + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:'+this.bsize[0]+'px; height:'+(this.bsize[1]-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; left:auto; right:auto; border-radius:'+this.radius+'px;'; + b.style.background = sel ? cc.select : cc.button; + b.style.color = sel ? cc.textSelect : cc.text; + b.innerHTML = this.values[n]; + td.appendChild( b ); + + this.buttons.push(b); + this.stat.push(1); + + } else { + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + 'position:static; width:'+this.bsize[0]+'px; height:'+this.bsize[1]+'px; text-align:center; left:auto; right:auto; background:none;'; + td.appendChild( b ); + + } + + if(j===0) b.style.cssText += 'float:right;'; + else b.style.cssText += 'float:left;'; + + n++; + + } + } + + this.s[0].border = 'none'; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1; + + l.y += this.mtop; + + let tx = this.tmpX; + let ty = this.tmpY; + + let id = -1; + let c = -1; + let line = -1; + let i = this.grid[0]; + while( i-- ){ + if( l.x > tx[i][0] && l.x < tx[i][1] ) c = i; + } + + i = this.grid[1]; + while( i-- ){ + if( l.y > ty[i][0] && l.y < ty[i][1] ) line = i; + } + + if(c!==-1 && line!==-1){ + id = c + (line*2); + if(id>this.lng-1) id = -1; + } + + return id; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( !this.isDown ) return false + + this.isDown = false; + if( this.res !== -1 ){ + this.value = this.values[this.res]; + this.send(); + } + + return this.mousemove( e ) + + } + + mousedown ( e ) { + + if( this.isDown ) return false + this.isDown = true; + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + this.res = this.testZone( e ); + + if( this.res !== -1 ){ + this.cursor('pointer'); + up = this.modes( this.isDown ? 3 : 2, this.res ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + // MODE + // ----------------------- + + modes ( N = 1, id = -1 ) { + + let i = this.lng, w, n, r = false; + + while( i-- ){ + + n = N; + w = this.isSelectable ? this.values[ i ] === this.value : false; + + if( i === id ){ + if( w && n === 2 ) n = 3; + } else { + n = 1; + if( w ) n = 4; + } + + if( this.mode( n, i ) ) r = true; + + } + + return r + + } + + mode ( n, id ) { + + let change = false; + let cc = this.colors, s = this.buttons; + let i = id; + + if( this.stat[id] !== n ){ + + this.stat[id] = n; + + switch( n ){ + + case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; + case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; + case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; + case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; + + } + + change = true; + + } + + return change; + + } + + // ---------------------- + + reset () { + + this.res = -1; + this.cursor(); + return this.modes() + + } + + + label ( string, n ) { + + this.buttons[n].textContent = string; + + } + + icon ( string, y, n ) { + + this.buttons[n].style.padding = ( y || 0 ) +'px 0px'; + this.buttons[n].innerHTML = string; + + } + + testW () { + + let vw = this.spaces[0]*3 + this.bsizeMax*2, rz = false; + if( vw > this.w ) { + this.bsize[0] = ( this.w-(this.spaces[0]*3) ) * 0.5; + rz = true; + } else { + if( this.bsize[0] !== this.bsizeMax ) { + this.bsize[0] = this.bsizeMax; + rz = true; + } + } + + if( !rz ) return; + + let i = this.buttons.length; + while(i--) this.buttons[i].style.width = this.bsize[0] + 'px'; + + } + + rSize () { + + super.rSize(); + + this.testW(); + + let mid; + + this.tmpX = []; + this.tmpY = []; + + for( let j = 0; j < this.grid[0]; j++ ){ + + if(j===0){ + mid = ( this.w*0.5 ) - ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid-this.bsize[0], mid ] ); + } else { + mid = ( this.w*0.5 ) + ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid, mid+this.bsize[0] ] ); + } + + } + + mid = this.spaces[1]; + + for( let i = 0; i < this.grid[1]; i++ ){ + + this.tmpY.push( [ mid, mid + this.bsize[1] ] ); + mid += this.bsize[1] + this.spaces[1]; + + } + + } + } - class Pad2D extends Proto { - constructor(o = {}) { - super(o); - this.autoWidth = false; - this.minw = this.w; - this.diam = o.diam || this.w; - - //this.margin = 15; - this.pos = new V2(0, 0); - this.maxPos = 90; - this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; - this.min = o.min === undefined ? -1 : o.min; - this.max = o.max === undefined ? 1 : o.max; - this.range = (this.max - this.min) * 0.5; - this.cmode = 0; - - //console.log(this.range) - - this.c[0].style.display = 'block'; - this.precision = o.precision === undefined ? 2 : o.precision; - - /*this.bounds = {}; - this.bounds.x1 = o.x1 || -1; - this.bounds.x2 = o.x2 || 1; - this.bounds.y1 = o.y1 || -1; - this.bounds.y2 = o.y2 || 1; - this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); - this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); - this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); - this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ - - this.value = Array.isArray(o.value) && o.value.length == 2 ? o.value : [0, 0]; - this.h = o.h || this.w + 10; - this.c[0].style.width = this.w + 'px'; - - // Title - if (this.c[1] !== undefined) { - // with title - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - } - - //this.top -= this.margin - - let cc = this.colors; - - // Value - this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); - this.c[2].textContent = this.value; - - // Pad - - let pad = this.getPad2d(); - this.setSvg(pad, 'fill', cc.back, 0); - this.setSvg(pad, 'fill', cc.button, 1); - this.setSvg(pad, 'stroke', cc.back, 2); - this.setSvg(pad, 'stroke', cc.back, 3); - this.setSvg(pad, 'stroke', cc.text, 4); - this.setSvg(pad, 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); - this.setCss(pad, { - width: this.diam, - height: this.diam, - left: 0, - top: this.top - }); - this.c[3] = pad; - this.init(); - this.setValue(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'pad'; - - /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { - return 'pad'; - }*/ - - //return ''; - } - mouseup(e) { - this.isDown = false; - return this.mode(0); - } - mousedown(e) { - if (this.testZone(e) === 'pad') { - this.isDown = true; - this.mousemove(e); - return this.mode(1); - } - } - mousemove(e) { - if (!this.isDown) return; - let x = this.w * 0.5 - (e.clientX - this.zone.x); - let y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); - let r = 256 / this.diam; - x = -(x * r); - y = -(y * r); - x = Tools.clamp(x, -this.maxPos, this.maxPos); - y = Tools.clamp(y, -this.maxPos, this.maxPos); - - //let x = e.clientX - this.zone.x; - //let y = e.clientY - this.zone.y - this.top; - - /*if( x < this.margin ) x = this.margin; - if( x > this.w - this.margin ) x = this.w - this.margin; - if( y < this.margin ) y = this.margin; - if( y > this.w - this.margin ) y = this.w - this.margin;*/ - - //console.log(x,y) - - this.setPos([x, y]); - this.update(true); - } - mode(mode) { - if (this.cmode === mode) return false; - let cc = this.colors; - switch (mode) { - case 0: - // base - - this.s[2].color = cc.text; - this.setSvg(this.c[3], 'fill', cc.back, 0); - this.setSvg(this.c[3], 'fill', cc.button, 1); - this.setSvg(this.c[3], 'stroke', cc.back, 2); - this.setSvg(this.c[3], 'stroke', cc.back, 3); - this.setSvg(this.c[3], 'stroke', cc.text, 4); - break; - case 1: - // down - - this.s[2].color = cc.textSelect; - this.setSvg(this.c[3], 'fill', cc.backoff, 0); - this.setSvg(this.c[3], 'fill', cc.overoff, 1); - this.setSvg(this.c[3], 'stroke', cc.backoff, 2); - this.setSvg(this.c[3], 'stroke', cc.backoff, 3); - this.setSvg(this.c[3], 'stroke', cc.textSelect, 4); - break; - } - this.cmode = mode; - return true; - } - update(up) { - //if( up === undefined ) up = true; - - this.c[2].textContent = this.value; - this.updateSVG(); - if (up) this.send(); - } - updateSVG() { - if (this.model == 1) { - this.setSvg(this.c[3], 'y1', this.pos.y, 2); - this.setSvg(this.c[3], 'y2', this.pos.y, 2); - this.setSvg(this.c[3], 'x1', this.pos.x, 3); - this.setSvg(this.c[3], 'x2', this.pos.x, 3); - } - this.setSvg(this.c[3], 'cx', this.pos.x, 4); - this.setSvg(this.c[3], 'cy', this.pos.y, 4); - } - setPos(p) { - //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; - - this.pos.set(p[0] + 128, p[1] + 128); - let r = 1 / this.maxPos; - this.value[0] = (p[0] * r * this.range).toFixed(this.precision); - this.value[1] = (p[1] * r * this.range).toFixed(this.precision); - } - setValue(v, up = false) { - if (v === undefined) v = this.value; - - /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; - if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; - if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; - if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ - - this.value[0] = Math.min(this.max, Math.max(this.min, v[0])).toFixed(this.precision) * 1; - this.value[1] = Math.min(this.max, Math.max(this.min, v[1])).toFixed(this.precision) * 1; - this.pos.set(this.value[0] / this.range * this.maxPos + 128, this.value[1] / this.range * this.maxPos + 128); - - //console.log(this.pos) - - this.update(up); - } - - /*lerp( s1, s2, d1, d2, c = true ) { - let s = ( d2 - d1 ) / ( s2 - s1 ); - return c ? ( v ) => { - return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 - } : ( v ) => { - return ( v - s1 ) * s + d1 - } - }*/ + class Pad2D extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + + //this.margin = 15; + this.pos = new V2(0,0); + this.maxPos = 90; + + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.min = o.min === undefined ? -1 : o.min; + this.max = o.max === undefined ? 1 : o.max; + + this.range = (this.max - this.min)*0.5; + + this.cmode = 0; + + + //console.log(this.range) + + this.c[0].style.display = 'block'; + + + + + + this.precision = o.precision === undefined ? 2 : o.precision; + + /*this.bounds = {}; + this.bounds.x1 = o.x1 || -1; + this.bounds.x2 = o.x2 || 1; + this.bounds.y1 = o.y1 || -1; + this.bounds.y2 = o.y2 || 1; + + this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); + this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); + + this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); + this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ + + this.value = ( Array.isArray( o.value ) && o.value.length == 2 ) ? o.value : [ 0, 0 ]; + + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w + 'px'; + + // Title + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + //this.top -= this.margin + + let cc = this.colors; + + + // Value + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+ ( this.h - 20 ) + 'px; width:100%; color:' + cc.text ); + this.c[2].textContent = this.value; + + // Pad + + let pad = this.getPad2d(); + + this.setSvg( pad, 'fill', cc.back, 0 ); + this.setSvg( pad, 'fill', cc.button, 1 ); + this.setSvg( pad, 'stroke', cc.back, 2 ); + this.setSvg( pad, 'stroke', cc.back, 3 ); + this.setSvg( pad, 'stroke', cc.text, 4 ); + + this.setSvg( pad, 'viewBox', '0 0 '+this.diam+' '+this.diam ); + this.setCss( pad, { width:this.diam, height:this.diam, left:0, top:this.top }); + + this.c[3] = pad; + + this.init(); + this.setValue(); + + } + + testZone ( e ) { + + let l = this.local; + + if( l.x === -1 && l.y === -1 ) return ''; + + + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'pad'; + + /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { + return 'pad'; + }*/ + + //return ''; + + } + + mouseup ( e ) { + + this.isDown = false; + return this.mode(0); + + } + + mousedown ( e ) { + + if ( this.testZone(e) === 'pad' ) { + + this.isDown = true; + this.mousemove( e ); + return this.mode(1); + } + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let x = (this.w*0.5) - ( e.clientX - this.zone.x ); + let y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + + let r = 256 / this.diam; + + x = -(x*r); + y = -(y*r); + + x = Tools.clamp( x, -this.maxPos, this.maxPos ); + y = Tools.clamp( y, -this.maxPos, this.maxPos ); + + //let x = e.clientX - this.zone.x; + //let y = e.clientY - this.zone.y - this.top; + + /*if( x < this.margin ) x = this.margin; + if( x > this.w - this.margin ) x = this.w - this.margin; + if( y < this.margin ) y = this.margin; + if( y > this.w - this.margin ) y = this.w - this.margin;*/ + + //console.log(x,y) + + this.setPos( [ x , y ] ); + + this.update( true ); + + } + + mode ( mode ) { + + if( this.cmode === mode ) return false; + + let cc = this.colors; + + switch( mode ){ + case 0: // base + + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.back, 0); + this.setSvg( this.c[3], 'fill', cc.button, 1); + this.setSvg( this.c[3], 'stroke', cc.back, 2); + this.setSvg( this.c[3], 'stroke', cc.back, 3); + this.setSvg( this.c[3], 'stroke', cc.text, 4 ); + + break; + case 1: // down + + this.s[2].color = cc.textSelect; + this.setSvg( this.c[3], 'fill', cc.backoff, 0); + this.setSvg( this.c[3], 'fill', cc.overoff, 1); + this.setSvg( this.c[3], 'stroke', cc.backoff, 2); + this.setSvg( this.c[3], 'stroke', cc.backoff, 3); + this.setSvg( this.c[3], 'stroke', cc.textSelect, 4 ); + + break; + } + + this.cmode = mode; + return true; + + + + } + + update ( up ) { + + //if( up === undefined ) up = true; + + this.c[2].textContent = this.value; + + this.updateSVG(); + + if( up ) this.send(); + + } + + updateSVG() { + + if ( this.model == 1 ) { + + this.setSvg( this.c[3], 'y1', this.pos.y, 2 ); + this.setSvg( this.c[3], 'y2', this.pos.y, 2 ); + + this.setSvg( this.c[3], 'x1', this.pos.x, 3 ); + this.setSvg( this.c[3], 'x2', this.pos.x, 3 ); + + } + + this.setSvg( this.c[3], 'cx', this.pos.x, 4 ); + this.setSvg( this.c[3], 'cy', this.pos.y, 4 ); + + } + + setPos ( p ) { + + //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; + + this.pos.set( p[0]+128 , p[1]+128 ); + + let r = 1/this.maxPos; + + this.value[0] = ((p[0]*r)*this.range).toFixed( this.precision ); + this.value[1] = ((p[1]*r)*this.range).toFixed( this.precision ); + + } + + setValue ( v, up = false ) { + + if( v === undefined ) v = this.value; + + /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; + if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; + if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; + if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ + + this.value[0] = Math.min( this.max, Math.max( this.min, v[0] ) ).toFixed( this.precision ) * 1; + this.value[1] = Math.min( this.max, Math.max( this.min, v[1] ) ).toFixed( this.precision ) * 1; + + this.pos.set( ((this.value[0]/this.range)*this.maxPos)+128 , ((this.value[1]/this.range)*this.maxPos)+128 ); + + //console.log(this.pos) + + this.update( up ); + + } + + /*lerp( s1, s2, d1, d2, c = true ) { + + let s = ( d2 - d1 ) / ( s2 - s1 ); + + return c ? ( v ) => { + return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 + } : ( v ) => { + return ( v - s1 ) * s + d1 + } + + }*/ + } - const add = function () { - let a = arguments; - let type, - o, - ref = false, - n = null; - if (typeof a[0] === 'string') { - type = a[0]; - o = a[1] || {}; - } else if (typeof a[0] === 'object') { - // like dat gui + // proto/TreeList.js + + class TreeList extends Proto { + constructor(o = {}) { + // Propiedades públicas esperadas (API) + // o.tree (obj/array), o.value (array), o.focused (bool), + // o.focusPath (array), o.focusLevel (number), + // o.tabIndex, o.itemIndex, o.onChange (fn) + o.selectable = true; // navegable por teclado si activas flechas + o.name = o.name || 'TreeList'; + super(o); + + // Datos & estado + this.tree = o.tree || {}; + this.value = Array.isArray(o.value) ? o.value.slice() : []; + this.focused = !!o.focused; + this.focusPath = Array.isArray(o.focusPath) ? o.focusPath.slice() : []; + this.focusLevel = typeof o.focusLevel === 'number' ? o.focusLevel : -1; + + this.tabIndex = o.tabIndex ?? null; + this.itemIndex = o.itemIndex ?? null; + + // Callback de notificación + this.changeCb = typeof o.onChange === 'function' ? o.onChange : (/*tabIdx, itemIdx, newPath*/) => {}; + + // Layout interno + this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] + this.leafMax = 0; // alto reservado para el último nivel (máximo tamaño de hoja) + this.levelGap = 2; // gap vertical entre niveles + this.hItem = this.h; // alto por ítem + + // Hover / foco de mouse + this.hover = { level: -1, index: -1 }; + + // DOM visual (sin listeners directos; los eventos llegan vía Roots->handleEvent) + this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); // container interno + this.s[2] = this.c[2].style; + + // Inicializa nodos visuales de forma perezosa en rSize() + this.itemsDom = []; // mirror de this.levels (matriz de nodos) + + this.init(); + } + + // =============== Helpers de datos =============== + + static isMap(node) { return node && typeof node === 'object' && !Array.isArray(node); } + static isList(node) { return Array.isArray(node); } + + // Devuelve el subnodo al seguir path (se detiene si no existe) + getNodeAtPath(path) { + let node = this.tree; + for (let i = 0; i < path.length; i++) { + if (TreeList.isMap(node)) { + if (!Object.prototype.hasOwnProperty.call(node, path[i])) return { node: null, depth: i }; + node = node[path[i]]; + } else if (TreeList.isList(node)) { + // Al llegar a lista, ya no hay más descendencia válida para claves + if (i < path.length) return { node, depth: i }; + } else { + return { node: null, depth: i }; + } + } + return { node, depth: path.length }; + } + + // Autocompleta descendiendo por la primera clave de cada mapa hasta alcanzar una lista + autoCompleteToLeaf(basePath) { + let nodeInfo = this.getNodeAtPath(basePath); + let node = nodeInfo.node; + const path = basePath.slice(); + + while (TreeList.isMap(node)) { + const keys = Object.keys(node); + if (!keys.length) break; // mapa vacío + const k0 = keys[0]; + path.push(k0); + node = node[k0]; + } + // Si termina en lista, NO agrega selección final de elemento hoja + return path; + } + + // Ruta activa para construir niveles (focusPath si focused, si no value) + getActivePath() { + return this.focused ? this.focusPath : this.value; + } + + // Calcula el máximo tamaño de hoja del árbol (para reservar alto estable) + computeLeafMax(node = this.tree) { + if (TreeList.isList(node)) return node.length; + if (!TreeList.isMap(node)) return 0; + let m = 0; + for (const k of Object.keys(node)) { + m = Math.max(m, this.computeLeafMax(node[k])); + } + return m; + } + + // =============== Construcción de niveles (modelo lógico) =============== + + buildLevels() { + this.levels.length = 0; + const activePath = this.getActivePath(); + + let node = this.tree; + let level = 0; + + while (node) { + if (TreeList.isMap(node)) { + // Opciones = claves del mapa (nivel intermedio) + const keys = Object.keys(node); + if (!keys.length) break; // detener expansión si vacío + this.levels.push({ type: 'map', items: keys.map(k => ({ key: k, label: k, zone: {x:0,y:0,w:0,h:0} })), zone: {x:0,y:0,w:0,h:this.hItem} }); + + // Avanza según la ruta activa (si existe), sino se detiene + const nextKey = activePath[level]; + if (!nextKey || !node.hasOwnProperty(nextKey)) break; + node = node[nextKey]; + } else if (TreeList.isList(node)) { + // Último nivel: lista/hoja (vertical) + const items = node.map(label => ({ key: label, label, zone: {x:0,y:0,w:0,h:0} })); + this.levels.push({ type: 'list', items, zone: {x:0,y:0,w:0,h: Math.max(items.length, this.leafMax) * this.hItem } }); + break; // fin + } else { + break; // nodo inválido + } + level++; + } + } + + // =============== Layout (zonas internas) =============== + + // Calcula zonas internas de cada ítem/level y construye/actualiza dom + layoutLevels() { + const padX = 8; + const w = this.zone.w - padX * 2; + let y = 0; + + // Asegura `itemsDom` anidado por nivel + while (this.itemsDom.length < this.levels.length) this.itemsDom.push([]); + // Limpia extra DOM si niveles disminuyen + for (let L = this.levels.length; L < this.itemsDom.length; L++) { + for (const el of this.itemsDom[L]) if (el && el.parentNode) el.parentNode.removeChild(el); + } + this.itemsDom.length = this.levels.length; + + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + if (lvl.type === 'map') { + const n = Math.max(1, lvl.items.length); + const cellW = Math.floor(w / n); + lvl.zone = { x: padX, y, w, h: this.hItem }; + let x = padX; + // Asegura contenedor dom de nivel si querés uno (opcional) + for (let i = 0; i < lvl.items.length; i++) { + const it = lvl.items[i]; + it.zone = { x, y, w: cellW, h: this.hItem }; + + // crea/actualiza nodo visual + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, 'map'); + + x += cellW; + } + y += this.hItem + this.levelGap; + } else { + // lista/hoja vertical + const n = lvl.items.length; + const hList = Math.max(n, this.leafMax) * this.hItem; + lvl.zone = { x: padX, y, w, h: hList }; + + for (let i = 0; i < Math.max(n, this.leafMax); i++) { + // Puede haber "espacio vacío" si n < leafMax + const isReal = i < n; + const it = isReal ? lvl.items[i] : { key: null, label: '', zone: {x:0,y:0,w:0,h:0} }; + it.zone = { x: padX, y: y + i * this.hItem, w, h: this.hItem }; + + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, 'list', isReal); + } + y += hList; + } + } + + // Ajusta alto visible del control + const totalH = y; + this.zone.h = totalH + this.margin; // Proto se encarga del margen + this.s[0].height = this.zone.h + 'px'; + this.s[2].height = totalH + 'px'; + } + + ensureItemDom(L, i) { + const row = this.itemsDom[L]; + while (row.length <= i) row.push(null); + if (!row[i]) { + // Cada ítem es un DIV posicionado absoluto dentro de this.c[2] + const div = this.dom('div', Tools.css.txt + 'position:absolute; pointer-events:none;'); + this.c[2].appendChild(div); + row[i] = div; + } + return row[i]; + } + + // Colorea y posiciona el DOM del ítem según estados (seleccionado / foco) + paintItemDom(div, L, i, it, kind, isReal = true) { + const s = div.style; + const cc = this.colors; + + // Posición + s.left = it.zone.x + 'px'; + s.top = it.zone.y + 'px'; + s.width = it.zone.w + 'px'; + s.height = (it.zone.h - 2) + 'px'; // -2 para evitar overlap de bordes + + // Texto + div.textContent = isReal ? it.label : ''; + + // Estados semánticos + const value = this.value; + const selected = (value[L] !== undefined) && (value[L] === it.key) && isReal; + + const inFocusLevel = this.focused && (this.focusLevel === L); + const focusMatch = inFocusLevel && (this.focusPath[L] === it.key) && isReal; + + // Hover (mouse) + const isHover = (this.hover.level === L && this.hover.index === i && isReal); + + // Estilos base + s.background = cc.back; + s.color = cc.text; + s.border = '1px solid ' + cc.border; + + // Mapa = horizontal, Lista = vertical + if (kind === 'map') s.textAlign = 'center'; + else s.textAlign = 'left'; + + // Priorización visual: seleccionado > foco > hover > base + if (selected) { + s.background = cc.select; + s.color = cc.textSelect; + } else if (focusMatch) { + s.background = cc.backgroundOver; + s.color = cc.textOver; + } else if (isHover) { + s.background = cc.overoff; + s.color = cc.textOver; + } + // Deshabilitar DOM si no hay ítem real en filas de padding + s.opacity = isReal ? '1' : '0'; + } + + // =============== Ciclo de vida visual =============== + + rSize() { + // Recalcula leafMax y niveles cada vez que cambia tamaño/datos + this.leafMax = this.computeLeafMax(this.tree); + this.buildLevels(); + this.layoutLevels(); + } + + update() { + // Redibuja cuando cambian estados de hover/focus/value externamente + this.buildLevels(); + this.layoutLevels(); + } + + // =============== Interacción (hit-testing y selección) =============== + + // Convierte coords globales a locales del control (igual que Proto) + _toLocal(e) { + const mx = e.clientX - this.zone.x; + const my = e.clientY - this.zone.y; + return { x: mx, y: my }; + } + + // Busca qué ítem (L,i) está bajo el mouse; respeta zonas por nivel + _hitTest(mx, my) { + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + const z = lvl.zone; + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; + + if (lvl.type === 'map') { + for (let i = 0; i < lvl.items.length; i++) { + const itz = lvl.items[i].zone; + if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { + return { L, i, real: true }; + } + } + } else { + // hoja: puede contener filas de padding + const nRows = Math.max(lvl.items.length, this.leafMax); + for (let i = 0; i < nRows; i++) { + const isReal = i < lvl.items.length; + const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.hItem, w: z.w, h: this.hItem }; + if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { + return { L, i, real: isReal }; + } + } + } + } + return { L: -1, i: -1, real: false }; + } + + handleEvent(e) { + if (this.lock) return false; + + // Delega estados de hover / click + if (e.type === 'mousemove') { + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + this.hover = (ht.L !== -1 && ht.real) ? { level: ht.L, index: ht.i } : { level: -1, index: -1 }; + this.update(); // repintar con hover + return true; + } + + if (e.type === 'mousedown') { + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + if (ht.L !== -1 && ht.real) { + this._selectAt(ht.L, ht.i); + return true; + } + } + + if (e.type === 'mouseup') { + // nada por ahora + return true; + } + + // Soporte básico para teclado (opcional: Up/Down/Left/Right) + if (e.type === 'keydown') ; + + return false; + } + + // Regla de selección y autocompletado + _selectAt(L, i) { + const lvl = this.levels[L]; + const chosen = lvl.items[i]; + if (!chosen || !chosen.key) return; + + // 1) Recortar value hasta L e insertar la opción elegida + const base = this.value.slice(0, L); + base[L] = chosen.key; + + // 2) Autocompletar por primera clave descendiendo hasta una lista + const newPath = this.autoCompleteToLeaf(base); + + // 3) Notificar + this.value = newPath.slice(); // reflejar selección interna + this.update(); + this.changeCb(this.tabIndex, this.itemIndex, newPath); + } + + // API pública para sincronización externa (por si quieres settear desde afuera) + setValue(path) { + this.value = Array.isArray(path) ? path.slice() : []; + this.update(); + } + setTree(tree) { + this.tree = tree || {}; + this.update(); + } + setFocus({ focused, focusPath, focusLevel }) { + if (typeof focused === 'boolean') this.focused = focused; + if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); + if (typeof focusLevel === 'number') this.focusLevel = focusLevel; + this.update(); + } + } - ref = true; - if (a[2] === undefined) [].push.call(a, {}); - type = a[2].type ? a[2].type : autoType(a[0][a[1]], a[2]); - o = a[2]; - o.name = a[1]; - if (o.hasOwnProperty("displayName")) o.name = o.displayName; - if (type === 'list' && !o.list) { - o.list = a[0][a[1]]; - } else o.value = a[0][a[1]]; - } - let name = type.toLowerCase(); - if (name === 'group') { - o.add = add; - //o.dx = 8 - } - switch (name) { - case 'bool': - case 'boolean': - n = new Bool(o); - break; - case 'button': - n = new Button(o); - break; - case 'circular': - n = new Circular(o); - break; - case 'color': - n = new Color(o); - break; - case 'fps': - n = new Fps(o); - break; - case 'graph': - n = new Graph(o); - break; - case 'group': - n = new Group(o); - break; - case 'joystick': - n = new Joystick(o); - break; - case 'knob': - n = new Knob(o); - break; - case 'list': - n = new List(o); - break; - case 'numeric': - case 'number': - n = new Numeric(o); - break; - case 'slide': - n = new Slide(o); - break; - case 'textInput': - case 'string': - n = new TextInput(o); - break; - case 'title': - case 'text': - n = new Title(o); - break; - case 'select': - n = new Select(o); - break; - case 'bitmap': - n = new Bitmap(o); - break; - case 'selector': - n = new Selector(o); - break; - case 'empty': - case 'space': - n = new Empty(o); - break; - case 'item': - n = new Item(o); - break; - case 'grid': - n = new Grid(o); - break; - case 'pad2d': - case 'pad': - n = new Pad2D(o); - break; - } - if (n !== null) { - Roots.needResize = true; - if (ref) n.setReferency(a[0], a[1]); - return n; - } + const add = function () { + + let a = arguments; + + let type, o, ref = false, n = null; + + if( typeof a[0] === 'string' ){ + + type = a[0]; + o = a[1] || {}; + + } else if ( typeof a[0] === 'object' ){ // like dat gui + + ref = true; + if( a[2] === undefined ) [].push.call(a, {}); + + type = a[2].type ? a[2].type : autoType( a[0][a[1]], a[2] ); + + o = a[2]; + o.name = a[1]; + if (o.hasOwnProperty("displayName")) o.name = o.displayName; + + if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } + else o.value = a[0][a[1]]; + + } + + let name = type.toLowerCase(); + + if( name === 'group' ){ + o.add = add; + //o.dx = 8 + } + + switch( name ){ + + case 'bool': case 'boolean': n = new Bool(o); break; + case 'button': n = new Button(o); break; + case 'circular': n = new Circular(o); break; + case 'color': n = new Color(o); break; + case 'fps': n = new Fps(o); break; + case 'graph': n = new Graph(o); break; + case 'group': n = new Group(o); break; + case 'joystick': n = new Joystick(o); break; + case 'knob': n = new Knob(o); break; + case 'list': n = new List(o); break; + case 'numeric': case 'number': n = new Numeric(o); break; + case 'slide': n = new Slide(o); break; + case 'textInput': case 'string': n = new TextInput(o); break; + case 'title': case 'text': n = new Title(o); break; + case 'select': n = new Select(o); break; + case 'bitmap': n = new Bitmap(o); break; + case 'selector': n = new Selector(o); break; + case 'empty': case 'space': n = new Empty(o); break; + case 'item': n = new Item(o); break; + case 'grid': n = new Grid(o); break; + case 'pad2d': case 'pad': n = new Pad2D(o); break; + case 'treelist': n = new TreeList(o); break; + + } + + + + if( n !== null ){ + + Roots.needResize = true; + + if( ref ) n.setReferency( a[0], a[1] ); + return n; + + } + + }; + + const autoType = function ( v, o ) { + + let type = 'slide'; + + if( typeof v === 'boolean' ) type = 'bool'; + else if( typeof v === 'string' ){ + + if( v.substring(0,1) === '#' ) type = 'color'; + else type = 'string'; + + } else if( typeof v === 'number' ){ + + if( o.ctype ) type = 'color'; + else type = 'slide'; + + } else if( typeof v === 'array' && v instanceof Array ){ + + if( typeof v[0] === 'number' ) type = 'number'; + else if( typeof v[0] === 'string' ) type = 'list'; + + } else if( typeof v === 'object' && v instanceof Object ){ + + if( v.x !== undefined ) type = 'number'; + else type = 'list'; + + } + + return type + }; - const autoType = function (v, o) { - let type = 'slide'; - if (typeof v === 'boolean') type = 'bool';else if (typeof v === 'string') { - if (v.substring(0, 1) === '#') type = 'color';else type = 'string'; - } else if (typeof v === 'number') { - if (o.ctype) type = 'color';else type = 'slide'; - } else if (typeof v === 'array' && v instanceof Array) { - if (typeof v[0] === 'number') type = 'number';else if (typeof v[0] === 'string') type = 'list'; - } else if (typeof v === 'object' && v instanceof Object) { - if (v.x !== undefined) type = 'number';else type = 'list'; - } - return type; - }; - - /** - * @author lth / https://github.com/lo-th - */ - - class Gui { - constructor(o = {}) { - this.isGui = true; - this.name = "gui"; - - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; - - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors);else this.colors = Tools.defineColor(o); - - //this.cleanning = false - - // style - this.css = Tools.cloneCss(); - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 - - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; - - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") ? o.addDOMEventListeners : true; - this.callback = o.callback === undefined ? null : o.callback; - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - this.cn = ""; - - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; - this.size.h = this.size.h < 11 ? 11 : this.size.h; - - // local mouse and zone - this.local = new V2().neg(); - this.zone = { - x: 0, - y: 0, - w: this.size.w, - h: 0 - }; - - // virtual mouse - this.mouse = new V2().neg(); - this.h = 0; - //this.prevY = -1; - this.sw = 0; - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); - - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; - this.autoResize = o.autoResize === undefined ? true : o.autoResize; - - // default position - this.isCenter = o.center || false; - this.cssGui = o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; - this.isNewTarget = false; - let cc = this.colors; - this.content = Tools.dom("div", this.css.basic + " width:0px; height:auto; top:0px; background:" + cc.content + "; " + this.cssGui); - this.innerContent = Tools.dom("div", this.css.basic + "width:100%; top:0; left:0; height:auto; overflow:hidden;"); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); - - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom("div", this.css.basic + flexible + "width:100%; left:0; "); - this.innerContent.appendChild(this.inner); - - // scroll - this.scrollBG = Tools.dom("div", this.css.basic + "right:0; top:0; width:" + (this.size.s - 1) + "px; height:10px; display:none; background:" + cc.background + ";"); - this.content.appendChild(this.scrollBG); - this.scroll = Tools.dom("div", this.css.basic + "background:" + cc.button + "; right:2px; top:0; width:" + (this.size.s - 4) + "px; height:10px;"); - this.scrollBG.appendChild(this.scroll); - - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; - let r = cc.radius; - this.bottom = Tools.dom("div", this.css.txt + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + r + "px; border-bottom-left-radius:" + r + "px; justify-content:center; height:" + this.bh + "px; line-height:" + (this.bh - 5) + "px; color:" + cc.text + ";"); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen ? this.bottomText[1] : this.bottomText[0]; - this.bottom.style.background = cc.background; - - // - - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } - if (this.parent !== null) this.parent.appendChild(this.content); - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } - - // height transition - this.transition = o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - this.setWidth(); - if (this.isCanvas) this.makeCanvas(); - Roots.add(this); - } - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN - }); - } - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN - }); - } - triggerMouseUp(x, y) { - /* - clientX,clientY are no used when isCanvas==true - */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN - }); - } - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); - Roots.needReZone = true; - } - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = "height " + this.transition + "s ease-out"; - this.content.style.transition = "height " + this.transition + "s ease-out"; - this.bottom.style.transition = "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } - - // ---------------------- - // CANVAS - // ---------------------- - - onDraw() {} - makeCanvas() { - this.canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - - //console.log( this.canvas.width, this.canvas.height ) - } - draw(force) { - if (this.canvas === null) return; - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } - - ////// - - getDom() { - return this.content; - } - noMouse() { - this.mouse.neg(); - } - setMouse(uv, flip = true) { - if (flip) this.mouse.set(Math.round(uv.x * this.canvas.width), this.canvas.height - Math.round(uv.y * this.canvas.height));else this.mouse.set(Math.round(uv.x * this.canvas.width), Math.round(uv.y * this.canvas.height)); - //this.mouse.set( m.x, m.y ); - - //console.log("setMouse "+uv.x+" "+uv.y) - } - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } - onChange(f) { - this.callback = f || null; - return this; - } - - // ---------------------- - // STYLES - // ---------------------- - - mode(n) { - let needChange = false; - let cc = this.colors; - if (n !== this.cn) { - this.cn = n; - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } - needChange = true; - } - return needChange; - } - - // ---------------------- - // TARGET - // ---------------------- - - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } - this.proto = null; - this.current = -1; - - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - - Roots.cursor(); - return true; - } - - // ---------------------- - // ZONE TEST - // ---------------------- - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - this.isReset = false; - let name = ""; - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom";else name = l.x > s ? "scroll" : "content"; - return name; - } - - // ---------------------- - // EVENTS - // ---------------------- - - handleEvent(e) { - //if( this.cleanning ) return - - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; - let change = false; - let protoChange = false; - let name = this.testZone(e); - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } - if (!name) return; - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - if (Roots.isMobile && type === "mousedown") this.getNext(e, change); - if (this.proto) protoChange = this.proto.handleEvent(e); - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) change = this.onWheel(e); - if (!Roots.lock) { - this.getNext(e, change); - } - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen ? this.bottomText[1] : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); - break; - } - if (this.isDown) change = true; - if (protoChange) change = true; - if (type === "keyup") change = true; - if (type === "keydown") change = true; - if (change) this.draw(); - } - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); - if (next !== this.current) { - this.clearTarget(); - this.current = next; - this.isNewTarget = true; - } - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } - - // ---------------------- - // RESET - // ---------------------- - - reset(force) { - if (this.isReset) return; - - //this.resetItem(); - - this.mouse.neg(); - this.isDown = false; - - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); - if (r || r2) this.draw(true); - this.isReset = true; - - //Roots.lock = false; - } - - // ---------------------- - // ADD NODE - // ---------------------- - - add() { - //if(this.cleanning) this.cleanning = false - - let a = arguments; - let ontop = false; - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { - isUI: true, - main: this - });else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } - let u = add.apply(this, a); - if (u === null) return; - if (ontop) this.uis.unshift(u);else this.uis.push(u); - this.calc(); - this.isEmpty = false; - return u; - } - - // remove one node - - remove(n) { - if (n.dispose) n.dispose(); - } - - // call after uis clear - - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } - - // clear all gui - - empty() { - //this.cleanning = true - - //this.close(); - - let i = this.uis.length, - item; - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } - this.uis = []; - this.isEmpty = true; - this.calc(); - } - clear() { - this.empty(); - } - clear2() { - setTimeout(this.empty.bind(this), 0); - } - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } - - // ---------------------- - // ITEMS SPECIAL - // ---------------------- - - resetItem() { - if (!this.isItemMode) return; - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } - setItem(name) { - if (!this.isItemMode) return; - name = name || ""; - this.resetItem(); - if (!name) { - this.update(0); - return; - } - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } - - // ---------------------- - // SCROLL - // ---------------------- - - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; - if (b) { - this.total = this.h; - this.maxView = this.maxHeight; - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; - this.range = this.maxView - this.sh; - this.oy = Tools.clamp(this.oy, 0, this.range); - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } - update(y) { - y = Tools.clamp(y, 0, this.range); - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } - - // ---------------------- - // RESIZE FUNCTION - // ---------------------- - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } - setHeight() { - if (this.tmp) clearTimeout(this.tmp); - this.zone.h = this.bh; - this.isScroll = false; - if (this.isOpen) { - this.h = this.calcUis(); - let hhh = this.forceHeight ? this.forceHeight + this.zone.y : window.innerHeight; - this.maxHeight = hhh - this.zone.y - this.bh; - let diff = this.h - this.maxHeight; - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } - this.upScroll(this.isScroll); - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; - if (this.forceHeight && this.lockHeight) this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } - rezone() { - Roots.needReZone = true; - } - setWidth(w) { - if (w) this.zone.w = w; - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } + /** + * @author lth / https://github.com/lo-th + */ + + class Gui { + constructor(o = {}) { + this.isGui = true; + + this.name = "gui"; + + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; + + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); + + //this.cleanning = false + + // style + this.css = Tools.cloneCss(); + + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 + + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; + + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; + + this.callback = o.callback === undefined ? null : o.callback; + + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; + + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + + this.cn = ""; + + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; + + this.size.h = this.size.h < 11 ? 11 : this.size.h; + + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + + // virtual mouse + this.mouse = new V2().neg(); + + this.h = 0; + //this.prevY = -1; + this.sw = 0; + + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); + + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; + + this.autoResize = o.autoResize === undefined ? true : o.autoResize; + + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; + + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; + + this.isNewTarget = false; + + let cc = this.colors; + + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); + + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); + + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); + + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); + + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); + + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; + + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } + + if (this.parent !== null) this.parent.appendChild(this.content); + + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } + + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + + this.setWidth(); + + if (this.isCanvas) this.makeCanvas(); + + Roots.add(this); + } + + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseUp(x, y) { + /* + + clientX,clientY are no used when isCanvas==true + */ + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); + + Roots.needReZone = true; + } + + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } + + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } + + // ---------------------- + // CANVAS + // ---------------------- + + onDraw() {} + + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + + //console.log( this.canvas.width, this.canvas.height ) + } + + draw(force) { + if (this.canvas === null) return; + + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } + + ////// + + getDom() { + return this.content; + } + + noMouse() { + this.mouse.neg(); + } + + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); + + //console.log("setMouse "+uv.x+" "+uv.y) + } + + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } + + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } + + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } + + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } + + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } + + onChange(f) { + this.callback = f || null; + return this; + } + + // ---------------------- + // STYLES + // ---------------------- + + mode(n) { + let needChange = false; + let cc = this.colors; + + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } + + needChange = true; + } + + return needChange; + } + + // ---------------------- + // TARGET + // ---------------------- + + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + + this.proto = null; + this.current = -1; + + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + + Roots.cursor(); + return true; + } + + // ---------------------- + // ZONE TEST + // ---------------------- + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + this.isReset = false; + + let name = ""; + + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; + + return name; + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent(e) { + //if( this.cleanning ) return + + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; + + let change = false; + let protoChange = false; + + let name = this.testZone(e); + + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; + + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } + + if (!name) return; + + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); + + if (this.proto) protoChange = this.proto.handleEvent(e); + + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); + + if (!Roots.lock) { + this.getNext(e, change); + } + + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } + + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + + break; + } + + if (this.isDown) change = true; + if (protoChange) change = true; + + if (type === "keyup") change = true; + if (type === "keydown") change = true; + + if (change) this.draw(); + } + + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); + + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } + + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } + + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } + + // ---------------------- + // RESET + // ---------------------- + + reset(force) { + if (this.isReset) return; + + //this.resetItem(); + + this.mouse.neg(); + this.isDown = false; + + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); + + if (r || r2) this.draw(true); + + this.isReset = true; + + //Roots.lock = false; + } + + // ---------------------- + // ADD NODE + // ---------------------- + + add() { + //if(this.cleanning) this.cleanning = false + + let a = arguments; + let ontop = false; + + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; + + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } + + let u = add.apply(this, a); + + if (u === null) return; + + if (ontop) this.uis.unshift(u); + else this.uis.push(u); + + this.calc(); + + this.isEmpty = false; + + return u; + } + + // remove one node + + remove(n) { + if (n.dispose) n.dispose(); + } + + // call after uis clear + + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } + + // clear all gui + + empty() { + //this.cleanning = true + + //this.close(); + + let i = this.uis.length, + item; + + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } + + this.uis = []; + this.isEmpty = true; + this.calc(); + } + + clear() { + this.empty(); + } + + clear2() { + setTimeout(this.empty.bind(this), 0); + } + + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } + + // ---------------------- + // ITEMS SPECIAL + // ---------------------- + + resetItem() { + if (!this.isItemMode) return; + + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } + + setItem(name) { + if (!this.isItemMode) return; + + name = name || ""; + this.resetItem(); + + if (!name) { + this.update(0); + return; + } + + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } + + // ---------------------- + // SCROLL + // ---------------------- + + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; + + if (b) { + this.total = this.h; + + this.maxView = this.maxHeight; + + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; + + this.range = this.maxView - this.sh; + + this.oy = Tools.clamp(this.oy, 0, this.range); + + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } + + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } + + update(y) { + y = Tools.clamp(y, 0, this.range); + + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } + + // ---------------------- + // RESIZE FUNCTION + // ---------------------- + + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } + + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } + + setHeight() { + if (this.tmp) clearTimeout(this.tmp); + + this.zone.h = this.bh; + this.isScroll = false; + + if (this.isOpen) { + this.h = this.calcUis(); + + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; + + this.maxHeight = hhh - this.zone.y - this.bh; + + let diff = this.h - this.maxHeight; + + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + + this.upScroll(this.isScroll); + + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + + rezone() { + Roots.needReZone = true; + } + + setWidth(w) { + if (w) this.zone.w = w; + + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } } exports.Files = Files; @@ -7182,3 +9451,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvcHJvdG8vVHJlZUxpc3QuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBQcm9waWVkYWRlcyBww7pibGljYXMgZXNwZXJhZGFzIChBUEkpXHJcbiAgICAvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KSwgby5mb2N1c2VkIChib29sKSxcclxuICAgIC8vIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKSxcclxuICAgIC8vIG8udGFiSW5kZXgsIG8uaXRlbUluZGV4LCBvLm9uQ2hhbmdlIChmbilcclxuICAgIG8uc2VsZWN0YWJsZSA9IHRydWU7ICAgICAgICAgICAvLyBuYXZlZ2FibGUgcG9yIHRlY2xhZG8gc2kgYWN0aXZhcyBmbGVjaGFzXHJcbiAgICBvLm5hbWUgPSBvLm5hbWUgfHwgJ1RyZWVMaXN0JztcclxuICAgIHN1cGVyKG8pO1xyXG5cclxuICAgIC8vIERhdG9zICYgZXN0YWRvXHJcbiAgICB0aGlzLnRyZWUgICAgICAgPSBvLnRyZWUgfHwge307XHJcbiAgICB0aGlzLnZhbHVlICAgICAgPSBBcnJheS5pc0FycmF5KG8udmFsdWUpID8gby52YWx1ZS5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLmZvY3VzZWQgICAgPSAhIW8uZm9jdXNlZDtcclxuICAgIHRoaXMuZm9jdXNQYXRoICA9IEFycmF5LmlzQXJyYXkoby5mb2N1c1BhdGgpID8gby5mb2N1c1BhdGguc2xpY2UoKSA6IFtdO1xyXG4gICAgdGhpcy5mb2N1c0xldmVsID0gdHlwZW9mIG8uZm9jdXNMZXZlbCA9PT0gJ251bWJlcicgPyBvLmZvY3VzTGV2ZWwgOiAtMTtcclxuXHJcbiAgICB0aGlzLnRhYkluZGV4ICAgPSBvLnRhYkluZGV4ID8/IG51bGw7XHJcbiAgICB0aGlzLml0ZW1JbmRleCAgPSBvLml0ZW1JbmRleCA/PyBudWxsO1xyXG5cclxuICAgIC8vIENhbGxiYWNrIGRlIG5vdGlmaWNhY2nDs25cclxuICAgIHRoaXMuY2hhbmdlQ2IgICA9IHR5cGVvZiBvLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nID8gby5vbkNoYW5nZSA6ICgvKnRhYklkeCwgaXRlbUlkeCwgbmV3UGF0aCovKSA9PiB7fTtcclxuXHJcbiAgICAvLyBMYXlvdXQgaW50ZXJub1xyXG4gICAgdGhpcy5sZXZlbHMgPSBbXTsgICAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuICAgIHRoaXMubGVhZk1heCA9IDA7ICAgLy8gYWx0byByZXNlcnZhZG8gcGFyYSBlbCDDumx0aW1vIG5pdmVsIChtw6F4aW1vIHRhbWHDsW8gZGUgaG9qYSlcclxuICAgIHRoaXMubGV2ZWxHYXAgPSAyOyAgLy8gZ2FwIHZlcnRpY2FsIGVudHJlIG5pdmVsZXNcclxuICAgIHRoaXMuaEl0ZW0gICAgPSB0aGlzLmg7ICAvLyBhbHRvIHBvciDDrXRlbVxyXG5cclxuICAgIC8vIEhvdmVyIC8gZm9jbyBkZSBtb3VzZVxyXG4gICAgdGhpcy5ob3ZlciA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcbiAgICAvLyBET00gdmlzdWFsIChzaW4gbGlzdGVuZXJzIGRpcmVjdG9zOyBsb3MgZXZlbnRvcyBsbGVnYW4gdsOtYSBSb290cy0+aGFuZGxlRXZlbnQpXHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSgnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnbGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7Jyk7IC8vIGNvbnRhaW5lciBpbnRlcm5vXHJcbiAgICB0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG4gICAgLy8gSW5pY2lhbGl6YSBub2RvcyB2aXN1YWxlcyBkZSBmb3JtYSBwZXJlem9zYSBlbiByU2l6ZSgpXHJcbiAgICB0aGlzLml0ZW1zRG9tID0gW107IC8vIG1pcnJvciBkZSB0aGlzLmxldmVscyAobWF0cml6IGRlIG5vZG9zKVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09IEhlbHBlcnMgZGUgZGF0b3MgPT09PT09PT09PT09PT09XHJcblxyXG4gIHN0YXRpYyBpc01hcChub2RlKSAgeyByZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuICBzdGF0aWMgaXNMaXN0KG5vZGUpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuXHJcbiAgLy8gRGV2dWVsdmUgZWwgc3Vibm9kbyBhbCBzZWd1aXIgcGF0aCAoc2UgZGV0aWVuZSBzaSBubyBleGlzdGUpXHJcbiAgZ2V0Tm9kZUF0UGF0aChwYXRoKSB7XHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBwYXRoW2ldKSkgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgICBub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBBbCBsbGVnYXIgYSBsaXN0YSwgeWEgbm8gaGF5IG3DoXMgZGVzY2VuZGVuY2lhIHbDoWxpZGEgcGFyYSBjbGF2ZXNcclxuICAgICAgICBpZiAoaSA8IHBhdGgubGVuZ3RoKSByZXR1cm4geyBub2RlLCBkZXB0aDogaSB9OyBcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuICB9XHJcblxyXG4gIC8vIEF1dG9jb21wbGV0YSBkZXNjZW5kaWVuZG8gcG9yIGxhIHByaW1lcmEgY2xhdmUgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG4gIGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG4gICAgbGV0IG5vZGVJbmZvID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuICAgIGxldCBub2RlID0gbm9kZUluZm8ubm9kZTtcclxuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG5cclxuICAgIHdoaWxlIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcbiAgICAgIGlmICgha2V5cy5sZW5ndGgpIGJyZWFrOyAvLyBtYXBhIHZhY8Otb1xyXG4gICAgICBjb25zdCBrMCA9IGtleXNbMF07XHJcbiAgICAgIHBhdGgucHVzaChrMCk7XHJcbiAgICAgIG5vZGUgPSBub2RlW2swXTtcclxuICAgIH1cclxuICAgIC8vIFNpIHRlcm1pbmEgZW4gbGlzdGEsIE5PIGFncmVnYSBzZWxlY2Npw7NuIGZpbmFsIGRlIGVsZW1lbnRvIGhvamFcclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgLy8gUnV0YSBhY3RpdmEgcGFyYSBjb25zdHJ1aXIgbml2ZWxlcyAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpIG5vIHZhbHVlKVxyXG4gIGdldEFjdGl2ZVBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2FsY3VsYSBlbCBtw6F4aW1vIHRhbWHDsW8gZGUgaG9qYSBkZWwgw6FyYm9sIChwYXJhIHJlc2VydmFyIGFsdG8gZXN0YWJsZSlcclxuICBjb21wdXRlTGVhZk1heChub2RlID0gdGhpcy50cmVlKSB7XHJcbiAgICBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcbiAgICBpZiAoIVRyZWVMaXN0LmlzTWFwKG5vZGUpKSByZXR1cm4gMDtcclxuICAgIGxldCBtID0gMDtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG4gICAgICBtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PSBDb25zdHJ1Y2Npw7NuIGRlIG5pdmVsZXMgKG1vZGVsbyBsw7NnaWNvKSA9PT09PT09PT09PT09PT1cclxuXHJcbiAgYnVpbGRMZXZlbHMoKSB7XHJcbiAgICB0aGlzLmxldmVscy5sZW5ndGggPSAwO1xyXG4gICAgY29uc3QgYWN0aXZlUGF0aCA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpO1xyXG5cclxuICAgIGxldCBub2RlID0gdGhpcy50cmVlO1xyXG4gICAgbGV0IGxldmVsID0gMDtcclxuXHJcbiAgICB3aGlsZSAobm9kZSkge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICAvLyBPcGNpb25lcyA9IGNsYXZlcyBkZWwgbWFwYSAobml2ZWwgaW50ZXJtZWRpbylcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcbiAgICAgICAgaWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7IC8vIGRldGVuZXIgZXhwYW5zacOzbiBzaSB2YWPDrW9cclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ21hcCcsIGl0ZW1zOiBrZXlzLm1hcChrID0+ICh7IGtleTogaywgbGFiZWw6IGssIHpvbmU6IHt4OjAseTowLHc6MCxoOjB9IH0pKSwgem9uZToge3g6MCx5OjAsdzowLGg6dGhpcy5oSXRlbX0gfSk7XHJcblxyXG4gICAgICAgIC8vIEF2YW56YSBzZWfDum4gbGEgcnV0YSBhY3RpdmEgKHNpIGV4aXN0ZSksIHNpbm8gc2UgZGV0aWVuZVxyXG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBhY3RpdmVQYXRoW2xldmVsXTtcclxuICAgICAgICBpZiAoIW5leHRLZXkgfHwgIW5vZGUuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIGJyZWFrO1xyXG4gICAgICAgIG5vZGUgPSBub2RlW25leHRLZXldO1xyXG4gICAgICB9IGVsc2UgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkge1xyXG4gICAgICAgIC8vIMOabHRpbW8gbml2ZWw6IGxpc3RhL2hvamEgKHZlcnRpY2FsKVxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAobGFiZWwgPT4gKHsga2V5OiBsYWJlbCwgbGFiZWwsIHpvbmU6IHt4OjAseTowLHc6MCxoOjB9IH0pKTtcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ2xpc3QnLCBpdGVtcywgem9uZToge3g6MCx5OjAsdzowLGg6IE1hdGgubWF4KGl0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KSAqIHRoaXMuaEl0ZW0gfSB9KTtcclxuICAgICAgICBicmVhazsgLy8gZmluXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7IC8vIG5vZG8gaW52w6FsaWRvXHJcbiAgICAgIH1cclxuICAgICAgbGV2ZWwrKztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PSBMYXlvdXQgKHpvbmFzIGludGVybmFzKSA9PT09PT09PT09PT09PT1cclxuXHJcbiAgLy8gQ2FsY3VsYSB6b25hcyBpbnRlcm5hcyBkZSBjYWRhIMOtdGVtL2xldmVsIHkgY29uc3RydXllL2FjdHVhbGl6YSBkb21cclxuICBsYXlvdXRMZXZlbHMoKSB7XHJcbiAgICBjb25zdCBwYWRYID0gODtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIHBhZFggKiAyO1xyXG4gICAgbGV0IHkgPSAwO1xyXG5cclxuICAgIC8vIEFzZWd1cmEgYGl0ZW1zRG9tYCBhbmlkYWRvIHBvciBuaXZlbFxyXG4gICAgd2hpbGUgKHRoaXMuaXRlbXNEb20ubGVuZ3RoIDwgdGhpcy5sZXZlbHMubGVuZ3RoKSB0aGlzLml0ZW1zRG9tLnB1c2goW10pO1xyXG4gICAgLy8gTGltcGlhIGV4dHJhIERPTSBzaSBuaXZlbGVzIGRpc21pbnV5ZW5cclxuICAgIGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSkgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pdGVtc0RvbS5sZW5ndGggPSB0aGlzLmxldmVscy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG4gICAgICAgIGx2bC56b25lID0geyB4OiBwYWRYLCB5LCB3LCBoOiB0aGlzLmhJdGVtIH07XHJcbiAgICAgICAgbGV0IHggPSBwYWRYO1xyXG4gICAgICAgIC8vIEFzZWd1cmEgY29udGVuZWRvciBkb20gZGUgbml2ZWwgc2kgcXVlcsOpcyB1bm8gKG9wY2lvbmFsKVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdCA9IGx2bC5pdGVtc1tpXTtcclxuICAgICAgICAgIGl0LnpvbmUgPSB7IHgsIHksIHc6IGNlbGxXLCBoOiB0aGlzLmhJdGVtIH07XHJcblxyXG4gICAgICAgICAgLy8gY3JlYS9hY3R1YWxpemEgbm9kbyB2aXN1YWxcclxuICAgICAgICAgIGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuICAgICAgICAgIHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsICdtYXAnKTtcclxuXHJcbiAgICAgICAgICB4ICs9IGNlbGxXO1xyXG4gICAgICAgIH1cclxuICAgICAgICB5ICs9IHRoaXMuaEl0ZW0gKyB0aGlzLmxldmVsR2FwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGxpc3RhL2hvamEgdmVydGljYWxcclxuICAgICAgICBjb25zdCBuID0gbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBoTGlzdCA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCkgKiB0aGlzLmhJdGVtO1xyXG4gICAgICAgIGx2bC56b25lID0geyB4OiBwYWRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7IGkrKykge1xyXG4gICAgICAgICAgLy8gUHVlZGUgaGFiZXIgXCJlc3BhY2lvIHZhY8Otb1wiIHNpIG4gPCBsZWFmTWF4XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbjtcclxuICAgICAgICAgIGNvbnN0IGl0ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldIDogeyBrZXk6IG51bGwsIGxhYmVsOiAnJywgem9uZToge3g6MCx5OjAsdzowLGg6MH0gfTtcclxuICAgICAgICAgIGl0LnpvbmUgPSB7IHg6IHBhZFgsIHk6IHkgKyBpICogdGhpcy5oSXRlbSwgdywgaDogdGhpcy5oSXRlbSB9O1xyXG5cclxuICAgICAgICAgIGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuICAgICAgICAgIHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsICdsaXN0JywgaXNSZWFsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgeSArPSBoTGlzdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFqdXN0YSBhbHRvIHZpc2libGUgZGVsIGNvbnRyb2xcclxuICAgIGNvbnN0IHRvdGFsSCA9IHk7XHJcbiAgICB0aGlzLnpvbmUuaCA9IHRvdGFsSCArIHRoaXMubWFyZ2luOyAvLyBQcm90byBzZSBlbmNhcmdhIGRlbCBtYXJnZW5cclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArICdweCc7XHJcbiAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdG90YWxIICsgJ3B4JztcclxuICB9XHJcblxyXG4gIGVuc3VyZUl0ZW1Eb20oTCwgaSkge1xyXG4gICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgIHdoaWxlIChyb3cubGVuZ3RoIDw9IGkpIHJvdy5wdXNoKG51bGwpO1xyXG4gICAgaWYgKCFyb3dbaV0pIHtcclxuICAgICAgLy8gQ2FkYSDDrXRlbSBlcyB1biBESVYgcG9zaWNpb25hZG8gYWJzb2x1dG8gZGVudHJvIGRlIHRoaXMuY1syXVxyXG4gICAgICBjb25zdCBkaXYgPSB0aGlzLmRvbSgnZGl2JywgVG9vbHMuY3NzLnR4dCArICdwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsnKTtcclxuICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcbiAgICAgIHJvd1tpXSA9IGRpdjtcclxuICAgIH1cclxuICAgIHJldHVybiByb3dbaV07XHJcbiAgfVxyXG5cclxuICAvLyBDb2xvcmVhIHkgcG9zaWNpb25hIGVsIERPTSBkZWwgw610ZW0gc2Vnw7puIGVzdGFkb3MgKHNlbGVjY2lvbmFkbyAvIGZvY28pXHJcbiAgcGFpbnRJdGVtRG9tKGRpdiwgTCwgaSwgaXQsIGtpbmQsIGlzUmVhbCA9IHRydWUpIHtcclxuICAgIGNvbnN0IHMgPSBkaXYuc3R5bGU7XHJcbiAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vIFBvc2ljacOzblxyXG4gICAgcy5sZWZ0ID0gaXQuem9uZS54ICsgJ3B4JztcclxuICAgIHMudG9wICA9IGl0LnpvbmUueSArICdweCc7XHJcbiAgICBzLndpZHRoICA9IGl0LnpvbmUudyArICdweCc7XHJcbiAgICBzLmhlaWdodCA9IChpdC56b25lLmggLSAyKSArICdweCc7ICAvLyAtMiBwYXJhIGV2aXRhciBvdmVybGFwIGRlIGJvcmRlc1xyXG5cclxuICAgIC8vIFRleHRvXHJcbiAgICBkaXYudGV4dENvbnRlbnQgPSBpc1JlYWwgPyBpdC5sYWJlbCA6ICcnO1xyXG5cclxuICAgIC8vIEVzdGFkb3Mgc2Vtw6FudGljb3NcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gKHZhbHVlW0xdICE9PSB1bmRlZmluZWQpICYmICh2YWx1ZVtMXSA9PT0gaXQua2V5KSAmJiBpc1JlYWw7XHJcblxyXG4gICAgY29uc3QgaW5Gb2N1c0xldmVsID0gdGhpcy5mb2N1c2VkICYmICh0aGlzLmZvY3VzTGV2ZWwgPT09IEwpO1xyXG4gICAgY29uc3QgZm9jdXNNYXRjaCAgID0gaW5Gb2N1c0xldmVsICYmICh0aGlzLmZvY3VzUGF0aFtMXSA9PT0gaXQua2V5KSAmJiBpc1JlYWw7XHJcblxyXG4gICAgLy8gSG92ZXIgKG1vdXNlKVxyXG4gICAgY29uc3QgaXNIb3ZlciA9ICh0aGlzLmhvdmVyLmxldmVsID09PSBMICYmIHRoaXMuaG92ZXIuaW5kZXggPT09IGkgJiYgaXNSZWFsKTtcclxuXHJcbiAgICAvLyBFc3RpbG9zIGJhc2VcclxuICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICBzLmNvbG9yICAgICAgPSBjYy50ZXh0O1xyXG4gICAgcy5ib3JkZXIgICAgID0gJzFweCBzb2xpZCAnICsgY2MuYm9yZGVyO1xyXG5cclxuICAgIC8vIE1hcGEgPSBob3Jpem9udGFsLCBMaXN0YSA9IHZlcnRpY2FsXHJcbiAgICBpZiAoa2luZCA9PT0gJ21hcCcpIHMudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICBlbHNlIHMudGV4dEFsaWduID0gJ2xlZnQnO1xyXG5cclxuICAgIC8vIFByaW9yaXphY2nDs24gdmlzdWFsOiBzZWxlY2Npb25hZG8gPiBmb2NvID4gaG92ZXIgPiBiYXNlXHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgIH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH1cclxuICAgIC8vIERlc2hhYmlsaXRhciBET00gc2kgbm8gaGF5IMOtdGVtIHJlYWwgZW4gZmlsYXMgZGUgcGFkZGluZ1xyXG4gICAgcy5vcGFjaXR5ID0gaXNSZWFsID8gJzEnIDogJzAnO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09IENpY2xvIGRlIHZpZGEgdmlzdWFsID09PT09PT09PT09PT09PVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIC8vIFJlY2FsY3VsYSBsZWFmTWF4IHkgbml2ZWxlcyBjYWRhIHZleiBxdWUgY2FtYmlhIHRhbWHDsW8vZGF0b3NcclxuICAgIHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoKSB7XHJcbiAgICAvLyBSZWRpYnVqYSBjdWFuZG8gY2FtYmlhbiBlc3RhZG9zIGRlIGhvdmVyL2ZvY3VzL3ZhbHVlIGV4dGVybmFtZW50ZVxyXG4gICAgdGhpcy5idWlsZExldmVscygpO1xyXG4gICAgdGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PSBJbnRlcmFjY2nDs24gKGhpdC10ZXN0aW5nIHkgc2VsZWNjacOzbikgPT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIENvbnZpZXJ0ZSBjb29yZHMgZ2xvYmFsZXMgYSBsb2NhbGVzIGRlbCBjb250cm9sIChpZ3VhbCBxdWUgUHJvdG8pXHJcbiAgX3RvTG9jYWwoZSkge1xyXG4gICAgY29uc3QgbXggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgIGNvbnN0IG15ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnk7XHJcbiAgICByZXR1cm4geyB4OiBteCwgeTogbXkgfTtcclxuICB9XHJcblxyXG4gIC8vIEJ1c2NhIHF1w6kgw610ZW0gKEwsaSkgZXN0w6EgYmFqbyBlbCBtb3VzZTsgcmVzcGV0YSB6b25hcyBwb3Igbml2ZWxcclxuICBfaGl0VGVzdChteCwgbXkpIHtcclxuICAgIGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuICAgICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICAgIGNvbnN0IHogPSBsdmwuem9uZTtcclxuICAgICAgaWYgKG14IDwgei54IHx8IG15IDwgei55IHx8IG14ID4gei54ICsgei53IHx8IG15ID4gei55ICsgei5oKSBjb250aW51ZTtcclxuXHJcbiAgICAgIGlmIChsdmwudHlwZSA9PT0gJ21hcCcpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXR6ID0gbHZsLml0ZW1zW2ldLnpvbmU7XHJcbiAgICAgICAgICBpZiAobXggPj0gaXR6LnggJiYgbXkgPj0gaXR6LnkgJiYgbXggPD0gaXR6LnggKyBpdHoudyAmJiBteSA8PSBpdHoueSArIGl0ei5oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IEwsIGksIHJlYWw6IHRydWUgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gaG9qYTogcHVlZGUgY29udGVuZXIgZmlsYXMgZGUgcGFkZGluZ1xyXG4gICAgICAgIGNvbnN0IG5Sb3dzID0gTWF0aC5tYXgobHZsLml0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgY29uc3QgaXR6ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldLnpvbmUgOiB7IHg6IHoueCwgeTogei55ICsgaSAqIHRoaXMuaEl0ZW0sIHc6IHoudywgaDogdGhpcy5oSXRlbSB9O1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiBpc1JlYWwgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IEw6IC0xLCBpOiAtMSwgcmVhbDogZmFsc2UgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAvLyBEZWxlZ2EgZXN0YWRvcyBkZSBob3ZlciAvIGNsaWNrXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vtb3ZlJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgdGhpcy5ob3ZlciA9IChodC5MICE9PSAtMSAmJiBodC5yZWFsKSA/IHsgbGV2ZWw6IGh0LkwsIGluZGV4OiBodC5pIH0gOiB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcbiAgICAgIHRoaXMudXBkYXRlKCk7IC8vIHJlcGludGFyIGNvbiBob3ZlclxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgaWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZXVwJykge1xyXG4gICAgICAvLyBuYWRhIHBvciBhaG9yYVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTb3BvcnRlIGLDoXNpY28gcGFyYSB0ZWNsYWRvIChvcGNpb25hbDogVXAvRG93bi9MZWZ0L1JpZ2h0KVxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ2tleWRvd24nKSB7XHJcbiAgICAgIC8vIFB1ZWRlcyBpbnRlZ3JhciBuYXZlZ2FjacOzbiBkZSBmbGVjaGFzIGFxdcOtIHNpIGxvIGRlc2VhcyxcclxuICAgICAgLy8gcmV1dGlsaXphbmRvIHRoaXMuaXNTZWxlY3RhYmxlICh5YSBtYXJjYWRhIGVuIGN0b3IpLlxyXG4gICAgICAvLyBSZWNvbWVuZGFjacOzbjogbW92ZXIgZm9jbyBlbnRyZSBuaXZlbGVzL8OtdGVtcyBjb24gUm9vdHMrR3VpLiA6Y29udGVudFJlZmVyZW5jZVtvYWljaXRlOjFde2luZGV4PTF9IDpjb250ZW50UmVmZXJlbmNlW29haWNpdGU6Ml17aW5kZXg9Mn1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBSZWdsYSBkZSBzZWxlY2Npw7NuIHkgYXV0b2NvbXBsZXRhZG9cclxuICBfc2VsZWN0QXQoTCwgaSkge1xyXG4gICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICBjb25zdCBjaG9zZW4gPSBsdmwuaXRlbXNbaV07XHJcbiAgICBpZiAoIWNob3NlbiB8fCAhY2hvc2VuLmtleSkgcmV0dXJuO1xyXG5cclxuICAgIC8vIDEpIFJlY29ydGFyIHZhbHVlIGhhc3RhIEwgZSBpbnNlcnRhciBsYSBvcGNpw7NuIGVsZWdpZGFcclxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpO1xyXG4gICAgYmFzZVtMXSA9IGNob3Nlbi5rZXk7XHJcblxyXG4gICAgLy8gMikgQXV0b2NvbXBsZXRhciBwb3IgcHJpbWVyYSBjbGF2ZSBkZXNjZW5kaWVuZG8gaGFzdGEgdW5hIGxpc3RhXHJcbiAgICBjb25zdCBuZXdQYXRoID0gdGhpcy5hdXRvQ29tcGxldGVUb0xlYWYoYmFzZSk7XHJcblxyXG4gICAgLy8gMykgTm90aWZpY2FyXHJcbiAgICB0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpOyAvLyByZWZsZWphciBzZWxlY2Npw7NuIGludGVybmFcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICB0aGlzLmNoYW5nZUNiKHRoaXMudGFiSW5kZXgsIHRoaXMuaXRlbUluZGV4LCBuZXdQYXRoKTtcclxuICB9XHJcblxyXG4gIC8vIEFQSSBww7pibGljYSBwYXJhIHNpbmNyb25pemFjacOzbiBleHRlcm5hIChwb3Igc2kgcXVpZXJlcyBzZXR0ZWFyIGRlc2RlIGFmdWVyYSlcclxuICBzZXRWYWx1ZShwYXRoKSB7XHJcbiAgICB0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguc2xpY2UoKSA6IFtdO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcbiAgc2V0VHJlZSh0cmVlKSB7XHJcbiAgICB0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcbiAgc2V0Rm9jdXMoeyBmb2N1c2VkLCBmb2N1c1BhdGgsIGZvY3VzTGV2ZWwgfSkge1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c2VkID09PSAnYm9vbGVhbicpIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb2N1c1BhdGgpKSB0aGlzLmZvY3VzUGF0aCA9IGZvY3VzUGF0aC5zbGljZSgpO1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c0xldmVsID09PSAnbnVtYmVyJykgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBCb29sIH0gZnJvbSAnLi4vcHJvdG8vQm9vbC5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL3Byb3RvL0J1dHRvbi5qcyc7XHJcbmltcG9ydCB7IENpcmN1bGFyIH0gZnJvbSAnLi4vcHJvdG8vQ2lyY3VsYXIuanMnO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL3Byb3RvL0NvbG9yLmpzJztcclxuaW1wb3J0IHsgRnBzIH0gZnJvbSAnLi4vcHJvdG8vRnBzLmpzJztcclxuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9wcm90by9HcmFwaC5qcyc7XHJcbmltcG9ydCB7IEdyb3VwICB9IGZyb20gJy4uL3Byb3RvL0dyb3VwLmpzJztcclxuaW1wb3J0IHsgSm95c3RpY2sgfSBmcm9tICcuLi9wcm90by9Kb3lzdGljay5qcyc7XHJcbmltcG9ydCB7IEtub2IgfSBmcm9tICcuLi9wcm90by9Lbm9iLmpzJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uL3Byb3RvL0xpc3QuanMnO1xyXG5pbXBvcnQgeyBOdW1lcmljIH0gZnJvbSAnLi4vcHJvdG8vTnVtZXJpYy5qcyc7XHJcbmltcG9ydCB7IFNsaWRlIH0gZnJvbSAnLi4vcHJvdG8vU2xpZGUuanMnO1xyXG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9wcm90by9UZXh0SW5wdXQuanMnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL3Byb3RvL1RpdGxlLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0LmpzJztcclxuaW1wb3J0IHsgQml0bWFwIH0gZnJvbSAnLi4vcHJvdG8vQml0bWFwLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICcuLi9wcm90by9TZWxlY3Rvci5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi4vcHJvdG8vRW1wdHkuanMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vcHJvdG8vSXRlbS5qcyc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi9wcm90by9HcmlkLmpzJztcclxuaW1wb3J0IHsgUGFkMkQgfSBmcm9tICcuLi9wcm90by9QYWQyRC5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFRyZWVMaXN0IH0gZnJvbSAnLi4vcHJvdG8vVHJlZUxpc3QuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndHJlZWxpc3QnOiBuID0gbmV3IFRyZWVMaXN0KG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Q0FBQTtDQUNBO0NBQ0E7QUFDQTtBQUNZLE9BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsTUFBTSxDQUFDLEdBQUc7Q0FDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7Q0FDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7Q0FDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0NB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R0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ3pDO0NBQ0E7Q0FDQSxNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtDQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0NBQ3JCLE9BQU87QUFDUDtDQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0NBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDMUIsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtDQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7Q0FDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENB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QUcsR0FBRyxLQUFLLEdBQUcsQ0FBQztDQUM3RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEdBQUc7Q0FDMUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDMUIsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHO0NBQ3RDLFVBQVUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDO0NBQ2pFLFNBQVM7Q0FDVCxRQUFRLE9BQU8sUUFBUSxDQUFDO0NBQ3hCLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0NBQzlCLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztDQUMzQyxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDNUQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM5QjtDQUNBLFFBQVEsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxQjtDQUNBLFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUMzQjtDQUNBLFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0NBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtDQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0NBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7Q0FDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztDQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDbkIsU0FBUztDQUNULFFBQVEsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDM0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUMsYUFBYTtDQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMxQixZQUFZLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7Q0FDekcsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFlBQVksRUFBRSxXQUFXLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRztBQUM5RDtDQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRDtDQUNBLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxQjtDQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0c7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sRUFBRSxXQUFXLEtBQUssR0FBRztBQUNoQztDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBRztDQUNwQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztDQUNwSixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3JIO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM3SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzlJLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDbkksUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDcEIsUUFBUSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7Q0FDeEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxvQkFBb0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMs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Q0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekg7Q0FDQTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0E7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztDQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0NBQ0E7QUFDQTtDQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdGO0NBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMvQjtDQUNBLFNBQVMsTUFBTTtDQUNmO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzVGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckksWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9GLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BJO0NBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztDQUMvQixTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxhQUFhLEVBQUUsWUFBWTtBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0NBQ2hKLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUN2QyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQixRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDM0IsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQ3hCLFFBQVcsSUFBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0NBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztDQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztDQUN2QjtDQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7Q0FDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7Q0FDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0NBQ0EsWUFBWSxFQUFFLEdBQUc7Q0FDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7Q0FDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxhQUFhLENBQUM7Q0FDZDtDQUNBLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlEO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkI7Q0FDQSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixnQkFBZ0IsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUMxQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdEQsaUJBQWlCO0FBQ2pCO0NBQ0EsZ0JBQWdCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRztDQUNBLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0QsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuSjtDQUNBLGdCQUFnQixDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxSDtDQUNBLGFBQWE7Q0FDYixZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUVoQyxTQUFTO0FBSVQ7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztBQUN2QjtDQUNBO0NBQ0EsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUNqRyxRQUFRLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckk7Q0FDQSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDL0UsUUFBUSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3hJO0NBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ2hHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDbkcsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDOUksUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDOUksUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsb0ZBQW9GLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDL0s7QUFDQTtDQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxRztDQUNBLFFBQVEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDMUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksRUFBRSxXQUFXLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNwQjtDQUNBLFFBQVEsSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDO0NBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsNEZBQTRGLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUNqTyxRQUFRLE9BQU8sSUFBSTtDQUNuQixZQUFZLEtBQUssTUFBTTtDQUN2QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7Q0FDM0YsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxRQUFRO0NBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztDQUM1RixZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLEtBQUs7Q0FDdEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0NBQ3pGLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssS0FBSztDQUN0QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsbUZBQW1GLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Q0FDekosWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxRQUFRO0NBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztDQUM1SixZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLFFBQVE7Q0FDekIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0NBQzVGLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssTUFBTTtDQUN2QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsd0pBQXdKLENBQUMsS0FBSyxDQUFDO0NBQ3ZNLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLDRLQUE0SyxDQUFDO0NBQy9MLFlBQVksTUFBTTtDQUNsQixTQUFTO0NBQ1QsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDO0NBQzVCLFFBQVEsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxVQUFVLENBQUMsQ0FBQztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0NBQ0EsSUFBSSxXQUFXLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxDQUFDO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsQ0FBQztBQUNkO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtDQUNBLElBQUksV0FBVyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7Q0FDQSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtDQUNBLEVBQUM7QUFDRDtDQUNBLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNaO0FBQ1ksT0FBQyxLQUFLLEdBQUc7O0NDdjNCckI7QUFDQTtBQUNBO0NBQ08sTUFBTSxLQUFLLENBQUM7QUFDbkI7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksT0FBTyxTQUFTLEVBQUUsSUFBSSxHQUFHO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQ2xCO0NBQ0EsUUFBUSxRQUFRLElBQUk7Q0FDcEIsWUFBWSxLQUFLLEtBQUs7Q0FDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFHO0NBQzNELFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssS0FBSztDQUN0QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUc7Q0FDdkQsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxLQUFLO0NBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBRztDQUN4RCxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLEtBQUs7Q0FDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFHO0NBQ3ZELFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxLQUFLO0NBQ2xDLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxFQUFFLDBCQUEwQixFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBRztDQUM5RyxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLE1BQU07Q0FDdkIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7Q0FDL0gsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxNQUFNO0NBQ3ZCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUFFLGtCQUFrQixFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFHO0NBQzdGLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssSUFBSTtDQUNyQixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxFQUFFLGlCQUFpQixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFHO0NBQ2hHLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssT0FBTztDQUN4QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7Q0FDeEcsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxNQUFNO0NBQ3ZCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBRztDQUNsRixZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLEtBQUs7Q0FDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBRztDQUN4RixZQUFZLE1BQU07QUFDbEI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQztBQUNoQjtDQUNBLEtBQUs7QUFDTDtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksT0FBTyxNQUFNLENBQUMsa0JBQWtCLEtBQUssVUFBVSxFQUFFO0NBQzdELFlBQVksTUFBTSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQywyQkFBMEI7Q0FDeEUsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJO0FBQ1o7Q0FDQSxTQUFTLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRTtBQUNoQztDQUNBLFlBQVksTUFBTSxPQUFPLEdBQUc7Q0FDNUIsZ0JBQWdCLHNCQUFzQixFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztDQUMzRCxnQkFBZ0IsUUFBUSxFQUFFLEtBQUs7Q0FDL0I7Q0FDQSxhQUFhLENBQUM7QUFDZDtDQUNBLFlBQVksT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksR0FBRTtBQUNuRDtDQUNBO0NBQ0EsWUFBWSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEdBQUU7Q0FDckUsWUFBWSxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUU7Q0FDbEQ7QUFDQTtDQUNBLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLElBQUk7QUFDbkM7Q0FDQSxZQUFZLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDbEMsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsRjtDQUNBLFlBQVksTUFBTSxPQUFPLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztDQUNsRixZQUFZLE1BQU0sT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7Q0FDL0UsWUFBWSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQzVDO0NBQ0EsWUFBWSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxJQUFJLEdBQUU7Q0FDOUUsaUJBQWlCLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxHQUFFO0NBQ3ZGLGlCQUFpQixNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksR0FBRTtBQUMxQztDQUNBLFlBQVksTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsRUFBRTtBQUN4QztDQUNBLGdCQUFnQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU07QUFDN0M7Q0FDQSxnQkFBZ0IsT0FBTyxJQUFJO0NBQzNCLG9CQUFvQixLQUFLLE9BQU87Q0FDaEMsd0JBQXdCLElBQUksR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDO0NBQzVDLHdCQUF3QixHQUFHLENBQUMsTUFBTSxHQUFHLFdBQVc7Q0FDaEQsNEJBQTRCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFFO0NBQzVFLDBCQUF5QjtDQUN6Qix3QkFBd0IsR0FBRyxDQUFDLEdBQUcsR0FBRyxRQUFPO0NBQ3pDLG9CQUFvQixNQUFNO0NBQzFCLG9CQUFvQixLQUFLLE1BQU07Q0FDL0Isd0JBQXdCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRTtDQUMxRixvQkFBb0IsTUFBTTtDQUMxQixvQkFBb0I7Q0FDcEIsd0JBQXdCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFFO0NBQzVFLG9CQUFvQixNQUFNO0NBQzFCLGlCQUFpQjtBQUNqQjtDQUNBLGNBQWE7QUFDYjtDQUNBLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNuQjtDQUNBLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksR0FBRTtBQUMzRDtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLENBQUMsT0FBTywwQkFBMEIsRUFBRSxPQUFPLEdBQUc7Q0FDOUMsUUFBUSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLO0NBQ3hDLFlBQVksTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUMxRCxZQUFZLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0NBQ2hDLFlBQVksS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0NBQzlDLFlBQVksS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSztDQUN4QyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDM0MsaUJBQWlCLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUNqRixpQkFBaUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsWUFBWSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE1BQU07Q0FDbkQsZ0JBQWdCLE9BQU87Q0FDdkIsb0JBQW9CLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLO0NBQ25ELHdCQUF3QixPQUFPO0NBQy9CLDRCQUE0QixPQUFPLEVBQUU7Q0FDckMsZ0NBQWdDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLO0NBQ3pELG9DQUFvQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDbEQsaUNBQWlDLENBQUM7Q0FDbEMseUJBQXlCLENBQUM7Q0FDMUIscUJBQXFCLENBQUM7Q0FDdEIsaUJBQWlCLENBQUM7Q0FDbEIsYUFBYSxDQUFDLENBQUM7QUFDZjtDQUNBLFlBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzFCLFNBQVMsQ0FBQztDQUNWLEtBQUs7QUFDTDtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLGFBQWEsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDaEM7Q0FDQSxRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxPQUFPLE1BQU0sQ0FBQyxrQkFBa0IsS0FBSyxVQUFVLEVBQUU7Q0FDN0QsWUFBWSxNQUFNLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLDJCQUEwQjtDQUN4RSxZQUFZLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDM0IsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJO0FBQ1o7Q0FDQSxZQUFZLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRTtBQUNuQztDQUNBLFlBQVksTUFBTSxPQUFPLEdBQUc7Q0FDNUIsZ0JBQWdCLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLE9BQU87Q0FDaEQsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7Q0FDbEMsYUFBYSxDQUFDO0FBQ2Q7Q0FDQSxZQUFZLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUU7Q0FDbkQsWUFBWSxPQUFPLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUM7Q0FDekUsWUFBWSxPQUFPLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbEY7QUFDQTtDQUNBO0NBQ0EsWUFBWSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUN0RTtDQUNBLFlBQVksSUFBSSxPQUFPLEdBQUcsTUFBTTtBQUNoQztDQUNBO0NBQ0EsWUFBWSxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN2RDtDQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDL0U7Q0FDQTtDQUNBLFlBQVksTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DO0NBQ0E7Q0FDQSxZQUFZLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9CO0NBQ0EsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ25CO0NBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLDBCQUEwQixFQUFFLE9BQU8sR0FBRztDQUNqRCxRQUFRLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUs7Q0FDeEMsWUFBWSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2xELFlBQVksQ0FBQyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLGNBQWE7Q0FDL0QsWUFBWSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztDQUM5RSxZQUFZLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLEdBQUU7QUFDaEQ7Q0FDQSxZQUFZLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTTtDQUM5QyxnQkFBZ0IsT0FBTztDQUN2QixvQkFBb0IsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFO0NBQ3pFLGtCQUFpQjtDQUNqQixhQUFhLEVBQUM7Q0FDZCxZQUFZLENBQUMsQ0FBQyxLQUFLLEdBQUU7Q0FDckIsU0FBUyxDQUFDO0NBQ1YsS0FBSztBQUNMO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksYUFBYSxTQUFTLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUk7Q0FDWjtDQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztDQUM5RCxZQUFZLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztDQUM3QixZQUFZLFdBQVcsTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFO0NBQ3ZELGdCQUFnQixNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUNuRCxnQkFBZ0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNqQyxhQUFhO0FBQ2I7Q0FDQSxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDO0NBQzlCLFlBQVksT0FBTyxLQUFLLENBQUM7QUFDekI7Q0FDQSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkI7Q0FDQSxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxTQUFTO0NBQ1Q7Q0FDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTs7Q0NqUU8sTUFBTSxFQUFFLENBQUM7QUFDaEI7Q0FDQSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2IsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2IsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNiLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoQixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoQixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hCLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hCLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxHQUFHO0FBQzNCO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztDQUNuQixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDO0NBQ25CLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsWUFBWSxDQUFDLEVBQUUsTUFBTSxHQUFHO0FBQ3pCO0NBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQzNDO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0NBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztDQUNBLEVBQUUsS0FBSyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QztDQUNBLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNkLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDZCxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLE1BQU0sQ0FBQyxHQUFHO0FBQ1g7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDZixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDZixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQ1I7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDZCxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDZCxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLE1BQU0sQ0FBQyxHQUFHO0FBQ1g7Q0FDQSxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDMUM7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNaO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDZixFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmO0NBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZDtDQUNBLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRztBQUN0RDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNyQjtDQUNBLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDbEc7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDbkI7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtDQUNsQixHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Q0FDNUIsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0NBQy9CLEdBQUcsTUFBTTtDQUNULEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUM7Q0FDdEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQztDQUN6QyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQTs7Q0M5SEE7Q0FDQTtDQUNBO0FBQ0E7Q0FDTyxNQUFNLEtBQUssQ0FBQztDQUNuQixFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0NBQ3RCO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDO0FBQ2hDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQzNCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUM7QUFDdEM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztDQUMvQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7Q0FDaEMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ2pDO0NBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDakIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNsQjtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QjtDQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztDQUMxRSxJQUFJLElBQUksQ0FBQyxZQUFZO0NBQ3JCLE1BQU0sQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQ2hFO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0M7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ3JEO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXO0NBQ25DLE1BQU0sQ0FBQztDQUNQLE1BQU0sSUFBSSxDQUFDLElBQUk7Q0FDZixVQUFVLElBQUksQ0FBQyxLQUFLO0NBQ3BCLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO0NBQzdCLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO0NBQzVCLFVBQVUsS0FBSyxDQUFDLE1BQU07Q0FDdEIsS0FBSyxDQUFDO0FBQ047Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDM0M7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMzQjtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2pELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztDQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzFELFNBQVMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QjtDQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztDQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqRDtDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDdkQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0NBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUN4QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNyQyxJQUFJLElBQUks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QU0sR0FBRyxzQkFBc0IsQ0FBQztDQUN0RSxPQUFPO0NBQ1AsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0NBQ3RCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0NBQzdFLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0NBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7Q0FDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEMsT0FBTztDQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDdkIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUN6QyxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxHQUFHO0NBQ1QsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNyQztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQzVEO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0NBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7Q0FDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3ZDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7Q0FDaEMsS0FBSyxNQUFNO0NBQ1gsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDekMsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0NBQzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDMUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUN0QyxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDMUI7Q0FDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDcEQsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7Q0FDOUIsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDMUIsT0FBTztDQUNQLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFO0NBQ1YsTUFBTSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUk7Q0FDMUIsVUFBVSxJQUFJLENBQUMsTUFBTTtDQUNyQixVQUFVLElBQUksQ0FBQyxJQUFJO0NBQ25CLFVBQVUsSUFBSSxDQUFDLElBQUks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SSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFHO0NBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07Q0FDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07Q0FDNUI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7Q0FDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0NBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENB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QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ25ELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztDQUNBLFNBQVM7QUFDVDtBQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Q0FDckQsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUU7Q0FDcEUsU0FBUztDQUNUO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FB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QUMsQ0FBQyxLQUFLLEVBQUM7QUFDdkM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtDQUNyQixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7Q0FDbEQ7Q0FDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7Q0FDQTtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0NBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ3BQTyxNQUFNLFFBQVEsU0FBUyxL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RSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0NBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztDQUNqRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0NBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7Q0FDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDckMs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QUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNuQztDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7Q0FDQTtDQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztDQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QztDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7Q0FDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0NBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElB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QUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQ25EO0NBQ0EsT0FBTyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdkMsT0FBTztBQUNQO0NBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0NBQ3BEO0NBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDakM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0NBQ0EsU0FBUztDQUNULEtBQUs7Q0FDTCxJQUFJO0NBQ0osR0FBRztBQUNIO0NBQ0EsRUFBRTtBQUNGO0NBQ0E7QUFDQTtDQUNBLENBQUMsU0FBUyxDQUFDLEdBQUc7QUFDZDtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7Q0FDakUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN0QjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2xELFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9DO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxJQUFJLENBQUMsR0FBRztBQUNUO0NBQ0EsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDZjtDQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7Q0FDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0NBQ3RDO0NBQ0EsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0EsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEI7Q0FDQSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM5QztDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCO0NBQ0EsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztDQUN0QztDQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDZjtDQUNBLEtBQUssSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hFO0NBQ0EsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Q0FDeEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0NBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3hDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDN0U7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkQsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckQ7Q0FDQSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTztBQUNwQjtDQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUN4RCxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ3ZFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7Q0FDM0UsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QztDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2Y7Q0FDQSxFQUFFLElBQUksQ0FBQyxZQUFZLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUQsYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxhQUFhLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7Q0FDN0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNwQjtDQUNBLEtBQUssSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUN0QyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxFQUFFO0FBQzFDO0NBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDNUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU07Q0FDMUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUM5QztDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0NBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDdkIsTUFBTTtDQUNOLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNoQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDdEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzlDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztDQUN6QixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxXQUFXLENBQUMsR0FBRztBQUNoQjtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7Q0FDakIsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFLO0FBQ2Y7Q0FDQSxLQUFjLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU87Q0FDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDbkMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7Q0FDQSxLQUFLLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7Q0FDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztDQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUM7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0E7Q0FDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7Q0FDNUQ7Q0FDQTtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtDQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7Q0FDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtDQUNwQztDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztDQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0NBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtDQUNBLEVBQUU7QUFDRjtBQUNBO0NBQ0E7O0NDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUss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QztBQUM1QjtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7Q0FDQTtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztDQUM5QjtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztDQUN0RSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtDQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QztDQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0NBQzFCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkM7Q0FDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDdkQ7Q0FDQSxZ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LENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DO0NBQ0EsS0FBSztDQUNMO0NBQ0E7O0NDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Q0FDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0NBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztDQUNB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QyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0NBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0NBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7Q0FDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQztDQUM5QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFJO0NBQzlDLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7Q0FDckMsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUMzQyxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQztDQUNoRixpQkFBaUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztDQUMzRCxTQUFTO0NBQ1QsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFdBQVcsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQ0FBaUM7Q0FDcEUsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUc7Q0FDOUIsUUFBUSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUk7Q0FDckMsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQW9CO0NBQ2pHLGlCQUFpQixDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFPO0NBQ3RFLFlBQVksQ0FBQyxHQUFFO0NBQ2YsU0FBUztDQUNULFFBQVEsT0FBTyxDQUFDO0NBQ2hCLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ25GLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDcEgsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEc7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN6QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDekI7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Q0FDeEMsU0FBUyxPQUFPLENBQUMsRUFBRSxFQUFFO0NBQ3JCLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztDQUN2RCxVQUFVO0NBQ1YsTUFBTTtBQUNOO0NBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDckI7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ1g7Q0FDQSxRQUFRLE9BQU8sQ0FBQztDQUNoQixZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNO0NBQ2pDLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU07Q0FDakMsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtDQUMvQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzlELFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0I7Q0FDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsS0FBSyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7Q0FDckI7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN6QixRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDbEIsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0NBQ3JDLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNsQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQ3JFLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxDQUFDO0NBQzNCLGFBQWE7Q0FDYixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ3REO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3hCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25DO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxLQUFLLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztBQUNyQjtDQUNBLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQztDQUNBLEtBQUssSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ3RCO0NBQ0EsWUFBWSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQy9CO0FBQ0E7Q0FDQSxTQUFTLE1BQU07QUFDZjtDQUNBLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ3pEO0NBQ0EsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDM0IsYUFBYSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlHLGFBQWEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztDQUNqQyxhQUFhO0FBQ2I7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0EsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUU7Q0FDckM7QUFDQTtDQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckM7Q0FDQSxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUM7Q0FDNUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ3BDO0NBQ0EsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBRztDQUMxQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7QUFDdEI7Q0FDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUM7Q0FDekQsV0FBVyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0NBQ3hFLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUM7QUFDbEQ7Q0FDQSxNQUFNLEVBQUUsR0FBRyxHQUFFO0NBQ2IsTUFBTSxFQUFFLEdBQUcsRUFBQztBQUNaO0NBQ0EsTUFBTTtBQUNOO0NBQ0EsS0FBSyxPQUFPLENBQUM7QUFDYjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUNoRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7Q0FDNUIsUUFBUSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUM7Q0FDakQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQ2xCO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxLQUFJO0FBQzlCO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztDQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFFO0NBQzlDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ3ZDO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTs7Q0NsVE8sTUFBTSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ2pDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLEtBQUssQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFJO0NBQ3JCLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFDO0NBQ3BCLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0NBQ3pCLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtDQUNsQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkI7Q0FDQSxLQUFLO0NBQ0w7Q0FDQTs7Q0NUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUMzQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUk7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtDQUNyQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFDO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0FBQzNCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQUM7Q0FDcEM7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0FBQzVDO0NBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0NBQzNCLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxvQ0FBb0MsR0FBRyxHQUFFO0FBQy9FO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyw0Q0FBNEMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDO0NBQzVILFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyx3REFBd0QsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUM1SztDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSTtDQUMxRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw2QkFBNkIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLEVBQUM7QUFDMUk7Q0FDQSxRQUFnQixJQUFJLENBQUMsRUFBRTtDQUN2QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQU87QUFDaEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFFO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNoQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2pCO0NBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtDQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxHQUFFO0NBQzdDLFFBQVEsR0FBRyxFQUFFLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxXQUFVO0NBQzFELFlBQVksRUFBRSxDQUFDLFVBQVUsR0FBRyxPQUFNO0FBQ2xDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztDQUNqQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU07Q0FDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFNO0FBQ25DO0NBQ0EsUUFBUSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO0NBQ25DLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztDQUMvRCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0I7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0NBQ2hELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7QUFDaEQ7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0FBQ2pEO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQztDQUM1RCxhQUFhO0NBQ2IsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQztDQUMvQyxTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksV0FBVyxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEtBQUssQ0FBQztDQUMvQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Q0FDMUI7Q0FDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDL0IsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQy9CLFNBQVM7Q0FDVCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztDQUMxQixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUN0QixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFFO0FBQzFCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUN0QjtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMxQjtDQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ2hDO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU87QUFDM0I7Q0FDQSxRQUFRLFFBQVEsSUFBSTtBQUNwQjtDQUNBLFlBQVksS0FBSyxTQUFTO0FBQzFCO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxZQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRTtBQUNsRjtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0NBQzVCO0NBQ0EsZ0JBQWdCLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUU7Q0FDekQsYUFBYTtBQUNiO0NBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUU7QUFDdkQ7Q0FDQSxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLE9BQU87Q0FDeEI7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFDO0NBQ2xDLFlBQVksSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFO0NBQ3RDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUM5QyxxQkFBcUIsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNoQyxhQUFhO0NBQ2IsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxXQUFXLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN4QztDQUNBLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuRDtDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtDQUNuQyxZQUFZLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0NBRWhDLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUU7Q0FDekIsWUFBWSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQ25ELFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNoQyxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksR0FBRyxHQUFHO0FBQ1Y7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUMxQjtDQUNBLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7Q0FDdEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFJO0NBQ2pDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztDQUNuQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUk7Q0FDakMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUk7Q0FDN0IsU0FBUyxNQUFNLElBQUksT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0NBQ3JELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0NBQ3ZHLGlCQUFnQjtDQUNoQixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDakMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN4QyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3RDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztDQUNsQyxhQUFhO0NBQ2IsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUU7Q0FDdkI7Q0FDQSxZQUFZLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBQztDQUNwQixTQUFTO0NBQ1Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxRQUFRLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSTtDQUM5QjtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBSztBQUM1QjtDQUNBLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLEdBQUc7QUFDZDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUN4QyxRQUFRLEtBQUssQ0FBQyxPQUFPLEdBQUU7QUFDdkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssR0FBRztBQUNaO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztBQUN0QztDQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNwQixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRTtDQUNqQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUU7Q0FDOUMsWUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksR0FBRTtBQUM5QjtDQUNBO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkM7Q0FDQSxRQUFRLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHO0NBQ3pCLFlBQVksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRTtDQUM3RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFO0NBQ3hELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRTtBQUNwQztDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Q0FDdkMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0NBQ3BDLGdCQUFnQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDN0IsYUFBYTtDQUNiLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLEtBQUssQ0FBQyxJQUFJLEdBQUU7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUU7Q0FDbkQsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFFO0FBQzNCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDeEIsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM5QjtDQUNBO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUk7Q0FDNUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFNO0FBQ25DO0NBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDdkI7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsTUFBSztDQUNyQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsTUFBSztBQUNyQztDQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUN2RCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7Q0FDeEQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0NBQzFELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUMzRCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7QUFDbkM7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87Q0FDbkUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0FBQ3BFO0NBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0NBQy9ELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7Q0FDcEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMseUJBQXdCO0FBQ3RFO0NBQ0EsU0FBUztDQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFFO0FBQzNCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRTtBQUNuRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUMzQjtDQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDeEIsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtDQUM5QjtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbkM7Q0FDQTtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFJO0NBQzVDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxPQUFNO0FBQ2hDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO0FBQ25DO0NBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE9BQU07Q0FDaEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE9BQU07Q0FDaEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0NBQy9ELFNBQVM7QUFDVDtDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0FBQzVEO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFFO0FBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRztBQUNmO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7Q0FDOUQ7Q0FDQSxhQUFhLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDeEk7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7QUFDdkQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUN2QjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDdkQsYUFBYSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2pEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTTtDQUNqQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUN4QyxhQUFhLElBQUksQ0FBQyxPQUFPLEdBQUU7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDeEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU07Q0FDL0IsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRTtDQUN6QyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFFO0NBQy9CLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNwQztDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0NDNWNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN2RDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztDQUMxQyxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Q0FDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztDQUN6QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFJO0FBQzVEO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztDQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7Q0FDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxD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LENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUNoRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7Q0FDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7Q0FDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7Q0FDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0NBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0NBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtDQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0NBQ0EsYUFBYTtBQUNiO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM3QjtBQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztDQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7Q0FDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDN0QsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRjtDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0NBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztDQUM1QixRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQy9PTyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUM7QUFDaEM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7Q0FDMUMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0NBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUNuQyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFJO0NBQzVDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7Q0FDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDcEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFNO0NBQzFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFNBQVE7Q0FDckQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7Q0FDekQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDakYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0STtDQUNBLFlBQVksS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRTtDQUNsQztDQUNBLGdCQUFnQixLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztDQUN6QyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNqRjtDQUNBLGFBQWE7QUFDYjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxRQUFRLElBQUk7Q0FDcEIsWUFBWSxLQUFLLENBQUM7Q0FDbEIsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDMUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztDQUM5RDtDQUNBLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDL0QsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0NBQ2xCLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDOUQ7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ25FLFlBQVksTUFBTTtDQUNsQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0NBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0NBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7Q0FDMUUsYUFBYSxPQUFPLE1BQU0sQ0FBQztBQUMzQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRTtDQUN0QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0NBQzFCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztDQUM3QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSTtDQUN4QixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFFO0NBQzNCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0NBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztDQUM5QjtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDckQ7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7Q0FDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN4RCxhQUFhLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztDQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3hELGFBQWE7Q0FDYjtDQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQztDQUNBLFlBQVksT0FBTyxJQUFJLENBQUM7Q0FDeEI7Q0FDQSxTQUFTO0NBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUN6RCxRQUFRLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUM1QyxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUMxQztBQUNBO0NBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFlBQVksS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUM1QyxZQUFZLElBQUksR0FBRyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssS0FBSyxDQUFDO0NBQ3JELFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDckQsWUFBWSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUMxQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUc7QUFDM0M7Q0FDQSxZQUFZLENBQUMsR0FBRyxVQUFVLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUMvQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDL0MsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ2hELFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUNoRCxZQUFZLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUM5RDtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1RDtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDckU7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDakMsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztDQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3JGO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0NBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7Q0FDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztDQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3pEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTs7Q0NsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztDQUNyQztBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7Q0FDQTtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0NBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7Q0FDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtDQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFL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R0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNsRSxpQkFBaUIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQ3RDLFNBQVMsS0FBSTtDQUNiLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3RDLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0NBQzNCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDM0IsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0NBQzdDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztDQUM3QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUk7Q0FDakQsWUFBWSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztDQUN0QyxTQUFTO0FBQ1Q7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7Q0FDL0MsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksZ0JBQWU7Q0FDckQsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJ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LEVBQUUsQ0FBQztBQUNwRTtBQUNBO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDMUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDNUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztDQUNsRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUMxRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUN2QjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN4RCxhQUFhLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDakQsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUMxQixZQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0NBQzdCLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQy9DLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztDQUNqRCxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDckQsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ2xELFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztDQUN0RCxTQUFTO0NBQ1QsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQ3JCLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3hELFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3hELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0I7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElB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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7Q0FDbkQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUN0RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0NBQ3BDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzdCO0NBQ0EsU0FBUztBQUNUO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztBQUMxUDtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFB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Q0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDM0M7QUFDQTtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDcEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNsQixHQUFHO0NBQ0g7O0NDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7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RSxDQUFDO0NBQ3ZDLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQztDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7Q0FDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0NBQy9CO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztDQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztDQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7Q0FDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtDQUNBLFFBQVEsSUFBSSxJ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RDtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7Q0FDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENB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QUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztDQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7Q0FDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDL0xBO0FBRUE7Q0FDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtDQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztDQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxDQUFDLFFB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LEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDdEM7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztDQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtDQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FB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QUFFO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0NBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7Q0FDQTtBQUNBO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlGO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0NBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0NBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0NBQ0EsS0FBSztDQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxD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QUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Q0FDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkc7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNwSDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDMUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTs7Q0NyUkE7QUFJQTtDQUNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztDQUNwQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0NBQ3RCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUM7Q0FDbEMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ25DLElBQUksSUFBSSxDQUFDLEtBQUssUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNwRSxJQUFJLElBQUksQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Q0FDbEMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzVFLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0U7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7Q0FDekMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0FBQzFDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDLENBQUMsUUFBUSxLQUFLLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLGtDQUFrQyxFQUFFLENBQUM7QUFDM0c7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7Q0FDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztDQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0NBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENB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LEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMxRixRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztDQUM3SCxRQUFRLE1BQU07Q0FDZCxPQUFPLE1BQU07Q0FDYixRQUFRLE1BQU07Q0FDZCxPQUFPO0NBQ1AsTUFBTSxLQUFLLEVBQUUsQ0FBQztDQUNkLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQTtBQUNBO0NBQ0E7Q0FDQSxFQUFFLFlBQVksR0FBRztDQUNqQixJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQztDQUNuQixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7Q0FDckMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZDtDQUNBO0NBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdFO0NBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNwRSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ2hHLEtBQUs7Q0FDTCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzlDO0NBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtDQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDaEQsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUN4QyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNyQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ25ELFVBQVUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0RDtDQUNBO0NBQ0EsVUFBVSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMvQyxVQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xEO0NBQ0EsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDO0NBQ3JCLFNBQVM7Q0FDVCxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDeEMsT0FBTyxNQUFNO0NBQ2I7Q0FDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0NBQ25DLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDN0QsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUMvQztDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUM1RDtDQUNBLFVBQVUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMvQixVQUFVLE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQy9GLFVBQVUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6RTtDQUNBLFVBQVUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDL0MsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7Q0FDM0QsU0FBUztDQUNULFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQztDQUNuQixPQUFPO0NBQ1AsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztDQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3ZDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztDQUNyQyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0NBQ3RCLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqQyxJQUFJLE9BQU8sR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Q0FDakI7Q0FDQSxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlDQUF5QyxDQUFDLENBQUM7Q0FDN0YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNqQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDbkIsS0FBSztDQUNMLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbEIsR0FBRztBQUNIO0NBQ0E7Q0FDQSxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sR0FBRyxJQUFJLEVBQUU7Q0FDbkQsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0NBQ3hCLElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMzQjtDQUNBO0NBQ0EsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM5QixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDaEMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN0QztDQUNBO0NBQ0EsSUFBSSxHQUFHLENBQUMsV0FBVyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUM3QztDQUNBO0NBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzdCLElBQUksTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDO0FBQ2pGO0NBQ0EsSUFBSSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDakUsSUFBSSxNQUFNLFVBQVUsS0FBSyxZQUFZLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDO0FBQ2xGO0NBQ0E7Q0FDQSxJQUFJLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7QUFDakY7Q0FDQTtDQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzNCLElBQUksQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzNCLElBQUksQ0FBQyxDQUFDLE1BQU0sT0FBTyxZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUM1QztDQUNBO0NBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxL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LElBQUksQ0FBQztDQUN4QyxVQUFVLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO0NBQ3hGLFlBQVksT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ3hDLFdBQVc7Q0FDWCxTQUFTO0NBQ1QsT0FBTyxNQUFNO0NBQ2I7Q0FDQSxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQy9ELFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUN4QyxVQUFVLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztDQUM5QyxVQUFVLE1BQU0sR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDOUcsVUFBVSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRTtDQUN4RixZQUFZLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztDQUMxQyxXQUFXO0NBQ1gsU0FBUztDQUNULE9BQU87Q0FDUCxLQUFLO0NBQ0wsSUFBSSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7Q0FDekMsR0FBRztBQUNIO0NBQ0EsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFO0NBQ2pCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2hDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7Q0FDaEMsTUFBTSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDeEMsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNyQyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3RHLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQ3BCLE1BQU0sT0FBTyxJQUFJLENBQUM7Q0FDbEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO0NBQ2hDLE1BQU0sTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hDLE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDckMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRTtDQUNsQyxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbkMsUUFBUSxPQUFPLElBQUksQ0FBQztDQUNwQixPQUFPO0NBQ1AsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0NBQzlCO0NBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQztDQUNsQixLQUFLO0FBQ0w7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUl6QjtBQUNMO0NBQ0EsSUFBSSxPQUFPLEtBQUssQ0FBQztDQUNqQixHQUFHO0FBQ0g7Q0FDQTtDQUNBLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7Q0FDbEIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLElBQUksTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU87QUFDdkM7Q0FDQTtDQUNBLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3hDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDekI7Q0FDQTtDQUNBLElBQUksTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ2pDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQ2xCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7Q0FDMUQsR0FBRztBQUNIO0NBQ0E7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Q0FDakIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUN6RCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNsQixHQUFHO0NBQ0gsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFO0NBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQ2xCLEdBQUc7Q0FDSCxFQUFFLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUU7Q0FDL0MsSUFBSSxJQUFJLE9BQU8sT0FBTyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztDQUM3RCxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNyRSxJQUFJLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0NBQ3JFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQ2xCLEdBQUc7Q0FDSDs7QUNqV1ksT0FBQyxHQUFHLEdBQUcsWUFBWTtBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDO0NBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUN0QztDQUNBLFlBQVksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN4QixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNCO0NBQ0EsU0FBUyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQzlDO0NBQ0EsWUFBWSxHQUFHLEdBQUcsSUFBSSxDQUFDO0NBQ3ZCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN6RDtDQUNBLFlBQVksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3hFO0NBQ0EsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3JCLFlBQVksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDO0FBQ3hFO0NBQ0EsWUFBWSxJQUFJLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtDQUNwRSxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEM7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO0NBQzlCLFlBQVksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDeEI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLFFBQVEsSUFBSTtBQUNwQjtDQUNBLFlBQVksS0FBSyxNQUFNLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0NBQ2hFLFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtDQUNwRCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDeEQsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0NBQ2xELFlBQVksS0FBSyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtDQUM5QyxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDbEQsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0NBQ2xELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtDQUN4RCxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDaEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0NBQ2hELFlBQVksS0FBSyxTQUFTLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0NBQ3JFLFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtDQUNsRCxZQUFZLEtBQUssV0FBVyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtDQUN6RSxZQUFZLEtBQUssT0FBTyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtDQUMvRCxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDcEQsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0NBQ3BELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtDQUN4RCxZQUFZLEtBQUssT0FBTyxDQUFDLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtDQUNoRSxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDaEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0NBQ2hELFlBQVksS0FBSyxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0NBQzlELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN4RDtDQUNBLFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUN4QjtDQUNBLFlBQVksS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFJO0FBQ25DO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUNuRCxZQUFZLE9BQU8sQ0FBQyxDQUFDO0FBQ3JCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsRUFBQztBQUNEO0NBQ08sTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFDO0NBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxRQUFPO0FBQ3RCO0NBQ0EsSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsT0FBTTtDQUM5QyxTQUFTLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLEdBQUcsUUFBTztDQUNyRCxhQUFhLElBQUksR0FBRyxTQUFRO0FBQzVCO0NBQ0EsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLFFBQU87Q0FDcEMsYUFBYSxJQUFJLEdBQUcsUUFBTztBQUMzQjtDQUNBLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFFO0FBQzNEO0NBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsR0FBRyxJQUFJLEdBQUcsU0FBUTtDQUN0RCxhQUFhLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxHQUFHLElBQUksR0FBRyxPQUFNO0FBQ3pEO0NBQ0EsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsWUFBWSxNQUFNLEVBQUU7QUFDN0Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLFNBQVE7Q0FDL0MsYUFBYSxJQUFJLEdBQUcsT0FBTTtBQUMxQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxJQUFJO0FBQ2Y7Q0FDQTs7Q0MzSEE7Q0FDQTtDQUNBO0FBQ0E7Q0FDTyxNQUFNLEdBQUcsQ0FBQztDQUNqQixFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0NBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ2pDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7Q0FDdEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDM0MsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUM7Q0FDQTtBQUNBO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztDQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3ZCO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7Q0FDeEMsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztBQUM5QjtDQUNBO0NBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDO0NBQ3pFLFFBQVEsQ0FBQyxDQUFDLG9CQUFvQjtDQUM5QixRQUFRLElBQUksQ0FBQztBQUNiO0NBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0NBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztBQUM1QztDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNwRTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0NBQzNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2Y7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3ZFO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7Q0FDdEMsSUFBSSxJQUFJLENBQUMsTUFBTTtDQUNmLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FB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QUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7Q0FDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0NBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0NBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDaEQsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3pCLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtDQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENB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 diff --git a/build/uil.min.js b/build/uil.min.js index 7e15540..1e80881 100644 --- a/build/uil.min.js +++ b/build/uil.min.js @@ -1,6 +1,9454 @@ -/** - * @license - * Copyright 2010-2021 Uil.js Authors - * SPDX-License-Identifier: MIT - */ -!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?s(exports):"function"==typeof define&&define.amd?define(["exports"],s):s((t="undefined"!=typeof globalThis?globalThis:t||self).UIL={})}(this,(function(t){"use strict";const s={ui:[],dom:null,ID:null,lock:!1,wlock:!1,current:-1,needReZone:!0,needResize:!1,forceZone:!1,isEventsInit:!1,isLeave:!1,addDOMEventListeners:!0,downTime:0,prevTime:0,prevDefault:["contextmenu"],pointerEvent:["pointerdown","pointermove","pointerup"],eventOut:["pointercancel","pointerout","pointerleave"],xmlserializer:null,tmpTime:null,tmpImage:null,oldCursor:"auto",input:null,parent:null,firstImput:!0,hiddenImput:null,hiddenSizer:null,hasFocus:!1,startInput:!1,inputRange:[0,0],cursorId:0,str:"",pos:0,startX:-1,moveX:-1,debugInput:!1,isLoop:!1,listens:[],e:{type:null,clientX:0,clientY:0,keyCode:NaN,key:null,delta:0},isMobile:!1,now:null,needsUpdate:!1,getTime:function(){return self.performance&&self.performance.now?self.performance.now.bind(performance):Date.now},add:function(t){s.ui.push(t),s.getZone(t),s.isEventsInit||s.initEvents()},testMobile:function(){let t=navigator.userAgent;return!!(t.match(/Android/i)||t.match(/webOS/i)||t.match(/iPhone/i)||t.match(/iPad/i)||t.match(/iPod/i)||t.match(/BlackBerry/i)||t.match(/Windows Phone/i))},remove:function(t){let i=s.ui.indexOf(t);-1!==i&&(s.removeListen(t),s.ui.splice(i,1)),0===s.ui.length&&s.removeEvents()},initEvents:function(){if(s.isEventsInit)return;let t=document.body;s.isMobile=s.testMobile(),s.now=s.getTime(),s.isMobile?t.style.touchAction="none":t.addEventListener("wheel",s,{passive:!1}),console.log("R.addDOMEventListeners "+s.addDOMEventListeners),s.addDOMEventListeners&&(t.addEventListener("pointercancel",s),t.addEventListener("pointerleave",s),t.addEventListener("pointermove",s),t.addEventListener("pointerdown",s),t.addEventListener("pointerup",s),t.addEventListener("keydown",s,!1),t.addEventListener("keyup",s,!1)),window.addEventListener("resize",s.resize,!1),s.isEventsInit=!0,s.dom=t},removeEvents:function(){if(!s.isEventsInit)return;let t=document.body;s.isMobile||t.removeEventListener("wheel",s),s.addDOMEventListeners&&(t.removeEventListener("pointercancel",s),t.removeEventListener("pointerleave",s),t.removeEventListener("pointermove",s),t.removeEventListener("pointerdown",s),t.removeEventListener("pointerup",s),t.removeEventListener("keydown",s),t.removeEventListener("keyup",s)),window.removeEventListener("resize",s.resize),s.isEventsInit=!1},resize:function(){let t,i=s.ui.length;for(;i--;)t=s.ui[i],t.isGui&&!t.isCanvasOnly&&t.autoResize&&t.calc();s.needReZone=!0,s.needResize=!1},out:function(){console.log("im am out"),s.clearOldID()},in:function(){console.log("im am in")},fakeUp:function(){this.handleEvent({type:"pointerup"})},handleEvent:function(t){-1!==s.prevDefault.indexOf(t.type)&&t.preventDefault(),s.needResize&&s.resize(),s.findZone(s.forceZone);let i=s.e,e=!1;"keydown"===t.type&&s.keydown(t),"keyup"===t.type&&s.keyup(t),"wheel"===t.type?i.delta=t.deltaY>0?1:-1:i.delta=0;let h=t.pointerType;if(i.clientX=("touch"===h?t.pageX:t.clientX)||0,i.clientY=("touch"===h?t.pageY:t.clientY)||0,i.type=t.type,-1!==s.eventOut.indexOf(t.type)&&(e=!0,i.type="mouseup"),"pointerleave"===t.type&&(s.isLeave=!0),"pointerdown"===t.type&&(i.type="mousedown"),"pointerup"===t.type&&(i.type="mouseup"),"pointermove"===t.type&&(s.isLeave&&(s.isLeave=!1,s.resize()),i.type="mousemove"),"mousedown"===i.type){if(s.downTime=s.now(),s.downTime-s.prevTime<200)return s.selectAll(),!1;s.prevTime=s.downTime,s.forceZone=!1}"mousedown"===i.type&&s.clearInput(),"mousedown"===i.type&&(s.lock=!0),"mouseup"===i.type&&(s.lock=!1),s.isMobile&&"mousedown"===i.type&&s.findID(i),"mousemove"!==i.type||s.lock||s.findID(i),null!==s.ID&&(s.ID.isCanvasOnly&&(i.clientX=s.ID.mouse.x,i.clientY=s.ID.mouse.y),s.ID.handleEvent(i)),s.isMobile&&"mouseup"===i.type&&s.clearOldID(),e&&s.clearOldID()},findID:function(t){let i,e,h,o=s.ui.length,n=-1;for(;o--;)if(i=s.ui[o],i.isCanvasOnly?(e=i.mouse.x,h=i.mouse.y):(e=t.clientX,h=t.clientY),s.onZone(i,e,h)){n=o,n!==s.current&&(s.clearOldID(),s.current=n,s.ID=i);break}-1===n&&s.clearOldID()},clearOldID:function(){s.ID&&(s.current=-1,s.ID.reset(),s.ID=null,s.cursor())},calcUis:(t,i,e,h=!1)=>{let o,n,r,l=t.length,a=0,c=0,d=0;for(;l--;)o=t[c],c++,!h&&o.isGroup&&o.calcUis(),r=o.margin,o.zone.w=o.w,o.zone.h=o.h+r,o.autoWidth?(a=0,o.zone.x=i.x+o.dx,o.zone.y=e,e+=o.h+r,d+=o.h+r):(0===a&&(d+=o.h+r),o.zone.x=i.x+a,o.zone.y=e,n=s.getWidth(o),n?o.zone.w=o.w=n:o.fw&&(o.zone.w=o.w=o.fw),a+=o.zone.w,a>=i.w&&(e+=o.h+r,a=0));return d},findTarget:function(t,i){let e=t.length;for(;e--;)if(s.onZone(t[e],i.clientX,i.clientY))return e;return-1},findZone:function(t){if(s.needReZone||t){for(var i,e=s.ui.length;e--;)i=s.ui[e],s.getZone(i),i.isGui&&i.calcUis();s.needReZone=!1}},onZone:function(t,s,i){if(void 0===s||void 0===i)return!1;let e=t.zone,h=s-e.x,o=i-e.y,n=h>=0&&o>=0&&h<=e.w&&o<=e.h;return n?t.local.set(h,o):t.local.neg(),n},getWidth:function(t){return t.getDom().clientWidth},getZone:function(t){if(t.isCanvasOnly)return;let s=t.getDom().getBoundingClientRect();t.zone={x:s.left,y:s.top,w:s.width,h:s.height}},cursor:function(t){(t=t||"auto")!==s.oldCursor&&(document.body.style.cursor=t,s.oldCursor=t)},toCanvas:function(t,i,e,h){if(s.xmlserializer||(s.xmlserializer=new XMLSerializer),h&&null!==s.tmpTime&&(clearTimeout(s.tmpTime),s.tmpTime=null),null!==s.tmpTime)return;s.lock&&(s.tmpTime=setTimeout((function(){s.tmpTime=null}),10));let o=!1;i===t.canvas.width&&e===t.canvas.height||(o=!0),null===s.tmpImage&&(s.tmpImage=new Image);let n=s.tmpImage,r=s.xmlserializer.serializeToString(t.content),l=''+r+"";n.onload=function(){let s=t.canvas.getContext("2d");o?(t.canvas.width=i,t.canvas.height=e):s.clearRect(0,0,i,e),s.drawImage(this,0,0),t.onDraw()},n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(l),n.crossOrigin="",s.needsUpdate=!1},setHidden:function(){null===s.hiddenImput&&(s.hiddenImput=document.createElement("input"),s.hiddenImput.type="text",s.hiddenSizer=document.createElement("div"),document.body.appendChild(s.hiddenImput),document.body.appendChild(s.hiddenSizer));let t=s.debugInput?"":"opacity:0; zIndex:0;",i=s.parent.css.txtselect+"padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;"+t;s.hiddenImput.style.cssText=i+"bottom:10px;"+(s.debugInput?"":"transform:scale(0);"),s.hiddenSizer.style.cssText=i+"bottom:40px;",s.hiddenImput.style.width=s.input.clientWidth+"px",s.hiddenImput.value=s.str,s.hiddenSizer.innerHTML=s.str,s.hasFocus=!0},clearHidden:function(t){null!==s.hiddenImput&&(s.hasFocus=!1)},clickPos:function(t){let i=s.str.length,e=0,h=0;for(;i--&&(e+=s.textWidth(s.str[h]),!(e>=t));)h++;return h},upInput:function(t,i){if(null===s.parent)return!1;let e=!1;if(i){let i=s.clickPos(t);if(s.moveX=i,-1===s.startX)s.startX=i,s.cursorId=i,s.inputRange=[s.startX,s.startX];else{s.moveX!==s.startX&&(s.startX>s.moveX?s.inputRange=[s.moveX,s.startX]:s.inputRange=[s.startX,s.moveX])}e=!0}else-1!==s.startX&&(s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.startX=-1,e=!0);return e&&s.selectParent(),e},selectAll:function(){s.parent&&(s.str=s.input.textContent,s.inputRange=[0,s.str.length],s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.cursorId=s.inputRange[1],s.selectParent())},selectParent:function(){var t=s.textWidth(s.str.substring(0,s.cursorId)),i=s.textWidth(s.str.substring(0,s.inputRange[0])),e=s.textWidth(s.str.substring(s.inputRange[0],s.inputRange[1]));s.parent.select(t,i,e,s.hiddenSizer.innerHTML)},textWidth:function(t){return null===s.hiddenSizer?0:(t=t.replace(/ /g," "),s.hiddenSizer.innerHTML=t,s.hiddenSizer.clientWidth)},clearInput:function(){null!==s.parent&&(s.firstImput||s.parent.validate(!0),s.clearHidden(),s.parent.unselect(),s.input.style.background=s.parent.colors.back,s.input.style.borderColor=s.parent.colors.border,s.parent.isEdit=!1,s.input=null,s.parent=null,s.str="",s.firstImput=!0)},setInput:function(t,i){s.clearInput(),s.input=t,s.parent=i,s.input.style.background=s.parent.colors.backoff,s.input.style.borderColor=s.parent.colors.select,s.str=s.input.textContent,s.setHidden()},keydown:function(t){if(null===s.parent)return;let i=t.which;t.shiftKey,s.firstImput=!1,s.hasFocus&&(window.focus(),s.hiddenImput.focus()),s.parent.isEdit=!0,13===i?s.clearInput():s.input.isNum?t.keyCode>47&&t.keyCode<58||t.keyCode>95&&t.keyCode<106||190===t.keyCode||110===t.keyCode||8===t.keyCode||109===t.keyCode?s.hiddenImput.readOnly=!1:s.hiddenImput.readOnly=!0:s.hiddenImput.readOnly=!1},keyup:function(t){null!==s.parent&&(s.str=s.hiddenImput.value,s.parent.allEqual?s.parent.sameStr(s.str):s.input.textContent=s.str,s.cursorId=s.hiddenImput.selectionStart,s.inputRange=[s.hiddenImput.selectionStart,s.hiddenImput.selectionEnd],s.selectParent(),s.parent.validate())},loop:function(){s.isLoop&&requestAnimationFrame(s.loop),s.needsUpdate=s.update(),s.ui[0]&&s.needsUpdate&&s.ui[0].draw()},update:function(){let t=s.listens.length,i=!1;for(;t--;){s.listens[t].listening()&&(i=!0)}return i},removeListen:function(t){let i=s.listens.indexOf(t);-1!==i&&s.listens.splice(i,1),0===s.listens.length&&(s.isLoop=!1)},addListen:function(t){return-1===s.listens.indexOf(t)&&(s.listens.push(t),s.isLoop||(s.isLoop=!0,s.loop()),!0)}},i=s,e={transition:.2,frag:document.createDocumentFragment(),colorRing:null,joystick_0:null,joystick_1:null,circular:null,knob:null,pad2d:null,svgns:"http://www.w3.org/2000/svg",links:"http://www.w3.org/1999/xlink",htmls:"http://www.w3.org/1999/xhtml",DOM_SIZE:["height","width","top","left","bottom","right","margin-left","margin-right","margin-top","margin-bottom"],SVG_TYPE_D:["pattern","defs","transform","stop","animate","radialGradient","linearGradient","animateMotion","use","filter","feColorMatrix"],SVG_TYPE_G:["svg","rect","circle","path","polygon","text","g","line","foreignObject"],PI:Math.PI,TwoPI:2*Math.PI,pi90:.5*Math.PI,pi60:Math.PI/3,torad:Math.PI/180,todeg:180/Math.PI,clamp:(t,s,i)=>t=(t=ti?i:t,isDivid:t=>.5*t===Math.floor(.5*t),size:{w:240,h:20,p:30,s:8},defineColor:(t,s=e.colors)=>{let i={...s},h=["fontFamily","fontWeight","fontShadow","fontSize"],o=!1;t.font&&(t.fontFamily=t.font),t.shadow&&(t.fontShadow=t.shadow),t.weight&&(t.fontWeight=t.weight),t.fontColor&&(t.text=t.fontColor),t.color&&(t.text=t.color),t.text&&(i.text=t.text,t.fontColor||t.color||(i.title=e.ColorLuma(t.text,-.25),i.titleoff=e.ColorLuma(t.text,-.5)),i.textOver=e.ColorLuma(t.text,.25),i.textSelect=e.ColorLuma(t.text,.5)),t.button&&(i.button=t.button,i.border=e.ColorLuma(t.button,.1),i.overoff=e.ColorLuma(t.button,.2)),t.select&&(i.select=t.select,i.over=e.ColorLuma(t.select,-.1)),t.itemBg&&(t.back=t.itemBg),t.back&&(i.back=t.back,i.backoff=e.ColorLuma(t.back,-.1)),t.fontSelect&&(i.textSelect=t.fontSelect),t.groupBorder&&(i.gborder=t.groupBorder),t.bgOver&&(i.backgroundOver=t.bgOver);for(let s in i)void 0!==t[s]&&(i[s]=t[s]);for(let s in t)-1!==h.indexOf(s)&&(o=!0);return o&&e.defineText(i),i},colors:{sx:4,sy:2,radius:2,showOver:1,content:"none",background:"rgba(50,50,50,0.15)",backgroundOver:"rgba(50,50,50,0.3)",title:"#CCC",titleoff:"#BBB",text:"#DDD",textOver:"#EEE",textSelect:"#FFF",back:"rgba(0,0,0,0.2)",backoff:"rgba(0,0,0,0.3)",border:"#4c4c4c",borderSize:1,gborder:"none",groups:"none",button:"#3c3c3c",overoff:"#5c5c5c",over:"#024699",select:"#308AFF",action:"#FF3300",fontFamily:"Consolas, monospace",fontWeight:"normal",fontShadow:"none",fontSize:12,joyOver:"rgba(48,138,255,0.25)",joyOut:"rgba(100,100,100,0.5)",joySelect:"#308AFF",hide:"rgba(0,0,0,0)"},css:{basic:"position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; -o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;",button:"display:flex; align-items:center; justify-content:center; text-align:center;",middle:"display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;"},svgs:{g1:"M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z",g2:"M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z",group:"M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z",arrow:"M 3 8 L 8 5 3 2 3 8 Z",arrowDown:"M 5 8 L 8 3 2 3 5 8 Z",arrowUp:"M 5 2 L 2 7 8 7 5 2 Z",solid:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z",body:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z",vehicle:"M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z",articulation:"M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z",character:"M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z",terrain:"M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z",joint:"M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z",ray:"M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z",collision:"M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z",map:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",material:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",texture:"M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z",object:"M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z",none:"M 9 5 L 5 5 5 9 9 9 9 5 Z",cursor:"M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z",load:"M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z",save:"M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z",extern:"M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z"},rezone(){i.needReZone=!0},getImput:function(){return!!i.input},setStyle:function(t){for(var s in t)e.colors[s]&&(e.colors[s]=t[s]);e.setText()},defineText:function(t){e.setText(t.fontSize,t.text,t.fontFamily,t.fontShadow,t.fontWeight)},setText:function(t,s,i,h,o){let n=e.colors;void 0===i&&(i=n.fontFamily),void 0===t&&(t=n.fontSize),void 0===h&&(h=n.fontShadow),void 0===o&&(o=n.fontWeight),void 0===s&&(s=n.text),isNaN(t)?-1===t.search("em")&&(t+="px"):t+="px",e.css.txt=e.css.basic+e.css.middle+" font-family:"+i+"; font-weight:"+o+"; font-size:"+t+"; color:"+n.text+"; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;","none"!==h&&(e.css.txt+=" text-shadow: 1px 1px 1px "+h+";"),e.css.txtselect=e.css.txt+"padding:0px 4px; border:1px dashed "+n.border+";",e.css.item=e.css.txt+"padding:0px 4px; position:relative; margin-bottom:1px; "},cloneCss:function(){return{...e.css}},clone:function(t){return t.cloneNode(!0)},setSvg:function(t,s,i,e,h){-1===e?t.setAttributeNS(null,s,i):void 0!==h?t.childNodes[e||0].childNodes[h||0].setAttributeNS(null,s,i):t.childNodes[e||0].setAttributeNS(null,s,i)},setCss:function(t,s){for(let i in s)-1!==e.DOM_SIZE.indexOf(i)?t.style[i]=s[i]+"px":t.style[i]=s[i]},set:function(t,s){for(let i in s)"txt"===i&&(t.textContent=s[i]),"link"===i?t.setAttributeNS(e.links,"xlink:href",s[i]):t.setAttributeNS(null,i,s[i])},get:function(t,s){if(void 0===s)return t;if(!isNaN(s))return t.childNodes[s];if(s instanceof Array){if(2===s.length)return t.childNodes[s[0]].childNodes[s[1]];if(3===s.length)return t.childNodes[s[0]].childNodes[s[1]].childNodes[s[2]]}},dom:function(t,s,i,h,o){return t=t||"div",-1!==e.SVG_TYPE_D.indexOf(t)||-1!==e.SVG_TYPE_G.indexOf(t)?"svg"===t?(h=document.createElementNS(e.svgns,"svg"),e.set(h,i)):(void 0===h&&(h=document.createElementNS(e.svgns,"svg")),e.addAttributes(h,t,i,o)):h=void 0===h?document.createElementNS(e.htmls,t):h.appendChild(document.createElementNS(e.htmls,t)),s&&(h.style.cssText=s),void 0===o?h:h.childNodes[o||0]},addAttributes:function(t,s,i,h){let o=document.createElementNS(e.svgns,s);return e.set(o,i),e.get(t,h).appendChild(o),-1!==e.SVG_TYPE_G.indexOf(s)&&(o.style.pointerEvents="none"),o},clear:function(t){for(e.purge(t);t.firstChild;)t.firstChild.firstChild&&e.clear(t.firstChild),t.removeChild(t.firstChild)},purge:function(t){let s,i,h=t.attributes;if(h)for(s=h.length;s--;)i=h[s].name,"function"==typeof t[i]&&(t[i]=null);if(h=t.childNodes,h)for(s=h.length;s--;)e.purge(t.childNodes[s])},addSVGGlowEffect:function(){if(null!==document.getElementById("UILGlow"))return;let t=e.initUILEffects(),s=e.addAttributes(t,"filter",{id:"UILGlow",x:"-20%",y:"-20%",width:"140%",height:"140%"});e.addAttributes(s,"feGaussianBlur",{in:"SourceGraphic",stdDeviation:"3",result:"uilBlur"});let i=e.addAttributes(s,"feMerge",{});for(let t=0;t<=3;t++)e.addAttributes(i,"feMergeNode",{in:"uilBlur"});e.addAttributes(i,"feMergeNode",{in:"SourceGraphic"})},initUILEffects:function(){let t=document.getElementById("UILSVGEffects");return null===t&&(t=e.dom("svg",void 0,{id:"UILSVGEffects",width:"0",height:"0"}),document.body.appendChild(t)),t},ColorLuma:function(t,s){"n"===t&&(t="#000"),(t=String(t).replace(/[^0-9a-f]/gi,"")).length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),s=s||0;let i,e,h="#";for(e=0;e<3;e++)i=parseInt(t.substr(2*e,2),16),i=Math.round(Math.min(Math.max(0,i+i*s),255)).toString(16),h+=("00"+i).substr(i.length);return h},findDeepInver:function(t){return.3*t[0]+.59*t[1]+.11*t[2]<=.6},lerpColor:function(t,s,i){let e={};for(let h=0;h<3;h++)e[h]=t[h]+(s[h]-t[h])*i;return e},hexToHtml:function(t){return"#"+("000000"+(t=void 0===t?0:t).toString(16)).substr(-6)},htmlToHex:function(t){return t.toUpperCase().replace("#","0x")},u255:function(t,s){return parseInt(t.substring(s,s+2),16)/255},u16:function(t,s){return parseInt(t.substring(s,s+1),16)/15},unpack:function(t){return 7==t.length?[e.u255(t,1),e.u255(t,3),e.u255(t,5)]:4==t.length?[e.u16(t,1),e.u16(t,2),e.u16(t,3)]:void 0},p255:function(t){let s=Math.round(255*t).toString(16);return s.length<2&&(s="0"+s),s},pack:function(t){return"#"+e.p255(t[0])+e.p255(t[1])+e.p255(t[2])},htmlRgb:function(t){return"rgb("+Math.round(255*t[0])+","+Math.round(255*t[1])+","+Math.round(255*t[2])+")"},pad:function(t){return 1==t.length&&(t="0"+t),t},rgbToHex:function(t){let s=Math.round(255*t[0]).toString(16),i=Math.round(255*t[1]).toString(16),h=Math.round(255*t[2]).toString(16);return"#"+e.pad(s)+e.pad(i)+e.pad(h)},hueToRgb:function(t,s,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(s-t)*i:i<.5?s:i<2/3?t+6*(s-t)*(2/3-i):t},rgbToHsl:function(t){let s=t[0],i=t[1],e=t[2],h=Math.min(s,i,e),o=Math.max(s,i,e),n=o-h,r=0,l=0,a=(h+o)/2;return a>0&&a<1&&(l=n/(a<.5?2*a:2-2*a)),n>0&&(o==s&&o!=i&&(r+=(i-e)/n),o==i&&o!=e&&(r+=2+(e-s)/n),o==e&&o!=s&&(r+=4+(s-i)/n),r/=6),[r,l,a]},hslToRgb:function(t){let s,i,h=t[0],o=t[1],n=t[2];return 0===o?[n,n,n]:(i=n<=.5?n*(o+1):n+o-n*o,s=2*n-i,[e.hueToRgb(s,i,h+.33333),e.hueToRgb(s,i,h),e.hueToRgb(s,i,h-.33333)])},makeGradiant:function(t,s,i,h){e.dom(t,null,s,i,0);let o,n=i.childNodes[0].childNodes.length-1;for(let t=0;t0){for(a=6;a--;)r[a]=(113*r[a]+u).toFixed(2);c=" M"+r[0]+" "+r[1]+" Q"+r[2]+" "+r[3]+" "+r[4]+" "+r[5],d=[[0,g[0],1],[100,g[1],1]],e.makeGradiant("linearGradient",{id:"G"+l,x1:r[0],y1:r[1],x2:r[4],y2:r[5],gradientUnits:"userSpaceOnUse"},s,d),e.dom("path","",{d:c,"stroke-width":30,stroke:"url(#G"+l+")","stroke-linecap":"butt"},s,1)}m=n-p,g[0]=g[1]}d=[[0,"#FFFFFF",1],[50,"#FFFFFF",0],[50,"#000000",0],[100,"#000000",1]],e.makeGradiant("linearGradient",{id:"GL0",x1:0,y1:u-84.9,x2:0,y2:212.9,gradientUnits:"userSpaceOnUse"},s,d),d=[[0,"#7f7f7f",1],[50,"#7f7f7f",.5],[100,"#7f7f7f",0]],e.makeGradiant("linearGradient",{id:"GL1",x1:78.95,y1:0,x2:226,y2:0,gradientUnits:"userSpaceOnUse"},s,d),e.dom("g",null,{"transform-origin":"128px 128px",transform:"rotate(0)"},s),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"red"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL1)","stroke-width":1,stroke:"url(#GL1)"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL0)","stroke-width":1,stroke:"url(#GL0)"},s,2),e.dom("path","",{d:"M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z",fill:"none","stroke-width":2,stroke:"#000"},s,2),e.dom("circle","",{cx:128,cy:128,r:6,"stroke-width":2,stroke:"#000",fill:"none"},s),e.colorRing=s},icon:function(t,s,i){i=i||40;let h=[""];switch(t){case"logo":h[1]="";break;case"donate":h[1]="";break;case"neo":h[1]="";break;case"phy":h[1]="";break;case"config":h[1]="";break;case"github":h[1]="";break;case"save":h[1]=""}return h[2]="",h.join("\n")},logoFill_d:"\n\t\tM 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 \n\t\tL 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 \n\t\tM 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 \n\t\tQ 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z\n\t\t",logo_github:"\n\t\tM 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 \n\t\t159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 \n\t\t216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 \n\t\t166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 \n\t\t82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z\n\t\t",logo_neo:"\n\t\tM 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 \n\t\t60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 \n\t\t186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 \n\t\t67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L \n\t\t134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z\n\t\t",logo_phy:"\n\t\tM 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 \n\t\tQ 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95\n\t\t",logo_config:"\n\t\tM 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 \n\t\tL 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 \n\t\tQ 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75\n\t\t",logo_donate:"\n\t\tM 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 \n\t\t106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 \n\t\t112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 \n\t\t154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 \n\t\t194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 \n\t\tQ 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 \n\t\t83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 \n\t\t94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 \n\t\t149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M \n\t\t66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 \n\t\t72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 \n\t\t54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 \n\t\t197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 \n\t\t200.9 187.5 200.9 187.5 195.35 Z\n\t\t"};e.setText();const h=e;class o{static autoTypes(t){let s=[];switch(t){case"svg":s=[{accept:{"image/svg+xml":".svg"}}];break;case"wav":s=[{accept:{"audio/wav":".wav"}}];break;case"mp3":s=[{accept:{"audio/mpeg":".mp3"}}];break;case"mp4":s=[{accept:{"video/mp4":".mp4"}}];break;case"bin":case"hex":s=[{description:"Binary Files",accept:{"application/octet-stream":[".bin",".hex"]}}];break;case"text":s=[{description:"Text Files",accept:{"text/plain":[".txt",".text"],"text/html":[".html",".htm"]}}];break;case"json":s=[{description:"JSON Files",accept:{"application/json":[".json"]}}];break;case"js":s=[{description:"JavaScript Files",accept:{"text/javascript":[".js"]}}];break;case"image":s=[{description:"Images",accept:{"image/*":[".png",".gif",".jpeg",".jpg"]}}];break;case"icon":s=[{description:"Icons",accept:{"image/x-ico":[".ico"]}}];break;case"lut":s=[{description:"Lut",accept:{"text/plain":[".cube",".3dl"]}}]}return s}static async load(t={}){"function"!=typeof window.showOpenFilePicker&&(window.showOpenFilePicker=o.showOpenFilePickerPolyfill);try{let s=t.type||"";const i={excludeAcceptAllOption:!!s,multiple:!1};i.types=o.autoTypes(s);const e=await window.showOpenFilePicker(i),h=await e[0].getFile();if(!h)return null;let n=h.name,r=n.substring(n.lastIndexOf(".")+1,n.length);const l=["png","jpg","jpeg","mp4","webm","ogg","mp3"],a=["sea","z","hex","bvh","BVH","glb","gltf"],c=new FileReader;-1!==l.indexOf(r)?c.readAsDataURL(h):-1!==a.indexOf(r)?c.readAsArrayBuffer(h):c.readAsText(h),c.onload=function(i){let e=i.target.result;switch(s){case"image":let s=new Image;s.onload=function(){t.callback&&t.callback(s,n,r)},s.src=e;break;case"json":t.callback&&t.callback(JSON.parse(e),n,r);break;default:t.callback&&t.callback(e,n,r)}}}catch(s){console.log(s),t.always&&t.callback&&t.callback(null)}}static showOpenFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("input");i.type="file",i.multiple=t.multiple,i.accept=t.types.map((t=>t.accept)).flatMap((t=>Object.keys(t).flatMap((s=>t[s])))).join(","),i.addEventListener("change",(()=>{s([...i.files].map((t=>({getFile:async()=>new Promise((s=>{s(t)}))}))))})),i.click()}))}static async save(t={}){let s=!1;"function"!=typeof window.showSaveFilePicker&&(window.showSaveFilePicker=o.showSaveFilePickerPolyfill,s=!0);try{let i=t.type||"";const e={suggestedName:t.name||"hello",data:t.data||""};e.types=o.autoTypes(i),e.finalType=Object.keys(e.types[0].accept)[0],e.suggestedName+=e.types[0].accept[e.finalType][0];const h=await window.showSaveFilePicker(e);if(s)return;const n=await h.createWritable();let r=new Blob([e.data],{type:e.finalType});await n.write(r),await n.close()}catch(t){console.log(t)}}static showSaveFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("a");i.download=t.suggestedName||"my-file.txt";let e=new Blob([t.data],{type:t.finalType});i.href=URL.createObjectURL(e),i.addEventListener("click",(()=>{s(setTimeout((()=>URL.revokeObjectURL(i.href)),1e3))})),i.click()}))}static async getFolder(){try{const t=await window.showDirectoryPicker(),s=[];for await(const i of t.values()){const t=await i.getFile();s.push(t)}return console.log(s),s}catch(t){console.log(t)}}}class n{constructor(t=0,s=0){this.x=t,this.y=s}set(t,s){return this.x=t,this.y=s,this}divide(t){return this.x/=t.x,this.y/=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divideScalar(t){return this.multiplyScalar(1/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}angle(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t}addScalar(t){return this.x+=t,this.y+=t,this}negate(){return this.x*=-1,this.y*=-1,this}neg(){return this.x=-1,this.y=-1,this}isZero(){return 0===this.x&&0===this.y}copy(t){return this.x=t.x,this.y=t.y,this}equals(t){return t.x===this.x&&t.y===this.y}nearEquals(t,s){return t.x.toFixed(s)===this.x.toFixed(s)&&t.y.toFixed(s)===this.y.toFixed(s)}lerp(t,s){return null===t?(this.x-=this.x*s,this.y-=this.y*s):(this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s),this}}class r{constructor(t={}){this.lock=t.lock||!1,this.neverlock=!1,this.isSpace=t.isSpace||!1,this.main=t.main||null,this.isUI=t.isUI||!1,this.group=t.group||null,this.isListen=!1,this.top=0,this.ytop=0,this.dx=t.dx||0,this.isSelectable=void 0!==t.selectable&&t.selectable,this.unselectable=void 0!==t.unselect?t.unselect:this.isSelectable,this.ontop=!!t.ontop&&t.ontop,this.css=this.main?this.main.css:h.css,this.colors=h.defineColor(t,this.main?this.group?this.group.colors:this.main.colors:h.colors),this.overEffect=this.colors.showOver,this.svgs=h.svgs,this.zone={x:0,y:0,w:0,h:0,d:0},this.local=(new n).neg(),this.isCanvasOnly=!1,this.isSelect=!1,this.p=void 0!==t.p?t.p:h.size.p,this.w=this.isUI?this.main.size.w:h.size.w,void 0!==t.w&&(this.w=t.w),this.h=this.isUI?this.main.size.h:h.size.h,void 0!==t.h&&(this.h=t.h),this.isSpace?this.lock=!0:this.h=this.h<11?11:this.h,this.fw=t.fw||0,this.autoWidth=t.auto||!0,this.isOpen=!1,this.radius=t.radius||this.colors.radius,this.transition=t.transition||h.transition,this.isNumber=!1,this.noNeg=t.noNeg||!1,this.allEqual=t.allEqual||!1,this.mono=!1,this.isEdit=!1,this.simple=t.simple||!1,this.simple&&(this.sa=0),this.setSize(this.w),void 0!==t.sa&&(this.sa=t.sa),void 0!==t.sb&&(this.sb=t.sb),this.simple&&(this.sb=this.w-this.sa),this.sc=void 0===t.sc?47:t.sc,this.objectLink=null,this.isSend=!1,this.objectKey=null,this.txt=t.name||"",this.name=t.rename||this.txt,this.target=t.target||null,this.callback=void 0===t.callback?null:t.callback,this.endCallback=null,this.openCallback=void 0===t.openCallback?null:t.openCallback,this.closeCallback=void 0===t.closeCallback?null:t.closeCallback,null===this.callback&&this.isUI&&null!==this.main.callback&&(this.callback=this.group?this.group.callback:this.main.callback),this.c=[],this.s=[],this.useFlex=!!this.isUI&&this.main.useFlex;let s=this.useFlex?"display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;":"float:left;";this.c[0]=h.dom("div",this.css.basic+s+"position:relative; height:20px;"),this.s[0]=this.c[0].style,this.margin=this.colors.sy,this.mtop=0;let i=h.isDivid(this.margin);if(this.isUI&&this.margin&&(this.s[0].boxSizing="content-box",i?(this.mtop=.5*this.margin,this.s[0].borderTop=this.mtop+"px solid transparent",this.s[0].borderBottom=this.mtop+"px solid transparent"):this.s[0].borderBottom=this.margin+"px solid transparent"),this.simple||(this.c[1]=h.dom("div",this.css.txt+this.css.middle),this.s[1]=this.c[1].style,this.c[1].textContent=this.name,this.s[1].color=this.lock?this.colors.titleoff:this.colors.title),t.pos){this.s[0].position="absolute";for(let s in t.pos)this.s[0][s]=t.pos[s];this.mono=!0}t.css&&(this.s[0].cssText=t.css)}init(){this.ytop=this.top+this.mtop,this.zone.h=this.h+this.margin,this.zone.w=this.w;let t=this.s,s=this.c;t[0].height=this.h+"px",this.isUI&&(t[0].background=this.colors.background),!this.autoWidth&&this.useFlex?(t[0].flex="1 0 auto",t[0].minWidth=this.minw+"px",t[0].textAlign="center"):this.isUI&&(t[0].width="100%"),void 0!==s[1]&&this.autoWidth&&(t[1]=s[1].style,t[1].top="1px",t[1].height=this.h-2+"px");let e=h.frag;for(let i=1,h=s.length;i!==h;i++)void 0!==s[i]&&(e.appendChild(s[i]),t[i]=s[i].style);let o=null!==this.target?this.target:this.isUI?this.main.inner:document.body;this.ontop?o.insertAdjacentElement("afterbegin",s[0]):o.appendChild(s[0]),s[0].appendChild(e),this.rSize(),this.isUI||(this.c[0].style.pointerEvents="auto",i.add(this))}addTransition(){this.baseH&&this.transition&&this.isUI&&(this.c[0].style.transition="height "+this.transition+"s ease-out")}dom(t,s,i,e,o){return h.dom(t,s,i,e,o)}setSvg(t,s,i,e,o){h.setSvg(t,s,i,e,o)}setCss(t,s){h.setCss(t,s)}clamp(t,s,i){return h.clamp(t,s,i)}getColorRing(){return h.colorRing||h.makeColorRing(),h.clone(h.colorRing)}getJoystick(t){return h["joystick_"+t]||h.makeJoystick(t),h.clone(h["joystick_"+t])}getCircular(t){return h.circular||h.makeCircular(t),h.clone(h.circular)}getKnob(t){return h.knob||h.makeKnob(t),h.clone(h.knob)}getPad2d(t){return h.pad2d||h.makePad(t),h.clone(h.pad2d)}cursor(t){i.cursor(t)}update(){}reset(){}content(){return this.c[0]}getDom(){return this.c[0]}uiout(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.background)}uiover(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.backgroundOver)}rename(t){void 0!==this.c[1]&&(this.c[1].textContent=t)}listen(){return this.isListen=i.addListen(this),this}listening(){if(null===this.objectLink)return;if(this.isSend)return;if(this.isEdit)return;return this.setValue(this.objectLink[this.objectKey])}setValue(t){const s=this.value;this.isNumber?this.value=this.numValue(t):this.value=t,this.update();let i=!1;return s!==this.value&&(i=!0),i}onChange(t){if(!this.isSpace)return this.callback=t||null,this}onFinishChange(t){if(!this.isSpace)return this.callback=null,this.endCallback=t,this}onOpen(t){return this.openCallback=t,this}onClose(t){return this.closeCallback=t,this}send(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.isSend=!0,null!==this.objectLink&&(this.objectLink[this.objectKey]=t),this.callback&&this.callback(t,this.objectKey),this.isSend=!1}sendEnd(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.endCallback&&this.endCallback(t),null!==this.objectLink&&(this.objectLink[this.objectKey]=t)}dispose(){this.isListen&&i.removeListen(this),h.clear(this.c[0]),null!==this.target?null!==this.group?this.group.clearOne(this):this.target.removeChild(this.c[0]):this.isUI?this.main.clearOne(this):document.body.removeChild(this.c[0]),this.isUI||i.remove(this),this.c=null,this.s=null,this.callback=null,this.target=null,this.isListen=!1}clear(){}getWidth(){let t=i.getWidth(this);t&&(this.w=t)}setSize(t){if(this.autoWidth)if(this.w=t,this.simple)this.sb=this.w-this.sa;else{let t=this.w*(this.p/100);this.sa=Math.floor(t+8),this.sb=Math.floor(this.w-t-16)}}rSize(){this.autoWidth&&(this.isUI||(this.s[0].width=this.w+"px"),this.simple||(this.s[1].width=this.sa+"px"))}setTypeNumber(t){let s;switch(this.isNumber=!0,this.value=0,void 0!==t.value&&("string"==typeof t.value?this.value=1*t.value:this.value=t.value),this.min=void 0===t.min?-1/0:t.min,this.max=void 0===t.max?1/0:t.max,this.precision=void 0===t.precision?2:t.precision,this.precision){case 0:s=1;break;case 1:s=.1;break;case 2:s=.01;break;case 3:s=.001;break;case 4:s=1e-4;break;case 5:s=1e-5;break;case 6:s=1e-6}this.step=void 0===t.step?s:t.step,this.range=this.max-this.min,this.value=this.numValue(this.value)}numValue(t){return this.noNeg&&(t=Math.abs(t)),1*Math.min(this.max,Math.max(this.min,t)).toFixed(this.precision)}handleEvent(t){if(!this.lock)return this.neverlock&&(i.lock=!1),this[t.type]?this[t.type](t):console.error(t.type,"this type of event no existe !")}wheel(t){return!1}mousedown(t){return!1}mousemove(t){return!1}mouseup(t){return!1}keydown(t){return!1}keyup(t){return!1}setReferency(t,s){this.objectLink=t,this.objectKey=s}display(t=!1){this.s[0].visibility=t?"visible":"hidden"}open(){this.isOpen||(this.isOpen=!0,i.needResize=!0,this.openCallback&&this.openCallback())}close(){this.isOpen&&(this.isOpen=!1,i.needResize=!0,this.closeCallback&&this.closeCallback())}needZone(){i.needReZone=!0}rezone(){i.needReZone=!0}select(){}unselect(){}setInput(t){i.setInput(t,this)}upInput(t,s){return i.upInput(t,s)}selected(t){this.isSelect=t||!1}}class l extends r{constructor(t={}){super(t),this.value=t.value||!1,this.model=void 0!==t.mode?t.mode:0,this.onName=t.rename||this.txt,t.onName&&(t.onname=t.onName),t.onname&&(this.onName=t.onname),this.inh=t.inh||Math.floor(.8*this.h),this.inw=t.inw||36;let s=this.colors;if(0===this.model){let t=Math.floor(.5*this.h)-.5*(this.inh-2);this.c[2]=this.dom("div",this.css.basic+"background:"+s.inputBg+"; height:"+(this.inh-2)+"px; width:"+this.inw+"px; top:"+t+"px; border-radius:10px; border:2px solid "+s.back),this.c[3]=this.dom("div",this.css.basic+"height:"+(this.inh-6)+"px; width:16px; top:"+(t+2)+"px; border-radius:10px; background:"+s.button+";")}else this.p=0,void 0!==this.c[1]&&(this.c[1].textContent=""),this.c[2]=this.dom("div",this.css.txt+this.css.button+"top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.borderSize+"px solid "+s.border+"; border-radius:"+this.radius+"px;");this.stat=-1,this.init(),this.update()}mousedown(t){return this.value=!this.value,this.update(!0),this.mousemove(t)}mousemove(t){return this.cursor("pointer"),this.mode(!0)}reset(){return this.cursor(),this.mode()}mode(t){let s,i=!1,e=this.colors,h=this.s,o=this.value;if(s=t?o?4:3:o?2:1,this.stat!==s){if(this.stat=s,0!==this.model){switch(s){case 1:h[2].color=e.text,h[2].background=e.button;break;case 2:h[2].color=e.textSelect,h[2].background=e.select;break;case 3:h[2].color=e.textOver,h[2].background=e.overoff;break;case 4:h[2].color=e.textOver,h[2].background=e.over}this.c[2].innerHTML=o?this.onName:this.name}else{switch(s){case 1:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.button;break;case 2:h[2].background=h[2].borderColor=e.back,h[3].background=e.textOver;break;case 3:h[2].background=h[2].borderColor=e.back,h[3].background=e.overoff;break;case 4:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.textSelect}h[3].marginLeft=o?"17px":"2px",this.c[1].textContent=o?this.onName:this.name}i=!0}return i}update(t){this.mode(),t&&this.send()}rSize(){super.rSize();let t=this.s,s=this.w-10-this.inw;0===this.model?(t[2].left=s+"px",t[3].left=s+"px"):(t[2].left=this.sa+"px",t[2].width=this.sb+"px")}}class a extends r{constructor(t={}){super(t),this.value="",void 0!==t.value&&(this.value=t.value),this.values=t.value||this.txt,t.values&&(this.values=t.values),t.values||t.value||(this.txt=""),this.onName=t.onName||null,this.on=!1,this.bw=t.forceWidth||0,t.bw&&(this.bw=t.bw),this.space=t.space||3,"string"==typeof this.values&&(this.values=[this.values]),this.isDown=!1,this.neverlock=!0,this.res=0,this.lng=this.values.length,this.tmp=[],this.stat=[];let s,i=this.colors;for(let t=0;te[i][0]&&s.x0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.text,this.setSvg(this.c[3],"stroke",s,1);break;case 1:this.s[2].color=i.textOver,this.setSvg(this.c[3],"stroke",i.backoff,0),s=this.model>0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.textOver,this.setSvg(this.c[3],"stroke",s,1)}return this.cmode=t,!0}reset(){this.isDown=!1}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"circular"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;if(s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=s.angle()-this.pi90,this.r=(this.r%this.twoPi+this.twoPi)%this.twoPi,null!==this.oldr){let t=this.r-this.oldr;this.r=Math.abs(t)>Math.PI?this.oldr:this.r,t>6&&(this.r=0),t<-6&&(this.r=this.twoPi)}let i=1/this.twoPi,e=this.r*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=~~(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("circular"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:sMath.PI?1:0)+" 1 "+i+","+e}update(t){if(this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range,this.setSvg(this.c[3],"d",this.makePath(),1),this.model>0){let t=this.colors,s=h.pack(h.lerpColor(h.unpack(h.ColorLuma(t.text,-.75)),h.unpack(t.text),this.percent));this.setSvg(this.c[3],"stroke",s,1)}t&&this.send()}}class d extends r{constructor(t={}){super(t),this.ctype=t.ctype||"hex",this.wfixe=256,this.cw=this.sb>256?256:this.sb,null!=t.cw&&(this.cw=t.cw),this.side=t.side||"down",this.up="down"===this.side?0:1,this.baseH=this.h,this.offset=new n,this.decal=new n,this.pp=new n;let s=this.colors;this.c[2]=this.dom("div",`${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${s.borderSize}px solid ${s.border};`),this.c[0].style.display="block",this.c[3]=this.getColorRing(),this.c[3].style.visibility="hidden",this.hsl=null,this.value="#ffffff",void 0!==t.value&&(t.value instanceof Array?this.value=h.rgbToHex(t.value):isNaN(t.value)?this.value=t.value:this.value=h.hexToHtml(t.value)),this.bcolor=null,this.isDown=!1,this.fistDown=!1,this.notext=t.notext||!1,this.tr=98,this.tsl=Math.sqrt(3)*this.tr,this.hue=0,this.d=256,this.init(),this.setColor(this.value),void 0!==t.open&&this.open()}testZone(t,s){let i=this.local;return-1===i.x&&-1===i.y?"":this.up&&this.isOpen?i.y>this.wfixe?"title":"color":i.ythis.tr)e=(c+u.pi90)/u.TwoPI,this.hue=(e+1)%1,this.setHSL([(e+1)%1,this.hsl[1],this.hsl[2]]);else{l=s.x*this.ratio,a=s.y*this.ratio;let t=this.hue*u.TwoPI+u.PI;t<0&&(t+=2*u.PI),r=Math.atan2(-a,l),r<0&&(r+=2*u.PI);let i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,h=.5*this.tr,c=Math.tan(e)*h,d=Math.sqrt(l*l+a*a),p=Math.sqrt(h*h+c*c);if(d>p){let s=Math.tan(e)*d,o=Math.atan(s/p);o>u.pi60?o=u.pi60:o<-u.pi60&&(o=-u.pi60),r+=o-e,i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,c=Math.tan(e)*h,d=p=Math.sqrt(h*h+c*c)}n=Math.sin(i)*d/this.tsl+.5;let m=1-2*Math.abs(n-.5);o=(Math.cos(i)*d+this.tr/2)/(1.5*this.tr)/m,o=u.clamp(o,0,1),this.setHSL([this.hsl[0],o,n])}}setHeight(){this.h=this.isOpen?this.wfixe+this.baseH+5:this.baseH,this.s[0].height=this.h+"px",this.zone.h=this.h}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(){super.open(),this.setHeight(),this.up&&(this.zone.y-=this.wfixe+5);let t=this.h-this.baseH;this.s[3].visibility="visible",this.parentHeight(t)}close(){super.close(),this.up&&(this.zone.y+=this.wfixe+5);let t=this.h-this.baseH;this.setHeight(),this.s[3].visibility="hidden",this.parentHeight(-t)}update(t){let s=h.rgbToHex(h.hslToRgb([this.hsl[0],1,.5]));this.moveMarkers(),this.value=this.bcolor,this.setSvg(this.c[3],"fill",s,2,0),this.s[2].background=this.bcolor,this.notext||(this.c[2].textContent=h.htmlToHex(this.bcolor)),this.invert=h.findDeepInver(this.rgb),this.s[2].color=this.invert?"#fff":"#000",t&&("array"===this.ctype&&this.send(this.rgb),"rgb"===this.ctype&&this.send(h.htmlRgb(this.rgb)),"hex"===this.ctype&&this.send(h.htmlToHex(this.value)),"html"===this.ctype&&this.send())}setValue(t){t instanceof Array?this.value=h.rgbToHex(t):isNaN(t)?this.value=t:this.value=h.hexToHtml(t),this.setColor(this.value),this.update()}setColor(t){let s=h.unpack(t);return this.bcolor!==t&&s&&(this.bcolor=t,this.rgb=s,this.hsl=h.rgbToHsl(this.rgb),this.hue=this.hsl[0],this.update()),this}setHSL(t){return this.hsl=t,this.rgb=h.hslToRgb(t),this.bcolor=h.rgbToHex(this.rgb),this.update(!0),this}moveMarkers(){let t=this.pp,s=h;this.invert;let i=this.hsl[0]*s.TwoPI,e=2/3*s.PI,o=this.tr,n=this.hsl[0],r=this.hsl[1],l=this.hsl[2],a=(i-s.pi90)*s.todeg;n=-i+s.pi90;let c=Math.cos(n)*o,d=-Math.sin(n)*o,u=Math.cos(n-e)*o,p=-Math.sin(n-e)*o,m=Math.cos(n+e)*o,g=-Math.sin(n+e)*o,x=(u+m)/2,v=(p+g)/2;i=(1-2*Math.abs(l-.5))*r;let b=u+(m-u)*l+(c-x)*i,f=p+(g-p)*l+(d-v)*i;t.set(b,f).addScalar(128),this.setSvg(this.c[3],"transform","rotate("+a+" )",2),this.setSvg(this.c[3],"cx",t.x,3),this.setSvg(this.c[3],"cy",t.y,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",2,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",3),this.setSvg(this.c[3],"fill",this.bcolor,3)}rSize(){super.rSize();let t=this.s;t[2].width=this.sb+"px",t[2].left=this.sa+"px",this.cw=this.sb>256?256:this.sb,this.rSizeColor(this.cw),this.decal.x=Math.floor(.5*(this.w-this.wfixe))}rSizeColor(t){if(t===this.wfixe)return;this.wfixe=t;let s=this.s;this.decal.y="up"===this.side?2:this.baseH+2,this.mid=Math.floor(.5*this.wfixe),this.setSvg(this.c[3],"viewBox","0 0 "+this.wfixe+" "+this.wfixe),s[3].width=this.wfixe+"px",s[3].height=this.wfixe+"px",s[3].top=this.decal.y+"px",this.ratio=256/this.wfixe,this.square=1/(this.wfixe/256*60),this.setHeight()}}class u extends r{constructor(t={}){super(t),this.round=Math.round,this.baseH=this.h,this.hplus=t.hplus||50,this.res=t.res||40,this.l=1,this.precision=t.precision||0,this.custom=t.custom||!1,this.names=t.names||["FPS","MS"];let s=t.cc||["220,220,220","255,255,0"];this.adding=t.adding||!1,this.range=t.range||[165,100,100],this.alpha=t.alpha||.25,this.values=[],this.points=[],this.textDisplay=[],this.custom||(this.now=i.getTime(),this.startTime=0,this.prevTime=0,this.frames=0,this.ms=0,this.fps=0,this.mem=0,this.mm=0,this.isMem=!(!self.performance||!self.performance.memory),this.isMem&&(this.names.push("MEM"),s.push("0,255,255")),this.txt=t.name||"Fps");let e=Math.floor(.5*this.h)-3;const h=this.colors;this.c[1].textContent=this.txt,this.c[0].style.cursor="pointer",this.c[0].style.pointerEvents="auto";let o="display:none; left:10px; top:"+this.h+"px; height:"+(this.hplus-8)+"px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid "+h.border+";";0!==this.radius&&(o+="border-radius:"+this.radius+"px;"),this.c[2]=this.dom("path",this.css.basic+o,{}),this.c[2].setAttribute("viewBox","0 0 "+this.res+" 50"),this.c[2].setAttribute("height","100%"),this.c[2].setAttribute("width","100%"),this.c[2].setAttribute("preserveAspectRatio","none"),this.c[3]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; left:0; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.c[4]=this.dom("div",this.css.txt+"position:absolute; left:10px; top:"+(this.h+2)+"px; display:none; width:100%; text-align:center;"),t.bottomLine&&(this.c[4]=this.dom("div",this.css.basic+"width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);")),this.isShow=!1;let n=this.s;n[1].lineHeight=this.h-4,n[1].color=h.text,0!==this.radius&&(n[0].borderRadius=this.radius+"px"),"none"!==this.colors.gborder&&(n[0].border="1px solid "+h.gborder);let r=0;for(r=0;r "+this.names[r]+" ")}for(r=this.names.length;r--;)this.dom("path",null,{fill:"rgba("+s[r]+","+this.alpha+")","stroke-width":1,stroke:"rgba("+s[r]+",1)","vector-effect":"non-scaling-stroke"},this.c[2]);this.init()}mousedown(t){this.isShow?this.close():this.open()}tick(t){this.values=t,this.isShow&&(this.drawGraph(),this.upText())}makePath(t){let s="";s+="M -1 50";for(let i=0;i";this.c[4].innerHTML=i}drawGraph(){let t,s=this.c[2],i=this.names.length,e=0,h=0;for(;i--;)t=this.adding?(this.values[h]+e)*this.range[h]:this.values[h]*this.range[h],this.points[h].shift(),this.points[h].push(50-t),this.setSvg(s,"d",this.makePath(this.points[h]),i+1),e+=this.values[h],h++}open(){super.open(),this.h=this.hplus+this.baseH,this.setSvg(this.c[3],"d",this.svgs.g2),null!==this.group?this.group.calc(this.hplus):this.isUI&&this.main.calc(this.hplus),this.s[0].height=this.h+"px",this.s[2].display="block",this.s[4].display="block",this.isShow=!0,this.custom||i.addListen(this)}close(){super.close(),this.h=this.baseH,this.setSvg(this.c[3],"d",this.svgs.g1),null!==this.group?this.group.calc(-this.hplus):this.isUI&&this.main.calc(-this.hplus),this.s[0].height=this.h+"px",this.s[2].display="none",this.s[4].display="none",this.isShow=!1,this.custom||i.removeListen(this),this.c[4].innerHTML=""}begin(){this.startTime=this.now()}end(){let t=this.now();if(this.ms=t-this.startTime,this.frames++,t>this.prevTime+1e3&&(this.fps=this.round(1e3*this.frames/(t-this.prevTime)),this.prevTime=t,this.frames=0,this.isMem)){let t=performance.memory.usedJSHeapSize,s=performance.memory.jsHeapSizeLimit;this.mem=this.round(954e-9*t),this.mm=t/s}return this.values=[this.fps,this.ms,this.mm],this.drawGraph(),this.upText([this.fps,this.ms,this.mem]),t}listening(){this.custom||(this.startTime=this.end())}rSize(){let t=this.s,s=this.w;t[3].left=this.sa+this.sb-6+"px",t[0].width=s+"px",t[1].width=s+"px",t[2].left="10px",t[2].width=s-20+"px",t[4].width=s-20+"px"}}class p extends r{constructor(t={}){super(t),this.value=void 0!==t.value?t.value:[0,0,0],this.lng=this.value.length,this.precision=void 0!==t.precision?t.precision:2,this.multiplicator=t.multiplicator||1,this.neg=t.neg||!1,this.line=void 0===t.line||t.line,this.autoWidth=void 0===t.autoWidth||t.autoWidth,this.isNumber=!1,this.isDown=!1,this.h=t.h||138,this.rh=this.h-10,this.top=0,this.c[0].style.width=this.w+"px",void 0!==this.c[1]&&(this.c[1].style.width=this.w+"px",this.autoWidth||(this.c[1].style.width="100%",this.c[1].style.justifyContent="center"),this.top=10,this.h+=10),this.gh=this.rh-28,this.gw=this.w-28,this.c[2]=this.dom("div",this.css.txt+"display:block; text-align:center; padding:0px 0px; top:"+(this.h-20)+"px; left:14px; width:"+this.gw+"px;\tcolor:"+this.colors.text),this.c[2].innerHTML=this.valueToHtml();let s=this.dom("svg",this.css.basic,{viewBox:"0 0 "+this.w+" "+this.rh,width:this.w,height:this.rh,preserveAspectRatio:"none"});this.setCss(s,{width:this.w,height:this.rh,left:0,top:this.top}),this.dom("path","",{d:"",stroke:this.colors.text,"stroke-width":2,fill:"none","stroke-linecap":"butt"},s),this.dom("rect","",{x:10,y:10,width:this.gw+8,height:this.gh+8,stroke:"rgba(0,0,0,0.3)","stroke-width":1,fill:"none"},s),this.iw=(this.gw-4*(this.lng-1))/this.lng;let i=[];this.cMode=[],this.v=[];for(let t=0;t',e="width:"+100/this.lng+"%;";for(;t--;)s===this.lng-1?i+=""+this.value[s]+"":i+=""+this.value[s]+"",s++;return i}updateSVG(){this.line&&this.setSvg(this.c[3],"d",this.makePath(),0);for(let t=0;tthis.top&&s.ye[i][0]&&s.xthis.distance){let t=Math.atan2(this.tmp.x,this.tmp.y);this.tmp.x=Math.sin(t)*this.distance,this.tmp.y=Math.cos(t)*this.distance}this.pos.copy(this.tmp).divideScalar(this.distance).negate(),this.update()}setValue(t){void 0===t&&(t=[0,0]),this.pos.set(t[0]||0,t[1]||0),this.updateSVG()}update(t){void 0===t&&(t=!0),null!==this.interval&&(this.isDown||(this.pos.lerp(null,.3),this.pos.x=Math.abs(this.pos.x)<.01?0:this.pos.x,this.pos.y=Math.abs(this.pos.y)<.01?0:this.pos.y,this.isUI&&this.main.isCanvas&&this.main.draw())),this.updateSVG(),t&&this.send(),this.pos.isZero()&&this.stopInterval()}updateSVG(){let t=.5*this.diam- -this.pos.x*this.distance,s=.5*this.diam- -this.pos.y*this.distance;if(0===this.model){let i=t+5*this.pos.x+5,e=s+5*this.pos.y+10;this.setSvg(this.c[3],"cx",i*this.ratio,3),this.setSvg(this.c[3],"cy",e*this.ratio,3)}else this.setSvg(this.c[3],"cx",t*this.ratio,3),this.setSvg(this.c[3],"cy",s*this.ratio,3);this.setSvg(this.c[3],"cx",t*this.ratio,4),this.setSvg(this.c[3],"cy",s*this.ratio,4),this.value[0]=1*(this.pos.x*this.multiplicator).toFixed(this.precision),this.value[1]=1*(this.pos.y*this.multiplicator).toFixed(this.precision),this.haveText&&(this.c[2].textContent=this.value)}clear(){this.stopInterval(),super.clear()}}class v extends r{constructor(t={}){super(t),this.isCyclic=t.cyclic||!1,this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.autoWidth=!1,this.setTypeNumber(t),this.minw=this.w,this.diam=t.diam||this.w,this.mPI=.8*Math.PI,this.toDeg=180/Math.PI,this.cirRange=2*this.mPI,this.offset=new n,this.h=t.h||this.w+10,this.c[0].style.width=this.w+"px",this.c[0].style.display="block",void 0!==this.c[1]&&(this.c[1].style.width="100%",this.c[1].style.justifyContent="center",this.top=10,this.h+=10),this.percent=0,this.cmode=0;let s=this.colors;this.c[2]=this.dom("div",this.css.txt+"justify-content:center; top:"+(this.h-20)+"px; width:100%; color:"+s.text),this.c[3]=this.getKnob(),this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1),this.setSvg(this.c[3],"stroke",s.text,3),this.setSvg(this.c[3],"d",this.makeGrad(),3),this.setSvg(this.c[3],"viewBox","0 0 "+this.diam+" "+this.diam),this.setCss(this.c[3],{width:this.diam,height:this.diam,left:0,top:this.top}),this.model>0&&(h.dom("path","",{d:"",stroke:s.text,"stroke-width":2,fill:"none","stroke-linecap":"round"},this.c[3]),2==this.model&&(h.addSVGGlowEffect(),this.setSvg(this.c[3],"style",'filter: url("#UILGlow");',4))),this.r=0,this.init(),this.update()}mode(t){let s=this.colors;if(this.cmode===t)return!1;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1);break;case 1:this.s[2].color=s.textOver,this.setSvg(this.c[3],"fill",s.select,0),this.setSvg(this.c[3],"stroke",s.textOver,1)}return this.cmode=t,!0}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"knob"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=-Math.atan2(s.x,s.y),null!==this.oldr&&(this.r=Math.abs(this.r-this.oldr)>Math.PI?this.oldr:this.r),this.r=this.r>this.mPI?this.mPI:this.r,this.r=this.r<-this.mPI?-this.mPI:this.r;let i=1/this.cirRange,e=(this.r+this.mPI)*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=Math.floor(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("knob"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s5?(s=this.range/this.step,t=(a-c)/s):(t=(a-c)/l*2,s=32);for(let c=0;c<=s;++c)i=a-t*c,e=l+44*Math.sin(i),h=l+44*Math.cos(i),o=l+40*Math.sin(i),n=l+40*Math.cos(i),r+="M"+e+" "+h+" L"+o+" "+n+" ";return r}update(t){this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range;let s=Math.PI+this.mPI,i=this.percent*this.cirRange-this.mPI,e=Math.sin(i),o=Math.cos(i),n=25*e+64,r=-25*o+64,l=20*e+64,a=-20*o+64;if(this.setSvg(this.c[3],"d","M "+n+" "+r+" L "+l+" "+a,1),this.model>0){let t=36*Math.sin(s)+64,n=36*Math.cos(s)+64,r=36*e+64,l=-36*o+64,a=i<=Math.PI-this.mPI?0:1;this.setSvg(this.c[3],"d","M "+t+","+n+" A 36,36 1 "+a+" 1 "+r+","+l,4);let c=h.pack(h.lerpColor(h.unpack(h.ColorLuma(this.colors.text,-.75)),h.unpack(this.colors.text),this.percent));this.setSvg(this.c[3],"stroke",c,4)}t&&this.send()}}class b extends r{constructor(t={}){super(t),this.hideCurrent=!1,this.path=t.path||"",this.format=t.format||"",this.isWithImage=""!==this.path,this.preLoadComplete=!1,this.tmpImage={},this.tmpUrl=[],this.m=void 0!==t.m?t.m:5;let s=t.align||"left",i=t.scrollSize||10;this.ss=i+1,this.sMode=0,this.tMode=0,this.listOnly=t.listOnly||!1,this.staticTop=t.staticTop||!1,this.isSelectable=this.listOnly,void 0!==t.select&&(t.selectable=t.select),void 0!==t.selectable&&(this.isSelectable=t.selectable),""===this.txt&&(this.p=0);let e=Math.floor(.5*this.h)-3,h=this.colors;if(this.c[2]=this.dom("div",this.css.basic+"top:0; display:none; border-radius:"+this.radius+"px;"),this.c[3]=this.dom("div",this.css.item+"padding:0px "+this.m+"px; margin-bottom:0px; position:absolute; justify-content:"+s+"; text-align:"+s+"; line-height:"+(this.h-4)+"px; top:1px; background:"+h.button+"; height:"+(this.h-2)+"px; border:1px solid "+h.border+"; border-radius:"+this.radius+"px;"),this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.scrollerBack=this.dom("div",this.css.basic+"right:0px; width:"+i+"px; background:"+h.back+"; display:none;"),this.scroller=this.dom("div",this.css.basic+"right:"+.5*(i-.25*i)+"px; width:"+.25*i+"px; background:"+h.text+"; display:none; "),this.c[3].style.color=h.text,this.list=[],this.refObject=null,t.list)if(t.list instanceof Array)this.list=t.list;else if(t.list instanceof Object){this.refObject=t.list;for(let t in this.refObject)this.list.push(t)}this.items=[],this.prevName="",this.tmpId=0,this.baseH=this.h,this.itemHeight=t.itemHeight||this.h,this.full=t.full||!1,this.py=0,this.ww=this.sb,this.scroll=!1,this.isDown=!1,this.current=null,this.side=t.side||"down",this.up="down"===this.side?0:1,this.up?(this.c[2].style.top="auto",this.c[3].style.top="auto",this.c[4].style.top="auto",this.c[2].style.bottom=this.h-2+"px",this.c[3].style.bottom="1px",this.c[4].style.bottom=e+"px"):this.c[2].style.top=this.baseH+"px",this.listIn=this.dom("div",this.css.basic+"left:0; top:0; width:100%; background:none;"),this.listIn.name="list",this.topList=0,this.c[2].appendChild(this.listIn),this.c[2].appendChild(this.scrollerBack),this.c[2].appendChild(this.scroller),void 0!==t.value?isNaN(t.value)?this.value=t.value:this.value=this.list[t.value]:this.value=this.list[0],this.isOpenOnStart=t.open||!1,this.listOnly&&(this.baseH=5,this.c[3].style.display="none",this.c[4].style.display="none",this.c[2].style.top=this.baseH+"px",this.isOpenOnStart=!0),this.miniCanvas=t.miniCanvas||!1,this.canvasBg=t.canvasBg||"rgba(0,0,0,0)",this.imageSize=t.imageSize||[20,20],this.drag=t.drag||!1,this.dragout=t.dragout||!1,this.dragstart=t.dragstart||null,this.dragend=t.dragend||null,this.setList(this.list),this.init(),this.isWithImage&&this.preloadImage(),this.isOpenOnStart&&this.open(!0),this.baseH+=this.mtop}preloadImage(){this.preLoadComplete=!1,this.tmpImage={};for(let t=0;tthis.h-this.baseH)return"title";if(this.scroll&&s.x>this.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}else{if(s.ythis.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}}return""}testItems(t){let s,i,e,h="",o=this.items,n=o.length;for(;n--;)if(s=o[n],i=s.posy+this.topList,e=s.posy+this.itemHeight+1+this.topList,t>=i&&t<=e)return h="item"+n,this.modeItem(0),this.current=s,this.modeItem(1),h;return h}modeItem(t){if(!this.current)return;this.current.select&&0===t&&(t=2);let s=this.colors;switch(t){case 0:this.current.style.background=s.back,this.current.style.color=s.text;break;case 1:this.current.style.background=s.over,this.current.style.color=s.textOver;break;case 2:this.current.style.background=s.select,this.current.style.color=s.textSelect}}unSelected(){this.current&&(this.modeItem(0),this.current=null)}selected(){this.current&&(this.resetItems(),this.modeItem(2),this.current.select=!0)}resetItems(){let t=this.items.length;for(;t--;)this.items[t].select=!1,this.items[t].style.background=this.colors.back,this.items[t].style.color=this.colors.text}hideActive(){this.hideCurrent&&(this.current&&(this.tmpId=this.current.id),this.resetHide())}resetHide(){console.log(this.tmpId);let t=this.items.length;for(;t--;)t===this.tmpId?(this.items[t].style.height="0px",this.items[t].posy=-1):(this.items[t].style.height=this.itemHeight+"px",this.items[t].posy=(this.itemHeight+1)*(t-1))}mouseup(t){this.isDown=!1}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s?(this.isDown=!0,this.mousemove(t)):"title"===s?(this.modeTitle(2),this.listOnly||(this.hideActive(),this.isOpen?this.close():this.open())):this.current&&(this.value=this.list[this.current.id],this.isSelectable&&this.selected(),this.send(this.value),this.listOnly||(this.close(),this.setTopItem())),!0)}mousemove(t){let s=!1,i=this.testZone(t);if(!i)return s;if("title"===i)this.unSelected(),this.modeTitle(1),this.cursor("pointer");else if("scroll"===i){if(this.cursor("s-resize"),this.modeScroll(1),this.isDown){this.modeScroll(2);let s=this.zone.y+this.baseH-2;this.update(t.clientY-s-.5*this.sh)}}else this.modeTitle(0),this.modeScroll(0),this.cursor("pointer");return i!==this.prevName&&(s=!0),this.prevName=i,s}wheel(t){return"title"!==this.testZone(t)&&(this.py+=10*t.delta,this.update(this.py),!0)}reset(){this.prevName="",this.unSelected(),this.modeTitle(0),this.modeScroll(0)}modeScroll(t){if(t===this.sMode)return;let s=this.scroller.style,i=this.colors;switch(t){case 0:s.background=i.text;break;case 1:case 2:s.background=i.select}this.sMode=t}modeTitle(t){if(t===this.tMode)return;let s=this.s,i=this.colors;switch(t){case 0:s[3].color=i.text,s[3].background=i.button;break;case 1:s[3].color=i.textOver,s[3].background=i.overoff;break;case 2:s[3].color=i.textSelect,s[3].background=i.overoff}this.tMode=t}clearList(){for(;this.listIn.children.length;)this.listIn.removeChild(this.listIn.lastChild);this.items=[]}setList(t){this.clearList(),this.list=t,this.length=this.list.length;let s,e,h=this.hideCurrent?this.length-1:this.length;this.maxItem=this.full?h:5,this.maxItem=hthis.maxHeight&&(this.ww=this.sb-this.ss,this.scroll=!0),this.miniCanvas&&(this.tmpCanvas=document.createElement("canvas"),this.tmpCanvas.width=this.imageSize[0],this.tmpCanvas.height=this.imageSize[1],this.tmpCtx=this.tmpCanvas.getContext("2d"),this.tmpCtx.fillStyle=this.canvasBg,this.tmpCtx.fillRect(0,0,this.imageSize[0],this.imageSize[1]));for(let t=0;tthis.range?this.range:t,this.topList=-Math.floor(t/this.ratio),this.listIn.style.top=this.topList+"px",this.scroller.style.top=Math.floor(t)+"px",this.py=t)}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(t){super.open(),this.update(0),this.h=this.maxHeight+this.baseH+5,this.scroll?(this.scroller.style.display="block",this.scrollerBack.style.display="block"):(this.topList=0,this.h=this.baseH+5+this.max,this.scroller.style.display="none",this.scrollerBack.style.display="none"),this.s[0].height=this.h+"px",this.s[2].display="block",this.up?(this.zone.y-=this.h-(this.baseH-10),this.setSvg(this.c[4],"d",this.svgs.g1)):this.setSvg(this.c[4],"d",this.svgs.g2),this.rSizeContent();let s=this.h-this.baseH;this.zone.h=this.h,t||this.parentHeight(s)}close(){super.close(),this.up&&(this.zone.y+=this.h-(this.baseH-10));let t=this.h-this.baseH;this.h=this.baseH,this.s[0].height=this.h+"px",this.s[2].display="none",this.setSvg(this.c[4],"d",this.svgs.g1),this.zone.h=this.h,this.parentHeight(-t)}text(t){this.c[3].textContent=t}rSizeContent(){let t=this.length;for(;t--;)this.listIn.children[t].style.width=this.ww+"px"}rSize(){super.rSize();let t=this.s,s=this.sb,i=this.sa;void 0!==t[2]&&(t[2].width=s+"px",t[2].left=i+"px",t[3].width=s+"px",t[3].left=i+"px",t[4].left=i+s-15+"px",this.ww=s,this.max>this.maxHeight&&(this.ww=s-this.ss),this.isOpen&&this.rSizeContent())}}class f extends r{constructor(t={}){super(t),this.setTypeNumber(t),this.allway=t.allway||!1,this.isDown=!1,this.value=[0],this.multy=1,this.invmulty=1,this.isSingle=!0,this.isAngle=!1,this.isVector=!1,t.isAngle&&(this.isAngle=!0,this.multy=h.torad,this.invmulty=h.todeg),this.isDrag=t.drag||!1,void 0!==t.value&&(isNaN(t.value)?t.value instanceof Array?(this.value=t.value,this.isSingle=!1):t.value instanceof Object&&(this.value=[],void 0!==t.value.x&&(this.value[0]=t.value.x),void 0!==t.value.y&&(this.value[1]=t.value.y),void 0!==t.value.z&&(this.value[2]=t.value.z),void 0!==t.value.w&&(this.value[3]=t.value.w),this.isSingle=!1,this.isVector=!0):this.value=[t.value]),this.lng=this.value.length,this.tmp=[],this.current=-1,this.prev={x:0,y:0,d:0,v:0};let s=this.colors;this.c[2]=this.dom("div",this.css.basic+" background:"+s.select+"; top:4px; width:0px; height:"+(this.h-8)+"px;"),this.cMode=[];let i=this.lng;for(;i--;)this.isAngle&&(this.value[i]=(180*this.value[i]/Math.PI).toFixed(this.precision)),this.c[3+i]=this.dom("div",this.css.txtselect+"top:1px; height:"+(this.h-2)+"px; color:"+s.text+"; background:"+s.back+"; borderColor:"+s.border+"; border-radius:"+this.radius+"px;"),t.center&&(this.c[2+i].style.textAlign="center"),this.c[3+i].textContent=this.value[i],this.c[3+i].style.color=this.colors.text,this.c[3+i].isNum=!0,this.cMode[i]=0;this.selectId=3+this.lng,this.c[this.selectId]=this.dom("div",this.css.txtselect+"position:absolute; top:2px; height:"+(this.h-4)+"px; padding:0px 0px; width:0px; color:"+s.textSelect+"; background:"+s.select+"; border:none; border-radius:0px;"),this.cursorId=4+this.lng,this.c[this.cursorId]=this.dom("div",this.css.basic+"top:2px; height:"+(this.h-4)+"px; width:0px; background:"+s.text+";"),this.init()}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";let i=this.lng,e=this.tmp;for(;i--;)if(s.x>e[i][0]&&s.x 0";this.easing=t.easing||1,this.setTypeNumber(t),this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.isDown=!1,this.isOver=!1,this.allway=t.allway||!1,this.isDeg=t.isDeg||!1,this.isCyclic=t.cyclic||!1,this.firstImput=!1;let s=this.colors;if(this.c[2]=this.dom("div",this.css.txtselect+"border:none; background:none; width:47px; color:"+s.text+";"),this.c[3]=this.dom("div",this.css.basic+" top:0; height:"+this.h+"px;"),this.c[4]=this.dom("div",this.css.basic+"background:"+s.back+"; top:2px; height:"+(this.h-4)+"px;"),this.c[5]=this.dom("div",this.css.basic+"left:4px; top:5px; height:"+(this.h-10)+"px; background:"+s.text+";"),this.c[2].isNum=!0,this.c[2].style.height=this.h-2+"px",this.c[2].style.lineHeight=this.h-10+"px",0!==this.model){let t=4,i=4,e=8,h=this.h-6,o=16;2===this.model&&(t=0,i=2,e=4,o=2,h=.5*(this.h-6)),3===this.model&&(this.c[5].style.visible="none"),this.c[4].style.borderRadius=t+"px",this.c[4].style.height=e+"px",this.c[4].style.top=.5*this.h-i+"px",this.c[5].style.borderRadius=.5*t+"px",this.c[5].style.height=i+"px",this.c[5].style.top=.5*this.h-.5*i+"px",this.c[6]=this.dom("div",this.css.basic+"border-radius:"+o+"px; margin-left:"+.5*-h+"px; background:"+s.text+"; left:4px; top:3px; height:"+(this.h-6)+"px; width:"+h+"px;")}this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>=this.txl?"text":s.x>=this.sa?"scroll":""}mouseup(t){this.isDown&&(this.isDown=!1)}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s&&(this.isDown=!0,this.old=this.value,this.mousemove(t)),!0)}mousemove(t){let s=!1;if("scroll"===this.testZone(t)?(this.mode(1),this.cursor("w-resize")):this.cursor(),this.isDown){let i=(t.clientX-(this.zone.x+this.sa)-3)/this.ww;i=Math.min(1,Math.max(0,i));let e=Math.pow(i,this.easing)*this.range+this.min,h=i*this.range+this.min;this.sliderValue=this.numValue(h);let o,n=e-this.old;(n>=this.step||n<=this.step)&&(o=Math.floor(n/this.step),this.value=this.numValue(this.old+o*this.step),this.update(!0),this.old=this.value),s=!0}return s}wheel(t){if("scroll"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s=this.sa?"text":""}mouseup(t){if(this.editable)return!!this.isDown&&(this.isDown=!1,this.mousemove(t))}mousedown(t){if(!this.editable)return;let s=this.testZone(t);return!this.isDown&&(this.isDown=!0,"text"===s&&this.setInput(this.c[2]),this.mousemove(t))}mousemove(t){if(!this.editable)return;let s=0;return"text"===this.testZone(t)?this.cursor("text"):this.cursor(),this.isDown&&(s=t.clientX-this.zone.x),this.upInput(s-this.sa-3,this.isDown)}update(){this.c[2].textContent=this.value}reset(){this.cursor()}select(t,s,i,e){let h=this.s,o=this.sa+5;h[4].width="1px",h[4].left=o+s+"px",h[3].left=o+s+"px",h[3].width=i+"px",this.c[3].innerHTML=e}unselect(){let t=this.s;t&&(t[3].width="0px",this.c[3].innerHTML="t",t[4].width="0px")}validate(t){this.allway&&(t=!0),this.value=this.c[2].textContent,""!==this.value?this.c[5].textContent="":this.c[5].textContent=this.placeHolder,t&&this.send()}rSize(){super.rSize();let t=this.s;t[2].left=this.sa+"px",t[2].width=this.sb+"px",t[5].left=this.sa+"px",t[5].width=this.sb+"px"}}class k extends r{constructor(t={}){super(t);let s=t.prefix||"";this.c[2]=this.dom("div",this.css.txt+"justify-content:right; width:60px; line-height:"+(this.h-8)+"px; color:"+this.colors.text),31===this.h&&(this.s[0].height=this.h+"px",this.s[1].top="8px",this.c[2].style.top="8px");let i=this.s;i[1].justifyContent=t.align||"left",i[1].fontWeight=t.fontWeight||"bold",this.c[1].textContent=this.txt.substring(0,1).toUpperCase()+this.txt.substring(1).replace("-"," "),this.c[2].textContent=s,this.init()}text(t){this.c[1].textContent=t}text2(t){this.c[2].textContent=t}rSize(){super.rSize(),this.s[1].width=this.w+"px",this.s[2].left=this.w+"px"}setColor(t){this.s[1].color=t,this.s[2].color=t}}class S extends r{constructor(t={}){super(t),this.value=t.value||"",this.isDown=!1,this.onActif=t.onActif||function(){};const s=this.colors;this.c[2]=this.dom("div",this.css.txt+this.css.button+" top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.buttonBorder+"; border-radius:15px; width:30px; left:10px;"),this.c[3]=this.dom("div",this.css.txtselect+"height:"+(this.h-4)+"px; background:"+s.inputBg+"; borderColor:"+s.inputBorder+"; border-radius:"+this.radius+"px;"),this.c[3].textContent=this.value;let i=Math.floor(.5*this.h)-7;this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:14px; height:14px; left:5px; top:"+i+"px;",{d:this.svgs.cursor,fill:s.text,stroke:"none"}),this.stat=1,this.isActif=!1,this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>this.sa&&s.xthis.sa&&s.xi[r][0]&&s.xe[r][0]&&s.ythis.lng-1&&(h=-1)),h}mouseup(t){return!!this.isDown&&(this.isDown=!1,-1!==this.res&&(this.value=this.values[this.res],this.send()),this.mousemove(t))}mousedown(t){return!this.isDown&&(this.isDown=!0,this.mousemove(t))}mousemove(t){let s=!1;return this.res=this.testZone(t),-1!==this.res?(this.cursor("pointer"),s=this.modes(this.isDown?3:2,this.res)):s=this.reset(),s}modes(t=1,s=-1){let i,e,h=this.lng,o=!1;for(;h--;)e=t,i=!!this.isSelectable&&this.values[h]===this.value,h===s?i&&2===e&&(e=3):(e=1,i&&(e=4)),this.mode(e,h)&&(o=!0);return o}mode(t,s){let i=!1,e=this.colors,h=this.buttons,o=s;if(this.stat[s]!==t){switch(this.stat[s]=t,t){case 1:h[o].style.color=e.text,h[o].style.background=e.button;break;case 2:h[o].style.color=e.textOver,h[o].style.background=e.overoff;break;case 3:h[o].style.color=e.textOver,h[o].style.background=e.over;break;case 4:h[o].style.color=e.textSelect,h[o].style.background=e.select}i=!0}return i}reset(){return this.res=-1,this.cursor(),this.modes()}label(t,s){this.buttons[s].textContent=t}icon(t,s,i){this.buttons[i].style.padding=(s||0)+"px 0px",this.buttons[i].innerHTML=t}testW(){let t=!1;if(3*this.spaces[0]+2*this.bsizeMax>this.w?(this.bsize[0]=.5*(this.w-3*this.spaces[0]),t=!0):this.bsize[0]!==this.bsizeMax&&(this.bsize[0]=this.bsizeMax,t=!0),!t)return;let s=this.buttons.length;for(;s--;)this.buttons[s].style.width=this.bsize[0]+"px"}rSize(){let t;super.rSize(),this.testW(),this.tmpX=[],this.tmpY=[];for(let s=0;sthis.h-this.c[2].offsetHeight?"text":"pad"}mouseup(t){return this.isDown=!1,this.mode(0)}mousedown(t){if("pad"===this.testZone(t))return this.isDown=!0,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=.5*this.w-(t.clientX-this.zone.x),i=.5*this.diam-(t.clientY-this.zone.y-this.ytop),e=256/this.diam;s=-s*e,i=-i*e,s=h.clamp(s,-this.maxPos,this.maxPos),i=h.clamp(i,-this.maxPos,this.maxPos),this.setPos([s,i]),this.update(!0)}mode(t){if(this.cmode===t)return!1;let s=this.colors;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.back,0),this.setSvg(this.c[3],"fill",s.button,1),this.setSvg(this.c[3],"stroke",s.back,2),this.setSvg(this.c[3],"stroke",s.back,3),this.setSvg(this.c[3],"stroke",s.text,4);break;case 1:this.s[2].color=s.textSelect,this.setSvg(this.c[3],"fill",s.backoff,0),this.setSvg(this.c[3],"fill",s.overoff,1),this.setSvg(this.c[3],"stroke",s.backoff,2),this.setSvg(this.c[3],"stroke",s.backoff,3),this.setSvg(this.c[3],"stroke",s.textSelect,4)}return this.cmode=t,!0}update(t){this.c[2].textContent=this.value,this.updateSVG(),t&&this.send()}updateSVG(){1==this.model&&(this.setSvg(this.c[3],"y1",this.pos.y,2),this.setSvg(this.c[3],"y2",this.pos.y,2),this.setSvg(this.c[3],"x1",this.pos.x,3),this.setSvg(this.c[3],"x2",this.pos.x,3)),this.setSvg(this.c[3],"cx",this.pos.x,4),this.setSvg(this.c[3],"cy",this.pos.y,4)}setPos(t){this.pos.set(t[0]+128,t[1]+128);let s=1/this.maxPos;this.value[0]=(t[0]*s*this.range).toFixed(this.precision),this.value[1]=(t[1]*s*this.range).toFixed(this.precision)}setValue(t,s=!1){void 0===t&&(t=this.value),this.value[0]=1*Math.min(this.max,Math.max(this.min,t[0])).toFixed(this.precision),this.value[1]=1*Math.min(this.max,Math.max(this.min,t[1])).toFixed(this.precision),this.pos.set(this.value[0]/this.range*this.maxPos+128,this.value[1]/this.range*this.maxPos+128),this.update(s)}}const T=function(){let t,s,e=arguments,h=!1,o=null;"string"==typeof e[0]?(t=e[0],s=e[1]||{}):"object"==typeof e[0]&&(h=!0,void 0===e[2]&&[].push.call(e,{}),t=e[2].type?e[2].type:O(e[0][e[1]],e[2]),s=e[2],s.name=e[1],s.hasOwnProperty("displayName")&&(s.name=s.displayName),"list"!==t||s.list?s.value=e[0][e[1]]:s.list=e[0][e[1]]);let n=t.toLowerCase();switch("group"===n&&(s.add=T),n){case"bool":case"boolean":o=new l(s);break;case"button":o=new a(s);break;case"circular":o=new c(s);break;case"color":o=new d(s);break;case"fps":o=new u(s);break;case"graph":o=new p(s);break;case"group":o=new g(s);break;case"joystick":o=new x(s);break;case"knob":o=new v(s);break;case"list":o=new b(s);break;case"numeric":case"number":o=new f(s);break;case"slide":o=new w(s);break;case"textInput":case"string":o=new y(s);break;case"title":case"text":o=new k(s);break;case"select":o=new S(s);break;case"bitmap":o=new M(s);break;case"selector":o=new I(s);break;case"empty":case"space":o=new m(s);break;case"item":o=new C(s);break;case"grid":o=new L(s);break;case"pad2d":case"pad":o=new z(s)}if(null!==o)return i.needResize=!0,h&&o.setReferency(e[0],e[1]),o},O=function(t,s){let i="slide";return"boolean"==typeof t?i="bool":"string"==typeof t?i="#"===t.substring(0,1)?"color":"string":"number"==typeof t?i=s.ctype?"color":"slide":"array"==typeof t&&t instanceof Array?"number"==typeof t[0]?i="number":"string"==typeof t[0]&&(i="list"):"object"==typeof t&&t instanceof Object&&(i=void 0!==t.x?"number":"list"),i};t.Files=o,t.Gui=class{constructor(t={}){this.isGui=!0,this.name="gui",this.canvas=null,this.screen=null,this.plane=t.plane||null,t.config&&(t.colors=t.config),t.colors?this.setConfig(t.colors):this.colors=h.defineColor(t),this.css=h.cloneCss(),this.isReset=!0,this.tmpAdd=null,this.isCanvas=t.isCanvas||!1,this.isCanvasOnly=!1,i.addDOMEventListeners=!t.hasOwnProperty("addDOMEventListeners")||t.addDOMEventListeners,this.callback=void 0===t.callback?null:t.callback,this.forceHeight=t.maxHeight||0,this.lockHeight=t.lockHeight||!1,this.isItemMode=void 0!==t.itemMode&&t.itemMode,this.cn="",this.size=h.size,void 0!==t.p&&(this.size.p=t.p),void 0!==t.w&&(this.size.w=t.w),void 0!==t.h&&(this.size.h=t.h),void 0!==t.s&&(this.size.s=t.s),this.size.h=this.size.h<11?11:this.size.h,this.local=(new n).neg(),this.zone={x:0,y:0,w:this.size.w,h:0},this.mouse=(new n).neg(),this.h=0,this.sw=0,this.margin=this.colors.sy,this.marginDiv=h.isDivid(this.margin),this.isWithClose=void 0===t.close||t.close,this.bh=this.isWithClose?this.size.h:0,this.autoResize=void 0===t.autoResize||t.autoResize,this.isCenter=t.center||!1,this.cssGui=void 0!==t.css?t.css:this.isCenter?"":"right:10px;",this.isOpen=void 0===t.open||t.open,this.isDown=!1,this.isScroll=!1,this.uis=[],this.current=-1,this.proto=null,this.isEmpty=!0,this.decal=0,this.ratio=1,this.oy=0,this.isNewTarget=!1;let s=this.colors;this.content=h.dom("div",this.css.basic+" width:0px; height:auto; top:0px; background:"+s.content+"; "+this.cssGui),this.innerContent=h.dom("div",this.css.basic+"width:100%; top:0; left:0; height:auto; overflow:hidden;"),this.content.appendChild(this.innerContent),this.useFlex=!0;let e=this.useFlex?"display:flex; flex-flow: row wrap;":"";this.inner=h.dom("div",this.css.basic+e+"width:100%; left:0; "),this.innerContent.appendChild(this.inner),this.scrollBG=h.dom("div",this.css.basic+"right:0; top:0; width:"+(this.size.s-1)+"px; height:10px; display:none; background:"+s.background+";"),this.content.appendChild(this.scrollBG),this.scroll=h.dom("div",this.css.basic+"background:"+s.button+"; right:2px; top:0; width:"+(this.size.s-4)+"px; height:10px;"),this.scrollBG.appendChild(this.scroll),this.bottomText=t.bottomText||["open","close"];let o=s.radius;this.bottom=h.dom("div",this.css.txt+"width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:"+o+"px; border-bottom-left-radius:"+o+"px; justify-content:center; height:"+this.bh+"px; line-height:"+(this.bh-5)+"px; color:"+s.text+";"),this.content.appendChild(this.bottom),this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.bottom.style.background=s.background,this.parent=void 0!==t.parent?t.parent:null,this.parent=void 0!==t.target?t.target:this.parent,null!==this.parent||this.isCanvas||(this.parent=document.body),null!==this.parent&&this.parent.appendChild(this.content),this.isCanvas&&null===this.parent&&(this.isCanvasOnly=!0),this.isCanvasOnly?(this.content.style.left="0px",this.content.style.right="auto",t.transition=0):this.content.style.pointerEvents="auto",this.transition=void 0!==t.transition?t.transition:h.transition,this.transition&&setTimeout(this.addTransition.bind(this),1e3),this.setWidth(),this.isCanvas&&this.makeCanvas(),i.add(this)}triggerMouseDown(t,s){i.handleEvent({type:"pointerdown",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}triggerMouseMove(){i.handleEvent({type:"pointermove",clientX:-1,clientY:-1,delta:0,key:null,keyCode:NaN})}triggerMouseUp(t,s){i.handleEvent({type:"pointerup",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}setTop(t,s){this.content.style.top=t+"px",void 0!==s&&(this.forceHeight=s),this.calc(),i.needReZone=!0}addTransition(){this.transition&&!this.isCanvas&&(this.innerContent.style.transition="height "+this.transition+"s ease-out",this.content.style.transition="height "+this.transition+"s ease-out",this.bottom.style.transition="top "+this.transition+"s ease-out");let t=this.uis.length;for(;t--;)this.uis[t].addTransition()}onDraw(){}makeCanvas(){this.canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),this.canvas.width=this.zone.w,this.canvas.height=this.forceHeight?this.forceHeight:this.zone.h}draw(t){if(null===this.canvas)return;let s=this.zone.w,e=this.forceHeight?this.forceHeight:this.zone.h;i.toCanvas(this,s,e,t)}getDom(){return this.content}noMouse(){this.mouse.neg()}setMouse(t,s=!0){s?this.mouse.set(Math.round(t.x*this.canvas.width),this.canvas.height-Math.round(t.y*this.canvas.height)):this.mouse.set(Math.round(t.x*this.canvas.width),Math.round(t.y*this.canvas.height))}setConfig(t){h.setText(),this.colors=h.defineColor(t)}setColors(t){for(let s in t)this.colors[s]&&(this.colors[s]=t[s])}setText(t,s,i,e){h.setText(t,s,i,e)}hide(t){this.content.style.visibility=t?"hidden":"visible"}display(t=!1){this.content.style.visibility=t?"visible":"hidden"}onChange(t){return this.callback=t||null,this}mode(t){let s=!1,e=this.colors;if(t!==this.cn){switch(this.cn=t,t){case"def":i.cursor(),this.scroll.style.background=e.button,this.bottom.style.background=e.background,this.bottom.style.color=e.text;break;case"scrollOver":i.cursor("ns-resize"),this.scroll.style.background=e.select;break;case"scrollDown":this.scroll.style.background=e.select;break;case"bottomOver":i.cursor("pointer"),this.bottom.style.background=e.backgroundOver,this.bottom.style.color=e.textOver}s=!0}return s}clearTarget(){return-1!==this.current&&(this.proto.s&&(this.proto.uiout(),this.proto.reset()),this.proto=null,this.current=-1,i.cursor(),!0)}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";this.isReset=!1;let i="",e=this.isScroll?this.zone.w-this.size.s:this.zone.w;return i=s.y>this.zone.h-this.bh&&s.ye?"scroll":"content",i}handleEvent(t){let s=t.type,e=!1,h=!1,o=this.testZone(t);if("mouseup"===s&&this.isDown&&(this.isDown=!1),"mousedown"!==s||this.isDown||(this.isDown=!0),this.isDown&&this.isNewTarget&&(i.clearInput(),this.isNewTarget=!1),o){switch(o){case"content":t.clientY=this.isScroll?t.clientY+this.decal:t.clientY,i.isMobile&&"mousedown"===s&&this.getNext(t,e),this.proto&&(h=this.proto.handleEvent(t)),"mousemove"===s&&(e=this.mode("def")),"wheel"===s&&!h&&this.isScroll&&(e=this.onWheel(t)),i.lock||this.getNext(t,e);break;case"bottom":this.clearTarget(),"mousemove"===s&&(e=this.mode("bottomOver")),"mousedown"===s&&(this.isOpen=!this.isOpen,this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.calc(),this.mode("def"),e=!0);break;case"scroll":this.clearTarget(),"mousemove"===s&&(e=this.mode("scrollOver")),"mousedown"===s&&(e=this.mode("scrollDown")),"wheel"===s&&(e=this.onWheel(t)),this.isDown&&this.update(t.clientY-this.zone.y-.5*this.sh)}this.isDown&&(e=!0),h&&(e=!0),"keyup"===s&&(e=!0),"keydown"===s&&(e=!0),e&&this.draw()}}getNext(t,s){let e=i.findTarget(this.uis,t);e!==this.current&&(this.clearTarget(),this.current=e,this.isNewTarget=!0),-1!==e&&(this.proto=this.uis[this.current],this.proto.uiover())}onWheel(t){return this.oy+=20*t.delta,this.update(this.oy),!0}reset(t){if(this.isReset)return;this.mouse.neg(),this.isDown=!1;let s=this.mode("def"),i=this.clearTarget();(s||i)&&this.draw(!0),this.isReset=!0}add(){let t=arguments,s=!1;"object"==typeof t[1]?(t[1].isUI=!0,t[1].main=this,s=!!t[1].ontop&&t[1].ontop):"string"==typeof t[1]&&(void 0===t[2]?[].push.call(t,{isUI:!0,main:this}):(t[2].isUI=!0,t[2].main=this,s=!!t[2].ontop&&t[2].ontop));let i=T.apply(this,t);if(null!==i)return s?this.uis.unshift(i):this.uis.push(i),this.calc(),this.isEmpty=!1,i}remove(t){t.dispose&&t.dispose()}clearOne(t){let s=this.uis.indexOf(t);-1!==s&&(this.inner.removeChild(this.uis[s].c[0]),this.uis.splice(s,1),this.calc())}empty(){let t,s=this.uis.length;for(;s--;)t=this.uis.pop(),this.inner.removeChild(t.c[0]),t.dispose();this.uis=[],this.isEmpty=!0,this.calc()}clear(){this.empty()}clear2(){setTimeout(this.empty.bind(this),0)}dispose(){this.clear(),null!==this.parent&&this.parent.removeChild(this.content),i.remove(this)}resetItem(){if(!this.isItemMode)return;let t=this.uis.length;for(;t--;)this.uis[t].selected()}setItem(t){if(!this.isItemMode)return;if(t=t||"",this.resetItem(),!t)return void this.update(0);let s=this.uis.length;for(;s--;)this.uis[s].value===t&&(this.uis[s].selected(!0),this.isScroll&&this.update(s*(this.uis[s].h+this.margin)*this.ratio))}upScroll(t){this.sw=t?this.size.s:0,this.oy=t?this.oy:0,this.scrollBG.style.display=t?"block":"none",t&&(this.total=this.h,this.maxView=this.maxHeight,this.ratio=this.maxView/this.total,this.sh=this.maxView*this.ratio,this.range=this.maxView-this.sh,this.oy=h.clamp(this.oy,0,this.range),this.scrollBG.style.height=this.maxView+"px",this.scroll.style.height=this.sh+"px"),this.setItemWidth(this.zone.w-this.sw),this.update(this.oy)}update(t){t=h.clamp(t,0,this.range),this.decal=Math.floor(t/this.ratio),this.inner.style.top=-this.decal+"px",this.scroll.style.top=Math.floor(t)+"px",this.oy=t}calcUis(){return i.calcUis(this.uis,this.zone,this.zone.y)}calc(){clearTimeout(this.tmp),this.tmp=setTimeout(this.setHeight.bind(this),10)}setHeight(){if(this.tmp&&clearTimeout(this.tmp),this.zone.h=this.bh,this.isScroll=!1,this.isOpen){this.h=this.calcUis();let t=this.forceHeight?this.forceHeight+this.zone.y:window.innerHeight;this.maxHeight=t-this.zone.y-this.bh,this.h-this.maxHeight>1?(this.isScroll=!0,this.zone.h=this.maxHeight+this.bh):this.zone.h=this.h+this.bh}this.upScroll(this.isScroll),this.innerContent.style.height=this.zone.h-this.bh+"px",this.content.style.height=this.zone.h+"px",this.bottom.style.top=this.zone.h-this.bh+"px",this.forceHeight&&this.lockHeight&&(this.content.style.height=this.forceHeight+"px"),this.isCanvas&&this.draw(!0)}rezone(){i.needReZone=!0}setWidth(t){t&&(this.zone.w=t),this.zone.w=Math.floor(this.zone.w),this.content.style.width=this.zone.w+"px",this.isCenter&&(this.content.style.marginLeft=-Math.floor(.5*this.zone.w)+"px"),this.setItemWidth(this.zone.w-this.sw)}setItemWidth(t){let s=this.uis.length;for(;s--;)this.uis[s].setSize(t),this.uis[s].rSize()}},t.REVISION="4.3.0",t.Tools=h,t.add=T,Object.defineProperty(t,"__esModule",{value:!0})})); +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.UIL = {})); +})(this, (function (exports) { 'use strict'; + + /** + * @author lth / https://github.com/lo-th + */ + + const REVISION = "4.3.0"; + + // INTENAL FUNCTION + + const R = { + ui: [], + + dom: null, + + ID: null, + lock: false, + wlock: false, + current: -1, + + needReZone: true, + needResize: false, + forceZone: false, + isEventsInit: false, + isLeave: false, + addDOMEventListeners: true, + + downTime: 0, + prevTime: 0, + + //prevDefault: ['contextmenu', 'wheel'], + prevDefault: ["contextmenu"], + pointerEvent: ["pointerdown", "pointermove", "pointerup"], + eventOut: ["pointercancel", "pointerout", "pointerleave"], + + xmlserializer: null, + tmpTime: null, + tmpImage: null, + + oldCursor: "auto", + + input: null, + parent: null, + firstImput: true, + + hiddenImput: null, + hiddenSizer: null, + hasFocus: false, + startInput: false, + inputRange: [0, 0], + cursorId: 0, + str: "", + pos: 0, + startX: -1, + moveX: -1, + + debugInput: false, + + isLoop: false, + listens: [], + + e: { + type: null, + clientX: 0, + clientY: 0, + keyCode: NaN, + key: null, + delta: 0, + }, + + isMobile: false, + + now: null, + needsUpdate: false, + + getTime: function () { + return self.performance && self.performance.now + ? self.performance.now.bind(performance) + : Date.now; + }, + + add: function (o) { + // R.ui[0] is de GUI object that is added first by the constructor + R.ui.push(o); + R.getZone(o); + + if (!R.isEventsInit) R.initEvents(); + }, + + testMobile: function () { + let n = navigator.userAgent; + if ( + n.match(/Android/i) || + n.match(/webOS/i) || + n.match(/iPhone/i) || + n.match(/iPad/i) || + n.match(/iPod/i) || + n.match(/BlackBerry/i) || + n.match(/Windows Phone/i) + ) + return true; + else return false; + }, + + remove: function (o) { + let i = R.ui.indexOf(o); + + if (i !== -1) { + R.removeListen(o); + R.ui.splice(i, 1); + } + + if (R.ui.length === 0) { + R.removeEvents(); + } + }, + + // ---------------------- + // EVENTS + // ---------------------- + + initEvents: function () { + if (R.isEventsInit) return; + + let dom = document.body; + + R.isMobile = R.testMobile(); + R.now = R.getTime(); + + if (!R.isMobile) { + dom.addEventListener("wheel", R, { passive: false }); + } else { + dom.style.touchAction = "none"; + } + + console.log("R.addDOMEventListeners " + R.addDOMEventListeners); + if (R.addDOMEventListeners) { + dom.addEventListener("pointercancel", R); + dom.addEventListener("pointerleave", R); + //dom.addEventListener( 'pointerout', R ) + + dom.addEventListener("pointermove", R); + dom.addEventListener("pointerdown", R); + dom.addEventListener("pointerup", R); + + dom.addEventListener("keydown", R, false); + dom.addEventListener("keyup", R, false); + } + window.addEventListener("resize", R.resize, false); + + //window.onblur = R.out; + //window.onfocus = R.in; + + R.isEventsInit = true; + R.dom = dom; + }, + + removeEvents: function () { + if (!R.isEventsInit) return; + + let dom = document.body; + + if (!R.isMobile) { + dom.removeEventListener("wheel", R); + } + + if (R.addDOMEventListeners) { + dom.removeEventListener("pointercancel", R); + dom.removeEventListener("pointerleave", R); + //dom.removeEventListener( 'pointerout', R ); + + dom.removeEventListener("pointermove", R); + dom.removeEventListener("pointerdown", R); + dom.removeEventListener("pointerup", R); + + dom.removeEventListener("keydown", R); + dom.removeEventListener("keyup", R); + } + window.removeEventListener("resize", R.resize); + + R.isEventsInit = false; + }, + + resize: function () { + let i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); + } + + R.needReZone = true; + R.needResize = false; + }, + + out: function () { + console.log("im am out"); + R.clearOldID(); + }, + + in: function () { + console.log("im am in"); + // R.clearOldID(); + }, + + // ---------------------- + // HANDLE EVENTS + // ---------------------- + + fakeUp: function () { + this.handleEvent({ type: "pointerup" }); + }, + + handleEvent: function (event) { + //console.log("Roots.handleEvent "+event.type) + //if(!event.type) return; + + if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); + + if (R.needResize) R.resize(); + + R.findZone(R.forceZone); + + let e = R.e; + let leave = false; + + if (event.type === "keydown") R.keydown(event); + if (event.type === "keyup") R.keyup(event); + + if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; + else e.delta = 0; + + let ptype = event.pointerType; // mouse, pen, touch + + e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; + e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; + + e.type = event.type; + + if (R.eventOut.indexOf(event.type) !== -1) { + leave = true; + e.type = "mouseup"; + } + + if (event.type === "pointerleave") R.isLeave = true; + + if (event.type === "pointerdown") e.type = "mousedown"; + if (event.type === "pointerup") e.type = "mouseup"; + if (event.type === "pointermove") { + if (R.isLeave) { + // if user resize outside this document + R.isLeave = false; + R.resize(); + } + e.type = "mousemove"; + } + + // double click test + if (e.type === "mousedown") { + R.downTime = R.now(); + let time = R.downTime - R.prevTime; + + // double click on imput + if (time < 200) { + R.selectAll(); + return false; + } + + R.prevTime = R.downTime; + R.forceZone = false; + } + + // for imput + if (e.type === "mousedown") R.clearInput(); + + // mouse lock + if (e.type === "mousedown") R.lock = true; + if (e.type === "mouseup") R.lock = false; + + //if( R.current !== null && R.current.neverlock ) R.lock = false; + + /*if( e.type === 'mousedown' && event.button === 1){ + R.cursor() + e.preventDefault(); + e.stopPropagation(); + }*/ + + //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) + + if (R.isMobile && e.type === "mousedown") R.findID(e); + if (e.type === "mousemove" && !R.lock) R.findID(e); + + if (R.ID !== null) { + if (R.ID.isCanvasOnly) { + e.clientX = R.ID.mouse.x; + e.clientY = R.ID.mouse.y; + } + + //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 + + R.ID.handleEvent(e); + } + + if (R.isMobile && e.type === "mouseup") R.clearOldID(); + if (leave) R.clearOldID(); + }, + + // ---------------------- + // ID + // ---------------------- + + findID: function (e) { + let i = R.ui.length, + next = -1, + u, + x, + y; + + while (i--) { + u = R.ui[i]; + + if (u.isCanvasOnly) { + x = u.mouse.x; + y = u.mouse.y; + } else { + x = e.clientX; + y = e.clientY; + } + + if (R.onZone(u, x, y)) { + next = i; + + if (next !== R.current) { + R.clearOldID(); + R.current = next; + R.ID = u; + } + break; + } + } + + if (next === -1) R.clearOldID(); + }, + + clearOldID: function () { + if (!R.ID) return; + R.current = -1; + R.ID.reset(); + R.ID = null; + R.cursor(); + }, + + // ---------------------- + // GUI / GROUP FUNCTION + // ---------------------- + + calcUis: (uis, zone, py, group = false) => { + //console.log('calc_uis') + + let i = uis.length, + u, + px = 0, + n = 0, + tw, + m; + + let height = 0; + + while (i--) { + u = uis[n]; + n++; + + if (!group && u.isGroup) u.calcUis(); + + m = u.margin; + //div = u.marginDiv + + u.zone.w = u.w; + u.zone.h = u.h + m; + + if (!u.autoWidth) { + if (px === 0) height += u.h + m; + + u.zone.x = zone.x + px; + u.zone.y = py; // + u.mtop + //if(div) u.zone.y += m * 0.5 + + tw = R.getWidth(u); + if (tw) u.zone.w = u.w = tw; + else if (u.fw) u.zone.w = u.w = u.fw; + + px += u.zone.w; + + if (px >= zone.w) { + py += u.h + m; + //if(div) py += m * 0.5 + px = 0; + } + } else { + px = 0; + + u.zone.x = zone.x + u.dx; + u.zone.y = py; + py += u.h + m; + + height += u.h + m; + } + } + + return height; + }, + + findTarget: function (uis, e) { + let i = uis.length; + + while (i--) { + if (R.onZone(uis[i], e.clientX, e.clientY)) return i; + } + + return -1; + }, + + // ---------------------- + // ZONE + // ---------------------- + + findZone: function (force) { + if (!R.needReZone && !force) return; + + var i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + R.getZone(u); + if (u.isGui) u.calcUis(); + } + + R.needReZone = false; + }, + + onZone: function (o, x, y) { + if (x === undefined || y === undefined) return false; + + let z = o.zone; + let mx = x - z.x; // - o.dx; + let my = y - z.y; + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 + //if( o.group !== null ) mx -= o.dx + + let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; + + //if( o.marginDiv ) my -= o.margin * 0.5 + + if (over) o.local.set(mx, my); + else o.local.neg(); + + return over; + }, + + getWidth: function (o) { + //return o.getDom().offsetWidth + return o.getDom().clientWidth; + + //let r = o.getDom().getBoundingClientRect(); + //return (r.width) + //return Math.floor(r.width) + }, + + getZone: function (o) { + if (o.isCanvasOnly) return; + let r = o.getDom().getBoundingClientRect(); + + //if( !r.width ) return + //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; + //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; + o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; + + //console.log(o.name, o.zone) + }, + + // ---------------------- + // CURSOR + // ---------------------- + + cursor: function (name) { + name = name ? name : "auto"; + if (name !== R.oldCursor) { + document.body.style.cursor = name; + R.oldCursor = name; + } + }, + + // ---------------------- + // CANVAS + // ---------------------- + + toCanvas: function (o, w, h, force) { + if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); + + // prevent exesive redraw + + if (force && R.tmpTime !== null) { + clearTimeout(R.tmpTime); + R.tmpTime = null; + } + + if (R.tmpTime !== null) return; + + if (R.lock) + R.tmpTime = setTimeout(function () { + R.tmpTime = null; + }, 10); + + /// + + let isNewSize = false; + if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; + + if (R.tmpImage === null) R.tmpImage = new Image(); + + let img = R.tmpImage; //new Image(); + + let htmlString = R.xmlserializer.serializeToString(o.content); + + let svg = + '' + + htmlString + + ""; + + img.onload = function () { + let ctx = o.canvas.getContext("2d"); + + if (isNewSize) { + o.canvas.width = w; + o.canvas.height = h; + } else { + ctx.clearRect(0, 0, w, h); + } + ctx.drawImage(this, 0, 0); + + o.onDraw(); + }; + + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); + //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); + img.crossOrigin = ""; + R.needsUpdate = false; + }, + + // ---------------------- + // INPUT + // ---------------------- + + setHidden: function () { + if (R.hiddenImput === null) { + //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' + //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' + //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; + + R.hiddenImput = document.createElement("input"); + R.hiddenImput.type = "text"; + //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); + + R.hiddenSizer = document.createElement("div"); + //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; + + document.body.appendChild(R.hiddenImput); + document.body.appendChild(R.hiddenSizer); + } + + let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; + let css = + R.parent.css.txtselect + + "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + + hide; + R.hiddenImput.style.cssText = + css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); + R.hiddenSizer.style.cssText = css + "bottom:40px;"; + + R.hiddenImput.style.width = R.input.clientWidth + "px"; + R.hiddenImput.value = R.str; + R.hiddenSizer.innerHTML = R.str; + + R.hasFocus = true; + }, + + clearHidden: function (p) { + if (R.hiddenImput === null) return; + R.hasFocus = false; + }, + + clickPos: function (x) { + let i = R.str.length, + l = 0, + n = 0; + while (i--) { + l += R.textWidth(R.str[n]); + if (l >= x) break; + n++; + } + return n; + }, + + upInput: function (x, down) { + if (R.parent === null) return false; + + let up = false; + + if (down) { + let id = R.clickPos(x); + + R.moveX = id; + + if (R.startX === -1) { + R.startX = id; + R.cursorId = id; + R.inputRange = [R.startX, R.startX]; + } else { + let isSelection = R.moveX !== R.startX; + + if (isSelection) { + if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; + else R.inputRange = [R.startX, R.moveX]; + } + } + + up = true; + } else { + if (R.startX !== -1) { + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.startX = -1; + + up = true; + } + } + + if (up) R.selectParent(); + + return up; + }, + + selectAll: function () { + if (!R.parent) return; + + R.str = R.input.textContent; + R.inputRange = [0, R.str.length]; + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.cursorId = R.inputRange[1]; + R.selectParent(); + }, + + selectParent: function () { + var c = R.textWidth(R.str.substring(0, R.cursorId)); + var e = R.textWidth(R.str.substring(0, R.inputRange[0])); + var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); + + R.parent.select(c, e, s, R.hiddenSizer.innerHTML); + }, + + textWidth: function (text) { + if (R.hiddenSizer === null) return 0; + text = text.replace(/ /g, " "); + R.hiddenSizer.innerHTML = text; + return R.hiddenSizer.clientWidth; + }, + + clearInput: function () { + if (R.parent === null) return; + if (!R.firstImput) R.parent.validate(true); + + R.clearHidden(); + R.parent.unselect(); + + //R.input.style.background = 'none'; + R.input.style.background = R.parent.colors.back; + R.input.style.borderColor = R.parent.colors.border; + //R.input.style.color = R.parent.colors.text; + R.parent.isEdit = false; + + R.input = null; + R.parent = null; + (R.str = ""), (R.firstImput = true); + }, + + setInput: function (Input, parent) { + R.clearInput(); + + R.input = Input; + R.parent = parent; + + R.input.style.background = R.parent.colors.backoff; + R.input.style.borderColor = R.parent.colors.select; + //R.input.style.color = R.parent.colors.textSelect; + R.str = R.input.textContent; + + R.setHidden(); + }, + + keydown: function (e) { + if (R.parent === null) return; + + let keyCode = e.which; + e.shiftKey; + + //console.log( keyCode ) + + R.firstImput = false; + + if (R.hasFocus) { + // hack to fix touch event bug in iOS Safari + window.focus(); + R.hiddenImput.focus(); + } + + R.parent.isEdit = true; + + // e.preventDefault(); + + // add support for Ctrl/Cmd+A selection + //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { + //R.selectText(); + //e.preventDefault(); + //return self.render(); + //} + + if (keyCode === 13) { + //enter + + R.clearInput(); + + //} else if( keyCode === 9 ){ //tab key + + // R.input.textContent = ''; + } else { + if (R.input.isNum) { + if ( + (e.keyCode > 47 && e.keyCode < 58) || + (e.keyCode > 95 && e.keyCode < 106) || + e.keyCode === 190 || + e.keyCode === 110 || + e.keyCode === 8 || + e.keyCode === 109 + ) { + R.hiddenImput.readOnly = false; + } else { + R.hiddenImput.readOnly = true; + } + } else { + R.hiddenImput.readOnly = false; + } + } + }, + + keyup: function (e) { + if (R.parent === null) return; + + R.str = R.hiddenImput.value; + + if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value + else R.input.textContent = R.str; + + R.cursorId = R.hiddenImput.selectionStart; + R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; + + R.selectParent(); + + //if( R.parent.allway ) + R.parent.validate(); + }, + + // ---------------------- + // + // LISTENING + // + // ---------------------- + + /* + // esta era la funcion original + loop: function () { + + if( R.isLoop ) requestAnimationFrame( R.loop ); + R.update(); + + }, + + */ + + loop: function () { + // modified by Fedemarino + if (R.isLoop) requestAnimationFrame(R.loop); + R.needsUpdate = R.update(); + // if there is a change in a value generated externally, the GUI needs to be redrawn + if (R.ui[0] && R.needsUpdate) R.ui[0].draw(); + }, + + update: function () { + // modified by Fedemarino + let i = R.listens.length; + let needsUpdate = false; + while (i--) { + //check if the value of the object has changed + let hasChanged = R.listens[i].listening(); + if (hasChanged) needsUpdate = true; + } + return needsUpdate; + }, + + removeListen: function (proto) { + let id = R.listens.indexOf(proto); + if (id !== -1) R.listens.splice(id, 1); + if (R.listens.length === 0) R.isLoop = false; + }, + + addListen: function (proto) { + let id = R.listens.indexOf(proto); + + if (id !== -1) return false; + + R.listens.push(proto); + + if (!R.isLoop) { + R.isLoop = true; + R.loop(); + } + + return true; + }, + }; + + const Roots = R; + + /** + * @author lth / https://github.com/lo-th + */ + + const T = { + + transition: 0.2, + + frag: document.createDocumentFragment(), + + colorRing: null, + joystick_0: null, + joystick_1: null, + circular: null, + knob: null, + pad2d: null, + + svgns: "http://www.w3.org/2000/svg", + links: "http://www.w3.org/1999/xlink", + htmls: "http://www.w3.org/1999/xhtml", + + DOM_SIZE: [ 'height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], + SVG_TYPE_D: [ 'pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix' ], + SVG_TYPE_G: [ 'svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject' ], + + PI: Math.PI, + TwoPI: Math.PI*2, + pi90: Math.PI * 0.5, + pi60: Math.PI/3, + + torad: Math.PI / 180, + todeg: 180 / Math.PI, + + clamp: ( v, min, max ) => { + + v = v < min ? min : v; + v = v > max ? max : v; + return v; + + }, + + isDivid: ( v ) => ( v*0.5 === Math.floor(v*0.5) ), + + size: { w: 240, h: 20, p: 30, s: 8 }, + + // ---------------------- + // COLOR + // ---------------------- + + defineColor: ( o, cc = T.colors ) => { + + let color = { ...cc }; + + let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize' ]; + let changeText = false; + + if( o.font ) o.fontFamily = o.font; + if( o.shadow ) o.fontShadow = o.shadow; + if( o.weight ) o.fontWeight = o.weight; + + if( o.fontColor ) o.text = o.fontColor; + if( o.color ) o.text = o.color; + + if( o.text ){ + color.text = o.text; + if( !o.fontColor && !o.color ){ + color.title = T.ColorLuma( o.text, -0.25 ); + color.titleoff = T.ColorLuma( o.text, -0.5 ); + } + color.textOver = T.ColorLuma( o.text, 0.25 ); + color.textSelect = T.ColorLuma( o.text, 0.5 ); + } + + if( o.button ){ + color.button = o.button; + color.border = T.ColorLuma( o.button, 0.1 ); + color.overoff = T.ColorLuma( o.button, 0.2 ); + } + + if( o.select ){ + color.select = o.select; + color.over = T.ColorLuma( o.select, -0.1 ); + } + + if( o.itemBg ) o.back = o.itemBg; + + if( o.back ){ + color.back = o.back; + color.backoff = T.ColorLuma( o.back, -0.1 ); + } + + if( o.fontSelect ) color.textSelect = o.fontSelect; + if( o.groupBorder ) color.gborder = o.groupBorder; + + //if( o.transparent ) o.bg = 'none' + //if( o.bg ) color.background = color.backgroundOver = o.bg + if( o.bgOver ) color.backgroundOver = o.bgOver; + + for( let m in color ){ + if(o[m]!==undefined) color[m] = o[m]; + } + + for( let m in o ){ + if( textChange.indexOf(m) !== -1 ) changeText = true; + } + + if( changeText ) T.defineText( color ); + + return color + + }, + + colors: { + + sx: 4,//4 + sy: 2,//2 + radius:2, + + showOver : 1, + //groupOver : 1, + + content:'none', + background: 'rgba(50,50,50,0.15)', + backgroundOver: 'rgba(50,50,50,0.3)', + + title : '#CCC', + titleoff : '#BBB', + text : '#DDD', + textOver : '#EEE', + textSelect : '#FFF', + + back:'rgba(0,0,0,0.2)', + backoff:'rgba(0,0,0,0.3)', + + // input and button border + border : '#4c4c4c', + borderSize : 1, + + gborder : 'none', + groups : 'none', + + + button : '#3c3c3c', + overoff : '#5c5c5c', + over : '#024699', + select : '#308AFF', + action: '#FF3300', + + //fontFamily: 'Tahoma', + fontFamily: 'Consolas, monospace', + //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", + fontWeight: 'normal', + fontShadow: 'none',//'#000', + fontSize:12, + + joyOver:'rgba(48,138,255,0.25)', + joyOut: 'rgba(100,100,100,0.5)', + joySelect: '#308AFF', + + + hide: 'rgba(0,0,0,0)', + + }, + + // style css + + css : { + + basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', + button:'display:flex; align-items:center; justify-content:center; text-align:center;', + middle:'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' + }, + + // svg path + + svgs: { + + g1:'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', + g2:'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', + + group:'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', + arrow:'M 3 8 L 8 5 3 2 3 8 Z', + + arrowDown:'M 5 8 L 8 3 2 3 5 8 Z', + arrowUp:'M 5 2 L 2 7 8 7 5 2 Z', + + solid:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', + body:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', + vehicle:'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', + articulation:'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', + character:'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', + terrain:'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', + joint:'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', + ray:'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', + collision:'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', + map:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + material:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + texture:'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', + object:'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', + none:'M 9 5 L 5 5 5 9 9 9 9 5 Z', + cursor:'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', + load:'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', + save:'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', + extern:'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z', + + }, + + rezone () { + Roots.needReZone = true; + }, + + getImput: function(){ + + return Roots.input ? true : false + + }, + + setStyle : function ( data ){ + + for ( var o in data ){ + if( T.colors[o] ) T.colors[o] = data[o]; + } + + T.setText(); + + }, + + // ---------------------- + // custom text + // ---------------------- + + defineText: function( o ){ + + T.setText( o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight ); + + }, + + setText: function( size, color, font, shadow, weight ){ + + let cc = T.colors; + + if( font === undefined ) font = cc.fontFamily; + if( size === undefined ) size = cc.fontSize; + if( shadow === undefined ) shadow = cc.fontShadow; + if( weight === undefined ) weight = cc.fontWeight; + if( color === undefined ) color = cc.text; + + if( isNaN(size) ){ if( size.search('em')===-1 ) size += 'px';} + else size += 'px'; + + + //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' + + T.css.txt = T.css.basic + T.css.middle + ' font-family:'+ font +'; font-weight:'+weight+'; font-size:'+size+'; color:'+cc.text+'; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; + if( shadow !== 'none' ) T.css.txt += ' text-shadow: 1px 1px 1px '+shadow+';'; + + T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; + T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; + + }, + + + // note + + //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container + + /*cloneColor: function () { + + let cc = Object.assign({}, T.colors ); + return cc; + + },*/ + + // intern function + + cloneCss: function () { + + //let cc = Object.assign({}, T.css ); + return { ...T.css }; + + }, + + clone: function ( o ) { + + return o.cloneNode( true ); + + }, + + setSvg: function( dom, type, value, id, id2 ){ + + if( id === -1 ) dom.setAttributeNS( null, type, value ); + else if( id2 !== undefined ) dom.childNodes[ id || 0 ].childNodes[ id2 || 0 ].setAttributeNS( null, type, value ); + else dom.childNodes[ id || 0 ].setAttributeNS( null, type, value ); + + }, + + setCss: function( dom, css ){ + + for( let r in css ){ + if( T.DOM_SIZE.indexOf(r) !== -1 ) dom.style[r] = css[r] + 'px'; + else dom.style[r] = css[r]; + } + + }, + + set: function( g, o ){ + + for( let att in o ){ + if( att === 'txt' ) g.textContent = o[ att ]; + if( att === 'link' ) g.setAttributeNS( T.links, 'xlink:href', o[ att ] ); + else g.setAttributeNS( null, att, o[ att ] ); + } + + }, + + get: function( dom, id ){ + + if( id === undefined ) return dom; // root + else if( !isNaN( id ) ) return dom.childNodes[ id ]; // first child + else if( id instanceof Array ){ + if(id.length === 2) return dom.childNodes[ id[0] ].childNodes[ id[1] ]; + if(id.length === 3) return dom.childNodes[ id[0] ].childNodes[ id[1] ].childNodes[ id[2] ]; + } + + }, + + dom : function ( type, css, obj, dom, id ) { + + type = type || 'div'; + + if( T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1 ){ // is svg element + + if( type ==='svg' ){ + + dom = document.createElementNS( T.svgns, 'svg' ); + T.set( dom, obj ); + + /* } else if ( type === 'use' ) { + + dom = document.createElementNS( T.svgns, 'use' ); + T.set( dom, obj ); + */ + } else { + // create new svg if not def + if( dom === undefined ) dom = document.createElementNS( T.svgns, 'svg' ); + T.addAttributes( dom, type, obj, id ); + + } + + } else { // is html element + + if( dom === undefined ) dom = document.createElementNS( T.htmls, type ); + else dom = dom.appendChild( document.createElementNS( T.htmls, type ) ); + + } + + if( css ) dom.style.cssText = css; + + if( id === undefined ) return dom; + else return dom.childNodes[ id || 0 ]; + + }, + + addAttributes : function( dom, type, o, id ){ + + let g = document.createElementNS( T.svgns, type ); + T.set( g, o ); + T.get( dom, id ).appendChild( g ); + if( T.SVG_TYPE_G.indexOf(type) !== -1 ) g.style.pointerEvents = 'none'; + return g; + + }, + + clear : function( dom ){ + + T.purge( dom ); + while (dom.firstChild) { + if ( dom.firstChild.firstChild ) T.clear( dom.firstChild ); + dom.removeChild( dom.firstChild ); + } + + }, + + purge : function ( dom ) { + + let a = dom.attributes, i, n; + if (a) { + i = a.length; + while(i--){ + n = a[i].name; + if (typeof dom[n] === 'function') dom[n] = null; + } + } + a = dom.childNodes; + if (a) { + i = a.length; + while(i--){ + T.purge( dom.childNodes[i] ); + } + } + + }, + + // ---------------------- + // SVG Effects function + // ---------------------- + + addSVGGlowEffect: function () { + + if ( document.getElementById( 'UILGlow') !== null ) return; + + let svgFilter = T.initUILEffects(); + + let filter = T.addAttributes( svgFilter, 'filter', { id: 'UILGlow', x: '-20%', y: '-20%', width: '140%', height: '140%' } ); + T.addAttributes( filter, 'feGaussianBlur', { in: 'SourceGraphic', stdDeviation: '3', result: 'uilBlur' } ); + let feMerge = T.addAttributes( filter, 'feMerge', { } ); + + for( let i = 0; i <= 3; i++ ) { + + T.addAttributes( feMerge, 'feMergeNode', { in: 'uilBlur' } ); + + } + + T.addAttributes( feMerge, 'feMergeNode', { in: 'SourceGraphic' } ); + + }, + + initUILEffects: function () { + + let svgFilter = document.getElementById( 'UILSVGEffects'); + + if ( svgFilter === null ) { + + svgFilter = T.dom( 'svg', undefined , { id: 'UILSVGEffects', width: '0', height: '0' } ); + document.body.appendChild( svgFilter ); + + } + + return svgFilter; + + }, + + // ---------------------- + // Color function + // ---------------------- + + ColorLuma : function ( hex, l ) { + + //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; + + if( hex === 'n' ) hex = '#000'; + + // validate hex string + hex = String(hex).replace(/[^0-9a-f]/gi, ''); + if (hex.length < 6) { + hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; + } + l = l || 0; + + // convert to decimal and change luminosity + let rgb = "#", c, i; + for (i = 0; i < 3; i++) { + c = parseInt(hex.substr(i*2,2), 16); + c = Math.round(Math.min(Math.max(0, c + (c * l)), 255)).toString(16); + rgb += ("00"+c).substr(c.length); + } + + return rgb; + + }, + + findDeepInver: function ( c ) { + + return (c[0] * 0.3 + c[1] * .59 + c[2] * .11) <= 0.6; + + }, + + lerpColor: function( c1, c2, factor ) { + let newColor = {}; + for ( let i = 0; i < 3; i++ ) { + newColor[i] = c1[ i ] + ( c2[ i ] - c1[ i ] ) * factor; + } + return newColor; + }, + + hexToHtml: function ( v ) { + v = v === undefined ? 0x000000 : v; + return "#" + ("000000" + v.toString(16)).substr(-6); + + }, + + htmlToHex: function ( v ) { + + return v.toUpperCase().replace("#", "0x"); + + }, + + u255: function (c, i) { + + return parseInt(c.substring(i, i + 2), 16) / 255; + + }, + + u16: function ( c, i ) { + + return parseInt(c.substring(i, i + 1), 16) / 15; + + }, + + unpack: function( c ){ + + if (c.length == 7) return [ T.u255(c, 1), T.u255(c, 3), T.u255(c, 5) ]; + else if (c.length == 4) return [ T.u16(c,1), T.u16(c,2), T.u16(c,3) ]; + + }, + + p255: function ( c ) { + let h = Math.round( ( c * 255 ) ).toString( 16 ); + if ( h.length < 2 ) h = '0' + h; + return h; + }, + + pack: function ( c ) { + + return '#' + T.p255( c[ 0 ] ) + T.p255( c[ 1 ] ) + T.p255( c[ 2 ] ); + + }, + + htmlRgb: function( c ){ + + return 'rgb(' + Math.round(c[0] * 255) + ','+ Math.round(c[1] * 255) + ','+ Math.round(c[2] * 255) + ')'; + + }, + + pad: function( n ){ + if(n.length == 1)n = '0' + n; + return n; + }, + + rgbToHex : function( c ){ + + let r = Math.round(c[0] * 255).toString(16); + let g = Math.round(c[1] * 255).toString(16); + let b = Math.round(c[2] * 255).toString(16); + return '#' + T.pad(r) + T.pad(g) + T.pad(b); + + // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); + + }, + + hueToRgb: function( p, q, t ){ + + if ( t < 0 ) t += 1; + if ( t > 1 ) t -= 1; + if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; + if ( t < 1 / 2 ) return q; + if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); + return p; + + }, + + rgbToHsl: function ( c ) { + + let r = c[0], g = c[1], b = c[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h = 0, s = 0, l = (min + max) / 2; + if (l > 0 && l < 1) s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); + if (delta > 0) { + if (max == r && max != g) h += (g - b) / delta; + if (max == g && max != b) h += (2 + (b - r) / delta); + if (max == b && max != r) h += (4 + (r - g) / delta); + h /= 6; + } + return [ h, s, l ]; + + }, + + hslToRgb: function ( c ) { + + let p, q, h = c[0], s = c[1], l = c[2]; + + if ( s === 0 ) return [ l, l, l ]; + else { + q = l <= 0.5 ? l * (s + 1) : l + s - ( l * s ); + p = l * 2 - q; + return [ T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333) ]; + } + + }, + + // ---------------------- + // SVG MODEL + // ---------------------- + + makeGradiant: function ( type, settings, parent, colors ) { + + T.dom( type, null, settings, parent, 0 ); + + let n = parent.childNodes[0].childNodes.length - 1, c; + + for( let i = 0; i < colors.length; i++ ){ + + c = colors[i]; + //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); + T.dom( 'stop', null, { offset:c[0]+'%', 'stop-color':c[1], 'stop-opacity':c[2] }, parent, [0,n] ); + + } + + }, + + /*makeGraph: function () { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 + //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 + //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + + //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 + //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.graph = svg; + + },*/ + + makePad: function ( model ) { + + let ww = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+ww+' '+ww, width:ww, height:ww, preserveAspectRatio:'none' } ); + let w = 200; + let d = (ww-w)*0.5, m = 20; + Tools.dom( 'rect', '', { x: d, y: d, width: w, height: w, fill:T.colors.back }, svg ); // 0 + Tools.dom( 'rect', '', { x: d+m*0.5, y: d+m*0.5, width: w - m , height: w - m, fill:T.colors.button }, svg ); // 1 + // Pointer + Tools.dom( 'line', '', { x1: d+(m*0.5), y1: ww *0.5, x2: d+(w-m*0.5), y2: ww * 0.5, stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 2 + Tools.dom( 'line', '', { x1: ww * 0.5, x2: ww * 0.5, y1: d+(m*0.5), y2: d+(w-m*0.5), stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 3 + Tools.dom( 'circle', '', { cx: ww * 0.5, cy: ww * 0.5, r:5, stroke: T.colors.text, 'stroke-width': 5, fill:'none' }, svg ); // 4 + T.pad2d = svg; + + }, + + makeKnob: function ( model ) { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'round' }, svg );//1 + T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.1)', 'stroke-width':7 , fill:'none'}, svg );//2 + T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.knob = svg; + + }, + + makeCircular: function ( model ) { + + let w = 128; + let radius = 40; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, stroke:'rgba(0,0,0,0.1)', 'stroke-width':10, fill:'none' }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':7, fill:'none', 'stroke-linecap':'butt' }, svg );//1 + T.circular = svg; + + }, + + makeJoystick: function ( model ) { + + //+' background:#f00;' + + let w = 128, ccc; + let radius = Math.floor((w-30)*0.5); + let innerRadius = Math.floor(radius*0.6); + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + if( model === 0 ){ + + + + // gradian background + ccc = [ [40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'grad', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian shadow + ccc = [ [60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradS', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian stick + let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; + let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; + + ccc = [ [30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + ccc = [ [30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn2', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // graph + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'url(#grad)' }, svg );//2 + T.dom( 'circle', '', { cx:64+5, cy:64+10, r:innerRadius+10, fill:'url(#gradS)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'url(#gradIn)' }, svg );//4 + + T.joystick_0 = svg; + + } else { + // gradian shadow + ccc = [ [69, 'rgb(0,0,0)', 0],[70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradX', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'none', stroke:'rgba(100,100,100,0.25)', 'stroke-width':'4' }, svg );//2 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius+14, fill:'url(#gradX)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'none', stroke:'rgb(100,100,100)', 'stroke-width':'4' }, svg );//4 + + T.joystick_1 = svg; + } + + + + }, + + makeColorRing: function () { + + let w = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + let s = 30;//stroke + let r =( w-s )*0.5; + let mid = w*0.5; + let n = 24, nudge = 8 / r / n * Math.PI, a1 = 0; + let am, tan, d2, a2, ar, i, j, path, ccc; + let color = []; + + for ( i = 0; i <= n; ++i) { + + d2 = i / n; + a2 = d2 * T.TwoPI; + am = (a1 + a2) * 0.5; + tan = 1 / Math.cos((a2 - a1) * 0.5); + + ar = [ + Math.sin(a1), -Math.cos(a1), + Math.sin(am) * tan, -Math.cos(am) * tan, + Math.sin(a2), -Math.cos(a2) + ]; + + color[1] = T.rgbToHex( T.hslToRgb([d2, 1, 0.5]) ); + + if (i > 0) { + + j = 6; + while(j--){ + ar[j] = ((ar[j]*r)+mid).toFixed(2); + } + + path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; + + ccc = [ [0,color[0],1], [100,color[1],1] ]; + T.makeGradiant( 'linearGradient', { id:'G'+i, x1:ar[0], y1:ar[1], x2:ar[4], y2:ar[5], gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'path', '', { d:path, 'stroke-width':s, stroke:'url(#G'+i+')', 'stroke-linecap':"butt" }, svg, 1 ); + + } + a1 = a2 - nudge; + color[0] = color[1]; + } + + let tw = 84.90; + + // black / white + ccc = [ [0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1] ]; + T.makeGradiant( 'linearGradient', { id:'GL0', x1:0, y1:mid-tw, x2:0, y2:mid+tw, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + ccc = [ [0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0] ]; + T.makeGradiant( 'linearGradient', { id:'GL1', x1:mid-49.05, y1:0, x2:mid+98, y2:0, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'g', null, { 'transform-origin': '128px 128px', 'transform':'rotate(0)' }, svg );//2 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'red' }, svg, 2 );// 2,0 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL1)','stroke-width':1, stroke:'url(#GL1)' }, svg, 2 );//2,1 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL0)','stroke-width':1, stroke:'url(#GL0)' }, svg, 2 );//2,2 + T.dom( 'path', '', { d:'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill:'none','stroke-width':2, stroke:'#000' }, svg, 2 );//2,3 + //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 + + T.dom( 'circle', '', { cx:128, cy:128, r:6, 'stroke-width':2, stroke:'#000', fill:'none' }, svg );//3 + + T.colorRing = svg; + + }, + + icon: function ( type, color, w ){ + + w = w || 40; + //color = color || '#DEDEDE'; + let viewBox = '0 0 256 256'; + //let viewBox = '0 0 '+ w +' '+ w; + let t = [""]; + switch(type){ + case 'logo': + t[1]=""; + break; + case 'donate': + t[1]=""; + break; + case 'neo': + t[1]=""; + break; + case 'phy': + t[1]=""; + break; + case 'config': + t[1]=""; + break; + case 'github': + t[1]=""; + break; + case 'save': + t[1]=""; + break; + } + t[2] = ""; + return t.join("\n"); + + }, + + logoFill_d:` + M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 + L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 + M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 + Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z + `, + + logo_github:` + M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 + 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 + 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 + 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 + 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z + `, + + logo_neo:` + M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 + 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 + 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 + 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L + 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z + `, + + logo_phy:` + M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 + Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 + `, + + logo_config:` + M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 + L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 + Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 + `, + + logo_donate:` + M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 + 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 + 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 + 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 + 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 + Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 + 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 + 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 + 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M + 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 + 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 + 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 + 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 + 200.9 187.5 200.9 187.5 195.35 Z + `, + + }; + + T.setText(); + + const Tools = T; + + ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile + + + class Files { + + //----------------------------- + // FILE TYPE + //----------------------------- + + static autoTypes( type ) { + + let t = []; + + switch( type ){ + case 'svg': + t = [ { accept: { 'image/svg+xml': '.svg'} }, ]; + break; + case 'wav': + t = [ { accept: { 'audio/wav': '.wav'} }, ]; + break; + case 'mp3': + t = [ { accept: { 'audio/mpeg': '.mp3'} }, ]; + break; + case 'mp4': + t = [ { accept: { 'video/mp4': '.mp4'} }, ]; + break; + case 'bin': case 'hex': + t = [ { description: 'Binary Files', accept: { 'application/octet-stream': ['.bin', '.hex'] } }, ]; + break; + case 'text': + t = [ { description: 'Text Files', accept: { 'text/plain': ['.txt', '.text'], 'text/html': ['.html', '.htm'] } }, ]; + break; + case 'json': + t = [ { description: 'JSON Files', accept: { 'application/json': ['.json'] } }, ];//text/plain + break; + case 'js': + t = [ { description: 'JavaScript Files', accept: { 'text/javascript': ['.js'] } }, ]; + break; + case 'image': + t = [ { description: 'Images', accept: { 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] } }, ]; + break; + case 'icon': + t = [ { description: 'Icons', accept: { 'image/x-ico': ['.ico'] } }, ]; + break; + case 'lut': + t = [ { description: 'Lut', accept: { 'text/plain': ['.cube', '.3dl'] } }, ]; + break; + + } + + return t + + } + + + //----------------------------- + // LOAD + //----------------------------- + + static async load( o = {} ) { + + if (typeof window.showOpenFilePicker !== 'function') { + window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; + } + + try { + + let type = o.type || ''; + + const options = { + excludeAcceptAllOption: type ? true : false, + multiple: false, + //startIn:'./assets' + }; + + options.types = Files.autoTypes( type ); + + // create a new handle + const handle = await window.showOpenFilePicker( options ); + const file = await handle[0].getFile(); + //let content = await file.text() + + if( !file ) return null + + let fname = file.name; + let ftype = fname.substring( fname.lastIndexOf('.')+1, fname.length ); + + const dataUrl = [ 'png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3' ]; + const dataBuf = [ 'sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf' ]; + const reader = new FileReader(); + + if( dataUrl.indexOf( ftype ) !== -1 ) reader.readAsDataURL( file ); + else if( dataBuf.indexOf( ftype ) !== -1 ) reader.readAsArrayBuffer( file ); + else reader.readAsText( file ); + + reader.onload = function(e) { + + let content = e.target.result; + + switch(type){ + case 'image': + let img = new Image; + img.onload = function() { + if( o.callback ) o.callback( img, fname, ftype ); + }; + img.src = content; + break; + case 'json': + if( o.callback ) o.callback( JSON.parse( content ), fname, ftype ); + break; + default: + if( o.callback ) o.callback( content, fname, ftype ); + break; + } + + }; + + } catch(e) { + + console.log(e); + if( o.always && o.callback ) o.callback( null ); + + } + + } + + static showOpenFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const input = document.createElement("input"); + input.type = "file"; + input.multiple = options.multiple; + input.accept = options.types + .map((type) => type.accept) + .flatMap((inst) => Object.keys(inst).flatMap((key) => inst[key])) + .join(","); + + input.addEventListener("change", () => { + resolve( + [...input.files].map((file) => { + return { + getFile: async () => + new Promise((resolve) => { + resolve(file); + }), + }; + }) + ); + }); + + input.click(); + }) + } + + + //----------------------------- + // SAVE + //----------------------------- + + static async save( o = {} ) { + + let usePoly = false; + + if (typeof window.showSaveFilePicker !== 'function') { + window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; + usePoly = true; + } + + try { + + let type = o.type || ''; + + const options = { + suggestedName: o.name || 'hello', + data: o.data || '' + }; + + options.types = Files.autoTypes( type ); + options.finalType = Object.keys( options.types[0].accept )[0]; + options.suggestedName += options.types[0].accept[options.finalType][0]; + + + // create a new handle + const handle = await window.showSaveFilePicker( options ); + + if( usePoly ) return + + // create a FileSystemWritableFileStream to write to + const file = await handle.createWritable(); + + let blob = new Blob([ options.data ], { type: options.finalType }); + + // write our file + await file.write(blob); + + // close the file and write the contents to disk. + await file.close(); + + } catch(e) { + + console.log(e); + + } + + } + + static showSaveFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const a = document.createElement("a"); + a.download = options.suggestedName || "my-file.txt"; + let blob = new Blob([ options.data ], { type:options.finalType }); + a.href = URL.createObjectURL( blob ); + + a.addEventListener("click", () => { + resolve( + setTimeout( () => URL.revokeObjectURL(a.href), 1000 ) + ); + }); + a.click(); + }) + } + + + //----------------------------- + // FOLDER not possible in poly + //----------------------------- + + static async getFolder() { + + try { + + const handle = await window.showDirectoryPicker(); + const files = []; + for await (const entry of handle.values()) { + const file = await entry.getFile(); + files.push(file); + } + + console.log(files); + return files; + + } catch(e) { + + console.log(e); + + } + + } + + + + + + + + + + + } + + class V2 { + + constructor( x = 0, y = 0 ) { + + this.x = x; + this.y = y; + + } + + set ( x, y ) { + + this.x = x; + this.y = y; + return this; + + } + + divide ( v ) { + + this.x /= v.x; + this.y /= v.y; + return this; + + } + + multiply ( v ) { + + this.x *= v.x; + this.y *= v.y; + return this; + + } + + multiplyScalar ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + return this; + + } + + divideScalar ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + } + + length () { + + return Math.sqrt( this.x * this.x + this.y * this.y ); + + } + + angle () { + + // computes the angle in radians with respect to the positive x-axis + + var angle = Math.atan2( this.y, this.x ); + + if ( angle < 0 ) angle += 2 * Math.PI; + + return angle; + + } + + addScalar ( s ) { + + this.x += s; + this.y += s; + return this; + + } + + negate () { + + this.x *= -1; + this.y *= -1; + return this; + + } + + neg () { + + this.x = -1; + this.y = -1; + return this; + + } + + isZero () { + + return ( this.x === 0 && this.y === 0 ); + + } + + copy ( v ) { + + this.x = v.x; + this.y = v.y; + + return this; + + } + + equals ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) ); + + } + + nearEquals ( v, n ) { + + return ( ( v.x.toFixed(n) === this.x.toFixed(n) ) && ( v.y.toFixed(n) === this.y.toFixed(n) ) ); + + } + + lerp ( v, alpha ) { + + if( v === null ){ + this.x -= this.x * alpha; + this.y -= this.y * alpha; + } else { + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + } + + return this; + + } + + } + + /** + * @author lth / https://github.com/lo-th + */ + + class Proto { + constructor(o = {}) { + // disable mouse controle + this.lock = o.lock || false; + + // for button + this.neverlock = false; + + // only simple space + this.isSpace = o.isSpace || false; + + // if is on gui or group + this.main = o.main || null; + this.isUI = o.isUI || false; + this.group = o.group || null; + + this.isListen = false; + + this.top = 0; + this.ytop = 0; + + this.dx = o.dx || 0; + + this.isSelectable = o.selectable !== undefined ? o.selectable : false; + this.unselectable = + o.unselect !== undefined ? o.unselect : this.isSelectable; + + this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' + + this.css = this.main ? this.main.css : Tools.css; + + this.colors = Tools.defineColor( + o, + this.main + ? this.group + ? this.group.colors + : this.main.colors + : Tools.colors + ); + + this.overEffect = this.colors.showOver; + + this.svgs = Tools.svgs; + + this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; + this.local = new V2().neg(); + + this.isCanvasOnly = false; + this.isSelect = false; + + // percent of title + this.p = o.p !== undefined ? o.p : Tools.size.p; + + this.w = this.isUI ? this.main.size.w : Tools.size.w; + if (o.w !== undefined) this.w = o.w; + + this.h = this.isUI ? this.main.size.h : Tools.size.h; + if (o.h !== undefined) this.h = o.h; + if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; + else this.lock = true; + + // decale for canvas only + this.fw = o.fw || 0; + + this.autoWidth = o.auto || true; // auto width or flex + this.isOpen = false; //false// open statu + + // radius for toolbox + this.radius = o.radius || this.colors.radius; + + this.transition = o.transition || Tools.transition; + + // only for number + this.isNumber = false; + this.noNeg = o.noNeg || false; + this.allEqual = o.allEqual || false; + + // only most simple + this.mono = false; + + // stop listening for edit slide text + this.isEdit = false; + + // no title + this.simple = o.simple || false; + if (this.simple) this.sa = 0; + + // define obj size + this.setSize(this.w); + + // title size + if (o.sa !== undefined) this.sa = o.sa; + if (o.sb !== undefined) this.sb = o.sb; + if (this.simple) this.sb = this.w - this.sa; + + // last number size for slide + this.sc = o.sc === undefined ? 47 : o.sc; + + // for listening object + this.objectLink = null; + this.isSend = false; + this.objectKey = null; + + this.txt = o.name || ""; + this.name = o.rename || this.txt; + this.target = o.target || null; + + // callback + this.callback = o.callback === undefined ? null : o.callback; + this.endCallback = null; + this.openCallback = o.openCallback === undefined ? null : o.openCallback; + this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; + + // if no callback take one from group or gui + if (this.callback === null && this.isUI && this.main.callback !== null) { + this.callback = this.group ? this.group.callback : this.main.callback; + } + + // elements + this.c = []; + + // style + this.s = []; + + this.useFlex = this.isUI ? this.main.useFlex : false; + let flexible = this.useFlex + ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" + : "float:left;"; + + this.c[0] = Tools.dom( + "div", + this.css.basic + flexible + "position:relative; height:20px;" + ); + + this.s[0] = this.c[0].style; + + // bottom margin + this.margin = this.colors.sy; + this.mtop = 0; + let marginDiv = Tools.isDivid(this.margin); + + if (this.isUI && this.margin) { + this.s[0].boxSizing = "content-box"; + if (marginDiv) { + this.mtop = this.margin * 0.5; + //this.s[0].borderTop = '${this.mtop}px solid transparent' + //console.log(`${this.mtop}px solid transparent`) + this.s[0].borderTop = this.mtop + "px solid transparent"; + this.s[0].borderBottom = this.mtop + "px solid transparent"; + } else { + this.s[0].borderBottom = this.margin + "px solid transparent"; + } + } + + // with title + if (!this.simple) { + this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); + this.s[1] = this.c[1].style; + this.c[1].textContent = this.name; + this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; + } + + if (o.pos) { + this.s[0].position = "absolute"; + for (let p in o.pos) { + this.s[0][p] = o.pos[p]; + } + this.mono = true; + } + + if (o.css) this.s[0].cssText = o.css; + } + + // ---------------------- + // make the node + // ---------------------- + + init() { + this.ytop = this.top + this.mtop; + + this.zone.h = this.h + this.margin; + this.zone.w = this.w; + + let s = this.s; // style cache + let c = this.c; // div cach + + s[0].height = this.h + "px"; + + if (this.isUI) s[0].background = this.colors.background; + + if (!this.autoWidth && this.useFlex) { + s[0].flex = "1 0 auto"; + s[0].minWidth = this.minw + "px"; + s[0].textAlign = "center"; + } else { + if (this.isUI) s[0].width = "100%"; + } + + //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; + if (c[1] !== undefined && this.autoWidth) { + s[1] = c[1].style; + s[1].top = 1 + "px"; + s[1].height = this.h - 2 + "px"; + } + + let frag = Tools.frag; + + for (let i = 1, lng = c.length; i !== lng; i++) { + if (c[i] !== undefined) { + frag.appendChild(c[i]); + s[i] = c[i].style; + } + } + + let pp = + this.target !== null + ? this.target + : this.isUI + ? this.main.inner + : document.body; + + if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); + else pp.appendChild(c[0]); + + c[0].appendChild(frag); + + this.rSize(); + + // ! solo proto + if (!this.isUI) { + this.c[0].style.pointerEvents = "auto"; + Roots.add(this); + } + } + + addTransition() { + if (this.baseH && this.transition && this.isUI) { + this.c[0].style.transition = "height " + this.transition + "s ease-out"; + } + } + + // from Tools + + dom(type, css, obj, dom, id) { + return Tools.dom(type, css, obj, dom, id); + } + + setSvg(dom, type, value, id, id2) { + Tools.setSvg(dom, type, value, id, id2); + } + + setCss(dom, css) { + Tools.setCss(dom, css); + } + + clamp(value, min, max) { + return Tools.clamp(value, min, max); + } + + getColorRing() { + if (!Tools.colorRing) Tools.makeColorRing(); + return Tools.clone(Tools.colorRing); + } + + getJoystick(model) { + if (!Tools["joystick_" + model]) Tools.makeJoystick(model); + return Tools.clone(Tools["joystick_" + model]); + } + + getCircular(model) { + if (!Tools.circular) Tools.makeCircular(model); + return Tools.clone(Tools.circular); + } + + getKnob(model) { + if (!Tools.knob) Tools.makeKnob(model); + return Tools.clone(Tools.knob); + } + + getPad2d(model) { + if (!Tools.pad2d) Tools.makePad(model); + return Tools.clone(Tools.pad2d); + } + + // from Roots + + cursor(name) { + Roots.cursor(name); + } + + ///////// + + update() {} + + reset() {} + + ///////// + + content() { + return this.c[0]; + } + + getDom() { + return this.c[0]; + } + + uiout() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.background; + } + + uiover() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.backgroundOver; + } + + rename(s) { + if (this.c[1] !== undefined) this.c[1].textContent = s; + } + + listen() { + this.isListen = Roots.addListen(this); + return this; + } + + listening() { + // modified by Fedemarino + if (this.objectLink === null) return; + if (this.isSend) return; + if (this.isEdit) return; + // check if value has changed + let hasChanged = this.setValue(this.objectLink[this.objectKey]); + return hasChanged; + } + + setValue(v) { + const old = this.value; + if (this.isNumber) this.value = this.numValue(v); + //else if( v instanceof Array && v.length === 1 ) v = v[0]; + else this.value = v; + this.update(); + let hasChanged = false; + if (old !== this.value) { + hasChanged = true; + } + + return hasChanged; + } + + // ---------------------- + // update every change + // ---------------------- + + onChange(f) { + if (this.isSpace) return; + this.callback = f || null; + return this; + } + + // ---------------------- + // update only on end + // ---------------------- + + onFinishChange(f) { + if (this.isSpace) return; + this.callback = null; + this.endCallback = f; + return this; + } + + // ---------------------- + // event on open close + // ---------------------- + + onOpen(f) { + this.openCallback = f; + return this; + } + + onClose(f) { + this.closeCallback = f; + return this; + } + + // ---------------------- + // send back value + // ---------------------- + + send(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + this.isSend = true; + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + if (this.callback) this.callback(v, this.objectKey); + this.isSend = false; + } + + sendEnd(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + if (this.endCallback) this.endCallback(v); + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + } + + // ---------------------- + // clear node + // ---------------------- + + dispose() { + if (this.isListen) Roots.removeListen(this); + + Tools.clear(this.c[0]); + + if (this.target !== null) { + if (this.group !== null) this.group.clearOne(this); + else this.target.removeChild(this.c[0]); + } else { + if (this.isUI) this.main.clearOne(this); + else document.body.removeChild(this.c[0]); + } + + if (!this.isUI) Roots.remove(this); + + this.c = null; + this.s = null; + this.callback = null; + this.target = null; + this.isListen = false; + } + + clear() {} + + // ---------------------- + // change size + // ---------------------- + + getWidth() { + let nw = Roots.getWidth(this); + if (nw) this.w = nw; + } + + setSize(sx) { + if (!this.autoWidth) return; + + this.w = sx; + + if (this.simple) { + this.sb = this.w - this.sa; + } else { + let pp = this.w * (this.p / 100); + //this.sa = Math.floor( pp + 10 ) + //this.sb = Math.floor( this.w - pp - 20 ) + this.sa = Math.floor(pp + 8); + this.sb = Math.floor(this.w - pp - 16); + } + } + + rSize() { + if (!this.autoWidth) return; + if (!this.isUI) this.s[0].width = this.w + "px"; + if (!this.simple) this.s[1].width = this.sa + "px"; + } + + // ---------------------- + // for numeric value + // ---------------------- + + setTypeNumber(o) { + this.isNumber = true; + + this.value = 0; + if (o.value !== undefined) { + if (typeof o.value === "string") this.value = o.value * 1; + else this.value = o.value; + } + + this.min = o.min === undefined ? -Infinity : o.min; + this.max = o.max === undefined ? Infinity : o.max; + this.precision = o.precision === undefined ? 2 : o.precision; + + let s; + + switch (this.precision) { + case 0: + s = 1; + break; + case 1: + s = 0.1; + break; + case 2: + s = 0.01; + break; + case 3: + s = 0.001; + break; + case 4: + s = 0.0001; + break; + case 5: + s = 0.00001; + break; + case 6: + s = 0.000001; + break; + } + + this.step = o.step === undefined ? s : o.step; + this.range = this.max - this.min; + this.value = this.numValue(this.value); + } + + numValue(n) { + if (this.noNeg) n = Math.abs(n); + return ( + Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 + ); + } + + // ---------------------- + // EVENTS DEFAULT + // ---------------------- + + handleEvent(e) { + if (this.lock) return; + if (this.neverlock) Roots.lock = false; + if (!this[e.type]) + return console.error(e.type, "this type of event no existe !"); + + // TODO !!!! + + //if( this.marginDiv ) z.d -= this.margin * 0.5 + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 + + return this[e.type](e); + } + + wheel(e) { + return false; + } + mousedown(e) { + return false; + } + mousemove(e) { + return false; + } + mouseup(e) { + return false; + } + keydown(e) { + return false; + } + keyup(e) { + return false; + } + + // ---------------------- + // object referency + // ---------------------- + + setReferency(obj, key) { + this.objectLink = obj; + this.objectKey = key; + } + + display(v = false) { + this.s[0].visibility = v ? "visible" : "hidden"; + } + + // ---------------------- + // resize height + // ---------------------- + + open() { + if (this.isOpen) return; + this.isOpen = true; + Roots.needResize = true; + if (this.openCallback) this.openCallback(); + } + + close() { + if (!this.isOpen) return; + this.isOpen = false; + Roots.needResize = true; + if (this.closeCallback) this.closeCallback(); + } + + needZone() { + Roots.needReZone = true; + } + + rezone() { + Roots.needReZone = true; + } + + // ---------------------- + // INPUT + // ---------------------- + + select() {} + + unselect() {} + + setInput(Input) { + Roots.setInput(Input, this); + } + + upInput(x, down) { + return Roots.upInput(x, down); + } + + // ---------------------- + // special item + // ---------------------- + + selected(b) { + this.isSelect = b || false; + } + } + + class Bool extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || false; + this.model = o.mode !== undefined ? o.mode : 0; + + this.onName = o.rename || this.txt; + if( o.onName ) o.onname = o.onName; + if( o.onname ) this.onName = o.onname; + + this.inh = o.inh || Math.floor( this.h*0.8 ); + this.inw = o.inw || 36; + + let cc = this.colors; + + if( this.model === 0 ){ + let t = Math.floor(this.h*0.5)-((this.inh-2)*0.5); + this.c[2] = this.dom( 'div', this.css.basic + 'background:'+ cc.inputBg +'; height:'+(this.inh-2)+'px; width:'+this.inw+'px; top:'+t+'px; border-radius:10px; border:2px solid '+ cc.back ); + this.c[3] = this.dom( 'div', this.css.basic + 'height:'+(this.inh-6)+'px; width:16px; top:'+(t+2)+'px; border-radius:10px; background:'+ cc.button+';' ); + } else { + this.p = 0; + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + } + + this.stat = -1; + + this.init(); + this.update(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + this.value = !this.value; + this.update( true ); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + this.cursor('pointer'); + return this.mode( true ) + + } + + reset () { + + this.cursor(); + return this.mode() + + } + + // ---------------------- + // MODE + // ---------------------- + + mode ( over ) { + + let change = false; + let cc = this.colors, s = this.s, n, v = this.value; + + if( over ) n = v ? 4 : 3; + else n = v ? 2 : 1; + + if( this.stat !== n ){ + + this.stat = n; + + if( this.model !== 0 ){ + + switch( n ){ + + case 1: s[2].color = cc.text; s[2].background = cc.button; break; + case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; + case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; + case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; + + } + + this.c[2].innerHTML = v ? this.onName : this.name; + + } else { + + switch( n ){ + + case 1: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.button; break;// off out + case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break;// on over + case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break;// off over + case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break;// on out + + } + + s[3].marginLeft = v ? '17px' : '2px'; + this.c[1].textContent = v ? this.onName : this.name; + + } + + change = true; + + } + + return change + + } + + // ---------------------- + + update ( up ) { + + this.mode(); + if( up ) this.send(); + + } + + rSize () { + + super.rSize(); + + let s = this.s; + let w = (this.w - 10 ) - this.inw; + if( this.model === 0 ){ + s[2].left = w + 'px'; + s[3].left = w + 'px'; + } else { + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + } + + } + + } + + class Button extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = ''; + if( o.value !== undefined ) this.value = o.value; + + this.values = o.value || this.txt; + if( o.values ) this.values = o.values; + + if( !o.values && !o.value ) this.txt = ''; + + this.onName = o.onName || null; + + this.on = false; + + // force button width + this.bw = o.forceWidth || 0; + if(o.bw) this.bw = o.bw; + this.space = o.space || 3; + + if( typeof this.values === 'string' ) this.values = [ this.values ]; + + this.isDown = false; + this.neverlock = true; + this.res = 0; + + this.lng = this.values.length; + this.tmp = []; + this.stat = []; + + let sel, cc = this.colors; + + for( let i = 0; i < this.lng; i++ ){ + + sel = false; + if( this.values[i] === this.value && this.isSelectable ) sel = true; + + this.c[i+2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[i+2].style.background = sel ? cc.select : cc.button; + this.c[i+2].style.color = sel ? cc.textSelect : cc.text; + this.c[i+2].innerHTML = this.values[i]; + this.stat[i] = sel ? 3:1; + + } + + + if( this.txt==='' ) this.p = 0; + + if( (!o.value && !o.values) || this.p === 0 ){ + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + } + + + this.init(); + + } + + onOff() { + + this.on = !this.on; + this.label( this.on ? this.onName : this.value ); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1 + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.text; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + case 1: // down + + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'stroke', cc.backoff, 0); + color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.textOver; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + } + + this.cmode = mode; + return true; + + } + + reset () { + + this.isDown = false; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'circular'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0); + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1); + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + //console.log('over') + + let off = this.offset; + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = off.angle() - this.pi90; + this.r = (((this.r%this.twoPi)+this.twoPi)%this.twoPi); + + if( this.oldr !== null ){ + + let dif = this.r - this.oldr; + this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; + + if( dif > 6 ) this.r = 0; + if( dif < -6 ) this.r = this.twoPi; + + } + + let steps = 1 / this.twoPi; + let value = this.r * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = ~~ ( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'circular' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + // ---------------------- + + makePath () { + + let r = 40; + let d = 24; + let a = this.percent * this.twoPi - 0.001; + let x2 = (r + r * Math.sin(a)) + d; + let y2 = (r - r * Math.cos(a)) + d; + let big = a > Math.PI ? 1 : 0; + return "M " + (r+d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = ( this.value - this.min ) / this.range; + + this.setSvg( this.c[3], 'd', this.makePath(), 1 ); + + if ( this.model > 0 ) { + + let cc = this.colors; + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 1 ); + + } + + if( up ) this.send(); + + } + + } + + class Color extends Proto { + + constructor( o = {} ) { + + super( o ); + + //this.autoHeight = true; + + this.ctype = o.ctype || 'hex'; + + this.wfixe = 256; + + this.cw = this.sb > 256 ? 256 : this.sb; + if(o.cw != undefined ) this.cw = o.cw; + + + + // color up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + this.baseH = this.h; + + this.offset = new V2(); + this.decal = new V2(); + this.pp = new V2(); + + let cc = this.colors; + + // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) + + this.c[2] = this.dom( 'div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};` ); + //this.s[2] = this.c[2].style; + + //this.s[2].textShadow = 'none' + + /*if( this.up ){ + this.s[2].top = 'auto'; + this.s[2].bottom = '2px'; + }*/ + + //this.c[0].style.textAlign = 'center'; + this.c[0].style.display = 'block'; + + this.c[3] = this.getColorRing(); + this.c[3].style.visibility = 'hidden'; + + this.hsl = null; + this.value = '#ffffff'; + if( o.value !== undefined ){ + if( o.value instanceof Array ) this.value = Tools.rgbToHex( o.value ); + else if(!isNaN(o.value)) this.value = Tools.hexToHtml( o.value ); + else this.value = o.value; + } + + this.bcolor = null; + this.isDown = false; + this.fistDown = false; + + this.notext = o.notext || false; + + this.tr = 98; + this.tsl = Math.sqrt(3) * this.tr; + + this.hue = 0; + this.d = 256; + + this.init(); + + this.setColor( this.value ); + + if( o.open !== undefined ) this.open(); + + } + + testZone ( mx, my ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + if( this.up && this.isOpen ){ + + if( l.y > this.wfixe ) return 'title' + else return 'color' + + } else { + + if( l.y < this.baseH+2 ) return 'title' + else if( this.isOpen ) return 'color' + + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.d = 256; + + } + + mousedown ( e ) { + + + let name = this.testZone( e.clientX, e.clientY ); + + + //if( !name ) return; + if(name === 'title'){ + if( !this.isOpen ) this.open(); + else this.close(); + return true; + } + + + if( name === 'color' ){ + + this.isDown = true; + this.fistDown = true; + this.mousemove( e ); + } + } + + mousemove ( e ) { + + let name = this.testZone( e.clientX, e.clientY ); + + let off, d, hue, sat, lum, rad, x, y, rr, T = Tools; + + if( name === 'title' ) this.cursor('pointer'); + + if( name === 'color' ){ + + off = this.offset; + off.x = e.clientX - ( this.zone.x + this.decal.x + this.mid ); + off.y = e.clientY - ( this.zone.y + this.decal.y + this.mid ) - this.ytop; + d = off.length() * this.ratio; + rr = off.angle(); + if(rr < 0) rr += 2 * T.PI; + + + if ( d < 128 ) this.cursor('crosshair'); + else if( !this.isDown ) this.cursor(); + + if( this.isDown ){ + + if( this.fistDown ){ + this.d = d; + this.fistDown = false; + } + + if ( this.d < 128 ) { + + if ( this.d > this.tr ) { // outside hue + + hue = ( rr + T.pi90 ) / T.TwoPI; + this.hue = (hue + 1) % 1; + this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); + + } else { // triangle + + x = off.x * this.ratio; + y = off.y * this.ratio; + + let rr = (this.hue * T.TwoPI) + T.PI; + if(rr < 0) rr += 2 * T.PI; + + rad = Math.atan2(-y, x); + if(rad < 0) rad += 2 * T.PI; + + let rad0 = ( rad + T.pi90 + T.TwoPI + rr ) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60), + a = 0.5 * this.tr, + b = Math.tan(rad1) * a, + r = Math.sqrt(x*x + y*y), + maxR = Math.sqrt(a*a + b*b); + + if( r > maxR ) { + let dx = Math.tan(rad1) * r; + let rad2 = Math.atan(dx / maxR); + if(rad2 > T.pi60) rad2 = T.pi60; + else if( rad2 < -T.pi60 ) rad2 = -T.pi60; + + rad += rad2 - rad1; + + rad0 = (rad + T.pi90 + T.TwoPI + rr) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60); + b = Math.tan(rad1) * a; + r = maxR = Math.sqrt(a*a + b*b); + } + + lum = ((Math.sin(rad0) * r) / this.tsl) + 0.5; + + let w = 1 - (Math.abs(lum - 0.5) * 2); + sat = (((Math.cos(rad0) * r) + (this.tr / 2)) / (1.5 * this.tr)) / w; + sat = T.clamp( sat, 0, 1 ); + + this.setHSL([this.hsl[0], sat, lum]); + + } + } + } + } + + } + + // ---------------------- + + setHeight () { + + this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; + this.s[0].height = this.h + 'px'; + this.zone.h = this.h; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open () { + + super.open(); + + this.setHeight(); + + if( this.up ) this.zone.y -= this.wfixe + 5; + + let t = this.h - this.baseH; + + this.s[3].visibility = 'visible'; + //this.s[3].display = 'block'; + this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.wfixe + 5; + + let t = this.h - this.baseH; + + this.setHeight(); + + this.s[3].visibility = 'hidden'; + //this.s[3].display = 'none'; + this.parentHeight( -t ); + + } + + update ( up ) { + + let cc = Tools.rgbToHex( Tools.hslToRgb([ this.hsl[0], 1, 0.5 ]) ); + + this.moveMarkers(); + + this.value = this.bcolor; + + this.setSvg( this.c[3], 'fill', cc, 2, 0 ); + + this.s[2].background = this.bcolor; + if(!this.notext) this.c[2].textContent = Tools.htmlToHex( this.bcolor ); + + this.invert = Tools.findDeepInver( this.rgb ); + this.s[2].color = this.invert ? '#fff' : '#000'; + + if(!up) return; + + if( this.ctype === 'array' ) this.send( this.rgb ); + if( this.ctype === 'rgb' ) this.send( Tools.htmlRgb( this.rgb ) ); + if( this.ctype === 'hex' ) this.send( Tools.htmlToHex( this.value ) ); + if( this.ctype === 'html' ) this.send(); + + } + + setValue ( v ){ + + if( v instanceof Array ) this.value = Tools.rgbToHex( v ); + else if(!isNaN(v)) this.value = Tools.hexToHtml( v ); + else this.value = v; + + this.setColor( this.value ); + this.update(); + + } + + setColor ( color ) { + + let unpack = Tools.unpack(color); + if (this.bcolor !== color && unpack) { + + this.bcolor = color; + this.rgb = unpack; + this.hsl = Tools.rgbToHsl( this.rgb ); + + this.hue = this.hsl[0]; + + this.update(); + } + return this; + + } + + setHSL ( hsl ) { + + this.hsl = hsl; + this.rgb = Tools.hslToRgb( hsl ); + this.bcolor = Tools.rgbToHex( this.rgb ); + this.update( true ); + return this; + + } + + moveMarkers () { + + let p = this.pp; + let T = Tools; + + this.invert ? '#fff' : '#000'; + let a = this.hsl[0] * T.TwoPI; + let third = (2/3) * T.PI; + let r = this.tr; + let h = this.hsl[0]; + let s = this.hsl[1]; + let l = this.hsl[2]; + + let angle = ( a - T.pi90 ) * T.todeg; + + h = - a + T.pi90; + + let hx = Math.cos(h) * r; + let hy = -Math.sin(h) * r; + let sx = Math.cos(h - third) * r; + let sy = -Math.sin(h - third) * r; + let vx = Math.cos(h + third) * r; + let vy = -Math.sin(h + third) * r; + let mx = (sx + vx) / 2, my = (sy + vy) / 2; + a = (1 - 2 * Math.abs(l - .5)) * s; + let x = sx + (vx - sx) * l + (hx - mx) * a; + let y = sy + (vy - sy) * l + (hy - my) * a; + + p.set( x, y ).addScalar(128); + + //let ff = (1-l)*255; + // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); + + this.setSvg( this.c[3], 'transform', 'rotate('+angle+' )', 2 ); + + this.setSvg( this.c[3], 'cx', p.x, 3 ); + this.setSvg( this.c[3], 'cy', p.y, 3 ); + + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3 ); + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3 ); + this.setSvg( this.c[3], 'fill',this.bcolor, 3 ); + + } + + rSize () { + + //Proto.prototype.rSize.call( this ); + super.rSize(); + + let s = this.s; + + s[2].width = this.sb + 'px'; + s[2].left = this.sa + 'px'; + + //console.log(this.sb) + + this.cw = this.sb > 256 ? 256 : this.sb; + + + + this.rSizeColor( this.cw ); + + this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + //s[3].left = this.decal.x + 'px'; + + } + + rSizeColor ( w ) { + + + if( w === this.wfixe ) return; + + + + this.wfixe = w; + + + + let s = this.s; + + //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; + this.mid = Math.floor( this.wfixe * 0.5 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 '+ this.wfixe + ' '+ this.wfixe ); + s[3].width = this.wfixe + 'px'; + s[3].height = this.wfixe + 'px'; + //s[3].left = this.decal.x + 'px'; + s[3].top = this.decal.y + 'px'; + + this.ratio = 256 / this.wfixe; + this.square = 1 / (60*(this.wfixe/256)); + this.setHeight(); + + } + + + } + + class Fps extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.round = Math.round; + + //this.autoHeight = true; + + this.baseH = this.h; + this.hplus = o.hplus || 50; + + this.res = o.res || 40; + this.l = 1; + + this.precision = o.precision || 0; + + + this.custom = o.custom || false; + this.names = o.names || ['FPS', 'MS']; + let cc = o.cc || ['220,220,220', '255,255,0']; + + // this.divid = [ 100, 100, 100 ]; + // this.multy = [ 30, 30, 30 ]; + + this.adding = o.adding || false; + + this.range = o.range || [ 165, 100, 100 ]; + + this.alpha = o.alpha || 0.25; + + this.values = []; + this.points = []; + this.textDisplay = []; + + if(!this.custom){ + + this.now = Roots.getTime(); + this.startTime = 0;//this.now() + this.prevTime = 0;//this.startTime; + this.frames = 0; + + this.ms = 0; + this.fps = 0; + this.mem = 0; + this.mm = 0; + + this.isMem = ( self.performance && self.performance.memory ) ? true : false; + + // this.divid = [ 100, 200, 1 ]; + // this.multy = [ 30, 30, 30 ]; + + if( this.isMem ){ + + this.names.push('MEM'); + cc.push('0,255,255'); + + } + + this.txt = o.name || 'Fps'; + + } + + + let fltop = Math.floor(this.h*0.5)-3; + const ccc = this.colors; + + this.c[1].textContent = this.txt; + //this.c[1].innerHTML = ' ' + this.txt + this.c[0].style.cursor = 'pointer'; + this.c[0].style.pointerEvents = 'auto'; + + let panelCss = 'display:none; left:10px; top:'+ this.h + 'px; height:'+(this.hplus - 8)+'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid '+ ccc.border +';'; + + if( this.radius !== 0 ) panelCss += 'border-radius:' + this.radius+'px;'; + + this.c[2] = this.dom( 'path', this.css.basic + panelCss , {} ); + + this.c[2].setAttribute('viewBox', '0 0 '+this.res+' 50' ); + this.c[2].setAttribute('height', '100%' ); + this.c[2].setAttribute('width', '100%' ); + this.c[2].setAttribute('preserveAspectRatio', 'none' ); + + + //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + + // arrow + this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:ccc.text, stroke:'none'}); + //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); + + // result test + this.c[4] = this.dom( 'div', this.css.txt + 'position:absolute; left:10px; top:'+(this.h+2) +'px; display:none; width:100%; text-align:center;' ); + + // bottom line + if( o.bottomLine ) this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); + + this.isShow = false; + + + + let s = this.s; + + //s[1].marginLeft = '10px'; + s[1].lineHeight = this.h-4; + s[1].color = ccc.text; + //s[1].paddingLeft = '18px'; + //s[1].fontWeight = 'bold'; + + if( this.radius !== 0 ) s[0].borderRadius = this.radius+'px'; + if( this.colors.gborder!=='none') s[0].border = '1px solid ' + ccc.gborder; + + + + + let j = 0; + + for( j=0; j " + this.names[j] +" "); + + } + + j = this.names.length; + while(j--){ + this.dom( 'path', null, { fill:'rgba('+cc[j]+','+this.alpha+')', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + } + + + this.init(); + + //if( this.isShow ) this.show(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + if( this.isShow ) this.close(); + else this.open(); + + } + + // ---------------------- + + /*mode: function ( mode ) { + + let s = this.s; + + switch(mode){ + case 0: // base + s[1].color = this.colors.text; + //s[1].background = 'none'; + break; + case 1: // over + s[1].color = '#FFF'; + //s[1].background = UIL.SELECT; + break; + case 2: // edit / down + s[1].color = this.colors.text; + //s[1].background = UIL.SELECTDOWN; + break; + + } + },*/ + + tick ( v ) { + + this.values = v; + if( !this.isShow ) return; + this.drawGraph(); + this.upText(); + + } + + makePath ( point ) { + + let p = ''; + p += 'M ' + (-1) + ' ' + 50; + for ( let i = 0; i < this.res + 1; i ++ ) { p += ' L ' + i + ' ' + point[i]; } + p += ' L ' + (this.res + 1) + ' ' + 50; + return p; + + } + + upText ( val ) { + + let v = val || this.values, t = ''; + for( let j=0, lng =this.names.length; j'; + this.c[4].innerHTML = t; + + } + + drawGraph () { + + let svg = this.c[2]; + let i = this.names.length, v, old = 0, n = 0; + + while( i-- ){ + if( this.adding ) v = (this.values[n]+old) * this.range[n]; + else v = (this.values[n] * this.range[n]); + this.points[n].shift(); + this.points[n].push( 50 - v ); + this.setSvg( svg, 'd', this.makePath( this.points[n] ), i+1 ); + old += this.values[n]; + n++; + + } + + } + + open () { + + super.open(); + + this.h = this.hplus + this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g2 ); + + if( this.group !== null ){ this.group.calc( this.hplus );} + else if( this.isUI ) this.main.calc( this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'block'; + this.s[4].display = 'block'; + this.isShow = true; + + if( !this.custom ) Roots.addListen( this ); + + } + + close () { + + super.close(); + + this.h = this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g1 ); + + if( this.group !== null ){ this.group.calc( -this.hplus );} + else if( this.isUI ) this.main.calc( -this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'none'; + this.s[4].display = 'none'; + this.isShow = false; + + if( !this.custom ) Roots.removeListen( this ); + + this.c[4].innerHTML = ''; + + } + + + ///// AUTO FPS ////// + + begin () { + + this.startTime = this.now(); + + } + + end () { + + let time = this.now(); + this.ms = time - this.startTime; + + this.frames ++; + + if ( time > this.prevTime + 1000 ) { + + this.fps = this.round( ( this.frames * 1000 ) / ( time - this.prevTime ) ); + + this.prevTime = time; + this.frames = 0; + + if ( this.isMem ) { + + let heapSize = performance.memory.usedJSHeapSize; + let heapSizeLimit = performance.memory.jsHeapSizeLimit; + + this.mem = this.round( heapSize * 0.000000954 ); + this.mm = heapSize / heapSizeLimit; + + } + + } + + this.values = [ this.fps, this.ms , this.mm ]; + + this.drawGraph(); + this.upText( [ this.fps, this.ms, this.mem ] ); + + return time; + + } + + listening () { + + if( !this.custom ) this.startTime = this.end(); + + } + + rSize () { + + let s = this.s; + let w = this.w; + + s[3].left = ( this.sa + this.sb - 6 ) + 'px'; + + s[0].width = w + 'px'; + s[1].width = w + 'px'; + s[2].left = 10 + 'px'; + s[2].width = (w-20) + 'px'; + s[4].width = (w-20) + 'px'; + + } + + } + + class Graph extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value !== undefined ? o.value : [0,0,0]; + this.lng = this.value.length; + + this.precision = o.precision !== undefined ? o.precision : 2; + this.multiplicator = o.multiplicator || 1; + this.neg = o.neg || false; + + this.line = o.line !== undefined ? o.line : true; + + //if(this.neg)this.multiplicator*=2; + + this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; + this.isNumber = false; + + this.isDown = false; + + this.h = o.h || 128 + 10; + this.rh = this.h - 10; + this.top = 0; + + this.c[0].style.width = this.w +'px'; + + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = this.w +'px'; + + if(!this.autoWidth){ + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + } + + + //this.c[1].style.background = '#ff0000'; + //this.c[1].style.textAlign = 'center'; + this.top = 10; + this.h += 10; + + } + + this.gh = this.rh - 28; + this.gw = this.w - 28; + + //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); + + //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' + this.c[2] = this.dom( 'div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:'+(this.h-20)+'px; left:14px; width:'+this.gw+'px; color:'+ this.colors.text ); + + //this.c[2].textContent = this.value; + this.c[2].innerHTML = this.valueToHtml(); + + let svg = this.dom( 'svg', this.css.basic , { viewBox:'0 0 '+this.w+' '+this.rh, width:this.w, height:this.rh, preserveAspectRatio:'none' } ); + this.setCss( svg, { width:this.w, height:this.rh, left:0, top:this.top }); + + this.dom( 'path', '', { d:'', stroke:this.colors.text, 'stroke-width':2, fill:'none', 'stroke-linecap':'butt' }, svg ); + this.dom( 'rect', '', { x:10, y:10, width:this.gw+8, height:this.gh+8, stroke:'rgba(0,0,0,0.3)', 'stroke-width':1 , fill:'none'}, svg ); + + this.iw = ((this.gw-(4*(this.lng-1)))/this.lng); + let t = []; + this.cMode = []; + + this.v = []; + + for( let i = 0; i < this.lng; i++ ){ + + t[i] = [ 14 + (i*this.iw) + (i*4), this.iw ]; + t[i][2] = t[i][0] + t[i][1]; + this.cMode[i] = 0; + + if( this.neg ) this.v[i] = ((1+(this.value[i] / this.multiplicator))*0.5); + else this.v[i] = this.value[i] / this.multiplicator; + + this.dom( 'rect', '', { x:t[i][0], y:14, width:t[i][1], height:1, fill:this.colors.text, 'fill-opacity':0.3 }, svg ); + + } + + this.tmp = t; + this.c[3] = svg; + + //console.log(this.w) + + this.init(); + + if( this.c[1] !== undefined ){ + this.c[1].style.top = 0 +'px'; + this.c[1].style.height = 20 +'px'; + this.s[1].lineHeight = (20-5)+'px'; + } + + this.update( false ); + + } + + setValue ( value ) { + + this.value = value; + this.lng = this.value.length; + for (var i = 0; i < this.lng; i++) { + if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5; + else this.v[i] = value[i] / this.multiplicator; + } + this.update(); + + } + + valueToHtml() { + + let i = this.lng, n=0, r = ''; + let w = 100 / this.lng; + let style = 'width:'+ w +'%;';//' text-align:center;' + while(i--){ + if(n===this.lng-1) r += '
' + this.value[n] + '
'; + else r += '' + this.value[n] + ''; + n++; + } + return r + } + + updateSVG () { + + if( this.line ) this.setSvg( this.c[3], 'd', this.makePath(), 0 ); + + for(let i = 0; ithis.top && l.yt[i][0] && l.x this.distance ) { + let angle = Math.atan2(this.tmp.x, this.tmp.y); + this.tmp.x = Math.sin( angle ) * this.distance; + this.tmp.y = Math.cos( angle ) * this.distance; + } + + this.pos.copy( this.tmp ).divideScalar( this.distance ).negate(); + + this.update(); + + } + + setValue ( v ) { + + if(v===undefined) v=[0,0]; + + this.pos.set( v[0] || 0, v[1] || 0 ); + this.updateSVG(); + + } + + update ( up ) { + + if( up === undefined ) up = true; + + if( this.interval !== null ){ + + if( !this.isDown ){ + + this.pos.lerp( null, 0.3 ); + + this.pos.x = Math.abs( this.pos.x ) < 0.01 ? 0 : this.pos.x; + this.pos.y = Math.abs( this.pos.y ) < 0.01 ? 0 : this.pos.y; + + if( this.isUI && this.main.isCanvas ) this.main.draw(); + + } + + } + + this.updateSVG(); + + if( up ) this.send(); + + + if( this.pos.isZero() ) this.stopInterval(); + + } + + updateSVG () { + + //let x = this.radius - ( -this.pos.x * this.distance ); + //let y = this.radius - ( -this.pos.y * this.distance ); + + let x = (this.diam*0.5) - ( -this.pos.x * this.distance ); + let y = (this.diam*0.5) - ( -this.pos.y * this.distance ); + + if(this.model === 0){ + + let sx = x + ((this.pos.x)*5) + 5; + let sy = y + ((this.pos.y)*5) + 10; + + this.setSvg( this.c[3], 'cx', sx*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', sy*this.ratio, 3 ); + } else { + this.setSvg( this.c[3], 'cx', x*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 3 ); + } + + + + this.setSvg( this.c[3], 'cx', x*this.ratio, 4 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 4 ); + + this.value[0] = ( this.pos.x * this.multiplicator ).toFixed( this.precision ) * 1; + this.value[1] = ( this.pos.y * this.multiplicator ).toFixed( this.precision ) * 1; + + if(this.haveText) this.c[2].textContent = this.value; + + } + + clear () { + + this.stopInterval(); + super.clear(); + + } + + } + + class Knob extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.autoWidth = false; + + this.setTypeNumber( o ); + + this.minw = this.w; + this.diam = o.diam || this.w; + + this.mPI = Math.PI * 0.8; + this.toDeg = 180 / Math.PI; + this.cirRange = this.mPI * 2; + + this.offset = new V2(); + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w +'px'; + this.c[0].style.display = 'block'; + + if(this.c[1] !== undefined) { + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + this.percent = 0; + + this.cmode = 0; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); + + this.c[3] = this.getKnob(); + this.setSvg( this.c[3], 'fill', cc.button, 0 ); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + this.setSvg( this.c[3], 'stroke', cc.text, 3 ); + this.setSvg( this.c[3], 'd', this.makeGrad(), 3 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam ); + this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); + + if ( this.model > 0 ) { + + Tools.dom( 'path', '', { d: '', stroke:cc.text, 'stroke-width': 2, fill: 'none', 'stroke-linecap': 'round' }, this.c[3] ); //4 + + if ( this.model == 2) { + + Tools.addSVGGlowEffect(); + this.setSvg( this.c[3], 'style', 'filter: url("#UILGlow");', 4 ); + + } + + } + + this.r = 0; + + this.init(); + + this.update(); + + } + + mode ( mode ) { + + let cc = this.colors; + + if( this.cmode === mode ) return false; + + switch( mode ) { + case 0: // base + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.button, 0); + //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + break; + case 1: // down + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'fill', cc.select, 0); + //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); + this.setSvg( this.c[3], 'stroke', cc.textOver, 1 ); + break; + } + + this.cmode = mode; + return true; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'knob'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0) + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1) + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let off = this.offset; + + //off.x = this.radius - ( e.clientX - this.zone.x ); + //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = - Math.atan2( off.x, off.y ); + + if( this.oldr !== null ) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; + + this.r = this.r > this.mPI ? this.mPI : this.r; + this.r = this.r < -this.mPI ? -this.mPI : this.r; + + let steps = 1 / this.cirRange; + let value = (this.r + this.mPI) * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = Math.floor( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'knob' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + makeGrad () { + + let d = '', step, range, a, x, y, x2, y2, r = 64; + let startangle = Math.PI + this.mPI; + let endangle = Math.PI - this.mPI; + //let step = this.step>5 ? this.step : 1; + + if(this.step>5){ + range = this.range / this.step; + step = ( startangle - endangle ) / range; + } else { + step = (( startangle - endangle ) / r)*2; + range = r*0.5; + } + + for ( let i = 0; i <= range; ++i ) { + + a = startangle - ( step * i ); + x = r + Math.sin( a ) * ( r - 20 ); + y = r + Math.cos( a ) * ( r - 20 ); + x2 = r + Math.sin( a ) * ( r - 24 ); + y2 = r + Math.cos( a ) * ( r - 24 ); + d += 'M' + x + ' ' + y + ' L' + x2 + ' '+y2 + ' '; + + } + + return d; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = (this.value - this.min) / this.range; + + let sa = Math.PI + this.mPI; + let ea = ( ( this.percent * this.cirRange ) - ( this.mPI ) ); + + let sin = Math.sin( ea ); + let cos = Math.cos( ea ); + + let x1 = ( 25 * sin ) + 64; + let y1 = -( 25 * cos ) + 64; + let x2 = ( 20 * sin ) + 64; + let y2 = -( 20 * cos ) + 64; + + this.setSvg( this.c[3], 'd', 'M ' + x1 +' ' + y1 + ' L ' + x2 +' ' + y2, 1 ); + + if ( this.model > 0 ) { + + let x1 = 36 * Math.sin( sa ) + 64; + let y1 = 36 * Math.cos( sa ) + 64; + let x2 = 36 * sin + 64; + let y2 = -36 * cos + 64; + let big = ea <= Math.PI - this.mPI ? 0 : 1; + this.setSvg( this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4 ); + + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( this.colors.text, -0.75) ), Tools.unpack( this.colors.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 4 ); + + } + + if( up ) this.send(); + + } + + } + + class List extends Proto { + + constructor( o = {} ) { + + super( o ); + + // TODO not work + this.hideCurrent = false; + + // images + this.path = o.path || ''; + this.format = o.format || ''; + + + this.isWithImage = this.path !== '' ? true:false; + this.preLoadComplete = false; + + this.tmpImage = {}; + this.tmpUrl = []; + + this.m = o.m !== undefined ? o.m : 5; + + + let align = o.align || 'left'; + + // scroll size + let ss = o.scrollSize || 10; + this.ss = ss+1; + + this.sMode = 0; + this.tMode = 0; + + this.listOnly = o.listOnly || false; + this.staticTop = o.staticTop || false; + + this.isSelectable = this.listOnly; + if( o.select !== undefined ) o.selectable = o.select; + if( o.selectable !== undefined ) this.isSelectable = o.selectable; + + if( this.txt === '' ) this.p = 0; + + + let fltop = Math.floor(this.h*0.5)-3; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.basic + 'top:0; display:none; border-radius:'+this.radius+'px;' ); + this.c[3] = this.dom( 'div', this.css.item + 'padding:0px '+this.m+'px; margin-bottom:0px; position:absolute; justify-content:'+align+'; text-align:'+align+'; line-height:'+(this.h-4)+'px; top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:1px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); + + this.scrollerBack = this.dom( 'div', this.css.basic + 'right:0px; width:'+ss+'px; background:'+cc.back+'; display:none;'); + this.scroller = this.dom( 'div', this.css.basic + 'right:'+((ss-(ss*0.25))*0.5)+'px; width:'+(ss*0.25)+'px; background:'+cc.text+'; display:none; '); + + this.c[3].style.color = cc.text; + + + this.list = []; + this.refObject = null; + + if( o.list ){ + if( o.list instanceof Array ){ + this.list = o.list; + } else if( o.list instanceof Object ){ + this.refObject = o.list; + for( let g in this.refObject ) this.list.push( g ); + } + } + + this.items = []; + + this.prevName = ''; + + + this.tmpId = 0; + + this.baseH = this.h; + + this.itemHeight = o.itemHeight || this.h;//(this.h-3); + + // force full list + this.full = o.full || false; + + this.py = 0; + this.ww = this.sb; + this.scroll = false; + this.isDown = false; + + this.current = null; + + // list up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + if( this.up ){ + + this.c[2].style.top = 'auto'; + this.c[3].style.top = 'auto'; + this.c[4].style.top = 'auto'; + + this.c[2].style.bottom = this.h-2 + 'px'; + this.c[3].style.bottom = '1px'; + this.c[4].style.bottom = fltop + 'px'; + + } else { + this.c[2].style.top = this.baseH + 'px'; + } + + this.listIn = this.dom( 'div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); + this.listIn.name = 'list'; + + this.topList = 0; + + this.c[2].appendChild( this.listIn ); + this.c[2].appendChild( this.scrollerBack ); + this.c[2].appendChild( this.scroller ); + + if( o.value !== undefined ){ + if(!isNaN(o.value)) this.value = this.list[ o.value ]; + else this.value = o.value; + }else { + this.value = this.list[0]; + } + + this.isOpenOnStart = o.open || false; + + if( this.listOnly ){ + this.baseH = 5; + this.c[3].style.display = 'none'; + this.c[4].style.display = 'none'; + this.c[2].style.top = this.baseH+'px'; + this.isOpenOnStart = true; + } + + + this.miniCanvas = o.miniCanvas || false; + this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; + this.imageSize = o.imageSize || [20,20]; + + // dragout function + this.drag = o.drag || false; + this.dragout = o.dragout || false; + this.dragstart = o.dragstart || null; + this.dragend = o.dragend || null; + + + + //this.c[0].style.background = '#FF0000' + ///if( this.isWithImage ) this.preloadImage(); + + this.setList( this.list ); + this.init(); + if( this.isWithImage ) this.preloadImage(); + if( this.isOpenOnStart ) this.open( true ); + + this.baseH += this.mtop; + + } + + // image list + + preloadImage () { + + + + this.preLoadComplete = false; + + this.tmpImage = {}; + for( let i=0; i this.h - this.baseH ) return 'title'; + else { + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + + } else { + if( l.y < this.baseH+2 ) return 'title'; + else { + if( this.isOpen ){ + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + } + + } + + return ''; + + } + + testItems ( y ) { + + let name = ''; + + let items = this.items; + + /*if(this.hideCurrent){ + //items = [...this.items] + items = this.items.slice(this.tmpId) + + }*/ + + let i = items.length, item, a, b; + while(i--){ + item = items[i]; + a = item.posy + this.topList; + b = item.posy + this.itemHeight + 1 + this.topList; + if( y >= a && y <= b ){ + name = 'item' + i; + this.modeItem(0); + this.current = item; + this.modeItem(1); + return name; + } + + } + + return name; + + } + + modeItem ( mode ) { + + if( !this.current ) return + + if( this.current.select && mode===0) mode = 2; + let cc = this.colors; + + switch( mode ){ + + case 0: // base + this.current.style.background = cc.back; + this.current.style.color = cc.text; + break; + case 1: // over + this.current.style.background = cc.over; + this.current.style.color = cc.textOver; + break; + case 2: // edit / down + this.current.style.background = cc.select; + this.current.style.color = cc.textSelect; + break; + + } + } + + unSelected() { + + if( !this.current ) return + this.modeItem(0); + this.current = null; + + } + + selected() { + + if( !this.current ) return + this.resetItems(); + this.modeItem(2); + this.current.select = true; + + + + } + + resetItems() { + + let i = this.items.length; + while(i--){ + this.items[i].select = false; + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text; + } + + } + + hideActive() { + + if( !this.hideCurrent ) return + //if( !this.current ) return + if( this.current )this.tmpId = this.current.id; + this.resetHide(); + //this.items[this.tmpId].style.height = 0+'px' + + } + + resetHide() { + + console.log(this.tmpId); + + let i = this.items.length; + while(i--){ + if(i===this.tmpId){ + this.items[i].style.height = 0+'px'; + this.items[i].posy = -1; + } else { + this.items[i].style.height = this.itemHeight+'px'; + this.items[i].posy = (this.itemHeight+1)*(i-1); + } + //this.items[i].style.display = 'flex' + + /*this.items[i].select = false + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text;*/ + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + + mouseup ( e ) { + + this.isDown = false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'scroll' ){ + + this.isDown = true; + this.mousemove( e ); + + } else if( name === 'title' ){ + + this.modeTitle(2); + if( !this.listOnly ){ + this.hideActive(); + if( !this.isOpen ) this.open(); + else this.close(); + } + } else { + // is item + if( this.current ){ + + this.value = this.list[ this.current.id ]; + //this.tmpId = this.current.id + + if( this.isSelectable ) this.selected(); + + //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); + this.send( this.value ); + + if( !this.listOnly ) { + this.close(); + this.setTopItem(); + //this.hideActive() + } + } + + } + + return true; + + } + + mousemove ( e ) { + + let nup = false; + let name = this.testZone( e ); + + if( !name ) return nup; + + if( name === 'title' ){ + this.unSelected(); + this.modeTitle(1); + this.cursor('pointer'); + + } else if( name === 'scroll' ){ + + this.cursor('s-resize'); + this.modeScroll(1); + if( this.isDown ){ + this.modeScroll(2); + //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + let top = this.zone.y+this.baseH-2; + this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + } + //if(this.isDown) this.listmove(e); + } else { + + // is item + this.modeTitle(0); + this.modeScroll(0); + this.cursor('pointer'); + + } + + if( name !== this.prevName ) nup = true; + this.prevName = name; + + return nup; + + } + + wheel ( e ) { + + let name = this.testZone( e ); + if( name === 'title' ) return false; + this.py += e.delta*10; + this.update(this.py); + return true; + + } + + + + // ---------------------- + + reset () { + + this.prevName = ''; + this.unSelected(); + this.modeTitle(0); + this.modeScroll(0); + + //console.log('this is reset') + + } + + modeScroll ( mode ) { + + if( mode === this.sMode ) return; + + let s = this.scroller.style; + let cc = this.colors; + + switch(mode){ + case 0: // base + s.background = cc.text; + break; + case 1: // over + s.background = cc.select; + break; + case 2: // edit / down + s.background = cc.select; + break; + + } + + this.sMode = mode; + } + + modeTitle ( mode ) { + + if( mode === this.tMode ) return; + + let s = this.s; + let cc = this.colors; + + switch(mode){ + case 0: // base + s[3].color = cc.text; + s[3].background = cc.button; + break; + case 1: // over + s[3].color = cc.textOver; + s[3].background = cc.overoff; + break; + case 2: // edit / down + s[3].color = cc.textSelect; + s[3].background = cc.overoff; + break; + + } + + this.tMode = mode; + + } + + clearList () { + + while ( this.listIn.children.length ) this.listIn.removeChild( this.listIn.lastChild ); + this.items = []; + + } + + setList ( list ) { + + this.clearList(); + + this.list = list; + this.length = this.list.length; + + let lng = this.hideCurrent? this.length-1 : this.length; + + this.maxItem = this.full ? lng : 5; + this.maxItem = lng < this.maxItem ? lng : this.maxItem; + + this.maxHeight = this.maxItem * (this.itemHeight+1) + 2; + + + + this.max = lng * (this.itemHeight+1) + 2; + this.ratio = this.maxHeight / this.max; + this.sh = this.maxHeight * this.ratio; + this.range = this.maxHeight - this.sh; + + this.c[2].style.height = this.maxHeight + 'px'; + this.scrollerBack.style.height = this.maxHeight + 'px'; + this.scroller.style.height = this.sh + 'px'; + + if( this.max > this.maxHeight ){ + this.ww = this.sb - this.ss; + this.scroll = true; + } + + if( this.miniCanvas ) { + + this.tmpCanvas = document.createElement('canvas'); + this.tmpCanvas.width = this.imageSize[0]; + this.tmpCanvas.height = this.imageSize[1]; + this.tmpCtx = this.tmpCanvas.getContext("2d"); + this.tmpCtx.fillStyle = this.canvasBg; + this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); + + } + + let item, n;//, l = this.sb; + for( let i=0; i this.range ? this.range : y; + + this.topList = -Math.floor( y / this.ratio ); + + this.listIn.style.top = this.topList+'px'; + this.scroller.style.top = Math.floor( y ) + 'px'; + + this.py = y; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open ( first ) { + + super.open(); + + this.update( 0 ); + + this.h = this.maxHeight + this.baseH + 5; + if( !this.scroll ){ + this.topList = 0; + this.h = this.baseH + 5 + this.max; + this.scroller.style.display = 'none'; + this.scrollerBack.style.display = 'none'; + } else { + this.scroller.style.display = 'block'; + this.scrollerBack.style.display = 'block'; + } + this.s[0].height = this.h + 'px'; + this.s[2].display = 'block'; + + if( this.up ){ + this.zone.y -= this.h - (this.baseH-10); + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + } else { + this.setSvg( this.c[4], 'd', this.svgs.g2 ); + } + + this.rSizeContent(); + + let t = this.h - this.baseH; + + this.zone.h = this.h; + + if(!first) this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.h - (this.baseH-10); + + let t = this.h - this.baseH; + + this.h = this.baseH; + this.s[0].height = this.h + 'px'; + this.s[2].display = 'none'; + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + + this.zone.h = this.h; + + this.parentHeight( -t ); + + } + + // ----- + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSizeContent () { + + let i = this.length; + while(i--) this.listIn.children[i].style.width = this.ww + 'px'; + + } + + rSize () { + + super.rSize(); + + //Proto.prototype.rSize.call( this ); + + let s = this.s; + let w = this.sb; + let d = this.sa; + + if(s[2]=== undefined) return; + + s[2].width = w + 'px'; + s[2].left = d +'px'; + + s[3].width = w + 'px'; + s[3].left = d + 'px'; + + s[4].left = d + w - 15 + 'px'; + + this.ww = w; + if( this.max > this.maxHeight ) this.ww = w-this.ss; + if(this.isOpen) this.rSizeContent(); + + } + + } + + class Numeric extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.setTypeNumber( o ); + + this.allway = o.allway || false; + + this.isDown = false; + this.value = [0]; + this.multy = 1; + this.invmulty = 1; + this.isSingle = true; + this.isAngle = false; + this.isVector = false; + + if( o.isAngle ){ + this.isAngle = true; + this.multy = Tools.torad; + this.invmulty = Tools.todeg; + } + + this.isDrag = o.drag || false; + + if( o.value !== undefined ){ + if( !isNaN(o.value) ){ + this.value = [o.value]; + } else if( o.value instanceof Array ){ + this.value = o.value; + this.isSingle = false; + } else if( o.value instanceof Object ){ + this.value = []; + if( o.value.x !== undefined ) this.value[0] = o.value.x; + if( o.value.y !== undefined ) this.value[1] = o.value.y; + if( o.value.z !== undefined ) this.value[2] = o.value.z; + if( o.value.w !== undefined ) this.value[3] = o.value.w; + this.isSingle = false; + this.isVector = true; + } + } + + this.lng = this.value.length; + this.tmp = []; + + this.current = -1; + this.prev = { x:0, y:0, d:0, v:0 }; + + let cc = this.colors; + + // bg + this.c[2] = this.dom( 'div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h-8) + 'px;' ); + + this.cMode = []; + + let i = this.lng; + while(i--){ + + if( this.isAngle ) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed( this.precision ); + this.c[3+i] = this.dom( 'div', this.css.txtselect + 'top:1px; height:'+(this.h-2)+'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;'); + if(o.center) this.c[2+i].style.textAlign = 'center'; + this.c[3+i].textContent = this.value[i]; + this.c[3+i].style.color = this.colors.text; + this.c[3+i].isNum = true; + this.cMode[i] = 0; + + } + + // selection + this.selectId = 3 + this.lng; + this.c[this.selectId] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.cursorId = 4 + this.lng; + this.c[ this.cursorId ] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + this.init(); + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0"; + this.easing = o.easing || 1; + + this.setTypeNumber(o); + + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + + //this.defaultBorderColor = this.colors.hide; + + this.isDown = false; + this.isOver = false; + this.allway = o.allway || false; + + this.isDeg = o.isDeg || false; + this.isCyclic = o.cyclic || false; + + this.firstImput = false; + + let cc = this.colors; + + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + this.c[2] = this.dom( + "div", + this.css.txtselect + + "border:none; background:none; width:47px; color:" + + cc.text + + ";" + ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); + this.c[3] = this.dom( + "div", + this.css.basic + " top:0; height:" + this.h + "px;" + ); + + this.c[4] = this.dom( + "div", + this.css.basic + + "background:" + + cc.back + + "; top:2px; height:" + + (this.h - 4) + + "px;" + ); + this.c[5] = this.dom( + "div", + this.css.basic + + "left:4px; top:5px; height:" + + (this.h - 10) + + "px; background:" + + cc.text + + ";" + ); + + this.c[2].isNum = true; + //this.c[2].style.height = (this.h-4) + 'px'; + //this.c[2].style.lineHeight = (this.h-8) + 'px'; + this.c[2].style.height = this.h - 2 + "px"; + this.c[2].style.lineHeight = this.h - 10 + "px"; + + if (this.model !== 0) { + let r1 = 4, + h1 = 4, + h2 = 8, + ww = this.h - 6, + ra = 16; + + if (this.model === 2) { + r1 = 0; + h1 = 2; + h2 = 4; + ra = 2; + ww = (this.h - 6) * 0.5; + } + + if (this.model === 3) this.c[5].style.visible = "none"; + + this.c[4].style.borderRadius = r1 + "px"; + this.c[4].style.height = h2 + "px"; + this.c[4].style.top = this.h * 0.5 - h1 + "px"; + this.c[5].style.borderRadius = r1 * 0.5 + "px"; + this.c[5].style.height = h1 + "px"; + this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; + + //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); + this.c[6] = this.dom( + "div", + this.css.basic + + "border-radius:" + + ra + + "px; margin-left:" + + -ww * 0.5 + + "px; background:" + + cc.text + + "; left:4px; top:3px; height:" + + (this.h - 6) + + "px; width:" + + ww + + "px;" + ); + } + + this.init(); + } + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + if (l.x >= this.txl) return "text"; + else if (l.x >= this.sa) return "scroll"; + else return ""; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (this.isDown) this.isDown = false; + } + + mousedown(e) { + let name = this.testZone(e); + + if (!name) return false; + + if (name === "scroll") { + this.isDown = true; + this.old = this.value; + this.mousemove(e); + } + + /*if( name === 'text' ){ + this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); + }*/ + + return true; + } + + mousemove(e) { + let nup = false; + + let name = this.testZone(e); + + if (name === "scroll") { + this.mode(1); + this.cursor("w-resize"); + //} else if(name === 'text'){ + //this.cursor('pointer'); + } else { + this.cursor(); + } + + if (this.isDown) { + let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; + + // lo mapeo al rango 0 ... 1 + nNormalized = Math.min(1, Math.max(0, nNormalized)); + + // aplico easing + let nEased = Math.pow(nNormalized, this.easing); // easing + + let nNew = nEased * this.range + this.min; + let nNewSlider = nNormalized * this.range + this.min; + + this.sliderValue = this.numValue(nNewSlider); + + let delta = nNew - this.old; + + let steps; + if (delta >= this.step || delta <= this.step) { + steps = Math.floor(delta / this.step); + this.value = this.numValue(this.old + steps * this.step); + // value without easing applied + + this.update(true); + this.old = this.value; + } + //console.log("n, normalized, value", nNew, nNormalized, this.value); + nup = true; + } + + return nup; + } + + wheel(e) { + let name = this.testZone(e); + + if (name === "scroll") { + let v = this.value - this.step * e.delta; + + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue(v); + this.old = v; + this.update(true); + + return true; + } + + return false; + } + + //keydown: function ( e ) { return true; }, + + // ---------------------- + + validate() { + let n = this.c[2].textContent; + + if (!isNaN(n)) { + this.value = this.numValue(n); + this.update(true); + } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + } + + reset() { + //this.clearInput(); + this.isDown = false; + this.mode(0); + } + + mode(mode) { + let s = this.s; + let cc = this.colors; + + switch (mode) { + case 0: // base + // s[2].border = '1px solid ' + this.colors.hide; + s[2].color = cc.text; + s[4].background = cc.back; + s[5].background = cc.text; + if (this.model !== 0) s[6].background = cc.text; //cc.button; + break; + case 1: // scroll over + //s[2].border = '1px dashed ' + this.colors.hide; + s[2].color = cc.textOver; + s[4].background = cc.back; + s[5].background = cc.textOver; + if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; + break; + } + } + + update(up) { + let normalized = (this.value - this.min) / this.range; + + let uneased = + this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); + + let ww = Math.floor(this.ww * uneased); + //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); + + if (this.model !== 3) this.s[5].width = ww + "px"; + if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; + this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + + if (up) this.send(); + } + + rSize() { + super.rSize(); + + let w = this.sb - this.sc; + this.ww = w - 6; + + let tx = this.sc; + if (this.isUI || !this.simple) tx = this.sc + 10; + this.txl = this.w - tx + 2; + + //let ty = Math.floor(this.h * 0.5) - 8; + + let s = this.s; + + s[2].width = this.sc - 6 + "px"; + s[2].left = this.txl + 4 + "px"; + //s[2].top = ty + 'px'; + s[3].left = this.sa + "px"; + s[3].width = w + "px"; + s[4].left = this.sa + "px"; + s[4].width = w + "px"; + s[5].left = this.sa + 3 + "px"; + + this.update(); + } + } + + class TextInput extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.cmode = 0; + + this.value = o.value !== undefined ? o.value : ''; + this.placeHolder = o.placeHolder || ''; + + this.allway = o.allway || false; + this.editable = o.edit !== undefined ? o.edit : true; + + this.isDown = false; + + let cc = this.colors; + + // text + this.c[2] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[2].textContent = this.value; + + // selection + this.c[3] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.c[4] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + // fake + this.c[5] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; border:none; justify-content: center; font-style: italic; color:'+cc.border+';' ); + if( this.value === '' ) this.c[5].textContent = this.placeHolder; + + + + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x >= this.sa ) return 'text'; + return ''; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if(!this.editable) return; + + if( this.isDown ){ + this.isDown = false; + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + if( !this.isDown ){ + this.isDown = true; + if( name === 'text' ) this.setInput( this.c[2] ); + return this.mousemove( e ); + } + + return false; + + } + + mousemove ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + //let l = this.local; + //if( l.x === -1 && l.y === -1 ){ return;} + + //if( l.x >= this.sa ) this.cursor('text'); + //else this.cursor(); + + let x = 0; + + if( name === 'text' ) this.cursor('text'); + else this.cursor(); + + if( this.isDown ) x = e.clientX - this.zone.x; + + return this.upInput( x - this.sa -3, this.isDown ); + + } + + update ( ) { + + this.c[2].textContent = this.value; + + } + + // ---------------------- + + reset () { + + this.cursor(); + + } + + // ---------------------- + // INPUT + // ---------------------- + + select ( c, e, w, t ) { + + let s = this.s; + let d = this.sa + 5; + s[4].width = '1px'; + s[4].left = ( d + e ) + 'px'; + + s[3].left = ( d + e ) + 'px'; + s[3].width = w + 'px'; + this.c[3].innerHTML = t; + + } + + unselect () { + + let s = this.s; + if(!s) return; + s[3].width = 0 + 'px'; + this.c[3].innerHTML = 't'; + s[4].width = 0 + 'px'; + + } + + validate ( force ) { + + if( this.allway ) force = true; + + this.value = this.c[2].textContent; + + if(this.value !== '') this.c[5].textContent = ''; + else this.c[5].textContent = this.placeHolder; + + if( !force ) return; + + this.send(); + + } + + // ---------------------- + // REZISE + // ---------------------- + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + + s[5].left = this.sa + 'px'; + s[5].width = this.sb + 'px'; + + } + + + } + + class Title extends Proto { + + constructor( o = {} ) { + + super( o ); + + let prefix = o.prefix || ''; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:right; width:60px; line-height:'+ (this.h-8) + 'px; color:' + this.colors.text ); + + if( this.h === 31 ){ + + this.s[0].height = this.h + 'px'; + this.s[1].top = 8 + 'px'; + this.c[2].style.top = 8 + 'px'; + + } + + let s = this.s; + + s[1].justifyContent = o.align || 'left'; + //s[1].textAlign = o.align || 'left'; + s[1].fontWeight = o.fontWeight || 'bold'; + + + this.c[1].textContent = this.txt.substring(0,1).toUpperCase() + this.txt.substring(1).replace("-", " "); + this.c[2].textContent = prefix; + + this.init(); + + } + + text( txt ) { + + this.c[1].textContent = txt; + + } + + text2( txt ) { + + this.c[2].textContent = txt; + + } + + rSize() { + + super.rSize(); + this.s[1].width = this.w + 'px'; //- 50 + 'px'; + this.s[2].left = this.w + 'px';//- ( 50 + 26 ) + 'px'; + + } + + setColor( c ) { + this.s[1].color = c; + this.s[2].color = c; + } + + } + + class Select extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.isDown = false; + this.onActif = o.onActif || function(){}; + + //let prefix = o.prefix || ''; + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+ cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + //this.c[2].style.color = this.fontColor; + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'cursor' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + this.isActif = false; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + if( l.x > this.sa && l.x < this.sa+30 ) return 'over' + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ) + } + + return false + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false + + this.isDown = true; + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + this.send(); + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + if( n===1 ) this.isActif = false; + if( n===3 ){ + if( !this.isActif ){ this.isActif = true; n=4; this.onActif( this ); } + else { this.isActif = false; } + } + + if( n===2 && this.isActif ) n = 4; + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.action; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.action; break; // actif + + } + + change = true; + + } + + return change + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ) + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + + } + + class Bitmap extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.refTexture = o.texture || null; + this.img = null; + + this.isDown = false; + this.neverlock = true; + + + + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'load' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x > this.sa && l.x < this.sa+30 ) return 'over'; + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'over' ){ + this.isDown = true; + Files.load( { callback:this.changeBitmap.bind(this) } ); + + } + + + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ); + + } + + mousemove ( e ) { + + let up = false; + + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + + changeBitmap( img, fname ){ + + if( img ){ + this.img = img; + this.apply( fname ); + } else { + this.img = null; + this.apply( 'null' ); + } + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + + if( this.img !== null ){ + if( this.objectLink !== null ) this.objectLink[ this.val ] = v; + if( this.callback ) this.callback( this.value, this.img, this.name ); + } + + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.over; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.select; break; // actif + + } + + change = true; + + } + + return change; + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ); + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + + } + + //import { Proto } from '../core/Proto.js'; + + class Selector extends Button { + + constructor( o = {} ) { + + if( o.selectable === undefined ) o.selectable = true; + super( o ); + + } + + } + + class Item extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.p = 100; + this.value = this.txt; + this.status = 1; + + this.itype = o.itype || 'none'; + this.val = this.itype; + + this.graph = this.svgs[ this.itype ]; + + let fltop = Math.floor(this.h*0.5)-7; + + this.c[2] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.graph, fill:this.colors.text, stroke:'none'}); + + this.s[1].marginLeft = 20 + 'px'; + + this.init(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousemove ( e ) { + + this.cursor('pointer'); + + //up = this.modes( this.isDown ? 3 : 2, name ); + + } + + mousedown ( e ) { + + if( this.isUI ) this.main.resetItem(); + + this.selected( true ); + + this.send(); + + return true; + + } + + uiout () { + + if( this.isSelect ) this.mode(3); + else this.mode(1); + + } + + uiover () { + + if( this.isSelect ) this.mode(4); + else this.mode(2); + + } + + update () { + + } + + /*rSize () { + + super.rSize(); + + }*/ + + mode ( n ) { + + let change = false; + + if( this.status !== n ){ + + this.status = n; + let s = this.s, cc = this.colors; + + switch( n ){ + + case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; + case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; + case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; + case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; + + } + + change = true; + + } + + return change; + + } + + reset () { + + this.cursor(); + // return this.mode( 1 ); + + } + + selected ( b ){ + + if( this.isSelect ) this.mode(1); + + this.isSelect = b || false; + + if( this.isSelect ) this.mode(3); + + } + + + } + + class Grid extends Proto { + + constructor( o = {} ) { + + super( o ); + + /*this.values = o.values || []; + + if( typeof this.values === 'string' ) this.values = [ this.values ];*/ + + this.values = []; + + if( o.values ){ + if( o.values instanceof Array ){ + this.values = o.values; + } else if( o.values instanceof String ){ + this.values = [ o.values ]; + } else if( o.values instanceof Object ){ + this.refObject = o.values; + for( let g in this.refObject ) this.values.push( g ); + } + } + + this.lng = this.values.length; + + + + this.value = o.value || null; + + + + + let cc = this.colors; + + + this.isSelectable = o.selectable || false; + this.spaces = o.spaces || [ cc.sx, cc.sy ]; + this.bsize = o.bsize || [ 90, this.h ]; + + this.bsizeMax = this.bsize[0]; + + this.tmp = []; + this.stat = []; + this.grid = [ 2, Math.round( this.lng * 0.5 ) ]; + + this.h = ( this.grid[1] * this.bsize[1] ) + ( this.grid[1] * this.spaces[1] ); //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); + + this.c[1].textContent = ''; + //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); + this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1])+'px; border:none;' ); + + let n = 0, b, td, tr, sel; + + this.res = -1; + this.isDown = false; + this.neverlock = true; + + this.buttons = []; + this.stat = []; + this.tmpX = []; + this.tmpY = []; + + for( let i = 0; i < this.grid[1]; i++ ){ + + tr = this.c[2].insertRow(); + tr.style.cssText = 'pointer-events:none;'; + for( let j = 0; j < this.grid[0]; j++ ){ + + td = tr.insertCell(); + td.style.cssText = 'pointer-events:none;'; + + if( this.values[n] ){ + + sel = false; + if( this.values[n] === this.value && this.isSelectable ) sel = true; + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:'+this.bsize[0]+'px; height:'+(this.bsize[1]-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; left:auto; right:auto; border-radius:'+this.radius+'px;'; + b.style.background = sel ? cc.select : cc.button; + b.style.color = sel ? cc.textSelect : cc.text; + b.innerHTML = this.values[n]; + td.appendChild( b ); + + this.buttons.push(b); + this.stat.push(1); + + } else { + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + 'position:static; width:'+this.bsize[0]+'px; height:'+this.bsize[1]+'px; text-align:center; left:auto; right:auto; background:none;'; + td.appendChild( b ); + + } + + if(j===0) b.style.cssText += 'float:right;'; + else b.style.cssText += 'float:left;'; + + n++; + + } + } + + this.s[0].border = 'none'; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1; + + l.y += this.mtop; + + let tx = this.tmpX; + let ty = this.tmpY; + + let id = -1; + let c = -1; + let line = -1; + let i = this.grid[0]; + while( i-- ){ + if( l.x > tx[i][0] && l.x < tx[i][1] ) c = i; + } + + i = this.grid[1]; + while( i-- ){ + if( l.y > ty[i][0] && l.y < ty[i][1] ) line = i; + } + + if(c!==-1 && line!==-1){ + id = c + (line*2); + if(id>this.lng-1) id = -1; + } + + return id; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( !this.isDown ) return false + + this.isDown = false; + if( this.res !== -1 ){ + this.value = this.values[this.res]; + this.send(); + } + + return this.mousemove( e ) + + } + + mousedown ( e ) { + + if( this.isDown ) return false + this.isDown = true; + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + this.res = this.testZone( e ); + + if( this.res !== -1 ){ + this.cursor('pointer'); + up = this.modes( this.isDown ? 3 : 2, this.res ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + // MODE + // ----------------------- + + modes ( N = 1, id = -1 ) { + + let i = this.lng, w, n, r = false; + + while( i-- ){ + + n = N; + w = this.isSelectable ? this.values[ i ] === this.value : false; + + if( i === id ){ + if( w && n === 2 ) n = 3; + } else { + n = 1; + if( w ) n = 4; + } + + if( this.mode( n, i ) ) r = true; + + } + + return r + + } + + mode ( n, id ) { + + let change = false; + let cc = this.colors, s = this.buttons; + let i = id; + + if( this.stat[id] !== n ){ + + this.stat[id] = n; + + switch( n ){ + + case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; + case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; + case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; + case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; + + } + + change = true; + + } + + return change; + + } + + // ---------------------- + + reset () { + + this.res = -1; + this.cursor(); + return this.modes() + + } + + + label ( string, n ) { + + this.buttons[n].textContent = string; + + } + + icon ( string, y, n ) { + + this.buttons[n].style.padding = ( y || 0 ) +'px 0px'; + this.buttons[n].innerHTML = string; + + } + + testW () { + + let vw = this.spaces[0]*3 + this.bsizeMax*2, rz = false; + if( vw > this.w ) { + this.bsize[0] = ( this.w-(this.spaces[0]*3) ) * 0.5; + rz = true; + } else { + if( this.bsize[0] !== this.bsizeMax ) { + this.bsize[0] = this.bsizeMax; + rz = true; + } + } + + if( !rz ) return; + + let i = this.buttons.length; + while(i--) this.buttons[i].style.width = this.bsize[0] + 'px'; + + } + + rSize () { + + super.rSize(); + + this.testW(); + + let mid; + + this.tmpX = []; + this.tmpY = []; + + for( let j = 0; j < this.grid[0]; j++ ){ + + if(j===0){ + mid = ( this.w*0.5 ) - ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid-this.bsize[0], mid ] ); + } else { + mid = ( this.w*0.5 ) + ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid, mid+this.bsize[0] ] ); + } + + } + + mid = this.spaces[1]; + + for( let i = 0; i < this.grid[1]; i++ ){ + + this.tmpY.push( [ mid, mid + this.bsize[1] ] ); + mid += this.bsize[1] + this.spaces[1]; + + } + + } + + } + + class Pad2D extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + + //this.margin = 15; + this.pos = new V2(0,0); + this.maxPos = 90; + + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.min = o.min === undefined ? -1 : o.min; + this.max = o.max === undefined ? 1 : o.max; + + this.range = (this.max - this.min)*0.5; + + this.cmode = 0; + + + //console.log(this.range) + + this.c[0].style.display = 'block'; + + + + + + this.precision = o.precision === undefined ? 2 : o.precision; + + /*this.bounds = {}; + this.bounds.x1 = o.x1 || -1; + this.bounds.x2 = o.x2 || 1; + this.bounds.y1 = o.y1 || -1; + this.bounds.y2 = o.y2 || 1; + + this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); + this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); + + this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); + this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ + + this.value = ( Array.isArray( o.value ) && o.value.length == 2 ) ? o.value : [ 0, 0 ]; + + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w + 'px'; + + // Title + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + //this.top -= this.margin + + let cc = this.colors; + + + // Value + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+ ( this.h - 20 ) + 'px; width:100%; color:' + cc.text ); + this.c[2].textContent = this.value; + + // Pad + + let pad = this.getPad2d(); + + this.setSvg( pad, 'fill', cc.back, 0 ); + this.setSvg( pad, 'fill', cc.button, 1 ); + this.setSvg( pad, 'stroke', cc.back, 2 ); + this.setSvg( pad, 'stroke', cc.back, 3 ); + this.setSvg( pad, 'stroke', cc.text, 4 ); + + this.setSvg( pad, 'viewBox', '0 0 '+this.diam+' '+this.diam ); + this.setCss( pad, { width:this.diam, height:this.diam, left:0, top:this.top }); + + this.c[3] = pad; + + this.init(); + this.setValue(); + + } + + testZone ( e ) { + + let l = this.local; + + if( l.x === -1 && l.y === -1 ) return ''; + + + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'pad'; + + /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { + return 'pad'; + }*/ + + //return ''; + + } + + mouseup ( e ) { + + this.isDown = false; + return this.mode(0); + + } + + mousedown ( e ) { + + if ( this.testZone(e) === 'pad' ) { + + this.isDown = true; + this.mousemove( e ); + return this.mode(1); + } + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let x = (this.w*0.5) - ( e.clientX - this.zone.x ); + let y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + + let r = 256 / this.diam; + + x = -(x*r); + y = -(y*r); + + x = Tools.clamp( x, -this.maxPos, this.maxPos ); + y = Tools.clamp( y, -this.maxPos, this.maxPos ); + + //let x = e.clientX - this.zone.x; + //let y = e.clientY - this.zone.y - this.top; + + /*if( x < this.margin ) x = this.margin; + if( x > this.w - this.margin ) x = this.w - this.margin; + if( y < this.margin ) y = this.margin; + if( y > this.w - this.margin ) y = this.w - this.margin;*/ + + //console.log(x,y) + + this.setPos( [ x , y ] ); + + this.update( true ); + + } + + mode ( mode ) { + + if( this.cmode === mode ) return false; + + let cc = this.colors; + + switch( mode ){ + case 0: // base + + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.back, 0); + this.setSvg( this.c[3], 'fill', cc.button, 1); + this.setSvg( this.c[3], 'stroke', cc.back, 2); + this.setSvg( this.c[3], 'stroke', cc.back, 3); + this.setSvg( this.c[3], 'stroke', cc.text, 4 ); + + break; + case 1: // down + + this.s[2].color = cc.textSelect; + this.setSvg( this.c[3], 'fill', cc.backoff, 0); + this.setSvg( this.c[3], 'fill', cc.overoff, 1); + this.setSvg( this.c[3], 'stroke', cc.backoff, 2); + this.setSvg( this.c[3], 'stroke', cc.backoff, 3); + this.setSvg( this.c[3], 'stroke', cc.textSelect, 4 ); + + break; + } + + this.cmode = mode; + return true; + + + + } + + update ( up ) { + + //if( up === undefined ) up = true; + + this.c[2].textContent = this.value; + + this.updateSVG(); + + if( up ) this.send(); + + } + + updateSVG() { + + if ( this.model == 1 ) { + + this.setSvg( this.c[3], 'y1', this.pos.y, 2 ); + this.setSvg( this.c[3], 'y2', this.pos.y, 2 ); + + this.setSvg( this.c[3], 'x1', this.pos.x, 3 ); + this.setSvg( this.c[3], 'x2', this.pos.x, 3 ); + + } + + this.setSvg( this.c[3], 'cx', this.pos.x, 4 ); + this.setSvg( this.c[3], 'cy', this.pos.y, 4 ); + + } + + setPos ( p ) { + + //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; + + this.pos.set( p[0]+128 , p[1]+128 ); + + let r = 1/this.maxPos; + + this.value[0] = ((p[0]*r)*this.range).toFixed( this.precision ); + this.value[1] = ((p[1]*r)*this.range).toFixed( this.precision ); + + } + + setValue ( v, up = false ) { + + if( v === undefined ) v = this.value; + + /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; + if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; + if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; + if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ + + this.value[0] = Math.min( this.max, Math.max( this.min, v[0] ) ).toFixed( this.precision ) * 1; + this.value[1] = Math.min( this.max, Math.max( this.min, v[1] ) ).toFixed( this.precision ) * 1; + + this.pos.set( ((this.value[0]/this.range)*this.maxPos)+128 , ((this.value[1]/this.range)*this.maxPos)+128 ); + + //console.log(this.pos) + + this.update( up ); + + } + + /*lerp( s1, s2, d1, d2, c = true ) { + + let s = ( d2 - d1 ) / ( s2 - s1 ); + + return c ? ( v ) => { + return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 + } : ( v ) => { + return ( v - s1 ) * s + d1 + } + + }*/ + + } + + // proto/TreeList.js + + class TreeList extends Proto { + constructor(o = {}) { + // Propiedades públicas esperadas (API) + // o.tree (obj/array), o.value (array), o.focused (bool), + // o.focusPath (array), o.focusLevel (number), + // o.tabIndex, o.itemIndex, o.onChange (fn) + o.selectable = true; // navegable por teclado si activas flechas + o.name = o.name || 'TreeList'; + super(o); + + // Datos & estado + this.tree = o.tree || {}; + this.value = Array.isArray(o.value) ? o.value.slice() : []; + this.focused = !!o.focused; + this.focusPath = Array.isArray(o.focusPath) ? o.focusPath.slice() : []; + this.focusLevel = typeof o.focusLevel === 'number' ? o.focusLevel : -1; + + this.tabIndex = o.tabIndex ?? null; + this.itemIndex = o.itemIndex ?? null; + + // Callback de notificación + this.changeCb = typeof o.onChange === 'function' ? o.onChange : (/*tabIdx, itemIdx, newPath*/) => {}; + + // Layout interno + this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] + this.leafMax = 0; // alto reservado para el último nivel (máximo tamaño de hoja) + this.levelGap = 2; // gap vertical entre niveles + this.hItem = this.h; // alto por ítem + + // Hover / foco de mouse + this.hover = { level: -1, index: -1 }; + + // DOM visual (sin listeners directos; los eventos llegan vía Roots->handleEvent) + this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); // container interno + this.s[2] = this.c[2].style; + + // Inicializa nodos visuales de forma perezosa en rSize() + this.itemsDom = []; // mirror de this.levels (matriz de nodos) + + this.init(); + } + + // =============== Helpers de datos =============== + + static isMap(node) { return node && typeof node === 'object' && !Array.isArray(node); } + static isList(node) { return Array.isArray(node); } + + // Devuelve el subnodo al seguir path (se detiene si no existe) + getNodeAtPath(path) { + let node = this.tree; + for (let i = 0; i < path.length; i++) { + if (TreeList.isMap(node)) { + if (!Object.prototype.hasOwnProperty.call(node, path[i])) return { node: null, depth: i }; + node = node[path[i]]; + } else if (TreeList.isList(node)) { + // Al llegar a lista, ya no hay más descendencia válida para claves + if (i < path.length) return { node, depth: i }; + } else { + return { node: null, depth: i }; + } + } + return { node, depth: path.length }; + } + + // Autocompleta descendiendo por la primera clave de cada mapa hasta alcanzar una lista + autoCompleteToLeaf(basePath) { + let nodeInfo = this.getNodeAtPath(basePath); + let node = nodeInfo.node; + const path = basePath.slice(); + + while (TreeList.isMap(node)) { + const keys = Object.keys(node); + if (!keys.length) break; // mapa vacío + const k0 = keys[0]; + path.push(k0); + node = node[k0]; + } + // Si termina en lista, NO agrega selección final de elemento hoja + return path; + } + + // Ruta activa para construir niveles (focusPath si focused, si no value) + getActivePath() { + return this.focused ? this.focusPath : this.value; + } + + // Calcula el máximo tamaño de hoja del árbol (para reservar alto estable) + computeLeafMax(node = this.tree) { + if (TreeList.isList(node)) return node.length; + if (!TreeList.isMap(node)) return 0; + let m = 0; + for (const k of Object.keys(node)) { + m = Math.max(m, this.computeLeafMax(node[k])); + } + return m; + } + + // =============== Construcción de niveles (modelo lógico) =============== + + buildLevels() { + this.levels.length = 0; + const activePath = this.getActivePath(); + + let node = this.tree; + let level = 0; + + while (node) { + if (TreeList.isMap(node)) { + // Opciones = claves del mapa (nivel intermedio) + const keys = Object.keys(node); + if (!keys.length) break; // detener expansión si vacío + this.levels.push({ type: 'map', items: keys.map(k => ({ key: k, label: k, zone: {x:0,y:0,w:0,h:0} })), zone: {x:0,y:0,w:0,h:this.hItem} }); + + // Avanza según la ruta activa (si existe), sino se detiene + const nextKey = activePath[level]; + if (!nextKey || !node.hasOwnProperty(nextKey)) break; + node = node[nextKey]; + } else if (TreeList.isList(node)) { + // Último nivel: lista/hoja (vertical) + const items = node.map(label => ({ key: label, label, zone: {x:0,y:0,w:0,h:0} })); + this.levels.push({ type: 'list', items, zone: {x:0,y:0,w:0,h: Math.max(items.length, this.leafMax) * this.hItem } }); + break; // fin + } else { + break; // nodo inválido + } + level++; + } + } + + // =============== Layout (zonas internas) =============== + + // Calcula zonas internas de cada ítem/level y construye/actualiza dom + layoutLevels() { + const padX = 8; + const w = this.zone.w - padX * 2; + let y = 0; + + // Asegura `itemsDom` anidado por nivel + while (this.itemsDom.length < this.levels.length) this.itemsDom.push([]); + // Limpia extra DOM si niveles disminuyen + for (let L = this.levels.length; L < this.itemsDom.length; L++) { + for (const el of this.itemsDom[L]) if (el && el.parentNode) el.parentNode.removeChild(el); + } + this.itemsDom.length = this.levels.length; + + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + if (lvl.type === 'map') { + const n = Math.max(1, lvl.items.length); + const cellW = Math.floor(w / n); + lvl.zone = { x: padX, y, w, h: this.hItem }; + let x = padX; + // Asegura contenedor dom de nivel si querés uno (opcional) + for (let i = 0; i < lvl.items.length; i++) { + const it = lvl.items[i]; + it.zone = { x, y, w: cellW, h: this.hItem }; + + // crea/actualiza nodo visual + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, 'map'); + + x += cellW; + } + y += this.hItem + this.levelGap; + } else { + // lista/hoja vertical + const n = lvl.items.length; + const hList = Math.max(n, this.leafMax) * this.hItem; + lvl.zone = { x: padX, y, w, h: hList }; + + for (let i = 0; i < Math.max(n, this.leafMax); i++) { + // Puede haber "espacio vacío" si n < leafMax + const isReal = i < n; + const it = isReal ? lvl.items[i] : { key: null, label: '', zone: {x:0,y:0,w:0,h:0} }; + it.zone = { x: padX, y: y + i * this.hItem, w, h: this.hItem }; + + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, 'list', isReal); + } + y += hList; + } + } + + // Ajusta alto visible del control + const totalH = y; + this.zone.h = totalH + this.margin; // Proto se encarga del margen + this.s[0].height = this.zone.h + 'px'; + this.s[2].height = totalH + 'px'; + } + + ensureItemDom(L, i) { + const row = this.itemsDom[L]; + while (row.length <= i) row.push(null); + if (!row[i]) { + // Cada ítem es un DIV posicionado absoluto dentro de this.c[2] + const div = this.dom('div', Tools.css.txt + 'position:absolute; pointer-events:none;'); + this.c[2].appendChild(div); + row[i] = div; + } + return row[i]; + } + + // Colorea y posiciona el DOM del ítem según estados (seleccionado / foco) + paintItemDom(div, L, i, it, kind, isReal = true) { + const s = div.style; + const cc = this.colors; + + // Posición + s.left = it.zone.x + 'px'; + s.top = it.zone.y + 'px'; + s.width = it.zone.w + 'px'; + s.height = (it.zone.h - 2) + 'px'; // -2 para evitar overlap de bordes + + // Texto + div.textContent = isReal ? it.label : ''; + + // Estados semánticos + const value = this.value; + const selected = (value[L] !== undefined) && (value[L] === it.key) && isReal; + + const inFocusLevel = this.focused && (this.focusLevel === L); + const focusMatch = inFocusLevel && (this.focusPath[L] === it.key) && isReal; + + // Hover (mouse) + const isHover = (this.hover.level === L && this.hover.index === i && isReal); + + // Estilos base + s.background = cc.back; + s.color = cc.text; + s.border = '1px solid ' + cc.border; + + // Mapa = horizontal, Lista = vertical + if (kind === 'map') s.textAlign = 'center'; + else s.textAlign = 'left'; + + // Priorización visual: seleccionado > foco > hover > base + if (selected) { + s.background = cc.select; + s.color = cc.textSelect; + } else if (focusMatch) { + s.background = cc.backgroundOver; + s.color = cc.textOver; + } else if (isHover) { + s.background = cc.overoff; + s.color = cc.textOver; + } + // Deshabilitar DOM si no hay ítem real en filas de padding + s.opacity = isReal ? '1' : '0'; + } + + // =============== Ciclo de vida visual =============== + + rSize() { + // Recalcula leafMax y niveles cada vez que cambia tamaño/datos + this.leafMax = this.computeLeafMax(this.tree); + this.buildLevels(); + this.layoutLevels(); + } + + update() { + // Redibuja cuando cambian estados de hover/focus/value externamente + this.buildLevels(); + this.layoutLevels(); + } + + // =============== Interacción (hit-testing y selección) =============== + + // Convierte coords globales a locales del control (igual que Proto) + _toLocal(e) { + const mx = e.clientX - this.zone.x; + const my = e.clientY - this.zone.y; + return { x: mx, y: my }; + } + + // Busca qué ítem (L,i) está bajo el mouse; respeta zonas por nivel + _hitTest(mx, my) { + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + const z = lvl.zone; + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; + + if (lvl.type === 'map') { + for (let i = 0; i < lvl.items.length; i++) { + const itz = lvl.items[i].zone; + if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { + return { L, i, real: true }; + } + } + } else { + // hoja: puede contener filas de padding + const nRows = Math.max(lvl.items.length, this.leafMax); + for (let i = 0; i < nRows; i++) { + const isReal = i < lvl.items.length; + const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.hItem, w: z.w, h: this.hItem }; + if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { + return { L, i, real: isReal }; + } + } + } + } + return { L: -1, i: -1, real: false }; + } + + handleEvent(e) { + if (this.lock) return false; + + // Delega estados de hover / click + if (e.type === 'mousemove') { + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + this.hover = (ht.L !== -1 && ht.real) ? { level: ht.L, index: ht.i } : { level: -1, index: -1 }; + this.update(); // repintar con hover + return true; + } + + if (e.type === 'mousedown') { + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + if (ht.L !== -1 && ht.real) { + this._selectAt(ht.L, ht.i); + return true; + } + } + + if (e.type === 'mouseup') { + // nada por ahora + return true; + } + + // Soporte básico para teclado (opcional: Up/Down/Left/Right) + if (e.type === 'keydown') ; + + return false; + } + + // Regla de selección y autocompletado + _selectAt(L, i) { + const lvl = this.levels[L]; + const chosen = lvl.items[i]; + if (!chosen || !chosen.key) return; + + // 1) Recortar value hasta L e insertar la opción elegida + const base = this.value.slice(0, L); + base[L] = chosen.key; + + // 2) Autocompletar por primera clave descendiendo hasta una lista + const newPath = this.autoCompleteToLeaf(base); + + // 3) Notificar + this.value = newPath.slice(); // reflejar selección interna + this.update(); + this.changeCb(this.tabIndex, this.itemIndex, newPath); + } + + // API pública para sincronización externa (por si quieres settear desde afuera) + setValue(path) { + this.value = Array.isArray(path) ? path.slice() : []; + this.update(); + } + setTree(tree) { + this.tree = tree || {}; + this.update(); + } + setFocus({ focused, focusPath, focusLevel }) { + if (typeof focused === 'boolean') this.focused = focused; + if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); + if (typeof focusLevel === 'number') this.focusLevel = focusLevel; + this.update(); + } + } + + const add = function () { + + let a = arguments; + + let type, o, ref = false, n = null; + + if( typeof a[0] === 'string' ){ + + type = a[0]; + o = a[1] || {}; + + } else if ( typeof a[0] === 'object' ){ // like dat gui + + ref = true; + if( a[2] === undefined ) [].push.call(a, {}); + + type = a[2].type ? a[2].type : autoType( a[0][a[1]], a[2] ); + + o = a[2]; + o.name = a[1]; + if (o.hasOwnProperty("displayName")) o.name = o.displayName; + + if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } + else o.value = a[0][a[1]]; + + } + + let name = type.toLowerCase(); + + if( name === 'group' ){ + o.add = add; + //o.dx = 8 + } + + switch( name ){ + + case 'bool': case 'boolean': n = new Bool(o); break; + case 'button': n = new Button(o); break; + case 'circular': n = new Circular(o); break; + case 'color': n = new Color(o); break; + case 'fps': n = new Fps(o); break; + case 'graph': n = new Graph(o); break; + case 'group': n = new Group(o); break; + case 'joystick': n = new Joystick(o); break; + case 'knob': n = new Knob(o); break; + case 'list': n = new List(o); break; + case 'numeric': case 'number': n = new Numeric(o); break; + case 'slide': n = new Slide(o); break; + case 'textInput': case 'string': n = new TextInput(o); break; + case 'title': case 'text': n = new Title(o); break; + case 'select': n = new Select(o); break; + case 'bitmap': n = new Bitmap(o); break; + case 'selector': n = new Selector(o); break; + case 'empty': case 'space': n = new Empty(o); break; + case 'item': n = new Item(o); break; + case 'grid': n = new Grid(o); break; + case 'pad2d': case 'pad': n = new Pad2D(o); break; + case 'treelist': n = new TreeList(o); break; + + } + + + + if( n !== null ){ + + Roots.needResize = true; + + if( ref ) n.setReferency( a[0], a[1] ); + return n; + + } + + }; + + const autoType = function ( v, o ) { + + let type = 'slide'; + + if( typeof v === 'boolean' ) type = 'bool'; + else if( typeof v === 'string' ){ + + if( v.substring(0,1) === '#' ) type = 'color'; + else type = 'string'; + + } else if( typeof v === 'number' ){ + + if( o.ctype ) type = 'color'; + else type = 'slide'; + + } else if( typeof v === 'array' && v instanceof Array ){ + + if( typeof v[0] === 'number' ) type = 'number'; + else if( typeof v[0] === 'string' ) type = 'list'; + + } else if( typeof v === 'object' && v instanceof Object ){ + + if( v.x !== undefined ) type = 'number'; + else type = 'list'; + + } + + return type + + }; + + /** + * @author lth / https://github.com/lo-th + */ + + class Gui { + constructor(o = {}) { + this.isGui = true; + + this.name = "gui"; + + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; + + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); + + //this.cleanning = false + + // style + this.css = Tools.cloneCss(); + + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 + + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; + + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; + + this.callback = o.callback === undefined ? null : o.callback; + + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; + + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + + this.cn = ""; + + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; + + this.size.h = this.size.h < 11 ? 11 : this.size.h; + + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + + // virtual mouse + this.mouse = new V2().neg(); + + this.h = 0; + //this.prevY = -1; + this.sw = 0; + + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); + + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; + + this.autoResize = o.autoResize === undefined ? true : o.autoResize; + + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; + + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; + + this.isNewTarget = false; + + let cc = this.colors; + + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); + + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); + + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); + + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); + + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); + + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; + + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } + + if (this.parent !== null) this.parent.appendChild(this.content); + + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } + + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + + this.setWidth(); + + if (this.isCanvas) this.makeCanvas(); + + Roots.add(this); + } + + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseUp(x, y) { + /* + + clientX,clientY are no used when isCanvas==true + */ + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); + + Roots.needReZone = true; + } + + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } + + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } + + // ---------------------- + // CANVAS + // ---------------------- + + onDraw() {} + + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + + //console.log( this.canvas.width, this.canvas.height ) + } + + draw(force) { + if (this.canvas === null) return; + + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } + + ////// + + getDom() { + return this.content; + } + + noMouse() { + this.mouse.neg(); + } + + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); + + //console.log("setMouse "+uv.x+" "+uv.y) + } + + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } + + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } + + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } + + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } + + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } + + onChange(f) { + this.callback = f || null; + return this; + } + + // ---------------------- + // STYLES + // ---------------------- + + mode(n) { + let needChange = false; + let cc = this.colors; + + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } + + needChange = true; + } + + return needChange; + } + + // ---------------------- + // TARGET + // ---------------------- + + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + + this.proto = null; + this.current = -1; + + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + + Roots.cursor(); + return true; + } + + // ---------------------- + // ZONE TEST + // ---------------------- + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + this.isReset = false; + + let name = ""; + + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; + + return name; + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent(e) { + //if( this.cleanning ) return + + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; + + let change = false; + let protoChange = false; + + let name = this.testZone(e); + + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; + + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } + + if (!name) return; + + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); + + if (this.proto) protoChange = this.proto.handleEvent(e); + + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); + + if (!Roots.lock) { + this.getNext(e, change); + } + + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } + + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + + break; + } + + if (this.isDown) change = true; + if (protoChange) change = true; + + if (type === "keyup") change = true; + if (type === "keydown") change = true; + + if (change) this.draw(); + } + + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); + + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } + + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } + + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } + + // ---------------------- + // RESET + // ---------------------- + + reset(force) { + if (this.isReset) return; + + //this.resetItem(); + + this.mouse.neg(); + this.isDown = false; + + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); + + if (r || r2) this.draw(true); + + this.isReset = true; + + //Roots.lock = false; + } + + // ---------------------- + // ADD NODE + // ---------------------- + + add() { + //if(this.cleanning) this.cleanning = false + + let a = arguments; + let ontop = false; + + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; + + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } + + let u = add.apply(this, a); + + if (u === null) return; + + if (ontop) this.uis.unshift(u); + else this.uis.push(u); + + this.calc(); + + this.isEmpty = false; + + return u; + } + + // remove one node + + remove(n) { + if (n.dispose) n.dispose(); + } + + // call after uis clear + + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } + + // clear all gui + + empty() { + //this.cleanning = true + + //this.close(); + + let i = this.uis.length, + item; + + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } + + this.uis = []; + this.isEmpty = true; + this.calc(); + } + + clear() { + this.empty(); + } + + clear2() { + setTimeout(this.empty.bind(this), 0); + } + + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } + + // ---------------------- + // ITEMS SPECIAL + // ---------------------- + + resetItem() { + if (!this.isItemMode) return; + + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } + + setItem(name) { + if (!this.isItemMode) return; + + name = name || ""; + this.resetItem(); + + if (!name) { + this.update(0); + return; + } + + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } + + // ---------------------- + // SCROLL + // ---------------------- + + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; + + if (b) { + this.total = this.h; + + this.maxView = this.maxHeight; + + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; + + this.range = this.maxView - this.sh; + + this.oy = Tools.clamp(this.oy, 0, this.range); + + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } + + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } + + update(y) { + y = Tools.clamp(y, 0, this.range); + + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } + + // ---------------------- + // RESIZE FUNCTION + // ---------------------- + + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } + + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } + + setHeight() { + if (this.tmp) clearTimeout(this.tmp); + + this.zone.h = this.bh; + this.isScroll = false; + + if (this.isOpen) { + this.h = this.calcUis(); + + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; + + this.maxHeight = hhh - this.zone.y - this.bh; + + let diff = this.h - this.maxHeight; + + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + + this.upScroll(this.isScroll); + + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + + rezone() { + Roots.needReZone = true; + } + + setWidth(w) { + if (w) this.zone.w = w; + + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } + } + + exports.Files = Files; + exports.Gui = Gui; + exports.REVISION = REVISION; + exports.Tools = Tools; + exports.add = add; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gUHJvcGllZGFkZXMgcMO6YmxpY2FzIGVzcGVyYWRhcyAoQVBJKVxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSksIG8uZm9jdXNlZCAoYm9vbCksXHJcbiAgICAvLyBvLmZvY3VzUGF0aCAoYXJyYXkpLCBvLmZvY3VzTGV2ZWwgKG51bWJlciksXHJcbiAgICAvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcbiAgICBvLnNlbGVjdGFibGUgPSB0cnVlOyAgICAgICAgICAgLy8gbmF2ZWdhYmxlIHBvciB0ZWNsYWRvIHNpIGFjdGl2YXMgZmxlY2hhc1xyXG4gICAgby5uYW1lID0gby5uYW1lIHx8ICdUcmVlTGlzdCc7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICAvLyBEYXRvcyAmIGVzdGFkb1xyXG4gICAgdGhpcy50cmVlICAgICAgID0gby50cmVlIHx8IHt9O1xyXG4gICAgdGhpcy52YWx1ZSAgICAgID0gQXJyYXkuaXNBcnJheShvLnZhbHVlKSA/IG8udmFsdWUuc2xpY2UoKSA6IFtdO1xyXG4gICAgdGhpcy5mb2N1c2VkICAgID0gISFvLmZvY3VzZWQ7XHJcbiAgICB0aGlzLmZvY3VzUGF0aCAgPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09ICdudW1iZXInID8gby5mb2N1c0xldmVsIDogLTE7XHJcblxyXG4gICAgdGhpcy50YWJJbmRleCAgID0gby50YWJJbmRleCA/PyBudWxsO1xyXG4gICAgdGhpcy5pdGVtSW5kZXggID0gby5pdGVtSW5kZXggPz8gbnVsbDtcclxuXHJcbiAgICAvLyBDYWxsYmFjayBkZSBub3RpZmljYWNpw7NuXHJcbiAgICB0aGlzLmNoYW5nZUNiICAgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoLyp0YWJJZHgsIGl0ZW1JZHgsIG5ld1BhdGgqLykgPT4ge307XHJcblxyXG4gICAgLy8gTGF5b3V0IGludGVybm9cclxuICAgIHRoaXMubGV2ZWxzID0gW107ICAgLy8gW3t0eXBlOidtYXAnfCdsaXN0JywgaXRlbXM6W3trZXksbGFiZWwsem9uZX1dLCB6b25lOnt4LHksdyxofX0uLi5dXHJcbiAgICB0aGlzLmxlYWZNYXggPSAwOyAgIC8vIGFsdG8gcmVzZXJ2YWRvIHBhcmEgZWwgw7psdGltbyBuaXZlbCAobcOheGltbyB0YW1hw7FvIGRlIGhvamEpXHJcbiAgICB0aGlzLmxldmVsR2FwID0gMjsgIC8vIGdhcCB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmhJdGVtICAgID0gdGhpcy5oOyAgLy8gYWx0byBwb3Igw610ZW1cclxuXHJcbiAgICAvLyBIb3ZlciAvIGZvY28gZGUgbW91c2VcclxuICAgIHRoaXMuaG92ZXIgPSB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblxyXG4gICAgLy8gRE9NIHZpc3VhbCAoc2luIGxpc3RlbmVycyBkaXJlY3RvczsgbG9zIGV2ZW50b3MgbGxlZ2FuIHbDrWEgUm9vdHMtPmhhbmRsZUV2ZW50KVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpOyAvLyBjb250YWluZXIgaW50ZXJub1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIC8vIEluaWNpYWxpemEgbm9kb3MgdmlzdWFsZXMgZGUgZm9ybWEgcGVyZXpvc2EgZW4gclNpemUoKVxyXG4gICAgdGhpcy5pdGVtc0RvbSA9IFtdOyAvLyBtaXJyb3IgZGUgdGhpcy5sZXZlbHMgKG1hdHJpeiBkZSBub2RvcylcclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PSBIZWxwZXJzIGRlIGRhdG9zID09PT09PT09PT09PT09PVxyXG5cclxuICBzdGF0aWMgaXNNYXAobm9kZSkgIHsgcmV0dXJuIG5vZGUgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG5vZGUpOyB9XHJcbiAgc3RhdGljIGlzTGlzdChub2RlKSB7IHJldHVybiBBcnJheS5pc0FycmF5KG5vZGUpOyB9XHJcblxyXG4gIC8vIERldnVlbHZlIGVsIHN1Ym5vZG8gYWwgc2VndWlyIHBhdGggKHNlIGRldGllbmUgc2kgbm8gZXhpc3RlKVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gQWwgbGxlZ2FyIGEgbGlzdGEsIHlhIG5vIGhheSBtw6FzIGRlc2NlbmRlbmNpYSB2w6FsaWRhIHBhcmEgY2xhdmVzXHJcbiAgICAgICAgaWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTsgXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGEgZGVzY2VuZGllbmRvIHBvciBsYSBwcmltZXJhIGNsYXZlIGRlIGNhZGEgbWFwYSBoYXN0YSBhbGNhbnphciB1bmEgbGlzdGFcclxuICBhdXRvQ29tcGxldGVUb0xlYWYoYmFzZVBhdGgpIHtcclxuICAgIGxldCBub2RlSW5mbyA9IHRoaXMuZ2V0Tm9kZUF0UGF0aChiYXNlUGF0aCk7XHJcbiAgICBsZXQgbm9kZSA9IG5vZGVJbmZvLm5vZGU7XHJcbiAgICBjb25zdCBwYXRoID0gYmFzZVBhdGguc2xpY2UoKTtcclxuXHJcbiAgICB3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhazsgLy8gbWFwYSB2YWPDrW9cclxuICAgICAgY29uc3QgazAgPSBrZXlzWzBdO1xyXG4gICAgICBwYXRoLnB1c2goazApO1xyXG4gICAgICBub2RlID0gbm9kZVtrMF07XHJcbiAgICB9XHJcbiAgICAvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2Egc2VsZWNjacOzbiBmaW5hbCBkZSBlbGVtZW50byBob2phXHJcbiAgICByZXR1cm4gcGF0aDtcclxuICB9XHJcblxyXG4gIC8vIFJ1dGEgYWN0aXZhIHBhcmEgY29uc3RydWlyIG5pdmVsZXMgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaSBubyB2YWx1ZSlcclxuICBnZXRBY3RpdmVQYXRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCA/IHRoaXMuZm9jdXNQYXRoIDogdGhpcy52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIENhbGN1bGEgZWwgbcOheGltbyB0YW1hw7FvIGRlIGhvamEgZGVsIMOhcmJvbCAocGFyYSByZXNlcnZhciBhbHRvIGVzdGFibGUpXHJcbiAgY29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG4gICAgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkgcmV0dXJuIG5vZGUubGVuZ3RoO1xyXG4gICAgaWYgKCFUcmVlTGlzdC5pc01hcChub2RlKSkgcmV0dXJuIDA7XHJcbiAgICBsZXQgbSA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcclxuICAgICAgbSA9IE1hdGgubWF4KG0sIHRoaXMuY29tcHV0ZUxlYWZNYXgobm9kZVtrXSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG07XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PT09PT09PT09XHJcblxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gT3BjaW9uZXMgPSBjbGF2ZXMgZGVsIG1hcGEgKG5pdmVsIGludGVybWVkaW8pXHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICAgIGlmICgha2V5cy5sZW5ndGgpIGJyZWFrOyAvLyBkZXRlbmVyIGV4cGFuc2nDs24gc2kgdmFjw61vXHJcbiAgICAgICAgdGhpcy5sZXZlbHMucHVzaCh7IHR5cGU6ICdtYXAnLCBpdGVtczoga2V5cy5tYXAoayA9PiAoeyBrZXk6IGssIGxhYmVsOiBrLCB6b25lOiB7eDowLHk6MCx3OjAsaDowfSB9KSksIHpvbmU6IHt4OjAseTowLHc6MCxoOnRoaXMuaEl0ZW19IH0pO1xyXG5cclxuICAgICAgICAvLyBBdmFuemEgc2Vnw7puIGxhIHJ1dGEgYWN0aXZhIChzaSBleGlzdGUpLCBzaW5vIHNlIGRldGllbmVcclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyDDmmx0aW1vIG5pdmVsOiBsaXN0YS9ob2phICh2ZXJ0aWNhbClcclxuICAgICAgICBjb25zdCBpdGVtcyA9IG5vZGUubWFwKGxhYmVsID0+ICh7IGtleTogbGFiZWwsIGxhYmVsLCB6b25lOiB7eDowLHk6MCx3OjAsaDowfSB9KSk7XHJcbiAgICAgICAgdGhpcy5sZXZlbHMucHVzaCh7IHR5cGU6ICdsaXN0JywgaXRlbXMsIHpvbmU6IHt4OjAseTowLHc6MCxoOiBNYXRoLm1heChpdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCkgKiB0aGlzLmhJdGVtIH0gfSk7XHJcbiAgICAgICAgYnJlYWs7IC8vIGZpblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrOyAvLyBub2RvIGludsOhbGlkb1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT0gTGF5b3V0ICh6b25hcyBpbnRlcm5hcykgPT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIENhbGN1bGEgem9uYXMgaW50ZXJuYXMgZGUgY2FkYSDDrXRlbS9sZXZlbCB5IGNvbnN0cnV5ZS9hY3R1YWxpemEgZG9tXHJcbiAgbGF5b3V0TGV2ZWxzKCkge1xyXG4gICAgY29uc3QgcGFkWCA9IDg7XHJcbiAgICBjb25zdCB3ID0gdGhpcy56b25lLncgLSBwYWRYICogMjtcclxuICAgIGxldCB5ID0gMDtcclxuXHJcbiAgICAvLyBBc2VndXJhIGBpdGVtc0RvbWAgYW5pZGFkbyBwb3Igbml2ZWxcclxuICAgIHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkgdGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuICAgIC8vIExpbXBpYSBleHRyYSBET00gc2kgbml2ZWxlcyBkaXNtaW51eWVuXHJcbiAgICBmb3IgKGxldCBMID0gdGhpcy5sZXZlbHMubGVuZ3RoOyBMIDwgdGhpcy5pdGVtc0RvbS5sZW5ndGg7IEwrKykge1xyXG4gICAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuaXRlbXNEb21bTF0pIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuICAgIGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuICAgICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICAgIGlmIChsdmwudHlwZSA9PT0gJ21hcCcpIHtcclxuICAgICAgICBjb25zdCBuID0gTWF0aC5tYXgoMSwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgY2VsbFcgPSBNYXRoLmZsb29yKHcgLyBuKTtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogdGhpcy5oSXRlbSB9O1xyXG4gICAgICAgIGxldCB4ID0gcGFkWDtcclxuICAgICAgICAvLyBBc2VndXJhIGNvbnRlbmVkb3IgZG9tIGRlIG5pdmVsIHNpIHF1ZXLDqXMgdW5vIChvcGNpb25hbClcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5oSXRlbSB9O1xyXG5cclxuICAgICAgICAgIC8vIGNyZWEvYWN0dWFsaXphIG5vZG8gdmlzdWFsXHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbWFwJyk7XHJcblxyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgeSArPSB0aGlzLmhJdGVtICsgdGhpcy5sZXZlbEdhcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsaXN0YS9ob2phIHZlcnRpY2FsXHJcbiAgICAgICAgY29uc3QgbiA9IGx2bC5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpICogdGhpcy5oSXRlbTtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogaExpc3QgfTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpOyBpKyspIHtcclxuICAgICAgICAgIC8vIFB1ZWRlIGhhYmVyIFwiZXNwYWNpbyB2YWPDrW9cIiBzaSBuIDwgbGVhZk1heFxyXG4gICAgICAgICAgY29uc3QgaXNSZWFsID0gaSA8IG47XHJcbiAgICAgICAgICBjb25zdCBpdCA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXSA6IHsga2V5OiBudWxsLCBsYWJlbDogJycsIHpvbmU6IHt4OjAseTowLHc6MCxoOjB9IH07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4OiBwYWRYLCB5OiB5ICsgaSAqIHRoaXMuaEl0ZW0sIHcsIGg6IHRoaXMuaEl0ZW0gfTtcclxuXHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbGlzdCcsIGlzUmVhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHkgKz0gaExpc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBanVzdGEgYWx0byB2aXNpYmxlIGRlbCBjb250cm9sXHJcbiAgICBjb25zdCB0b3RhbEggPSB5O1xyXG4gICAgdGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjsgLy8gUHJvdG8gc2UgZW5jYXJnYSBkZWwgbWFyZ2VuXHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy56b25lLmggKyAncHgnO1xyXG4gICAgdGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArICdweCc7XHJcbiAgfVxyXG5cclxuICBlbnN1cmVJdGVtRG9tKEwsIGkpIHtcclxuICAgIGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcbiAgICB3aGlsZSAocm93Lmxlbmd0aCA8PSBpKSByb3cucHVzaChudWxsKTtcclxuICAgIGlmICghcm93W2ldKSB7XHJcbiAgICAgIC8vIENhZGEgw610ZW0gZXMgdW4gRElWIHBvc2ljaW9uYWRvIGFic29sdXRvIGRlbnRybyBkZSB0aGlzLmNbMl1cclxuICAgICAgY29uc3QgZGl2ID0gdGhpcy5kb20oJ2RpdicsIFRvb2xzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7Jyk7XHJcbiAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgICByb3dbaV0gPSBkaXY7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93W2ldO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29sb3JlYSB5IHBvc2ljaW9uYSBlbCBET00gZGVsIMOtdGVtIHNlZ8O6biBlc3RhZG9zIChzZWxlY2Npb25hZG8gLyBmb2NvKVxyXG4gIHBhaW50SXRlbURvbShkaXYsIEwsIGksIGl0LCBraW5kLCBpc1JlYWwgPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzID0gZGl2LnN0eWxlO1xyXG4gICAgY29uc3QgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAvLyBQb3NpY2nDs25cclxuICAgIHMubGVmdCA9IGl0LnpvbmUueCArICdweCc7XHJcbiAgICBzLnRvcCAgPSBpdC56b25lLnkgKyAncHgnO1xyXG4gICAgcy53aWR0aCAgPSBpdC56b25lLncgKyAncHgnO1xyXG4gICAgcy5oZWlnaHQgPSAoaXQuem9uZS5oIC0gMikgKyAncHgnOyAgLy8gLTIgcGFyYSBldml0YXIgb3ZlcmxhcCBkZSBib3JkZXNcclxuXHJcbiAgICAvLyBUZXh0b1xyXG4gICAgZGl2LnRleHRDb250ZW50ID0gaXNSZWFsID8gaXQubGFiZWwgOiAnJztcclxuXHJcbiAgICAvLyBFc3RhZG9zIHNlbcOhbnRpY29zXHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9ICh2YWx1ZVtMXSAhPT0gdW5kZWZpbmVkKSAmJiAodmFsdWVbTF0gPT09IGl0LmtleSkgJiYgaXNSZWFsO1xyXG5cclxuICAgIGNvbnN0IGluRm9jdXNMZXZlbCA9IHRoaXMuZm9jdXNlZCAmJiAodGhpcy5mb2N1c0xldmVsID09PSBMKTtcclxuICAgIGNvbnN0IGZvY3VzTWF0Y2ggICA9IGluRm9jdXNMZXZlbCAmJiAodGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleSkgJiYgaXNSZWFsO1xyXG5cclxuICAgIC8vIEhvdmVyIChtb3VzZSlcclxuICAgIGNvbnN0IGlzSG92ZXIgPSAodGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJiB0aGlzLmhvdmVyLmluZGV4ID09PSBpICYmIGlzUmVhbCk7XHJcblxyXG4gICAgLy8gRXN0aWxvcyBiYXNlXHJcbiAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgcy5jb2xvciAgICAgID0gY2MudGV4dDtcclxuICAgIHMuYm9yZGVyICAgICA9ICcxcHggc29saWQgJyArIGNjLmJvcmRlcjtcclxuXHJcbiAgICAvLyBNYXBhID0gaG9yaXpvbnRhbCwgTGlzdGEgPSB2ZXJ0aWNhbFxyXG4gICAgaWYgKGtpbmQgPT09ICdtYXAnKSBzLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgZWxzZSBzLnRleHRBbGlnbiA9ICdsZWZ0JztcclxuXHJcbiAgICAvLyBQcmlvcml6YWNpw7NuIHZpc3VhbDogc2VsZWNjaW9uYWRvID4gZm9jbyA+IGhvdmVyID4gYmFzZVxyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICB9IGVsc2UgaWYgKGZvY3VzTWF0Y2gpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH0gZWxzZSBpZiAoaXNIb3Zlcikge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICB9XHJcbiAgICAvLyBEZXNoYWJpbGl0YXIgRE9NIHNpIG5vIGhheSDDrXRlbSByZWFsIGVuIGZpbGFzIGRlIHBhZGRpbmdcclxuICAgIHMub3BhY2l0eSA9IGlzUmVhbCA/ICcxJyA6ICcwJztcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PSBDaWNsbyBkZSB2aWRhIHZpc3VhbCA9PT09PT09PT09PT09PT1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICAvLyBSZWNhbGN1bGEgbGVhZk1heCB5IG5pdmVsZXMgY2FkYSB2ZXogcXVlIGNhbWJpYSB0YW1hw7FvL2RhdG9zXHJcbiAgICB0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcbiAgICB0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcbiAgICB0aGlzLmxheW91dExldmVscygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgLy8gUmVkaWJ1amEgY3VhbmRvIGNhbWJpYW4gZXN0YWRvcyBkZSBob3Zlci9mb2N1cy92YWx1ZSBleHRlcm5hbWVudGVcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT0gSW50ZXJhY2Npw7NuIChoaXQtdGVzdGluZyB5IHNlbGVjY2nDs24pID09PT09PT09PT09PT09PVxyXG5cclxuICAvLyBDb252aWVydGUgY29vcmRzIGdsb2JhbGVzIGEgbG9jYWxlcyBkZWwgY29udHJvbCAoaWd1YWwgcXVlIFByb3RvKVxyXG4gIF90b0xvY2FsKGUpIHtcclxuICAgIGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICBjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG4gICAgcmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcbiAgfVxyXG5cclxuICAvLyBCdXNjYSBxdcOpIMOtdGVtIChMLGkpIGVzdMOhIGJham8gZWwgbW91c2U7IHJlc3BldGEgem9uYXMgcG9yIG5pdmVsXHJcbiAgX2hpdFRlc3QobXgsIG15KSB7XHJcbiAgICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgICBjb25zdCB6ID0gbHZsLnpvbmU7XHJcbiAgICAgIGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaCkgY29udGludWU7XHJcblxyXG4gICAgICBpZiAobHZsLnR5cGUgPT09ICdtYXAnKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGx2bC5pdGVtc1tpXS56b25lO1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiB0cnVlIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGhvamE6IHB1ZWRlIGNvbnRlbmVyIGZpbGFzIGRlIHBhZGRpbmdcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmhJdGVtLCB3OiB6LncsIGg6IHRoaXMuaEl0ZW0gfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgLy8gRGVsZWdhIGVzdGFkb3MgZGUgaG92ZXIgLyBjbGlja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpOyAvLyByZXBpbnRhciBjb24gaG92ZXJcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlZG93bicpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIGlmIChodC5MICE9PSAtMSAmJiBodC5yZWFsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0QXQoaHQuTCwgaHQuaSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2V1cCcpIHtcclxuICAgICAgLy8gbmFkYSBwb3IgYWhvcmFcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU29wb3J0ZSBiw6FzaWNvIHBhcmEgdGVjbGFkbyAob3BjaW9uYWw6IFVwL0Rvd24vTGVmdC9SaWdodClcclxuICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJykge1xyXG4gICAgICAvLyBQdWVkZXMgaW50ZWdyYXIgbmF2ZWdhY2nDs24gZGUgZmxlY2hhcyBhcXXDrSBzaSBsbyBkZXNlYXMsXHJcbiAgICAgIC8vIHJldXRpbGl6YW5kbyB0aGlzLmlzU2VsZWN0YWJsZSAoeWEgbWFyY2FkYSBlbiBjdG9yKS5cclxuICAgICAgLy8gUmVjb21lbmRhY2nDs246IG1vdmVyIGZvY28gZW50cmUgbml2ZWxlcy/DrXRlbXMgY29uIFJvb3RzK0d1aS4gOmNvbnRlbnRSZWZlcmVuY2Vbb2FpY2l0ZToxXXtpbmRleD0xfSA6Y29udGVudFJlZmVyZW5jZVtvYWljaXRlOjJde2luZGV4PTJ9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gUmVnbGEgZGUgc2VsZWNjacOzbiB5IGF1dG9jb21wbGV0YWRvXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICAvLyAxKSBSZWNvcnRhciB2YWx1ZSBoYXN0YSBMIGUgaW5zZXJ0YXIgbGEgb3BjacOzbiBlbGVnaWRhXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIC8vIDIpIEF1dG9jb21wbGV0YXIgcG9yIHByaW1lcmEgY2xhdmUgZGVzY2VuZGllbmRvIGhhc3RhIHVuYSBsaXN0YVxyXG4gICAgY29uc3QgbmV3UGF0aCA9IHRoaXMuYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2UpO1xyXG5cclxuICAgIC8vIDMpIE5vdGlmaWNhclxyXG4gICAgdGhpcy52YWx1ZSA9IG5ld1BhdGguc2xpY2UoKTsgLy8gcmVmbGVqYXIgc2VsZWNjacOzbiBpbnRlcm5hXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcbiAgfVxyXG5cclxuICAvLyBBUEkgcMO6YmxpY2EgcGFyYSBzaW5jcm9uaXphY2nDs24gZXh0ZXJuYSAocG9yIHNpIHF1aWVyZXMgc2V0dGVhciBkZXNkZSBhZnVlcmEpXHJcbiAgc2V0VmFsdWUocGF0aCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG4gIHNldFRyZWUodHJlZSkge1xyXG4gICAgdGhpcy50cmVlID0gdHJlZSB8fCB7fTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0VBQUE7RUFDQTtFQUNBO0FBQ0E7QUFDWSxRQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLE1BQU0sQ0FBQyxHQUFHO0VBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0VBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0VBQ0EsRUFBRSxFQUFFLEVBQUUsSUFB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O0VBQzVCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7RUFDeEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRTtFQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztFQUN0RCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsRUFBRSxVQUFVLElBQUksRUFBRTtFQUM3QixJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7RUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7RUFDeEMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7RUFDbkMsSUFBSSxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0VBQ3JDLEdBQUc7QUFDSDtFQUNBLEVBQUUsVUFBVSxFQUFFLFlBQVk7RUFDMUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLE9BQU87RUFDbEMsSUFBSSxJQUFJLENB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QUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7RUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztFQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0VBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7RUFDakUsWUFBWSxDQUFDLElBQUks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QUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7RUFDcEosUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDcEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNySDtFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUs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QUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pIO0VBQ0E7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7RUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtFQUNBO0FBQ0E7RUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtFQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7RUFDQSxTQUFTLE1BQU07RUFDZjtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMs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Q0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0VBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtFQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9B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LENBQUMsTUFBTTtFQUM3QixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtFQUM1QixVQUFVLEtBQUssQ0FBQyxNQUFNO0VBQ3RCLEtBQUssQ0FBQztBQUNOO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzNDO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7RUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7RUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0VBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztFQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDckMsSUFBSSxJ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QUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDekMsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksR0FBRztFQUNULElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDckM7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUM1RDtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtFQUN6QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0VBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztFQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0VBQ2hDLEtBQUssTUFBTTtFQUNY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Q0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RSxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtFQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7RUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hELEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztFQUNB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LElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBRztFQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0VBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtFQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFB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QUMsR0FBRyxHQUFHLEdBQUU7RUFDckIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUU7QUFDdEI7RUFDQSxRQUFRLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2xDO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztFQUNBLFlBQVksR0FBRyxHQUFHLE1BQUs7RUFDdkIsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxLQUFJO0FBQy9FO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFFO0VBQ2xNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTTtFQUN0RSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUk7RUFDbkUsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7RUFDQSxTQUFTO0FBQ1Q7QUFDQTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDdEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0VBQ3JELFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFFO0VBQ3BFLFNBQVM7RUFDVDtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssR0FBRztBQUNaO0VBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUU7RUFDeEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFL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QyxDQUFDLENBQUMsS0FBSyxFQUFDO0FBQ3ZDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7RUFDckIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0VBQ2xEO0VBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0VBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztFQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNwUE8sTUFBTSxRQUFRLFNB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QUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztFQUN2QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VB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QyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDbkM7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3RCO0VBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQzdDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0M7QUFDQTtBQUNBO0VBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7RUFDbEMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUM7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQzVCLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQzNCLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUN6QjtFQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFB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QUksQ0FBQyxNQUFNLEVBQUU7QUFDdkI7RUFDQSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtFQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7RUFDOUIsUUFBUTtBQUNSO0VBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7RUFDQSxTQUFTLE1BQU07QUFDZjtFQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7RUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0VBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDckM7RUFDQSxTQUFTLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUMvRCxTQUFTLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQ2hELFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRTtFQUM3QixTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDbEMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEMsU0FBUyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztFQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHO0VBQ3hCLE9BQU8sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztFQUN2QyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDeEMsZUFBZSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztFQUNuRDtFQUNBLE9BQU8sR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7RUFDQSxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDeEQsT0FBTyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQy9DLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3ZDLE9BQU87QUFDUDtFQUNBLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNwRDtFQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzVDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0UsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2pDO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtFQUNBLFNBQVM7RUFDVCxLQUFLO0VBQ0wsSUFBSTtFQUNKLEdBQUc7QUFDSDtFQUNBLEVBQUU7QUFDRjtFQUNBO0FBQ0E7RUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtFQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7RUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0VBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztFQUN0QztFQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7RUFDdEM7RUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7RUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtFQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQ3hCO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0VBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7RUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0VBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0M7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNmO0VBQ0EsRUFBRSxJQUFJLENBQUMsWUFBWSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVELGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsYUFBYSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM1QjtFQUNBLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0VBQzdCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDcEI7RUFDQSxLQUFLLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDdEMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUMxQztFQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzVCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFNO0VBQzFCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDOUM7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztFQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3ZCLE1BQU07RUFDTixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDaEI7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3RDLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM5QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDekIsS0FBSyxPQUFPLElBQUksQ0FBQztBQUNqQjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsV0FBVyxDQUFDLEdBQUc7QUFDaEI7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0VBQ2pCLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBSztBQUNmO0VBQ0EsS0FBYyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPO0VBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ25DLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0EsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0VBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7RUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBO0VBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVEO0VBQ0E7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7RUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDcEM7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7RUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztFQUM1QyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDckI7RUFDQSxFQUFFO0FBQ0Y7QUFDQTtFQUNBOztFQ3BhTyxNQUFNLEdBQUcsU0FBUyxLQUFLLENBQUM7QUFDL0I7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQztFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDbkM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7RUFDL0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztFQUMxQztBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ3hDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzlDLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0RDtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN4QztFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7RUFDekIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztFQUN6QixRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QjtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFFO0VBQ3RDLFlBQVksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUM5QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN4QixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3pCLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDekIsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QjtFQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN4RjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzVCO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3ZDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3JDO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBSztBQUN0QztFQUNBLFNBQVM7QUFDVDtBQUNBO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNoQztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN6QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztFQUMzQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLCtCQUErQixFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsOEVBQThFLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7QUFDaE07RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsUUFBUSxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2pGO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ2xFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0VBQ2xELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0VBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDL0Q7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0VBQzdLO0FBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtEQUFrRCxFQUFFLENBQUM7QUFDMUo7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsMkVBQTJFLENBQUMsQ0FBQztBQUN0SjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0VBQ0E7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7RUFDOUI7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDdEUsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7RUFDQSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUM7RUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztFQUMxQixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFlBQVksT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDO0VBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ3ZEO0VB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QUM7RUFDM0MsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztFQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNoQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtFQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7RUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7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Q0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQztFQUNBLEtBQUs7RUFDTDtFQUNBOztFQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0VBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztFQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7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LENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztFQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtFQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0VBQzFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSTtFQUM5QyxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0VBQ3JDLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDM0MsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMs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QyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RCO0VBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0VBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztFQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0VBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtFQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtFQUNBLE1BQU07QUFDTjtFQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFF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SSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsNENBQTRDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQztFQUM1SCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDNUs7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUk7RUFDMUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHNCQUFzQixFQUFDO0FBQzFJO0VBQ0EsUUFBZ0IsSUFBSSxDQUFDLEVBQUU7RUFDdkIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFPO0FBQ2hDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRTtBQUMxQjtFQUNBLFFBQVEsSUFBSSxD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QUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtBQUN2QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDN0M7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBOztFQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztFQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7RUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87RUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7RUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0VBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDbkksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2hFO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ25ELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzVFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDN0Y7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQ3BCO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVB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Q0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0VBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0VBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxH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QUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzNGLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMs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SUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0VBQ3pEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FB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R0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztFQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7RUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7RUFDOUI7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3JEO0VBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN4RCxhQUFhO0VBQ2I7RUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7RUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0VBQ3hCO0VBQ0EsU0FBUztFQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDekQsUUFBUSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDNUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDMUM7QUFDQTtFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixZQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDNUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLEtBQUssQ0FBQztFQUNyRCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3JELFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDMUIsU0FBUztBQUNUO0VBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHO0FBQzNDO0VBQ0EsWUFBWSxDQUFDLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUNoRCxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDaEQsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDOUQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztFQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNyRjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtFQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0VBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7RUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN6RDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7RUFDckM7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0VBQ0E7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtFQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0VBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07RUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUs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QUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7RUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7RUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztFQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BD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LENBQUMsQ0FBQztFQUNwRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN4RCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN4RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FB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LENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BEO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzFCLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQztFQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0VBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztFQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7RUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7RUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDaEMsT0FBTztBQUNQO0VBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7RUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNy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QUFFO0VBQzNCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7RUFDOUI7RUFDQTtFQUNBLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3BCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtFQUNBO0VBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtFQUNBO0VBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0VBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7RUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0VBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FB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QUMsTUFBTSxDQUFDO0FBQ3pCO0VBQ0EsSUFBSSxRQUFRLElBQUk7RUFDaEIsTUFBTSxLQUFLLENBQUM7RUFDWjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDeEQsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDNUQsUUFBUSxNQUFNO0VBQ2QsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtFQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtFQUNBLElBQUksSUFBSSxPQUFPO0VBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQzNDO0FBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtFQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsS0FBSyxHQUFHO0VBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3BDO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDbEIsR0FBRztFQUNIOztFQzdTTyxNQUFNLFNBQVMsU0FBUyxLQUFLLENBQUM7QUFDckM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FB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LEVBQUUsQ0FBQztFQUN2QyxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87QUFDbEM7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDbEQsYUFBYSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0I7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxJQUFJO0FBQ2Y7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0M7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksTUFBTSxDQUFDLEVB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SyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDaEQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7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QWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUU7RUFDNUwsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztFQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUN2TDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztFQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7RUFDOUQsUUFBUSxPQUFPLEdBQUc7QUFDbEI7RUFDQSxLQUFLO0FBQ0w7RUFD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QUFNLENBQUM7RUFDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksQ0FB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R0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RDO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7RUFDakQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUU7RUFDbEQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN4RDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDckY7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFD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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVELFNBQVM7QUFDVDtFQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEMsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ3ZCLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0VBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxL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QUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUM3RCxhQUFhO0FBQ2I7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsRDtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0VBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztFQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztFQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM5RjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztFQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztFQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtFQUNBLEtBQUs7RUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0VBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztFQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0VBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hDLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7RUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtFQUN6RTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7RUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7RUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0VBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7RUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENB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SSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJ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QUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0VBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0VBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxrQ0FBa0MsRUFBRSxDQUFDO0FBQzNHO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0VBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFB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LFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDcEUsTUFBTSxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoRyxLQUFLO0VBQ0wsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM5QztFQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQ2pELE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7RUFDOUIsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQ2hELFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDeEMsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDckI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUNuRCxVQUFVLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEQ7RUFDQTtFQUNBLFVBQVUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDL0MsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRDtFQUNBLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQztFQUNyQixTQUFTO0VBQ1QsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQ3hDLE9BQU8sTUFBTTtFQUNiO0VBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztFQUNuQyxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzdELFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDL0M7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDNUQ7RUFDQSxVQUFVLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsVUFBVSxNQUFNLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMvRixVQUFVLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekU7RUFDQSxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQzNELFNBQVM7RUFDVCxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUM7RUFDbkIsT0FBTztFQUNQLEtBQUs7QUFDTDtFQUNBO0VBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDckIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN2QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMxQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDckMsR0FBRztBQUNIO0VBQ0EsRUFB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RUFDQTtFQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNkLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QyxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDNUIsR0FBRztBQUNIO0VBQ0E7RUFDQSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0VBQ25CLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQ2pELE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqQyxNQUFNLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7RUFDekIsTUFBTSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTO0FBQzdFO0VBQ0EsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0VBQzlCLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQ25ELFVBQVUsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDeEMsVUFBVSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRTtFQUN4RixZQUFZLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUN4QyxXQUFXO0VBQ1gsU0FBUztFQUNULE9BQU8sTUFBTTtFQUNiO0VBQ0EsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztFQUMvRCxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDeEMsVUFBVSxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7RUFDOUMsVUFBVSxNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzlHLFVBQVUsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FB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QUMsQ0FBQyxDQUFDLE1BQU07RUFDOUMsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ2xELFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNsRCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDeEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ2hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNoRCxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNyRSxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDbEQsWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDekUsWUFBWSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDL0QsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ3BELFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxD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Q0FBQztBQUNqRTtFQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztFQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7QUFDNUM7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDcEU7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztFQUMzQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNmO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQjtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztFQUNqQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztFQUM5RCxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRDtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUN2RTtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ3RDLElBQUksSUFBSSxDQUFDLE1BQU07RUFDZixNQUFNLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsYUFBYSxDQUFDO0FBQ3ZFO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3ZELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDbkIsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQjtFQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDN0I7RUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDekI7RUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUc7RUFDNUIsTUFBTSxLQUFLO0VBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7RUFDcEIsUUFBUSwrQ0FBK0M7RUFDdkQsUUFBUSxFQUFFLENBQUMsT0FBTztFQUNsQixRQUFRLElBQUk7RUFDWixRQUFRLElBQUksQ0FBQyxNQUFNO0VBQ25CLEtBQUssQ0FBQztBQUNOO0VBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxHQUFHO0VBQ2pDLE1BQU0sS0FBSztFQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO0VBQ3BCLFFBQVEsMERBQTBEO0VBQ2xFLEtBQUssQ0FBQztFQUNOO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDaEQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDeEIsSUFBSSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLG9DQUFvQyxHQUFHLEVBQUUsQ0FBQztFQUM1RSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUc7RUFDMUIsTUFBTSxLQUFLO0VBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsc0JBQXNCO0VBQ3hELEtBQUssQ0FBQztFQUNOLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUc7RUFDN0IsTUFBTSxLQUFLO0VBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7RUFDcEIsUUFBUSx3QkFBd0I7RUFDaEMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDekIsUUFBUSw0Q0FBNEM7RUFDcEQsUUFBUSxFQUFFLENBQUMsVUFBVTtFQUNyQixRQUFRLEdBQUc7RUFDWCxLQUFLLENBQUM7RUFDTixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM1QztFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRztFQUMzQixNQUFNLEtBQUs7RUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztFQUNwQixRQUFRLGFBQWE7RUFDckIsUUFBUSxFQUFFLENBQUMsTUFBTTtFQUNqQixRQUFRLDRCQUE0QjtFQUNwQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN6QixRQUFRLGtCQUFrQjtFQUMxQixLQUFLLENBQUM7RUFDTixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEQ7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7RUFDdEIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHO0VBQzNCLE1BQU0sS0FBSztFQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0VBQ2xCLFFBQVEscUVBQXFFO0VBQzdFLFFBQVEsQ0FBQztFQUNULFFBQVEsZ0NBQWdDO0VBQ3hDLFFBQVEsQ0FBQztFQUNULFFBQVEscUNBQXFDO0VBQzdDLFFBQVEsSUFBSSxDQUFDLEVBQUU7RUFDZixRQUFRLGtCQUFrQjtFQUMxQixTQUFTLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3JCLFFBQVEsWUFBWTtFQUNwQixRQUFRLEVBQUUsQ0FBQyxJQUFJO0VBQ2YsUUFBUSxHQUFHO0VBQ1gsS0FBSyxDQUFDO0VBQ04sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDMUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTTtFQUN6QyxRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0VBQzFCLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0FBQ2pEO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztFQUMzRCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2xFO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtFQUNoRCxNQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztFQUNsQyxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BFO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDeEU7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO0VBQzVCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztFQUNoRCxLQUFLLE1BQU07RUFDWCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7RUFDdEMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQ3hDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7RUFDdkIsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVO0VBQ25CLE1BQU0sQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0VBQ25FLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6RTtFQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3pDO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3BCLEdBQUc7QUFDSDtFQUNBLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN6QixJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7RUFDdEIsTUFBTSxJQUFJLEVBQUUsYUFBYTtFQUN6QixNQUFNLE9BQU8sRUFBRSxDQUFDO0VBQ2hCLE1BQU0sT0FBTyxFQUFFLENBQUM7RUFDaEIsTUFBTSxLQUFLLEVBQUUsQ0FBQztFQUNkLE1BQU0sR0FBRyxFQUFFLElBQUk7RUFDZixNQUFNLE9BQU8sRUFBRSxHQUFHO0VBQ2xCLEtBQUssQ0FBQyxDQUFDO0VBQ1AsR0FBRztBQUNIO0VBQ0EsRUFBRSxnQkFBZ0IsR0FBRztFQUNyQixJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7RUFDdEIsTUFBTSxJQUFJLEVBQUUsYUFBYTtFQUN6QixNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7RUFDakIsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0VBQ2pCLE1BQU0sS0FBSyxFQUFFLENBQUM7RUFDZCxNQUFNLEdBQUcsRUFBRSxJQUFJO0VBQ2YsTUFBTSxPQUFPLEVBQUUsR0FBRztFQUNsQixLQUFLLENBQUMsQ0FBQztFQUNQLEdBQUc7QUFDSDtFQUNBLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDdkI7QUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7RUFDdEIsTUFBTSxJQUFJLEVBQUUsV0FBVztFQUN2QixNQUFNLE9BQU8sRUFBRSxDQUFDO0VBQ2hCLE1BQU0sT0FBTyxFQUFFLENBQUM7RUFDaEIsTUFBTSxLQUFLLEVBQUUsQ0FBQztFQUNkLE1BQU0sR0FBRyxFQUFFLElBQUk7RUFDZixNQUFNLE9BQU8sRUFBRSxHQUFHO0VBQ2xCLEtBQUssQ0FBQyxDQUFDO0VBQ1AsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNmLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDdEMsSUFBSSxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7RUFDOUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDaEI7RUFDQSxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0VBQzVCLEdBQUc7QUFDSDtFQUNBLEVBQUUsYUFBYSxHQUFHO0VBQ2xCLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtFQUMzQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVU7RUFDeEMsUUFBUSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7RUFDbkQsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVO0VBQ25DLFFBQVEsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO0VBQ25ELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztFQUM3RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7RUFDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7RUFDNUMsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQ2I7RUFDQSxFQUFFLFVBQVUsR0FBRztFQUNmLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsZUFBZTtFQUMxQyxNQUFNLDhCQUE4QjtFQUNwQyxNQUFNLFFBQVE7RUFDZCxLQUFLLENBQUM7RUFDTixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0VBQ0E7RUFDQSxHQUFHO0FBQ0g7RUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUU7RUFDZCxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsT0FBTztBQUNyQztFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDeEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDOUQsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0VBQ3RDLEdBQUc7QUFDSDtFQUNBO0FBQ0E7RUFDQSxFQUFFLE1BQU0sR0FBRztFQUNYLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3JCLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFO0VBQzVCLElBQUksSUFBSSxJQUFJO0VBQ1osTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7RUFDcEIsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDNUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7RUFDbEUsT0FBTyxDQUFDO0VBQ1I7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztFQUNwQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUM1QyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztFQUM3QyxPQUFPLENBQUM7RUFDUjtBQUNBO0VBQ0E7RUFDQSxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUU7RUFDZjtFQUNBLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ3BCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3ZDLEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRTtFQUNmLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7RUFDckIsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEQsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtFQUNyQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7RUFDN0MsR0FBRztBQUNIO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0VBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLFFBQVEsR0FBRyxTQUFTLENBQUM7RUFDN0QsR0FBRztBQUNIO0VBQ0EsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRTtFQUNyQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsU0FBUyxHQUFHLFFBQVEsQ0FBQztFQUM3RCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDZCxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztFQUM5QixJQUFJLE9BQU8sSUFBSSxDQUFDO0VBQ2hCLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0VBQ1YsSUFBSSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7RUFDM0IsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pCO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFO0VBQ3ZCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEI7RUFDQSxNQUFNLFFBQVEsQ0FBQztFQUNmLFFBQVEsS0FBSyxLQUFLO0VBQ2xCLFVBQVUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3pCLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7RUFDbkQsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztFQUN2RCxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzVDLFVBQVUsTUFBTTtBQUNoQjtFQUNBO0VBQ0EsUUFBUSxLQUFLLFlBQVk7RUFDekIsVUFBVSxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQ3BDLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7RUFDbkQsVUFBVSxNQUFNO0VBQ2hCLFFBQVEsS0FBSyxZQUFZO0VBQ3pCLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7RUFDbkQsVUFBVSxNQUFNO0FBQ2hCO0VBQ0E7RUFDQSxRQUFRLEtBQUssWUFBWTtFQUN6QixVQUFVLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7RUFDbEMsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQztFQUMzRCxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ2hELFVBQVUsTUFBTTtFQUNoQjtFQUNBLE9BQU87QUFDUDtFQUNBLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQztFQUN4QixLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sVUFBVSxDQUFDO0VBQ3RCLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxXQUFXLEdBQUc7RUFDaEIsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUM7RUFDMUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQ3RCO0VBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ3pCLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUN6QixLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QjtFQUNBO0FBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNuQixJQUFJLE9BQU8sSUFBSSxDQUFDO0VBQ2hCLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ2QsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ3ZCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDNUM7RUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ3pCO0VBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbEI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEU7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLFFBQVEsQ0FBQztFQUMxRSxTQUFTLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQy9DO0VBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUNqQjtBQUNBO0VBQ0E7RUFDQTtFQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN0QjtFQUNBLElBQUksSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQ3ZCLElBQUksSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUMvRCxJQUFJLElBQUksSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDakU7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0VBQ3pDLE1BQU0sS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0VBQ3pCLE1BQU0sSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7RUFDL0IsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU87QUFDdEI7RUFDQSxJQUFJLFFBQVEsSUFBSTtFQUNoQixNQUFNLEtBQUssU0FBUztFQUNwQixRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN2RTtFQUNBLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUU7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEU7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUM1RCxRQUFRLElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUTtFQUM3RCxVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtFQUN6QixVQUFVLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQ2xDLFNBQVM7QUFDVDtFQUNBLFFBQVEsTUFBTTtFQUNkLE1BQU0sS0FBSyxRQUFRO0VBQ25CLFFBQVEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0VBQ25FLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFO0VBQ2xDLFVBQVUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDbkQsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTTtFQUMvQyxjQUFjLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0VBQ2hDLGNBQWMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqQztFQUNBLFVBQVUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3RCLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUMzQixVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDeEIsU0FBUztBQUNUO0VBQ0EsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLFFBQVE7RUFDbkIsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDM0IsUUFBUSxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7RUFDbkUsUUFBUSxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7RUFDbkUsUUFBUSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkQsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDOUU7RUFDQSxRQUFRLE1BQU07RUFDZCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ25DLElBQUksSUFBSSxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQztFQUNBLElBQUksSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDeEMsSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQztFQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzVCLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7RUFDckIsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7RUFDL0IsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDekIsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUUxQixNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0VBQzlCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUU7RUFDckIsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0VBQzFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUMxQixLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0EsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ2IsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDekIsSUFBSSxPQUFPLElBQUksQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRTtFQUNmLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU87QUFDN0I7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3JCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUM3QixJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakM7RUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3hCO0VBQ0E7RUFDQSxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsR0FBRyxHQUFHO0VBQ1I7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0VBQ3RCLElBQUksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0VBQ0EsSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtFQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkI7RUFDQSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0VBQzlDLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtFQUN6QyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQzFFLFdBQVc7RUFDWCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3pCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDekI7RUFDQSxRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0VBQ2hELE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsT0FBTztBQUMzQjtFQUNBLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkMsU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUN6QjtFQUNBLElBQUksT0FBTyxDQUFDLENBQUM7RUFDYixHQUFHO0FBQ0g7RUFDQTtBQUNBO0VBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0VBQ1osSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQy9CLEdBQUc7QUFDSDtFQUNBO0FBQ0E7RUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDZCxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2pDLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUU7RUFDbkI7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEQsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDN0IsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDbEIsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBO0FBQ0E7RUFDQSxFQUFFLEtBQUssR0FBRztFQUNWO0FBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU07RUFDM0IsTUFBTSxJQUFJLENBQUM7QUFDWDtFQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNoQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQzVCLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ3JCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQSxFQUFFLEtBQUssR0FBRztFQUNWLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ2pCLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxHQUFHO0VBQ1gsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDekMsR0FBRztBQUNIO0VBQ0EsRUFBRSxPQUFPLEdBQUc7RUFDWixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNqQixJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0VBQ3BFLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN2QixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsU0FBUyxHQUFHO0VBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPO0FBQ2pDO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztFQUM1QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztFQUN2QyxHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUU7RUFDaEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPO0FBQ2pDO0VBQ0EsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNyQjtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtFQUNmLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixNQUFNLE9BQU87RUFDYixLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0VBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNoQixNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO0VBQ3RDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDbkMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRO0VBQ3pCLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUN0RSxPQUFPO0VBQ1AsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ2QsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEMsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUN2RDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUU7RUFDWCxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxQjtFQUNBLE1BQU0sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3BDO0VBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUM3QyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFDO0VBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUMxQztFQUNBLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRDtFQUNBLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQ3ZELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ2hELEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN6QixHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUU7RUFDWixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUM1QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzlDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2pELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDaEIsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLE9BQU8sR0FBRztFQUNaLElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNELEdBQUc7QUFDSDtFQUNBLEVBQUUsSUFBSSxHQUFHO0VBQ1QsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDekQsR0FBRztBQUNIO0VBQ0EsRUFBRSxTQUFTLEdBQUc7RUFDZCxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtFQUNyQixNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlCO0VBQ0EsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVztFQUNoQyxVQUFVLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3hDLFVBQVUsTUFBTSxDQUFDLFdBQVcsQ0FBQztBQUM3QjtFQUNBLE1BQU0sSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNuRDtFQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3pDO0VBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7RUFDcEIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztFQUM3QixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUMvQyxPQUFPLE1BQU07RUFDYixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUN2QyxPQUFPO0VBQ1AsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqQztFQUNBLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ2xFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNuRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6RDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVO0VBQzNDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0VBQzFELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdkMsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLEdBQUc7RUFDWCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0VBQzVCLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNkLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2xELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUTtFQUNyQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzVFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDN0MsR0FBRztBQUNIO0VBQ0EsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFO0VBQ2xCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7RUFDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ2hCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzFCLEtBQUs7RUFDTCxHQUFHO0VBQ0g7Ozs7Ozs7Ozs7Ozs7OyJ9 diff --git a/build/uil.module.js b/build/uil.module.js index c2d2ad8..b52d0b0 100644 --- a/build/uil.module.js +++ b/build/uil.module.js @@ -1,6 +1,9440 @@ -/** - * @license - * Copyright 2010-2021 Uil.js Authors - * SPDX-License-Identifier: MIT - */ -const t="4.3.0",s={ui:[],dom:null,ID:null,lock:!1,wlock:!1,current:-1,needReZone:!0,needResize:!1,forceZone:!1,isEventsInit:!1,isLeave:!1,addDOMEventListeners:!0,downTime:0,prevTime:0,prevDefault:["contextmenu"],pointerEvent:["pointerdown","pointermove","pointerup"],eventOut:["pointercancel","pointerout","pointerleave"],xmlserializer:null,tmpTime:null,tmpImage:null,oldCursor:"auto",input:null,parent:null,firstImput:!0,hiddenImput:null,hiddenSizer:null,hasFocus:!1,startInput:!1,inputRange:[0,0],cursorId:0,str:"",pos:0,startX:-1,moveX:-1,debugInput:!1,isLoop:!1,listens:[],e:{type:null,clientX:0,clientY:0,keyCode:NaN,key:null,delta:0},isMobile:!1,now:null,needsUpdate:!1,getTime:function(){return self.performance&&self.performance.now?self.performance.now.bind(performance):Date.now},add:function(t){s.ui.push(t),s.getZone(t),s.isEventsInit||s.initEvents()},testMobile:function(){let t=navigator.userAgent;return!!(t.match(/Android/i)||t.match(/webOS/i)||t.match(/iPhone/i)||t.match(/iPad/i)||t.match(/iPod/i)||t.match(/BlackBerry/i)||t.match(/Windows Phone/i))},remove:function(t){let i=s.ui.indexOf(t);-1!==i&&(s.removeListen(t),s.ui.splice(i,1)),0===s.ui.length&&s.removeEvents()},initEvents:function(){if(s.isEventsInit)return;let t=document.body;s.isMobile=s.testMobile(),s.now=s.getTime(),s.isMobile?t.style.touchAction="none":t.addEventListener("wheel",s,{passive:!1}),console.log("R.addDOMEventListeners "+s.addDOMEventListeners),s.addDOMEventListeners&&(t.addEventListener("pointercancel",s),t.addEventListener("pointerleave",s),t.addEventListener("pointermove",s),t.addEventListener("pointerdown",s),t.addEventListener("pointerup",s),t.addEventListener("keydown",s,!1),t.addEventListener("keyup",s,!1)),window.addEventListener("resize",s.resize,!1),s.isEventsInit=!0,s.dom=t},removeEvents:function(){if(!s.isEventsInit)return;let t=document.body;s.isMobile||t.removeEventListener("wheel",s),s.addDOMEventListeners&&(t.removeEventListener("pointercancel",s),t.removeEventListener("pointerleave",s),t.removeEventListener("pointermove",s),t.removeEventListener("pointerdown",s),t.removeEventListener("pointerup",s),t.removeEventListener("keydown",s),t.removeEventListener("keyup",s)),window.removeEventListener("resize",s.resize),s.isEventsInit=!1},resize:function(){let t,i=s.ui.length;for(;i--;)t=s.ui[i],t.isGui&&!t.isCanvasOnly&&t.autoResize&&t.calc();s.needReZone=!0,s.needResize=!1},out:function(){console.log("im am out"),s.clearOldID()},in:function(){console.log("im am in")},fakeUp:function(){this.handleEvent({type:"pointerup"})},handleEvent:function(t){-1!==s.prevDefault.indexOf(t.type)&&t.preventDefault(),s.needResize&&s.resize(),s.findZone(s.forceZone);let i=s.e,e=!1;"keydown"===t.type&&s.keydown(t),"keyup"===t.type&&s.keyup(t),"wheel"===t.type?i.delta=t.deltaY>0?1:-1:i.delta=0;let h=t.pointerType;if(i.clientX=("touch"===h?t.pageX:t.clientX)||0,i.clientY=("touch"===h?t.pageY:t.clientY)||0,i.type=t.type,-1!==s.eventOut.indexOf(t.type)&&(e=!0,i.type="mouseup"),"pointerleave"===t.type&&(s.isLeave=!0),"pointerdown"===t.type&&(i.type="mousedown"),"pointerup"===t.type&&(i.type="mouseup"),"pointermove"===t.type&&(s.isLeave&&(s.isLeave=!1,s.resize()),i.type="mousemove"),"mousedown"===i.type){if(s.downTime=s.now(),s.downTime-s.prevTime<200)return s.selectAll(),!1;s.prevTime=s.downTime,s.forceZone=!1}"mousedown"===i.type&&s.clearInput(),"mousedown"===i.type&&(s.lock=!0),"mouseup"===i.type&&(s.lock=!1),s.isMobile&&"mousedown"===i.type&&s.findID(i),"mousemove"!==i.type||s.lock||s.findID(i),null!==s.ID&&(s.ID.isCanvasOnly&&(i.clientX=s.ID.mouse.x,i.clientY=s.ID.mouse.y),s.ID.handleEvent(i)),s.isMobile&&"mouseup"===i.type&&s.clearOldID(),e&&s.clearOldID()},findID:function(t){let i,e,h,o=s.ui.length,n=-1;for(;o--;)if(i=s.ui[o],i.isCanvasOnly?(e=i.mouse.x,h=i.mouse.y):(e=t.clientX,h=t.clientY),s.onZone(i,e,h)){n=o,n!==s.current&&(s.clearOldID(),s.current=n,s.ID=i);break}-1===n&&s.clearOldID()},clearOldID:function(){s.ID&&(s.current=-1,s.ID.reset(),s.ID=null,s.cursor())},calcUis:(t,i,e,h=!1)=>{let o,n,r,l=t.length,a=0,c=0,d=0;for(;l--;)o=t[c],c++,!h&&o.isGroup&&o.calcUis(),r=o.margin,o.zone.w=o.w,o.zone.h=o.h+r,o.autoWidth?(a=0,o.zone.x=i.x+o.dx,o.zone.y=e,e+=o.h+r,d+=o.h+r):(0===a&&(d+=o.h+r),o.zone.x=i.x+a,o.zone.y=e,n=s.getWidth(o),n?o.zone.w=o.w=n:o.fw&&(o.zone.w=o.w=o.fw),a+=o.zone.w,a>=i.w&&(e+=o.h+r,a=0));return d},findTarget:function(t,i){let e=t.length;for(;e--;)if(s.onZone(t[e],i.clientX,i.clientY))return e;return-1},findZone:function(t){if(s.needReZone||t){for(var i,e=s.ui.length;e--;)i=s.ui[e],s.getZone(i),i.isGui&&i.calcUis();s.needReZone=!1}},onZone:function(t,s,i){if(void 0===s||void 0===i)return!1;let e=t.zone,h=s-e.x,o=i-e.y,n=h>=0&&o>=0&&h<=e.w&&o<=e.h;return n?t.local.set(h,o):t.local.neg(),n},getWidth:function(t){return t.getDom().clientWidth},getZone:function(t){if(t.isCanvasOnly)return;let s=t.getDom().getBoundingClientRect();t.zone={x:s.left,y:s.top,w:s.width,h:s.height}},cursor:function(t){(t=t||"auto")!==s.oldCursor&&(document.body.style.cursor=t,s.oldCursor=t)},toCanvas:function(t,i,e,h){if(s.xmlserializer||(s.xmlserializer=new XMLSerializer),h&&null!==s.tmpTime&&(clearTimeout(s.tmpTime),s.tmpTime=null),null!==s.tmpTime)return;s.lock&&(s.tmpTime=setTimeout((function(){s.tmpTime=null}),10));let o=!1;i===t.canvas.width&&e===t.canvas.height||(o=!0),null===s.tmpImage&&(s.tmpImage=new Image);let n=s.tmpImage,r=s.xmlserializer.serializeToString(t.content),l=''+r+"";n.onload=function(){let s=t.canvas.getContext("2d");o?(t.canvas.width=i,t.canvas.height=e):s.clearRect(0,0,i,e),s.drawImage(this,0,0),t.onDraw()},n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(l),n.crossOrigin="",s.needsUpdate=!1},setHidden:function(){null===s.hiddenImput&&(s.hiddenImput=document.createElement("input"),s.hiddenImput.type="text",s.hiddenSizer=document.createElement("div"),document.body.appendChild(s.hiddenImput),document.body.appendChild(s.hiddenSizer));let t=s.debugInput?"":"opacity:0; zIndex:0;",i=s.parent.css.txtselect+"padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;"+t;s.hiddenImput.style.cssText=i+"bottom:10px;"+(s.debugInput?"":"transform:scale(0);"),s.hiddenSizer.style.cssText=i+"bottom:40px;",s.hiddenImput.style.width=s.input.clientWidth+"px",s.hiddenImput.value=s.str,s.hiddenSizer.innerHTML=s.str,s.hasFocus=!0},clearHidden:function(t){null!==s.hiddenImput&&(s.hasFocus=!1)},clickPos:function(t){let i=s.str.length,e=0,h=0;for(;i--&&(e+=s.textWidth(s.str[h]),!(e>=t));)h++;return h},upInput:function(t,i){if(null===s.parent)return!1;let e=!1;if(i){let i=s.clickPos(t);if(s.moveX=i,-1===s.startX)s.startX=i,s.cursorId=i,s.inputRange=[s.startX,s.startX];else{s.moveX!==s.startX&&(s.startX>s.moveX?s.inputRange=[s.moveX,s.startX]:s.inputRange=[s.startX,s.moveX])}e=!0}else-1!==s.startX&&(s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.startX=-1,e=!0);return e&&s.selectParent(),e},selectAll:function(){s.parent&&(s.str=s.input.textContent,s.inputRange=[0,s.str.length],s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.cursorId=s.inputRange[1],s.selectParent())},selectParent:function(){var t=s.textWidth(s.str.substring(0,s.cursorId)),i=s.textWidth(s.str.substring(0,s.inputRange[0])),e=s.textWidth(s.str.substring(s.inputRange[0],s.inputRange[1]));s.parent.select(t,i,e,s.hiddenSizer.innerHTML)},textWidth:function(t){return null===s.hiddenSizer?0:(t=t.replace(/ /g," "),s.hiddenSizer.innerHTML=t,s.hiddenSizer.clientWidth)},clearInput:function(){null!==s.parent&&(s.firstImput||s.parent.validate(!0),s.clearHidden(),s.parent.unselect(),s.input.style.background=s.parent.colors.back,s.input.style.borderColor=s.parent.colors.border,s.parent.isEdit=!1,s.input=null,s.parent=null,s.str="",s.firstImput=!0)},setInput:function(t,i){s.clearInput(),s.input=t,s.parent=i,s.input.style.background=s.parent.colors.backoff,s.input.style.borderColor=s.parent.colors.select,s.str=s.input.textContent,s.setHidden()},keydown:function(t){if(null===s.parent)return;let i=t.which;t.shiftKey,s.firstImput=!1,s.hasFocus&&(window.focus(),s.hiddenImput.focus()),s.parent.isEdit=!0,13===i?s.clearInput():s.input.isNum?t.keyCode>47&&t.keyCode<58||t.keyCode>95&&t.keyCode<106||190===t.keyCode||110===t.keyCode||8===t.keyCode||109===t.keyCode?s.hiddenImput.readOnly=!1:s.hiddenImput.readOnly=!0:s.hiddenImput.readOnly=!1},keyup:function(t){null!==s.parent&&(s.str=s.hiddenImput.value,s.parent.allEqual?s.parent.sameStr(s.str):s.input.textContent=s.str,s.cursorId=s.hiddenImput.selectionStart,s.inputRange=[s.hiddenImput.selectionStart,s.hiddenImput.selectionEnd],s.selectParent(),s.parent.validate())},loop:function(){s.isLoop&&requestAnimationFrame(s.loop),s.needsUpdate=s.update(),s.ui[0]&&s.needsUpdate&&s.ui[0].draw()},update:function(){let t=s.listens.length,i=!1;for(;t--;){s.listens[t].listening()&&(i=!0)}return i},removeListen:function(t){let i=s.listens.indexOf(t);-1!==i&&s.listens.splice(i,1),0===s.listens.length&&(s.isLoop=!1)},addListen:function(t){return-1===s.listens.indexOf(t)&&(s.listens.push(t),s.isLoop||(s.isLoop=!0,s.loop()),!0)}},i=s,e={transition:.2,frag:document.createDocumentFragment(),colorRing:null,joystick_0:null,joystick_1:null,circular:null,knob:null,pad2d:null,svgns:"http://www.w3.org/2000/svg",links:"http://www.w3.org/1999/xlink",htmls:"http://www.w3.org/1999/xhtml",DOM_SIZE:["height","width","top","left","bottom","right","margin-left","margin-right","margin-top","margin-bottom"],SVG_TYPE_D:["pattern","defs","transform","stop","animate","radialGradient","linearGradient","animateMotion","use","filter","feColorMatrix"],SVG_TYPE_G:["svg","rect","circle","path","polygon","text","g","line","foreignObject"],PI:Math.PI,TwoPI:2*Math.PI,pi90:.5*Math.PI,pi60:Math.PI/3,torad:Math.PI/180,todeg:180/Math.PI,clamp:(t,s,i)=>t=(t=ti?i:t,isDivid:t=>.5*t===Math.floor(.5*t),size:{w:240,h:20,p:30,s:8},defineColor:(t,s=e.colors)=>{let i={...s},h=["fontFamily","fontWeight","fontShadow","fontSize"],o=!1;t.font&&(t.fontFamily=t.font),t.shadow&&(t.fontShadow=t.shadow),t.weight&&(t.fontWeight=t.weight),t.fontColor&&(t.text=t.fontColor),t.color&&(t.text=t.color),t.text&&(i.text=t.text,t.fontColor||t.color||(i.title=e.ColorLuma(t.text,-.25),i.titleoff=e.ColorLuma(t.text,-.5)),i.textOver=e.ColorLuma(t.text,.25),i.textSelect=e.ColorLuma(t.text,.5)),t.button&&(i.button=t.button,i.border=e.ColorLuma(t.button,.1),i.overoff=e.ColorLuma(t.button,.2)),t.select&&(i.select=t.select,i.over=e.ColorLuma(t.select,-.1)),t.itemBg&&(t.back=t.itemBg),t.back&&(i.back=t.back,i.backoff=e.ColorLuma(t.back,-.1)),t.fontSelect&&(i.textSelect=t.fontSelect),t.groupBorder&&(i.gborder=t.groupBorder),t.bgOver&&(i.backgroundOver=t.bgOver);for(let s in i)void 0!==t[s]&&(i[s]=t[s]);for(let s in t)-1!==h.indexOf(s)&&(o=!0);return o&&e.defineText(i),i},colors:{sx:4,sy:2,radius:2,showOver:1,content:"none",background:"rgba(50,50,50,0.15)",backgroundOver:"rgba(50,50,50,0.3)",title:"#CCC",titleoff:"#BBB",text:"#DDD",textOver:"#EEE",textSelect:"#FFF",back:"rgba(0,0,0,0.2)",backoff:"rgba(0,0,0,0.3)",border:"#4c4c4c",borderSize:1,gborder:"none",groups:"none",button:"#3c3c3c",overoff:"#5c5c5c",over:"#024699",select:"#308AFF",action:"#FF3300",fontFamily:"Consolas, monospace",fontWeight:"normal",fontShadow:"none",fontSize:12,joyOver:"rgba(48,138,255,0.25)",joyOut:"rgba(100,100,100,0.5)",joySelect:"#308AFF",hide:"rgba(0,0,0,0)"},css:{basic:"position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; -o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;",button:"display:flex; align-items:center; justify-content:center; text-align:center;",middle:"display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;"},svgs:{g1:"M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z",g2:"M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z",group:"M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z",arrow:"M 3 8 L 8 5 3 2 3 8 Z",arrowDown:"M 5 8 L 8 3 2 3 5 8 Z",arrowUp:"M 5 2 L 2 7 8 7 5 2 Z",solid:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z",body:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z",vehicle:"M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z",articulation:"M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z",character:"M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z",terrain:"M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z",joint:"M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z",ray:"M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z",collision:"M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z",map:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",material:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",texture:"M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z",object:"M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z",none:"M 9 5 L 5 5 5 9 9 9 9 5 Z",cursor:"M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z",load:"M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z",save:"M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z",extern:"M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z"},rezone(){i.needReZone=!0},getImput:function(){return!!i.input},setStyle:function(t){for(var s in t)e.colors[s]&&(e.colors[s]=t[s]);e.setText()},defineText:function(t){e.setText(t.fontSize,t.text,t.fontFamily,t.fontShadow,t.fontWeight)},setText:function(t,s,i,h,o){let n=e.colors;void 0===i&&(i=n.fontFamily),void 0===t&&(t=n.fontSize),void 0===h&&(h=n.fontShadow),void 0===o&&(o=n.fontWeight),void 0===s&&(s=n.text),isNaN(t)?-1===t.search("em")&&(t+="px"):t+="px",e.css.txt=e.css.basic+e.css.middle+" font-family:"+i+"; font-weight:"+o+"; font-size:"+t+"; color:"+n.text+"; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;","none"!==h&&(e.css.txt+=" text-shadow: 1px 1px 1px "+h+";"),e.css.txtselect=e.css.txt+"padding:0px 4px; border:1px dashed "+n.border+";",e.css.item=e.css.txt+"padding:0px 4px; position:relative; margin-bottom:1px; "},cloneCss:function(){return{...e.css}},clone:function(t){return t.cloneNode(!0)},setSvg:function(t,s,i,e,h){-1===e?t.setAttributeNS(null,s,i):void 0!==h?t.childNodes[e||0].childNodes[h||0].setAttributeNS(null,s,i):t.childNodes[e||0].setAttributeNS(null,s,i)},setCss:function(t,s){for(let i in s)-1!==e.DOM_SIZE.indexOf(i)?t.style[i]=s[i]+"px":t.style[i]=s[i]},set:function(t,s){for(let i in s)"txt"===i&&(t.textContent=s[i]),"link"===i?t.setAttributeNS(e.links,"xlink:href",s[i]):t.setAttributeNS(null,i,s[i])},get:function(t,s){if(void 0===s)return t;if(!isNaN(s))return t.childNodes[s];if(s instanceof Array){if(2===s.length)return t.childNodes[s[0]].childNodes[s[1]];if(3===s.length)return t.childNodes[s[0]].childNodes[s[1]].childNodes[s[2]]}},dom:function(t,s,i,h,o){return t=t||"div",-1!==e.SVG_TYPE_D.indexOf(t)||-1!==e.SVG_TYPE_G.indexOf(t)?"svg"===t?(h=document.createElementNS(e.svgns,"svg"),e.set(h,i)):(void 0===h&&(h=document.createElementNS(e.svgns,"svg")),e.addAttributes(h,t,i,o)):h=void 0===h?document.createElementNS(e.htmls,t):h.appendChild(document.createElementNS(e.htmls,t)),s&&(h.style.cssText=s),void 0===o?h:h.childNodes[o||0]},addAttributes:function(t,s,i,h){let o=document.createElementNS(e.svgns,s);return e.set(o,i),e.get(t,h).appendChild(o),-1!==e.SVG_TYPE_G.indexOf(s)&&(o.style.pointerEvents="none"),o},clear:function(t){for(e.purge(t);t.firstChild;)t.firstChild.firstChild&&e.clear(t.firstChild),t.removeChild(t.firstChild)},purge:function(t){let s,i,h=t.attributes;if(h)for(s=h.length;s--;)i=h[s].name,"function"==typeof t[i]&&(t[i]=null);if(h=t.childNodes,h)for(s=h.length;s--;)e.purge(t.childNodes[s])},addSVGGlowEffect:function(){if(null!==document.getElementById("UILGlow"))return;let t=e.initUILEffects(),s=e.addAttributes(t,"filter",{id:"UILGlow",x:"-20%",y:"-20%",width:"140%",height:"140%"});e.addAttributes(s,"feGaussianBlur",{in:"SourceGraphic",stdDeviation:"3",result:"uilBlur"});let i=e.addAttributes(s,"feMerge",{});for(let t=0;t<=3;t++)e.addAttributes(i,"feMergeNode",{in:"uilBlur"});e.addAttributes(i,"feMergeNode",{in:"SourceGraphic"})},initUILEffects:function(){let t=document.getElementById("UILSVGEffects");return null===t&&(t=e.dom("svg",void 0,{id:"UILSVGEffects",width:"0",height:"0"}),document.body.appendChild(t)),t},ColorLuma:function(t,s){"n"===t&&(t="#000"),(t=String(t).replace(/[^0-9a-f]/gi,"")).length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),s=s||0;let i,e,h="#";for(e=0;e<3;e++)i=parseInt(t.substr(2*e,2),16),i=Math.round(Math.min(Math.max(0,i+i*s),255)).toString(16),h+=("00"+i).substr(i.length);return h},findDeepInver:function(t){return.3*t[0]+.59*t[1]+.11*t[2]<=.6},lerpColor:function(t,s,i){let e={};for(let h=0;h<3;h++)e[h]=t[h]+(s[h]-t[h])*i;return e},hexToHtml:function(t){return"#"+("000000"+(t=void 0===t?0:t).toString(16)).substr(-6)},htmlToHex:function(t){return t.toUpperCase().replace("#","0x")},u255:function(t,s){return parseInt(t.substring(s,s+2),16)/255},u16:function(t,s){return parseInt(t.substring(s,s+1),16)/15},unpack:function(t){return 7==t.length?[e.u255(t,1),e.u255(t,3),e.u255(t,5)]:4==t.length?[e.u16(t,1),e.u16(t,2),e.u16(t,3)]:void 0},p255:function(t){let s=Math.round(255*t).toString(16);return s.length<2&&(s="0"+s),s},pack:function(t){return"#"+e.p255(t[0])+e.p255(t[1])+e.p255(t[2])},htmlRgb:function(t){return"rgb("+Math.round(255*t[0])+","+Math.round(255*t[1])+","+Math.round(255*t[2])+")"},pad:function(t){return 1==t.length&&(t="0"+t),t},rgbToHex:function(t){let s=Math.round(255*t[0]).toString(16),i=Math.round(255*t[1]).toString(16),h=Math.round(255*t[2]).toString(16);return"#"+e.pad(s)+e.pad(i)+e.pad(h)},hueToRgb:function(t,s,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(s-t)*i:i<.5?s:i<2/3?t+6*(s-t)*(2/3-i):t},rgbToHsl:function(t){let s=t[0],i=t[1],e=t[2],h=Math.min(s,i,e),o=Math.max(s,i,e),n=o-h,r=0,l=0,a=(h+o)/2;return a>0&&a<1&&(l=n/(a<.5?2*a:2-2*a)),n>0&&(o==s&&o!=i&&(r+=(i-e)/n),o==i&&o!=e&&(r+=2+(e-s)/n),o==e&&o!=s&&(r+=4+(s-i)/n),r/=6),[r,l,a]},hslToRgb:function(t){let s,i,h=t[0],o=t[1],n=t[2];return 0===o?[n,n,n]:(i=n<=.5?n*(o+1):n+o-n*o,s=2*n-i,[e.hueToRgb(s,i,h+.33333),e.hueToRgb(s,i,h),e.hueToRgb(s,i,h-.33333)])},makeGradiant:function(t,s,i,h){e.dom(t,null,s,i,0);let o,n=i.childNodes[0].childNodes.length-1;for(let t=0;t0){for(a=6;a--;)r[a]=(113*r[a]+u).toFixed(2);c=" M"+r[0]+" "+r[1]+" Q"+r[2]+" "+r[3]+" "+r[4]+" "+r[5],d=[[0,g[0],1],[100,g[1],1]],e.makeGradiant("linearGradient",{id:"G"+l,x1:r[0],y1:r[1],x2:r[4],y2:r[5],gradientUnits:"userSpaceOnUse"},s,d),e.dom("path","",{d:c,"stroke-width":30,stroke:"url(#G"+l+")","stroke-linecap":"butt"},s,1)}m=n-p,g[0]=g[1]}d=[[0,"#FFFFFF",1],[50,"#FFFFFF",0],[50,"#000000",0],[100,"#000000",1]],e.makeGradiant("linearGradient",{id:"GL0",x1:0,y1:u-84.9,x2:0,y2:212.9,gradientUnits:"userSpaceOnUse"},s,d),d=[[0,"#7f7f7f",1],[50,"#7f7f7f",.5],[100,"#7f7f7f",0]],e.makeGradiant("linearGradient",{id:"GL1",x1:78.95,y1:0,x2:226,y2:0,gradientUnits:"userSpaceOnUse"},s,d),e.dom("g",null,{"transform-origin":"128px 128px",transform:"rotate(0)"},s),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"red"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL1)","stroke-width":1,stroke:"url(#GL1)"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL0)","stroke-width":1,stroke:"url(#GL0)"},s,2),e.dom("path","",{d:"M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z",fill:"none","stroke-width":2,stroke:"#000"},s,2),e.dom("circle","",{cx:128,cy:128,r:6,"stroke-width":2,stroke:"#000",fill:"none"},s),e.colorRing=s},icon:function(t,s,i){i=i||40;let h=[""];switch(t){case"logo":h[1]="";break;case"donate":h[1]="";break;case"neo":h[1]="";break;case"phy":h[1]="";break;case"config":h[1]="";break;case"github":h[1]="";break;case"save":h[1]=""}return h[2]="",h.join("\n")},logoFill_d:"\n M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 \n L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 \n M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 \n Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z\n ",logo_github:"\n M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 \n 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 \n 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 \n 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 \n 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z\n ",logo_neo:"\n M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 \n 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 \n 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 \n 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L \n 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z\n ",logo_phy:"\n M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 \n Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95\n ",logo_config:"\n M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 \n L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 \n Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75\n ",logo_donate:"\n M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 \n 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 \n 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 \n 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 \n 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 \n Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 \n 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 \n 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 \n 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M \n 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 \n 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 \n 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 \n 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 \n 200.9 187.5 200.9 187.5 195.35 Z\n "};e.setText();const h=e;class o{static autoTypes(t){let s=[];switch(t){case"svg":s=[{accept:{"image/svg+xml":".svg"}}];break;case"wav":s=[{accept:{"audio/wav":".wav"}}];break;case"mp3":s=[{accept:{"audio/mpeg":".mp3"}}];break;case"mp4":s=[{accept:{"video/mp4":".mp4"}}];break;case"bin":case"hex":s=[{description:"Binary Files",accept:{"application/octet-stream":[".bin",".hex"]}}];break;case"text":s=[{description:"Text Files",accept:{"text/plain":[".txt",".text"],"text/html":[".html",".htm"]}}];break;case"json":s=[{description:"JSON Files",accept:{"application/json":[".json"]}}];break;case"js":s=[{description:"JavaScript Files",accept:{"text/javascript":[".js"]}}];break;case"image":s=[{description:"Images",accept:{"image/*":[".png",".gif",".jpeg",".jpg"]}}];break;case"icon":s=[{description:"Icons",accept:{"image/x-ico":[".ico"]}}];break;case"lut":s=[{description:"Lut",accept:{"text/plain":[".cube",".3dl"]}}]}return s}static async load(t={}){"function"!=typeof window.showOpenFilePicker&&(window.showOpenFilePicker=o.showOpenFilePickerPolyfill);try{let s=t.type||"";const i={excludeAcceptAllOption:!!s,multiple:!1};i.types=o.autoTypes(s);const e=await window.showOpenFilePicker(i),h=await e[0].getFile();if(!h)return null;let n=h.name,r=n.substring(n.lastIndexOf(".")+1,n.length);const l=["png","jpg","jpeg","mp4","webm","ogg","mp3"],a=["sea","z","hex","bvh","BVH","glb","gltf"],c=new FileReader;-1!==l.indexOf(r)?c.readAsDataURL(h):-1!==a.indexOf(r)?c.readAsArrayBuffer(h):c.readAsText(h),c.onload=function(i){let e=i.target.result;switch(s){case"image":let s=new Image;s.onload=function(){t.callback&&t.callback(s,n,r)},s.src=e;break;case"json":t.callback&&t.callback(JSON.parse(e),n,r);break;default:t.callback&&t.callback(e,n,r)}}}catch(s){console.log(s),t.always&&t.callback&&t.callback(null)}}static showOpenFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("input");i.type="file",i.multiple=t.multiple,i.accept=t.types.map((t=>t.accept)).flatMap((t=>Object.keys(t).flatMap((s=>t[s])))).join(","),i.addEventListener("change",(()=>{s([...i.files].map((t=>({getFile:async()=>new Promise((s=>{s(t)}))}))))})),i.click()}))}static async save(t={}){let s=!1;"function"!=typeof window.showSaveFilePicker&&(window.showSaveFilePicker=o.showSaveFilePickerPolyfill,s=!0);try{let i=t.type||"";const e={suggestedName:t.name||"hello",data:t.data||""};e.types=o.autoTypes(i),e.finalType=Object.keys(e.types[0].accept)[0],e.suggestedName+=e.types[0].accept[e.finalType][0];const h=await window.showSaveFilePicker(e);if(s)return;const n=await h.createWritable();let r=new Blob([e.data],{type:e.finalType});await n.write(r),await n.close()}catch(t){console.log(t)}}static showSaveFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("a");i.download=t.suggestedName||"my-file.txt";let e=new Blob([t.data],{type:t.finalType});i.href=URL.createObjectURL(e),i.addEventListener("click",(()=>{s(setTimeout((()=>URL.revokeObjectURL(i.href)),1e3))})),i.click()}))}static async getFolder(){try{const t=await window.showDirectoryPicker(),s=[];for await(const i of t.values()){const t=await i.getFile();s.push(t)}return console.log(s),s}catch(t){console.log(t)}}}class n{constructor(t=0,s=0){this.x=t,this.y=s}set(t,s){return this.x=t,this.y=s,this}divide(t){return this.x/=t.x,this.y/=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divideScalar(t){return this.multiplyScalar(1/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}angle(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t}addScalar(t){return this.x+=t,this.y+=t,this}negate(){return this.x*=-1,this.y*=-1,this}neg(){return this.x=-1,this.y=-1,this}isZero(){return 0===this.x&&0===this.y}copy(t){return this.x=t.x,this.y=t.y,this}equals(t){return t.x===this.x&&t.y===this.y}nearEquals(t,s){return t.x.toFixed(s)===this.x.toFixed(s)&&t.y.toFixed(s)===this.y.toFixed(s)}lerp(t,s){return null===t?(this.x-=this.x*s,this.y-=this.y*s):(this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s),this}}class r{constructor(t={}){this.lock=t.lock||!1,this.neverlock=!1,this.isSpace=t.isSpace||!1,this.main=t.main||null,this.isUI=t.isUI||!1,this.group=t.group||null,this.isListen=!1,this.top=0,this.ytop=0,this.dx=t.dx||0,this.isSelectable=void 0!==t.selectable&&t.selectable,this.unselectable=void 0!==t.unselect?t.unselect:this.isSelectable,this.ontop=!!t.ontop&&t.ontop,this.css=this.main?this.main.css:h.css,this.colors=h.defineColor(t,this.main?this.group?this.group.colors:this.main.colors:h.colors),this.overEffect=this.colors.showOver,this.svgs=h.svgs,this.zone={x:0,y:0,w:0,h:0,d:0},this.local=(new n).neg(),this.isCanvasOnly=!1,this.isSelect=!1,this.p=void 0!==t.p?t.p:h.size.p,this.w=this.isUI?this.main.size.w:h.size.w,void 0!==t.w&&(this.w=t.w),this.h=this.isUI?this.main.size.h:h.size.h,void 0!==t.h&&(this.h=t.h),this.isSpace?this.lock=!0:this.h=this.h<11?11:this.h,this.fw=t.fw||0,this.autoWidth=t.auto||!0,this.isOpen=!1,this.radius=t.radius||this.colors.radius,this.transition=t.transition||h.transition,this.isNumber=!1,this.noNeg=t.noNeg||!1,this.allEqual=t.allEqual||!1,this.mono=!1,this.isEdit=!1,this.simple=t.simple||!1,this.simple&&(this.sa=0),this.setSize(this.w),void 0!==t.sa&&(this.sa=t.sa),void 0!==t.sb&&(this.sb=t.sb),this.simple&&(this.sb=this.w-this.sa),this.sc=void 0===t.sc?47:t.sc,this.objectLink=null,this.isSend=!1,this.objectKey=null,this.txt=t.name||"",this.name=t.rename||this.txt,this.target=t.target||null,this.callback=void 0===t.callback?null:t.callback,this.endCallback=null,this.openCallback=void 0===t.openCallback?null:t.openCallback,this.closeCallback=void 0===t.closeCallback?null:t.closeCallback,null===this.callback&&this.isUI&&null!==this.main.callback&&(this.callback=this.group?this.group.callback:this.main.callback),this.c=[],this.s=[],this.useFlex=!!this.isUI&&this.main.useFlex;let s=this.useFlex?"display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;":"float:left;";this.c[0]=h.dom("div",this.css.basic+s+"position:relative; height:20px;"),this.s[0]=this.c[0].style,this.margin=this.colors.sy,this.mtop=0;let i=h.isDivid(this.margin);if(this.isUI&&this.margin&&(this.s[0].boxSizing="content-box",i?(this.mtop=.5*this.margin,this.s[0].borderTop=this.mtop+"px solid transparent",this.s[0].borderBottom=this.mtop+"px solid transparent"):this.s[0].borderBottom=this.margin+"px solid transparent"),this.simple||(this.c[1]=h.dom("div",this.css.txt+this.css.middle),this.s[1]=this.c[1].style,this.c[1].textContent=this.name,this.s[1].color=this.lock?this.colors.titleoff:this.colors.title),t.pos){this.s[0].position="absolute";for(let s in t.pos)this.s[0][s]=t.pos[s];this.mono=!0}t.css&&(this.s[0].cssText=t.css)}init(){this.ytop=this.top+this.mtop,this.zone.h=this.h+this.margin,this.zone.w=this.w;let t=this.s,s=this.c;t[0].height=this.h+"px",this.isUI&&(t[0].background=this.colors.background),!this.autoWidth&&this.useFlex?(t[0].flex="1 0 auto",t[0].minWidth=this.minw+"px",t[0].textAlign="center"):this.isUI&&(t[0].width="100%"),void 0!==s[1]&&this.autoWidth&&(t[1]=s[1].style,t[1].top="1px",t[1].height=this.h-2+"px");let e=h.frag;for(let i=1,h=s.length;i!==h;i++)void 0!==s[i]&&(e.appendChild(s[i]),t[i]=s[i].style);let o=null!==this.target?this.target:this.isUI?this.main.inner:document.body;this.ontop?o.insertAdjacentElement("afterbegin",s[0]):o.appendChild(s[0]),s[0].appendChild(e),this.rSize(),this.isUI||(this.c[0].style.pointerEvents="auto",i.add(this))}addTransition(){this.baseH&&this.transition&&this.isUI&&(this.c[0].style.transition="height "+this.transition+"s ease-out")}dom(t,s,i,e,o){return h.dom(t,s,i,e,o)}setSvg(t,s,i,e,o){h.setSvg(t,s,i,e,o)}setCss(t,s){h.setCss(t,s)}clamp(t,s,i){return h.clamp(t,s,i)}getColorRing(){return h.colorRing||h.makeColorRing(),h.clone(h.colorRing)}getJoystick(t){return h["joystick_"+t]||h.makeJoystick(t),h.clone(h["joystick_"+t])}getCircular(t){return h.circular||h.makeCircular(t),h.clone(h.circular)}getKnob(t){return h.knob||h.makeKnob(t),h.clone(h.knob)}getPad2d(t){return h.pad2d||h.makePad(t),h.clone(h.pad2d)}cursor(t){i.cursor(t)}update(){}reset(){}content(){return this.c[0]}getDom(){return this.c[0]}uiout(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.background)}uiover(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.backgroundOver)}rename(t){void 0!==this.c[1]&&(this.c[1].textContent=t)}listen(){return this.isListen=i.addListen(this),this}listening(){if(null===this.objectLink)return;if(this.isSend)return;if(this.isEdit)return;return this.setValue(this.objectLink[this.objectKey])}setValue(t){const s=this.value;this.isNumber?this.value=this.numValue(t):this.value=t,this.update();let i=!1;return s!==this.value&&(i=!0),i}onChange(t){if(!this.isSpace)return this.callback=t||null,this}onFinishChange(t){if(!this.isSpace)return this.callback=null,this.endCallback=t,this}onOpen(t){return this.openCallback=t,this}onClose(t){return this.closeCallback=t,this}send(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.isSend=!0,null!==this.objectLink&&(this.objectLink[this.objectKey]=t),this.callback&&this.callback(t,this.objectKey),this.isSend=!1}sendEnd(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.endCallback&&this.endCallback(t),null!==this.objectLink&&(this.objectLink[this.objectKey]=t)}dispose(){this.isListen&&i.removeListen(this),h.clear(this.c[0]),null!==this.target?null!==this.group?this.group.clearOne(this):this.target.removeChild(this.c[0]):this.isUI?this.main.clearOne(this):document.body.removeChild(this.c[0]),this.isUI||i.remove(this),this.c=null,this.s=null,this.callback=null,this.target=null,this.isListen=!1}clear(){}getWidth(){let t=i.getWidth(this);t&&(this.w=t)}setSize(t){if(this.autoWidth)if(this.w=t,this.simple)this.sb=this.w-this.sa;else{let t=this.w*(this.p/100);this.sa=Math.floor(t+8),this.sb=Math.floor(this.w-t-16)}}rSize(){this.autoWidth&&(this.isUI||(this.s[0].width=this.w+"px"),this.simple||(this.s[1].width=this.sa+"px"))}setTypeNumber(t){let s;switch(this.isNumber=!0,this.value=0,void 0!==t.value&&("string"==typeof t.value?this.value=1*t.value:this.value=t.value),this.min=void 0===t.min?-1/0:t.min,this.max=void 0===t.max?1/0:t.max,this.precision=void 0===t.precision?2:t.precision,this.precision){case 0:s=1;break;case 1:s=.1;break;case 2:s=.01;break;case 3:s=.001;break;case 4:s=1e-4;break;case 5:s=1e-5;break;case 6:s=1e-6}this.step=void 0===t.step?s:t.step,this.range=this.max-this.min,this.value=this.numValue(this.value)}numValue(t){return this.noNeg&&(t=Math.abs(t)),1*Math.min(this.max,Math.max(this.min,t)).toFixed(this.precision)}handleEvent(t){if(!this.lock)return this.neverlock&&(i.lock=!1),this[t.type]?this[t.type](t):console.error(t.type,"this type of event no existe !")}wheel(t){return!1}mousedown(t){return!1}mousemove(t){return!1}mouseup(t){return!1}keydown(t){return!1}keyup(t){return!1}setReferency(t,s){this.objectLink=t,this.objectKey=s}display(t=!1){this.s[0].visibility=t?"visible":"hidden"}open(){this.isOpen||(this.isOpen=!0,i.needResize=!0,this.openCallback&&this.openCallback())}close(){this.isOpen&&(this.isOpen=!1,i.needResize=!0,this.closeCallback&&this.closeCallback())}needZone(){i.needReZone=!0}rezone(){i.needReZone=!0}select(){}unselect(){}setInput(t){i.setInput(t,this)}upInput(t,s){return i.upInput(t,s)}selected(t){this.isSelect=t||!1}}class l extends r{constructor(t={}){super(t),this.value=t.value||!1,this.model=void 0!==t.mode?t.mode:0,this.onName=t.rename||this.txt,t.onName&&(t.onname=t.onName),t.onname&&(this.onName=t.onname),this.inh=t.inh||Math.floor(.8*this.h),this.inw=t.inw||36;let s=this.colors;if(0===this.model){let t=Math.floor(.5*this.h)-.5*(this.inh-2);this.c[2]=this.dom("div",this.css.basic+"background:"+s.inputBg+"; height:"+(this.inh-2)+"px; width:"+this.inw+"px; top:"+t+"px; border-radius:10px; border:2px solid "+s.back),this.c[3]=this.dom("div",this.css.basic+"height:"+(this.inh-6)+"px; width:16px; top:"+(t+2)+"px; border-radius:10px; background:"+s.button+";")}else this.p=0,void 0!==this.c[1]&&(this.c[1].textContent=""),this.c[2]=this.dom("div",this.css.txt+this.css.button+"top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.borderSize+"px solid "+s.border+"; border-radius:"+this.radius+"px;");this.stat=-1,this.init(),this.update()}mousedown(t){return this.value=!this.value,this.update(!0),this.mousemove(t)}mousemove(t){return this.cursor("pointer"),this.mode(!0)}reset(){return this.cursor(),this.mode()}mode(t){let s,i=!1,e=this.colors,h=this.s,o=this.value;if(s=t?o?4:3:o?2:1,this.stat!==s){if(this.stat=s,0!==this.model){switch(s){case 1:h[2].color=e.text,h[2].background=e.button;break;case 2:h[2].color=e.textSelect,h[2].background=e.select;break;case 3:h[2].color=e.textOver,h[2].background=e.overoff;break;case 4:h[2].color=e.textOver,h[2].background=e.over}this.c[2].innerHTML=o?this.onName:this.name}else{switch(s){case 1:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.button;break;case 2:h[2].background=h[2].borderColor=e.back,h[3].background=e.textOver;break;case 3:h[2].background=h[2].borderColor=e.back,h[3].background=e.overoff;break;case 4:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.textSelect}h[3].marginLeft=o?"17px":"2px",this.c[1].textContent=o?this.onName:this.name}i=!0}return i}update(t){this.mode(),t&&this.send()}rSize(){super.rSize();let t=this.s,s=this.w-10-this.inw;0===this.model?(t[2].left=s+"px",t[3].left=s+"px"):(t[2].left=this.sa+"px",t[2].width=this.sb+"px")}}class a extends r{constructor(t={}){super(t),this.value="",void 0!==t.value&&(this.value=t.value),this.values=t.value||this.txt,t.values&&(this.values=t.values),t.values||t.value||(this.txt=""),this.onName=t.onName||null,this.on=!1,this.bw=t.forceWidth||0,t.bw&&(this.bw=t.bw),this.space=t.space||3,"string"==typeof this.values&&(this.values=[this.values]),this.isDown=!1,this.neverlock=!0,this.res=0,this.lng=this.values.length,this.tmp=[],this.stat=[];let s,i=this.colors;for(let t=0;te[i][0]&&s.x0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.text,this.setSvg(this.c[3],"stroke",s,1);break;case 1:this.s[2].color=i.textOver,this.setSvg(this.c[3],"stroke",i.backoff,0),s=this.model>0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.textOver,this.setSvg(this.c[3],"stroke",s,1)}return this.cmode=t,!0}reset(){this.isDown=!1}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"circular"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;if(s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=s.angle()-this.pi90,this.r=(this.r%this.twoPi+this.twoPi)%this.twoPi,null!==this.oldr){let t=this.r-this.oldr;this.r=Math.abs(t)>Math.PI?this.oldr:this.r,t>6&&(this.r=0),t<-6&&(this.r=this.twoPi)}let i=1/this.twoPi,e=this.r*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=~~(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("circular"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:sMath.PI?1:0)+" 1 "+i+","+e}update(t){if(this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range,this.setSvg(this.c[3],"d",this.makePath(),1),this.model>0){let t=this.colors,s=h.pack(h.lerpColor(h.unpack(h.ColorLuma(t.text,-.75)),h.unpack(t.text),this.percent));this.setSvg(this.c[3],"stroke",s,1)}t&&this.send()}}class d extends r{constructor(t={}){super(t),this.ctype=t.ctype||"hex",this.wfixe=256,this.cw=this.sb>256?256:this.sb,null!=t.cw&&(this.cw=t.cw),this.side=t.side||"down",this.up="down"===this.side?0:1,this.baseH=this.h,this.offset=new n,this.decal=new n,this.pp=new n;let s=this.colors;this.c[2]=this.dom("div",`${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${s.borderSize}px solid ${s.border};`),this.c[0].style.display="block",this.c[3]=this.getColorRing(),this.c[3].style.visibility="hidden",this.hsl=null,this.value="#ffffff",void 0!==t.value&&(t.value instanceof Array?this.value=h.rgbToHex(t.value):isNaN(t.value)?this.value=t.value:this.value=h.hexToHtml(t.value)),this.bcolor=null,this.isDown=!1,this.fistDown=!1,this.notext=t.notext||!1,this.tr=98,this.tsl=Math.sqrt(3)*this.tr,this.hue=0,this.d=256,this.init(),this.setColor(this.value),void 0!==t.open&&this.open()}testZone(t,s){let i=this.local;return-1===i.x&&-1===i.y?"":this.up&&this.isOpen?i.y>this.wfixe?"title":"color":i.ythis.tr)e=(c+u.pi90)/u.TwoPI,this.hue=(e+1)%1,this.setHSL([(e+1)%1,this.hsl[1],this.hsl[2]]);else{l=s.x*this.ratio,a=s.y*this.ratio;let t=this.hue*u.TwoPI+u.PI;t<0&&(t+=2*u.PI),r=Math.atan2(-a,l),r<0&&(r+=2*u.PI);let i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,h=.5*this.tr,c=Math.tan(e)*h,d=Math.sqrt(l*l+a*a),p=Math.sqrt(h*h+c*c);if(d>p){let s=Math.tan(e)*d,o=Math.atan(s/p);o>u.pi60?o=u.pi60:o<-u.pi60&&(o=-u.pi60),r+=o-e,i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,c=Math.tan(e)*h,d=p=Math.sqrt(h*h+c*c)}n=Math.sin(i)*d/this.tsl+.5;let m=1-2*Math.abs(n-.5);o=(Math.cos(i)*d+this.tr/2)/(1.5*this.tr)/m,o=u.clamp(o,0,1),this.setHSL([this.hsl[0],o,n])}}setHeight(){this.h=this.isOpen?this.wfixe+this.baseH+5:this.baseH,this.s[0].height=this.h+"px",this.zone.h=this.h}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(){super.open(),this.setHeight(),this.up&&(this.zone.y-=this.wfixe+5);let t=this.h-this.baseH;this.s[3].visibility="visible",this.parentHeight(t)}close(){super.close(),this.up&&(this.zone.y+=this.wfixe+5);let t=this.h-this.baseH;this.setHeight(),this.s[3].visibility="hidden",this.parentHeight(-t)}update(t){let s=h.rgbToHex(h.hslToRgb([this.hsl[0],1,.5]));this.moveMarkers(),this.value=this.bcolor,this.setSvg(this.c[3],"fill",s,2,0),this.s[2].background=this.bcolor,this.notext||(this.c[2].textContent=h.htmlToHex(this.bcolor)),this.invert=h.findDeepInver(this.rgb),this.s[2].color=this.invert?"#fff":"#000",t&&("array"===this.ctype&&this.send(this.rgb),"rgb"===this.ctype&&this.send(h.htmlRgb(this.rgb)),"hex"===this.ctype&&this.send(h.htmlToHex(this.value)),"html"===this.ctype&&this.send())}setValue(t){t instanceof Array?this.value=h.rgbToHex(t):isNaN(t)?this.value=t:this.value=h.hexToHtml(t),this.setColor(this.value),this.update()}setColor(t){let s=h.unpack(t);return this.bcolor!==t&&s&&(this.bcolor=t,this.rgb=s,this.hsl=h.rgbToHsl(this.rgb),this.hue=this.hsl[0],this.update()),this}setHSL(t){return this.hsl=t,this.rgb=h.hslToRgb(t),this.bcolor=h.rgbToHex(this.rgb),this.update(!0),this}moveMarkers(){let t=this.pp,s=h;this.invert;let i=this.hsl[0]*s.TwoPI,e=2/3*s.PI,o=this.tr,n=this.hsl[0],r=this.hsl[1],l=this.hsl[2],a=(i-s.pi90)*s.todeg;n=-i+s.pi90;let c=Math.cos(n)*o,d=-Math.sin(n)*o,u=Math.cos(n-e)*o,p=-Math.sin(n-e)*o,m=Math.cos(n+e)*o,g=-Math.sin(n+e)*o,x=(u+m)/2,v=(p+g)/2;i=(1-2*Math.abs(l-.5))*r;let b=u+(m-u)*l+(c-x)*i,f=p+(g-p)*l+(d-v)*i;t.set(b,f).addScalar(128),this.setSvg(this.c[3],"transform","rotate("+a+" )",2),this.setSvg(this.c[3],"cx",t.x,3),this.setSvg(this.c[3],"cy",t.y,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",2,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",3),this.setSvg(this.c[3],"fill",this.bcolor,3)}rSize(){super.rSize();let t=this.s;t[2].width=this.sb+"px",t[2].left=this.sa+"px",this.cw=this.sb>256?256:this.sb,this.rSizeColor(this.cw),this.decal.x=Math.floor(.5*(this.w-this.wfixe))}rSizeColor(t){if(t===this.wfixe)return;this.wfixe=t;let s=this.s;this.decal.y="up"===this.side?2:this.baseH+2,this.mid=Math.floor(.5*this.wfixe),this.setSvg(this.c[3],"viewBox","0 0 "+this.wfixe+" "+this.wfixe),s[3].width=this.wfixe+"px",s[3].height=this.wfixe+"px",s[3].top=this.decal.y+"px",this.ratio=256/this.wfixe,this.square=1/(this.wfixe/256*60),this.setHeight()}}class u extends r{constructor(t={}){super(t),this.round=Math.round,this.baseH=this.h,this.hplus=t.hplus||50,this.res=t.res||40,this.l=1,this.precision=t.precision||0,this.custom=t.custom||!1,this.names=t.names||["FPS","MS"];let s=t.cc||["220,220,220","255,255,0"];this.adding=t.adding||!1,this.range=t.range||[165,100,100],this.alpha=t.alpha||.25,this.values=[],this.points=[],this.textDisplay=[],this.custom||(this.now=i.getTime(),this.startTime=0,this.prevTime=0,this.frames=0,this.ms=0,this.fps=0,this.mem=0,this.mm=0,this.isMem=!(!self.performance||!self.performance.memory),this.isMem&&(this.names.push("MEM"),s.push("0,255,255")),this.txt=t.name||"Fps");let e=Math.floor(.5*this.h)-3;const h=this.colors;this.c[1].textContent=this.txt,this.c[0].style.cursor="pointer",this.c[0].style.pointerEvents="auto";let o="display:none; left:10px; top:"+this.h+"px; height:"+(this.hplus-8)+"px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid "+h.border+";";0!==this.radius&&(o+="border-radius:"+this.radius+"px;"),this.c[2]=this.dom("path",this.css.basic+o,{}),this.c[2].setAttribute("viewBox","0 0 "+this.res+" 50"),this.c[2].setAttribute("height","100%"),this.c[2].setAttribute("width","100%"),this.c[2].setAttribute("preserveAspectRatio","none"),this.c[3]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; left:0; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.c[4]=this.dom("div",this.css.txt+"position:absolute; left:10px; top:"+(this.h+2)+"px; display:none; width:100%; text-align:center;"),t.bottomLine&&(this.c[4]=this.dom("div",this.css.basic+"width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);")),this.isShow=!1;let n=this.s;n[1].lineHeight=this.h-4,n[1].color=h.text,0!==this.radius&&(n[0].borderRadius=this.radius+"px"),"none"!==this.colors.gborder&&(n[0].border="1px solid "+h.gborder);let r=0;for(r=0;r "+this.names[r]+" ")}for(r=this.names.length;r--;)this.dom("path",null,{fill:"rgba("+s[r]+","+this.alpha+")","stroke-width":1,stroke:"rgba("+s[r]+",1)","vector-effect":"non-scaling-stroke"},this.c[2]);this.init()}mousedown(t){this.isShow?this.close():this.open()}tick(t){this.values=t,this.isShow&&(this.drawGraph(),this.upText())}makePath(t){let s="";s+="M -1 50";for(let i=0;i";this.c[4].innerHTML=i}drawGraph(){let t,s=this.c[2],i=this.names.length,e=0,h=0;for(;i--;)t=this.adding?(this.values[h]+e)*this.range[h]:this.values[h]*this.range[h],this.points[h].shift(),this.points[h].push(50-t),this.setSvg(s,"d",this.makePath(this.points[h]),i+1),e+=this.values[h],h++}open(){super.open(),this.h=this.hplus+this.baseH,this.setSvg(this.c[3],"d",this.svgs.g2),null!==this.group?this.group.calc(this.hplus):this.isUI&&this.main.calc(this.hplus),this.s[0].height=this.h+"px",this.s[2].display="block",this.s[4].display="block",this.isShow=!0,this.custom||i.addListen(this)}close(){super.close(),this.h=this.baseH,this.setSvg(this.c[3],"d",this.svgs.g1),null!==this.group?this.group.calc(-this.hplus):this.isUI&&this.main.calc(-this.hplus),this.s[0].height=this.h+"px",this.s[2].display="none",this.s[4].display="none",this.isShow=!1,this.custom||i.removeListen(this),this.c[4].innerHTML=""}begin(){this.startTime=this.now()}end(){let t=this.now();if(this.ms=t-this.startTime,this.frames++,t>this.prevTime+1e3&&(this.fps=this.round(1e3*this.frames/(t-this.prevTime)),this.prevTime=t,this.frames=0,this.isMem)){let t=performance.memory.usedJSHeapSize,s=performance.memory.jsHeapSizeLimit;this.mem=this.round(954e-9*t),this.mm=t/s}return this.values=[this.fps,this.ms,this.mm],this.drawGraph(),this.upText([this.fps,this.ms,this.mem]),t}listening(){this.custom||(this.startTime=this.end())}rSize(){let t=this.s,s=this.w;t[3].left=this.sa+this.sb-6+"px",t[0].width=s+"px",t[1].width=s+"px",t[2].left="10px",t[2].width=s-20+"px",t[4].width=s-20+"px"}}class p extends r{constructor(t={}){super(t),this.value=void 0!==t.value?t.value:[0,0,0],this.lng=this.value.length,this.precision=void 0!==t.precision?t.precision:2,this.multiplicator=t.multiplicator||1,this.neg=t.neg||!1,this.line=void 0===t.line||t.line,this.autoWidth=void 0===t.autoWidth||t.autoWidth,this.isNumber=!1,this.isDown=!1,this.h=t.h||138,this.rh=this.h-10,this.top=0,this.c[0].style.width=this.w+"px",void 0!==this.c[1]&&(this.c[1].style.width=this.w+"px",this.autoWidth||(this.c[1].style.width="100%",this.c[1].style.justifyContent="center"),this.top=10,this.h+=10),this.gh=this.rh-28,this.gw=this.w-28,this.c[2]=this.dom("div",this.css.txt+"display:block; text-align:center; padding:0px 0px; top:"+(this.h-20)+"px; left:14px; width:"+this.gw+"px; color:"+this.colors.text),this.c[2].innerHTML=this.valueToHtml();let s=this.dom("svg",this.css.basic,{viewBox:"0 0 "+this.w+" "+this.rh,width:this.w,height:this.rh,preserveAspectRatio:"none"});this.setCss(s,{width:this.w,height:this.rh,left:0,top:this.top}),this.dom("path","",{d:"",stroke:this.colors.text,"stroke-width":2,fill:"none","stroke-linecap":"butt"},s),this.dom("rect","",{x:10,y:10,width:this.gw+8,height:this.gh+8,stroke:"rgba(0,0,0,0.3)","stroke-width":1,fill:"none"},s),this.iw=(this.gw-4*(this.lng-1))/this.lng;let i=[];this.cMode=[],this.v=[];for(let t=0;t',e="width:"+100/this.lng+"%;";for(;t--;)s===this.lng-1?i+=""+this.value[s]+"":i+=""+this.value[s]+"",s++;return i}updateSVG(){this.line&&this.setSvg(this.c[3],"d",this.makePath(),0);for(let t=0;tthis.top&&s.ye[i][0]&&s.xthis.distance){let t=Math.atan2(this.tmp.x,this.tmp.y);this.tmp.x=Math.sin(t)*this.distance,this.tmp.y=Math.cos(t)*this.distance}this.pos.copy(this.tmp).divideScalar(this.distance).negate(),this.update()}setValue(t){void 0===t&&(t=[0,0]),this.pos.set(t[0]||0,t[1]||0),this.updateSVG()}update(t){void 0===t&&(t=!0),null!==this.interval&&(this.isDown||(this.pos.lerp(null,.3),this.pos.x=Math.abs(this.pos.x)<.01?0:this.pos.x,this.pos.y=Math.abs(this.pos.y)<.01?0:this.pos.y,this.isUI&&this.main.isCanvas&&this.main.draw())),this.updateSVG(),t&&this.send(),this.pos.isZero()&&this.stopInterval()}updateSVG(){let t=.5*this.diam- -this.pos.x*this.distance,s=.5*this.diam- -this.pos.y*this.distance;if(0===this.model){let i=t+5*this.pos.x+5,e=s+5*this.pos.y+10;this.setSvg(this.c[3],"cx",i*this.ratio,3),this.setSvg(this.c[3],"cy",e*this.ratio,3)}else this.setSvg(this.c[3],"cx",t*this.ratio,3),this.setSvg(this.c[3],"cy",s*this.ratio,3);this.setSvg(this.c[3],"cx",t*this.ratio,4),this.setSvg(this.c[3],"cy",s*this.ratio,4),this.value[0]=1*(this.pos.x*this.multiplicator).toFixed(this.precision),this.value[1]=1*(this.pos.y*this.multiplicator).toFixed(this.precision),this.haveText&&(this.c[2].textContent=this.value)}clear(){this.stopInterval(),super.clear()}}class v extends r{constructor(t={}){super(t),this.isCyclic=t.cyclic||!1,this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.autoWidth=!1,this.setTypeNumber(t),this.minw=this.w,this.diam=t.diam||this.w,this.mPI=.8*Math.PI,this.toDeg=180/Math.PI,this.cirRange=2*this.mPI,this.offset=new n,this.h=t.h||this.w+10,this.c[0].style.width=this.w+"px",this.c[0].style.display="block",void 0!==this.c[1]&&(this.c[1].style.width="100%",this.c[1].style.justifyContent="center",this.top=10,this.h+=10),this.percent=0,this.cmode=0;let s=this.colors;this.c[2]=this.dom("div",this.css.txt+"justify-content:center; top:"+(this.h-20)+"px; width:100%; color:"+s.text),this.c[3]=this.getKnob(),this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1),this.setSvg(this.c[3],"stroke",s.text,3),this.setSvg(this.c[3],"d",this.makeGrad(),3),this.setSvg(this.c[3],"viewBox","0 0 "+this.diam+" "+this.diam),this.setCss(this.c[3],{width:this.diam,height:this.diam,left:0,top:this.top}),this.model>0&&(h.dom("path","",{d:"",stroke:s.text,"stroke-width":2,fill:"none","stroke-linecap":"round"},this.c[3]),2==this.model&&(h.addSVGGlowEffect(),this.setSvg(this.c[3],"style",'filter: url("#UILGlow");',4))),this.r=0,this.init(),this.update()}mode(t){let s=this.colors;if(this.cmode===t)return!1;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1);break;case 1:this.s[2].color=s.textOver,this.setSvg(this.c[3],"fill",s.select,0),this.setSvg(this.c[3],"stroke",s.textOver,1)}return this.cmode=t,!0}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"knob"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=-Math.atan2(s.x,s.y),null!==this.oldr&&(this.r=Math.abs(this.r-this.oldr)>Math.PI?this.oldr:this.r),this.r=this.r>this.mPI?this.mPI:this.r,this.r=this.r<-this.mPI?-this.mPI:this.r;let i=1/this.cirRange,e=(this.r+this.mPI)*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=Math.floor(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("knob"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s5?(s=this.range/this.step,t=(a-c)/s):(t=(a-c)/l*2,s=32);for(let c=0;c<=s;++c)i=a-t*c,e=l+44*Math.sin(i),h=l+44*Math.cos(i),o=l+40*Math.sin(i),n=l+40*Math.cos(i),r+="M"+e+" "+h+" L"+o+" "+n+" ";return r}update(t){this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range;let s=Math.PI+this.mPI,i=this.percent*this.cirRange-this.mPI,e=Math.sin(i),o=Math.cos(i),n=25*e+64,r=-25*o+64,l=20*e+64,a=-20*o+64;if(this.setSvg(this.c[3],"d","M "+n+" "+r+" L "+l+" "+a,1),this.model>0){let t=36*Math.sin(s)+64,n=36*Math.cos(s)+64,r=36*e+64,l=-36*o+64,a=i<=Math.PI-this.mPI?0:1;this.setSvg(this.c[3],"d","M "+t+","+n+" A 36,36 1 "+a+" 1 "+r+","+l,4);let c=h.pack(h.lerpColor(h.unpack(h.ColorLuma(this.colors.text,-.75)),h.unpack(this.colors.text),this.percent));this.setSvg(this.c[3],"stroke",c,4)}t&&this.send()}}class b extends r{constructor(t={}){super(t),this.hideCurrent=!1,this.path=t.path||"",this.format=t.format||"",this.isWithImage=""!==this.path,this.preLoadComplete=!1,this.tmpImage={},this.tmpUrl=[],this.m=void 0!==t.m?t.m:5;let s=t.align||"left",i=t.scrollSize||10;this.ss=i+1,this.sMode=0,this.tMode=0,this.listOnly=t.listOnly||!1,this.staticTop=t.staticTop||!1,this.isSelectable=this.listOnly,void 0!==t.select&&(t.selectable=t.select),void 0!==t.selectable&&(this.isSelectable=t.selectable),""===this.txt&&(this.p=0);let e=Math.floor(.5*this.h)-3,h=this.colors;if(this.c[2]=this.dom("div",this.css.basic+"top:0; display:none; border-radius:"+this.radius+"px;"),this.c[3]=this.dom("div",this.css.item+"padding:0px "+this.m+"px; margin-bottom:0px; position:absolute; justify-content:"+s+"; text-align:"+s+"; line-height:"+(this.h-4)+"px; top:1px; background:"+h.button+"; height:"+(this.h-2)+"px; border:1px solid "+h.border+"; border-radius:"+this.radius+"px;"),this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.scrollerBack=this.dom("div",this.css.basic+"right:0px; width:"+i+"px; background:"+h.back+"; display:none;"),this.scroller=this.dom("div",this.css.basic+"right:"+.5*(i-.25*i)+"px; width:"+.25*i+"px; background:"+h.text+"; display:none; "),this.c[3].style.color=h.text,this.list=[],this.refObject=null,t.list)if(t.list instanceof Array)this.list=t.list;else if(t.list instanceof Object){this.refObject=t.list;for(let t in this.refObject)this.list.push(t)}this.items=[],this.prevName="",this.tmpId=0,this.baseH=this.h,this.itemHeight=t.itemHeight||this.h,this.full=t.full||!1,this.py=0,this.ww=this.sb,this.scroll=!1,this.isDown=!1,this.current=null,this.side=t.side||"down",this.up="down"===this.side?0:1,this.up?(this.c[2].style.top="auto",this.c[3].style.top="auto",this.c[4].style.top="auto",this.c[2].style.bottom=this.h-2+"px",this.c[3].style.bottom="1px",this.c[4].style.bottom=e+"px"):this.c[2].style.top=this.baseH+"px",this.listIn=this.dom("div",this.css.basic+"left:0; top:0; width:100%; background:none;"),this.listIn.name="list",this.topList=0,this.c[2].appendChild(this.listIn),this.c[2].appendChild(this.scrollerBack),this.c[2].appendChild(this.scroller),void 0!==t.value?isNaN(t.value)?this.value=t.value:this.value=this.list[t.value]:this.value=this.list[0],this.isOpenOnStart=t.open||!1,this.listOnly&&(this.baseH=5,this.c[3].style.display="none",this.c[4].style.display="none",this.c[2].style.top=this.baseH+"px",this.isOpenOnStart=!0),this.miniCanvas=t.miniCanvas||!1,this.canvasBg=t.canvasBg||"rgba(0,0,0,0)",this.imageSize=t.imageSize||[20,20],this.drag=t.drag||!1,this.dragout=t.dragout||!1,this.dragstart=t.dragstart||null,this.dragend=t.dragend||null,this.setList(this.list),this.init(),this.isWithImage&&this.preloadImage(),this.isOpenOnStart&&this.open(!0),this.baseH+=this.mtop}preloadImage(){this.preLoadComplete=!1,this.tmpImage={};for(let t=0;tthis.h-this.baseH)return"title";if(this.scroll&&s.x>this.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}else{if(s.ythis.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}}return""}testItems(t){let s,i,e,h="",o=this.items,n=o.length;for(;n--;)if(s=o[n],i=s.posy+this.topList,e=s.posy+this.itemHeight+1+this.topList,t>=i&&t<=e)return h="item"+n,this.modeItem(0),this.current=s,this.modeItem(1),h;return h}modeItem(t){if(!this.current)return;this.current.select&&0===t&&(t=2);let s=this.colors;switch(t){case 0:this.current.style.background=s.back,this.current.style.color=s.text;break;case 1:this.current.style.background=s.over,this.current.style.color=s.textOver;break;case 2:this.current.style.background=s.select,this.current.style.color=s.textSelect}}unSelected(){this.current&&(this.modeItem(0),this.current=null)}selected(){this.current&&(this.resetItems(),this.modeItem(2),this.current.select=!0)}resetItems(){let t=this.items.length;for(;t--;)this.items[t].select=!1,this.items[t].style.background=this.colors.back,this.items[t].style.color=this.colors.text}hideActive(){this.hideCurrent&&(this.current&&(this.tmpId=this.current.id),this.resetHide())}resetHide(){console.log(this.tmpId);let t=this.items.length;for(;t--;)t===this.tmpId?(this.items[t].style.height="0px",this.items[t].posy=-1):(this.items[t].style.height=this.itemHeight+"px",this.items[t].posy=(this.itemHeight+1)*(t-1))}mouseup(t){this.isDown=!1}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s?(this.isDown=!0,this.mousemove(t)):"title"===s?(this.modeTitle(2),this.listOnly||(this.hideActive(),this.isOpen?this.close():this.open())):this.current&&(this.value=this.list[this.current.id],this.isSelectable&&this.selected(),this.send(this.value),this.listOnly||(this.close(),this.setTopItem())),!0)}mousemove(t){let s=!1,i=this.testZone(t);if(!i)return s;if("title"===i)this.unSelected(),this.modeTitle(1),this.cursor("pointer");else if("scroll"===i){if(this.cursor("s-resize"),this.modeScroll(1),this.isDown){this.modeScroll(2);let s=this.zone.y+this.baseH-2;this.update(t.clientY-s-.5*this.sh)}}else this.modeTitle(0),this.modeScroll(0),this.cursor("pointer");return i!==this.prevName&&(s=!0),this.prevName=i,s}wheel(t){return"title"!==this.testZone(t)&&(this.py+=10*t.delta,this.update(this.py),!0)}reset(){this.prevName="",this.unSelected(),this.modeTitle(0),this.modeScroll(0)}modeScroll(t){if(t===this.sMode)return;let s=this.scroller.style,i=this.colors;switch(t){case 0:s.background=i.text;break;case 1:case 2:s.background=i.select}this.sMode=t}modeTitle(t){if(t===this.tMode)return;let s=this.s,i=this.colors;switch(t){case 0:s[3].color=i.text,s[3].background=i.button;break;case 1:s[3].color=i.textOver,s[3].background=i.overoff;break;case 2:s[3].color=i.textSelect,s[3].background=i.overoff}this.tMode=t}clearList(){for(;this.listIn.children.length;)this.listIn.removeChild(this.listIn.lastChild);this.items=[]}setList(t){this.clearList(),this.list=t,this.length=this.list.length;let s,e,h=this.hideCurrent?this.length-1:this.length;this.maxItem=this.full?h:5,this.maxItem=hthis.maxHeight&&(this.ww=this.sb-this.ss,this.scroll=!0),this.miniCanvas&&(this.tmpCanvas=document.createElement("canvas"),this.tmpCanvas.width=this.imageSize[0],this.tmpCanvas.height=this.imageSize[1],this.tmpCtx=this.tmpCanvas.getContext("2d"),this.tmpCtx.fillStyle=this.canvasBg,this.tmpCtx.fillRect(0,0,this.imageSize[0],this.imageSize[1]));for(let t=0;tthis.range?this.range:t,this.topList=-Math.floor(t/this.ratio),this.listIn.style.top=this.topList+"px",this.scroller.style.top=Math.floor(t)+"px",this.py=t)}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(t){super.open(),this.update(0),this.h=this.maxHeight+this.baseH+5,this.scroll?(this.scroller.style.display="block",this.scrollerBack.style.display="block"):(this.topList=0,this.h=this.baseH+5+this.max,this.scroller.style.display="none",this.scrollerBack.style.display="none"),this.s[0].height=this.h+"px",this.s[2].display="block",this.up?(this.zone.y-=this.h-(this.baseH-10),this.setSvg(this.c[4],"d",this.svgs.g1)):this.setSvg(this.c[4],"d",this.svgs.g2),this.rSizeContent();let s=this.h-this.baseH;this.zone.h=this.h,t||this.parentHeight(s)}close(){super.close(),this.up&&(this.zone.y+=this.h-(this.baseH-10));let t=this.h-this.baseH;this.h=this.baseH,this.s[0].height=this.h+"px",this.s[2].display="none",this.setSvg(this.c[4],"d",this.svgs.g1),this.zone.h=this.h,this.parentHeight(-t)}text(t){this.c[3].textContent=t}rSizeContent(){let t=this.length;for(;t--;)this.listIn.children[t].style.width=this.ww+"px"}rSize(){super.rSize();let t=this.s,s=this.sb,i=this.sa;void 0!==t[2]&&(t[2].width=s+"px",t[2].left=i+"px",t[3].width=s+"px",t[3].left=i+"px",t[4].left=i+s-15+"px",this.ww=s,this.max>this.maxHeight&&(this.ww=s-this.ss),this.isOpen&&this.rSizeContent())}}class f extends r{constructor(t={}){super(t),this.setTypeNumber(t),this.allway=t.allway||!1,this.isDown=!1,this.value=[0],this.multy=1,this.invmulty=1,this.isSingle=!0,this.isAngle=!1,this.isVector=!1,t.isAngle&&(this.isAngle=!0,this.multy=h.torad,this.invmulty=h.todeg),this.isDrag=t.drag||!1,void 0!==t.value&&(isNaN(t.value)?t.value instanceof Array?(this.value=t.value,this.isSingle=!1):t.value instanceof Object&&(this.value=[],void 0!==t.value.x&&(this.value[0]=t.value.x),void 0!==t.value.y&&(this.value[1]=t.value.y),void 0!==t.value.z&&(this.value[2]=t.value.z),void 0!==t.value.w&&(this.value[3]=t.value.w),this.isSingle=!1,this.isVector=!0):this.value=[t.value]),this.lng=this.value.length,this.tmp=[],this.current=-1,this.prev={x:0,y:0,d:0,v:0};let s=this.colors;this.c[2]=this.dom("div",this.css.basic+" background:"+s.select+"; top:4px; width:0px; height:"+(this.h-8)+"px;"),this.cMode=[];let i=this.lng;for(;i--;)this.isAngle&&(this.value[i]=(180*this.value[i]/Math.PI).toFixed(this.precision)),this.c[3+i]=this.dom("div",this.css.txtselect+"top:1px; height:"+(this.h-2)+"px; color:"+s.text+"; background:"+s.back+"; borderColor:"+s.border+"; border-radius:"+this.radius+"px;"),t.center&&(this.c[2+i].style.textAlign="center"),this.c[3+i].textContent=this.value[i],this.c[3+i].style.color=this.colors.text,this.c[3+i].isNum=!0,this.cMode[i]=0;this.selectId=3+this.lng,this.c[this.selectId]=this.dom("div",this.css.txtselect+"position:absolute; top:2px; height:"+(this.h-4)+"px; padding:0px 0px; width:0px; color:"+s.textSelect+"; background:"+s.select+"; border:none; border-radius:0px;"),this.cursorId=4+this.lng,this.c[this.cursorId]=this.dom("div",this.css.basic+"top:2px; height:"+(this.h-4)+"px; width:0px; background:"+s.text+";"),this.init()}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";let i=this.lng,e=this.tmp;for(;i--;)if(s.x>e[i][0]&&s.x 0";this.easing=t.easing||1,this.setTypeNumber(t),this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.isDown=!1,this.isOver=!1,this.allway=t.allway||!1,this.isDeg=t.isDeg||!1,this.isCyclic=t.cyclic||!1,this.firstImput=!1;let s=this.colors;if(this.c[2]=this.dom("div",this.css.txtselect+"border:none; background:none; width:47px; color:"+s.text+";"),this.c[3]=this.dom("div",this.css.basic+" top:0; height:"+this.h+"px;"),this.c[4]=this.dom("div",this.css.basic+"background:"+s.back+"; top:2px; height:"+(this.h-4)+"px;"),this.c[5]=this.dom("div",this.css.basic+"left:4px; top:5px; height:"+(this.h-10)+"px; background:"+s.text+";"),this.c[2].isNum=!0,this.c[2].style.height=this.h-2+"px",this.c[2].style.lineHeight=this.h-10+"px",0!==this.model){let t=4,i=4,e=8,h=this.h-6,o=16;2===this.model&&(t=0,i=2,e=4,o=2,h=.5*(this.h-6)),3===this.model&&(this.c[5].style.visible="none"),this.c[4].style.borderRadius=t+"px",this.c[4].style.height=e+"px",this.c[4].style.top=.5*this.h-i+"px",this.c[5].style.borderRadius=.5*t+"px",this.c[5].style.height=i+"px",this.c[5].style.top=.5*this.h-.5*i+"px",this.c[6]=this.dom("div",this.css.basic+"border-radius:"+o+"px; margin-left:"+.5*-h+"px; background:"+s.text+"; left:4px; top:3px; height:"+(this.h-6)+"px; width:"+h+"px;")}this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>=this.txl?"text":s.x>=this.sa?"scroll":""}mouseup(t){this.isDown&&(this.isDown=!1)}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s&&(this.isDown=!0,this.old=this.value,this.mousemove(t)),!0)}mousemove(t){let s=!1;if("scroll"===this.testZone(t)?(this.mode(1),this.cursor("w-resize")):this.cursor(),this.isDown){let i=(t.clientX-(this.zone.x+this.sa)-3)/this.ww;i=Math.min(1,Math.max(0,i));let e=Math.pow(i,this.easing)*this.range+this.min,h=i*this.range+this.min;this.sliderValue=this.numValue(h);let o,n=e-this.old;(n>=this.step||n<=this.step)&&(o=Math.floor(n/this.step),this.value=this.numValue(this.old+o*this.step),this.update(!0),this.old=this.value),s=!0}return s}wheel(t){if("scroll"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s=this.sa?"text":""}mouseup(t){if(this.editable)return!!this.isDown&&(this.isDown=!1,this.mousemove(t))}mousedown(t){if(!this.editable)return;let s=this.testZone(t);return!this.isDown&&(this.isDown=!0,"text"===s&&this.setInput(this.c[2]),this.mousemove(t))}mousemove(t){if(!this.editable)return;let s=0;return"text"===this.testZone(t)?this.cursor("text"):this.cursor(),this.isDown&&(s=t.clientX-this.zone.x),this.upInput(s-this.sa-3,this.isDown)}update(){this.c[2].textContent=this.value}reset(){this.cursor()}select(t,s,i,e){let h=this.s,o=this.sa+5;h[4].width="1px",h[4].left=o+s+"px",h[3].left=o+s+"px",h[3].width=i+"px",this.c[3].innerHTML=e}unselect(){let t=this.s;t&&(t[3].width="0px",this.c[3].innerHTML="t",t[4].width="0px")}validate(t){this.allway&&(t=!0),this.value=this.c[2].textContent,""!==this.value?this.c[5].textContent="":this.c[5].textContent=this.placeHolder,t&&this.send()}rSize(){super.rSize();let t=this.s;t[2].left=this.sa+"px",t[2].width=this.sb+"px",t[5].left=this.sa+"px",t[5].width=this.sb+"px"}}class k extends r{constructor(t={}){super(t);let s=t.prefix||"";this.c[2]=this.dom("div",this.css.txt+"justify-content:right; width:60px; line-height:"+(this.h-8)+"px; color:"+this.colors.text),31===this.h&&(this.s[0].height=this.h+"px",this.s[1].top="8px",this.c[2].style.top="8px");let i=this.s;i[1].justifyContent=t.align||"left",i[1].fontWeight=t.fontWeight||"bold",this.c[1].textContent=this.txt.substring(0,1).toUpperCase()+this.txt.substring(1).replace("-"," "),this.c[2].textContent=s,this.init()}text(t){this.c[1].textContent=t}text2(t){this.c[2].textContent=t}rSize(){super.rSize(),this.s[1].width=this.w+"px",this.s[2].left=this.w+"px"}setColor(t){this.s[1].color=t,this.s[2].color=t}}class S extends r{constructor(t={}){super(t),this.value=t.value||"",this.isDown=!1,this.onActif=t.onActif||function(){};const s=this.colors;this.c[2]=this.dom("div",this.css.txt+this.css.button+" top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.buttonBorder+"; border-radius:15px; width:30px; left:10px;"),this.c[3]=this.dom("div",this.css.txtselect+"height:"+(this.h-4)+"px; background:"+s.inputBg+"; borderColor:"+s.inputBorder+"; border-radius:"+this.radius+"px;"),this.c[3].textContent=this.value;let i=Math.floor(.5*this.h)-7;this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:14px; height:14px; left:5px; top:"+i+"px;",{d:this.svgs.cursor,fill:s.text,stroke:"none"}),this.stat=1,this.isActif=!1,this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>this.sa&&s.xthis.sa&&s.xi[r][0]&&s.xe[r][0]&&s.ythis.lng-1&&(h=-1)),h}mouseup(t){return!!this.isDown&&(this.isDown=!1,-1!==this.res&&(this.value=this.values[this.res],this.send()),this.mousemove(t))}mousedown(t){return!this.isDown&&(this.isDown=!0,this.mousemove(t))}mousemove(t){let s=!1;return this.res=this.testZone(t),-1!==this.res?(this.cursor("pointer"),s=this.modes(this.isDown?3:2,this.res)):s=this.reset(),s}modes(t=1,s=-1){let i,e,h=this.lng,o=!1;for(;h--;)e=t,i=!!this.isSelectable&&this.values[h]===this.value,h===s?i&&2===e&&(e=3):(e=1,i&&(e=4)),this.mode(e,h)&&(o=!0);return o}mode(t,s){let i=!1,e=this.colors,h=this.buttons,o=s;if(this.stat[s]!==t){switch(this.stat[s]=t,t){case 1:h[o].style.color=e.text,h[o].style.background=e.button;break;case 2:h[o].style.color=e.textOver,h[o].style.background=e.overoff;break;case 3:h[o].style.color=e.textOver,h[o].style.background=e.over;break;case 4:h[o].style.color=e.textSelect,h[o].style.background=e.select}i=!0}return i}reset(){return this.res=-1,this.cursor(),this.modes()}label(t,s){this.buttons[s].textContent=t}icon(t,s,i){this.buttons[i].style.padding=(s||0)+"px 0px",this.buttons[i].innerHTML=t}testW(){let t=!1;if(3*this.spaces[0]+2*this.bsizeMax>this.w?(this.bsize[0]=.5*(this.w-3*this.spaces[0]),t=!0):this.bsize[0]!==this.bsizeMax&&(this.bsize[0]=this.bsizeMax,t=!0),!t)return;let s=this.buttons.length;for(;s--;)this.buttons[s].style.width=this.bsize[0]+"px"}rSize(){let t;super.rSize(),this.testW(),this.tmpX=[],this.tmpY=[];for(let s=0;sthis.h-this.c[2].offsetHeight?"text":"pad"}mouseup(t){return this.isDown=!1,this.mode(0)}mousedown(t){if("pad"===this.testZone(t))return this.isDown=!0,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=.5*this.w-(t.clientX-this.zone.x),i=.5*this.diam-(t.clientY-this.zone.y-this.ytop),e=256/this.diam;s=-s*e,i=-i*e,s=h.clamp(s,-this.maxPos,this.maxPos),i=h.clamp(i,-this.maxPos,this.maxPos),this.setPos([s,i]),this.update(!0)}mode(t){if(this.cmode===t)return!1;let s=this.colors;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.back,0),this.setSvg(this.c[3],"fill",s.button,1),this.setSvg(this.c[3],"stroke",s.back,2),this.setSvg(this.c[3],"stroke",s.back,3),this.setSvg(this.c[3],"stroke",s.text,4);break;case 1:this.s[2].color=s.textSelect,this.setSvg(this.c[3],"fill",s.backoff,0),this.setSvg(this.c[3],"fill",s.overoff,1),this.setSvg(this.c[3],"stroke",s.backoff,2),this.setSvg(this.c[3],"stroke",s.backoff,3),this.setSvg(this.c[3],"stroke",s.textSelect,4)}return this.cmode=t,!0}update(t){this.c[2].textContent=this.value,this.updateSVG(),t&&this.send()}updateSVG(){1==this.model&&(this.setSvg(this.c[3],"y1",this.pos.y,2),this.setSvg(this.c[3],"y2",this.pos.y,2),this.setSvg(this.c[3],"x1",this.pos.x,3),this.setSvg(this.c[3],"x2",this.pos.x,3)),this.setSvg(this.c[3],"cx",this.pos.x,4),this.setSvg(this.c[3],"cy",this.pos.y,4)}setPos(t){this.pos.set(t[0]+128,t[1]+128);let s=1/this.maxPos;this.value[0]=(t[0]*s*this.range).toFixed(this.precision),this.value[1]=(t[1]*s*this.range).toFixed(this.precision)}setValue(t,s=!1){void 0===t&&(t=this.value),this.value[0]=1*Math.min(this.max,Math.max(this.min,t[0])).toFixed(this.precision),this.value[1]=1*Math.min(this.max,Math.max(this.min,t[1])).toFixed(this.precision),this.pos.set(this.value[0]/this.range*this.maxPos+128,this.value[1]/this.range*this.maxPos+128),this.update(s)}}const T=function(){let t,s,e=arguments,h=!1,o=null;"string"==typeof e[0]?(t=e[0],s=e[1]||{}):"object"==typeof e[0]&&(h=!0,void 0===e[2]&&[].push.call(e,{}),t=e[2].type?e[2].type:O(e[0][e[1]],e[2]),s=e[2],s.name=e[1],s.hasOwnProperty("displayName")&&(s.name=s.displayName),"list"!==t||s.list?s.value=e[0][e[1]]:s.list=e[0][e[1]]);let n=t.toLowerCase();switch("group"===n&&(s.add=T),n){case"bool":case"boolean":o=new l(s);break;case"button":o=new a(s);break;case"circular":o=new c(s);break;case"color":o=new d(s);break;case"fps":o=new u(s);break;case"graph":o=new p(s);break;case"group":o=new g(s);break;case"joystick":o=new x(s);break;case"knob":o=new v(s);break;case"list":o=new b(s);break;case"numeric":case"number":o=new f(s);break;case"slide":o=new w(s);break;case"textInput":case"string":o=new y(s);break;case"title":case"text":o=new k(s);break;case"select":o=new S(s);break;case"bitmap":o=new M(s);break;case"selector":o=new I(s);break;case"empty":case"space":o=new m(s);break;case"item":o=new C(s);break;case"grid":o=new L(s);break;case"pad2d":case"pad":o=new z(s)}if(null!==o)return i.needResize=!0,h&&o.setReferency(e[0],e[1]),o},O=function(t,s){let i="slide";return"boolean"==typeof t?i="bool":"string"==typeof t?i="#"===t.substring(0,1)?"color":"string":"number"==typeof t?i=s.ctype?"color":"slide":"array"==typeof t&&t instanceof Array?"number"==typeof t[0]?i="number":"string"==typeof t[0]&&(i="list"):"object"==typeof t&&t instanceof Object&&(i=void 0!==t.x?"number":"list"),i};class D{constructor(t={}){this.isGui=!0,this.name="gui",this.canvas=null,this.screen=null,this.plane=t.plane||null,t.config&&(t.colors=t.config),t.colors?this.setConfig(t.colors):this.colors=h.defineColor(t),this.css=h.cloneCss(),this.isReset=!0,this.tmpAdd=null,this.isCanvas=t.isCanvas||!1,this.isCanvasOnly=!1,i.addDOMEventListeners=!t.hasOwnProperty("addDOMEventListeners")||t.addDOMEventListeners,this.callback=void 0===t.callback?null:t.callback,this.forceHeight=t.maxHeight||0,this.lockHeight=t.lockHeight||!1,this.isItemMode=void 0!==t.itemMode&&t.itemMode,this.cn="",this.size=h.size,void 0!==t.p&&(this.size.p=t.p),void 0!==t.w&&(this.size.w=t.w),void 0!==t.h&&(this.size.h=t.h),void 0!==t.s&&(this.size.s=t.s),this.size.h=this.size.h<11?11:this.size.h,this.local=(new n).neg(),this.zone={x:0,y:0,w:this.size.w,h:0},this.mouse=(new n).neg(),this.h=0,this.sw=0,this.margin=this.colors.sy,this.marginDiv=h.isDivid(this.margin),this.isWithClose=void 0===t.close||t.close,this.bh=this.isWithClose?this.size.h:0,this.autoResize=void 0===t.autoResize||t.autoResize,this.isCenter=t.center||!1,this.cssGui=void 0!==t.css?t.css:this.isCenter?"":"right:10px;",this.isOpen=void 0===t.open||t.open,this.isDown=!1,this.isScroll=!1,this.uis=[],this.current=-1,this.proto=null,this.isEmpty=!0,this.decal=0,this.ratio=1,this.oy=0,this.isNewTarget=!1;let s=this.colors;this.content=h.dom("div",this.css.basic+" width:0px; height:auto; top:0px; background:"+s.content+"; "+this.cssGui),this.innerContent=h.dom("div",this.css.basic+"width:100%; top:0; left:0; height:auto; overflow:hidden;"),this.content.appendChild(this.innerContent),this.useFlex=!0;let e=this.useFlex?"display:flex; flex-flow: row wrap;":"";this.inner=h.dom("div",this.css.basic+e+"width:100%; left:0; "),this.innerContent.appendChild(this.inner),this.scrollBG=h.dom("div",this.css.basic+"right:0; top:0; width:"+(this.size.s-1)+"px; height:10px; display:none; background:"+s.background+";"),this.content.appendChild(this.scrollBG),this.scroll=h.dom("div",this.css.basic+"background:"+s.button+"; right:2px; top:0; width:"+(this.size.s-4)+"px; height:10px;"),this.scrollBG.appendChild(this.scroll),this.bottomText=t.bottomText||["open","close"];let o=s.radius;this.bottom=h.dom("div",this.css.txt+"width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:"+o+"px; border-bottom-left-radius:"+o+"px; justify-content:center; height:"+this.bh+"px; line-height:"+(this.bh-5)+"px; color:"+s.text+";"),this.content.appendChild(this.bottom),this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.bottom.style.background=s.background,this.parent=void 0!==t.parent?t.parent:null,this.parent=void 0!==t.target?t.target:this.parent,null!==this.parent||this.isCanvas||(this.parent=document.body),null!==this.parent&&this.parent.appendChild(this.content),this.isCanvas&&null===this.parent&&(this.isCanvasOnly=!0),this.isCanvasOnly?(this.content.style.left="0px",this.content.style.right="auto",t.transition=0):this.content.style.pointerEvents="auto",this.transition=void 0!==t.transition?t.transition:h.transition,this.transition&&setTimeout(this.addTransition.bind(this),1e3),this.setWidth(),this.isCanvas&&this.makeCanvas(),i.add(this)}triggerMouseDown(t,s){i.handleEvent({type:"pointerdown",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}triggerMouseMove(){i.handleEvent({type:"pointermove",clientX:-1,clientY:-1,delta:0,key:null,keyCode:NaN})}triggerMouseUp(t,s){i.handleEvent({type:"pointerup",clientX:t,clientY:s,delta:0,key:null,keyCode:NaN})}setTop(t,s){this.content.style.top=t+"px",void 0!==s&&(this.forceHeight=s),this.calc(),i.needReZone=!0}addTransition(){this.transition&&!this.isCanvas&&(this.innerContent.style.transition="height "+this.transition+"s ease-out",this.content.style.transition="height "+this.transition+"s ease-out",this.bottom.style.transition="top "+this.transition+"s ease-out");let t=this.uis.length;for(;t--;)this.uis[t].addTransition()}onDraw(){}makeCanvas(){this.canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),this.canvas.width=this.zone.w,this.canvas.height=this.forceHeight?this.forceHeight:this.zone.h}draw(t){if(null===this.canvas)return;let s=this.zone.w,e=this.forceHeight?this.forceHeight:this.zone.h;i.toCanvas(this,s,e,t)}getDom(){return this.content}noMouse(){this.mouse.neg()}setMouse(t,s=!0){s?this.mouse.set(Math.round(t.x*this.canvas.width),this.canvas.height-Math.round(t.y*this.canvas.height)):this.mouse.set(Math.round(t.x*this.canvas.width),Math.round(t.y*this.canvas.height))}setConfig(t){h.setText(),this.colors=h.defineColor(t)}setColors(t){for(let s in t)this.colors[s]&&(this.colors[s]=t[s])}setText(t,s,i,e){h.setText(t,s,i,e)}hide(t){this.content.style.visibility=t?"hidden":"visible"}display(t=!1){this.content.style.visibility=t?"visible":"hidden"}onChange(t){return this.callback=t||null,this}mode(t){let s=!1,e=this.colors;if(t!==this.cn){switch(this.cn=t,t){case"def":i.cursor(),this.scroll.style.background=e.button,this.bottom.style.background=e.background,this.bottom.style.color=e.text;break;case"scrollOver":i.cursor("ns-resize"),this.scroll.style.background=e.select;break;case"scrollDown":this.scroll.style.background=e.select;break;case"bottomOver":i.cursor("pointer"),this.bottom.style.background=e.backgroundOver,this.bottom.style.color=e.textOver}s=!0}return s}clearTarget(){return-1!==this.current&&(this.proto.s&&(this.proto.uiout(),this.proto.reset()),this.proto=null,this.current=-1,i.cursor(),!0)}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";this.isReset=!1;let i="",e=this.isScroll?this.zone.w-this.size.s:this.zone.w;return i=s.y>this.zone.h-this.bh&&s.ye?"scroll":"content",i}handleEvent(t){let s=t.type,e=!1,h=!1,o=this.testZone(t);if("mouseup"===s&&this.isDown&&(this.isDown=!1),"mousedown"!==s||this.isDown||(this.isDown=!0),this.isDown&&this.isNewTarget&&(i.clearInput(),this.isNewTarget=!1),o){switch(o){case"content":t.clientY=this.isScroll?t.clientY+this.decal:t.clientY,i.isMobile&&"mousedown"===s&&this.getNext(t,e),this.proto&&(h=this.proto.handleEvent(t)),"mousemove"===s&&(e=this.mode("def")),"wheel"===s&&!h&&this.isScroll&&(e=this.onWheel(t)),i.lock||this.getNext(t,e);break;case"bottom":this.clearTarget(),"mousemove"===s&&(e=this.mode("bottomOver")),"mousedown"===s&&(this.isOpen=!this.isOpen,this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.calc(),this.mode("def"),e=!0);break;case"scroll":this.clearTarget(),"mousemove"===s&&(e=this.mode("scrollOver")),"mousedown"===s&&(e=this.mode("scrollDown")),"wheel"===s&&(e=this.onWheel(t)),this.isDown&&this.update(t.clientY-this.zone.y-.5*this.sh)}this.isDown&&(e=!0),h&&(e=!0),"keyup"===s&&(e=!0),"keydown"===s&&(e=!0),e&&this.draw()}}getNext(t,s){let e=i.findTarget(this.uis,t);e!==this.current&&(this.clearTarget(),this.current=e,this.isNewTarget=!0),-1!==e&&(this.proto=this.uis[this.current],this.proto.uiover())}onWheel(t){return this.oy+=20*t.delta,this.update(this.oy),!0}reset(t){if(this.isReset)return;this.mouse.neg(),this.isDown=!1;let s=this.mode("def"),i=this.clearTarget();(s||i)&&this.draw(!0),this.isReset=!0}add(){let t=arguments,s=!1;"object"==typeof t[1]?(t[1].isUI=!0,t[1].main=this,s=!!t[1].ontop&&t[1].ontop):"string"==typeof t[1]&&(void 0===t[2]?[].push.call(t,{isUI:!0,main:this}):(t[2].isUI=!0,t[2].main=this,s=!!t[2].ontop&&t[2].ontop));let i=T.apply(this,t);if(null!==i)return s?this.uis.unshift(i):this.uis.push(i),this.calc(),this.isEmpty=!1,i}remove(t){t.dispose&&t.dispose()}clearOne(t){let s=this.uis.indexOf(t);-1!==s&&(this.inner.removeChild(this.uis[s].c[0]),this.uis.splice(s,1),this.calc())}empty(){let t,s=this.uis.length;for(;s--;)t=this.uis.pop(),this.inner.removeChild(t.c[0]),t.dispose();this.uis=[],this.isEmpty=!0,this.calc()}clear(){this.empty()}clear2(){setTimeout(this.empty.bind(this),0)}dispose(){this.clear(),null!==this.parent&&this.parent.removeChild(this.content),i.remove(this)}resetItem(){if(!this.isItemMode)return;let t=this.uis.length;for(;t--;)this.uis[t].selected()}setItem(t){if(!this.isItemMode)return;if(t=t||"",this.resetItem(),!t)return void this.update(0);let s=this.uis.length;for(;s--;)this.uis[s].value===t&&(this.uis[s].selected(!0),this.isScroll&&this.update(s*(this.uis[s].h+this.margin)*this.ratio))}upScroll(t){this.sw=t?this.size.s:0,this.oy=t?this.oy:0,this.scrollBG.style.display=t?"block":"none",t&&(this.total=this.h,this.maxView=this.maxHeight,this.ratio=this.maxView/this.total,this.sh=this.maxView*this.ratio,this.range=this.maxView-this.sh,this.oy=h.clamp(this.oy,0,this.range),this.scrollBG.style.height=this.maxView+"px",this.scroll.style.height=this.sh+"px"),this.setItemWidth(this.zone.w-this.sw),this.update(this.oy)}update(t){t=h.clamp(t,0,this.range),this.decal=Math.floor(t/this.ratio),this.inner.style.top=-this.decal+"px",this.scroll.style.top=Math.floor(t)+"px",this.oy=t}calcUis(){return i.calcUis(this.uis,this.zone,this.zone.y)}calc(){clearTimeout(this.tmp),this.tmp=setTimeout(this.setHeight.bind(this),10)}setHeight(){if(this.tmp&&clearTimeout(this.tmp),this.zone.h=this.bh,this.isScroll=!1,this.isOpen){this.h=this.calcUis();let t=this.forceHeight?this.forceHeight+this.zone.y:window.innerHeight;this.maxHeight=t-this.zone.y-this.bh,this.h-this.maxHeight>1?(this.isScroll=!0,this.zone.h=this.maxHeight+this.bh):this.zone.h=this.h+this.bh}this.upScroll(this.isScroll),this.innerContent.style.height=this.zone.h-this.bh+"px",this.content.style.height=this.zone.h+"px",this.bottom.style.top=this.zone.h-this.bh+"px",this.forceHeight&&this.lockHeight&&(this.content.style.height=this.forceHeight+"px"),this.isCanvas&&this.draw(!0)}rezone(){i.needReZone=!0}setWidth(t){t&&(this.zone.w=t),this.zone.w=Math.floor(this.zone.w),this.content.style.width=this.zone.w+"px",this.isCenter&&(this.content.style.marginLeft=-Math.floor(.5*this.zone.w)+"px"),this.setItemWidth(this.zone.w-this.sw)}setItemWidth(t){let s=this.uis.length;for(;s--;)this.uis[s].setSize(t),this.uis[s].rSize()}}export{o as Files,D as Gui,t as REVISION,h as Tools,T as add}; +/** + * @author lth / https://github.com/lo-th + */ + +const REVISION = "4.3.0"; + +// INTENAL FUNCTION + +const R = { + ui: [], + + dom: null, + + ID: null, + lock: false, + wlock: false, + current: -1, + + needReZone: true, + needResize: false, + forceZone: false, + isEventsInit: false, + isLeave: false, + addDOMEventListeners: true, + + downTime: 0, + prevTime: 0, + + //prevDefault: ['contextmenu', 'wheel'], + prevDefault: ["contextmenu"], + pointerEvent: ["pointerdown", "pointermove", "pointerup"], + eventOut: ["pointercancel", "pointerout", "pointerleave"], + + xmlserializer: null, + tmpTime: null, + tmpImage: null, + + oldCursor: "auto", + + input: null, + parent: null, + firstImput: true, + + hiddenImput: null, + hiddenSizer: null, + hasFocus: false, + startInput: false, + inputRange: [0, 0], + cursorId: 0, + str: "", + pos: 0, + startX: -1, + moveX: -1, + + debugInput: false, + + isLoop: false, + listens: [], + + e: { + type: null, + clientX: 0, + clientY: 0, + keyCode: NaN, + key: null, + delta: 0, + }, + + isMobile: false, + + now: null, + needsUpdate: false, + + getTime: function () { + return self.performance && self.performance.now + ? self.performance.now.bind(performance) + : Date.now; + }, + + add: function (o) { + // R.ui[0] is de GUI object that is added first by the constructor + R.ui.push(o); + R.getZone(o); + + if (!R.isEventsInit) R.initEvents(); + }, + + testMobile: function () { + let n = navigator.userAgent; + if ( + n.match(/Android/i) || + n.match(/webOS/i) || + n.match(/iPhone/i) || + n.match(/iPad/i) || + n.match(/iPod/i) || + n.match(/BlackBerry/i) || + n.match(/Windows Phone/i) + ) + return true; + else return false; + }, + + remove: function (o) { + let i = R.ui.indexOf(o); + + if (i !== -1) { + R.removeListen(o); + R.ui.splice(i, 1); + } + + if (R.ui.length === 0) { + R.removeEvents(); + } + }, + + // ---------------------- + // EVENTS + // ---------------------- + + initEvents: function () { + if (R.isEventsInit) return; + + let dom = document.body; + + R.isMobile = R.testMobile(); + R.now = R.getTime(); + + if (!R.isMobile) { + dom.addEventListener("wheel", R, { passive: false }); + } else { + dom.style.touchAction = "none"; + } + + console.log("R.addDOMEventListeners " + R.addDOMEventListeners); + if (R.addDOMEventListeners) { + dom.addEventListener("pointercancel", R); + dom.addEventListener("pointerleave", R); + //dom.addEventListener( 'pointerout', R ) + + dom.addEventListener("pointermove", R); + dom.addEventListener("pointerdown", R); + dom.addEventListener("pointerup", R); + + dom.addEventListener("keydown", R, false); + dom.addEventListener("keyup", R, false); + } + window.addEventListener("resize", R.resize, false); + + //window.onblur = R.out; + //window.onfocus = R.in; + + R.isEventsInit = true; + R.dom = dom; + }, + + removeEvents: function () { + if (!R.isEventsInit) return; + + let dom = document.body; + + if (!R.isMobile) { + dom.removeEventListener("wheel", R); + } + + if (R.addDOMEventListeners) { + dom.removeEventListener("pointercancel", R); + dom.removeEventListener("pointerleave", R); + //dom.removeEventListener( 'pointerout', R ); + + dom.removeEventListener("pointermove", R); + dom.removeEventListener("pointerdown", R); + dom.removeEventListener("pointerup", R); + + dom.removeEventListener("keydown", R); + dom.removeEventListener("keyup", R); + } + window.removeEventListener("resize", R.resize); + + R.isEventsInit = false; + }, + + resize: function () { + let i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); + } + + R.needReZone = true; + R.needResize = false; + }, + + out: function () { + console.log("im am out"); + R.clearOldID(); + }, + + in: function () { + console.log("im am in"); + // R.clearOldID(); + }, + + // ---------------------- + // HANDLE EVENTS + // ---------------------- + + fakeUp: function () { + this.handleEvent({ type: "pointerup" }); + }, + + handleEvent: function (event) { + //console.log("Roots.handleEvent "+event.type) + //if(!event.type) return; + + if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); + + if (R.needResize) R.resize(); + + R.findZone(R.forceZone); + + let e = R.e; + let leave = false; + + if (event.type === "keydown") R.keydown(event); + if (event.type === "keyup") R.keyup(event); + + if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; + else e.delta = 0; + + let ptype = event.pointerType; // mouse, pen, touch + + e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; + e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; + + e.type = event.type; + + if (R.eventOut.indexOf(event.type) !== -1) { + leave = true; + e.type = "mouseup"; + } + + if (event.type === "pointerleave") R.isLeave = true; + + if (event.type === "pointerdown") e.type = "mousedown"; + if (event.type === "pointerup") e.type = "mouseup"; + if (event.type === "pointermove") { + if (R.isLeave) { + // if user resize outside this document + R.isLeave = false; + R.resize(); + } + e.type = "mousemove"; + } + + // double click test + if (e.type === "mousedown") { + R.downTime = R.now(); + let time = R.downTime - R.prevTime; + + // double click on imput + if (time < 200) { + R.selectAll(); + return false; + } + + R.prevTime = R.downTime; + R.forceZone = false; + } + + // for imput + if (e.type === "mousedown") R.clearInput(); + + // mouse lock + if (e.type === "mousedown") R.lock = true; + if (e.type === "mouseup") R.lock = false; + + //if( R.current !== null && R.current.neverlock ) R.lock = false; + + /*if( e.type === 'mousedown' && event.button === 1){ + R.cursor() + e.preventDefault(); + e.stopPropagation(); + }*/ + + //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) + + if (R.isMobile && e.type === "mousedown") R.findID(e); + if (e.type === "mousemove" && !R.lock) R.findID(e); + + if (R.ID !== null) { + if (R.ID.isCanvasOnly) { + e.clientX = R.ID.mouse.x; + e.clientY = R.ID.mouse.y; + } + + //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 + + R.ID.handleEvent(e); + } + + if (R.isMobile && e.type === "mouseup") R.clearOldID(); + if (leave) R.clearOldID(); + }, + + // ---------------------- + // ID + // ---------------------- + + findID: function (e) { + let i = R.ui.length, + next = -1, + u, + x, + y; + + while (i--) { + u = R.ui[i]; + + if (u.isCanvasOnly) { + x = u.mouse.x; + y = u.mouse.y; + } else { + x = e.clientX; + y = e.clientY; + } + + if (R.onZone(u, x, y)) { + next = i; + + if (next !== R.current) { + R.clearOldID(); + R.current = next; + R.ID = u; + } + break; + } + } + + if (next === -1) R.clearOldID(); + }, + + clearOldID: function () { + if (!R.ID) return; + R.current = -1; + R.ID.reset(); + R.ID = null; + R.cursor(); + }, + + // ---------------------- + // GUI / GROUP FUNCTION + // ---------------------- + + calcUis: (uis, zone, py, group = false) => { + //console.log('calc_uis') + + let i = uis.length, + u, + px = 0, + n = 0, + tw, + m; + + let height = 0; + + while (i--) { + u = uis[n]; + n++; + + if (!group && u.isGroup) u.calcUis(); + + m = u.margin; + //div = u.marginDiv + + u.zone.w = u.w; + u.zone.h = u.h + m; + + if (!u.autoWidth) { + if (px === 0) height += u.h + m; + + u.zone.x = zone.x + px; + u.zone.y = py; // + u.mtop + //if(div) u.zone.y += m * 0.5 + + tw = R.getWidth(u); + if (tw) u.zone.w = u.w = tw; + else if (u.fw) u.zone.w = u.w = u.fw; + + px += u.zone.w; + + if (px >= zone.w) { + py += u.h + m; + //if(div) py += m * 0.5 + px = 0; + } + } else { + px = 0; + + u.zone.x = zone.x + u.dx; + u.zone.y = py; + py += u.h + m; + + height += u.h + m; + } + } + + return height; + }, + + findTarget: function (uis, e) { + let i = uis.length; + + while (i--) { + if (R.onZone(uis[i], e.clientX, e.clientY)) return i; + } + + return -1; + }, + + // ---------------------- + // ZONE + // ---------------------- + + findZone: function (force) { + if (!R.needReZone && !force) return; + + var i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + R.getZone(u); + if (u.isGui) u.calcUis(); + } + + R.needReZone = false; + }, + + onZone: function (o, x, y) { + if (x === undefined || y === undefined) return false; + + let z = o.zone; + let mx = x - z.x; // - o.dx; + let my = y - z.y; + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 + //if( o.group !== null ) mx -= o.dx + + let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; + + //if( o.marginDiv ) my -= o.margin * 0.5 + + if (over) o.local.set(mx, my); + else o.local.neg(); + + return over; + }, + + getWidth: function (o) { + //return o.getDom().offsetWidth + return o.getDom().clientWidth; + + //let r = o.getDom().getBoundingClientRect(); + //return (r.width) + //return Math.floor(r.width) + }, + + getZone: function (o) { + if (o.isCanvasOnly) return; + let r = o.getDom().getBoundingClientRect(); + + //if( !r.width ) return + //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; + //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; + o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; + + //console.log(o.name, o.zone) + }, + + // ---------------------- + // CURSOR + // ---------------------- + + cursor: function (name) { + name = name ? name : "auto"; + if (name !== R.oldCursor) { + document.body.style.cursor = name; + R.oldCursor = name; + } + }, + + // ---------------------- + // CANVAS + // ---------------------- + + toCanvas: function (o, w, h, force) { + if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); + + // prevent exesive redraw + + if (force && R.tmpTime !== null) { + clearTimeout(R.tmpTime); + R.tmpTime = null; + } + + if (R.tmpTime !== null) return; + + if (R.lock) + R.tmpTime = setTimeout(function () { + R.tmpTime = null; + }, 10); + + /// + + let isNewSize = false; + if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; + + if (R.tmpImage === null) R.tmpImage = new Image(); + + let img = R.tmpImage; //new Image(); + + let htmlString = R.xmlserializer.serializeToString(o.content); + + let svg = + '' + + htmlString + + ""; + + img.onload = function () { + let ctx = o.canvas.getContext("2d"); + + if (isNewSize) { + o.canvas.width = w; + o.canvas.height = h; + } else { + ctx.clearRect(0, 0, w, h); + } + ctx.drawImage(this, 0, 0); + + o.onDraw(); + }; + + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); + //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); + img.crossOrigin = ""; + R.needsUpdate = false; + }, + + // ---------------------- + // INPUT + // ---------------------- + + setHidden: function () { + if (R.hiddenImput === null) { + //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' + //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' + //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; + + R.hiddenImput = document.createElement("input"); + R.hiddenImput.type = "text"; + //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); + + R.hiddenSizer = document.createElement("div"); + //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; + + document.body.appendChild(R.hiddenImput); + document.body.appendChild(R.hiddenSizer); + } + + let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; + let css = + R.parent.css.txtselect + + "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + + hide; + R.hiddenImput.style.cssText = + css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); + R.hiddenSizer.style.cssText = css + "bottom:40px;"; + + R.hiddenImput.style.width = R.input.clientWidth + "px"; + R.hiddenImput.value = R.str; + R.hiddenSizer.innerHTML = R.str; + + R.hasFocus = true; + }, + + clearHidden: function (p) { + if (R.hiddenImput === null) return; + R.hasFocus = false; + }, + + clickPos: function (x) { + let i = R.str.length, + l = 0, + n = 0; + while (i--) { + l += R.textWidth(R.str[n]); + if (l >= x) break; + n++; + } + return n; + }, + + upInput: function (x, down) { + if (R.parent === null) return false; + + let up = false; + + if (down) { + let id = R.clickPos(x); + + R.moveX = id; + + if (R.startX === -1) { + R.startX = id; + R.cursorId = id; + R.inputRange = [R.startX, R.startX]; + } else { + let isSelection = R.moveX !== R.startX; + + if (isSelection) { + if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; + else R.inputRange = [R.startX, R.moveX]; + } + } + + up = true; + } else { + if (R.startX !== -1) { + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.startX = -1; + + up = true; + } + } + + if (up) R.selectParent(); + + return up; + }, + + selectAll: function () { + if (!R.parent) return; + + R.str = R.input.textContent; + R.inputRange = [0, R.str.length]; + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.cursorId = R.inputRange[1]; + R.selectParent(); + }, + + selectParent: function () { + var c = R.textWidth(R.str.substring(0, R.cursorId)); + var e = R.textWidth(R.str.substring(0, R.inputRange[0])); + var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); + + R.parent.select(c, e, s, R.hiddenSizer.innerHTML); + }, + + textWidth: function (text) { + if (R.hiddenSizer === null) return 0; + text = text.replace(/ /g, " "); + R.hiddenSizer.innerHTML = text; + return R.hiddenSizer.clientWidth; + }, + + clearInput: function () { + if (R.parent === null) return; + if (!R.firstImput) R.parent.validate(true); + + R.clearHidden(); + R.parent.unselect(); + + //R.input.style.background = 'none'; + R.input.style.background = R.parent.colors.back; + R.input.style.borderColor = R.parent.colors.border; + //R.input.style.color = R.parent.colors.text; + R.parent.isEdit = false; + + R.input = null; + R.parent = null; + (R.str = ""), (R.firstImput = true); + }, + + setInput: function (Input, parent) { + R.clearInput(); + + R.input = Input; + R.parent = parent; + + R.input.style.background = R.parent.colors.backoff; + R.input.style.borderColor = R.parent.colors.select; + //R.input.style.color = R.parent.colors.textSelect; + R.str = R.input.textContent; + + R.setHidden(); + }, + + keydown: function (e) { + if (R.parent === null) return; + + let keyCode = e.which; + e.shiftKey; + + //console.log( keyCode ) + + R.firstImput = false; + + if (R.hasFocus) { + // hack to fix touch event bug in iOS Safari + window.focus(); + R.hiddenImput.focus(); + } + + R.parent.isEdit = true; + + // e.preventDefault(); + + // add support for Ctrl/Cmd+A selection + //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { + //R.selectText(); + //e.preventDefault(); + //return self.render(); + //} + + if (keyCode === 13) { + //enter + + R.clearInput(); + + //} else if( keyCode === 9 ){ //tab key + + // R.input.textContent = ''; + } else { + if (R.input.isNum) { + if ( + (e.keyCode > 47 && e.keyCode < 58) || + (e.keyCode > 95 && e.keyCode < 106) || + e.keyCode === 190 || + e.keyCode === 110 || + e.keyCode === 8 || + e.keyCode === 109 + ) { + R.hiddenImput.readOnly = false; + } else { + R.hiddenImput.readOnly = true; + } + } else { + R.hiddenImput.readOnly = false; + } + } + }, + + keyup: function (e) { + if (R.parent === null) return; + + R.str = R.hiddenImput.value; + + if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value + else R.input.textContent = R.str; + + R.cursorId = R.hiddenImput.selectionStart; + R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; + + R.selectParent(); + + //if( R.parent.allway ) + R.parent.validate(); + }, + + // ---------------------- + // + // LISTENING + // + // ---------------------- + + /* + // esta era la funcion original + loop: function () { + + if( R.isLoop ) requestAnimationFrame( R.loop ); + R.update(); + + }, + + */ + + loop: function () { + // modified by Fedemarino + if (R.isLoop) requestAnimationFrame(R.loop); + R.needsUpdate = R.update(); + // if there is a change in a value generated externally, the GUI needs to be redrawn + if (R.ui[0] && R.needsUpdate) R.ui[0].draw(); + }, + + update: function () { + // modified by Fedemarino + let i = R.listens.length; + let needsUpdate = false; + while (i--) { + //check if the value of the object has changed + let hasChanged = R.listens[i].listening(); + if (hasChanged) needsUpdate = true; + } + return needsUpdate; + }, + + removeListen: function (proto) { + let id = R.listens.indexOf(proto); + if (id !== -1) R.listens.splice(id, 1); + if (R.listens.length === 0) R.isLoop = false; + }, + + addListen: function (proto) { + let id = R.listens.indexOf(proto); + + if (id !== -1) return false; + + R.listens.push(proto); + + if (!R.isLoop) { + R.isLoop = true; + R.loop(); + } + + return true; + }, +}; + +const Roots = R; + +/** + * @author lth / https://github.com/lo-th + */ + +const T = { + + transition: 0.2, + + frag: document.createDocumentFragment(), + + colorRing: null, + joystick_0: null, + joystick_1: null, + circular: null, + knob: null, + pad2d: null, + + svgns: "http://www.w3.org/2000/svg", + links: "http://www.w3.org/1999/xlink", + htmls: "http://www.w3.org/1999/xhtml", + + DOM_SIZE: [ 'height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], + SVG_TYPE_D: [ 'pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix' ], + SVG_TYPE_G: [ 'svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject' ], + + PI: Math.PI, + TwoPI: Math.PI*2, + pi90: Math.PI * 0.5, + pi60: Math.PI/3, + + torad: Math.PI / 180, + todeg: 180 / Math.PI, + + clamp: ( v, min, max ) => { + + v = v < min ? min : v; + v = v > max ? max : v; + return v; + + }, + + isDivid: ( v ) => ( v*0.5 === Math.floor(v*0.5) ), + + size: { w: 240, h: 20, p: 30, s: 8 }, + + // ---------------------- + // COLOR + // ---------------------- + + defineColor: ( o, cc = T.colors ) => { + + let color = { ...cc }; + + let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize' ]; + let changeText = false; + + if( o.font ) o.fontFamily = o.font; + if( o.shadow ) o.fontShadow = o.shadow; + if( o.weight ) o.fontWeight = o.weight; + + if( o.fontColor ) o.text = o.fontColor; + if( o.color ) o.text = o.color; + + if( o.text ){ + color.text = o.text; + if( !o.fontColor && !o.color ){ + color.title = T.ColorLuma( o.text, -0.25 ); + color.titleoff = T.ColorLuma( o.text, -0.5 ); + } + color.textOver = T.ColorLuma( o.text, 0.25 ); + color.textSelect = T.ColorLuma( o.text, 0.5 ); + } + + if( o.button ){ + color.button = o.button; + color.border = T.ColorLuma( o.button, 0.1 ); + color.overoff = T.ColorLuma( o.button, 0.2 ); + } + + if( o.select ){ + color.select = o.select; + color.over = T.ColorLuma( o.select, -0.1 ); + } + + if( o.itemBg ) o.back = o.itemBg; + + if( o.back ){ + color.back = o.back; + color.backoff = T.ColorLuma( o.back, -0.1 ); + } + + if( o.fontSelect ) color.textSelect = o.fontSelect; + if( o.groupBorder ) color.gborder = o.groupBorder; + + //if( o.transparent ) o.bg = 'none' + //if( o.bg ) color.background = color.backgroundOver = o.bg + if( o.bgOver ) color.backgroundOver = o.bgOver; + + for( let m in color ){ + if(o[m]!==undefined) color[m] = o[m]; + } + + for( let m in o ){ + if( textChange.indexOf(m) !== -1 ) changeText = true; + } + + if( changeText ) T.defineText( color ); + + return color + + }, + + colors: { + + sx: 4,//4 + sy: 2,//2 + radius:2, + + showOver : 1, + //groupOver : 1, + + content:'none', + background: 'rgba(50,50,50,0.15)', + backgroundOver: 'rgba(50,50,50,0.3)', + + title : '#CCC', + titleoff : '#BBB', + text : '#DDD', + textOver : '#EEE', + textSelect : '#FFF', + + back:'rgba(0,0,0,0.2)', + backoff:'rgba(0,0,0,0.3)', + + // input and button border + border : '#4c4c4c', + borderSize : 1, + + gborder : 'none', + groups : 'none', + + + button : '#3c3c3c', + overoff : '#5c5c5c', + over : '#024699', + select : '#308AFF', + action: '#FF3300', + + //fontFamily: 'Tahoma', + fontFamily: 'Consolas, monospace', + //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", + fontWeight: 'normal', + fontShadow: 'none',//'#000', + fontSize:12, + + joyOver:'rgba(48,138,255,0.25)', + joyOut: 'rgba(100,100,100,0.5)', + joySelect: '#308AFF', + + + hide: 'rgba(0,0,0,0)', + + }, + + // style css + + css : { + + basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', + button:'display:flex; align-items:center; justify-content:center; text-align:center;', + middle:'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' + }, + + // svg path + + svgs: { + + g1:'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', + g2:'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', + + group:'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', + arrow:'M 3 8 L 8 5 3 2 3 8 Z', + + arrowDown:'M 5 8 L 8 3 2 3 5 8 Z', + arrowUp:'M 5 2 L 2 7 8 7 5 2 Z', + + solid:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', + body:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', + vehicle:'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', + articulation:'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', + character:'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', + terrain:'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', + joint:'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', + ray:'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', + collision:'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', + map:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + material:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + texture:'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', + object:'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', + none:'M 9 5 L 5 5 5 9 9 9 9 5 Z', + cursor:'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', + load:'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', + save:'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', + extern:'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z', + + }, + + rezone () { + Roots.needReZone = true; + }, + + getImput: function(){ + + return Roots.input ? true : false + + }, + + setStyle : function ( data ){ + + for ( var o in data ){ + if( T.colors[o] ) T.colors[o] = data[o]; + } + + T.setText(); + + }, + + // ---------------------- + // custom text + // ---------------------- + + defineText: function( o ){ + + T.setText( o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight ); + + }, + + setText: function( size, color, font, shadow, weight ){ + + let cc = T.colors; + + if( font === undefined ) font = cc.fontFamily; + if( size === undefined ) size = cc.fontSize; + if( shadow === undefined ) shadow = cc.fontShadow; + if( weight === undefined ) weight = cc.fontWeight; + if( color === undefined ) color = cc.text; + + if( isNaN(size) ){ if( size.search('em')===-1 ) size += 'px';} + else size += 'px'; + + + //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' + + T.css.txt = T.css.basic + T.css.middle + ' font-family:'+ font +'; font-weight:'+weight+'; font-size:'+size+'; color:'+cc.text+'; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; + if( shadow !== 'none' ) T.css.txt += ' text-shadow: 1px 1px 1px '+shadow+';'; + + T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; + T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; + + }, + + + // note + + //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container + + /*cloneColor: function () { + + let cc = Object.assign({}, T.colors ); + return cc; + + },*/ + + // intern function + + cloneCss: function () { + + //let cc = Object.assign({}, T.css ); + return { ...T.css }; + + }, + + clone: function ( o ) { + + return o.cloneNode( true ); + + }, + + setSvg: function( dom, type, value, id, id2 ){ + + if( id === -1 ) dom.setAttributeNS( null, type, value ); + else if( id2 !== undefined ) dom.childNodes[ id || 0 ].childNodes[ id2 || 0 ].setAttributeNS( null, type, value ); + else dom.childNodes[ id || 0 ].setAttributeNS( null, type, value ); + + }, + + setCss: function( dom, css ){ + + for( let r in css ){ + if( T.DOM_SIZE.indexOf(r) !== -1 ) dom.style[r] = css[r] + 'px'; + else dom.style[r] = css[r]; + } + + }, + + set: function( g, o ){ + + for( let att in o ){ + if( att === 'txt' ) g.textContent = o[ att ]; + if( att === 'link' ) g.setAttributeNS( T.links, 'xlink:href', o[ att ] ); + else g.setAttributeNS( null, att, o[ att ] ); + } + + }, + + get: function( dom, id ){ + + if( id === undefined ) return dom; // root + else if( !isNaN( id ) ) return dom.childNodes[ id ]; // first child + else if( id instanceof Array ){ + if(id.length === 2) return dom.childNodes[ id[0] ].childNodes[ id[1] ]; + if(id.length === 3) return dom.childNodes[ id[0] ].childNodes[ id[1] ].childNodes[ id[2] ]; + } + + }, + + dom : function ( type, css, obj, dom, id ) { + + type = type || 'div'; + + if( T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1 ){ // is svg element + + if( type ==='svg' ){ + + dom = document.createElementNS( T.svgns, 'svg' ); + T.set( dom, obj ); + + /* } else if ( type === 'use' ) { + + dom = document.createElementNS( T.svgns, 'use' ); + T.set( dom, obj ); +*/ + } else { + // create new svg if not def + if( dom === undefined ) dom = document.createElementNS( T.svgns, 'svg' ); + T.addAttributes( dom, type, obj, id ); + + } + + } else { // is html element + + if( dom === undefined ) dom = document.createElementNS( T.htmls, type ); + else dom = dom.appendChild( document.createElementNS( T.htmls, type ) ); + + } + + if( css ) dom.style.cssText = css; + + if( id === undefined ) return dom; + else return dom.childNodes[ id || 0 ]; + + }, + + addAttributes : function( dom, type, o, id ){ + + let g = document.createElementNS( T.svgns, type ); + T.set( g, o ); + T.get( dom, id ).appendChild( g ); + if( T.SVG_TYPE_G.indexOf(type) !== -1 ) g.style.pointerEvents = 'none'; + return g; + + }, + + clear : function( dom ){ + + T.purge( dom ); + while (dom.firstChild) { + if ( dom.firstChild.firstChild ) T.clear( dom.firstChild ); + dom.removeChild( dom.firstChild ); + } + + }, + + purge : function ( dom ) { + + let a = dom.attributes, i, n; + if (a) { + i = a.length; + while(i--){ + n = a[i].name; + if (typeof dom[n] === 'function') dom[n] = null; + } + } + a = dom.childNodes; + if (a) { + i = a.length; + while(i--){ + T.purge( dom.childNodes[i] ); + } + } + + }, + + // ---------------------- + // SVG Effects function + // ---------------------- + + addSVGGlowEffect: function () { + + if ( document.getElementById( 'UILGlow') !== null ) return; + + let svgFilter = T.initUILEffects(); + + let filter = T.addAttributes( svgFilter, 'filter', { id: 'UILGlow', x: '-20%', y: '-20%', width: '140%', height: '140%' } ); + T.addAttributes( filter, 'feGaussianBlur', { in: 'SourceGraphic', stdDeviation: '3', result: 'uilBlur' } ); + let feMerge = T.addAttributes( filter, 'feMerge', { } ); + + for( let i = 0; i <= 3; i++ ) { + + T.addAttributes( feMerge, 'feMergeNode', { in: 'uilBlur' } ); + + } + + T.addAttributes( feMerge, 'feMergeNode', { in: 'SourceGraphic' } ); + + }, + + initUILEffects: function () { + + let svgFilter = document.getElementById( 'UILSVGEffects'); + + if ( svgFilter === null ) { + + svgFilter = T.dom( 'svg', undefined , { id: 'UILSVGEffects', width: '0', height: '0' } ); + document.body.appendChild( svgFilter ); + + } + + return svgFilter; + + }, + + // ---------------------- + // Color function + // ---------------------- + + ColorLuma : function ( hex, l ) { + + //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; + + if( hex === 'n' ) hex = '#000'; + + // validate hex string + hex = String(hex).replace(/[^0-9a-f]/gi, ''); + if (hex.length < 6) { + hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; + } + l = l || 0; + + // convert to decimal and change luminosity + let rgb = "#", c, i; + for (i = 0; i < 3; i++) { + c = parseInt(hex.substr(i*2,2), 16); + c = Math.round(Math.min(Math.max(0, c + (c * l)), 255)).toString(16); + rgb += ("00"+c).substr(c.length); + } + + return rgb; + + }, + + findDeepInver: function ( c ) { + + return (c[0] * 0.3 + c[1] * .59 + c[2] * .11) <= 0.6; + + }, + + lerpColor: function( c1, c2, factor ) { + let newColor = {}; + for ( let i = 0; i < 3; i++ ) { + newColor[i] = c1[ i ] + ( c2[ i ] - c1[ i ] ) * factor; + } + return newColor; + }, + + hexToHtml: function ( v ) { + v = v === undefined ? 0x000000 : v; + return "#" + ("000000" + v.toString(16)).substr(-6); + + }, + + htmlToHex: function ( v ) { + + return v.toUpperCase().replace("#", "0x"); + + }, + + u255: function (c, i) { + + return parseInt(c.substring(i, i + 2), 16) / 255; + + }, + + u16: function ( c, i ) { + + return parseInt(c.substring(i, i + 1), 16) / 15; + + }, + + unpack: function( c ){ + + if (c.length == 7) return [ T.u255(c, 1), T.u255(c, 3), T.u255(c, 5) ]; + else if (c.length == 4) return [ T.u16(c,1), T.u16(c,2), T.u16(c,3) ]; + + }, + + p255: function ( c ) { + let h = Math.round( ( c * 255 ) ).toString( 16 ); + if ( h.length < 2 ) h = '0' + h; + return h; + }, + + pack: function ( c ) { + + return '#' + T.p255( c[ 0 ] ) + T.p255( c[ 1 ] ) + T.p255( c[ 2 ] ); + + }, + + htmlRgb: function( c ){ + + return 'rgb(' + Math.round(c[0] * 255) + ','+ Math.round(c[1] * 255) + ','+ Math.round(c[2] * 255) + ')'; + + }, + + pad: function( n ){ + if(n.length == 1)n = '0' + n; + return n; + }, + + rgbToHex : function( c ){ + + let r = Math.round(c[0] * 255).toString(16); + let g = Math.round(c[1] * 255).toString(16); + let b = Math.round(c[2] * 255).toString(16); + return '#' + T.pad(r) + T.pad(g) + T.pad(b); + + // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); + + }, + + hueToRgb: function( p, q, t ){ + + if ( t < 0 ) t += 1; + if ( t > 1 ) t -= 1; + if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; + if ( t < 1 / 2 ) return q; + if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); + return p; + + }, + + rgbToHsl: function ( c ) { + + let r = c[0], g = c[1], b = c[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h = 0, s = 0, l = (min + max) / 2; + if (l > 0 && l < 1) s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); + if (delta > 0) { + if (max == r && max != g) h += (g - b) / delta; + if (max == g && max != b) h += (2 + (b - r) / delta); + if (max == b && max != r) h += (4 + (r - g) / delta); + h /= 6; + } + return [ h, s, l ]; + + }, + + hslToRgb: function ( c ) { + + let p, q, h = c[0], s = c[1], l = c[2]; + + if ( s === 0 ) return [ l, l, l ]; + else { + q = l <= 0.5 ? l * (s + 1) : l + s - ( l * s ); + p = l * 2 - q; + return [ T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333) ]; + } + + }, + + // ---------------------- + // SVG MODEL + // ---------------------- + + makeGradiant: function ( type, settings, parent, colors ) { + + T.dom( type, null, settings, parent, 0 ); + + let n = parent.childNodes[0].childNodes.length - 1, c; + + for( let i = 0; i < colors.length; i++ ){ + + c = colors[i]; + //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); + T.dom( 'stop', null, { offset:c[0]+'%', 'stop-color':c[1], 'stop-opacity':c[2] }, parent, [0,n] ); + + } + + }, + + /*makeGraph: function () { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 + //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 + //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + + //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 + //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.graph = svg; + + },*/ + + makePad: function ( model ) { + + let ww = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+ww+' '+ww, width:ww, height:ww, preserveAspectRatio:'none' } ); + let w = 200; + let d = (ww-w)*0.5, m = 20; + Tools.dom( 'rect', '', { x: d, y: d, width: w, height: w, fill:T.colors.back }, svg ); // 0 + Tools.dom( 'rect', '', { x: d+m*0.5, y: d+m*0.5, width: w - m , height: w - m, fill:T.colors.button }, svg ); // 1 + // Pointer + Tools.dom( 'line', '', { x1: d+(m*0.5), y1: ww *0.5, x2: d+(w-m*0.5), y2: ww * 0.5, stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 2 + Tools.dom( 'line', '', { x1: ww * 0.5, x2: ww * 0.5, y1: d+(m*0.5), y2: d+(w-m*0.5), stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 3 + Tools.dom( 'circle', '', { cx: ww * 0.5, cy: ww * 0.5, r:5, stroke: T.colors.text, 'stroke-width': 5, fill:'none' }, svg ); // 4 + T.pad2d = svg; + + }, + + makeKnob: function ( model ) { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'round' }, svg );//1 + T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.1)', 'stroke-width':7 , fill:'none'}, svg );//2 + T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.knob = svg; + + }, + + makeCircular: function ( model ) { + + let w = 128; + let radius = 40; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, stroke:'rgba(0,0,0,0.1)', 'stroke-width':10, fill:'none' }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':7, fill:'none', 'stroke-linecap':'butt' }, svg );//1 + T.circular = svg; + + }, + + makeJoystick: function ( model ) { + + //+' background:#f00;' + + let w = 128, ccc; + let radius = Math.floor((w-30)*0.5); + let innerRadius = Math.floor(radius*0.6); + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + if( model === 0 ){ + + + + // gradian background + ccc = [ [40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'grad', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian shadow + ccc = [ [60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradS', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian stick + let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; + let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; + + ccc = [ [30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + ccc = [ [30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn2', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // graph + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'url(#grad)' }, svg );//2 + T.dom( 'circle', '', { cx:64+5, cy:64+10, r:innerRadius+10, fill:'url(#gradS)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'url(#gradIn)' }, svg );//4 + + T.joystick_0 = svg; + + } else { + // gradian shadow + ccc = [ [69, 'rgb(0,0,0)', 0],[70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradX', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'none', stroke:'rgba(100,100,100,0.25)', 'stroke-width':'4' }, svg );//2 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius+14, fill:'url(#gradX)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'none', stroke:'rgb(100,100,100)', 'stroke-width':'4' }, svg );//4 + + T.joystick_1 = svg; + } + + + + }, + + makeColorRing: function () { + + let w = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + let s = 30;//stroke + let r =( w-s )*0.5; + let mid = w*0.5; + let n = 24, nudge = 8 / r / n * Math.PI, a1 = 0; + let am, tan, d2, a2, ar, i, j, path, ccc; + let color = []; + + for ( i = 0; i <= n; ++i) { + + d2 = i / n; + a2 = d2 * T.TwoPI; + am = (a1 + a2) * 0.5; + tan = 1 / Math.cos((a2 - a1) * 0.5); + + ar = [ + Math.sin(a1), -Math.cos(a1), + Math.sin(am) * tan, -Math.cos(am) * tan, + Math.sin(a2), -Math.cos(a2) + ]; + + color[1] = T.rgbToHex( T.hslToRgb([d2, 1, 0.5]) ); + + if (i > 0) { + + j = 6; + while(j--){ + ar[j] = ((ar[j]*r)+mid).toFixed(2); + } + + path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; + + ccc = [ [0,color[0],1], [100,color[1],1] ]; + T.makeGradiant( 'linearGradient', { id:'G'+i, x1:ar[0], y1:ar[1], x2:ar[4], y2:ar[5], gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'path', '', { d:path, 'stroke-width':s, stroke:'url(#G'+i+')', 'stroke-linecap':"butt" }, svg, 1 ); + + } + a1 = a2 - nudge; + color[0] = color[1]; + } + + let tw = 84.90; + + // black / white + ccc = [ [0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1] ]; + T.makeGradiant( 'linearGradient', { id:'GL0', x1:0, y1:mid-tw, x2:0, y2:mid+tw, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + ccc = [ [0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0] ]; + T.makeGradiant( 'linearGradient', { id:'GL1', x1:mid-49.05, y1:0, x2:mid+98, y2:0, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'g', null, { 'transform-origin': '128px 128px', 'transform':'rotate(0)' }, svg );//2 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'red' }, svg, 2 );// 2,0 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL1)','stroke-width':1, stroke:'url(#GL1)' }, svg, 2 );//2,1 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL0)','stroke-width':1, stroke:'url(#GL0)' }, svg, 2 );//2,2 + T.dom( 'path', '', { d:'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill:'none','stroke-width':2, stroke:'#000' }, svg, 2 );//2,3 + //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 + + T.dom( 'circle', '', { cx:128, cy:128, r:6, 'stroke-width':2, stroke:'#000', fill:'none' }, svg );//3 + + T.colorRing = svg; + + }, + + icon: function ( type, color, w ){ + + w = w || 40; + //color = color || '#DEDEDE'; + let viewBox = '0 0 256 256'; + //let viewBox = '0 0 '+ w +' '+ w; + let t = [""]; + switch(type){ + case 'logo': + t[1]=""; + break; + case 'donate': + t[1]=""; + break; + case 'neo': + t[1]=""; + break; + case 'phy': + t[1]=""; + break; + case 'config': + t[1]=""; + break; + case 'github': + t[1]=""; + break; + case 'save': + t[1]=""; + break; + } + t[2] = ""; + return t.join("\n"); + + }, + + logoFill_d:` + M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 + L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 + M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 + Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z + `, + + logo_github:` + M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 + 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 + 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 + 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 + 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z + `, + + logo_neo:` + M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 + 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 + 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 + 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L + 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z + `, + + logo_phy:` + M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 + Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 + `, + + logo_config:` + M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 + L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 + Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 + `, + + logo_donate:` + M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 + 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 + 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 + 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 + 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 + Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 + 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 + 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 + 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M + 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 + 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 + 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 + 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 + 200.9 187.5 200.9 187.5 195.35 Z + `, + +}; + +T.setText(); + +const Tools = T; + +///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile + + +class Files { + + //----------------------------- + // FILE TYPE + //----------------------------- + + static autoTypes( type ) { + + let t = []; + + switch( type ){ + case 'svg': + t = [ { accept: { 'image/svg+xml': '.svg'} }, ]; + break; + case 'wav': + t = [ { accept: { 'audio/wav': '.wav'} }, ]; + break; + case 'mp3': + t = [ { accept: { 'audio/mpeg': '.mp3'} }, ]; + break; + case 'mp4': + t = [ { accept: { 'video/mp4': '.mp4'} }, ]; + break; + case 'bin': case 'hex': + t = [ { description: 'Binary Files', accept: { 'application/octet-stream': ['.bin', '.hex'] } }, ]; + break; + case 'text': + t = [ { description: 'Text Files', accept: { 'text/plain': ['.txt', '.text'], 'text/html': ['.html', '.htm'] } }, ]; + break; + case 'json': + t = [ { description: 'JSON Files', accept: { 'application/json': ['.json'] } }, ];//text/plain + break; + case 'js': + t = [ { description: 'JavaScript Files', accept: { 'text/javascript': ['.js'] } }, ]; + break; + case 'image': + t = [ { description: 'Images', accept: { 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] } }, ]; + break; + case 'icon': + t = [ { description: 'Icons', accept: { 'image/x-ico': ['.ico'] } }, ]; + break; + case 'lut': + t = [ { description: 'Lut', accept: { 'text/plain': ['.cube', '.3dl'] } }, ]; + break; + + } + + return t + + } + + + //----------------------------- + // LOAD + //----------------------------- + + static async load( o = {} ) { + + if (typeof window.showOpenFilePicker !== 'function') { + window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; + } + + try { + + let type = o.type || ''; + + const options = { + excludeAcceptAllOption: type ? true : false, + multiple: false, + //startIn:'./assets' + }; + + options.types = Files.autoTypes( type ); + + // create a new handle + const handle = await window.showOpenFilePicker( options ); + const file = await handle[0].getFile(); + //let content = await file.text() + + if( !file ) return null + + let fname = file.name; + let ftype = fname.substring( fname.lastIndexOf('.')+1, fname.length ); + + const dataUrl = [ 'png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3' ]; + const dataBuf = [ 'sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf' ]; + const reader = new FileReader(); + + if( dataUrl.indexOf( ftype ) !== -1 ) reader.readAsDataURL( file ); + else if( dataBuf.indexOf( ftype ) !== -1 ) reader.readAsArrayBuffer( file ); + else reader.readAsText( file ); + + reader.onload = function(e) { + + let content = e.target.result; + + switch(type){ + case 'image': + let img = new Image; + img.onload = function() { + if( o.callback ) o.callback( img, fname, ftype ); + }; + img.src = content; + break; + case 'json': + if( o.callback ) o.callback( JSON.parse( content ), fname, ftype ); + break; + default: + if( o.callback ) o.callback( content, fname, ftype ); + break; + } + + }; + + } catch(e) { + + console.log(e); + if( o.always && o.callback ) o.callback( null ); + + } + + } + + static showOpenFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const input = document.createElement("input"); + input.type = "file"; + input.multiple = options.multiple; + input.accept = options.types + .map((type) => type.accept) + .flatMap((inst) => Object.keys(inst).flatMap((key) => inst[key])) + .join(","); + + input.addEventListener("change", () => { + resolve( + [...input.files].map((file) => { + return { + getFile: async () => + new Promise((resolve) => { + resolve(file); + }), + }; + }) + ); + }); + + input.click(); + }) + } + + + //----------------------------- + // SAVE + //----------------------------- + + static async save( o = {} ) { + + let usePoly = false; + + if (typeof window.showSaveFilePicker !== 'function') { + window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; + usePoly = true; + } + + try { + + let type = o.type || ''; + + const options = { + suggestedName: o.name || 'hello', + data: o.data || '' + }; + + options.types = Files.autoTypes( type ); + options.finalType = Object.keys( options.types[0].accept )[0]; + options.suggestedName += options.types[0].accept[options.finalType][0]; + + + // create a new handle + const handle = await window.showSaveFilePicker( options ); + + if( usePoly ) return + + // create a FileSystemWritableFileStream to write to + const file = await handle.createWritable(); + + let blob = new Blob([ options.data ], { type: options.finalType }); + + // write our file + await file.write(blob); + + // close the file and write the contents to disk. + await file.close(); + + } catch(e) { + + console.log(e); + + } + + } + + static showSaveFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const a = document.createElement("a"); + a.download = options.suggestedName || "my-file.txt"; + let blob = new Blob([ options.data ], { type:options.finalType }); + a.href = URL.createObjectURL( blob ); + + a.addEventListener("click", () => { + resolve( + setTimeout( () => URL.revokeObjectURL(a.href), 1000 ) + ); + }); + a.click(); + }) + } + + + //----------------------------- + // FOLDER not possible in poly + //----------------------------- + + static async getFolder() { + + try { + + const handle = await window.showDirectoryPicker(); + const files = []; + for await (const entry of handle.values()) { + const file = await entry.getFile(); + files.push(file); + } + + console.log(files); + return files; + + } catch(e) { + + console.log(e); + + } + + } + + + + + + + + + + +} + +class V2 { + + constructor( x = 0, y = 0 ) { + + this.x = x; + this.y = y; + + } + + set ( x, y ) { + + this.x = x; + this.y = y; + return this; + + } + + divide ( v ) { + + this.x /= v.x; + this.y /= v.y; + return this; + + } + + multiply ( v ) { + + this.x *= v.x; + this.y *= v.y; + return this; + + } + + multiplyScalar ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + return this; + + } + + divideScalar ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + } + + length () { + + return Math.sqrt( this.x * this.x + this.y * this.y ); + + } + + angle () { + + // computes the angle in radians with respect to the positive x-axis + + var angle = Math.atan2( this.y, this.x ); + + if ( angle < 0 ) angle += 2 * Math.PI; + + return angle; + + } + + addScalar ( s ) { + + this.x += s; + this.y += s; + return this; + + } + + negate () { + + this.x *= -1; + this.y *= -1; + return this; + + } + + neg () { + + this.x = -1; + this.y = -1; + return this; + + } + + isZero () { + + return ( this.x === 0 && this.y === 0 ); + + } + + copy ( v ) { + + this.x = v.x; + this.y = v.y; + + return this; + + } + + equals ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) ); + + } + + nearEquals ( v, n ) { + + return ( ( v.x.toFixed(n) === this.x.toFixed(n) ) && ( v.y.toFixed(n) === this.y.toFixed(n) ) ); + + } + + lerp ( v, alpha ) { + + if( v === null ){ + this.x -= this.x * alpha; + this.y -= this.y * alpha; + } else { + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + } + + return this; + + } + +} + +/** + * @author lth / https://github.com/lo-th + */ + +class Proto { + constructor(o = {}) { + // disable mouse controle + this.lock = o.lock || false; + + // for button + this.neverlock = false; + + // only simple space + this.isSpace = o.isSpace || false; + + // if is on gui or group + this.main = o.main || null; + this.isUI = o.isUI || false; + this.group = o.group || null; + + this.isListen = false; + + this.top = 0; + this.ytop = 0; + + this.dx = o.dx || 0; + + this.isSelectable = o.selectable !== undefined ? o.selectable : false; + this.unselectable = + o.unselect !== undefined ? o.unselect : this.isSelectable; + + this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' + + this.css = this.main ? this.main.css : Tools.css; + + this.colors = Tools.defineColor( + o, + this.main + ? this.group + ? this.group.colors + : this.main.colors + : Tools.colors + ); + + this.overEffect = this.colors.showOver; + + this.svgs = Tools.svgs; + + this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; + this.local = new V2().neg(); + + this.isCanvasOnly = false; + this.isSelect = false; + + // percent of title + this.p = o.p !== undefined ? o.p : Tools.size.p; + + this.w = this.isUI ? this.main.size.w : Tools.size.w; + if (o.w !== undefined) this.w = o.w; + + this.h = this.isUI ? this.main.size.h : Tools.size.h; + if (o.h !== undefined) this.h = o.h; + if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; + else this.lock = true; + + // decale for canvas only + this.fw = o.fw || 0; + + this.autoWidth = o.auto || true; // auto width or flex + this.isOpen = false; //false// open statu + + // radius for toolbox + this.radius = o.radius || this.colors.radius; + + this.transition = o.transition || Tools.transition; + + // only for number + this.isNumber = false; + this.noNeg = o.noNeg || false; + this.allEqual = o.allEqual || false; + + // only most simple + this.mono = false; + + // stop listening for edit slide text + this.isEdit = false; + + // no title + this.simple = o.simple || false; + if (this.simple) this.sa = 0; + + // define obj size + this.setSize(this.w); + + // title size + if (o.sa !== undefined) this.sa = o.sa; + if (o.sb !== undefined) this.sb = o.sb; + if (this.simple) this.sb = this.w - this.sa; + + // last number size for slide + this.sc = o.sc === undefined ? 47 : o.sc; + + // for listening object + this.objectLink = null; + this.isSend = false; + this.objectKey = null; + + this.txt = o.name || ""; + this.name = o.rename || this.txt; + this.target = o.target || null; + + // callback + this.callback = o.callback === undefined ? null : o.callback; + this.endCallback = null; + this.openCallback = o.openCallback === undefined ? null : o.openCallback; + this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; + + // if no callback take one from group or gui + if (this.callback === null && this.isUI && this.main.callback !== null) { + this.callback = this.group ? this.group.callback : this.main.callback; + } + + // elements + this.c = []; + + // style + this.s = []; + + this.useFlex = this.isUI ? this.main.useFlex : false; + let flexible = this.useFlex + ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" + : "float:left;"; + + this.c[0] = Tools.dom( + "div", + this.css.basic + flexible + "position:relative; height:20px;" + ); + + this.s[0] = this.c[0].style; + + // bottom margin + this.margin = this.colors.sy; + this.mtop = 0; + let marginDiv = Tools.isDivid(this.margin); + + if (this.isUI && this.margin) { + this.s[0].boxSizing = "content-box"; + if (marginDiv) { + this.mtop = this.margin * 0.5; + //this.s[0].borderTop = '${this.mtop}px solid transparent' + //console.log(`${this.mtop}px solid transparent`) + this.s[0].borderTop = this.mtop + "px solid transparent"; + this.s[0].borderBottom = this.mtop + "px solid transparent"; + } else { + this.s[0].borderBottom = this.margin + "px solid transparent"; + } + } + + // with title + if (!this.simple) { + this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); + this.s[1] = this.c[1].style; + this.c[1].textContent = this.name; + this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; + } + + if (o.pos) { + this.s[0].position = "absolute"; + for (let p in o.pos) { + this.s[0][p] = o.pos[p]; + } + this.mono = true; + } + + if (o.css) this.s[0].cssText = o.css; + } + + // ---------------------- + // make the node + // ---------------------- + + init() { + this.ytop = this.top + this.mtop; + + this.zone.h = this.h + this.margin; + this.zone.w = this.w; + + let s = this.s; // style cache + let c = this.c; // div cach + + s[0].height = this.h + "px"; + + if (this.isUI) s[0].background = this.colors.background; + + if (!this.autoWidth && this.useFlex) { + s[0].flex = "1 0 auto"; + s[0].minWidth = this.minw + "px"; + s[0].textAlign = "center"; + } else { + if (this.isUI) s[0].width = "100%"; + } + + //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; + if (c[1] !== undefined && this.autoWidth) { + s[1] = c[1].style; + s[1].top = 1 + "px"; + s[1].height = this.h - 2 + "px"; + } + + let frag = Tools.frag; + + for (let i = 1, lng = c.length; i !== lng; i++) { + if (c[i] !== undefined) { + frag.appendChild(c[i]); + s[i] = c[i].style; + } + } + + let pp = + this.target !== null + ? this.target + : this.isUI + ? this.main.inner + : document.body; + + if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); + else pp.appendChild(c[0]); + + c[0].appendChild(frag); + + this.rSize(); + + // ! solo proto + if (!this.isUI) { + this.c[0].style.pointerEvents = "auto"; + Roots.add(this); + } + } + + addTransition() { + if (this.baseH && this.transition && this.isUI) { + this.c[0].style.transition = "height " + this.transition + "s ease-out"; + } + } + + // from Tools + + dom(type, css, obj, dom, id) { + return Tools.dom(type, css, obj, dom, id); + } + + setSvg(dom, type, value, id, id2) { + Tools.setSvg(dom, type, value, id, id2); + } + + setCss(dom, css) { + Tools.setCss(dom, css); + } + + clamp(value, min, max) { + return Tools.clamp(value, min, max); + } + + getColorRing() { + if (!Tools.colorRing) Tools.makeColorRing(); + return Tools.clone(Tools.colorRing); + } + + getJoystick(model) { + if (!Tools["joystick_" + model]) Tools.makeJoystick(model); + return Tools.clone(Tools["joystick_" + model]); + } + + getCircular(model) { + if (!Tools.circular) Tools.makeCircular(model); + return Tools.clone(Tools.circular); + } + + getKnob(model) { + if (!Tools.knob) Tools.makeKnob(model); + return Tools.clone(Tools.knob); + } + + getPad2d(model) { + if (!Tools.pad2d) Tools.makePad(model); + return Tools.clone(Tools.pad2d); + } + + // from Roots + + cursor(name) { + Roots.cursor(name); + } + + ///////// + + update() {} + + reset() {} + + ///////// + + content() { + return this.c[0]; + } + + getDom() { + return this.c[0]; + } + + uiout() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.background; + } + + uiover() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.backgroundOver; + } + + rename(s) { + if (this.c[1] !== undefined) this.c[1].textContent = s; + } + + listen() { + this.isListen = Roots.addListen(this); + return this; + } + + listening() { + // modified by Fedemarino + if (this.objectLink === null) return; + if (this.isSend) return; + if (this.isEdit) return; + // check if value has changed + let hasChanged = this.setValue(this.objectLink[this.objectKey]); + return hasChanged; + } + + setValue(v) { + const old = this.value; + if (this.isNumber) this.value = this.numValue(v); + //else if( v instanceof Array && v.length === 1 ) v = v[0]; + else this.value = v; + this.update(); + let hasChanged = false; + if (old !== this.value) { + hasChanged = true; + } + + return hasChanged; + } + + // ---------------------- + // update every change + // ---------------------- + + onChange(f) { + if (this.isSpace) return; + this.callback = f || null; + return this; + } + + // ---------------------- + // update only on end + // ---------------------- + + onFinishChange(f) { + if (this.isSpace) return; + this.callback = null; + this.endCallback = f; + return this; + } + + // ---------------------- + // event on open close + // ---------------------- + + onOpen(f) { + this.openCallback = f; + return this; + } + + onClose(f) { + this.closeCallback = f; + return this; + } + + // ---------------------- + // send back value + // ---------------------- + + send(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + this.isSend = true; + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + if (this.callback) this.callback(v, this.objectKey); + this.isSend = false; + } + + sendEnd(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + if (this.endCallback) this.endCallback(v); + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + } + + // ---------------------- + // clear node + // ---------------------- + + dispose() { + if (this.isListen) Roots.removeListen(this); + + Tools.clear(this.c[0]); + + if (this.target !== null) { + if (this.group !== null) this.group.clearOne(this); + else this.target.removeChild(this.c[0]); + } else { + if (this.isUI) this.main.clearOne(this); + else document.body.removeChild(this.c[0]); + } + + if (!this.isUI) Roots.remove(this); + + this.c = null; + this.s = null; + this.callback = null; + this.target = null; + this.isListen = false; + } + + clear() {} + + // ---------------------- + // change size + // ---------------------- + + getWidth() { + let nw = Roots.getWidth(this); + if (nw) this.w = nw; + } + + setSize(sx) { + if (!this.autoWidth) return; + + this.w = sx; + + if (this.simple) { + this.sb = this.w - this.sa; + } else { + let pp = this.w * (this.p / 100); + //this.sa = Math.floor( pp + 10 ) + //this.sb = Math.floor( this.w - pp - 20 ) + this.sa = Math.floor(pp + 8); + this.sb = Math.floor(this.w - pp - 16); + } + } + + rSize() { + if (!this.autoWidth) return; + if (!this.isUI) this.s[0].width = this.w + "px"; + if (!this.simple) this.s[1].width = this.sa + "px"; + } + + // ---------------------- + // for numeric value + // ---------------------- + + setTypeNumber(o) { + this.isNumber = true; + + this.value = 0; + if (o.value !== undefined) { + if (typeof o.value === "string") this.value = o.value * 1; + else this.value = o.value; + } + + this.min = o.min === undefined ? -Infinity : o.min; + this.max = o.max === undefined ? Infinity : o.max; + this.precision = o.precision === undefined ? 2 : o.precision; + + let s; + + switch (this.precision) { + case 0: + s = 1; + break; + case 1: + s = 0.1; + break; + case 2: + s = 0.01; + break; + case 3: + s = 0.001; + break; + case 4: + s = 0.0001; + break; + case 5: + s = 0.00001; + break; + case 6: + s = 0.000001; + break; + } + + this.step = o.step === undefined ? s : o.step; + this.range = this.max - this.min; + this.value = this.numValue(this.value); + } + + numValue(n) { + if (this.noNeg) n = Math.abs(n); + return ( + Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 + ); + } + + // ---------------------- + // EVENTS DEFAULT + // ---------------------- + + handleEvent(e) { + if (this.lock) return; + if (this.neverlock) Roots.lock = false; + if (!this[e.type]) + return console.error(e.type, "this type of event no existe !"); + + // TODO !!!! + + //if( this.marginDiv ) z.d -= this.margin * 0.5 + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 + + return this[e.type](e); + } + + wheel(e) { + return false; + } + mousedown(e) { + return false; + } + mousemove(e) { + return false; + } + mouseup(e) { + return false; + } + keydown(e) { + return false; + } + keyup(e) { + return false; + } + + // ---------------------- + // object referency + // ---------------------- + + setReferency(obj, key) { + this.objectLink = obj; + this.objectKey = key; + } + + display(v = false) { + this.s[0].visibility = v ? "visible" : "hidden"; + } + + // ---------------------- + // resize height + // ---------------------- + + open() { + if (this.isOpen) return; + this.isOpen = true; + Roots.needResize = true; + if (this.openCallback) this.openCallback(); + } + + close() { + if (!this.isOpen) return; + this.isOpen = false; + Roots.needResize = true; + if (this.closeCallback) this.closeCallback(); + } + + needZone() { + Roots.needReZone = true; + } + + rezone() { + Roots.needReZone = true; + } + + // ---------------------- + // INPUT + // ---------------------- + + select() {} + + unselect() {} + + setInput(Input) { + Roots.setInput(Input, this); + } + + upInput(x, down) { + return Roots.upInput(x, down); + } + + // ---------------------- + // special item + // ---------------------- + + selected(b) { + this.isSelect = b || false; + } +} + +class Bool extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || false; + this.model = o.mode !== undefined ? o.mode : 0; + + this.onName = o.rename || this.txt; + if( o.onName ) o.onname = o.onName; + if( o.onname ) this.onName = o.onname; + + this.inh = o.inh || Math.floor( this.h*0.8 ); + this.inw = o.inw || 36; + + let cc = this.colors; + + if( this.model === 0 ){ + let t = Math.floor(this.h*0.5)-((this.inh-2)*0.5); + this.c[2] = this.dom( 'div', this.css.basic + 'background:'+ cc.inputBg +'; height:'+(this.inh-2)+'px; width:'+this.inw+'px; top:'+t+'px; border-radius:10px; border:2px solid '+ cc.back ); + this.c[3] = this.dom( 'div', this.css.basic + 'height:'+(this.inh-6)+'px; width:16px; top:'+(t+2)+'px; border-radius:10px; background:'+ cc.button+';' ); + } else { + this.p = 0; + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + } + + this.stat = -1; + + this.init(); + this.update(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + this.value = !this.value; + this.update( true ); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + this.cursor('pointer'); + return this.mode( true ) + + } + + reset () { + + this.cursor(); + return this.mode() + + } + + // ---------------------- + // MODE + // ---------------------- + + mode ( over ) { + + let change = false; + let cc = this.colors, s = this.s, n, v = this.value; + + if( over ) n = v ? 4 : 3; + else n = v ? 2 : 1; + + if( this.stat !== n ){ + + this.stat = n; + + if( this.model !== 0 ){ + + switch( n ){ + + case 1: s[2].color = cc.text; s[2].background = cc.button; break; + case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; + case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; + case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; + + } + + this.c[2].innerHTML = v ? this.onName : this.name; + + } else { + + switch( n ){ + + case 1: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.button; break;// off out + case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break;// on over + case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break;// off over + case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break;// on out + + } + + s[3].marginLeft = v ? '17px' : '2px'; + this.c[1].textContent = v ? this.onName : this.name; + + } + + change = true; + + } + + return change + + } + + // ---------------------- + + update ( up ) { + + this.mode(); + if( up ) this.send(); + + } + + rSize () { + + super.rSize(); + + let s = this.s; + let w = (this.w - 10 ) - this.inw; + if( this.model === 0 ){ + s[2].left = w + 'px'; + s[3].left = w + 'px'; + } else { + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + } + + } + +} + +class Button extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = ''; + if( o.value !== undefined ) this.value = o.value; + + this.values = o.value || this.txt; + if( o.values ) this.values = o.values; + + if( !o.values && !o.value ) this.txt = ''; + + this.onName = o.onName || null; + + this.on = false; + + // force button width + this.bw = o.forceWidth || 0; + if(o.bw) this.bw = o.bw; + this.space = o.space || 3; + + if( typeof this.values === 'string' ) this.values = [ this.values ]; + + this.isDown = false; + this.neverlock = true; + this.res = 0; + + this.lng = this.values.length; + this.tmp = []; + this.stat = []; + + let sel, cc = this.colors; + + for( let i = 0; i < this.lng; i++ ){ + + sel = false; + if( this.values[i] === this.value && this.isSelectable ) sel = true; + + this.c[i+2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[i+2].style.background = sel ? cc.select : cc.button; + this.c[i+2].style.color = sel ? cc.textSelect : cc.text; + this.c[i+2].innerHTML = this.values[i]; + this.stat[i] = sel ? 3:1; + + } + + + if( this.txt==='' ) this.p = 0; + + if( (!o.value && !o.values) || this.p === 0 ){ + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + } + + + this.init(); + + } + + onOff() { + + this.on = !this.on; + this.label( this.on ? this.onName : this.value ); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1 + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.text; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + case 1: // down + + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'stroke', cc.backoff, 0); + color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.textOver; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + } + + this.cmode = mode; + return true; + + } + + reset () { + + this.isDown = false; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'circular'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0); + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1); + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + //console.log('over') + + let off = this.offset; + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = off.angle() - this.pi90; + this.r = (((this.r%this.twoPi)+this.twoPi)%this.twoPi); + + if( this.oldr !== null ){ + + let dif = this.r - this.oldr; + this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; + + if( dif > 6 ) this.r = 0; + if( dif < -6 ) this.r = this.twoPi; + + } + + let steps = 1 / this.twoPi; + let value = this.r * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = ~~ ( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'circular' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + // ---------------------- + + makePath () { + + let r = 40; + let d = 24; + let a = this.percent * this.twoPi - 0.001; + let x2 = (r + r * Math.sin(a)) + d; + let y2 = (r - r * Math.cos(a)) + d; + let big = a > Math.PI ? 1 : 0; + return "M " + (r+d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = ( this.value - this.min ) / this.range; + + this.setSvg( this.c[3], 'd', this.makePath(), 1 ); + + if ( this.model > 0 ) { + + let cc = this.colors; + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 1 ); + + } + + if( up ) this.send(); + + } + +} + +class Color extends Proto { + + constructor( o = {} ) { + + super( o ); + + //this.autoHeight = true; + + this.ctype = o.ctype || 'hex'; + + this.wfixe = 256; + + this.cw = this.sb > 256 ? 256 : this.sb; + if(o.cw != undefined ) this.cw = o.cw; + + + + // color up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + this.baseH = this.h; + + this.offset = new V2(); + this.decal = new V2(); + this.pp = new V2(); + + let cc = this.colors; + + // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) + + this.c[2] = this.dom( 'div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};` ); + //this.s[2] = this.c[2].style; + + //this.s[2].textShadow = 'none' + + /*if( this.up ){ + this.s[2].top = 'auto'; + this.s[2].bottom = '2px'; + }*/ + + //this.c[0].style.textAlign = 'center'; + this.c[0].style.display = 'block'; + + this.c[3] = this.getColorRing(); + this.c[3].style.visibility = 'hidden'; + + this.hsl = null; + this.value = '#ffffff'; + if( o.value !== undefined ){ + if( o.value instanceof Array ) this.value = Tools.rgbToHex( o.value ); + else if(!isNaN(o.value)) this.value = Tools.hexToHtml( o.value ); + else this.value = o.value; + } + + this.bcolor = null; + this.isDown = false; + this.fistDown = false; + + this.notext = o.notext || false; + + this.tr = 98; + this.tsl = Math.sqrt(3) * this.tr; + + this.hue = 0; + this.d = 256; + + this.init(); + + this.setColor( this.value ); + + if( o.open !== undefined ) this.open(); + + } + + testZone ( mx, my ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + if( this.up && this.isOpen ){ + + if( l.y > this.wfixe ) return 'title' + else return 'color' + + } else { + + if( l.y < this.baseH+2 ) return 'title' + else if( this.isOpen ) return 'color' + + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.d = 256; + + } + + mousedown ( e ) { + + + let name = this.testZone( e.clientX, e.clientY ); + + + //if( !name ) return; + if(name === 'title'){ + if( !this.isOpen ) this.open(); + else this.close(); + return true; + } + + + if( name === 'color' ){ + + this.isDown = true; + this.fistDown = true; + this.mousemove( e ); + } + } + + mousemove ( e ) { + + let name = this.testZone( e.clientX, e.clientY ); + + let off, d, hue, sat, lum, rad, x, y, rr, T = Tools; + + if( name === 'title' ) this.cursor('pointer'); + + if( name === 'color' ){ + + off = this.offset; + off.x = e.clientX - ( this.zone.x + this.decal.x + this.mid ); + off.y = e.clientY - ( this.zone.y + this.decal.y + this.mid ) - this.ytop; + d = off.length() * this.ratio; + rr = off.angle(); + if(rr < 0) rr += 2 * T.PI; + + + if ( d < 128 ) this.cursor('crosshair'); + else if( !this.isDown ) this.cursor(); + + if( this.isDown ){ + + if( this.fistDown ){ + this.d = d; + this.fistDown = false; + } + + if ( this.d < 128 ) { + + if ( this.d > this.tr ) { // outside hue + + hue = ( rr + T.pi90 ) / T.TwoPI; + this.hue = (hue + 1) % 1; + this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); + + } else { // triangle + + x = off.x * this.ratio; + y = off.y * this.ratio; + + let rr = (this.hue * T.TwoPI) + T.PI; + if(rr < 0) rr += 2 * T.PI; + + rad = Math.atan2(-y, x); + if(rad < 0) rad += 2 * T.PI; + + let rad0 = ( rad + T.pi90 + T.TwoPI + rr ) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60), + a = 0.5 * this.tr, + b = Math.tan(rad1) * a, + r = Math.sqrt(x*x + y*y), + maxR = Math.sqrt(a*a + b*b); + + if( r > maxR ) { + let dx = Math.tan(rad1) * r; + let rad2 = Math.atan(dx / maxR); + if(rad2 > T.pi60) rad2 = T.pi60; + else if( rad2 < -T.pi60 ) rad2 = -T.pi60; + + rad += rad2 - rad1; + + rad0 = (rad + T.pi90 + T.TwoPI + rr) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60); + b = Math.tan(rad1) * a; + r = maxR = Math.sqrt(a*a + b*b); + } + + lum = ((Math.sin(rad0) * r) / this.tsl) + 0.5; + + let w = 1 - (Math.abs(lum - 0.5) * 2); + sat = (((Math.cos(rad0) * r) + (this.tr / 2)) / (1.5 * this.tr)) / w; + sat = T.clamp( sat, 0, 1 ); + + this.setHSL([this.hsl[0], sat, lum]); + + } + } + } + } + + } + + // ---------------------- + + setHeight () { + + this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; + this.s[0].height = this.h + 'px'; + this.zone.h = this.h; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open () { + + super.open(); + + this.setHeight(); + + if( this.up ) this.zone.y -= this.wfixe + 5; + + let t = this.h - this.baseH; + + this.s[3].visibility = 'visible'; + //this.s[3].display = 'block'; + this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.wfixe + 5; + + let t = this.h - this.baseH; + + this.setHeight(); + + this.s[3].visibility = 'hidden'; + //this.s[3].display = 'none'; + this.parentHeight( -t ); + + } + + update ( up ) { + + let cc = Tools.rgbToHex( Tools.hslToRgb([ this.hsl[0], 1, 0.5 ]) ); + + this.moveMarkers(); + + this.value = this.bcolor; + + this.setSvg( this.c[3], 'fill', cc, 2, 0 ); + + this.s[2].background = this.bcolor; + if(!this.notext) this.c[2].textContent = Tools.htmlToHex( this.bcolor ); + + this.invert = Tools.findDeepInver( this.rgb ); + this.s[2].color = this.invert ? '#fff' : '#000'; + + if(!up) return; + + if( this.ctype === 'array' ) this.send( this.rgb ); + if( this.ctype === 'rgb' ) this.send( Tools.htmlRgb( this.rgb ) ); + if( this.ctype === 'hex' ) this.send( Tools.htmlToHex( this.value ) ); + if( this.ctype === 'html' ) this.send(); + + } + + setValue ( v ){ + + if( v instanceof Array ) this.value = Tools.rgbToHex( v ); + else if(!isNaN(v)) this.value = Tools.hexToHtml( v ); + else this.value = v; + + this.setColor( this.value ); + this.update(); + + } + + setColor ( color ) { + + let unpack = Tools.unpack(color); + if (this.bcolor !== color && unpack) { + + this.bcolor = color; + this.rgb = unpack; + this.hsl = Tools.rgbToHsl( this.rgb ); + + this.hue = this.hsl[0]; + + this.update(); + } + return this; + + } + + setHSL ( hsl ) { + + this.hsl = hsl; + this.rgb = Tools.hslToRgb( hsl ); + this.bcolor = Tools.rgbToHex( this.rgb ); + this.update( true ); + return this; + + } + + moveMarkers () { + + let p = this.pp; + let T = Tools; + + this.invert ? '#fff' : '#000'; + let a = this.hsl[0] * T.TwoPI; + let third = (2/3) * T.PI; + let r = this.tr; + let h = this.hsl[0]; + let s = this.hsl[1]; + let l = this.hsl[2]; + + let angle = ( a - T.pi90 ) * T.todeg; + + h = - a + T.pi90; + + let hx = Math.cos(h) * r; + let hy = -Math.sin(h) * r; + let sx = Math.cos(h - third) * r; + let sy = -Math.sin(h - third) * r; + let vx = Math.cos(h + third) * r; + let vy = -Math.sin(h + third) * r; + let mx = (sx + vx) / 2, my = (sy + vy) / 2; + a = (1 - 2 * Math.abs(l - .5)) * s; + let x = sx + (vx - sx) * l + (hx - mx) * a; + let y = sy + (vy - sy) * l + (hy - my) * a; + + p.set( x, y ).addScalar(128); + + //let ff = (1-l)*255; + // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); + + this.setSvg( this.c[3], 'transform', 'rotate('+angle+' )', 2 ); + + this.setSvg( this.c[3], 'cx', p.x, 3 ); + this.setSvg( this.c[3], 'cy', p.y, 3 ); + + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3 ); + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3 ); + this.setSvg( this.c[3], 'fill',this.bcolor, 3 ); + + } + + rSize () { + + //Proto.prototype.rSize.call( this ); + super.rSize(); + + let s = this.s; + + s[2].width = this.sb + 'px'; + s[2].left = this.sa + 'px'; + + //console.log(this.sb) + + this.cw = this.sb > 256 ? 256 : this.sb; + + + + this.rSizeColor( this.cw ); + + this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + //s[3].left = this.decal.x + 'px'; + + } + + rSizeColor ( w ) { + + + if( w === this.wfixe ) return; + + + + this.wfixe = w; + + + + let s = this.s; + + //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; + this.mid = Math.floor( this.wfixe * 0.5 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 '+ this.wfixe + ' '+ this.wfixe ); + s[3].width = this.wfixe + 'px'; + s[3].height = this.wfixe + 'px'; + //s[3].left = this.decal.x + 'px'; + s[3].top = this.decal.y + 'px'; + + this.ratio = 256 / this.wfixe; + this.square = 1 / (60*(this.wfixe/256)); + this.setHeight(); + + } + + +} + +class Fps extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.round = Math.round; + + //this.autoHeight = true; + + this.baseH = this.h; + this.hplus = o.hplus || 50; + + this.res = o.res || 40; + this.l = 1; + + this.precision = o.precision || 0; + + + this.custom = o.custom || false; + this.names = o.names || ['FPS', 'MS']; + let cc = o.cc || ['220,220,220', '255,255,0']; + + // this.divid = [ 100, 100, 100 ]; + // this.multy = [ 30, 30, 30 ]; + + this.adding = o.adding || false; + + this.range = o.range || [ 165, 100, 100 ]; + + this.alpha = o.alpha || 0.25; + + this.values = []; + this.points = []; + this.textDisplay = []; + + if(!this.custom){ + + this.now = Roots.getTime(); + this.startTime = 0;//this.now() + this.prevTime = 0;//this.startTime; + this.frames = 0; + + this.ms = 0; + this.fps = 0; + this.mem = 0; + this.mm = 0; + + this.isMem = ( self.performance && self.performance.memory ) ? true : false; + + // this.divid = [ 100, 200, 1 ]; + // this.multy = [ 30, 30, 30 ]; + + if( this.isMem ){ + + this.names.push('MEM'); + cc.push('0,255,255'); + + } + + this.txt = o.name || 'Fps'; + + } + + + let fltop = Math.floor(this.h*0.5)-3; + const ccc = this.colors; + + this.c[1].textContent = this.txt; + //this.c[1].innerHTML = ' ' + this.txt + this.c[0].style.cursor = 'pointer'; + this.c[0].style.pointerEvents = 'auto'; + + let panelCss = 'display:none; left:10px; top:'+ this.h + 'px; height:'+(this.hplus - 8)+'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid '+ ccc.border +';'; + + if( this.radius !== 0 ) panelCss += 'border-radius:' + this.radius+'px;'; + + this.c[2] = this.dom( 'path', this.css.basic + panelCss , {} ); + + this.c[2].setAttribute('viewBox', '0 0 '+this.res+' 50' ); + this.c[2].setAttribute('height', '100%' ); + this.c[2].setAttribute('width', '100%' ); + this.c[2].setAttribute('preserveAspectRatio', 'none' ); + + + //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + + // arrow + this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:ccc.text, stroke:'none'}); + //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); + + // result test + this.c[4] = this.dom( 'div', this.css.txt + 'position:absolute; left:10px; top:'+(this.h+2) +'px; display:none; width:100%; text-align:center;' ); + + // bottom line + if( o.bottomLine ) this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); + + this.isShow = false; + + + + let s = this.s; + + //s[1].marginLeft = '10px'; + s[1].lineHeight = this.h-4; + s[1].color = ccc.text; + //s[1].paddingLeft = '18px'; + //s[1].fontWeight = 'bold'; + + if( this.radius !== 0 ) s[0].borderRadius = this.radius+'px'; + if( this.colors.gborder!=='none') s[0].border = '1px solid ' + ccc.gborder; + + + + + let j = 0; + + for( j=0; j " + this.names[j] +" "); + + } + + j = this.names.length; + while(j--){ + this.dom( 'path', null, { fill:'rgba('+cc[j]+','+this.alpha+')', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + } + + + this.init(); + + //if( this.isShow ) this.show(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + if( this.isShow ) this.close(); + else this.open(); + + } + + // ---------------------- + + /*mode: function ( mode ) { + + let s = this.s; + + switch(mode){ + case 0: // base + s[1].color = this.colors.text; + //s[1].background = 'none'; + break; + case 1: // over + s[1].color = '#FFF'; + //s[1].background = UIL.SELECT; + break; + case 2: // edit / down + s[1].color = this.colors.text; + //s[1].background = UIL.SELECTDOWN; + break; + + } + },*/ + + tick ( v ) { + + this.values = v; + if( !this.isShow ) return; + this.drawGraph(); + this.upText(); + + } + + makePath ( point ) { + + let p = ''; + p += 'M ' + (-1) + ' ' + 50; + for ( let i = 0; i < this.res + 1; i ++ ) { p += ' L ' + i + ' ' + point[i]; } + p += ' L ' + (this.res + 1) + ' ' + 50; + return p; + + } + + upText ( val ) { + + let v = val || this.values, t = ''; + for( let j=0, lng =this.names.length; j'; + this.c[4].innerHTML = t; + + } + + drawGraph () { + + let svg = this.c[2]; + let i = this.names.length, v, old = 0, n = 0; + + while( i-- ){ + if( this.adding ) v = (this.values[n]+old) * this.range[n]; + else v = (this.values[n] * this.range[n]); + this.points[n].shift(); + this.points[n].push( 50 - v ); + this.setSvg( svg, 'd', this.makePath( this.points[n] ), i+1 ); + old += this.values[n]; + n++; + + } + + } + + open () { + + super.open(); + + this.h = this.hplus + this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g2 ); + + if( this.group !== null ){ this.group.calc( this.hplus );} + else if( this.isUI ) this.main.calc( this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'block'; + this.s[4].display = 'block'; + this.isShow = true; + + if( !this.custom ) Roots.addListen( this ); + + } + + close () { + + super.close(); + + this.h = this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g1 ); + + if( this.group !== null ){ this.group.calc( -this.hplus );} + else if( this.isUI ) this.main.calc( -this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'none'; + this.s[4].display = 'none'; + this.isShow = false; + + if( !this.custom ) Roots.removeListen( this ); + + this.c[4].innerHTML = ''; + + } + + + ///// AUTO FPS ////// + + begin () { + + this.startTime = this.now(); + + } + + end () { + + let time = this.now(); + this.ms = time - this.startTime; + + this.frames ++; + + if ( time > this.prevTime + 1000 ) { + + this.fps = this.round( ( this.frames * 1000 ) / ( time - this.prevTime ) ); + + this.prevTime = time; + this.frames = 0; + + if ( this.isMem ) { + + let heapSize = performance.memory.usedJSHeapSize; + let heapSizeLimit = performance.memory.jsHeapSizeLimit; + + this.mem = this.round( heapSize * 0.000000954 ); + this.mm = heapSize / heapSizeLimit; + + } + + } + + this.values = [ this.fps, this.ms , this.mm ]; + + this.drawGraph(); + this.upText( [ this.fps, this.ms, this.mem ] ); + + return time; + + } + + listening () { + + if( !this.custom ) this.startTime = this.end(); + + } + + rSize () { + + let s = this.s; + let w = this.w; + + s[3].left = ( this.sa + this.sb - 6 ) + 'px'; + + s[0].width = w + 'px'; + s[1].width = w + 'px'; + s[2].left = 10 + 'px'; + s[2].width = (w-20) + 'px'; + s[4].width = (w-20) + 'px'; + + } + +} + +class Graph extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value !== undefined ? o.value : [0,0,0]; + this.lng = this.value.length; + + this.precision = o.precision !== undefined ? o.precision : 2; + this.multiplicator = o.multiplicator || 1; + this.neg = o.neg || false; + + this.line = o.line !== undefined ? o.line : true; + + //if(this.neg)this.multiplicator*=2; + + this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; + this.isNumber = false; + + this.isDown = false; + + this.h = o.h || 128 + 10; + this.rh = this.h - 10; + this.top = 0; + + this.c[0].style.width = this.w +'px'; + + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = this.w +'px'; + + if(!this.autoWidth){ + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + } + + + //this.c[1].style.background = '#ff0000'; + //this.c[1].style.textAlign = 'center'; + this.top = 10; + this.h += 10; + + } + + this.gh = this.rh - 28; + this.gw = this.w - 28; + + //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); + + //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' + this.c[2] = this.dom( 'div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:'+(this.h-20)+'px; left:14px; width:'+this.gw+'px; color:'+ this.colors.text ); + + //this.c[2].textContent = this.value; + this.c[2].innerHTML = this.valueToHtml(); + + let svg = this.dom( 'svg', this.css.basic , { viewBox:'0 0 '+this.w+' '+this.rh, width:this.w, height:this.rh, preserveAspectRatio:'none' } ); + this.setCss( svg, { width:this.w, height:this.rh, left:0, top:this.top }); + + this.dom( 'path', '', { d:'', stroke:this.colors.text, 'stroke-width':2, fill:'none', 'stroke-linecap':'butt' }, svg ); + this.dom( 'rect', '', { x:10, y:10, width:this.gw+8, height:this.gh+8, stroke:'rgba(0,0,0,0.3)', 'stroke-width':1 , fill:'none'}, svg ); + + this.iw = ((this.gw-(4*(this.lng-1)))/this.lng); + let t = []; + this.cMode = []; + + this.v = []; + + for( let i = 0; i < this.lng; i++ ){ + + t[i] = [ 14 + (i*this.iw) + (i*4), this.iw ]; + t[i][2] = t[i][0] + t[i][1]; + this.cMode[i] = 0; + + if( this.neg ) this.v[i] = ((1+(this.value[i] / this.multiplicator))*0.5); + else this.v[i] = this.value[i] / this.multiplicator; + + this.dom( 'rect', '', { x:t[i][0], y:14, width:t[i][1], height:1, fill:this.colors.text, 'fill-opacity':0.3 }, svg ); + + } + + this.tmp = t; + this.c[3] = svg; + + //console.log(this.w) + + this.init(); + + if( this.c[1] !== undefined ){ + this.c[1].style.top = 0 +'px'; + this.c[1].style.height = 20 +'px'; + this.s[1].lineHeight = (20-5)+'px'; + } + + this.update( false ); + + } + + setValue ( value ) { + + this.value = value; + this.lng = this.value.length; + for (var i = 0; i < this.lng; i++) { + if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5; + else this.v[i] = value[i] / this.multiplicator; + } + this.update(); + + } + + valueToHtml() { + + let i = this.lng, n=0, r = ''; + let w = 100 / this.lng; + let style = 'width:'+ w +'%;';//' text-align:center;' + while(i--){ + if(n===this.lng-1) r += '
' + this.value[n] + '
'; + else r += '' + this.value[n] + ''; + n++; + } + return r + } + + updateSVG () { + + if( this.line ) this.setSvg( this.c[3], 'd', this.makePath(), 0 ); + + for(let i = 0; ithis.top && l.yt[i][0] && l.x this.distance ) { + let angle = Math.atan2(this.tmp.x, this.tmp.y); + this.tmp.x = Math.sin( angle ) * this.distance; + this.tmp.y = Math.cos( angle ) * this.distance; + } + + this.pos.copy( this.tmp ).divideScalar( this.distance ).negate(); + + this.update(); + + } + + setValue ( v ) { + + if(v===undefined) v=[0,0]; + + this.pos.set( v[0] || 0, v[1] || 0 ); + this.updateSVG(); + + } + + update ( up ) { + + if( up === undefined ) up = true; + + if( this.interval !== null ){ + + if( !this.isDown ){ + + this.pos.lerp( null, 0.3 ); + + this.pos.x = Math.abs( this.pos.x ) < 0.01 ? 0 : this.pos.x; + this.pos.y = Math.abs( this.pos.y ) < 0.01 ? 0 : this.pos.y; + + if( this.isUI && this.main.isCanvas ) this.main.draw(); + + } + + } + + this.updateSVG(); + + if( up ) this.send(); + + + if( this.pos.isZero() ) this.stopInterval(); + + } + + updateSVG () { + + //let x = this.radius - ( -this.pos.x * this.distance ); + //let y = this.radius - ( -this.pos.y * this.distance ); + + let x = (this.diam*0.5) - ( -this.pos.x * this.distance ); + let y = (this.diam*0.5) - ( -this.pos.y * this.distance ); + + if(this.model === 0){ + + let sx = x + ((this.pos.x)*5) + 5; + let sy = y + ((this.pos.y)*5) + 10; + + this.setSvg( this.c[3], 'cx', sx*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', sy*this.ratio, 3 ); + } else { + this.setSvg( this.c[3], 'cx', x*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 3 ); + } + + + + this.setSvg( this.c[3], 'cx', x*this.ratio, 4 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 4 ); + + this.value[0] = ( this.pos.x * this.multiplicator ).toFixed( this.precision ) * 1; + this.value[1] = ( this.pos.y * this.multiplicator ).toFixed( this.precision ) * 1; + + if(this.haveText) this.c[2].textContent = this.value; + + } + + clear () { + + this.stopInterval(); + super.clear(); + + } + +} + +class Knob extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.autoWidth = false; + + this.setTypeNumber( o ); + + this.minw = this.w; + this.diam = o.diam || this.w; + + this.mPI = Math.PI * 0.8; + this.toDeg = 180 / Math.PI; + this.cirRange = this.mPI * 2; + + this.offset = new V2(); + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w +'px'; + this.c[0].style.display = 'block'; + + if(this.c[1] !== undefined) { + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + this.percent = 0; + + this.cmode = 0; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); + + this.c[3] = this.getKnob(); + this.setSvg( this.c[3], 'fill', cc.button, 0 ); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + this.setSvg( this.c[3], 'stroke', cc.text, 3 ); + this.setSvg( this.c[3], 'd', this.makeGrad(), 3 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam ); + this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); + + if ( this.model > 0 ) { + + Tools.dom( 'path', '', { d: '', stroke:cc.text, 'stroke-width': 2, fill: 'none', 'stroke-linecap': 'round' }, this.c[3] ); //4 + + if ( this.model == 2) { + + Tools.addSVGGlowEffect(); + this.setSvg( this.c[3], 'style', 'filter: url("#UILGlow");', 4 ); + + } + + } + + this.r = 0; + + this.init(); + + this.update(); + + } + + mode ( mode ) { + + let cc = this.colors; + + if( this.cmode === mode ) return false; + + switch( mode ) { + case 0: // base + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.button, 0); + //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + break; + case 1: // down + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'fill', cc.select, 0); + //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); + this.setSvg( this.c[3], 'stroke', cc.textOver, 1 ); + break; + } + + this.cmode = mode; + return true; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'knob'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0) + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1) + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let off = this.offset; + + //off.x = this.radius - ( e.clientX - this.zone.x ); + //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = - Math.atan2( off.x, off.y ); + + if( this.oldr !== null ) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; + + this.r = this.r > this.mPI ? this.mPI : this.r; + this.r = this.r < -this.mPI ? -this.mPI : this.r; + + let steps = 1 / this.cirRange; + let value = (this.r + this.mPI) * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = Math.floor( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'knob' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + makeGrad () { + + let d = '', step, range, a, x, y, x2, y2, r = 64; + let startangle = Math.PI + this.mPI; + let endangle = Math.PI - this.mPI; + //let step = this.step>5 ? this.step : 1; + + if(this.step>5){ + range = this.range / this.step; + step = ( startangle - endangle ) / range; + } else { + step = (( startangle - endangle ) / r)*2; + range = r*0.5; + } + + for ( let i = 0; i <= range; ++i ) { + + a = startangle - ( step * i ); + x = r + Math.sin( a ) * ( r - 20 ); + y = r + Math.cos( a ) * ( r - 20 ); + x2 = r + Math.sin( a ) * ( r - 24 ); + y2 = r + Math.cos( a ) * ( r - 24 ); + d += 'M' + x + ' ' + y + ' L' + x2 + ' '+y2 + ' '; + + } + + return d; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = (this.value - this.min) / this.range; + + let sa = Math.PI + this.mPI; + let ea = ( ( this.percent * this.cirRange ) - ( this.mPI ) ); + + let sin = Math.sin( ea ); + let cos = Math.cos( ea ); + + let x1 = ( 25 * sin ) + 64; + let y1 = -( 25 * cos ) + 64; + let x2 = ( 20 * sin ) + 64; + let y2 = -( 20 * cos ) + 64; + + this.setSvg( this.c[3], 'd', 'M ' + x1 +' ' + y1 + ' L ' + x2 +' ' + y2, 1 ); + + if ( this.model > 0 ) { + + let x1 = 36 * Math.sin( sa ) + 64; + let y1 = 36 * Math.cos( sa ) + 64; + let x2 = 36 * sin + 64; + let y2 = -36 * cos + 64; + let big = ea <= Math.PI - this.mPI ? 0 : 1; + this.setSvg( this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4 ); + + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( this.colors.text, -0.75) ), Tools.unpack( this.colors.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 4 ); + + } + + if( up ) this.send(); + + } + +} + +class List extends Proto { + + constructor( o = {} ) { + + super( o ); + + // TODO not work + this.hideCurrent = false; + + // images + this.path = o.path || ''; + this.format = o.format || ''; + + + this.isWithImage = this.path !== '' ? true:false; + this.preLoadComplete = false; + + this.tmpImage = {}; + this.tmpUrl = []; + + this.m = o.m !== undefined ? o.m : 5; + + + let align = o.align || 'left'; + + // scroll size + let ss = o.scrollSize || 10; + this.ss = ss+1; + + this.sMode = 0; + this.tMode = 0; + + this.listOnly = o.listOnly || false; + this.staticTop = o.staticTop || false; + + this.isSelectable = this.listOnly; + if( o.select !== undefined ) o.selectable = o.select; + if( o.selectable !== undefined ) this.isSelectable = o.selectable; + + if( this.txt === '' ) this.p = 0; + + + let fltop = Math.floor(this.h*0.5)-3; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.basic + 'top:0; display:none; border-radius:'+this.radius+'px;' ); + this.c[3] = this.dom( 'div', this.css.item + 'padding:0px '+this.m+'px; margin-bottom:0px; position:absolute; justify-content:'+align+'; text-align:'+align+'; line-height:'+(this.h-4)+'px; top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:1px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); + + this.scrollerBack = this.dom( 'div', this.css.basic + 'right:0px; width:'+ss+'px; background:'+cc.back+'; display:none;'); + this.scroller = this.dom( 'div', this.css.basic + 'right:'+((ss-(ss*0.25))*0.5)+'px; width:'+(ss*0.25)+'px; background:'+cc.text+'; display:none; '); + + this.c[3].style.color = cc.text; + + + this.list = []; + this.refObject = null; + + if( o.list ){ + if( o.list instanceof Array ){ + this.list = o.list; + } else if( o.list instanceof Object ){ + this.refObject = o.list; + for( let g in this.refObject ) this.list.push( g ); + } + } + + this.items = []; + + this.prevName = ''; + + + this.tmpId = 0; + + this.baseH = this.h; + + this.itemHeight = o.itemHeight || this.h;//(this.h-3); + + // force full list + this.full = o.full || false; + + this.py = 0; + this.ww = this.sb; + this.scroll = false; + this.isDown = false; + + this.current = null; + + // list up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + if( this.up ){ + + this.c[2].style.top = 'auto'; + this.c[3].style.top = 'auto'; + this.c[4].style.top = 'auto'; + + this.c[2].style.bottom = this.h-2 + 'px'; + this.c[3].style.bottom = '1px'; + this.c[4].style.bottom = fltop + 'px'; + + } else { + this.c[2].style.top = this.baseH + 'px'; + } + + this.listIn = this.dom( 'div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); + this.listIn.name = 'list'; + + this.topList = 0; + + this.c[2].appendChild( this.listIn ); + this.c[2].appendChild( this.scrollerBack ); + this.c[2].appendChild( this.scroller ); + + if( o.value !== undefined ){ + if(!isNaN(o.value)) this.value = this.list[ o.value ]; + else this.value = o.value; + }else { + this.value = this.list[0]; + } + + this.isOpenOnStart = o.open || false; + + if( this.listOnly ){ + this.baseH = 5; + this.c[3].style.display = 'none'; + this.c[4].style.display = 'none'; + this.c[2].style.top = this.baseH+'px'; + this.isOpenOnStart = true; + } + + + this.miniCanvas = o.miniCanvas || false; + this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; + this.imageSize = o.imageSize || [20,20]; + + // dragout function + this.drag = o.drag || false; + this.dragout = o.dragout || false; + this.dragstart = o.dragstart || null; + this.dragend = o.dragend || null; + + + + //this.c[0].style.background = '#FF0000' + ///if( this.isWithImage ) this.preloadImage(); + + this.setList( this.list ); + this.init(); + if( this.isWithImage ) this.preloadImage(); + if( this.isOpenOnStart ) this.open( true ); + + this.baseH += this.mtop; + + } + + // image list + + preloadImage () { + + + + this.preLoadComplete = false; + + this.tmpImage = {}; + for( let i=0; i this.h - this.baseH ) return 'title'; + else { + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + + } else { + if( l.y < this.baseH+2 ) return 'title'; + else { + if( this.isOpen ){ + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + } + + } + + return ''; + + } + + testItems ( y ) { + + let name = ''; + + let items = this.items; + + /*if(this.hideCurrent){ + //items = [...this.items] + items = this.items.slice(this.tmpId) + + }*/ + + let i = items.length, item, a, b; + while(i--){ + item = items[i]; + a = item.posy + this.topList; + b = item.posy + this.itemHeight + 1 + this.topList; + if( y >= a && y <= b ){ + name = 'item' + i; + this.modeItem(0); + this.current = item; + this.modeItem(1); + return name; + } + + } + + return name; + + } + + modeItem ( mode ) { + + if( !this.current ) return + + if( this.current.select && mode===0) mode = 2; + let cc = this.colors; + + switch( mode ){ + + case 0: // base + this.current.style.background = cc.back; + this.current.style.color = cc.text; + break; + case 1: // over + this.current.style.background = cc.over; + this.current.style.color = cc.textOver; + break; + case 2: // edit / down + this.current.style.background = cc.select; + this.current.style.color = cc.textSelect; + break; + + } + } + + unSelected() { + + if( !this.current ) return + this.modeItem(0); + this.current = null; + + } + + selected() { + + if( !this.current ) return + this.resetItems(); + this.modeItem(2); + this.current.select = true; + + + + } + + resetItems() { + + let i = this.items.length; + while(i--){ + this.items[i].select = false; + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text; + } + + } + + hideActive() { + + if( !this.hideCurrent ) return + //if( !this.current ) return + if( this.current )this.tmpId = this.current.id; + this.resetHide(); + //this.items[this.tmpId].style.height = 0+'px' + + } + + resetHide() { + + console.log(this.tmpId); + + let i = this.items.length; + while(i--){ + if(i===this.tmpId){ + this.items[i].style.height = 0+'px'; + this.items[i].posy = -1; + } else { + this.items[i].style.height = this.itemHeight+'px'; + this.items[i].posy = (this.itemHeight+1)*(i-1); + } + //this.items[i].style.display = 'flex' + + /*this.items[i].select = false + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text;*/ + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + + mouseup ( e ) { + + this.isDown = false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'scroll' ){ + + this.isDown = true; + this.mousemove( e ); + + } else if( name === 'title' ){ + + this.modeTitle(2); + if( !this.listOnly ){ + this.hideActive(); + if( !this.isOpen ) this.open(); + else this.close(); + } + } else { + // is item + if( this.current ){ + + this.value = this.list[ this.current.id ]; + //this.tmpId = this.current.id + + if( this.isSelectable ) this.selected(); + + //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); + this.send( this.value ); + + if( !this.listOnly ) { + this.close(); + this.setTopItem(); + //this.hideActive() + } + } + + } + + return true; + + } + + mousemove ( e ) { + + let nup = false; + let name = this.testZone( e ); + + if( !name ) return nup; + + if( name === 'title' ){ + this.unSelected(); + this.modeTitle(1); + this.cursor('pointer'); + + } else if( name === 'scroll' ){ + + this.cursor('s-resize'); + this.modeScroll(1); + if( this.isDown ){ + this.modeScroll(2); + //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + let top = this.zone.y+this.baseH-2; + this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + } + //if(this.isDown) this.listmove(e); + } else { + + // is item + this.modeTitle(0); + this.modeScroll(0); + this.cursor('pointer'); + + } + + if( name !== this.prevName ) nup = true; + this.prevName = name; + + return nup; + + } + + wheel ( e ) { + + let name = this.testZone( e ); + if( name === 'title' ) return false; + this.py += e.delta*10; + this.update(this.py); + return true; + + } + + + + // ---------------------- + + reset () { + + this.prevName = ''; + this.unSelected(); + this.modeTitle(0); + this.modeScroll(0); + + //console.log('this is reset') + + } + + modeScroll ( mode ) { + + if( mode === this.sMode ) return; + + let s = this.scroller.style; + let cc = this.colors; + + switch(mode){ + case 0: // base + s.background = cc.text; + break; + case 1: // over + s.background = cc.select; + break; + case 2: // edit / down + s.background = cc.select; + break; + + } + + this.sMode = mode; + } + + modeTitle ( mode ) { + + if( mode === this.tMode ) return; + + let s = this.s; + let cc = this.colors; + + switch(mode){ + case 0: // base + s[3].color = cc.text; + s[3].background = cc.button; + break; + case 1: // over + s[3].color = cc.textOver; + s[3].background = cc.overoff; + break; + case 2: // edit / down + s[3].color = cc.textSelect; + s[3].background = cc.overoff; + break; + + } + + this.tMode = mode; + + } + + clearList () { + + while ( this.listIn.children.length ) this.listIn.removeChild( this.listIn.lastChild ); + this.items = []; + + } + + setList ( list ) { + + this.clearList(); + + this.list = list; + this.length = this.list.length; + + let lng = this.hideCurrent? this.length-1 : this.length; + + this.maxItem = this.full ? lng : 5; + this.maxItem = lng < this.maxItem ? lng : this.maxItem; + + this.maxHeight = this.maxItem * (this.itemHeight+1) + 2; + + + + this.max = lng * (this.itemHeight+1) + 2; + this.ratio = this.maxHeight / this.max; + this.sh = this.maxHeight * this.ratio; + this.range = this.maxHeight - this.sh; + + this.c[2].style.height = this.maxHeight + 'px'; + this.scrollerBack.style.height = this.maxHeight + 'px'; + this.scroller.style.height = this.sh + 'px'; + + if( this.max > this.maxHeight ){ + this.ww = this.sb - this.ss; + this.scroll = true; + } + + if( this.miniCanvas ) { + + this.tmpCanvas = document.createElement('canvas'); + this.tmpCanvas.width = this.imageSize[0]; + this.tmpCanvas.height = this.imageSize[1]; + this.tmpCtx = this.tmpCanvas.getContext("2d"); + this.tmpCtx.fillStyle = this.canvasBg; + this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); + + } + + let item, n;//, l = this.sb; + for( let i=0; i this.range ? this.range : y; + + this.topList = -Math.floor( y / this.ratio ); + + this.listIn.style.top = this.topList+'px'; + this.scroller.style.top = Math.floor( y ) + 'px'; + + this.py = y; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open ( first ) { + + super.open(); + + this.update( 0 ); + + this.h = this.maxHeight + this.baseH + 5; + if( !this.scroll ){ + this.topList = 0; + this.h = this.baseH + 5 + this.max; + this.scroller.style.display = 'none'; + this.scrollerBack.style.display = 'none'; + } else { + this.scroller.style.display = 'block'; + this.scrollerBack.style.display = 'block'; + } + this.s[0].height = this.h + 'px'; + this.s[2].display = 'block'; + + if( this.up ){ + this.zone.y -= this.h - (this.baseH-10); + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + } else { + this.setSvg( this.c[4], 'd', this.svgs.g2 ); + } + + this.rSizeContent(); + + let t = this.h - this.baseH; + + this.zone.h = this.h; + + if(!first) this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.h - (this.baseH-10); + + let t = this.h - this.baseH; + + this.h = this.baseH; + this.s[0].height = this.h + 'px'; + this.s[2].display = 'none'; + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + + this.zone.h = this.h; + + this.parentHeight( -t ); + + } + + // ----- + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSizeContent () { + + let i = this.length; + while(i--) this.listIn.children[i].style.width = this.ww + 'px'; + + } + + rSize () { + + super.rSize(); + + //Proto.prototype.rSize.call( this ); + + let s = this.s; + let w = this.sb; + let d = this.sa; + + if(s[2]=== undefined) return; + + s[2].width = w + 'px'; + s[2].left = d +'px'; + + s[3].width = w + 'px'; + s[3].left = d + 'px'; + + s[4].left = d + w - 15 + 'px'; + + this.ww = w; + if( this.max > this.maxHeight ) this.ww = w-this.ss; + if(this.isOpen) this.rSizeContent(); + + } + +} + +class Numeric extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.setTypeNumber( o ); + + this.allway = o.allway || false; + + this.isDown = false; + this.value = [0]; + this.multy = 1; + this.invmulty = 1; + this.isSingle = true; + this.isAngle = false; + this.isVector = false; + + if( o.isAngle ){ + this.isAngle = true; + this.multy = Tools.torad; + this.invmulty = Tools.todeg; + } + + this.isDrag = o.drag || false; + + if( o.value !== undefined ){ + if( !isNaN(o.value) ){ + this.value = [o.value]; + } else if( o.value instanceof Array ){ + this.value = o.value; + this.isSingle = false; + } else if( o.value instanceof Object ){ + this.value = []; + if( o.value.x !== undefined ) this.value[0] = o.value.x; + if( o.value.y !== undefined ) this.value[1] = o.value.y; + if( o.value.z !== undefined ) this.value[2] = o.value.z; + if( o.value.w !== undefined ) this.value[3] = o.value.w; + this.isSingle = false; + this.isVector = true; + } + } + + this.lng = this.value.length; + this.tmp = []; + + this.current = -1; + this.prev = { x:0, y:0, d:0, v:0 }; + + let cc = this.colors; + + // bg + this.c[2] = this.dom( 'div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h-8) + 'px;' ); + + this.cMode = []; + + let i = this.lng; + while(i--){ + + if( this.isAngle ) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed( this.precision ); + this.c[3+i] = this.dom( 'div', this.css.txtselect + 'top:1px; height:'+(this.h-2)+'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;'); + if(o.center) this.c[2+i].style.textAlign = 'center'; + this.c[3+i].textContent = this.value[i]; + this.c[3+i].style.color = this.colors.text; + this.c[3+i].isNum = true; + this.cMode[i] = 0; + + } + + // selection + this.selectId = 3 + this.lng; + this.c[this.selectId] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.cursorId = 4 + this.lng; + this.c[ this.cursorId ] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + this.init(); + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0"; + this.easing = o.easing || 1; + + this.setTypeNumber(o); + + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + + //this.defaultBorderColor = this.colors.hide; + + this.isDown = false; + this.isOver = false; + this.allway = o.allway || false; + + this.isDeg = o.isDeg || false; + this.isCyclic = o.cyclic || false; + + this.firstImput = false; + + let cc = this.colors; + + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + this.c[2] = this.dom( + "div", + this.css.txtselect + + "border:none; background:none; width:47px; color:" + + cc.text + + ";" + ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); + this.c[3] = this.dom( + "div", + this.css.basic + " top:0; height:" + this.h + "px;" + ); + + this.c[4] = this.dom( + "div", + this.css.basic + + "background:" + + cc.back + + "; top:2px; height:" + + (this.h - 4) + + "px;" + ); + this.c[5] = this.dom( + "div", + this.css.basic + + "left:4px; top:5px; height:" + + (this.h - 10) + + "px; background:" + + cc.text + + ";" + ); + + this.c[2].isNum = true; + //this.c[2].style.height = (this.h-4) + 'px'; + //this.c[2].style.lineHeight = (this.h-8) + 'px'; + this.c[2].style.height = this.h - 2 + "px"; + this.c[2].style.lineHeight = this.h - 10 + "px"; + + if (this.model !== 0) { + let r1 = 4, + h1 = 4, + h2 = 8, + ww = this.h - 6, + ra = 16; + + if (this.model === 2) { + r1 = 0; + h1 = 2; + h2 = 4; + ra = 2; + ww = (this.h - 6) * 0.5; + } + + if (this.model === 3) this.c[5].style.visible = "none"; + + this.c[4].style.borderRadius = r1 + "px"; + this.c[4].style.height = h2 + "px"; + this.c[4].style.top = this.h * 0.5 - h1 + "px"; + this.c[5].style.borderRadius = r1 * 0.5 + "px"; + this.c[5].style.height = h1 + "px"; + this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; + + //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); + this.c[6] = this.dom( + "div", + this.css.basic + + "border-radius:" + + ra + + "px; margin-left:" + + -ww * 0.5 + + "px; background:" + + cc.text + + "; left:4px; top:3px; height:" + + (this.h - 6) + + "px; width:" + + ww + + "px;" + ); + } + + this.init(); + } + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + if (l.x >= this.txl) return "text"; + else if (l.x >= this.sa) return "scroll"; + else return ""; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (this.isDown) this.isDown = false; + } + + mousedown(e) { + let name = this.testZone(e); + + if (!name) return false; + + if (name === "scroll") { + this.isDown = true; + this.old = this.value; + this.mousemove(e); + } + + /*if( name === 'text' ){ + this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); + }*/ + + return true; + } + + mousemove(e) { + let nup = false; + + let name = this.testZone(e); + + if (name === "scroll") { + this.mode(1); + this.cursor("w-resize"); + //} else if(name === 'text'){ + //this.cursor('pointer'); + } else { + this.cursor(); + } + + if (this.isDown) { + let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; + + // lo mapeo al rango 0 ... 1 + nNormalized = Math.min(1, Math.max(0, nNormalized)); + + // aplico easing + let nEased = Math.pow(nNormalized, this.easing); // easing + + let nNew = nEased * this.range + this.min; + let nNewSlider = nNormalized * this.range + this.min; + + this.sliderValue = this.numValue(nNewSlider); + + let delta = nNew - this.old; + + let steps; + if (delta >= this.step || delta <= this.step) { + steps = Math.floor(delta / this.step); + this.value = this.numValue(this.old + steps * this.step); + // value without easing applied + + this.update(true); + this.old = this.value; + } + //console.log("n, normalized, value", nNew, nNormalized, this.value); + nup = true; + } + + return nup; + } + + wheel(e) { + let name = this.testZone(e); + + if (name === "scroll") { + let v = this.value - this.step * e.delta; + + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue(v); + this.old = v; + this.update(true); + + return true; + } + + return false; + } + + //keydown: function ( e ) { return true; }, + + // ---------------------- + + validate() { + let n = this.c[2].textContent; + + if (!isNaN(n)) { + this.value = this.numValue(n); + this.update(true); + } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + } + + reset() { + //this.clearInput(); + this.isDown = false; + this.mode(0); + } + + mode(mode) { + let s = this.s; + let cc = this.colors; + + switch (mode) { + case 0: // base + // s[2].border = '1px solid ' + this.colors.hide; + s[2].color = cc.text; + s[4].background = cc.back; + s[5].background = cc.text; + if (this.model !== 0) s[6].background = cc.text; //cc.button; + break; + case 1: // scroll over + //s[2].border = '1px dashed ' + this.colors.hide; + s[2].color = cc.textOver; + s[4].background = cc.back; + s[5].background = cc.textOver; + if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; + break; + } + } + + update(up) { + let normalized = (this.value - this.min) / this.range; + + let uneased = + this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); + + let ww = Math.floor(this.ww * uneased); + //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); + + if (this.model !== 3) this.s[5].width = ww + "px"; + if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; + this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + + if (up) this.send(); + } + + rSize() { + super.rSize(); + + let w = this.sb - this.sc; + this.ww = w - 6; + + let tx = this.sc; + if (this.isUI || !this.simple) tx = this.sc + 10; + this.txl = this.w - tx + 2; + + //let ty = Math.floor(this.h * 0.5) - 8; + + let s = this.s; + + s[2].width = this.sc - 6 + "px"; + s[2].left = this.txl + 4 + "px"; + //s[2].top = ty + 'px'; + s[3].left = this.sa + "px"; + s[3].width = w + "px"; + s[4].left = this.sa + "px"; + s[4].width = w + "px"; + s[5].left = this.sa + 3 + "px"; + + this.update(); + } +} + +class TextInput extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.cmode = 0; + + this.value = o.value !== undefined ? o.value : ''; + this.placeHolder = o.placeHolder || ''; + + this.allway = o.allway || false; + this.editable = o.edit !== undefined ? o.edit : true; + + this.isDown = false; + + let cc = this.colors; + + // text + this.c[2] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[2].textContent = this.value; + + // selection + this.c[3] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.c[4] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + // fake + this.c[5] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; border:none; justify-content: center; font-style: italic; color:'+cc.border+';' ); + if( this.value === '' ) this.c[5].textContent = this.placeHolder; + + + + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x >= this.sa ) return 'text'; + return ''; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if(!this.editable) return; + + if( this.isDown ){ + this.isDown = false; + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + if( !this.isDown ){ + this.isDown = true; + if( name === 'text' ) this.setInput( this.c[2] ); + return this.mousemove( e ); + } + + return false; + + } + + mousemove ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + //let l = this.local; + //if( l.x === -1 && l.y === -1 ){ return;} + + //if( l.x >= this.sa ) this.cursor('text'); + //else this.cursor(); + + let x = 0; + + if( name === 'text' ) this.cursor('text'); + else this.cursor(); + + if( this.isDown ) x = e.clientX - this.zone.x; + + return this.upInput( x - this.sa -3, this.isDown ); + + } + + update ( ) { + + this.c[2].textContent = this.value; + + } + + // ---------------------- + + reset () { + + this.cursor(); + + } + + // ---------------------- + // INPUT + // ---------------------- + + select ( c, e, w, t ) { + + let s = this.s; + let d = this.sa + 5; + s[4].width = '1px'; + s[4].left = ( d + e ) + 'px'; + + s[3].left = ( d + e ) + 'px'; + s[3].width = w + 'px'; + this.c[3].innerHTML = t; + + } + + unselect () { + + let s = this.s; + if(!s) return; + s[3].width = 0 + 'px'; + this.c[3].innerHTML = 't'; + s[4].width = 0 + 'px'; + + } + + validate ( force ) { + + if( this.allway ) force = true; + + this.value = this.c[2].textContent; + + if(this.value !== '') this.c[5].textContent = ''; + else this.c[5].textContent = this.placeHolder; + + if( !force ) return; + + this.send(); + + } + + // ---------------------- + // REZISE + // ---------------------- + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + + s[5].left = this.sa + 'px'; + s[5].width = this.sb + 'px'; + + } + + +} + +class Title extends Proto { + + constructor( o = {} ) { + + super( o ); + + let prefix = o.prefix || ''; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:right; width:60px; line-height:'+ (this.h-8) + 'px; color:' + this.colors.text ); + + if( this.h === 31 ){ + + this.s[0].height = this.h + 'px'; + this.s[1].top = 8 + 'px'; + this.c[2].style.top = 8 + 'px'; + + } + + let s = this.s; + + s[1].justifyContent = o.align || 'left'; + //s[1].textAlign = o.align || 'left'; + s[1].fontWeight = o.fontWeight || 'bold'; + + + this.c[1].textContent = this.txt.substring(0,1).toUpperCase() + this.txt.substring(1).replace("-", " "); + this.c[2].textContent = prefix; + + this.init(); + + } + + text( txt ) { + + this.c[1].textContent = txt; + + } + + text2( txt ) { + + this.c[2].textContent = txt; + + } + + rSize() { + + super.rSize(); + this.s[1].width = this.w + 'px'; //- 50 + 'px'; + this.s[2].left = this.w + 'px';//- ( 50 + 26 ) + 'px'; + + } + + setColor( c ) { + this.s[1].color = c; + this.s[2].color = c; + } + +} + +class Select extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.isDown = false; + this.onActif = o.onActif || function(){}; + + //let prefix = o.prefix || ''; + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+ cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + //this.c[2].style.color = this.fontColor; + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'cursor' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + this.isActif = false; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + if( l.x > this.sa && l.x < this.sa+30 ) return 'over' + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ) + } + + return false + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false + + this.isDown = true; + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + this.send(); + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + if( n===1 ) this.isActif = false; + if( n===3 ){ + if( !this.isActif ){ this.isActif = true; n=4; this.onActif( this ); } + else { this.isActif = false; } + } + + if( n===2 && this.isActif ) n = 4; + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.action; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.action; break; // actif + + } + + change = true; + + } + + return change + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ) + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + +} + +class Bitmap extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.refTexture = o.texture || null; + this.img = null; + + this.isDown = false; + this.neverlock = true; + + + + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'load' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x > this.sa && l.x < this.sa+30 ) return 'over'; + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'over' ){ + this.isDown = true; + Files.load( { callback:this.changeBitmap.bind(this) } ); + + } + + + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ); + + } + + mousemove ( e ) { + + let up = false; + + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + + changeBitmap( img, fname ){ + + if( img ){ + this.img = img; + this.apply( fname ); + } else { + this.img = null; + this.apply( 'null' ); + } + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + + if( this.img !== null ){ + if( this.objectLink !== null ) this.objectLink[ this.val ] = v; + if( this.callback ) this.callback( this.value, this.img, this.name ); + } + + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.over; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.select; break; // actif + + } + + change = true; + + } + + return change; + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ); + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + +} + +//import { Proto } from '../core/Proto.js'; + +class Selector extends Button { + + constructor( o = {} ) { + + if( o.selectable === undefined ) o.selectable = true; + super( o ); + + } + +} + +class Item extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.p = 100; + this.value = this.txt; + this.status = 1; + + this.itype = o.itype || 'none'; + this.val = this.itype; + + this.graph = this.svgs[ this.itype ]; + + let fltop = Math.floor(this.h*0.5)-7; + + this.c[2] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.graph, fill:this.colors.text, stroke:'none'}); + + this.s[1].marginLeft = 20 + 'px'; + + this.init(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousemove ( e ) { + + this.cursor('pointer'); + + //up = this.modes( this.isDown ? 3 : 2, name ); + + } + + mousedown ( e ) { + + if( this.isUI ) this.main.resetItem(); + + this.selected( true ); + + this.send(); + + return true; + + } + + uiout () { + + if( this.isSelect ) this.mode(3); + else this.mode(1); + + } + + uiover () { + + if( this.isSelect ) this.mode(4); + else this.mode(2); + + } + + update () { + + } + + /*rSize () { + + super.rSize(); + + }*/ + + mode ( n ) { + + let change = false; + + if( this.status !== n ){ + + this.status = n; + let s = this.s, cc = this.colors; + + switch( n ){ + + case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; + case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; + case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; + case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; + + } + + change = true; + + } + + return change; + + } + + reset () { + + this.cursor(); + // return this.mode( 1 ); + + } + + selected ( b ){ + + if( this.isSelect ) this.mode(1); + + this.isSelect = b || false; + + if( this.isSelect ) this.mode(3); + + } + + +} + +class Grid extends Proto { + + constructor( o = {} ) { + + super( o ); + + /*this.values = o.values || []; + + if( typeof this.values === 'string' ) this.values = [ this.values ];*/ + + this.values = []; + + if( o.values ){ + if( o.values instanceof Array ){ + this.values = o.values; + } else if( o.values instanceof String ){ + this.values = [ o.values ]; + } else if( o.values instanceof Object ){ + this.refObject = o.values; + for( let g in this.refObject ) this.values.push( g ); + } + } + + this.lng = this.values.length; + + + + this.value = o.value || null; + + + + + let cc = this.colors; + + + this.isSelectable = o.selectable || false; + this.spaces = o.spaces || [ cc.sx, cc.sy ]; + this.bsize = o.bsize || [ 90, this.h ]; + + this.bsizeMax = this.bsize[0]; + + this.tmp = []; + this.stat = []; + this.grid = [ 2, Math.round( this.lng * 0.5 ) ]; + + this.h = ( this.grid[1] * this.bsize[1] ) + ( this.grid[1] * this.spaces[1] ); //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); + + this.c[1].textContent = ''; + //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); + this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1])+'px; border:none;' ); + + let n = 0, b, td, tr, sel; + + this.res = -1; + this.isDown = false; + this.neverlock = true; + + this.buttons = []; + this.stat = []; + this.tmpX = []; + this.tmpY = []; + + for( let i = 0; i < this.grid[1]; i++ ){ + + tr = this.c[2].insertRow(); + tr.style.cssText = 'pointer-events:none;'; + for( let j = 0; j < this.grid[0]; j++ ){ + + td = tr.insertCell(); + td.style.cssText = 'pointer-events:none;'; + + if( this.values[n] ){ + + sel = false; + if( this.values[n] === this.value && this.isSelectable ) sel = true; + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:'+this.bsize[0]+'px; height:'+(this.bsize[1]-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; left:auto; right:auto; border-radius:'+this.radius+'px;'; + b.style.background = sel ? cc.select : cc.button; + b.style.color = sel ? cc.textSelect : cc.text; + b.innerHTML = this.values[n]; + td.appendChild( b ); + + this.buttons.push(b); + this.stat.push(1); + + } else { + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + 'position:static; width:'+this.bsize[0]+'px; height:'+this.bsize[1]+'px; text-align:center; left:auto; right:auto; background:none;'; + td.appendChild( b ); + + } + + if(j===0) b.style.cssText += 'float:right;'; + else b.style.cssText += 'float:left;'; + + n++; + + } + } + + this.s[0].border = 'none'; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1; + + l.y += this.mtop; + + let tx = this.tmpX; + let ty = this.tmpY; + + let id = -1; + let c = -1; + let line = -1; + let i = this.grid[0]; + while( i-- ){ + if( l.x > tx[i][0] && l.x < tx[i][1] ) c = i; + } + + i = this.grid[1]; + while( i-- ){ + if( l.y > ty[i][0] && l.y < ty[i][1] ) line = i; + } + + if(c!==-1 && line!==-1){ + id = c + (line*2); + if(id>this.lng-1) id = -1; + } + + return id; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( !this.isDown ) return false + + this.isDown = false; + if( this.res !== -1 ){ + this.value = this.values[this.res]; + this.send(); + } + + return this.mousemove( e ) + + } + + mousedown ( e ) { + + if( this.isDown ) return false + this.isDown = true; + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + this.res = this.testZone( e ); + + if( this.res !== -1 ){ + this.cursor('pointer'); + up = this.modes( this.isDown ? 3 : 2, this.res ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + // MODE + // ----------------------- + + modes ( N = 1, id = -1 ) { + + let i = this.lng, w, n, r = false; + + while( i-- ){ + + n = N; + w = this.isSelectable ? this.values[ i ] === this.value : false; + + if( i === id ){ + if( w && n === 2 ) n = 3; + } else { + n = 1; + if( w ) n = 4; + } + + if( this.mode( n, i ) ) r = true; + + } + + return r + + } + + mode ( n, id ) { + + let change = false; + let cc = this.colors, s = this.buttons; + let i = id; + + if( this.stat[id] !== n ){ + + this.stat[id] = n; + + switch( n ){ + + case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; + case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; + case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; + case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; + + } + + change = true; + + } + + return change; + + } + + // ---------------------- + + reset () { + + this.res = -1; + this.cursor(); + return this.modes() + + } + + + label ( string, n ) { + + this.buttons[n].textContent = string; + + } + + icon ( string, y, n ) { + + this.buttons[n].style.padding = ( y || 0 ) +'px 0px'; + this.buttons[n].innerHTML = string; + + } + + testW () { + + let vw = this.spaces[0]*3 + this.bsizeMax*2, rz = false; + if( vw > this.w ) { + this.bsize[0] = ( this.w-(this.spaces[0]*3) ) * 0.5; + rz = true; + } else { + if( this.bsize[0] !== this.bsizeMax ) { + this.bsize[0] = this.bsizeMax; + rz = true; + } + } + + if( !rz ) return; + + let i = this.buttons.length; + while(i--) this.buttons[i].style.width = this.bsize[0] + 'px'; + + } + + rSize () { + + super.rSize(); + + this.testW(); + + let mid; + + this.tmpX = []; + this.tmpY = []; + + for( let j = 0; j < this.grid[0]; j++ ){ + + if(j===0){ + mid = ( this.w*0.5 ) - ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid-this.bsize[0], mid ] ); + } else { + mid = ( this.w*0.5 ) + ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid, mid+this.bsize[0] ] ); + } + + } + + mid = this.spaces[1]; + + for( let i = 0; i < this.grid[1]; i++ ){ + + this.tmpY.push( [ mid, mid + this.bsize[1] ] ); + mid += this.bsize[1] + this.spaces[1]; + + } + + } + +} + +class Pad2D extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + + //this.margin = 15; + this.pos = new V2(0,0); + this.maxPos = 90; + + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.min = o.min === undefined ? -1 : o.min; + this.max = o.max === undefined ? 1 : o.max; + + this.range = (this.max - this.min)*0.5; + + this.cmode = 0; + + + //console.log(this.range) + + this.c[0].style.display = 'block'; + + + + + + this.precision = o.precision === undefined ? 2 : o.precision; + + /*this.bounds = {}; + this.bounds.x1 = o.x1 || -1; + this.bounds.x2 = o.x2 || 1; + this.bounds.y1 = o.y1 || -1; + this.bounds.y2 = o.y2 || 1; + + this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); + this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); + + this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); + this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ + + this.value = ( Array.isArray( o.value ) && o.value.length == 2 ) ? o.value : [ 0, 0 ]; + + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w + 'px'; + + // Title + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + //this.top -= this.margin + + let cc = this.colors; + + + // Value + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+ ( this.h - 20 ) + 'px; width:100%; color:' + cc.text ); + this.c[2].textContent = this.value; + + // Pad + + let pad = this.getPad2d(); + + this.setSvg( pad, 'fill', cc.back, 0 ); + this.setSvg( pad, 'fill', cc.button, 1 ); + this.setSvg( pad, 'stroke', cc.back, 2 ); + this.setSvg( pad, 'stroke', cc.back, 3 ); + this.setSvg( pad, 'stroke', cc.text, 4 ); + + this.setSvg( pad, 'viewBox', '0 0 '+this.diam+' '+this.diam ); + this.setCss( pad, { width:this.diam, height:this.diam, left:0, top:this.top }); + + this.c[3] = pad; + + this.init(); + this.setValue(); + + } + + testZone ( e ) { + + let l = this.local; + + if( l.x === -1 && l.y === -1 ) return ''; + + + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'pad'; + + /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { + return 'pad'; + }*/ + + //return ''; + + } + + mouseup ( e ) { + + this.isDown = false; + return this.mode(0); + + } + + mousedown ( e ) { + + if ( this.testZone(e) === 'pad' ) { + + this.isDown = true; + this.mousemove( e ); + return this.mode(1); + } + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let x = (this.w*0.5) - ( e.clientX - this.zone.x ); + let y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + + let r = 256 / this.diam; + + x = -(x*r); + y = -(y*r); + + x = Tools.clamp( x, -this.maxPos, this.maxPos ); + y = Tools.clamp( y, -this.maxPos, this.maxPos ); + + //let x = e.clientX - this.zone.x; + //let y = e.clientY - this.zone.y - this.top; + + /*if( x < this.margin ) x = this.margin; + if( x > this.w - this.margin ) x = this.w - this.margin; + if( y < this.margin ) y = this.margin; + if( y > this.w - this.margin ) y = this.w - this.margin;*/ + + //console.log(x,y) + + this.setPos( [ x , y ] ); + + this.update( true ); + + } + + mode ( mode ) { + + if( this.cmode === mode ) return false; + + let cc = this.colors; + + switch( mode ){ + case 0: // base + + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.back, 0); + this.setSvg( this.c[3], 'fill', cc.button, 1); + this.setSvg( this.c[3], 'stroke', cc.back, 2); + this.setSvg( this.c[3], 'stroke', cc.back, 3); + this.setSvg( this.c[3], 'stroke', cc.text, 4 ); + + break; + case 1: // down + + this.s[2].color = cc.textSelect; + this.setSvg( this.c[3], 'fill', cc.backoff, 0); + this.setSvg( this.c[3], 'fill', cc.overoff, 1); + this.setSvg( this.c[3], 'stroke', cc.backoff, 2); + this.setSvg( this.c[3], 'stroke', cc.backoff, 3); + this.setSvg( this.c[3], 'stroke', cc.textSelect, 4 ); + + break; + } + + this.cmode = mode; + return true; + + + + } + + update ( up ) { + + //if( up === undefined ) up = true; + + this.c[2].textContent = this.value; + + this.updateSVG(); + + if( up ) this.send(); + + } + + updateSVG() { + + if ( this.model == 1 ) { + + this.setSvg( this.c[3], 'y1', this.pos.y, 2 ); + this.setSvg( this.c[3], 'y2', this.pos.y, 2 ); + + this.setSvg( this.c[3], 'x1', this.pos.x, 3 ); + this.setSvg( this.c[3], 'x2', this.pos.x, 3 ); + + } + + this.setSvg( this.c[3], 'cx', this.pos.x, 4 ); + this.setSvg( this.c[3], 'cy', this.pos.y, 4 ); + + } + + setPos ( p ) { + + //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; + + this.pos.set( p[0]+128 , p[1]+128 ); + + let r = 1/this.maxPos; + + this.value[0] = ((p[0]*r)*this.range).toFixed( this.precision ); + this.value[1] = ((p[1]*r)*this.range).toFixed( this.precision ); + + } + + setValue ( v, up = false ) { + + if( v === undefined ) v = this.value; + + /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; + if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; + if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; + if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ + + this.value[0] = Math.min( this.max, Math.max( this.min, v[0] ) ).toFixed( this.precision ) * 1; + this.value[1] = Math.min( this.max, Math.max( this.min, v[1] ) ).toFixed( this.precision ) * 1; + + this.pos.set( ((this.value[0]/this.range)*this.maxPos)+128 , ((this.value[1]/this.range)*this.maxPos)+128 ); + + //console.log(this.pos) + + this.update( up ); + + } + + /*lerp( s1, s2, d1, d2, c = true ) { + + let s = ( d2 - d1 ) / ( s2 - s1 ); + + return c ? ( v ) => { + return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 + } : ( v ) => { + return ( v - s1 ) * s + d1 + } + + }*/ + +} + +// proto/TreeList.js + +class TreeList extends Proto { + constructor(o = {}) { + // Propiedades públicas esperadas (API) + // o.tree (obj/array), o.value (array), o.focused (bool), + // o.focusPath (array), o.focusLevel (number), + // o.tabIndex, o.itemIndex, o.onChange (fn) + o.selectable = true; // navegable por teclado si activas flechas + o.name = o.name || 'TreeList'; + super(o); + + // Datos & estado + this.tree = o.tree || {}; + this.value = Array.isArray(o.value) ? o.value.slice() : []; + this.focused = !!o.focused; + this.focusPath = Array.isArray(o.focusPath) ? o.focusPath.slice() : []; + this.focusLevel = typeof o.focusLevel === 'number' ? o.focusLevel : -1; + + this.tabIndex = o.tabIndex ?? null; + this.itemIndex = o.itemIndex ?? null; + + // Callback de notificación + this.changeCb = typeof o.onChange === 'function' ? o.onChange : (/*tabIdx, itemIdx, newPath*/) => {}; + + // Layout interno + this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] + this.leafMax = 0; // alto reservado para el último nivel (máximo tamaño de hoja) + this.levelGap = 2; // gap vertical entre niveles + this.hItem = this.h; // alto por ítem + + // Hover / foco de mouse + this.hover = { level: -1, index: -1 }; + + // DOM visual (sin listeners directos; los eventos llegan vía Roots->handleEvent) + this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); // container interno + this.s[2] = this.c[2].style; + + // Inicializa nodos visuales de forma perezosa en rSize() + this.itemsDom = []; // mirror de this.levels (matriz de nodos) + + this.init(); + } + + // =============== Helpers de datos =============== + + static isMap(node) { return node && typeof node === 'object' && !Array.isArray(node); } + static isList(node) { return Array.isArray(node); } + + // Devuelve el subnodo al seguir path (se detiene si no existe) + getNodeAtPath(path) { + let node = this.tree; + for (let i = 0; i < path.length; i++) { + if (TreeList.isMap(node)) { + if (!Object.prototype.hasOwnProperty.call(node, path[i])) return { node: null, depth: i }; + node = node[path[i]]; + } else if (TreeList.isList(node)) { + // Al llegar a lista, ya no hay más descendencia válida para claves + if (i < path.length) return { node, depth: i }; + } else { + return { node: null, depth: i }; + } + } + return { node, depth: path.length }; + } + + // Autocompleta descendiendo por la primera clave de cada mapa hasta alcanzar una lista + autoCompleteToLeaf(basePath) { + let nodeInfo = this.getNodeAtPath(basePath); + let node = nodeInfo.node; + const path = basePath.slice(); + + while (TreeList.isMap(node)) { + const keys = Object.keys(node); + if (!keys.length) break; // mapa vacío + const k0 = keys[0]; + path.push(k0); + node = node[k0]; + } + // Si termina en lista, NO agrega selección final de elemento hoja + return path; + } + + // Ruta activa para construir niveles (focusPath si focused, si no value) + getActivePath() { + return this.focused ? this.focusPath : this.value; + } + + // Calcula el máximo tamaño de hoja del árbol (para reservar alto estable) + computeLeafMax(node = this.tree) { + if (TreeList.isList(node)) return node.length; + if (!TreeList.isMap(node)) return 0; + let m = 0; + for (const k of Object.keys(node)) { + m = Math.max(m, this.computeLeafMax(node[k])); + } + return m; + } + + // =============== Construcción de niveles (modelo lógico) =============== + + buildLevels() { + this.levels.length = 0; + const activePath = this.getActivePath(); + + let node = this.tree; + let level = 0; + + while (node) { + if (TreeList.isMap(node)) { + // Opciones = claves del mapa (nivel intermedio) + const keys = Object.keys(node); + if (!keys.length) break; // detener expansión si vacío + this.levels.push({ type: 'map', items: keys.map(k => ({ key: k, label: k, zone: {x:0,y:0,w:0,h:0} })), zone: {x:0,y:0,w:0,h:this.hItem} }); + + // Avanza según la ruta activa (si existe), sino se detiene + const nextKey = activePath[level]; + if (!nextKey || !node.hasOwnProperty(nextKey)) break; + node = node[nextKey]; + } else if (TreeList.isList(node)) { + // Último nivel: lista/hoja (vertical) + const items = node.map(label => ({ key: label, label, zone: {x:0,y:0,w:0,h:0} })); + this.levels.push({ type: 'list', items, zone: {x:0,y:0,w:0,h: Math.max(items.length, this.leafMax) * this.hItem } }); + break; // fin + } else { + break; // nodo inválido + } + level++; + } + } + + // =============== Layout (zonas internas) =============== + + // Calcula zonas internas de cada ítem/level y construye/actualiza dom + layoutLevels() { + const padX = 8; + const w = this.zone.w - padX * 2; + let y = 0; + + // Asegura `itemsDom` anidado por nivel + while (this.itemsDom.length < this.levels.length) this.itemsDom.push([]); + // Limpia extra DOM si niveles disminuyen + for (let L = this.levels.length; L < this.itemsDom.length; L++) { + for (const el of this.itemsDom[L]) if (el && el.parentNode) el.parentNode.removeChild(el); + } + this.itemsDom.length = this.levels.length; + + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + if (lvl.type === 'map') { + const n = Math.max(1, lvl.items.length); + const cellW = Math.floor(w / n); + lvl.zone = { x: padX, y, w, h: this.hItem }; + let x = padX; + // Asegura contenedor dom de nivel si querés uno (opcional) + for (let i = 0; i < lvl.items.length; i++) { + const it = lvl.items[i]; + it.zone = { x, y, w: cellW, h: this.hItem }; + + // crea/actualiza nodo visual + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, 'map'); + + x += cellW; + } + y += this.hItem + this.levelGap; + } else { + // lista/hoja vertical + const n = lvl.items.length; + const hList = Math.max(n, this.leafMax) * this.hItem; + lvl.zone = { x: padX, y, w, h: hList }; + + for (let i = 0; i < Math.max(n, this.leafMax); i++) { + // Puede haber "espacio vacío" si n < leafMax + const isReal = i < n; + const it = isReal ? lvl.items[i] : { key: null, label: '', zone: {x:0,y:0,w:0,h:0} }; + it.zone = { x: padX, y: y + i * this.hItem, w, h: this.hItem }; + + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, 'list', isReal); + } + y += hList; + } + } + + // Ajusta alto visible del control + const totalH = y; + this.zone.h = totalH + this.margin; // Proto se encarga del margen + this.s[0].height = this.zone.h + 'px'; + this.s[2].height = totalH + 'px'; + } + + ensureItemDom(L, i) { + const row = this.itemsDom[L]; + while (row.length <= i) row.push(null); + if (!row[i]) { + // Cada ítem es un DIV posicionado absoluto dentro de this.c[2] + const div = this.dom('div', Tools.css.txt + 'position:absolute; pointer-events:none;'); + this.c[2].appendChild(div); + row[i] = div; + } + return row[i]; + } + + // Colorea y posiciona el DOM del ítem según estados (seleccionado / foco) + paintItemDom(div, L, i, it, kind, isReal = true) { + const s = div.style; + const cc = this.colors; + + // Posición + s.left = it.zone.x + 'px'; + s.top = it.zone.y + 'px'; + s.width = it.zone.w + 'px'; + s.height = (it.zone.h - 2) + 'px'; // -2 para evitar overlap de bordes + + // Texto + div.textContent = isReal ? it.label : ''; + + // Estados semánticos + const value = this.value; + const selected = (value[L] !== undefined) && (value[L] === it.key) && isReal; + + const inFocusLevel = this.focused && (this.focusLevel === L); + const focusMatch = inFocusLevel && (this.focusPath[L] === it.key) && isReal; + + // Hover (mouse) + const isHover = (this.hover.level === L && this.hover.index === i && isReal); + + // Estilos base + s.background = cc.back; + s.color = cc.text; + s.border = '1px solid ' + cc.border; + + // Mapa = horizontal, Lista = vertical + if (kind === 'map') s.textAlign = 'center'; + else s.textAlign = 'left'; + + // Priorización visual: seleccionado > foco > hover > base + if (selected) { + s.background = cc.select; + s.color = cc.textSelect; + } else if (focusMatch) { + s.background = cc.backgroundOver; + s.color = cc.textOver; + } else if (isHover) { + s.background = cc.overoff; + s.color = cc.textOver; + } + // Deshabilitar DOM si no hay ítem real en filas de padding + s.opacity = isReal ? '1' : '0'; + } + + // =============== Ciclo de vida visual =============== + + rSize() { + // Recalcula leafMax y niveles cada vez que cambia tamaño/datos + this.leafMax = this.computeLeafMax(this.tree); + this.buildLevels(); + this.layoutLevels(); + } + + update() { + // Redibuja cuando cambian estados de hover/focus/value externamente + this.buildLevels(); + this.layoutLevels(); + } + + // =============== Interacción (hit-testing y selección) =============== + + // Convierte coords globales a locales del control (igual que Proto) + _toLocal(e) { + const mx = e.clientX - this.zone.x; + const my = e.clientY - this.zone.y; + return { x: mx, y: my }; + } + + // Busca qué ítem (L,i) está bajo el mouse; respeta zonas por nivel + _hitTest(mx, my) { + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + const z = lvl.zone; + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; + + if (lvl.type === 'map') { + for (let i = 0; i < lvl.items.length; i++) { + const itz = lvl.items[i].zone; + if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { + return { L, i, real: true }; + } + } + } else { + // hoja: puede contener filas de padding + const nRows = Math.max(lvl.items.length, this.leafMax); + for (let i = 0; i < nRows; i++) { + const isReal = i < lvl.items.length; + const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.hItem, w: z.w, h: this.hItem }; + if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { + return { L, i, real: isReal }; + } + } + } + } + return { L: -1, i: -1, real: false }; + } + + handleEvent(e) { + if (this.lock) return false; + + // Delega estados de hover / click + if (e.type === 'mousemove') { + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + this.hover = (ht.L !== -1 && ht.real) ? { level: ht.L, index: ht.i } : { level: -1, index: -1 }; + this.update(); // repintar con hover + return true; + } + + if (e.type === 'mousedown') { + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + if (ht.L !== -1 && ht.real) { + this._selectAt(ht.L, ht.i); + return true; + } + } + + if (e.type === 'mouseup') { + // nada por ahora + return true; + } + + // Soporte básico para teclado (opcional: Up/Down/Left/Right) + if (e.type === 'keydown') ; + + return false; + } + + // Regla de selección y autocompletado + _selectAt(L, i) { + const lvl = this.levels[L]; + const chosen = lvl.items[i]; + if (!chosen || !chosen.key) return; + + // 1) Recortar value hasta L e insertar la opción elegida + const base = this.value.slice(0, L); + base[L] = chosen.key; + + // 2) Autocompletar por primera clave descendiendo hasta una lista + const newPath = this.autoCompleteToLeaf(base); + + // 3) Notificar + this.value = newPath.slice(); // reflejar selección interna + this.update(); + this.changeCb(this.tabIndex, this.itemIndex, newPath); + } + + // API pública para sincronización externa (por si quieres settear desde afuera) + setValue(path) { + this.value = Array.isArray(path) ? path.slice() : []; + this.update(); + } + setTree(tree) { + this.tree = tree || {}; + this.update(); + } + setFocus({ focused, focusPath, focusLevel }) { + if (typeof focused === 'boolean') this.focused = focused; + if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); + if (typeof focusLevel === 'number') this.focusLevel = focusLevel; + this.update(); + } +} + +const add = function () { + + let a = arguments; + + let type, o, ref = false, n = null; + + if( typeof a[0] === 'string' ){ + + type = a[0]; + o = a[1] || {}; + + } else if ( typeof a[0] === 'object' ){ // like dat gui + + ref = true; + if( a[2] === undefined ) [].push.call(a, {}); + + type = a[2].type ? a[2].type : autoType( a[0][a[1]], a[2] ); + + o = a[2]; + o.name = a[1]; + if (o.hasOwnProperty("displayName")) o.name = o.displayName; + + if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } + else o.value = a[0][a[1]]; + + } + + let name = type.toLowerCase(); + + if( name === 'group' ){ + o.add = add; + //o.dx = 8 + } + + switch( name ){ + + case 'bool': case 'boolean': n = new Bool(o); break; + case 'button': n = new Button(o); break; + case 'circular': n = new Circular(o); break; + case 'color': n = new Color(o); break; + case 'fps': n = new Fps(o); break; + case 'graph': n = new Graph(o); break; + case 'group': n = new Group(o); break; + case 'joystick': n = new Joystick(o); break; + case 'knob': n = new Knob(o); break; + case 'list': n = new List(o); break; + case 'numeric': case 'number': n = new Numeric(o); break; + case 'slide': n = new Slide(o); break; + case 'textInput': case 'string': n = new TextInput(o); break; + case 'title': case 'text': n = new Title(o); break; + case 'select': n = new Select(o); break; + case 'bitmap': n = new Bitmap(o); break; + case 'selector': n = new Selector(o); break; + case 'empty': case 'space': n = new Empty(o); break; + case 'item': n = new Item(o); break; + case 'grid': n = new Grid(o); break; + case 'pad2d': case 'pad': n = new Pad2D(o); break; + case 'treelist': n = new TreeList(o); break; + + } + + + + if( n !== null ){ + + Roots.needResize = true; + + if( ref ) n.setReferency( a[0], a[1] ); + return n; + + } + +}; + +const autoType = function ( v, o ) { + + let type = 'slide'; + + if( typeof v === 'boolean' ) type = 'bool'; + else if( typeof v === 'string' ){ + + if( v.substring(0,1) === '#' ) type = 'color'; + else type = 'string'; + + } else if( typeof v === 'number' ){ + + if( o.ctype ) type = 'color'; + else type = 'slide'; + + } else if( typeof v === 'array' && v instanceof Array ){ + + if( typeof v[0] === 'number' ) type = 'number'; + else if( typeof v[0] === 'string' ) type = 'list'; + + } else if( typeof v === 'object' && v instanceof Object ){ + + if( v.x !== undefined ) type = 'number'; + else type = 'list'; + + } + + return type + +}; + +/** + * @author lth / https://github.com/lo-th + */ + +class Gui { + constructor(o = {}) { + this.isGui = true; + + this.name = "gui"; + + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; + + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); + + //this.cleanning = false + + // style + this.css = Tools.cloneCss(); + + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 + + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; + + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; + + this.callback = o.callback === undefined ? null : o.callback; + + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; + + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + + this.cn = ""; + + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; + + this.size.h = this.size.h < 11 ? 11 : this.size.h; + + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + + // virtual mouse + this.mouse = new V2().neg(); + + this.h = 0; + //this.prevY = -1; + this.sw = 0; + + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); + + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; + + this.autoResize = o.autoResize === undefined ? true : o.autoResize; + + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; + + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; + + this.isNewTarget = false; + + let cc = this.colors; + + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); + + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); + + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); + + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); + + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); + + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; + + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } + + if (this.parent !== null) this.parent.appendChild(this.content); + + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } + + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + + this.setWidth(); + + if (this.isCanvas) this.makeCanvas(); + + Roots.add(this); + } + + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseUp(x, y) { + /* + + clientX,clientY are no used when isCanvas==true + */ + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); + + Roots.needReZone = true; + } + + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } + + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } + + // ---------------------- + // CANVAS + // ---------------------- + + onDraw() {} + + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + + //console.log( this.canvas.width, this.canvas.height ) + } + + draw(force) { + if (this.canvas === null) return; + + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } + + ////// + + getDom() { + return this.content; + } + + noMouse() { + this.mouse.neg(); + } + + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); + + //console.log("setMouse "+uv.x+" "+uv.y) + } + + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } + + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } + + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } + + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } + + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } + + onChange(f) { + this.callback = f || null; + return this; + } + + // ---------------------- + // STYLES + // ---------------------- + + mode(n) { + let needChange = false; + let cc = this.colors; + + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } + + needChange = true; + } + + return needChange; + } + + // ---------------------- + // TARGET + // ---------------------- + + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + + this.proto = null; + this.current = -1; + + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + + Roots.cursor(); + return true; + } + + // ---------------------- + // ZONE TEST + // ---------------------- + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + this.isReset = false; + + let name = ""; + + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; + + return name; + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent(e) { + //if( this.cleanning ) return + + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; + + let change = false; + let protoChange = false; + + let name = this.testZone(e); + + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; + + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } + + if (!name) return; + + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); + + if (this.proto) protoChange = this.proto.handleEvent(e); + + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); + + if (!Roots.lock) { + this.getNext(e, change); + } + + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } + + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + + break; + } + + if (this.isDown) change = true; + if (protoChange) change = true; + + if (type === "keyup") change = true; + if (type === "keydown") change = true; + + if (change) this.draw(); + } + + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); + + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } + + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } + + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } + + // ---------------------- + // RESET + // ---------------------- + + reset(force) { + if (this.isReset) return; + + //this.resetItem(); + + this.mouse.neg(); + this.isDown = false; + + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); + + if (r || r2) this.draw(true); + + this.isReset = true; + + //Roots.lock = false; + } + + // ---------------------- + // ADD NODE + // ---------------------- + + add() { + //if(this.cleanning) this.cleanning = false + + let a = arguments; + let ontop = false; + + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; + + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } + + let u = add.apply(this, a); + + if (u === null) return; + + if (ontop) this.uis.unshift(u); + else this.uis.push(u); + + this.calc(); + + this.isEmpty = false; + + return u; + } + + // remove one node + + remove(n) { + if (n.dispose) n.dispose(); + } + + // call after uis clear + + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } + + // clear all gui + + empty() { + //this.cleanning = true + + //this.close(); + + let i = this.uis.length, + item; + + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } + + this.uis = []; + this.isEmpty = true; + this.calc(); + } + + clear() { + this.empty(); + } + + clear2() { + setTimeout(this.empty.bind(this), 0); + } + + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } + + // ---------------------- + // ITEMS SPECIAL + // ---------------------- + + resetItem() { + if (!this.isItemMode) return; + + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } + + setItem(name) { + if (!this.isItemMode) return; + + name = name || ""; + this.resetItem(); + + if (!name) { + this.update(0); + return; + } + + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } + + // ---------------------- + // SCROLL + // ---------------------- + + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; + + if (b) { + this.total = this.h; + + this.maxView = this.maxHeight; + + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; + + this.range = this.maxView - this.sh; + + this.oy = Tools.clamp(this.oy, 0, this.range); + + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } + + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } + + update(y) { + y = Tools.clamp(y, 0, this.range); + + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } + + // ---------------------- + // RESIZE FUNCTION + // ---------------------- + + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } + + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } + + setHeight() { + if (this.tmp) clearTimeout(this.tmp); + + this.zone.h = this.bh; + this.isScroll = false; + + if (this.isOpen) { + this.h = this.calcUis(); + + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; + + this.maxHeight = hhh - this.zone.y - this.bh; + + let diff = this.h - this.maxHeight; + + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + + this.upScroll(this.isScroll); + + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + + rezone() { + Roots.needReZone = true; + } + + setWidth(w) { + if (w) this.zone.w = w; + + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } +} + +export { Files, Gui, REVISION, Tools, add }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gUHJvcGllZGFkZXMgcMO6YmxpY2FzIGVzcGVyYWRhcyAoQVBJKVxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSksIG8uZm9jdXNlZCAoYm9vbCksXHJcbiAgICAvLyBvLmZvY3VzUGF0aCAoYXJyYXkpLCBvLmZvY3VzTGV2ZWwgKG51bWJlciksXHJcbiAgICAvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcbiAgICBvLnNlbGVjdGFibGUgPSB0cnVlOyAgICAgICAgICAgLy8gbmF2ZWdhYmxlIHBvciB0ZWNsYWRvIHNpIGFjdGl2YXMgZmxlY2hhc1xyXG4gICAgby5uYW1lID0gby5uYW1lIHx8ICdUcmVlTGlzdCc7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICAvLyBEYXRvcyAmIGVzdGFkb1xyXG4gICAgdGhpcy50cmVlICAgICAgID0gby50cmVlIHx8IHt9O1xyXG4gICAgdGhpcy52YWx1ZSAgICAgID0gQXJyYXkuaXNBcnJheShvLnZhbHVlKSA/IG8udmFsdWUuc2xpY2UoKSA6IFtdO1xyXG4gICAgdGhpcy5mb2N1c2VkICAgID0gISFvLmZvY3VzZWQ7XHJcbiAgICB0aGlzLmZvY3VzUGF0aCAgPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09ICdudW1iZXInID8gby5mb2N1c0xldmVsIDogLTE7XHJcblxyXG4gICAgdGhpcy50YWJJbmRleCAgID0gby50YWJJbmRleCA/PyBudWxsO1xyXG4gICAgdGhpcy5pdGVtSW5kZXggID0gby5pdGVtSW5kZXggPz8gbnVsbDtcclxuXHJcbiAgICAvLyBDYWxsYmFjayBkZSBub3RpZmljYWNpw7NuXHJcbiAgICB0aGlzLmNoYW5nZUNiICAgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoLyp0YWJJZHgsIGl0ZW1JZHgsIG5ld1BhdGgqLykgPT4ge307XHJcblxyXG4gICAgLy8gTGF5b3V0IGludGVybm9cclxuICAgIHRoaXMubGV2ZWxzID0gW107ICAgLy8gW3t0eXBlOidtYXAnfCdsaXN0JywgaXRlbXM6W3trZXksbGFiZWwsem9uZX1dLCB6b25lOnt4LHksdyxofX0uLi5dXHJcbiAgICB0aGlzLmxlYWZNYXggPSAwOyAgIC8vIGFsdG8gcmVzZXJ2YWRvIHBhcmEgZWwgw7psdGltbyBuaXZlbCAobcOheGltbyB0YW1hw7FvIGRlIGhvamEpXHJcbiAgICB0aGlzLmxldmVsR2FwID0gMjsgIC8vIGdhcCB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmhJdGVtICAgID0gdGhpcy5oOyAgLy8gYWx0byBwb3Igw610ZW1cclxuXHJcbiAgICAvLyBIb3ZlciAvIGZvY28gZGUgbW91c2VcclxuICAgIHRoaXMuaG92ZXIgPSB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblxyXG4gICAgLy8gRE9NIHZpc3VhbCAoc2luIGxpc3RlbmVycyBkaXJlY3RvczsgbG9zIGV2ZW50b3MgbGxlZ2FuIHbDrWEgUm9vdHMtPmhhbmRsZUV2ZW50KVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpOyAvLyBjb250YWluZXIgaW50ZXJub1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIC8vIEluaWNpYWxpemEgbm9kb3MgdmlzdWFsZXMgZGUgZm9ybWEgcGVyZXpvc2EgZW4gclNpemUoKVxyXG4gICAgdGhpcy5pdGVtc0RvbSA9IFtdOyAvLyBtaXJyb3IgZGUgdGhpcy5sZXZlbHMgKG1hdHJpeiBkZSBub2RvcylcclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PSBIZWxwZXJzIGRlIGRhdG9zID09PT09PT09PT09PT09PVxyXG5cclxuICBzdGF0aWMgaXNNYXAobm9kZSkgIHsgcmV0dXJuIG5vZGUgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG5vZGUpOyB9XHJcbiAgc3RhdGljIGlzTGlzdChub2RlKSB7IHJldHVybiBBcnJheS5pc0FycmF5KG5vZGUpOyB9XHJcblxyXG4gIC8vIERldnVlbHZlIGVsIHN1Ym5vZG8gYWwgc2VndWlyIHBhdGggKHNlIGRldGllbmUgc2kgbm8gZXhpc3RlKVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gQWwgbGxlZ2FyIGEgbGlzdGEsIHlhIG5vIGhheSBtw6FzIGRlc2NlbmRlbmNpYSB2w6FsaWRhIHBhcmEgY2xhdmVzXHJcbiAgICAgICAgaWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTsgXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGEgZGVzY2VuZGllbmRvIHBvciBsYSBwcmltZXJhIGNsYXZlIGRlIGNhZGEgbWFwYSBoYXN0YSBhbGNhbnphciB1bmEgbGlzdGFcclxuICBhdXRvQ29tcGxldGVUb0xlYWYoYmFzZVBhdGgpIHtcclxuICAgIGxldCBub2RlSW5mbyA9IHRoaXMuZ2V0Tm9kZUF0UGF0aChiYXNlUGF0aCk7XHJcbiAgICBsZXQgbm9kZSA9IG5vZGVJbmZvLm5vZGU7XHJcbiAgICBjb25zdCBwYXRoID0gYmFzZVBhdGguc2xpY2UoKTtcclxuXHJcbiAgICB3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhazsgLy8gbWFwYSB2YWPDrW9cclxuICAgICAgY29uc3QgazAgPSBrZXlzWzBdO1xyXG4gICAgICBwYXRoLnB1c2goazApO1xyXG4gICAgICBub2RlID0gbm9kZVtrMF07XHJcbiAgICB9XHJcbiAgICAvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2Egc2VsZWNjacOzbiBmaW5hbCBkZSBlbGVtZW50byBob2phXHJcbiAgICByZXR1cm4gcGF0aDtcclxuICB9XHJcblxyXG4gIC8vIFJ1dGEgYWN0aXZhIHBhcmEgY29uc3RydWlyIG5pdmVsZXMgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaSBubyB2YWx1ZSlcclxuICBnZXRBY3RpdmVQYXRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCA/IHRoaXMuZm9jdXNQYXRoIDogdGhpcy52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIENhbGN1bGEgZWwgbcOheGltbyB0YW1hw7FvIGRlIGhvamEgZGVsIMOhcmJvbCAocGFyYSByZXNlcnZhciBhbHRvIGVzdGFibGUpXHJcbiAgY29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG4gICAgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkgcmV0dXJuIG5vZGUubGVuZ3RoO1xyXG4gICAgaWYgKCFUcmVlTGlzdC5pc01hcChub2RlKSkgcmV0dXJuIDA7XHJcbiAgICBsZXQgbSA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcclxuICAgICAgbSA9IE1hdGgubWF4KG0sIHRoaXMuY29tcHV0ZUxlYWZNYXgobm9kZVtrXSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG07XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PT09PT09PT09XHJcblxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gT3BjaW9uZXMgPSBjbGF2ZXMgZGVsIG1hcGEgKG5pdmVsIGludGVybWVkaW8pXHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICAgIGlmICgha2V5cy5sZW5ndGgpIGJyZWFrOyAvLyBkZXRlbmVyIGV4cGFuc2nDs24gc2kgdmFjw61vXHJcbiAgICAgICAgdGhpcy5sZXZlbHMucHVzaCh7IHR5cGU6ICdtYXAnLCBpdGVtczoga2V5cy5tYXAoayA9PiAoeyBrZXk6IGssIGxhYmVsOiBrLCB6b25lOiB7eDowLHk6MCx3OjAsaDowfSB9KSksIHpvbmU6IHt4OjAseTowLHc6MCxoOnRoaXMuaEl0ZW19IH0pO1xyXG5cclxuICAgICAgICAvLyBBdmFuemEgc2Vnw7puIGxhIHJ1dGEgYWN0aXZhIChzaSBleGlzdGUpLCBzaW5vIHNlIGRldGllbmVcclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyDDmmx0aW1vIG5pdmVsOiBsaXN0YS9ob2phICh2ZXJ0aWNhbClcclxuICAgICAgICBjb25zdCBpdGVtcyA9IG5vZGUubWFwKGxhYmVsID0+ICh7IGtleTogbGFiZWwsIGxhYmVsLCB6b25lOiB7eDowLHk6MCx3OjAsaDowfSB9KSk7XHJcbiAgICAgICAgdGhpcy5sZXZlbHMucHVzaCh7IHR5cGU6ICdsaXN0JywgaXRlbXMsIHpvbmU6IHt4OjAseTowLHc6MCxoOiBNYXRoLm1heChpdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCkgKiB0aGlzLmhJdGVtIH0gfSk7XHJcbiAgICAgICAgYnJlYWs7IC8vIGZpblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrOyAvLyBub2RvIGludsOhbGlkb1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT0gTGF5b3V0ICh6b25hcyBpbnRlcm5hcykgPT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIENhbGN1bGEgem9uYXMgaW50ZXJuYXMgZGUgY2FkYSDDrXRlbS9sZXZlbCB5IGNvbnN0cnV5ZS9hY3R1YWxpemEgZG9tXHJcbiAgbGF5b3V0TGV2ZWxzKCkge1xyXG4gICAgY29uc3QgcGFkWCA9IDg7XHJcbiAgICBjb25zdCB3ID0gdGhpcy56b25lLncgLSBwYWRYICogMjtcclxuICAgIGxldCB5ID0gMDtcclxuXHJcbiAgICAvLyBBc2VndXJhIGBpdGVtc0RvbWAgYW5pZGFkbyBwb3Igbml2ZWxcclxuICAgIHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkgdGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuICAgIC8vIExpbXBpYSBleHRyYSBET00gc2kgbml2ZWxlcyBkaXNtaW51eWVuXHJcbiAgICBmb3IgKGxldCBMID0gdGhpcy5sZXZlbHMubGVuZ3RoOyBMIDwgdGhpcy5pdGVtc0RvbS5sZW5ndGg7IEwrKykge1xyXG4gICAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuaXRlbXNEb21bTF0pIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuICAgIGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuICAgICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICAgIGlmIChsdmwudHlwZSA9PT0gJ21hcCcpIHtcclxuICAgICAgICBjb25zdCBuID0gTWF0aC5tYXgoMSwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgY2VsbFcgPSBNYXRoLmZsb29yKHcgLyBuKTtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogdGhpcy5oSXRlbSB9O1xyXG4gICAgICAgIGxldCB4ID0gcGFkWDtcclxuICAgICAgICAvLyBBc2VndXJhIGNvbnRlbmVkb3IgZG9tIGRlIG5pdmVsIHNpIHF1ZXLDqXMgdW5vIChvcGNpb25hbClcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5oSXRlbSB9O1xyXG5cclxuICAgICAgICAgIC8vIGNyZWEvYWN0dWFsaXphIG5vZG8gdmlzdWFsXHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbWFwJyk7XHJcblxyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgeSArPSB0aGlzLmhJdGVtICsgdGhpcy5sZXZlbEdhcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsaXN0YS9ob2phIHZlcnRpY2FsXHJcbiAgICAgICAgY29uc3QgbiA9IGx2bC5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpICogdGhpcy5oSXRlbTtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogaExpc3QgfTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpOyBpKyspIHtcclxuICAgICAgICAgIC8vIFB1ZWRlIGhhYmVyIFwiZXNwYWNpbyB2YWPDrW9cIiBzaSBuIDwgbGVhZk1heFxyXG4gICAgICAgICAgY29uc3QgaXNSZWFsID0gaSA8IG47XHJcbiAgICAgICAgICBjb25zdCBpdCA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXSA6IHsga2V5OiBudWxsLCBsYWJlbDogJycsIHpvbmU6IHt4OjAseTowLHc6MCxoOjB9IH07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4OiBwYWRYLCB5OiB5ICsgaSAqIHRoaXMuaEl0ZW0sIHcsIGg6IHRoaXMuaEl0ZW0gfTtcclxuXHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbGlzdCcsIGlzUmVhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHkgKz0gaExpc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBanVzdGEgYWx0byB2aXNpYmxlIGRlbCBjb250cm9sXHJcbiAgICBjb25zdCB0b3RhbEggPSB5O1xyXG4gICAgdGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjsgLy8gUHJvdG8gc2UgZW5jYXJnYSBkZWwgbWFyZ2VuXHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy56b25lLmggKyAncHgnO1xyXG4gICAgdGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArICdweCc7XHJcbiAgfVxyXG5cclxuICBlbnN1cmVJdGVtRG9tKEwsIGkpIHtcclxuICAgIGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcbiAgICB3aGlsZSAocm93Lmxlbmd0aCA8PSBpKSByb3cucHVzaChudWxsKTtcclxuICAgIGlmICghcm93W2ldKSB7XHJcbiAgICAgIC8vIENhZGEgw610ZW0gZXMgdW4gRElWIHBvc2ljaW9uYWRvIGFic29sdXRvIGRlbnRybyBkZSB0aGlzLmNbMl1cclxuICAgICAgY29uc3QgZGl2ID0gdGhpcy5kb20oJ2RpdicsIFRvb2xzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7Jyk7XHJcbiAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgICByb3dbaV0gPSBkaXY7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93W2ldO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29sb3JlYSB5IHBvc2ljaW9uYSBlbCBET00gZGVsIMOtdGVtIHNlZ8O6biBlc3RhZG9zIChzZWxlY2Npb25hZG8gLyBmb2NvKVxyXG4gIHBhaW50SXRlbURvbShkaXYsIEwsIGksIGl0LCBraW5kLCBpc1JlYWwgPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzID0gZGl2LnN0eWxlO1xyXG4gICAgY29uc3QgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAvLyBQb3NpY2nDs25cclxuICAgIHMubGVmdCA9IGl0LnpvbmUueCArICdweCc7XHJcbiAgICBzLnRvcCAgPSBpdC56b25lLnkgKyAncHgnO1xyXG4gICAgcy53aWR0aCAgPSBpdC56b25lLncgKyAncHgnO1xyXG4gICAgcy5oZWlnaHQgPSAoaXQuem9uZS5oIC0gMikgKyAncHgnOyAgLy8gLTIgcGFyYSBldml0YXIgb3ZlcmxhcCBkZSBib3JkZXNcclxuXHJcbiAgICAvLyBUZXh0b1xyXG4gICAgZGl2LnRleHRDb250ZW50ID0gaXNSZWFsID8gaXQubGFiZWwgOiAnJztcclxuXHJcbiAgICAvLyBFc3RhZG9zIHNlbcOhbnRpY29zXHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9ICh2YWx1ZVtMXSAhPT0gdW5kZWZpbmVkKSAmJiAodmFsdWVbTF0gPT09IGl0LmtleSkgJiYgaXNSZWFsO1xyXG5cclxuICAgIGNvbnN0IGluRm9jdXNMZXZlbCA9IHRoaXMuZm9jdXNlZCAmJiAodGhpcy5mb2N1c0xldmVsID09PSBMKTtcclxuICAgIGNvbnN0IGZvY3VzTWF0Y2ggICA9IGluRm9jdXNMZXZlbCAmJiAodGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleSkgJiYgaXNSZWFsO1xyXG5cclxuICAgIC8vIEhvdmVyIChtb3VzZSlcclxuICAgIGNvbnN0IGlzSG92ZXIgPSAodGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJiB0aGlzLmhvdmVyLmluZGV4ID09PSBpICYmIGlzUmVhbCk7XHJcblxyXG4gICAgLy8gRXN0aWxvcyBiYXNlXHJcbiAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgcy5jb2xvciAgICAgID0gY2MudGV4dDtcclxuICAgIHMuYm9yZGVyICAgICA9ICcxcHggc29saWQgJyArIGNjLmJvcmRlcjtcclxuXHJcbiAgICAvLyBNYXBhID0gaG9yaXpvbnRhbCwgTGlzdGEgPSB2ZXJ0aWNhbFxyXG4gICAgaWYgKGtpbmQgPT09ICdtYXAnKSBzLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgZWxzZSBzLnRleHRBbGlnbiA9ICdsZWZ0JztcclxuXHJcbiAgICAvLyBQcmlvcml6YWNpw7NuIHZpc3VhbDogc2VsZWNjaW9uYWRvID4gZm9jbyA+IGhvdmVyID4gYmFzZVxyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICB9IGVsc2UgaWYgKGZvY3VzTWF0Y2gpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH0gZWxzZSBpZiAoaXNIb3Zlcikge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICB9XHJcbiAgICAvLyBEZXNoYWJpbGl0YXIgRE9NIHNpIG5vIGhheSDDrXRlbSByZWFsIGVuIGZpbGFzIGRlIHBhZGRpbmdcclxuICAgIHMub3BhY2l0eSA9IGlzUmVhbCA/ICcxJyA6ICcwJztcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PSBDaWNsbyBkZSB2aWRhIHZpc3VhbCA9PT09PT09PT09PT09PT1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICAvLyBSZWNhbGN1bGEgbGVhZk1heCB5IG5pdmVsZXMgY2FkYSB2ZXogcXVlIGNhbWJpYSB0YW1hw7FvL2RhdG9zXHJcbiAgICB0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcbiAgICB0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcbiAgICB0aGlzLmxheW91dExldmVscygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgLy8gUmVkaWJ1amEgY3VhbmRvIGNhbWJpYW4gZXN0YWRvcyBkZSBob3Zlci9mb2N1cy92YWx1ZSBleHRlcm5hbWVudGVcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT0gSW50ZXJhY2Npw7NuIChoaXQtdGVzdGluZyB5IHNlbGVjY2nDs24pID09PT09PT09PT09PT09PVxyXG5cclxuICAvLyBDb252aWVydGUgY29vcmRzIGdsb2JhbGVzIGEgbG9jYWxlcyBkZWwgY29udHJvbCAoaWd1YWwgcXVlIFByb3RvKVxyXG4gIF90b0xvY2FsKGUpIHtcclxuICAgIGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICBjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG4gICAgcmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcbiAgfVxyXG5cclxuICAvLyBCdXNjYSBxdcOpIMOtdGVtIChMLGkpIGVzdMOhIGJham8gZWwgbW91c2U7IHJlc3BldGEgem9uYXMgcG9yIG5pdmVsXHJcbiAgX2hpdFRlc3QobXgsIG15KSB7XHJcbiAgICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgICBjb25zdCB6ID0gbHZsLnpvbmU7XHJcbiAgICAgIGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaCkgY29udGludWU7XHJcblxyXG4gICAgICBpZiAobHZsLnR5cGUgPT09ICdtYXAnKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGx2bC5pdGVtc1tpXS56b25lO1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiB0cnVlIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGhvamE6IHB1ZWRlIGNvbnRlbmVyIGZpbGFzIGRlIHBhZGRpbmdcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmhJdGVtLCB3OiB6LncsIGg6IHRoaXMuaEl0ZW0gfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgLy8gRGVsZWdhIGVzdGFkb3MgZGUgaG92ZXIgLyBjbGlja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpOyAvLyByZXBpbnRhciBjb24gaG92ZXJcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlZG93bicpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIGlmIChodC5MICE9PSAtMSAmJiBodC5yZWFsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0QXQoaHQuTCwgaHQuaSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2V1cCcpIHtcclxuICAgICAgLy8gbmFkYSBwb3IgYWhvcmFcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU29wb3J0ZSBiw6FzaWNvIHBhcmEgdGVjbGFkbyAob3BjaW9uYWw6IFVwL0Rvd24vTGVmdC9SaWdodClcclxuICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJykge1xyXG4gICAgICAvLyBQdWVkZXMgaW50ZWdyYXIgbmF2ZWdhY2nDs24gZGUgZmxlY2hhcyBhcXXDrSBzaSBsbyBkZXNlYXMsXHJcbiAgICAgIC8vIHJldXRpbGl6YW5kbyB0aGlzLmlzU2VsZWN0YWJsZSAoeWEgbWFyY2FkYSBlbiBjdG9yKS5cclxuICAgICAgLy8gUmVjb21lbmRhY2nDs246IG1vdmVyIGZvY28gZW50cmUgbml2ZWxlcy/DrXRlbXMgY29uIFJvb3RzK0d1aS4gOmNvbnRlbnRSZWZlcmVuY2Vbb2FpY2l0ZToxXXtpbmRleD0xfSA6Y29udGVudFJlZmVyZW5jZVtvYWljaXRlOjJde2luZGV4PTJ9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gUmVnbGEgZGUgc2VsZWNjacOzbiB5IGF1dG9jb21wbGV0YWRvXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICAvLyAxKSBSZWNvcnRhciB2YWx1ZSBoYXN0YSBMIGUgaW5zZXJ0YXIgbGEgb3BjacOzbiBlbGVnaWRhXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIC8vIDIpIEF1dG9jb21wbGV0YXIgcG9yIHByaW1lcmEgY2xhdmUgZGVzY2VuZGllbmRvIGhhc3RhIHVuYSBsaXN0YVxyXG4gICAgY29uc3QgbmV3UGF0aCA9IHRoaXMuYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2UpO1xyXG5cclxuICAgIC8vIDMpIE5vdGlmaWNhclxyXG4gICAgdGhpcy52YWx1ZSA9IG5ld1BhdGguc2xpY2UoKTsgLy8gcmVmbGVqYXIgc2VsZWNjacOzbiBpbnRlcm5hXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcbiAgfVxyXG5cclxuICAvLyBBUEkgcMO6YmxpY2EgcGFyYSBzaW5jcm9uaXphY2nDs24gZXh0ZXJuYSAocG9yIHNpIHF1aWVyZXMgc2V0dGVhciBkZXNkZSBhZnVlcmEpXHJcbiAgc2V0VmFsdWUocGF0aCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG4gIHNldFRyZWUodHJlZSkge1xyXG4gICAgdGhpcy50cmVlID0gdHJlZSB8fCB7fTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDWSxNQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxHQUFHO0FBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0FBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0FBQ0EsRUFBRSxFQUFFLEVBQUUsSUFBSTtB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QzVCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRTtBQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsRUFBRSxVQUFVLElBQUksRUFBRTtBQUM3QixJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDeEMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDbkMsSUFBSSxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0FBQ3JDLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxFQUFFLFlBQVk7QUFDMUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLE9BQU87QUFDbEMsSUFBSSxJQUFJLENBQUMs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Q0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDakUsWUFBWSxDQUFDLElBQUksQ0FB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RUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDcEosUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNySDtBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FB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LENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pIO0FBQ0E7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtBQUNBO0FBQ0E7QUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtBQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMvRixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwSTtBQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksYUFBYSxFQUFFLFlBQVk7QUFDL0I7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNwQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUNoSixRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdkMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkIsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN4QixRQUFXLElBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBSztBQUM1RCxRQUFRLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUM7QUFDakQsUUFBUSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDdkI7QUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0FBQ0EsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QixZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM5QixZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ2pDLFlBQVksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNoRDtBQUNBLFlBQVksRUFBRSxHQUFHO0FBQ2pCLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDM0MsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHO0FBQ3ZELGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDM0MsYUFBYSxDQUFDO0FBQ2Q7QUFDQSxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RDtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCO0FBQ0EsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsZ0JBQWdCLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDMUIsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0c7QUFDQSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNELGdCQUFnQixDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbko7QUFDQSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUg7QUFDQSxhQUFhO0FBQ2IsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztBQUM1QixZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFaEMsU0FBUztBQUlUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDdkI7QUFDQTtBQUNBLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakcsUUFBUSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JJO0FBQ0EsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9FLFFBQVEsQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN4STtBQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoRyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25HLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzlJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzlJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLG9GQUFvRixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9LO0FBQ0E7QUFDQSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUc7QUFDQSxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtBQUNyQztBQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLDRGQUE0RixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDak8sUUFBUSxPQUFPLElBQUk7QUFDbkIsWUFBWSxLQUFLLE1BQU07QUFDdkIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO0FBQzNGLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssUUFBUTtBQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7QUFDNUYsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxLQUFLO0FBQ3RCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztBQUN6RixZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLEtBQUs7QUFDdEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLG1GQUFtRixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ3pKLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssUUFBUTtBQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsbUZBQW1GLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7QUFDNUosWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxRQUFRO0FBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztBQUM1RixZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLE1BQU07QUFDdkIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLHdKQUF3SixDQUFDLEtBQUssQ0FBQztBQUN2TSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSw0S0FBNEssQ0FBQztBQUMvTCxZQUFZLE1BQU07QUFDbEIsU0FBUztBQUNULFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQztBQUM1QixRQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksVUFBVSxDQUFDLENBQUM7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtBQUNBLElBQUksV0FBVyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsQ0FBQztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLENBQUM7QUFDZDtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7QUFDQSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0FBQ0EsSUFBSSxXQUFXLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7QUFDQSxFQUFDO0FBQ0Q7QUFDQSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDWjtBQUNZLE1BQUMsS0FBSyxHQUFHOztBQ3YzQnJCO0FBQ0E7QUFDQTtBQUNPLE1BQU0sS0FBSyxDQUFDO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sU0FBUyxFQUFFLElBQUksR0FBRztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUNsQjtBQUNBLFFBQVEsUUFBUSxJQUFJO0FBQ3BCLFlBQVksS0FBSyxLQUFLO0FBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBRztBQUMzRCxZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLEtBQUs7QUFDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFHO0FBQ3ZELFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssS0FBSztBQUN0QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUc7QUFDeEQsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxLQUFLO0FBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBRztBQUN2RCxZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssS0FBSztBQUNsQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsRUFBRSwwQkFBMEIsRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7QUFDOUcsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxNQUFNO0FBQ3ZCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFHO0FBQy9ILFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssTUFBTTtBQUN2QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBRztBQUM3RixZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLElBQUk7QUFDckIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBRztBQUNoRyxZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLE9BQU87QUFDeEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFHO0FBQ3hHLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssTUFBTTtBQUN2QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7QUFDbEYsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxLQUFLO0FBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7QUFDeEYsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUM7QUFDaEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLE9BQU8sTUFBTSxDQUFDLGtCQUFrQixLQUFLLFVBQVUsRUFBRTtBQUM3RCxZQUFZLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsMkJBQTBCO0FBQ3hFLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSTtBQUNaO0FBQ0EsU0FBUyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUU7QUFDaEM7QUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHO0FBQzVCLGdCQUFnQixzQkFBc0IsRUFBRSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFDM0QsZ0JBQWdCLFFBQVEsRUFBRSxLQUFLO0FBQy9CO0FBQ0EsYUFBYSxDQUFDO0FBQ2Q7QUFDQSxZQUFZLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUU7QUFDbkQ7QUFDQTtBQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxHQUFFO0FBQ3JFLFlBQVksTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFFO0FBQ2xEO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxJQUFJO0FBQ25DO0FBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEY7QUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDbEYsWUFBWSxNQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQy9FLFlBQVksTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUM1QztBQUNBLFlBQVksSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxHQUFFO0FBQzlFLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksR0FBRTtBQUN2RixpQkFBaUIsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLEdBQUU7QUFDMUM7QUFDQSxZQUFZLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUU7QUFDeEM7QUFDQSxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFNO0FBQzdDO0FBQ0EsZ0JBQWdCLE9BQU8sSUFBSTtBQUMzQixvQkFBb0IsS0FBSyxPQUFPO0FBQ2hDLHdCQUF3QixJQUFJLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUM1Qyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sR0FBRyxXQUFXO0FBQ2hELDRCQUE0QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRTtBQUM1RSwwQkFBeUI7QUFDekIsd0JBQXdCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsUUFBTztBQUN6QyxvQkFBb0IsTUFBTTtBQUMxQixvQkFBb0IsS0FBSyxNQUFNO0FBQy9CLHdCQUF3QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUU7QUFDMUYsb0JBQW9CLE1BQU07QUFDMUIsb0JBQW9CO0FBQ3BCLHdCQUF3QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRTtBQUM1RSxvQkFBb0IsTUFBTTtBQUMxQixpQkFBaUI7QUFDakI7QUFDQSxjQUFhO0FBQ2I7QUFDQSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkI7QUFDQSxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUU7QUFDM0Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDLE9BQU8sMEJBQTBCLEVBQUUsT0FBTyxHQUFHO0FBQzlDLFFBQVEsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSztBQUN4QyxZQUFZLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUQsWUFBWSxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNoQyxZQUFZLEtBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUM5QyxZQUFZLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUs7QUFDeEMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzNDLGlCQUFpQixPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakYsaUJBQWlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtBQUNBLFlBQVksS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxNQUFNO0FBQ25ELGdCQUFnQixPQUFPO0FBQ3ZCLG9CQUFvQixDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSztBQUNuRCx3QkFBd0IsT0FBTztBQUMvQiw0QkFBNEIsT0FBTyxFQUFFO0FBQ3JDLGdDQUFnQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSztBQUN6RCxvQ0FBb0MsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELGlDQUFpQyxDQUFDO0FBQ2xDLHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQixDQUFDO0FBQ3RCLGlCQUFpQixDQUFDO0FBQ2xCLGFBQWEsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxZQUFZLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxQixTQUFTLENBQUM7QUFDVixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxhQUFhLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksT0FBTyxNQUFNLENBQUMsa0JBQWtCLEtBQUssVUFBVSxFQUFFO0FBQzdELFlBQVksTUFBTSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQywyQkFBMEI7QUFDeEUsWUFBWSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSTtBQUNaO0FBQ0EsWUFBWSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUU7QUFDbkM7QUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHO0FBQzVCLGdCQUFnQixhQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPO0FBQ2hELGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO0FBQ2xDLGFBQWEsQ0FBQztBQUNkO0FBQ0EsWUFBWSxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxHQUFFO0FBQ25ELFlBQVksT0FBTyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFDO0FBQ3pFLFlBQVksT0FBTyxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDdEU7QUFDQSxZQUFZLElBQUksT0FBTyxHQUFHLE1BQU07QUFDaEM7QUFDQTtBQUNBLFlBQVksTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdkQ7QUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQy9FO0FBQ0E7QUFDQSxZQUFZLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQztBQUNBO0FBQ0EsWUFBWSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvQjtBQUNBLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNuQjtBQUNBLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQjtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTywwQkFBMEIsRUFBRSxPQUFPLEdBQUc7QUFDakQsUUFBUSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLO0FBQ3hDLFlBQVksTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxZQUFZLENBQUMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxjQUFhO0FBQy9ELFlBQVksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDOUUsWUFBWSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxHQUFFO0FBQ2hEO0FBQ0EsWUFBWSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU07QUFDOUMsZ0JBQWdCLE9BQU87QUFDdkIsb0JBQW9CLFVBQVUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRTtBQUN6RSxrQkFBaUI7QUFDakIsYUFBYSxFQUFDO0FBQ2QsWUFBWSxDQUFDLENBQUMsS0FBSyxHQUFFO0FBQ3JCLFNBQVMsQ0FBQztBQUNWLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWEsU0FBUyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJO0FBQ1o7QUFDQSxZQUFZLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDOUQsWUFBWSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDN0IsWUFBWSxXQUFXLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRTtBQUN2RCxnQkFBZ0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkQsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsYUFBYTtBQUNiO0FBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQztBQUM5QixZQUFZLE9BQU8sS0FBSyxDQUFDO0FBQ3pCO0FBQ0EsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ25CO0FBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalFPLE1BQU0sRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNkO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNkO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sR0FBRztBQUMzQjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7QUFDbkIsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUNuQixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sR0FBRztBQUN6QjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUMzQztBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEdBQUc7QUFDWDtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN4RDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0M7QUFDQSxFQUFFLEtBQUssS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEM7QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2Y7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDZCxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0FBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8s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QUMsTUFBTTtBQUM3QixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtBQUM1QixVQUFVLEtBQUssQ0FBQyxNQUFNO0FBQ3RCLEtBQUssQ0FBQztBQUNOO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDckMsSUFBSSxJQUFJ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LElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDekMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksR0FBRztBQUNULElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDckM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUM1RDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN6QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0FBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQ2hDLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUM5QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQzlCLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzFCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRTtBQUNWLE1BQU0sSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJO0FBQzFCLFVBQVUsSUFBSSxDQUFDLE1BQU07QUFDckIsVUFBVSxJQUFJLENBQUMsSUFBSTtBQUNuQixVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztBQUN6QixVQUFVLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QjtBQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQjtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3BCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztBQUM3QyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxHQUFHO0FBQ2xCLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUNwRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFDOUUsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0FBQy9CLElBQUksT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM5QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO0FBQ3BDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDNUMsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNuQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3pCLElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLEdBQUc7QUFDakIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDaEQsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hDLEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRTtBQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25ELEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRTtBQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkQsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRTtBQUNqQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0MsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUNsQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0MsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUU7QUFDZixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFDYjtBQUNBLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDWjtBQUNBO0FBQ0E7QUFDQSxFQUFFLE9BQU8sR0FBRztBQUNaLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxHQUFHO0FBQ1gsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLEdBQUc7QUFDVixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO0FBQzFCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTztBQUNqQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUM5RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU87QUFDMUIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPO0FBQ2pDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO0FBQ2xFLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUNaLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDM0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLEdBQUc7QUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQyxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxHQUFHO0FBQ2Q7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsT0FBTztBQUN6QyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPO0FBQzVCLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU87QUFDNUI7QUFDQSxJQUFJLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNwRSxJQUFJLE9BQU8sVUFBVSxDQUFDO0FBQ3RCLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNkLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQixJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckQ7QUFDQSxTQUFTLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2xCLElBQUksSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQzNCLElBQUksSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRTtBQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDeEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLFVBQVUsQ0FBQztBQUN0QixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNkLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU87QUFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDOUIsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRTtBQUNwQixJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPO0FBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDekIsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN6QixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQ1osSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUMxQixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtBQUNiLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDM0IsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEUsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0FBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtBQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztBQUNBLElB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QUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBRztBQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxD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R0FBRyxHQUFHLEdBQUU7QUFDckIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUU7QUFDdEI7QUFDQSxRQUFRLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFlBQVksR0FBRyxHQUFHLE1BQUs7QUFDdkIsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxLQUFJO0FBQy9FO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFFO0FBQ2xNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTTtBQUN0RSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUk7QUFDbkUsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3JELFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFFO0FBQ3BFLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssR0FBRztBQUNaO0FBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDeEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENB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QUFDLENBQUMsS0FBSyxFQUFDO0FBQ3ZDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDckIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0FBQ2xEO0FBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNwUE8sTUFBTSxRQUFRLFNBQVMs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LElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN2QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxHQUFHO0FBQ2xDO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNyRDtBQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztBQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QjtBQUNBLFNBQVM7QUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLFFBQVEsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xHO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUNoQyxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDakosWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6RDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDak9PLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDbkM7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3RCO0FBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7QUFDbEMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUM7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzVCLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzNCLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxJ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Q0FBQyxNQUFNLEVBQUU7QUFDdkI7QUFDQSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUIsUUFBUTtBQUNSO0FBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7QUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckM7QUFDQSxTQUFTLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMvRCxTQUFTLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2hELFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRTtBQUM3QixTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsU0FBUyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHO0FBQ3hCLE9BQU8sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN2QyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEMsZUFBZSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNuRDtBQUNBLE9BQU8sR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQSxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDeEQsT0FBTyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLE9BQU87QUFDUDtBQUNBLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUNwRDtBQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0UsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtBQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7QUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUN0QztBQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7QUFDdEM7QUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7QUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtBQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0FBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7QUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0M7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNmO0FBQ0EsRUFBRSxJQUFJLENBQUMsWUFBWSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVELGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsYUFBYSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM1QjtBQUNBLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQzdCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDcEI7QUFDQSxLQUFLLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUMxQztBQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzVCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFNO0FBQzFCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDOUM7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3ZCLE1BQU07QUFDTixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDaEI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM5QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDekIsS0FBSyxPQUFPLElBQUksQ0FBQztBQUNqQjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsV0FBVyxDQUFDLEdBQUc7QUFDaEI7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ2pCLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBSztBQUNmO0FBQ0EsS0FBYyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPO0FBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ25DLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0FBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7QUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBO0FBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVEO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0FB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QUM7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0E7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDdEUsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7QUFDQSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUM7QUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMxQixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFlBQVksT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZEO0FBQ0Es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QUFDM0MsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtBQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFD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QyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQztBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztBQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7QUFD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QUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSTtBQUM5QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FB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QUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RCO0FBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztBQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0FBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtBQUNBLE1BQU07QUFDTjtBQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVB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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsNENBQTRDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQztBQUM1SCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDNUs7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDMUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHNCQUFzQixFQUFDO0FBQzFJO0FBQ0EsUUFBZ0IsSUFBSSxDQUFDLEVBQUU7QUFDdkIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFPO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRTtBQUMxQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNqQjtBQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDOUIsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN4QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUM3QyxRQUFRLEdBQUcsRUFBRSxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsV0FBVTtBQUMxRCxZQUFZLEVBQUUsQ0FBQyxVQUFVLEdBQUcsT0FBTTtBQUNsQztBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFNO0FBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTTtBQUNuQztBQUNBLFFBQVEsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtBQUNuQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87QUFDL0QsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQy9CO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtBQUNoRCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0FBQ2hEO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUM7QUFDNUQsYUFBYTtBQUNiLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxTQUFTLENBQUM7QUFDL0MsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFdBQVcsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0MsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzFCO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9CLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvQixTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUMxQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDdEI7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDMUI7QUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUNoQztBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPO0FBQzNCO0FBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEI7QUFDQSxZQUFZLEtBQUssU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxLQUFLLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUU7QUFDbEY7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUM1QjtBQUNBLGdCQUFnQixXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFFO0FBQ3pELGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFFO0FBQ3ZEO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxPQUFPO0FBQ3hCO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQztBQUNsQyxZQUFZLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRTtBQUN0QyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDOUMscUJBQXFCLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDaEMsYUFBYTtBQUNiLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN4QyxRQUFRLElBQUksV0FBVyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDeEM7QUFDQSxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkQ7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDbkMsWUFBWSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUVoQyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3pCLFlBQVksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuRCxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDaEMsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEdBQUcsR0FBRztBQUNWO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDMUI7QUFDQSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3RDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSTtBQUNqQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbkMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQ2pDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQzdCLFNBQVMsTUFBTSxJQUFJLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUNyRCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN2RyxpQkFBZ0I7QUFDaEIsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN0QyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDbEMsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQ3ZCO0FBQ0EsWUFBWSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUM7QUFDcEIsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUk7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQUs7QUFDNUI7QUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxHQUFHO0FBQ2Q7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDcEIsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDeEMsUUFBUSxLQUFLLENBQUMsT0FBTyxHQUFFO0FBQ3ZCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLEdBQUc7QUFDWjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDdEM7QUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUU7QUFDakMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFO0FBQzlDLFlBQVksSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEdBQUU7QUFDOUI7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3ZDO0FBQ0EsUUFBUSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRztBQUN6QixZQUFZLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUU7QUFDN0QsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUN4RCxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUU7QUFDcEM7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3ZDLGdCQUFnQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNwQyxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzdCLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRztBQUNaO0FBQ0EsUUFBUSxLQUFLLENBQUMsSUFBSSxHQUFFO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFFO0FBQ25ELFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3hCLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDOUI7QUFDQTtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFJO0FBQzVDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTTtBQUNuQztBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZCO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLE1BQUs7QUFDckMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLE1BQUs7QUFDckM7QUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7QUFDdkQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0FBQ3hELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtBQUMxRCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7QUFDM0QsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO0FBQ25DO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0FBQ25FLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztBQUNwRTtBQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztBQUMvRCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLHlCQUF3QjtBQUN0RTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUU7QUFDbkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDM0I7QUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3hCLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDOUI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0FBQ0E7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSTtBQUM1QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsT0FBTTtBQUNoQztBQUNBLFFBQVEsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtBQUNuQztBQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxPQUFNO0FBQ2hDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxPQUFNO0FBQ2hDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztBQUMvRCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtBQUM1RDtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUMzQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxDQUFDLEdBQUc7QUFDZjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQzlEO0FBQ0EsYUFBYSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQ3hJO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDdkI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3ZELGFBQWEsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNqRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Y7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU07QUFDakMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDeEMsYUFBYSxJQUFJLENBQUMsT0FBTyxHQUFFO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ3hDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxZQUFZLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFNO0FBQy9CLFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNsQixZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUU7QUFDekMsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRTtBQUMvQixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDcEM7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtBQUN2QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDN0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztBQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2hFO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25ELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDN0Y7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQ3BCO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUs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QyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0FBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0FBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtBQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0FBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNGLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FB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SSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxD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RztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7QUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7QUFDOUI7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JEO0FBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7QUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN4RCxhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7QUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCO0FBQ0EsU0FBUztBQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDekQsUUFBUSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDNUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDMUM7QUFDQTtBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixZQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLEtBQUssQ0FBQztBQUNyRCxTQUFTLE1BQU07QUFDZixZQUFZLElBQUksR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDMUIsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHO0FBQzNDO0FBQ0EsWUFBWSxDQUFDLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNoRCxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDaEQsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDOUQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtBQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0FBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6RDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDckM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0FBQ0E7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtBQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0FBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FB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Q0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7QUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7QUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BDO0FB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QUMsQ0FBQztBQUNwRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN4RCxTQUFTLE1BQU07QUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN4RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJ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QUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BEO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzFCLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztBQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDaEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNyRCxN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O0FBQzNCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDOUI7QUFDQTtBQUNBLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtBQUNBO0FBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtBQUNBO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0FBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJ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TUFBTSxDQUFDO0FBQ3pCO0FBQ0EsSUFBSSxRQUFRLElBQUk7QUFDaEIsTUFBTSxLQUFLLENBQUM7QUFDWjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDeEQsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDNUQsUUFBUSxNQUFNO0FBQ2QsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtBQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtBQUNBLElBQUksSUFBSSxPQUFPO0FBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzNDO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtBQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEIsR0FBRztBQUNIOztBQzdTTyxNQUFNLFNBQVMsU0FBUyxLQUFLLENBQUM7QUFDckM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQzFELFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN4QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDN0Q7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLGtCQUFrQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JOLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLHFDQUFxQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsd0NBQXdDLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxlQUFlLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxtQ0FBbUMsQ0FBQyxDQUFDO0FBQzlPO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25JO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxzRUFBc0UsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25MLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFDM0MsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87QUFDbEM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3ZDLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDMUIsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMvQixZQUFZLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3RCxZQUFZLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87QUFDbEM7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEQsYUFBYSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxJQUFJO0FBQ2Y7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUs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QUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDaEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7QUFD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LENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUU7QUFDNUwsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUN2TDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3JCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFDOUQsUUFBUSxPQUFPLEdBQUc7QUFDbEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtB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LENBQUM7QUFDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksQ0FBQyxR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RyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7QUFDakQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUU7QUFDbEQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN4RDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDckY7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUNuQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUN0SjtBQUNBLFFBQVcsSUFBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSTtBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7QUFDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztBQUNBLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdkMsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxzQkFBc0IsQ0FBQztBQUN0RCxZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25EO0FBQ0EsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDckMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLHNCQUFzQixDQUFDO0FBQzFEO0FBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNwQztBQUNBLG9CQUFvQixHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDeEY7QUFDQSxvQkFBb0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDeEQsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMseUNBQXlDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDdFEsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7QUFDckUsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbEUsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQkFBb0IsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4QztBQUNBLG9CQUFvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDeEMsb0JBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQztBQUNyQztBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0Esb0JBQW9CLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxFQUFFLEtBQUssR0FBRTtBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcseUJBQXlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxpRUFBZ0U7QUFDekwsb0JBQW9CLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFFO0FBQ3ZDO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxjQUFjLENBQUM7QUFDNUQscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQztBQUN0RDtBQUNBLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztBQUNwQjtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE9BQU07QUFDakM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkIsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELFNBQVM7QUFDVDtBQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVELFNBQVM7QUFDVDtBQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0FBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFFO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDN0IsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQztBQUNsQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQzVELFNBQVMsTUFBTTtBQUNmLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMzQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sRUFBRSxDQUFDO0FBQ2xCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQUs7QUFDekM7QUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7QUFDQSxZQUFZLENBQUMsR0FBRyxFQUFDO0FBQ2pCLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQUs7QUFDM0U7QUFDQSxZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMxQixnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztBQUN4QyxhQUFhLE1BQU07QUFDbkIsZ0JBQWdCLENBQUMsR0FBRyxFQUFDO0FBQ3JCLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztBQUM3QixhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUk7QUFDNUM7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQztBQUNoQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQU87QUFDOUMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2pDO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QjtBQUNBLFlBQVksUUFBUSxDQUFDO0FBQ3JCO0FBQ0EsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUM3RixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNO0FBQ2xHLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07QUFDL0YsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUNuRztBQUNBLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBQztBQUNyQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDckIsUUFBUSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDM0I7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRztBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzdDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUMxQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUM7QUFDN0QsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDM0M7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDaEUsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHO0FBQzFCLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7QUFDaEUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLEdBQUc7QUFDbEQsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUM5QyxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMxQixhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU87QUFDekI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3BDLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsUUFBVyxJQUFXLElBQUk7QUFDMUI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0FBQ0EsWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckIsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUM3RCxhQUFhLE1BQU07QUFDbkIsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM3RCxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRDtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5RjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztBQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0FBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7QUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtBQUN6RTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7QUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0FBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMs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QUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDclJBO0FBSUE7QUFDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO0FBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0FBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxrQ0FBa0MsRUFBRSxDQUFDO0FBQzNHO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxD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QVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEUsTUFBTSxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRyxLQUFLO0FBQ0wsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM5QztBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pELE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7QUFDOUIsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEMsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRCxVQUFVLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEQ7QUFDQTtBQUNBLFVBQVUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0MsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRDtBQUNBLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUNyQixTQUFTO0FBQ1QsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sTUFBTTtBQUNiO0FBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNuQyxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdELFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDL0M7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUQ7QUFDQSxVQUFVLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsVUFBVSxNQUFNLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRixVQUFVLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekU7QUFDQSxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNELFNBQVM7QUFDVCxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDbkIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDckMsR0FBRztBQUNIO0FBQ0EsRUFBRSxh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QTtBQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNkLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QyxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ25CLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pELE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxNQUFNLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDekIsTUFBTSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTO0FBQzdFO0FBQ0EsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0FBQzlCLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25ELFVBQVUsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEMsVUFBVSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUN4RixZQUFZLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN4QyxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU8sTUFBTTtBQUNiO0FBQ0EsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMvRCxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsVUFBVSxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDOUMsVUFBVSxNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzlHLFVBQVUsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJ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Q0FBQyxDQUFDLE1BQU07QUFDOUMsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2xELFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNsRCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDeEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNoRCxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNyRSxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDbEQsWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDekUsWUFBWSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDL0QsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3BELFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNwRCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDeEQsWUFBWSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDaEUsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNoRCxZQUFZLEtBQUssT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUM5RCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDeEQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDeEI7QUFDQSxZQUFZLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSTtBQUNuQztBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbkQsWUFBWSxPQUFPLENBQUMsQ0FBQztBQUNyQjtBQUNBLFNBQVM7QUFDVDtBQUNBLEVBQUM7QUFDRDtBQUNPLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUMxQztBQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsUUFBTztBQUN0QjtBQUNBLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLE9BQU07QUFDOUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxHQUFHLFFBQU87QUFDckQsYUFBYSxJQUFJLEdBQUcsU0FBUTtBQUM1QjtBQUNBLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUN0QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxRQUFPO0FBQ3BDLGFBQWEsSUFBSSxHQUFHLFFBQU87QUFDM0I7QUFDQSxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssRUFBRTtBQUMzRDtBQUNBLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEdBQUcsSUFBSSxHQUFHLFNBQVE7QUFDdEQsYUFBYSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsR0FBRyxJQUFJLEdBQUcsT0FBTTtBQUN6RDtBQUNBLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLFlBQVksTUFBTSxFQUFFO0FBQzdEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxTQUFRO0FBQy9DLGFBQWEsSUFBSSxHQUFHLE9BQU07QUFDMUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSTtBQUNmO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTSxHQUFHLENBQUM7QUFDakIsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3RCO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNqQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3RDLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLFNBQVMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN2QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQztBQUN6RSxRQUFRLENBQUMsQ0FBQyxvQkFBb0I7QUFDOUIsUUFBUSxJQUFJLENBQUM7QUFDYjtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUNqRTtBQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7QUFDNUM7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDcEU7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENB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 diff --git a/examples/uil_treelist.html b/examples/uil_treelist.html new file mode 100644 index 0000000..6201ae3 --- /dev/null +++ b/examples/uil_treelist.html @@ -0,0 +1,128 @@ + + + + UIL – TreeList demo + + + + + + +
+ + + + diff --git a/index.html b/index.html index 7abe5ae..41dfd25 100644 --- a/index.html +++ b/index.html @@ -14,6 +14,9 @@
  • uil_lumicles
  • +
  • + uil_treelist +
  • \ No newline at end of file diff --git a/src/core/add.js b/src/core/add.js index 2350755..f9cb225 100644 --- a/src/core/add.js +++ b/src/core/add.js @@ -21,6 +21,7 @@ import { Item } from '../proto/Item.js'; import { Grid } from '../proto/Grid.js'; import { Pad2D } from '../proto/Pad2D.js'; import { Roots } from './Roots.js'; +import { TreeList } from '../proto/TreeList.js'; export const add = function () { @@ -79,6 +80,7 @@ export const add = function () { case 'item': n = new Item(o); break; case 'grid': n = new Grid(o); break; case 'pad2d': case 'pad': n = new Pad2D(o); break; + case 'treelist': n = new TreeList(o); break; } diff --git a/src/proto/TreeList.js b/src/proto/TreeList.js new file mode 100644 index 0000000..cbb273f --- /dev/null +++ b/src/proto/TreeList.js @@ -0,0 +1,379 @@ +// proto/TreeList.js +import { Proto } from '../core/Proto.js'; +import { Tools } from '../core/Tools.js'; +import { Roots } from '../core/Roots.js'; + +export class TreeList extends Proto { + constructor(o = {}) { + // Propiedades públicas esperadas (API) + // o.tree (obj/array), o.value (array), o.focused (bool), + // o.focusPath (array), o.focusLevel (number), + // o.tabIndex, o.itemIndex, o.onChange (fn) + o.selectable = true; // navegable por teclado si activas flechas + o.name = o.name || 'TreeList'; + super(o); + + // Datos & estado + this.tree = o.tree || {}; + this.value = Array.isArray(o.value) ? o.value.slice() : []; + this.focused = !!o.focused; + this.focusPath = Array.isArray(o.focusPath) ? o.focusPath.slice() : []; + this.focusLevel = typeof o.focusLevel === 'number' ? o.focusLevel : -1; + + this.tabIndex = o.tabIndex ?? null; + this.itemIndex = o.itemIndex ?? null; + + // Callback de notificación + this.changeCb = typeof o.onChange === 'function' ? o.onChange : (/*tabIdx, itemIdx, newPath*/) => {}; + + // Layout interno + this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] + this.leafMax = 0; // alto reservado para el último nivel (máximo tamaño de hoja) + this.levelGap = 2; // gap vertical entre niveles + this.hItem = this.h; // alto por ítem + + // Hover / foco de mouse + this.hover = { level: -1, index: -1 }; + + // DOM visual (sin listeners directos; los eventos llegan vía Roots->handleEvent) + this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); // container interno + this.s[2] = this.c[2].style; + + // Inicializa nodos visuales de forma perezosa en rSize() + this.itemsDom = []; // mirror de this.levels (matriz de nodos) + + this.init(); + } + + // =============== Helpers de datos =============== + + static isMap(node) { return node && typeof node === 'object' && !Array.isArray(node); } + static isList(node) { return Array.isArray(node); } + + // Devuelve el subnodo al seguir path (se detiene si no existe) + getNodeAtPath(path) { + let node = this.tree; + for (let i = 0; i < path.length; i++) { + if (TreeList.isMap(node)) { + if (!Object.prototype.hasOwnProperty.call(node, path[i])) return { node: null, depth: i }; + node = node[path[i]]; + } else if (TreeList.isList(node)) { + // Al llegar a lista, ya no hay más descendencia válida para claves + if (i < path.length) return { node, depth: i }; + } else { + return { node: null, depth: i }; + } + } + return { node, depth: path.length }; + } + + // Autocompleta descendiendo por la primera clave de cada mapa hasta alcanzar una lista + autoCompleteToLeaf(basePath) { + let nodeInfo = this.getNodeAtPath(basePath); + let node = nodeInfo.node; + const path = basePath.slice(); + + while (TreeList.isMap(node)) { + const keys = Object.keys(node); + if (!keys.length) break; // mapa vacío + const k0 = keys[0]; + path.push(k0); + node = node[k0]; + } + // Si termina en lista, NO agrega selección final de elemento hoja + return path; + } + + // Ruta activa para construir niveles (focusPath si focused, si no value) + getActivePath() { + return this.focused ? this.focusPath : this.value; + } + + // Calcula el máximo tamaño de hoja del árbol (para reservar alto estable) + computeLeafMax(node = this.tree) { + if (TreeList.isList(node)) return node.length; + if (!TreeList.isMap(node)) return 0; + let m = 0; + for (const k of Object.keys(node)) { + m = Math.max(m, this.computeLeafMax(node[k])); + } + return m; + } + + // =============== Construcción de niveles (modelo lógico) =============== + + buildLevels() { + this.levels.length = 0; + const activePath = this.getActivePath(); + + let node = this.tree; + let level = 0; + + while (node) { + if (TreeList.isMap(node)) { + // Opciones = claves del mapa (nivel intermedio) + const keys = Object.keys(node); + if (!keys.length) break; // detener expansión si vacío + this.levels.push({ type: 'map', items: keys.map(k => ({ key: k, label: k, zone: {x:0,y:0,w:0,h:0} })), zone: {x:0,y:0,w:0,h:this.hItem} }); + + // Avanza según la ruta activa (si existe), sino se detiene + const nextKey = activePath[level]; + if (!nextKey || !node.hasOwnProperty(nextKey)) break; + node = node[nextKey]; + } else if (TreeList.isList(node)) { + // Último nivel: lista/hoja (vertical) + const items = node.map(label => ({ key: label, label, zone: {x:0,y:0,w:0,h:0} })); + this.levels.push({ type: 'list', items, zone: {x:0,y:0,w:0,h: Math.max(items.length, this.leafMax) * this.hItem } }); + break; // fin + } else { + break; // nodo inválido + } + level++; + } + } + + // =============== Layout (zonas internas) =============== + + // Calcula zonas internas de cada ítem/level y construye/actualiza dom + layoutLevels() { + const padX = 8; + const w = this.zone.w - padX * 2; + let y = 0; + + // Asegura `itemsDom` anidado por nivel + while (this.itemsDom.length < this.levels.length) this.itemsDom.push([]); + // Limpia extra DOM si niveles disminuyen + for (let L = this.levels.length; L < this.itemsDom.length; L++) { + for (const el of this.itemsDom[L]) if (el && el.parentNode) el.parentNode.removeChild(el); + } + this.itemsDom.length = this.levels.length; + + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + if (lvl.type === 'map') { + const n = Math.max(1, lvl.items.length); + const cellW = Math.floor(w / n); + lvl.zone = { x: padX, y, w, h: this.hItem }; + let x = padX; + // Asegura contenedor dom de nivel si querés uno (opcional) + for (let i = 0; i < lvl.items.length; i++) { + const it = lvl.items[i]; + it.zone = { x, y, w: cellW, h: this.hItem }; + + // crea/actualiza nodo visual + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, 'map'); + + x += cellW; + } + y += this.hItem + this.levelGap; + } else { + // lista/hoja vertical + const n = lvl.items.length; + const hList = Math.max(n, this.leafMax) * this.hItem; + lvl.zone = { x: padX, y, w, h: hList }; + + for (let i = 0; i < Math.max(n, this.leafMax); i++) { + // Puede haber "espacio vacío" si n < leafMax + const isReal = i < n; + const it = isReal ? lvl.items[i] : { key: null, label: '', zone: {x:0,y:0,w:0,h:0} }; + it.zone = { x: padX, y: y + i * this.hItem, w, h: this.hItem }; + + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, 'list', isReal); + } + y += hList; + } + } + + // Ajusta alto visible del control + const totalH = y; + this.zone.h = totalH + this.margin; // Proto se encarga del margen + this.s[0].height = this.zone.h + 'px'; + this.s[2].height = totalH + 'px'; + } + + ensureItemDom(L, i) { + const row = this.itemsDom[L]; + while (row.length <= i) row.push(null); + if (!row[i]) { + // Cada ítem es un DIV posicionado absoluto dentro de this.c[2] + const div = this.dom('div', Tools.css.txt + 'position:absolute; pointer-events:none;'); + this.c[2].appendChild(div); + row[i] = div; + } + return row[i]; + } + + // Colorea y posiciona el DOM del ítem según estados (seleccionado / foco) + paintItemDom(div, L, i, it, kind, isReal = true) { + const s = div.style; + const cc = this.colors; + + // Posición + s.left = it.zone.x + 'px'; + s.top = it.zone.y + 'px'; + s.width = it.zone.w + 'px'; + s.height = (it.zone.h - 2) + 'px'; // -2 para evitar overlap de bordes + + // Texto + div.textContent = isReal ? it.label : ''; + + // Estados semánticos + const value = this.value; + const selected = (value[L] !== undefined) && (value[L] === it.key) && isReal; + + const inFocusLevel = this.focused && (this.focusLevel === L); + const focusMatch = inFocusLevel && (this.focusPath[L] === it.key) && isReal; + + // Hover (mouse) + const isHover = (this.hover.level === L && this.hover.index === i && isReal); + + // Estilos base + s.background = cc.back; + s.color = cc.text; + s.border = '1px solid ' + cc.border; + + // Mapa = horizontal, Lista = vertical + if (kind === 'map') s.textAlign = 'center'; + else s.textAlign = 'left'; + + // Priorización visual: seleccionado > foco > hover > base + if (selected) { + s.background = cc.select; + s.color = cc.textSelect; + } else if (focusMatch) { + s.background = cc.backgroundOver; + s.color = cc.textOver; + } else if (isHover) { + s.background = cc.overoff; + s.color = cc.textOver; + } + // Deshabilitar DOM si no hay ítem real en filas de padding + s.opacity = isReal ? '1' : '0'; + } + + // =============== Ciclo de vida visual =============== + + rSize() { + // Recalcula leafMax y niveles cada vez que cambia tamaño/datos + this.leafMax = this.computeLeafMax(this.tree); + this.buildLevels(); + this.layoutLevels(); + } + + update() { + // Redibuja cuando cambian estados de hover/focus/value externamente + this.buildLevels(); + this.layoutLevels(); + } + + // =============== Interacción (hit-testing y selección) =============== + + // Convierte coords globales a locales del control (igual que Proto) + _toLocal(e) { + const mx = e.clientX - this.zone.x; + const my = e.clientY - this.zone.y; + return { x: mx, y: my }; + } + + // Busca qué ítem (L,i) está bajo el mouse; respeta zonas por nivel + _hitTest(mx, my) { + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + const z = lvl.zone; + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; + + if (lvl.type === 'map') { + for (let i = 0; i < lvl.items.length; i++) { + const itz = lvl.items[i].zone; + if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { + return { L, i, real: true }; + } + } + } else { + // hoja: puede contener filas de padding + const nRows = Math.max(lvl.items.length, this.leafMax); + for (let i = 0; i < nRows; i++) { + const isReal = i < lvl.items.length; + const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.hItem, w: z.w, h: this.hItem }; + if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { + return { L, i, real: isReal }; + } + } + } + } + return { L: -1, i: -1, real: false }; + } + + handleEvent(e) { + if (this.lock) return false; + + // Delega estados de hover / click + if (e.type === 'mousemove') { + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + this.hover = (ht.L !== -1 && ht.real) ? { level: ht.L, index: ht.i } : { level: -1, index: -1 }; + this.update(); // repintar con hover + return true; + } + + if (e.type === 'mousedown') { + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + if (ht.L !== -1 && ht.real) { + this._selectAt(ht.L, ht.i); + return true; + } + } + + if (e.type === 'mouseup') { + // nada por ahora + return true; + } + + // Soporte básico para teclado (opcional: Up/Down/Left/Right) + if (e.type === 'keydown') { + // Puedes integrar navegación de flechas aquí si lo deseas, + // reutilizando this.isSelectable (ya marcada en ctor). + // Recomendación: mover foco entre niveles/ítems con Roots+Gui. :contentReference[oaicite:1]{index=1} :contentReference[oaicite:2]{index=2} + } + + return false; + } + + // Regla de selección y autocompletado + _selectAt(L, i) { + const lvl = this.levels[L]; + const chosen = lvl.items[i]; + if (!chosen || !chosen.key) return; + + // 1) Recortar value hasta L e insertar la opción elegida + const base = this.value.slice(0, L); + base[L] = chosen.key; + + // 2) Autocompletar por primera clave descendiendo hasta una lista + const newPath = this.autoCompleteToLeaf(base); + + // 3) Notificar + this.value = newPath.slice(); // reflejar selección interna + this.update(); + this.changeCb(this.tabIndex, this.itemIndex, newPath); + } + + // API pública para sincronización externa (por si quieres settear desde afuera) + setValue(path) { + this.value = Array.isArray(path) ? path.slice() : []; + this.update(); + } + setTree(tree) { + this.tree = tree || {}; + this.update(); + } + setFocus({ focused, focusPath, focusLevel }) { + if (typeof focused === 'boolean') this.focused = focused; + if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); + if (typeof focusLevel === 'number') this.focusLevel = focusLevel; + this.update(); + } +} From ae5cfaa1b6c24ecbca0a3590a33dbe53a483c9b4 Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Fri, 5 Sep 2025 10:53:06 -0300 Subject: [PATCH 07/17] version 2 --- build/uil.js | 217 ++++++++++++++++++++--------------------- build/uil.min.js | 217 ++++++++++++++++++++--------------------- build/uil.module.js | 217 ++++++++++++++++++++--------------------- src/proto/TreeList.js | 219 +++++++++++++++++++++--------------------- 4 files changed, 439 insertions(+), 431 deletions(-) diff --git a/build/uil.js b/build/uil.js index 9f58559..ee34182 100644 --- a/build/uil.js +++ b/build/uil.js @@ -8186,11 +8186,11 @@ class TreeList extends Proto { constructor(o = {}) { - // Propiedades públicas esperadas (API) - // o.tree (obj/array), o.value (array), o.focused (bool), - // o.focusPath (array), o.focusLevel (number), + // API pública esperada: + // o.tree (obj/array), o.value (array) + // o.focused (bool), o.focusPath (array), o.focusLevel (number) // o.tabIndex, o.itemIndex, o.onChange (fn) - o.selectable = true; // navegable por teclado si activas flechas + o.selectable = true; o.name = o.name || 'TreeList'; super(o); @@ -8204,34 +8204,31 @@ this.tabIndex = o.tabIndex ?? null; this.itemIndex = o.itemIndex ?? null; - // Callback de notificación - this.changeCb = typeof o.onChange === 'function' ? o.onChange : (/*tabIdx, itemIdx, newPath*/) => {}; + // Callback + this.changeCb = typeof o.onChange === 'function' ? o.onChange : () => {}; - // Layout interno - this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] - this.leafMax = 0; // alto reservado para el último nivel (máximo tamaño de hoja) - this.levelGap = 2; // gap vertical entre niveles - this.hItem = this.h; // alto por ítem + // Layout interno / publicación de altura + this.lineH = this.h; // alto de UNA fila + this.levelGap = this.colors.sy || 2; // separación vertical entre niveles + this.leafMax = 0; // se calcula en rSize() - // Hover / foco de mouse - this.hover = { level: -1, index: -1 }; + // Modelo visual + this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] + this.itemsDom = []; // espejo DOM por nivel + this.hover = { level: -1, index: -1 }; - // DOM visual (sin listeners directos; los eventos llegan vía Roots->handleEvent) - this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); // container interno + // Contenedor interno (absoluto) + this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); this.s[2] = this.c[2].style; - // Inicializa nodos visuales de forma perezosa en rSize() - this.itemsDom = []; // mirror de this.levels (matriz de nodos) - this.init(); } - // =============== Helpers de datos =============== - + // ======= Helpers de tipo ======= static isMap(node) { return node && typeof node === 'object' && !Array.isArray(node); } static isList(node) { return Array.isArray(node); } - // Devuelve el subnodo al seguir path (se detiene si no existe) + // ======= Recorrido de datos ======= getNodeAtPath(path) { let node = this.tree; for (let i = 0; i < path.length; i++) { @@ -8239,8 +8236,8 @@ if (!Object.prototype.hasOwnProperty.call(node, path[i])) return { node: null, depth: i }; node = node[path[i]]; } else if (TreeList.isList(node)) { - // Al llegar a lista, ya no hay más descendencia válida para claves - if (i < path.length) return { node, depth: i }; + // Llegamos a una lista: ya no hay más claves válidas + if (i < path.length) return { node, depth: i }; } else { return { node: null, depth: i }; } @@ -8248,32 +8245,30 @@ return { node, depth: path.length }; } - // Autocompleta descendiendo por la primera clave de cada mapa hasta alcanzar una lista + // Autocompletar: baja por primeras claves de cada mapa hasta alcanzar una lista autoCompleteToLeaf(basePath) { - let nodeInfo = this.getNodeAtPath(basePath); - let node = nodeInfo.node; + let { node } = this.getNodeAtPath(basePath); const path = basePath.slice(); - while (TreeList.isMap(node)) { const keys = Object.keys(node); - if (!keys.length) break; // mapa vacío + if (!keys.length) break; const k0 = keys[0]; path.push(k0); node = node[k0]; } - // Si termina en lista, NO agrega selección final de elemento hoja + // Si termina en lista, NO agrega un ítem final de la hoja return path; } - // Ruta activa para construir niveles (focusPath si focused, si no value) + // Ruta activa (focusPath si focused, sino value) getActivePath() { return this.focused ? this.focusPath : this.value; } - // Calcula el máximo tamaño de hoja del árbol (para reservar alto estable) + // ======= Tamaño de hoja máximo (para layout estable) ======= computeLeafMax(node = this.tree) { - if (TreeList.isList(node)) return node.length; - if (!TreeList.isMap(node)) return 0; + if (Array.isArray(node)) return node.length; + if (!node || typeof node !== 'object') return 0; let m = 0; for (const k of Object.keys(node)) { m = Math.max(m, this.computeLeafMax(node[k])); @@ -8281,8 +8276,7 @@ return m; } - // =============== Construcción de niveles (modelo lógico) =============== - + // ======= Construcción de niveles (modelo lógico) ======= buildLevels() { this.levels.length = 0; const activePath = this.getActivePath(); @@ -8292,38 +8286,39 @@ while (node) { if (TreeList.isMap(node)) { - // Opciones = claves del mapa (nivel intermedio) + // Nivel intermedio: claves del mapa (horizontal) const keys = Object.keys(node); - if (!keys.length) break; // detener expansión si vacío - this.levels.push({ type: 'map', items: keys.map(k => ({ key: k, label: k, zone: {x:0,y:0,w:0,h:0} })), zone: {x:0,y:0,w:0,h:this.hItem} }); + if (!keys.length) break; + this.levels.push({ + type: 'map', + items: keys.map(k => ({ key: k, label: k, zone: { x:0,y:0,w:0,h:0 } })), + zone: { x:0,y:0,w:0,h: this.lineH } + }); - // Avanza según la ruta activa (si existe), sino se detiene const nextKey = activePath[level]; if (!nextKey || !node.hasOwnProperty(nextKey)) break; node = node[nextKey]; } else if (TreeList.isList(node)) { - // Último nivel: lista/hoja (vertical) - const items = node.map(label => ({ key: label, label, zone: {x:0,y:0,w:0,h:0} })); - this.levels.push({ type: 'list', items, zone: {x:0,y:0,w:0,h: Math.max(items.length, this.leafMax) * this.hItem } }); - break; // fin + // Nivel hoja: lista vertical + const items = node.map(label => ({ key: label, label, zone: { x:0,y:0,w:0,h:0 } })); + const hList = Math.max(items.length, this.leafMax) * this.lineH; + this.levels.push({ type: 'list', items, zone: { x:0, y:0, w:0, h: hList } }); + break; } else { - break; // nodo inválido + break; } level++; } } - // =============== Layout (zonas internas) =============== - - // Calcula zonas internas de cada ítem/level y construye/actualiza dom + // ======= Layout (zonas & DOM) ======= layoutLevels() { const padX = 8; const w = this.zone.w - padX * 2; let y = 0; - // Asegura `itemsDom` anidado por nivel + // Ajustar itemsDom a cantidad de niveles while (this.itemsDom.length < this.levels.length) this.itemsDom.push([]); - // Limpia extra DOM si niveles disminuyen for (let L = this.levels.length; L < this.itemsDom.length; L++) { for (const el of this.itemsDom[L]) if (el && el.parentNode) el.parentNode.removeChild(el); } @@ -8334,32 +8329,26 @@ if (lvl.type === 'map') { const n = Math.max(1, lvl.items.length); const cellW = Math.floor(w / n); - lvl.zone = { x: padX, y, w, h: this.hItem }; + lvl.zone = { x: padX, y, w, h: this.lineH }; let x = padX; - // Asegura contenedor dom de nivel si querés uno (opcional) for (let i = 0; i < lvl.items.length; i++) { const it = lvl.items[i]; - it.zone = { x, y, w: cellW, h: this.hItem }; - - // crea/actualiza nodo visual + it.zone = { x, y, w: cellW, h: this.lineH }; const dom = this.ensureItemDom(L, i); this.paintItemDom(dom, L, i, it, 'map'); - x += cellW; } - y += this.hItem + this.levelGap; + y += this.lineH + this.levelGap; } else { - // lista/hoja vertical + // lista/hoja: reservar h según leafMax const n = lvl.items.length; - const hList = Math.max(n, this.leafMax) * this.hItem; + const hList = Math.max(n, this.leafMax) * this.lineH; lvl.zone = { x: padX, y, w, h: hList }; for (let i = 0; i < Math.max(n, this.leafMax); i++) { - // Puede haber "espacio vacío" si n < leafMax const isReal = i < n; - const it = isReal ? lvl.items[i] : { key: null, label: '', zone: {x:0,y:0,w:0,h:0} }; - it.zone = { x: padX, y: y + i * this.hItem, w, h: this.hItem }; - + const it = isReal ? lvl.items[i] : { key: null, label: '', zone: { x:0,y:0,w:0,h:0 } }; + it.zone = { x: padX, y: y + i * this.lineH, w, h: this.lineH }; const dom = this.ensureItemDom(L, i); this.paintItemDom(dom, L, i, it, 'list', isReal); } @@ -8367,18 +8356,20 @@ } } - // Ajusta alto visible del control + // Ajustes de alto interno del contenedor visual const totalH = y; - this.zone.h = totalH + this.margin; // Proto se encarga del margen + this.zone.h = totalH + this.margin; this.s[0].height = this.zone.h + 'px'; this.s[2].height = totalH + 'px'; + + // Publicar alto total al GUI (sumará u.h) + this._publishHeight(); } ensureItemDom(L, i) { const row = this.itemsDom[L]; while (row.length <= i) row.push(null); if (!row[i]) { - // Cada ítem es un DIV posicionado absoluto dentro de this.c[2] const div = this.dom('div', Tools.css.txt + 'position:absolute; pointer-events:none;'); this.c[2].appendChild(div); row[i] = div; @@ -8386,40 +8377,32 @@ return row[i]; } - // Colorea y posiciona el DOM del ítem según estados (seleccionado / foco) paintItemDom(div, L, i, it, kind, isReal = true) { const s = div.style; const cc = this.colors; // Posición - s.left = it.zone.x + 'px'; - s.top = it.zone.y + 'px'; + s.left = it.zone.x + 'px'; + s.top = it.zone.y + 'px'; s.width = it.zone.w + 'px'; - s.height = (it.zone.h - 2) + 'px'; // -2 para evitar overlap de bordes + s.height = (it.zone.h - 2) + 'px'; // Texto div.textContent = isReal ? it.label : ''; - // Estados semánticos - const value = this.value; - const selected = (value[L] !== undefined) && (value[L] === it.key) && isReal; - - const inFocusLevel = this.focused && (this.focusLevel === L); - const focusMatch = inFocusLevel && (this.focusPath[L] === it.key) && isReal; - - // Hover (mouse) - const isHover = (this.hover.level === L && this.hover.index === i && isReal); + // Estados + const selected = isReal && this.value[L] !== undefined && this.value[L] === it.key; + const inFocusLvl = this.focused && (this.focusLevel === L); + const focusMatch = isReal && inFocusLvl && (this.focusPath[L] === it.key); + const isHover = isReal && (this.hover.level === L && this.hover.index === i); // Estilos base s.background = cc.back; s.color = cc.text; s.border = '1px solid ' + cc.border; + s.textAlign = kind === 'map' ? 'center' : 'left'; - // Mapa = horizontal, Lista = vertical - if (kind === 'map') s.textAlign = 'center'; - else s.textAlign = 'left'; - - // Priorización visual: seleccionado > foco > hover > base + // Prioridad visual: seleccionado > foco > hover > base if (selected) { s.background = cc.select; s.color = cc.textSelect; @@ -8430,35 +8413,30 @@ s.background = cc.overoff; s.color = cc.textOver; } - // Deshabilitar DOM si no hay ítem real en filas de padding + + // Filas de padding invisibles en hoja s.opacity = isReal ? '1' : '0'; } - // =============== Ciclo de vida visual =============== - + // ======= Ciclo de vida ======= rSize() { - // Recalcula leafMax y niveles cada vez que cambia tamaño/datos this.leafMax = this.computeLeafMax(this.tree); this.buildLevels(); this.layoutLevels(); } update() { - // Redibuja cuando cambian estados de hover/focus/value externamente this.buildLevels(); this.layoutLevels(); } - // =============== Interacción (hit-testing y selección) =============== - - // Convierte coords globales a locales del control (igual que Proto) + // ======= Interacción ======= _toLocal(e) { const mx = e.clientX - this.zone.x; const my = e.clientY - this.zone.y; return { x: mx, y: my }; } - // Busca qué ítem (L,i) está bajo el mouse; respeta zonas por nivel _hitTest(mx, my) { for (let L = 0; L < this.levels.length; L++) { const lvl = this.levels[L]; @@ -8473,11 +8451,10 @@ } } } else { - // hoja: puede contener filas de padding const nRows = Math.max(lvl.items.length, this.leafMax); for (let i = 0; i < nRows; i++) { const isReal = i < lvl.items.length; - const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.hItem, w: z.w, h: this.hItem }; + const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.lineH, w: z.w, h: this.lineH }; if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { return { L, i, real: isReal }; } @@ -8490,12 +8467,11 @@ handleEvent(e) { if (this.lock) return false; - // Delega estados de hover / click if (e.type === 'mousemove') { const { x, y } = this._toLocal(e); const ht = this._hitTest(x, y); this.hover = (ht.L !== -1 && ht.real) ? { level: ht.L, index: ht.i } : { level: -1, index: -1 }; - this.update(); // repintar con hover + this.update(); return true; } @@ -8509,50 +8485,77 @@ } if (e.type === 'mouseup') { - // nada por ahora return true; } - // Soporte básico para teclado (opcional: Up/Down/Left/Right) - if (e.type === 'keydown') ; - + // (Opcional) teclado: integrar navegación en Gui y reenviar aquí si se desea return false; } - // Regla de selección y autocompletado + // Selección + autocompletado + notificación _selectAt(L, i) { const lvl = this.levels[L]; const chosen = lvl.items[i]; if (!chosen || !chosen.key) return; - // 1) Recortar value hasta L e insertar la opción elegida const base = this.value.slice(0, L); base[L] = chosen.key; - // 2) Autocompletar por primera clave descendiendo hasta una lista const newPath = this.autoCompleteToLeaf(base); - // 3) Notificar - this.value = newPath.slice(); // reflejar selección interna + this.value = newPath.slice(); this.update(); this.changeCb(this.tabIndex, this.itemIndex, newPath); } - // API pública para sincronización externa (por si quieres settear desde afuera) + // ======= API pública ======= setValue(path) { this.value = Array.isArray(path) ? path.slice() : []; this.update(); } + setTree(tree) { this.tree = tree || {}; + // recalcular leafMax en próxima pasada + this.leafMax = this.computeLeafMax(this.tree); this.update(); } + setFocus({ focused, focusPath, focusLevel }) { if (typeof focused === 'boolean') this.focused = focused; if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); if (typeof focusLevel === 'number') this.focusLevel = focusLevel; this.update(); } + + // ======= Publicación de altura ======= + _countVisibleIntermediates() { + let c = 0; + for (let i = 0; i < this.levels.length; i++) if (this.levels[i].type === 'map') c++; + return c; + } + + _getCurrentLeafLength() { + const last = this.levels[this.levels.length - 1]; + return last && last.type === 'list' ? last.items.length : 0; + } + + _publishHeight() { + const inter = this._countVisibleIntermediates(); + const leafLen = Math.max(this.leafMax, this._getCurrentLeafLength()); + const leafH = leafLen * this.lineH; + const interH = inter * (this.lineH + this.levelGap); + const totalH = interH + (inter ? this.levelGap : 0) + leafH; + + // Actualiza métricas del proto (lo que suma el GUI) + this.h = totalH; + this.zone.h = this.h + this.margin; + this.s[0].height = this.h + 'px'; + + // Avisar al GUI y refrescar zonas + if (this.isUI && this.main) this.main.calc(); + Roots.needReZone = true; + } } const add = function () { @@ -9451,4 +9454,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvcHJvdG8vVHJlZUxpc3QuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBQcm9waWVkYWRlcyBww7pibGljYXMgZXNwZXJhZGFzIChBUEkpXHJcbiAgICAvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KSwgby5mb2N1c2VkIChib29sKSxcclxuICAgIC8vIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKSxcclxuICAgIC8vIG8udGFiSW5kZXgsIG8uaXRlbUluZGV4LCBvLm9uQ2hhbmdlIChmbilcclxuICAgIG8uc2VsZWN0YWJsZSA9IHRydWU7ICAgICAgICAgICAvLyBuYXZlZ2FibGUgcG9yIHRlY2xhZG8gc2kgYWN0aXZhcyBmbGVjaGFzXHJcbiAgICBvLm5hbWUgPSBvLm5hbWUgfHwgJ1RyZWVMaXN0JztcclxuICAgIHN1cGVyKG8pO1xyXG5cclxuICAgIC8vIERhdG9zICYgZXN0YWRvXHJcbiAgICB0aGlzLnRyZWUgICAgICAgPSBvLnRyZWUgfHwge307XHJcbiAgICB0aGlzLnZhbHVlICAgICAgPSBBcnJheS5pc0FycmF5KG8udmFsdWUpID8gby52YWx1ZS5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLmZvY3VzZWQgICAgPSAhIW8uZm9jdXNlZDtcclxuICAgIHRoaXMuZm9jdXNQYXRoICA9IEFycmF5LmlzQXJyYXkoby5mb2N1c1BhdGgpID8gby5mb2N1c1BhdGguc2xpY2UoKSA6IFtdO1xyXG4gICAgdGhpcy5mb2N1c0xldmVsID0gdHlwZW9mIG8uZm9jdXNMZXZlbCA9PT0gJ251bWJlcicgPyBvLmZvY3VzTGV2ZWwgOiAtMTtcclxuXHJcbiAgICB0aGlzLnRhYkluZGV4ICAgPSBvLnRhYkluZGV4ID8/IG51bGw7XHJcbiAgICB0aGlzLml0ZW1JbmRleCAgPSBvLml0ZW1JbmRleCA/PyBudWxsO1xyXG5cclxuICAgIC8vIENhbGxiYWNrIGRlIG5vdGlmaWNhY2nDs25cclxuICAgIHRoaXMuY2hhbmdlQ2IgICA9IHR5cGVvZiBvLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nID8gby5vbkNoYW5nZSA6ICgvKnRhYklkeCwgaXRlbUlkeCwgbmV3UGF0aCovKSA9PiB7fTtcclxuXHJcbiAgICAvLyBMYXlvdXQgaW50ZXJub1xyXG4gICAgdGhpcy5sZXZlbHMgPSBbXTsgICAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuICAgIHRoaXMubGVhZk1heCA9IDA7ICAgLy8gYWx0byByZXNlcnZhZG8gcGFyYSBlbCDDumx0aW1vIG5pdmVsIChtw6F4aW1vIHRhbWHDsW8gZGUgaG9qYSlcclxuICAgIHRoaXMubGV2ZWxHYXAgPSAyOyAgLy8gZ2FwIHZlcnRpY2FsIGVudHJlIG5pdmVsZXNcclxuICAgIHRoaXMuaEl0ZW0gICAgPSB0aGlzLmg7ICAvLyBhbHRvIHBvciDDrXRlbVxyXG5cclxuICAgIC8vIEhvdmVyIC8gZm9jbyBkZSBtb3VzZVxyXG4gICAgdGhpcy5ob3ZlciA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcbiAgICAvLyBET00gdmlzdWFsIChzaW4gbGlzdGVuZXJzIGRpcmVjdG9zOyBsb3MgZXZlbnRvcyBsbGVnYW4gdsOtYSBSb290cy0+aGFuZGxlRXZlbnQpXHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSgnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnbGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7Jyk7IC8vIGNvbnRhaW5lciBpbnRlcm5vXHJcbiAgICB0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG4gICAgLy8gSW5pY2lhbGl6YSBub2RvcyB2aXN1YWxlcyBkZSBmb3JtYSBwZXJlem9zYSBlbiByU2l6ZSgpXHJcbiAgICB0aGlzLml0ZW1zRG9tID0gW107IC8vIG1pcnJvciBkZSB0aGlzLmxldmVscyAobWF0cml6IGRlIG5vZG9zKVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09IEhlbHBlcnMgZGUgZGF0b3MgPT09PT09PT09PT09PT09XHJcblxyXG4gIHN0YXRpYyBpc01hcChub2RlKSAgeyByZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuICBzdGF0aWMgaXNMaXN0KG5vZGUpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuXHJcbiAgLy8gRGV2dWVsdmUgZWwgc3Vibm9kbyBhbCBzZWd1aXIgcGF0aCAoc2UgZGV0aWVuZSBzaSBubyBleGlzdGUpXHJcbiAgZ2V0Tm9kZUF0UGF0aChwYXRoKSB7XHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBwYXRoW2ldKSkgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgICBub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBBbCBsbGVnYXIgYSBsaXN0YSwgeWEgbm8gaGF5IG3DoXMgZGVzY2VuZGVuY2lhIHbDoWxpZGEgcGFyYSBjbGF2ZXNcclxuICAgICAgICBpZiAoaSA8IHBhdGgubGVuZ3RoKSByZXR1cm4geyBub2RlLCBkZXB0aDogaSB9OyBcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuICB9XHJcblxyXG4gIC8vIEF1dG9jb21wbGV0YSBkZXNjZW5kaWVuZG8gcG9yIGxhIHByaW1lcmEgY2xhdmUgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG4gIGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG4gICAgbGV0IG5vZGVJbmZvID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuICAgIGxldCBub2RlID0gbm9kZUluZm8ubm9kZTtcclxuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG5cclxuICAgIHdoaWxlIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcbiAgICAgIGlmICgha2V5cy5sZW5ndGgpIGJyZWFrOyAvLyBtYXBhIHZhY8Otb1xyXG4gICAgICBjb25zdCBrMCA9IGtleXNbMF07XHJcbiAgICAgIHBhdGgucHVzaChrMCk7XHJcbiAgICAgIG5vZGUgPSBub2RlW2swXTtcclxuICAgIH1cclxuICAgIC8vIFNpIHRlcm1pbmEgZW4gbGlzdGEsIE5PIGFncmVnYSBzZWxlY2Npw7NuIGZpbmFsIGRlIGVsZW1lbnRvIGhvamFcclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgLy8gUnV0YSBhY3RpdmEgcGFyYSBjb25zdHJ1aXIgbml2ZWxlcyAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpIG5vIHZhbHVlKVxyXG4gIGdldEFjdGl2ZVBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2FsY3VsYSBlbCBtw6F4aW1vIHRhbWHDsW8gZGUgaG9qYSBkZWwgw6FyYm9sIChwYXJhIHJlc2VydmFyIGFsdG8gZXN0YWJsZSlcclxuICBjb21wdXRlTGVhZk1heChub2RlID0gdGhpcy50cmVlKSB7XHJcbiAgICBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcbiAgICBpZiAoIVRyZWVMaXN0LmlzTWFwKG5vZGUpKSByZXR1cm4gMDtcclxuICAgIGxldCBtID0gMDtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG4gICAgICBtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PSBDb25zdHJ1Y2Npw7NuIGRlIG5pdmVsZXMgKG1vZGVsbyBsw7NnaWNvKSA9PT09PT09PT09PT09PT1cclxuXHJcbiAgYnVpbGRMZXZlbHMoKSB7XHJcbiAgICB0aGlzLmxldmVscy5sZW5ndGggPSAwO1xyXG4gICAgY29uc3QgYWN0aXZlUGF0aCA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpO1xyXG5cclxuICAgIGxldCBub2RlID0gdGhpcy50cmVlO1xyXG4gICAgbGV0IGxldmVsID0gMDtcclxuXHJcbiAgICB3aGlsZSAobm9kZSkge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICAvLyBPcGNpb25lcyA9IGNsYXZlcyBkZWwgbWFwYSAobml2ZWwgaW50ZXJtZWRpbylcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcbiAgICAgICAgaWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7IC8vIGRldGVuZXIgZXhwYW5zacOzbiBzaSB2YWPDrW9cclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ21hcCcsIGl0ZW1zOiBrZXlzLm1hcChrID0+ICh7IGtleTogaywgbGFiZWw6IGssIHpvbmU6IHt4OjAseTowLHc6MCxoOjB9IH0pKSwgem9uZToge3g6MCx5OjAsdzowLGg6dGhpcy5oSXRlbX0gfSk7XHJcblxyXG4gICAgICAgIC8vIEF2YW56YSBzZWfDum4gbGEgcnV0YSBhY3RpdmEgKHNpIGV4aXN0ZSksIHNpbm8gc2UgZGV0aWVuZVxyXG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBhY3RpdmVQYXRoW2xldmVsXTtcclxuICAgICAgICBpZiAoIW5leHRLZXkgfHwgIW5vZGUuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIGJyZWFrO1xyXG4gICAgICAgIG5vZGUgPSBub2RlW25leHRLZXldO1xyXG4gICAgICB9IGVsc2UgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkge1xyXG4gICAgICAgIC8vIMOabHRpbW8gbml2ZWw6IGxpc3RhL2hvamEgKHZlcnRpY2FsKVxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAobGFiZWwgPT4gKHsga2V5OiBsYWJlbCwgbGFiZWwsIHpvbmU6IHt4OjAseTowLHc6MCxoOjB9IH0pKTtcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ2xpc3QnLCBpdGVtcywgem9uZToge3g6MCx5OjAsdzowLGg6IE1hdGgubWF4KGl0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KSAqIHRoaXMuaEl0ZW0gfSB9KTtcclxuICAgICAgICBicmVhazsgLy8gZmluXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7IC8vIG5vZG8gaW52w6FsaWRvXHJcbiAgICAgIH1cclxuICAgICAgbGV2ZWwrKztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PSBMYXlvdXQgKHpvbmFzIGludGVybmFzKSA9PT09PT09PT09PT09PT1cclxuXHJcbiAgLy8gQ2FsY3VsYSB6b25hcyBpbnRlcm5hcyBkZSBjYWRhIMOtdGVtL2xldmVsIHkgY29uc3RydXllL2FjdHVhbGl6YSBkb21cclxuICBsYXlvdXRMZXZlbHMoKSB7XHJcbiAgICBjb25zdCBwYWRYID0gODtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIHBhZFggKiAyO1xyXG4gICAgbGV0IHkgPSAwO1xyXG5cclxuICAgIC8vIEFzZWd1cmEgYGl0ZW1zRG9tYCBhbmlkYWRvIHBvciBuaXZlbFxyXG4gICAgd2hpbGUgKHRoaXMuaXRlbXNEb20ubGVuZ3RoIDwgdGhpcy5sZXZlbHMubGVuZ3RoKSB0aGlzLml0ZW1zRG9tLnB1c2goW10pO1xyXG4gICAgLy8gTGltcGlhIGV4dHJhIERPTSBzaSBuaXZlbGVzIGRpc21pbnV5ZW5cclxuICAgIGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSkgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pdGVtc0RvbS5sZW5ndGggPSB0aGlzLmxldmVscy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG4gICAgICAgIGx2bC56b25lID0geyB4OiBwYWRYLCB5LCB3LCBoOiB0aGlzLmhJdGVtIH07XHJcbiAgICAgICAgbGV0IHggPSBwYWRYO1xyXG4gICAgICAgIC8vIEFzZWd1cmEgY29udGVuZWRvciBkb20gZGUgbml2ZWwgc2kgcXVlcsOpcyB1bm8gKG9wY2lvbmFsKVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdCA9IGx2bC5pdGVtc1tpXTtcclxuICAgICAgICAgIGl0LnpvbmUgPSB7IHgsIHksIHc6IGNlbGxXLCBoOiB0aGlzLmhJdGVtIH07XHJcblxyXG4gICAgICAgICAgLy8gY3JlYS9hY3R1YWxpemEgbm9kbyB2aXN1YWxcclxuICAgICAgICAgIGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuICAgICAgICAgIHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsICdtYXAnKTtcclxuXHJcbiAgICAgICAgICB4ICs9IGNlbGxXO1xyXG4gICAgICAgIH1cclxuICAgICAgICB5ICs9IHRoaXMuaEl0ZW0gKyB0aGlzLmxldmVsR2FwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGxpc3RhL2hvamEgdmVydGljYWxcclxuICAgICAgICBjb25zdCBuID0gbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBoTGlzdCA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCkgKiB0aGlzLmhJdGVtO1xyXG4gICAgICAgIGx2bC56b25lID0geyB4OiBwYWRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7IGkrKykge1xyXG4gICAgICAgICAgLy8gUHVlZGUgaGFiZXIgXCJlc3BhY2lvIHZhY8Otb1wiIHNpIG4gPCBsZWFmTWF4XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbjtcclxuICAgICAgICAgIGNvbnN0IGl0ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldIDogeyBrZXk6IG51bGwsIGxhYmVsOiAnJywgem9uZToge3g6MCx5OjAsdzowLGg6MH0gfTtcclxuICAgICAgICAgIGl0LnpvbmUgPSB7IHg6IHBhZFgsIHk6IHkgKyBpICogdGhpcy5oSXRlbSwgdywgaDogdGhpcy5oSXRlbSB9O1xyXG5cclxuICAgICAgICAgIGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuICAgICAgICAgIHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsICdsaXN0JywgaXNSZWFsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgeSArPSBoTGlzdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFqdXN0YSBhbHRvIHZpc2libGUgZGVsIGNvbnRyb2xcclxuICAgIGNvbnN0IHRvdGFsSCA9IHk7XHJcbiAgICB0aGlzLnpvbmUuaCA9IHRvdGFsSCArIHRoaXMubWFyZ2luOyAvLyBQcm90byBzZSBlbmNhcmdhIGRlbCBtYXJnZW5cclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArICdweCc7XHJcbiAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdG90YWxIICsgJ3B4JztcclxuICB9XHJcblxyXG4gIGVuc3VyZUl0ZW1Eb20oTCwgaSkge1xyXG4gICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgIHdoaWxlIChyb3cubGVuZ3RoIDw9IGkpIHJvdy5wdXNoKG51bGwpO1xyXG4gICAgaWYgKCFyb3dbaV0pIHtcclxuICAgICAgLy8gQ2FkYSDDrXRlbSBlcyB1biBESVYgcG9zaWNpb25hZG8gYWJzb2x1dG8gZGVudHJvIGRlIHRoaXMuY1syXVxyXG4gICAgICBjb25zdCBkaXYgPSB0aGlzLmRvbSgnZGl2JywgVG9vbHMuY3NzLnR4dCArICdwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsnKTtcclxuICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcbiAgICAgIHJvd1tpXSA9IGRpdjtcclxuICAgIH1cclxuICAgIHJldHVybiByb3dbaV07XHJcbiAgfVxyXG5cclxuICAvLyBDb2xvcmVhIHkgcG9zaWNpb25hIGVsIERPTSBkZWwgw610ZW0gc2Vnw7puIGVzdGFkb3MgKHNlbGVjY2lvbmFkbyAvIGZvY28pXHJcbiAgcGFpbnRJdGVtRG9tKGRpdiwgTCwgaSwgaXQsIGtpbmQsIGlzUmVhbCA9IHRydWUpIHtcclxuICAgIGNvbnN0IHMgPSBkaXYuc3R5bGU7XHJcbiAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vIFBvc2ljacOzblxyXG4gICAgcy5sZWZ0ID0gaXQuem9uZS54ICsgJ3B4JztcclxuICAgIHMudG9wICA9IGl0LnpvbmUueSArICdweCc7XHJcbiAgICBzLndpZHRoICA9IGl0LnpvbmUudyArICdweCc7XHJcbiAgICBzLmhlaWdodCA9IChpdC56b25lLmggLSAyKSArICdweCc7ICAvLyAtMiBwYXJhIGV2aXRhciBvdmVybGFwIGRlIGJvcmRlc1xyXG5cclxuICAgIC8vIFRleHRvXHJcbiAgICBkaXYudGV4dENvbnRlbnQgPSBpc1JlYWwgPyBpdC5sYWJlbCA6ICcnO1xyXG5cclxuICAgIC8vIEVzdGFkb3Mgc2Vtw6FudGljb3NcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gKHZhbHVlW0xdICE9PSB1bmRlZmluZWQpICYmICh2YWx1ZVtMXSA9PT0gaXQua2V5KSAmJiBpc1JlYWw7XHJcblxyXG4gICAgY29uc3QgaW5Gb2N1c0xldmVsID0gdGhpcy5mb2N1c2VkICYmICh0aGlzLmZvY3VzTGV2ZWwgPT09IEwpO1xyXG4gICAgY29uc3QgZm9jdXNNYXRjaCAgID0gaW5Gb2N1c0xldmVsICYmICh0aGlzLmZvY3VzUGF0aFtMXSA9PT0gaXQua2V5KSAmJiBpc1JlYWw7XHJcblxyXG4gICAgLy8gSG92ZXIgKG1vdXNlKVxyXG4gICAgY29uc3QgaXNIb3ZlciA9ICh0aGlzLmhvdmVyLmxldmVsID09PSBMICYmIHRoaXMuaG92ZXIuaW5kZXggPT09IGkgJiYgaXNSZWFsKTtcclxuXHJcbiAgICAvLyBFc3RpbG9zIGJhc2VcclxuICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICBzLmNvbG9yICAgICAgPSBjYy50ZXh0O1xyXG4gICAgcy5ib3JkZXIgICAgID0gJzFweCBzb2xpZCAnICsgY2MuYm9yZGVyO1xyXG5cclxuICAgIC8vIE1hcGEgPSBob3Jpem9udGFsLCBMaXN0YSA9IHZlcnRpY2FsXHJcbiAgICBpZiAoa2luZCA9PT0gJ21hcCcpIHMudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICBlbHNlIHMudGV4dEFsaWduID0gJ2xlZnQnO1xyXG5cclxuICAgIC8vIFByaW9yaXphY2nDs24gdmlzdWFsOiBzZWxlY2Npb25hZG8gPiBmb2NvID4gaG92ZXIgPiBiYXNlXHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgIH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH1cclxuICAgIC8vIERlc2hhYmlsaXRhciBET00gc2kgbm8gaGF5IMOtdGVtIHJlYWwgZW4gZmlsYXMgZGUgcGFkZGluZ1xyXG4gICAgcy5vcGFjaXR5ID0gaXNSZWFsID8gJzEnIDogJzAnO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09IENpY2xvIGRlIHZpZGEgdmlzdWFsID09PT09PT09PT09PT09PVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIC8vIFJlY2FsY3VsYSBsZWFmTWF4IHkgbml2ZWxlcyBjYWRhIHZleiBxdWUgY2FtYmlhIHRhbWHDsW8vZGF0b3NcclxuICAgIHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoKSB7XHJcbiAgICAvLyBSZWRpYnVqYSBjdWFuZG8gY2FtYmlhbiBlc3RhZG9zIGRlIGhvdmVyL2ZvY3VzL3ZhbHVlIGV4dGVybmFtZW50ZVxyXG4gICAgdGhpcy5idWlsZExldmVscygpO1xyXG4gICAgdGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PSBJbnRlcmFjY2nDs24gKGhpdC10ZXN0aW5nIHkgc2VsZWNjacOzbikgPT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIENvbnZpZXJ0ZSBjb29yZHMgZ2xvYmFsZXMgYSBsb2NhbGVzIGRlbCBjb250cm9sIChpZ3VhbCBxdWUgUHJvdG8pXHJcbiAgX3RvTG9jYWwoZSkge1xyXG4gICAgY29uc3QgbXggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgIGNvbnN0IG15ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnk7XHJcbiAgICByZXR1cm4geyB4OiBteCwgeTogbXkgfTtcclxuICB9XHJcblxyXG4gIC8vIEJ1c2NhIHF1w6kgw610ZW0gKEwsaSkgZXN0w6EgYmFqbyBlbCBtb3VzZTsgcmVzcGV0YSB6b25hcyBwb3Igbml2ZWxcclxuICBfaGl0VGVzdChteCwgbXkpIHtcclxuICAgIGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuICAgICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICAgIGNvbnN0IHogPSBsdmwuem9uZTtcclxuICAgICAgaWYgKG14IDwgei54IHx8IG15IDwgei55IHx8IG14ID4gei54ICsgei53IHx8IG15ID4gei55ICsgei5oKSBjb250aW51ZTtcclxuXHJcbiAgICAgIGlmIChsdmwudHlwZSA9PT0gJ21hcCcpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXR6ID0gbHZsLml0ZW1zW2ldLnpvbmU7XHJcbiAgICAgICAgICBpZiAobXggPj0gaXR6LnggJiYgbXkgPj0gaXR6LnkgJiYgbXggPD0gaXR6LnggKyBpdHoudyAmJiBteSA8PSBpdHoueSArIGl0ei5oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IEwsIGksIHJlYWw6IHRydWUgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gaG9qYTogcHVlZGUgY29udGVuZXIgZmlsYXMgZGUgcGFkZGluZ1xyXG4gICAgICAgIGNvbnN0IG5Sb3dzID0gTWF0aC5tYXgobHZsLml0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgY29uc3QgaXR6ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldLnpvbmUgOiB7IHg6IHoueCwgeTogei55ICsgaSAqIHRoaXMuaEl0ZW0sIHc6IHoudywgaDogdGhpcy5oSXRlbSB9O1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiBpc1JlYWwgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IEw6IC0xLCBpOiAtMSwgcmVhbDogZmFsc2UgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAvLyBEZWxlZ2EgZXN0YWRvcyBkZSBob3ZlciAvIGNsaWNrXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vtb3ZlJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgdGhpcy5ob3ZlciA9IChodC5MICE9PSAtMSAmJiBodC5yZWFsKSA/IHsgbGV2ZWw6IGh0LkwsIGluZGV4OiBodC5pIH0gOiB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcbiAgICAgIHRoaXMudXBkYXRlKCk7IC8vIHJlcGludGFyIGNvbiBob3ZlclxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgaWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZXVwJykge1xyXG4gICAgICAvLyBuYWRhIHBvciBhaG9yYVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTb3BvcnRlIGLDoXNpY28gcGFyYSB0ZWNsYWRvIChvcGNpb25hbDogVXAvRG93bi9MZWZ0L1JpZ2h0KVxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ2tleWRvd24nKSB7XHJcbiAgICAgIC8vIFB1ZWRlcyBpbnRlZ3JhciBuYXZlZ2FjacOzbiBkZSBmbGVjaGFzIGFxdcOtIHNpIGxvIGRlc2VhcyxcclxuICAgICAgLy8gcmV1dGlsaXphbmRvIHRoaXMuaXNTZWxlY3RhYmxlICh5YSBtYXJjYWRhIGVuIGN0b3IpLlxyXG4gICAgICAvLyBSZWNvbWVuZGFjacOzbjogbW92ZXIgZm9jbyBlbnRyZSBuaXZlbGVzL8OtdGVtcyBjb24gUm9vdHMrR3VpLiA6Y29udGVudFJlZmVyZW5jZVtvYWljaXRlOjFde2luZGV4PTF9IDpjb250ZW50UmVmZXJlbmNlW29haWNpdGU6Ml17aW5kZXg9Mn1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBSZWdsYSBkZSBzZWxlY2Npw7NuIHkgYXV0b2NvbXBsZXRhZG9cclxuICBfc2VsZWN0QXQoTCwgaSkge1xyXG4gICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICBjb25zdCBjaG9zZW4gPSBsdmwuaXRlbXNbaV07XHJcbiAgICBpZiAoIWNob3NlbiB8fCAhY2hvc2VuLmtleSkgcmV0dXJuO1xyXG5cclxuICAgIC8vIDEpIFJlY29ydGFyIHZhbHVlIGhhc3RhIEwgZSBpbnNlcnRhciBsYSBvcGNpw7NuIGVsZWdpZGFcclxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpO1xyXG4gICAgYmFzZVtMXSA9IGNob3Nlbi5rZXk7XHJcblxyXG4gICAgLy8gMikgQXV0b2NvbXBsZXRhciBwb3IgcHJpbWVyYSBjbGF2ZSBkZXNjZW5kaWVuZG8gaGFzdGEgdW5hIGxpc3RhXHJcbiAgICBjb25zdCBuZXdQYXRoID0gdGhpcy5hdXRvQ29tcGxldGVUb0xlYWYoYmFzZSk7XHJcblxyXG4gICAgLy8gMykgTm90aWZpY2FyXHJcbiAgICB0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpOyAvLyByZWZsZWphciBzZWxlY2Npw7NuIGludGVybmFcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICB0aGlzLmNoYW5nZUNiKHRoaXMudGFiSW5kZXgsIHRoaXMuaXRlbUluZGV4LCBuZXdQYXRoKTtcclxuICB9XHJcblxyXG4gIC8vIEFQSSBww7pibGljYSBwYXJhIHNpbmNyb25pemFjacOzbiBleHRlcm5hIChwb3Igc2kgcXVpZXJlcyBzZXR0ZWFyIGRlc2RlIGFmdWVyYSlcclxuICBzZXRWYWx1ZShwYXRoKSB7XHJcbiAgICB0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguc2xpY2UoKSA6IFtdO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcbiAgc2V0VHJlZSh0cmVlKSB7XHJcbiAgICB0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcbiAgc2V0Rm9jdXMoeyBmb2N1c2VkLCBmb2N1c1BhdGgsIGZvY3VzTGV2ZWwgfSkge1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c2VkID09PSAnYm9vbGVhbicpIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb2N1c1BhdGgpKSB0aGlzLmZvY3VzUGF0aCA9IGZvY3VzUGF0aC5zbGljZSgpO1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c0xldmVsID09PSAnbnVtYmVyJykgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBCb29sIH0gZnJvbSAnLi4vcHJvdG8vQm9vbC5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL3Byb3RvL0J1dHRvbi5qcyc7XHJcbmltcG9ydCB7IENpcmN1bGFyIH0gZnJvbSAnLi4vcHJvdG8vQ2lyY3VsYXIuanMnO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL3Byb3RvL0NvbG9yLmpzJztcclxuaW1wb3J0IHsgRnBzIH0gZnJvbSAnLi4vcHJvdG8vRnBzLmpzJztcclxuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9wcm90by9HcmFwaC5qcyc7XHJcbmltcG9ydCB7IEdyb3VwICB9IGZyb20gJy4uL3Byb3RvL0dyb3VwLmpzJztcclxuaW1wb3J0IHsgSm95c3RpY2sgfSBmcm9tICcuLi9wcm90by9Kb3lzdGljay5qcyc7XHJcbmltcG9ydCB7IEtub2IgfSBmcm9tICcuLi9wcm90by9Lbm9iLmpzJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uL3Byb3RvL0xpc3QuanMnO1xyXG5pbXBvcnQgeyBOdW1lcmljIH0gZnJvbSAnLi4vcHJvdG8vTnVtZXJpYy5qcyc7XHJcbmltcG9ydCB7IFNsaWRlIH0gZnJvbSAnLi4vcHJvdG8vU2xpZGUuanMnO1xyXG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9wcm90by9UZXh0SW5wdXQuanMnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL3Byb3RvL1RpdGxlLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0LmpzJztcclxuaW1wb3J0IHsgQml0bWFwIH0gZnJvbSAnLi4vcHJvdG8vQml0bWFwLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICcuLi9wcm90by9TZWxlY3Rvci5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi4vcHJvdG8vRW1wdHkuanMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vcHJvdG8vSXRlbS5qcyc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi9wcm90by9HcmlkLmpzJztcclxuaW1wb3J0IHsgUGFkMkQgfSBmcm9tICcuLi9wcm90by9QYWQyRC5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFRyZWVMaXN0IH0gZnJvbSAnLi4vcHJvdG8vVHJlZUxpc3QuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndHJlZWxpc3QnOiBuID0gbmV3IFRyZWVMaXN0KG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Q0FBQTtDQUNBO0NBQ0E7QUFDQTtBQUNZLE9BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsTUFBTSxDQUFDLEdBQUc7Q0FDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7Q0FDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7Q0FDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0NBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSztDQUNiLEVBQUUsS0FBSyxFQUFFLEtBQUs7Q0FDZCxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDYjtDQUNBLEVBQUUsVUFBVSxFQUFFLElBQUk7Q0FDbEIsRUFBRSxVQUFVLEVBQUUsS0FBSztDQUNuQixFQUFFLFNBQVMsRUFBRSxLQUFLO0NBQ2xCLEVBQUUsWUFBWSxFQUFFLEtBQUs7Q0FDckIsRUFBRSxPQUFPLEVBQUUsS0FBSztDQUNoQixFQUFFLG9CQUFvQixFQUFFLElBQUk7QUFDNUI7Q0FDQSxFQUFFLFFBQVEsRUFBRSxDQUFDO0NBQ2IsRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUNiO0NBQ0E7Q0FDQSxFQUFFLFdBQVcsRUFBRSxDQUFDLGFBQWEsQ0FBQztDQUM5QixFQUFFLFlBQVksRUFBRSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDO0NBQzNELEVBQUUsUUFBUSxFQUFFLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUM7QUFDM0Q7Q0FDQSxFQUFFLGFBQWEsRUFBRSxJQUFJO0NBQ3JCLEVBQUUsT0FBTyxFQUFFLElBQUk7Q0FDZixFQUFFLFFBQVEsRUFBRSxJQUFJO0FBQ2hCO0NBQ0EsRUFBRSxTQUFTLEVBQUUsTUFBTTtBQUNuQjtDQUNBLEVBQUUsS0FBSyxFQUFFLElBQUk7Q0FDYixFQUFFLE1BQU0sRUFBRSxJQUFJO0NBQ2QsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQjtDQUNBLEVBQUUsV0FBVyxFQUFFLElBQUk7Q0FDbkIsRUFBRSxXQUFXLEVBQUUsSUFBSTtDQUNuQixFQUFFLFFBQVEsRUFBRSxLQUFLO0NBQ2pCLEVBQUUsVUFBVSxFQUFFLEtBQUs7Q0FDbkIsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BCLEVBQUUsUUFBUSxFQUFFLENBQUM7Q0FDYixFQUFFLEdBQUcsRUFBRSxFQUFFO0NBQ1QsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNSLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztDQUNaLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNYO0NBQ0EsRUFBRSxVQUFVLEVBQUUsS0FBSztBQUNuQjtDQUNBLEVBQUUsTUFBTSxFQUFFLEtBQUs7Q0FDZixFQUFFLE9BQU8sRUFBRSxFQUFFO0FBQ2I7Q0FDQSxFQUFFLENBQUMsRUFBRTtDQUNMLElBQUksSUFBSSxFQUFFLElBQUk7Q0FDZCxJQUFJLE9BQU8sRUFBRSxDQUFDO0NBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztDQUNkLElBQUksT0FBTyxFQUFFLEdBQUc7Q0FDaEIsSUFBSSxHQUFHLEVBQUUsSUFBSTtDQUNiLElBQUksS0FBSyxFQUFFLENBQUM7Q0FDWixHQUFHO0FBQ0g7Q0FDQSxFQUFFLFFBQVEsRUFBRSxLQUFLO0FBQ2pCO0NBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtDQUNYLEVBQUUsV0FBVyxFQUFFLEtBQUs7QUFDcEI7Q0FDQSxFQUFFLE9BQU8sRUFBRSxZQUFZO0NBQ3ZCLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRztDQUNuRCxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Q0FDOUMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ2pCLEdBQUc7QUFDSDtDQUNBLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3BCO0NBQ0EsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqQixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakI7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztDQUN4QyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFVBQVUsRUFBRSxZQUFZO0NBQzFCLElBQUksSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztDQUNoQyxJQUFJO0NBQ0osTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztDQUN6QixNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0NBQ3ZCLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7Q0FDeEIsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztDQUN0QixNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0NBQ3RCLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7Q0FDNUIsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0NBQy9CO0NBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQztDQUNsQixTQUFTLE9BQU8sS0FBSyxDQUFDO0NBQ3RCLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0NBQ2xCLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN4QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUN4QixLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0NBQzNCLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO0NBQ3ZCLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsVUFBVSxFQUFFLFlBQVk7Q0FDMUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTztBQUMvQjtDQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUM1QjtDQUNBLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7Q0FDaEMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN4QjtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDckIsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0NBQzNELEtBQUssTUFBTTtDQUNYLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0NBQ3JDLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztDQUNwRSxJQUFJLElBQUksQ0FBQyxDQUFDLG9CQUFvQixFQUFFO0NBQ2hDLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMvQyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDOUM7QUFDQTtDQUNBLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUM3QyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDO0NBQ0EsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztDQUNoRCxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0NBQzlDLEtBQUs7Q0FDTCxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2RDtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Q0FDMUIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNoQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLFlBQVksRUFBRSxZQUFZO0NBQzVCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTztBQUNoQztDQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUM1QjtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDckIsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzFDLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsb0JBQW9CLEVBQUU7Q0FDaEMsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2xELE1BQU0sR0FBRyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNqRDtBQUNBO0NBQ0EsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2hELE1BQU0sR0FBRyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNoRCxNQUFNLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUM7Q0FDQSxNQUFNLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDNUMsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzFDLEtBQUs7Q0FDTCxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25EO0NBQ0EsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztDQUMzQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLE1BQU0sRUFBRSxZQUFZO0NBQ3RCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNO0NBQ3ZCLE1BQU0sQ0FBQyxDQUFDO0FBQ1I7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsQixNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDL0QsS0FBSztBQUNMO0NBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUN4QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0NBQ3pCLEdBQUc7QUFDSDtDQUNBLEVBQUUsR0FBRyxFQUFFLFlBQVk7Q0FDbkIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0NBQzdCLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0NBQ25CLEdBQUc7QUFDSDtDQUNBLEVBQUUsRUFBRSxFQUFFLFlBQVk7Q0FDbEIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0NBQzVCO0NBQ0EsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLE1BQU0sRUFBRSxZQUFZO0NBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0NBQzVDLEdBQUc7QUFDSDtDQUNBLEVBQUUsV0FBVyxFQUFFLFVBQVUsS0FBSyxFQUFFO0NBQ2hDO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3pFO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2pDO0NBQ0EsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoQixJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN0QjtDQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ25ELElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9DO0NBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ3BFLFNBQVMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDckI7Q0FDQSxJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDbEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUM7Q0FDdkUsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDO0FBQ3ZFO0NBQ0EsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDeEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0NBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQztDQUNuQixNQUFNLENBQUMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0NBQ3pCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN4RDtDQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztDQUMzRCxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7Q0FDdkQsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO0NBQ3RDLE1BQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO0NBQ3JCO0NBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztDQUMxQixRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNuQixPQUFPO0NBQ1AsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztDQUMzQixLQUFLO0FBQ0w7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtDQUNoQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzNCLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ3pDO0NBQ0E7Q0FDQSxNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtDQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0NBQ3JCLE9BQU87QUFDUDtDQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0NBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDMUIsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtDQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7Q0FDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENB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QUcsR0FBRyxLQUFLLEdBQUcsQ0FBQztDQUM3RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEdBQUc7Q0FDMUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDMUIsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHO0NBQ3RDLFVBQVUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDO0NBQ2pFLFNBQVM7Q0FDVCxRQUFRLE9BQU8sUUFBUSxDQUFDO0NBQ3hCLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0NBQzlCLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztDQUMzQyxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDNUQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM5QjtDQUNBLFFBQVEsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxQjtDQUNBLFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUMzQjtDQUNBLFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0NBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtDQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0NBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7Q0FDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztDQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFD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QUFFLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztDQUNwSixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3JIO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM3SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzlJLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDbkksUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDcEIsUUFBUSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7Q0FDeEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxvQkFBb0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMs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Q0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekg7Q0FDQTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0E7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztDQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0NBQ0E7QUFDQTtDQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdGO0NBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMvQjtDQUNBLFNBQVMsTUFBTTtDQUNmO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzVGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckksWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9GLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BJO0NBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztDQUMvQixTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxhQUFhLEVBQUUsWUFBWTtBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0NBQ2hKLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUN2QyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQixRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDM0IsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQ3hCLFFBQVcsSUFBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0NBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztDQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztDQUN2QjtDQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7Q0FDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7Q0FDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0NBQ0EsWUFBWSxFQUFFLEdBQUc7Q0FDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7Q0FDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUs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SSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNyQyxJQUFJLElBQUks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QU0sR0FBRyxzQkFBc0IsQ0FBQztDQUN0RSxPQUFPO0NBQ1AsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0NBQ3RCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0NBQzdFLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0NBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7Q0FDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEMsT0FBTztDQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDdkIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUN6QyxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxHQUFHO0NBQ1QsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNyQztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQzVEO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0NBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7Q0FDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3ZDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7Q0FDaEMsS0FBSyxNQUFNO0NBQ1gsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDekMsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0NBQzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDMUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUN0QyxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDMUI7Q0FDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDcEQsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7Q0FDOUIsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDMUIsT0FBTztDQUNQLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFO0NBQ1YsTUFBTSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUk7Q0FDMUIsVUFBVSxJQUFJLENBQUMsTUFBTTtDQUNyQixVQUFVLElBQUksQ0FBQyxJQUFJO0NBQ25CLFVBQVUsSUFBSSxDQUFDLElBQUks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SSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFHO0NBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07Q0FDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07Q0FDNUI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7Q0FDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0NBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENB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QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ25ELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztDQUNBLFNBQVM7QUFDVDtBQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Q0FDckQsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUU7Q0FDcEUsU0FBUztDQUNUO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FB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QUMsQ0FBQyxLQUFLLEVBQUM7QUFDdkM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtDQUNyQixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7Q0FDbEQ7Q0FDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7Q0FDQTtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0NBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ3BQTyxNQUFNLFFBQVEsU0FBUyxL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RSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0NBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztDQUNqRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0NBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7Q0FDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDckMs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QUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNuQztDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7Q0FDQTtDQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztDQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QztDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7Q0FDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0NBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElB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QUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQ25EO0NBQ0EsT0FBTyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdkMsT0FBTztBQUNQO0NBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0NBQ3BEO0NBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDakM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0NBQ0EsU0FBUztDQUNULEtBQUs7Q0FDTCxJQUFJO0NBQ0osR0FBRztBQUNIO0NBQ0EsRUFBRTtBQUNGO0NBQ0E7QUFDQTtDQUNBLENBQUMsU0FBUyxDQUFDLEdBQUc7QUFDZDtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7Q0FDakUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN0QjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2xELFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9DO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxJQUFJLENBQUMsR0FBRztBQUNUO0NBQ0EsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDZjtDQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7Q0FDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0NBQ3RDO0NBQ0EsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0EsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEI7Q0FDQSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM5QztDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCO0NBQ0EsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztDQUN0QztDQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDZjtDQUNBLEtBQUssSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hFO0NBQ0EsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Q0FDeEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0NBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3hDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDN0U7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkQsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckQ7Q0FDQSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTztBQUNwQjtDQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUN4RCxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ3ZFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7Q0FDM0UsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QztDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2Y7Q0FDQSxFQUFFLElBQUksQ0FBQyxZQUFZLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUQsYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxhQUFhLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7Q0FDN0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNwQjtDQUNBLEtBQUssSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUN0QyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxFQUFFO0FBQzFDO0NBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDNUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU07Q0FDMUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUM5QztDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0NBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDdkIsTUFBTTtDQUNOLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNoQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDdEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzlDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztDQUN6QixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxXQUFXLENBQUMsR0FBRztBQUNoQjtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7Q0FDakIsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFLO0FBQ2Y7Q0FDQSxLQUFjLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU87Q0FDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDbkMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7Q0FDQSxLQUFLLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7Q0FDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztDQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUM7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0E7Q0FDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7Q0FDNUQ7Q0FDQTtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtDQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7Q0FDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtDQUNwQztDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztDQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0NBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtDQUNBLEVBQUU7QUFDRjtBQUNBO0NBQ0E7O0NDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUss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QztBQUM1QjtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7Q0FDQTtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztDQUM5QjtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztDQUN0RSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtDQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QztDQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0NBQzFCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkM7Q0FDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDdkQ7Q0FDQSxZ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LENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DO0NBQ0EsS0FBSztDQUNMO0NBQ0E7O0NDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Q0FDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0NBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztDQUNB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QyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0NBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0NBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7Q0FDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQztDQUM5QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFJO0NBQzlDLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7Q0FDckMsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUMzQyxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQztDQUNoRixpQkFBaUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztDQUMzRCxTQUFTO0NBQ1QsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFdBQVcsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQ0FBaUM7Q0FDcEUsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUc7Q0FDOUIsUUFBUSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUk7Q0FDckMsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQW9CO0NBQ2pHLGlCQUFpQixDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFPO0NBQ3RFLFlBQVksQ0FBQyxHQUFFO0NBQ2YsU0FBUztDQUNULFFBQVEsT0FBTyxDQUFDO0NBQ2hCLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ25GLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDcEgsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEc7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxD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QUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyw0Q0FBNEMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDO0NBQzVILFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyx3REFBd0QsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUM1SztDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSTtDQUMxRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw2QkFBNkIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLEVBQUM7QUFDMUk7Q0FDQSxRQUFnQixJQUFJLENBQUMsRUFBRTtDQUN2QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQU87QUFDaEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFFO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNoQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2pCO0NBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtDQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxHQUFFO0NBQzdDLFFBQVEsR0FBRyxFQUFFLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxXQUFVO0NBQzFELFlBQVksRUFBRSxDQUFDLFVBQVUsR0FBRyxPQUFNO0FBQ2xDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztDQUNqQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU07Q0FDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFNO0FBQ25DO0NBQ0EsUUFBUSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO0NBQ25DLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztDQUMvRCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0I7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0NBQ2hELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7QUFDaEQ7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0FBQ2pEO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQztDQUM1RCxhQUFhO0NBQ2IsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQztDQUMvQyxTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksV0FBVyxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEtBQUssQ0FBQztDQUMvQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Q0FDMUI7Q0FDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDL0IsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQy9CLFNBQVM7Q0FDVCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztDQUMxQixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUN0QixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFFO0FBQzFCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUN0QjtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMxQjtDQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ2hDO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU87QUFDM0I7Q0FDQSxRQUFRLFFBQVEsSUFBSTtBQUNwQjtDQUNBLFlBQVksS0FBSyxTQUFTO0FBQzFCO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxZQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRTtBQUNsRjtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0NBQzVCO0NBQ0EsZ0JBQWdCLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUU7Q0FDekQsYUFBYTtBQUNiO0NBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUU7QUFDdkQ7Q0FDQSxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLE9BQU87Q0FDeEI7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFDO0NBQ2xDLFlBQVksSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFO0NBQ3RDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUM5QyxxQkFBcUIsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNoQyxhQUFhO0NBQ2IsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxXQUFXLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN4QztDQUNBLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuRDtDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtDQUNuQyxZQUFZLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0NBRWhDLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUU7Q0FDekIsWUFBWSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQ25ELFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNoQyxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksR0FBRyxHQUFHO0FBQ1Y7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUMxQjtDQUNBLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7Q0FDdEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFJO0NBQ2pDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztDQUNuQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUk7Q0FDakMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUk7Q0FDN0IsU0FBUyxNQUFNLElBQUksT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0NBQ3JELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0NBQ3ZHLGlCQUFnQjtDQUNoQixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDakMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN4QyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3RDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztDQUNsQyxhQUFhO0NBQ2IsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUU7Q0FDdkI7Q0FDQSxZQUFZLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBQztDQUNwQixTQUFTO0NBQ1Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxRQUFRLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSTtDQUM5QjtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBSztBQUM1QjtDQUNBLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLEdBQUc7QUFDZDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUN4QyxRQUFRLEtBQUssQ0FBQyxPQUFPLEdBQUU7QUFDdkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssR0FBRztBQUNaO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztBQUN0QztDQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNwQixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRTtDQUNqQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUU7Q0FDOUMsWUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksR0FBRTtBQUM5QjtDQUNBO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkM7Q0FDQSxRQUFRLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHO0NBQ3pCLFlBQVksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRTtDQUM3RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFO0NBQ3hELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRTtBQUNwQztDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Q0FDdkMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0NBQ3BDLGdCQUFnQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDN0IsYUFBYTtDQUNiLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLEtBQUssQ0FBQyxJQUFJLEdBQUU7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUU7Q0FDbkQsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFFO0FBQzNCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDeEIsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM5QjtDQUNBO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUk7Q0FDNUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFNO0FBQ25DO0NBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDdkI7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsTUFBSztDQUNyQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsTUFBSztBQUNyQztDQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUN2RCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7Q0FDeEQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0NBQzFELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUMzRCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7QUFDbkM7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87Q0FDbkUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0FBQ3BFO0NBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0NBQy9ELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7Q0FDcEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMseUJBQXdCO0FBQ3RFO0NBQ0EsU0FBUztDQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFFO0FBQzNCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRTtBQUNuRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUMzQjtDQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDeEIsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtDQUM5QjtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbkM7Q0FDQTtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFJO0NBQzVDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxPQUFNO0FBQ2hDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO0FBQ25DO0NBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE9BQU07Q0FDaEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE9BQU07Q0FDaEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0NBQy9ELFNBQVM7QUFDVDtDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0FBQzVEO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFFO0FBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRztBQUNmO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7Q0FDOUQ7Q0FDQSxhQUFhLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDeEk7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7QUFDdkQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUN2QjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDdkQsYUFBYSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2pEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTTtDQUNqQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUN4QyxhQUFhLElBQUksQ0FBQyxPQUFPLEdBQUU7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDeEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU07Q0FDL0IsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRTtDQUN6QyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFFO0NBQy9CLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNwQztDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0NDNWNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN2RDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztDQUMxQyxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Q0FDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztDQUN6QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFJO0FBQzVEO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztDQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7Q0FDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxPQUFPLElBQUk7Q0FDbkIsWUFBWSxLQUFLLENBQUM7Q0FDbEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDbEMsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3hFLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNsRSxpQkFBaUIsTUFBTTtDQUN2QixvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3JFO0NBQ0Esb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNyRSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDaEUsaUJBQWlCO0NBQ2pCO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0NBQ2xCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0NBQ2xDLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN6RSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDM0UsaUJBQWlCLE1BQU07Q0FDdkIsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN0RTtDQUNBLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDeEUsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNwRSxpQkFBaUI7Q0FDakIsWUFBWSxNQUFNO0FBR2xCO0NBQ0EsU0FBUztDQUNULEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxXQUFXLENBQUMsRUFBRTtDQUNsQixRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0NBQ3pELFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU87Q0FDdkMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbkY7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFlBQVksQ0FBQyxFQUFFO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxHQUFHLE9BQU87Q0FDNUMsUUFBUSxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0NBQ3ZDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUNoRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7Q0FDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7Q0FDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7Q0FDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0NBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0NBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtDQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0NBQ0EsYUFBYTtBQUNiO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM3QjtBQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztDQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7Q0FDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDN0QsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFD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O0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0NBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztDQUM5QjtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDckQ7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7Q0FDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN4RCxhQUFhLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztDQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3hELGFBQWE7Q0FDYjtDQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQztDQUNBLFlBQVksT0FBTyxJQUFJLENBQUM7Q0FDeEI7Q0FDQSxTQUFTO0NBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUN6RCxRQUFRLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUM1QyxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUMxQztBQUNBO0NBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFlBQVksS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUM1QyxZQUFZLElBQUksR0FBRyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssS0FBSyxDQUFDO0NBQ3JELFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDckQsWUFBWSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUMxQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUc7QUFDM0M7Q0FDQSxZQUFZLENBQUMsR0FBRyxVQUFVLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUMvQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDL0MsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ2hELFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUNoRCxZQUFZLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUM5RDtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1RDtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDckU7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDakMsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztDQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3JGO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0NBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7Q0FDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztDQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3pEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTs7Q0NsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztDQUNyQztBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7Q0FDQTtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0NBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7Q0FDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtDQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFL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R0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNsRSxpQkFBaUIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQ3RDLFNBQVMsS0FBSTtDQUNiLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3RDLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0NBQzNCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDM0IsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0NBQzdDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztDQUM3QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUk7Q0FDakQsWUFBWSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztDQUN0QyxTQUFTO0FBQ1Q7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7Q0FDL0MsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksZ0JBQWU7Q0FDckQsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJ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LEVBQUUsQ0FBQztBQUNwRTtBQUNBO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDMUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDNUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztDQUNsRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUMxRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUN2QjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN4RCxhQUFhLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDakQsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUMxQixZQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0NBQzdCLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQy9DLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztDQUNqRCxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDckQsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ2xELFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztDQUN0RCxTQUFTO0NBQ1QsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQ3JCLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3hELFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3hELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0I7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElB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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7Q0FDbkQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUN0RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0NBQ3BDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzdCO0NBQ0EsU0FBUztBQUNUO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztBQUMxUDtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFB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Q0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDM0M7QUFDQTtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDcEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNsQixHQUFHO0NBQ0g7O0NDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7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RSxDQUFDO0NBQ3ZDLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQztDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7Q0FDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0NBQy9CO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztDQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztDQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7Q0FDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtDQUNBLFFBQVEsSUFBSSxJ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RDtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7Q0FDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENB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QUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztDQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7Q0FDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDL0xBO0FBRUE7Q0FDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtDQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztDQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxDQUFDLFFB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LEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDdEM7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztDQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtDQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FB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QUFFO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0NBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7Q0FDQTtBQUNBO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlGO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0NBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0NBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0NBQ0EsS0FBSztDQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxD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QUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Q0FDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkc7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNwSDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDMUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTs7Q0NyUkE7QUFJQTtDQUNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztDQUNwQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0NBQ3RCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUM7Q0FDbEMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ25DLElBQUksSUFBSSxDQUFDLEtBQUssUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNwRSxJQUFJLElBQUksQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Q0FDbEMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzVFLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0U7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7Q0FDekMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0FBQzFDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDLENBQUMsUUFBUSxLQUFLLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLGtDQUFrQyxFQUFFLENBQUM7QUFDM0c7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7Q0FDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztDQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0NBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENB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LEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMxRixRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztDQUM3SCxRQUFRLE1BQU07Q0FDZCxPQUFPLE1BQU07Q0FDYixRQUFRLE1BQU07Q0FDZCxPQUFPO0NBQ1AsTUFBTSxLQUFLLEVBQUUsQ0FBQztDQUNkLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQTtBQUNBO0NBQ0E7Q0FDQSxFQUFFLFlBQVksR0FBRztDQUNqQixJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQztDQUNuQixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7Q0FDckMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZDtDQUNBO0NBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdFO0NBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNwRSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ2hHLEtBQUs7Q0FDTCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzlDO0NBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtDQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDaEQsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUN4QyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNyQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ25ELFVBQVUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0RDtDQUNBO0NBQ0EsVUFBVSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMvQyxVQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xEO0NBQ0EsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDO0NBQ3JCLFNBQVM7Q0FDVCxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDeEMsT0FBTyxNQUFNO0NBQ2I7Q0FDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0NBQ25DLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDN0QsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUMvQztDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUM1RDtDQUNBLFVBQVUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMvQixVQUFVLE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQy9GLFVBQVUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6RTtDQUNBLFVBQVUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDL0MsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7Q0FDM0QsU0FBUztDQUNULFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQztDQUNuQixPQUFPO0NBQ1AsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztDQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3ZDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztDQUNyQyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0NBQ3RCLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqQyxJQUFJLE9BQU8sR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Q0FDakI7Q0FDQSxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlDQUF5QyxDQUFDLENBQUM7Q0FDN0YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNqQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDbkIsS0FBSztDQUNMLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbEIsR0FBRztBQUNIO0NBQ0E7Q0FDQSxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sR0FBRyxJQUFJLEVBQUU7Q0FDbkQsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0NBQ3hCLElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMzQjtDQUNBO0NBQ0EsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM5QixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDaEMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN0QztDQUNBO0NBQ0EsSUFBSSxHQUFHLENBQUMsV0FBVyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUM3QztDQUNBO0NBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzdCLElBQUksTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDO0FBQ2pGO0NBQ0EsSUFBSSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDakUsSUFBSSxNQUFNLFVBQVUsS0FBSyxZQUFZLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDO0FBQ2xGO0NBQ0E7Q0FDQSxJQUFJLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7QUFDakY7Q0FDQTtDQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzNCLElBQUksQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzNCLElBQUksQ0FBQyxDQUFDLE1BQU0sT0FBTyxZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUM1QztDQUNBO0NBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxL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LElBQUksQ0FBQztDQUN4QyxVQUFVLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO0NBQ3hGLFlBQVksT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ3hDLFdBQVc7Q0FDWCxTQUFTO0NBQ1QsT0FBTyxNQUFNO0NBQ2I7Q0FDQSxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQy9ELFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUN4QyxVQUFVLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztDQUM5QyxVQUFVLE1BQU0sR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDOUcsVUFBVSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElB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O0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0NBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztBQUM1QztDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNwRTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0NBQzNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2Y7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3ZFO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7Q0FDdEMsSUFBSSxJQUFJLENBQUMsTUFBTTtDQUNmLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FB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QUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7Q0FDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0NBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0NBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDaEQsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3pCLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtDQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENB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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvcHJvdG8vVHJlZUxpc3QuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBBUEkgcMO6YmxpY2EgZXNwZXJhZGE6XHJcbiAgICAvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KVxyXG4gICAgLy8gby5mb2N1c2VkIChib29sKSwgby5mb2N1c1BhdGggKGFycmF5KSwgby5mb2N1c0xldmVsIChudW1iZXIpXHJcbiAgICAvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcbiAgICBvLnNlbGVjdGFibGUgPSB0cnVlO1xyXG4gICAgby5uYW1lID0gby5uYW1lIHx8ICdUcmVlTGlzdCc7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICAvLyBEYXRvcyAmIGVzdGFkb1xyXG4gICAgdGhpcy50cmVlICAgICAgID0gby50cmVlIHx8IHt9O1xyXG4gICAgdGhpcy52YWx1ZSAgICAgID0gQXJyYXkuaXNBcnJheShvLnZhbHVlKSA/IG8udmFsdWUuc2xpY2UoKSA6IFtdO1xyXG4gICAgdGhpcy5mb2N1c2VkICAgID0gISFvLmZvY3VzZWQ7XHJcbiAgICB0aGlzLmZvY3VzUGF0aCAgPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09ICdudW1iZXInID8gby5mb2N1c0xldmVsIDogLTE7XHJcblxyXG4gICAgdGhpcy50YWJJbmRleCAgID0gby50YWJJbmRleCA/PyBudWxsO1xyXG4gICAgdGhpcy5pdGVtSW5kZXggID0gby5pdGVtSW5kZXggPz8gbnVsbDtcclxuXHJcbiAgICAvLyBDYWxsYmFja1xyXG4gICAgdGhpcy5jaGFuZ2VDYiA9IHR5cGVvZiBvLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nID8gby5vbkNoYW5nZSA6ICgpID0+IHt9O1xyXG5cclxuICAgIC8vIExheW91dCBpbnRlcm5vIC8gcHVibGljYWNpw7NuIGRlIGFsdHVyYVxyXG4gICAgdGhpcy5saW5lSCAgICA9IHRoaXMuaDsgICAgICAgICAgICAgICAvLyBhbHRvIGRlIFVOQSBmaWxhXHJcbiAgICB0aGlzLmxldmVsR2FwID0gdGhpcy5jb2xvcnMuc3kgfHwgMjsgIC8vIHNlcGFyYWNpw7NuIHZlcnRpY2FsIGVudHJlIG5pdmVsZXNcclxuICAgIHRoaXMubGVhZk1heCAgPSAwOyAgICAgICAgICAgICAgICAgICAgLy8gc2UgY2FsY3VsYSBlbiByU2l6ZSgpXHJcblxyXG4gICAgLy8gTW9kZWxvIHZpc3VhbFxyXG4gICAgdGhpcy5sZXZlbHMgICA9IFtdOyAgIC8vIFt7dHlwZTonbWFwJ3wnbGlzdCcsIGl0ZW1zOlt7a2V5LGxhYmVsLHpvbmV9XSwgem9uZTp7eCx5LHcsaH19Li4uXVxyXG4gICAgdGhpcy5pdGVtc0RvbSA9IFtdOyAgIC8vIGVzcGVqbyBET00gcG9yIG5pdmVsXHJcbiAgICB0aGlzLmhvdmVyICAgID0geyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG5cclxuICAgIC8vIENvbnRlbmVkb3IgaW50ZXJubyAoYWJzb2x1dG8pXHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSgnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnbGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7Jyk7XHJcbiAgICB0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEhlbHBlcnMgZGUgdGlwbyA9PT09PT09XHJcbiAgc3RhdGljIGlzTWFwKG5vZGUpICB7IHJldHVybiBub2RlICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShub2RlKTsgfVxyXG4gIHN0YXRpYyBpc0xpc3Qobm9kZSkgeyByZXR1cm4gQXJyYXkuaXNBcnJheShub2RlKTsgfVxyXG5cclxuICAvLyA9PT09PT09IFJlY29ycmlkbyBkZSBkYXRvcyA9PT09PT09XHJcbiAgZ2V0Tm9kZUF0UGF0aChwYXRoKSB7XHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBwYXRoW2ldKSkgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgICBub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBMbGVnYW1vcyBhIHVuYSBsaXN0YTogeWEgbm8gaGF5IG3DoXMgY2xhdmVzIHbDoWxpZGFzXHJcbiAgICAgICAgaWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuICB9XHJcblxyXG4gIC8vIEF1dG9jb21wbGV0YXI6IGJhamEgcG9yIHByaW1lcmFzIGNsYXZlcyBkZSBjYWRhIG1hcGEgaGFzdGEgYWxjYW56YXIgdW5hIGxpc3RhXHJcbiAgYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2VQYXRoKSB7XHJcbiAgICBsZXQgeyBub2RlIH0gPSB0aGlzLmdldE5vZGVBdFBhdGgoYmFzZVBhdGgpO1xyXG4gICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoLnNsaWNlKCk7XHJcbiAgICB3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgY29uc3QgazAgPSBrZXlzWzBdO1xyXG4gICAgICBwYXRoLnB1c2goazApO1xyXG4gICAgICBub2RlID0gbm9kZVtrMF07XHJcbiAgICB9XHJcbiAgICAvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2EgdW4gw610ZW0gZmluYWwgZGUgbGEgaG9qYVxyXG4gICAgcmV0dXJuIHBhdGg7XHJcbiAgfVxyXG5cclxuICAvLyBSdXRhIGFjdGl2YSAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpbm8gdmFsdWUpXHJcbiAgZ2V0QWN0aXZlUGF0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgPyB0aGlzLmZvY3VzUGF0aCA6IHRoaXMudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IFRhbWHDsW8gZGUgaG9qYSBtw6F4aW1vIChwYXJhIGxheW91dCBlc3RhYmxlKSA9PT09PT09XHJcbiAgY29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBub2RlLmxlbmd0aDtcclxuICAgIGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHJldHVybiAwO1xyXG4gICAgbGV0IG0gPSAwO1xyXG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XHJcbiAgICAgIG0gPSBNYXRoLm1heChtLCB0aGlzLmNvbXB1dGVMZWFmTWF4KG5vZGVba10pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBDb25zdHJ1Y2Npw7NuIGRlIG5pdmVsZXMgKG1vZGVsbyBsw7NnaWNvKSA9PT09PT09XHJcbiAgYnVpbGRMZXZlbHMoKSB7XHJcbiAgICB0aGlzLmxldmVscy5sZW5ndGggPSAwO1xyXG4gICAgY29uc3QgYWN0aXZlUGF0aCA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpO1xyXG5cclxuICAgIGxldCBub2RlID0gdGhpcy50cmVlO1xyXG4gICAgbGV0IGxldmVsID0gMDtcclxuXHJcbiAgICB3aGlsZSAobm9kZSkge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBpbnRlcm1lZGlvOiBjbGF2ZXMgZGVsIG1hcGEgKGhvcml6b250YWwpXHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICAgIGlmICgha2V5cy5sZW5ndGgpIGJyZWFrO1xyXG4gICAgICAgIHRoaXMubGV2ZWxzLnB1c2goe1xyXG4gICAgICAgICAgdHlwZTogJ21hcCcsXHJcbiAgICAgICAgICBpdGVtczoga2V5cy5tYXAoayA9PiAoeyBrZXk6IGssIGxhYmVsOiBrLCB6b25lOiB7IHg6MCx5OjAsdzowLGg6MCB9IH0pKSxcclxuICAgICAgICAgIHpvbmU6IHsgeDowLHk6MCx3OjAsaDogdGhpcy5saW5lSCB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBhY3RpdmVQYXRoW2xldmVsXTtcclxuICAgICAgICBpZiAoIW5leHRLZXkgfHwgIW5vZGUuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIGJyZWFrO1xyXG4gICAgICAgIG5vZGUgPSBub2RlW25leHRLZXldO1xyXG4gICAgICB9IGVsc2UgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkge1xyXG4gICAgICAgIC8vIE5pdmVsIGhvamE6IGxpc3RhIHZlcnRpY2FsXHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSBub2RlLm1hcChsYWJlbCA9PiAoeyBrZXk6IGxhYmVsLCBsYWJlbCwgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSk7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChpdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCkgKiB0aGlzLmxpbmVIO1xyXG4gICAgICAgIHRoaXMubGV2ZWxzLnB1c2goeyB0eXBlOiAnbGlzdCcsIGl0ZW1zLCB6b25lOiB7IHg6MCwgeTowLCB3OjAsIGg6IGhMaXN0IH0gfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgbGV2ZWwrKztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gTGF5b3V0ICh6b25hcyAmIERPTSkgPT09PT09PVxyXG4gIGxheW91dExldmVscygpIHtcclxuICAgIGNvbnN0IHBhZFggPSA4O1xyXG4gICAgY29uc3QgdyA9IHRoaXMuem9uZS53IC0gcGFkWCAqIDI7XHJcbiAgICBsZXQgeSA9IDA7XHJcblxyXG4gICAgLy8gQWp1c3RhciBpdGVtc0RvbSBhIGNhbnRpZGFkIGRlIG5pdmVsZXNcclxuICAgIHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkgdGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuICAgIGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSkgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pdGVtc0RvbS5sZW5ndGggPSB0aGlzLmxldmVscy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG4gICAgICAgIGx2bC56b25lID0geyB4OiBwYWRYLCB5LCB3LCBoOiB0aGlzLmxpbmVIIH07XHJcbiAgICAgICAgbGV0IHggPSBwYWRYO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdCA9IGx2bC5pdGVtc1tpXTtcclxuICAgICAgICAgIGl0LnpvbmUgPSB7IHgsIHksIHc6IGNlbGxXLCBoOiB0aGlzLmxpbmVIIH07XHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbWFwJyk7XHJcbiAgICAgICAgICB4ICs9IGNlbGxXO1xyXG4gICAgICAgIH1cclxuICAgICAgICB5ICs9IHRoaXMubGluZUggKyB0aGlzLmxldmVsR2FwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGxpc3RhL2hvamE6IHJlc2VydmFyIGggc2Vnw7puIGxlYWZNYXhcclxuICAgICAgICBjb25zdCBuID0gbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBoTGlzdCA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCkgKiB0aGlzLmxpbmVIO1xyXG4gICAgICAgIGx2bC56b25lID0geyB4OiBwYWRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXNSZWFsID0gaSA8IG47XHJcbiAgICAgICAgICBjb25zdCBpdCA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXSA6IHsga2V5OiBudWxsLCBsYWJlbDogJycsIHpvbmU6IHsgeDowLHk6MCx3OjAsaDowIH0gfTtcclxuICAgICAgICAgIGl0LnpvbmUgPSB7IHg6IHBhZFgsIHk6IHkgKyBpICogdGhpcy5saW5lSCwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ2xpc3QnLCBpc1JlYWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB5ICs9IGhMaXN0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWp1c3RlcyBkZSBhbHRvIGludGVybm8gZGVsIGNvbnRlbmVkb3IgdmlzdWFsXHJcbiAgICBjb25zdCB0b3RhbEggPSB5O1xyXG4gICAgdGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArICdweCc7XHJcbiAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdG90YWxIICsgJ3B4JztcclxuXHJcbiAgICAvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcbiAgICB0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICBlbnN1cmVJdGVtRG9tKEwsIGkpIHtcclxuICAgIGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcbiAgICB3aGlsZSAocm93Lmxlbmd0aCA8PSBpKSByb3cucHVzaChudWxsKTtcclxuICAgIGlmICghcm93W2ldKSB7XHJcbiAgICAgIGNvbnN0IGRpdiA9IHRoaXMuZG9tKCdkaXYnLCBUb29scy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOycpO1xyXG4gICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoZGl2KTtcclxuICAgICAgcm93W2ldID0gZGl2O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvd1tpXTtcclxuICB9XHJcblxyXG4gIHBhaW50SXRlbURvbShkaXYsIEwsIGksIGl0LCBraW5kLCBpc1JlYWwgPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzID0gZGl2LnN0eWxlO1xyXG4gICAgY29uc3QgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAvLyBQb3NpY2nDs25cclxuICAgIHMubGVmdCAgID0gaXQuem9uZS54ICsgJ3B4JztcclxuICAgIHMudG9wICAgID0gaXQuem9uZS55ICsgJ3B4JztcclxuICAgIHMud2lkdGggID0gaXQuem9uZS53ICsgJ3B4JztcclxuICAgIHMuaGVpZ2h0ID0gKGl0LnpvbmUuaCAtIDIpICsgJ3B4JztcclxuXHJcbiAgICAvLyBUZXh0b1xyXG4gICAgZGl2LnRleHRDb250ZW50ID0gaXNSZWFsID8gaXQubGFiZWwgOiAnJztcclxuXHJcbiAgICAvLyBFc3RhZG9zXHJcbiAgICBjb25zdCBzZWxlY3RlZCAgID0gaXNSZWFsICYmIHRoaXMudmFsdWVbTF0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLnZhbHVlW0xdID09PSBpdC5rZXk7XHJcbiAgICBjb25zdCBpbkZvY3VzTHZsID0gdGhpcy5mb2N1c2VkICYmICh0aGlzLmZvY3VzTGV2ZWwgPT09IEwpO1xyXG4gICAgY29uc3QgZm9jdXNNYXRjaCA9IGlzUmVhbCAmJiBpbkZvY3VzTHZsICYmICh0aGlzLmZvY3VzUGF0aFtMXSA9PT0gaXQua2V5KTtcclxuICAgIGNvbnN0IGlzSG92ZXIgICAgPSBpc1JlYWwgJiYgKHRoaXMuaG92ZXIubGV2ZWwgPT09IEwgJiYgdGhpcy5ob3Zlci5pbmRleCA9PT0gaSk7XHJcblxyXG4gICAgLy8gRXN0aWxvcyBiYXNlXHJcbiAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgcy5jb2xvciAgICAgID0gY2MudGV4dDtcclxuICAgIHMuYm9yZGVyICAgICA9ICcxcHggc29saWQgJyArIGNjLmJvcmRlcjtcclxuICAgIHMudGV4dEFsaWduICA9IGtpbmQgPT09ICdtYXAnID8gJ2NlbnRlcicgOiAnbGVmdCc7XHJcblxyXG4gICAgLy8gUHJpb3JpZGFkIHZpc3VhbDogc2VsZWNjaW9uYWRvID4gZm9jbyA+IGhvdmVyID4gYmFzZVxyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICB9IGVsc2UgaWYgKGZvY3VzTWF0Y2gpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH0gZWxzZSBpZiAoaXNIb3Zlcikge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRmlsYXMgZGUgcGFkZGluZyBpbnZpc2libGVzIGVuIGhvamFcclxuICAgIHMub3BhY2l0eSA9IGlzUmVhbCA/ICcxJyA6ICcwJztcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gQ2ljbG8gZGUgdmlkYSA9PT09PT09XHJcbiAgclNpemUoKSB7XHJcbiAgICB0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcbiAgICB0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcbiAgICB0aGlzLmxheW91dExldmVscygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgdGhpcy5idWlsZExldmVscygpO1xyXG4gICAgdGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gSW50ZXJhY2Npw7NuID09PT09PT1cclxuICBfdG9Mb2NhbChlKSB7XHJcbiAgICBjb25zdCBteCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG4gICAgY29uc3QgbXkgPSBlLmNsaWVudFkgLSB0aGlzLnpvbmUueTtcclxuICAgIHJldHVybiB7IHg6IG14LCB5OiBteSB9O1xyXG4gIH1cclxuXHJcbiAgX2hpdFRlc3QobXgsIG15KSB7XHJcbiAgICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgICBjb25zdCB6ID0gbHZsLnpvbmU7XHJcbiAgICAgIGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaCkgY29udGludWU7XHJcblxyXG4gICAgICBpZiAobHZsLnR5cGUgPT09ICdtYXAnKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGx2bC5pdGVtc1tpXS56b25lO1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiB0cnVlIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5Sb3dzID0gTWF0aC5tYXgobHZsLml0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgY29uc3QgaXR6ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldLnpvbmUgOiB7IHg6IHoueCwgeTogei55ICsgaSAqIHRoaXMubGluZUgsIHc6IHoudywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiBpc1JlYWwgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IEw6IC0xLCBpOiAtMSwgcmVhbDogZmFsc2UgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vtb3ZlJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgdGhpcy5ob3ZlciA9IChodC5MICE9PSAtMSAmJiBodC5yZWFsKSA/IHsgbGV2ZWw6IGh0LkwsIGluZGV4OiBodC5pIH0gOiB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZWRvd24nKSB7XHJcbiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fdG9Mb2NhbChlKTtcclxuICAgICAgY29uc3QgaHQgPSB0aGlzLl9oaXRUZXN0KHgsIHkpO1xyXG4gICAgICBpZiAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdEF0KGh0LkwsIGh0LmkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNldXAnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIChPcGNpb25hbCkgdGVjbGFkbzogaW50ZWdyYXIgbmF2ZWdhY2nDs24gZW4gR3VpIHkgcmVlbnZpYXIgYXF1w60gc2kgc2UgZGVzZWFcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIFNlbGVjY2nDs24gKyBhdXRvY29tcGxldGFkbyArIG5vdGlmaWNhY2nDs25cclxuICBfc2VsZWN0QXQoTCwgaSkge1xyXG4gICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICBjb25zdCBjaG9zZW4gPSBsdmwuaXRlbXNbaV07XHJcbiAgICBpZiAoIWNob3NlbiB8fCAhY2hvc2VuLmtleSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpO1xyXG4gICAgYmFzZVtMXSA9IGNob3Nlbi5rZXk7XHJcblxyXG4gICAgY29uc3QgbmV3UGF0aCA9IHRoaXMuYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2UpO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSBuZXdQYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEFQSSBww7pibGljYSA9PT09PT09XHJcbiAgc2V0VmFsdWUocGF0aCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRUcmVlKHRyZWUpIHtcclxuICAgIHRoaXMudHJlZSA9IHRyZWUgfHwge307XHJcbiAgICAvLyByZWNhbGN1bGFyIGxlYWZNYXggZW4gcHLDs3hpbWEgcGFzYWRhXHJcbiAgICB0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXMoeyBmb2N1c2VkLCBmb2N1c1BhdGgsIGZvY3VzTGV2ZWwgfSkge1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c2VkID09PSAnYm9vbGVhbicpIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb2N1c1BhdGgpKSB0aGlzLmZvY3VzUGF0aCA9IGZvY3VzUGF0aC5zbGljZSgpO1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c0xldmVsID09PSAnbnVtYmVyJykgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IFB1YmxpY2FjacOzbiBkZSBhbHR1cmEgPT09PT09PVxyXG4gIF9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCkge1xyXG4gICAgbGV0IGMgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxldmVscy5sZW5ndGg7IGkrKykgaWYgKHRoaXMubGV2ZWxzW2ldLnR5cGUgPT09ICdtYXAnKSBjKys7XHJcbiAgICByZXR1cm4gYztcclxuICB9XHJcblxyXG4gIF9nZXRDdXJyZW50TGVhZkxlbmd0aCgpIHtcclxuICAgIGNvbnN0IGxhc3QgPSB0aGlzLmxldmVsc1t0aGlzLmxldmVscy5sZW5ndGggLSAxXTtcclxuICAgIHJldHVybiBsYXN0ICYmIGxhc3QudHlwZSA9PT0gJ2xpc3QnID8gbGFzdC5pdGVtcy5sZW5ndGggOiAwO1xyXG4gIH1cclxuXHJcbiAgX3B1Ymxpc2hIZWlnaHQoKSB7XHJcbiAgICBjb25zdCBpbnRlciA9IHRoaXMuX2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKTtcclxuICAgIGNvbnN0IGxlYWZMZW4gPSBNYXRoLm1heCh0aGlzLmxlYWZNYXgsIHRoaXMuX2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkpO1xyXG4gICAgY29uc3QgbGVhZkggID0gbGVhZkxlbiAqIHRoaXMubGluZUg7XHJcbiAgICBjb25zdCBpbnRlckggPSBpbnRlciAqICh0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcCk7XHJcbiAgICBjb25zdCB0b3RhbEggPSBpbnRlckggKyAoaW50ZXIgPyB0aGlzLmxldmVsR2FwIDogMCkgKyBsZWFmSDtcclxuXHJcbiAgICAvLyBBY3R1YWxpemEgbcOpdHJpY2FzIGRlbCBwcm90byAobG8gcXVlIHN1bWEgZWwgR1VJKVxyXG4gICAgdGhpcy5oID0gdG90YWxIO1xyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG5cclxuICAgIC8vIEF2aXNhciBhbCBHVUkgeSByZWZyZXNjYXIgem9uYXNcclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYWluKSB0aGlzLm1haW4uY2FsYygpO1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBCb29sIH0gZnJvbSAnLi4vcHJvdG8vQm9vbC5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL3Byb3RvL0J1dHRvbi5qcyc7XHJcbmltcG9ydCB7IENpcmN1bGFyIH0gZnJvbSAnLi4vcHJvdG8vQ2lyY3VsYXIuanMnO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL3Byb3RvL0NvbG9yLmpzJztcclxuaW1wb3J0IHsgRnBzIH0gZnJvbSAnLi4vcHJvdG8vRnBzLmpzJztcclxuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9wcm90by9HcmFwaC5qcyc7XHJcbmltcG9ydCB7IEdyb3VwICB9IGZyb20gJy4uL3Byb3RvL0dyb3VwLmpzJztcclxuaW1wb3J0IHsgSm95c3RpY2sgfSBmcm9tICcuLi9wcm90by9Kb3lzdGljay5qcyc7XHJcbmltcG9ydCB7IEtub2IgfSBmcm9tICcuLi9wcm90by9Lbm9iLmpzJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uL3Byb3RvL0xpc3QuanMnO1xyXG5pbXBvcnQgeyBOdW1lcmljIH0gZnJvbSAnLi4vcHJvdG8vTnVtZXJpYy5qcyc7XHJcbmltcG9ydCB7IFNsaWRlIH0gZnJvbSAnLi4vcHJvdG8vU2xpZGUuanMnO1xyXG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9wcm90by9UZXh0SW5wdXQuanMnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL3Byb3RvL1RpdGxlLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0LmpzJztcclxuaW1wb3J0IHsgQml0bWFwIH0gZnJvbSAnLi4vcHJvdG8vQml0bWFwLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICcuLi9wcm90by9TZWxlY3Rvci5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi4vcHJvdG8vRW1wdHkuanMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vcHJvdG8vSXRlbS5qcyc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi9wcm90by9HcmlkLmpzJztcclxuaW1wb3J0IHsgUGFkMkQgfSBmcm9tICcuLi9wcm90by9QYWQyRC5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFRyZWVMaXN0IH0gZnJvbSAnLi4vcHJvdG8vVHJlZUxpc3QuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndHJlZWxpc3QnOiBuID0gbmV3IFRyZWVMaXN0KG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Q0FBQTtDQUNBO0NBQ0E7QUFDQTtBQUNZLE9BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsTUFBTSxDQUFDLEdBQUc7Q0FDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7Q0FDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7Q0FDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0NBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSztDQUNiLEVBQUUsS0FBSyxFQUFFLEtBQUs7Q0FDZCxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDYjtDQUNBLEVBQUUs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QUFTLEVBQUUsQ0FBQztDQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0NBQ3JCLE9BQU87QUFDUDtDQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0NBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDMUIsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtDQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7Q0FDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUNqQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFD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VyxFQUFFLENBQUM7Q0FDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Q0FDcEQsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQ3ZEO0NBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDeEMsR0FBRztBQUNIO0NBQ0EsRUFBRSxRQUFRLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFO0NBQ3JDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3RCO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0NBQ3ZELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztDQUN2RDtDQUNBLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFD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QUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0NBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtDQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0NBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7Q0FDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztDQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDbkIsU0FBUztDQUNULFFBQVEsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDM0I7Q0FDQSxLQUFLO0FBQ0w7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Q0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3JIO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM3SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxF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RyxFQUFFLENBQUM7QUFDekg7Q0FDQTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0E7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztDQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0NBQ0E7QUFDQTtDQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxD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S0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0NBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztDQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztDQUN2QjtDQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7Q0FDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7Q0FDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0NBQ0EsWUFBWSxFQUFFLEdBQUc7Q0FDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7Q0FDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxhQUFhLENBQUM7Q0FDZDtDQUNBLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlEO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkI7Q0FDQSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixnQkFBZ0IsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUMxQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdEQsaUJBQWlCO0FBQ2pCO0NBQ0EsZ0JBQWdCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRztDQUNBLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0QsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFB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QSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDM0M7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMzQjtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2pELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztDQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzFELFNBQVMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QjtDQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztDQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqRDtDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDdkQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0NBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUN4QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDbkM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENB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Q3RCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0NBQzdFLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0NBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7Q0FDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEMsT0FBTztDQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDdkIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUN6QyxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxHQUFHO0NBQ1QsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNyQztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQzVEO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0NBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7Q0FDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3ZDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7Q0FDaEMsS0FBSyxNQUFNO0NBQ1gsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDekMsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0NBQzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDMUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUN0QyxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDMUI7Q0FDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDcEQsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7Q0FDOUIsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDMUIsT0FBTztDQUNQLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFO0NBQ1YsTUFBTSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUk7Q0FDMUIsVUFBVSxJQUFJLENBQUMsTUFBTTtDQUNyQixVQUFVLElBQUksQ0FBQyxJQUFJO0NBQ25CLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO0NBQ3pCLFVBQVUsUUFBUSxDQUFDLElBQUksQ0FBQztBQUN4QjtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakUsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0NBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7Q0FDcEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0NBQzdDLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN0QixLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0EsRUFBRSxhQUFhLEdBQUc7Q0FDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0NBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztDQUM5RSxLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0E7QUFDQTtDQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7Q0FDL0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzlDLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVB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Q0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07Q0FDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07Q0FDNUI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7Q0FDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0NBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMs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SUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztDQUNBLFNBQVM7QUFDVDtBQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Q0FDckQsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUU7Q0FDcEUsU0FBUztDQUNUO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0NBQ3hCLFFBQVEsSUFBSSxDQUFD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RSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7Q0FDbEQ7Q0FDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7Q0FDQTtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0NBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztDQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFJO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7Q0FDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFDO0NBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztDQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUU7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUk7Q0FDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwQztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU07Q0FDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtDQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtDQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRTtBQUN4QjtDQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQztDQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUN0QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUNsSTtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtDQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0NBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0NBQ0EsUUFBUSxRQUFRLElBQUk7Q0FDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0NBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztDQUNqRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0NBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7Q0FDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDckMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFB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QyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7Q0FDQTtDQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztDQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QztDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7Q0FDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0NBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FB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SSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdkMsT0FBTztBQUNQO0NBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0NBQ3BEO0NBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDakM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJ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LEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QztDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2Y7Q0FDQSxFQUFFLElBQUksQ0FBQyxZQUFZLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUQsYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxhQUFhLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7Q0FDN0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNwQjtDQUNBLEtBQUssSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUN0QyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxFQUFFO0FBQzFDO0NBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDNUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU07Q0FDMUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUM5QztDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0NBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDdkIsTUFBTTtDQUNOLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNoQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDdEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzlDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztDQUN6QixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxXQUFXLENBQUMsR0FBRztBQUNoQjtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7Q0FDakIsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFLO0FBQ2Y7Q0FDQSxLQUFjLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU87Q0FDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDbkMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7Q0FDQSxLQUFLLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7Q0FDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztDQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUM7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0E7Q0FDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7Q0FDNUQ7Q0FDQTtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtDQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7Q0FDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtDQUNwQztDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztDQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0NBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtDQUNBLEVBQUU7QUFDRjtBQUNBO0NBQ0E7O0NDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQztBQUMvQjtDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztB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LENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztDQUM5QjtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztDQUN0RSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtDQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QztDQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0NBQzFCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkM7Q0FDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDdkQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ3JDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FB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QUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DO0NBQ0EsS0FBSztDQUNMO0NBQ0E7O0NDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Q0FDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0NBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxRDtD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RUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0NBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7Q0FDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQztDQUM5QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFJO0NBQzlDLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7Q0FDckMsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUMzQyxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQztDQUNoRixpQkFBaUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztDQUMzRCxTQUFTO0NBQ1QsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFdBQVcsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQ0FBaUM7Q0FDcEUsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUc7Q0FDOUIsUUFBUSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUk7Q0FDckMsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQW9CO0NBQ2pHLGlCQUFpQixDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFPO0NBQ3RFLFlBQVksQ0FBQyxHQUFFO0NBQ2YsU0FBUztDQUNULFFBQVEsT0FBTyxDQUFDO0NBQ2hCLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ25GLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDcEgsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEc7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFB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QUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU07Q0FDL0IsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRTtDQUN6QyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFFO0NBQy9CLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNwQztDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0NDNWNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN2RDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztDQUMxQyxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Q0FDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztDQUN6QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFJO0FBQzVEO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztDQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7Q0FDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENB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QUUsQ0FBQztDQUNoRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7Q0FDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7Q0FDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7Q0FDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0NBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0NBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtDQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0NBQ0EsYUFBYTtBQUNiO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM3QjtBQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztDQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7Q0FDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDN0QsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRjtDQUNBLFFBQVEsR0FBRyxJ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QUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7Q0FDekQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDakYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMs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TUFBTSxDQUFDO0FBQzlCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0NBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztDQUM5QjtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDckQ7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUks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LFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1RDtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDckU7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDakMsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztDQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3JGO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0NBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7Q0FDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztDQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3pEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTs7Q0NsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztDQUNyQztBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7Q0FDQTtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0NBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7Q0FDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtDQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcscUNBQXFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNERBQTRELENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNyVSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsZ0RBQWdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNySztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0NBQ2xJLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFB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SUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3hELFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3hELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0I7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksWUFBWSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDNUIsUUFBUSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDeEU7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxPQUFPO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDNUI7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM3QjtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3BCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUM1RCxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDNUM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTs7Q0MzMEJPLE1BQU0sT0FBTyxTQUFTLEtBQUssQ0FBQztBQUNuQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFFO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBQztDQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUN0QixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBQztDQUN6QixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSTtDQUM1QixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBSztDQUM1QixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBSztBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO0NBQ3ZCLFlBQVksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0NBQy9CLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztDQUNwQyxZQUFZLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQUs7Q0FDdkMsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBSztBQUNyQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtDQUNuQyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0NBQ2pDLGdCQUFnQixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQztDQUN0QyxhQUFhLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLEtBQUssRUFBRTtDQUNqRCxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBSztDQUNwQyxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFLO0NBQ3JDLGFBQWEsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksTUFBTSxFQUFFO0NBQ2xELGdCQUFnQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUU7Q0FDL0IsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDO0NBQ3ZFLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQztDQUN2RSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUM7Q0FDdkUsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDO0NBQ3ZFLGdCQUFnQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQUs7Q0FDckMsZ0JBQWdCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSTtDQUNwQyxhQUFhO0NBQ2IsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTTtDQUNwQyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUMxQztDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxjQUFjLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRywrQkFBK0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRTtBQUN6STtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFFO0NBQ3ZCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztDQUN4QixRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDbEI7Q0FDQSxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRTtDQUN4RyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBQztDQUNyTixZQUFZLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVE7Q0FDL0QsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7Q0FDbkQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUN0RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0NBQ3BDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzdCO0NBQ0EsU0FBUztBQUNUO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztBQUMxUDtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pKO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDcEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFD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QUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDN0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUN4RCxRQUFRLE1BQU07Q0FDZCxNQUFNLEtBQUssQ0FBQztDQUNaO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDdEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUM1RCxRQUFRLE1BQU07Q0FDZCxLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO0NBQ2IsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFEO0NBQ0EsSUFBSSxJQUFJLE9BQU87Q0FDZixNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDM0M7QUFDQTtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDcEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNsQixHQUFHO0NBQ0g7O0NDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7Q0FDQSxR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LENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQztDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7Q0FDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0NBQy9CO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztDQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztDQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7Q0FDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FB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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7Q0FDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUMz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LElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztDQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7Q0FDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDL0xBO0FBRUE7Q0FDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtDQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztDQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FB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QUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztDQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtDQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0NBQ25DO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0FBQ3RKO0NBQ0EsUUFBVyxJQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBQztDQUNyQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztDQUMzQixRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSTtBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Q0FDMUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztDQUN2QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0NBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkI7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0NBQ0EsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUN2QyxZQUFZLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLHNCQUFzQixDQUFDO0NBQ3RELFlBQVksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkQ7Q0FDQSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztDQUNyQyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsc0JBQXNCLENBQUM7QUFDMUQ7Q0FDQSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3BDO0NBQ0Esb0JBQW9CLEdBQUcsR0FBRyxLQUFLLENBQUM7Q0FDaEMsb0JBQW9CLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUN4RjtDQUNBLG9CQUFvQixDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQztDQUN4RCxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsa0NBQWtDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztDQUN0USxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztDQUNyRSxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsRSxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pELG9CQUFvQixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hDO0NBQ0Esb0JBQW9CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQztDQUN4QyxvQkFBb0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQ3JDO0NBQ0EsaUJBQWlCLE1BQU07QUFDdkI7Q0FDQSxvQkFBb0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsS0FBSyxHQUFFO0NBQ3ZELG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlFQUFnRTtDQUN6TCxvQkFBb0IsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUU7QUFDdkM7Q0FDQSxpQkFBaUI7QUFDakI7Q0FDQSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLGNBQWMsQ0FBQztDQUM1RCxxQkFBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDO0NBQ3REO0NBQ0EsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsYUFBYTtDQUNiLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsT0FBTTtBQUNqQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFJO0NBQ3hCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDcEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUNuQixRQUFRLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ3RCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QixRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDcEIsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEQsU0FBUztBQUNUO0NBQ0EsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN6QixRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDcEIsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7Q0FDNUQsU0FBUztBQUNUO0NBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsWUFBWSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM5QixZQUFZLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUN0QyxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sRUFBRSxDQUFDO0FBQ2xCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDM0IsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7Q0FDN0IsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBQztDQUM5QyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDdkIsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEtBQUs7Q0FDdEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7Q0FDMUIsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztDQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtDQUM3QixZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFDO0NBQ2xDLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUU7Q0FDNUQsU0FBUyxNQUFNO0NBQ2YsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzNCLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxFQUFFLENBQUM7QUFDbEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBSztBQUN6QztDQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQjtDQUNBLFlBQVksQ0FBQyxHQUFHLEVBQUM7Q0FDakIsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBSztDQUMzRTtDQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFO0NBQzFCLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0NBQ3hDLGFBQWEsTUFBTTtDQUNuQixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUM7Q0FDckIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0NBQzdCLGFBQWE7QUFDYjtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSTtBQUM1QztDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxDQUFDO0FBQ2hCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBTztDQUM5QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDbEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakM7Q0FDQSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzlCO0NBQ0EsWUFBWSxRQUFRLENBQUM7QUFDckI7Q0FDQSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0NBQzdGLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU07Q0FDbEcsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtDQUMvRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0FBQ25HO0NBQ0EsYUFBYTtBQUNiO0NBQ0EsWUFBWSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFDO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRTtDQUNyQixRQUFRLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRTtBQUMzQjtDQUNBLEtBQUs7QUFDTDtBQUNBO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDN0M7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQztDQUM3RCxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUMzQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQztDQUNoRSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUc7Q0FDMUIsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztDQUNoRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDdEIsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsR0FBRztDQUNsRCxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQzlDLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQzFCLGFBQWE7Q0FDYixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTztBQUN6QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Q0FDcEMsUUFBUSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckI7Q0FDQSxRQUFXLElBQVcsSUFBSTtBQUMxQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN2QjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0M7Q0FDQSxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNyQixnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQzdELGFBQWEsTUFBTTtDQUNuQixnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQzdELGFBQWE7QUFDYjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0NBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDM0QsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDMVRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDL0IsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFFO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0NBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7Q0FDQTtBQUNBO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlGO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0NBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0NBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0NBQ0EsS0FBSztDQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7Q0FDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENB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QVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLFFBQVEsSUFBSTtDQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzNELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQzlEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7Q0FDaEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUU7Q0FDcEU7Q0FDQSxZQUFZLE1BQU07Q0FDbEIsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztDQUMxQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Q0FDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkc7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNwSDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDMUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTs7Q0NyUkE7QUFJQTtDQUNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztDQUNwQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0NBQ3RCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUM7Q0FDbEMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ25DLElBQUksSUFBSSxDQUFDLEtBQUssUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNwRSxJQUFJLElBQUksQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Q0FDbEMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzVFLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0U7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7Q0FDekMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0FBQzFDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsUUFBUSxLQUFLLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ3hDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7QUFDdEI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUM7Q0FDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztDQUN2QixJQUFJLElBQUksQ0FBQyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyx5Q0FBeUMsQ0FBQyxDQUFDO0NBQzVGLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ2hCLEdBQUc7QUFDSDtDQUNBO0NBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Q0FDMUYsRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUNyRDtDQUNBO0NBQ0EsRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFO0NBQ3RCLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUN6QixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQzFDLE1BQU0sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0NBQ2hDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2xHLFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QixPQUFPLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0NBQ3hDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3ZELE9BQU8sTUFBTTtDQUNiLFFBQVEsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3hDLE9BQU87Q0FDUCxLQUFLO0NBQ0wsSUFBSSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDeEMsR0FBRztBQUNIO0NBQ0E7Q0FDQSxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtDQUMvQixJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0NBQ2hELElBQUksTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ2xDLElBQUksT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0NBQ2pDLE1BQU0sTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNyQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU07Q0FDOUIsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUN0QixLQUFLO0NBQ0w7Q0FDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0NBQ2hCLEdBQUc7QUFDSDtDQUNBO0NBQ0EsRUFBRSxhQUFhLEdBQUc7Q0FDbEIsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ3RELEdBQUc7QUFDSDtDQUNBO0NBQ0EsRUFBRSxjQUFjLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUU7Q0FDbkMsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ2hELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7Q0FDcEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDZCxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtDQUN2QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDcEQsS0FBSztDQUNMLElBQUksT0FBTyxDQUFDLENBQUM7Q0FDYixHQUFHO0FBQ0g7Q0FDQTtDQUNBLEVBQUUsV0FBVyxHQUFHO0NBQ2hCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQzVDO0NBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pCLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsSUFBSSxPQUFPLElBQUksRUFBRTtDQUNqQixNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtDQUNoQztDQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN2QyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU07Q0FDaEMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztDQUN6QixVQUFVLElBQUksRUFBRSxLQUFLO0NBQ3JCLFVBQVUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDakYsVUFBVSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRTtDQUM3QyxTQUFTLENBQUMsQ0FBQztBQUNYO0NBQ0EsUUFBUSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDMUMsUUFBUSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNO0NBQzdELFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUM3QixPQUFPLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0NBQ3hDO0NBQ0EsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUM1RixRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUN4RSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNyRixRQUFRLE1BQU07Q0FDZCxPQUFPLE1BQU07Q0FDYixRQUFRLE1BQU07Q0FDZCxPQUFPO0NBQ1AsTUFBTSxLQUFLLEVBQUUsQ0FBQztDQUNkLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQTtDQUNBLEVBQUUsWUFBWSxHQUFHO0NBQ2pCLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0NBQ25CLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztDQUNyQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkO0NBQ0E7Q0FDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDN0UsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNwRSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ2hHLEtBQUs7Q0FDTCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzlDO0NBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtDQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDaEQsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUN4QyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNyQixRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNuRCxVQUFVLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbEMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFB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QUcsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN0QztDQUNBO0NBQ0EsSUFBSSxHQUFHLENBQUMsV0FBVyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUM3QztDQUNBO0NBQ0EsSUFBSSxNQUFNLFFBQVEsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO0NBQ3pGLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQy9ELElBQUksTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5RSxJQUFJLE1BQU0sT0FBTyxNQUFNLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEY7Q0FDQTtDQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzNCLElBQUksQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzNCLElBQUksQ0FBQyxDQUFDLE1BQU0sT0FBTyxZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztDQUM1QyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3REO0NBQ0E7Q0FDQSxJQUFJLElBQUksUUFBUSxFQUFFO0NBQ2xCLE1BQU0sQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0NBQy9CLE1BQU0s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QyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztDQUN6QyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7Q0FDakIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7Q0FDaEMsTUFBTSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDeEMsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNyQyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3RHLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQ3BCLE1BQU0sT0FBTyxJQUFJLENBQUM7Q0FDbEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO0NBQ2hDLE1BQU0sTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hDLE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDckMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxD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SUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNyQztDQUNBO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ2pELElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Q0FDNUIsR0FBRztDQUNIOztBQ2hXWSxPQUFDLEdBQUcsR0FBRyxZQUFZO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDMUI7Q0FDQSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7Q0FDQSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3RDO0NBQ0EsWUFBWSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hCLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0I7Q0FDQSxTQUFTLE1BQU0sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDOUM7Q0FDQSxZQUFZLEdBQUcsR0FBRyxJQUFJLENBQUM7Q0FDdkIsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3pEO0NBQ0EsWUFBWSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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LENBQUMsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUM7Q0FDekUsUUFBUSxDQUFDLENBQUMsb0JBQW9CO0NBQzlCLFFBQVEsSUFBSSxDQUFDO0FBQ2I7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDakU7Q0FDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7Q0FDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO0FBQzVDO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3BFO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7Q0FDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDZjtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFT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QUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzlELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztDQUN0QyxHQUFHO0FBQ0g7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxNQUFNLEdBQUc7Q0FDWCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztDQUN4QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLE9BQU8sR0FBRztDQUNaLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNyQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRTtDQUM1QixJQUFJLElBQUksSUFBSTtDQUNaLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO0NBQ3BCLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0NBQzVDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQ2xFLE9BQU8sQ0FBQztDQUNSO0NBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7Q0FDcEIsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Q0FDNUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Q0FDN0MsT0FBTyxDQUFDO0NBQ1I7QUFDQTtDQUNBO0NBQ0EsR0FBRztBQUNIO0NBQ0Es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LENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUN6QjtDQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2xCO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BFO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxRQUFRLENBQUM7Q0FDMUUsU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUMvQztDQUNBLElBQUksT0FBTyxJQUFJLENBQUM7Q0FDaEIsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7Q0FDakI7QUFDQTtDQUNBO0NBQ0E7Q0FDQSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7Q0FDQSxJQUFJLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztDQUN2QixJQUFJLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUM1QjtDQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDL0QsSUFBSSxJQUFJLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtDQUN6QyxNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztDQUN6QixNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0NBQy9CLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO0FBQ3RCO0NBQ0EsSUFBSSxRQUFRLElBQUk7Q0FDaEIsTUFBTSxLQUFLLFNBQVM7Q0FDcEIsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdkU7Q0FDQSxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDNUQsUUFBUSxJQUFJLElBQUksS0FBSyxPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVE7Q0FDN0QsVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7Q0FDekIsVUFBVSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNsQyxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE1BQU07Q0FDZCxNQUFNLEtBQUssUUFBUTtDQUNuQixRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztDQUMzQixRQUFRLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztDQUNuRSxRQUFRLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRTtDQUNsQyxVQUFVLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ25ELFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU07Q0FDL0MsY0FBYyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztDQUNoQyxjQUFjLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakM7Q0FDQSxVQUFVLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUN0QixVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDM0IsVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3hCLFNBQVM7QUFDVDtDQUNBLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxRQUFRO0NBQ25CLFFBQVEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0NBQ25FLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0NBQ25FLFFBQVEsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3ZELFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzlFO0NBQ0EsUUFBUSxNQUFNO0NBQ2QsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztDQUNuQyxJQUFJLElBQUksV0FBVyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbkM7Q0FDQSxJQUFJLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3hDLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDMUM7Q0FDQSxJQUFJLElBQUksTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM1QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0NBQ3JCLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0NBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO0NBQy9CLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQ3pCLE1BQU0sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FFMUIsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztDQUM5QixLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFO0NBQ3JCLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUMxQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDMUIsS0FBSztDQUNMLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtDQUNiLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUM1QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3pCLElBQUksT0FBTyxJQUFJLENBQUM7Q0FDaEIsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7Q0FDZixJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPO0FBQzdCO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNyQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDN0IsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDO0NBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN4QjtDQUNBO0NBQ0EsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLEdBQUcsR0FBRztDQUNSO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztDQUN0QixJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN0QjtDQUNBLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7Q0FDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCO0NBQ0EsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUM5QyxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7Q0FDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztDQUMxRSxXQUFXO0NBQ1gsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN6QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3pCO0NBQ0EsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUNoRCxPQUFPO0NBQ1AsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQjtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLE9BQU87QUFDM0I7Q0FDQSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ25DLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoQjtDQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDekI7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxDQUFDO0NBQ2IsR0FBRztBQUNIO0NBQ0E7QUFDQTtDQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtDQUNaLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUMvQixHQUFHO0FBQ0g7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0NBQ2QsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqQyxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0NBQ25CO0NBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hELE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzdCLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ2xCLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVjtBQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNO0NBQzNCLE1BQU0sSUFBSSxDQUFDO0FBQ1g7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDaEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUM1QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN4QyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUNyQixLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDeEIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDaEIsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNqQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLE1BQU0sR0FBRztDQUNYLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3pDLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxHQUFHO0NBQ1osSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDakIsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUNwRSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdkIsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLFNBQVMsR0FBRztDQUNkLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTztBQUNqQztDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Q0FDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Q0FDdkMsR0FBRztBQUNIO0NBQ0EsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFO0NBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTztBQUNqQztDQUNBLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDdEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDckI7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7Q0FDZixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckIsTUFBTSxPQUFPO0NBQ2IsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztDQUM1QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDaEIsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtDQUN0QyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ25DLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUTtDQUN6QixVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDdEUsT0FBTztDQUNQLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtDQUNkLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2xDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFO0NBQ1gsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUI7Q0FDQSxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQztDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7Q0FDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7Q0FDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztDQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNoRCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDekIsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0NBQ1osSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FB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 diff --git a/build/uil.min.js b/build/uil.min.js index 1e80881..38804a9 100644 --- a/build/uil.min.js +++ b/build/uil.min.js @@ -8186,11 +8186,11 @@ class TreeList extends Proto { constructor(o = {}) { - // Propiedades públicas esperadas (API) - // o.tree (obj/array), o.value (array), o.focused (bool), - // o.focusPath (array), o.focusLevel (number), + // API pública esperada: + // o.tree (obj/array), o.value (array) + // o.focused (bool), o.focusPath (array), o.focusLevel (number) // o.tabIndex, o.itemIndex, o.onChange (fn) - o.selectable = true; // navegable por teclado si activas flechas + o.selectable = true; o.name = o.name || 'TreeList'; super(o); @@ -8204,34 +8204,31 @@ this.tabIndex = o.tabIndex ?? null; this.itemIndex = o.itemIndex ?? null; - // Callback de notificación - this.changeCb = typeof o.onChange === 'function' ? o.onChange : (/*tabIdx, itemIdx, newPath*/) => {}; + // Callback + this.changeCb = typeof o.onChange === 'function' ? o.onChange : () => {}; - // Layout interno - this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] - this.leafMax = 0; // alto reservado para el último nivel (máximo tamaño de hoja) - this.levelGap = 2; // gap vertical entre niveles - this.hItem = this.h; // alto por ítem + // Layout interno / publicación de altura + this.lineH = this.h; // alto de UNA fila + this.levelGap = this.colors.sy || 2; // separación vertical entre niveles + this.leafMax = 0; // se calcula en rSize() - // Hover / foco de mouse - this.hover = { level: -1, index: -1 }; + // Modelo visual + this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] + this.itemsDom = []; // espejo DOM por nivel + this.hover = { level: -1, index: -1 }; - // DOM visual (sin listeners directos; los eventos llegan vía Roots->handleEvent) - this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); // container interno + // Contenedor interno (absoluto) + this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); this.s[2] = this.c[2].style; - // Inicializa nodos visuales de forma perezosa en rSize() - this.itemsDom = []; // mirror de this.levels (matriz de nodos) - this.init(); } - // =============== Helpers de datos =============== - + // ======= Helpers de tipo ======= static isMap(node) { return node && typeof node === 'object' && !Array.isArray(node); } static isList(node) { return Array.isArray(node); } - // Devuelve el subnodo al seguir path (se detiene si no existe) + // ======= Recorrido de datos ======= getNodeAtPath(path) { let node = this.tree; for (let i = 0; i < path.length; i++) { @@ -8239,8 +8236,8 @@ if (!Object.prototype.hasOwnProperty.call(node, path[i])) return { node: null, depth: i }; node = node[path[i]]; } else if (TreeList.isList(node)) { - // Al llegar a lista, ya no hay más descendencia válida para claves - if (i < path.length) return { node, depth: i }; + // Llegamos a una lista: ya no hay más claves válidas + if (i < path.length) return { node, depth: i }; } else { return { node: null, depth: i }; } @@ -8248,32 +8245,30 @@ return { node, depth: path.length }; } - // Autocompleta descendiendo por la primera clave de cada mapa hasta alcanzar una lista + // Autocompletar: baja por primeras claves de cada mapa hasta alcanzar una lista autoCompleteToLeaf(basePath) { - let nodeInfo = this.getNodeAtPath(basePath); - let node = nodeInfo.node; + let { node } = this.getNodeAtPath(basePath); const path = basePath.slice(); - while (TreeList.isMap(node)) { const keys = Object.keys(node); - if (!keys.length) break; // mapa vacío + if (!keys.length) break; const k0 = keys[0]; path.push(k0); node = node[k0]; } - // Si termina en lista, NO agrega selección final de elemento hoja + // Si termina en lista, NO agrega un ítem final de la hoja return path; } - // Ruta activa para construir niveles (focusPath si focused, si no value) + // Ruta activa (focusPath si focused, sino value) getActivePath() { return this.focused ? this.focusPath : this.value; } - // Calcula el máximo tamaño de hoja del árbol (para reservar alto estable) + // ======= Tamaño de hoja máximo (para layout estable) ======= computeLeafMax(node = this.tree) { - if (TreeList.isList(node)) return node.length; - if (!TreeList.isMap(node)) return 0; + if (Array.isArray(node)) return node.length; + if (!node || typeof node !== 'object') return 0; let m = 0; for (const k of Object.keys(node)) { m = Math.max(m, this.computeLeafMax(node[k])); @@ -8281,8 +8276,7 @@ return m; } - // =============== Construcción de niveles (modelo lógico) =============== - + // ======= Construcción de niveles (modelo lógico) ======= buildLevels() { this.levels.length = 0; const activePath = this.getActivePath(); @@ -8292,38 +8286,39 @@ while (node) { if (TreeList.isMap(node)) { - // Opciones = claves del mapa (nivel intermedio) + // Nivel intermedio: claves del mapa (horizontal) const keys = Object.keys(node); - if (!keys.length) break; // detener expansión si vacío - this.levels.push({ type: 'map', items: keys.map(k => ({ key: k, label: k, zone: {x:0,y:0,w:0,h:0} })), zone: {x:0,y:0,w:0,h:this.hItem} }); + if (!keys.length) break; + this.levels.push({ + type: 'map', + items: keys.map(k => ({ key: k, label: k, zone: { x:0,y:0,w:0,h:0 } })), + zone: { x:0,y:0,w:0,h: this.lineH } + }); - // Avanza según la ruta activa (si existe), sino se detiene const nextKey = activePath[level]; if (!nextKey || !node.hasOwnProperty(nextKey)) break; node = node[nextKey]; } else if (TreeList.isList(node)) { - // Último nivel: lista/hoja (vertical) - const items = node.map(label => ({ key: label, label, zone: {x:0,y:0,w:0,h:0} })); - this.levels.push({ type: 'list', items, zone: {x:0,y:0,w:0,h: Math.max(items.length, this.leafMax) * this.hItem } }); - break; // fin + // Nivel hoja: lista vertical + const items = node.map(label => ({ key: label, label, zone: { x:0,y:0,w:0,h:0 } })); + const hList = Math.max(items.length, this.leafMax) * this.lineH; + this.levels.push({ type: 'list', items, zone: { x:0, y:0, w:0, h: hList } }); + break; } else { - break; // nodo inválido + break; } level++; } } - // =============== Layout (zonas internas) =============== - - // Calcula zonas internas de cada ítem/level y construye/actualiza dom + // ======= Layout (zonas & DOM) ======= layoutLevels() { const padX = 8; const w = this.zone.w - padX * 2; let y = 0; - // Asegura `itemsDom` anidado por nivel + // Ajustar itemsDom a cantidad de niveles while (this.itemsDom.length < this.levels.length) this.itemsDom.push([]); - // Limpia extra DOM si niveles disminuyen for (let L = this.levels.length; L < this.itemsDom.length; L++) { for (const el of this.itemsDom[L]) if (el && el.parentNode) el.parentNode.removeChild(el); } @@ -8334,32 +8329,26 @@ if (lvl.type === 'map') { const n = Math.max(1, lvl.items.length); const cellW = Math.floor(w / n); - lvl.zone = { x: padX, y, w, h: this.hItem }; + lvl.zone = { x: padX, y, w, h: this.lineH }; let x = padX; - // Asegura contenedor dom de nivel si querés uno (opcional) for (let i = 0; i < lvl.items.length; i++) { const it = lvl.items[i]; - it.zone = { x, y, w: cellW, h: this.hItem }; - - // crea/actualiza nodo visual + it.zone = { x, y, w: cellW, h: this.lineH }; const dom = this.ensureItemDom(L, i); this.paintItemDom(dom, L, i, it, 'map'); - x += cellW; } - y += this.hItem + this.levelGap; + y += this.lineH + this.levelGap; } else { - // lista/hoja vertical + // lista/hoja: reservar h según leafMax const n = lvl.items.length; - const hList = Math.max(n, this.leafMax) * this.hItem; + const hList = Math.max(n, this.leafMax) * this.lineH; lvl.zone = { x: padX, y, w, h: hList }; for (let i = 0; i < Math.max(n, this.leafMax); i++) { - // Puede haber "espacio vacío" si n < leafMax const isReal = i < n; - const it = isReal ? lvl.items[i] : { key: null, label: '', zone: {x:0,y:0,w:0,h:0} }; - it.zone = { x: padX, y: y + i * this.hItem, w, h: this.hItem }; - + const it = isReal ? lvl.items[i] : { key: null, label: '', zone: { x:0,y:0,w:0,h:0 } }; + it.zone = { x: padX, y: y + i * this.lineH, w, h: this.lineH }; const dom = this.ensureItemDom(L, i); this.paintItemDom(dom, L, i, it, 'list', isReal); } @@ -8367,18 +8356,20 @@ } } - // Ajusta alto visible del control + // Ajustes de alto interno del contenedor visual const totalH = y; - this.zone.h = totalH + this.margin; // Proto se encarga del margen + this.zone.h = totalH + this.margin; this.s[0].height = this.zone.h + 'px'; this.s[2].height = totalH + 'px'; + + // Publicar alto total al GUI (sumará u.h) + this._publishHeight(); } ensureItemDom(L, i) { const row = this.itemsDom[L]; while (row.length <= i) row.push(null); if (!row[i]) { - // Cada ítem es un DIV posicionado absoluto dentro de this.c[2] const div = this.dom('div', Tools.css.txt + 'position:absolute; pointer-events:none;'); this.c[2].appendChild(div); row[i] = div; @@ -8386,40 +8377,32 @@ return row[i]; } - // Colorea y posiciona el DOM del ítem según estados (seleccionado / foco) paintItemDom(div, L, i, it, kind, isReal = true) { const s = div.style; const cc = this.colors; // Posición - s.left = it.zone.x + 'px'; - s.top = it.zone.y + 'px'; + s.left = it.zone.x + 'px'; + s.top = it.zone.y + 'px'; s.width = it.zone.w + 'px'; - s.height = (it.zone.h - 2) + 'px'; // -2 para evitar overlap de bordes + s.height = (it.zone.h - 2) + 'px'; // Texto div.textContent = isReal ? it.label : ''; - // Estados semánticos - const value = this.value; - const selected = (value[L] !== undefined) && (value[L] === it.key) && isReal; - - const inFocusLevel = this.focused && (this.focusLevel === L); - const focusMatch = inFocusLevel && (this.focusPath[L] === it.key) && isReal; - - // Hover (mouse) - const isHover = (this.hover.level === L && this.hover.index === i && isReal); + // Estados + const selected = isReal && this.value[L] !== undefined && this.value[L] === it.key; + const inFocusLvl = this.focused && (this.focusLevel === L); + const focusMatch = isReal && inFocusLvl && (this.focusPath[L] === it.key); + const isHover = isReal && (this.hover.level === L && this.hover.index === i); // Estilos base s.background = cc.back; s.color = cc.text; s.border = '1px solid ' + cc.border; + s.textAlign = kind === 'map' ? 'center' : 'left'; - // Mapa = horizontal, Lista = vertical - if (kind === 'map') s.textAlign = 'center'; - else s.textAlign = 'left'; - - // Priorización visual: seleccionado > foco > hover > base + // Prioridad visual: seleccionado > foco > hover > base if (selected) { s.background = cc.select; s.color = cc.textSelect; @@ -8430,35 +8413,30 @@ s.background = cc.overoff; s.color = cc.textOver; } - // Deshabilitar DOM si no hay ítem real en filas de padding + + // Filas de padding invisibles en hoja s.opacity = isReal ? '1' : '0'; } - // =============== Ciclo de vida visual =============== - + // ======= Ciclo de vida ======= rSize() { - // Recalcula leafMax y niveles cada vez que cambia tamaño/datos this.leafMax = this.computeLeafMax(this.tree); this.buildLevels(); this.layoutLevels(); } update() { - // Redibuja cuando cambian estados de hover/focus/value externamente this.buildLevels(); this.layoutLevels(); } - // =============== Interacción (hit-testing y selección) =============== - - // Convierte coords globales a locales del control (igual que Proto) + // ======= Interacción ======= _toLocal(e) { const mx = e.clientX - this.zone.x; const my = e.clientY - this.zone.y; return { x: mx, y: my }; } - // Busca qué ítem (L,i) está bajo el mouse; respeta zonas por nivel _hitTest(mx, my) { for (let L = 0; L < this.levels.length; L++) { const lvl = this.levels[L]; @@ -8473,11 +8451,10 @@ } } } else { - // hoja: puede contener filas de padding const nRows = Math.max(lvl.items.length, this.leafMax); for (let i = 0; i < nRows; i++) { const isReal = i < lvl.items.length; - const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.hItem, w: z.w, h: this.hItem }; + const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.lineH, w: z.w, h: this.lineH }; if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { return { L, i, real: isReal }; } @@ -8490,12 +8467,11 @@ handleEvent(e) { if (this.lock) return false; - // Delega estados de hover / click if (e.type === 'mousemove') { const { x, y } = this._toLocal(e); const ht = this._hitTest(x, y); this.hover = (ht.L !== -1 && ht.real) ? { level: ht.L, index: ht.i } : { level: -1, index: -1 }; - this.update(); // repintar con hover + this.update(); return true; } @@ -8509,50 +8485,77 @@ } if (e.type === 'mouseup') { - // nada por ahora return true; } - // Soporte básico para teclado (opcional: Up/Down/Left/Right) - if (e.type === 'keydown') ; - + // (Opcional) teclado: integrar navegación en Gui y reenviar aquí si se desea return false; } - // Regla de selección y autocompletado + // Selección + autocompletado + notificación _selectAt(L, i) { const lvl = this.levels[L]; const chosen = lvl.items[i]; if (!chosen || !chosen.key) return; - // 1) Recortar value hasta L e insertar la opción elegida const base = this.value.slice(0, L); base[L] = chosen.key; - // 2) Autocompletar por primera clave descendiendo hasta una lista const newPath = this.autoCompleteToLeaf(base); - // 3) Notificar - this.value = newPath.slice(); // reflejar selección interna + this.value = newPath.slice(); this.update(); this.changeCb(this.tabIndex, this.itemIndex, newPath); } - // API pública para sincronización externa (por si quieres settear desde afuera) + // ======= API pública ======= setValue(path) { this.value = Array.isArray(path) ? path.slice() : []; this.update(); } + setTree(tree) { this.tree = tree || {}; + // recalcular leafMax en próxima pasada + this.leafMax = this.computeLeafMax(this.tree); this.update(); } + setFocus({ focused, focusPath, focusLevel }) { if (typeof focused === 'boolean') this.focused = focused; if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); if (typeof focusLevel === 'number') this.focusLevel = focusLevel; this.update(); } + + // ======= Publicación de altura ======= + _countVisibleIntermediates() { + let c = 0; + for (let i = 0; i < this.levels.length; i++) if (this.levels[i].type === 'map') c++; + return c; + } + + _getCurrentLeafLength() { + const last = this.levels[this.levels.length - 1]; + return last && last.type === 'list' ? last.items.length : 0; + } + + _publishHeight() { + const inter = this._countVisibleIntermediates(); + const leafLen = Math.max(this.leafMax, this._getCurrentLeafLength()); + const leafH = leafLen * this.lineH; + const interH = inter * (this.lineH + this.levelGap); + const totalH = interH + (inter ? this.levelGap : 0) + leafH; + + // Actualiza métricas del proto (lo que suma el GUI) + this.h = totalH; + this.zone.h = this.h + this.margin; + this.s[0].height = this.h + 'px'; + + // Avisar al GUI y refrescar zonas + if (this.isUI && this.main) this.main.calc(); + Roots.needReZone = true; + } } const add = function () { @@ -9451,4 +9454,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gUHJvcGllZGFkZXMgcMO6YmxpY2FzIGVzcGVyYWRhcyAoQVBJKVxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSksIG8uZm9jdXNlZCAoYm9vbCksXHJcbiAgICAvLyBvLmZvY3VzUGF0aCAoYXJyYXkpLCBvLmZvY3VzTGV2ZWwgKG51bWJlciksXHJcbiAgICAvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcbiAgICBvLnNlbGVjdGFibGUgPSB0cnVlOyAgICAgICAgICAgLy8gbmF2ZWdhYmxlIHBvciB0ZWNsYWRvIHNpIGFjdGl2YXMgZmxlY2hhc1xyXG4gICAgby5uYW1lID0gby5uYW1lIHx8ICdUcmVlTGlzdCc7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICAvLyBEYXRvcyAmIGVzdGFkb1xyXG4gICAgdGhpcy50cmVlICAgICAgID0gby50cmVlIHx8IHt9O1xyXG4gICAgdGhpcy52YWx1ZSAgICAgID0gQXJyYXkuaXNBcnJheShvLnZhbHVlKSA/IG8udmFsdWUuc2xpY2UoKSA6IFtdO1xyXG4gICAgdGhpcy5mb2N1c2VkICAgID0gISFvLmZvY3VzZWQ7XHJcbiAgICB0aGlzLmZvY3VzUGF0aCAgPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09ICdudW1iZXInID8gby5mb2N1c0xldmVsIDogLTE7XHJcblxyXG4gICAgdGhpcy50YWJJbmRleCAgID0gby50YWJJbmRleCA/PyBudWxsO1xyXG4gICAgdGhpcy5pdGVtSW5kZXggID0gby5pdGVtSW5kZXggPz8gbnVsbDtcclxuXHJcbiAgICAvLyBDYWxsYmFjayBkZSBub3RpZmljYWNpw7NuXHJcbiAgICB0aGlzLmNoYW5nZUNiICAgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoLyp0YWJJZHgsIGl0ZW1JZHgsIG5ld1BhdGgqLykgPT4ge307XHJcblxyXG4gICAgLy8gTGF5b3V0IGludGVybm9cclxuICAgIHRoaXMubGV2ZWxzID0gW107ICAgLy8gW3t0eXBlOidtYXAnfCdsaXN0JywgaXRlbXM6W3trZXksbGFiZWwsem9uZX1dLCB6b25lOnt4LHksdyxofX0uLi5dXHJcbiAgICB0aGlzLmxlYWZNYXggPSAwOyAgIC8vIGFsdG8gcmVzZXJ2YWRvIHBhcmEgZWwgw7psdGltbyBuaXZlbCAobcOheGltbyB0YW1hw7FvIGRlIGhvamEpXHJcbiAgICB0aGlzLmxldmVsR2FwID0gMjsgIC8vIGdhcCB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmhJdGVtICAgID0gdGhpcy5oOyAgLy8gYWx0byBwb3Igw610ZW1cclxuXHJcbiAgICAvLyBIb3ZlciAvIGZvY28gZGUgbW91c2VcclxuICAgIHRoaXMuaG92ZXIgPSB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblxyXG4gICAgLy8gRE9NIHZpc3VhbCAoc2luIGxpc3RlbmVycyBkaXJlY3RvczsgbG9zIGV2ZW50b3MgbGxlZ2FuIHbDrWEgUm9vdHMtPmhhbmRsZUV2ZW50KVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpOyAvLyBjb250YWluZXIgaW50ZXJub1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIC8vIEluaWNpYWxpemEgbm9kb3MgdmlzdWFsZXMgZGUgZm9ybWEgcGVyZXpvc2EgZW4gclNpemUoKVxyXG4gICAgdGhpcy5pdGVtc0RvbSA9IFtdOyAvLyBtaXJyb3IgZGUgdGhpcy5sZXZlbHMgKG1hdHJpeiBkZSBub2RvcylcclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PSBIZWxwZXJzIGRlIGRhdG9zID09PT09PT09PT09PT09PVxyXG5cclxuICBzdGF0aWMgaXNNYXAobm9kZSkgIHsgcmV0dXJuIG5vZGUgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG5vZGUpOyB9XHJcbiAgc3RhdGljIGlzTGlzdChub2RlKSB7IHJldHVybiBBcnJheS5pc0FycmF5KG5vZGUpOyB9XHJcblxyXG4gIC8vIERldnVlbHZlIGVsIHN1Ym5vZG8gYWwgc2VndWlyIHBhdGggKHNlIGRldGllbmUgc2kgbm8gZXhpc3RlKVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gQWwgbGxlZ2FyIGEgbGlzdGEsIHlhIG5vIGhheSBtw6FzIGRlc2NlbmRlbmNpYSB2w6FsaWRhIHBhcmEgY2xhdmVzXHJcbiAgICAgICAgaWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTsgXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGEgZGVzY2VuZGllbmRvIHBvciBsYSBwcmltZXJhIGNsYXZlIGRlIGNhZGEgbWFwYSBoYXN0YSBhbGNhbnphciB1bmEgbGlzdGFcclxuICBhdXRvQ29tcGxldGVUb0xlYWYoYmFzZVBhdGgpIHtcclxuICAgIGxldCBub2RlSW5mbyA9IHRoaXMuZ2V0Tm9kZUF0UGF0aChiYXNlUGF0aCk7XHJcbiAgICBsZXQgbm9kZSA9IG5vZGVJbmZvLm5vZGU7XHJcbiAgICBjb25zdCBwYXRoID0gYmFzZVBhdGguc2xpY2UoKTtcclxuXHJcbiAgICB3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhazsgLy8gbWFwYSB2YWPDrW9cclxuICAgICAgY29uc3QgazAgPSBrZXlzWzBdO1xyXG4gICAgICBwYXRoLnB1c2goazApO1xyXG4gICAgICBub2RlID0gbm9kZVtrMF07XHJcbiAgICB9XHJcbiAgICAvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2Egc2VsZWNjacOzbiBmaW5hbCBkZSBlbGVtZW50byBob2phXHJcbiAgICByZXR1cm4gcGF0aDtcclxuICB9XHJcblxyXG4gIC8vIFJ1dGEgYWN0aXZhIHBhcmEgY29uc3RydWlyIG5pdmVsZXMgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaSBubyB2YWx1ZSlcclxuICBnZXRBY3RpdmVQYXRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCA/IHRoaXMuZm9jdXNQYXRoIDogdGhpcy52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIENhbGN1bGEgZWwgbcOheGltbyB0YW1hw7FvIGRlIGhvamEgZGVsIMOhcmJvbCAocGFyYSByZXNlcnZhciBhbHRvIGVzdGFibGUpXHJcbiAgY29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG4gICAgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkgcmV0dXJuIG5vZGUubGVuZ3RoO1xyXG4gICAgaWYgKCFUcmVlTGlzdC5pc01hcChub2RlKSkgcmV0dXJuIDA7XHJcbiAgICBsZXQgbSA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcclxuICAgICAgbSA9IE1hdGgubWF4KG0sIHRoaXMuY29tcHV0ZUxlYWZNYXgobm9kZVtrXSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG07XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PT09PT09PT09XHJcblxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gT3BjaW9uZXMgPSBjbGF2ZXMgZGVsIG1hcGEgKG5pdmVsIGludGVybWVkaW8pXHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICAgIGlmICgha2V5cy5sZW5ndGgpIGJyZWFrOyAvLyBkZXRlbmVyIGV4cGFuc2nDs24gc2kgdmFjw61vXHJcbiAgICAgICAgdGhpcy5sZXZlbHMucHVzaCh7IHR5cGU6ICdtYXAnLCBpdGVtczoga2V5cy5tYXAoayA9PiAoeyBrZXk6IGssIGxhYmVsOiBrLCB6b25lOiB7eDowLHk6MCx3OjAsaDowfSB9KSksIHpvbmU6IHt4OjAseTowLHc6MCxoOnRoaXMuaEl0ZW19IH0pO1xyXG5cclxuICAgICAgICAvLyBBdmFuemEgc2Vnw7puIGxhIHJ1dGEgYWN0aXZhIChzaSBleGlzdGUpLCBzaW5vIHNlIGRldGllbmVcclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyDDmmx0aW1vIG5pdmVsOiBsaXN0YS9ob2phICh2ZXJ0aWNhbClcclxuICAgICAgICBjb25zdCBpdGVtcyA9IG5vZGUubWFwKGxhYmVsID0+ICh7IGtleTogbGFiZWwsIGxhYmVsLCB6b25lOiB7eDowLHk6MCx3OjAsaDowfSB9KSk7XHJcbiAgICAgICAgdGhpcy5sZXZlbHMucHVzaCh7IHR5cGU6ICdsaXN0JywgaXRlbXMsIHpvbmU6IHt4OjAseTowLHc6MCxoOiBNYXRoLm1heChpdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCkgKiB0aGlzLmhJdGVtIH0gfSk7XHJcbiAgICAgICAgYnJlYWs7IC8vIGZpblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrOyAvLyBub2RvIGludsOhbGlkb1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT0gTGF5b3V0ICh6b25hcyBpbnRlcm5hcykgPT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIENhbGN1bGEgem9uYXMgaW50ZXJuYXMgZGUgY2FkYSDDrXRlbS9sZXZlbCB5IGNvbnN0cnV5ZS9hY3R1YWxpemEgZG9tXHJcbiAgbGF5b3V0TGV2ZWxzKCkge1xyXG4gICAgY29uc3QgcGFkWCA9IDg7XHJcbiAgICBjb25zdCB3ID0gdGhpcy56b25lLncgLSBwYWRYICogMjtcclxuICAgIGxldCB5ID0gMDtcclxuXHJcbiAgICAvLyBBc2VndXJhIGBpdGVtc0RvbWAgYW5pZGFkbyBwb3Igbml2ZWxcclxuICAgIHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkgdGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuICAgIC8vIExpbXBpYSBleHRyYSBET00gc2kgbml2ZWxlcyBkaXNtaW51eWVuXHJcbiAgICBmb3IgKGxldCBMID0gdGhpcy5sZXZlbHMubGVuZ3RoOyBMIDwgdGhpcy5pdGVtc0RvbS5sZW5ndGg7IEwrKykge1xyXG4gICAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuaXRlbXNEb21bTF0pIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuICAgIGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuICAgICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICAgIGlmIChsdmwudHlwZSA9PT0gJ21hcCcpIHtcclxuICAgICAgICBjb25zdCBuID0gTWF0aC5tYXgoMSwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgY2VsbFcgPSBNYXRoLmZsb29yKHcgLyBuKTtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogdGhpcy5oSXRlbSB9O1xyXG4gICAgICAgIGxldCB4ID0gcGFkWDtcclxuICAgICAgICAvLyBBc2VndXJhIGNvbnRlbmVkb3IgZG9tIGRlIG5pdmVsIHNpIHF1ZXLDqXMgdW5vIChvcGNpb25hbClcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5oSXRlbSB9O1xyXG5cclxuICAgICAgICAgIC8vIGNyZWEvYWN0dWFsaXphIG5vZG8gdmlzdWFsXHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbWFwJyk7XHJcblxyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgeSArPSB0aGlzLmhJdGVtICsgdGhpcy5sZXZlbEdhcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsaXN0YS9ob2phIHZlcnRpY2FsXHJcbiAgICAgICAgY29uc3QgbiA9IGx2bC5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpICogdGhpcy5oSXRlbTtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogaExpc3QgfTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpOyBpKyspIHtcclxuICAgICAgICAgIC8vIFB1ZWRlIGhhYmVyIFwiZXNwYWNpbyB2YWPDrW9cIiBzaSBuIDwgbGVhZk1heFxyXG4gICAgICAgICAgY29uc3QgaXNSZWFsID0gaSA8IG47XHJcbiAgICAgICAgICBjb25zdCBpdCA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXSA6IHsga2V5OiBudWxsLCBsYWJlbDogJycsIHpvbmU6IHt4OjAseTowLHc6MCxoOjB9IH07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4OiBwYWRYLCB5OiB5ICsgaSAqIHRoaXMuaEl0ZW0sIHcsIGg6IHRoaXMuaEl0ZW0gfTtcclxuXHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbGlzdCcsIGlzUmVhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHkgKz0gaExpc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBanVzdGEgYWx0byB2aXNpYmxlIGRlbCBjb250cm9sXHJcbiAgICBjb25zdCB0b3RhbEggPSB5O1xyXG4gICAgdGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjsgLy8gUHJvdG8gc2UgZW5jYXJnYSBkZWwgbWFyZ2VuXHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy56b25lLmggKyAncHgnO1xyXG4gICAgdGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArICdweCc7XHJcbiAgfVxyXG5cclxuICBlbnN1cmVJdGVtRG9tKEwsIGkpIHtcclxuICAgIGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcbiAgICB3aGlsZSAocm93Lmxlbmd0aCA8PSBpKSByb3cucHVzaChudWxsKTtcclxuICAgIGlmICghcm93W2ldKSB7XHJcbiAgICAgIC8vIENhZGEgw610ZW0gZXMgdW4gRElWIHBvc2ljaW9uYWRvIGFic29sdXRvIGRlbnRybyBkZSB0aGlzLmNbMl1cclxuICAgICAgY29uc3QgZGl2ID0gdGhpcy5kb20oJ2RpdicsIFRvb2xzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7Jyk7XHJcbiAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgICByb3dbaV0gPSBkaXY7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93W2ldO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29sb3JlYSB5IHBvc2ljaW9uYSBlbCBET00gZGVsIMOtdGVtIHNlZ8O6biBlc3RhZG9zIChzZWxlY2Npb25hZG8gLyBmb2NvKVxyXG4gIHBhaW50SXRlbURvbShkaXYsIEwsIGksIGl0LCBraW5kLCBpc1JlYWwgPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzID0gZGl2LnN0eWxlO1xyXG4gICAgY29uc3QgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAvLyBQb3NpY2nDs25cclxuICAgIHMubGVmdCA9IGl0LnpvbmUueCArICdweCc7XHJcbiAgICBzLnRvcCAgPSBpdC56b25lLnkgKyAncHgnO1xyXG4gICAgcy53aWR0aCAgPSBpdC56b25lLncgKyAncHgnO1xyXG4gICAgcy5oZWlnaHQgPSAoaXQuem9uZS5oIC0gMikgKyAncHgnOyAgLy8gLTIgcGFyYSBldml0YXIgb3ZlcmxhcCBkZSBib3JkZXNcclxuXHJcbiAgICAvLyBUZXh0b1xyXG4gICAgZGl2LnRleHRDb250ZW50ID0gaXNSZWFsID8gaXQubGFiZWwgOiAnJztcclxuXHJcbiAgICAvLyBFc3RhZG9zIHNlbcOhbnRpY29zXHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9ICh2YWx1ZVtMXSAhPT0gdW5kZWZpbmVkKSAmJiAodmFsdWVbTF0gPT09IGl0LmtleSkgJiYgaXNSZWFsO1xyXG5cclxuICAgIGNvbnN0IGluRm9jdXNMZXZlbCA9IHRoaXMuZm9jdXNlZCAmJiAodGhpcy5mb2N1c0xldmVsID09PSBMKTtcclxuICAgIGNvbnN0IGZvY3VzTWF0Y2ggICA9IGluRm9jdXNMZXZlbCAmJiAodGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleSkgJiYgaXNSZWFsO1xyXG5cclxuICAgIC8vIEhvdmVyIChtb3VzZSlcclxuICAgIGNvbnN0IGlzSG92ZXIgPSAodGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJiB0aGlzLmhvdmVyLmluZGV4ID09PSBpICYmIGlzUmVhbCk7XHJcblxyXG4gICAgLy8gRXN0aWxvcyBiYXNlXHJcbiAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgcy5jb2xvciAgICAgID0gY2MudGV4dDtcclxuICAgIHMuYm9yZGVyICAgICA9ICcxcHggc29saWQgJyArIGNjLmJvcmRlcjtcclxuXHJcbiAgICAvLyBNYXBhID0gaG9yaXpvbnRhbCwgTGlzdGEgPSB2ZXJ0aWNhbFxyXG4gICAgaWYgKGtpbmQgPT09ICdtYXAnKSBzLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgZWxzZSBzLnRleHRBbGlnbiA9ICdsZWZ0JztcclxuXHJcbiAgICAvLyBQcmlvcml6YWNpw7NuIHZpc3VhbDogc2VsZWNjaW9uYWRvID4gZm9jbyA+IGhvdmVyID4gYmFzZVxyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICB9IGVsc2UgaWYgKGZvY3VzTWF0Y2gpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH0gZWxzZSBpZiAoaXNIb3Zlcikge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICB9XHJcbiAgICAvLyBEZXNoYWJpbGl0YXIgRE9NIHNpIG5vIGhheSDDrXRlbSByZWFsIGVuIGZpbGFzIGRlIHBhZGRpbmdcclxuICAgIHMub3BhY2l0eSA9IGlzUmVhbCA/ICcxJyA6ICcwJztcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PSBDaWNsbyBkZSB2aWRhIHZpc3VhbCA9PT09PT09PT09PT09PT1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICAvLyBSZWNhbGN1bGEgbGVhZk1heCB5IG5pdmVsZXMgY2FkYSB2ZXogcXVlIGNhbWJpYSB0YW1hw7FvL2RhdG9zXHJcbiAgICB0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcbiAgICB0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcbiAgICB0aGlzLmxheW91dExldmVscygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgLy8gUmVkaWJ1amEgY3VhbmRvIGNhbWJpYW4gZXN0YWRvcyBkZSBob3Zlci9mb2N1cy92YWx1ZSBleHRlcm5hbWVudGVcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT0gSW50ZXJhY2Npw7NuIChoaXQtdGVzdGluZyB5IHNlbGVjY2nDs24pID09PT09PT09PT09PT09PVxyXG5cclxuICAvLyBDb252aWVydGUgY29vcmRzIGdsb2JhbGVzIGEgbG9jYWxlcyBkZWwgY29udHJvbCAoaWd1YWwgcXVlIFByb3RvKVxyXG4gIF90b0xvY2FsKGUpIHtcclxuICAgIGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICBjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG4gICAgcmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcbiAgfVxyXG5cclxuICAvLyBCdXNjYSBxdcOpIMOtdGVtIChMLGkpIGVzdMOhIGJham8gZWwgbW91c2U7IHJlc3BldGEgem9uYXMgcG9yIG5pdmVsXHJcbiAgX2hpdFRlc3QobXgsIG15KSB7XHJcbiAgICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgICBjb25zdCB6ID0gbHZsLnpvbmU7XHJcbiAgICAgIGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaCkgY29udGludWU7XHJcblxyXG4gICAgICBpZiAobHZsLnR5cGUgPT09ICdtYXAnKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGx2bC5pdGVtc1tpXS56b25lO1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiB0cnVlIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGhvamE6IHB1ZWRlIGNvbnRlbmVyIGZpbGFzIGRlIHBhZGRpbmdcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmhJdGVtLCB3OiB6LncsIGg6IHRoaXMuaEl0ZW0gfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgLy8gRGVsZWdhIGVzdGFkb3MgZGUgaG92ZXIgLyBjbGlja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpOyAvLyByZXBpbnRhciBjb24gaG92ZXJcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlZG93bicpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIGlmIChodC5MICE9PSAtMSAmJiBodC5yZWFsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0QXQoaHQuTCwgaHQuaSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2V1cCcpIHtcclxuICAgICAgLy8gbmFkYSBwb3IgYWhvcmFcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU29wb3J0ZSBiw6FzaWNvIHBhcmEgdGVjbGFkbyAob3BjaW9uYWw6IFVwL0Rvd24vTGVmdC9SaWdodClcclxuICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJykge1xyXG4gICAgICAvLyBQdWVkZXMgaW50ZWdyYXIgbmF2ZWdhY2nDs24gZGUgZmxlY2hhcyBhcXXDrSBzaSBsbyBkZXNlYXMsXHJcbiAgICAgIC8vIHJldXRpbGl6YW5kbyB0aGlzLmlzU2VsZWN0YWJsZSAoeWEgbWFyY2FkYSBlbiBjdG9yKS5cclxuICAgICAgLy8gUmVjb21lbmRhY2nDs246IG1vdmVyIGZvY28gZW50cmUgbml2ZWxlcy/DrXRlbXMgY29uIFJvb3RzK0d1aS4gOmNvbnRlbnRSZWZlcmVuY2Vbb2FpY2l0ZToxXXtpbmRleD0xfSA6Y29udGVudFJlZmVyZW5jZVtvYWljaXRlOjJde2luZGV4PTJ9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gUmVnbGEgZGUgc2VsZWNjacOzbiB5IGF1dG9jb21wbGV0YWRvXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICAvLyAxKSBSZWNvcnRhciB2YWx1ZSBoYXN0YSBMIGUgaW5zZXJ0YXIgbGEgb3BjacOzbiBlbGVnaWRhXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIC8vIDIpIEF1dG9jb21wbGV0YXIgcG9yIHByaW1lcmEgY2xhdmUgZGVzY2VuZGllbmRvIGhhc3RhIHVuYSBsaXN0YVxyXG4gICAgY29uc3QgbmV3UGF0aCA9IHRoaXMuYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2UpO1xyXG5cclxuICAgIC8vIDMpIE5vdGlmaWNhclxyXG4gICAgdGhpcy52YWx1ZSA9IG5ld1BhdGguc2xpY2UoKTsgLy8gcmVmbGVqYXIgc2VsZWNjacOzbiBpbnRlcm5hXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcbiAgfVxyXG5cclxuICAvLyBBUEkgcMO6YmxpY2EgcGFyYSBzaW5jcm9uaXphY2nDs24gZXh0ZXJuYSAocG9yIHNpIHF1aWVyZXMgc2V0dGVhciBkZXNkZSBhZnVlcmEpXHJcbiAgc2V0VmFsdWUocGF0aCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG4gIHNldFRyZWUodHJlZSkge1xyXG4gICAgdGhpcy50cmVlID0gdHJlZSB8fCB7fTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0VBQUE7RUFDQTtFQUNBO0FBQ0E7QUFDWSxRQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLE1BQU0sQ0FBQyxHQUFHO0VBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0VBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0VBQ0EsRUFBRSxFQUFFLEVBQUUsSUFBSTtFQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUs7RUFDYixFQUFFLEtBQUssRUFBRSxLQUFLO0VBQ2QsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7RUFDQSxFQUFFLFVBQVUsRUFBRSxJQUFJO0VBQ2xCLEVBQUUsVUFBVSxFQUFFLEtBQUs7RUFDbkIsRUFBRSxTQUFTLEVBQUUsS0FBSztFQUNsQixFQUFFLFlBQVksRUFBRSxLQUFLO0VBQ3JCLEVBQUUsT0FBTyxFQUFFLEtBQUs7RUFDaEIsRUFBRSxvQkFBb0IsRUFBRSxJQUFJO0FBQzVCO0VBQ0EsRUFBRSxRQUFRLEVBQUUsQ0FBQztFQUNiLEVBQUUsUUFBUSxFQUFFLENBQUM7QUFDYjtFQUNBO0VBQ0EsRUFBRSxXQUFXLEVBQUUsQ0FBQyxhQUFhLENBQUM7RUFDOUIsRUFBRSxZQUFZLEVBQUUsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQztFQUMzRCxFQUFFLFFBQVEsRUFBRSxDQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDO0FBQzNEO0VBQ0EsRUFBRSxhQUFhLEVBQUUsSUFBSTtFQUNyQixFQUFFLE9BQU8sRUFBRSxJQUFJO0VBQ2YsRUFBRSxRQUFRLEVBQUUsSUFBSTtBQUNoQjtFQUNBLEVBQUUsU0FBUyxFQUFFLE1BQU07QUFDbkI7RUFDQSxFQUFFLEtBQUssRUFBRSxJQUFJO0VBQ2IsRUFBRSxNQUFNLEVBQUUsSUFBSTtFQUNkLEVBQUUsVUFBVSxFQUFFLElBQUk7QUFDbEI7RUFDQSxFQUFFLFdBQVcsRUFBRSxJQUFJO0VBQ25CLEVBQUUsV0FBVyxFQUFFLElBQUk7RUFDbkIsRUFBRSxRQUFRLEVBQUUsS0FBSztFQUNqQixFQUFFLFVBQVUsRUFBRSxLQUFLO0VBQ25CLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwQixFQUFFLFFBQVEsRUFBRSxDQUFDO0VBQ2IsRUFBRSxHQUFHLEVBQUUsRUFBRTtFQUNULEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDUixFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7RUFDWixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDWDtFQUNBLEVBQUUsVUFBVSxFQUFFLEtBQUs7QUFDbkI7RUFDQSxFQUFFLE1BQU0sRUFBRSxLQUFLO0VBQ2YsRUFBRSxPQUFPLEVBQUUsRUFBRTtBQUNiO0VBQ0EsRUFBRSxDQUFDLEVBQUU7RUFDTCxJQUFJLElBQUksRUFBRSxJQUFJO0VBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLElBQUksT0FBTyxFQUFFLENBQUM7RUFDZCxJQUFJLE9BQU8sRUFBRSxHQUFHO0VBQ2hCLElBQUksR0FBRyxFQUFFLElBQUk7RUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO0VBQ1osR0FBRztBQUNIO0VBQ0EsRUFBRSxRQUFRLEVBQUUsS0FBSztBQUNqQjtFQUNBLEVBQUUsR0FBRyxFQUFFLElBQUk7RUFDWCxFQUFFLFdBQVcsRUFBRSxLQUFLO0FBQ3BCO0VBQ0EsRUFBRSxPQUFPLEVBQUUsWUFBWTtFQUN2QixJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUc7RUFDbkQsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0VBQzlDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNqQixHQUFHO0FBQ0g7RUFDQSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtFQUNwQjtFQUNBLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDakIsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDeEMsR0FBRztBQUNIO0VBQ0EsRUFBRSxVQUFVLEVBQUUsWUFBWTtFQUMxQixJQUFJLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7RUFDaEMsSUFBSTtFQUNKLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7RUFDekIsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztFQUN2QixNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0VBQ3hCLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7RUFDdEIsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztFQUN0QixNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO0VBQzVCLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztFQUMvQjtFQUNBLE1BQU0sT0FBTyxJQUFJLENBQUM7RUFDbEIsU0FBUyxPQUFPLEtBQUssQ0FBQztFQUN0QixHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtFQUN2QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtFQUNsQixNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDeEIsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDeEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtFQUMzQixNQUFNLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztFQUN2QixLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLFVBQVUsRUFBRSxZQUFZO0VBQzFCLElBQUksSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLE9BQU87QUFDL0I7RUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDNUI7RUFDQSxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0VBQ2hDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0VBQ3JCLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztFQUMzRCxLQUFLLE1BQU07RUFDWCxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztFQUNyQyxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLEdBQUcsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7RUFDcEUsSUFBSSxJQUFJLENBQUMsQ0FBQyxvQkFBb0IsRUFBRTtFQUNoQyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDL0MsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzlDO0FBQ0E7RUFDQSxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDN0MsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzdDLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQztFQUNBLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7RUFDaEQsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztFQUM5QyxLQUFLO0VBQ0wsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkQ7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0VBQzFCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEIsR0FBRztBQUNIO0VBQ0EsRUFBRSxZQUFZLEVBQUUsWUFBWTtFQUM1QixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLE9BQU87QUFDaEM7RUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDNUI7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0VBQ3JCLE1BQU0sR0FBRyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztFQUMxQyxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLG9CQUFvQixFQUFFO0VBQ2hDLE1BQU0sR0FBRyxDQUFDLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNsRCxNQUFNLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDakQ7QUFDQTtFQUNBLE1BQU0sR0FBRyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNoRCxNQUFNLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDaEQsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlDO0VBQ0EsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzVDLE1BQU0sR0FBRyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztFQUMxQyxLQUFLO0VBQ0wsSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuRDtFQUNBLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7RUFDM0IsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLEVBQUUsWUFBWTtFQUN0QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTTtFQUN2QixNQUFNLENBQUMsQ0FBQztBQUNSO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0VBQy9ELEtBQUs7QUFDTDtFQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztFQUN6QixHQUFHO0FBQ0g7RUFDQSxFQUFFLEdBQUcsRUFBRSxZQUFZO0VBQ25CLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUM3QixJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztFQUNuQixHQUFHO0FBQ0g7RUFDQSxFQUFFLEVBQUUsRUFBRSxZQUFZO0VBQ2xCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztFQUM1QjtFQUNBLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxNQUFNLEVBQUUsWUFBWTtFQUN0QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztFQUM1QyxHQUFHO0FBQ0g7RUFDQSxFQUFFLFdBQVcsRUFBRSxVQUFVLEtBQUssRUFBRTtFQUNoQztFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN6RTtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNqQztFQUNBLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEIsSUFBSSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdEI7RUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUNuRCxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQztFQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNwRSxTQUFTLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCO0VBQ0EsSUFBSSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0FBQ2xDO0VBQ0EsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDO0VBQ3ZFLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQztBQUN2RTtFQUNBLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtFQUMvQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDbkIsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztFQUN6QixLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDeEQ7RUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxhQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7RUFDM0QsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0VBQ3ZELElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRTtFQUN0QyxNQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtFQUNyQjtFQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7RUFDMUIsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDbkIsT0FBTztFQUNQLE1BQU0sQ0FBQyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7RUFDM0IsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7RUFDaEMsTUFBTSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUMzQixNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUN6QztFQUNBO0VBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUU7RUFDdEIsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7RUFDdEIsUUFBUSxPQUFPLEtBQUssQ0FBQztFQUNyQixPQUFPO0FBQ1A7RUFDQSxNQUFNLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztFQUM5QixNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0VBQzFCLEtBQUs7QUFDTDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMvQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQzlDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUM3QztFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxRCxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7RUFDdkIsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFO0VBQzdCLFFBQVEsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7RUFDakMsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUNqQyxPQUFPO0FBQ1A7RUFDQTtBQUNBO0VBQ0EsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDM0QsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDOUIsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtFQUN2QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTTtFQUN2QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUM7RUFDZixNQUFNLENBQUM7RUFDUCxNQUFNLENBQUM7RUFDUCxNQUFNLENBQUMsQ0FBQztBQUNSO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEI7RUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRTtFQUMxQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUN0QixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUN0QixPQUFPLE1BQU07RUFDYixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO0VBQ3RCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7RUFDdEIsT0FBTztBQUNQO0VBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtFQUM3QixRQUFRLElBQUksR0FBRyxDQUFDLENBQUM7QUFDakI7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUU7RUFDaEMsVUFBVSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDekIsVUFBVSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUMzQixVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ25CLFNBQVM7RUFDVCxRQUFRLE1BQU07RUFDZCxPQUFPO0VBQ1AsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDcEMsR0FBRztBQUNIO0VBQ0EsRUFBRSxVQUFVLEVBQUUsWUFBWTtFQUMxQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU87RUFDdEIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ25CLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNqQixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ2hCLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ2YsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxLQUFLLEtBQUs7RUFDN0M7QUFDQTtFQUNBLElBQU8sSUFBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztFQUN2QixNQUFNLENBQUMsQ0FBQztFQUNSLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNiLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLE1BQU0sRUFBRSxDQUFDO0VBQ1QsTUFBTSxDQUFDLENBQUMsQ0FDRTtBQUNWO0VBQ0EsSUFBSSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkI7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDaEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2pCLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVjtFQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzQztFQUNBLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7RUFDbkI7QUFDQTtFQUNBLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtFQUN4QixRQUFRLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEM7RUFDQSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQy9CLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3RCO0FBQ0E7RUFDQSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNCLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDcEMsYUFBYSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUU7RUFDMUIsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDeEI7RUFDQSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDakIsU0FBUztFQUNULE9BQU8sTUFBTTtFQUNiLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNmO0VBQ0EsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDakMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDdEIsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEI7RUFDQSxRQUFRLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMxQixPQUFPO0VBQ1AsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQztFQUNsQixHQUFHO0FBQ0g7RUFDQSxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDaEMsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQ3ZCO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ2hCLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztFQUMzRCxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsUUFBUSxFQUFFLFVBQVUsS0FBSyxFQUFFO0VBQzdCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTztBQUN4QztFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNO0VBQ3ZCLE1BQU0sQ0FBQyxDQUFDO0FBQ1I7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQixNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkIsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQy9CLEtBQUs7QUFDTDtFQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7RUFDekIsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixJQUFJLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ3pEO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQ25CLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQ7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDbEMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCO0VBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRTtFQUN6QjtFQUNBLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDO0FBQ2xDO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsR0FBRztBQUNIO0VBQ0EsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7RUFDeEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTztFQUMvQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQy9DO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM5RDtFQUNBO0VBQ0EsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLE1BQU0sRUFBRSxVQUFVLElBQUksRUFBRTtFQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQztFQUNoQyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUU7RUFDOUIsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ3hDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7RUFDekIsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7RUFDdEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7QUFDaEU7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtFQUNyQyxNQUFNLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7RUFDOUIsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUN2QixLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUUsT0FBTztBQUNuQztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSTtFQUNkLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsWUFBWTtFQUN6QyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQ3pCLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNiO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0VBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDeEU7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ3REO0VBQ0EsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ3pCO0VBQ0EsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsRTtFQUNBLElBQUksSUFBSSxHQUFHO0VBQ1gsTUFBTSxpREFBaUQ7RUFDdkQsTUFBTSxDQUFDO0VBQ1AsTUFBTSxZQUFZO0VBQ2xCLE1BQU0sQ0FBQztFQUNQLE1BQU0sb0ZBQW9GO0VBQzFGLE1BQU0sVUFBVTtFQUNoQixNQUFNLHdCQUF3QixDQUFDO0FBQy9CO0VBQ0EsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLFlBQVk7RUFDN0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQztFQUNBLE1BQU0sSUFBSSxTQUFTLEVBQUU7RUFDckIsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDM0IsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDNUIsT0FBTyxNQUFNO0VBQ2IsUUFBUSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ2xDLE9BQU87RUFDUCxNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQztFQUNBLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ2pCLEtBQUssQ0FBQztBQUNOO0VBQ0EsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLG1DQUFtQyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzVFO0VBQ0EsSUFBSSxHQUFHLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN6QixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0VBQzFCLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxTQUFTLEVBQUUsWUFBWTtFQUN6QixJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7RUFDaEM7RUFDQTtFQUNBO0FBQ0E7RUFDQSxNQUFNLENBQUMsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztFQUN0RCxNQUFNLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztFQUNsQztBQUNBO0VBQ0EsTUFBTSxDQUFDLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDcEQ7QUFDQTtFQUNBLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQy9DLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQy9DLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsc0JBQXNCLENBQUM7RUFDMUQsSUFBSSxJQUFJLEdBQUc7RUFDWCxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVM7RUFDNUIsTUFBTSx1RkFBdUY7RUFDN0YsTUFBTSxJQUFJLENBQUM7RUFDWCxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU87RUFDL0IsTUFBTSxHQUFHLEdBQUcsY0FBYyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLHFCQUFxQixDQUFDLENBQUM7RUFDekUsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLGNBQWMsQ0FBQztBQUN2RDtFQUNBLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztFQUMzRCxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDaEMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3BDO0VBQ0EsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztFQUN0QixHQUFHO0FBQ0g7RUFDQSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsRUFBRTtFQUM1QixJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsT0FBTztFQUN2QyxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0VBQ3ZCLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0VBQ3pCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNO0VBQ3hCLE1BQU0sQ0FBQyxHQUFHLENBQUM7RUFDWCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDakMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTTtFQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ1YsS0FBSztFQUNMLElBQUksT0FBTyxDQUFDLENBQUM7RUFDYixHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUU7RUFDOUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ3hDO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDbkI7RUFDQSxJQUFJLElBQUksSUFBSSxFQUFFO0VBQ2QsTUFBTSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNuQjtFQUNBLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQzNCLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7RUFDdEIsUUFBUSxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztFQUN4QixRQUFRLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUM1QyxPQUFPLE1BQU07RUFDYixRQUFRLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMvQztFQUNBLFFBQVEsSUFBSSxXQUFXLEVBQUU7RUFDekIsVUFBVSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDckUsZUFBZSxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDbEQsU0FBUztFQUNULE9BQU87QUFDUDtFQUNBLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztFQUNoQixLQUFLLE1BQU07RUFDWCxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRTtFQUMzQixRQUFRLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzFCLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkQsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JELFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QjtFQUNBLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNsQixPQUFPO0VBQ1AsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDN0I7RUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsR0FBRztBQUNIO0VBQ0EsRUFBRSxTQUFTLEVBQUUsWUFBWTtFQUN6QixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU87QUFDMUI7RUFDQSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7RUFDaEMsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDckMsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztFQUN0QixJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDMUIsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ25ELElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqRCxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztFQUNyQixHQUFHO0FBQ0g7RUFDQSxFQUFFLFlBQVksRUFBRSxZQUFZO0VBQzVCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7RUFDeEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRTtFQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztFQUN0RCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsRUFBRSxVQUFVLElBQUksRUFBRTtFQUM3QixJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7RUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7RUFDeEMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7RUFDbkMsSUFBSSxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0VBQ3JDLEdBQUc7QUFDSDtFQUNBLEVBQUUsVUFBVSxFQUFFLFlBQVk7RUFDMUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLE9BQU87RUFDbEMsSUFBSSxJQUFJLENB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QUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7RUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztFQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0VBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7RUFDakUsWUFBWSxDQUFDLElBQUks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QUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7RUFDcEosUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDcEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNySDtFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUs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QUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pIO0VBQ0E7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7RUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtFQUNBO0FBQ0E7RUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtFQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7RUFDQSxTQUFTLE1BQU07RUFDZjtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMs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Q0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0VBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtFQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9B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LENBQUMsTUFBTTtFQUM3QixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtFQUM1QixVQUFVLEtBQUssQ0FBQyxNQUFNO0VBQ3RCLEtBQUssQ0FBQztBQUNOO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzNDO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7RUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7RUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0VBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztFQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDckMsSUFBSSxJ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QUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDekMsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksR0FBRztFQUNULElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDckM7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUM1RDtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtFQUN6QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0VBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztFQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0VBQ2hDLEtBQUssTUFBTTtFQUNY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Q0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RSxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtFQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7RUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hELEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztFQUNB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LElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBRztFQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0VBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtFQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFB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QUMsR0FBRyxHQUFHLEdBQUU7RUFDckIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUU7QUFDdEI7RUFDQSxRQUFRLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2xDO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztFQUNBLFlBQVksR0FBRyxHQUFHLE1BQUs7RUFDdkIsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxLQUFJO0FBQy9FO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFFO0VBQ2xNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTTtFQUN0RSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUk7RUFDbkUsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7RUFDQSxTQUFTO0FBQ1Q7QUFDQTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDdEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0VBQ3JELFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFFO0VBQ3BFLFNBQVM7RUFDVDtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssR0FBRztBQUNaO0VBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUU7RUFDeEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFL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QyxDQUFDLENBQUMsS0FBSyxFQUFDO0FBQ3ZDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7RUFDckIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0VBQ2xEO0VBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0VBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztFQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNwUE8sTUFBTSxRQUFRLFNB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QUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztFQUN2QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VB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QyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDbkM7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3RCO0VBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQzdDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0M7QUFDQTtBQUNBO0VBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7RUFDbEMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUM7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQzVCLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQzNCLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUN6QjtFQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFB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QUksQ0FBQyxNQUFNLEVBQUU7QUFDdkI7RUFDQSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtFQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7RUFDOUIsUUFBUTtBQUNSO0VBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7RUFDQSxTQUFTLE1BQU07QUFDZjtFQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7RUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0VBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDckM7RUFDQSxTQUFTLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUMvRCxTQUFTLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQ2hELFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRTtFQUM3QixTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDbEMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEMsU0FBUyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztFQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHO0VBQ3hCLE9BQU8sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztFQUN2QyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDeEMsZUFBZSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztFQUNuRDtFQUNBLE9BQU8sR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7RUFDQSxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDeEQsT0FBTyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQy9DLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3ZDLE9BQU87QUFDUDtFQUNBLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNwRDtFQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzVDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0UsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2pDO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtFQUNBLFNBQVM7RUFDVCxLQUFLO0VBQ0wsSUFBSTtFQUNKLEdBQUc7QUFDSDtFQUNBLEVBQUU7QUFDRjtFQUNBO0FBQ0E7RUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtFQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7RUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0VBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztFQUN0QztFQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7RUFDdEM7RUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7RUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtFQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQ3hCO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0VBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7RUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0VBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0M7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNmO0VBQ0EsRUFBRSxJQUFJLENBQUMsWUFBWSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVELGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsYUFBYSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM1QjtFQUNBLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0VBQzdCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDcEI7RUFDQSxLQUFLLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDdEMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUMxQztFQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzVCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFNO0VBQzFCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDOUM7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztFQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3ZCLE1BQU07RUFDTixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDaEI7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3RDLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM5QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDekIsS0FBSyxPQUFPLElBQUksQ0FBQztBQUNqQjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsV0FBVyxDQUFDLEdBQUc7QUFDaEI7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0VBQ2pCLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBSztBQUNmO0VBQ0EsS0FBYyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPO0VBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ25DLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0EsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0VBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7RUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBO0VBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVEO0VBQ0E7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNB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LENBQUM7QUFDNUI7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0VBQ0E7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7RUFDOUI7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDdEUsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7RUFDQSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUM7RUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztFQUMxQixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFlBQVksT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDO0VBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ3ZEO0VB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QUM7RUFDM0MsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztFQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNoQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtFQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7RUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7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Q0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQztFQUNBLEtBQUs7RUFDTDtFQUNBOztFQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0VBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztFQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7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LENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztFQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtFQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0VBQzFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSTtFQUM5QyxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0VBQ3JDLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDM0MsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMs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QyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RCO0VBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0VBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztFQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0VBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtFQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtFQUNBLE1BQU07QUFDTjtFQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFF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SSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsNENBQTRDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQztFQUM1SCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDNUs7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUk7RUFDMUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHNCQUFzQixFQUFDO0FBQzFJO0VBQ0EsUUFBZ0IsSUFBSSxDQUFDLEVBQUU7RUFDdkIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFPO0FBQ2hDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRTtBQUMxQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDaEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNqQjtFQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07RUFDOUIsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN4QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsR0FBRTtFQUM3QyxRQUFRLEdBQUcsRUFBRSxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsV0FBVTtFQUMxRCxZQUFZLEVBQUUsQ0FBQyxVQUFVLEdBQUcsT0FBTTtBQUNsQztFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7RUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFNO0VBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTTtBQUNuQztFQUNBLFFBQVEsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtFQUNuQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87RUFDL0QsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQy9CO0VBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtFQUNoRCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0FBQ2hEO0VBQ0EsU0FBUztBQUNUO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUM7RUFDNUQsYUFBYTtFQUNiLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxTQUFTLENBQUM7RUFDL0MsU0FBUztBQUNUO0VBQ0E7QUFDQTtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFdBQVcsQ0FBQyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxLQUFLLENBQUM7RUFDL0MsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQzFCO0VBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQy9CLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUMvQixTQUFTO0VBQ1QsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztFQUMxQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDMUIsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUMxQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDdEI7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDMUI7RUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztFQUMzQixRQUFRLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUNoQztFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPO0FBQzNCO0VBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEI7RUFDQSxZQUFZLEtBQUssU0FBUztBQUMxQjtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0EsWUFBWSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxLQUFLLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUU7QUFDbEY7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtFQUM1QjtFQUNBLGdCQUFnQixXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFFO0VBQ3pELGFBQWE7QUFDYjtFQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFFO0FBQ3ZEO0VBQ0EsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxPQUFPO0VBQ3hCO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQztFQUNsQyxZQUFZLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRTtFQUN0QyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUU7RUFDOUMscUJBQXFCLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDaEMsYUFBYTtFQUNiLFlBQVksTUFBTTtBQUNsQjtBQUNBO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztFQUN4QyxRQUFRLElBQUksV0FBVyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDeEM7RUFDQSxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkQ7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7RUFDbkMsWUFBWSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUVoQyxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQ3pCLFlBQVksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztFQUNuRCxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDaEMsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLEdBQUcsR0FBRztBQUNWO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDMUI7RUFDQSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0VBQ3RDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSTtFQUNqQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7RUFDbkMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFJO0VBQ2pDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQzdCLFNBQVMsTUFBTSxJQUFJLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtFQUNyRCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUN2RyxpQkFBZ0I7RUFDaEIsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ2pDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDeEMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN0QyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDbEMsYUFBYTtFQUNiLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN6QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO0VBQ3ZCO0VBQ0EsWUFBWSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUM7RUFDcEIsU0FBUztFQUNUO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsUUFBUSxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUk7RUFDOUI7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQUs7QUFDNUI7RUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksT0FBTyxHQUFHO0FBQ2Q7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUU7RUFDcEIsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDeEMsUUFBUSxLQUFLLENBQUMsT0FBTyxHQUFFO0FBQ3ZCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLEdBQUc7QUFDWjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDdEM7RUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDcEIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUU7RUFDakMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFO0VBQzlDLFlBQVksSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEdBQUU7QUFDOUI7RUFDQTtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3ZDO0VBQ0EsUUFBUSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRztFQUN6QixZQUFZLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUU7RUFDN0QsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRTtFQUN4RCxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUU7QUFDcEM7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0VBQ3ZDLGdCQUFnQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUNwQyxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzdCLGFBQWE7RUFDYixTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRztBQUNaO0VBQ0EsUUFBUSxLQUFLLENBQUMsSUFBSSxHQUFFO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFFO0VBQ25ELFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUMzQjtFQUNBO0FBQ0E7RUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0VBQ3hCLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDOUI7RUFDQTtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFJO0VBQzVDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTTtBQUNuQztFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZCO0VBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLE1BQUs7RUFDckMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLE1BQUs7QUFDckM7RUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7RUFDdkQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0VBQ3hELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtFQUMxRCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7RUFDM0QsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO0FBQ25DO0VBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0VBQ25FLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztBQUNwRTtFQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztFQUMvRCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0VBQ3BDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLHlCQUF3QjtBQUN0RTtFQUNBLFNBQVM7RUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUMzQjtFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUU7QUFDbkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDM0I7RUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0VBQ3hCLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07RUFDOUI7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ25DO0VBQ0E7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSTtFQUM1QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsT0FBTTtBQUNoQztFQUNBLFFBQVEsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtBQUNuQztFQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxPQUFNO0VBQ2hDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxPQUFNO0VBQ2hDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztFQUMvRCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtBQUM1RDtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUMzQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxDQUFDLEdBQUc7QUFDZjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQzlEO0VBQ0EsYUFBYSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQ3hJO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDdkI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ3ZELGFBQWEsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNqRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Y7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU07RUFDakMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDeEMsYUFBYSxJQUFJLENBQUMsT0FBTyxHQUFFO0VBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ3hDO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxZQUFZLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFNO0VBQy9CLFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQztFQUNsQixZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUU7RUFDekMsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRTtFQUMvQixTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDcEM7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0VBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtBQUN2QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDN0M7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBOztFQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztFQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7RUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87RUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7RUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0VBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDbkksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2hFO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ25ELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzVFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDN0Y7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQ3BCO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVB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Q0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0VBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0VBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxH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QUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzNGLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMs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SUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0VBQ3pEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FB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R0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztFQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7RUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7RUFDOUI7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3JEO0VBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN4RCxhQUFhO0VBQ2I7RUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7RUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0VBQ3hCO0VBQ0EsU0FBUztFQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDekQsUUFBUSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDNUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDMUM7QUFDQTtFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixZQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDNUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLEtBQUssQ0FBQztFQUNyRCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3JELFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDMUIsU0FBUztBQUNUO0VBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHO0FBQzNDO0VBQ0EsWUFBWSxDQUFDLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUNoRCxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDaEQsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDOUQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztFQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNyRjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtFQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0VBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7RUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN6RDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7RUFDckM7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0VBQ0E7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtFQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0VBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07RUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUs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QUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7RUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7RUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztFQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BD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LENBQUMsQ0FBQztFQUNwRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN4RCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN4RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FB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LENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BEO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzFCLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQztFQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0VBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztFQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7RUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7RUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDaEMsT0FBTztBQUNQO0VBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7RUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNy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QUFFO0VBQzNCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7RUFDOUI7RUFDQTtFQUNBLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3BCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtFQUNBO0VBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtFQUNBO0VBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0VBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7RUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0VBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FB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QUMsTUFBTSxDQUFDO0FBQ3pCO0VBQ0EsSUFBSSxRQUFRLElBQUk7RUFDaEIsTUFBTSxLQUFLLENBQUM7RUFDWjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDeEQsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDNUQsUUFBUSxNQUFNO0VBQ2QsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtFQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtFQUNBLElBQUksSUFBSSxPQUFPO0VBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQzNDO0FBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtFQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsS0FBSyxHQUFHO0VBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3BDO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDbEIsR0FBRztFQUNIOztFQzdTTyxNQUFNLFNBQVMsU0FBUyxLQUFLLENBQUM7QUFDckM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FB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LEVBQUUsQ0FBQztFQUN2QyxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87QUFDbEM7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDbEQsYUFBYSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0I7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxJQUFJO0FBQ2Y7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0M7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksTUFBTSxDQUFDLEVB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SyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDaEQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7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QWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUU7RUFDNUwsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztFQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUN2TDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztFQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7RUFDOUQsUUFBUSxPQUFPLEdBQUc7QUFDbEI7RUFDQSxLQUFLO0FBQ0w7RUFD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QUFNLENBQUM7RUFDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksQ0FB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R0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RDO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7RUFDakQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUU7RUFDbEQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN4RDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDckY7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFD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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVELFNBQVM7QUFDVDtFQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEMsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ3ZCLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0VBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxL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QUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUM3RCxhQUFhO0FBQ2I7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsRDtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0VBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztFQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztFQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM5RjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztFQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztFQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtFQUNBLEtBQUs7RUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0VBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztFQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0VBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hDLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7RUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtFQUN6RTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7RUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7RUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0VBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7RUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxRQUFRLElBQUk7RUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztFQUMzRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBQztFQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztFQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztFQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUM5RDtFQUNBLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtFQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0VBQ2hELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFFO0VBQ3BFO0VBQ0EsWUFBWSxNQUFNO0VBQ2xCLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJ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QUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0VBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0VBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxrQ0FBa0MsRUFBRSxDQUFDO0FBQzNHO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0VBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFB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LFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDcEUsTUFBTSxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoRyxLQUFLO0VBQ0wsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM5QztFQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQ2pELE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7RUFDOUIsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQ2hELFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDeEMsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDckI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUNuRCxVQUFVLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEQ7RUFDQTtFQUNBLFVBQVUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDL0MsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRDtFQUNBLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQztFQUNyQixTQUFTO0VBQ1QsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQ3hDLE9BQU8sTUFBTTtFQUNiO0VBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztFQUNuQyxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzdELFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDL0M7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDNUQ7RUFDQSxVQUFVLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsVUFBVSxNQUFNLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMvRixVQUFVLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekU7RUFDQSxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQzNELFNBQVM7RUFDVCxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUM7RUFDbkIsT0FBTztFQUNQLEtBQUs7QUFDTDtFQUNBO0VBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDckIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN2QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMxQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDckMsR0FBRztBQUNIO0VBQ0EsRUFB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RUFDQTtFQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNkLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QyxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDNUIsR0FBRztBQUNIO0VBQ0E7RUFDQSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0VBQ25CLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQ2pELE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqQyxNQUFNLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7RUFDekIsTUFBTSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTO0FBQzdFO0VBQ0EsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0VBQzlCLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQ25ELFVBQVUsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDeEMsVUFBVSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRTtFQUN4RixZQUFZLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUN4QyxXQUFXO0VBQ1gsU0FBUztFQUNULE9BQU8sTUFBTTtFQUNiO0VBQ0EsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztFQUMvRCxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDeEMsVUFBVSxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7RUFDOUMsVUFBVSxNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzlHLFVBQVUsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FB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QUMsQ0FBQyxDQUFDLE1BQU07RUFDOUMsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ2xELFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNsRCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDeEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ2hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNoRCxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNyRSxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDbEQsWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDekUsWUFBWSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDL0QsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ3BELFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxD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Q0FBQztBQUNqRTtFQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztFQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7QUFDNUM7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDcEU7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztFQUMzQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFF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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuICAgIC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG4gICAgLy8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG4gICAgby5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuICAgIG8ubmFtZSA9IG8ubmFtZSB8fCAnVHJlZUxpc3QnO1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgLy8gRGF0b3MgJiBlc3RhZG9cclxuICAgIHRoaXMudHJlZSAgICAgICA9IG8udHJlZSB8fCB7fTtcclxuICAgIHRoaXMudmFsdWUgICAgICA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNlZCAgICA9ICEhby5mb2N1c2VkO1xyXG4gICAgdGhpcy5mb2N1c1BhdGggID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSAnbnVtYmVyJyA/IG8uZm9jdXNMZXZlbCA6IC0xO1xyXG5cclxuICAgIHRoaXMudGFiSW5kZXggICA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuICAgIHRoaXMuaXRlbUluZGV4ICA9IG8uaXRlbUluZGV4ID8/IG51bGw7XHJcblxyXG4gICAgLy8gQ2FsbGJhY2tcclxuICAgIHRoaXMuY2hhbmdlQ2IgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcbiAgICAvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuICAgIHRoaXMubGluZUggICAgPSB0aGlzLmg7ICAgICAgICAgICAgICAgLy8gYWx0byBkZSBVTkEgZmlsYVxyXG4gICAgdGhpcy5sZXZlbEdhcCA9IHRoaXMuY29sb3JzLnN5IHx8IDI7ICAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmxlYWZNYXggID0gMDsgICAgICAgICAgICAgICAgICAgIC8vIHNlIGNhbGN1bGEgZW4gclNpemUoKVxyXG5cclxuICAgIC8vIE1vZGVsbyB2aXN1YWxcclxuICAgIHRoaXMubGV2ZWxzICAgPSBbXTsgICAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuICAgIHRoaXMuaXRlbXNEb20gPSBbXTsgICAvLyBlc3Blam8gRE9NIHBvciBuaXZlbFxyXG4gICAgdGhpcy5ob3ZlciAgICA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcbiAgICAvLyBDb250ZW5lZG9yIGludGVybm8gKGFic29sdXRvKVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpO1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG4gIHN0YXRpYyBpc01hcChub2RlKSAgeyByZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuICBzdGF0aWMgaXNMaXN0KG5vZGUpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuXHJcbiAgLy8gPT09PT09PSBSZWNvcnJpZG8gZGUgZGF0b3MgPT09PT09PVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG4gICAgICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG4gIGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG4gICAgbGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG4gICAgd2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgaWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcbiAgICAgIGNvbnN0IGswID0ga2V5c1swXTtcclxuICAgICAgcGF0aC5wdXNoKGswKTtcclxuICAgICAgbm9kZSA9IG5vZGVbazBdO1xyXG4gICAgfVxyXG4gICAgLy8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgLy8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG4gIGdldEFjdGl2ZVBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG4gIGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcbiAgICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gMDtcclxuICAgIGxldCBtID0gMDtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG4gICAgICBtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PVxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTml2ZWwgaW50ZXJtZWRpbzogY2xhdmVzIGRlbCBtYXBhIChob3Jpem9udGFsKVxyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6ICdtYXAnLFxyXG4gICAgICAgICAgaXRlbXM6IGtleXMubWFwKGsgPT4gKHsga2V5OiBrLCBsYWJlbDogaywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSksXHJcbiAgICAgICAgICB6b25lOiB7IHg6MCx5OjAsdzowLGg6IHRoaXMubGluZUggfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAobGFiZWwgPT4gKHsga2V5OiBsYWJlbCwgbGFiZWwsIHpvbmU6IHsgeDowLHk6MCx3OjAsaDowIH0gfSkpO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ2xpc3QnLCBpdGVtcywgem9uZTogeyB4OjAsIHk6MCwgdzowLCBoOiBoTGlzdCB9IH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuICBsYXlvdXRMZXZlbHMoKSB7XHJcbiAgICBjb25zdCBwYWRYID0gODtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIHBhZFggKiAyO1xyXG4gICAgbGV0IHkgPSAwO1xyXG5cclxuICAgIC8vIEFqdXN0YXIgaXRlbXNEb20gYSBjYW50aWRhZCBkZSBuaXZlbGVzXHJcbiAgICB3aGlsZSAodGhpcy5pdGVtc0RvbS5sZW5ndGggPCB0aGlzLmxldmVscy5sZW5ndGgpIHRoaXMuaXRlbXNEb20ucHVzaChbXSk7XHJcbiAgICBmb3IgKGxldCBMID0gdGhpcy5sZXZlbHMubGVuZ3RoOyBMIDwgdGhpcy5pdGVtc0RvbS5sZW5ndGg7IEwrKykge1xyXG4gICAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuaXRlbXNEb21bTF0pIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuICAgIGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuICAgICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICAgIGlmIChsdmwudHlwZSA9PT0gJ21hcCcpIHtcclxuICAgICAgICBjb25zdCBuID0gTWF0aC5tYXgoMSwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgY2VsbFcgPSBNYXRoLmZsb29yKHcgLyBuKTtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgIGxldCB4ID0gcGFkWDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ21hcCcpO1xyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgeSArPSB0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsaXN0YS9ob2phOiByZXNlcnZhciBoIHNlZ8O6biBsZWFmTWF4XHJcbiAgICAgICAgY29uc3QgbiA9IGx2bC5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogaExpc3QgfTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBuO1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBpc1JlYWwgPyBsdmwuaXRlbXNbaV0gOiB7IGtleTogbnVsbCwgbGFiZWw6ICcnLCB6b25lOiB7IHg6MCx5OjAsdzowLGg6MCB9IH07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4OiBwYWRYLCB5OiB5ICsgaSAqIHRoaXMubGluZUgsIHcsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuICAgICAgICAgIHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsICdsaXN0JywgaXNSZWFsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgeSArPSBoTGlzdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFqdXN0ZXMgZGUgYWx0byBpbnRlcm5vIGRlbCBjb250ZW5lZG9yIHZpc3VhbFxyXG4gICAgY29uc3QgdG90YWxIID0geTtcclxuICAgIHRoaXMuem9uZS5oID0gdG90YWxIICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy56b25lLmggKyAncHgnO1xyXG4gICAgdGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArICdweCc7XHJcblxyXG4gICAgLy8gUHVibGljYXIgYWx0byB0b3RhbCBhbCBHVUkgKHN1bWFyw6EgdS5oKVxyXG4gICAgdGhpcy5fcHVibGlzaEhlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgZW5zdXJlSXRlbURvbShMLCBpKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgd2hpbGUgKHJvdy5sZW5ndGggPD0gaSkgcm93LnB1c2gobnVsbCk7XHJcbiAgICBpZiAoIXJvd1tpXSkge1xyXG4gICAgICBjb25zdCBkaXYgPSB0aGlzLmRvbSgnZGl2JywgVG9vbHMuY3NzLnR4dCArICdwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsnKTtcclxuICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcbiAgICAgIHJvd1tpXSA9IGRpdjtcclxuICAgIH1cclxuICAgIHJldHVybiByb3dbaV07XHJcbiAgfVxyXG5cclxuICBwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgcyA9IGRpdi5zdHlsZTtcclxuICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy8gUG9zaWNpw7NuXHJcbiAgICBzLmxlZnQgICA9IGl0LnpvbmUueCArICdweCc7XHJcbiAgICBzLnRvcCAgICA9IGl0LnpvbmUueSArICdweCc7XHJcbiAgICBzLndpZHRoICA9IGl0LnpvbmUudyArICdweCc7XHJcbiAgICBzLmhlaWdodCA9IChpdC56b25lLmggLSAyKSArICdweCc7XHJcblxyXG4gICAgLy8gVGV4dG9cclxuICAgIGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogJyc7XHJcblxyXG4gICAgLy8gRXN0YWRvc1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgICA9IGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG4gICAgY29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiAodGhpcy5mb2N1c0xldmVsID09PSBMKTtcclxuICAgIGNvbnN0IGZvY3VzTWF0Y2ggPSBpc1JlYWwgJiYgaW5Gb2N1c0x2bCAmJiAodGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleSk7XHJcbiAgICBjb25zdCBpc0hvdmVyICAgID0gaXNSZWFsICYmICh0aGlzLmhvdmVyLmxldmVsID09PSBMICYmIHRoaXMuaG92ZXIuaW5kZXggPT09IGkpO1xyXG5cclxuICAgIC8vIEVzdGlsb3MgYmFzZVxyXG4gICAgcy5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuICAgIHMuY29sb3IgICAgICA9IGNjLnRleHQ7XHJcbiAgICBzLmJvcmRlciAgICAgPSAnMXB4IHNvbGlkICcgKyBjYy5ib3JkZXI7XHJcbiAgICBzLnRleHRBbGlnbiAgPSBraW5kID09PSAnbWFwJyA/ICdjZW50ZXInIDogJ2xlZnQnO1xyXG5cclxuICAgIC8vIFByaW9yaWRhZCB2aXN1YWw6IHNlbGVjY2lvbmFkbyA+IGZvY28gPiBob3ZlciA+IGJhc2VcclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgfSBlbHNlIGlmIChmb2N1c01hdGNoKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICB9IGVsc2UgaWYgKGlzSG92ZXIpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbGFzIGRlIHBhZGRpbmcgaW52aXNpYmxlcyBlbiBob2phXHJcbiAgICBzLm9wYWNpdHkgPSBpc1JlYWwgPyAnMScgOiAnMCc7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IENpY2xvIGRlIHZpZGEgPT09PT09PVxyXG4gIHJTaXplKCkge1xyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy5idWlsZExldmVscygpO1xyXG4gICAgdGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEludGVyYWNjacOzbiA9PT09PT09XHJcbiAgX3RvTG9jYWwoZSkge1xyXG4gICAgY29uc3QgbXggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgIGNvbnN0IG15ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnk7XHJcbiAgICByZXR1cm4geyB4OiBteCwgeTogbXkgfTtcclxuICB9XHJcblxyXG4gIF9oaXRUZXN0KG14LCBteSkge1xyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgY29uc3QgeiA9IGx2bC56b25lO1xyXG4gICAgICBpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmxpbmVILCB3OiB6LncsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgaWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZXVwJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAoT3BjaW9uYWwpIHRlY2xhZG86IGludGVncmFyIG5hdmVnYWNpw7NuIGVuIEd1aSB5IHJlZW52aWFyIGFxdcOtIHNpIHNlIGRlc2VhXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICAgIHRoaXMuY2hhbmdlQ2IodGhpcy50YWJJbmRleCwgdGhpcy5pdGVtSW5kZXgsIG5ld1BhdGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBBUEkgcMO6YmxpY2EgPT09PT09PVxyXG4gIHNldFZhbHVlKHBhdGgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJlZSh0cmVlKSB7XHJcbiAgICB0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG4gICAgLy8gcmVjYWxjdWxhciBsZWFmTWF4IGVuIHByw7N4aW1hIHBhc2FkYVxyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBQdWJsaWNhY2nDs24gZGUgYWx0dXJhID09PT09PT1cclxuICBfY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpIHtcclxuICAgIGxldCBjID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBpKyspIGlmICh0aGlzLmxldmVsc1tpXS50eXBlID09PSAnbWFwJykgYysrO1xyXG4gICAgcmV0dXJuIGM7XHJcbiAgfVxyXG5cclxuICBfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcbiAgICByZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09ICdsaXN0JyA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuICB9XHJcblxyXG4gIF9wdWJsaXNoSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcbiAgICBjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuICAgIGNvbnN0IGxlYWZIICA9IGxlYWZMZW4gKiB0aGlzLmxpbmVIO1xyXG4gICAgY29uc3QgaW50ZXJIID0gaW50ZXIgKiAodGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXApO1xyXG4gICAgY29uc3QgdG90YWxIID0gaW50ZXJIICsgKGludGVyID8gdGhpcy5sZXZlbEdhcCA6IDApICsgbGVhZkg7XHJcblxyXG4gICAgLy8gQWN0dWFsaXphIG3DqXRyaWNhcyBkZWwgcHJvdG8gKGxvIHF1ZSBzdW1hIGVsIEdVSSlcclxuICAgIHRoaXMuaCA9IHRvdGFsSDtcclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuXHJcbiAgICAvLyBBdmlzYXIgYWwgR1VJIHkgcmVmcmVzY2FyIHpvbmFzXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0VBQUE7RUFDQTtFQUNBO0FBQ0E7QUFDWSxRQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLE1BQU0sQ0FBQyxHQUFHO0VBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0VBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0VBQ0EsRUFBRSxFQUFFLEVBQUUsSUFBSTtFQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUs7RUFDYixFQUFFLEtBQUssRUFBRSxLQUFLO0VBQ2QsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7RUFDQSxF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LFdBQVcsRUFBRSxDQUFDO0VBQ3BCLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0VBQ3BELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztFQUN2RDtFQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztFQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ3BCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDO0VBQ3hDLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxFQUFFLFVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRTtFQUNyQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNuQjtFQUNBLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN0QjtFQUNBLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztFQUN2RCxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7RUFDdkQ7RUFDQSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUss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RSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDNUU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUMxQjtFQUNBLFFBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakg7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtFQUN0QixRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDckMsUUFBUSxPQUFPLENBQUMsQ0FBQztFQUNqQixLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7RUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztFQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0VBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7RUFDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ25CLFNBQVM7RUFDVCxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNCO0VBQ0EsS0FBSztB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QUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNySDtFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDN0ksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdB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LEdBQUcsRUFBRSxDQUFDO0FBQ3pIO0VBQ0E7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7RUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtFQUNBO0FBQ0E7RUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtFQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7RUFDQSxTQUFTLE1BQU07RUFDZjtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvRixZQUFZLENB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QztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0VBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtFQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHO0FBQ2xHO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ25CO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7RUFDbEIsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzVCLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUMvQixHQUFHLE1BQU07RUFDVCxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDO0VBQ3RDLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUM7RUFDekMsR0FBRztBQUNIO0VBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0E7O0VDOUhBO0VBQ0E7RUFDQTtBQUNBO0VBQ08sTUFBTSxLQUFLLENBQUM7RUFDbkIsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtFQUN0QjtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUNoQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUMzQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDO0FBQ3RDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7RUFDL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDO0VBQ2hDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNqQztFQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ2pCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDbEI7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7RUFDMUUsSUFBSSxJQUFJLENBQUMsWUFBWTtFQUNyQixNQUFNLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUNoRTtFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNDO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUNyRDtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVztFQUNuQyxNQUFNLENBQUM7RUFDUCxNQUFNLElBQUksQ0FBQyxJQUFJO0VBQ2YsVUFBVSxJQUFJLENBQUMsS0FBSztFQUNwQixZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtFQUM3QixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtFQUM1QixVQUFVLEtBQUssQ0FBQyxNQUFNO0VBQ3RCLEtBQUssQ0FBQztBQUNOO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzNDO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7RUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7RUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0VBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztFQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ25DO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FB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QUM7RUFDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RSxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtFQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7RUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hELEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQ3pCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztFQUMxQixHQUFHO0FBQ0g7RUFDQSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ1o7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsUUFBUSxHQUFHO0VBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ2xDLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDeEIsR0FBRztBQUNIO0VBQ0EsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPO0FBQ2hDO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQjtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3JCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDakMsS0FBSyxNQUFNO0VBQ1gsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDdkM7RUFDQTtFQUNBLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNuQyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUM3QyxLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0EsRUFBRSxLQUFLLEdBQUc7RUFDVixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU87RUFDaEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNwRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ3ZELEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFO0VBQ25CLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDekI7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ25CLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtFQUMvQixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ2hFLFdBQVcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ2hDLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQ3ZELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN0RCxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDakU7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ1Y7RUFDQSxJQUFJLFFBQVEsSUFBSSxDQUFDLFNBQVM7RUFDMUIsTUFBTSxLQUFLLENBQUM7RUFDWixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZCxRQUFRLE1BQU07RUFDZCxNQUFNLEtBQUssQ0FBQztFQUNaLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNoQixRQUFRLE1BQU07RUFDZCxNQUFNLEtBQUssQ0FBQztFQUNaLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNqQixRQUFRLE1BQU07RUFDZCxNQUFNLEtBQUssQ0FBQztFQUNaLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUNsQixRQUFRLE1BQU07RUFDZCxNQUFNLEtBQUssQ0FBQztFQUNaLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztFQUNuQixRQUFRLE1BQU07RUFDZCxNQUFNLEtBQUssQ0FBQztFQUNaLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQztFQUNwQixRQUFRLE1BQU07RUFDZCxNQUFNLEtBQUssQ0FBQztFQUNaLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztFQUNyQixRQUFRLE1BQU07RUFDZCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDbEQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNyQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDM0MsR0FBRztBQUNIO0VBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ2QsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEMsSUFBSTtFQUNKLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztFQUMzRSxNQUFNO0VBQ04sR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDakIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTztFQUMxQixJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztFQUMzQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztFQUNyQixNQUFNLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGdDQUFnQyxDQUFDLENBQUM7QUFDckU7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNCLEdBQUc7QUFDSDtFQUNBLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtFQUNYLElBQUksT0FBTyxLQUFLLENBQUM7RUFDakIsR0FBRztFQUNILEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRTtFQUNmLElBQUksT0FBTyxLQUFLLENBQUM7RUFDakIsR0FBRztFQUNILEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRTtFQUNmLElBQUksT0FBTyxLQUFLLENBQUM7RUFDakIsR0FBRztFQUNILEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNiLElBQUksT0FBTyxLQUFLLENBQUM7RUFDakIsR0FBRztFQUNILEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNiLElBQUksT0FBTyxLQUFLLENBQUM7RUFDakIsR0FBRztFQUNILEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtFQUNYLElBQUksT0FBTyxLQUFLLENBQUM7RUFDakIsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0VBQ3pCLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7RUFDMUIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztFQUN6QixHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFO0VBQ3JCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxRQUFRLENBQUM7RUFDcEQsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksR0FBRztFQUNULElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU87RUFDNUIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztFQUN2QixJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0VBQzVCLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztFQUMvQyxHQUFHO0FBQ0g7RUFDQSxFQUFFLEtBQUssR0FBRztFQUNWLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTztFQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQ3hCLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDNUIsSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0VBQ2pELEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxHQUFHO0VBQ2IsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUM1QixHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sR0FBRztFQUNYLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDNUIsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQ2I7RUFDQSxFQUFFLFFBQVEsR0FBRyxFQUFFO0FBQ2Y7RUFDQSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUU7RUFDbEIsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNoQyxHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFO0VBQ25CLElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNsQyxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNkLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0VBQy9CLEdBQUc7RUFDSDs7RUNybkJPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7RUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFLO0VBQ3JDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDdEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBRztFQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0VBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtFQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxD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LEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0VBQ2xEO0VBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0VBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztFQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNwUE8sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FB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QUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMvQixTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxHQUFHO0VBQ2xDO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNyRDtFQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztFQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYTtFQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztFQUN4QjtFQUNBLFNBQVM7RUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDbEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0MsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RDLFFBQVEsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xHO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFD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QyxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7RUFDOUIsUUFBUTtBQUNSO0VBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7RUFDQSxTQUFTLE1BQU07QUFDZjtFQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7RUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0VBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxH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SUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtFQUNBLFNBQVM7RUFDVCxLQUFLO0VBQ0wsSUFBSTtFQUNKLEdBQUc7QUFDSDtFQUNBLEVBQUU7QUFDRjtFQUNBO0FBQ0E7RUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtFQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7RUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0VBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztFQUN0QztFQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7RUFDdEM7RUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7RUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtFQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQ3hCO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0VBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7RUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0VBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMs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R0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0VBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7RUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBO0VBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVEO0VBQ0E7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7RUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDcEM7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7RUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztFQUM1QyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDckI7RUFDQSxFQUFFO0FBQ0Y7QUFDQTtFQUNBOztFQ3BhTyxNQUFNLEdBQUcsU0FBUyxLQUFLLENBQUM7QUFDL0I7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQztFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDbkM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7RUFDL0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztFQUMxQztBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ3hDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzlDLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0RDtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN4QztFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7RUFDekIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztFQUN6QixRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QjtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFFO0VBQ3RDLFlBQVksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUM5QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN4QixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3pCLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDekIsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QjtFQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN4RjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzVCO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3ZDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3JDO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBSztBQUN0QztFQUNBLFNBQVM7QUFDVDtBQUNBO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNoQztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN6QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztFQUMzQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLCtCQUErQixFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsOEVBQThFLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7QUFDaE07RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsUUFBUSxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2pGO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ2xFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0VBQ2xELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0VBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDL0Q7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0VBQzdLO0FBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtEQUFrRCxFQUFFLENBQUM7QUFDMUo7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsMkVBQTJFLENBQUMsQ0FBQztBQUN0SjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0VBQ0E7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7RUFDOUI7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDdEUsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7RUFDQSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUM7RUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztFQUMxQixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFlBQVksT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDO0VBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ3ZEO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFD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LEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztFQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNoQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtFQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7RUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDcEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ25FLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzNEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztFQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUks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QUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQztFQUNBLEtBQUs7RUFDTDtFQUNBOztFQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0VBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztFQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQ7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0VBQ3hFLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDakQ7RUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0VBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQy9DLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtFQUN6RCxhQUFhO0VBQ2I7RUFDQTtFQUNBO0VBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0VBQ0E7QUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlEQUF5RCxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM1TDtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQ7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7RUFDdEosUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0gsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEo7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztFQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7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R0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0VBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztFQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0VBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtFQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtFQUNBLE1BQU07QUFDTjtFQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDO0VBQ2pELFFBQVEsSUFBSSxD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QUFRLEdBQUcsNENBQTRDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQztFQUM1SCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDNUs7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUk7RUFDMUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHNCQUFzQixFQUFDO0FBQzFJO0VBQ0EsUUFBZ0IsSUFBSSxDQUFDLEVBQUU7RUFDdkIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFPO0FBQ2hDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRTtBQUMxQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDaEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FB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LEdBQUU7QUFDN0M7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBOztFQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztFQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7RUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87RUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7RUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0VBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDbkksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2hFO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ25ELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzVFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDN0Y7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQ3BCO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUMzQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtFQUNBLFFBQVEsT0FBTyxJQUFJO0VBQ25CLFlBQVksS0FBSyxDQUFDO0VBQ2xCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ2xDLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN4RSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDbEUsaUJBQWlCLE1BQU07RUFDdkIsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNyRTtFQUNBLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDckUsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2hFLGlCQUFpQjtFQUNqQjtFQUNBLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssQ0FBQztFQUNsQixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUNsQyxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDekUsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzNFLGlCQUFpQixNQUFNO0VBQ3ZCLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDdEU7RUFDQSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3hFLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDcEUsaUJBQWlCO0VBQ2pCLFlBQVksTUFBTTtBQUdsQjtFQUNBLFNBQVM7RUFDVCxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksV0FBVyxDQUFDLEVBQUU7RUFDbEIsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztFQUN6RCxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPO0VBQ3ZDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ25GO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxZQUFZLENBQUMsRUFBRTtBQUNuQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksR0FBRyxPQUFPO0VBQzVDLFFBQVEsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztFQUN2QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0VBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0VBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztFQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtFQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtFQUNBLGFBQWE7QUFDYjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7QUFDQTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7RUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0VBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzNGLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0Y7RUFDQSxRQUFRLEdB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QUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0VBQ3pEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQzVGO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0VBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEk7RUFDQSxZQUFZLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUU7RUFDbEM7RUFDQSxnQkFBZ0IsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7RUFDekMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDakY7RUFDQSxhQUFhO0FBQ2I7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztBQUMvQztFQUNBLFFBQVEsUUFBUSxJQUFJO0VBQ3BCLFlBQVksS0FBSyxDQUFDO0VBQ2xCLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDOUQ7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQy9ELFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssQ0FBQztFQUNsQixnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztFQUM5QyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzlEO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNuRSxZQUFZLE1BQU07RUFDbEIsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztFQUMxQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztFQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztFQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0VBQzFFLGFBQWEsT0FBTyxNQUFNLENBQUM7QUFDM0I7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUU7RUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSTtFQUMxQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7RUFDN0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUk7RUFDeEIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRTtFQUMzQixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztFQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7RUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7RUFDOUI7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3JEO0VBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN4RCxhQUFhO0VBQ2I7RUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7RUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0VBQ3hCO0VBQ0EsU0FBUztFQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDekQsUUFBUSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDNUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDMUM7QUFDQTtFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixZQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDNUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLEtBQUssQ0FBQztFQUNyRCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3JELFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDMUIsU0FBUztBQUNUO0VBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHO0FBQzNDO0VBQ0EsWUFBWSxDQUFDLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUNoRCxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDaEQsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDOUQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztFQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNyRjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtFQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0VBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7RUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN6RDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7RUFDckM7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0VBQ0E7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtFQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0VBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07RUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDaEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDclUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGdEQUFnRCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcks7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztFQUNsSSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFF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LEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7RUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7RUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztFQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BDO0VBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUN0RDtFQUNBO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN6RDtFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2pDO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxHQUFFO0VBQ25DLGdCQUFnQixDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFFO0FBQ2xEO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLGdCQUFnQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxvQkFBbUI7QUFDcEQ7QUFDQTtFQUNBO0VBQ0E7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUU7QUFDckM7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQ3BDO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDOUI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQztBQUMzQztFQUNBLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7RUFDbEQsZ0JBQWdCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTTtBQUN2QztFQUNBLGdCQUFnQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksVUFBVSxnQ0FBZ0MsRUFBQztFQUNoSCxnQkFBZ0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsZ0NBQWdDLEVBQUM7RUFDdEc7RUFDQTtFQUNBLGdCQUFnQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDbkYsZ0JBQWdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxVQUFVLCtCQUErQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRTtFQUN2SDtBQUNBO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDMUIsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtFQUMvQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFFLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztFQUM1RixRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFFO0FBQzVEO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUU7RUFDaEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUNuQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDbEMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ3JFLFNBQVM7RUFDVCxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztFQUMxQixLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtFQUNBLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7RUFDMUQsYUFBYSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNoQztFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMxQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksVUFBVSxDQUFDLEVBQUU7QUFDakI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDOUI7RUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU87QUFDOUM7RUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7RUFDMUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUMvRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUM7RUFDckQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDO0VBQ3RELGdCQUFnQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsb0JBQW1CO0VBQzlELGdCQUFnQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3hELGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTTtFQUNsRCxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLE9BQU07RUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNyRCxhQUFhO0FBQ2I7RUFDQSxZQUFzQixJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUc7RUFDbEQsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JKO0VBQ0EsU0FBUztFQUNULGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzdCO0VBQ0EsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0VBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDL0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxvQkFBbUI7RUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDO0VBQ3ZELGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTTtFQUNsRCxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLE9BQU07RUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7RUFDcEQsYUFBYTtBQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEU7QUFDQTtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtBQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzVDO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7RUFDbEQsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDMUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDdkI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDeEQsYUFBYSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNuQjtFQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ2pELFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDMUIsWUFBWSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztFQUM3QixZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUMvQyxZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7RUFDakQsWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0VBQ3JELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztFQUNsRCxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDdEQsU0FBUztFQUNULFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtFQUNyQixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN4RCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN4RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztF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SUFBSSxFQUFFLEdBQUcsQ0FBQztFQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0VBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztFQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7RUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7RUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDaEMsT0FBTztBQUNQO0VBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7RUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztF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QUM7RUFDOUI7RUFDQTtFQUNBLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3BCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtFQUNBO0VBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtFQUNBO0VBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0VBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7RUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0VBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7RUFDcEQsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcs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QyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDeEQsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDNUQsUUFBUSxNQUFNO0VBQ2QsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtFQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtFQUNBLElBQUksSUFBSSxPQUFPO0VBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQzNDO0FBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtFQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsS0FBSyxHQUFHO0VBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3BDO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDbEIsR0FBRztFQUNIOztFQzdTTyxNQUFNLFNBQVMsU0FBUyxLQUFLLENBQUM7QUFDckM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0VB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RUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87QUFDbEM7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDbEQsYUFBYSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0I7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxJQUFJO0FBQ2Y7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0M7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFD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LEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDaEQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7QUFDakQ7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENB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RyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztFQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUN2TDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztFQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7RUFDOUQsUUFBUSxPQUFPLEdBQUc7QUFDbEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0VBQ2xCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDekI7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQ2hDO0VBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDdkMsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQ2pDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUU7RUFDN0IsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7RUFDOUIsWUFBWSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUU7QUFDbkU7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtFQUNBO0VBQ0E7RUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtFQUM3QixZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7RUFDbkMsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUU7RUFDakQsU0FBUyxNQUFNO0VBQ2YsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzlCLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxFQUFFLENBQUM7QUFDbEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxZQUFZLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtBQUM5QjtFQUNBLFFBQVEsSUFBSSxHQUFHLEVBQUU7RUFDakIsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUc7RUFDMUIsWUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRTtFQUMvQixTQUFTLE1BQU07RUFDZixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSTtFQUMzQixZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFFO0VBQ2hDLFNBQVM7RUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUc7RUFDL0IsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUMzQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUU7RUFDbkMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBQztFQUM5RSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDcEYsYUFBYTtFQUNiO0VBQ0EsU0FBUztFQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRztBQUNkO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3ZCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtFQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsTUFBSztFQUMxQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQzdCO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDekI7RUFDQSxZQUFZLFFBQVEsQ0FBQztBQUNyQjtFQUNBLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07RUFDL0YsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTTtFQUNwRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO0VBQ2pHLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07QUFDckc7RUFDQSxhQUFhO0FBQ2I7RUFDQSxZQUFZLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDMUI7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCO0FBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3RCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ2pEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7RUFDMUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDO0VBQzNDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN2QztFQUNBLEtBQUs7QUFDTDtFQUNBOztFQy9MQTtBQUVBO0VBQ08sTUFBTSxRQUFRLFNBQVMsTUFBTSxDQUFDO0FBQ3JDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUk7RUFDNUQsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDbkI7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNWTyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUM7QUFDaEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3JCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQzlCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsT0FBTyxJQUFJ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QUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7RUFDakQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUU7RUFDbEQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN4RDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDckY7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNuQztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJ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QUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqRDtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSTtFQUN4QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUMzQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0I7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDbkIsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RELFNBQVM7QUFDVDtFQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVELFNBQVM7QUFDVDtFQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEMsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ3ZCLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0VBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0VBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVB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QSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsRDtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0VBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztFQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztFQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM5RjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztFQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztFQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtFQUNBLEtBQUs7RUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0VBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztFQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0VBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hDLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7RUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtFQUN6RTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7RUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7RUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0VBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7RUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7RUFD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LEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0E7O0VDclJBO0FBSUE7RUFDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7RUFDcEMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtFQUN0QjtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO0VBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0VBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0VBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3RCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO0VBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7RUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcseUNBQXlDLENBQUMsQ0FBQztFQUM1RixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBLEVBQUUsT0FBTyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsT0FBTyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO0VBQzFGLEVBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDckQ7RUFDQTtFQUNBLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRTtFQUN0QixJQUFJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDekIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUMxQyxNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtFQUNoQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNsRyxRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsT0FBTyxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtFQUN4QztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN2RCxPQUFPLE1BQU07RUFDYixRQUFRLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN4QyxPQUFPO0VBQ1AsS0FBSztFQUNMLElBQUksT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3hDLEdBQUc7QUFDSDtFQUNBO0VBQ0EsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7RUFDL0IsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUNoRCxJQUFJLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNsQyxJQUFJLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtFQUNqQyxNQUFNLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDckMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNO0VBQzlCLE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDdEIsS0FBSztFQUNMO0VBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBLEVBQUUsYUFBYSxHQUFHO0VBQ2xCLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUN0RCxHQUFHO0FBQ0g7RUFDQTtFQUNBLEVBQUUsY0FBYyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFO0VBQ25DLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUNoRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0VBQ3BELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7RUFDdkMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BELEtBQUs7RUFDTCxJQUFJLE9BQU8sQ0FBQyxDQUFDO0VBQ2IsR0FBRztBQUNIO0VBQ0E7RUFDQSxFQUFFLFdBQVcsR0FBRztFQUNoQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUMzQixJQUFJLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUM1QztFQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN6QixJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNsQjtFQUNBLElBQUksT0FBTyxJQUFJLEVBQUU7RUFDakIsTUFBTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7RUFDaEM7RUFDQSxRQUFRLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdkMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNO0VBQ2hDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDekIsVUFBVSxJQUFJLEVBQUUsS0FBSztFQUNyQixVQUFVLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQ2pGLFVBQVUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUU7RUFDN0MsU0FBUyxDQUFDLENBQUM7QUFDWDtFQUNBLFFBQVEsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzFDLFFBQVEsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTTtFQUM3RCxRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7RUFDN0IsT0FBTyxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtFQUN4QztFQUNBLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDNUYsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDeEUsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDckYsUUFBUSxNQUFNO0VBQ2QsT0FBTyxNQUFNO0VBQ2IsUUFBUSxNQUFNO0VBQ2QsT0FBTztFQUNQLE1BQU0sS0FBSyxFQUFFLENBQUM7RUFDZCxLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0E7RUFDQSxFQUFFLFlBQVksR0FBRztFQUNqQixJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQztFQUNuQixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7RUFDckMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZDtFQUNBO0VBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzdFLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDcEUsTUFBTSxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoRyxLQUFLO0VBQ0wsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM5QztFQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQ2pELE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7RUFDOUIsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQ2hELFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDeEMsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDckIsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDbkQsVUFBVSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xDLFVBQVUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ3RELFVBQVUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDL0MsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztFQUNsRCxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUM7RUFDckIsU0FBUztFQUNULFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUN4QyxPQUFPLE1BQU07RUFDYjtFQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7RUFDbkMsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUM3RCxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQzVELFVBQVUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMvQixVQUFVLE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ2pHLFVBQVUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUN6RSxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQzNELFNBQVM7RUFDVCxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUM7RUFDbkIsT0FBTztFQUNQLEtBQUs7QUFDTDtFQUNBO0VBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDckIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN2QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMxQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDckM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0VBQzFCLEdBQUc7QUFDSDtFQUNBLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDdEIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2pDLElBQUksT0FBTyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzNDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtFQUNqQixNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlDQUF5QyxDQUFDLENBQUM7RUFDN0YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNqQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDbkIsS0FBSztFQUNMLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEIsR0FBRztBQUNIO0VBQ0EsRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsSUFBSSxFQUFFO0VBQ25ELElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztFQUN4QixJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0I7RUFDQTtFQUNBLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDaEMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNoQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2hDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDdEM7RUFDQTtFQUNBLElBQUksR0FBRyxDQUFDLFdBQVcsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDN0M7RUFDQTtFQUNBLElBQUksTUFBTSxRQUFRLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztFQUN6RixJQUFJLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUMvRCxJQUFJLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUUsSUFBSSxNQUFNLE9BQU8sTUFBTSxNQUFNLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BGO0VBQ0E7RUFDQSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUMzQixJQUFJLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQztFQUMzQixJQUFJLENBQUMsQ0FBQyxNQUFNLE9BQU8sWUFBWSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7RUFDNUMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksS0FBSyxLQUFLLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUN0RDtFQUNBO0VBQ0EsSUFBSSxJQUFJLFFBQVEsRUFBRTtFQUNsQixNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztFQUMvQixN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O0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2Y7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEtBQUss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R0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZEO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtFQUNYLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0VBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEM7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0VBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0VBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDaEQsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3pCLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtFQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDakQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0QsR0FBRztBQUNIO0VBQ0EsRUFBRSxJQUFJLEdBQUc7RUFDVCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUN6RCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsR0FBRztFQUNkLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDMUIsSUFBSSxJQUFJ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 diff --git a/build/uil.module.js b/build/uil.module.js index b52d0b0..022ad21 100644 --- a/build/uil.module.js +++ b/build/uil.module.js @@ -8180,11 +8180,11 @@ class Pad2D extends Proto { class TreeList extends Proto { constructor(o = {}) { - // Propiedades públicas esperadas (API) - // o.tree (obj/array), o.value (array), o.focused (bool), - // o.focusPath (array), o.focusLevel (number), + // API pública esperada: + // o.tree (obj/array), o.value (array) + // o.focused (bool), o.focusPath (array), o.focusLevel (number) // o.tabIndex, o.itemIndex, o.onChange (fn) - o.selectable = true; // navegable por teclado si activas flechas + o.selectable = true; o.name = o.name || 'TreeList'; super(o); @@ -8198,34 +8198,31 @@ class TreeList extends Proto { this.tabIndex = o.tabIndex ?? null; this.itemIndex = o.itemIndex ?? null; - // Callback de notificación - this.changeCb = typeof o.onChange === 'function' ? o.onChange : (/*tabIdx, itemIdx, newPath*/) => {}; + // Callback + this.changeCb = typeof o.onChange === 'function' ? o.onChange : () => {}; - // Layout interno - this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] - this.leafMax = 0; // alto reservado para el último nivel (máximo tamaño de hoja) - this.levelGap = 2; // gap vertical entre niveles - this.hItem = this.h; // alto por ítem + // Layout interno / publicación de altura + this.lineH = this.h; // alto de UNA fila + this.levelGap = this.colors.sy || 2; // separación vertical entre niveles + this.leafMax = 0; // se calcula en rSize() - // Hover / foco de mouse - this.hover = { level: -1, index: -1 }; + // Modelo visual + this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] + this.itemsDom = []; // espejo DOM por nivel + this.hover = { level: -1, index: -1 }; - // DOM visual (sin listeners directos; los eventos llegan vía Roots->handleEvent) - this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); // container interno + // Contenedor interno (absoluto) + this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); this.s[2] = this.c[2].style; - // Inicializa nodos visuales de forma perezosa en rSize() - this.itemsDom = []; // mirror de this.levels (matriz de nodos) - this.init(); } - // =============== Helpers de datos =============== - + // ======= Helpers de tipo ======= static isMap(node) { return node && typeof node === 'object' && !Array.isArray(node); } static isList(node) { return Array.isArray(node); } - // Devuelve el subnodo al seguir path (se detiene si no existe) + // ======= Recorrido de datos ======= getNodeAtPath(path) { let node = this.tree; for (let i = 0; i < path.length; i++) { @@ -8233,8 +8230,8 @@ class TreeList extends Proto { if (!Object.prototype.hasOwnProperty.call(node, path[i])) return { node: null, depth: i }; node = node[path[i]]; } else if (TreeList.isList(node)) { - // Al llegar a lista, ya no hay más descendencia válida para claves - if (i < path.length) return { node, depth: i }; + // Llegamos a una lista: ya no hay más claves válidas + if (i < path.length) return { node, depth: i }; } else { return { node: null, depth: i }; } @@ -8242,32 +8239,30 @@ class TreeList extends Proto { return { node, depth: path.length }; } - // Autocompleta descendiendo por la primera clave de cada mapa hasta alcanzar una lista + // Autocompletar: baja por primeras claves de cada mapa hasta alcanzar una lista autoCompleteToLeaf(basePath) { - let nodeInfo = this.getNodeAtPath(basePath); - let node = nodeInfo.node; + let { node } = this.getNodeAtPath(basePath); const path = basePath.slice(); - while (TreeList.isMap(node)) { const keys = Object.keys(node); - if (!keys.length) break; // mapa vacío + if (!keys.length) break; const k0 = keys[0]; path.push(k0); node = node[k0]; } - // Si termina en lista, NO agrega selección final de elemento hoja + // Si termina en lista, NO agrega un ítem final de la hoja return path; } - // Ruta activa para construir niveles (focusPath si focused, si no value) + // Ruta activa (focusPath si focused, sino value) getActivePath() { return this.focused ? this.focusPath : this.value; } - // Calcula el máximo tamaño de hoja del árbol (para reservar alto estable) + // ======= Tamaño de hoja máximo (para layout estable) ======= computeLeafMax(node = this.tree) { - if (TreeList.isList(node)) return node.length; - if (!TreeList.isMap(node)) return 0; + if (Array.isArray(node)) return node.length; + if (!node || typeof node !== 'object') return 0; let m = 0; for (const k of Object.keys(node)) { m = Math.max(m, this.computeLeafMax(node[k])); @@ -8275,8 +8270,7 @@ class TreeList extends Proto { return m; } - // =============== Construcción de niveles (modelo lógico) =============== - + // ======= Construcción de niveles (modelo lógico) ======= buildLevels() { this.levels.length = 0; const activePath = this.getActivePath(); @@ -8286,38 +8280,39 @@ class TreeList extends Proto { while (node) { if (TreeList.isMap(node)) { - // Opciones = claves del mapa (nivel intermedio) + // Nivel intermedio: claves del mapa (horizontal) const keys = Object.keys(node); - if (!keys.length) break; // detener expansión si vacío - this.levels.push({ type: 'map', items: keys.map(k => ({ key: k, label: k, zone: {x:0,y:0,w:0,h:0} })), zone: {x:0,y:0,w:0,h:this.hItem} }); + if (!keys.length) break; + this.levels.push({ + type: 'map', + items: keys.map(k => ({ key: k, label: k, zone: { x:0,y:0,w:0,h:0 } })), + zone: { x:0,y:0,w:0,h: this.lineH } + }); - // Avanza según la ruta activa (si existe), sino se detiene const nextKey = activePath[level]; if (!nextKey || !node.hasOwnProperty(nextKey)) break; node = node[nextKey]; } else if (TreeList.isList(node)) { - // Último nivel: lista/hoja (vertical) - const items = node.map(label => ({ key: label, label, zone: {x:0,y:0,w:0,h:0} })); - this.levels.push({ type: 'list', items, zone: {x:0,y:0,w:0,h: Math.max(items.length, this.leafMax) * this.hItem } }); - break; // fin + // Nivel hoja: lista vertical + const items = node.map(label => ({ key: label, label, zone: { x:0,y:0,w:0,h:0 } })); + const hList = Math.max(items.length, this.leafMax) * this.lineH; + this.levels.push({ type: 'list', items, zone: { x:0, y:0, w:0, h: hList } }); + break; } else { - break; // nodo inválido + break; } level++; } } - // =============== Layout (zonas internas) =============== - - // Calcula zonas internas de cada ítem/level y construye/actualiza dom + // ======= Layout (zonas & DOM) ======= layoutLevels() { const padX = 8; const w = this.zone.w - padX * 2; let y = 0; - // Asegura `itemsDom` anidado por nivel + // Ajustar itemsDom a cantidad de niveles while (this.itemsDom.length < this.levels.length) this.itemsDom.push([]); - // Limpia extra DOM si niveles disminuyen for (let L = this.levels.length; L < this.itemsDom.length; L++) { for (const el of this.itemsDom[L]) if (el && el.parentNode) el.parentNode.removeChild(el); } @@ -8328,32 +8323,26 @@ class TreeList extends Proto { if (lvl.type === 'map') { const n = Math.max(1, lvl.items.length); const cellW = Math.floor(w / n); - lvl.zone = { x: padX, y, w, h: this.hItem }; + lvl.zone = { x: padX, y, w, h: this.lineH }; let x = padX; - // Asegura contenedor dom de nivel si querés uno (opcional) for (let i = 0; i < lvl.items.length; i++) { const it = lvl.items[i]; - it.zone = { x, y, w: cellW, h: this.hItem }; - - // crea/actualiza nodo visual + it.zone = { x, y, w: cellW, h: this.lineH }; const dom = this.ensureItemDom(L, i); this.paintItemDom(dom, L, i, it, 'map'); - x += cellW; } - y += this.hItem + this.levelGap; + y += this.lineH + this.levelGap; } else { - // lista/hoja vertical + // lista/hoja: reservar h según leafMax const n = lvl.items.length; - const hList = Math.max(n, this.leafMax) * this.hItem; + const hList = Math.max(n, this.leafMax) * this.lineH; lvl.zone = { x: padX, y, w, h: hList }; for (let i = 0; i < Math.max(n, this.leafMax); i++) { - // Puede haber "espacio vacío" si n < leafMax const isReal = i < n; - const it = isReal ? lvl.items[i] : { key: null, label: '', zone: {x:0,y:0,w:0,h:0} }; - it.zone = { x: padX, y: y + i * this.hItem, w, h: this.hItem }; - + const it = isReal ? lvl.items[i] : { key: null, label: '', zone: { x:0,y:0,w:0,h:0 } }; + it.zone = { x: padX, y: y + i * this.lineH, w, h: this.lineH }; const dom = this.ensureItemDom(L, i); this.paintItemDom(dom, L, i, it, 'list', isReal); } @@ -8361,18 +8350,20 @@ class TreeList extends Proto { } } - // Ajusta alto visible del control + // Ajustes de alto interno del contenedor visual const totalH = y; - this.zone.h = totalH + this.margin; // Proto se encarga del margen + this.zone.h = totalH + this.margin; this.s[0].height = this.zone.h + 'px'; this.s[2].height = totalH + 'px'; + + // Publicar alto total al GUI (sumará u.h) + this._publishHeight(); } ensureItemDom(L, i) { const row = this.itemsDom[L]; while (row.length <= i) row.push(null); if (!row[i]) { - // Cada ítem es un DIV posicionado absoluto dentro de this.c[2] const div = this.dom('div', Tools.css.txt + 'position:absolute; pointer-events:none;'); this.c[2].appendChild(div); row[i] = div; @@ -8380,40 +8371,32 @@ class TreeList extends Proto { return row[i]; } - // Colorea y posiciona el DOM del ítem según estados (seleccionado / foco) paintItemDom(div, L, i, it, kind, isReal = true) { const s = div.style; const cc = this.colors; // Posición - s.left = it.zone.x + 'px'; - s.top = it.zone.y + 'px'; + s.left = it.zone.x + 'px'; + s.top = it.zone.y + 'px'; s.width = it.zone.w + 'px'; - s.height = (it.zone.h - 2) + 'px'; // -2 para evitar overlap de bordes + s.height = (it.zone.h - 2) + 'px'; // Texto div.textContent = isReal ? it.label : ''; - // Estados semánticos - const value = this.value; - const selected = (value[L] !== undefined) && (value[L] === it.key) && isReal; - - const inFocusLevel = this.focused && (this.focusLevel === L); - const focusMatch = inFocusLevel && (this.focusPath[L] === it.key) && isReal; - - // Hover (mouse) - const isHover = (this.hover.level === L && this.hover.index === i && isReal); + // Estados + const selected = isReal && this.value[L] !== undefined && this.value[L] === it.key; + const inFocusLvl = this.focused && (this.focusLevel === L); + const focusMatch = isReal && inFocusLvl && (this.focusPath[L] === it.key); + const isHover = isReal && (this.hover.level === L && this.hover.index === i); // Estilos base s.background = cc.back; s.color = cc.text; s.border = '1px solid ' + cc.border; + s.textAlign = kind === 'map' ? 'center' : 'left'; - // Mapa = horizontal, Lista = vertical - if (kind === 'map') s.textAlign = 'center'; - else s.textAlign = 'left'; - - // Priorización visual: seleccionado > foco > hover > base + // Prioridad visual: seleccionado > foco > hover > base if (selected) { s.background = cc.select; s.color = cc.textSelect; @@ -8424,35 +8407,30 @@ class TreeList extends Proto { s.background = cc.overoff; s.color = cc.textOver; } - // Deshabilitar DOM si no hay ítem real en filas de padding + + // Filas de padding invisibles en hoja s.opacity = isReal ? '1' : '0'; } - // =============== Ciclo de vida visual =============== - + // ======= Ciclo de vida ======= rSize() { - // Recalcula leafMax y niveles cada vez que cambia tamaño/datos this.leafMax = this.computeLeafMax(this.tree); this.buildLevels(); this.layoutLevels(); } update() { - // Redibuja cuando cambian estados de hover/focus/value externamente this.buildLevels(); this.layoutLevels(); } - // =============== Interacción (hit-testing y selección) =============== - - // Convierte coords globales a locales del control (igual que Proto) + // ======= Interacción ======= _toLocal(e) { const mx = e.clientX - this.zone.x; const my = e.clientY - this.zone.y; return { x: mx, y: my }; } - // Busca qué ítem (L,i) está bajo el mouse; respeta zonas por nivel _hitTest(mx, my) { for (let L = 0; L < this.levels.length; L++) { const lvl = this.levels[L]; @@ -8467,11 +8445,10 @@ class TreeList extends Proto { } } } else { - // hoja: puede contener filas de padding const nRows = Math.max(lvl.items.length, this.leafMax); for (let i = 0; i < nRows; i++) { const isReal = i < lvl.items.length; - const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.hItem, w: z.w, h: this.hItem }; + const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.lineH, w: z.w, h: this.lineH }; if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { return { L, i, real: isReal }; } @@ -8484,12 +8461,11 @@ class TreeList extends Proto { handleEvent(e) { if (this.lock) return false; - // Delega estados de hover / click if (e.type === 'mousemove') { const { x, y } = this._toLocal(e); const ht = this._hitTest(x, y); this.hover = (ht.L !== -1 && ht.real) ? { level: ht.L, index: ht.i } : { level: -1, index: -1 }; - this.update(); // repintar con hover + this.update(); return true; } @@ -8503,50 +8479,77 @@ class TreeList extends Proto { } if (e.type === 'mouseup') { - // nada por ahora return true; } - // Soporte básico para teclado (opcional: Up/Down/Left/Right) - if (e.type === 'keydown') ; - + // (Opcional) teclado: integrar navegación en Gui y reenviar aquí si se desea return false; } - // Regla de selección y autocompletado + // Selección + autocompletado + notificación _selectAt(L, i) { const lvl = this.levels[L]; const chosen = lvl.items[i]; if (!chosen || !chosen.key) return; - // 1) Recortar value hasta L e insertar la opción elegida const base = this.value.slice(0, L); base[L] = chosen.key; - // 2) Autocompletar por primera clave descendiendo hasta una lista const newPath = this.autoCompleteToLeaf(base); - // 3) Notificar - this.value = newPath.slice(); // reflejar selección interna + this.value = newPath.slice(); this.update(); this.changeCb(this.tabIndex, this.itemIndex, newPath); } - // API pública para sincronización externa (por si quieres settear desde afuera) + // ======= API pública ======= setValue(path) { this.value = Array.isArray(path) ? path.slice() : []; this.update(); } + setTree(tree) { this.tree = tree || {}; + // recalcular leafMax en próxima pasada + this.leafMax = this.computeLeafMax(this.tree); this.update(); } + setFocus({ focused, focusPath, focusLevel }) { if (typeof focused === 'boolean') this.focused = focused; if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); if (typeof focusLevel === 'number') this.focusLevel = focusLevel; this.update(); } + + // ======= Publicación de altura ======= + _countVisibleIntermediates() { + let c = 0; + for (let i = 0; i < this.levels.length; i++) if (this.levels[i].type === 'map') c++; + return c; + } + + _getCurrentLeafLength() { + const last = this.levels[this.levels.length - 1]; + return last && last.type === 'list' ? last.items.length : 0; + } + + _publishHeight() { + const inter = this._countVisibleIntermediates(); + const leafLen = Math.max(this.leafMax, this._getCurrentLeafLength()); + const leafH = leafLen * this.lineH; + const interH = inter * (this.lineH + this.levelGap); + const totalH = interH + (inter ? this.levelGap : 0) + leafH; + + // Actualiza métricas del proto (lo que suma el GUI) + this.h = totalH; + this.zone.h = this.h + this.margin; + this.s[0].height = this.h + 'px'; + + // Avisar al GUI y refrescar zonas + if (this.isUI && this.main) this.main.calc(); + Roots.needReZone = true; + } } const add = function () { @@ -9437,4 +9440,4 @@ class Gui { } export { Files, Gui, REVISION, Tools, add }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gUHJvcGllZGFkZXMgcMO6YmxpY2FzIGVzcGVyYWRhcyAoQVBJKVxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSksIG8uZm9jdXNlZCAoYm9vbCksXHJcbiAgICAvLyBvLmZvY3VzUGF0aCAoYXJyYXkpLCBvLmZvY3VzTGV2ZWwgKG51bWJlciksXHJcbiAgICAvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcbiAgICBvLnNlbGVjdGFibGUgPSB0cnVlOyAgICAgICAgICAgLy8gbmF2ZWdhYmxlIHBvciB0ZWNsYWRvIHNpIGFjdGl2YXMgZmxlY2hhc1xyXG4gICAgby5uYW1lID0gby5uYW1lIHx8ICdUcmVlTGlzdCc7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICAvLyBEYXRvcyAmIGVzdGFkb1xyXG4gICAgdGhpcy50cmVlICAgICAgID0gby50cmVlIHx8IHt9O1xyXG4gICAgdGhpcy52YWx1ZSAgICAgID0gQXJyYXkuaXNBcnJheShvLnZhbHVlKSA/IG8udmFsdWUuc2xpY2UoKSA6IFtdO1xyXG4gICAgdGhpcy5mb2N1c2VkICAgID0gISFvLmZvY3VzZWQ7XHJcbiAgICB0aGlzLmZvY3VzUGF0aCAgPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09ICdudW1iZXInID8gby5mb2N1c0xldmVsIDogLTE7XHJcblxyXG4gICAgdGhpcy50YWJJbmRleCAgID0gby50YWJJbmRleCA/PyBudWxsO1xyXG4gICAgdGhpcy5pdGVtSW5kZXggID0gby5pdGVtSW5kZXggPz8gbnVsbDtcclxuXHJcbiAgICAvLyBDYWxsYmFjayBkZSBub3RpZmljYWNpw7NuXHJcbiAgICB0aGlzLmNoYW5nZUNiICAgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoLyp0YWJJZHgsIGl0ZW1JZHgsIG5ld1BhdGgqLykgPT4ge307XHJcblxyXG4gICAgLy8gTGF5b3V0IGludGVybm9cclxuICAgIHRoaXMubGV2ZWxzID0gW107ICAgLy8gW3t0eXBlOidtYXAnfCdsaXN0JywgaXRlbXM6W3trZXksbGFiZWwsem9uZX1dLCB6b25lOnt4LHksdyxofX0uLi5dXHJcbiAgICB0aGlzLmxlYWZNYXggPSAwOyAgIC8vIGFsdG8gcmVzZXJ2YWRvIHBhcmEgZWwgw7psdGltbyBuaXZlbCAobcOheGltbyB0YW1hw7FvIGRlIGhvamEpXHJcbiAgICB0aGlzLmxldmVsR2FwID0gMjsgIC8vIGdhcCB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmhJdGVtICAgID0gdGhpcy5oOyAgLy8gYWx0byBwb3Igw610ZW1cclxuXHJcbiAgICAvLyBIb3ZlciAvIGZvY28gZGUgbW91c2VcclxuICAgIHRoaXMuaG92ZXIgPSB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblxyXG4gICAgLy8gRE9NIHZpc3VhbCAoc2luIGxpc3RlbmVycyBkaXJlY3RvczsgbG9zIGV2ZW50b3MgbGxlZ2FuIHbDrWEgUm9vdHMtPmhhbmRsZUV2ZW50KVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpOyAvLyBjb250YWluZXIgaW50ZXJub1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIC8vIEluaWNpYWxpemEgbm9kb3MgdmlzdWFsZXMgZGUgZm9ybWEgcGVyZXpvc2EgZW4gclNpemUoKVxyXG4gICAgdGhpcy5pdGVtc0RvbSA9IFtdOyAvLyBtaXJyb3IgZGUgdGhpcy5sZXZlbHMgKG1hdHJpeiBkZSBub2RvcylcclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PSBIZWxwZXJzIGRlIGRhdG9zID09PT09PT09PT09PT09PVxyXG5cclxuICBzdGF0aWMgaXNNYXAobm9kZSkgIHsgcmV0dXJuIG5vZGUgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG5vZGUpOyB9XHJcbiAgc3RhdGljIGlzTGlzdChub2RlKSB7IHJldHVybiBBcnJheS5pc0FycmF5KG5vZGUpOyB9XHJcblxyXG4gIC8vIERldnVlbHZlIGVsIHN1Ym5vZG8gYWwgc2VndWlyIHBhdGggKHNlIGRldGllbmUgc2kgbm8gZXhpc3RlKVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gQWwgbGxlZ2FyIGEgbGlzdGEsIHlhIG5vIGhheSBtw6FzIGRlc2NlbmRlbmNpYSB2w6FsaWRhIHBhcmEgY2xhdmVzXHJcbiAgICAgICAgaWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTsgXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGEgZGVzY2VuZGllbmRvIHBvciBsYSBwcmltZXJhIGNsYXZlIGRlIGNhZGEgbWFwYSBoYXN0YSBhbGNhbnphciB1bmEgbGlzdGFcclxuICBhdXRvQ29tcGxldGVUb0xlYWYoYmFzZVBhdGgpIHtcclxuICAgIGxldCBub2RlSW5mbyA9IHRoaXMuZ2V0Tm9kZUF0UGF0aChiYXNlUGF0aCk7XHJcbiAgICBsZXQgbm9kZSA9IG5vZGVJbmZvLm5vZGU7XHJcbiAgICBjb25zdCBwYXRoID0gYmFzZVBhdGguc2xpY2UoKTtcclxuXHJcbiAgICB3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhazsgLy8gbWFwYSB2YWPDrW9cclxuICAgICAgY29uc3QgazAgPSBrZXlzWzBdO1xyXG4gICAgICBwYXRoLnB1c2goazApO1xyXG4gICAgICBub2RlID0gbm9kZVtrMF07XHJcbiAgICB9XHJcbiAgICAvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2Egc2VsZWNjacOzbiBmaW5hbCBkZSBlbGVtZW50byBob2phXHJcbiAgICByZXR1cm4gcGF0aDtcclxuICB9XHJcblxyXG4gIC8vIFJ1dGEgYWN0aXZhIHBhcmEgY29uc3RydWlyIG5pdmVsZXMgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaSBubyB2YWx1ZSlcclxuICBnZXRBY3RpdmVQYXRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCA/IHRoaXMuZm9jdXNQYXRoIDogdGhpcy52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIENhbGN1bGEgZWwgbcOheGltbyB0YW1hw7FvIGRlIGhvamEgZGVsIMOhcmJvbCAocGFyYSByZXNlcnZhciBhbHRvIGVzdGFibGUpXHJcbiAgY29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG4gICAgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkgcmV0dXJuIG5vZGUubGVuZ3RoO1xyXG4gICAgaWYgKCFUcmVlTGlzdC5pc01hcChub2RlKSkgcmV0dXJuIDA7XHJcbiAgICBsZXQgbSA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcclxuICAgICAgbSA9IE1hdGgubWF4KG0sIHRoaXMuY29tcHV0ZUxlYWZNYXgobm9kZVtrXSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG07XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PT09PT09PT09XHJcblxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gT3BjaW9uZXMgPSBjbGF2ZXMgZGVsIG1hcGEgKG5pdmVsIGludGVybWVkaW8pXHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICAgIGlmICgha2V5cy5sZW5ndGgpIGJyZWFrOyAvLyBkZXRlbmVyIGV4cGFuc2nDs24gc2kgdmFjw61vXHJcbiAgICAgICAgdGhpcy5sZXZlbHMucHVzaCh7IHR5cGU6ICdtYXAnLCBpdGVtczoga2V5cy5tYXAoayA9PiAoeyBrZXk6IGssIGxhYmVsOiBrLCB6b25lOiB7eDowLHk6MCx3OjAsaDowfSB9KSksIHpvbmU6IHt4OjAseTowLHc6MCxoOnRoaXMuaEl0ZW19IH0pO1xyXG5cclxuICAgICAgICAvLyBBdmFuemEgc2Vnw7puIGxhIHJ1dGEgYWN0aXZhIChzaSBleGlzdGUpLCBzaW5vIHNlIGRldGllbmVcclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyDDmmx0aW1vIG5pdmVsOiBsaXN0YS9ob2phICh2ZXJ0aWNhbClcclxuICAgICAgICBjb25zdCBpdGVtcyA9IG5vZGUubWFwKGxhYmVsID0+ICh7IGtleTogbGFiZWwsIGxhYmVsLCB6b25lOiB7eDowLHk6MCx3OjAsaDowfSB9KSk7XHJcbiAgICAgICAgdGhpcy5sZXZlbHMucHVzaCh7IHR5cGU6ICdsaXN0JywgaXRlbXMsIHpvbmU6IHt4OjAseTowLHc6MCxoOiBNYXRoLm1heChpdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCkgKiB0aGlzLmhJdGVtIH0gfSk7XHJcbiAgICAgICAgYnJlYWs7IC8vIGZpblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrOyAvLyBub2RvIGludsOhbGlkb1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT0gTGF5b3V0ICh6b25hcyBpbnRlcm5hcykgPT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIENhbGN1bGEgem9uYXMgaW50ZXJuYXMgZGUgY2FkYSDDrXRlbS9sZXZlbCB5IGNvbnN0cnV5ZS9hY3R1YWxpemEgZG9tXHJcbiAgbGF5b3V0TGV2ZWxzKCkge1xyXG4gICAgY29uc3QgcGFkWCA9IDg7XHJcbiAgICBjb25zdCB3ID0gdGhpcy56b25lLncgLSBwYWRYICogMjtcclxuICAgIGxldCB5ID0gMDtcclxuXHJcbiAgICAvLyBBc2VndXJhIGBpdGVtc0RvbWAgYW5pZGFkbyBwb3Igbml2ZWxcclxuICAgIHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkgdGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuICAgIC8vIExpbXBpYSBleHRyYSBET00gc2kgbml2ZWxlcyBkaXNtaW51eWVuXHJcbiAgICBmb3IgKGxldCBMID0gdGhpcy5sZXZlbHMubGVuZ3RoOyBMIDwgdGhpcy5pdGVtc0RvbS5sZW5ndGg7IEwrKykge1xyXG4gICAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuaXRlbXNEb21bTF0pIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuICAgIGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuICAgICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICAgIGlmIChsdmwudHlwZSA9PT0gJ21hcCcpIHtcclxuICAgICAgICBjb25zdCBuID0gTWF0aC5tYXgoMSwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgY2VsbFcgPSBNYXRoLmZsb29yKHcgLyBuKTtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogdGhpcy5oSXRlbSB9O1xyXG4gICAgICAgIGxldCB4ID0gcGFkWDtcclxuICAgICAgICAvLyBBc2VndXJhIGNvbnRlbmVkb3IgZG9tIGRlIG5pdmVsIHNpIHF1ZXLDqXMgdW5vIChvcGNpb25hbClcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5oSXRlbSB9O1xyXG5cclxuICAgICAgICAgIC8vIGNyZWEvYWN0dWFsaXphIG5vZG8gdmlzdWFsXHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbWFwJyk7XHJcblxyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgeSArPSB0aGlzLmhJdGVtICsgdGhpcy5sZXZlbEdhcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsaXN0YS9ob2phIHZlcnRpY2FsXHJcbiAgICAgICAgY29uc3QgbiA9IGx2bC5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpICogdGhpcy5oSXRlbTtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogaExpc3QgfTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpOyBpKyspIHtcclxuICAgICAgICAgIC8vIFB1ZWRlIGhhYmVyIFwiZXNwYWNpbyB2YWPDrW9cIiBzaSBuIDwgbGVhZk1heFxyXG4gICAgICAgICAgY29uc3QgaXNSZWFsID0gaSA8IG47XHJcbiAgICAgICAgICBjb25zdCBpdCA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXSA6IHsga2V5OiBudWxsLCBsYWJlbDogJycsIHpvbmU6IHt4OjAseTowLHc6MCxoOjB9IH07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4OiBwYWRYLCB5OiB5ICsgaSAqIHRoaXMuaEl0ZW0sIHcsIGg6IHRoaXMuaEl0ZW0gfTtcclxuXHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbGlzdCcsIGlzUmVhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHkgKz0gaExpc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBanVzdGEgYWx0byB2aXNpYmxlIGRlbCBjb250cm9sXHJcbiAgICBjb25zdCB0b3RhbEggPSB5O1xyXG4gICAgdGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjsgLy8gUHJvdG8gc2UgZW5jYXJnYSBkZWwgbWFyZ2VuXHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy56b25lLmggKyAncHgnO1xyXG4gICAgdGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArICdweCc7XHJcbiAgfVxyXG5cclxuICBlbnN1cmVJdGVtRG9tKEwsIGkpIHtcclxuICAgIGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcbiAgICB3aGlsZSAocm93Lmxlbmd0aCA8PSBpKSByb3cucHVzaChudWxsKTtcclxuICAgIGlmICghcm93W2ldKSB7XHJcbiAgICAgIC8vIENhZGEgw610ZW0gZXMgdW4gRElWIHBvc2ljaW9uYWRvIGFic29sdXRvIGRlbnRybyBkZSB0aGlzLmNbMl1cclxuICAgICAgY29uc3QgZGl2ID0gdGhpcy5kb20oJ2RpdicsIFRvb2xzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7Jyk7XHJcbiAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgICByb3dbaV0gPSBkaXY7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93W2ldO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29sb3JlYSB5IHBvc2ljaW9uYSBlbCBET00gZGVsIMOtdGVtIHNlZ8O6biBlc3RhZG9zIChzZWxlY2Npb25hZG8gLyBmb2NvKVxyXG4gIHBhaW50SXRlbURvbShkaXYsIEwsIGksIGl0LCBraW5kLCBpc1JlYWwgPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzID0gZGl2LnN0eWxlO1xyXG4gICAgY29uc3QgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAvLyBQb3NpY2nDs25cclxuICAgIHMubGVmdCA9IGl0LnpvbmUueCArICdweCc7XHJcbiAgICBzLnRvcCAgPSBpdC56b25lLnkgKyAncHgnO1xyXG4gICAgcy53aWR0aCAgPSBpdC56b25lLncgKyAncHgnO1xyXG4gICAgcy5oZWlnaHQgPSAoaXQuem9uZS5oIC0gMikgKyAncHgnOyAgLy8gLTIgcGFyYSBldml0YXIgb3ZlcmxhcCBkZSBib3JkZXNcclxuXHJcbiAgICAvLyBUZXh0b1xyXG4gICAgZGl2LnRleHRDb250ZW50ID0gaXNSZWFsID8gaXQubGFiZWwgOiAnJztcclxuXHJcbiAgICAvLyBFc3RhZG9zIHNlbcOhbnRpY29zXHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9ICh2YWx1ZVtMXSAhPT0gdW5kZWZpbmVkKSAmJiAodmFsdWVbTF0gPT09IGl0LmtleSkgJiYgaXNSZWFsO1xyXG5cclxuICAgIGNvbnN0IGluRm9jdXNMZXZlbCA9IHRoaXMuZm9jdXNlZCAmJiAodGhpcy5mb2N1c0xldmVsID09PSBMKTtcclxuICAgIGNvbnN0IGZvY3VzTWF0Y2ggICA9IGluRm9jdXNMZXZlbCAmJiAodGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleSkgJiYgaXNSZWFsO1xyXG5cclxuICAgIC8vIEhvdmVyIChtb3VzZSlcclxuICAgIGNvbnN0IGlzSG92ZXIgPSAodGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJiB0aGlzLmhvdmVyLmluZGV4ID09PSBpICYmIGlzUmVhbCk7XHJcblxyXG4gICAgLy8gRXN0aWxvcyBiYXNlXHJcbiAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgcy5jb2xvciAgICAgID0gY2MudGV4dDtcclxuICAgIHMuYm9yZGVyICAgICA9ICcxcHggc29saWQgJyArIGNjLmJvcmRlcjtcclxuXHJcbiAgICAvLyBNYXBhID0gaG9yaXpvbnRhbCwgTGlzdGEgPSB2ZXJ0aWNhbFxyXG4gICAgaWYgKGtpbmQgPT09ICdtYXAnKSBzLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgZWxzZSBzLnRleHRBbGlnbiA9ICdsZWZ0JztcclxuXHJcbiAgICAvLyBQcmlvcml6YWNpw7NuIHZpc3VhbDogc2VsZWNjaW9uYWRvID4gZm9jbyA+IGhvdmVyID4gYmFzZVxyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICB9IGVsc2UgaWYgKGZvY3VzTWF0Y2gpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH0gZWxzZSBpZiAoaXNIb3Zlcikge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICB9XHJcbiAgICAvLyBEZXNoYWJpbGl0YXIgRE9NIHNpIG5vIGhheSDDrXRlbSByZWFsIGVuIGZpbGFzIGRlIHBhZGRpbmdcclxuICAgIHMub3BhY2l0eSA9IGlzUmVhbCA/ICcxJyA6ICcwJztcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PSBDaWNsbyBkZSB2aWRhIHZpc3VhbCA9PT09PT09PT09PT09PT1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICAvLyBSZWNhbGN1bGEgbGVhZk1heCB5IG5pdmVsZXMgY2FkYSB2ZXogcXVlIGNhbWJpYSB0YW1hw7FvL2RhdG9zXHJcbiAgICB0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcbiAgICB0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcbiAgICB0aGlzLmxheW91dExldmVscygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgLy8gUmVkaWJ1amEgY3VhbmRvIGNhbWJpYW4gZXN0YWRvcyBkZSBob3Zlci9mb2N1cy92YWx1ZSBleHRlcm5hbWVudGVcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT0gSW50ZXJhY2Npw7NuIChoaXQtdGVzdGluZyB5IHNlbGVjY2nDs24pID09PT09PT09PT09PT09PVxyXG5cclxuICAvLyBDb252aWVydGUgY29vcmRzIGdsb2JhbGVzIGEgbG9jYWxlcyBkZWwgY29udHJvbCAoaWd1YWwgcXVlIFByb3RvKVxyXG4gIF90b0xvY2FsKGUpIHtcclxuICAgIGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICBjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG4gICAgcmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcbiAgfVxyXG5cclxuICAvLyBCdXNjYSBxdcOpIMOtdGVtIChMLGkpIGVzdMOhIGJham8gZWwgbW91c2U7IHJlc3BldGEgem9uYXMgcG9yIG5pdmVsXHJcbiAgX2hpdFRlc3QobXgsIG15KSB7XHJcbiAgICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgICBjb25zdCB6ID0gbHZsLnpvbmU7XHJcbiAgICAgIGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaCkgY29udGludWU7XHJcblxyXG4gICAgICBpZiAobHZsLnR5cGUgPT09ICdtYXAnKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGx2bC5pdGVtc1tpXS56b25lO1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiB0cnVlIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGhvamE6IHB1ZWRlIGNvbnRlbmVyIGZpbGFzIGRlIHBhZGRpbmdcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmhJdGVtLCB3OiB6LncsIGg6IHRoaXMuaEl0ZW0gfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgLy8gRGVsZWdhIGVzdGFkb3MgZGUgaG92ZXIgLyBjbGlja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpOyAvLyByZXBpbnRhciBjb24gaG92ZXJcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlZG93bicpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIGlmIChodC5MICE9PSAtMSAmJiBodC5yZWFsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0QXQoaHQuTCwgaHQuaSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2V1cCcpIHtcclxuICAgICAgLy8gbmFkYSBwb3IgYWhvcmFcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU29wb3J0ZSBiw6FzaWNvIHBhcmEgdGVjbGFkbyAob3BjaW9uYWw6IFVwL0Rvd24vTGVmdC9SaWdodClcclxuICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJykge1xyXG4gICAgICAvLyBQdWVkZXMgaW50ZWdyYXIgbmF2ZWdhY2nDs24gZGUgZmxlY2hhcyBhcXXDrSBzaSBsbyBkZXNlYXMsXHJcbiAgICAgIC8vIHJldXRpbGl6YW5kbyB0aGlzLmlzU2VsZWN0YWJsZSAoeWEgbWFyY2FkYSBlbiBjdG9yKS5cclxuICAgICAgLy8gUmVjb21lbmRhY2nDs246IG1vdmVyIGZvY28gZW50cmUgbml2ZWxlcy/DrXRlbXMgY29uIFJvb3RzK0d1aS4gOmNvbnRlbnRSZWZlcmVuY2Vbb2FpY2l0ZToxXXtpbmRleD0xfSA6Y29udGVudFJlZmVyZW5jZVtvYWljaXRlOjJde2luZGV4PTJ9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gUmVnbGEgZGUgc2VsZWNjacOzbiB5IGF1dG9jb21wbGV0YWRvXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICAvLyAxKSBSZWNvcnRhciB2YWx1ZSBoYXN0YSBMIGUgaW5zZXJ0YXIgbGEgb3BjacOzbiBlbGVnaWRhXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIC8vIDIpIEF1dG9jb21wbGV0YXIgcG9yIHByaW1lcmEgY2xhdmUgZGVzY2VuZGllbmRvIGhhc3RhIHVuYSBsaXN0YVxyXG4gICAgY29uc3QgbmV3UGF0aCA9IHRoaXMuYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2UpO1xyXG5cclxuICAgIC8vIDMpIE5vdGlmaWNhclxyXG4gICAgdGhpcy52YWx1ZSA9IG5ld1BhdGguc2xpY2UoKTsgLy8gcmVmbGVqYXIgc2VsZWNjacOzbiBpbnRlcm5hXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcbiAgfVxyXG5cclxuICAvLyBBUEkgcMO6YmxpY2EgcGFyYSBzaW5jcm9uaXphY2nDs24gZXh0ZXJuYSAocG9yIHNpIHF1aWVyZXMgc2V0dGVhciBkZXNkZSBhZnVlcmEpXHJcbiAgc2V0VmFsdWUocGF0aCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG4gIHNldFRyZWUodHJlZSkge1xyXG4gICAgdGhpcy50cmVlID0gdHJlZSB8fCB7fTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDWSxNQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxHQUFHO0FBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0FBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0FBQ0EsRUFBRSxFQUFFLEVBQUUsSUFBSTtB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QzVCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRTtBQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsRUFBRSxVQUFVLElBQUksRUFBRTtBQUM3QixJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDeEMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDbkMsSUFBSSxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0FBQ3JDLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxFQUFFLFlBQVk7QUFDMUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLE9BQU87QUFDbEMsSUFBSSxJQUFJLENBQUMs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Q0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDakUsWUFBWSxDQUFDLElBQUksQ0FB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RUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDcEosUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNySDtBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FB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LENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pIO0FBQ0E7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtBQUNBO0FBQ0E7QUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtBQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFB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QyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0FBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8s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QUMsTUFBTTtBQUM3QixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtBQUM1QixVQUFVLEtBQUssQ0FBQyxNQUFNO0FBQ3RCLEtBQUssQ0FBQztBQUNOO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDckMsSUFBSSxJQUFJ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LElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDekMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksR0FBRztBQUNULElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDckM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUM1RDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN6QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0FBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQ2hDLEtBQUssTUFBTTtBQUNYLE1B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QyxDQUFDLENBQUMsQ0FBQztBQUN2RDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtBQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztBQUNBLElB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QUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBRztBQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxD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R0FBRyxHQUFHLEdBQUU7QUFDckIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUU7QUFDdEI7QUFDQSxRQUFRLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFlBQVksR0FBRyxHQUFHLE1BQUs7QUFDdkIsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxLQUFJO0FBQy9FO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFFO0FBQ2xNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTTtBQUN0RSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUk7QUFDbkUsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3JELFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFFO0FBQ3BFLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssR0FBRztBQUNaO0FBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDeEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENB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QUFDLENBQUMsS0FBSyxFQUFDO0FBQ3ZDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDckIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0FBQ2xEO0FBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNwUE8sTUFBTSxRQUFRLFNBQVMs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LElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN2QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JD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QUFDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDbkM7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3RCO0FBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7QUFDbEMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUM7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzVCLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzNCLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxJ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Q0FBQyxNQUFNLEVBQUU7QUFDdkI7QUFDQSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUIsUUFBUTtBQUNSO0FBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7QUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckM7QUFDQSxTQUFTLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMvRCxTQUFTLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2hELFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRTtBQUM3QixTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsU0FBUyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHO0FBQ3hCLE9BQU8sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN2QyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEMsZUFBZSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNuRDtBQUNBLE9BQU8sR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQSxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDeEQsT0FBTyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLE9BQU87QUFDUDtBQUNBLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUNwRDtBQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0UsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtBQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7QUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUN0QztBQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7QUFDdEM7QUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7QUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtBQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0FBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7QUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0M7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNmO0FBQ0EsRUFBRSxJQUFJLENBQUMsWUFBWSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVELGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsYUFBYSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM1QjtBQUNBLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQzdCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDcEI7QUFDQSxLQUFLLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUMxQztBQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzVCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFNO0FBQzFCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDOUM7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3ZCLE1BQU07QUFDTixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDaEI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM5QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDekIsS0FBSyxPQUFPLElBQUksQ0FBQztBQUNqQjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsV0FBVyxDQUFDLEdBQUc7QUFDaEI7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ2pCLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBSztBQUNmO0FBQ0EsS0FBYyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPO0FBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ25DLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0FBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7QUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBO0FBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVEO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDcEM7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztBQUM1QyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDckI7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQ3BhTyxNQUFNLEdBQUcsU0FBUyxLQUFLLENBQUM7QUFDL0I7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQztBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDbkM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztBQUMxQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzlDLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN4QztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QjtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFFO0FBQ3RDLFlBQVksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM5QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekIsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN4RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzVCO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBSztBQUN0QztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNoQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUMzQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLCtCQUErQixFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsOEVBQThFLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7QUFDaE07QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsUUFBUSxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2pGO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2xELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQzdLO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtEQUFrRCxFQUFFLENBQUM7QUFDMUo7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsMkVBQTJFLENBQUMsQ0FBQztBQUN0SjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0E7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDdEUsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7QUFDQSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUM7QUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMxQixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFlBQVksT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZEO0FBQ0Es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QUFDM0MsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtBQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFD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QyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQztBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztBQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7QUFD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QUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSTtBQUM5QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FB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QUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RCO0FBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztBQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0FBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtBQUNBLE1BQU07QUFDTjtBQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVB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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsNENBQTRDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQztBQUM1SCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDNUs7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDMUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHNCQUFzQixFQUFDO0FBQzFJO0FBQ0EsUUFBZ0IsSUFBSSxDQUFDLEVBQUU7QUFDdkIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFPO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRTtBQUMxQjtBQUNBLFFBQVEsSUFBSSxDQUFD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R0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtBQUN2QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDN0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztBQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2hFO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25ELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDN0Y7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQ3BCO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUs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QyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0FBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0FBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFH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Q0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNGLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FB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SSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxD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RztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7QUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7QUFDOUI7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JEO0FBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7QUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN4RCxhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7QUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCO0FBQ0EsU0FBUztBQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDekQsUUFBUSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDNUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDMUM7QUFDQTtBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixZQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLEtBQUssQ0FBQztBQUNyRCxTQUFTLE1BQU07QUFDZixZQUFZLElBQUksR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDMUIsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHO0FBQzNDO0FBQ0EsWUFBWSxDQUFDLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNoRCxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDaEQsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDOUQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtBQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0FBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6RDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDckM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0FBQ0E7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtBQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0FBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FB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Q0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7QUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7QUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BDO0FB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QUMsQ0FBQztBQUNwRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN4RCxTQUFTLE1BQU07QUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN4RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJ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QUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BEO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzFCLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztBQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDaEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNyRCxN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O0FBQzNCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDOUI7QUFDQTtBQUNBLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtBQUNBO0FBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtBQUNBO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0FBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJ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TUFBTSxDQUFDO0FBQ3pCO0FBQ0EsSUFBSSxRQUFRLElBQUk7QUFDaEIsTUFBTSxLQUFLLENBQUM7QUFDWjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDeEQsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDNUQsUUFBUSxNQUFNO0FBQ2QsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtBQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtBQUNBLElBQUksSUFBSSxPQUFPO0FBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzNDO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtBQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEIsR0FBRztBQUNIOztBQzdTTyxNQUFNLFNBQVMsU0FBUyxLQUFLLENBQUM7QUFDckM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFC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QUUsQ0FBQztBQUN2QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87QUFDbEM7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEQsYUFBYSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxJQUFJO0FBQ2Y7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUs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QUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDaEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7QUFD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LENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUU7QUFDNUwsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUN2TDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3JCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFDOUQsUUFBUSxPQUFPLEdBQUc7QUFDbEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtB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LENBQUM7QUFDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksQ0FBQyxR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RyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7QUFDakQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUU7QUFDbEQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN4RDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDckY7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENB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QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVELFNBQVM7QUFDVDtBQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0FBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJ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LEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM3RCxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRDtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5RjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztBQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0FBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7QUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtBQUN6RTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7QUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0FBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUMzRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBQztBQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUM5RDtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0FBQ2hELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFFO0FBQ3BFO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDclJBO0FBSUE7QUFDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO0FBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0FBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxrQ0FBa0MsRUFBRSxDQUFDO0FBQzNHO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxD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QVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEUsTUFBTSxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRyxLQUFLO0FBQ0wsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM5QztBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pELE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7QUFDOUIsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEMsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRCxVQUFVLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEQ7QUFDQTtBQUNBLFVBQVUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0MsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRDtBQUNBLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUNyQixTQUFTO0FBQ1QsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sTUFBTTtBQUNiO0FBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNuQyxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdELFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDL0M7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUQ7QUFDQSxVQUFVLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsVUFBVSxNQUFNLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRixVQUFVLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekU7QUFDQSxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNELFNBQVM7QUFDVCxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDbkIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDckMsR0FBRztBQUNIO0FBQ0EsRUFBRSxh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QTtBQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNkLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QyxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ25CLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pELE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxNQUFNLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDekIsTUFBTSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTO0FBQzdFO0FBQ0EsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0FBQzlCLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25ELFVBQVUsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEMsVUFBVSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUN4RixZQUFZLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN4QyxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU8sTUFBTTtBQUNiO0FBQ0EsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMvRCxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsVUFBVSxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDOUMsVUFBVSxNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzlHLFVBQVUsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJ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Q0FBQyxDQUFDLE1BQU07QUFDOUMsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2xELFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNsRCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDeEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNoRCxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNyRSxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDbEQsWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDekUsWUFBWSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDL0QsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3BELFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFD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QztBQUNqRTtBQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7QUFDNUM7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDcEU7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENB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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuICAgIC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG4gICAgLy8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG4gICAgby5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuICAgIG8ubmFtZSA9IG8ubmFtZSB8fCAnVHJlZUxpc3QnO1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgLy8gRGF0b3MgJiBlc3RhZG9cclxuICAgIHRoaXMudHJlZSAgICAgICA9IG8udHJlZSB8fCB7fTtcclxuICAgIHRoaXMudmFsdWUgICAgICA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNlZCAgICA9ICEhby5mb2N1c2VkO1xyXG4gICAgdGhpcy5mb2N1c1BhdGggID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSAnbnVtYmVyJyA/IG8uZm9jdXNMZXZlbCA6IC0xO1xyXG5cclxuICAgIHRoaXMudGFiSW5kZXggICA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuICAgIHRoaXMuaXRlbUluZGV4ICA9IG8uaXRlbUluZGV4ID8/IG51bGw7XHJcblxyXG4gICAgLy8gQ2FsbGJhY2tcclxuICAgIHRoaXMuY2hhbmdlQ2IgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcbiAgICAvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuICAgIHRoaXMubGluZUggICAgPSB0aGlzLmg7ICAgICAgICAgICAgICAgLy8gYWx0byBkZSBVTkEgZmlsYVxyXG4gICAgdGhpcy5sZXZlbEdhcCA9IHRoaXMuY29sb3JzLnN5IHx8IDI7ICAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmxlYWZNYXggID0gMDsgICAgICAgICAgICAgICAgICAgIC8vIHNlIGNhbGN1bGEgZW4gclNpemUoKVxyXG5cclxuICAgIC8vIE1vZGVsbyB2aXN1YWxcclxuICAgIHRoaXMubGV2ZWxzICAgPSBbXTsgICAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuICAgIHRoaXMuaXRlbXNEb20gPSBbXTsgICAvLyBlc3Blam8gRE9NIHBvciBuaXZlbFxyXG4gICAgdGhpcy5ob3ZlciAgICA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcbiAgICAvLyBDb250ZW5lZG9yIGludGVybm8gKGFic29sdXRvKVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpO1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG4gIHN0YXRpYyBpc01hcChub2RlKSAgeyByZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuICBzdGF0aWMgaXNMaXN0KG5vZGUpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuXHJcbiAgLy8gPT09PT09PSBSZWNvcnJpZG8gZGUgZGF0b3MgPT09PT09PVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG4gICAgICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG4gIGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG4gICAgbGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG4gICAgd2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgaWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcbiAgICAgIGNvbnN0IGswID0ga2V5c1swXTtcclxuICAgICAgcGF0aC5wdXNoKGswKTtcclxuICAgICAgbm9kZSA9IG5vZGVbazBdO1xyXG4gICAgfVxyXG4gICAgLy8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgLy8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG4gIGdldEFjdGl2ZVBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG4gIGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcbiAgICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gMDtcclxuICAgIGxldCBtID0gMDtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG4gICAgICBtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PVxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTml2ZWwgaW50ZXJtZWRpbzogY2xhdmVzIGRlbCBtYXBhIChob3Jpem9udGFsKVxyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6ICdtYXAnLFxyXG4gICAgICAgICAgaXRlbXM6IGtleXMubWFwKGsgPT4gKHsga2V5OiBrLCBsYWJlbDogaywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSksXHJcbiAgICAgICAgICB6b25lOiB7IHg6MCx5OjAsdzowLGg6IHRoaXMubGluZUggfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAobGFiZWwgPT4gKHsga2V5OiBsYWJlbCwgbGFiZWwsIHpvbmU6IHsgeDowLHk6MCx3OjAsaDowIH0gfSkpO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ2xpc3QnLCBpdGVtcywgem9uZTogeyB4OjAsIHk6MCwgdzowLCBoOiBoTGlzdCB9IH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuICBsYXlvdXRMZXZlbHMoKSB7XHJcbiAgICBjb25zdCBwYWRYID0gODtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIHBhZFggKiAyO1xyXG4gICAgbGV0IHkgPSAwO1xyXG5cclxuICAgIC8vIEFqdXN0YXIgaXRlbXNEb20gYSBjYW50aWRhZCBkZSBuaXZlbGVzXHJcbiAgICB3aGlsZSAodGhpcy5pdGVtc0RvbS5sZW5ndGggPCB0aGlzLmxldmVscy5sZW5ndGgpIHRoaXMuaXRlbXNEb20ucHVzaChbXSk7XHJcbiAgICBmb3IgKGxldCBMID0gdGhpcy5sZXZlbHMubGVuZ3RoOyBMIDwgdGhpcy5pdGVtc0RvbS5sZW5ndGg7IEwrKykge1xyXG4gICAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuaXRlbXNEb21bTF0pIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuICAgIGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuICAgICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICAgIGlmIChsdmwudHlwZSA9PT0gJ21hcCcpIHtcclxuICAgICAgICBjb25zdCBuID0gTWF0aC5tYXgoMSwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgY2VsbFcgPSBNYXRoLmZsb29yKHcgLyBuKTtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgIGxldCB4ID0gcGFkWDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ21hcCcpO1xyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgeSArPSB0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsaXN0YS9ob2phOiByZXNlcnZhciBoIHNlZ8O6biBsZWFmTWF4XHJcbiAgICAgICAgY29uc3QgbiA9IGx2bC5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogaExpc3QgfTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBuO1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBpc1JlYWwgPyBsdmwuaXRlbXNbaV0gOiB7IGtleTogbnVsbCwgbGFiZWw6ICcnLCB6b25lOiB7IHg6MCx5OjAsdzowLGg6MCB9IH07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4OiBwYWRYLCB5OiB5ICsgaSAqIHRoaXMubGluZUgsIHcsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuICAgICAgICAgIHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsICdsaXN0JywgaXNSZWFsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgeSArPSBoTGlzdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFqdXN0ZXMgZGUgYWx0byBpbnRlcm5vIGRlbCBjb250ZW5lZG9yIHZpc3VhbFxyXG4gICAgY29uc3QgdG90YWxIID0geTtcclxuICAgIHRoaXMuem9uZS5oID0gdG90YWxIICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy56b25lLmggKyAncHgnO1xyXG4gICAgdGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArICdweCc7XHJcblxyXG4gICAgLy8gUHVibGljYXIgYWx0byB0b3RhbCBhbCBHVUkgKHN1bWFyw6EgdS5oKVxyXG4gICAgdGhpcy5fcHVibGlzaEhlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgZW5zdXJlSXRlbURvbShMLCBpKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgd2hpbGUgKHJvdy5sZW5ndGggPD0gaSkgcm93LnB1c2gobnVsbCk7XHJcbiAgICBpZiAoIXJvd1tpXSkge1xyXG4gICAgICBjb25zdCBkaXYgPSB0aGlzLmRvbSgnZGl2JywgVG9vbHMuY3NzLnR4dCArICdwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsnKTtcclxuICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcbiAgICAgIHJvd1tpXSA9IGRpdjtcclxuICAgIH1cclxuICAgIHJldHVybiByb3dbaV07XHJcbiAgfVxyXG5cclxuICBwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgcyA9IGRpdi5zdHlsZTtcclxuICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy8gUG9zaWNpw7NuXHJcbiAgICBzLmxlZnQgICA9IGl0LnpvbmUueCArICdweCc7XHJcbiAgICBzLnRvcCAgICA9IGl0LnpvbmUueSArICdweCc7XHJcbiAgICBzLndpZHRoICA9IGl0LnpvbmUudyArICdweCc7XHJcbiAgICBzLmhlaWdodCA9IChpdC56b25lLmggLSAyKSArICdweCc7XHJcblxyXG4gICAgLy8gVGV4dG9cclxuICAgIGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogJyc7XHJcblxyXG4gICAgLy8gRXN0YWRvc1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgICA9IGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG4gICAgY29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiAodGhpcy5mb2N1c0xldmVsID09PSBMKTtcclxuICAgIGNvbnN0IGZvY3VzTWF0Y2ggPSBpc1JlYWwgJiYgaW5Gb2N1c0x2bCAmJiAodGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleSk7XHJcbiAgICBjb25zdCBpc0hvdmVyICAgID0gaXNSZWFsICYmICh0aGlzLmhvdmVyLmxldmVsID09PSBMICYmIHRoaXMuaG92ZXIuaW5kZXggPT09IGkpO1xyXG5cclxuICAgIC8vIEVzdGlsb3MgYmFzZVxyXG4gICAgcy5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuICAgIHMuY29sb3IgICAgICA9IGNjLnRleHQ7XHJcbiAgICBzLmJvcmRlciAgICAgPSAnMXB4IHNvbGlkICcgKyBjYy5ib3JkZXI7XHJcbiAgICBzLnRleHRBbGlnbiAgPSBraW5kID09PSAnbWFwJyA/ICdjZW50ZXInIDogJ2xlZnQnO1xyXG5cclxuICAgIC8vIFByaW9yaWRhZCB2aXN1YWw6IHNlbGVjY2lvbmFkbyA+IGZvY28gPiBob3ZlciA+IGJhc2VcclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgfSBlbHNlIGlmIChmb2N1c01hdGNoKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICB9IGVsc2UgaWYgKGlzSG92ZXIpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbGFzIGRlIHBhZGRpbmcgaW52aXNpYmxlcyBlbiBob2phXHJcbiAgICBzLm9wYWNpdHkgPSBpc1JlYWwgPyAnMScgOiAnMCc7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IENpY2xvIGRlIHZpZGEgPT09PT09PVxyXG4gIHJTaXplKCkge1xyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy5idWlsZExldmVscygpO1xyXG4gICAgdGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEludGVyYWNjacOzbiA9PT09PT09XHJcbiAgX3RvTG9jYWwoZSkge1xyXG4gICAgY29uc3QgbXggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgIGNvbnN0IG15ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnk7XHJcbiAgICByZXR1cm4geyB4OiBteCwgeTogbXkgfTtcclxuICB9XHJcblxyXG4gIF9oaXRUZXN0KG14LCBteSkge1xyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgY29uc3QgeiA9IGx2bC56b25lO1xyXG4gICAgICBpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmxpbmVILCB3OiB6LncsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgaWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZXVwJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAoT3BjaW9uYWwpIHRlY2xhZG86IGludGVncmFyIG5hdmVnYWNpw7NuIGVuIEd1aSB5IHJlZW52aWFyIGFxdcOtIHNpIHNlIGRlc2VhXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICAgIHRoaXMuY2hhbmdlQ2IodGhpcy50YWJJbmRleCwgdGhpcy5pdGVtSW5kZXgsIG5ld1BhdGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBBUEkgcMO6YmxpY2EgPT09PT09PVxyXG4gIHNldFZhbHVlKHBhdGgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJlZSh0cmVlKSB7XHJcbiAgICB0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG4gICAgLy8gcmVjYWxjdWxhciBsZWFmTWF4IGVuIHByw7N4aW1hIHBhc2FkYVxyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBQdWJsaWNhY2nDs24gZGUgYWx0dXJhID09PT09PT1cclxuICBfY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpIHtcclxuICAgIGxldCBjID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBpKyspIGlmICh0aGlzLmxldmVsc1tpXS50eXBlID09PSAnbWFwJykgYysrO1xyXG4gICAgcmV0dXJuIGM7XHJcbiAgfVxyXG5cclxuICBfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcbiAgICByZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09ICdsaXN0JyA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuICB9XHJcblxyXG4gIF9wdWJsaXNoSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcbiAgICBjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuICAgIGNvbnN0IGxlYWZIICA9IGxlYWZMZW4gKiB0aGlzLmxpbmVIO1xyXG4gICAgY29uc3QgaW50ZXJIID0gaW50ZXIgKiAodGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXApO1xyXG4gICAgY29uc3QgdG90YWxIID0gaW50ZXJIICsgKGludGVyID8gdGhpcy5sZXZlbEdhcCA6IDApICsgbGVhZkg7XHJcblxyXG4gICAgLy8gQWN0dWFsaXphIG3DqXRyaWNhcyBkZWwgcHJvdG8gKGxvIHF1ZSBzdW1hIGVsIEdVSSlcclxuICAgIHRoaXMuaCA9IHRvdGFsSDtcclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuXHJcbiAgICAvLyBBdmlzYXIgYWwgR1VJIHkgcmVmcmVzY2FyIHpvbmFzXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDWSxNQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxHQUFHO0FBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0FBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0FBQ0EsRUFBRSxFQUFFLEVBQUUsSUFBSTtBQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUs7QUFDYixFQUFFLEtBQUssRUFBRSxLQUFLO0FBQ2QsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7QUFDQSxFQUFF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QVcsRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ3BELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUN2RDtBQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3hDLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxFQUFFLFVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUNyQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNuQjtBQUNBLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN0QjtBQUNBLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUN2RCxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDdkQ7QUFDQSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FB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UUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN6QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRSxhQUFhLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRztBQUN6QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN6RCxRQUFRLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDeEMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRztBQUN6QjtBQUNBLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDNUU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUMxQjtBQUNBLFFBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakg7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN0QixRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLFNBQVM7QUFDVCxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNCO0FBQ0EsS0FBSztBQUNM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LENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNySDtBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0ksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcs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QUcsRUFBRSxDQUFDO0FBQ3pIO0FBQ0E7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtBQUNBO0FBQ0E7QUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtBQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMvRixZQUFZLENBQUMs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QUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0FBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FB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Q0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ25DO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxD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QUFDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtBQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsQixJQUFJLElBQUksQ0FB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LENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFD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QUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0FBQ2xEO0FBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNwUE8sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtB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QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxHQUFHO0FBQ2xDO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNyRDtBQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztBQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QjtBQUNBLFNBQVM7QUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLFFBQVEsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xHO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7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QUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUIsUUFBUTtBQUNSO0FBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7QUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFH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SSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtBQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7QUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUN0QztBQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7QUFDdEM7QUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7QUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtBQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0FBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7QUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FB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RyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0FBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7QUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBO0FBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVEO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDcEM7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztBQUM1QyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDckI7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQ3BhTyxNQUFNLEdBQUcsU0FBUyxLQUFLLENBQUM7QUFDL0I7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQztBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDbkM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztBQUMxQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzlDLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN4QztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QjtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFFO0FBQ3RDLFlBQVksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM5QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekIsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN4RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzVCO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBSztBQUN0QztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNoQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUMzQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLCtCQUErQixFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsOEVBQThFLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7QUFDaE07QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsUUFBUSxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2pGO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2xELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQzdLO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtEQUFrRCxFQUFFLENBQUM7QUFDMUo7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsMkVBQTJFLENBQUMsQ0FBQztBQUN0SjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0E7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDdEUsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7QUFDQSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUM7QUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMxQixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFlBQVksT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZEO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENB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QUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtBQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzNEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFB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Q0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQztBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztBQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDakQ7QUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQy9DLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtBQUN6RCxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlEQUF5RCxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1TDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQ7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDdEosUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0gsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEo7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFD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RyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztBQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0FBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtBQUNBLE1BQU07QUFDTjtBQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFD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LEdBQUcsNENBQTRDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQztBQUM1SCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDNUs7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDMUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHNCQUFzQixFQUFDO0FBQzFJO0FBQ0EsUUFBZ0IsSUFBSSxDQUFDLEVBQUU7QUFDdkIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFPO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRTtBQUMxQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRztB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QUU7QUFDN0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztBQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFL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QUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksR0FBRyxPQUFPO0FBQzVDLFFBQVEsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0FBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0FBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtBQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0FBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNGLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0Y7QUFDQSxRQUFRLEdBQUcs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SUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFD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LE1BQU0sQ0FBQztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7QUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7QUFDOUI7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JEO0FBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJ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QSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtBQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0FBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6RDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDckM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0FBQ0E7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtBQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0FBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDclUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGdEQUFnRCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcks7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNsSSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVB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QUUsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7QUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7QUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUN0RDtBQUNBO0FBQ0EsWUFBWSxJQUFJ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LElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN4RCxTQUFTLE1BQU07QUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN4RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztBQUNB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SSxFQUFFLEdBQUcsQ0FBQztBQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztBQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDaEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNy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QUFDOUI7QUFDQTtBQUNBLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtBQUNBO0FBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtBQUNBO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0FBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDcEQsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFB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QUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDeEQsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDNUQsUUFBUSxNQUFNO0FBQ2QsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtBQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtBQUNBLElBQUksSUFBSSxPQUFPO0FBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzNDO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtBQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEIsR0FBRztBQUNIOztBQzdTTyxNQUFNLFNBQVMsU0FBUyxLQUFLLENBQUM7QUFDckM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0Es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RSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87QUFDbEM7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEQsYUFBYSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxJQUFJO0FBQ2Y7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FB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QUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDaEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7QUFDakQ7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMs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QUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUN2TDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3JCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFDOUQsUUFBUSxPQUFPLEdBQUc7QUFDbEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFD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SUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsT0FBTyxJQUFJLENB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S0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7QUFDakQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUU7QUFDbEQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN4RDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDckY7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUNuQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJ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LENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkIsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELFNBQVM7QUFDVDtBQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVELFNBQVM7QUFDVDtBQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0FBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUs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QUFTO0FBQ1Q7QUFDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRDtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5RjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztBQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0FBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7QUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtBQUN6RTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7QUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0FBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxR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QUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDclJBO0FBSUE7QUFDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO0FBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0FBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcseUNBQXlDLENBQUMsQ0FBQztBQUM1RixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsT0FBTyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsT0FBTyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQzFGLEVBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDckQ7QUFDQTtBQUNBLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRTtBQUN0QixJQUFJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQyxNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNoQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRyxRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsT0FBTyxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN4QztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2RCxPQUFPLE1BQU07QUFDYixRQUFRLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4QyxPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUksT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3hDLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7QUFDL0IsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoRCxJQUFJLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQyxJQUFJLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNqQyxNQUFNLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNO0FBQzlCLE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsYUFBYSxHQUFHO0FBQ2xCLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUN0RCxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsY0FBYyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ25DLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNoRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3BELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdkMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELEtBQUs7QUFDTCxJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFLFdBQVcsR0FBRztBQUNoQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMzQixJQUFJLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUM1QztBQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QixJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBLElBQUksT0FBTyxJQUFJLEVBQUU7QUFDakIsTUFBTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDaEM7QUFDQSxRQUFRLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNO0FBQ2hDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDekIsVUFBVSxJQUFJLEVBQUUsS0FBSztBQUNyQixVQUFVLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pGLFVBQVUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDN0MsU0FBUyxDQUFDLENBQUM7QUFDWDtBQUNBLFFBQVEsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFDLFFBQVEsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTTtBQUM3RCxRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0IsT0FBTyxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN4QztBQUNBLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUYsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDeEUsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckYsUUFBUSxNQUFNO0FBQ2QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQLE1BQU0sS0FBSyxFQUFFLENBQUM7QUFDZCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFLFlBQVksR0FBRztBQUNqQixJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNuQixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZDtBQUNBO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdFLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEUsTUFBTSxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRyxLQUFLO0FBQ0wsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM5QztBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pELE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7QUFDOUIsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEMsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckIsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkQsVUFBVSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFVBQVUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RELFVBQVUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0MsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRCxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDckIsU0FBUztBQUNULFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN4QyxPQUFPLE1BQU07QUFDYjtBQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDbkMsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3RCxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVELFVBQVUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQixVQUFVLE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pHLFVBQVUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6RSxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNELFNBQVM7QUFDVCxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDbkIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDckM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdEIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLElBQUksT0FBTyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNqQixNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlDQUF5QyxDQUFDLENBQUM7QUFDN0YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkIsS0FBSztBQUNMLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsSUFBSSxFQUFFO0FBQ25ELElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztBQUN4QixJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0I7QUFDQTtBQUNBLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDdEM7QUFDQTtBQUNBLElBQUksR0FBRyxDQUFDLFdBQVcsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBLElBQUksTUFBTSxRQUFRLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztBQUN6RixJQUFJLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMvRCxJQUFJLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUUsSUFBSSxNQUFNLE9BQU8sTUFBTSxNQUFNLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BGO0FBQ0E7QUFDQSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUMzQixJQUFJLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQztBQUMzQixJQUFJLENBQUMsQ0FBQyxNQUFNLE9BQU8sWUFBWSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7QUFDNUMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksS0FBSyxLQUFLLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUN0RDtBQUNBO0FBQ0EsSUFBSSxJQUFJLFFBQVEsRUFBRTtBQUNsQixNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUMvQixNQUFN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RCxZQUFZLE9BQU8sQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsRUFBQztBQUNEO0FBQ08sTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFDO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxRQUFPO0FBQ3RCO0FBQ0EsSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsT0FBTTtBQUM5QyxTQUFTLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLEdBQUcsUUFBTztBQUNyRCxhQUFhLElBQUksR0FBRyxTQUFRO0FBQzVCO0FBQ0EsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLFFBQU87QUFDcEMsYUFBYSxJQUFJLEdBQUcsUUFBTztBQUMzQjtBQUNBLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFFO0FBQzNEO0FBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsR0FBRyxJQUFJLEdBQUcsU0FBUTtBQUN0RCxhQUFhLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxHQUFHLElBQUksR0FBRyxPQUFNO0FBQ3pEO0FBQ0EsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsWUFBWSxNQUFNLEVBQUU7QUFDN0Q7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLFNBQVE7QUFDL0MsYUFBYSxJQUFJLEdBQUcsT0FBTTtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJO0FBQ2Y7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNLEdBQUcsQ0FBQztBQUNqQixFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdEI7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ2pDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0MsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztBQUM5QjtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDO0FBQ3pFLFFBQVEsQ0FBQyxDQUFDLG9CQUFvQjtBQUM5QixRQUFRLElBQUksQ0FBQztBQUNiO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ2pFO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztBQUM1QztBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNwRTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FB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RyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZEO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtBQUNYLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEM7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0FBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEdBQUc7QUFDVCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsR0FBRztBQUNkLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUIsSUFBSSxJQUFJLENB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 diff --git a/src/proto/TreeList.js b/src/proto/TreeList.js index cbb273f..03714d7 100644 --- a/src/proto/TreeList.js +++ b/src/proto/TreeList.js @@ -5,11 +5,11 @@ import { Roots } from '../core/Roots.js'; export class TreeList extends Proto { constructor(o = {}) { - // Propiedades públicas esperadas (API) - // o.tree (obj/array), o.value (array), o.focused (bool), - // o.focusPath (array), o.focusLevel (number), + // API pública esperada: + // o.tree (obj/array), o.value (array) + // o.focused (bool), o.focusPath (array), o.focusLevel (number) // o.tabIndex, o.itemIndex, o.onChange (fn) - o.selectable = true; // navegable por teclado si activas flechas + o.selectable = true; o.name = o.name || 'TreeList'; super(o); @@ -23,34 +23,31 @@ export class TreeList extends Proto { this.tabIndex = o.tabIndex ?? null; this.itemIndex = o.itemIndex ?? null; - // Callback de notificación - this.changeCb = typeof o.onChange === 'function' ? o.onChange : (/*tabIdx, itemIdx, newPath*/) => {}; + // Callback + this.changeCb = typeof o.onChange === 'function' ? o.onChange : () => {}; - // Layout interno - this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] - this.leafMax = 0; // alto reservado para el último nivel (máximo tamaño de hoja) - this.levelGap = 2; // gap vertical entre niveles - this.hItem = this.h; // alto por ítem + // Layout interno / publicación de altura + this.lineH = this.h; // alto de UNA fila + this.levelGap = this.colors.sy || 2; // separación vertical entre niveles + this.leafMax = 0; // se calcula en rSize() - // Hover / foco de mouse - this.hover = { level: -1, index: -1 }; + // Modelo visual + this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] + this.itemsDom = []; // espejo DOM por nivel + this.hover = { level: -1, index: -1 }; - // DOM visual (sin listeners directos; los eventos llegan vía Roots->handleEvent) - this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); // container interno + // Contenedor interno (absoluto) + this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); this.s[2] = this.c[2].style; - // Inicializa nodos visuales de forma perezosa en rSize() - this.itemsDom = []; // mirror de this.levels (matriz de nodos) - this.init(); } - // =============== Helpers de datos =============== - + // ======= Helpers de tipo ======= static isMap(node) { return node && typeof node === 'object' && !Array.isArray(node); } static isList(node) { return Array.isArray(node); } - // Devuelve el subnodo al seguir path (se detiene si no existe) + // ======= Recorrido de datos ======= getNodeAtPath(path) { let node = this.tree; for (let i = 0; i < path.length; i++) { @@ -58,8 +55,8 @@ export class TreeList extends Proto { if (!Object.prototype.hasOwnProperty.call(node, path[i])) return { node: null, depth: i }; node = node[path[i]]; } else if (TreeList.isList(node)) { - // Al llegar a lista, ya no hay más descendencia válida para claves - if (i < path.length) return { node, depth: i }; + // Llegamos a una lista: ya no hay más claves válidas + if (i < path.length) return { node, depth: i }; } else { return { node: null, depth: i }; } @@ -67,32 +64,30 @@ export class TreeList extends Proto { return { node, depth: path.length }; } - // Autocompleta descendiendo por la primera clave de cada mapa hasta alcanzar una lista + // Autocompletar: baja por primeras claves de cada mapa hasta alcanzar una lista autoCompleteToLeaf(basePath) { - let nodeInfo = this.getNodeAtPath(basePath); - let node = nodeInfo.node; + let { node } = this.getNodeAtPath(basePath); const path = basePath.slice(); - while (TreeList.isMap(node)) { const keys = Object.keys(node); - if (!keys.length) break; // mapa vacío + if (!keys.length) break; const k0 = keys[0]; path.push(k0); node = node[k0]; } - // Si termina en lista, NO agrega selección final de elemento hoja + // Si termina en lista, NO agrega un ítem final de la hoja return path; } - // Ruta activa para construir niveles (focusPath si focused, si no value) + // Ruta activa (focusPath si focused, sino value) getActivePath() { return this.focused ? this.focusPath : this.value; } - // Calcula el máximo tamaño de hoja del árbol (para reservar alto estable) + // ======= Tamaño de hoja máximo (para layout estable) ======= computeLeafMax(node = this.tree) { - if (TreeList.isList(node)) return node.length; - if (!TreeList.isMap(node)) return 0; + if (Array.isArray(node)) return node.length; + if (!node || typeof node !== 'object') return 0; let m = 0; for (const k of Object.keys(node)) { m = Math.max(m, this.computeLeafMax(node[k])); @@ -100,8 +95,7 @@ export class TreeList extends Proto { return m; } - // =============== Construcción de niveles (modelo lógico) =============== - + // ======= Construcción de niveles (modelo lógico) ======= buildLevels() { this.levels.length = 0; const activePath = this.getActivePath(); @@ -111,38 +105,39 @@ export class TreeList extends Proto { while (node) { if (TreeList.isMap(node)) { - // Opciones = claves del mapa (nivel intermedio) + // Nivel intermedio: claves del mapa (horizontal) const keys = Object.keys(node); - if (!keys.length) break; // detener expansión si vacío - this.levels.push({ type: 'map', items: keys.map(k => ({ key: k, label: k, zone: {x:0,y:0,w:0,h:0} })), zone: {x:0,y:0,w:0,h:this.hItem} }); + if (!keys.length) break; + this.levels.push({ + type: 'map', + items: keys.map(k => ({ key: k, label: k, zone: { x:0,y:0,w:0,h:0 } })), + zone: { x:0,y:0,w:0,h: this.lineH } + }); - // Avanza según la ruta activa (si existe), sino se detiene const nextKey = activePath[level]; if (!nextKey || !node.hasOwnProperty(nextKey)) break; node = node[nextKey]; } else if (TreeList.isList(node)) { - // Último nivel: lista/hoja (vertical) - const items = node.map(label => ({ key: label, label, zone: {x:0,y:0,w:0,h:0} })); - this.levels.push({ type: 'list', items, zone: {x:0,y:0,w:0,h: Math.max(items.length, this.leafMax) * this.hItem } }); - break; // fin + // Nivel hoja: lista vertical + const items = node.map(label => ({ key: label, label, zone: { x:0,y:0,w:0,h:0 } })); + const hList = Math.max(items.length, this.leafMax) * this.lineH; + this.levels.push({ type: 'list', items, zone: { x:0, y:0, w:0, h: hList } }); + break; } else { - break; // nodo inválido + break; } level++; } } - // =============== Layout (zonas internas) =============== - - // Calcula zonas internas de cada ítem/level y construye/actualiza dom + // ======= Layout (zonas & DOM) ======= layoutLevels() { const padX = 8; const w = this.zone.w - padX * 2; let y = 0; - // Asegura `itemsDom` anidado por nivel + // Ajustar itemsDom a cantidad de niveles while (this.itemsDom.length < this.levels.length) this.itemsDom.push([]); - // Limpia extra DOM si niveles disminuyen for (let L = this.levels.length; L < this.itemsDom.length; L++) { for (const el of this.itemsDom[L]) if (el && el.parentNode) el.parentNode.removeChild(el); } @@ -153,32 +148,26 @@ export class TreeList extends Proto { if (lvl.type === 'map') { const n = Math.max(1, lvl.items.length); const cellW = Math.floor(w / n); - lvl.zone = { x: padX, y, w, h: this.hItem }; + lvl.zone = { x: padX, y, w, h: this.lineH }; let x = padX; - // Asegura contenedor dom de nivel si querés uno (opcional) for (let i = 0; i < lvl.items.length; i++) { const it = lvl.items[i]; - it.zone = { x, y, w: cellW, h: this.hItem }; - - // crea/actualiza nodo visual + it.zone = { x, y, w: cellW, h: this.lineH }; const dom = this.ensureItemDom(L, i); this.paintItemDom(dom, L, i, it, 'map'); - x += cellW; } - y += this.hItem + this.levelGap; + y += this.lineH + this.levelGap; } else { - // lista/hoja vertical + // lista/hoja: reservar h según leafMax const n = lvl.items.length; - const hList = Math.max(n, this.leafMax) * this.hItem; + const hList = Math.max(n, this.leafMax) * this.lineH; lvl.zone = { x: padX, y, w, h: hList }; for (let i = 0; i < Math.max(n, this.leafMax); i++) { - // Puede haber "espacio vacío" si n < leafMax const isReal = i < n; - const it = isReal ? lvl.items[i] : { key: null, label: '', zone: {x:0,y:0,w:0,h:0} }; - it.zone = { x: padX, y: y + i * this.hItem, w, h: this.hItem }; - + const it = isReal ? lvl.items[i] : { key: null, label: '', zone: { x:0,y:0,w:0,h:0 } }; + it.zone = { x: padX, y: y + i * this.lineH, w, h: this.lineH }; const dom = this.ensureItemDom(L, i); this.paintItemDom(dom, L, i, it, 'list', isReal); } @@ -186,18 +175,20 @@ export class TreeList extends Proto { } } - // Ajusta alto visible del control + // Ajustes de alto interno del contenedor visual const totalH = y; - this.zone.h = totalH + this.margin; // Proto se encarga del margen + this.zone.h = totalH + this.margin; this.s[0].height = this.zone.h + 'px'; this.s[2].height = totalH + 'px'; + + // Publicar alto total al GUI (sumará u.h) + this._publishHeight(); } ensureItemDom(L, i) { const row = this.itemsDom[L]; while (row.length <= i) row.push(null); if (!row[i]) { - // Cada ítem es un DIV posicionado absoluto dentro de this.c[2] const div = this.dom('div', Tools.css.txt + 'position:absolute; pointer-events:none;'); this.c[2].appendChild(div); row[i] = div; @@ -205,40 +196,32 @@ export class TreeList extends Proto { return row[i]; } - // Colorea y posiciona el DOM del ítem según estados (seleccionado / foco) paintItemDom(div, L, i, it, kind, isReal = true) { const s = div.style; const cc = this.colors; // Posición - s.left = it.zone.x + 'px'; - s.top = it.zone.y + 'px'; + s.left = it.zone.x + 'px'; + s.top = it.zone.y + 'px'; s.width = it.zone.w + 'px'; - s.height = (it.zone.h - 2) + 'px'; // -2 para evitar overlap de bordes + s.height = (it.zone.h - 2) + 'px'; // Texto div.textContent = isReal ? it.label : ''; - // Estados semánticos - const value = this.value; - const selected = (value[L] !== undefined) && (value[L] === it.key) && isReal; - - const inFocusLevel = this.focused && (this.focusLevel === L); - const focusMatch = inFocusLevel && (this.focusPath[L] === it.key) && isReal; - - // Hover (mouse) - const isHover = (this.hover.level === L && this.hover.index === i && isReal); + // Estados + const selected = isReal && this.value[L] !== undefined && this.value[L] === it.key; + const inFocusLvl = this.focused && (this.focusLevel === L); + const focusMatch = isReal && inFocusLvl && (this.focusPath[L] === it.key); + const isHover = isReal && (this.hover.level === L && this.hover.index === i); // Estilos base s.background = cc.back; s.color = cc.text; s.border = '1px solid ' + cc.border; + s.textAlign = kind === 'map' ? 'center' : 'left'; - // Mapa = horizontal, Lista = vertical - if (kind === 'map') s.textAlign = 'center'; - else s.textAlign = 'left'; - - // Priorización visual: seleccionado > foco > hover > base + // Prioridad visual: seleccionado > foco > hover > base if (selected) { s.background = cc.select; s.color = cc.textSelect; @@ -249,35 +232,30 @@ export class TreeList extends Proto { s.background = cc.overoff; s.color = cc.textOver; } - // Deshabilitar DOM si no hay ítem real en filas de padding + + // Filas de padding invisibles en hoja s.opacity = isReal ? '1' : '0'; } - // =============== Ciclo de vida visual =============== - + // ======= Ciclo de vida ======= rSize() { - // Recalcula leafMax y niveles cada vez que cambia tamaño/datos this.leafMax = this.computeLeafMax(this.tree); this.buildLevels(); this.layoutLevels(); } update() { - // Redibuja cuando cambian estados de hover/focus/value externamente this.buildLevels(); this.layoutLevels(); } - // =============== Interacción (hit-testing y selección) =============== - - // Convierte coords globales a locales del control (igual que Proto) + // ======= Interacción ======= _toLocal(e) { const mx = e.clientX - this.zone.x; const my = e.clientY - this.zone.y; return { x: mx, y: my }; } - // Busca qué ítem (L,i) está bajo el mouse; respeta zonas por nivel _hitTest(mx, my) { for (let L = 0; L < this.levels.length; L++) { const lvl = this.levels[L]; @@ -292,11 +270,10 @@ export class TreeList extends Proto { } } } else { - // hoja: puede contener filas de padding const nRows = Math.max(lvl.items.length, this.leafMax); for (let i = 0; i < nRows; i++) { const isReal = i < lvl.items.length; - const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.hItem, w: z.w, h: this.hItem }; + const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.lineH, w: z.w, h: this.lineH }; if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { return { L, i, real: isReal }; } @@ -309,12 +286,11 @@ export class TreeList extends Proto { handleEvent(e) { if (this.lock) return false; - // Delega estados de hover / click if (e.type === 'mousemove') { const { x, y } = this._toLocal(e); const ht = this._hitTest(x, y); this.hover = (ht.L !== -1 && ht.real) ? { level: ht.L, index: ht.i } : { level: -1, index: -1 }; - this.update(); // repintar con hover + this.update(); return true; } @@ -328,52 +304,75 @@ export class TreeList extends Proto { } if (e.type === 'mouseup') { - // nada por ahora return true; } - // Soporte básico para teclado (opcional: Up/Down/Left/Right) - if (e.type === 'keydown') { - // Puedes integrar navegación de flechas aquí si lo deseas, - // reutilizando this.isSelectable (ya marcada en ctor). - // Recomendación: mover foco entre niveles/ítems con Roots+Gui. :contentReference[oaicite:1]{index=1} :contentReference[oaicite:2]{index=2} - } - + // (Opcional) teclado: integrar navegación en Gui y reenviar aquí si se desea return false; } - // Regla de selección y autocompletado + // Selección + autocompletado + notificación _selectAt(L, i) { const lvl = this.levels[L]; const chosen = lvl.items[i]; if (!chosen || !chosen.key) return; - // 1) Recortar value hasta L e insertar la opción elegida const base = this.value.slice(0, L); base[L] = chosen.key; - // 2) Autocompletar por primera clave descendiendo hasta una lista const newPath = this.autoCompleteToLeaf(base); - // 3) Notificar - this.value = newPath.slice(); // reflejar selección interna + this.value = newPath.slice(); this.update(); this.changeCb(this.tabIndex, this.itemIndex, newPath); } - // API pública para sincronización externa (por si quieres settear desde afuera) + // ======= API pública ======= setValue(path) { this.value = Array.isArray(path) ? path.slice() : []; this.update(); } + setTree(tree) { this.tree = tree || {}; + // recalcular leafMax en próxima pasada + this.leafMax = this.computeLeafMax(this.tree); this.update(); } + setFocus({ focused, focusPath, focusLevel }) { if (typeof focused === 'boolean') this.focused = focused; if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); if (typeof focusLevel === 'number') this.focusLevel = focusLevel; this.update(); } + + // ======= Publicación de altura ======= + _countVisibleIntermediates() { + let c = 0; + for (let i = 0; i < this.levels.length; i++) if (this.levels[i].type === 'map') c++; + return c; + } + + _getCurrentLeafLength() { + const last = this.levels[this.levels.length - 1]; + return last && last.type === 'list' ? last.items.length : 0; + } + + _publishHeight() { + const inter = this._countVisibleIntermediates(); + const leafLen = Math.max(this.leafMax, this._getCurrentLeafLength()); + const leafH = leafLen * this.lineH; + const interH = inter * (this.lineH + this.levelGap); + const totalH = interH + (inter ? this.levelGap : 0) + leafH; + + // Actualiza métricas del proto (lo que suma el GUI) + this.h = totalH; + this.zone.h = this.h + this.margin; + this.s[0].height = this.h + 'px'; + + // Avisar al GUI y refrescar zonas + if (this.isUI && this.main) this.main.calc(); + Roots.needReZone = true; + } } From 00c2844d95a4ac8b761135064ef7cf6bf6da635d Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Fri, 5 Sep 2025 11:11:21 -0300 Subject: [PATCH 08/17] version 3 --- build/uil.js | 54 +++++++++++++++++++++++++++++++++---------- build/uil.min.js | 54 +++++++++++++++++++++++++++++++++---------- build/uil.module.js | 54 +++++++++++++++++++++++++++++++++---------- src/proto/TreeList.js | 52 ++++++++++++++++++++++++++++++++--------- 4 files changed, 167 insertions(+), 47 deletions(-) diff --git a/build/uil.js b/build/uil.js index ee34182..3173097 100644 --- a/build/uil.js +++ b/build/uil.js @@ -8313,8 +8313,12 @@ // ======= Layout (zonas & DOM) ======= layoutLevels() { - const padX = 8; - const w = this.zone.w - padX * 2; + + const contentX = (this.sa || 100) + 8; // columna de label + padding + const padRight = 8; + const w = this.zone.w - contentX - padRight; + + let y = 0; // Ajustar itemsDom a cantidad de niveles @@ -8326,11 +8330,15 @@ for (let L = 0; L < this.levels.length; L++) { const lvl = this.levels[L]; + this.itemsDom[L]; if (lvl.type === 'map') { const n = Math.max(1, lvl.items.length); const cellW = Math.floor(w / n); - lvl.zone = { x: padX, y, w, h: this.lineH }; - let x = padX; + + lvl.zone = { x: contentX, y, w, h: this.lineH }; + let x = contentX; + + for (let i = 0; i < lvl.items.length; i++) { const it = lvl.items[i]; it.zone = { x, y, w: cellW, h: this.lineH }; @@ -8338,20 +8346,27 @@ this.paintItemDom(dom, L, i, it, 'map'); x += cellW; } + // eliminar DOM sobrante si antes había más celdas + this._pruneRow(L, lvl.items.length); y += this.lineH + this.levelGap; } else { // lista/hoja: reservar h según leafMax const n = lvl.items.length; const hList = Math.max(n, this.leafMax) * this.lineH; - lvl.zone = { x: padX, y, w, h: hList }; + + lvl.zone = { x: contentX, y, w, h: hList }; - for (let i = 0; i < Math.max(n, this.leafMax); i++) { + const rows = Math.max(n, this.leafMax); + for (let i = 0; i < rows; i++) { const isReal = i < n; const it = isReal ? lvl.items[i] : { key: null, label: '', zone: { x:0,y:0,w:0,h:0 } }; - it.zone = { x: padX, y: y + i * this.lineH, w, h: this.lineH }; + + it.zone = { x: contentX, y: y + i * this.lineH, w, h: this.lineH }; const dom = this.ensureItemDom(L, i); this.paintItemDom(dom, L, i, it, 'list', isReal); } + // eliminar DOM sobrante si antes había más filas + this._pruneRow(L, rows); y += hList; } } @@ -8366,6 +8381,21 @@ this._publishHeight(); } + + + // Elimina nodos DOM sobrantes en la fila L a partir del índice keep + _pruneRow(L, keep) { + const row = this.itemsDom[L]; + // si nunca se creó, nada que hacer + if (!row) return; + for (let j = keep; j < row.length; j++) { + const el = row[j]; + if (el && el.parentNode) el.parentNode.removeChild(el); + } + row.length = keep; + } + + ensureItemDom(L, i) { const row = this.itemsDom[L]; while (row.length <= i) row.push(null); @@ -8438,10 +8468,10 @@ } _hitTest(mx, my) { - for (let L = 0; L < this.levels.length; L++) { - const lvl = this.levels[L]; - const z = lvl.zone; - if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + const z = lvl.zone; // x y w ya incluyen contentX + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; if (lvl.type === 'map') { for (let i = 0; i < lvl.items.length; i++) { @@ -9454,4 +9484,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvcHJvdG8vVHJlZUxpc3QuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBBUEkgcMO6YmxpY2EgZXNwZXJhZGE6XHJcbiAgICAvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KVxyXG4gICAgLy8gby5mb2N1c2VkIChib29sKSwgby5mb2N1c1BhdGggKGFycmF5KSwgby5mb2N1c0xldmVsIChudW1iZXIpXHJcbiAgICAvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcbiAgICBvLnNlbGVjdGFibGUgPSB0cnVlO1xyXG4gICAgby5uYW1lID0gby5uYW1lIHx8ICdUcmVlTGlzdCc7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICAvLyBEYXRvcyAmIGVzdGFkb1xyXG4gICAgdGhpcy50cmVlICAgICAgID0gby50cmVlIHx8IHt9O1xyXG4gICAgdGhpcy52YWx1ZSAgICAgID0gQXJyYXkuaXNBcnJheShvLnZhbHVlKSA/IG8udmFsdWUuc2xpY2UoKSA6IFtdO1xyXG4gICAgdGhpcy5mb2N1c2VkICAgID0gISFvLmZvY3VzZWQ7XHJcbiAgICB0aGlzLmZvY3VzUGF0aCAgPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09ICdudW1iZXInID8gby5mb2N1c0xldmVsIDogLTE7XHJcblxyXG4gICAgdGhpcy50YWJJbmRleCAgID0gby50YWJJbmRleCA/PyBudWxsO1xyXG4gICAgdGhpcy5pdGVtSW5kZXggID0gby5pdGVtSW5kZXggPz8gbnVsbDtcclxuXHJcbiAgICAvLyBDYWxsYmFja1xyXG4gICAgdGhpcy5jaGFuZ2VDYiA9IHR5cGVvZiBvLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nID8gby5vbkNoYW5nZSA6ICgpID0+IHt9O1xyXG5cclxuICAgIC8vIExheW91dCBpbnRlcm5vIC8gcHVibGljYWNpw7NuIGRlIGFsdHVyYVxyXG4gICAgdGhpcy5saW5lSCAgICA9IHRoaXMuaDsgICAgICAgICAgICAgICAvLyBhbHRvIGRlIFVOQSBmaWxhXHJcbiAgICB0aGlzLmxldmVsR2FwID0gdGhpcy5jb2xvcnMuc3kgfHwgMjsgIC8vIHNlcGFyYWNpw7NuIHZlcnRpY2FsIGVudHJlIG5pdmVsZXNcclxuICAgIHRoaXMubGVhZk1heCAgPSAwOyAgICAgICAgICAgICAgICAgICAgLy8gc2UgY2FsY3VsYSBlbiByU2l6ZSgpXHJcblxyXG4gICAgLy8gTW9kZWxvIHZpc3VhbFxyXG4gICAgdGhpcy5sZXZlbHMgICA9IFtdOyAgIC8vIFt7dHlwZTonbWFwJ3wnbGlzdCcsIGl0ZW1zOlt7a2V5LGxhYmVsLHpvbmV9XSwgem9uZTp7eCx5LHcsaH19Li4uXVxyXG4gICAgdGhpcy5pdGVtc0RvbSA9IFtdOyAgIC8vIGVzcGVqbyBET00gcG9yIG5pdmVsXHJcbiAgICB0aGlzLmhvdmVyICAgID0geyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG5cclxuICAgIC8vIENvbnRlbmVkb3IgaW50ZXJubyAoYWJzb2x1dG8pXHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSgnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnbGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7Jyk7XHJcbiAgICB0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEhlbHBlcnMgZGUgdGlwbyA9PT09PT09XHJcbiAgc3RhdGljIGlzTWFwKG5vZGUpICB7IHJldHVybiBub2RlICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShub2RlKTsgfVxyXG4gIHN0YXRpYyBpc0xpc3Qobm9kZSkgeyByZXR1cm4gQXJyYXkuaXNBcnJheShub2RlKTsgfVxyXG5cclxuICAvLyA9PT09PT09IFJlY29ycmlkbyBkZSBkYXRvcyA9PT09PT09XHJcbiAgZ2V0Tm9kZUF0UGF0aChwYXRoKSB7XHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBwYXRoW2ldKSkgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgICBub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBMbGVnYW1vcyBhIHVuYSBsaXN0YTogeWEgbm8gaGF5IG3DoXMgY2xhdmVzIHbDoWxpZGFzXHJcbiAgICAgICAgaWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuICB9XHJcblxyXG4gIC8vIEF1dG9jb21wbGV0YXI6IGJhamEgcG9yIHByaW1lcmFzIGNsYXZlcyBkZSBjYWRhIG1hcGEgaGFzdGEgYWxjYW56YXIgdW5hIGxpc3RhXHJcbiAgYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2VQYXRoKSB7XHJcbiAgICBsZXQgeyBub2RlIH0gPSB0aGlzLmdldE5vZGVBdFBhdGgoYmFzZVBhdGgpO1xyXG4gICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoLnNsaWNlKCk7XHJcbiAgICB3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgY29uc3QgazAgPSBrZXlzWzBdO1xyXG4gICAgICBwYXRoLnB1c2goazApO1xyXG4gICAgICBub2RlID0gbm9kZVtrMF07XHJcbiAgICB9XHJcbiAgICAvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2EgdW4gw610ZW0gZmluYWwgZGUgbGEgaG9qYVxyXG4gICAgcmV0dXJuIHBhdGg7XHJcbiAgfVxyXG5cclxuICAvLyBSdXRhIGFjdGl2YSAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpbm8gdmFsdWUpXHJcbiAgZ2V0QWN0aXZlUGF0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgPyB0aGlzLmZvY3VzUGF0aCA6IHRoaXMudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IFRhbWHDsW8gZGUgaG9qYSBtw6F4aW1vIChwYXJhIGxheW91dCBlc3RhYmxlKSA9PT09PT09XHJcbiAgY29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBub2RlLmxlbmd0aDtcclxuICAgIGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHJldHVybiAwO1xyXG4gICAgbGV0IG0gPSAwO1xyXG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XHJcbiAgICAgIG0gPSBNYXRoLm1heChtLCB0aGlzLmNvbXB1dGVMZWFmTWF4KG5vZGVba10pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBDb25zdHJ1Y2Npw7NuIGRlIG5pdmVsZXMgKG1vZGVsbyBsw7NnaWNvKSA9PT09PT09XHJcbiAgYnVpbGRMZXZlbHMoKSB7XHJcbiAgICB0aGlzLmxldmVscy5sZW5ndGggPSAwO1xyXG4gICAgY29uc3QgYWN0aXZlUGF0aCA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpO1xyXG5cclxuICAgIGxldCBub2RlID0gdGhpcy50cmVlO1xyXG4gICAgbGV0IGxldmVsID0gMDtcclxuXHJcbiAgICB3aGlsZSAobm9kZSkge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBpbnRlcm1lZGlvOiBjbGF2ZXMgZGVsIG1hcGEgKGhvcml6b250YWwpXHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICAgIGlmICgha2V5cy5sZW5ndGgpIGJyZWFrO1xyXG4gICAgICAgIHRoaXMubGV2ZWxzLnB1c2goe1xyXG4gICAgICAgICAgdHlwZTogJ21hcCcsXHJcbiAgICAgICAgICBpdGVtczoga2V5cy5tYXAoayA9PiAoeyBrZXk6IGssIGxhYmVsOiBrLCB6b25lOiB7IHg6MCx5OjAsdzowLGg6MCB9IH0pKSxcclxuICAgICAgICAgIHpvbmU6IHsgeDowLHk6MCx3OjAsaDogdGhpcy5saW5lSCB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBhY3RpdmVQYXRoW2xldmVsXTtcclxuICAgICAgICBpZiAoIW5leHRLZXkgfHwgIW5vZGUuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIGJyZWFrO1xyXG4gICAgICAgIG5vZGUgPSBub2RlW25leHRLZXldO1xyXG4gICAgICB9IGVsc2UgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkge1xyXG4gICAgICAgIC8vIE5pdmVsIGhvamE6IGxpc3RhIHZlcnRpY2FsXHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSBub2RlLm1hcChsYWJlbCA9PiAoeyBrZXk6IGxhYmVsLCBsYWJlbCwgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSk7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChpdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCkgKiB0aGlzLmxpbmVIO1xyXG4gICAgICAgIHRoaXMubGV2ZWxzLnB1c2goeyB0eXBlOiAnbGlzdCcsIGl0ZW1zLCB6b25lOiB7IHg6MCwgeTowLCB3OjAsIGg6IGhMaXN0IH0gfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgbGV2ZWwrKztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gTGF5b3V0ICh6b25hcyAmIERPTSkgPT09PT09PVxyXG4gIGxheW91dExldmVscygpIHtcclxuICAgIGNvbnN0IHBhZFggPSA4O1xyXG4gICAgY29uc3QgdyA9IHRoaXMuem9uZS53IC0gcGFkWCAqIDI7XHJcbiAgICBsZXQgeSA9IDA7XHJcblxyXG4gICAgLy8gQWp1c3RhciBpdGVtc0RvbSBhIGNhbnRpZGFkIGRlIG5pdmVsZXNcclxuICAgIHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkgdGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuICAgIGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSkgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pdGVtc0RvbS5sZW5ndGggPSB0aGlzLmxldmVscy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG4gICAgICAgIGx2bC56b25lID0geyB4OiBwYWRYLCB5LCB3LCBoOiB0aGlzLmxpbmVIIH07XHJcbiAgICAgICAgbGV0IHggPSBwYWRYO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdCA9IGx2bC5pdGVtc1tpXTtcclxuICAgICAgICAgIGl0LnpvbmUgPSB7IHgsIHksIHc6IGNlbGxXLCBoOiB0aGlzLmxpbmVIIH07XHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbWFwJyk7XHJcbiAgICAgICAgICB4ICs9IGNlbGxXO1xyXG4gICAgICAgIH1cclxuICAgICAgICB5ICs9IHRoaXMubGluZUggKyB0aGlzLmxldmVsR2FwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGxpc3RhL2hvamE6IHJlc2VydmFyIGggc2Vnw7puIGxlYWZNYXhcclxuICAgICAgICBjb25zdCBuID0gbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBoTGlzdCA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCkgKiB0aGlzLmxpbmVIO1xyXG4gICAgICAgIGx2bC56b25lID0geyB4OiBwYWRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXNSZWFsID0gaSA8IG47XHJcbiAgICAgICAgICBjb25zdCBpdCA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXSA6IHsga2V5OiBudWxsLCBsYWJlbDogJycsIHpvbmU6IHsgeDowLHk6MCx3OjAsaDowIH0gfTtcclxuICAgICAgICAgIGl0LnpvbmUgPSB7IHg6IHBhZFgsIHk6IHkgKyBpICogdGhpcy5saW5lSCwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ2xpc3QnLCBpc1JlYWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB5ICs9IGhMaXN0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWp1c3RlcyBkZSBhbHRvIGludGVybm8gZGVsIGNvbnRlbmVkb3IgdmlzdWFsXHJcbiAgICBjb25zdCB0b3RhbEggPSB5O1xyXG4gICAgdGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArICdweCc7XHJcbiAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdG90YWxIICsgJ3B4JztcclxuXHJcbiAgICAvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcbiAgICB0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICBlbnN1cmVJdGVtRG9tKEwsIGkpIHtcclxuICAgIGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcbiAgICB3aGlsZSAocm93Lmxlbmd0aCA8PSBpKSByb3cucHVzaChudWxsKTtcclxuICAgIGlmICghcm93W2ldKSB7XHJcbiAgICAgIGNvbnN0IGRpdiA9IHRoaXMuZG9tKCdkaXYnLCBUb29scy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOycpO1xyXG4gICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoZGl2KTtcclxuICAgICAgcm93W2ldID0gZGl2O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvd1tpXTtcclxuICB9XHJcblxyXG4gIHBhaW50SXRlbURvbShkaXYsIEwsIGksIGl0LCBraW5kLCBpc1JlYWwgPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzID0gZGl2LnN0eWxlO1xyXG4gICAgY29uc3QgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAvLyBQb3NpY2nDs25cclxuICAgIHMubGVmdCAgID0gaXQuem9uZS54ICsgJ3B4JztcclxuICAgIHMudG9wICAgID0gaXQuem9uZS55ICsgJ3B4JztcclxuICAgIHMud2lkdGggID0gaXQuem9uZS53ICsgJ3B4JztcclxuICAgIHMuaGVpZ2h0ID0gKGl0LnpvbmUuaCAtIDIpICsgJ3B4JztcclxuXHJcbiAgICAvLyBUZXh0b1xyXG4gICAgZGl2LnRleHRDb250ZW50ID0gaXNSZWFsID8gaXQubGFiZWwgOiAnJztcclxuXHJcbiAgICAvLyBFc3RhZG9zXHJcbiAgICBjb25zdCBzZWxlY3RlZCAgID0gaXNSZWFsICYmIHRoaXMudmFsdWVbTF0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLnZhbHVlW0xdID09PSBpdC5rZXk7XHJcbiAgICBjb25zdCBpbkZvY3VzTHZsID0gdGhpcy5mb2N1c2VkICYmICh0aGlzLmZvY3VzTGV2ZWwgPT09IEwpO1xyXG4gICAgY29uc3QgZm9jdXNNYXRjaCA9IGlzUmVhbCAmJiBpbkZvY3VzTHZsICYmICh0aGlzLmZvY3VzUGF0aFtMXSA9PT0gaXQua2V5KTtcclxuICAgIGNvbnN0IGlzSG92ZXIgICAgPSBpc1JlYWwgJiYgKHRoaXMuaG92ZXIubGV2ZWwgPT09IEwgJiYgdGhpcy5ob3Zlci5pbmRleCA9PT0gaSk7XHJcblxyXG4gICAgLy8gRXN0aWxvcyBiYXNlXHJcbiAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgcy5jb2xvciAgICAgID0gY2MudGV4dDtcclxuICAgIHMuYm9yZGVyICAgICA9ICcxcHggc29saWQgJyArIGNjLmJvcmRlcjtcclxuICAgIHMudGV4dEFsaWduICA9IGtpbmQgPT09ICdtYXAnID8gJ2NlbnRlcicgOiAnbGVmdCc7XHJcblxyXG4gICAgLy8gUHJpb3JpZGFkIHZpc3VhbDogc2VsZWNjaW9uYWRvID4gZm9jbyA+IGhvdmVyID4gYmFzZVxyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICB9IGVsc2UgaWYgKGZvY3VzTWF0Y2gpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH0gZWxzZSBpZiAoaXNIb3Zlcikge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRmlsYXMgZGUgcGFkZGluZyBpbnZpc2libGVzIGVuIGhvamFcclxuICAgIHMub3BhY2l0eSA9IGlzUmVhbCA/ICcxJyA6ICcwJztcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gQ2ljbG8gZGUgdmlkYSA9PT09PT09XHJcbiAgclNpemUoKSB7XHJcbiAgICB0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcbiAgICB0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcbiAgICB0aGlzLmxheW91dExldmVscygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgdGhpcy5idWlsZExldmVscygpO1xyXG4gICAgdGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gSW50ZXJhY2Npw7NuID09PT09PT1cclxuICBfdG9Mb2NhbChlKSB7XHJcbiAgICBjb25zdCBteCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG4gICAgY29uc3QgbXkgPSBlLmNsaWVudFkgLSB0aGlzLnpvbmUueTtcclxuICAgIHJldHVybiB7IHg6IG14LCB5OiBteSB9O1xyXG4gIH1cclxuXHJcbiAgX2hpdFRlc3QobXgsIG15KSB7XHJcbiAgICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgICBjb25zdCB6ID0gbHZsLnpvbmU7XHJcbiAgICAgIGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaCkgY29udGludWU7XHJcblxyXG4gICAgICBpZiAobHZsLnR5cGUgPT09ICdtYXAnKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGx2bC5pdGVtc1tpXS56b25lO1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiB0cnVlIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5Sb3dzID0gTWF0aC5tYXgobHZsLml0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgY29uc3QgaXR6ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldLnpvbmUgOiB7IHg6IHoueCwgeTogei55ICsgaSAqIHRoaXMubGluZUgsIHc6IHoudywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiBpc1JlYWwgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IEw6IC0xLCBpOiAtMSwgcmVhbDogZmFsc2UgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vtb3ZlJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgdGhpcy5ob3ZlciA9IChodC5MICE9PSAtMSAmJiBodC5yZWFsKSA/IHsgbGV2ZWw6IGh0LkwsIGluZGV4OiBodC5pIH0gOiB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZWRvd24nKSB7XHJcbiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fdG9Mb2NhbChlKTtcclxuICAgICAgY29uc3QgaHQgPSB0aGlzLl9oaXRUZXN0KHgsIHkpO1xyXG4gICAgICBpZiAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdEF0KGh0LkwsIGh0LmkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNldXAnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIChPcGNpb25hbCkgdGVjbGFkbzogaW50ZWdyYXIgbmF2ZWdhY2nDs24gZW4gR3VpIHkgcmVlbnZpYXIgYXF1w60gc2kgc2UgZGVzZWFcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIFNlbGVjY2nDs24gKyBhdXRvY29tcGxldGFkbyArIG5vdGlmaWNhY2nDs25cclxuICBfc2VsZWN0QXQoTCwgaSkge1xyXG4gICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICBjb25zdCBjaG9zZW4gPSBsdmwuaXRlbXNbaV07XHJcbiAgICBpZiAoIWNob3NlbiB8fCAhY2hvc2VuLmtleSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpO1xyXG4gICAgYmFzZVtMXSA9IGNob3Nlbi5rZXk7XHJcblxyXG4gICAgY29uc3QgbmV3UGF0aCA9IHRoaXMuYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2UpO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSBuZXdQYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEFQSSBww7pibGljYSA9PT09PT09XHJcbiAgc2V0VmFsdWUocGF0aCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRUcmVlKHRyZWUpIHtcclxuICAgIHRoaXMudHJlZSA9IHRyZWUgfHwge307XHJcbiAgICAvLyByZWNhbGN1bGFyIGxlYWZNYXggZW4gcHLDs3hpbWEgcGFzYWRhXHJcbiAgICB0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXMoeyBmb2N1c2VkLCBmb2N1c1BhdGgsIGZvY3VzTGV2ZWwgfSkge1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c2VkID09PSAnYm9vbGVhbicpIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb2N1c1BhdGgpKSB0aGlzLmZvY3VzUGF0aCA9IGZvY3VzUGF0aC5zbGljZSgpO1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c0xldmVsID09PSAnbnVtYmVyJykgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IFB1YmxpY2FjacOzbiBkZSBhbHR1cmEgPT09PT09PVxyXG4gIF9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCkge1xyXG4gICAgbGV0IGMgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxldmVscy5sZW5ndGg7IGkrKykgaWYgKHRoaXMubGV2ZWxzW2ldLnR5cGUgPT09ICdtYXAnKSBjKys7XHJcbiAgICByZXR1cm4gYztcclxuICB9XHJcblxyXG4gIF9nZXRDdXJyZW50TGVhZkxlbmd0aCgpIHtcclxuICAgIGNvbnN0IGxhc3QgPSB0aGlzLmxldmVsc1t0aGlzLmxldmVscy5sZW5ndGggLSAxXTtcclxuICAgIHJldHVybiBsYXN0ICYmIGxhc3QudHlwZSA9PT0gJ2xpc3QnID8gbGFzdC5pdGVtcy5sZW5ndGggOiAwO1xyXG4gIH1cclxuXHJcbiAgX3B1Ymxpc2hIZWlnaHQoKSB7XHJcbiAgICBjb25zdCBpbnRlciA9IHRoaXMuX2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKTtcclxuICAgIGNvbnN0IGxlYWZMZW4gPSBNYXRoLm1heCh0aGlzLmxlYWZNYXgsIHRoaXMuX2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkpO1xyXG4gICAgY29uc3QgbGVhZkggID0gbGVhZkxlbiAqIHRoaXMubGluZUg7XHJcbiAgICBjb25zdCBpbnRlckggPSBpbnRlciAqICh0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcCk7XHJcbiAgICBjb25zdCB0b3RhbEggPSBpbnRlckggKyAoaW50ZXIgPyB0aGlzLmxldmVsR2FwIDogMCkgKyBsZWFmSDtcclxuXHJcbiAgICAvLyBBY3R1YWxpemEgbcOpdHJpY2FzIGRlbCBwcm90byAobG8gcXVlIHN1bWEgZWwgR1VJKVxyXG4gICAgdGhpcy5oID0gdG90YWxIO1xyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG5cclxuICAgIC8vIEF2aXNhciBhbCBHVUkgeSByZWZyZXNjYXIgem9uYXNcclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYWluKSB0aGlzLm1haW4uY2FsYygpO1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBCb29sIH0gZnJvbSAnLi4vcHJvdG8vQm9vbC5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL3Byb3RvL0J1dHRvbi5qcyc7XHJcbmltcG9ydCB7IENpcmN1bGFyIH0gZnJvbSAnLi4vcHJvdG8vQ2lyY3VsYXIuanMnO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL3Byb3RvL0NvbG9yLmpzJztcclxuaW1wb3J0IHsgRnBzIH0gZnJvbSAnLi4vcHJvdG8vRnBzLmpzJztcclxuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9wcm90by9HcmFwaC5qcyc7XHJcbmltcG9ydCB7IEdyb3VwICB9IGZyb20gJy4uL3Byb3RvL0dyb3VwLmpzJztcclxuaW1wb3J0IHsgSm95c3RpY2sgfSBmcm9tICcuLi9wcm90by9Kb3lzdGljay5qcyc7XHJcbmltcG9ydCB7IEtub2IgfSBmcm9tICcuLi9wcm90by9Lbm9iLmpzJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uL3Byb3RvL0xpc3QuanMnO1xyXG5pbXBvcnQgeyBOdW1lcmljIH0gZnJvbSAnLi4vcHJvdG8vTnVtZXJpYy5qcyc7XHJcbmltcG9ydCB7IFNsaWRlIH0gZnJvbSAnLi4vcHJvdG8vU2xpZGUuanMnO1xyXG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9wcm90by9UZXh0SW5wdXQuanMnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL3Byb3RvL1RpdGxlLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0LmpzJztcclxuaW1wb3J0IHsgQml0bWFwIH0gZnJvbSAnLi4vcHJvdG8vQml0bWFwLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICcuLi9wcm90by9TZWxlY3Rvci5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi4vcHJvdG8vRW1wdHkuanMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vcHJvdG8vSXRlbS5qcyc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi9wcm90by9HcmlkLmpzJztcclxuaW1wb3J0IHsgUGFkMkQgfSBmcm9tICcuLi9wcm90by9QYWQyRC5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFRyZWVMaXN0IH0gZnJvbSAnLi4vcHJvdG8vVHJlZUxpc3QuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndHJlZWxpc3QnOiBuID0gbmV3IFRyZWVMaXN0KG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Q0FBQTtDQUNBO0NBQ0E7QUFDQTtBQUNZLE9BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsTUFBTSxDQUFDLEdBQUc7Q0FDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7Q0FDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7Q0FDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0NBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSztDQUNiLEVBQUUsS0FBSyxFQUFFLEtBQUs7Q0FDZCxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDYjtDQUNBLEVBQUUs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QUFTLEVBQUUsQ0FBQztDQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0NBQ3JCLE9BQU87QUFDUDtDQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0NBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDMUIsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtDQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7Q0FDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUNqQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFD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VyxFQUFFLENBQUM7Q0FDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Q0FDcEQsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQ3ZEO0NBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDeEMsR0FBRztBQUNIO0NBQ0EsRUFBRSxRQUFRLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFO0NBQ3JDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3RCO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0NBQ3ZELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztDQUN2RDtDQUNBLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFD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QUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0NBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtDQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0NBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7Q0FDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztDQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDbkIsU0FBUztDQUNULFFBQVEsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDM0I7Q0FDQSxLQUFLO0FBQ0w7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Q0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3JIO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM3SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxF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RyxFQUFFLENBQUM7QUFDekg7Q0FDQTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0E7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztDQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0NBQ0E7QUFDQTtDQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxD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S0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0NBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztDQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztDQUN2QjtDQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7Q0FDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7Q0FDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0NBQ0EsWUFBWSxFQUFFLEdBQUc7Q0FDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7Q0FDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxhQUFhLENBQUM7Q0FDZDtDQUNBLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlEO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkI7Q0FDQSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixnQkFBZ0IsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUMxQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdEQsaUJBQWlCO0FBQ2pCO0NBQ0EsZ0JBQWdCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRztDQUNBLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0QsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFB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QSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDM0M7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMzQjtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2pELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztDQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzFELFNBQVMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QjtDQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztDQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqRDtDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDdkQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0NBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUN4QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDbkM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENB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Q3RCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0NBQzdFLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0NBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7Q0FDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEMsT0FBTztDQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDdkIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUN6QyxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NB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QkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakUsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0NBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7Q0FDcEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0NBQzdDLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN0QixLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0EsRUFBRSxhQUFhLEdBQUc7Q0FDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0NBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztDQUM5RSxLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0E7QUFDQTtDQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7Q0FDL0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzlDLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVB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Q0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07Q0FDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07Q0FDNUI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7Q0FDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0NBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMs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SUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztDQUNBLFNBQVM7QUFDVDtBQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Q0FDckQsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUU7Q0FDcEUsU0FBUztDQUNUO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0NBQ3hCLFFBQVEsSUFBSSxDQUFD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RSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7Q0FDbEQ7Q0FDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7Q0FDQTtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0NBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztDQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFJO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7Q0FDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFDO0NBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztDQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUU7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUk7Q0FDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwQztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU07Q0FDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtDQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtDQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRTtBQUN4QjtDQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQztDQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUN0QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUNsSTtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtDQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0NBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0NBQ0EsUUFBUSxRQUFRLElBQUk7Q0FDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0NBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztDQUNqRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0NBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7Q0FDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDckMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFB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QyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7Q0FDQTtDQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztDQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QztDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7Q0FDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0NBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtDQUN2TTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDdEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtDQUNwQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxTQUFRO0FBQzNDO0NBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUk7Q0FDcEIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVM7Q0FDM0IsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO0NBQ2hDLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRTtDQUM5RSxjQUFjLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFFO0NBQ3pFLGNBQWMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBSztDQUNsQyxNQUFNO0FBQ047Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSTtDQUN2QixLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztDQUN4QixLQUFLLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBSztBQUMxQjtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQUs7QUFDcEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRTtDQUNqQixLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRTtBQUN0QztDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFDO0NBQ2pCLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ2pCO0NBQ0EsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ2hCO0NBQ0EsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDaEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtBQUMzQztDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRztBQUNyQjtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7Q0FDcEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUU7QUFDMUM7Q0FDQSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzlCO0NBQ0EsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLE9BQU87Q0FDeEMsV0FBVyxPQUFPLE9BQU87QUFDekI7Q0FDQSxHQUFHLE1BQU07QUFDVDtDQUNBLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sT0FBTztDQUMxQyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLE9BQU87QUFDM0M7Q0FDQSxHQUFHO0FBQ0g7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Y7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3pCLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtBQUNBO0NBQ0EsRUFBRSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25EO0FBQ0E7Q0FDQTtDQUNBLEVBQUUsR0FBRyxJQUFJLEtBQUssT0FBTyxDQUFDO0NBQ3RCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ2xDLGNBQWMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzNCLFNBQVMsT0FBTyxJQUFJLENBQUM7Q0FDckIsR0FBRztBQUNIO0FBQ0E7Q0FDQSxFQUFFLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUN4QjtDQUNBLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDdEIsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUk7Q0FDdkIsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3ZCLEdBQUc7Q0FDSCxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtDQUNBLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN0RDtDQUNBLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3pEO0NBQ0EsS0FBSyxJQUFJLElBQUksS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuRDtDQUNBLEtBQUssSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQzNCO0NBQ0EsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztDQUN4QixNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDcEUsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDaEYsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDakMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ3BCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUM3QjtBQUNBO0NBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztDQUM5QyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDM0M7Q0FDQSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN2QjtDQUNBLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0NBQzFCLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztDQUM5QixRQUFRO0FBQ1I7Q0FDQSxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUc7QUFDM0I7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHO0FBQ2hDO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQzVDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3JDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRTtDQUNBLFNBQVMsTUFBTTtBQUNmO0NBQ0EsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ2hDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQztDQUNBLFNBQVMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUM5QyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbkM7Q0FDQSxTQUFTLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2pDLFNBQVMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUNyQztDQUNBLFNBQVMsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQy9ELFNBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7Q0FDaEQsU0FBUyxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFO0NBQzdCLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNsQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxTQUFTLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDO0NBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUc7Q0FDeEIsT0FBTyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQyxPQUFPLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQ3ZDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUN4QyxlQUFlLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQ25EO0NBQ0EsT0FBTyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdkMsT0FBTztBQUNQO0NBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0NBQ3BEO0NBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDakM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJ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LEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QztDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2Y7Q0FDQSxFQUFFLElBQUksQ0FBQyxZQUFZLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUQsYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxhQUFhLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7Q0FDN0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNwQjtDQUNBLEtBQUssSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUN0QyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxFQUFFO0FBQzFDO0NBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDNUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU07Q0FDMUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUM5QztDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0NBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDdkIsTUFBTTtDQUNOLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNoQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDdEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzlDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztDQUN6QixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxXQUFXLENBQUMsR0FBRztBQUNoQjtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7Q0FDakIsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFLO0FBQ2Y7Q0FDQSxLQUFjLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU87Q0FDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDbkMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7Q0FDQSxLQUFLLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7Q0FDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztDQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUM7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0E7Q0FDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7Q0FDNUQ7Q0FDQTtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtDQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7Q0FDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtDQUNwQztDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztDQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0NBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtDQUNBLEVBQUU7QUFDRjtBQUNBO0NBQ0E7O0NDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQztBQUMvQjtDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztB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LENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztDQUM5QjtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztDQUN0RSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtDQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QztDQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0NBQzFCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkM7Q0FDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDdkQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ3JDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FB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QUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DO0NBQ0EsS0FBSztDQUNMO0NBQ0E7O0NDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Q0FDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0NBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxRDtD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RUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNy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QUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ25GLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDcEgsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEc7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFB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QUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU07Q0FDL0IsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRTtDQUN6QyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFFO0NBQy9CLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNwQztDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0NDNWNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN2RDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztDQUMxQyxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Q0FDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztDQUN6QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFJO0FBQzVEO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztDQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7Q0FDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENB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QUUsQ0FBQztDQUNoRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7Q0FDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7Q0FDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7Q0FDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0NBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0NBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtDQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0NBQ0EsYUFBYTtBQUNiO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM3QjtBQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztDQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7Q0FDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDN0QsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRjtDQUNBLFFBQVEsR0FBRyxJ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QUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7Q0FDekQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDakYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMs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TUFBTSxDQUFDO0FBQzlCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0NBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztDQUM5QjtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDckQ7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUks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LFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1RDtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDckU7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDakMsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztDQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3JGO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0NBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7Q0FDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztDQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3pEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTs7Q0NsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztDQUNyQztBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7Q0FDQTtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0NBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7Q0FDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtDQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcscUNBQXFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNERBQTRELENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNyVSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsZ0RBQWdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNySztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0NBQ2xJLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFB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SUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3hELFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3hELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0I7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFD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QUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUN0RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0NBQ3BDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzdCO0NBQ0EsU0FBUztBQUNUO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztBQUMxUDtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pKO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDcEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFD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QUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDN0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUN4RCxRQUFRLE1BQU07Q0FDZCxNQUFNLEtBQUssQ0FBQztDQUNaO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDdEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUM1RCxRQUFRLE1BQU07Q0FDZCxLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO0NBQ2IsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFEO0NBQ0EsSUFBSSxJQUFJLE9BQU87Q0FDZixNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDM0M7QUFDQTtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDcEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNsQixHQUFHO0NBQ0g7O0NDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7Q0FDQSxR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LENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQztDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7Q0FDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0NBQy9CO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztDQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztDQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7Q0FDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FB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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7Q0FDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUMzQixLQUFLO0FBQ0w7Q0FDQTs7Q0MxRE8sTUFBTSxNQUFNLFNBQVMsS0FBSyxDQUFDO0FBQ2xDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUU7Q0FDbEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDM0IsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksVUFBVSxHQUFFO0FBQ2hEO0NBQ0E7Q0FDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzlCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsOENBQThDLEdBQUU7Q0FDOU07QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxFQUFFLENBQUMsT0FBTyxHQUFHLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUU7Q0FDNUwsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBSztBQUMxQztDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7Q0FDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDekw7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBQztDQUNyQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBSztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztDQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtDQUNoRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNO0NBQzdELFFBQVEsT0FBTyxHQUFHO0FBQ2xCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztDQUNsQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0NBQ3pCO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDL0I7Q0FDQSxZQUFZLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7Q0FDdEMsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLEtBQUs7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxLQUFLO0FBQ2hDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7Q0FDMUI7Q0FDQTtDQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxNQUFLO0NBQ3RCLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtDQUM3QixZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDbkMsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUU7Q0FDakQsU0FBUyxNQUFNO0NBQ2YsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUM3QixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sRUFBRTtBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUc7Q0FDL0IsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztDQUMzQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDL0MsWUFBWSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDeEIsU0FBUztDQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRztBQUNkO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3ZCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtDQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsTUFBSztDQUMxQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQzdCO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQzVDO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Q0FDdkIsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0NBQ3RGLHFCQUFxQixFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUU7Q0FDOUMsYUFBYTtBQUNiO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0NBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDekI7Q0FDQSxZQUFZLFFBQVEsQ0FBQztBQUNyQjtDQUNBLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07Q0FDL0YsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTTtDQUNwRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0NBQ25HLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07QUFDckc7Q0FDQSxhQUFhO0FBQ2I7Q0FDQSxZQUFZLE1BQU0sR0FBRyxLQUFJO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLE1BQU07QUFDckI7QUFDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2hEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUc7QUFDbkM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0NBQ3RCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksS0FBSTtDQUN6QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxLQUFJO0NBQzFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUk7QUFDdEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTs7Q0N0S08sTUFBTSxNQUFNLFNBQVMsS0FBSyxDQUFDO0FBQ2xDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUU7Q0FDbEMsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO0NBQzVDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFJO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7QUFDN0I7QUFDQTtBQUNBO0NBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDhDQUE4QyxHQUFFO0FBQzdNO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRTtDQUM1TCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0NBQzVDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQ3ZMO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0NBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLE1BQU0sQ0FBQztDQUM5RCxRQUFRLE9BQU8sR0FBRztBQUNsQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7Q0FDbEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUN6QjtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDaEM7Q0FDQSxZQUFZLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN2QyxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDakM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtDQUM3QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSTtDQUM5QixZQUFZLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRTtBQUNuRTtDQUNBLFNBQVM7QUFDVDtDQUNBO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25DO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztBQUN2QjtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO0NBQzdCLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztDQUNuQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRTtDQUNqRCxTQUFTLE1BQU07Q0FDZixZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDOUIsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFlBQVksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQzlCO0NBQ0EsUUFBUSxJQUFJLEdBQUcsRUFBRTtDQUNqQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBRztDQUMxQixZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFFO0NBQy9CLFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFJO0NBQzNCLFlBQVksSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUU7Q0FDaEMsU0FBUztDQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRztDQUMvQixZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvQztDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRTtDQUNuQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFDO0NBQzlFLGdCQUFnQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNwRixhQUFhO0NBQ2I7Q0FDQSxTQUFTO0NBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHO0FBQ2Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNmO0NBQ0EsUUFBUSxJQUFJLE1BQU0sR0FBRyxNQUFLO0NBQzFCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDN0I7Q0FDQSxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBQztBQUN6QjtDQUNBLFlBQVksUUFBUSxDQUFDO0FBQ3JCO0NBQ0EsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtDQUMvRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNO0NBQ3BHLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07Q0FDakcsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUNyRztDQUNBLGFBQWE7QUFDYjtDQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEI7QUFDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDakQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNqQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3BDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztDQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7Q0FDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDL0xBO0FBRUE7Q0FDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtDQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztDQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FB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QUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztDQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtDQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0NBQ25DO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUks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QVM7QUFDVDtDQUNBLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0NBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDM0QsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDMVRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDL0IsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFFO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0NBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7Q0FDQTtBQUNBO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlGO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0NBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0NBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0NBQ0EsS0FBSztDQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7Q0FDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENB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QVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLFFBQVEsSUFBSTtDQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzNELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQzlEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7Q0FDaEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUU7Q0FDcEU7Q0FDQSxZQUFZLE1BQU07Q0FDbEIsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztDQUMxQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Q0FDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkc7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNwSDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDMUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTs7Q0NyUkE7QUFJQTtDQUNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztDQUNwQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0NBQ3RCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUM7Q0FDbEMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ25DLElBQUksSUFBSSxDQUFDLEtBQUssUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNwRSxJQUFJLElBQUksQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Q0FDbEMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzVFLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0U7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7Q0FDekMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0FBQzFDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsUUFBUSxLQUFLLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ3hDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7QUFDdEI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUM7Q0FDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztDQUN2QixJQUFJLElBQUksQ0FBQyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7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LENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ2hHLEtBQUs7Q0FDTCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzlDO0NBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtDQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDaEQsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUN4QyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNyQixRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNuRCxVQUFVLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbEMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFB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QUcsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN0QztDQUNBO0NBQ0EsSUFBSSxHQUFHLENBQUMsV0FBVyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUM3QztDQUNBO0NBQ0EsSUFBSSxNQUFNLFFBQVEsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO0NBQ3pGLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQy9ELElBQUksTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5RSxJQUFJLE1BQU0sT0FBTyxNQUFNLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEY7Q0FDQTtDQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzNCLElBQUksQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzNCLElBQUksQ0FBQyxDQUFDLE1BQU0sT0FBTyxZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztDQUM1QyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3REO0NBQ0E7Q0FDQSxJQUFJLElBQUksUUFBUSxFQUFFO0NBQ2xCLE1BQU0sQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0NBQy9CLE1BQU0s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QyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztDQUN6QyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7Q0FDakIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7Q0FDaEMsTUFBTSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDeEMsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNyQyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3RHLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQ3BCLE1BQU0sT0FBTyxJQUFJLENBQUM7Q0FDbEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO0NBQ2hDLE1BQU0sTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hDLE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDckMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxD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SUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNyQztDQUNBO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ2pELElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Q0FDNUIsR0FBRztDQUNIOztBQ2hXWSxPQUFDLEdBQUcsR0FBRyxZQUFZO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDMUI7Q0FDQSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7Q0FDQSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3RDO0NBQ0EsWUFBWSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hCLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0I7Q0FDQSxTQUFTLE1BQU0sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDOUM7Q0FDQSxZQUFZLEdBQUcsR0FBRyxJQUFJLENBQUM7Q0FDdkIsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3pEO0NBQ0EsWUFBWSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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LENBQUMsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUM7Q0FDekUsUUFBUSxDQUFDLENBQUMsb0JBQW9CO0NBQzlCLFFBQVEsSUFBSSxDQUFDO0FBQ2I7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDakU7Q0FDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7Q0FDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO0FBQzVDO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3BFO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7Q0FDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDZjtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFT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QUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzlELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztDQUN0QyxHQUFHO0FBQ0g7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxNQUFNLEdBQUc7Q0FDWCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztDQUN4QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLE9BQU8sR0FBRztDQUNaLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNyQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRTtDQUM1QixJQUFJLElBQUksSUFBSTtDQUNaLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO0NBQ3BCLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0NBQzVDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQ2xFLE9BQU8sQ0FBQztDQUNSO0NBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7Q0FDcEIsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Q0FDNUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Q0FDN0MsT0FBTyxDQUFDO0NBQ1I7QUFDQTtDQUNBO0NBQ0EsR0FBRztBQUNIO0NBQ0Es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LENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUN6QjtDQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2xCO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BFO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxRQUFRLENBQUM7Q0FDMUUsU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUMvQztDQUNBLElBQUksT0FBTyxJQUFJLENBQUM7Q0FDaEIsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7Q0FDakI7QUFDQTtDQUNBO0NBQ0E7Q0FDQSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7Q0FDQSxJQUFJLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztDQUN2QixJQUFJLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUM1QjtDQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDL0QsSUFBSSxJQUFJLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElB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LE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFO0NBQ1gsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUI7Q0FDQSxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQztDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7Q0FDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7Q0FDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztDQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNoRCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDekIsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0NBQ1osSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FB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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvcHJvdG8vVHJlZUxpc3QuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBBUEkgcMO6YmxpY2EgZXNwZXJhZGE6XHJcbiAgICAvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KVxyXG4gICAgLy8gby5mb2N1c2VkIChib29sKSwgby5mb2N1c1BhdGggKGFycmF5KSwgby5mb2N1c0xldmVsIChudW1iZXIpXHJcbiAgICAvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcbiAgICBvLnNlbGVjdGFibGUgPSB0cnVlO1xyXG4gICAgby5uYW1lID0gby5uYW1lIHx8ICdUcmVlTGlzdCc7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICAvLyBEYXRvcyAmIGVzdGFkb1xyXG4gICAgdGhpcy50cmVlICAgICAgID0gby50cmVlIHx8IHt9O1xyXG4gICAgdGhpcy52YWx1ZSAgICAgID0gQXJyYXkuaXNBcnJheShvLnZhbHVlKSA/IG8udmFsdWUuc2xpY2UoKSA6IFtdO1xyXG4gICAgdGhpcy5mb2N1c2VkICAgID0gISFvLmZvY3VzZWQ7XHJcbiAgICB0aGlzLmZvY3VzUGF0aCAgPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09ICdudW1iZXInID8gby5mb2N1c0xldmVsIDogLTE7XHJcblxyXG4gICAgdGhpcy50YWJJbmRleCAgID0gby50YWJJbmRleCA/PyBudWxsO1xyXG4gICAgdGhpcy5pdGVtSW5kZXggID0gby5pdGVtSW5kZXggPz8gbnVsbDtcclxuXHJcbiAgICAvLyBDYWxsYmFja1xyXG4gICAgdGhpcy5jaGFuZ2VDYiA9IHR5cGVvZiBvLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nID8gby5vbkNoYW5nZSA6ICgpID0+IHt9O1xyXG5cclxuICAgIC8vIExheW91dCBpbnRlcm5vIC8gcHVibGljYWNpw7NuIGRlIGFsdHVyYVxyXG4gICAgdGhpcy5saW5lSCAgICA9IHRoaXMuaDsgICAgICAgICAgICAgICAvLyBhbHRvIGRlIFVOQSBmaWxhXHJcbiAgICB0aGlzLmxldmVsR2FwID0gdGhpcy5jb2xvcnMuc3kgfHwgMjsgIC8vIHNlcGFyYWNpw7NuIHZlcnRpY2FsIGVudHJlIG5pdmVsZXNcclxuICAgIHRoaXMubGVhZk1heCAgPSAwOyAgICAgICAgICAgICAgICAgICAgLy8gc2UgY2FsY3VsYSBlbiByU2l6ZSgpXHJcblxyXG4gICAgLy8gTW9kZWxvIHZpc3VhbFxyXG4gICAgdGhpcy5sZXZlbHMgICA9IFtdOyAgIC8vIFt7dHlwZTonbWFwJ3wnbGlzdCcsIGl0ZW1zOlt7a2V5LGxhYmVsLHpvbmV9XSwgem9uZTp7eCx5LHcsaH19Li4uXVxyXG4gICAgdGhpcy5pdGVtc0RvbSA9IFtdOyAgIC8vIGVzcGVqbyBET00gcG9yIG5pdmVsXHJcbiAgICB0aGlzLmhvdmVyICAgID0geyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG5cclxuICAgIC8vIENvbnRlbmVkb3IgaW50ZXJubyAoYWJzb2x1dG8pXHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSgnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnbGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7Jyk7XHJcbiAgICB0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEhlbHBlcnMgZGUgdGlwbyA9PT09PT09XHJcbiAgc3RhdGljIGlzTWFwKG5vZGUpICB7IHJldHVybiBub2RlICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShub2RlKTsgfVxyXG4gIHN0YXRpYyBpc0xpc3Qobm9kZSkgeyByZXR1cm4gQXJyYXkuaXNBcnJheShub2RlKTsgfVxyXG5cclxuICAvLyA9PT09PT09IFJlY29ycmlkbyBkZSBkYXRvcyA9PT09PT09XHJcbiAgZ2V0Tm9kZUF0UGF0aChwYXRoKSB7XHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBwYXRoW2ldKSkgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgICBub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBMbGVnYW1vcyBhIHVuYSBsaXN0YTogeWEgbm8gaGF5IG3DoXMgY2xhdmVzIHbDoWxpZGFzXHJcbiAgICAgICAgaWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuICB9XHJcblxyXG4gIC8vIEF1dG9jb21wbGV0YXI6IGJhamEgcG9yIHByaW1lcmFzIGNsYXZlcyBkZSBjYWRhIG1hcGEgaGFzdGEgYWxjYW56YXIgdW5hIGxpc3RhXHJcbiAgYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2VQYXRoKSB7XHJcbiAgICBsZXQgeyBub2RlIH0gPSB0aGlzLmdldE5vZGVBdFBhdGgoYmFzZVBhdGgpO1xyXG4gICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoLnNsaWNlKCk7XHJcbiAgICB3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgY29uc3QgazAgPSBrZXlzWzBdO1xyXG4gICAgICBwYXRoLnB1c2goazApO1xyXG4gICAgICBub2RlID0gbm9kZVtrMF07XHJcbiAgICB9XHJcbiAgICAvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2EgdW4gw610ZW0gZmluYWwgZGUgbGEgaG9qYVxyXG4gICAgcmV0dXJuIHBhdGg7XHJcbiAgfVxyXG5cclxuICAvLyBSdXRhIGFjdGl2YSAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpbm8gdmFsdWUpXHJcbiAgZ2V0QWN0aXZlUGF0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgPyB0aGlzLmZvY3VzUGF0aCA6IHRoaXMudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IFRhbWHDsW8gZGUgaG9qYSBtw6F4aW1vIChwYXJhIGxheW91dCBlc3RhYmxlKSA9PT09PT09XHJcbiAgY29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBub2RlLmxlbmd0aDtcclxuICAgIGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHJldHVybiAwO1xyXG4gICAgbGV0IG0gPSAwO1xyXG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XHJcbiAgICAgIG0gPSBNYXRoLm1heChtLCB0aGlzLmNvbXB1dGVMZWFmTWF4KG5vZGVba10pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBDb25zdHJ1Y2Npw7NuIGRlIG5pdmVsZXMgKG1vZGVsbyBsw7NnaWNvKSA9PT09PT09XHJcbiAgYnVpbGRMZXZlbHMoKSB7XHJcbiAgICB0aGlzLmxldmVscy5sZW5ndGggPSAwO1xyXG4gICAgY29uc3QgYWN0aXZlUGF0aCA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpO1xyXG5cclxuICAgIGxldCBub2RlID0gdGhpcy50cmVlO1xyXG4gICAgbGV0IGxldmVsID0gMDtcclxuXHJcbiAgICB3aGlsZSAobm9kZSkge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBpbnRlcm1lZGlvOiBjbGF2ZXMgZGVsIG1hcGEgKGhvcml6b250YWwpXHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICAgIGlmICgha2V5cy5sZW5ndGgpIGJyZWFrO1xyXG4gICAgICAgIHRoaXMubGV2ZWxzLnB1c2goe1xyXG4gICAgICAgICAgdHlwZTogJ21hcCcsXHJcbiAgICAgICAgICBpdGVtczoga2V5cy5tYXAoayA9PiAoeyBrZXk6IGssIGxhYmVsOiBrLCB6b25lOiB7IHg6MCx5OjAsdzowLGg6MCB9IH0pKSxcclxuICAgICAgICAgIHpvbmU6IHsgeDowLHk6MCx3OjAsaDogdGhpcy5saW5lSCB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBhY3RpdmVQYXRoW2xldmVsXTtcclxuICAgICAgICBpZiAoIW5leHRLZXkgfHwgIW5vZGUuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIGJyZWFrO1xyXG4gICAgICAgIG5vZGUgPSBub2RlW25leHRLZXldO1xyXG4gICAgICB9IGVsc2UgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkge1xyXG4gICAgICAgIC8vIE5pdmVsIGhvamE6IGxpc3RhIHZlcnRpY2FsXHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSBub2RlLm1hcChsYWJlbCA9PiAoeyBrZXk6IGxhYmVsLCBsYWJlbCwgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSk7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChpdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCkgKiB0aGlzLmxpbmVIO1xyXG4gICAgICAgIHRoaXMubGV2ZWxzLnB1c2goeyB0eXBlOiAnbGlzdCcsIGl0ZW1zLCB6b25lOiB7IHg6MCwgeTowLCB3OjAsIGg6IGhMaXN0IH0gfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgbGV2ZWwrKztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gTGF5b3V0ICh6b25hcyAmIERPTSkgPT09PT09PVxyXG4gIGxheW91dExldmVscygpIHtcclxuICAgIFxyXG4gICAgY29uc3QgY29udGVudFggPSAodGhpcy5zYSB8fCAxMDApICsgODsgICAvLyBjb2x1bW5hIGRlIGxhYmVsICsgcGFkZGluZ1xyXG4gICAgY29uc3QgcGFkUmlnaHQgPSA4O1xyXG4gICAgY29uc3QgdyA9IHRoaXMuem9uZS53IC0gY29udGVudFggLSBwYWRSaWdodDtcclxuXHJcbiAgICBcclxuICAgIGxldCB5ID0gMDtcclxuXHJcbiAgICAvLyBBanVzdGFyIGl0ZW1zRG9tIGEgY2FudGlkYWQgZGUgbml2ZWxlc1xyXG4gICAgd2hpbGUgKHRoaXMuaXRlbXNEb20ubGVuZ3RoIDwgdGhpcy5sZXZlbHMubGVuZ3RoKSB0aGlzLml0ZW1zRG9tLnB1c2goW10pO1xyXG4gICAgZm9yIChsZXQgTCA9IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCA8IHRoaXMuaXRlbXNEb20ubGVuZ3RoOyBMKyspIHtcclxuICAgICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLml0ZW1zRG9tW0xdKSBpZiAoZWwgJiYgZWwucGFyZW50Tm9kZSkgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLml0ZW1zRG9tLmxlbmd0aCA9IHRoaXMubGV2ZWxzLmxlbmd0aDtcclxuXHJcbiAgICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgICBpZiAobHZsLnR5cGUgPT09ICdtYXAnKSB7XHJcbiAgICAgICAgY29uc3QgbiA9IE1hdGgubWF4KDEsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgIGNvbnN0IGNlbGxXID0gTWF0aC5mbG9vcih3IC8gbik7XHJcblxyXG4gICAgICAgIGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgIGxldCB4ID0gY29udGVudFg7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdCA9IGx2bC5pdGVtc1tpXTtcclxuICAgICAgICAgIGl0LnpvbmUgPSB7IHgsIHksIHc6IGNlbGxXLCBoOiB0aGlzLmxpbmVIIH07XHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbWFwJyk7XHJcbiAgICAgICAgICB4ICs9IGNlbGxXO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgY2VsZGFzXHJcbiAgICAgICAgdGhpcy5fcHJ1bmVSb3coTCwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgeSArPSB0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsaXN0YS9ob2phOiByZXNlcnZhciBoIHNlZ8O6biBsZWFmTWF4XHJcbiAgICAgICAgY29uc3QgbiA9IGx2bC5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICBcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IGhMaXN0IH07XHJcblxyXG4gICAgICAgICBjb25zdCByb3dzID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KTtcclxuICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBuO1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBpc1JlYWwgPyBsdmwuaXRlbXNbaV0gOiB7IGtleTogbnVsbCwgbGFiZWw6ICcnLCB6b25lOiB7IHg6MCx5OjAsdzowLGg6MCB9IH07XHJcbiAgICAgICAgICBcclxuICAgICAgICAgICBpdC56b25lID0geyB4OiBjb250ZW50WCwgeTogeSArIGkgKiB0aGlzLmxpbmVILCB3LCBoOiB0aGlzLmxpbmVIIH07XHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbGlzdCcsIGlzUmVhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBmaWxhc1xyXG4gICAgICAgIHRoaXMuX3BydW5lUm93KEwsIHJvd3MpO1xyXG4gICAgICAgIHkgKz0gaExpc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBanVzdGVzIGRlIGFsdG8gaW50ZXJubyBkZWwgY29udGVuZWRvciB2aXN1YWxcclxuICAgIGNvbnN0IHRvdGFsSCA9IHk7XHJcbiAgICB0aGlzLnpvbmUuaCA9IHRvdGFsSCArIHRoaXMubWFyZ2luO1xyXG4gICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuem9uZS5oICsgJ3B4JztcclxuICAgIHRoaXMuc1syXS5oZWlnaHQgPSB0b3RhbEggKyAncHgnO1xyXG5cclxuICAgIC8vIFB1YmxpY2FyIGFsdG8gdG90YWwgYWwgR1VJIChzdW1hcsOhIHUuaClcclxuICAgIHRoaXMuX3B1Ymxpc2hIZWlnaHQoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8gRWxpbWluYSBub2RvcyBET00gc29icmFudGVzIGVuIGxhIGZpbGEgTCBhIHBhcnRpciBkZWwgw61uZGljZSBrZWVwXHJcbiAgX3BydW5lUm93KEwsIGtlZXApIHtcclxuICAgIGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcbiAgICAvLyBzaSBudW5jYSBzZSBjcmXDsywgbmFkYSBxdWUgaGFjZXJcclxuICAgIGlmICghcm93KSByZXR1cm47XHJcbiAgICBmb3IgKGxldCBqID0ga2VlcDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xyXG4gICAgICBjb25zdCBlbCA9IHJvd1tqXTtcclxuICAgICAgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgcm93Lmxlbmd0aCA9IGtlZXA7XHJcbiAgfVxyXG5cclxuXHJcbiAgZW5zdXJlSXRlbURvbShMLCBpKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgd2hpbGUgKHJvdy5sZW5ndGggPD0gaSkgcm93LnB1c2gobnVsbCk7XHJcbiAgICBpZiAoIXJvd1tpXSkge1xyXG4gICAgICBjb25zdCBkaXYgPSB0aGlzLmRvbSgnZGl2JywgVG9vbHMuY3NzLnR4dCArICdwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsnKTtcclxuICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcbiAgICAgIHJvd1tpXSA9IGRpdjtcclxuICAgIH1cclxuICAgIHJldHVybiByb3dbaV07XHJcbiAgfVxyXG5cclxuICBwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgcyA9IGRpdi5zdHlsZTtcclxuICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy8gUG9zaWNpw7NuXHJcbiAgICBzLmxlZnQgICA9IGl0LnpvbmUueCArICdweCc7XHJcbiAgICBzLnRvcCAgICA9IGl0LnpvbmUueSArICdweCc7XHJcbiAgICBzLndpZHRoICA9IGl0LnpvbmUudyArICdweCc7XHJcbiAgICBzLmhlaWdodCA9IChpdC56b25lLmggLSAyKSArICdweCc7XHJcblxyXG4gICAgLy8gVGV4dG9cclxuICAgIGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogJyc7XHJcblxyXG4gICAgLy8gRXN0YWRvc1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgICA9IGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG4gICAgY29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiAodGhpcy5mb2N1c0xldmVsID09PSBMKTtcclxuICAgIGNvbnN0IGZvY3VzTWF0Y2ggPSBpc1JlYWwgJiYgaW5Gb2N1c0x2bCAmJiAodGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleSk7XHJcbiAgICBjb25zdCBpc0hvdmVyICAgID0gaXNSZWFsICYmICh0aGlzLmhvdmVyLmxldmVsID09PSBMICYmIHRoaXMuaG92ZXIuaW5kZXggPT09IGkpO1xyXG5cclxuICAgIC8vIEVzdGlsb3MgYmFzZVxyXG4gICAgcy5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuICAgIHMuY29sb3IgICAgICA9IGNjLnRleHQ7XHJcbiAgICBzLmJvcmRlciAgICAgPSAnMXB4IHNvbGlkICcgKyBjYy5ib3JkZXI7XHJcbiAgICBzLnRleHRBbGlnbiAgPSBraW5kID09PSAnbWFwJyA/ICdjZW50ZXInIDogJ2xlZnQnO1xyXG5cclxuICAgIC8vIFByaW9yaWRhZCB2aXN1YWw6IHNlbGVjY2lvbmFkbyA+IGZvY28gPiBob3ZlciA+IGJhc2VcclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgfSBlbHNlIGlmIChmb2N1c01hdGNoKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICB9IGVsc2UgaWYgKGlzSG92ZXIpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbGFzIGRlIHBhZGRpbmcgaW52aXNpYmxlcyBlbiBob2phXHJcbiAgICBzLm9wYWNpdHkgPSBpc1JlYWwgPyAnMScgOiAnMCc7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IENpY2xvIGRlIHZpZGEgPT09PT09PVxyXG4gIHJTaXplKCkge1xyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy5idWlsZExldmVscygpO1xyXG4gICAgdGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEludGVyYWNjacOzbiA9PT09PT09XHJcbiAgX3RvTG9jYWwoZSkge1xyXG4gICAgY29uc3QgbXggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgIGNvbnN0IG15ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnk7XHJcbiAgICByZXR1cm4geyB4OiBteCwgeTogbXkgfTtcclxuICB9XHJcblxyXG4gIF9oaXRUZXN0KG14LCBteSkge1xyXG4gIGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgeiA9IGx2bC56b25lOyAgLy8geCB5IHcgeWEgaW5jbHV5ZW4gY29udGVudFhcclxuICAgIGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaCkgY29udGludWU7XHJcblxyXG4gICAgICBpZiAobHZsLnR5cGUgPT09ICdtYXAnKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGx2bC5pdGVtc1tpXS56b25lO1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiB0cnVlIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5Sb3dzID0gTWF0aC5tYXgobHZsLml0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgY29uc3QgaXR6ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldLnpvbmUgOiB7IHg6IHoueCwgeTogei55ICsgaSAqIHRoaXMubGluZUgsIHc6IHoudywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiBpc1JlYWwgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IEw6IC0xLCBpOiAtMSwgcmVhbDogZmFsc2UgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vtb3ZlJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgdGhpcy5ob3ZlciA9IChodC5MICE9PSAtMSAmJiBodC5yZWFsKSA/IHsgbGV2ZWw6IGh0LkwsIGluZGV4OiBodC5pIH0gOiB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZWRvd24nKSB7XHJcbiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fdG9Mb2NhbChlKTtcclxuICAgICAgY29uc3QgaHQgPSB0aGlzLl9oaXRUZXN0KHgsIHkpO1xyXG4gICAgICBpZiAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdEF0KGh0LkwsIGh0LmkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNldXAnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIChPcGNpb25hbCkgdGVjbGFkbzogaW50ZWdyYXIgbmF2ZWdhY2nDs24gZW4gR3VpIHkgcmVlbnZpYXIgYXF1w60gc2kgc2UgZGVzZWFcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIFNlbGVjY2nDs24gKyBhdXRvY29tcGxldGFkbyArIG5vdGlmaWNhY2nDs25cclxuICBfc2VsZWN0QXQoTCwgaSkge1xyXG4gICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICBjb25zdCBjaG9zZW4gPSBsdmwuaXRlbXNbaV07XHJcbiAgICBpZiAoIWNob3NlbiB8fCAhY2hvc2VuLmtleSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpO1xyXG4gICAgYmFzZVtMXSA9IGNob3Nlbi5rZXk7XHJcblxyXG4gICAgY29uc3QgbmV3UGF0aCA9IHRoaXMuYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2UpO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSBuZXdQYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEFQSSBww7pibGljYSA9PT09PT09XHJcbiAgc2V0VmFsdWUocGF0aCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRUcmVlKHRyZWUpIHtcclxuICAgIHRoaXMudHJlZSA9IHRyZWUgfHwge307XHJcbiAgICAvLyByZWNhbGN1bGFyIGxlYWZNYXggZW4gcHLDs3hpbWEgcGFzYWRhXHJcbiAgICB0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXMoeyBmb2N1c2VkLCBmb2N1c1BhdGgsIGZvY3VzTGV2ZWwgfSkge1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c2VkID09PSAnYm9vbGVhbicpIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb2N1c1BhdGgpKSB0aGlzLmZvY3VzUGF0aCA9IGZvY3VzUGF0aC5zbGljZSgpO1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c0xldmVsID09PSAnbnVtYmVyJykgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IFB1YmxpY2FjacOzbiBkZSBhbHR1cmEgPT09PT09PVxyXG4gIF9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCkge1xyXG4gICAgbGV0IGMgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxldmVscy5sZW5ndGg7IGkrKykgaWYgKHRoaXMubGV2ZWxzW2ldLnR5cGUgPT09ICdtYXAnKSBjKys7XHJcbiAgICByZXR1cm4gYztcclxuICB9XHJcblxyXG4gIF9nZXRDdXJyZW50TGVhZkxlbmd0aCgpIHtcclxuICAgIGNvbnN0IGxhc3QgPSB0aGlzLmxldmVsc1t0aGlzLmxldmVscy5sZW5ndGggLSAxXTtcclxuICAgIHJldHVybiBsYXN0ICYmIGxhc3QudHlwZSA9PT0gJ2xpc3QnID8gbGFzdC5pdGVtcy5sZW5ndGggOiAwO1xyXG4gIH1cclxuXHJcbiAgX3B1Ymxpc2hIZWlnaHQoKSB7XHJcbiAgICBjb25zdCBpbnRlciA9IHRoaXMuX2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKTtcclxuICAgIGNvbnN0IGxlYWZMZW4gPSBNYXRoLm1heCh0aGlzLmxlYWZNYXgsIHRoaXMuX2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkpO1xyXG4gICAgY29uc3QgbGVhZkggID0gbGVhZkxlbiAqIHRoaXMubGluZUg7XHJcbiAgICBjb25zdCBpbnRlckggPSBpbnRlciAqICh0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcCk7XHJcbiAgICBjb25zdCB0b3RhbEggPSBpbnRlckggKyAoaW50ZXIgPyB0aGlzLmxldmVsR2FwIDogMCkgKyBsZWFmSDtcclxuXHJcbiAgICAvLyBBY3R1YWxpemEgbcOpdHJpY2FzIGRlbCBwcm90byAobG8gcXVlIHN1bWEgZWwgR1VJKVxyXG4gICAgdGhpcy5oID0gdG90YWxIO1xyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG5cclxuICAgIC8vIEF2aXNhciBhbCBHVUkgeSByZWZyZXNjYXIgem9uYXNcclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYWluKSB0aGlzLm1haW4uY2FsYygpO1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBCb29sIH0gZnJvbSAnLi4vcHJvdG8vQm9vbC5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL3Byb3RvL0J1dHRvbi5qcyc7XHJcbmltcG9ydCB7IENpcmN1bGFyIH0gZnJvbSAnLi4vcHJvdG8vQ2lyY3VsYXIuanMnO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL3Byb3RvL0NvbG9yLmpzJztcclxuaW1wb3J0IHsgRnBzIH0gZnJvbSAnLi4vcHJvdG8vRnBzLmpzJztcclxuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9wcm90by9HcmFwaC5qcyc7XHJcbmltcG9ydCB7IEdyb3VwICB9IGZyb20gJy4uL3Byb3RvL0dyb3VwLmpzJztcclxuaW1wb3J0IHsgSm95c3RpY2sgfSBmcm9tICcuLi9wcm90by9Kb3lzdGljay5qcyc7XHJcbmltcG9ydCB7IEtub2IgfSBmcm9tICcuLi9wcm90by9Lbm9iLmpzJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uL3Byb3RvL0xpc3QuanMnO1xyXG5pbXBvcnQgeyBOdW1lcmljIH0gZnJvbSAnLi4vcHJvdG8vTnVtZXJpYy5qcyc7XHJcbmltcG9ydCB7IFNsaWRlIH0gZnJvbSAnLi4vcHJvdG8vU2xpZGUuanMnO1xyXG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9wcm90by9UZXh0SW5wdXQuanMnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL3Byb3RvL1RpdGxlLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0LmpzJztcclxuaW1wb3J0IHsgQml0bWFwIH0gZnJvbSAnLi4vcHJvdG8vQml0bWFwLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICcuLi9wcm90by9TZWxlY3Rvci5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi4vcHJvdG8vRW1wdHkuanMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vcHJvdG8vSXRlbS5qcyc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi9wcm90by9HcmlkLmpzJztcclxuaW1wb3J0IHsgUGFkMkQgfSBmcm9tICcuLi9wcm90by9QYWQyRC5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFRyZWVMaXN0IH0gZnJvbSAnLi4vcHJvdG8vVHJlZUxpc3QuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndHJlZWxpc3QnOiBuID0gbmV3IFRyZWVMaXN0KG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Q0FBQTtDQUNBO0NBQ0E7QUFDQTtBQUNZLE9BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsTUFBTSxDQUFDLEdBQUc7Q0FDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7Q0FDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7Q0FDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0NBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSztDQUNiLEVBQUUsS0FBSyxFQUFFLEtBQUs7Q0FDZCxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDYjtDQUNBLEVBQUUsVUFBVSxFQUFFLElBQUk7Q0FDbEIsRUFBRSxVQUFVLEVBQUUsS0FBSztDQUNuQixFQUFFLFNBQVMsRUFBRSxLQUFLO0NBQ2xCLEVBQUUsWUFBWSxFQUFFLEtBQUs7Q0FDckIsRUFBRSxPQUFPLEVBQUUsS0FBSztDQUNoQixFQUFFLG9CQUFvQixFQUFFLElBQUk7QUFDNUI7Q0FDQSxFQUFFLFFBQVEsRUFBRSxDQUFDO0NBQ2IsRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUNiO0NBQ0E7Q0FDQSxFQUFFLFdBQVcsRUFBRSxDQUFDLGFBQWEsQ0FBQztDQUM5QixFQUFFLFlBQVksRUFBRSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDO0NBQzNELEVBQUUsUUFBUSxFQUFFLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUM7QUFDM0Q7Q0FDQSxFQUFFLGFBQWEsRUFBRSxJQUFJO0NBQ3JCLEVBQUUsT0FBTyxFQUFFLElBQUk7Q0FDZixFQUFFLFFBQVEsRUFBRSxJQUFJO0FBQ2hCO0NBQ0EsRUFBRSxTQUFTLEVBQUUsTUFBTTtBQUNuQjtDQUNBLEVBQUUsS0FBSyxFQUFFLElBQUk7Q0FDYixFQUFFLE1BQU0sRUFBRSxJQUFJO0NBQ2QsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQjtDQUNBLEVBQUUsV0FBVyxFQUFFLElBQUk7Q0FDbkIsRUFBRSxXQUFXLEVBQUUsSUFBSTtDQUNuQixFQUFFLFFBQVEsRUFBRSxLQUFLO0NBQ2pCLEVBQUUsVUFBVSxFQUFFLEtBQUs7Q0FDbkIsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BCLEVBQUUsUUFBUSxFQUFFLENBQUM7Q0FDYixFQUFFLEdBQUcsRUFBRSxFQUFFO0NBQ1QsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNSLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztDQUNaLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNYO0NBQ0EsRUFBRSxVQUFVLEVBQUUsS0FBSztBQUNuQjtDQUNBLEVBQUUsTUFBTSxFQUFFLEtBQUs7Q0FDZixFQUFFLE9BQU8sRUFBRSxFQUFFO0FBQ2I7Q0FDQSxFQUFFLENBQUMsRUFBRTtDQUNMLElBQUksSUFBSSxFQUFFLElBQUk7Q0FDZCxJQUFJLE9BQU8sRUFBRSxDQUFDO0NBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztDQUNkLElBQUksT0FBTyxFQUFFLEdBQUc7Q0FDaEIsSUFBSSxHQUFHLEVBQUUsSUFBSTtDQUNiLElBQUksS0FBSyxFQUFFLENBQUM7Q0FDWixHQUFHO0FBQ0g7Q0FDQSxFQUFFLFFBQVEsRUFBRSxLQUFLO0FBQ2pCO0NBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtDQUNYLEVBQUUsV0FBVyxFQUFFLEtBQUs7QUFDcEI7Q0FDQSxFQUFFLE9BQU8sRUFBRSxZQUFZO0NBQ3ZCLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRztDQUNuRCxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Q0FDOUMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ2pCLEdBQUc7QUFDSDtDQUNBLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3BCO0NBQ0EsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqQixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakI7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztDQUN4QyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFVBQVUsRUFBRSxZQUFZO0NBQzFCLElBQUksSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztDQUNoQyxJQUFJO0NBQ0osTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztDQUN6QixNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0NBQ3ZCLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7Q0FDeEIsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztDQUN0QixNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0NBQ3RCLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7Q0FDNUIsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0NBQy9CO0NBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQztDQUNsQixTQUFTLE9BQU8sS0FBSyxDQUFDO0NBQ3RCLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0NBQ2xCLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN4QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUN4QixLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0NBQzNCLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO0NBQ3ZCLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsVUFBVSxFQUFFLFlBQVk7Q0FDMUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTztBQUMvQjtDQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUM1QjtDQUNBLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7Q0FDaEMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN4QjtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDckIsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0NBQzNELEtBQUssTUFBTTtDQUNYLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0NBQ3JDLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztDQUNwRSxJQUFJLElBQUksQ0FBQyxDQUFDLG9CQUFvQixFQUFFO0NBQ2hDLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMvQyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDOUM7QUFDQTtDQUNBLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUM3QyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDO0NBQ0EsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztDQUNoRCxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0NBQzlDLEtBQUs7Q0FDTCxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2RDtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Q0FDMUIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNoQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLFlBQVksRUFBRSxZQUFZO0NBQzVCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTztBQUNoQztDQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUM1QjtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDckIsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzFDLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsb0JBQW9CLEVBQUU7Q0FDaEMsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2xELE1BQU0sR0FBRyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNqRDtBQUNBO0NBQ0EsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2hELE1BQU0sR0FBRyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNoRCxNQUFNLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUM7Q0FDQSxNQUFNLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDNUMsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzFDLEtBQUs7Q0FDTCxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25EO0NBQ0EsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztDQUMzQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLE1BQU0sRUFBRSxZQUFZO0NBQ3RCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNO0NBQ3ZCLE1BQU0sQ0FBQyxDQUFDO0FBQ1I7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsQixNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDL0QsS0FBSztBQUNMO0NBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUN4QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0NBQ3pCLEdBQUc7QUFDSDtDQUNBLEVBQUUsR0FBRyxFQUFFLFlBQVk7Q0FDbkIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0NBQzdCLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0NBQ25CLEdBQUc7QUFDSDtDQUNBLEVBQUUsRUFBRSxFQUFFLFlBQVk7Q0FDbEIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0NBQzVCO0NBQ0EsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLE1BQU0sRUFBRSxZQUFZO0NBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0NBQzVDLEdBQUc7QUFDSDtDQUNBLEVBQUUsV0FBVyxFQUFFLFVBQVUsS0FBSyxFQUFFO0NBQ2hDO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3pFO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2pDO0NBQ0EsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoQixJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN0QjtDQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ25ELElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9DO0NBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ3BFLFNBQVMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDckI7Q0FDQSxJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDbEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUM7Q0FDdkUsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDO0FBQ3ZFO0NBQ0EsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDeEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0NBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQztDQUNuQixNQUFNLENBQUMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0NBQ3pCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN4RDtDQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztDQUMzRCxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7Q0FDdkQsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO0NBQ3RDLE1BQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO0NBQ3JCO0NBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztDQUMxQixRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNuQixPQUFPO0NBQ1AsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztDQUMzQixLQUFLO0FBQ0w7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtDQUNoQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzNCLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ3pDO0NBQ0E7Q0FDQSxNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtDQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0NBQ3JCLE9BQU87QUFDUDtDQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0NBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDMUIsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtDQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7Q0FDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUNqQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQ2pDLE9BQU87QUFDUDtDQUNBO0FBQ0E7Q0FDQSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztDQUMzRCxJQUFJLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztDQUM5QixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNO0NBQ3ZCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQztDQUNmLE1BQU0sQ0FBQztDQUNQLE1BQU0sQ0FBQztDQUNQLE1BQU0sQ0FBQyxDQUFDO0FBQ1I7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQjtDQUNBLE1BQU0sSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFO0NBQzFCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQ3RCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQ3RCLE9BQU8sTUFBTTtDQUNiLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7Q0FDdEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztDQUN0QixPQUFPO0FBQ1A7Q0FDQSxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0NBQzdCLFFBQVEsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNqQjtDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRTtDQUNoQyxVQUFVLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztDQUN6QixVQUFVLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0NBQzNCLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDbkIsU0FBUztDQUNULFFBQVEsTUFBTTtDQUNkLE9BQU87Q0FDUCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztDQUNwQyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFVBQVUsRUFBRSxZQUFZO0NBQzFCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTztDQUN0QixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDbkIsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ2pCLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDaEIsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDZixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLEtBQUssS0FBSztDQUM3QztBQUNBO0NBQ0EsSUFBTyxJQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0NBQ3ZCLE1BQU0sQ0FBQyxDQUFDO0NBQ1IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ2IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ1osTUFBTSxFQUFFLENBQUM7Q0FDVCxNQUFNLENBQUMsQ0FBQyxDQUNFO0FBQ1Y7Q0FDQSxJQUFJLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNuQjtDQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNoQixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakIsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNWO0NBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNDO0NBQ0EsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztDQUNuQjtBQUNBO0NBQ0EsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3JCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekI7Q0FDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFO0NBQ3hCLFFBQVEsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QztDQUNBLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDL0IsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDdEI7QUFDQTtDQUNBLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0IsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNwQyxhQUFhLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7Q0FDQSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QjtDQUNBLFFBQVEsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRTtDQUMxQixVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN4QjtDQUNBLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNqQixTQUFTO0NBQ1QsT0FBTyxNQUFNO0NBQ2IsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2Y7Q0FDQSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUNqQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QjtDQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzFCLE9BQU87Q0FDUCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE9BQU8sTUFBTSxDQUFDO0NBQ2xCLEdBQUc7QUFDSDtDQUNBLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRTtDQUNoQyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDdkI7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDaEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0NBQzNELEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztDQUNkLEdBQUc7QUFDSDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxRQUFRLEVBQUUsVUFBVSxLQUFLLEVBQUU7Q0FDN0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPO0FBQ3hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU07Q0FDdkIsTUFBTSxDQUFDLENBQUM7QUFDUjtDQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNoQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xCLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNuQixNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDL0IsS0FBSztBQUNMO0NBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztDQUN6QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0NBQzdCLElBQUksSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDekQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Q0FDbkIsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNyQixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNsQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdkI7Q0FDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0NBQ2hCLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3pCO0NBQ0EsSUFBSSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUM7QUFDbEM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxHQUFHO0FBQ0g7Q0FDQSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtDQUN4QixJQUFJLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxPQUFPO0NBQy9CLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDL0M7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzlEO0NBQ0E7Q0FDQSxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsTUFBTSxFQUFFLFVBQVUsSUFBSSxFQUFFO0NBQzFCLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDO0NBQ2hDLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLFNBQVMsRUFBRTtDQUM5QixNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDeEMsTUFBTSxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztDQUN6QixLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtDQUN0QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztBQUNoRTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFO0NBQ3JDLE1BQU0sWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUM5QixNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0NBQ3ZCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRSxPQUFPO0FBQ25DO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJO0NBQ2QsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxZQUFZO0NBQ3pDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDekIsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxHQUFHLElBQUksQ0FBQztBQUN4RTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDdEQ7Q0FDQSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDekI7Q0FDQSxJQUFJLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xFO0NBQ0EsSUFBSSxJQUFJLEdBQUc7Q0FDWCxNQUFNLGlEQUFpRDtDQUN2RCxNQUFNLENBQUM7Q0FDUCxNQUFNLFlBQVk7Q0FDbEIsTUFBTSxDQUFDO0NBQ1AsTUFBTSxvRkFBb0Y7Q0FDMUYsTUFBTSxVQUFVO0NBQ2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDL0I7Q0FDQSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsWUFBWTtDQUM3QixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFDO0NBQ0EsTUFBTSxJQUFJLFNBQVMsRUFBRTtDQUNyQixRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztDQUMzQixRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztDQUM1QixPQUFPLE1BQU07Q0FDYixRQUFRLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDbEMsT0FBTztDQUNQLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0NBQ0EsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDakIsS0FBSyxDQUFDO0FBQ047Q0FDQSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsbUNBQW1DLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDNUU7Q0FDQSxJQUFJLEdBQUcsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0NBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Q0FDMUIsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLFNBQVMsRUFBRSxZQUFZO0NBQ3pCLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtDQUNoQztDQUNBO0NBQ0E7QUFDQTtDQUNBLE1BQU0sQ0FBQyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQ3RELE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0NBQ2xDO0FBQ0E7Q0FDQSxNQUFNLENBQUMsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUNwRDtBQUNBO0NBQ0EsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7Q0FDL0MsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7Q0FDL0MsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxzQkFBc0IsQ0FBQztDQUMxRCxJQUFJLElBQUksR0FBRztDQUNYLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUztDQUM1QixNQUFNLHVGQUF1RjtDQUM3RixNQUFNLElBQUksQ0FBQztDQUNYLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTztDQUMvQixNQUFNLEdBQUcsR0FBRyxjQUFjLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcscUJBQXFCLENBQUMsQ0FBQztDQUN6RSxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsY0FBYyxDQUFDO0FBQ3ZEO0NBQ0EsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0NBQzNELElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUNoQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDcEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0NBQ3RCLEdBQUc7QUFDSDtDQUNBLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQzVCLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRSxPQUFPO0NBQ3ZDLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDdkIsR0FBRztBQUNIO0NBQ0EsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUU7Q0FDekIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU07Q0FDeEIsTUFBTSxDQUFDLEdBQUcsQ0FBQztDQUNYLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNaLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNO0NBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDVixLQUFLO0NBQ0wsSUFBSSxPQUFPLENBQUMsQ0FBQztDQUNiLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRTtDQUM5QixJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDeEM7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztBQUNuQjtDQUNBLElBQUksSUFBSSxJQUFJLEVBQUU7Q0FDZCxNQUFNLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7Q0FDQSxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUU7Q0FDM0IsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztDQUN0QixRQUFRLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0NBQ3hCLFFBQVEsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQzVDLE9BQU8sTUFBTTtDQUNiLFFBQVEsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLFdBQVcsRUFBRTtDQUN6QixVQUFVLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNyRSxlQUFlLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUNsRCxTQUFTO0NBQ1QsT0FBTztBQUNQO0NBQ0EsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ2hCLEtBQUssTUFBTTtDQUNYLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO0NBQzNCLFFBQVEsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Q0FDMUIsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN2RCxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckQsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ2xCLE9BQU87Q0FDUCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM3QjtDQUNBLElBQUksT0FBTyxFQUFFLENBQUM7Q0FDZCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFNBQVMsRUFBRSxZQUFZO0NBQ3pCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTztBQUMxQjtDQUNBLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztDQUNoQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNyQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0NBQ3RCLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMxQixJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbkQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pELElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO0NBQ3JCLEdBQUc7QUFDSDtDQUNBLEVBQUUsWUFBWSxFQUFFLFlBQVk7Q0FDNUIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztDQUN4RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0NBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0NBQ3RELEdBQUc7QUFDSDtDQUNBLEVBQUUsU0FBUyxFQUFFLFVBQVUsSUFBSSxFQUFFO0NBQzdCLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztDQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztDQUN4QyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztDQUNuQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7Q0FDckMsR0FBRztBQUNIO0NBQ0EsRUFBRSxVQUFVLEVBQUUsWUFBWTtDQUMxQixJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsT0FBTztDQUNsQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DO0NBQ0EsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7Q0FDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Q0FDcEQsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQ3ZEO0NBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDeEMsR0FBRztBQUNIO0NBQ0EsRUFBRSxRQUFRLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFO0NBQ3JDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3RCO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0NBQ3ZELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztDQUN2RDtDQUNBLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztB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QyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0NBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtDQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0NBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7Q0FDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztDQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDbkIsU0FBUztDQUNULFFBQVEsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDM0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFB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QUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3JIO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM3SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFB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QUFDekg7Q0FDQTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0E7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztDQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0NBQ0E7QUFDQTtDQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFB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QUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0NBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztDQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztDQUN2QjtDQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7Q0FDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7Q0FDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0NBQ0EsWUFBWSxFQUFFLEdBQUc7Q0FDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7Q0FDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxhQUFhLENBQUM7Q0FDZDtDQUNBLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlEO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkI7Q0FDQSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixnQkFBZ0IsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUMxQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdEQsaUJBQWlCO0FBQ2pCO0NBQ0EsZ0JBQWdCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRztDQUNBLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0QsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMs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Q0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDM0M7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMzQjtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2pELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztDQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzFELFNBQVMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QjtDQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztDQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqRDtDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDdkQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0NBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUN4QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDbkM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFL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SSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0NBQzdFLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0NBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7Q0FDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEMsT0FBTztDQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDdkIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUN6QyxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNB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QUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakUsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0NBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7Q0FDcEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0NBQzdDLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN0QixLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0EsRUFBRSxhQUFhLEdBQUc7Q0FDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0NBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztDQUM5RSxLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0E7QUFDQTtDQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7Q0FDL0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzlDLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7Q0FDcEMsSUFB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QUcsQ0FBQyxDQUFDLE9BQU07Q0FDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07Q0FDNUI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7Q0FDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0NBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0Is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QUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztDQUNBLFNBQVM7QUFDVDtBQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Q0FDckQsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUU7Q0FDcEUsU0FBUztDQUNUO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0NBQ3hCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxD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R0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7Q0FDbEQ7Q0FDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7Q0FDQTtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0NBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztDQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFJO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7Q0FDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFDO0NBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztDQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUU7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUk7Q0FDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwQztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU07Q0FDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtDQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtDQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRTtBQUN4QjtDQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQztDQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUN0QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUNsSTtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtDQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0NBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0NBQ0EsUUFBUSxRQUFRLElBQUk7Q0FDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0NBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztDQUNqRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0NBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7Q0FDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDckMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7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SUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7Q0FDQTtDQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztDQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QztDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7Q0FDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0NBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtDQUN2TTtBQUNB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Q0FBQztBQUMxQjtDQUNBLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdkMsT0FBTztBQUNQO0NBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0NBQ3BEO0NBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDakM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxD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QUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7Q0FDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztDQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUM7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0E7Q0FDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7Q0FDNUQ7Q0FDQTtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtDQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7Q0FDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtDQUNwQztDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztDQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0NBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtDQUNBLEVBQUU7QUFDRjtBQUNBO0NBQ0E7O0NDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQztBQUMvQjtDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hDO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztDQUMvQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0NBQzFDO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7Q0FDeEMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDOUMsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3REO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3hDO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2xEO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztDQUN6QixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFD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QUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztDQUM5QjtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztDQUN0RSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtDQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QztDQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0NBQzFCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkM7Q0FDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDdkQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ3JDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7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SSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DO0NBQ0EsS0FBSztDQUNMO0NBQ0E7O0NDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Q0FDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0NBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxRDtDQUNBO0FBQ0E7Q0FD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QUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQixRQUFRLElBQUks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QyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ25GLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDcEgsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEc7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7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Q0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU07Q0FDL0IsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRTtDQUN6QyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFFO0NBQy9CLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNwQztDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0NDNWNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN2RDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztDQUMxQyxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Q0FDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztDQUN6QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFJO0FBQzVEO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztDQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7Q0FDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJ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RSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7Q0FDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7Q0FDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7Q0FDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0NBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0NBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtDQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0NBQ0EsYUFBYTtBQUNiO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM3QjtBQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztDQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7Q0FDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDN0QsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRjtDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFB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RyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7Q0FDekQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDakYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdB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QzlCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0NBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztDQUM5QjtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDckQ7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7Q0FDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN4RCxhQUFhLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztDQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3hELGFBQWE7Q0FDYjtDQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQztDQUNBLFlBQVksT0FBTyxJQUFJLENBQUM7Q0FDeEI7Q0FDQSxTQUFTO0NBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUN6RCxRQUFRLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUM1QyxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUMxQztBQUNBO0NBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFlBQVksS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUM1QyxZQUFZLElBQUksR0FBRyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssS0FBSyxDQUFDO0NBQ3JELFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDckQsWUFBWSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUMxQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUc7QUFDM0M7Q0FDQSxZQUFZLENBQUMsR0FBRyxVQUFVLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUMvQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDL0MsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ2hELFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUNoRCxZQUFZLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUM5RDtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1RDtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDckU7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDakMsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztDQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3JGO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0NBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7Q0FDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztDQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3pEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTs7Q0NsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztDQUNyQztBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7Q0FDQTtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0NBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7Q0FDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtDQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcscUNBQXFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNERBQTRELENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNyVSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsZ0RBQWdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNySztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0NBQ2xJLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUks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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUN0RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0NBQ3BDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzdCO0NBQ0EsU0FBUztBQUNUO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztBQUMxUDtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pKO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDcEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0NBQzFCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ2hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztDQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQ3hCO0NBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0NBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7Q0FDckQsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRTtBQUNyQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Q0FDMUIsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7Q0FDOUIsWUFBWSxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7Q0FDN0IsYUFBYSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7Q0FDaEMsYUFBYSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtB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Q0EsS0FBSyxNQUFNO0NBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDcEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Q0FDckIsTUFBTSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVFO0NBQ0E7Q0FDQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0NBQ0E7Q0FDQSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RDtDQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNoRCxNQUFNLElBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDM0Q7Q0FDQSxNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRDtDQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEM7Q0FDQSxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ2hCLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtDQUNwRCxRQUFRLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxD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LEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDN0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUN4RCxRQUFRLE1BQU07Q0FDZCxNQUFNLEtBQUssQ0FBQztDQUNaO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDdEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUM1RCxRQUFRLE1BQU07Q0FDZCxLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO0NBQ2IsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFEO0NBQ0EsSUFBSSxJQUFJLE9BQU87Q0FDZixNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDM0M7QUFDQTtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDcEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNsQixHQUFHO0NBQ0g7O0NDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FB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QUNwQjtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQztDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7Q0FDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0NBQy9CO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztDQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztDQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7Q0FDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMs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QyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7Q0FDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUMzQixLQUFLO0FBQ0w7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QUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztDQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7Q0FDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDL0xBO0FBRUE7Q0FDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtDQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztDQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtDQUNB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SSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztDQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtDQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0NBQ25DO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVB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LFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0NBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDM0QsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDMVRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDL0IsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFFO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0NBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7Q0FDQTtBQUNBO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlGO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0NBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0NBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0NBQ0EsS0FBSztDQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7Q0FDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFD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LEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLFFBQVEsSUFBSTtDQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzNELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQzlEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7Q0FDaEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUU7Q0FDcEU7Q0FDQSxZQUFZLE1BQU07Q0FDbEIsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztDQUMxQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Q0FDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkc7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNwSDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDMUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTs7Q0NyUkE7QUFJQTtDQUNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztDQUNwQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0NBQ3RCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUM7Q0FDbEMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ25DLElBQUksSUFBSSxDQUFDLEtBQUssUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNwRSxJQUFJLElBQUksQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Q0FDbEMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzVFLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0U7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7Q0FDekMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0FBQzFDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsUUFBUSxLQUFLLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ3hDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7QUFDdEI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUM7Q0FDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztDQUN2QixJQUFJLElBQUksQ0FBQyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7Q0FDQTtDQUNBLElB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QUFFLENBQUMsRUFBRSxFQUFFO0NBQ3BFLE1BQU0sS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDaEcsS0FBSztDQUNMLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDOUM7Q0FDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNqRCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakMsTUFBa0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Q0FDbkMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0NBQzlCLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNoRCxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0NBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDeEQsUUFBUSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7Q0FDekI7QUFDQTtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ25ELFVBQVUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN0RCxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7Q0FDbEQsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDO0NBQ3JCLFNBQVM7Q0FDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUM1QyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDeEMsT0FBTyxNQUFNO0NBQ2I7Q0FDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0NBQ25DLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDN0Q7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ25EO0NBQ0EsU0FBUyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Q0FD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LE1BQU0sUUFBUSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7Q0FDekYsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDL0QsSUFBSSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzlFLElBQUksTUFBTSxPQUFPLE1BQU0sTUFBTSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNwRjtDQUNBO0NBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDM0IsSUFBSSxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDM0IsSUFBSSxDQUFDLENBQUMsTUFBTSxPQUFPLFlBQVksR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0NBQzVDLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDdEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxRQUFRLEVBQUU7Q0FDbEIsTUFBTSxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7Q0FDL0IsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7Q0FDOUIsS0FBSyxNQUFNLElBQUksVUFBVSxFQUFFO0NBQzNCLE1BQU0sQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO0NBQ3ZDLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzVCLEtBQUssTUFBTSxJQUFJLE9BQU8sRUFBRTtDQUN4QixNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQztDQUNoQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUM1QixLQUFLO0FBQ0w7Q0FDQTtDQUNBLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNuQyxHQUFHO0FBQ0g7Q0FDQTtDQUNBLEVBQUUsS0FBSyxHQUFHO0NBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2xELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0NBQ3hCLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxHQUFHO0NBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Q0FDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0E7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Q0FDZCxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkMsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZDLElBQUksT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQzVCLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7Q0FDbkIsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDL0MsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztDQUN2QixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVM7QUFDM0U7Q0FDQSxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7Q0FDOUIsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDbkQsVUFBVSxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUN4QyxVQUFVLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO0NBQ3hGLFlBQVksT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ3hDLFdBQVc7Q0FDWCxTQUFTO0NBQ1QsT0FBTyxNQUFNO0NBQ2IsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUMvRCxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDeEMsVUFBVSxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7Q0FDOUMsVUFBVSxNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzlHLFVBQVUsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Q0FDeEYsWUFBWSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7Q0FDMUMsV0FBVztDQUNYLFNBQVM7Q0FDVCxPQUFPO0NBQ1AsS0FBSztDQUNMLElBQUksT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0NBQ3pDLEdBQUc7QUFDSDtDQUNBLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRTtDQUNqQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUks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LEtBQUssS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDOUMsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0NBQ2xELFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtDQUNsRCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDeEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0NBQ2hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtDQUNoRCxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtDQUNyRSxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDbEQsWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDekUsWUFBWSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDL0QsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0NBQ3BELFlBQVksS0FB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QUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUNqRTtDQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztDQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7QUFDNUM7Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDcEU7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtD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QUFLLENBQUMsQ0FBQztDQUM1QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzlDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ2pELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDaEIsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLE9BQU8sR0FBRztDQUNaLElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzNELEdBQUc7QUFDSDtDQUNBLEVBQUUsSUFBSSxHQUFHO0NBQ1QsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDekQsR0FBRztBQUNIO0NBQ0EsRUFBRSxTQUFTLEdBQUc7Q0FDZCxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUNyQixNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlCO0NBQ0EsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVztDQUNoQyxVQUFVLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3hDLFVBQVUsTUFBTSxDQUFDLFdBQVcsQ0FBQztBQUM3QjtDQUNBLE1BQU0sSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNuRDtDQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3pDO0NBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7Q0FDcEIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztDQUM3QixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUMvQyxPQUFPLE1BQU07Q0FDYixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUN2QyxPQUFPO0NBQ1AsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqQztDQUNBLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ2xFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNuRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6RDtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVO0NBQzNDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0NBQzFELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdkMsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLEdBQUc7Q0FDWCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0NBQzVCLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtDQUNkLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ2xELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUTtDQUNyQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzVFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDN0MsR0FBRztBQUNIO0NBQ0EsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFO0NBQ2xCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Q0FDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0NBQ2hCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0IsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzFCLEtBQUs7Q0FDTCxHQUFHO0NBQ0g7Ozs7Ozs7Ozs7Ozs7OyJ9 diff --git a/build/uil.min.js b/build/uil.min.js index 38804a9..1a49c44 100644 --- a/build/uil.min.js +++ b/build/uil.min.js @@ -8313,8 +8313,12 @@ // ======= Layout (zonas & DOM) ======= layoutLevels() { - const padX = 8; - const w = this.zone.w - padX * 2; + + const contentX = (this.sa || 100) + 8; // columna de label + padding + const padRight = 8; + const w = this.zone.w - contentX - padRight; + + let y = 0; // Ajustar itemsDom a cantidad de niveles @@ -8326,11 +8330,15 @@ for (let L = 0; L < this.levels.length; L++) { const lvl = this.levels[L]; + this.itemsDom[L]; if (lvl.type === 'map') { const n = Math.max(1, lvl.items.length); const cellW = Math.floor(w / n); - lvl.zone = { x: padX, y, w, h: this.lineH }; - let x = padX; + + lvl.zone = { x: contentX, y, w, h: this.lineH }; + let x = contentX; + + for (let i = 0; i < lvl.items.length; i++) { const it = lvl.items[i]; it.zone = { x, y, w: cellW, h: this.lineH }; @@ -8338,20 +8346,27 @@ this.paintItemDom(dom, L, i, it, 'map'); x += cellW; } + // eliminar DOM sobrante si antes había más celdas + this._pruneRow(L, lvl.items.length); y += this.lineH + this.levelGap; } else { // lista/hoja: reservar h según leafMax const n = lvl.items.length; const hList = Math.max(n, this.leafMax) * this.lineH; - lvl.zone = { x: padX, y, w, h: hList }; + + lvl.zone = { x: contentX, y, w, h: hList }; - for (let i = 0; i < Math.max(n, this.leafMax); i++) { + const rows = Math.max(n, this.leafMax); + for (let i = 0; i < rows; i++) { const isReal = i < n; const it = isReal ? lvl.items[i] : { key: null, label: '', zone: { x:0,y:0,w:0,h:0 } }; - it.zone = { x: padX, y: y + i * this.lineH, w, h: this.lineH }; + + it.zone = { x: contentX, y: y + i * this.lineH, w, h: this.lineH }; const dom = this.ensureItemDom(L, i); this.paintItemDom(dom, L, i, it, 'list', isReal); } + // eliminar DOM sobrante si antes había más filas + this._pruneRow(L, rows); y += hList; } } @@ -8366,6 +8381,21 @@ this._publishHeight(); } + + + // Elimina nodos DOM sobrantes en la fila L a partir del índice keep + _pruneRow(L, keep) { + const row = this.itemsDom[L]; + // si nunca se creó, nada que hacer + if (!row) return; + for (let j = keep; j < row.length; j++) { + const el = row[j]; + if (el && el.parentNode) el.parentNode.removeChild(el); + } + row.length = keep; + } + + ensureItemDom(L, i) { const row = this.itemsDom[L]; while (row.length <= i) row.push(null); @@ -8438,10 +8468,10 @@ } _hitTest(mx, my) { - for (let L = 0; L < this.levels.length; L++) { - const lvl = this.levels[L]; - const z = lvl.zone; - if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + const z = lvl.zone; // x y w ya incluyen contentX + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; if (lvl.type === 'map') { for (let i = 0; i < lvl.items.length; i++) { @@ -9454,4 +9484,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuICAgIC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG4gICAgLy8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG4gICAgby5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuICAgIG8ubmFtZSA9IG8ubmFtZSB8fCAnVHJlZUxpc3QnO1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgLy8gRGF0b3MgJiBlc3RhZG9cclxuICAgIHRoaXMudHJlZSAgICAgICA9IG8udHJlZSB8fCB7fTtcclxuICAgIHRoaXMudmFsdWUgICAgICA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNlZCAgICA9ICEhby5mb2N1c2VkO1xyXG4gICAgdGhpcy5mb2N1c1BhdGggID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSAnbnVtYmVyJyA/IG8uZm9jdXNMZXZlbCA6IC0xO1xyXG5cclxuICAgIHRoaXMudGFiSW5kZXggICA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuICAgIHRoaXMuaXRlbUluZGV4ICA9IG8uaXRlbUluZGV4ID8/IG51bGw7XHJcblxyXG4gICAgLy8gQ2FsbGJhY2tcclxuICAgIHRoaXMuY2hhbmdlQ2IgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcbiAgICAvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuICAgIHRoaXMubGluZUggICAgPSB0aGlzLmg7ICAgICAgICAgICAgICAgLy8gYWx0byBkZSBVTkEgZmlsYVxyXG4gICAgdGhpcy5sZXZlbEdhcCA9IHRoaXMuY29sb3JzLnN5IHx8IDI7ICAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmxlYWZNYXggID0gMDsgICAgICAgICAgICAgICAgICAgIC8vIHNlIGNhbGN1bGEgZW4gclNpemUoKVxyXG5cclxuICAgIC8vIE1vZGVsbyB2aXN1YWxcclxuICAgIHRoaXMubGV2ZWxzICAgPSBbXTsgICAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuICAgIHRoaXMuaXRlbXNEb20gPSBbXTsgICAvLyBlc3Blam8gRE9NIHBvciBuaXZlbFxyXG4gICAgdGhpcy5ob3ZlciAgICA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcbiAgICAvLyBDb250ZW5lZG9yIGludGVybm8gKGFic29sdXRvKVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpO1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG4gIHN0YXRpYyBpc01hcChub2RlKSAgeyByZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuICBzdGF0aWMgaXNMaXN0KG5vZGUpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuXHJcbiAgLy8gPT09PT09PSBSZWNvcnJpZG8gZGUgZGF0b3MgPT09PT09PVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG4gICAgICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG4gIGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG4gICAgbGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG4gICAgd2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgaWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcbiAgICAgIGNvbnN0IGswID0ga2V5c1swXTtcclxuICAgICAgcGF0aC5wdXNoKGswKTtcclxuICAgICAgbm9kZSA9IG5vZGVbazBdO1xyXG4gICAgfVxyXG4gICAgLy8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgLy8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG4gIGdldEFjdGl2ZVBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG4gIGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcbiAgICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gMDtcclxuICAgIGxldCBtID0gMDtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG4gICAgICBtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PVxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTml2ZWwgaW50ZXJtZWRpbzogY2xhdmVzIGRlbCBtYXBhIChob3Jpem9udGFsKVxyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6ICdtYXAnLFxyXG4gICAgICAgICAgaXRlbXM6IGtleXMubWFwKGsgPT4gKHsga2V5OiBrLCBsYWJlbDogaywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSksXHJcbiAgICAgICAgICB6b25lOiB7IHg6MCx5OjAsdzowLGg6IHRoaXMubGluZUggfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAobGFiZWwgPT4gKHsga2V5OiBsYWJlbCwgbGFiZWwsIHpvbmU6IHsgeDowLHk6MCx3OjAsaDowIH0gfSkpO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ2xpc3QnLCBpdGVtcywgem9uZTogeyB4OjAsIHk6MCwgdzowLCBoOiBoTGlzdCB9IH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuICBsYXlvdXRMZXZlbHMoKSB7XHJcbiAgICBjb25zdCBwYWRYID0gODtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIHBhZFggKiAyO1xyXG4gICAgbGV0IHkgPSAwO1xyXG5cclxuICAgIC8vIEFqdXN0YXIgaXRlbXNEb20gYSBjYW50aWRhZCBkZSBuaXZlbGVzXHJcbiAgICB3aGlsZSAodGhpcy5pdGVtc0RvbS5sZW5ndGggPCB0aGlzLmxldmVscy5sZW5ndGgpIHRoaXMuaXRlbXNEb20ucHVzaChbXSk7XHJcbiAgICBmb3IgKGxldCBMID0gdGhpcy5sZXZlbHMubGVuZ3RoOyBMIDwgdGhpcy5pdGVtc0RvbS5sZW5ndGg7IEwrKykge1xyXG4gICAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuaXRlbXNEb21bTF0pIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuICAgIGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuICAgICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICAgIGlmIChsdmwudHlwZSA9PT0gJ21hcCcpIHtcclxuICAgICAgICBjb25zdCBuID0gTWF0aC5tYXgoMSwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgY2VsbFcgPSBNYXRoLmZsb29yKHcgLyBuKTtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgIGxldCB4ID0gcGFkWDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ21hcCcpO1xyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgeSArPSB0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsaXN0YS9ob2phOiByZXNlcnZhciBoIHNlZ8O6biBsZWFmTWF4XHJcbiAgICAgICAgY29uc3QgbiA9IGx2bC5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogaExpc3QgfTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBuO1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBpc1JlYWwgPyBsdmwuaXRlbXNbaV0gOiB7IGtleTogbnVsbCwgbGFiZWw6ICcnLCB6b25lOiB7IHg6MCx5OjAsdzowLGg6MCB9IH07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4OiBwYWRYLCB5OiB5ICsgaSAqIHRoaXMubGluZUgsIHcsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuICAgICAgICAgIHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsICdsaXN0JywgaXNSZWFsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgeSArPSBoTGlzdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFqdXN0ZXMgZGUgYWx0byBpbnRlcm5vIGRlbCBjb250ZW5lZG9yIHZpc3VhbFxyXG4gICAgY29uc3QgdG90YWxIID0geTtcclxuICAgIHRoaXMuem9uZS5oID0gdG90YWxIICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy56b25lLmggKyAncHgnO1xyXG4gICAgdGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArICdweCc7XHJcblxyXG4gICAgLy8gUHVibGljYXIgYWx0byB0b3RhbCBhbCBHVUkgKHN1bWFyw6EgdS5oKVxyXG4gICAgdGhpcy5fcHVibGlzaEhlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgZW5zdXJlSXRlbURvbShMLCBpKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgd2hpbGUgKHJvdy5sZW5ndGggPD0gaSkgcm93LnB1c2gobnVsbCk7XHJcbiAgICBpZiAoIXJvd1tpXSkge1xyXG4gICAgICBjb25zdCBkaXYgPSB0aGlzLmRvbSgnZGl2JywgVG9vbHMuY3NzLnR4dCArICdwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsnKTtcclxuICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcbiAgICAgIHJvd1tpXSA9IGRpdjtcclxuICAgIH1cclxuICAgIHJldHVybiByb3dbaV07XHJcbiAgfVxyXG5cclxuICBwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgcyA9IGRpdi5zdHlsZTtcclxuICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy8gUG9zaWNpw7NuXHJcbiAgICBzLmxlZnQgICA9IGl0LnpvbmUueCArICdweCc7XHJcbiAgICBzLnRvcCAgICA9IGl0LnpvbmUueSArICdweCc7XHJcbiAgICBzLndpZHRoICA9IGl0LnpvbmUudyArICdweCc7XHJcbiAgICBzLmhlaWdodCA9IChpdC56b25lLmggLSAyKSArICdweCc7XHJcblxyXG4gICAgLy8gVGV4dG9cclxuICAgIGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogJyc7XHJcblxyXG4gICAgLy8gRXN0YWRvc1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgICA9IGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG4gICAgY29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiAodGhpcy5mb2N1c0xldmVsID09PSBMKTtcclxuICAgIGNvbnN0IGZvY3VzTWF0Y2ggPSBpc1JlYWwgJiYgaW5Gb2N1c0x2bCAmJiAodGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleSk7XHJcbiAgICBjb25zdCBpc0hvdmVyICAgID0gaXNSZWFsICYmICh0aGlzLmhvdmVyLmxldmVsID09PSBMICYmIHRoaXMuaG92ZXIuaW5kZXggPT09IGkpO1xyXG5cclxuICAgIC8vIEVzdGlsb3MgYmFzZVxyXG4gICAgcy5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuICAgIHMuY29sb3IgICAgICA9IGNjLnRleHQ7XHJcbiAgICBzLmJvcmRlciAgICAgPSAnMXB4IHNvbGlkICcgKyBjYy5ib3JkZXI7XHJcbiAgICBzLnRleHRBbGlnbiAgPSBraW5kID09PSAnbWFwJyA/ICdjZW50ZXInIDogJ2xlZnQnO1xyXG5cclxuICAgIC8vIFByaW9yaWRhZCB2aXN1YWw6IHNlbGVjY2lvbmFkbyA+IGZvY28gPiBob3ZlciA+IGJhc2VcclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgfSBlbHNlIGlmIChmb2N1c01hdGNoKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICB9IGVsc2UgaWYgKGlzSG92ZXIpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbGFzIGRlIHBhZGRpbmcgaW52aXNpYmxlcyBlbiBob2phXHJcbiAgICBzLm9wYWNpdHkgPSBpc1JlYWwgPyAnMScgOiAnMCc7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IENpY2xvIGRlIHZpZGEgPT09PT09PVxyXG4gIHJTaXplKCkge1xyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy5idWlsZExldmVscygpO1xyXG4gICAgdGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEludGVyYWNjacOzbiA9PT09PT09XHJcbiAgX3RvTG9jYWwoZSkge1xyXG4gICAgY29uc3QgbXggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgIGNvbnN0IG15ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnk7XHJcbiAgICByZXR1cm4geyB4OiBteCwgeTogbXkgfTtcclxuICB9XHJcblxyXG4gIF9oaXRUZXN0KG14LCBteSkge1xyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgY29uc3QgeiA9IGx2bC56b25lO1xyXG4gICAgICBpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmxpbmVILCB3OiB6LncsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgaWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZXVwJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAoT3BjaW9uYWwpIHRlY2xhZG86IGludGVncmFyIG5hdmVnYWNpw7NuIGVuIEd1aSB5IHJlZW52aWFyIGFxdcOtIHNpIHNlIGRlc2VhXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICAgIHRoaXMuY2hhbmdlQ2IodGhpcy50YWJJbmRleCwgdGhpcy5pdGVtSW5kZXgsIG5ld1BhdGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBBUEkgcMO6YmxpY2EgPT09PT09PVxyXG4gIHNldFZhbHVlKHBhdGgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJlZSh0cmVlKSB7XHJcbiAgICB0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG4gICAgLy8gcmVjYWxjdWxhciBsZWFmTWF4IGVuIHByw7N4aW1hIHBhc2FkYVxyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBQdWJsaWNhY2nDs24gZGUgYWx0dXJhID09PT09PT1cclxuICBfY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpIHtcclxuICAgIGxldCBjID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBpKyspIGlmICh0aGlzLmxldmVsc1tpXS50eXBlID09PSAnbWFwJykgYysrO1xyXG4gICAgcmV0dXJuIGM7XHJcbiAgfVxyXG5cclxuICBfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcbiAgICByZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09ICdsaXN0JyA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuICB9XHJcblxyXG4gIF9wdWJsaXNoSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcbiAgICBjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuICAgIGNvbnN0IGxlYWZIICA9IGxlYWZMZW4gKiB0aGlzLmxpbmVIO1xyXG4gICAgY29uc3QgaW50ZXJIID0gaW50ZXIgKiAodGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXApO1xyXG4gICAgY29uc3QgdG90YWxIID0gaW50ZXJIICsgKGludGVyID8gdGhpcy5sZXZlbEdhcCA6IDApICsgbGVhZkg7XHJcblxyXG4gICAgLy8gQWN0dWFsaXphIG3DqXRyaWNhcyBkZWwgcHJvdG8gKGxvIHF1ZSBzdW1hIGVsIEdVSSlcclxuICAgIHRoaXMuaCA9IHRvdGFsSDtcclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuXHJcbiAgICAvLyBBdmlzYXIgYWwgR1VJIHkgcmVmcmVzY2FyIHpvbmFzXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0VBQUE7RUFDQTtFQUNBO0FBQ0E7QUFDWSxRQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLE1BQU0sQ0FBQyxHQUFHO0VBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0VBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0VBQ0EsRUFBRSxFQUFFLEVBQUUsSUFBSTtFQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUs7RUFDYixFQUFFLEtBQUssRUFBRSxLQUFLO0VBQ2QsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7RUFDQSxF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LFdBQVcsRUFBRSxDQUFDO0VBQ3BCLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0VBQ3BELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztFQUN2RDtFQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztFQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ3BCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDO0VBQ3hDLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxFQUFFLFVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRTtFQUNyQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNuQjtFQUNBLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN0QjtFQUNBLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztFQUN2RCxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7RUFDdkQ7RUFDQSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUss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RSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDNUU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUMxQjtFQUNBLFFBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakg7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtFQUN0QixRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDckMsUUFBUSxPQUFPLENBQUMsQ0FBQztFQUNqQixLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7RUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztFQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0VBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7RUFDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ25CLFNBQVM7RUFDVCxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNCO0VBQ0EsS0FBSztB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QUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNySDtFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDN0ksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdB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LEdBQUcsRUFBRSxDQUFDO0FBQ3pIO0VBQ0E7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7RUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtFQUNBO0FBQ0E7RUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtFQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7RUFDQSxTQUFTLE1BQU07RUFDZjtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvRixZQUFZLENB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QztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0VBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtFQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8s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O0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzNDO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7RUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7RUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0VBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztFQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ25DO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FB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QUM7RUFDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RSxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtFQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7RUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hELEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNsQixJQUFJLElBQUks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QUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0VBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtFQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxD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LEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0VBQ2xEO0VBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0VBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztFQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNwUE8sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FB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QUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMvQixTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxHQUFHO0VBQ2xDO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNyRDtFQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztFQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYTtFQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztFQUN4QjtFQUNBLFNBQVM7RUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDbEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0MsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RDLFFBQVEsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xHO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFD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QyxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7RUFDOUIsUUFBUTtBQUNSO0VBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7RUFDQSxTQUFTLE1BQU07QUFDZjtFQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7RUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0VBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxH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SUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtFQUNBLFNBQVM7RUFDVCxLQUFLO0VBQ0wsSUFBSTtFQUNKLEdBQUc7QUFDSDtFQUNBLEVBQUU7QUFDRjtFQUNBO0FBQ0E7RUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtFQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7RUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0VBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztFQUN0QztFQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7RUFDdEM7RUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7RUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtFQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQ3hCO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0VBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7RUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0VBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMs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R0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0VBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7RUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBO0VBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVEO0VBQ0E7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7RUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDcEM7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7RUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztFQUM1QyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDckI7RUFDQSxFQUFFO0FBQ0Y7QUFDQTtFQUNBOztFQ3BhTyxNQUFNLEdBQUcsU0FBUyxLQUFLLENBQUM7QUFDL0I7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQztFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDbkM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7RUFDL0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztFQUMxQztBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ3hDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzlDLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0RDtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN4QztFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7RUFDekIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztFQUN6QixRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QjtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFFO0VBQ3RDLFlBQVksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUM5QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN4QixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3pCLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDekIsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QjtFQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN4RjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzVCO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3ZDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3JDO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBSztBQUN0QztFQUNBLFNBQVM7QUFDVDtBQUNBO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNoQztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN6QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztFQUMzQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLCtCQUErQixFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsOEVBQThFLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7QUFDaE07RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsUUFBUSxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2pGO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ2xFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0VBQ2xELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0VBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDL0Q7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0VBQzdLO0FBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtEQUFrRCxFQUFFLENBQUM7QUFDMUo7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsMkVBQTJFLENBQUMsQ0FBQztBQUN0SjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0VBQ0E7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7RUFDOUI7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDdEUsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7RUFDQSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUM7RUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztFQUMxQixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFlBQVksT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDO0VBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ3ZEO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFD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LEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztFQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNoQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtFQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7RUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDcEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ25FLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzNEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztFQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUks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QUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQztFQUNBLEtBQUs7RUFDTDtFQUNBOztFQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0VBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztFQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQ7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0VBQ3hFLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDakQ7RUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0VBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQy9DLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtFQUN6RCxhQUFhO0VBQ2I7RUFDQTtFQUNBO0VBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0VBQ0E7QUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlEQUF5RCxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM1TDtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQ7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7RUFDdEosUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0gsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEo7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztFQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7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R0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0VBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztFQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0VBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtFQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtFQUNBLE1BQU07QUFDTjtFQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDO0VBQ2pELFFBQVEsSUFBSSxD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QUFRLEdBQUcsNENBQTRDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQztFQUM1SCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDNUs7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUk7RUFDMUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHNCQUFzQixFQUFDO0FBQzFJO0VBQ0EsUUFBZ0IsSUFBSSxDQUFDLEVBQUU7RUFDdkIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFPO0FBQ2hDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRTtBQUMxQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDaEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FB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LEdBQUU7QUFDN0M7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBOztFQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztFQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7RUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87RUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7RUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0VBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDbkksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2hFO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ25ELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzVFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDN0Y7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQ3BCO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUMzQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtFQUNBLFFBQVEsT0FBTyxJQUFJO0VBQ25CLFlBQVksS0FBSyxDQUFDO0VBQ2xCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ2xDLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN4RSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDbEUsaUJBQWlCLE1BQU07RUFDdkIsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNyRTtFQUNBLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDckUsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2hFLGlCQUFpQjtFQUNqQjtFQUNBLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssQ0FBQztFQUNsQixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUNsQyxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDekUsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzNFLGlCQUFpQixNQUFNO0VBQ3ZCLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDdEU7RUFDQSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3hFLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDcEUsaUJBQWlCO0VBQ2pCLFlBQVksTUFBTTtBQUdsQjtFQUNBLFNBQVM7RUFDVCxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksV0FBVyxDQUFDLEVBQUU7RUFDbEIsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztFQUN6RCxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPO0VBQ3ZDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ25GO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxZQUFZLENBQUMsRUFBRTtBQUNuQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksR0FBRyxPQUFPO0VBQzVDLFFBQVEsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztFQUN2QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0VBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0VBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztFQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtFQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtFQUNBLGFBQWE7QUFDYjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7QUFDQTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7RUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0VBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzNGLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0Y7RUFDQSxRQUFRLEdB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QUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0VBQ3pEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxD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QUFDLE1BQU0sQ0FBQztBQUM5QjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztFQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7RUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7RUFDOUI7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3JEO0VBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJ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RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztFQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNyRjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtFQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0VBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7RUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN6RDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7RUFDckM7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0VBQ0E7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtFQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0VBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07RUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDaEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDclUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGdEQUFnRCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcks7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztFQUNsSSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFF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LEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7RUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7RUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztFQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BDO0VBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUN0RDtFQUNBO0VBQ0EsWUFBWSxJ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QUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN4RCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN4RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0I7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDNUQsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDMzBCTyxNQUFNLE9BQU8sU0FBUyxLQUFLLENBQUM7QUFDbkM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQUs7QUFDdkM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztFQUMzQixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUM7RUFDeEIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUM7RUFDdEIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUM7RUFDekIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUk7RUFDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQUs7RUFDNUIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQUs7QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtFQUN2QixZQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtFQUMvQixZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQUs7RUFDcEMsWUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFLO0VBQ3ZDLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQUs7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7RUFDbkMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtFQUNqQyxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUM7RUFDdEMsYUFBYSxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxLQUFLLEVBQUU7RUFDakQsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE1BQUs7RUFDcEMsZ0JBQWdCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBSztFQUNyQyxhQUFhLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLE1BQU0sRUFBRTtFQUNsRCxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFFO0VBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQztFQUN2RSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUM7RUFDdkUsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDO0VBQ3ZFLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQztFQUN2RSxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFLO0VBQ3JDLGdCQUFnQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUk7RUFDcEMsYUFBYTtFQUNiLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU07RUFDcEMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUU7QUFDckI7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFDO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDMUM7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsY0FBYyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsK0JBQStCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUU7QUFDekk7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRTtFQUN2QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUc7RUFDeEIsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2xCO0VBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUU7RUFDeEcsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLGVBQWUsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUM7RUFDck4sWUFBWSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFRO0VBQy9ELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0VBQ25ELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7RUFDdEQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSTtFQUNwQyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUM3QjtFQUNBLFNBQVM7QUFDVDtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcscUNBQXFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyx3Q0FBd0MsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLGVBQWUsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLG1DQUFtQyxDQUFDLENBQUM7QUFDMVA7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNyQyxRQUFRLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGtCQUFrQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsNEJBQTRCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqSjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3BCLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztFQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUNoRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUc7RUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztBQUN4QjtFQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNwQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0VBQ3JELFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxFQUFFO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQzFCLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0VBQzlCLFlBQVksSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO0VBQzdCLGFBQWEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0VBQ2hDLGFBQWEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRTtFQUNoSixhQUFhLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFFO0VBQ3hELGFBQWE7RUFDYixZQUFZLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7RUFDdEMsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEtBQUs7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtFQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3RCO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7RUFDL0IsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUM5QztFQUNBLFlBQVksT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtFQUN0QyxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sS0FBSztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxNQUFLO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBQztBQUNqQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFFO0VBQ3ZDLGFBQVk7RUFDWixTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDOUMsY0FBYyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO0VBQ3RFLFNBQVM7QUFDVDtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN6QjtFQUNBLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2xDO0VBQ0EsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRTtBQUNyRjtFQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFDO0FBQ2hFO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDO0VBQzdELGdCQUFnQixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBQztBQUNqRjtFQUNBLGdCQUFnQixJQUFJLENBQUMsUUFBUSxHQUFFO0FBQy9CO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFPO0VBQ3ZDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBTztBQUN2QztFQUNBLGdCQUFnQixHQUFHLEdBQUcsS0FBSTtFQUMxQixjQUFjO0FBQ2Q7RUFDQSxTQUFTLE1BQU07QUFDZjtFQUNBLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUM7RUFDekQsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBQztFQUNqRSxTQUFTLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QztFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxHQUFHO0FBQ2xCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsTUFBSztFQUN2QixRQUFRLE9BQU8sR0FBRztBQUNsQjtFQUNBLEtBQUs7QUFDTDtBQUNBO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtFQUMzQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztFQUN2RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztFQUN2RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztFQUN2RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztFQUN2RCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7RUFDaEQsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTTtFQUNqQyxRQUFRLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLElBQUc7QUFDcEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFNO0FBQ2pDO0VBQ0EsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2xCLGFBQWEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtFQUMzRSxhQUFhLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQztFQUN4RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDNUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNmO0VBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFLO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7QUFDMUI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7QUFDdEM7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtFQUMvQixnQkFBZ0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRTtFQUNoRSxhQUFhLE1BQU07RUFDbkIsZ0JBQWdCLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUM7RUFDckQsYUFBYTtBQUNiO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRTtFQUM5RCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUMzQjtFQUNBLEtBQUs7QUFDTDtBQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUMxQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7RUFDdEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0VBQ3ZFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBSztFQUN0QyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFJO0VBQ2hELFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUk7RUFDbEQsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSTtFQUMzQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0VBQzNDO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7RUFDdEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU07RUFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRTtFQUM1QyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFJO0VBQ3pDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUk7QUFDekM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRTtFQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQ3hCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLEtBQUk7QUFDdEM7RUFDQSxRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDbEIsU0FBUyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQ2xELGdCQUFnQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQ3RFLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEdBQUcsR0FBRTtFQUNoRCxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQ2xDLGFBQWEsTUFBTTtFQUNuQixnQkFBZ0IsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0VBQzNELGFBQWE7QUFDYjtFQUNBLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7RUFDM0MsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU07RUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRTtBQUMvQztFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0VBQ3JCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFFO0VBQy9CLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0VBQ2xDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBRztFQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0VBQ3RCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUc7QUFDeEI7RUFDQSxRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDbEI7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFFO0VBQ2xFLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0VBQzVELFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ25ELFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ3BELFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQ3pUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7RUFDakMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtFQUN0QixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNiO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7RUFDbEQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0VBQzlCLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbEQ7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNwQztFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztFQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDdEM7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pCO0VBQ0E7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRztFQUN4QixNQUFNLEtBQUs7RUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUztFQUN4QixRQUFRLGtEQUFrRDtFQUMxRCxRQUFRLEVBQUUsQ0FBQyxJQUFJO0VBQ2YsUUFBUSxHQUFHO0VBQ1gsS0FBSyxDQUFDO0VBQ047RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUc7RUFDeEIsTUFBTSxLQUFLO0VBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUs7RUFDekQsS0FBSyxDQUFDO0FBQ047RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUc7RUFDeEIsTUFBTSxLQUFLO0VBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7RUFDcEIsUUFBUSxhQUFhO0VBQ3JCLFFBQVEsRUFBRSxDQUFDLElBQUk7RUFDZixRQUFRLG9CQUFvQjtFQUM1QixTQUFTLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsS0FBSztFQUNiLEtBQUssQ0FBQztFQUNOLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRztFQUN4QixNQUFNLEtBQUs7RUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztFQUNwQixRQUFRLDRCQUE0QjtFQUNwQyxTQUFTLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3JCLFFBQVEsaUJBQWlCO0VBQ3pCLFFBQVEsRUFBRSxDQUFDLElBQUk7RUFDZixRQUFRLEdBQUc7RUFDWCxLQUFLLENBQUM7QUFDTjtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzNCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDL0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BEO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzFCLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQztFQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0VBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztFQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7RUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7RUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDaEMsT0FBTztBQUNQO0VBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7RUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztF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QUM7RUFDOUI7RUFDQTtFQUNBLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3BCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtFQUNBO0VBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtFQUNBO0VBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0VBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7RUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0VBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7RUFDcEQsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcs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QyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDeEQsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDNUQsUUFBUSxNQUFNO0VBQ2QsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtFQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtFQUNBLElBQUksSUFBSSxPQUFPO0VBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQzNDO0FBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtFQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsS0FBSyxHQUFHO0VBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3BDO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDbEIsR0FBRztFQUNIOztFQzdTTyxNQUFNLFNBQVMsU0FBUyxLQUFLLENBQUM7QUFDckM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0VB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RUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87QUFDbEM7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDbEQsYUFBYSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0I7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxJQUFJO0FBQ2Y7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0M7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFD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LEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDaEQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7QUFDakQ7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENB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RyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztFQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUN2TDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztFQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7RUFDOUQsUUFBUSxPQUFPLEdBQUc7QUFDbEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0VBQ2xCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7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QUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsT0FBTyxJQUFJ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QUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7RUFDakQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUU7RUFDbEQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN4RDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDckY7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNuQztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJ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QUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqRDtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSTtFQUN4QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUMzQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0I7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDbkIsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RELFNBQVM7QUFDVDtFQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVELFNBQVM7QUFDVDtFQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEMsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ3ZCLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0VBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0VBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVB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QSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsRDtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0VBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztFQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztFQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM5RjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztFQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztFQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtFQUNBLEtBQUs7RUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0VBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztFQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0VBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hDLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7RUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtFQUN6RTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7RUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7RUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0VBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7RUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7RUFD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LEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0E7O0VDclJBO0FBSUE7RUFDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7RUFDcEMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtFQUN0QjtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO0VBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0VBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0VBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3RCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO0VBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7RUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FB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Q0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoRyxLQUFLO0VBQ0wsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM5QztFQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQ2pELE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7RUFDOUIsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQ2hELFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDeEMsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDckIsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDbkQsVUFBVSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xDLFVBQVUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ3RELFVBQVUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDL0MsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztFQUNsRCxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUM7RUFDckIsU0FBUztFQUNULFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUN4QyxPQUFPLE1BQU07RUFDYjtFQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7RUFDbkMsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUM3RCxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQzVELFVBQVUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMvQixVQUFVLE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ2pHLFVBQVUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUN6RSxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQzNELFNBQVM7RUFDVCxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUM7RUFDbkIsT0FBTztFQUNQLEtBQUs7QUFDTDtFQUNBO0VBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDckIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN2QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMxQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDckM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0VBQzFCLEdBQUc7QUFDSDtFQUNBLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDdEIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2pDLElBQUksT0FBTyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzNDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtFQUNqQixNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlDQUF5QyxDQUFDLENBQUM7RUFDN0YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNqQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDbkIsS0FBSztFQUNMLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEIsR0FBRztBQUNIO0VBQ0EsRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsSUFBSSxFQUFFO0VBQ25ELElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztFQUN4QixJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0I7RUFDQTtFQUNBLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDaEMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNoQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2hDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDdEM7RUFDQTtFQUNBLElBQUksR0FBRyxDQUFDLFdBQVcsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDN0M7RUFDQTtFQUNBLElBQUksTUFBTSxRQUFRLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztFQUN6RixJQUFJLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUMvRCxJQUFJLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUUsSUFBSSxNQUFNLE9BQU8sTUFBTSxNQUFNLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BGO0VBQ0E7RUFDQSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUMzQixJQUFJLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQztFQUMzQixJQUFJLENBQUMsQ0FBQyxNQUFNLE9BQU8sWUFBWSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7RUFDNUMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksS0FBSyxLQUFLLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUN0RDtFQUNBO0VBQ0EsSUFBSSxJQUFJLFFBQVEsRUFBRTtFQUNsQixNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztFQUMvQixN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O0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2Y7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEtBQUss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R0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZEO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtFQUNYLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0VBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEM7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0VBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0VBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDaEQsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3pCLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtFQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDakQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0QsR0FBRztBQUNIO0VBQ0EsRUFBRSxJQUFJLEdBQUc7RUFDVCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUN6RCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsR0FBRztFQUNkLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDMUIsSUFBSSxJQUFJ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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuICAgIC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG4gICAgLy8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG4gICAgby5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuICAgIG8ubmFtZSA9IG8ubmFtZSB8fCAnVHJlZUxpc3QnO1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgLy8gRGF0b3MgJiBlc3RhZG9cclxuICAgIHRoaXMudHJlZSAgICAgICA9IG8udHJlZSB8fCB7fTtcclxuICAgIHRoaXMudmFsdWUgICAgICA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNlZCAgICA9ICEhby5mb2N1c2VkO1xyXG4gICAgdGhpcy5mb2N1c1BhdGggID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSAnbnVtYmVyJyA/IG8uZm9jdXNMZXZlbCA6IC0xO1xyXG5cclxuICAgIHRoaXMudGFiSW5kZXggICA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuICAgIHRoaXMuaXRlbUluZGV4ICA9IG8uaXRlbUluZGV4ID8/IG51bGw7XHJcblxyXG4gICAgLy8gQ2FsbGJhY2tcclxuICAgIHRoaXMuY2hhbmdlQ2IgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcbiAgICAvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuICAgIHRoaXMubGluZUggICAgPSB0aGlzLmg7ICAgICAgICAgICAgICAgLy8gYWx0byBkZSBVTkEgZmlsYVxyXG4gICAgdGhpcy5sZXZlbEdhcCA9IHRoaXMuY29sb3JzLnN5IHx8IDI7ICAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmxlYWZNYXggID0gMDsgICAgICAgICAgICAgICAgICAgIC8vIHNlIGNhbGN1bGEgZW4gclNpemUoKVxyXG5cclxuICAgIC8vIE1vZGVsbyB2aXN1YWxcclxuICAgIHRoaXMubGV2ZWxzICAgPSBbXTsgICAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuICAgIHRoaXMuaXRlbXNEb20gPSBbXTsgICAvLyBlc3Blam8gRE9NIHBvciBuaXZlbFxyXG4gICAgdGhpcy5ob3ZlciAgICA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcbiAgICAvLyBDb250ZW5lZG9yIGludGVybm8gKGFic29sdXRvKVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpO1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG4gIHN0YXRpYyBpc01hcChub2RlKSAgeyByZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuICBzdGF0aWMgaXNMaXN0KG5vZGUpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuXHJcbiAgLy8gPT09PT09PSBSZWNvcnJpZG8gZGUgZGF0b3MgPT09PT09PVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG4gICAgICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG4gIGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG4gICAgbGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG4gICAgd2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgaWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcbiAgICAgIGNvbnN0IGswID0ga2V5c1swXTtcclxuICAgICAgcGF0aC5wdXNoKGswKTtcclxuICAgICAgbm9kZSA9IG5vZGVbazBdO1xyXG4gICAgfVxyXG4gICAgLy8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgLy8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG4gIGdldEFjdGl2ZVBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG4gIGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcbiAgICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gMDtcclxuICAgIGxldCBtID0gMDtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG4gICAgICBtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PVxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTml2ZWwgaW50ZXJtZWRpbzogY2xhdmVzIGRlbCBtYXBhIChob3Jpem9udGFsKVxyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6ICdtYXAnLFxyXG4gICAgICAgICAgaXRlbXM6IGtleXMubWFwKGsgPT4gKHsga2V5OiBrLCBsYWJlbDogaywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSksXHJcbiAgICAgICAgICB6b25lOiB7IHg6MCx5OjAsdzowLGg6IHRoaXMubGluZUggfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAobGFiZWwgPT4gKHsga2V5OiBsYWJlbCwgbGFiZWwsIHpvbmU6IHsgeDowLHk6MCx3OjAsaDowIH0gfSkpO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ2xpc3QnLCBpdGVtcywgem9uZTogeyB4OjAsIHk6MCwgdzowLCBoOiBoTGlzdCB9IH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuICBsYXlvdXRMZXZlbHMoKSB7XHJcbiAgICBcclxuICAgIGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7ICAgLy8gY29sdW1uYSBkZSBsYWJlbCArIHBhZGRpbmdcclxuICAgIGNvbnN0IHBhZFJpZ2h0ID0gODtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIGNvbnRlbnRYIC0gcGFkUmlnaHQ7XHJcblxyXG4gICAgXHJcbiAgICBsZXQgeSA9IDA7XHJcblxyXG4gICAgLy8gQWp1c3RhciBpdGVtc0RvbSBhIGNhbnRpZGFkIGRlIG5pdmVsZXNcclxuICAgIHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkgdGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuICAgIGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSkgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pdGVtc0RvbS5sZW5ndGggPSB0aGlzLmxldmVscy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICBsZXQgeCA9IGNvbnRlbnRYO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ21hcCcpO1xyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG4gICAgICAgIHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgIHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG4gICAgICAgIGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuICAgICAgICAgY29uc3Qgcm93cyA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbjtcclxuICAgICAgICAgIGNvbnN0IGl0ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldIDogeyBrZXk6IG51bGwsIGxhYmVsOiAnJywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9O1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgaXQuem9uZSA9IHsgeDogY29udGVudFgsIHk6IHkgKyBpICogdGhpcy5saW5lSCwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ2xpc3QnLCBpc1JlYWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgZmlsYXNcclxuICAgICAgICB0aGlzLl9wcnVuZVJvdyhMLCByb3dzKTtcclxuICAgICAgICB5ICs9IGhMaXN0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWp1c3RlcyBkZSBhbHRvIGludGVybm8gZGVsIGNvbnRlbmVkb3IgdmlzdWFsXHJcbiAgICBjb25zdCB0b3RhbEggPSB5O1xyXG4gICAgdGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArICdweCc7XHJcbiAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdG90YWxIICsgJ3B4JztcclxuXHJcbiAgICAvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcbiAgICB0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vIEVsaW1pbmEgbm9kb3MgRE9NIHNvYnJhbnRlcyBlbiBsYSBmaWxhIEwgYSBwYXJ0aXIgZGVsIMOtbmRpY2Uga2VlcFxyXG4gIF9wcnVuZVJvdyhMLCBrZWVwKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgLy8gc2kgbnVuY2Egc2UgY3Jlw7MsIG5hZGEgcXVlIGhhY2VyXHJcbiAgICBpZiAoIXJvdykgcmV0dXJuO1xyXG4gICAgZm9yIChsZXQgaiA9IGtlZXA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcclxuICAgICAgY29uc3QgZWwgPSByb3dbal07XHJcbiAgICAgIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHJvdy5sZW5ndGggPSBrZWVwO1xyXG4gIH1cclxuXHJcblxyXG4gIGVuc3VyZUl0ZW1Eb20oTCwgaSkge1xyXG4gICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgIHdoaWxlIChyb3cubGVuZ3RoIDw9IGkpIHJvdy5wdXNoKG51bGwpO1xyXG4gICAgaWYgKCFyb3dbaV0pIHtcclxuICAgICAgY29uc3QgZGl2ID0gdGhpcy5kb20oJ2RpdicsIFRvb2xzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7Jyk7XHJcbiAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgICByb3dbaV0gPSBkaXY7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93W2ldO1xyXG4gIH1cclxuXHJcbiAgcGFpbnRJdGVtRG9tKGRpdiwgTCwgaSwgaXQsIGtpbmQsIGlzUmVhbCA9IHRydWUpIHtcclxuICAgIGNvbnN0IHMgPSBkaXYuc3R5bGU7XHJcbiAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vIFBvc2ljacOzblxyXG4gICAgcy5sZWZ0ICAgPSBpdC56b25lLnggKyAncHgnO1xyXG4gICAgcy50b3AgICAgPSBpdC56b25lLnkgKyAncHgnO1xyXG4gICAgcy53aWR0aCAgPSBpdC56b25lLncgKyAncHgnO1xyXG4gICAgcy5oZWlnaHQgPSAoaXQuem9uZS5oIC0gMikgKyAncHgnO1xyXG5cclxuICAgIC8vIFRleHRvXHJcbiAgICBkaXYudGV4dENvbnRlbnQgPSBpc1JlYWwgPyBpdC5sYWJlbCA6ICcnO1xyXG5cclxuICAgIC8vIEVzdGFkb3NcclxuICAgIGNvbnN0IHNlbGVjdGVkICAgPSBpc1JlYWwgJiYgdGhpcy52YWx1ZVtMXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWVbTF0gPT09IGl0LmtleTtcclxuICAgIGNvbnN0IGluRm9jdXNMdmwgPSB0aGlzLmZvY3VzZWQgJiYgKHRoaXMuZm9jdXNMZXZlbCA9PT0gTCk7XHJcbiAgICBjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgKHRoaXMuZm9jdXNQYXRoW0xdID09PSBpdC5rZXkpO1xyXG4gICAgY29uc3QgaXNIb3ZlciAgICA9IGlzUmVhbCAmJiAodGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJiB0aGlzLmhvdmVyLmluZGV4ID09PSBpKTtcclxuXHJcbiAgICAvLyBFc3RpbG9zIGJhc2VcclxuICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICBzLmNvbG9yICAgICAgPSBjYy50ZXh0O1xyXG4gICAgcy5ib3JkZXIgICAgID0gJzFweCBzb2xpZCAnICsgY2MuYm9yZGVyO1xyXG4gICAgcy50ZXh0QWxpZ24gID0ga2luZCA9PT0gJ21hcCcgPyAnY2VudGVyJyA6ICdsZWZ0JztcclxuXHJcbiAgICAvLyBQcmlvcmlkYWQgdmlzdWFsOiBzZWxlY2Npb25hZG8gPiBmb2NvID4gaG92ZXIgPiBiYXNlXHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgIH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG4gICAgcy5vcGFjaXR5ID0gaXNSZWFsID8gJzEnIDogJzAnO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuICByU2l6ZSgpIHtcclxuICAgIHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoKSB7XHJcbiAgICB0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcbiAgICB0aGlzLmxheW91dExldmVscygpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG4gIF90b0xvY2FsKGUpIHtcclxuICAgIGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICBjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG4gICAgcmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcbiAgfVxyXG5cclxuICBfaGl0VGVzdChteCwgbXkpIHtcclxuICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgIGNvbnN0IHogPSBsdmwuem9uZTsgIC8vIHggeSB3IHlhIGluY2x1eWVuIGNvbnRlbnRYXHJcbiAgICBpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmxpbmVILCB3OiB6LncsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgaWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZXVwJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAoT3BjaW9uYWwpIHRlY2xhZG86IGludGVncmFyIG5hdmVnYWNpw7NuIGVuIEd1aSB5IHJlZW52aWFyIGFxdcOtIHNpIHNlIGRlc2VhXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICAgIHRoaXMuY2hhbmdlQ2IodGhpcy50YWJJbmRleCwgdGhpcy5pdGVtSW5kZXgsIG5ld1BhdGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBBUEkgcMO6YmxpY2EgPT09PT09PVxyXG4gIHNldFZhbHVlKHBhdGgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJlZSh0cmVlKSB7XHJcbiAgICB0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG4gICAgLy8gcmVjYWxjdWxhciBsZWFmTWF4IGVuIHByw7N4aW1hIHBhc2FkYVxyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBQdWJsaWNhY2nDs24gZGUgYWx0dXJhID09PT09PT1cclxuICBfY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpIHtcclxuICAgIGxldCBjID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBpKyspIGlmICh0aGlzLmxldmVsc1tpXS50eXBlID09PSAnbWFwJykgYysrO1xyXG4gICAgcmV0dXJuIGM7XHJcbiAgfVxyXG5cclxuICBfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcbiAgICByZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09ICdsaXN0JyA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuICB9XHJcblxyXG4gIF9wdWJsaXNoSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcbiAgICBjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuICAgIGNvbnN0IGxlYWZIICA9IGxlYWZMZW4gKiB0aGlzLmxpbmVIO1xyXG4gICAgY29uc3QgaW50ZXJIID0gaW50ZXIgKiAodGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXApO1xyXG4gICAgY29uc3QgdG90YWxIID0gaW50ZXJIICsgKGludGVyID8gdGhpcy5sZXZlbEdhcCA6IDApICsgbGVhZkg7XHJcblxyXG4gICAgLy8gQWN0dWFsaXphIG3DqXRyaWNhcyBkZWwgcHJvdG8gKGxvIHF1ZSBzdW1hIGVsIEdVSSlcclxuICAgIHRoaXMuaCA9IHRvdGFsSDtcclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuXHJcbiAgICAvLyBBdmlzYXIgYWwgR1VJIHkgcmVmcmVzY2FyIHpvbmFzXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0VBQUE7RUFDQTtFQUNBO0FBQ0E7QUFDWSxRQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLE1BQU0sQ0FBQyxHQUFHO0VBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0VBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0VBQ0EsRUFBRSxFQUFFLEVBQUUsSUFBSTtFQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUs7RUFDYixFQUFFLEtBQUssRUFBRSxLQUFLO0VBQ2QsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7RUFDQSxFQUFFLFVBQVUsRUFB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LENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN6QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMvRSxhQUFhLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRztFQUN6QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUN6RCxRQUFRLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDeEMsUUFBUSxPQUFPLENBQUMsQ0FBQztFQUNqQixLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRztBQUN6QjtFQUNBLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDNUU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUMxQjtFQUNBLFFBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakg7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtFQUN0QixRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDckMsUUFBUSxPQUFPLENBQUMsQ0FBQztFQUNqQixLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7RUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztFQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0VBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7RUFDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ25CLFNBQVM7RUFDVCxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFB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RyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNySDtFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDN0ksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFF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QUFDO0FBQ3pIO0VBQ0E7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7RUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtFQUNBO0FBQ0E7RUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtFQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7RUFDQSxTQUFTLE1BQU07RUFDZjtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvRixZQUFZLENBQUMsQ0FBQyxHQUFH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RUFBRTtBQUNGO0VBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0VBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtFQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENB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QUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzNDO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7RUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7RUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0VBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztFQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ25DO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEs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SSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RSxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtFQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7RUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hELEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEdB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TSxHQUFHLENBQUMsQ0FBQyxPQUFNO0VBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtFQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JB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QUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0VBQ2xEO0VBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0VBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztFQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNwUE8sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQjtFQUNB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LElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMvQixTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxHQUFHO0VBQ2xDO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNyRDtFQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztFQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYTtFQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztFQUN4QjtFQUNBLFNBQVM7RUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDbEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0MsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RDLFFBQVEsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xHO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7RUFDQSxRQUFR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LFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7RUFDOUIsUUFBUTtBQUNSO0VBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7RUFDQSxTQUFTLE1BQU07QUFDZjtFQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7RUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0VBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FB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QUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtFQUNBLFNBQVM7RUFDVCxLQUFLO0VBQ0wsSUFBSTtFQUNKLEdBQUc7QUFDSDtFQUNBLEVBQUU7QUFDRjtFQUNBO0FBQ0E7RUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtFQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7RUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0VBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztFQUN0QztFQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7RUFDdEM7RUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7RUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtFQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQ3hCO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0VBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7RUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0VBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1B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QUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0VBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7RUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBO0VBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVEO0VBQ0E7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7RUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDcEM7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7RUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztFQUM1QyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDckI7RUFDQSxFQUFFO0FBQ0Y7QUFDQTtFQUNBOztFQ3BhTyxNQUFNLEdBQUcsU0FBUyxLQUFLLENBQUM7QUFDL0I7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFD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QUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7RUFDOUI7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDdEUsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7RUFDQSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUM7RUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztFQUMxQixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFlBQVksT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDO0VBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ3ZEO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxD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QUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztFQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNoQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtFQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7RUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDcEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ25FLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzNEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztFQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0FB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LElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQztFQUNBLEtBQUs7RUFDTDtFQUNBOztFQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0VBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztFQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQ7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0VBQ3hFLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDakQ7RUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0VBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQy9DLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtFQUN6RCxhQUFhO0VBQ2I7RUFDQTtFQUNBO0VBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0VBQ0E7QUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlEQUF5RCxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM1TDtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQ7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7RUFDdEosUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0gsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEo7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztFQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDckIsUUFBUSxJ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QUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0VBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztFQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0VBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtFQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtFQUNBLE1BQU07QUFDTjtFQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDO0VBQ2pELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FB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RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBOztFQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztFQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7RUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87RUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7RUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0VBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFB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SUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksR0FBRyxPQUFPO0VBQzVDLFFBQVEsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztFQUN2QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0VBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0VBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztFQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtFQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtFQUNBLGFBQWE7QUFDYjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7QUFDQTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7RUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0VBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzNGLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0Y7RUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFD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LEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0VBQ3pEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFB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QztBQUM5QjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztFQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7RUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7RUFDOUI7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3JEO0VBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FB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QUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztFQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNyRjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtFQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0VBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7RUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN6RDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7RUFDckM7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0VBQ0E7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtFQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0VBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07RUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDaEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDclUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGdEQUFnRCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcks7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztFQUNsSSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJ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RCxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztFQUMvRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7RUFDdkMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUN4QyxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHO0FBQzlCO0VBQ0EsWUFBWSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFDO0VBQzdELFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUM7RUFDcEQsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQztFQUNyRCxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDO0VBQ3pELFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVE7RUFDakQsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7RUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7RUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztFQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BDO0VBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUN0RDtFQUNBO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFB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QUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztFQUNBLFFBQVEsQ0FB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QUcsQ0FBQztFQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0VBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztFQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7RUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7RUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDaEMsT0FBTztBQUNQO0VBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7RUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztFQUNyRCxNQUFNLElB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QTtFQUNBLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3BCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtFQUNBO0VBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtFQUNBO0VBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0VBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7RUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0VBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7RUFDcEQsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElB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R0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDeEQsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDNUQsUUFBUSxNQUFNO0VBQ2QsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtFQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtFQUNBLElBQUksSUFBSSxPQUFPO0VBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQzNDO0FBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtFQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsS0FBSyxHQUFHO0VBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3BDO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDbEIsR0FBRztFQUNIOztFQzdTTyxNQUFNLFNBQVMsU0FBUyxLQUFLLENBQUM7QUFDckM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJ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QUNuQjtFQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDaEQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7QUFDakQ7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDaEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDdkM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3BDO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssR0FBRztBQUNaO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDdEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsQ0FBQyxHQUFHO0VBQ2xCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUM7RUFDM0IsS0FBSztBQUNMO0VBQ0E7O0VDMURPLE1BQU0sTUFBTSxTQUFTLEtBQUssQ0FBQztBQUNsQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFFO0VBQ2xDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzNCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLFVBQVUsR0FBRTtBQUNoRDtFQUNBO0VBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM5QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLDhDQUE4QyxHQUFFO0VBQzlNO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsRUFBRSxDQUFDLE9BQU8sR0FBRyxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFFO0VBQzVMLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDMUM7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0VBQzVDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQ3pMO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUM7RUFDckIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQUs7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7RUFDMUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sTUFBTTtFQUM3RCxRQUFRLE9BQU8sR0FBRztBQUNsQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7RUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtFQUN6QjtFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQy9CO0VBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0VBQ3RDLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxLQUFLO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFFO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sS0FBSztBQUNoQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0VBQzFCO0VBQ0E7RUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7QUFDbEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsTUFBSztFQUN0QixRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFFO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUU7RUFDN0IsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBQ25DLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFFO0VBQ2pELFNBQVMsTUFBTTtFQUNmLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUU7RUFDN0IsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHO0VBQy9CLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDM0IsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQy9DLFlBQVksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3hCLFNBQVM7RUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEdBQUc7QUFDZDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Y7RUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLE1BQUs7RUFDMUIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtBQUM3QjtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUM1QztFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0VBQ3ZCLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtFQUN0RixxQkFBcUIsRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFO0VBQzlDLGFBQWE7QUFDYjtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3pCO0VBQ0EsWUFBWSxRQUFRLENBQUM7QUFDckI7RUFDQSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0VBQy9GLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU07RUFDcEcsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtFQUNuRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0FBQ3JHO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsWUFBWSxNQUFNLEdBQUcsS0FBSTtBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxNQUFNO0FBQ3JCO0FBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3RCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNoRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFHO0FBQ25DO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztFQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEtBQUk7RUFDekMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksS0FBSTtFQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFJO0FBQ3RDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDdEtPLE1BQU0sTUFBTSxTQUFTLEtBQUssQ0FBQztBQUNsQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFFO0VBQ2xDLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQztFQUM1QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSTtBQUN2QjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFJO0FBQzdCO0FBQ0E7QUFDQTtFQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsdUJBQXVCLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw4Q0FBOEMsR0FBRTtBQUM3TTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxFQUFFLENBQUMsT0FBTyxHQUFHLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUU7RUFDNUwsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztFQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUN2TDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztFQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7RUFDOUQsUUFBUSxPQUFPLEdBQUc7QUFDbEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0VBQ2xCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDekI7RUFDQSxZ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LElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7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LElBQUksQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7RUFDakQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUU7RUFDbEQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN4RDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDckY7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNuQztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FB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RyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqRDtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSTtFQUN4QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUMzQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0I7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDbkIsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RELFNBQVM7QUFDVDtFQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVELFNBQVM7QUFDVDtFQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEMsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ3ZCLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0VBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0VBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFH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RUFDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsRDtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0VBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztFQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztFQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM5RjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztFQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztFQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtFQUNBLEtBQUs7RUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0VBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztFQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0VBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hDLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7RUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtFQUN6RTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7RUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7RUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0VBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7RUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUks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QUFDLEdBQUc7QUFDL0I7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0E7O0VDclJBO0FBSUE7RUFDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7RUFDcEMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtFQUN0QjtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO0VBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0VBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0VBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3RCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO0VBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7RUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0VBQ0E7RUFD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QU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUNwRSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hHLEtBQUs7RUFDTCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzlDO0VBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2pDLE1BQWtCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ25DLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtFQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDaEQsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QztFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0VBQ3pCO0FBQ0E7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUNuRCxVQUFVLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDdEQsVUFBVSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUMvQyxVQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0VBQ2xELFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQztFQUNyQixTQUFTO0VBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDNUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQ3hDLE9BQU8sTUFBTTtFQUNiO0VBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztFQUNuQyxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzdEO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNuRDtFQUNBLFNBQVMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0VBQ2hELFNBQVMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUN4QyxVQUFVLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsVUFBVSxNQUFNLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUNqRztFQUNBLFdBQVcsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUM5RSxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQzNELFNBQVM7RUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDaEMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDO0VBQ25CLE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQTtFQUNBLElBQUksTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQ3JCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7RUFDdkMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDMUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3JDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztFQUMxQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0VBQ0E7RUFDQSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFO0VBQ3JCLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqQztFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPO0VBQ3JCLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDNUMsTUFBTSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDeEIsTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzdELEtBQUs7RUFDTCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ3RCLEdBQUc7QUFDSDtBQUNBO0VBQ0EsRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN0QixJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDakMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0MsSUFBSSxJQUFJLENBQUMs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QUFJLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7RUFDaEMsTUFBTSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDeEMsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNyQyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ3RHLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3BCLE1BQU0sT0FBTyxJQUFJLENBQUM7RUFDbEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO0VBQ2hDLE1BQU0sTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDckMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRTtFQUNsQyxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkMsUUFBUSxPQUFPLElBQUksQ0FBQztFQUNwQixPQUFPO0VBQ1AsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0VBQzlCLE1BQU0sT0FBTyxJQUFJLENBQUM7RUFDbEIsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLE9BQU8sS0FBSyxDQUFDO0VBQ2pCLEdBQUc7QUFDSDtFQUNBO0VBQ0EsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQixJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDL0IsSUFBSSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTztBQUN2QztFQUNBLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDekI7RUFDQSxJQUFJLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsRDtFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDbEIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztFQUMxRCxHQUFHO0FBQ0g7RUFDQTtFQUNBLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRTtFQUNqQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3pELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ2xCLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRTtFQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUMzQjtFQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNsRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNsQixHQUFHO0FBQ0g7RUFDQSxFQUFFLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUU7RUFDL0MsSUFBSSxJQUFJLE9BQU8sT0FBTyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztFQUM3RCxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNyRSxJQUFJLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0VBQ3JFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ2xCLEdBQUc7QUFDSDtFQUNBO0VBQ0EsRUFBRSwwQkFBMEIsR0FBRztFQUMvQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNkLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3hGLElBQUksT0FBTyxDQUFDLENBQUM7RUFDYixHQUFHO0FBQ0g7RUFDQSxFQUFFLHFCQUFxQixHQUFHO0VBQzFCLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNyRCxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUNoRSxHQUFHO0FBQ0g7RUFDQSxFQUFFLGNBQWMsR0FBRztFQUNuQixJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0VBQ3BELElBQUksTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7RUFDekUsSUFBSSxNQUFNLEtBQUssSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUN4QyxJQUFJLE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUN4RCxJQUFJLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDaEU7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7RUFDcEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7RUFDdkMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNyQztFQUNBO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ2pELElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDNUIsR0FBRztFQUNIOztBQzlYWSxRQUFDLEdBQUcsR0FBRyxZQUFZO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDMUI7RUFDQSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7RUFDQSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hCLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0I7RUFDQSxTQUFTLE1BQU0sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDOUM7RUFDQSxZQUFZLEdBQUcsR0FBRyxJQUFJLENBQUM7RUFDdkIsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQ3pEO0VBQ0EsWUFBWSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDeEU7RUFDQSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsWUFBWSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUM7QUFDeEU7RUFDQSxZQUFZLElBQUksSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0VBQ3BFLGlCQUFpQixDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QztFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7RUFDOUIsWUFBWSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN4QjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsUUFBUSxJQUFJO0FBQ3BCO0VBQ0EsWUFBWSxLQUFLLE1BQU0sQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDaEUsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ3BELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUN4RCxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDbEQsWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQzlDLFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNsRCxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDbEQsWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ3hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNoRCxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDaEQsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDckUsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ2xELFlBQVksS0FBSyxXQUFXLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ3pFLFlBQVksS0FBSyxPQUFPLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQy9ELFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNwRCxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDcEQsWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ3hELFlBQVksS0FBSyxPQUFPLENBQUMsQ0FBQyxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ2hFLFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNoRCxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDaEQsWUFBWSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDOUQsWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3hEO0VBQ0EsU0FBUztBQUNUO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3hCO0VBQ0EsWUFBWSxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUk7QUFDbkM7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ25ELFlBQVksT0FBTyxDQUFDLENBQUM7QUFDckI7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxFQUFDO0FBQ0Q7RUFDTyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUM7RUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLFFBQU87QUFDdEI7RUFDQSxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxPQUFNO0VBQzlDLFNBQVMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksR0FBRyxRQUFPO0VBQ3JELGFBQWEsSUFBSSxHQUFHLFNBQVE7QUFDNUI7RUFDQSxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDdEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsUUFBTztFQUNwQyxhQUFhLElBQUksR0FBRyxRQUFPO0FBQzNCO0VBQ0EsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLEVBQUU7QUFDM0Q7RUFDQSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxHQUFHLElBQUksR0FBRyxTQUFRO0VBQ3RELGFBQWEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEdBQUcsSUFBSSxHQUFHLE9BQU07QUFDekQ7RUFDQSxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxZQUFZLE1BQU0sRUFBRTtBQUM3RDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsU0FBUTtFQUMvQyxhQUFhLElBQUksR0FBRyxPQUFNO0FBQzFCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLElBQUk7QUFDZjtFQUNBOztFQzNIQTtFQUNBO0VBQ0E7QUFDQTtFQUNPLE1BQU0sR0FBRyxDQUFDO0VBQ2pCLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7RUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN0QjtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDdkIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztFQUN2QixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7QUFDakM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztFQUN0QyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUMzQyxTQUFTLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QztFQUNBO0FBQ0E7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDdkI7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztFQUN4QyxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQzlCO0VBQ0E7RUFDQTtFQUNBLElBQUksS0FBSyxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUM7RUFDekUsUUFBUSxDQUFDLENBQUMsb0JBQW9CO0VBQzlCLFFBQVEsSUFBSSxDQUFDO0FBQ2I7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDakU7RUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7RUFDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO0FBQzVDO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3BFO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZjtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEQ7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDdkU7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUN0QyxJQUFJLElB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QUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BFO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxRQUFRLENBQUM7RUFDMUUsU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUMvQztFQUNBLElBQUksT0FBTyxJQUFJLENBQUM7RUFDaEIsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDakI7QUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7RUFDQSxJQUFJLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztFQUN2QixJQUFJLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUM1QjtFQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDL0QsSUFBSSxJQUFJLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2pFO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtFQUN6QyxNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUs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QUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQztFQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztFQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7RUFDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7RUFDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNoRCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDekIsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0VBQ1osSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDNUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztFQUM5QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNqRCxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2hCLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxPQUFPLEdBQUc7RUFDWixJQUFJLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMzRCxHQUFHO0FBQ0g7RUFDQSxFQUFFLElBQUksR0FBRztFQUNULElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQ3pELEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyxHQUFHO0VBQ2QsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDckIsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QjtFQUNBLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVc7RUFDaEMsVUFBVSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN4QyxVQUFVLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFDN0I7RUFDQSxNQUFNLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDbkQ7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN6QztFQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO0VBQ3BCLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7RUFDN0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDL0MsT0FBTyxNQUFNO0VBQ2IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDdkMsT0FBTztFQUNQLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakM7RUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNsRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDbkQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekQ7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVTtFQUMzQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztFQUMxRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3ZDLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxHQUFHO0VBQ1gsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUM1QixHQUFHO0FBQ0g7RUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDZCxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNsRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVE7RUFDckIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM1RSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzdDLEdBQUc7QUFDSDtFQUNBLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRTtFQUNsQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0VBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNoQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUMxQixLQUFLO0VBQ0wsR0FBRztFQUNIOzs7Ozs7Ozs7Ozs7OzsifQ== diff --git a/build/uil.module.js b/build/uil.module.js index 022ad21..fd83030 100644 --- a/build/uil.module.js +++ b/build/uil.module.js @@ -8307,8 +8307,12 @@ class TreeList extends Proto { // ======= Layout (zonas & DOM) ======= layoutLevels() { - const padX = 8; - const w = this.zone.w - padX * 2; + + const contentX = (this.sa || 100) + 8; // columna de label + padding + const padRight = 8; + const w = this.zone.w - contentX - padRight; + + let y = 0; // Ajustar itemsDom a cantidad de niveles @@ -8320,11 +8324,15 @@ class TreeList extends Proto { for (let L = 0; L < this.levels.length; L++) { const lvl = this.levels[L]; + this.itemsDom[L]; if (lvl.type === 'map') { const n = Math.max(1, lvl.items.length); const cellW = Math.floor(w / n); - lvl.zone = { x: padX, y, w, h: this.lineH }; - let x = padX; + + lvl.zone = { x: contentX, y, w, h: this.lineH }; + let x = contentX; + + for (let i = 0; i < lvl.items.length; i++) { const it = lvl.items[i]; it.zone = { x, y, w: cellW, h: this.lineH }; @@ -8332,20 +8340,27 @@ class TreeList extends Proto { this.paintItemDom(dom, L, i, it, 'map'); x += cellW; } + // eliminar DOM sobrante si antes había más celdas + this._pruneRow(L, lvl.items.length); y += this.lineH + this.levelGap; } else { // lista/hoja: reservar h según leafMax const n = lvl.items.length; const hList = Math.max(n, this.leafMax) * this.lineH; - lvl.zone = { x: padX, y, w, h: hList }; + + lvl.zone = { x: contentX, y, w, h: hList }; - for (let i = 0; i < Math.max(n, this.leafMax); i++) { + const rows = Math.max(n, this.leafMax); + for (let i = 0; i < rows; i++) { const isReal = i < n; const it = isReal ? lvl.items[i] : { key: null, label: '', zone: { x:0,y:0,w:0,h:0 } }; - it.zone = { x: padX, y: y + i * this.lineH, w, h: this.lineH }; + + it.zone = { x: contentX, y: y + i * this.lineH, w, h: this.lineH }; const dom = this.ensureItemDom(L, i); this.paintItemDom(dom, L, i, it, 'list', isReal); } + // eliminar DOM sobrante si antes había más filas + this._pruneRow(L, rows); y += hList; } } @@ -8360,6 +8375,21 @@ class TreeList extends Proto { this._publishHeight(); } + + + // Elimina nodos DOM sobrantes en la fila L a partir del índice keep + _pruneRow(L, keep) { + const row = this.itemsDom[L]; + // si nunca se creó, nada que hacer + if (!row) return; + for (let j = keep; j < row.length; j++) { + const el = row[j]; + if (el && el.parentNode) el.parentNode.removeChild(el); + } + row.length = keep; + } + + ensureItemDom(L, i) { const row = this.itemsDom[L]; while (row.length <= i) row.push(null); @@ -8432,10 +8462,10 @@ class TreeList extends Proto { } _hitTest(mx, my) { - for (let L = 0; L < this.levels.length; L++) { - const lvl = this.levels[L]; - const z = lvl.zone; - if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + const z = lvl.zone; // x y w ya incluyen contentX + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; if (lvl.type === 'map') { for (let i = 0; i < lvl.items.length; i++) { @@ -9440,4 +9470,4 @@ class Gui { } export { Files, Gui, REVISION, Tools, add }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuICAgIC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG4gICAgLy8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG4gICAgby5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuICAgIG8ubmFtZSA9IG8ubmFtZSB8fCAnVHJlZUxpc3QnO1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgLy8gRGF0b3MgJiBlc3RhZG9cclxuICAgIHRoaXMudHJlZSAgICAgICA9IG8udHJlZSB8fCB7fTtcclxuICAgIHRoaXMudmFsdWUgICAgICA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNlZCAgICA9ICEhby5mb2N1c2VkO1xyXG4gICAgdGhpcy5mb2N1c1BhdGggID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSAnbnVtYmVyJyA/IG8uZm9jdXNMZXZlbCA6IC0xO1xyXG5cclxuICAgIHRoaXMudGFiSW5kZXggICA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuICAgIHRoaXMuaXRlbUluZGV4ICA9IG8uaXRlbUluZGV4ID8/IG51bGw7XHJcblxyXG4gICAgLy8gQ2FsbGJhY2tcclxuICAgIHRoaXMuY2hhbmdlQ2IgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcbiAgICAvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuICAgIHRoaXMubGluZUggICAgPSB0aGlzLmg7ICAgICAgICAgICAgICAgLy8gYWx0byBkZSBVTkEgZmlsYVxyXG4gICAgdGhpcy5sZXZlbEdhcCA9IHRoaXMuY29sb3JzLnN5IHx8IDI7ICAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmxlYWZNYXggID0gMDsgICAgICAgICAgICAgICAgICAgIC8vIHNlIGNhbGN1bGEgZW4gclNpemUoKVxyXG5cclxuICAgIC8vIE1vZGVsbyB2aXN1YWxcclxuICAgIHRoaXMubGV2ZWxzICAgPSBbXTsgICAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuICAgIHRoaXMuaXRlbXNEb20gPSBbXTsgICAvLyBlc3Blam8gRE9NIHBvciBuaXZlbFxyXG4gICAgdGhpcy5ob3ZlciAgICA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcbiAgICAvLyBDb250ZW5lZG9yIGludGVybm8gKGFic29sdXRvKVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpO1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG4gIHN0YXRpYyBpc01hcChub2RlKSAgeyByZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuICBzdGF0aWMgaXNMaXN0KG5vZGUpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuXHJcbiAgLy8gPT09PT09PSBSZWNvcnJpZG8gZGUgZGF0b3MgPT09PT09PVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG4gICAgICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG4gIGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG4gICAgbGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG4gICAgd2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgaWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcbiAgICAgIGNvbnN0IGswID0ga2V5c1swXTtcclxuICAgICAgcGF0aC5wdXNoKGswKTtcclxuICAgICAgbm9kZSA9IG5vZGVbazBdO1xyXG4gICAgfVxyXG4gICAgLy8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgLy8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG4gIGdldEFjdGl2ZVBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG4gIGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcbiAgICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gMDtcclxuICAgIGxldCBtID0gMDtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG4gICAgICBtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PVxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTml2ZWwgaW50ZXJtZWRpbzogY2xhdmVzIGRlbCBtYXBhIChob3Jpem9udGFsKVxyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6ICdtYXAnLFxyXG4gICAgICAgICAgaXRlbXM6IGtleXMubWFwKGsgPT4gKHsga2V5OiBrLCBsYWJlbDogaywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSksXHJcbiAgICAgICAgICB6b25lOiB7IHg6MCx5OjAsdzowLGg6IHRoaXMubGluZUggfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAobGFiZWwgPT4gKHsga2V5OiBsYWJlbCwgbGFiZWwsIHpvbmU6IHsgeDowLHk6MCx3OjAsaDowIH0gfSkpO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ2xpc3QnLCBpdGVtcywgem9uZTogeyB4OjAsIHk6MCwgdzowLCBoOiBoTGlzdCB9IH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuICBsYXlvdXRMZXZlbHMoKSB7XHJcbiAgICBjb25zdCBwYWRYID0gODtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIHBhZFggKiAyO1xyXG4gICAgbGV0IHkgPSAwO1xyXG5cclxuICAgIC8vIEFqdXN0YXIgaXRlbXNEb20gYSBjYW50aWRhZCBkZSBuaXZlbGVzXHJcbiAgICB3aGlsZSAodGhpcy5pdGVtc0RvbS5sZW5ndGggPCB0aGlzLmxldmVscy5sZW5ndGgpIHRoaXMuaXRlbXNEb20ucHVzaChbXSk7XHJcbiAgICBmb3IgKGxldCBMID0gdGhpcy5sZXZlbHMubGVuZ3RoOyBMIDwgdGhpcy5pdGVtc0RvbS5sZW5ndGg7IEwrKykge1xyXG4gICAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuaXRlbXNEb21bTF0pIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuICAgIGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuICAgICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICAgIGlmIChsdmwudHlwZSA9PT0gJ21hcCcpIHtcclxuICAgICAgICBjb25zdCBuID0gTWF0aC5tYXgoMSwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgY2VsbFcgPSBNYXRoLmZsb29yKHcgLyBuKTtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgIGxldCB4ID0gcGFkWDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ21hcCcpO1xyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgeSArPSB0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsaXN0YS9ob2phOiByZXNlcnZhciBoIHNlZ8O6biBsZWFmTWF4XHJcbiAgICAgICAgY29uc3QgbiA9IGx2bC5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogcGFkWCwgeSwgdywgaDogaExpc3QgfTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBuO1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBpc1JlYWwgPyBsdmwuaXRlbXNbaV0gOiB7IGtleTogbnVsbCwgbGFiZWw6ICcnLCB6b25lOiB7IHg6MCx5OjAsdzowLGg6MCB9IH07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4OiBwYWRYLCB5OiB5ICsgaSAqIHRoaXMubGluZUgsIHcsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuICAgICAgICAgIHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsICdsaXN0JywgaXNSZWFsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgeSArPSBoTGlzdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFqdXN0ZXMgZGUgYWx0byBpbnRlcm5vIGRlbCBjb250ZW5lZG9yIHZpc3VhbFxyXG4gICAgY29uc3QgdG90YWxIID0geTtcclxuICAgIHRoaXMuem9uZS5oID0gdG90YWxIICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy56b25lLmggKyAncHgnO1xyXG4gICAgdGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArICdweCc7XHJcblxyXG4gICAgLy8gUHVibGljYXIgYWx0byB0b3RhbCBhbCBHVUkgKHN1bWFyw6EgdS5oKVxyXG4gICAgdGhpcy5fcHVibGlzaEhlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgZW5zdXJlSXRlbURvbShMLCBpKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgd2hpbGUgKHJvdy5sZW5ndGggPD0gaSkgcm93LnB1c2gobnVsbCk7XHJcbiAgICBpZiAoIXJvd1tpXSkge1xyXG4gICAgICBjb25zdCBkaXYgPSB0aGlzLmRvbSgnZGl2JywgVG9vbHMuY3NzLnR4dCArICdwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsnKTtcclxuICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcbiAgICAgIHJvd1tpXSA9IGRpdjtcclxuICAgIH1cclxuICAgIHJldHVybiByb3dbaV07XHJcbiAgfVxyXG5cclxuICBwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgcyA9IGRpdi5zdHlsZTtcclxuICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy8gUG9zaWNpw7NuXHJcbiAgICBzLmxlZnQgICA9IGl0LnpvbmUueCArICdweCc7XHJcbiAgICBzLnRvcCAgICA9IGl0LnpvbmUueSArICdweCc7XHJcbiAgICBzLndpZHRoICA9IGl0LnpvbmUudyArICdweCc7XHJcbiAgICBzLmhlaWdodCA9IChpdC56b25lLmggLSAyKSArICdweCc7XHJcblxyXG4gICAgLy8gVGV4dG9cclxuICAgIGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogJyc7XHJcblxyXG4gICAgLy8gRXN0YWRvc1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgICA9IGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG4gICAgY29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiAodGhpcy5mb2N1c0xldmVsID09PSBMKTtcclxuICAgIGNvbnN0IGZvY3VzTWF0Y2ggPSBpc1JlYWwgJiYgaW5Gb2N1c0x2bCAmJiAodGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleSk7XHJcbiAgICBjb25zdCBpc0hvdmVyICAgID0gaXNSZWFsICYmICh0aGlzLmhvdmVyLmxldmVsID09PSBMICYmIHRoaXMuaG92ZXIuaW5kZXggPT09IGkpO1xyXG5cclxuICAgIC8vIEVzdGlsb3MgYmFzZVxyXG4gICAgcy5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuICAgIHMuY29sb3IgICAgICA9IGNjLnRleHQ7XHJcbiAgICBzLmJvcmRlciAgICAgPSAnMXB4IHNvbGlkICcgKyBjYy5ib3JkZXI7XHJcbiAgICBzLnRleHRBbGlnbiAgPSBraW5kID09PSAnbWFwJyA/ICdjZW50ZXInIDogJ2xlZnQnO1xyXG5cclxuICAgIC8vIFByaW9yaWRhZCB2aXN1YWw6IHNlbGVjY2lvbmFkbyA+IGZvY28gPiBob3ZlciA+IGJhc2VcclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgfSBlbHNlIGlmIChmb2N1c01hdGNoKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICB9IGVsc2UgaWYgKGlzSG92ZXIpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbGFzIGRlIHBhZGRpbmcgaW52aXNpYmxlcyBlbiBob2phXHJcbiAgICBzLm9wYWNpdHkgPSBpc1JlYWwgPyAnMScgOiAnMCc7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IENpY2xvIGRlIHZpZGEgPT09PT09PVxyXG4gIHJTaXplKCkge1xyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy5idWlsZExldmVscygpO1xyXG4gICAgdGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEludGVyYWNjacOzbiA9PT09PT09XHJcbiAgX3RvTG9jYWwoZSkge1xyXG4gICAgY29uc3QgbXggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgIGNvbnN0IG15ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnk7XHJcbiAgICByZXR1cm4geyB4OiBteCwgeTogbXkgfTtcclxuICB9XHJcblxyXG4gIF9oaXRUZXN0KG14LCBteSkge1xyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgY29uc3QgeiA9IGx2bC56b25lO1xyXG4gICAgICBpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmxpbmVILCB3OiB6LncsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgaWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZXVwJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAoT3BjaW9uYWwpIHRlY2xhZG86IGludGVncmFyIG5hdmVnYWNpw7NuIGVuIEd1aSB5IHJlZW52aWFyIGFxdcOtIHNpIHNlIGRlc2VhXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICAgIHRoaXMuY2hhbmdlQ2IodGhpcy50YWJJbmRleCwgdGhpcy5pdGVtSW5kZXgsIG5ld1BhdGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBBUEkgcMO6YmxpY2EgPT09PT09PVxyXG4gIHNldFZhbHVlKHBhdGgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJlZSh0cmVlKSB7XHJcbiAgICB0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG4gICAgLy8gcmVjYWxjdWxhciBsZWFmTWF4IGVuIHByw7N4aW1hIHBhc2FkYVxyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBQdWJsaWNhY2nDs24gZGUgYWx0dXJhID09PT09PT1cclxuICBfY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpIHtcclxuICAgIGxldCBjID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBpKyspIGlmICh0aGlzLmxldmVsc1tpXS50eXBlID09PSAnbWFwJykgYysrO1xyXG4gICAgcmV0dXJuIGM7XHJcbiAgfVxyXG5cclxuICBfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcbiAgICByZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09ICdsaXN0JyA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuICB9XHJcblxyXG4gIF9wdWJsaXNoSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcbiAgICBjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuICAgIGNvbnN0IGxlYWZIICA9IGxlYWZMZW4gKiB0aGlzLmxpbmVIO1xyXG4gICAgY29uc3QgaW50ZXJIID0gaW50ZXIgKiAodGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXApO1xyXG4gICAgY29uc3QgdG90YWxIID0gaW50ZXJIICsgKGludGVyID8gdGhpcy5sZXZlbEdhcCA6IDApICsgbGVhZkg7XHJcblxyXG4gICAgLy8gQWN0dWFsaXphIG3DqXRyaWNhcyBkZWwgcHJvdG8gKGxvIHF1ZSBzdW1hIGVsIEdVSSlcclxuICAgIHRoaXMuaCA9IHRvdGFsSDtcclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuXHJcbiAgICAvLyBBdmlzYXIgYWwgR1VJIHkgcmVmcmVzY2FyIHpvbmFzXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDWSxNQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxHQUFHO0FBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0FBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0FBQ0EsRUFBRSxFQUFFLEVBQUUsSUFBSTtBQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUs7QUFDYixFQUFFLEtBQUssRUFBRSxLQUFLO0FBQ2QsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7QUFDQSxFQUFF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QVcsRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ3BELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUN2RDtBQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3hDLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxFQUFFLFVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUNyQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNuQjtBQUNBLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN0QjtBQUNBLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUN2RCxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDdkQ7QUFDQSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FB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UUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN6QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRSxhQUFhLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRztBQUN6QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN6RCxRQUFRLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDeEMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRztBQUN6QjtBQUNBLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDNUU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUMxQjtBQUNBLFFBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakg7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN0QixRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLFNBQVM7QUFDVCxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNCO0FBQ0EsS0FBSztBQUNM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LENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNySDtBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0ksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcs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QUcsRUFBRSxDQUFDO0FBQ3pIO0FBQ0E7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtBQUNBO0FBQ0E7QUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtBQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMvRixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwSTtBQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksYUFBYSxFQUFFLFlBQVk7QUFDL0I7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNwQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUNoSixRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdkMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkIsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN4QixRQUFXLElBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBSztBQUM1RCxRQUFRLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUM7QUFDakQsUUFBUSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDdkI7QUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0FBQ0EsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QixZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM5QixZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ2pDLFlBQVksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNoRDtBQUNBLFlBQVksRUFBRSxHQUFHO0FBQ2pCLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDM0MsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHO0FBQ3ZELGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDM0MsYUFBYSxDQUFDO0FBQ2Q7QUFDQSxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RDtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCO0FBQ0EsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsZ0JBQWdCLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDMUIsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0c7QUFDQSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNELGdCQUFnQixDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbko7QUFDQSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUg7QUFDQSxhQUFhO0FBQ2IsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztBQUM1QixZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFaEMsU0FBUztBQUlUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDdkI7QUFDQTtBQUNBLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakcsUUFBUSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JJO0FBQ0EsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9FLFFBQVEsQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN4STtBQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoRyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25HLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzlJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzlJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLG9GQUFvRixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9LO0FBQ0E7QUFDQSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUc7QUFDQSxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtBQUNyQztBQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLDRGQUE0RixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDak8sUUFBUSxPQUFPLElBQUk7QUFDbkIsWUFBWSxLQUFLLE1BQU07QUFDdkIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO0FBQzNGLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssUUFBUTtBQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7QUFDNUYsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxLQUFLO0FBQ3RCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztBQUN6RixZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLEtBQUs7QUFDdEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLG1GQUFtRixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ3pKLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssUUFBUTtBQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsbUZBQW1GLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7QUFDNUosWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxRQUFRO0FBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztBQUM1RixZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLE1BQU07QUFDdkIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLHdKQUF3SixDQUFDLEtBQUssQ0FBQztBQUN2TSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSw0S0FBNEssQ0FBQztBQUMvTCxZQUFZLE1BQU07QUFDbEIsU0FBUztBQUNULFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQztBQUM1QixRQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksVUFBVSxDQUFDLENBQUM7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtBQUNBLElBQUksV0FBVyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsQ0FBQztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLENBQUM7QUFDZDtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7QUFDQSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0FBQ0EsSUFBSSxXQUFXLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7QUFDQSxFQUFDO0FBQ0Q7QUFDQSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDWjtBQUNZLE1BQUMsS0FBSyxHQUFHOztBQ3YzQnJCO0FBQ0E7QUFDQTtBQUNPLE1BQU0sS0FBSyxDQUFDO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sU0FBUyxFQUFFLElBQUksR0FBRztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUNsQjtBQUNBLFFBQVEsUUFBUSxJQUFJO0FBQ3BCLFlBQVksS0FBSyxLQUFLO0FBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBRztBQUMzRCxZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLEtBQUs7QUFDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFHO0FBQ3ZELFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssS0FBSztBQUN0QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUc7QUFDeEQsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxLQUFLO0FBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBRztBQUN2RCxZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssS0FBSztBQUNsQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsRUFBRSwwQkFBMEIsRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7QUFDOUcsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxNQUFNO0FBQ3ZCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFHO0FBQy9ILFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssTUFBTTtBQUN2QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBRztBQUM3RixZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLElBQUk7QUFDckIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBRztBQUNoRyxZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLE9BQU87QUFDeEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFHO0FBQ3hHLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssTUFBTTtBQUN2QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7QUFDbEYsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxLQUFLO0FBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7QUFDeEYsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUM7QUFDaEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLE9BQU8sTUFBTSxDQUFDLGtCQUFrQixLQUFLLFVBQVUsRUFBRTtBQUM3RCxZQUFZLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsMkJBQTBCO0FBQ3hFLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSTtBQUNaO0FBQ0EsU0FBUyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUU7QUFDaEM7QUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHO0FBQzVCLGdCQUFnQixzQkFBc0IsRUFBRSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFDM0QsZ0JBQWdCLFFBQVEsRUFBRSxLQUFLO0FBQy9CO0FBQ0EsYUFBYSxDQUFDO0FBQ2Q7QUFDQSxZQUFZLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUU7QUFDbkQ7QUFDQTtBQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxHQUFFO0FBQ3JFLFlBQVksTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFFO0FBQ2xEO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxJQUFJO0FBQ25DO0FBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEY7QUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDbEYsWUFBWSxNQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQy9FLFlBQVksTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUM1QztBQUNBLFlBQVksSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxHQUFFO0FBQzlFLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksR0FBRTtBQUN2RixpQkFBaUIsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLEdBQUU7QUFDMUM7QUFDQSxZQUFZLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUU7QUFDeEM7QUFDQSxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFNO0FBQzdDO0FBQ0EsZ0JBQWdCLE9BQU8sSUFBSTtBQUMzQixvQkFBb0IsS0FBSyxPQUFPO0FBQ2hDLHdCQUF3QixJQUFJLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUM1Qyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sR0FBRyxXQUFXO0FBQ2hELDRCQUE0QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRTtBQUM1RSwwQkFBeUI7QUFDekIsd0JBQXdCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsUUFBTztBQUN6QyxvQkFBb0IsTUFBTTtBQUMxQixvQkFBb0IsS0FBSyxNQUFNO0FBQy9CLHdCQUF3QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUU7QUFDMUYsb0JBQW9CLE1BQU07QUFDMUIsb0JBQW9CO0FBQ3BCLHdCQUF3QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRTtBQUM1RSxvQkFBb0IsTUFBTTtBQUMxQixpQkFBaUI7QUFDakI7QUFDQSxjQUFhO0FBQ2I7QUFDQSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkI7QUFDQSxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUU7QUFDM0Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDLE9BQU8sMEJBQTBCLEVBQUUsT0FBTyxHQUFHO0FBQzlDLFFBQVEsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSztBQUN4QyxZQUFZLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUQsWUFBWSxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNoQyxZQUFZLEtBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUM5QyxZQUFZLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUs7QUFDeEMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzNDLGlCQUFpQixPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakYsaUJBQWlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtBQUNBLFlBQVksS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxNQUFNO0FBQ25ELGdCQUFnQixPQUFPO0FBQ3ZCLG9CQUFvQixDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSztBQUNuRCx3QkFBd0IsT0FBTztBQUMvQiw0QkFBNEIsT0FBTyxFQUFFO0FBQ3JDLGdDQUFnQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSztBQUN6RCxvQ0FBb0MsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELGlDQUFpQyxDQUFDO0FBQ2xDLHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQixDQUFDO0FBQ3RCLGlCQUFpQixDQUFDO0FBQ2xCLGFBQWEsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxZQUFZLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxQixTQUFTLENBQUM7QUFDVixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxhQUFhLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksT0FBTyxNQUFNLENBQUMsa0JBQWtCLEtBQUssVUFBVSxFQUFFO0FBQzdELFlBQVksTUFBTSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQywyQkFBMEI7QUFDeEUsWUFBWSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSTtBQUNaO0FBQ0EsWUFBWSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUU7QUFDbkM7QUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHO0FBQzVCLGdCQUFnQixhQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPO0FBQ2hELGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO0FBQ2xDLGFBQWEsQ0FBQztBQUNkO0FBQ0EsWUFBWSxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxHQUFFO0FBQ25ELFlBQVksT0FBTyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFDO0FBQ3pFLFlBQVksT0FBTyxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDdEU7QUFDQSxZQUFZLElBQUksT0FBTyxHQUFHLE1BQU07QUFDaEM7QUFDQTtBQUNBLFlBQVksTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdkQ7QUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQy9FO0FBQ0E7QUFDQSxZQUFZLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQztBQUNBO0FBQ0EsWUFBWSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvQjtBQUNBLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNuQjtBQUNBLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQjtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTywwQkFBMEIsRUFBRSxPQUFPLEdBQUc7QUFDakQsUUFBUSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLO0FBQ3hDLFlBQVksTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxZQUFZLENBQUMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxjQUFhO0FBQy9ELFlBQVksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDOUUsWUFBWSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxHQUFFO0FBQ2hEO0FBQ0EsWUFBWSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU07QUFDOUMsZ0JBQWdCLE9BQU87QUFDdkIsb0JBQW9CLFVBQVUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRTtBQUN6RSxrQkFBaUI7QUFDakIsYUFBYSxFQUFDO0FBQ2QsWUFBWSxDQUFDLENBQUMsS0FBSyxHQUFFO0FBQ3JCLFNBQVMsQ0FBQztBQUNWLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWEsU0FBUyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJO0FBQ1o7QUFDQSxZQUFZLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDOUQsWUFBWSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDN0IsWUFBWSxXQUFXLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRTtBQUN2RCxnQkFBZ0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkQsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsYUFBYTtBQUNiO0FBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQztBQUM5QixZQUFZLE9BQU8sS0FBSyxDQUFDO0FBQ3pCO0FBQ0EsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ25CO0FBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalFPLE1BQU0sRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNkO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNkO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sR0FBRztBQUMzQjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7QUFDbkIsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUNuQixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sR0FBRztBQUN6QjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUMzQztBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEdBQUc7QUFDWDtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN4RDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0M7QUFDQSxFQUFFLEtBQUssS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEM7QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2Y7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDZCxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0FBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FB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Q0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ25DO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxD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QUFDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtBQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsQixJQUFJLElBQUksQ0FB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LENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFD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QUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0FBQ2xEO0FBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNwUE8sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtB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QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxHQUFHO0FBQ2xDO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNyRDtBQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztBQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QjtBQUNBLFNBQVM7QUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLFFBQVEsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xHO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7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QUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUIsUUFBUTtBQUNSO0FBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7QUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFH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SSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtBQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7QUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUN0QztBQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7QUFDdEM7QUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7QUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtBQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0FBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7QUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FB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RyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0FBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7QUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBO0FBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVEO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDcEM7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztBQUM1QyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDckI7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQ3BhTyxNQUFNLEdBQUcsU0FBUyxLQUFLLENBQUM7QUFDL0I7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQztBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDbkM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztBQUMxQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzlDLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN4QztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QjtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFFO0FBQ3RDLFlBQVksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM5QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekIsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN4RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzVCO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBSztBQUN0QztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNoQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUMzQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLCtCQUErQixFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsOEVBQThFLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7QUFDaE07QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsUUFBUSxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2pGO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2xELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQzdLO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtEQUFrRCxFQUFFLENBQUM7QUFDMUo7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsMkVBQTJFLENBQUMsQ0FBQztBQUN0SjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0E7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDdEUsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7QUFDQSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUM7QUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMxQixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFlBQVksT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZEO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENB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QUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtBQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzNEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFB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Q0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQztBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztBQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDakQ7QUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQy9DLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtBQUN6RCxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlEQUF5RCxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1TDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQ7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDdEosUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0gsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEo7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSTtBQUM5QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUM7QUFDaEYsaUJBQWlCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDM0QsU0FBUztBQUNULFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxXQUFXLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsa0NBQWlDO0FBQ3BFLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQzlCLFFBQVEsSUFBSSxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFJO0FBQ3JDLFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNsQixZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLHFCQUFvQjtBQUNqRyxpQkFBaUIsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBTztBQUN0RSxZQUFZLENBQUMsR0FBRTtBQUNmLFNBQVM7QUFDVCxRQUFRLE9BQU8sQ0FBQztBQUNoQixLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUU7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hDO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNuRixZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BILGlCQUFpQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BHO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNqRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDakQ7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3hDLFNBQVMsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNyQixhQUFhLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDdkQsVUFBVTtBQUNWLE1BQU07QUFDTjtBQUNBLFFBQVEsT0FBTyxFQUFFO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ3JCO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNYO0FBQ0EsUUFBUSxPQUFPLENBQUM7QUFDaEIsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTTtBQUNqQyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNO0FBQ2pDLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDL0IsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUM5RCxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLEtBQUssSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3JCO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekIsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2xCLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNyQyxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNyRSxnQkFBZ0IsR0FBRyxHQUFHLElBQUksQ0FBQztBQUMzQixhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QixRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN4QixRQUFRLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsS0FBSyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDckI7QUFDQSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakM7QUFDQSxLQUFLLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUN0QjtBQUNBLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvQjtBQUNBO0FBQ0EsU0FBUyxNQUFNO0FBQ2Y7QUFDQSxZQUFZLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN6RDtBQUNBLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzNCLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5RyxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDakMsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtBQUNBLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFFO0FBQ3JDO0FBQ0E7QUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JDO0FBQ0EsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFDO0FBQzVDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNwQztBQUNBLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUc7QUFDMUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RCO0FBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztBQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0FBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtBQUNBLE1BQU07QUFDTjtBQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFD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LEdBQUcsNENBQTRDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQztBQUM1SCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDNUs7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDMUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHNCQUFzQixFQUFDO0FBQzFJO0FBQ0EsUUFBZ0IsSUFBSSxDQUFDLEVBQUU7QUFDdkIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFPO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRTtBQUMxQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRztB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QUU7QUFDN0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztBQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFL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QUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksR0FBRyxPQUFPO0FBQzVDLFFBQVEsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0FBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0FBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtBQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0FBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNGLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0Y7QUFDQSxRQUFRLEdBQUcs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SUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFD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LE1BQU0sQ0FBQztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7QUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7QUFDOUI7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JEO0FBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJ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QSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtBQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0FBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6RDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDckM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0FBQ0E7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtBQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0FBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDclUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGdEQUFnRCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcks7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNsSSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVB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QUUsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7QUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7QUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUN0RDtBQUNBO0FBQ0EsWUFBWSxJQUFJ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LElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN4RCxTQUFTLE1BQU07QUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN4RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztBQUNB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SSxFQUFFLEdBQUcsQ0FBQztBQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztBQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDaEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNy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QUFDOUI7QUFDQTtBQUNBLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtBQUNBO0FBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtBQUNBO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0FBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDcEQsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFB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QUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDeEQsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDNUQsUUFBUSxNQUFNO0FBQ2QsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtBQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtBQUNBLElBQUksSUFBSSxPQUFPO0FBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzNDO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtBQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEIsR0FBRztBQUNIOztBQzdTTyxNQUFNLFNBQVMsU0FBUyxLQUFLLENBQUM7QUFDckM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQzFELFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN4QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDN0Q7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLGtCQUFrQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JOLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLHFDQUFxQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsd0NBQXdDLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxlQUFlLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxtQ0FBbUMsQ0FBQyxDQUFDO0FBQzlPO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25JO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxzRUFBc0UsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25MLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFDM0MsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87QUFDbEM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3ZDLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDMUIsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMvQixZQUFZLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3RCxZQUFZLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87QUFDbEM7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEQsYUFBYSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxJQUFJO0FBQ2Y7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FB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QUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDaEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7QUFDakQ7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMs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QUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUN2TDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3JCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFDOUQsUUFBUSxPQUFPLEdBQUc7QUFDbEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFD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SUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsT0FBTyxJQUFJLENB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S0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7QUFDakQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUU7QUFDbEQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN4RDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDckY7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUNuQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUN0SjtBQUNBLFFBQVcsSUFBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSTtBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7QUFDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztBQUNBLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdkMsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxzQkFBc0IsQ0FBQztBQUN0RCxZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25EO0FBQ0EsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDckMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLHNCQUFzQixDQUFDO0FBQzFEO0FBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNwQztBQUNBLG9CQUFvQixHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDeEY7QUFDQSxvQkFBb0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDeEQsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMseUNBQXlDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDdFEsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7QUFDckUsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbEUsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQkFBb0IsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4QztBQUNBLG9CQUFvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDeEMsb0JBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQztBQUNyQztBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0Esb0JBQW9CLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxFQUFFLEtBQUssR0FBRTtBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcseUJBQXlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxpRUFBZ0U7QUFDekwsb0JBQW9CLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFFO0FBQ3ZDO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxjQUFjLENBQUM7QUFDNUQscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQztBQUN0RDtBQUNBLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztBQUNwQjtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE9BQU07QUFDakM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkIsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELFNBQVM7QUFDVDtBQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVELFNBQVM7QUFDVDtBQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0FBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUs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QUFTO0FBQ1Q7QUFDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRDtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5RjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztBQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0FBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7QUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtBQUN6RTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7QUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0FBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxR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QUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDclJBO0FBSUE7QUFDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO0FBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0FBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdD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QyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRyxLQUFLO0FBQ0wsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM5QztBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pELE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7QUFDOUIsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEMsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckIsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkQsVUFBVSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFVBQVUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RELFVBQVUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0MsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRCxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDckIsU0FBUztBQUNULFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN4QyxPQUFPLE1BQU07QUFDYjtBQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDbkMsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3RCxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVELFVBQVUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQixVQUFVLE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pHLFVBQVUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6RSxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNELFNBQVM7QUFDVCxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDbkIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDckM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdEIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLElBQUksT0FBTyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNqQixNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlDQUF5QyxDQUFDLENBQUM7QUFDN0YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkIsS0FBSztBQUNMLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsSUFBSSxFQUFFO0FBQ25ELElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztBQUN4QixJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0I7QUFDQTtBQUNBLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDdEM7QUFDQTtBQUNBLElBQUksR0FBRyxDQUFDLFdBQVcsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBLElBQUksTUFBTSxRQUFRLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztBQUN6RixJQUFJLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMvRCxJQUFJLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUUsSUFBSSxNQUFNLE9BQU8sTUFBTSxNQUFNLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BGO0FBQ0E7QUFDQSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUMzQixJQUFJLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQztBQUMzQixJQUFJLENBQUMsQ0FBQyxNQUFNLE9BQU8sWUFBWSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7QUFDNUMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksS0FBSyxLQUFLLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUN0RDtBQUNBO0FBQ0EsSUFBSSxJQUFJLFFBQVEsRUFBRTtBQUNsQixNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUMvQixNQUFN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RCxZQUFZLE9BQU8sQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsRUFBQztBQUNEO0FBQ08sTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFDO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxRQUFPO0FBQ3RCO0FBQ0EsSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsT0FBTTtBQUM5QyxTQUFTLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLEdBQUcsUUFBTztBQUNyRCxhQUFhLElBQUksR0FBRyxTQUFRO0FBQzVCO0FBQ0EsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLFFBQU87QUFDcEMsYUFBYSxJQUFJLEdBQUcsUUFBTztBQUMzQjtBQUNBLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFFO0FBQzNEO0FBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsR0FBRyxJQUFJLEdBQUcsU0FBUTtBQUN0RCxhQUFhLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxHQUFHLElBQUksR0FBRyxPQUFNO0FBQ3pEO0FBQ0EsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsWUFBWSxNQUFNLEVBQUU7QUFDN0Q7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLFNBQVE7QUFDL0MsYUFBYSxJQUFJLEdBQUcsT0FBTTtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElB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Q0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FB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RyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZEO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtBQUNYLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEM7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0FBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEdBQUc7QUFDVCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsR0FBRztBQUNkLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUIsSUFBSSxJQUFJLENB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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuICAgIC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG4gICAgLy8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG4gICAgby5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuICAgIG8ubmFtZSA9IG8ubmFtZSB8fCAnVHJlZUxpc3QnO1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgLy8gRGF0b3MgJiBlc3RhZG9cclxuICAgIHRoaXMudHJlZSAgICAgICA9IG8udHJlZSB8fCB7fTtcclxuICAgIHRoaXMudmFsdWUgICAgICA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNlZCAgICA9ICEhby5mb2N1c2VkO1xyXG4gICAgdGhpcy5mb2N1c1BhdGggID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSAnbnVtYmVyJyA/IG8uZm9jdXNMZXZlbCA6IC0xO1xyXG5cclxuICAgIHRoaXMudGFiSW5kZXggICA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuICAgIHRoaXMuaXRlbUluZGV4ICA9IG8uaXRlbUluZGV4ID8/IG51bGw7XHJcblxyXG4gICAgLy8gQ2FsbGJhY2tcclxuICAgIHRoaXMuY2hhbmdlQ2IgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcbiAgICAvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuICAgIHRoaXMubGluZUggICAgPSB0aGlzLmg7ICAgICAgICAgICAgICAgLy8gYWx0byBkZSBVTkEgZmlsYVxyXG4gICAgdGhpcy5sZXZlbEdhcCA9IHRoaXMuY29sb3JzLnN5IHx8IDI7ICAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmxlYWZNYXggID0gMDsgICAgICAgICAgICAgICAgICAgIC8vIHNlIGNhbGN1bGEgZW4gclNpemUoKVxyXG5cclxuICAgIC8vIE1vZGVsbyB2aXN1YWxcclxuICAgIHRoaXMubGV2ZWxzICAgPSBbXTsgICAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuICAgIHRoaXMuaXRlbXNEb20gPSBbXTsgICAvLyBlc3Blam8gRE9NIHBvciBuaXZlbFxyXG4gICAgdGhpcy5ob3ZlciAgICA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcbiAgICAvLyBDb250ZW5lZG9yIGludGVybm8gKGFic29sdXRvKVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpO1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG4gIHN0YXRpYyBpc01hcChub2RlKSAgeyByZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuICBzdGF0aWMgaXNMaXN0KG5vZGUpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuXHJcbiAgLy8gPT09PT09PSBSZWNvcnJpZG8gZGUgZGF0b3MgPT09PT09PVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG4gICAgICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG4gIGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG4gICAgbGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG4gICAgd2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgaWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcbiAgICAgIGNvbnN0IGswID0ga2V5c1swXTtcclxuICAgICAgcGF0aC5wdXNoKGswKTtcclxuICAgICAgbm9kZSA9IG5vZGVbazBdO1xyXG4gICAgfVxyXG4gICAgLy8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgLy8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG4gIGdldEFjdGl2ZVBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG4gIGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcbiAgICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gMDtcclxuICAgIGxldCBtID0gMDtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG4gICAgICBtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PVxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTml2ZWwgaW50ZXJtZWRpbzogY2xhdmVzIGRlbCBtYXBhIChob3Jpem9udGFsKVxyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6ICdtYXAnLFxyXG4gICAgICAgICAgaXRlbXM6IGtleXMubWFwKGsgPT4gKHsga2V5OiBrLCBsYWJlbDogaywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSksXHJcbiAgICAgICAgICB6b25lOiB7IHg6MCx5OjAsdzowLGg6IHRoaXMubGluZUggfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAobGFiZWwgPT4gKHsga2V5OiBsYWJlbCwgbGFiZWwsIHpvbmU6IHsgeDowLHk6MCx3OjAsaDowIH0gfSkpO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ2xpc3QnLCBpdGVtcywgem9uZTogeyB4OjAsIHk6MCwgdzowLCBoOiBoTGlzdCB9IH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuICBsYXlvdXRMZXZlbHMoKSB7XHJcbiAgICBcclxuICAgIGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7ICAgLy8gY29sdW1uYSBkZSBsYWJlbCArIHBhZGRpbmdcclxuICAgIGNvbnN0IHBhZFJpZ2h0ID0gODtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIGNvbnRlbnRYIC0gcGFkUmlnaHQ7XHJcblxyXG4gICAgXHJcbiAgICBsZXQgeSA9IDA7XHJcblxyXG4gICAgLy8gQWp1c3RhciBpdGVtc0RvbSBhIGNhbnRpZGFkIGRlIG5pdmVsZXNcclxuICAgIHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkgdGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuICAgIGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSkgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pdGVtc0RvbS5sZW5ndGggPSB0aGlzLmxldmVscy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICBsZXQgeCA9IGNvbnRlbnRYO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ21hcCcpO1xyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG4gICAgICAgIHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgIHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG4gICAgICAgIGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuICAgICAgICAgY29uc3Qgcm93cyA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbjtcclxuICAgICAgICAgIGNvbnN0IGl0ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldIDogeyBrZXk6IG51bGwsIGxhYmVsOiAnJywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9O1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgaXQuem9uZSA9IHsgeDogY29udGVudFgsIHk6IHkgKyBpICogdGhpcy5saW5lSCwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ2xpc3QnLCBpc1JlYWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgZmlsYXNcclxuICAgICAgICB0aGlzLl9wcnVuZVJvdyhMLCByb3dzKTtcclxuICAgICAgICB5ICs9IGhMaXN0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWp1c3RlcyBkZSBhbHRvIGludGVybm8gZGVsIGNvbnRlbmVkb3IgdmlzdWFsXHJcbiAgICBjb25zdCB0b3RhbEggPSB5O1xyXG4gICAgdGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArICdweCc7XHJcbiAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdG90YWxIICsgJ3B4JztcclxuXHJcbiAgICAvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcbiAgICB0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vIEVsaW1pbmEgbm9kb3MgRE9NIHNvYnJhbnRlcyBlbiBsYSBmaWxhIEwgYSBwYXJ0aXIgZGVsIMOtbmRpY2Uga2VlcFxyXG4gIF9wcnVuZVJvdyhMLCBrZWVwKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgLy8gc2kgbnVuY2Egc2UgY3Jlw7MsIG5hZGEgcXVlIGhhY2VyXHJcbiAgICBpZiAoIXJvdykgcmV0dXJuO1xyXG4gICAgZm9yIChsZXQgaiA9IGtlZXA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcclxuICAgICAgY29uc3QgZWwgPSByb3dbal07XHJcbiAgICAgIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHJvdy5sZW5ndGggPSBrZWVwO1xyXG4gIH1cclxuXHJcblxyXG4gIGVuc3VyZUl0ZW1Eb20oTCwgaSkge1xyXG4gICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgIHdoaWxlIChyb3cubGVuZ3RoIDw9IGkpIHJvdy5wdXNoKG51bGwpO1xyXG4gICAgaWYgKCFyb3dbaV0pIHtcclxuICAgICAgY29uc3QgZGl2ID0gdGhpcy5kb20oJ2RpdicsIFRvb2xzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7Jyk7XHJcbiAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgICByb3dbaV0gPSBkaXY7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93W2ldO1xyXG4gIH1cclxuXHJcbiAgcGFpbnRJdGVtRG9tKGRpdiwgTCwgaSwgaXQsIGtpbmQsIGlzUmVhbCA9IHRydWUpIHtcclxuICAgIGNvbnN0IHMgPSBkaXYuc3R5bGU7XHJcbiAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vIFBvc2ljacOzblxyXG4gICAgcy5sZWZ0ICAgPSBpdC56b25lLnggKyAncHgnO1xyXG4gICAgcy50b3AgICAgPSBpdC56b25lLnkgKyAncHgnO1xyXG4gICAgcy53aWR0aCAgPSBpdC56b25lLncgKyAncHgnO1xyXG4gICAgcy5oZWlnaHQgPSAoaXQuem9uZS5oIC0gMikgKyAncHgnO1xyXG5cclxuICAgIC8vIFRleHRvXHJcbiAgICBkaXYudGV4dENvbnRlbnQgPSBpc1JlYWwgPyBpdC5sYWJlbCA6ICcnO1xyXG5cclxuICAgIC8vIEVzdGFkb3NcclxuICAgIGNvbnN0IHNlbGVjdGVkICAgPSBpc1JlYWwgJiYgdGhpcy52YWx1ZVtMXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWVbTF0gPT09IGl0LmtleTtcclxuICAgIGNvbnN0IGluRm9jdXNMdmwgPSB0aGlzLmZvY3VzZWQgJiYgKHRoaXMuZm9jdXNMZXZlbCA9PT0gTCk7XHJcbiAgICBjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgKHRoaXMuZm9jdXNQYXRoW0xdID09PSBpdC5rZXkpO1xyXG4gICAgY29uc3QgaXNIb3ZlciAgICA9IGlzUmVhbCAmJiAodGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJiB0aGlzLmhvdmVyLmluZGV4ID09PSBpKTtcclxuXHJcbiAgICAvLyBFc3RpbG9zIGJhc2VcclxuICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICBzLmNvbG9yICAgICAgPSBjYy50ZXh0O1xyXG4gICAgcy5ib3JkZXIgICAgID0gJzFweCBzb2xpZCAnICsgY2MuYm9yZGVyO1xyXG4gICAgcy50ZXh0QWxpZ24gID0ga2luZCA9PT0gJ21hcCcgPyAnY2VudGVyJyA6ICdsZWZ0JztcclxuXHJcbiAgICAvLyBQcmlvcmlkYWQgdmlzdWFsOiBzZWxlY2Npb25hZG8gPiBmb2NvID4gaG92ZXIgPiBiYXNlXHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgIH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG4gICAgcy5vcGFjaXR5ID0gaXNSZWFsID8gJzEnIDogJzAnO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuICByU2l6ZSgpIHtcclxuICAgIHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoKSB7XHJcbiAgICB0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcbiAgICB0aGlzLmxheW91dExldmVscygpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG4gIF90b0xvY2FsKGUpIHtcclxuICAgIGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICBjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG4gICAgcmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcbiAgfVxyXG5cclxuICBfaGl0VGVzdChteCwgbXkpIHtcclxuICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgIGNvbnN0IHogPSBsdmwuem9uZTsgIC8vIHggeSB3IHlhIGluY2x1eWVuIGNvbnRlbnRYXHJcbiAgICBpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmxpbmVILCB3OiB6LncsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgaWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZXVwJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAoT3BjaW9uYWwpIHRlY2xhZG86IGludGVncmFyIG5hdmVnYWNpw7NuIGVuIEd1aSB5IHJlZW52aWFyIGFxdcOtIHNpIHNlIGRlc2VhXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICAgIHRoaXMuY2hhbmdlQ2IodGhpcy50YWJJbmRleCwgdGhpcy5pdGVtSW5kZXgsIG5ld1BhdGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBBUEkgcMO6YmxpY2EgPT09PT09PVxyXG4gIHNldFZhbHVlKHBhdGgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJlZSh0cmVlKSB7XHJcbiAgICB0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG4gICAgLy8gcmVjYWxjdWxhciBsZWFmTWF4IGVuIHByw7N4aW1hIHBhc2FkYVxyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBQdWJsaWNhY2nDs24gZGUgYWx0dXJhID09PT09PT1cclxuICBfY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpIHtcclxuICAgIGxldCBjID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBpKyspIGlmICh0aGlzLmxldmVsc1tpXS50eXBlID09PSAnbWFwJykgYysrO1xyXG4gICAgcmV0dXJuIGM7XHJcbiAgfVxyXG5cclxuICBfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcbiAgICByZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09ICdsaXN0JyA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuICB9XHJcblxyXG4gIF9wdWJsaXNoSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcbiAgICBjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuICAgIGNvbnN0IGxlYWZIICA9IGxlYWZMZW4gKiB0aGlzLmxpbmVIO1xyXG4gICAgY29uc3QgaW50ZXJIID0gaW50ZXIgKiAodGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXApO1xyXG4gICAgY29uc3QgdG90YWxIID0gaW50ZXJIICsgKGludGVyID8gdGhpcy5sZXZlbEdhcCA6IDApICsgbGVhZkg7XHJcblxyXG4gICAgLy8gQWN0dWFsaXphIG3DqXRyaWNhcyBkZWwgcHJvdG8gKGxvIHF1ZSBzdW1hIGVsIEdVSSlcclxuICAgIHRoaXMuaCA9IHRvdGFsSDtcclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuXHJcbiAgICAvLyBBdmlzYXIgYWwgR1VJIHkgcmVmcmVzY2FyIHpvbmFzXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDWSxNQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxHQUFHO0FBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0FBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0FBQ0EsRUFBRSxFQUFFLEVBQUUsSUFBSTtBQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUs7QUFDYixFQUFFLEtBQUssRUFBRSxLQUFLO0FBQ2QsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7QUFDQSxFQUFFLFVBQVUsRUFBRSxJ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QUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN6QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRSxhQUFhLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRztBQUN6QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN6RCxRQUFRLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDeEMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRztBQUN6QjtBQUNBLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDNUU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUMxQjtBQUNBLFFBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakg7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN0QixRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLFNBQVM7QUFDVCxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQztBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFDLGFBQWE7QUFDYixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDM0QsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsWUFBWSxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQ3pHLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxZQUFZLEVBQUUsV0FBVyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUc7QUFDOUQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQ7QUFDQSxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7QUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9HO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLEVBQUUsV0FBVyxLQUFLLEdBQUc7QUFDaEM7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUc7QUFDcEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxvQkFBb0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDcEosUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNySDtBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0ksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVB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O0FBQ3pIO0FBQ0E7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtBQUNBO0FBQ0E7QUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtBQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMvRixZQUFZLENBQUMsQ0FBQyxHQUFHLEVB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RTtBQUNGO0FBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0FBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMs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LENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ25DO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FB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QUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtBQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcs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QUFHLENBQUMsQ0FBQyxPQUFNO0FBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFDQUFxQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFFO0FBQ3BLLFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQ3RCLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDckUsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUU7QUFDMU4sU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQUs7QUFDaEMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksR0FBRTtBQUMzQixRQUFRLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7QUFDbEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUM7QUFDOUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsTUFBSztBQUMxQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUMzRDtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztBQUNoQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUM7QUFDMUI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDN0I7QUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBQztBQUN6QjtBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtBQUNsQztBQUNBLGdCQUFnQixRQUFRLENBQUM7QUFDekI7QUFDQSxvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUNyRixvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUMzRixvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTTtBQUMxRixvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtBQUN2RjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSTtBQUNqRTtBQUNBLGFBQWEsTUFBTTtBQUNuQjtBQUNBLGdCQUFnQixRQUFRLENBQUM7QUFDekI7QUFDQSxvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0FBQ2hILG9CQUFvQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU07QUFDL0csb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTTtBQUM5RyxvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNO0FBQ3BIO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFLO0FBQ3BELGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSTtBQUNuRTtBQUNBLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxHQUFHLEtBQUk7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sTUFBTTtBQUNyQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBRztBQUN6QyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDOUIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFJO0FBQ2hDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSTtBQUNoQyxTQUFTLE1BQU07QUFDZixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0FBQ3RDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUk7QUFDeEMsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDM0lPLE1BQU0sTUFBTSxTQUFTLEtBQUssQ0FBQztBQUNsQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLFFBQVEsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFLO0FBQ3hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUc7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtBQUNqRDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDeEI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEVBQUM7QUFDbkMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRTtBQUMvQixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDM0U7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUMzQixRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSTtBQUM3QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU07QUFDckMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUU7QUFDckIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUU7QUFDdEI7QUFDQSxRQUFRLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFlBQVksR0FBRyxHQUFHLE1BQUs7QUFDdkIsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxLQUFJO0FBQy9FO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFFO0FBQ2xNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTTtBQUN0RSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUk7QUFDbkUsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3JELFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFFO0FBQ3BFLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssR0FBRztBQUNaO0FBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDeEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztBQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQ3hCO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDbEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzdCLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFFO0FBQzNGLGlCQUFpQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBQztBQUNuRCxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUNuRCxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDdkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEtBQUs7QUFDdEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7QUFDMUIsS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0FBQy9CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLE1BQUs7QUFDdEIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFFO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDN0IsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQztBQUNsQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQzVELFNBQVMsTUFBTTtBQUNmLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDMUIsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFLO0FBQ3pDO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0FBQ0EsWUFBWSxDQUFDLEdBQUcsRUFBQztBQUNqQixZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFLO0FBQzNFO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUU7QUFDMUIsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUM7QUFDeEMsYUFBYSxNQUFNO0FBQ25CLGdCQUFnQixDQUFDLEdBQUcsRUFBQztBQUNyQixnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUM7QUFDN0IsYUFBYTtBQUNiO0FBQ0E7QUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUU7QUFDakM7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQztBQUNoQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakM7QUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsWUFBWSxRQUFRLENBQUM7QUFDckI7QUFDQSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztBQUNoRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSztBQUNyRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSztBQUNsRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztBQUN0RjtBQUNBLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxNQUFNO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHO0FBQ3hCO0FBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE9BQU07QUFDdEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0FBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNsQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUM7QUFDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDckM7QUFDQSxRQUFRLE9BQU8sSUFBSTtBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUU7QUFDL0I7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDO0FBQ3ZDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDckIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0FBQ2xEO0FBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNwUE8sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQjtBQUNBLFFB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QUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxHQUFHO0FBQ2xDO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNyRDtBQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztBQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QjtBQUNBLFNBQVM7QUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLFFBQVEsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xHO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7QUFDQSxRQUFRLElB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QVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUIsUUFBUTtBQUNSO0FBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7QUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckM7QUFDQSxTQUFTLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMvRCxTQUFTLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2hELFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRTtBQUM3QixTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsU0FBUyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHO0FBQ3hCLE9BQU8sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN2QyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEMsZUFBZSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNuRDtBQUNBLE9BQU8sR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQSxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDeEQsT0FBTyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLE9BQU87QUFDUDtBQUNBLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUNwRDtBQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0UsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtBQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7QUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUN0QztBQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7QUFDdEM7QUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7QUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtBQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0FBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7QUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0s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R0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0FBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7QUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBO0FBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVEO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDcEM7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztBQUM1QyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDckI7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQ3BhTyxNQUFNLEdBQUcsU0FBUyxLQUFLLENBQUM7QUFDL0I7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxR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Q0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDdEUsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7QUFDQSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUM7QUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMxQixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFlBQVksT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZEO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFD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LEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtBQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzNEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3REO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDakM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxHQUFHLENBQUMsR0FBRztBQUNYO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3hDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDdkI7QUFDQSxRQUFRLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHO0FBQzNDO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDdkY7QUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUI7QUFDQSxZQUFZLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRztBQUM5QjtBQUNBLGdCQUFnQixJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztBQUNqRSxnQkFBZ0IsSUFBSSxhQUFhLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7QUFDdkU7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztBQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDO0FBQ25EO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN2RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQztBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztBQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDakQ7QUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQy9DLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtBQUN6RCxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlEQUF5RCxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1TDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQ7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDdEosUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0gsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEo7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckIsUUFBUSxJQUFJ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R0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztBQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0FBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtBQUNBLE1BQU07QUFDTjtBQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRTtB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QSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztBQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxD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SSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksR0FBRyxPQUFPO0FBQzVDLFFBQVEsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0FBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0FBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtBQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0FBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNGLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0Y7QUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFB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QUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxH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QUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7QUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7QUFDOUI7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JEO0FBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxH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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtBQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0FBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6RDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDckM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0FBQ0E7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtBQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0FBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDclUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGdEQUFnRCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcks7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNsSSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJ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QUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUMvRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDdkMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QyxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFDO0FBQzdELFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUM7QUFDcEQsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQztBQUNyRCxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDO0FBQ3pELFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVE7QUFDakQsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7QUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7QUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUN0RDtBQUNBO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxD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LElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztBQUNBLFFBQVEsQ0FBQyxD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Q0FBQztBQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztBQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDaEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNyRCxNQUFNLElBQUks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QUNBLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtBQUNBO0FBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtBQUNBO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0FBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDcEQsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUks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RyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDeEQsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDNUQsUUFBUSxNQUFNO0FBQ2QsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtBQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtBQUNBLElBQUksSUFBSSxPQUFPO0FBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzNDO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtBQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEIsR0FBRztBQUNIOztBQzdTTyxNQUFNLFNBQVMsU0FBUyxLQUFLLENBQUM7QUFDckM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENB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QjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDaEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7QUFDakQ7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENB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SyxDQUFDO0FBQzNDO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUN2TDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3JCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFDOUQsUUFBUSxPQUFPLEdBQUc7QUFDbEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDekI7QUFDQSxZQUFZ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QUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFD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QUksQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7QUFDakQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUU7QUFDbEQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN4RDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDckY7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUNuQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxF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QUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkIsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELFNBQVM7QUFDVDtBQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVELFNBQVM7QUFDVDtBQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0FBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FB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QSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRDtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5RjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztBQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0FBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7QUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtBQUN6RTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7QUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0FBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksRUFB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LEdBQUc7QUFDL0I7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDclJBO0FBSUE7QUFDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO0FBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0FBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcseUNBQXlDLENBQUMsQ0FBQztBQUM1RixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsT0FBTyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsT0FBTyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQzFGLEVBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDckQ7QUFDQTtBQUNBLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRTtBQUN0QixJQUFJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQyxNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNoQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRyxRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsT0FBTyxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN4QztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2RCxPQUFPLE1BQU07QUFDYixRQUFRLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4QyxPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUksT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3hDLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7QUFDL0IsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoRCxJQUFJLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQyxJQUFJLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNqQyxNQUFNLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNO0FBQzlCLE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsYUFBYSxHQUFHO0FBQ2xCLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUN0RCxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsY0FBYyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ25DLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNoRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3BELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdkMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELEtBQUs7QUFDTCxJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFLFdBQVcsR0FBRztBQUNoQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMzQixJQUFJLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUM1QztBQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QixJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBLElBQUksT0FBTyxJQUFJLEVBQUU7QUFDakIsTUFBTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDaEM7QUFDQSxRQUFRLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNO0FBQ2hDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDekIsVUFBVSxJQUFJLEVBQUUsS0FBSztBQUNyQixVQUFVLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pGLFVBQVUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDN0MsU0FBUyxDQUFDLENBQUM7QUFDWDtBQUNBLFFBQVEsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFDLFFBQVEsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTTtBQUM3RCxRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0IsT0FBTyxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN4QztBQUNBLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUYsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDeEUsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckYsUUFBUSxNQUFNO0FBQ2QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQLE1BQU0sS0FBSyxFQUFFLENBQUM7QUFDZCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFLFlBQVksR0FBRztBQUNqQjtBQUNBLElBQUksTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDMUMsSUFBSSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdkIsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkO0FBQ0E7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0UsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwRSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hHLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzlDO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLE1BQWtCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ25DLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtBQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QztBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3pCO0FBQ0E7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFB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QUM7QUFDdkMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUMxQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFO0FBQ3JCLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQztBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPO0FBQ3JCLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUMsTUFBTSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdELEtBQUs7QUFDTCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0QixJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsSUFBSSxJQUFJLENBQUMsR0FB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QUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDakU7QUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO0FBQzVDO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3BFO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZjtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEQ7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDdkU7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN0QyxJQUFJLElBQUks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Q0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BFO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxRQUFRLENBQUM7QUFDMUUsU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUMvQztBQUNBLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7QUFDQSxJQUFJLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN2QixJQUFJLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUM1QjtBQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDL0QsSUFBSSxJQUFJLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2pFO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUN6QyxNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FB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Q0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQztBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7QUFDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNoRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQ1osSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMs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 diff --git a/src/proto/TreeList.js b/src/proto/TreeList.js index 03714d7..046163a 100644 --- a/src/proto/TreeList.js +++ b/src/proto/TreeList.js @@ -132,8 +132,12 @@ export class TreeList extends Proto { // ======= Layout (zonas & DOM) ======= layoutLevels() { - const padX = 8; - const w = this.zone.w - padX * 2; + + const contentX = (this.sa || 100) + 8; // columna de label + padding + const padRight = 8; + const w = this.zone.w - contentX - padRight; + + let y = 0; // Ajustar itemsDom a cantidad de niveles @@ -145,11 +149,15 @@ export class TreeList extends Proto { for (let L = 0; L < this.levels.length; L++) { const lvl = this.levels[L]; + const row = this.itemsDom[L]; if (lvl.type === 'map') { const n = Math.max(1, lvl.items.length); const cellW = Math.floor(w / n); - lvl.zone = { x: padX, y, w, h: this.lineH }; - let x = padX; + + lvl.zone = { x: contentX, y, w, h: this.lineH }; + let x = contentX; + + for (let i = 0; i < lvl.items.length; i++) { const it = lvl.items[i]; it.zone = { x, y, w: cellW, h: this.lineH }; @@ -157,20 +165,27 @@ export class TreeList extends Proto { this.paintItemDom(dom, L, i, it, 'map'); x += cellW; } + // eliminar DOM sobrante si antes había más celdas + this._pruneRow(L, lvl.items.length); y += this.lineH + this.levelGap; } else { // lista/hoja: reservar h según leafMax const n = lvl.items.length; const hList = Math.max(n, this.leafMax) * this.lineH; - lvl.zone = { x: padX, y, w, h: hList }; + + lvl.zone = { x: contentX, y, w, h: hList }; - for (let i = 0; i < Math.max(n, this.leafMax); i++) { + const rows = Math.max(n, this.leafMax); + for (let i = 0; i < rows; i++) { const isReal = i < n; const it = isReal ? lvl.items[i] : { key: null, label: '', zone: { x:0,y:0,w:0,h:0 } }; - it.zone = { x: padX, y: y + i * this.lineH, w, h: this.lineH }; + + it.zone = { x: contentX, y: y + i * this.lineH, w, h: this.lineH }; const dom = this.ensureItemDom(L, i); this.paintItemDom(dom, L, i, it, 'list', isReal); } + // eliminar DOM sobrante si antes había más filas + this._pruneRow(L, rows); y += hList; } } @@ -185,6 +200,21 @@ export class TreeList extends Proto { this._publishHeight(); } + + + // Elimina nodos DOM sobrantes en la fila L a partir del índice keep + _pruneRow(L, keep) { + const row = this.itemsDom[L]; + // si nunca se creó, nada que hacer + if (!row) return; + for (let j = keep; j < row.length; j++) { + const el = row[j]; + if (el && el.parentNode) el.parentNode.removeChild(el); + } + row.length = keep; + } + + ensureItemDom(L, i) { const row = this.itemsDom[L]; while (row.length <= i) row.push(null); @@ -257,10 +287,10 @@ export class TreeList extends Proto { } _hitTest(mx, my) { - for (let L = 0; L < this.levels.length; L++) { - const lvl = this.levels[L]; - const z = lvl.zone; - if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + const z = lvl.zone; // x y w ya incluyen contentX + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; if (lvl.type === 'map') { for (let i = 0; i < lvl.items.length; i++) { From 1adee0d0f6627f49215405832fa33ca732ec4500 Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Fri, 5 Sep 2025 14:39:08 -0300 Subject: [PATCH 09/17] modifique ejemplo treelist --- examples/uil_treelist.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/uil_treelist.html b/examples/uil_treelist.html index 6201ae3..840afae 100644 --- a/examples/uil_treelist.html +++ b/examples/uil_treelist.html @@ -75,7 +75,7 @@ ); }, }); // add() ya soporta "treelist" en el switch del factory :contentReference[oaicite:6]{index=6} - +/* // Botones utilitarios para mostrar el modo foco y cambio de datos g.add('button', { name: '', @@ -114,7 +114,7 @@ value: 'Opción 2', callback: (v) => log(`Otra lista: ${v}`) }); - +*/ g.open(); // ----------------------------- From 5540ef926d31dbb7458f4fba31e770bcb906e99c Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Fri, 5 Sep 2025 22:45:23 -0300 Subject: [PATCH 10/17] fix --- build/uil.js | 6 +- build/uil.min.js | 6 +- build/uil.module.js | 6 +- examples/uil_treelist.html | 144 ++++++++++++------------------------- src/proto/TreeList.js | 4 ++ 5 files changed, 63 insertions(+), 103 deletions(-) diff --git a/build/uil.js b/build/uil.js index 3173097..20a4a3c 100644 --- a/build/uil.js +++ b/build/uil.js @@ -8535,9 +8535,13 @@ this.value = newPath.slice(); this.update(); + + // ✅ Actualiza objeto enlazado (si existe) y dispara callbacks “clásicos” + this.send(newPath); // escribe en objectLink[objectKey] si hay referencia this.changeCb(this.tabIndex, this.itemIndex, newPath); } + // ======= API pública ======= setValue(path) { this.value = Array.isArray(path) ? path.slice() : []; @@ -9484,4 +9488,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvcHJvdG8vVHJlZUxpc3QuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBBUEkgcMO6YmxpY2EgZXNwZXJhZGE6XHJcbiAgICAvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KVxyXG4gICAgLy8gby5mb2N1c2VkIChib29sKSwgby5mb2N1c1BhdGggKGFycmF5KSwgby5mb2N1c0xldmVsIChudW1iZXIpXHJcbiAgICAvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcbiAgICBvLnNlbGVjdGFibGUgPSB0cnVlO1xyXG4gICAgby5uYW1lID0gby5uYW1lIHx8ICdUcmVlTGlzdCc7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICAvLyBEYXRvcyAmIGVzdGFkb1xyXG4gICAgdGhpcy50cmVlICAgICAgID0gby50cmVlIHx8IHt9O1xyXG4gICAgdGhpcy52YWx1ZSAgICAgID0gQXJyYXkuaXNBcnJheShvLnZhbHVlKSA/IG8udmFsdWUuc2xpY2UoKSA6IFtdO1xyXG4gICAgdGhpcy5mb2N1c2VkICAgID0gISFvLmZvY3VzZWQ7XHJcbiAgICB0aGlzLmZvY3VzUGF0aCAgPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09ICdudW1iZXInID8gby5mb2N1c0xldmVsIDogLTE7XHJcblxyXG4gICAgdGhpcy50YWJJbmRleCAgID0gby50YWJJbmRleCA/PyBudWxsO1xyXG4gICAgdGhpcy5pdGVtSW5kZXggID0gby5pdGVtSW5kZXggPz8gbnVsbDtcclxuXHJcbiAgICAvLyBDYWxsYmFja1xyXG4gICAgdGhpcy5jaGFuZ2VDYiA9IHR5cGVvZiBvLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nID8gby5vbkNoYW5nZSA6ICgpID0+IHt9O1xyXG5cclxuICAgIC8vIExheW91dCBpbnRlcm5vIC8gcHVibGljYWNpw7NuIGRlIGFsdHVyYVxyXG4gICAgdGhpcy5saW5lSCAgICA9IHRoaXMuaDsgICAgICAgICAgICAgICAvLyBhbHRvIGRlIFVOQSBmaWxhXHJcbiAgICB0aGlzLmxldmVsR2FwID0gdGhpcy5jb2xvcnMuc3kgfHwgMjsgIC8vIHNlcGFyYWNpw7NuIHZlcnRpY2FsIGVudHJlIG5pdmVsZXNcclxuICAgIHRoaXMubGVhZk1heCAgPSAwOyAgICAgICAgICAgICAgICAgICAgLy8gc2UgY2FsY3VsYSBlbiByU2l6ZSgpXHJcblxyXG4gICAgLy8gTW9kZWxvIHZpc3VhbFxyXG4gICAgdGhpcy5sZXZlbHMgICA9IFtdOyAgIC8vIFt7dHlwZTonbWFwJ3wnbGlzdCcsIGl0ZW1zOlt7a2V5LGxhYmVsLHpvbmV9XSwgem9uZTp7eCx5LHcsaH19Li4uXVxyXG4gICAgdGhpcy5pdGVtc0RvbSA9IFtdOyAgIC8vIGVzcGVqbyBET00gcG9yIG5pdmVsXHJcbiAgICB0aGlzLmhvdmVyICAgID0geyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG5cclxuICAgIC8vIENvbnRlbmVkb3IgaW50ZXJubyAoYWJzb2x1dG8pXHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSgnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnbGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7Jyk7XHJcbiAgICB0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEhlbHBlcnMgZGUgdGlwbyA9PT09PT09XHJcbiAgc3RhdGljIGlzTWFwKG5vZGUpICB7IHJldHVybiBub2RlICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShub2RlKTsgfVxyXG4gIHN0YXRpYyBpc0xpc3Qobm9kZSkgeyByZXR1cm4gQXJyYXkuaXNBcnJheShub2RlKTsgfVxyXG5cclxuICAvLyA9PT09PT09IFJlY29ycmlkbyBkZSBkYXRvcyA9PT09PT09XHJcbiAgZ2V0Tm9kZUF0UGF0aChwYXRoKSB7XHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBwYXRoW2ldKSkgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgICBub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBMbGVnYW1vcyBhIHVuYSBsaXN0YTogeWEgbm8gaGF5IG3DoXMgY2xhdmVzIHbDoWxpZGFzXHJcbiAgICAgICAgaWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuICB9XHJcblxyXG4gIC8vIEF1dG9jb21wbGV0YXI6IGJhamEgcG9yIHByaW1lcmFzIGNsYXZlcyBkZSBjYWRhIG1hcGEgaGFzdGEgYWxjYW56YXIgdW5hIGxpc3RhXHJcbiAgYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2VQYXRoKSB7XHJcbiAgICBsZXQgeyBub2RlIH0gPSB0aGlzLmdldE5vZGVBdFBhdGgoYmFzZVBhdGgpO1xyXG4gICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoLnNsaWNlKCk7XHJcbiAgICB3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgY29uc3QgazAgPSBrZXlzWzBdO1xyXG4gICAgICBwYXRoLnB1c2goazApO1xyXG4gICAgICBub2RlID0gbm9kZVtrMF07XHJcbiAgICB9XHJcbiAgICAvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2EgdW4gw610ZW0gZmluYWwgZGUgbGEgaG9qYVxyXG4gICAgcmV0dXJuIHBhdGg7XHJcbiAgfVxyXG5cclxuICAvLyBSdXRhIGFjdGl2YSAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpbm8gdmFsdWUpXHJcbiAgZ2V0QWN0aXZlUGF0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgPyB0aGlzLmZvY3VzUGF0aCA6IHRoaXMudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IFRhbWHDsW8gZGUgaG9qYSBtw6F4aW1vIChwYXJhIGxheW91dCBlc3RhYmxlKSA9PT09PT09XHJcbiAgY29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBub2RlLmxlbmd0aDtcclxuICAgIGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHJldHVybiAwO1xyXG4gICAgbGV0IG0gPSAwO1xyXG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XHJcbiAgICAgIG0gPSBNYXRoLm1heChtLCB0aGlzLmNvbXB1dGVMZWFmTWF4KG5vZGVba10pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBDb25zdHJ1Y2Npw7NuIGRlIG5pdmVsZXMgKG1vZGVsbyBsw7NnaWNvKSA9PT09PT09XHJcbiAgYnVpbGRMZXZlbHMoKSB7XHJcbiAgICB0aGlzLmxldmVscy5sZW5ndGggPSAwO1xyXG4gICAgY29uc3QgYWN0aXZlUGF0aCA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpO1xyXG5cclxuICAgIGxldCBub2RlID0gdGhpcy50cmVlO1xyXG4gICAgbGV0IGxldmVsID0gMDtcclxuXHJcbiAgICB3aGlsZSAobm9kZSkge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBpbnRlcm1lZGlvOiBjbGF2ZXMgZGVsIG1hcGEgKGhvcml6b250YWwpXHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICAgIGlmICgha2V5cy5sZW5ndGgpIGJyZWFrO1xyXG4gICAgICAgIHRoaXMubGV2ZWxzLnB1c2goe1xyXG4gICAgICAgICAgdHlwZTogJ21hcCcsXHJcbiAgICAgICAgICBpdGVtczoga2V5cy5tYXAoayA9PiAoeyBrZXk6IGssIGxhYmVsOiBrLCB6b25lOiB7IHg6MCx5OjAsdzowLGg6MCB9IH0pKSxcclxuICAgICAgICAgIHpvbmU6IHsgeDowLHk6MCx3OjAsaDogdGhpcy5saW5lSCB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBhY3RpdmVQYXRoW2xldmVsXTtcclxuICAgICAgICBpZiAoIW5leHRLZXkgfHwgIW5vZGUuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIGJyZWFrO1xyXG4gICAgICAgIG5vZGUgPSBub2RlW25leHRLZXldO1xyXG4gICAgICB9IGVsc2UgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkge1xyXG4gICAgICAgIC8vIE5pdmVsIGhvamE6IGxpc3RhIHZlcnRpY2FsXHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSBub2RlLm1hcChsYWJlbCA9PiAoeyBrZXk6IGxhYmVsLCBsYWJlbCwgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSk7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChpdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCkgKiB0aGlzLmxpbmVIO1xyXG4gICAgICAgIHRoaXMubGV2ZWxzLnB1c2goeyB0eXBlOiAnbGlzdCcsIGl0ZW1zLCB6b25lOiB7IHg6MCwgeTowLCB3OjAsIGg6IGhMaXN0IH0gfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgbGV2ZWwrKztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gTGF5b3V0ICh6b25hcyAmIERPTSkgPT09PT09PVxyXG4gIGxheW91dExldmVscygpIHtcclxuICAgIFxyXG4gICAgY29uc3QgY29udGVudFggPSAodGhpcy5zYSB8fCAxMDApICsgODsgICAvLyBjb2x1bW5hIGRlIGxhYmVsICsgcGFkZGluZ1xyXG4gICAgY29uc3QgcGFkUmlnaHQgPSA4O1xyXG4gICAgY29uc3QgdyA9IHRoaXMuem9uZS53IC0gY29udGVudFggLSBwYWRSaWdodDtcclxuXHJcbiAgICBcclxuICAgIGxldCB5ID0gMDtcclxuXHJcbiAgICAvLyBBanVzdGFyIGl0ZW1zRG9tIGEgY2FudGlkYWQgZGUgbml2ZWxlc1xyXG4gICAgd2hpbGUgKHRoaXMuaXRlbXNEb20ubGVuZ3RoIDwgdGhpcy5sZXZlbHMubGVuZ3RoKSB0aGlzLml0ZW1zRG9tLnB1c2goW10pO1xyXG4gICAgZm9yIChsZXQgTCA9IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCA8IHRoaXMuaXRlbXNEb20ubGVuZ3RoOyBMKyspIHtcclxuICAgICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLml0ZW1zRG9tW0xdKSBpZiAoZWwgJiYgZWwucGFyZW50Tm9kZSkgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLml0ZW1zRG9tLmxlbmd0aCA9IHRoaXMubGV2ZWxzLmxlbmd0aDtcclxuXHJcbiAgICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgICBpZiAobHZsLnR5cGUgPT09ICdtYXAnKSB7XHJcbiAgICAgICAgY29uc3QgbiA9IE1hdGgubWF4KDEsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgIGNvbnN0IGNlbGxXID0gTWF0aC5mbG9vcih3IC8gbik7XHJcblxyXG4gICAgICAgIGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgIGxldCB4ID0gY29udGVudFg7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdCA9IGx2bC5pdGVtc1tpXTtcclxuICAgICAgICAgIGl0LnpvbmUgPSB7IHgsIHksIHc6IGNlbGxXLCBoOiB0aGlzLmxpbmVIIH07XHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbWFwJyk7XHJcbiAgICAgICAgICB4ICs9IGNlbGxXO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgY2VsZGFzXHJcbiAgICAgICAgdGhpcy5fcHJ1bmVSb3coTCwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgeSArPSB0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsaXN0YS9ob2phOiByZXNlcnZhciBoIHNlZ8O6biBsZWFmTWF4XHJcbiAgICAgICAgY29uc3QgbiA9IGx2bC5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICBcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IGhMaXN0IH07XHJcblxyXG4gICAgICAgICBjb25zdCByb3dzID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KTtcclxuICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBuO1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBpc1JlYWwgPyBsdmwuaXRlbXNbaV0gOiB7IGtleTogbnVsbCwgbGFiZWw6ICcnLCB6b25lOiB7IHg6MCx5OjAsdzowLGg6MCB9IH07XHJcbiAgICAgICAgICBcclxuICAgICAgICAgICBpdC56b25lID0geyB4OiBjb250ZW50WCwgeTogeSArIGkgKiB0aGlzLmxpbmVILCB3LCBoOiB0aGlzLmxpbmVIIH07XHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbGlzdCcsIGlzUmVhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBmaWxhc1xyXG4gICAgICAgIHRoaXMuX3BydW5lUm93KEwsIHJvd3MpO1xyXG4gICAgICAgIHkgKz0gaExpc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBanVzdGVzIGRlIGFsdG8gaW50ZXJubyBkZWwgY29udGVuZWRvciB2aXN1YWxcclxuICAgIGNvbnN0IHRvdGFsSCA9IHk7XHJcbiAgICB0aGlzLnpvbmUuaCA9IHRvdGFsSCArIHRoaXMubWFyZ2luO1xyXG4gICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuem9uZS5oICsgJ3B4JztcclxuICAgIHRoaXMuc1syXS5oZWlnaHQgPSB0b3RhbEggKyAncHgnO1xyXG5cclxuICAgIC8vIFB1YmxpY2FyIGFsdG8gdG90YWwgYWwgR1VJIChzdW1hcsOhIHUuaClcclxuICAgIHRoaXMuX3B1Ymxpc2hIZWlnaHQoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8gRWxpbWluYSBub2RvcyBET00gc29icmFudGVzIGVuIGxhIGZpbGEgTCBhIHBhcnRpciBkZWwgw61uZGljZSBrZWVwXHJcbiAgX3BydW5lUm93KEwsIGtlZXApIHtcclxuICAgIGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcbiAgICAvLyBzaSBudW5jYSBzZSBjcmXDsywgbmFkYSBxdWUgaGFjZXJcclxuICAgIGlmICghcm93KSByZXR1cm47XHJcbiAgICBmb3IgKGxldCBqID0ga2VlcDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xyXG4gICAgICBjb25zdCBlbCA9IHJvd1tqXTtcclxuICAgICAgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgcm93Lmxlbmd0aCA9IGtlZXA7XHJcbiAgfVxyXG5cclxuXHJcbiAgZW5zdXJlSXRlbURvbShMLCBpKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgd2hpbGUgKHJvdy5sZW5ndGggPD0gaSkgcm93LnB1c2gobnVsbCk7XHJcbiAgICBpZiAoIXJvd1tpXSkge1xyXG4gICAgICBjb25zdCBkaXYgPSB0aGlzLmRvbSgnZGl2JywgVG9vbHMuY3NzLnR4dCArICdwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsnKTtcclxuICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcbiAgICAgIHJvd1tpXSA9IGRpdjtcclxuICAgIH1cclxuICAgIHJldHVybiByb3dbaV07XHJcbiAgfVxyXG5cclxuICBwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgcyA9IGRpdi5zdHlsZTtcclxuICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy8gUG9zaWNpw7NuXHJcbiAgICBzLmxlZnQgICA9IGl0LnpvbmUueCArICdweCc7XHJcbiAgICBzLnRvcCAgICA9IGl0LnpvbmUueSArICdweCc7XHJcbiAgICBzLndpZHRoICA9IGl0LnpvbmUudyArICdweCc7XHJcbiAgICBzLmhlaWdodCA9IChpdC56b25lLmggLSAyKSArICdweCc7XHJcblxyXG4gICAgLy8gVGV4dG9cclxuICAgIGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogJyc7XHJcblxyXG4gICAgLy8gRXN0YWRvc1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgICA9IGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG4gICAgY29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiAodGhpcy5mb2N1c0xldmVsID09PSBMKTtcclxuICAgIGNvbnN0IGZvY3VzTWF0Y2ggPSBpc1JlYWwgJiYgaW5Gb2N1c0x2bCAmJiAodGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleSk7XHJcbiAgICBjb25zdCBpc0hvdmVyICAgID0gaXNSZWFsICYmICh0aGlzLmhvdmVyLmxldmVsID09PSBMICYmIHRoaXMuaG92ZXIuaW5kZXggPT09IGkpO1xyXG5cclxuICAgIC8vIEVzdGlsb3MgYmFzZVxyXG4gICAgcy5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuICAgIHMuY29sb3IgICAgICA9IGNjLnRleHQ7XHJcbiAgICBzLmJvcmRlciAgICAgPSAnMXB4IHNvbGlkICcgKyBjYy5ib3JkZXI7XHJcbiAgICBzLnRleHRBbGlnbiAgPSBraW5kID09PSAnbWFwJyA/ICdjZW50ZXInIDogJ2xlZnQnO1xyXG5cclxuICAgIC8vIFByaW9yaWRhZCB2aXN1YWw6IHNlbGVjY2lvbmFkbyA+IGZvY28gPiBob3ZlciA+IGJhc2VcclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgfSBlbHNlIGlmIChmb2N1c01hdGNoKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICB9IGVsc2UgaWYgKGlzSG92ZXIpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbGFzIGRlIHBhZGRpbmcgaW52aXNpYmxlcyBlbiBob2phXHJcbiAgICBzLm9wYWNpdHkgPSBpc1JlYWwgPyAnMScgOiAnMCc7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IENpY2xvIGRlIHZpZGEgPT09PT09PVxyXG4gIHJTaXplKCkge1xyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy5idWlsZExldmVscygpO1xyXG4gICAgdGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEludGVyYWNjacOzbiA9PT09PT09XHJcbiAgX3RvTG9jYWwoZSkge1xyXG4gICAgY29uc3QgbXggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgIGNvbnN0IG15ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnk7XHJcbiAgICByZXR1cm4geyB4OiBteCwgeTogbXkgfTtcclxuICB9XHJcblxyXG4gIF9oaXRUZXN0KG14LCBteSkge1xyXG4gIGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgeiA9IGx2bC56b25lOyAgLy8geCB5IHcgeWEgaW5jbHV5ZW4gY29udGVudFhcclxuICAgIGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaCkgY29udGludWU7XHJcblxyXG4gICAgICBpZiAobHZsLnR5cGUgPT09ICdtYXAnKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGx2bC5pdGVtc1tpXS56b25lO1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiB0cnVlIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5Sb3dzID0gTWF0aC5tYXgobHZsLml0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgY29uc3QgaXR6ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldLnpvbmUgOiB7IHg6IHoueCwgeTogei55ICsgaSAqIHRoaXMubGluZUgsIHc6IHoudywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiBpc1JlYWwgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IEw6IC0xLCBpOiAtMSwgcmVhbDogZmFsc2UgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vtb3ZlJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgdGhpcy5ob3ZlciA9IChodC5MICE9PSAtMSAmJiBodC5yZWFsKSA/IHsgbGV2ZWw6IGh0LkwsIGluZGV4OiBodC5pIH0gOiB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZWRvd24nKSB7XHJcbiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fdG9Mb2NhbChlKTtcclxuICAgICAgY29uc3QgaHQgPSB0aGlzLl9oaXRUZXN0KHgsIHkpO1xyXG4gICAgICBpZiAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdEF0KGh0LkwsIGh0LmkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNldXAnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIChPcGNpb25hbCkgdGVjbGFkbzogaW50ZWdyYXIgbmF2ZWdhY2nDs24gZW4gR3VpIHkgcmVlbnZpYXIgYXF1w60gc2kgc2UgZGVzZWFcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIFNlbGVjY2nDs24gKyBhdXRvY29tcGxldGFkbyArIG5vdGlmaWNhY2nDs25cclxuICBfc2VsZWN0QXQoTCwgaSkge1xyXG4gICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICBjb25zdCBjaG9zZW4gPSBsdmwuaXRlbXNbaV07XHJcbiAgICBpZiAoIWNob3NlbiB8fCAhY2hvc2VuLmtleSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpO1xyXG4gICAgYmFzZVtMXSA9IGNob3Nlbi5rZXk7XHJcblxyXG4gICAgY29uc3QgbmV3UGF0aCA9IHRoaXMuYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2UpO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSBuZXdQYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEFQSSBww7pibGljYSA9PT09PT09XHJcbiAgc2V0VmFsdWUocGF0aCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRUcmVlKHRyZWUpIHtcclxuICAgIHRoaXMudHJlZSA9IHRyZWUgfHwge307XHJcbiAgICAvLyByZWNhbGN1bGFyIGxlYWZNYXggZW4gcHLDs3hpbWEgcGFzYWRhXHJcbiAgICB0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXMoeyBmb2N1c2VkLCBmb2N1c1BhdGgsIGZvY3VzTGV2ZWwgfSkge1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c2VkID09PSAnYm9vbGVhbicpIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb2N1c1BhdGgpKSB0aGlzLmZvY3VzUGF0aCA9IGZvY3VzUGF0aC5zbGljZSgpO1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c0xldmVsID09PSAnbnVtYmVyJykgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IFB1YmxpY2FjacOzbiBkZSBhbHR1cmEgPT09PT09PVxyXG4gIF9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCkge1xyXG4gICAgbGV0IGMgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxldmVscy5sZW5ndGg7IGkrKykgaWYgKHRoaXMubGV2ZWxzW2ldLnR5cGUgPT09ICdtYXAnKSBjKys7XHJcbiAgICByZXR1cm4gYztcclxuICB9XHJcblxyXG4gIF9nZXRDdXJyZW50TGVhZkxlbmd0aCgpIHtcclxuICAgIGNvbnN0IGxhc3QgPSB0aGlzLmxldmVsc1t0aGlzLmxldmVscy5sZW5ndGggLSAxXTtcclxuICAgIHJldHVybiBsYXN0ICYmIGxhc3QudHlwZSA9PT0gJ2xpc3QnID8gbGFzdC5pdGVtcy5sZW5ndGggOiAwO1xyXG4gIH1cclxuXHJcbiAgX3B1Ymxpc2hIZWlnaHQoKSB7XHJcbiAgICBjb25zdCBpbnRlciA9IHRoaXMuX2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKTtcclxuICAgIGNvbnN0IGxlYWZMZW4gPSBNYXRoLm1heCh0aGlzLmxlYWZNYXgsIHRoaXMuX2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkpO1xyXG4gICAgY29uc3QgbGVhZkggID0gbGVhZkxlbiAqIHRoaXMubGluZUg7XHJcbiAgICBjb25zdCBpbnRlckggPSBpbnRlciAqICh0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcCk7XHJcbiAgICBjb25zdCB0b3RhbEggPSBpbnRlckggKyAoaW50ZXIgPyB0aGlzLmxldmVsR2FwIDogMCkgKyBsZWFmSDtcclxuXHJcbiAgICAvLyBBY3R1YWxpemEgbcOpdHJpY2FzIGRlbCBwcm90byAobG8gcXVlIHN1bWEgZWwgR1VJKVxyXG4gICAgdGhpcy5oID0gdG90YWxIO1xyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG5cclxuICAgIC8vIEF2aXNhciBhbCBHVUkgeSByZWZyZXNjYXIgem9uYXNcclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYWluKSB0aGlzLm1haW4uY2FsYygpO1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBCb29sIH0gZnJvbSAnLi4vcHJvdG8vQm9vbC5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL3Byb3RvL0J1dHRvbi5qcyc7XHJcbmltcG9ydCB7IENpcmN1bGFyIH0gZnJvbSAnLi4vcHJvdG8vQ2lyY3VsYXIuanMnO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL3Byb3RvL0NvbG9yLmpzJztcclxuaW1wb3J0IHsgRnBzIH0gZnJvbSAnLi4vcHJvdG8vRnBzLmpzJztcclxuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9wcm90by9HcmFwaC5qcyc7XHJcbmltcG9ydCB7IEdyb3VwICB9IGZyb20gJy4uL3Byb3RvL0dyb3VwLmpzJztcclxuaW1wb3J0IHsgSm95c3RpY2sgfSBmcm9tICcuLi9wcm90by9Kb3lzdGljay5qcyc7XHJcbmltcG9ydCB7IEtub2IgfSBmcm9tICcuLi9wcm90by9Lbm9iLmpzJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uL3Byb3RvL0xpc3QuanMnO1xyXG5pbXBvcnQgeyBOdW1lcmljIH0gZnJvbSAnLi4vcHJvdG8vTnVtZXJpYy5qcyc7XHJcbmltcG9ydCB7IFNsaWRlIH0gZnJvbSAnLi4vcHJvdG8vU2xpZGUuanMnO1xyXG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9wcm90by9UZXh0SW5wdXQuanMnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL3Byb3RvL1RpdGxlLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0LmpzJztcclxuaW1wb3J0IHsgQml0bWFwIH0gZnJvbSAnLi4vcHJvdG8vQml0bWFwLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICcuLi9wcm90by9TZWxlY3Rvci5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi4vcHJvdG8vRW1wdHkuanMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vcHJvdG8vSXRlbS5qcyc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi9wcm90by9HcmlkLmpzJztcclxuaW1wb3J0IHsgUGFkMkQgfSBmcm9tICcuLi9wcm90by9QYWQyRC5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFRyZWVMaXN0IH0gZnJvbSAnLi4vcHJvdG8vVHJlZUxpc3QuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndHJlZWxpc3QnOiBuID0gbmV3IFRyZWVMaXN0KG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Q0FBQTtDQUNBO0NBQ0E7QUFDQTtBQUNZLE9BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsTUFBTSxDQUFDLEdBQUc7Q0FDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7Q0FDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7Q0FDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0NBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSztDQUNiLEVBQUUsS0FBSyxFQUFFLEtBQUs7Q0FDZCxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDYjtDQUNBLEVBQUUsVUFBVSxFQUFFLElB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Q0FDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Q0FDcEQsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQ3ZEO0NBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDeEMsR0FBRztBQUNIO0NBQ0EsRUFBRSxRQUFRLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFO0NBQ3JDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3RCO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0NBQ3ZELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztDQUN2RDtDQUNBLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUNoQztDQUNBLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ2xCLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3hCLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxPQUFPO0FBQ2xDO0NBQ0EsSUFBTyxJQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQzFCLE1BQWdCLENBQUMsQ0FBQyxTQUFTO0FBQzNCO0NBQ0E7QUFDQTtDQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDekI7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUNwQjtDQUNBLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ3JCLE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUM1QixLQUFLO0FBQ0w7Q0FDQSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO0NBQ3hCO0FBQ0E7Q0FDQSxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNyQjtDQUNBO0FBQ0E7Q0FDQTtDQUNBLEtBQUssTUFBTTtDQUNYLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtDQUN6QixRQUFRO0NBQ1IsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRTtDQUMzQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0NBQzdDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxHQUFHO0NBQzNCLFVBQVUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxHQUFHO0NBQzNCLFVBQVUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDO0NBQ3pCLFVBQVUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxHQUFHO0NBQzNCLFVBQVU7Q0FDVixVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztDQUN6QyxTQUFTLE1BQU07Q0FDZixVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztDQUN4QyxTQUFTO0NBQ1QsT0FBTyxNQUFNO0NBQ2IsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDdkMsT0FBTztDQUNQLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRTtDQUN0QixJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsT0FBTztBQUNsQztDQUNBLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbkQsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3JDO0NBQ0EsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO0NBQzlDLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDOUU7Q0FDQSxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNyQjtDQUNBO0NBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0NBQ3hCLEdBQUc7QUFDSDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksRUFBRSxZQUFZO0NBQ3BCO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2hELElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDL0I7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDakQsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLEVBQUUsWUFBWTtDQUN0QjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Q0FDN0IsSUFBSSxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7Q0FDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0NBQ2hCO0NBQ0EsTUFBTSxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ2hELE1BQU0sSUFBSSxVQUFVLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQztDQUN6QyxLQUFLO0NBQ0wsSUFBSSxPQUFPLFdBQVcsQ0FBQztDQUN2QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLFlBQVksRUFBRSxVQUFVLEtBQUssRUFBRTtDQUNqQyxJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3RDLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDakQsR0FBRztBQUNIO0NBQ0EsRUFBRSxTQUFTLEVBQUUsVUFBVSxLQUFLLEVBQUU7Q0FDOUIsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztDQUNBLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDaEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtDQUNuQixNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3RCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ2YsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztDQUNoQixHQUFHO0NBQ0gsQ0FBQyxDQUFDO0FBQ0Y7Q0FDTyxNQUFNLEtBQUssR0FBRyxDQUFDOztDQzEwQnRCO0NBQ0E7Q0FDQTtBQUdBO0NBQ0EsTUFBTSxDQUFDLEdBQUc7QUFDVjtDQUNBLElBQUksVUFBVSxFQUFFLEdBQUc7QUFDbkI7Q0FDQSxJQUFJLElBQUksRUFBRSxRQUFRLENBQUMsc0JBQXNCLEVBQUU7QUFDM0M7Q0FDQSxJQUFJLFNBQVMsRUFBRSxJQUFJO0NBQ25CLElBQUksVUFBVSxFQUFFLElBQUk7Q0FDcEIsSUFBSSxVQUFVLEVBQUUsSUFBSTtDQUNwQixJQUFJLFFBQVEsRUFBRSxJQUFJO0NBQ2xCLElBQUksSUFBSSxFQUFFLElBQUk7Q0FDZCxJQUFJLEtBQUssRUFBRSxJQUFJO0FBQ2Y7Q0FDQSxJQUFJLEtBQUssRUFBRSw0QkFBNEI7Q0FDdkMsSUFBSSxLQUFLLEVBQUUsOEJBQThCO0NBQ3pDLElBQUksS0FBSyxFQUFFLDhCQUE4QjtBQUN6QztDQUNBLElBQUksUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDO0NBQ2xJLElBQUksVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUU7Q0FDNUosSUFBSSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRTtBQUNwRztDQUNBLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO0NBQ2YsSUFBSSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BCLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRztDQUN2QixJQUFJLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDbkI7Q0FDQSxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7Q0FDeEIsSUFBSSxLQUFLLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFO0FBQ3hCO0NBQ0EsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTTtBQUM5QjtDQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUM5QixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDOUIsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDckQ7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDekM7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxNQUFNO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFFO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLFVBQVUsR0FBRyxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsR0FBRTtDQUNoRixRQUFRLElBQUksVUFBVSxHQUFHLE1BQUs7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFJO0NBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07Q0FDOUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM5QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVM7Q0FDOUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBSztBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO0NBQ3BCLFlBQVksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSTtDQUMvQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtDQUMxQyxnQkFBZ0IsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEdBQUU7Q0FDMUQsZ0JBQWdCLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFFO0NBQzVELGFBQWE7Q0FDYixZQUFZLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRTtDQUN4RCxZQUFZLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRTtDQUN6RCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRTtDQUN0QixZQUFZLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07Q0FDbkMsWUFBWSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7Q0FDdkQsWUFBWSxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7Q0FDeEQsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7Q0FDdEIsWUFBWSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0NBQ25DLFlBQVksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUU7Q0FDdEQsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTTtBQUN4QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO0NBQ3BCLFlBQVksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSTtDQUMvQixZQUFZLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFFO0NBQ3ZELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFdBQVU7Q0FDMUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsWUFBVztBQUN6RDtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQ3REO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRTtDQUM3QixZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQztDQUNoRCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0NBQ3pCLFlBQVksSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxLQUFJO0NBQ2hFLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLEdBQUU7QUFDOUM7Q0FDQSxRQUFRLE9BQU8sS0FBSztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxFQUFFO0FBQ1o7Q0FDQSxRQUFRLEVBQUUsRUFBRSxDQUFDO0NBQ2IsUUFBUSxFQUFFLEVBQUUsQ0FBQztDQUNiLFFBQVEsTUFBTSxDQUFDLENBQUM7QUFDaEI7Q0FDQSxRQUFRLFFBQVEsR0FBRyxDQUFDO0NBQ3BCO0FBQ0E7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxNQUFNO0NBQ3RCLFFBQVEsVUFBVSxFQUFFLHFCQUFxQjtDQUN6QyxRQUFRLGNBQWMsRUFBRSxvQkFBb0I7QUFDNUM7Q0FDQSxRQUFRLEtBQUssR0FBRyxNQUFNO0NBQ3RCLFFBQVEsUUFBUSxHQUFHLE1BQU07Q0FDekIsUUFBUSxJQUFJLEdBQUcsTUFBTTtDQUNyQixRQUFRLFFBQVEsR0FBRyxNQUFNO0NBQ3pCLFFBQVEsVUFBVSxHQUFHLE1BQU07Q0FDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxpQkFBaUI7Q0FDOUIsUUFBUSxPQUFPLENBQUMsaUJBQWlCO0FBQ2pDO0NBQ0E7Q0FDQSxRQUFRLE1BQU0sR0FBRyxTQUFTO0NBQzFCLFFBQVEsVUFBVSxHQUFHLENBQUM7QUFDdEI7Q0FDQSxRQUFRLE9BQU8sR0FBRyxNQUFNO0NBQ3hCLFFBQVEsTUFBTSxHQUFHLE1BQU07Q0FDdkI7QUFDQTtDQUNBLFFBQVEsTUFBTSxHQUFHLFNBQVM7Q0FDMUIsUUFBUSxPQUFPLEdBQUcsU0FBUztDQUMzQixRQUFRLElBQUksR0FBRyxTQUFTO0NBQ3hCLFFBQVEsTUFBTSxHQUFHLFNBQVM7Q0FDMUIsUUFBUSxNQUFNLEVBQUUsU0FBUztDQUN6QjtDQUNBO0NBQ0EsUUFBUSxVQUFVLEVBQUUscUJBQXFCO0NBQ3pDO0NBQ0EsUUFBUSxVQUFVLEVBQUUsUUFBUTtDQUM1QixRQUFRLFVBQVUsRUFBRSxNQUFNO0NBQzFCLFFBQVEsUUFBUSxDQUFDLEVBQUU7QUFDbkI7Q0FDQSxRQUFRLE9BQU8sQ0FBQyx1QkFBdUI7Q0FDdkMsUUFBUSxNQUFNLEVBQUUsdUJBQXVCO0NBQ3ZDLFFBQVEsU0FBUyxFQUFFLFNBQVM7QUFDNUI7Q0FDQTtDQUNBLFFBQVEsSUFBSSxFQUFFLGVBQWU7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxHQUFHLEdBQUc7QUFDVjtDQUNBLFFBQVEsS0FBSyxFQUFFLHVHQUF1RyxHQUFHLHNIQUFzSDtDQUMvTyxRQUFRLE1BQU0sQ0FBQyw4RUFBOEU7Q0FDN0YsUUFBUSxNQUFNLENBQUMsdUdBQXVHO0NBQ3RILEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksRUFBRTtBQUNWO0NBQ0EsUUFBUSxFQUFFLENBQUMsbURBQW1EO0NBQzlELFFBQVEsRUFBRSxDQUFDLG1EQUFtRDtBQUM5RDtDQUNBLFFBQVEsS0FBSyxDQUFDLDJOQUEyTjtDQUN6TyxRQUFRLEtBQUssQ0FBQyx1QkFBdUI7QUFDckM7Q0FDQSxRQUFRLFNBQVMsQ0FBQyx1QkFBdUI7Q0FDekMsUUFBUSxPQUFPLENBQUMsdUJBQXVCO0FBQ3ZDO0NBQ0EsUUFBUSxLQUFLLENBQUMsZ0ZBQWdGO0NBQzlGLFFBQVEsSUFBSSxDQUFDLG9IQUFvSDtDQUNqSSxRQUFRLE9BQU8sQ0FBQyx3SkFBd0o7Q0FDeEssUUFBUSxZQUFZLENBQUMsNEZBQTRGO0NBQ2pILFFBQVEsU0FBUyxDQUFDLHVHQUF1RztDQUN6SCxRQUFRLE9BQU8sQ0FBQyxrSkFBa0o7Q0FDbEssUUFBUSxLQUFLLENBQUMsZ2RBQWdkO0NBQzlkLFFBQVEsR0FBRyxDQUFDLG9QQUFvUDtDQUNoUSxRQUFRLFNBQVMsQ0FBQyw4RkFBOEY7Q0FDaEgsUUFBUSxHQUFHLENBQUMsNkVBQTZFO0NBQ3pGLFFBQVEsUUFBUSxDQUFDLDZFQUE2RTtDQUM5RixRQUFRLE9BQU8sQ0FBQyxnREFBZ0Q7Q0FDaEUsUUFBUSxNQUFNLENBQUMscUVBQXFFO0NBQ3BGLFFBQVEsSUFBSSxDQUFDLDJCQUEyQjtDQUN4QyxRQUFRLE1BQU0sQ0FBQyxzREFBc0Q7Q0FDckUsUUFBUSxJQUFJLENBQUMsbUZBQW1GO0NBQ2hHLFFBQVEsSUFBSSxDQUFDLDZGQUE2RjtDQUMxRyxRQUFRLE1BQU0sQ0FBQyx5RkFBeUY7QUFDeEc7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHO0NBQ2QsUUFBUSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUNoQyxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxVQUFVO0FBQ3hCO0NBQ0EsUUFBUSxPQUFPLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFDekM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsR0FBRyxXQUFXLElBQUksRUFBRTtBQUNoQztDQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7Q0FDN0IsWUFBWSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDcEQsU0FBUztBQUNUO0NBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzdCO0NBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsR0FBRTtBQUNqRjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUMxRDtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMxQjtDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsV0FBVTtDQUNyRCxRQUFRLElBQUksSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLFNBQVE7Q0FDbkQsUUFBUSxJQUFJLE1BQU0sS0FBSyxTQUFTLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxXQUFVO0NBQ3pELFFBQVEsSUFBSSxNQUFNLEtBQUssU0FBUyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsV0FBVTtDQUN6RCxRQUFRLElBQUksS0FBSyxLQUFLLFNBQVMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUk7QUFDakQ7Q0FDQSxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFJLENBQUM7Q0FDckUsYUFBYSxJQUFJLElBQUksS0FBSTtDQUN6QjtBQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsZUFBZSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyw2SEFBNkgsQ0FBQztDQUNyUSxRQUFRLElBQUksTUFBTSxLQUFLLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ3JGO0NBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxxQ0FBcUMsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztDQUM5RixRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDBEQUF5RDtBQUMxRjtDQUNBLEtBQUs7QUFDTDtBQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFFBQVEsRUFBRSxZQUFZO0FBQzFCO0NBQ0E7Q0FDQSxRQUFRLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDbkM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sRUFBRSxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7QUFDakQ7Q0FDQSxRQUFRLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztDQUNoRSxhQUFhLElBQUksR0FBRyxLQUFLLFNBQVMsR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0NBQzFILGFBQWEsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDM0U7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sRUFBRSxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDaEM7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFO0NBQzNCLFlBQVksSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUUsaUJBQWlCLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3ZDLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN6QjtDQUNBLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7Q0FDM0IsWUFBWSxJQUFJLEdBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDekQsWUFBWSxJQUFJLEdBQUcsS0FBSyxNQUFNLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUNyRixpQkFBaUIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ3pELFNBQVM7Q0FDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsRUFBRTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEtBQUssU0FBUyxHQUFHLE9BQU8sR0FBRyxDQUFDO0NBQzFDLGFBQWEsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDNUQsYUFBYSxJQUFJLEVBQUUsWUFBWSxLQUFLLEVBQUU7Q0FDdEMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDbkYsWUFBWSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3ZHLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxHQUFHLFdBQVcsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRztBQUMvQztDQUNBLFFBQVEsSUFBSSxHQUFHLElBQUksSUFBSSxLQUFLLENBQUM7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDcEY7Q0FDQSxZQUFZLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRTtBQUMvQjtDQUNBLGdCQUFnQixHQUFHLEdBQUcsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0NBQ2pFLGdCQUFnQixDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsQztDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxhQUFhLE1BQU07Q0FDbkI7Q0FDQSxnQkFBZ0IsSUFBSSxHQUFHLEtBQUssU0FBUyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7Q0FDekYsZ0JBQWdCLENBQUMsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDdEQ7Q0FDQSxhQUFhO0NBQ2I7Q0FDQSxTQUFTLE1BQU07QUFDZjtDQUNBLFlBQVksSUFBSSxHQUFHLEtBQUssU0FBUyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDcEYsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3BGO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDMUM7Q0FDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxPQUFPLEdBQUcsQ0FBQztDQUMxQyxhQUFhLE9BQU8sR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDOUM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLGFBQWEsR0FBRyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUNoRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0NBQzFELFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDdEIsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztDQUMvRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLEdBQUcsVUFBVSxHQUFHLEVBQUU7QUFDM0I7Q0FDQSxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxPQUFPLEdBQUcsQ0FBQyxVQUFVLEVBQUU7Q0FDL0IsWUFBWSxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO0NBQ3ZFLFlBQVksR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7Q0FDOUMsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLEdBQUcsV0FBVyxHQUFHLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNyQyxRQUFRLElBQUksQ0FBQyxFQUFFO0NBQ2YsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztDQUN6QixZQUFZLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDdEIsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQzlCLGdCQUFnQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ2hFLGFBQWE7Q0FDYixTQUFTO0NBQ1QsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxFQUFFO0NBQ2YsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztDQUN6QixZQUFZLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDdEIsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzdDLGFBQWE7Q0FDYixTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksZ0JBQWdCLEVBQUUsWUFBWTtBQUNsQztDQUNBLFFBQVEsS0FBSyxRQUFRLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxLQUFLLElBQUksR0FBRyxPQUFPO0FBQ25FO0NBQ0EsUUFBUSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDM0M7Q0FDQSxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUM7Q0FDcEksUUFBUSxDQUFDLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQztDQUNuSCxRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztDQUNqRTtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRztBQUN0QztDQUNBLFlBQVksQ0FBQyxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUM7Q0FDekU7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLENBQUMsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDO0FBQzNFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxjQUFjLEVBQUUsWUFBWTtBQUNoQztDQUNBLFFBQVEsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQztDQUNsRTtDQUNBLFFBQVEsS0FBSyxTQUFTLEtBQUssSUFBSSxHQUFHO0NBQ2xDO0NBQ0EsWUFBWSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ3JHLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUM7Q0FDbkQ7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFNBQVMsR0FBRyxXQUFXLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDcEM7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN2QztDQUNBO0NBQ0EsUUFBUSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDckQsUUFBUSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0NBQzVCLFlBQVksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzVELFNBQVM7Q0FDVCxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CO0NBQ0E7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDaEMsWUFBWSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNoRCxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ2pGLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQzdDLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLGFBQWEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUNsQztDQUNBLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLEdBQUcsQ0FBQztDQUM3RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEdBQUc7Q0FDMUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDMUIsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHO0NBQ3RDLFVBQVUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDO0NBQ2pFLFNBQVM7Q0FDVCxRQUFRLE9BQU8sUUFBUSxDQUFDO0NBQ3hCLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0NBQzlCLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztDQUMzQyxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDNUQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM5QjtDQUNBLFFBQVEsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxQjtDQUNBLFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUMzQjtDQUNBLFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0NBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtDQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0NBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7Q0FDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztDQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDbkIsU0FBUztDQUNULFFBQVEsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDM0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFB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QUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3JIO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM3SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFB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QUFDekg7Q0FDQTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0E7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztDQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0NBQ0E7QUFDQTtDQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFB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QUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0NBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztDQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztDQUN2QjtDQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7Q0FDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7Q0FDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0NBQ0EsWUFBWSxFQUFFLEdBQUc7Q0FDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7Q0FDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxhQUFhLENBQUM7Q0FDZDtDQUNBLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlEO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkI7Q0FDQSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixnQkFBZ0IsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUMxQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdEQsaUJBQWlCO0FBQ2pCO0NBQ0EsZ0JBQWdCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRztDQUNBLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0QsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMs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Q0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDM0M7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMzQjtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2pELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztDQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzFELFNBQVMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QjtDQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztDQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqRDtDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDdkQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0NBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUN4QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDbkM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztDQUNqRSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0NBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsWUFBWSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztDQUM3RSxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUM7QUFDaEY7Q0FDQTtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtDQUM1RSxNQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztDQUM1RSxLQUFLO0FBQ0w7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Q0FDekQsSUFBSSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTztDQUMvQixRQUFRLDRGQUE0RjtDQUNwRyxRQUFRLGFBQWEsQ0FBQztBQUN0QjtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRztDQUN6QixNQUFNLEtBQUs7Q0FDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxpQ0FBaUM7Q0FDbkUsS0FBSyxDQUFDO0FBQ047Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDaEM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUNqQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0NBQ2xCLElBQUksSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0M7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0NBQ2xDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDO0NBQzFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7Q0FDckIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0NBQ3RDO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUM7Q0FDakUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDO0NBQ3BFLE9BQU8sTUFBTTtDQUNiLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQztDQUN0RSxPQUFPO0NBQ1AsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0NBQ3RCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0NBQzdFLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0NBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7Q0FDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEMsT0FBTztDQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDdkIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUN6QyxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNB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QUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakUsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0NBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7Q0FDcEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0NBQzdDLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN0QixLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0EsRUFBRSxhQUFhLEdBQUc7Q0FDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0NBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztDQUM5RSxLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0E7QUFDQTtDQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7Q0FDL0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzlDLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7Q0FDcEMsSUFB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QUcsQ0FBQyxDQUFDLE9BQU07Q0FDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07Q0FDNUI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7Q0FDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0NBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0Is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QUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztDQUNBLFNBQVM7QUFDVDtBQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Q0FDckQsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUU7Q0FDcEUsU0FBUztDQUNUO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0NBQ3hCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxD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R0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7Q0FDbEQ7Q0FDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7Q0FDQTtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0NBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztDQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFJO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7Q0FDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFDO0NBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztDQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUU7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUk7Q0FDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwQztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU07Q0FDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtDQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtDQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRTtBQUN4QjtDQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQztDQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUN0QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUNsSTtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtDQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0NBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0NBQ0EsUUFBUSxRQUFRLElBQUk7Q0FDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0NBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztDQUNqRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0NBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7Q0FDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDckMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7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SUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7Q0FDQTtDQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztDQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QztDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7Q0FDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0NBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtDQUN2TTtBQUNB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Q0FBQztBQUMxQjtDQUNBLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdkMsT0FBTztBQUNQO0NBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0NBQ3BEO0NBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDakM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxD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QUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7Q0FDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztDQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUM7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0E7Q0FDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7Q0FDNUQ7Q0FDQTtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtDQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7Q0FDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtDQUNwQztDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztDQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0NBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtDQUNBLEVBQUU7QUFDRjtBQUNBO0NBQ0E7O0NDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQztBQUMvQjtDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hDO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztDQUMvQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0NBQzFDO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7Q0FDeEMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDOUMsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3REO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3hDO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2xEO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztDQUN6QixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFD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QUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztDQUM5QjtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztDQUN0RSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtDQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QztDQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0NBQzFCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkM7Q0FDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDdkQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ3JDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7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SSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DO0NBQ0EsS0FBSztDQUNMO0NBQ0E7O0NDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Q0FDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0NBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxRDtDQUNBO0FBQ0E7Q0FD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QUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQixRQUFRLElBQUks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QyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ25GLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDcEgsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEc7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7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Q0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU07Q0FDL0IsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRTtDQUN6QyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFFO0NBQy9CLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNwQztDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0NDNWNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN2RDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztDQUMxQyxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Q0FDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztDQUN6QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFJO0FBQzVEO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztDQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7Q0FDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxPQUFPLElBQUk7Q0FDbkIsWUFBWSxLQUFLLENBQUM7Q0FDbEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDbEMsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3hFLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNsRSxpQkFBaUIsTUFBTTtDQUN2QixvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3JFO0NBQ0Esb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNyRSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDaEUsaUJBQWlCO0NBQ2pCO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0NBQ2xCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0NBQ2xDLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN6RSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDM0UsaUJBQWlCLE1BQU07Q0FDdkIsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN0RTtDQUNBLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDeEUsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNwRSxpQkFBaUI7Q0FDakIsWUFBWSxNQUFNO0FBR2xCO0NBQ0EsU0FBUztDQUNULEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxXQUFXLENBQUMsRUFBRTtDQUNsQixRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0NBQ3pELFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU87Q0FDdkMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbkY7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFlBQVksQ0FBQyxFQUFFO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxHQUFHLE9BQU87Q0FDNUMsUUFBUSxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0NBQ3ZDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUNoRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7Q0FDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7Q0FDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7Q0FDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0NBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0NBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtDQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0NBQ0EsYUFBYTtBQUNiO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM3QjtBQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztDQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7Q0FDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDN0QsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRjtDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFB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RyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7Q0FDekQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDakYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdB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QzlCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0NBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztDQUM5QjtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDckQ7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdB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UUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0NBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7Q0FDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztDQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3pEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTs7Q0NsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztDQUNyQztBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7Q0FDQTtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0NBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7Q0FDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtDQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcscUNBQXFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNERBQTRELENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNyVSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsZ0RBQWdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNySztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0NBQ2xJLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUks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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUN0RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0NBQ3BDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzdCO0NBQ0EsU0FBUztBQUNUO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztBQUMxUDtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pKO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDcEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0NBQzFCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ2hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztDQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQ3hCO0NBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0NBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7Q0FDckQsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRTtBQUNyQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Q0FDMUIsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7Q0FDOUIsWUFBWSxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7Q0FDN0IsYUFBYSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7Q0FDaEMsYUFBYSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtB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Q0EsS0FBSyxNQUFNO0NBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDcEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Q0FDckIsTUFBTSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVFO0NBQ0E7Q0FDQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0NBQ0E7Q0FDQSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RDtDQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNoRCxNQUFNLElBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDM0Q7Q0FDQSxNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRDtDQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEM7Q0FDQSxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ2hCLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtDQUNwRCxRQUFRLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxD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LEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDN0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUN4RCxRQUFRLE1BQU07Q0FDZCxNQUFNLEtBQUssQ0FBQztDQUNaO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDdEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUM1RCxRQUFRLE1BQU07Q0FDZCxLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO0NBQ2IsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFEO0NBQ0EsSUFBSSxJQUFJLE9BQU87Q0FDZixNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDM0M7QUFDQTtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDcEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNsQixHQUFHO0NBQ0g7O0NDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FB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QUNwQjtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQztDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7Q0FDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0NBQy9CO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztDQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztDQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7Q0FDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMs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QyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7Q0FDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUMzQixLQUFLO0FBQ0w7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QUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztDQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7Q0FDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDL0xBO0FBRUE7Q0FDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtDQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztDQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtDQUNB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SSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztDQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtDQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0NBQ25DO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVB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LFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0NBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDM0QsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDMVRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDL0IsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFFO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0NBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7Q0FDQTtBQUNBO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlGO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0NBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0NBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0NBQ0EsS0FBSztDQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7Q0FDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFD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LEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLFFBQVEsSUFBSTtDQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzNELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0NBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQzlEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7Q0FDaEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7Q0FDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUU7Q0FDcEU7Q0FDQSxZQUFZLE1BQU07Q0FDbEIsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztDQUMxQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Q0FDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkc7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNwSDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDMUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTs7Q0NyUkE7QUFJQTtDQUNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztDQUNwQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0NBQ3RCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUM7Q0FDbEMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ25DLElBQUksSUFBSSxDQUFDLEtBQUssUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNwRSxJQUFJLElBQUksQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Q0FDbEMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzVFLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0U7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7Q0FDekMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0FBQzFDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsUUFBUSxLQUFLLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ3hDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7QUFDdEI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUM7Q0FDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztDQUN2QixJQUFJLElBQUksQ0FBQyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyx5Q0FBeUMsQ0FBQyxDQUFDO0NBQzVGLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ2hCLEdBQUc7QUFDSDtDQUNBO0NBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Q0FDMUYsRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUNyRDtDQUNBO0NBQ0EsRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFO0NBQ3RCLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUN6QixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQzFDLE1BQU0sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0NBQ2hDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2xHLFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QixPQUFPLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0NBQ3hDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3ZELE9BQU8sTUFBTTtDQUNiLFFBQVEsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3hDLE9BQU87Q0FDUCxLQUFLO0NBQ0wsSUFBSSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDeEMsR0FBRztBQUNIO0NBQ0E7Q0FDQSxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtDQUMvQixJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0NBQ2hELElBQUksTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ2xDLElBQUksT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0NBQ2pDLE1BQU0sTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNyQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU07Q0FDOUIsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUN0QixLQUFLO0NBQ0w7Q0FDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0NBQ2hCLEdBQUc7QUFDSDtDQUNBO0NBQ0EsRUFBRSxhQUFhLEdBQUc7Q0FDbEIsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ3RELEdBQUc7QUFDSDtDQUNBO0NBQ0EsRUFBRSxjQUFjLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUU7Q0FDbkMsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ2hELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7Q0FDcEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDZCxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtDQUN2QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDcEQsS0FBSztDQUNMLElBQUksT0FBTyxDQUFDLENBQUM7Q0FDYixHQUFHO0FBQ0g7Q0FDQTtDQUNBLEVBQUUsV0FBVyxHQUFHO0NBQ2hCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQzVDO0NBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pCLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsSUFBSSxPQUFPLElBQUksRUFBRTtDQUNqQixNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtDQUNoQztDQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN2QyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU07Q0FDaEMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztDQUN6QixVQUFVLElBQUksRUFBRSxLQUFLO0NBQ3JCLFVBQVUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDakYsVUFBVSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRTtDQUM3QyxTQUFTLENBQUMsQ0FBQztBQUNYO0NBQ0EsUUFBUSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDMUMsUUFBUSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNO0NBQzdELFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUM3QixPQUFPLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0NBQ3hDO0NBQ0EsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUM1RixRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUN4RSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNyRixRQUFRLE1BQU07Q0FDZCxPQUFPLE1BQU07Q0FDYixRQUFRLE1BQU07Q0FDZCxPQUFPO0NBQ1AsTUFBTSxLQUFLLEVBQUUsQ0FBQztDQUNkLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQTtDQUNBLEVBQUUsWUFBWSxHQUFHO0NBQ2pCO0NBQ0EsSUFBSSxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztDQUMxQyxJQUFJLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztDQUN2QixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2Q7Q0FDQTtDQUNBLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUM3RSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ3BFLE1BQU0sS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDaEcsS0FBSztDQUNMLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDOUM7Q0FDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNqRCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakMsTUFBa0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Q0FDbkMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0NBQzlCLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNoRCxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0NBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDeEQsUUFBUSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7Q0FDekI7QUFDQTtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ25ELFVBQVUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN0RCxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7Q0FDbEQsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDO0NBQ3JCLFNBQVM7Q0FDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUM1QyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDeEMsT0FBTyxNQUFNO0NBQ2I7Q0FDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0NBQ25DLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDN0Q7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ25EO0NBQ0EsU0FBUyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Q0FD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LE1BQU0sUUFBUSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7Q0FDekYsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDL0QsSUFBSSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzlFLElBQUksTUFBTSxPQUFPLE1BQU0sTUFBTSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNwRjtDQUNBO0NBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDM0IsSUFBSSxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDM0IsSUFBSSxDQUFDLENBQUMsTUFBTSxPQUFPLFlBQVksR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0NBQzVDLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDdEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxRQUFRLEVBQUU7Q0FDbEIsTUFBTSxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7Q0FDL0IsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7Q0FDOUIsS0FBSyxNQUFNLElBQUksVUFBVSxFQUFFO0NBQzNCLE1BQU0sQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO0NBQ3ZDLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzVCLEtBQUssTUFBTSxJQUFJLE9BQU8sRUFBRTtDQUN4QixNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQztDQUNoQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUM1QixLQUFLO0FBQ0w7Q0FDQTtDQUNBLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNuQyxHQUFHO0FBQ0g7Q0FDQTtDQUNBLEVBQUUsS0FBSyxHQUFHO0NBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2xELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0NBQ3hCLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxHQUFHO0NBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Q0FDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0E7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Q0FDZCxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkMsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZDLElBQUksT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQzVCLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7Q0FDbkIsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDL0MsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztDQUN2QixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVM7QUFDM0U7Q0FDQSxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7Q0FDOUIsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDbkQsVUFBVSxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUN4QyxVQUFVLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO0NBQ3hGLFlBQVksT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ3hDLFdBQVc7Q0FDWCxTQUFTO0NBQ1QsT0FBTyxNQUFNO0NBQ2IsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUMvRCxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDeEMsVUFBVSxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7Q0FDOUMsVUFBVSxNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzlHLFVBQVUsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Q0FDeEYsWUFBWSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7Q0FDMUMsV0FBVztDQUNYLFNBQVM7Q0FDVCxPQUFPO0NBQ1AsS0FBSztDQUNMLElBQUksT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0NBQ3pDLEdBQUc7QUFDSDtDQUNBLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRTtDQUNqQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUks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LEtBQUssS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDOUMsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0NBQ2xELFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtDQUNsRCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDeEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0NBQ2hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtDQUNoRCxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtDQUNyRSxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDbEQsWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDekUsWUFBWSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDL0QsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0NBQ3BELFlBQVksS0FB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QUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUNqRTtDQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztDQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7QUFDNUM7Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDcEU7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDaEMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNmO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQjtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUNqQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztDQUM5RCxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRDtDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUN2RTtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ3RDLElBQUksSUFBSSxDQUFDLE1BQU07Q0FDZixNQUFNLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsYUFBYSxDQUFDO0FBQ3ZFO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3ZELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztDQUN4QixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0NBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDbkIsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQjtDQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDN0I7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDekI7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUc7Q0FDNUIsTUFBTSxLQUFLO0NBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7Q0FDcEIsUUFBUSwrQ0FBK0M7Q0FDdkQsUUFBUSxFQUFFLENBQUMsT0FBTztDQUNsQixRQUFRLElBQUk7Q0FDWixRQUFRLElBQUksQ0FBQyxNQUFNO0NBQ25CLEtBQUssQ0FBQztBQUNOO0NBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxHQUFHO0NBQ2pDLE1BQU0sS0FBSztDQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO0NBQ3BCLFFBQVEsMERBQTBEO0NBQ2xFLEtBQUssQ0FBQztDQUNOO0NBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDeEIsSUFBSSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLG9DQUFvQyxHQUFHLEVBQUUsQ0FBQztDQUM1RSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUc7Q0FDMUIsTUFBTSxLQUFLO0NBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsc0JBQXNCO0NBQ3hELEtBQUssQ0FBQztDQUNOLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUc7Q0FDN0IsTUFBTSxLQUFLO0NBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7Q0FDcEIsUUFBUSx3QkFBd0I7Q0FDaEMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDekIsUUFBUSw0Q0FBNEM7Q0FDcEQsUUFBUSxFQUFFLENBQUMsVUFBVTtDQUNyQixRQUFRLEdBQUc7Q0FDWCxLQUFLLENBQUM7Q0FDTixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM1QztDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRztDQUMzQixNQUFNLEtBQUs7Q0FDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztDQUNwQixRQUFRLGFBQWE7Q0FDckIsUUFBUSxFQUFFLENBQUMsTUFBTTtDQUNqQixRQUFRLDRCQUE0QjtDQUNwQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN6QixRQUFRLGtCQUFrQjtDQUMxQixLQUFLLENBQUM7Q0FDTixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7Q0FDdEIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHO0NBQzNCLE1BQU0sS0FBSztDQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0NBQ2xCLFFBQVEscUVBQXFFO0NBQzdFLFFBQVEsQ0FBQztDQUNULFFBQVEsZ0NBQWdDO0NBQ3hDLFFBQVEsQ0FBQztDQUNULFFBQVEscUNBQXFDO0NBQzdDLFFBQVEsSUFBSSxDQUFDLEVBQUU7Q0FDZixRQUFRLGtCQUFrQjtDQUMxQixTQUFTLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3JCLFFBQVEsWUFBWTtDQUNwQixRQUFRLEVBQUUsQ0FBQyxJQUFJO0NBQ2YsUUFBUSxHQUFHO0NBQ1gsS0FBSyxDQUFDO0NBQ04sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDMUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTTtDQUN6QyxRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0NBQzFCLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0FBQ2pEO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztDQUMzRCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2xFO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtDQUNoRCxNQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztDQUNsQyxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BFO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDeEU7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO0NBQzVCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztDQUNoRCxLQUFLLE1BQU07Q0FDWCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7Q0FDdEMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0NBQ3hDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7Q0FDdkIsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVO0NBQ25CLE1BQU0sQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0NBQ25FLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6RTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3pDO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3BCLEdBQUc7QUFDSDtDQUNBLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtDQUN6QixJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7Q0FDdEIsTUFBTSxJQUFJLEVBQUUsYUFBYTtDQUN6QixNQUFNLE9BQU8sRUFBRSxDQUFDO0NBQ2hCLE1BQU0sT0FBTyxFQUFFLENBQUM7Q0FDaEIsTUFBTSxLQUFLLEVBQUUsQ0FBQztDQUNkLE1BQU0sR0FBRyxFQUFFLElBQUk7Q0FDZixNQUFNLE9BQU8sRUFBRSxHQUFHO0NBQ2xCLEtBQUssQ0FBQyxDQUFDO0NBQ1AsR0FBRztBQUNIO0NBQ0EsRUFBRSxnQkFBZ0IsR0FBRztDQUNyQixJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7Q0FDdEIsTUFBTSxJQUFJLEVBQUUsYUFBYTtDQUN6QixNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7Q0FDakIsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0NBQ2pCLE1BQU0sS0FBSyxFQUFFLENBQUM7Q0FDZCxNQUFNLEdBQUcsRUFBRSxJQUFJO0NBQ2YsTUFBTSxPQUFPLEVBQUUsR0FBRztDQUNsQixLQUFLLENBQUMsQ0FBQztDQUNQLEdBQUc7QUFDSDtDQUNBLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7Q0FDdkI7QUFDQTtDQUNBO0NBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7Q0FDdEIsTUFBTSxJQUFJLEVBQUUsV0FBVztDQUN2QixNQUFNLE9BQU8sRUFBRSxDQUFDO0NBQ2hCLE1BQU0sT0FBTyxFQUFFLENBQUM7Q0FDaEIsTUFBTSxLQUFLLEVBQUUsQ0FBQztDQUNkLE1BQU0sR0FBRyxFQUFFLElBQUk7Q0FDZixNQUFNLE9BQU8sRUFBRSxHQUFHO0NBQ2xCLEtBQUssQ0FBQyxDQUFDO0NBQ1AsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtDQUNmLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDdEMsSUFBSSxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7Q0FDOUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDaEI7Q0FDQSxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0NBQzVCLEdBQUc7QUFDSDtDQUNBLEVBQUUsYUFBYSxHQUFHO0NBQ2xCLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtDQUMzQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVU7Q0FDeEMsUUFBUSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7Q0FDbkQsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVO0NBQ25DLFFBQVEsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO0NBQ25ELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztDQUM3RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Q0FDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7Q0FDNUMsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQ2I7Q0FDQSxFQUFFLFVBQVUsR0FBRztDQUNmLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsZUFBZTtDQUMxQyxNQUFNLDhCQUE4QjtDQUNwQyxNQUFNLFFBQVE7Q0FDZCxLQUFLLENBQUM7Q0FDTixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0NBQ0E7Q0FDQSxHQUFHO0FBQ0g7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUU7Q0FDZCxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsT0FBTztBQUNyQztDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDeEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDOUQsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0NBQ3RDLEdBQUc7QUFDSDtDQUNBO0FBQ0E7Q0FDQSxFQUFFLE1BQU0sR0FBRztDQUNYLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0NBQ3hCLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxHQUFHO0NBQ1osSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3JCLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFO0NBQzVCLElBQUksSUFBSSxJQUFJO0NBQ1osTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7Q0FDcEIsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Q0FDNUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Q0FDbEUsT0FBTyxDQUFDO0NBQ1I7Q0FDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztDQUNwQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztDQUM1QyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztDQUM3QyxPQUFPLENBQUM7Q0FDUjtBQUNBO0NBQ0E7Q0FDQSxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUU7Q0FDZjtDQUNBLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQ3BCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3ZDLEdBQUc7QUFDSDtDQUNBLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRTtDQUNmLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Q0FDckIsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEQsS0FBSztDQUNMLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtDQUNyQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Q0FDN0MsR0FBRztBQUNIO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0NBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLFFBQVEsR0FBRyxTQUFTLENBQUM7Q0FDN0QsR0FBRztBQUNIO0NBQ0EsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRTtDQUNyQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsU0FBUyxHQUFHLFFBQVEsQ0FBQztDQUM3RCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Q0FDZCxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztDQUM5QixJQUFJLE9BQU8sSUFBSSxDQUFDO0NBQ2hCLEdBQUc7QUFDSDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0NBQ1YsSUFBSSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7Q0FDM0IsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pCO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQ3ZCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEI7Q0FDQSxNQUFNLFFBQVEsQ0FBQztDQUNmLFFBQVEsS0FBSyxLQUFLO0NBQ2xCLFVBQVUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQ3pCLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7Q0FDbkQsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztDQUN2RCxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzVDLFVBQVUsTUFBTTtBQUNoQjtDQUNBO0NBQ0EsUUFBUSxLQUFLLFlBQVk7Q0FDekIsVUFBVSxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0NBQ3BDLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7Q0FDbkQsVUFBVSxNQUFNO0NBQ2hCLFFBQVEsS0FBSyxZQUFZO0NBQ3pCLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7Q0FDbkQsVUFBVSxNQUFNO0FBQ2hCO0NBQ0E7Q0FDQSxRQUFRLEtBQUssWUFBWTtDQUN6QixVQUFVLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDbEMsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQztDQUMzRCxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQ2hELFVBQVUsTUFBTTtDQUNoQjtDQUNBLE9BQU87QUFDUDtDQUNBLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQztDQUN4QixLQUFLO0FBQ0w7Q0FDQSxJQUFJLE9BQU8sVUFBVSxDQUFDO0NBQ3RCLEdBQUc7QUFDSDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxXQUFXLEdBQUc7Q0FDaEIsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUM7Q0FDMUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0NBQ3RCO0NBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ3pCLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN6QixLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QjtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNuQixJQUFJLE9BQU8sSUFBSSxDQUFDO0NBQ2hCLEdBQUc7QUFDSDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0NBQ2QsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ3ZCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDNUM7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ3pCO0NBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEU7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLFFBQVEsQ0FBQztDQUMxRSxTQUFTLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQy9DO0NBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztDQUNoQixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRTtDQUNqQjtBQUNBO0NBQ0E7Q0FDQTtDQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN0QjtDQUNBLElBQUksSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3ZCLElBQUksSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0NBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztDQUMvRCxJQUFJLElBQUksSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDakU7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0NBQ3pDLE1BQU0sS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0NBQ3pCLE1BQU0sSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Q0FDL0IsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU87QUFDdEI7Q0FDQSxJQUFJLFFBQVEsSUFBSTtDQUNoQixNQUFNLEtBQUssU0FBUztDQUNwQixRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN2RTtDQUNBLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUU7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEU7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUM1RCxRQUFRLElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUTtDQUM3RCxVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtDQUN6QixVQUFVLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0NBQ2xDLFNBQVM7QUFDVDtDQUNBLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxRQUFRO0NBQ25CLFFBQVEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0NBQ25FLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFO0NBQ2xDLFVBQVUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDbkQsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTTtDQUMvQyxjQUFjLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0NBQ2hDLGNBQWMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqQztDQUNBLFVBQVUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ3RCLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMzQixVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDeEIsU0FBUztBQUNUO0NBQ0EsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLFFBQVE7Q0FDbkIsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Q0FDM0IsUUFBUSxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Q0FDbkUsUUFBUSxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Q0FDbkUsUUFBUSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdkQsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDOUU7Q0FDQSxRQUFRLE1BQU07Q0FDZCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ25DLElBQUksSUFBSSxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQztDQUNBLElBQUksSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDeEMsSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQztDQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzVCLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7Q0FDckIsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0M7Q0FDQSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7Q0FDL0IsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Q0FDekIsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztDQUUxQixNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0NBQzlCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUU7Q0FDckIsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQzFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUMxQixLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0EsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0NBQ2IsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDekIsSUFBSSxPQUFPLElBQUksQ0FBQztDQUNoQixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRTtDQUNmLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU87QUFDN0I7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3JCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUM3QixJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakM7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsR0FBRyxHQUFHO0NBQ1I7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0NBQ3RCLElBQUksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0NBQ0EsSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtDQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkI7Q0FDQSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzlDLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtDQUN6QyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0NBQzFFLFdBQVc7Q0FDWCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3pCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDekI7Q0FDQSxRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQ2hELE9BQU87Q0FDUCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsT0FBTztBQUMzQjtDQUNBLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbkMsU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hCO0NBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUN6QjtDQUNBLElBQUksT0FBTyxDQUFDLENBQUM7Q0FDYixHQUFHO0FBQ0g7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0NBQ1osSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQy9CLEdBQUc7QUFDSDtDQUNBO0FBQ0E7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Q0FDZCxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pDLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUU7Q0FDbkI7Q0FDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEQsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDN0IsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDbEIsS0FBSztDQUNMLEdBQUc7QUFDSDtDQUNBO0FBQ0E7Q0FDQSxFQUFFLEtBQUssR0FBRztDQUNWO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU07Q0FDM0IsTUFBTSxJQUFJLENBQUM7QUFDWDtDQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNoQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzVCLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hDLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQ3JCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztDQUN4QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNoQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLEtBQUssR0FBRztDQUNWLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ2pCLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxHQUFHO0NBQ1gsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDekMsR0FBRztBQUNIO0NBQ0EsRUFBRSxPQUFPLEdBQUc7Q0FDWixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNqQixJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQ3BFLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN2QixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsU0FBUyxHQUFHO0NBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPO0FBQ2pDO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztDQUM1QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztDQUN2QyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Q0FDaEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPO0FBQ2pDO0NBQ0EsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztDQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNyQjtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtDQUNmLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNyQixNQUFNLE9BQU87Q0FDYixLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0NBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNoQixNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO0NBQ3RDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDbkMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRO0NBQ3pCLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUN0RSxPQUFPO0NBQ1AsS0FBSztDQUNMLEdBQUc7QUFDSDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0NBQ2QsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbEMsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUN2RDtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUU7Q0FDWCxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxQjtDQUNBLE1BQU0sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3BDO0NBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUM3QyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFDO0NBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUMxQztDQUNBLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRDtDQUNBLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0NBQ3ZELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ2hELEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUN6QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUU7Q0FDWixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUM1QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzlDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ2pELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDaEIsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLE9BQU8sR0FBRztDQUNaLElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzNELEdBQUc7QUFDSDtDQUNBLEVBQUUsSUFBSSxHQUFHO0NBQ1QsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDekQsR0FBRztBQUNIO0NBQ0EsRUFBRSxTQUFTLEdBQUc7Q0FDZCxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUNyQixNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlC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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvcHJvdG8vVHJlZUxpc3QuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBBUEkgcMO6YmxpY2EgZXNwZXJhZGE6XHJcbiAgICAvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KVxyXG4gICAgLy8gby5mb2N1c2VkIChib29sKSwgby5mb2N1c1BhdGggKGFycmF5KSwgby5mb2N1c0xldmVsIChudW1iZXIpXHJcbiAgICAvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcbiAgICBvLnNlbGVjdGFibGUgPSB0cnVlO1xyXG4gICAgby5uYW1lID0gby5uYW1lIHx8ICdUcmVlTGlzdCc7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICAvLyBEYXRvcyAmIGVzdGFkb1xyXG4gICAgdGhpcy50cmVlICAgICAgID0gby50cmVlIHx8IHt9O1xyXG4gICAgdGhpcy52YWx1ZSAgICAgID0gQXJyYXkuaXNBcnJheShvLnZhbHVlKSA/IG8udmFsdWUuc2xpY2UoKSA6IFtdO1xyXG4gICAgdGhpcy5mb2N1c2VkICAgID0gISFvLmZvY3VzZWQ7XHJcbiAgICB0aGlzLmZvY3VzUGF0aCAgPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09ICdudW1iZXInID8gby5mb2N1c0xldmVsIDogLTE7XHJcblxyXG4gICAgdGhpcy50YWJJbmRleCAgID0gby50YWJJbmRleCA/PyBudWxsO1xyXG4gICAgdGhpcy5pdGVtSW5kZXggID0gby5pdGVtSW5kZXggPz8gbnVsbDtcclxuXHJcbiAgICAvLyBDYWxsYmFja1xyXG4gICAgdGhpcy5jaGFuZ2VDYiA9IHR5cGVvZiBvLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nID8gby5vbkNoYW5nZSA6ICgpID0+IHt9O1xyXG5cclxuICAgIC8vIExheW91dCBpbnRlcm5vIC8gcHVibGljYWNpw7NuIGRlIGFsdHVyYVxyXG4gICAgdGhpcy5saW5lSCAgICA9IHRoaXMuaDsgICAgICAgICAgICAgICAvLyBhbHRvIGRlIFVOQSBmaWxhXHJcbiAgICB0aGlzLmxldmVsR2FwID0gdGhpcy5jb2xvcnMuc3kgfHwgMjsgIC8vIHNlcGFyYWNpw7NuIHZlcnRpY2FsIGVudHJlIG5pdmVsZXNcclxuICAgIHRoaXMubGVhZk1heCAgPSAwOyAgICAgICAgICAgICAgICAgICAgLy8gc2UgY2FsY3VsYSBlbiByU2l6ZSgpXHJcblxyXG4gICAgLy8gTW9kZWxvIHZpc3VhbFxyXG4gICAgdGhpcy5sZXZlbHMgICA9IFtdOyAgIC8vIFt7dHlwZTonbWFwJ3wnbGlzdCcsIGl0ZW1zOlt7a2V5LGxhYmVsLHpvbmV9XSwgem9uZTp7eCx5LHcsaH19Li4uXVxyXG4gICAgdGhpcy5pdGVtc0RvbSA9IFtdOyAgIC8vIGVzcGVqbyBET00gcG9yIG5pdmVsXHJcbiAgICB0aGlzLmhvdmVyICAgID0geyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG5cclxuICAgIC8vIENvbnRlbmVkb3IgaW50ZXJubyAoYWJzb2x1dG8pXHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSgnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnbGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7Jyk7XHJcbiAgICB0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEhlbHBlcnMgZGUgdGlwbyA9PT09PT09XHJcbiAgc3RhdGljIGlzTWFwKG5vZGUpICB7IHJldHVybiBub2RlICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShub2RlKTsgfVxyXG4gIHN0YXRpYyBpc0xpc3Qobm9kZSkgeyByZXR1cm4gQXJyYXkuaXNBcnJheShub2RlKTsgfVxyXG5cclxuICAvLyA9PT09PT09IFJlY29ycmlkbyBkZSBkYXRvcyA9PT09PT09XHJcbiAgZ2V0Tm9kZUF0UGF0aChwYXRoKSB7XHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBwYXRoW2ldKSkgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgICBub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBMbGVnYW1vcyBhIHVuYSBsaXN0YTogeWEgbm8gaGF5IG3DoXMgY2xhdmVzIHbDoWxpZGFzXHJcbiAgICAgICAgaWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuICB9XHJcblxyXG4gIC8vIEF1dG9jb21wbGV0YXI6IGJhamEgcG9yIHByaW1lcmFzIGNsYXZlcyBkZSBjYWRhIG1hcGEgaGFzdGEgYWxjYW56YXIgdW5hIGxpc3RhXHJcbiAgYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2VQYXRoKSB7XHJcbiAgICBsZXQgeyBub2RlIH0gPSB0aGlzLmdldE5vZGVBdFBhdGgoYmFzZVBhdGgpO1xyXG4gICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoLnNsaWNlKCk7XHJcbiAgICB3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgY29uc3QgazAgPSBrZXlzWzBdO1xyXG4gICAgICBwYXRoLnB1c2goazApO1xyXG4gICAgICBub2RlID0gbm9kZVtrMF07XHJcbiAgICB9XHJcbiAgICAvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2EgdW4gw610ZW0gZmluYWwgZGUgbGEgaG9qYVxyXG4gICAgcmV0dXJuIHBhdGg7XHJcbiAgfVxyXG5cclxuICAvLyBSdXRhIGFjdGl2YSAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpbm8gdmFsdWUpXHJcbiAgZ2V0QWN0aXZlUGF0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgPyB0aGlzLmZvY3VzUGF0aCA6IHRoaXMudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IFRhbWHDsW8gZGUgaG9qYSBtw6F4aW1vIChwYXJhIGxheW91dCBlc3RhYmxlKSA9PT09PT09XHJcbiAgY29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBub2RlLmxlbmd0aDtcclxuICAgIGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHJldHVybiAwO1xyXG4gICAgbGV0IG0gPSAwO1xyXG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XHJcbiAgICAgIG0gPSBNYXRoLm1heChtLCB0aGlzLmNvbXB1dGVMZWFmTWF4KG5vZGVba10pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBDb25zdHJ1Y2Npw7NuIGRlIG5pdmVsZXMgKG1vZGVsbyBsw7NnaWNvKSA9PT09PT09XHJcbiAgYnVpbGRMZXZlbHMoKSB7XHJcbiAgICB0aGlzLmxldmVscy5sZW5ndGggPSAwO1xyXG4gICAgY29uc3QgYWN0aXZlUGF0aCA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpO1xyXG5cclxuICAgIGxldCBub2RlID0gdGhpcy50cmVlO1xyXG4gICAgbGV0IGxldmVsID0gMDtcclxuXHJcbiAgICB3aGlsZSAobm9kZSkge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBpbnRlcm1lZGlvOiBjbGF2ZXMgZGVsIG1hcGEgKGhvcml6b250YWwpXHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICAgIGlmICgha2V5cy5sZW5ndGgpIGJyZWFrO1xyXG4gICAgICAgIHRoaXMubGV2ZWxzLnB1c2goe1xyXG4gICAgICAgICAgdHlwZTogJ21hcCcsXHJcbiAgICAgICAgICBpdGVtczoga2V5cy5tYXAoayA9PiAoeyBrZXk6IGssIGxhYmVsOiBrLCB6b25lOiB7IHg6MCx5OjAsdzowLGg6MCB9IH0pKSxcclxuICAgICAgICAgIHpvbmU6IHsgeDowLHk6MCx3OjAsaDogdGhpcy5saW5lSCB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBhY3RpdmVQYXRoW2xldmVsXTtcclxuICAgICAgICBpZiAoIW5leHRLZXkgfHwgIW5vZGUuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIGJyZWFrO1xyXG4gICAgICAgIG5vZGUgPSBub2RlW25leHRLZXldO1xyXG4gICAgICB9IGVsc2UgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkge1xyXG4gICAgICAgIC8vIE5pdmVsIGhvamE6IGxpc3RhIHZlcnRpY2FsXHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSBub2RlLm1hcChsYWJlbCA9PiAoeyBrZXk6IGxhYmVsLCBsYWJlbCwgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSk7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChpdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCkgKiB0aGlzLmxpbmVIO1xyXG4gICAgICAgIHRoaXMubGV2ZWxzLnB1c2goeyB0eXBlOiAnbGlzdCcsIGl0ZW1zLCB6b25lOiB7IHg6MCwgeTowLCB3OjAsIGg6IGhMaXN0IH0gfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgbGV2ZWwrKztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gTGF5b3V0ICh6b25hcyAmIERPTSkgPT09PT09PVxyXG4gIGxheW91dExldmVscygpIHtcclxuICAgIFxyXG4gICAgY29uc3QgY29udGVudFggPSAodGhpcy5zYSB8fCAxMDApICsgODsgICAvLyBjb2x1bW5hIGRlIGxhYmVsICsgcGFkZGluZ1xyXG4gICAgY29uc3QgcGFkUmlnaHQgPSA4O1xyXG4gICAgY29uc3QgdyA9IHRoaXMuem9uZS53IC0gY29udGVudFggLSBwYWRSaWdodDtcclxuXHJcbiAgICBcclxuICAgIGxldCB5ID0gMDtcclxuXHJcbiAgICAvLyBBanVzdGFyIGl0ZW1zRG9tIGEgY2FudGlkYWQgZGUgbml2ZWxlc1xyXG4gICAgd2hpbGUgKHRoaXMuaXRlbXNEb20ubGVuZ3RoIDwgdGhpcy5sZXZlbHMubGVuZ3RoKSB0aGlzLml0ZW1zRG9tLnB1c2goW10pO1xyXG4gICAgZm9yIChsZXQgTCA9IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCA8IHRoaXMuaXRlbXNEb20ubGVuZ3RoOyBMKyspIHtcclxuICAgICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLml0ZW1zRG9tW0xdKSBpZiAoZWwgJiYgZWwucGFyZW50Tm9kZSkgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLml0ZW1zRG9tLmxlbmd0aCA9IHRoaXMubGV2ZWxzLmxlbmd0aDtcclxuXHJcbiAgICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgICBpZiAobHZsLnR5cGUgPT09ICdtYXAnKSB7XHJcbiAgICAgICAgY29uc3QgbiA9IE1hdGgubWF4KDEsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgIGNvbnN0IGNlbGxXID0gTWF0aC5mbG9vcih3IC8gbik7XHJcblxyXG4gICAgICAgIGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgIGxldCB4ID0gY29udGVudFg7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdCA9IGx2bC5pdGVtc1tpXTtcclxuICAgICAgICAgIGl0LnpvbmUgPSB7IHgsIHksIHc6IGNlbGxXLCBoOiB0aGlzLmxpbmVIIH07XHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbWFwJyk7XHJcbiAgICAgICAgICB4ICs9IGNlbGxXO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgY2VsZGFzXHJcbiAgICAgICAgdGhpcy5fcHJ1bmVSb3coTCwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgeSArPSB0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsaXN0YS9ob2phOiByZXNlcnZhciBoIHNlZ8O6biBsZWFmTWF4XHJcbiAgICAgICAgY29uc3QgbiA9IGx2bC5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICBcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IGhMaXN0IH07XHJcblxyXG4gICAgICAgICBjb25zdCByb3dzID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KTtcclxuICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBuO1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBpc1JlYWwgPyBsdmwuaXRlbXNbaV0gOiB7IGtleTogbnVsbCwgbGFiZWw6ICcnLCB6b25lOiB7IHg6MCx5OjAsdzowLGg6MCB9IH07XHJcbiAgICAgICAgICBcclxuICAgICAgICAgICBpdC56b25lID0geyB4OiBjb250ZW50WCwgeTogeSArIGkgKiB0aGlzLmxpbmVILCB3LCBoOiB0aGlzLmxpbmVIIH07XHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbGlzdCcsIGlzUmVhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBmaWxhc1xyXG4gICAgICAgIHRoaXMuX3BydW5lUm93KEwsIHJvd3MpO1xyXG4gICAgICAgIHkgKz0gaExpc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBanVzdGVzIGRlIGFsdG8gaW50ZXJubyBkZWwgY29udGVuZWRvciB2aXN1YWxcclxuICAgIGNvbnN0IHRvdGFsSCA9IHk7XHJcbiAgICB0aGlzLnpvbmUuaCA9IHRvdGFsSCArIHRoaXMubWFyZ2luO1xyXG4gICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuem9uZS5oICsgJ3B4JztcclxuICAgIHRoaXMuc1syXS5oZWlnaHQgPSB0b3RhbEggKyAncHgnO1xyXG5cclxuICAgIC8vIFB1YmxpY2FyIGFsdG8gdG90YWwgYWwgR1VJIChzdW1hcsOhIHUuaClcclxuICAgIHRoaXMuX3B1Ymxpc2hIZWlnaHQoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8gRWxpbWluYSBub2RvcyBET00gc29icmFudGVzIGVuIGxhIGZpbGEgTCBhIHBhcnRpciBkZWwgw61uZGljZSBrZWVwXHJcbiAgX3BydW5lUm93KEwsIGtlZXApIHtcclxuICAgIGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcbiAgICAvLyBzaSBudW5jYSBzZSBjcmXDsywgbmFkYSBxdWUgaGFjZXJcclxuICAgIGlmICghcm93KSByZXR1cm47XHJcbiAgICBmb3IgKGxldCBqID0ga2VlcDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xyXG4gICAgICBjb25zdCBlbCA9IHJvd1tqXTtcclxuICAgICAgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgcm93Lmxlbmd0aCA9IGtlZXA7XHJcbiAgfVxyXG5cclxuXHJcbiAgZW5zdXJlSXRlbURvbShMLCBpKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgd2hpbGUgKHJvdy5sZW5ndGggPD0gaSkgcm93LnB1c2gobnVsbCk7XHJcbiAgICBpZiAoIXJvd1tpXSkge1xyXG4gICAgICBjb25zdCBkaXYgPSB0aGlzLmRvbSgnZGl2JywgVG9vbHMuY3NzLnR4dCArICdwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsnKTtcclxuICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcbiAgICAgIHJvd1tpXSA9IGRpdjtcclxuICAgIH1cclxuICAgIHJldHVybiByb3dbaV07XHJcbiAgfVxyXG5cclxuICBwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgcyA9IGRpdi5zdHlsZTtcclxuICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy8gUG9zaWNpw7NuXHJcbiAgICBzLmxlZnQgICA9IGl0LnpvbmUueCArICdweCc7XHJcbiAgICBzLnRvcCAgICA9IGl0LnpvbmUueSArICdweCc7XHJcbiAgICBzLndpZHRoICA9IGl0LnpvbmUudyArICdweCc7XHJcbiAgICBzLmhlaWdodCA9IChpdC56b25lLmggLSAyKSArICdweCc7XHJcblxyXG4gICAgLy8gVGV4dG9cclxuICAgIGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogJyc7XHJcblxyXG4gICAgLy8gRXN0YWRvc1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgICA9IGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG4gICAgY29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiAodGhpcy5mb2N1c0xldmVsID09PSBMKTtcclxuICAgIGNvbnN0IGZvY3VzTWF0Y2ggPSBpc1JlYWwgJiYgaW5Gb2N1c0x2bCAmJiAodGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleSk7XHJcbiAgICBjb25zdCBpc0hvdmVyICAgID0gaXNSZWFsICYmICh0aGlzLmhvdmVyLmxldmVsID09PSBMICYmIHRoaXMuaG92ZXIuaW5kZXggPT09IGkpO1xyXG5cclxuICAgIC8vIEVzdGlsb3MgYmFzZVxyXG4gICAgcy5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuICAgIHMuY29sb3IgICAgICA9IGNjLnRleHQ7XHJcbiAgICBzLmJvcmRlciAgICAgPSAnMXB4IHNvbGlkICcgKyBjYy5ib3JkZXI7XHJcbiAgICBzLnRleHRBbGlnbiAgPSBraW5kID09PSAnbWFwJyA/ICdjZW50ZXInIDogJ2xlZnQnO1xyXG5cclxuICAgIC8vIFByaW9yaWRhZCB2aXN1YWw6IHNlbGVjY2lvbmFkbyA+IGZvY28gPiBob3ZlciA+IGJhc2VcclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgfSBlbHNlIGlmIChmb2N1c01hdGNoKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICB9IGVsc2UgaWYgKGlzSG92ZXIpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbGFzIGRlIHBhZGRpbmcgaW52aXNpYmxlcyBlbiBob2phXHJcbiAgICBzLm9wYWNpdHkgPSBpc1JlYWwgPyAnMScgOiAnMCc7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IENpY2xvIGRlIHZpZGEgPT09PT09PVxyXG4gIHJTaXplKCkge1xyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy5idWlsZExldmVscygpO1xyXG4gICAgdGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEludGVyYWNjacOzbiA9PT09PT09XHJcbiAgX3RvTG9jYWwoZSkge1xyXG4gICAgY29uc3QgbXggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgIGNvbnN0IG15ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnk7XHJcbiAgICByZXR1cm4geyB4OiBteCwgeTogbXkgfTtcclxuICB9XHJcblxyXG4gIF9oaXRUZXN0KG14LCBteSkge1xyXG4gIGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgeiA9IGx2bC56b25lOyAgLy8geCB5IHcgeWEgaW5jbHV5ZW4gY29udGVudFhcclxuICAgIGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaCkgY29udGludWU7XHJcblxyXG4gICAgICBpZiAobHZsLnR5cGUgPT09ICdtYXAnKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGx2bC5pdGVtc1tpXS56b25lO1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiB0cnVlIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5Sb3dzID0gTWF0aC5tYXgobHZsLml0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgY29uc3QgaXR6ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldLnpvbmUgOiB7IHg6IHoueCwgeTogei55ICsgaSAqIHRoaXMubGluZUgsIHc6IHoudywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiBpc1JlYWwgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IEw6IC0xLCBpOiAtMSwgcmVhbDogZmFsc2UgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vtb3ZlJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgdGhpcy5ob3ZlciA9IChodC5MICE9PSAtMSAmJiBodC5yZWFsKSA/IHsgbGV2ZWw6IGh0LkwsIGluZGV4OiBodC5pIH0gOiB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZWRvd24nKSB7XHJcbiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fdG9Mb2NhbChlKTtcclxuICAgICAgY29uc3QgaHQgPSB0aGlzLl9oaXRUZXN0KHgsIHkpO1xyXG4gICAgICBpZiAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdEF0KGh0LkwsIGh0LmkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNldXAnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIChPcGNpb25hbCkgdGVjbGFkbzogaW50ZWdyYXIgbmF2ZWdhY2nDs24gZW4gR3VpIHkgcmVlbnZpYXIgYXF1w60gc2kgc2UgZGVzZWFcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIFNlbGVjY2nDs24gKyBhdXRvY29tcGxldGFkbyArIG5vdGlmaWNhY2nDs25cclxuICBfc2VsZWN0QXQoTCwgaSkge1xyXG4gICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICBjb25zdCBjaG9zZW4gPSBsdmwuaXRlbXNbaV07XHJcbiAgICBpZiAoIWNob3NlbiB8fCAhY2hvc2VuLmtleSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpO1xyXG4gICAgYmFzZVtMXSA9IGNob3Nlbi5rZXk7XHJcblxyXG4gICAgY29uc3QgbmV3UGF0aCA9IHRoaXMuYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2UpO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSBuZXdQYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIC8vIOKchSBBY3R1YWxpemEgb2JqZXRvIGVubGF6YWRvIChzaSBleGlzdGUpIHkgZGlzcGFyYSBjYWxsYmFja3Mg4oCcY2zDoXNpY29z4oCdXHJcbiAgICB0aGlzLnNlbmQobmV3UGF0aCk7IC8vIGVzY3JpYmUgZW4gb2JqZWN0TGlua1tvYmplY3RLZXldIHNpIGhheSByZWZlcmVuY2lhXHJcbiAgICB0aGlzLmNoYW5nZUNiKHRoaXMudGFiSW5kZXgsIHRoaXMuaXRlbUluZGV4LCBuZXdQYXRoKTtcclxuICB9XHJcblxyXG5cclxuICAvLyA9PT09PT09IEFQSSBww7pibGljYSA9PT09PT09XHJcbiAgc2V0VmFsdWUocGF0aCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRUcmVlKHRyZWUpIHtcclxuICAgIHRoaXMudHJlZSA9IHRyZWUgfHwge307XHJcbiAgICAvLyByZWNhbGN1bGFyIGxlYWZNYXggZW4gcHLDs3hpbWEgcGFzYWRhXHJcbiAgICB0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXMoeyBmb2N1c2VkLCBmb2N1c1BhdGgsIGZvY3VzTGV2ZWwgfSkge1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c2VkID09PSAnYm9vbGVhbicpIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb2N1c1BhdGgpKSB0aGlzLmZvY3VzUGF0aCA9IGZvY3VzUGF0aC5zbGljZSgpO1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c0xldmVsID09PSAnbnVtYmVyJykgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IFB1YmxpY2FjacOzbiBkZSBhbHR1cmEgPT09PT09PVxyXG4gIF9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCkge1xyXG4gICAgbGV0IGMgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxldmVscy5sZW5ndGg7IGkrKykgaWYgKHRoaXMubGV2ZWxzW2ldLnR5cGUgPT09ICdtYXAnKSBjKys7XHJcbiAgICByZXR1cm4gYztcclxuICB9XHJcblxyXG4gIF9nZXRDdXJyZW50TGVhZkxlbmd0aCgpIHtcclxuICAgIGNvbnN0IGxhc3QgPSB0aGlzLmxldmVsc1t0aGlzLmxldmVscy5sZW5ndGggLSAxXTtcclxuICAgIHJldHVybiBsYXN0ICYmIGxhc3QudHlwZSA9PT0gJ2xpc3QnID8gbGFzdC5pdGVtcy5sZW5ndGggOiAwO1xyXG4gIH1cclxuXHJcbiAgX3B1Ymxpc2hIZWlnaHQoKSB7XHJcbiAgICBjb25zdCBpbnRlciA9IHRoaXMuX2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKTtcclxuICAgIGNvbnN0IGxlYWZMZW4gPSBNYXRoLm1heCh0aGlzLmxlYWZNYXgsIHRoaXMuX2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkpO1xyXG4gICAgY29uc3QgbGVhZkggID0gbGVhZkxlbiAqIHRoaXMubGluZUg7XHJcbiAgICBjb25zdCBpbnRlckggPSBpbnRlciAqICh0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcCk7XHJcbiAgICBjb25zdCB0b3RhbEggPSBpbnRlckggKyAoaW50ZXIgPyB0aGlzLmxldmVsR2FwIDogMCkgKyBsZWFmSDtcclxuXHJcbiAgICAvLyBBY3R1YWxpemEgbcOpdHJpY2FzIGRlbCBwcm90byAobG8gcXVlIHN1bWEgZWwgR1VJKVxyXG4gICAgdGhpcy5oID0gdG90YWxIO1xyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG5cclxuICAgIC8vIEF2aXNhciBhbCBHVUkgeSByZWZyZXNjYXIgem9uYXNcclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYWluKSB0aGlzLm1haW4uY2FsYygpO1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBCb29sIH0gZnJvbSAnLi4vcHJvdG8vQm9vbC5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL3Byb3RvL0J1dHRvbi5qcyc7XHJcbmltcG9ydCB7IENpcmN1bGFyIH0gZnJvbSAnLi4vcHJvdG8vQ2lyY3VsYXIuanMnO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL3Byb3RvL0NvbG9yLmpzJztcclxuaW1wb3J0IHsgRnBzIH0gZnJvbSAnLi4vcHJvdG8vRnBzLmpzJztcclxuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9wcm90by9HcmFwaC5qcyc7XHJcbmltcG9ydCB7IEdyb3VwICB9IGZyb20gJy4uL3Byb3RvL0dyb3VwLmpzJztcclxuaW1wb3J0IHsgSm95c3RpY2sgfSBmcm9tICcuLi9wcm90by9Kb3lzdGljay5qcyc7XHJcbmltcG9ydCB7IEtub2IgfSBmcm9tICcuLi9wcm90by9Lbm9iLmpzJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uL3Byb3RvL0xpc3QuanMnO1xyXG5pbXBvcnQgeyBOdW1lcmljIH0gZnJvbSAnLi4vcHJvdG8vTnVtZXJpYy5qcyc7XHJcbmltcG9ydCB7IFNsaWRlIH0gZnJvbSAnLi4vcHJvdG8vU2xpZGUuanMnO1xyXG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9wcm90by9UZXh0SW5wdXQuanMnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL3Byb3RvL1RpdGxlLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0LmpzJztcclxuaW1wb3J0IHsgQml0bWFwIH0gZnJvbSAnLi4vcHJvdG8vQml0bWFwLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICcuLi9wcm90by9TZWxlY3Rvci5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi4vcHJvdG8vRW1wdHkuanMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vcHJvdG8vSXRlbS5qcyc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi9wcm90by9HcmlkLmpzJztcclxuaW1wb3J0IHsgUGFkMkQgfSBmcm9tICcuLi9wcm90by9QYWQyRC5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFRyZWVMaXN0IH0gZnJvbSAnLi4vcHJvdG8vVHJlZUxpc3QuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndHJlZWxpc3QnOiBuID0gbmV3IFRyZWVMaXN0KG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Q0FBQTtDQUNBO0NBQ0E7QUFDQTtBQUNZLE9BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsTUFBTSxDQUFDLEdBQUc7Q0FDVixFQUFFLEVBQUUs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LEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzNCLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ3pDO0NBQ0E7Q0FDQSxNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtDQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0NBQ3JCLE9BQU87QUFDUDtDQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0NBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDMUIsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtDQUN2QixNQUFNLElBQUksQ0FBQyxD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QUksQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO0NBQ3JCLEdBQUc7QUFDSDtDQUNBLEVBQUUsWUFBWSxFQUFFLFlBQVk7Q0FDNUIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztDQUN4RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0NBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0NBQ3RELEdBQUc7QUFDSDtDQUNBLEVBQUUsU0FBUyxFQUFFLFVBQVUsSUFBSSxFQUFFO0NBQzdCLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztDQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztDQUN4QyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztDQUNuQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7Q0FDckMsR0FBRztBQUNIO0NBQ0EsRUFBRSxVQUFVLEVBQUUsWUFBWTtD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R0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLEdBQUcsQ0FBQztDQUM3RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEdBQUc7Q0FDMUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDMUIsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHO0NBQ3RDLFVBQVUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDO0NBQ2pFLFNBQVM7Q0FDVCxRQUFRLE9BQU8sUUFBUSxDQUFDO0NBQ3hCLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0NBQzlCLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztDQUMzQyxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDNUQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM5QjtDQUNBLFFBQVEsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxQjtDQUNBLFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUMzQjtDQUNBLFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0NBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtDQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0NBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7Q0FDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FB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LE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztDQUNwSixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3JIO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVB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WUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekg7Q0FDQTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0E7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztDQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0NBQ0E7QUFDQTtDQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdGO0NBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMvQjtDQUNBLFNBQVMsTUFBTTtDQUNmO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzVGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckksWUFBWSxDQUFDLENB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QztBQUN4QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDNUIsSUFBSSxJQUFJ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QU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7Q0FDaEMsS0FBSyxNQUFNO0NBQ1gsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDekMsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0NBQzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDMUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUN0QyxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDMUI7Q0FDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDcEQsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7Q0FDOUIsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDMUIsT0FBTztDQUNQLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFO0NBQ1YsTUFBTSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUk7Q0FDMUIs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QUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQ3RELElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNqRTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUM7QUFDVjtDQUNBLElBQUksUUFBUSxJQUFJLENBQUMsU0FBUztDQUMxQixNQUFNLEtBQUssQ0FBQztDQUNaLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNkLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ2hCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ2pCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO0NBQ2xCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0NBQ25CLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDO0NBQ3BCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0NBQ3JCLFFBQVEsTUFBTTtDQUNkLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUNsRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJ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QUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBQztBQUN0RDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFHO0NBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07Q0FDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07Q0FDNUI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7Q0FDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxF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QUssR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsS0FBSTtDQUNuRSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ25ELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztDQUNBLFNBQVM7QUFDVDtBQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Q0FDckQsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUU7Q0FDcEUsU0FBUztDQUNUO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NB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QUMvQjtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUM7QUFDdkM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtDQUNyQixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7Q0FDbEQ7Q0FDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7Q0FDQTtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0NBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztDQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFJO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7Q0FDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFDO0NBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztDQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUU7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUk7Q0FDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwQztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU07Q0FDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtDQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtDQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRTtBQUN4QjtDQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQztDQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUN0QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUNsSTtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtDQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0NBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0NBQ0EsUUFBUSxRQUFRLElBQUk7Q0FDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0NBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztDQUNqRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0NBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7Q0FDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7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QUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNuQztDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7Q0FDQTtDQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztDQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QztDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7Q0FDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0NBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFH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Q0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUN4QyxlQUFlLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQ25EO0NBQ0EsT0FBTyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdkMsT0FBTztBQUNQO0NBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0NBQ3BEO0NBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDakM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0NBQ0EsU0FBUztDQUNULEtBQUs7Q0FDTCxJQUFJO0NBQ0osR0FBRztBQUNIO0NBQ0EsRUFBRTtBQUNGO0NBQ0E7QUFDQTtDQUNBLENBQUMsU0FBUyxDQUFDLEdBQUc7QUFDZDtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7Q0FDakUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN0QjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2xELFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9DO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxJQUFJLENBQUMsR0FBRztBQUNUO0NBQ0EsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDZjtDQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7Q0FDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0NBQ3RDO0NBQ0EsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0EsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEI7Q0FDQSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM5QztDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCO0NBQ0EsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztDQUN0QztDQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDZjtDQUNBLEtBQUssSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hFO0NBQ0EsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Q0FDeEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0NBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3hDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDN0U7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkQsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckQ7Q0FDQSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTztBQUNwQjtDQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUN4RCxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ3ZFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7Q0FDM0UsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QztDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2Y7Q0FDQSxFQUFFLElBQUksQ0FBQyxZQUFZLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUQsYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxhQUFhLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7Q0FDN0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNwQjtDQUNBLEtBQUssSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUN0QyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxFQUFFO0FBQzFDO0NBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDNUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU07Q0FDMUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUM5QztDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0NBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDdkIsTUFBTTtDQUNOLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNoQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDdEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzlDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztDQUN6QixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxXQUFXLENBQUMsR0FBRztBQUNoQjtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7Q0FDakIsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFLO0FBQ2Y7Q0FDQSxLQUFjLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU87Q0FDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDbkMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7Q0FDQSxLQUFLLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7Q0FDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztDQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUM7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0E7Q0FDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7Q0FDNUQ7Q0FDQTtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtDQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7Q0FDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtDQUNwQztDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztDQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0NBQzVDLEtBQUssSUFBSSxD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QyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDbEUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7Q0FDbEQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7Q0FDakQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMvRDtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7Q0FDN0s7QUFDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLG9DQUFvQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0RBQWtELEVBQUUsQ0FBQztBQUMxSjtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFD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QyxLQUFLLEVBQUUsQ0FBQztDQUNuQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMxQyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUUsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsQyxZQUFZLENBQUMsRUFBRSxDQUFDO0FBQ2hCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRztBQUNaO0NBQ0EsUUFBUSxLQUFLLENBQUMsSUFBSSxHQUFFO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUN6QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7Q0FDbEUsYUFBYSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzFEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FB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QyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DO0NBQ0EsS0FBSztDQUNMO0NBQ0E7O0NDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Q0FDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFD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QVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0NBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0NBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7Q0FDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQztDQUM5QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFJO0NBQzlDLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7Q0FDckMsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUMzQyxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQztDQUNoRixpQkFBaUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztDQUMzRCxTQUFTO0NBQ1QsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFdBQVcsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQ0FBaUM7Q0FDcEUsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUc7Q0FDOUIsUUFBUSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUk7Q0FDckMsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQW9CO0NBQ2pHLGlCQUFpQixDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFPO0NBQ3RFLFlBQVksQ0FBQyxHQUFFO0NBQ2YsU0FBUztDQUNULFFBQVEsT0FBTyxDQUFDO0NBQ2hCLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ25GLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDcEgsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUs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TSxDQUFDLEtBQUk7Q0FDeEQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0NBQzFELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUMzRCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7QUFDbkM7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87Q0FDbkUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0FBQ3BFO0NBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0NBQy9ELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7Q0FDcEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMseUJBQXdCO0FBQ3RFO0NBQ0EsU0FBUztDQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFFO0FBQzNCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRTtB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Q0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0NDNWNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN2RDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztDQUMxQyxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Q0FDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztDQUN6QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFJO0FBQzVEO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztDQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7Q0FDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUss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SSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUNoRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7Q0FDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7Q0FDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7Q0FDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtDQUNBLFFBQVEsSUFBSSxDQUFD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LE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDN0QsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FD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QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7Q0FDekQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxH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SSxDQUFDLENBQUMsQ0FBQztBQUMzQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0NBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztDQUM5QjtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDckQ7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7Q0FDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN4RCxhQUFhLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztDQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3hELGFBQWE7Q0FDYjtDQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQztDQUNBLFlBQVksT0FBTyxJQUFJLENBQUM7Q0FDeEI7Q0FDQSxTQUFTO0NBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUN6RCxRQUFRLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUM1QyxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUMxQztBQUNBO0NBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFlBQVksS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUM1QyxZQUFZLElBQUksR0FBRyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssS0FBSyxDQUFDO0NBQ3JELFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDckQsWUFBWSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUMxQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUc7QUFDM0M7Q0FDQSxZQUFZLENBQUMsR0FBRyxVQUFVLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUMvQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDL0MsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ2hELFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUNoRCxZQUFZLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUM5RDtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1RDtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDckU7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDakMsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztDQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3JGO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0NBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7Q0FDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztDQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3pEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTs7Q0NsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztDQUNyQztBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7Q0FDQTtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0NBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7Q0FDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtDQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcscUNBQXFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNERBQTRELENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNyVSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsZ0RBQWdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNySztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsaUJB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Q0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUU7QUFDNUQ7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRTtDQUNoQixRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ25DLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNsQyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDckUsU0FBUztDQUNULFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0NBQzFCLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0NBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztDQUMxRCxhQUFhLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ2hDO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzFCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxVQUFVLENBQUMsRUFBRTtBQUNqQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU87QUFDcEM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUM5QjtDQUNBLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTztBQUM5QztDQUNBLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxD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QUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtBQUNBO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDMUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDNUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztDQUNsRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUMxRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUN2QjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN4RCxhQUFhLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDakQsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUMxQixZQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0NBQzdCLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQy9DLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztDQUNqRCxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDckQsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ2xELFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztDQUN0RCxTQUFTO0NBQ1QsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQ3JCLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3hELFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3hELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0I7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxD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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVE7Q0FDL0QsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7Q0FDbkQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUN0RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0NBQ3BDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzdCO0NBQ0EsU0FBUztBQUNUO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztBQUMxUDtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFB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QUFDLEdBQUU7Q0FDL0IsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7Q0FDbEMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFHO0NBQ3ZDLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDdEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztBQUN4QjtDQUNBLFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUNsQjtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUU7Q0FDbEUsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7Q0FDNUQsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbkQsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDcEQsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDelRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztDQUNqQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0NBQ3RCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztDQUNsRCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Q0FDOUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNsRDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3BDO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0NBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN0QztDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDNUI7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDekI7Q0FDQTtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHO0NBQ3hCLE1BQU0sS0FBSztDQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTO0NBQ3hCLFFBQVEsa0RBQWtEO0NBQzFELFFBQVEsRUFB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LENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7Q0FDM0IsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ25CLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztDQUM5QjtDQUNBO0NBQ0EsS0FBSyxNQUFNO0NBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDcEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Q0FDckIsTUFBTSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVFO0NBQ0E7Q0FDQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0NBQ0E7Q0FDQSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RDtDQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNoRCxNQUFNLElBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDM0Q7Q0FDQSxNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRDtDQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENB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LEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFEO0NBQ0EsSUFBSSxJQUFJLE9BQU87Q0FDZixNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDM0M7QUFDQTtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDcEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNsQixHQUFHO0NBQ0g7O0NDN1NPLE1BQU0s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QUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzdELFlBQVksT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3ZDLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQztDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7Q0FDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0NBQy9CO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztDQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztDQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7Q0FDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7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QVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQztBQUNqRDtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7Q0FDQSxL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QUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztDQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7Q0FDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDL0xBO0FBRUE7Q0FDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtDQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztDQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJ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QyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQ3BFLGFBQWE7Q0FDYixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDdEM7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztDQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtDQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdB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SUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFFO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0NBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7Q0FDQTtBQUNBO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlGO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0NBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0NBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDbkIs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QUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Q0FDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFD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R0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUM3RSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ3BFLE1BQU0sS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDaEcsS0FBSztDQUNMLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDOUM7Q0FDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNqRCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakMsTUFBa0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Q0FDbkMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0NBQzlCLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNoRCxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0NBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDeEQsUUFBUSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7Q0FDekI7QUFDQTtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ25ELFVBQVUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN0RCxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7Q0FDbEQsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDO0NBQ3JCLFNBQVM7Q0FDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUM1QyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDeEMsT0FBTyxNQUFNO0NBQ2I7Q0FDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0NBQ25DLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDN0Q7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ25EO0NBQ0EsU0FBUyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Q0FDaEQsU0FBUyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ3hDLFVBQVUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMvQixVQUFVLE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ2pHO0NBQ0EsV0FBVyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzlFLFVBQVUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDL0MsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7Q0FDM0QsU0FBUztDQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJ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LENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3RDO0NBQ0E7Q0FDQSxJQUFJLEdBQUcsQ0FBQyxXQUFXLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQzdDO0NBQ0E7Q0FDQSxJQUFJLE1BQU0sUUFBUSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7Q0FDekYsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDL0QsSUFBSSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzlFLElBQUksTUFBTSxPQUFPLE1BQU0sTUFBTSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNwRjtDQUNBO0NBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDM0IsSUFBSSxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDM0IsSUFBSSxDQUFDLENBQUMsTUFBTSxPQUFPLFlBQVksR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0NBQzVDLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDdEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxRQUFRLEVBQUU7Q0FDbEIsTUFBTSxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7Q0FDL0IsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7Q0FDOUIsS0FBSyxNQUFNLElBQUksVUFBVSxFQUFFO0NBQzNCLE1BQU0sQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO0NBQ3ZDLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzVCLEtBQUssTUFBTSxJQUFJLE9BQU8sRUFBRTtDQUN4QixNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQztDQUNoQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUM1QixLQUFLO0FBQ0w7Q0FDQTtDQUNBLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNuQyxHQUFHO0FBQ0g7Q0FDQTtDQUNBLEVBQUUsS0FBSyxHQUFHO0NBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2xELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0NBQ3hCLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxHQUFHO0NBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Q0FDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0E7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Q0FDZCxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkMsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZDLElBQUksT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQzVCLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7Q0FDbkIsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDL0MsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztDQUN2QixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVM7QUFDM0U7Q0FDQSxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7Q0FDOUIsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDbkQsVUFBVSxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUN4QyxVQUFVLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FB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SSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7Q0FDcEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDdkMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNyQztDQUNBO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ2pELElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Q0FDNUIsR0FBRztDQUNIOztBQ2xZWSxPQUFDLEdBQUcsR0FBRyxZQUFZO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDMUI7Q0FDQSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7Q0FDQSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3RDO0NBQ0EsWUFBWSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hCLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0I7Q0FDQSxTQUFTLE1BQU0sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDOUM7Q0FDQSxZQUFZLEdBQUcsR0FBRyxJQUFJLENBQUM7Q0FDdkIsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3pEO0NBQ0EsWUFBWSxJQUFJLEdB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QUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDZjtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDdkU7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztDQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNO0NBQ2YsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLGFBQWEsQ0FBQztBQUN2RTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN2RCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztDQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztDQUNuQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0NBQ25CLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzdCO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pCO0NBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHO0NBQzVCLE1BQU0sS0FBSztDQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO0NBQ3BCLFFBQVEsK0NBQStDO0NBQ3ZELFFBQVEsRUFBRSxDQUFDLE9BQU87Q0FDbEIsUUFBUSxJQUFJO0NBQ1osUUFBUSxJQUFJLENBQUMsTUFBTTtDQUNuQixLQUFLLENBQUM7QUFDTjtDQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsR0FBRztDQUNqQyxNQUFNLEtBQUs7Q0FDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztDQUNwQixRQUFRLDBEQUEwRDtDQUNsRSxLQUFLLENBQUM7Q0FDTjtDQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2hEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0NBQ3hCLElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxvQ0FBb0MsR0FBRyxFQUFFLENBQUM7Q0FDNUUsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHO0NBQzFCLE1BQU0sS0FBSztDQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLHNCQUFzQjtDQUN4RCxLQUFLLENBQUM7Q0FDTixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHO0NBQzdCLE1BQU0sS0FBSztDQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO0NBQ3BCLFFBQVEsd0JBQXdCO0NBQ2hDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCLFFBQVEsNENBQTRDO0NBQ3BELFFBQVEsRUFBRSxDQUFDLFVBQVU7Q0FDckIsUUFBUSxHQUFHO0NBQ1gsS0FBSyxDQUFDO0NBQ04sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUM7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUc7Q0FDM0IsTUFBTSxLQUFLO0NBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7Q0FDcEIsUUFBUSxhQUFhO0NBQ3JCLFFBQVEsRUFBRSxDQUFDLE1BQU07Q0FDakIsUUFBUSw0QkFBNEI7Q0FDcEMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDekIsUUFBUSxrQkFBa0I7Q0FDMUIsS0FBSyxDQUFDO0NBQ04sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0M7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3hEO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0NBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRztDQUMzQixNQUFNLEtBQUs7Q0FDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRztDQUNsQixRQUFRLHFFQUFxRTtDQUM3RSxRQUFRLENBQUM7Q0FDVCxRQUFRLGdDQUFnQztDQUN4QyxRQUFRLENBQUM7Q0FDVCxRQUFRLHFDQUFxQztDQUM3QyxRQUFRLElBQUksQ0FBQyxFQUFFO0NBQ2YsUUFBUSxrQkFBa0I7Q0FDMUIsU0FBUyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNyQixRQUFRLFlBQVk7Q0FDcEIsUUFBUSxFQUFFLENBQUMsSUFBSTtDQUNmLFFBQVEsR0FBRztDQUNYLEtBQUssQ0FBQztDQUNOLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQzFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU07Q0FDekMsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztDQUMxQixRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztBQUNqRDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDM0QsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNsRTtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Q0FDaEQsTUFBTSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwRTtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtDQUM1QixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7Q0FDaEQsS0FBSyxNQUFNO0NBQ1gsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0NBQ3RDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztDQUN4QyxNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZCLEtBQUs7QUFDTDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVTtDQUNuQixNQUFNLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztDQUNuRSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekU7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNwQjtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN6QztDQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNwQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7Q0FDekIsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDO0NBQ3RCLE1BQU0sSUFBSSxFQUFFLGFBQWE7Q0FDekIsTUFBTSxPQUFPLEVBQUUsQ0FBQztDQUNoQixNQUFNLE9BQU8sRUFBRSxDQUFDO0NBQ2hCLE1BQU0sS0FBSyxFQUFFLENBQUM7Q0FDZCxNQUFNLEdBQUcsRUFBRSxJQUFJO0NBQ2YsTUFBTSxPQUFPLEVBQUUsR0FBRztDQUNsQixLQUFLLENBQUMsQ0FBQztDQUNQLEdBQUc7QUFDSDtDQUNBLEVBQUUsZ0JBQWdCLEdBQUc7Q0FDckIsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDO0NBQ3RCLE1BQU0sSUFBSSxFQUFFLGFBQWE7Q0FDekIsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0NBQ2pCLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztDQUNqQixNQUFNLEtBQUssRUFBRSxDQUFDO0NBQ2QsTUFBTSxHQUFHLEVBQUUsSUFBSTtDQUNmLE1BQU0sT0FBTyxFQUFFLEdBQUc7Q0FDbEIsS0FBSyxDQUFDLENBQUM7Q0FDUCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0NBQ3ZCO0FBQ0E7Q0FDQTtDQUNBO0NBQ0EsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDO0NBQ3RCLE1BQU0sSUFBSSxFQUFFLFdBQVc7Q0FDdkIsTUFBTSxPQUFPLEVBQUUsQ0FBQztDQUNoQixNQUFNLE9BQU8sRUFBRSxDQUFDO0NBQ2hCLE1BQU0sS0FBSyxFQUFFLENBQUM7Q0FDZCxNQUFNLEdBQUcsRUFBRSxJQUFJO0NBQ2YsTUFBTSxPQUFPLEVBQUUsR0FBRztDQUNsQixLQUFLLENBQUMsQ0FBQztDQUNQLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7Q0FDZixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3RDLElBQUksSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0NBQzlDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hCO0NBQ0EsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUM1QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLGFBQWEsR0FBRztDQUNsQixJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Q0FDM0MsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVO0NBQ3hDLFFBQVEsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO0NBQ25ELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVTtDQUNuQyxRQUFRLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztDQUNuRCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7Q0FDN0U7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0NBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO0NBQzVDLEdBQUc7QUFDSDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxNQUFNLEdBQUcsRUFBRTtBQUNiO0NBQ0EsRUFBRSxVQUFVLEdBQUc7Q0FDZixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGVBQWU7Q0FDMUMsTUFBTSw4QkFBOEI7Q0FDcEMsTUFBTSxRQUFRO0NBQ2QsS0FBSyxDQUFDO0NBQ04sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzRTtDQUNBO0NBQ0EsR0FBRztBQUNIO0NBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFO0NBQ2QsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLE9BQU87QUFDckM7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzlELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztDQUN0QyxHQUFHO0FBQ0g7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxNQUFNLEdBQUc7Q0FDWCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztDQUN4QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLE9BQU8sR0FBRztDQUNaLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNyQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRTtDQUM1QixJQUFJLElBQUksSUFBSTtDQUNaLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO0NBQ3BCLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0NBQzVDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQ2xFLE9BQU8sQ0FBQztDQUNSO0NBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7Q0FDcEIsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Q0FDNUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Q0FDN0MsT0FBTyxDQUFDO0NBQ1I7QUFDQTtDQUNBO0NBQ0EsR0FBRztBQUNIO0NBQ0EsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0NBQ2Y7Q0FDQSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUNwQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN2QyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUU7Q0FDZixJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0NBQ3JCLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hELEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Q0FDckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0NBQzdDLEdBQUc7QUFDSDtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtDQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxRQUFRLEdBQUcsU0FBUyxDQUFDO0NBQzdELEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7Q0FDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxRQUFRLENBQUM7Q0FDN0QsR0FBRztBQUNIO0NBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0NBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7Q0FDOUIsSUFBSSxPQUFPLElBQUksQ0FBQztDQUNoQixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtDQUNWLElBQUksSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0NBQzNCLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN6QjtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRTtDQUN2QixNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsTUFBTSxRQUFRLENBQUM7Q0FDZixRQUFRLEtBQUssS0FBSztDQUNsQixVQUFVLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUN6QixVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0NBQ25ELFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7Q0FDdkQsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUM1QyxVQUFVLE1BQU07QUFDaEI7Q0FDQTtDQUNBLFFBQVEsS0FBSyxZQUFZO0NBQ3pCLFVBQVUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztDQUNwQyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0NBQ25ELFVBQVUsTUFBTTtDQUNoQixRQUFRLEtBQUssWUFBWTtDQUN6QixVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0NBQ25ELFVBQVUsTUFBTTtBQUNoQjtDQUNBO0NBQ0EsUUFBUSxLQUFLLFlBQVk7Q0FDekIsVUFBVSxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0NBQ2xDLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7Q0FDM0QsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUNoRCxVQUFVLE1BQU07Q0FDaEI7Q0FDQSxPQUFPO0FBQ1A7Q0FDQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7Q0FDeEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLFVBQVUsQ0FBQztDQUN0QixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsV0FBVyxHQUFHO0NBQ2hCLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDO0NBQzFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtDQUN0QjtDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN6QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDekIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztDQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEI7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDbkIsSUFBSSxPQUFPLElBQUksQ0FBQztDQUNoQixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtDQUNkLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUN2QixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzVDO0NBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUN6QjtDQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2xCO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BFO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxRQUFRLENBQUM7Q0FDMUUsU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUMvQztDQUNBLElBQUksT0FBTyxJQUFJLENBQUM7Q0FDaEIsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7Q0FDakI7QUFDQTtDQUNBO0NBQ0E7Q0FDQSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7Q0FDQSxJQUFJLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztDQUN2QixJQUFJLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUM1QjtDQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDL0QsSUFBSSxJQUFJLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtDQUN6QyxNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztDQUN6QixNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0NBQy9CLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO0FBQ3RCO0NBQ0EsSUFBSSxRQUFRLElBQUk7Q0FDaEIsTUFBTSxLQUFLLFNBQVM7Q0FDcEIsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdkU7Q0FDQSxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDNUQsUUFBUSxJQUFJLElBQUksS0FBSyxPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVE7Q0FDN0QsVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7Q0FDekIsVUFBVSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNsQyxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE1BQU07Q0FDZCxNQUFNLEtBQUssUUFBUTtDQUNuQixRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztDQUMzQixRQUFRLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztDQUNuRSxRQUFRLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRTtDQUNsQyxVQUFVLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ25ELFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU07Q0FDL0MsY0FBYyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztDQUNoQyxjQUFjLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakM7Q0FDQSxVQUFVLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUN0QixVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDM0IsVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3hCLFNBQVM7QUFDVDtDQUNBLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxRQUFRO0NBQ25CLFFBQVEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0NBQ25FLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0NBQ25FLFFBQVEsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3ZELFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzlFO0NBQ0EsUUFBUSxNQUFNO0NBQ2QsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztDQUNuQyxJQUFJLElBQUksV0FBVyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbkM7Q0FDQSxJQUFJLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3hDLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDMUM7Q0FDQSxJQUFJLElBQUksTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM1QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0NBQ3JCLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0NBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO0NBQy9CLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQ3pCLE1BQU0sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FFMUIsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztDQUM5QixLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFO0NBQ3JCLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUMxQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDMUIsS0FBSztDQUNMLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtDQUNiLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUM1QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3pCLElBQUksT0FBTyxJQUFJLENBQUM7Q0FDaEIsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7Q0FDZixJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPO0FBQzdCO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNyQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDN0IsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDO0NBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN4QjtDQUNBO0NBQ0EsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLEdBQUcsR0FBRztDQUNSO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztDQUN0QixJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN0QjtDQUNBLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7Q0FDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCO0NBQ0EsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUM5QyxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7Q0FDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztDQUMxRSxXQUFXO0NBQ1gsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN6QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3pCO0NBQ0EsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUNoRCxPQUFPO0NBQ1AsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQjtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLE9BQU87QUFDM0I7Q0FDQSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ25DLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoQjtDQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDekI7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxDQUFDO0NBQ2IsR0FBRztBQUNIO0NBQ0E7QUFDQTtDQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtDQUNaLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUMvQixHQUFHO0FBQ0g7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0NBQ2QsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqQyxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0NBQ25CO0NBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hELE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzdCLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ2xCLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVjtBQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNO0NBQzNCLE1BQU0sSUFBSSxDQUFDO0FBQ1g7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDaEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUM1QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN4QyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUNyQixLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDeEIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDaEIsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNqQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLE1BQU0sR0FBRztDQUNYLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3pDLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxHQUFHO0NBQ1osSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDakIsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUNwRSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdkIsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLFNBQVMsR0FBRztDQUNkLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTztBQUNqQztDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Q0FDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Q0FDdkMsR0FBRztBQUNIO0NBQ0EsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFO0NBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTztBQUNqQztDQUNBLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDdEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDckI7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7Q0FDZixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckIsTUFBTSxPQUFPO0NBQ2IsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztDQUM1QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDaEIsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtDQUN0QyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ25DLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUTtDQUN6QixVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDdEUsT0FBTztDQUNQLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtDQUNkLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2xDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFO0NBQ1gsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUI7Q0FDQSxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQztDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7Q0FDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7Q0FDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztDQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNoRCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0s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QUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNsRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDbkQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekQ7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVTtDQUMzQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztDQUMxRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3ZDLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxHQUFHO0NBQ1gsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUM1QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Q0FDZCxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNsRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVE7Q0FDckIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM1RSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdDLEdBQUc7QUFDSDtDQUNBLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRTtDQUNsQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0NBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNoQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMxQixLQUFLO0NBQ0wsR0FBRztDQUNIOzs7Ozs7Ozs7Ozs7OzsifQ== diff --git a/build/uil.min.js b/build/uil.min.js index 1a49c44..c314212 100644 --- a/build/uil.min.js +++ b/build/uil.min.js @@ -8535,9 +8535,13 @@ this.value = newPath.slice(); this.update(); + + // ✅ Actualiza objeto enlazado (si existe) y dispara callbacks “clásicos” + this.send(newPath); // escribe en objectLink[objectKey] si hay referencia this.changeCb(this.tabIndex, this.itemIndex, newPath); } + // ======= API pública ======= setValue(path) { this.value = Array.isArray(path) ? path.slice() : []; @@ -9484,4 +9488,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuICAgIC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG4gICAgLy8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG4gICAgby5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuICAgIG8ubmFtZSA9IG8ubmFtZSB8fCAnVHJlZUxpc3QnO1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgLy8gRGF0b3MgJiBlc3RhZG9cclxuICAgIHRoaXMudHJlZSAgICAgICA9IG8udHJlZSB8fCB7fTtcclxuICAgIHRoaXMudmFsdWUgICAgICA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNlZCAgICA9ICEhby5mb2N1c2VkO1xyXG4gICAgdGhpcy5mb2N1c1BhdGggID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSAnbnVtYmVyJyA/IG8uZm9jdXNMZXZlbCA6IC0xO1xyXG5cclxuICAgIHRoaXMudGFiSW5kZXggICA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuICAgIHRoaXMuaXRlbUluZGV4ICA9IG8uaXRlbUluZGV4ID8/IG51bGw7XHJcblxyXG4gICAgLy8gQ2FsbGJhY2tcclxuICAgIHRoaXMuY2hhbmdlQ2IgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcbiAgICAvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuICAgIHRoaXMubGluZUggICAgPSB0aGlzLmg7ICAgICAgICAgICAgICAgLy8gYWx0byBkZSBVTkEgZmlsYVxyXG4gICAgdGhpcy5sZXZlbEdhcCA9IHRoaXMuY29sb3JzLnN5IHx8IDI7ICAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmxlYWZNYXggID0gMDsgICAgICAgICAgICAgICAgICAgIC8vIHNlIGNhbGN1bGEgZW4gclNpemUoKVxyXG5cclxuICAgIC8vIE1vZGVsbyB2aXN1YWxcclxuICAgIHRoaXMubGV2ZWxzICAgPSBbXTsgICAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuICAgIHRoaXMuaXRlbXNEb20gPSBbXTsgICAvLyBlc3Blam8gRE9NIHBvciBuaXZlbFxyXG4gICAgdGhpcy5ob3ZlciAgICA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcbiAgICAvLyBDb250ZW5lZG9yIGludGVybm8gKGFic29sdXRvKVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpO1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG4gIHN0YXRpYyBpc01hcChub2RlKSAgeyByZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuICBzdGF0aWMgaXNMaXN0KG5vZGUpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuXHJcbiAgLy8gPT09PT09PSBSZWNvcnJpZG8gZGUgZGF0b3MgPT09PT09PVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG4gICAgICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG4gIGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG4gICAgbGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG4gICAgd2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgaWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcbiAgICAgIGNvbnN0IGswID0ga2V5c1swXTtcclxuICAgICAgcGF0aC5wdXNoKGswKTtcclxuICAgICAgbm9kZSA9IG5vZGVbazBdO1xyXG4gICAgfVxyXG4gICAgLy8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgLy8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG4gIGdldEFjdGl2ZVBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG4gIGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcbiAgICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gMDtcclxuICAgIGxldCBtID0gMDtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG4gICAgICBtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PVxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTml2ZWwgaW50ZXJtZWRpbzogY2xhdmVzIGRlbCBtYXBhIChob3Jpem9udGFsKVxyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6ICdtYXAnLFxyXG4gICAgICAgICAgaXRlbXM6IGtleXMubWFwKGsgPT4gKHsga2V5OiBrLCBsYWJlbDogaywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSksXHJcbiAgICAgICAgICB6b25lOiB7IHg6MCx5OjAsdzowLGg6IHRoaXMubGluZUggfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAobGFiZWwgPT4gKHsga2V5OiBsYWJlbCwgbGFiZWwsIHpvbmU6IHsgeDowLHk6MCx3OjAsaDowIH0gfSkpO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ2xpc3QnLCBpdGVtcywgem9uZTogeyB4OjAsIHk6MCwgdzowLCBoOiBoTGlzdCB9IH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuICBsYXlvdXRMZXZlbHMoKSB7XHJcbiAgICBcclxuICAgIGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7ICAgLy8gY29sdW1uYSBkZSBsYWJlbCArIHBhZGRpbmdcclxuICAgIGNvbnN0IHBhZFJpZ2h0ID0gODtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIGNvbnRlbnRYIC0gcGFkUmlnaHQ7XHJcblxyXG4gICAgXHJcbiAgICBsZXQgeSA9IDA7XHJcblxyXG4gICAgLy8gQWp1c3RhciBpdGVtc0RvbSBhIGNhbnRpZGFkIGRlIG5pdmVsZXNcclxuICAgIHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkgdGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuICAgIGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSkgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pdGVtc0RvbS5sZW5ndGggPSB0aGlzLmxldmVscy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICBsZXQgeCA9IGNvbnRlbnRYO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ21hcCcpO1xyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG4gICAgICAgIHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgIHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG4gICAgICAgIGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuICAgICAgICAgY29uc3Qgcm93cyA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbjtcclxuICAgICAgICAgIGNvbnN0IGl0ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldIDogeyBrZXk6IG51bGwsIGxhYmVsOiAnJywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9O1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgaXQuem9uZSA9IHsgeDogY29udGVudFgsIHk6IHkgKyBpICogdGhpcy5saW5lSCwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ2xpc3QnLCBpc1JlYWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgZmlsYXNcclxuICAgICAgICB0aGlzLl9wcnVuZVJvdyhMLCByb3dzKTtcclxuICAgICAgICB5ICs9IGhMaXN0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWp1c3RlcyBkZSBhbHRvIGludGVybm8gZGVsIGNvbnRlbmVkb3IgdmlzdWFsXHJcbiAgICBjb25zdCB0b3RhbEggPSB5O1xyXG4gICAgdGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArICdweCc7XHJcbiAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdG90YWxIICsgJ3B4JztcclxuXHJcbiAgICAvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcbiAgICB0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vIEVsaW1pbmEgbm9kb3MgRE9NIHNvYnJhbnRlcyBlbiBsYSBmaWxhIEwgYSBwYXJ0aXIgZGVsIMOtbmRpY2Uga2VlcFxyXG4gIF9wcnVuZVJvdyhMLCBrZWVwKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgLy8gc2kgbnVuY2Egc2UgY3Jlw7MsIG5hZGEgcXVlIGhhY2VyXHJcbiAgICBpZiAoIXJvdykgcmV0dXJuO1xyXG4gICAgZm9yIChsZXQgaiA9IGtlZXA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcclxuICAgICAgY29uc3QgZWwgPSByb3dbal07XHJcbiAgICAgIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHJvdy5sZW5ndGggPSBrZWVwO1xyXG4gIH1cclxuXHJcblxyXG4gIGVuc3VyZUl0ZW1Eb20oTCwgaSkge1xyXG4gICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgIHdoaWxlIChyb3cubGVuZ3RoIDw9IGkpIHJvdy5wdXNoKG51bGwpO1xyXG4gICAgaWYgKCFyb3dbaV0pIHtcclxuICAgICAgY29uc3QgZGl2ID0gdGhpcy5kb20oJ2RpdicsIFRvb2xzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7Jyk7XHJcbiAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgICByb3dbaV0gPSBkaXY7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93W2ldO1xyXG4gIH1cclxuXHJcbiAgcGFpbnRJdGVtRG9tKGRpdiwgTCwgaSwgaXQsIGtpbmQsIGlzUmVhbCA9IHRydWUpIHtcclxuICAgIGNvbnN0IHMgPSBkaXYuc3R5bGU7XHJcbiAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vIFBvc2ljacOzblxyXG4gICAgcy5sZWZ0ICAgPSBpdC56b25lLnggKyAncHgnO1xyXG4gICAgcy50b3AgICAgPSBpdC56b25lLnkgKyAncHgnO1xyXG4gICAgcy53aWR0aCAgPSBpdC56b25lLncgKyAncHgnO1xyXG4gICAgcy5oZWlnaHQgPSAoaXQuem9uZS5oIC0gMikgKyAncHgnO1xyXG5cclxuICAgIC8vIFRleHRvXHJcbiAgICBkaXYudGV4dENvbnRlbnQgPSBpc1JlYWwgPyBpdC5sYWJlbCA6ICcnO1xyXG5cclxuICAgIC8vIEVzdGFkb3NcclxuICAgIGNvbnN0IHNlbGVjdGVkICAgPSBpc1JlYWwgJiYgdGhpcy52YWx1ZVtMXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWVbTF0gPT09IGl0LmtleTtcclxuICAgIGNvbnN0IGluRm9jdXNMdmwgPSB0aGlzLmZvY3VzZWQgJiYgKHRoaXMuZm9jdXNMZXZlbCA9PT0gTCk7XHJcbiAgICBjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgKHRoaXMuZm9jdXNQYXRoW0xdID09PSBpdC5rZXkpO1xyXG4gICAgY29uc3QgaXNIb3ZlciAgICA9IGlzUmVhbCAmJiAodGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJiB0aGlzLmhvdmVyLmluZGV4ID09PSBpKTtcclxuXHJcbiAgICAvLyBFc3RpbG9zIGJhc2VcclxuICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICBzLmNvbG9yICAgICAgPSBjYy50ZXh0O1xyXG4gICAgcy5ib3JkZXIgICAgID0gJzFweCBzb2xpZCAnICsgY2MuYm9yZGVyO1xyXG4gICAgcy50ZXh0QWxpZ24gID0ga2luZCA9PT0gJ21hcCcgPyAnY2VudGVyJyA6ICdsZWZ0JztcclxuXHJcbiAgICAvLyBQcmlvcmlkYWQgdmlzdWFsOiBzZWxlY2Npb25hZG8gPiBmb2NvID4gaG92ZXIgPiBiYXNlXHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgIH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG4gICAgcy5vcGFjaXR5ID0gaXNSZWFsID8gJzEnIDogJzAnO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuICByU2l6ZSgpIHtcclxuICAgIHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoKSB7XHJcbiAgICB0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcbiAgICB0aGlzLmxheW91dExldmVscygpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG4gIF90b0xvY2FsKGUpIHtcclxuICAgIGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICBjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG4gICAgcmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcbiAgfVxyXG5cclxuICBfaGl0VGVzdChteCwgbXkpIHtcclxuICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgIGNvbnN0IHogPSBsdmwuem9uZTsgIC8vIHggeSB3IHlhIGluY2x1eWVuIGNvbnRlbnRYXHJcbiAgICBpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmxpbmVILCB3OiB6LncsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgaWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZXVwJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAoT3BjaW9uYWwpIHRlY2xhZG86IGludGVncmFyIG5hdmVnYWNpw7NuIGVuIEd1aSB5IHJlZW52aWFyIGFxdcOtIHNpIHNlIGRlc2VhXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICAgIHRoaXMuY2hhbmdlQ2IodGhpcy50YWJJbmRleCwgdGhpcy5pdGVtSW5kZXgsIG5ld1BhdGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBBUEkgcMO6YmxpY2EgPT09PT09PVxyXG4gIHNldFZhbHVlKHBhdGgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJlZSh0cmVlKSB7XHJcbiAgICB0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG4gICAgLy8gcmVjYWxjdWxhciBsZWFmTWF4IGVuIHByw7N4aW1hIHBhc2FkYVxyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBQdWJsaWNhY2nDs24gZGUgYWx0dXJhID09PT09PT1cclxuICBfY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpIHtcclxuICAgIGxldCBjID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBpKyspIGlmICh0aGlzLmxldmVsc1tpXS50eXBlID09PSAnbWFwJykgYysrO1xyXG4gICAgcmV0dXJuIGM7XHJcbiAgfVxyXG5cclxuICBfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcbiAgICByZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09ICdsaXN0JyA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuICB9XHJcblxyXG4gIF9wdWJsaXNoSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcbiAgICBjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuICAgIGNvbnN0IGxlYWZIICA9IGxlYWZMZW4gKiB0aGlzLmxpbmVIO1xyXG4gICAgY29uc3QgaW50ZXJIID0gaW50ZXIgKiAodGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXApO1xyXG4gICAgY29uc3QgdG90YWxIID0gaW50ZXJIICsgKGludGVyID8gdGhpcy5sZXZlbEdhcCA6IDApICsgbGVhZkg7XHJcblxyXG4gICAgLy8gQWN0dWFsaXphIG3DqXRyaWNhcyBkZWwgcHJvdG8gKGxvIHF1ZSBzdW1hIGVsIEdVSSlcclxuICAgIHRoaXMuaCA9IHRvdGFsSDtcclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuXHJcbiAgICAvLyBBdmlzYXIgYWwgR1VJIHkgcmVmcmVzY2FyIHpvbmFzXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0VBQUE7RUFDQTtFQUNBO0FBQ0E7QUFDWSxRQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLE1BQU0sQ0FBQyxHQUFHO0VBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0VBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0VBQ0EsRUFBRSxFQUFFLEVBQUUsSUFBSTtFQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUs7RUFDYixFQUFFLEtBQUssRUFBRSxLQUFLO0VBQ2QsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7RUFDQSxFQUFFLFVBQVUsRUFB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LENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN6QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMvRSxhQUFhLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRztFQUN6QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUN6RCxRQUFRLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDeEMsUUFBUSxPQUFPLENBQUMsQ0FBQztFQUNqQixLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRztBQUN6QjtFQUNBLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDNUU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUMxQjtFQUNBLFFBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakg7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtFQUN0QixRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDckMsUUFBUSxPQUFPLENBQUMsQ0FBQztFQUNqQixLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7RUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztFQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0VBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7RUFDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ25CLFNBQVM7RUFDVCxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFB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RyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNySDtFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDN0ksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFF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QUFDO0FBQ3pIO0VBQ0E7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7RUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtFQUNBO0FBQ0E7RUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtFQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7RUFDQSxTQUFTLE1BQU07RUFDZjtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvRixZQUFZLENBQUMsQ0FBQyxHQUFH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RUFBRTtBQUNGO0VBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0VBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtFQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENB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QUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzNDO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7RUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7RUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0VBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztFQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ25DO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEs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SSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RSxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtFQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7RUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hELEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEdB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TSxHQUFHLENBQUMsQ0FBQyxPQUFNO0VBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtFQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JB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QUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0VBQ2xEO0VBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0VBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztFQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNwUE8sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQjtFQUNB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LElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMvQixTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxHQUFHO0VBQ2xDO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNyRDtFQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztFQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYTtFQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztFQUN4QjtFQUNBLFNBQVM7RUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDbEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0MsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RDLFFBQVEsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xHO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7RUFDQSxRQUFR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LFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7RUFDOUIsUUFBUTtBQUNSO0VBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7RUFDQSxTQUFTLE1BQU07QUFDZjtFQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7RUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0VBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FB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QUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtFQUNBLFNBQVM7RUFDVCxLQUFLO0VBQ0wsSUFBSTtFQUNKLEdBQUc7QUFDSDtFQUNBLEVBQUU7QUFDRjtFQUNBO0FBQ0E7RUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtFQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7RUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0VBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztFQUN0QztFQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7RUFDdEM7RUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7RUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtFQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQ3hCO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0VBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7RUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0VBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1B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QUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0VBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7RUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBO0VBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVEO0VBQ0E7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7RUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDcEM7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7RUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztFQUM1QyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDckI7RUFDQSxFQUFFO0FBQ0Y7QUFDQTtFQUNBOztFQ3BhTyxNQUFNLEdBQUcsU0FBUyxLQUFLLENBQUM7QUFDL0I7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFD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QUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7RUFDOUI7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDdEUsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7RUFDQSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUM7RUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztFQUMxQixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFlBQVksT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDO0VBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ3ZEO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxD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QUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztFQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNoQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtFQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7RUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDcEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ25FLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzNEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztFQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0FB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LElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQztFQUNBLEtBQUs7RUFDTDtFQUNBOztFQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0VBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztFQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQ7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0VBQ3hFLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDakQ7RUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0VBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQy9DLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtFQUN6RCxhQUFhO0VBQ2I7RUFDQTtFQUNBO0VBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0VBQ0E7QUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlEQUF5RCxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM1TDtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQ7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7RUFDdEosUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0gsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEo7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztFQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDckIsUUFBUSxJ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QUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0VBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztFQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0VBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtFQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtFQUNBLE1BQU07QUFDTjtFQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDO0VBQ2pELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FB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RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBOztFQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztFQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7RUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87RUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7RUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0VBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFB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SUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksR0FBRyxPQUFPO0VBQzVDLFFBQVEsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztFQUN2QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0VBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0VBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztFQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtFQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtFQUNBLGFBQWE7QUFDYjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7QUFDQTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7RUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0VBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzNGLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0Y7RUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztFQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7RUFDNUIsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUMvT08sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0VBQzFDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztFQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUMvQjtFQUNBLFFBQVEsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoQztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztFQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDL0I7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSTtFQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0VBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3BDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTTtFQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxTQUFRO0VBQ3JELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0VBQ3pEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFB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QztBQUM5QjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztFQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7RUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7RUFDOUI7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3JEO0VBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FB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QUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztFQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNyRjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtFQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0VBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7RUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN6RDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7RUFDckM7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0VBQ0E7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtFQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0VBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07RUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDaEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDclUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGdEQUFnRCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcks7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztFQUNsSSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJ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RCxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztFQUMvRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7RUFDdkMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUN4QyxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHO0FBQzlCO0VBQ0EsWUFBWSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFDO0VBQzdELFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUM7RUFDcEQsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQztFQUNyRCxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDO0VBQ3pELFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVE7RUFDakQsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7RUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7RUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztFQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BDO0VBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUN0RDtFQUNBO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN6RDtFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2pDO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxHQUFFO0VBQ25DLGdCQUFnQixDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFFO0FBQ2xEO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLGdCQUFnQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxvQkFBbUI7QUFDcEQ7QUFDQTtFQUNBO0VBQ0E7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUU7QUFDckM7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQ3BDO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDOUI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQztBQUMzQztFQUNBLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7RUFDbEQsZ0JBQWdCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTTtBQUN2QztFQUNBLGdCQUFnQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksVUFBVSxnQ0FBZ0MsRUFBQztFQUNoSCxnQkFBZ0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsZ0NBQWdDLEVBQUM7RUFDdEc7RUFDQTtFQUNBLGdCQUFnQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDbkYsZ0JBQWdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxVQUFVLCtCQUErQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRTtFQUN2SDtBQUNBO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDMUIsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtFQUMvQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFFLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztFQUM1RixRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFFO0FBQzVEO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUU7RUFDaEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUNuQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDbEMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ3JFLFNBQVM7RUFDVCxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztFQUMxQixLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtFQUNBLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7RUFDMUQsYUFBYSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNoQztFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMxQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksVUFBVSxDQUFDLEVBQUU7QUFDakI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDOUI7RUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU87QUFDOUM7RUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7RUFDMUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUMvRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUM7RUFDckQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDO0VBQ3RELGdCQUFnQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsb0JBQW1CO0VBQzlELGdCQUFnQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3hELGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTTtFQUNsRCxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLE9BQU07RUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNyRCxhQUFhO0FBQ2I7RUFDQSxZQUFzQixJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUc7RUFDbEQsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JKO0VBQ0EsU0FBUztFQUNULGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzdCO0VBQ0EsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0VBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDL0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxvQkFBbUI7RUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDO0VBQ3ZELGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTTtFQUNsRCxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLE9BQU07RUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7RUFDcEQsYUFBYTtBQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEU7QUFDQTtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtBQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzVDO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7RUFDbEQsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDMUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDdkI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDeEQsYUFBYSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNuQjtFQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ2pELFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDMUIsWUFBWSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztFQUM3QixZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUMvQyxZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7RUFDakQsWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0VBQ3JELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztFQUNsRCxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDdEQsU0FBUztFQUNULFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtFQUNyQixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN4RCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN4RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztFQUNBLFFBQVEsQ0FB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QUcsQ0FBQztFQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0VBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztFQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7RUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7RUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDaEMsT0FBTztBQUNQO0VBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7RUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztFQUNyRCxNQUFNLElB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QTtFQUNBLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3BCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtFQUNBO0VBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtFQUNBO0VBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0VBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7RUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0VBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7RUFDcEQsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElB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R0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDeEQsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDNUQsUUFBUSxNQUFNO0VBQ2QsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtFQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtFQUNBLElBQUksSUFBSSxPQUFPO0VBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQzNDO0FBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtFQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsS0FBSyxHQUFHO0VBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3BDO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDbEIsR0FBRztFQUNIOztFQzdTTyxNQUFNLFNBQVMsU0FBUyxLQUFLLENBQUM7QUFDckM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJ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QUNuQjtFQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDaEQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7QUFDakQ7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFD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S0FBSyxDQUFDO0FBQzNDO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztFQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUN2TDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztFQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7RUFDOUQsUUFBUSxPQUFPLEdBQUc7QUFDbEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0VBQ2xCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDekI7RUFDQSxZ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LElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7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LElBQUksQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7RUFDakQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUU7RUFDbEQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN4RDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDckY7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNuQztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FB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RyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqRDtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSTtFQUN4QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUMzQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0I7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDbkIsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RELFNBQVM7QUFDVDtFQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVELFNBQVM7QUFDVDtFQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEMsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ3ZCLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0VBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0VBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFH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RUFDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsRDtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0VBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztFQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztFQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM5RjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztFQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztFQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtFQUNBLEtBQUs7RUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0VBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztFQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0VBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hDLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7RUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtFQUN6RTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7RUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7RUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0VBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7RUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUks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QUFDLEdBQUc7QUFDL0I7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0E7O0VDclJBO0FBSUE7RUFDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7RUFDcEMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtFQUN0QjtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO0VBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0VBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0VBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3RCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO0VBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7RUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0VBQ0E7RUFD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QU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUNwRSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hHLEtBQUs7RUFDTCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzlDO0VBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2pDLE1BQWtCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ25DLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtFQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDaEQsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QztFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0VBQ3pCO0FBQ0E7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0s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LENBQUM7RUFDdkMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDMUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3JDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztFQUMxQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0VBQ0E7RUFDQSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFO0VBQ3JCLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqQztFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPO0VBQ3JCLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDNUMsTUFBTSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDeEIsTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzdELEtBQUs7RUFDTCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ3RCLEdBQUc7QUFDSDtBQUNBO0VBQ0EsRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN0QixJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDakMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0MsSUFBSSxJQUFJLENBQUMs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QUFJLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7RUFDaEMsTUFBTSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDeEMsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNyQyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ3RHLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3BCLE1BQU0sT0FBTyxJQUFJLENBQUM7RUFDbEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO0VBQ2hDLE1BQU0sTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDckMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRTtFQUNsQyxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkMsUUFBUSxPQUFPLElBQUksQ0FBQztFQUNw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QyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDakU7RUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7RUFDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO0FBQzVDO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3BFO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZjtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEQ7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDdkU7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNO0VBQ2YsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLGFBQWEsQ0FBQztBQUN2RTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztFQUN2RCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUNuQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ25CLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7RUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzdCO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pCO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHO0VBQzVCLE1BQU0sS0FBSztFQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO0VBQ3BCLFFBQVEsK0NBQStDO0VBQ3ZELFFBQVEsRUFBRSxDQUFDLE9BQU87RUFDbEIsUUFBUSxJQUFJO0VBQ1osUUFBUSxJQUFJLENBQUMsTUFBTTtFQUNuQixLQUFLLENBQUM7QUFDTjtFQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsR0FBRztFQUNqQyxNQUFNLEtBQUs7RUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztFQUNwQixRQUFRLDBEQUEwRDtFQUNsRSxLQUFLLENBQUM7RUFDTjtFQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2hEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQ3hCLElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxvQ0FBb0MsR0FBRyxFQUFFLENBQUM7RUFDNUUsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHO0VBQzFCLE1BQU0sS0FBSztFQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLHNCQUFzQjtFQUN4RCxLQUFLLENBQUM7RUFDTixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHO0VBQzdCLE1BQU0sS0FBSztFQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO0VBQ3BCLFFBQVEsd0JBQXdCO0VBQ2hDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3pCLFFBQVEsNENBQTRDO0VBQ3BELFFBQVEsRUFBRSxDQUFDLFVBQVU7RUFDckIsUUFBUSxHQUFHO0VBQ1gsS0FBSyxDQUFDO0VBQ04sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUM7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUc7RUFDM0IsTUFBTSxLQUFLO0VBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7RUFDcEIsUUFBUSxhQUFhO0VBQ3JCLFFBQVEsRUFBRSxDQUFDLE1BQU07RUFDakIsUUFBUSw0QkFBNEI7RUFDcEMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDekIsUUFBUSxrQkFBa0I7RUFDMUIsS0FBSyxDQUFDO0VBQ04sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0M7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3hEO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0VBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRztFQUMzQixNQUFNLEtBQUs7RUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRztFQUNsQixRQUFRLHFFQUFxRTtFQUM3RSxRQUFRLENBQUM7RUFDVCxRQUFRLGdDQUFnQztFQUN4QyxRQUFRLENBQUM7RUFDVCxRQUFRLHFDQUFxQztFQUM3QyxRQUFRLElBQUksQ0FBQyxFQUFFO0VBQ2YsUUFBUSxrQkFBa0I7RUFDMUIsU0FBUyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNyQixRQUFRLFlBQVk7RUFDcEIsUUFBUSxFQUFFLENBQUMsSUFBSTtFQUNmLFFBQVEsR0FBRztFQUNYLEtBQUssQ0FBQztFQUNOLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQzFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU07RUFDekMsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztFQUMxQixRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztBQUNqRDtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDM0QsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNsRTtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7RUFDaEQsTUFBTSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7RUFDbEMsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwRTtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtFQUM1QixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7RUFDaEQsS0FBSyxNQUFNO0VBQ1gsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0VBQ3RDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztFQUN4QyxNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLEtBQUs7QUFDTDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVTtFQUNuQixNQUFNLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztFQUNuRSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekU7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNwQjtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN6QztFQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNwQixHQUFHO0FBQ0g7RUFDQSxFQUFFLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDekIsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDO0VBQ3RCLE1BQU0sSUFBSSxFQUFFLGFBQWE7RUFDekIsTUFBTSxPQUFPLEVBQUUsQ0FBQztFQUNoQixNQUFNLE9BQU8sRUFBRSxDQUFDO0VBQ2hCLE1BQU0sS0FBSyxFQUFFLENBQUM7RUFDZCxNQUFNLEdBQUcsRUFBRSxJQUFJO0VBQ2YsTUFBTSxPQUFPLEVBQUUsR0FBRztFQUNsQixLQUFLLENBQUMsQ0FBQztFQUNQLEdBQUc7QUFDSDtFQUNBLEVBQUUsZ0JBQWdCLEdBQUc7RUFDckIsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDO0VBQ3RCLE1BQU0sSUFBSSxFQUFFLGFBQWE7RUFDekIsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0VBQ2pCLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztFQUNqQixNQUFNLEtBQUssRUFBRSxDQUFDO0VBQ2QsTUFBTSxHQUFHLEVBQUUsSUFBSTtFQUNmLE1BQU0sT0FBTyxFQUFFLEdBQUc7RUFDbEIsS0FBSyxDQUFDLENBQUM7RUFDUCxHQUFHO0FBQ0g7RUFDQSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3ZCO0FBQ0E7RUFDQTtFQUNBO0VBQ0EsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDO0VBQ3RCLE1BQU0sSUFBSSxFQUFFLFdBQVc7RUFDdkIsTUFBTSxPQUFPLEVBQUUsQ0FBQztFQUNoQixNQUFNLE9BQU8sRUFBRSxDQUFDO0VBQ2hCLE1BQU0sS0FBSyxFQUFFLENBQUM7RUFDZCxNQUFNLEdBQUcsRUFBRSxJQUFJO0VBQ2YsTUFBTSxPQUFPLEVBQUUsR0FBRztFQUNsQixLQUFLLENBQUMsQ0FBQztFQUNQLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDZixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3RDLElBQUksSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0VBQzlDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUM1QixHQUFHO0FBQ0g7RUFDQSxFQUFFLGFBQWEsR0FBRztFQUNsQixJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7RUFDM0MsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVO0VBQ3hDLFFBQVEsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO0VBQ25ELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVTtFQUNuQyxRQUFRLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztFQUNuRCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7RUFDN0U7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0VBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO0VBQzVDLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxNQUFNLEdBQUcsRUFBRTtBQUNiO0VBQ0EsRUFBRSxVQUFVLEdBQUc7RUFDZixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGVBQWU7RUFDMUMsTUFBTSw4QkFBOEI7RUFDcEMsTUFBTSxRQUFRO0VBQ2QsS0FBSyxDQUFDO0VBQ04sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzRTtFQUNBO0VBQ0EsR0FBRztBQUNIO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFO0VBQ2QsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLE9BQU87QUFDckM7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQzlELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztFQUN0QyxHQUFHO0FBQ0g7RUFDQTtBQUNBO0VBQ0EsRUFBRSxNQUFNLEdBQUc7RUFDWCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztFQUN4QixHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sR0FBRztFQUNaLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNyQixHQUFHO0FBQ0g7RUFDQSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRTtFQUM1QixJQUFJLElBQUksSUFBSTtFQUNaLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO0VBQ3BCLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQzVDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0VBQ2xFLE9BQU8sQ0FBQztFQUNSO0VBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7RUFDcEIsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDNUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7RUFDN0MsT0FBTyxDQUFDO0VBQ1I7QUFDQTtFQUNBO0VBQ0EsR0FBRztBQUNIO0VBQ0EsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0VBQ2Y7RUFDQSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztFQUNwQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2QyxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUU7RUFDZixJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0VBQ3JCLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hELEtBQUs7RUFDTCxHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7RUFDckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQzdDLEdBQUc7QUFDSDtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtFQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxRQUFRLEdBQUcsU0FBUyxDQUFDO0VBQzdELEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7RUFDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxRQUFRLENBQUM7RUFDN0QsR0FBRztBQUNIO0VBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7RUFDOUIsSUFBSSxPQUFPLElBQUksQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtFQUNWLElBQUksSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0VBQzNCLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN6QjtFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRTtFQUN2QixNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0VBQ0EsTUFBTSxRQUFRLENBQUM7RUFDZixRQUFRLEtBQUssS0FBSztFQUNsQixVQUFVLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUN6QixVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0VBQ25ELFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7RUFDdkQsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUM1QyxVQUFVLE1BQU07QUFDaEI7RUFDQTtFQUNBLFFBQVEsS0FBSyxZQUFZO0VBQ3pCLFVBQVUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUNwQyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0VBQ25ELFVBQVUsTUFBTTtFQUNoQixRQUFRLEtBQUssWUFBWTtFQUN6QixVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0VBQ25ELFVBQVUsTUFBTTtBQUNoQjtFQUNBO0VBQ0EsUUFBUSxLQUFLLFlBQVk7RUFDekIsVUFBVSxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBQ2xDLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7RUFDM0QsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztFQUNoRCxVQUFVLE1BQU07RUFDaEI7RUFDQSxPQUFPO0FBQ1A7RUFDQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDeEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLFVBQVUsQ0FBQztFQUN0QixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsV0FBVyxHQUFHO0VBQ2hCLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDO0VBQzFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtFQUN0QjtFQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUN6QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDekIsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztFQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEI7RUFDQTtBQUNBO0VBQ0EsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDbkIsSUFBSSxPQUFPLElBQUksQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNkLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUN2QixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzVDO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUN6QjtFQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2xCO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BFO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxRQUFRLENBQUM7RUFDMUUsU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUMvQztFQUNBLElBQUksT0FBTyxJQUFJLENBQUM7RUFDaEIsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDakI7QUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7RUFDQSxJQUFJLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztFQUN2QixJQUFJLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUM1QjtFQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDL0QsSUFBSSxJQUFJLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2pFO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtFQUN6QyxNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUs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QUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQztFQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztFQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7RUFDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7RUFDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNoRCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDekIsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0VBQ1osSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENB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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuICAgIC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG4gICAgLy8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG4gICAgby5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuICAgIG8ubmFtZSA9IG8ubmFtZSB8fCAnVHJlZUxpc3QnO1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgLy8gRGF0b3MgJiBlc3RhZG9cclxuICAgIHRoaXMudHJlZSAgICAgICA9IG8udHJlZSB8fCB7fTtcclxuICAgIHRoaXMudmFsdWUgICAgICA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNlZCAgICA9ICEhby5mb2N1c2VkO1xyXG4gICAgdGhpcy5mb2N1c1BhdGggID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSAnbnVtYmVyJyA/IG8uZm9jdXNMZXZlbCA6IC0xO1xyXG5cclxuICAgIHRoaXMudGFiSW5kZXggICA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuICAgIHRoaXMuaXRlbUluZGV4ICA9IG8uaXRlbUluZGV4ID8/IG51bGw7XHJcblxyXG4gICAgLy8gQ2FsbGJhY2tcclxuICAgIHRoaXMuY2hhbmdlQ2IgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcbiAgICAvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuICAgIHRoaXMubGluZUggICAgPSB0aGlzLmg7ICAgICAgICAgICAgICAgLy8gYWx0byBkZSBVTkEgZmlsYVxyXG4gICAgdGhpcy5sZXZlbEdhcCA9IHRoaXMuY29sb3JzLnN5IHx8IDI7ICAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmxlYWZNYXggID0gMDsgICAgICAgICAgICAgICAgICAgIC8vIHNlIGNhbGN1bGEgZW4gclNpemUoKVxyXG5cclxuICAgIC8vIE1vZGVsbyB2aXN1YWxcclxuICAgIHRoaXMubGV2ZWxzICAgPSBbXTsgICAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuICAgIHRoaXMuaXRlbXNEb20gPSBbXTsgICAvLyBlc3Blam8gRE9NIHBvciBuaXZlbFxyXG4gICAgdGhpcy5ob3ZlciAgICA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcbiAgICAvLyBDb250ZW5lZG9yIGludGVybm8gKGFic29sdXRvKVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpO1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG4gIHN0YXRpYyBpc01hcChub2RlKSAgeyByZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuICBzdGF0aWMgaXNMaXN0KG5vZGUpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuXHJcbiAgLy8gPT09PT09PSBSZWNvcnJpZG8gZGUgZGF0b3MgPT09PT09PVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG4gICAgICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG4gIGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG4gICAgbGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG4gICAgd2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgaWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcbiAgICAgIGNvbnN0IGswID0ga2V5c1swXTtcclxuICAgICAgcGF0aC5wdXNoKGswKTtcclxuICAgICAgbm9kZSA9IG5vZGVbazBdO1xyXG4gICAgfVxyXG4gICAgLy8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgLy8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG4gIGdldEFjdGl2ZVBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG4gIGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcbiAgICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gMDtcclxuICAgIGxldCBtID0gMDtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG4gICAgICBtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PVxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTml2ZWwgaW50ZXJtZWRpbzogY2xhdmVzIGRlbCBtYXBhIChob3Jpem9udGFsKVxyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6ICdtYXAnLFxyXG4gICAgICAgICAgaXRlbXM6IGtleXMubWFwKGsgPT4gKHsga2V5OiBrLCBsYWJlbDogaywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSksXHJcbiAgICAgICAgICB6b25lOiB7IHg6MCx5OjAsdzowLGg6IHRoaXMubGluZUggfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAobGFiZWwgPT4gKHsga2V5OiBsYWJlbCwgbGFiZWwsIHpvbmU6IHsgeDowLHk6MCx3OjAsaDowIH0gfSkpO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ2xpc3QnLCBpdGVtcywgem9uZTogeyB4OjAsIHk6MCwgdzowLCBoOiBoTGlzdCB9IH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuICBsYXlvdXRMZXZlbHMoKSB7XHJcbiAgICBcclxuICAgIGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7ICAgLy8gY29sdW1uYSBkZSBsYWJlbCArIHBhZGRpbmdcclxuICAgIGNvbnN0IHBhZFJpZ2h0ID0gODtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIGNvbnRlbnRYIC0gcGFkUmlnaHQ7XHJcblxyXG4gICAgXHJcbiAgICBsZXQgeSA9IDA7XHJcblxyXG4gICAgLy8gQWp1c3RhciBpdGVtc0RvbSBhIGNhbnRpZGFkIGRlIG5pdmVsZXNcclxuICAgIHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkgdGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuICAgIGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSkgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pdGVtc0RvbS5sZW5ndGggPSB0aGlzLmxldmVscy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICBsZXQgeCA9IGNvbnRlbnRYO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ21hcCcpO1xyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG4gICAgICAgIHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgIHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG4gICAgICAgIGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuICAgICAgICAgY29uc3Qgcm93cyA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbjtcclxuICAgICAgICAgIGNvbnN0IGl0ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldIDogeyBrZXk6IG51bGwsIGxhYmVsOiAnJywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9O1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgaXQuem9uZSA9IHsgeDogY29udGVudFgsIHk6IHkgKyBpICogdGhpcy5saW5lSCwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ2xpc3QnLCBpc1JlYWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgZmlsYXNcclxuICAgICAgICB0aGlzLl9wcnVuZVJvdyhMLCByb3dzKTtcclxuICAgICAgICB5ICs9IGhMaXN0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWp1c3RlcyBkZSBhbHRvIGludGVybm8gZGVsIGNvbnRlbmVkb3IgdmlzdWFsXHJcbiAgICBjb25zdCB0b3RhbEggPSB5O1xyXG4gICAgdGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArICdweCc7XHJcbiAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdG90YWxIICsgJ3B4JztcclxuXHJcbiAgICAvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcbiAgICB0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vIEVsaW1pbmEgbm9kb3MgRE9NIHNvYnJhbnRlcyBlbiBsYSBmaWxhIEwgYSBwYXJ0aXIgZGVsIMOtbmRpY2Uga2VlcFxyXG4gIF9wcnVuZVJvdyhMLCBrZWVwKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgLy8gc2kgbnVuY2Egc2UgY3Jlw7MsIG5hZGEgcXVlIGhhY2VyXHJcbiAgICBpZiAoIXJvdykgcmV0dXJuO1xyXG4gICAgZm9yIChsZXQgaiA9IGtlZXA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcclxuICAgICAgY29uc3QgZWwgPSByb3dbal07XHJcbiAgICAgIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHJvdy5sZW5ndGggPSBrZWVwO1xyXG4gIH1cclxuXHJcblxyXG4gIGVuc3VyZUl0ZW1Eb20oTCwgaSkge1xyXG4gICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgIHdoaWxlIChyb3cubGVuZ3RoIDw9IGkpIHJvdy5wdXNoKG51bGwpO1xyXG4gICAgaWYgKCFyb3dbaV0pIHtcclxuICAgICAgY29uc3QgZGl2ID0gdGhpcy5kb20oJ2RpdicsIFRvb2xzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7Jyk7XHJcbiAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgICByb3dbaV0gPSBkaXY7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93W2ldO1xyXG4gIH1cclxuXHJcbiAgcGFpbnRJdGVtRG9tKGRpdiwgTCwgaSwgaXQsIGtpbmQsIGlzUmVhbCA9IHRydWUpIHtcclxuICAgIGNvbnN0IHMgPSBkaXYuc3R5bGU7XHJcbiAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vIFBvc2ljacOzblxyXG4gICAgcy5sZWZ0ICAgPSBpdC56b25lLnggKyAncHgnO1xyXG4gICAgcy50b3AgICAgPSBpdC56b25lLnkgKyAncHgnO1xyXG4gICAgcy53aWR0aCAgPSBpdC56b25lLncgKyAncHgnO1xyXG4gICAgcy5oZWlnaHQgPSAoaXQuem9uZS5oIC0gMikgKyAncHgnO1xyXG5cclxuICAgIC8vIFRleHRvXHJcbiAgICBkaXYudGV4dENvbnRlbnQgPSBpc1JlYWwgPyBpdC5sYWJlbCA6ICcnO1xyXG5cclxuICAgIC8vIEVzdGFkb3NcclxuICAgIGNvbnN0IHNlbGVjdGVkICAgPSBpc1JlYWwgJiYgdGhpcy52YWx1ZVtMXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWVbTF0gPT09IGl0LmtleTtcclxuICAgIGNvbnN0IGluRm9jdXNMdmwgPSB0aGlzLmZvY3VzZWQgJiYgKHRoaXMuZm9jdXNMZXZlbCA9PT0gTCk7XHJcbiAgICBjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgKHRoaXMuZm9jdXNQYXRoW0xdID09PSBpdC5rZXkpO1xyXG4gICAgY29uc3QgaXNIb3ZlciAgICA9IGlzUmVhbCAmJiAodGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJiB0aGlzLmhvdmVyLmluZGV4ID09PSBpKTtcclxuXHJcbiAgICAvLyBFc3RpbG9zIGJhc2VcclxuICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICBzLmNvbG9yICAgICAgPSBjYy50ZXh0O1xyXG4gICAgcy5ib3JkZXIgICAgID0gJzFweCBzb2xpZCAnICsgY2MuYm9yZGVyO1xyXG4gICAgcy50ZXh0QWxpZ24gID0ga2luZCA9PT0gJ21hcCcgPyAnY2VudGVyJyA6ICdsZWZ0JztcclxuXHJcbiAgICAvLyBQcmlvcmlkYWQgdmlzdWFsOiBzZWxlY2Npb25hZG8gPiBmb2NvID4gaG92ZXIgPiBiYXNlXHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgIH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG4gICAgcy5vcGFjaXR5ID0gaXNSZWFsID8gJzEnIDogJzAnO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuICByU2l6ZSgpIHtcclxuICAgIHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoKSB7XHJcbiAgICB0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcbiAgICB0aGlzLmxheW91dExldmVscygpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG4gIF90b0xvY2FsKGUpIHtcclxuICAgIGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICBjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG4gICAgcmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcbiAgfVxyXG5cclxuICBfaGl0VGVzdChteCwgbXkpIHtcclxuICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgIGNvbnN0IHogPSBsdmwuem9uZTsgIC8vIHggeSB3IHlhIGluY2x1eWVuIGNvbnRlbnRYXHJcbiAgICBpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmxpbmVILCB3OiB6LncsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgaWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZXVwJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAoT3BjaW9uYWwpIHRlY2xhZG86IGludGVncmFyIG5hdmVnYWNpw7NuIGVuIEd1aSB5IHJlZW52aWFyIGFxdcOtIHNpIHNlIGRlc2VhXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICAvLyDinIUgQWN0dWFsaXphIG9iamV0byBlbmxhemFkbyAoc2kgZXhpc3RlKSB5IGRpc3BhcmEgY2FsbGJhY2tzIOKAnGNsw6FzaWNvc+KAnVxyXG4gICAgdGhpcy5zZW5kKG5ld1BhdGgpOyAvLyBlc2NyaWJlIGVuIG9iamVjdExpbmtbb2JqZWN0S2V5XSBzaSBoYXkgcmVmZXJlbmNpYVxyXG4gICAgdGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gPT09PT09PSBBUEkgcMO6YmxpY2EgPT09PT09PVxyXG4gIHNldFZhbHVlKHBhdGgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJlZSh0cmVlKSB7XHJcbiAgICB0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG4gICAgLy8gcmVjYWxjdWxhciBsZWFmTWF4IGVuIHByw7N4aW1hIHBhc2FkYVxyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBQdWJsaWNhY2nDs24gZGUgYWx0dXJhID09PT09PT1cclxuICBfY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpIHtcclxuICAgIGxldCBjID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBpKyspIGlmICh0aGlzLmxldmVsc1tpXS50eXBlID09PSAnbWFwJykgYysrO1xyXG4gICAgcmV0dXJuIGM7XHJcbiAgfVxyXG5cclxuICBfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcbiAgICByZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09ICdsaXN0JyA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuICB9XHJcblxyXG4gIF9wdWJsaXNoSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcbiAgICBjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuICAgIGNvbnN0IGxlYWZIICA9IGxlYWZMZW4gKiB0aGlzLmxpbmVIO1xyXG4gICAgY29uc3QgaW50ZXJIID0gaW50ZXIgKiAodGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXApO1xyXG4gICAgY29uc3QgdG90YWxIID0gaW50ZXJIICsgKGludGVyID8gdGhpcy5sZXZlbEdhcCA6IDApICsgbGVhZkg7XHJcblxyXG4gICAgLy8gQWN0dWFsaXphIG3DqXRyaWNhcyBkZWwgcHJvdG8gKGxvIHF1ZSBzdW1hIGVsIEdVSSlcclxuICAgIHRoaXMuaCA9IHRvdGFsSDtcclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuXHJcbiAgICAvLyBBdmlzYXIgYWwgR1VJIHkgcmVmcmVzY2FyIHpvbmFzXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0VBQUE7RUFDQTtFQUNBO0FBQ0E7QUFDWSxRQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLE1BQU0sQ0FBQyxHQUFHO0VBQ1YsRUFBRSxF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UUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUMzQixNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUN6QztFQUNBO0VBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUU7RUFDdEIsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7RUFDdEIsUUFBUSxPQUFPLEtBQUssQ0FBQztFQUNyQixPQUFPO0FBQ1A7RUFDQSxNQUFNLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztFQUM5QixNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0VBQzFCLEtBQUs7QUFDTDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMvQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQzlDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUM3QztFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxRCxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7RUFDdkIsTUFBTSxJQUFJLENB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QyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztFQUNyQixHQUFHO0FBQ0g7RUFDQSxFQUFFLFlBQVksRUFBRSxZQUFZO0VBQzVCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7RUFDeEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRTtFQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztFQUN0RCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsRUFBRSxVQUFVLElBQUksRUFBRTtFQUM3QixJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7RUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7RUFDeEMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7RUFDbkMsSUFBSSxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0VBQ3JDLEdBQUc7QUFDSDtFQUNBLEVBQUUsVUFBVSxFQUFFLFlB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QUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7RUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztFQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0VBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFL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Q0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7RUFDcEosUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDcEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNySDtFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FB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QUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pIO0VBQ0E7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7RUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtFQUNBO0FBQ0E7RUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtFQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7RUFDQSxTQUFTLE1BQU07RUFDZjtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JJLFlBQVksQ0FB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QztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0VBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtFQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7RUFDQSxFQUFFLFNBQVMs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QUFDLENBQUMsQ0FBQztBQUN4QztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7RUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0VBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztFQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ25DO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7RUFDakUsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztFQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFlBQVksS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUM7RUFDN0UsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDO0FBQ2hGO0VBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7RUFDNUUsTUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDNUUsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0VBQ3pELElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU87RUFDL0IsUUFBUSw0RkFBNEY7RUFDcEcsUUFBUSxhQUFhLENBQUM7QUFDdEI7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUc7RUFDekIsTUFBTSxLQUFLO0VBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsaUNBQWlDO0VBQ25FLEtBQUssQ0FBQztBQUNOO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2hDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDakMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztFQUNsQixJQUFJLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9DO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtFQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztFQUMxQyxNQUFNLElBQUksU0FBUyxFQUFFO0VBQ3JCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztFQUN0QztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDO0VBQ2pFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztFQUNwRSxPQUFPLE1BQU07RUFDYixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsc0JBQXNCLENBQUM7RUFDdEUsT0FBTztFQUNQLEtBQUs7QUFDTDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtFQUN0QixNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUNuRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDbEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ3hDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUM3RSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRTtFQUNmLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0VBQ3RDLE1BQU0sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0VBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hDLE9BQU87RUFDUCxNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3ZCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDekMsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksR0FBRztFQUNULElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDckM7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUM1RDtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtFQUN6QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0VBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztFQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0VBQ2hDLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQ3pDLEtBQUs7QUFDTDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtFQUM5QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDdEMsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0VBQzlCLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQzFCLE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksRUFBRTtFQUNWLE1BQU0sSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJO0VBQzFCLFVBQVUsSUFBSSxDQUFDLE1BQU07RUFDckIsVUFBVSxJQUFJLENBQUMsSUFBSTtFQUNuQixVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztFQUN6QixVQUFVLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2pFLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QjtFQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQjtFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO0VBQ3BCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztFQUM3QyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdEIsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsYUFBYSxHQUFHO0VBQ2xCLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtFQUNwRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7RUFDOUUsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBO0FBQ0E7RUFDQSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0VBQy9CLElBQUksT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUM5QyxHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO0VBQ3BDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDNUMsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUNuQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUc7QUFDSDtFQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0VBQ3pCLElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDeEMsR0FBRztBQUNIO0VBQ0EsRUFBRSxZQUFZLEdBQUc7RUFDakIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7RUFDaEQsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBQ3hDLEdBQUc7QUFDSDtFQUNBLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRTtFQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDL0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ25ELEdBQUc7QUFDSDtFQUNBLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRTtFQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDbkQsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ3ZDLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRTtFQUNqQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDM0MsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ25DLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRTtFQUNsQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDM0MsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3BDLEdBQUc7QUFDSDtFQUNBO0FBQ0E7RUFDQSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUU7RUFDZixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdkIsR0FBRztBQUNIO0VBQ0E7QUFDQTtFQUNBLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFDYjtFQUNBLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDWjtFQUNBO0FBQ0E7RUFDQSxFQUFFLE9BQU8sR0FBRztFQUNaLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxHQUFHO0VBQ1gsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRztBQUNIO0VBQ0EsRUFBRSxLQUFLLEdBQUc7RUFDVixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO0VBQzFCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTztFQUNqQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztFQUM5RCxHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sR0FBRztFQUNYLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU87RUFDMUIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPO0VBQ2pDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO0VBQ2xFLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtFQUNaLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7RUFDM0QsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLEdBQUc7RUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMxQyxJQUFJLE9BQU8sSUFBSSxDQUFDO0VBQ2hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyxHQUFHO0VBQ2Q7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsT0FBTztFQUN6QyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPO0VBQzVCLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU87RUFDNUI7RUFDQSxJQUFJLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztFQUNwRSxJQUFJLE9BQU8sVUFBVSxDQUFDO0VBQ3RCLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNkLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQixJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckQ7RUFDQSxTQUFTLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ2xCLElBQUksSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0VBQzNCLElBQUksSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRTtFQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDeEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLFVBQVUsQ0FBQztFQUN0QixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNkLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU87RUFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7RUFDOUIsSUFBSSxPQUFPLElBQUksQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRTtFQUNwQixJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPO0VBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7RUFDekIsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztFQUN6QixJQUFJLE9BQU8sSUFBSSxDQUFDO0VBQ2hCLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0VBQ1osSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztFQUMxQixJQUFJLE9BQU8sSUFBSSxDQUFDO0VBQ2hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNiLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7RUFDM0IsSUFBSSxPQUFPLElBQUksQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtFQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ3ZCLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEUsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBQ3hELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDeEIsR0FBRztBQUNIO0VBQ0EsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RSxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtFQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7RUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hELEtBQUs7QUFDTDtFQUNBLElBQUksSUFB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RyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDdEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBRztFQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0VBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVB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QUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU07RUFDckMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUU7RUFDckIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUU7QUFDdEI7RUFDQSxRQUFRLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2xDO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztFQUNBLFlBQVksR0FBRyxHQUFHLE1BQUs7RUFDdkIsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxLQUFJO0FBQy9FO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFFO0VBQ2xNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTTtFQUN0RSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FB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QUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztFQUNoRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSztFQUNyRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSztFQUNsRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztBQUN0RjtFQUNBLGFBQWE7QUFDYjtFQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxNQUFNO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUM7RUFDckIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0VBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzNCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHO0FBQ3hCO0VBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE9BQU07QUFDdEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFlBQVksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0VBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0VBQ3hELEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNsQztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUM7RUFDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDckM7RUFDQSxRQUFRLE9BQU8sSUFBSTtBQUNuQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDekIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUU7RUFDL0I7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDO0FBQ3ZDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7RUFDckIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0VBQ2xEO0VBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0VBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztFQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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QUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztFQUN2QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxD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LElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0VBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtFQUNoQyxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7RUFDakosWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN6RDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDak9PLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDbkM7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3RCO0VBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQzdDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0M7QUFDQTtBQUNBO0VBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7RUFDbEMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUM7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQzVCLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQzNCLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUN6QjtFQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7RUFDdk07QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3RDO0VBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7RUFDcEMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksU0FBUTtBQUMzQztFQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFJO0VBQ3BCLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFTO0VBQzNCLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtFQUNoQyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUU7RUFDOUUsY0FBYyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRTtFQUN6RSxjQUFjLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE1BQUs7RUFDbEMsTUFBTTtBQUNOO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7RUFDdkIsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7RUFDeEIsS0FBSyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQUs7QUFDMUI7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFLO0FBQ3BDO0VBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUU7RUFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7QUFDdEM7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBQztFQUNqQixLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBRztBQUNqQjtFQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRTtBQUNoQjtFQUNBLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQ2hDO0VBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDM0M7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUc7QUFDckI7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQ3BCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQzFDO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtFQUNBLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxPQUFPO0VBQ3hDLFdBQVcsT0FBTyxPQUFPO0FBQ3pCO0VBQ0EsR0FBRyxNQUFNO0FBQ1Q7RUFDQSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLE9BQU87RUFDMUMsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxPQUFPO0FBQzNDO0VBQ0EsR0FBRztBQUNIO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNmO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUN6QixLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7QUFDQTtFQUNBLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuRDtBQUNBO0VBQ0E7RUFDQSxFQUFFLEdBQUcsSUFBSSxLQUFLLE9BQU8sQ0FBQztFQUN0QixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNsQyxjQUFjLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUMzQixTQUFTLE9BQU8sSUFBSSxDQUFDO0VBQ3JCLEdBQUc7QUFDSDtBQUNBO0VBQ0EsRUFBRSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDeEI7RUFDQSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ3RCLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFJO0VBQ3ZCLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN2QixHQUFHO0VBQ0gsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7RUFDQSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdEQ7RUFDQSxLQUFLLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN6RDtFQUNBLEtBQUssSUFBSSxJQUFJLEtBQUssT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkQ7RUFDQSxLQUFLLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUMzQjtFQUNBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7RUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3BFLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ2hGLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2pDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNwQixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDN0I7QUFDQTtFQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDOUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQzNDO0VBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDdkI7RUFDQSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtFQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7RUFDOUIsUUFBUTtBQUNSO0VBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7RUFDQSxTQUFTLE1BQU07QUFDZjtFQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7RUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0VBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDckM7RUFDQSxTQUFTLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUMvRCxTQUFTLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQ2hELFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRTtFQUM3QixTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDbEMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEMsU0FBUyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztFQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHO0VBQ3hCLE9BQU8sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztFQUN2QyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDeEMsZUFBZSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztFQUNuRDtFQUNBLE9BQU8sR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7RUFDQSxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDeEQsT0FBTyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQy9DLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3ZDLE9BQU87QUFDUDtFQUNBLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNwRDtFQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzVDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0UsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2pDO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtFQUNBLFNBQVM7RUFDVCxLQUFLO0VBQ0wsSUFBSTtFQUNKLEdBQUc7QUFDSDtFQUNBLEVBQUU7QUFDRjtFQUNBO0FBQ0E7RUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtFQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7RUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0VBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztFQUN0QztFQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7RUFDdEM7RUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7RUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtFQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQ3hCO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0VBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7RUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0VBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0M7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNmO0VBQ0EsRUFBRSxJQUFJLENBQUMsWUFBWSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVELGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsYUFBYSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM1QjtFQUNBLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0VBQzdCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDcEI7RUFDQSxLQUFLLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDdEMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUMxQztFQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzVCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFNO0VBQzFCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDOUM7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztFQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3ZCLE1BQU07RUFDTixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDaEI7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3RDLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM5QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDekIsS0FBSyxPQUFPLElBQUksQ0FBQztBQUNqQjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsV0FBVyxDQUFDLEdBQUc7QUFDaEI7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0VBQ2pCLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBSztBQUNmO0VBQ0EsS0FBYyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPO0VBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ25DLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0EsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0VBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7RUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBO0VBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVEO0VBQ0E7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7RUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDcEM7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7RUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztFQUM1QyxLQUFLLElB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LENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ2xFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0VBQ2xELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0VBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDL0Q7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0VBQzdLO0FBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtEQUFrRCxFQUFFLENBQUM7QUFDMUo7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcs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RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDM0MsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztFQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNoQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtFQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJ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LENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQztFQUNBLEtBQUs7RUFDTDtFQUNBOztFQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0VBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMs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QSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztFQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtFQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0VBQzFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSTtFQUM5QyxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0VBQ3JDLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFF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QU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUc7RUFDMUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RCO0VBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0VBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztFQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0VBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtFQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtFQUNBLE1BQU07QUFDTjtFQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztFQUNBLFFBQVEsSUFB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QUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0VBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtBQUN2QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDN0M7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBOztFQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztFQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7RUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87RUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7RUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0VBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFB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LElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0VBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0VBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztFQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtFQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtFQUNBLGFBQWE7QUFDYjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7QUFDQTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7RUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0VBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzNGLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0Y7RUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztFQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7RUFDNUIsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUMvT08sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0VBQzFDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztFQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUMvQjtFQUNBLFFBQVEsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoQztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztFQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDL0I7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSTtFQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0VBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3BDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTTtFQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxTQUFRO0VBQ3JELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0VBQ3pEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdB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LElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztFQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7RUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7RUFDOUI7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3JEO0VBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN4RCxhQUFhO0VBQ2I7RUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7RUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0VBQ3hCO0VBQ0EsU0FBUztFQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDekQsUUFBUSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDNUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDMUM7QUFDQTtFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixZQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDNUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLEtBQUssQ0FBQztFQUNyRCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3JELFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDMUIsU0FBUztBQUNUO0VBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHO0FBQzNDO0VBQ0EsWUFBWSxDQUFDLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUNoRCxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDaEQsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDOUQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztFQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNyRjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtFQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0VBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7RUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN6RDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7RUFDckM7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0VBQ0E7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtFQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0VBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07RUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFN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WUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7RUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7RUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztFQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJ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QUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN4RCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN4RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0I7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDNUQsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDMzBCTyxNQUFNLE9BQU8sU0FBUyxLQUFLLENBQUM7QUFDbkM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLENB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L0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BEO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzFCLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQztFQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0VBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztFQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7RUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7RUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDaEMsT0FBTztBQUNQO0VBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7RUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtB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SUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0VBQzNCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7RUFDOUI7RUFDQTtFQUNBLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3BCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtFQUNBO0VBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtFQUNBO0VBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0VBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7RUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FB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QUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDbkIsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pCO0VBQ0EsSUFBSSxRQUFRLElBQUk7RUFDaEIsTUFBTSxLQUFLLENBQUM7RUFDWjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDeEQsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDNUQsUUFBUSxNQUFNO0VBQ2QsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtFQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtFQUNBLElBQUksSUFBSSxPQUFPO0VBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQzNDO0FBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtFQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsS0FBSyxHQUFHO0VBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3BDO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDbEIsR0FBRztFQUNIOztFQzdTTyxN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LENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNwQztFQUNBLEtBQUs7QUFDTDtBQUNBO0VBQ0E7O0VDakxPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDaEQ7RUFD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R0FBRyxDQUFDLENBQUM7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENB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QUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM5RjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztFQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztFQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtFQUNBLEtBQUs7RUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0VBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztFQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0VBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hDLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7RUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtFQUN6RTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7RUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7RUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0VBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7RUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxRQUFRLElBQUk7RUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztFQUMzRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBQztFQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztFQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztFQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUM5RDtFQUNBLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtFQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0VBQ2hELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFFO0VBQ3BFO0VBQ0EsWUFBWSxNQUFNO0VBQ2xCLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0E7O0VDclJBO0FBSUE7RUFDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7RUFDcEMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtFQUN0QjtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO0VBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0VBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0VBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3RCO0VBQ0E7RUFDQSxJQUFJ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QUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDN0UsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUNwRSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hHLEtBQUs7RUFDTCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzlDO0VBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2pDLE1BQWtCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ25DLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtFQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDaEQsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QztFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0VBQ3pCO0FBQ0E7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUNuRCxVQUFVLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDdEQsVUFBVSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUMvQyxVQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0VBQ2xELFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQztFQUNyQixTQUFTO0VBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDNUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQ3hDLE9BQU8sTUFBTTtFQUNiO0VBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztFQUNuQyxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzdEO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNuRDtFQUNBLFNBQVMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0VBQ2hELFNBQVMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUN4QyxVQUFVLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsVUFBVSxNQUFNLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUNqRztFQUNBLFdBQVcsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUM5RSxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQzNELFNBQVM7RUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUs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SUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN0QztFQUNBO0VBQ0EsSUFBSSxHQUFHLENBQUMsV0FBVyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUM3QztFQUNBO0VBQ0EsSUFBSSxNQUFNLFFBQVEsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO0VBQ3pGLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQy9ELElBQUksTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM5RSxJQUFJLE1BQU0sT0FBTyxNQUFNLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEY7RUFDQTtFQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzNCLElBQUksQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzNCLElBQUksQ0FBQyxDQUFDLE1BQU0sT0FBTyxZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztFQUM1QyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3REO0VBQ0E7RUFDQSxJQUFJLElBQUksUUFBUSxFQUFFO0VBQ2xCLE1BQU0sQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0VBQy9CLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0VBQzlCLEtBQUssTUFBTSxJQUFJLFVBQVUsRUFBRTtFQUMzQixNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQztFQUN2QyxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztFQUM1QixLQUFLLE1BQU0sSUFBSSxPQUFPLEVBQUU7RUFDeEIsTUFBTSxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7RUFDaEMsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDNUIsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDbkMsR0FBRztBQUNIO0VBQ0E7RUFDQSxFQUFFLEtBQUssR0FBRztFQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNsRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztFQUN2QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztFQUN4QixHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sR0FBRztFQUNYLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBO0VBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ2QsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZDLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QyxJQUFJLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUM1QixHQUFHO0FBQ0g7RUFDQSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0VBQ25CLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQy9DLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7RUFDdkIsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTO0FBQzNFO0VBQ0EsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0VBQzlCLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQ25ELFVBQVUsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDeEMsVUFBVSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJ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LElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0VBQ3BCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQ3ZDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckM7RUFDQTtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNqRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0VBQzVCLEdBQUc7RUFDSDs7QUNsWVksUUFBQyxHQUFHLEdBQUcsWUFBWTtBQUMvQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDO0VBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUN0QztFQUNBLFlBQVksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN4QixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNCO0VBQ0EsU0FBUyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQzlDO0VBQ0EsWUFBWSxHQUFHLEdBQUcsSUFBSSxDQUFDO0VBQ3ZCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUN6RDtFQUNBLFlBQVksSUFB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QUMsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2Y7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElB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QUM7QUFDdEI7RUFDQSxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0VBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2QjtFQUNBLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDOUMsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0VBQ3pDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7RUFDMUUsV0FBVztFQUNYLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDekIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztFQUN6QjtFQUNBLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDaEQsT0FBTztFQUNQLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0I7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxPQUFPO0FBQzNCO0VBQ0EsSUFBSSxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMs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QUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZEO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtFQUNYLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0VBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEM7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0VBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0VBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDaEQsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3pCLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtFQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDakQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0QsR0FBRztBQUNIO0VBQ0EsRUFBRSxJQUFJLEdBQUc7RUFDVCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUN6RCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsR0FBRztFQUNkLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3JCLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUI7RUFDQSxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXO0VBQ2hDLFVBQVUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDeEMsVUFBVSxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQzdCO0VBQ0EsTUFBTSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ25EO0VBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDekM7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtFQUNwQixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzdCLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQy9DLE9BQU8sTUFBTTtFQUNiLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQ3ZDLE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pDO0VBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDbEUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ25ELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pEO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVU7RUFDM0MsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7RUFDMUQsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN2QyxHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sR0FBRztFQUNYLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDNUIsR0FBRztBQUNIO0VBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ2QsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDbEQsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRO0VBQ3JCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDNUUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUM3QyxHQUFHO0FBQ0g7RUFDQSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUU7RUFDbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztFQUM1QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDaEIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDMUIsS0FBSztFQUNMLEdBQUc7RUFDSDs7Ozs7Ozs7Ozs7Ozs7In0= diff --git a/build/uil.module.js b/build/uil.module.js index fd83030..0721697 100644 --- a/build/uil.module.js +++ b/build/uil.module.js @@ -8529,9 +8529,13 @@ class TreeList extends Proto { this.value = newPath.slice(); this.update(); + + // ✅ Actualiza objeto enlazado (si existe) y dispara callbacks “clásicos” + this.send(newPath); // escribe en objectLink[objectKey] si hay referencia this.changeCb(this.tabIndex, this.itemIndex, newPath); } + // ======= API pública ======= setValue(path) { this.value = Array.isArray(path) ? path.slice() : []; @@ -9470,4 +9474,4 @@ class Gui { } export { Files, Gui, REVISION, Tools, add }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuICAgIC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG4gICAgLy8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG4gICAgby5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuICAgIG8ubmFtZSA9IG8ubmFtZSB8fCAnVHJlZUxpc3QnO1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgLy8gRGF0b3MgJiBlc3RhZG9cclxuICAgIHRoaXMudHJlZSAgICAgICA9IG8udHJlZSB8fCB7fTtcclxuICAgIHRoaXMudmFsdWUgICAgICA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNlZCAgICA9ICEhby5mb2N1c2VkO1xyXG4gICAgdGhpcy5mb2N1c1BhdGggID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSAnbnVtYmVyJyA/IG8uZm9jdXNMZXZlbCA6IC0xO1xyXG5cclxuICAgIHRoaXMudGFiSW5kZXggICA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuICAgIHRoaXMuaXRlbUluZGV4ICA9IG8uaXRlbUluZGV4ID8/IG51bGw7XHJcblxyXG4gICAgLy8gQ2FsbGJhY2tcclxuICAgIHRoaXMuY2hhbmdlQ2IgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcbiAgICAvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuICAgIHRoaXMubGluZUggICAgPSB0aGlzLmg7ICAgICAgICAgICAgICAgLy8gYWx0byBkZSBVTkEgZmlsYVxyXG4gICAgdGhpcy5sZXZlbEdhcCA9IHRoaXMuY29sb3JzLnN5IHx8IDI7ICAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmxlYWZNYXggID0gMDsgICAgICAgICAgICAgICAgICAgIC8vIHNlIGNhbGN1bGEgZW4gclNpemUoKVxyXG5cclxuICAgIC8vIE1vZGVsbyB2aXN1YWxcclxuICAgIHRoaXMubGV2ZWxzICAgPSBbXTsgICAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuICAgIHRoaXMuaXRlbXNEb20gPSBbXTsgICAvLyBlc3Blam8gRE9NIHBvciBuaXZlbFxyXG4gICAgdGhpcy5ob3ZlciAgICA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcbiAgICAvLyBDb250ZW5lZG9yIGludGVybm8gKGFic29sdXRvKVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpO1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG4gIHN0YXRpYyBpc01hcChub2RlKSAgeyByZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuICBzdGF0aWMgaXNMaXN0KG5vZGUpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuXHJcbiAgLy8gPT09PT09PSBSZWNvcnJpZG8gZGUgZGF0b3MgPT09PT09PVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG4gICAgICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG4gIGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG4gICAgbGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG4gICAgd2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgaWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcbiAgICAgIGNvbnN0IGswID0ga2V5c1swXTtcclxuICAgICAgcGF0aC5wdXNoKGswKTtcclxuICAgICAgbm9kZSA9IG5vZGVbazBdO1xyXG4gICAgfVxyXG4gICAgLy8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgLy8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG4gIGdldEFjdGl2ZVBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG4gIGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcbiAgICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gMDtcclxuICAgIGxldCBtID0gMDtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG4gICAgICBtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PVxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTml2ZWwgaW50ZXJtZWRpbzogY2xhdmVzIGRlbCBtYXBhIChob3Jpem9udGFsKVxyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6ICdtYXAnLFxyXG4gICAgICAgICAgaXRlbXM6IGtleXMubWFwKGsgPT4gKHsga2V5OiBrLCBsYWJlbDogaywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSksXHJcbiAgICAgICAgICB6b25lOiB7IHg6MCx5OjAsdzowLGg6IHRoaXMubGluZUggfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAobGFiZWwgPT4gKHsga2V5OiBsYWJlbCwgbGFiZWwsIHpvbmU6IHsgeDowLHk6MCx3OjAsaDowIH0gfSkpO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ2xpc3QnLCBpdGVtcywgem9uZTogeyB4OjAsIHk6MCwgdzowLCBoOiBoTGlzdCB9IH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuICBsYXlvdXRMZXZlbHMoKSB7XHJcbiAgICBcclxuICAgIGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7ICAgLy8gY29sdW1uYSBkZSBsYWJlbCArIHBhZGRpbmdcclxuICAgIGNvbnN0IHBhZFJpZ2h0ID0gODtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIGNvbnRlbnRYIC0gcGFkUmlnaHQ7XHJcblxyXG4gICAgXHJcbiAgICBsZXQgeSA9IDA7XHJcblxyXG4gICAgLy8gQWp1c3RhciBpdGVtc0RvbSBhIGNhbnRpZGFkIGRlIG5pdmVsZXNcclxuICAgIHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkgdGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuICAgIGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSkgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pdGVtc0RvbS5sZW5ndGggPSB0aGlzLmxldmVscy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICBsZXQgeCA9IGNvbnRlbnRYO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ21hcCcpO1xyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG4gICAgICAgIHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgIHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG4gICAgICAgIGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuICAgICAgICAgY29uc3Qgcm93cyA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbjtcclxuICAgICAgICAgIGNvbnN0IGl0ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldIDogeyBrZXk6IG51bGwsIGxhYmVsOiAnJywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9O1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgaXQuem9uZSA9IHsgeDogY29udGVudFgsIHk6IHkgKyBpICogdGhpcy5saW5lSCwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ2xpc3QnLCBpc1JlYWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgZmlsYXNcclxuICAgICAgICB0aGlzLl9wcnVuZVJvdyhMLCByb3dzKTtcclxuICAgICAgICB5ICs9IGhMaXN0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWp1c3RlcyBkZSBhbHRvIGludGVybm8gZGVsIGNvbnRlbmVkb3IgdmlzdWFsXHJcbiAgICBjb25zdCB0b3RhbEggPSB5O1xyXG4gICAgdGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArICdweCc7XHJcbiAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdG90YWxIICsgJ3B4JztcclxuXHJcbiAgICAvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcbiAgICB0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vIEVsaW1pbmEgbm9kb3MgRE9NIHNvYnJhbnRlcyBlbiBsYSBmaWxhIEwgYSBwYXJ0aXIgZGVsIMOtbmRpY2Uga2VlcFxyXG4gIF9wcnVuZVJvdyhMLCBrZWVwKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgLy8gc2kgbnVuY2Egc2UgY3Jlw7MsIG5hZGEgcXVlIGhhY2VyXHJcbiAgICBpZiAoIXJvdykgcmV0dXJuO1xyXG4gICAgZm9yIChsZXQgaiA9IGtlZXA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcclxuICAgICAgY29uc3QgZWwgPSByb3dbal07XHJcbiAgICAgIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHJvdy5sZW5ndGggPSBrZWVwO1xyXG4gIH1cclxuXHJcblxyXG4gIGVuc3VyZUl0ZW1Eb20oTCwgaSkge1xyXG4gICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgIHdoaWxlIChyb3cubGVuZ3RoIDw9IGkpIHJvdy5wdXNoKG51bGwpO1xyXG4gICAgaWYgKCFyb3dbaV0pIHtcclxuICAgICAgY29uc3QgZGl2ID0gdGhpcy5kb20oJ2RpdicsIFRvb2xzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7Jyk7XHJcbiAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgICByb3dbaV0gPSBkaXY7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93W2ldO1xyXG4gIH1cclxuXHJcbiAgcGFpbnRJdGVtRG9tKGRpdiwgTCwgaSwgaXQsIGtpbmQsIGlzUmVhbCA9IHRydWUpIHtcclxuICAgIGNvbnN0IHMgPSBkaXYuc3R5bGU7XHJcbiAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vIFBvc2ljacOzblxyXG4gICAgcy5sZWZ0ICAgPSBpdC56b25lLnggKyAncHgnO1xyXG4gICAgcy50b3AgICAgPSBpdC56b25lLnkgKyAncHgnO1xyXG4gICAgcy53aWR0aCAgPSBpdC56b25lLncgKyAncHgnO1xyXG4gICAgcy5oZWlnaHQgPSAoaXQuem9uZS5oIC0gMikgKyAncHgnO1xyXG5cclxuICAgIC8vIFRleHRvXHJcbiAgICBkaXYudGV4dENvbnRlbnQgPSBpc1JlYWwgPyBpdC5sYWJlbCA6ICcnO1xyXG5cclxuICAgIC8vIEVzdGFkb3NcclxuICAgIGNvbnN0IHNlbGVjdGVkICAgPSBpc1JlYWwgJiYgdGhpcy52YWx1ZVtMXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWVbTF0gPT09IGl0LmtleTtcclxuICAgIGNvbnN0IGluRm9jdXNMdmwgPSB0aGlzLmZvY3VzZWQgJiYgKHRoaXMuZm9jdXNMZXZlbCA9PT0gTCk7XHJcbiAgICBjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgKHRoaXMuZm9jdXNQYXRoW0xdID09PSBpdC5rZXkpO1xyXG4gICAgY29uc3QgaXNIb3ZlciAgICA9IGlzUmVhbCAmJiAodGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJiB0aGlzLmhvdmVyLmluZGV4ID09PSBpKTtcclxuXHJcbiAgICAvLyBFc3RpbG9zIGJhc2VcclxuICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICBzLmNvbG9yICAgICAgPSBjYy50ZXh0O1xyXG4gICAgcy5ib3JkZXIgICAgID0gJzFweCBzb2xpZCAnICsgY2MuYm9yZGVyO1xyXG4gICAgcy50ZXh0QWxpZ24gID0ga2luZCA9PT0gJ21hcCcgPyAnY2VudGVyJyA6ICdsZWZ0JztcclxuXHJcbiAgICAvLyBQcmlvcmlkYWQgdmlzdWFsOiBzZWxlY2Npb25hZG8gPiBmb2NvID4gaG92ZXIgPiBiYXNlXHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgIH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG4gICAgcy5vcGFjaXR5ID0gaXNSZWFsID8gJzEnIDogJzAnO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuICByU2l6ZSgpIHtcclxuICAgIHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoKSB7XHJcbiAgICB0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcbiAgICB0aGlzLmxheW91dExldmVscygpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG4gIF90b0xvY2FsKGUpIHtcclxuICAgIGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICBjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG4gICAgcmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcbiAgfVxyXG5cclxuICBfaGl0VGVzdChteCwgbXkpIHtcclxuICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgIGNvbnN0IHogPSBsdmwuem9uZTsgIC8vIHggeSB3IHlhIGluY2x1eWVuIGNvbnRlbnRYXHJcbiAgICBpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmxpbmVILCB3OiB6LncsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgaWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZXVwJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAoT3BjaW9uYWwpIHRlY2xhZG86IGludGVncmFyIG5hdmVnYWNpw7NuIGVuIEd1aSB5IHJlZW52aWFyIGFxdcOtIHNpIHNlIGRlc2VhXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICAgIHRoaXMuY2hhbmdlQ2IodGhpcy50YWJJbmRleCwgdGhpcy5pdGVtSW5kZXgsIG5ld1BhdGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBBUEkgcMO6YmxpY2EgPT09PT09PVxyXG4gIHNldFZhbHVlKHBhdGgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJlZSh0cmVlKSB7XHJcbiAgICB0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG4gICAgLy8gcmVjYWxjdWxhciBsZWFmTWF4IGVuIHByw7N4aW1hIHBhc2FkYVxyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBQdWJsaWNhY2nDs24gZGUgYWx0dXJhID09PT09PT1cclxuICBfY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpIHtcclxuICAgIGxldCBjID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBpKyspIGlmICh0aGlzLmxldmVsc1tpXS50eXBlID09PSAnbWFwJykgYysrO1xyXG4gICAgcmV0dXJuIGM7XHJcbiAgfVxyXG5cclxuICBfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcbiAgICByZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09ICdsaXN0JyA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuICB9XHJcblxyXG4gIF9wdWJsaXNoSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcbiAgICBjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuICAgIGNvbnN0IGxlYWZIICA9IGxlYWZMZW4gKiB0aGlzLmxpbmVIO1xyXG4gICAgY29uc3QgaW50ZXJIID0gaW50ZXIgKiAodGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXApO1xyXG4gICAgY29uc3QgdG90YWxIID0gaW50ZXJIICsgKGludGVyID8gdGhpcy5sZXZlbEdhcCA6IDApICsgbGVhZkg7XHJcblxyXG4gICAgLy8gQWN0dWFsaXphIG3DqXRyaWNhcyBkZWwgcHJvdG8gKGxvIHF1ZSBzdW1hIGVsIEdVSSlcclxuICAgIHRoaXMuaCA9IHRvdGFsSDtcclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuXHJcbiAgICAvLyBBdmlzYXIgYWwgR1VJIHkgcmVmcmVzY2FyIHpvbmFzXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDWSxNQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxHQUFHO0FBQ1YsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSO0FBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYO0FBQ0EsRUFBRSxFQUFFLEVBQUUsSUFBSTtBQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUs7QUFDYixFQUFFLEtBQUssRUFBRSxLQUFLO0FBQ2QsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7QUFDQSxFQUFFLFVBQVUsRUFBRSxJ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QUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN6QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRSxhQUFhLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRztBQUN6QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN6RCxRQUFRLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDeEMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRztBQUN6QjtBQUNBLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDNUU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUMxQjtBQUNBLFFBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakg7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN0QixRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLFNBQVM7QUFDVCxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxR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QUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNySDtBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0ksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVB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O0FBQ3pIO0FBQ0E7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtBQUNBO0FBQ0E7QUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtBQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMvRixZQUFZLENBQUMsQ0FBQyxHQUFHLEVB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RTtBQUNGO0FBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0FBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMs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LENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ25DO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FB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QUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtBQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcs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QUFHLENBQUMsQ0FBQyxPQUFNO0FBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUN2TSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNC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LEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0FBQ2xEO0FBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNwUE8sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQjtBQUNBLFFB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QUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxHQUFHO0FBQ2xDO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNyRDtBQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztBQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QjtBQUNBLFNBQVM7QUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLFFBQVEsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xHO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7QUFDQSxRQUFRLElB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QVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUIsUUFBUTtBQUNSO0FBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7QUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxH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Q0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtBQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7QUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUN0QztBQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7QUFDdEM7QUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7QUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtBQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0FBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7QUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0s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R0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0FBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7QUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBO0FBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVEO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDcEM7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztBQUM1QyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDckI7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQ3BhTyxNQUFNLEdBQUcsU0FBUyxLQUFLLENBQUM7QUFDL0I7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxR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Q0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDdEUsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7QUFDQSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUM7QUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMxQixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFlBQVksT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZEO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFD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LEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtBQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzNEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3RE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QUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQztBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztBQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDakQ7QUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQy9DLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtBQUN6RCxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlEQUF5RCxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1TDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQ7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDdEosUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0gsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEo7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckIsUUFBUSxJQUFJ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R0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztBQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0FBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtBQUNBLE1BQU07QUFDTjtBQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRTtB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QSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztBQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2hFO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25ELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDN0Y7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQ3BCO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBLFFBQVEsT0FBTyxJQUFJO0FBQ25CLFlBQVksS0FBSyxDQUFDO0FBQ2xCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbEUsaUJBQWlCLE1BQU07QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRTtBQUNBLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckUsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hFLGlCQUFpQjtBQUNqQjtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNsQyxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDekUsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNFLGlCQUFpQixNQUFNO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEU7QUFDQSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hFLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEUsaUJBQWlCO0FBQ2pCLFlBQVksTUFBTTtBQUdsQjtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksV0FBVyxDQUFDLEVBQUU7QUFDbEIsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN6RCxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPO0FBQ3ZDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ25GO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxZQUFZLENBQUMsRUFBRTtBQUNuQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksR0FBRyxPQUFPO0FBQzVDLFFBQVEsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0FBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0FBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtBQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0FBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNGLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0Y7QUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFB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QUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ2pGLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxH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QUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7QUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7QUFDOUI7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JEO0FBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxH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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtBQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0FBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6RDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDckM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0FBQ0E7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtBQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0FBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDclUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGdEQUFnRCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcks7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNsSSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJ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QUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUMvRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDdkMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QyxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFDO0FBQzdELFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUM7QUFDcEQsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQztBQUNyRCxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDO0FBQ3pELFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVE7QUFDakQsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7QUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7QUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUN0RDtBQUNBO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxD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LElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztBQUNBLFFBQVEsQ0FBQyxD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Q0FBQztBQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztBQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDaEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNyRCxNQUFNLElBQUks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QUNBLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtBQUNBO0FBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtBQUNBO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0FBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDcEQsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUks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RyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDeEQsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDNUQsUUFBUSxNQUFNO0FBQ2QsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtBQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtBQUNBLElBQUksSUFBSSxPQUFPO0FBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzNDO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtBQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEIsR0FBRztBQUNIOztBQzdTTyxNQUFNLFNBQVMsU0FBUyxLQUFLLENBQUM7QUFDckM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENB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QjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDaEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUM7QUFDakQ7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENB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SyxDQUFDO0FBQzNDO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUN2TDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3JCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFDOUQsUUFBUSxPQUFPLEdBQUc7QUFDbEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDekI7QUFDQSxZQUFZ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QUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFD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QUksQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7QUFDakQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUU7QUFDbEQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN4RDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDckY7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUNuQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxF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QUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkIsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELFNBQVM7QUFDVDtBQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVELFNBQVM7QUFDVDtBQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0FBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FB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QSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRDtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5RjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztBQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0FBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7QUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtBQUN6RTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7QUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0FBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksRUFB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LEdBQUc7QUFDL0I7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDclJBO0FBSUE7QUFDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO0FBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0FBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQSxJ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RUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwRSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hHLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzlDO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLE1BQWtCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ25DLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtBQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QztBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3pCO0FBQ0E7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRCxVQUFVLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEQsVUFBVSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxVQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xELFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUNyQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sTUFBTTtBQUNiO0FBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNuQyxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdEO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNuRDtBQUNBLFNBQVMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hELFNBQVMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4QyxVQUFVLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsVUFBVSxNQUFNLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNqRztBQUNBLFdBQVcsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM5RSxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDO0FBQ25CLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDdkMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUMxQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFO0FBQ3JCLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQztBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPO0FBQ3JCLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUMsTUFBTSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdELEtBQUs7QUFDTCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0QixJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsSUFBSSxJQUFJLENBQUMsR0FB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QUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDakU7QUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO0FBQzVDO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3BFO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZjtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEQ7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDdkU7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN0QyxJQUFJLElBQUks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Q0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BFO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxRQUFRLENBQUM7QUFDMUUsU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUMvQztBQUNBLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7QUFDQSxJQUFJLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN2QixJQUFJLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUM1QjtBQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDL0QsSUFBSSxJQUFJLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2pFO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUN6QyxNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FB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Q0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQztBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7QUFDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNoRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQ1osSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMs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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuICAgIC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG4gICAgLy8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG4gICAgby5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuICAgIG8ubmFtZSA9IG8ubmFtZSB8fCAnVHJlZUxpc3QnO1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgLy8gRGF0b3MgJiBlc3RhZG9cclxuICAgIHRoaXMudHJlZSAgICAgICA9IG8udHJlZSB8fCB7fTtcclxuICAgIHRoaXMudmFsdWUgICAgICA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNlZCAgICA9ICEhby5mb2N1c2VkO1xyXG4gICAgdGhpcy5mb2N1c1BhdGggID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSAnbnVtYmVyJyA/IG8uZm9jdXNMZXZlbCA6IC0xO1xyXG5cclxuICAgIHRoaXMudGFiSW5kZXggICA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuICAgIHRoaXMuaXRlbUluZGV4ICA9IG8uaXRlbUluZGV4ID8/IG51bGw7XHJcblxyXG4gICAgLy8gQ2FsbGJhY2tcclxuICAgIHRoaXMuY2hhbmdlQ2IgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcbiAgICAvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuICAgIHRoaXMubGluZUggICAgPSB0aGlzLmg7ICAgICAgICAgICAgICAgLy8gYWx0byBkZSBVTkEgZmlsYVxyXG4gICAgdGhpcy5sZXZlbEdhcCA9IHRoaXMuY29sb3JzLnN5IHx8IDI7ICAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmxlYWZNYXggID0gMDsgICAgICAgICAgICAgICAgICAgIC8vIHNlIGNhbGN1bGEgZW4gclNpemUoKVxyXG5cclxuICAgIC8vIE1vZGVsbyB2aXN1YWxcclxuICAgIHRoaXMubGV2ZWxzICAgPSBbXTsgICAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuICAgIHRoaXMuaXRlbXNEb20gPSBbXTsgICAvLyBlc3Blam8gRE9NIHBvciBuaXZlbFxyXG4gICAgdGhpcy5ob3ZlciAgICA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcbiAgICAvLyBDb250ZW5lZG9yIGludGVybm8gKGFic29sdXRvKVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpO1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG4gIHN0YXRpYyBpc01hcChub2RlKSAgeyByZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuICBzdGF0aWMgaXNMaXN0KG5vZGUpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuXHJcbiAgLy8gPT09PT09PSBSZWNvcnJpZG8gZGUgZGF0b3MgPT09PT09PVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG4gICAgICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG4gIGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG4gICAgbGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG4gICAgd2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgaWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcbiAgICAgIGNvbnN0IGswID0ga2V5c1swXTtcclxuICAgICAgcGF0aC5wdXNoKGswKTtcclxuICAgICAgbm9kZSA9IG5vZGVbazBdO1xyXG4gICAgfVxyXG4gICAgLy8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgLy8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG4gIGdldEFjdGl2ZVBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG4gIGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcbiAgICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gMDtcclxuICAgIGxldCBtID0gMDtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG4gICAgICBtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PVxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTml2ZWwgaW50ZXJtZWRpbzogY2xhdmVzIGRlbCBtYXBhIChob3Jpem9udGFsKVxyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6ICdtYXAnLFxyXG4gICAgICAgICAgaXRlbXM6IGtleXMubWFwKGsgPT4gKHsga2V5OiBrLCBsYWJlbDogaywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSksXHJcbiAgICAgICAgICB6b25lOiB7IHg6MCx5OjAsdzowLGg6IHRoaXMubGluZUggfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAobGFiZWwgPT4gKHsga2V5OiBsYWJlbCwgbGFiZWwsIHpvbmU6IHsgeDowLHk6MCx3OjAsaDowIH0gfSkpO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ2xpc3QnLCBpdGVtcywgem9uZTogeyB4OjAsIHk6MCwgdzowLCBoOiBoTGlzdCB9IH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuICBsYXlvdXRMZXZlbHMoKSB7XHJcbiAgICBcclxuICAgIGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7ICAgLy8gY29sdW1uYSBkZSBsYWJlbCArIHBhZGRpbmdcclxuICAgIGNvbnN0IHBhZFJpZ2h0ID0gODtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIGNvbnRlbnRYIC0gcGFkUmlnaHQ7XHJcblxyXG4gICAgXHJcbiAgICBsZXQgeSA9IDA7XHJcblxyXG4gICAgLy8gQWp1c3RhciBpdGVtc0RvbSBhIGNhbnRpZGFkIGRlIG5pdmVsZXNcclxuICAgIHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkgdGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuICAgIGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSkgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pdGVtc0RvbS5sZW5ndGggPSB0aGlzLmxldmVscy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICBsZXQgeCA9IGNvbnRlbnRYO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ21hcCcpO1xyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG4gICAgICAgIHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgIHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG4gICAgICAgIGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuICAgICAgICAgY29uc3Qgcm93cyA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbjtcclxuICAgICAgICAgIGNvbnN0IGl0ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldIDogeyBrZXk6IG51bGwsIGxhYmVsOiAnJywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9O1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgaXQuem9uZSA9IHsgeDogY29udGVudFgsIHk6IHkgKyBpICogdGhpcy5saW5lSCwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ2xpc3QnLCBpc1JlYWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgZmlsYXNcclxuICAgICAgICB0aGlzLl9wcnVuZVJvdyhMLCByb3dzKTtcclxuICAgICAgICB5ICs9IGhMaXN0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWp1c3RlcyBkZSBhbHRvIGludGVybm8gZGVsIGNvbnRlbmVkb3IgdmlzdWFsXHJcbiAgICBjb25zdCB0b3RhbEggPSB5O1xyXG4gICAgdGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArICdweCc7XHJcbiAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdG90YWxIICsgJ3B4JztcclxuXHJcbiAgICAvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcbiAgICB0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vIEVsaW1pbmEgbm9kb3MgRE9NIHNvYnJhbnRlcyBlbiBsYSBmaWxhIEwgYSBwYXJ0aXIgZGVsIMOtbmRpY2Uga2VlcFxyXG4gIF9wcnVuZVJvdyhMLCBrZWVwKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgLy8gc2kgbnVuY2Egc2UgY3Jlw7MsIG5hZGEgcXVlIGhhY2VyXHJcbiAgICBpZiAoIXJvdykgcmV0dXJuO1xyXG4gICAgZm9yIChsZXQgaiA9IGtlZXA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcclxuICAgICAgY29uc3QgZWwgPSByb3dbal07XHJcbiAgICAgIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHJvdy5sZW5ndGggPSBrZWVwO1xyXG4gIH1cclxuXHJcblxyXG4gIGVuc3VyZUl0ZW1Eb20oTCwgaSkge1xyXG4gICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgIHdoaWxlIChyb3cubGVuZ3RoIDw9IGkpIHJvdy5wdXNoKG51bGwpO1xyXG4gICAgaWYgKCFyb3dbaV0pIHtcclxuICAgICAgY29uc3QgZGl2ID0gdGhpcy5kb20oJ2RpdicsIFRvb2xzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7Jyk7XHJcbiAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgICByb3dbaV0gPSBkaXY7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93W2ldO1xyXG4gIH1cclxuXHJcbiAgcGFpbnRJdGVtRG9tKGRpdiwgTCwgaSwgaXQsIGtpbmQsIGlzUmVhbCA9IHRydWUpIHtcclxuICAgIGNvbnN0IHMgPSBkaXYuc3R5bGU7XHJcbiAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vIFBvc2ljacOzblxyXG4gICAgcy5sZWZ0ICAgPSBpdC56b25lLnggKyAncHgnO1xyXG4gICAgcy50b3AgICAgPSBpdC56b25lLnkgKyAncHgnO1xyXG4gICAgcy53aWR0aCAgPSBpdC56b25lLncgKyAncHgnO1xyXG4gICAgcy5oZWlnaHQgPSAoaXQuem9uZS5oIC0gMikgKyAncHgnO1xyXG5cclxuICAgIC8vIFRleHRvXHJcbiAgICBkaXYudGV4dENvbnRlbnQgPSBpc1JlYWwgPyBpdC5sYWJlbCA6ICcnO1xyXG5cclxuICAgIC8vIEVzdGFkb3NcclxuICAgIGNvbnN0IHNlbGVjdGVkICAgPSBpc1JlYWwgJiYgdGhpcy52YWx1ZVtMXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWVbTF0gPT09IGl0LmtleTtcclxuICAgIGNvbnN0IGluRm9jdXNMdmwgPSB0aGlzLmZvY3VzZWQgJiYgKHRoaXMuZm9jdXNMZXZlbCA9PT0gTCk7XHJcbiAgICBjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgKHRoaXMuZm9jdXNQYXRoW0xdID09PSBpdC5rZXkpO1xyXG4gICAgY29uc3QgaXNIb3ZlciAgICA9IGlzUmVhbCAmJiAodGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJiB0aGlzLmhvdmVyLmluZGV4ID09PSBpKTtcclxuXHJcbiAgICAvLyBFc3RpbG9zIGJhc2VcclxuICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICBzLmNvbG9yICAgICAgPSBjYy50ZXh0O1xyXG4gICAgcy5ib3JkZXIgICAgID0gJzFweCBzb2xpZCAnICsgY2MuYm9yZGVyO1xyXG4gICAgcy50ZXh0QWxpZ24gID0ga2luZCA9PT0gJ21hcCcgPyAnY2VudGVyJyA6ICdsZWZ0JztcclxuXHJcbiAgICAvLyBQcmlvcmlkYWQgdmlzdWFsOiBzZWxlY2Npb25hZG8gPiBmb2NvID4gaG92ZXIgPiBiYXNlXHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgIH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG4gICAgcy5vcGFjaXR5ID0gaXNSZWFsID8gJzEnIDogJzAnO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuICByU2l6ZSgpIHtcclxuICAgIHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoKSB7XHJcbiAgICB0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcbiAgICB0aGlzLmxheW91dExldmVscygpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG4gIF90b0xvY2FsKGUpIHtcclxuICAgIGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICBjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG4gICAgcmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcbiAgfVxyXG5cclxuICBfaGl0VGVzdChteCwgbXkpIHtcclxuICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgIGNvbnN0IHogPSBsdmwuem9uZTsgIC8vIHggeSB3IHlhIGluY2x1eWVuIGNvbnRlbnRYXHJcbiAgICBpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmxpbmVILCB3OiB6LncsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgaWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZXVwJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAoT3BjaW9uYWwpIHRlY2xhZG86IGludGVncmFyIG5hdmVnYWNpw7NuIGVuIEd1aSB5IHJlZW52aWFyIGFxdcOtIHNpIHNlIGRlc2VhXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICAvLyDinIUgQWN0dWFsaXphIG9iamV0byBlbmxhemFkbyAoc2kgZXhpc3RlKSB5IGRpc3BhcmEgY2FsbGJhY2tzIOKAnGNsw6FzaWNvc+KAnVxyXG4gICAgdGhpcy5zZW5kKG5ld1BhdGgpOyAvLyBlc2NyaWJlIGVuIG9iamVjdExpbmtbb2JqZWN0S2V5XSBzaSBoYXkgcmVmZXJlbmNpYVxyXG4gICAgdGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gPT09PT09PSBBUEkgcMO6YmxpY2EgPT09PT09PVxyXG4gIHNldFZhbHVlKHBhdGgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJlZSh0cmVlKSB7XHJcbiAgICB0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG4gICAgLy8gcmVjYWxjdWxhciBsZWFmTWF4IGVuIHByw7N4aW1hIHBhc2FkYVxyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBQdWJsaWNhY2nDs24gZGUgYWx0dXJhID09PT09PT1cclxuICBfY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpIHtcclxuICAgIGxldCBjID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBpKyspIGlmICh0aGlzLmxldmVsc1tpXS50eXBlID09PSAnbWFwJykgYysrO1xyXG4gICAgcmV0dXJuIGM7XHJcbiAgfVxyXG5cclxuICBfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcbiAgICByZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09ICdsaXN0JyA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuICB9XHJcblxyXG4gIF9wdWJsaXNoSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcbiAgICBjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuICAgIGNvbnN0IGxlYWZIICA9IGxlYWZMZW4gKiB0aGlzLmxpbmVIO1xyXG4gICAgY29uc3QgaW50ZXJIID0gaW50ZXIgKiAodGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXApO1xyXG4gICAgY29uc3QgdG90YWxIID0gaW50ZXJIICsgKGludGVyID8gdGhpcy5sZXZlbEdhcCA6IDApICsgbGVhZkg7XHJcblxyXG4gICAgLy8gQWN0dWFsaXphIG3DqXRyaWNhcyBkZWwgcHJvdG8gKGxvIHF1ZSBzdW1hIGVsIEdVSSlcclxuICAgIHRoaXMuaCA9IHRvdGFsSDtcclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuXHJcbiAgICAvLyBBdmlzYXIgYWwgR1VJIHkgcmVmcmVzY2FyIHpvbmFzXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDWSxNQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxHQUFHO0FBQ1YsRUFBRSxFQUFF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USxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMzQixNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUN6QztBQUNBO0FBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUU7QUFDdEIsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdEIsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixPQUFPO0FBQ1A7QUFDQSxNQUFNLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUM5QixNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQzFCLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMvQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzlDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDdkIsTUFBTSxJQUFJLENBQUMs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QUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNyQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksRUFBRSxZQUFZO0FBQzVCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRTtBQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsRUFBRSxVQUFVLElBQUksRUFBRTtBQUM3QixJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDeEMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDbkMsSUFBSSxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0FBQ3JDLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxFQUFFLFlBQVk7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LEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENB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QyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDcEosUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNySDtBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxF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LFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pIO0FBQ0E7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtBQUNBO0FBQ0E7QUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtBQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JJLFlBQVksQ0FBQyxD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QUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0FBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHO0FBQ2xHO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ25CO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDbEIsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzVCLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixHQUFHLE1BQU07QUFDVCxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQ3RDLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUM7QUFDekMsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTSxLQUFLLENBQUM7QUFDbkIsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUN0QjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUNoQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUMzQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDO0FBQ3RDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDO0FBQ2hDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNqQztBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDbEI7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDMUUsSUFBSSxJQUFJLENBQUMsWUFBWTtBQUNyQixNQUFNLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUNoRTtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUNyRDtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVztBQUNuQyxNQUFNLENBQUM7QUFDUCxNQUFNLElBQUksQ0FBQyxJQUFJO0FBQ2YsVUFBVSxJQUFJLENBQUMsS0FBSztBQUNwQixZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUM3QixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtBQUM1QixVQUFVLEtBQUssQ0FBQyxNQUFNO0FBQ3RCLEtBQUssQ0FBQztBQUNOO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzVCLElBQUksSUFB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QUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtBQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxD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QUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDdEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBRztBQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUs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LFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU07QUFDckMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUU7QUFDckIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUU7QUFDdEI7QUFDQSxRQUFRLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFlBQVksR0FBRyxHQUFHLE1BQUs7QUFDdkIsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxLQUFJO0FBQy9FO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFFO0FBQ2xNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTTtBQUN0RSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUk7QUFDbkUsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3JELFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFFO0FBQ3BFLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssR0FBRztBQUNaO0FBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDeEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztBQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQ3hCO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDbEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzdCLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFFO0FBQzNGLGlCQUFpQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBQztBQUNuRCxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUNuRCxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDdkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEtBQUs7QUFDdEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7QUFDMUIsS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0FBQy9CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLE1BQUs7QUFDdEIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFFO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDN0IsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQztBQUNsQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQzVELFNBQVMsTUFBTTtBQUNmLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDMUIsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFLO0FBQ3pDO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0FBQ0EsWUFBWSxDQUFDLEdBQUcsRUFBQztBQUNqQixZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFLO0FBQzNFO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUU7QUFDMUIsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUM7QUFDeEMsYUFBYSxNQUFNO0FBQ25CLGdCQUFnQixDQUFDLEdBQUcsRUFBQztBQUNyQixnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUM7QUFDN0IsYUFBYTtBQUNiO0FBQ0E7QUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUU7QUFDakM7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQztBQUNoQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakM7QUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsWUFBWSxRQUFRLENBQUM7QUFDckI7QUFDQSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztBQUNoRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSztBQUNyRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSztBQUNsRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztBQUN0RjtBQUNBLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxNQUFNO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHO0FBQ3hCO0FBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE9BQU07QUFDdEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0FBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNsQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUM7QUFDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDckM7QUFDQSxRQUFRLE9BQU8sSUFBSTtBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUU7QUFDL0I7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDO0FBQ3ZDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDckIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0FBQ2xEO0FBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxH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LEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN2QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFD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QUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUNoQyxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDakosWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6RDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDak9PLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDbkM7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3RCO0FBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7QUFDbEMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUM7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzVCLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzNCLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDdk07QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3RDO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDcEMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksU0FBUTtBQUMzQztBQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFJO0FBQ3BCLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFTO0FBQzNCLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUNoQyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUU7QUFDOUUsY0FBYyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRTtBQUN6RSxjQUFjLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE1BQUs7QUFDbEMsTUFBTTtBQUNOO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7QUFDdkIsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7QUFDeEIsS0FBSyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQUs7QUFDMUI7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFLO0FBQ3BDO0FBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUU7QUFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7QUFDdEM7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBQztBQUNqQixLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBRztBQUNqQjtBQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRTtBQUNoQjtBQUNBLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQ2hDO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDM0M7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUc7QUFDckI7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQ3BCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQzFDO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtBQUNBLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxPQUFPO0FBQ3hDLFdBQVcsT0FBTyxPQUFPO0FBQ3pCO0FBQ0EsR0FBRyxNQUFNO0FBQ1Q7QUFDQSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLE9BQU87QUFDMUMsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxPQUFPO0FBQzNDO0FBQ0EsR0FBRztBQUNIO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNmO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN6QixLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7QUFDQTtBQUNBLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuRDtBQUNBO0FBQ0E7QUFDQSxFQUFFLEdBQUcsSUFBSSxLQUFLLE9BQU8sQ0FBQztBQUN0QixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNsQyxjQUFjLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMzQixTQUFTLE9BQU8sSUFBSSxDQUFDO0FBQ3JCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDeEI7QUFDQSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFJO0FBQ3ZCLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2QixHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7QUFDQSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdEQ7QUFDQSxLQUFLLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN6RDtBQUNBLEtBQUssSUFBSSxJQUFJLEtBQUssT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkQ7QUFDQSxLQUFLLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUMzQjtBQUNBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BFLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2hGLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2pDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwQixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0I7QUFDQTtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDOUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQzNDO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDdkI7QUFDQSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUIsUUFBUTtBQUNSO0FBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7QUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckM7QUFDQSxTQUFTLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMvRCxTQUFTLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2hELFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRTtBQUM3QixTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsU0FBUyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHO0FBQ3hCLE9BQU8sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN2QyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEMsZUFBZSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNuRDtBQUNBLE9BQU8sR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQSxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDeEQsT0FBTyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLE9BQU87QUFDUDtBQUNBLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUNwRDtBQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0UsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtBQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7QUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUN0QztBQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7QUFDdEM7QUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7QUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtBQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0FBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7QUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0M7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNmO0FBQ0EsRUFBRSxJQUFJLENBQUMsWUFBWSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVELGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsYUFBYSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM1QjtBQUNBLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQzdCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDcEI7QUFDQSxLQUFLLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUMxQztBQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzVCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFNO0FBQzFCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDOUM7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3ZCLE1BQU07QUFDTixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDaEI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM5QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDekIsS0FBSyxPQUFPLElBQUksQ0FBQztBQUNqQjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsV0FBVyxDQUFDLEdBQUc7QUFDaEI7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ2pCLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBSztBQUNmO0FBQ0EsS0FBYyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPO0FBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ25DLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0FBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7QUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBO0FBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVEO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDcEM7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztBQUM1QyxLQUFLLElBQUks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QUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2xELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQzdLO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtEQUFrRCxFQUFFLENBQUM7QUFDMUo7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FB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QSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDM0MsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtBQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENB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QUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQztBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FB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QUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSTtBQUM5QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVB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RUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUc7QUFDMUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RCO0FBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztBQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0FBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtBQUNBLE1BQU07QUFDTjtBQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztBQUNBLFFBQVEsSUFBSSxF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LENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtBQUN2QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDN0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztBQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJ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QUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0FBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0FBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtBQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0FBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FB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ekI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcs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QUksQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7QUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7QUFDOUI7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JEO0FBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7QUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN4RCxhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7QUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCO0FBQ0EsU0FBUztBQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDekQsUUFBUSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDNUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDMUM7QUFDQTtBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixZQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLEtBQUssQ0FBQztBQUNyRCxTQUFTLE1BQU07QUFDZixZQUFZLElBQUksR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDMUIsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHO0FBQzNDO0FBQ0EsWUFBWSxDQUFDLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNoRCxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDaEQsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDOUQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtBQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0FBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6RDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDckM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0FBQ0E7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtBQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0FBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FB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WSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7QUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7QUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUN0RDtBQUNBO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN6RDtBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2pDO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxHQUFFO0FBQ25DLGdCQUFnQixDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFFO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxvQkFBbUI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUU7QUFDckM7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQ3BDO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDOUI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQztBQUMzQztBQUNBLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTTtBQUN2QztBQUNBLGdCQUFnQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksVUFBVSxnQ0FBZ0MsRUFBQztBQUNoSCxnQkFBZ0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsZ0NBQWdDLEVBQUM7QUFDdEc7QUFDQTtBQUNBLGdCQUFnQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDbkYsZ0JBQWdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxVQUFVLCtCQUErQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRTtBQUN2SDtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDMUIsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUMvQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RixRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUU7QUFDaEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNuQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JFLFNBQVM7QUFDVCxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMxQixLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtBQUNBLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDMUQsYUFBYSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNoQztBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksVUFBVSxDQUFDLEVBQUU7QUFDakI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDOUI7QUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU87QUFDOUM7QUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDMUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUM7QUFDckQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDO0FBQ3RELGdCQUFnQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsb0JBQW1CO0FBQzlELGdCQUFnQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hELGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTTtBQUNsRCxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLE9BQU07QUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyRCxhQUFhO0FBQ2I7QUFDQSxZQUFzQixJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUc7QUFDbEQsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JKO0FBQ0EsU0FBUztBQUNULGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzdCO0FBQ0EsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxvQkFBbUI7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDO0FBQ3ZELGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTTtBQUNsRCxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLE9BQU07QUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDcEQsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEU7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDbEQsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDMUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDdkI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQsYUFBYSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNuQjtBQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDMUIsWUFBWSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUM3QixZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMvQyxZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDakQsWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3JELFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUNsRCxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDdEQsU0FBUztBQUNULFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUNyQixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN4RCxTQUFTLE1BQU07QUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN4RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0I7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDNUQsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDMzBCTyxNQUFNLE9BQU8sU0FBUyxLQUFLLENBQUM7QUFDbkM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMs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SUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BEO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzFCLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztBQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDaEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUss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SSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQzNCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDOUI7QUFDQTtBQUNBLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtBQUNBO0FBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtBQUNBO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0FBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNoQixNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDcEQsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCLE9BQU87QUFDUDtBQUNBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sR0FBRyxDQUFDO0FBQ2YsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ1gsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDM0IsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMvQztBQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUN4QixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNoRCxPQUFPLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUMvQixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNoRCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEI7QUFDQSxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFFBQVEsR0FBRztBQUNiLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7QUFDbEM7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDbkIsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3hFLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1Y7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDYixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkIsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pCO0FBQ0EsSUFBSSxRQUFRLElBQUk7QUFDaEIsTUFBTSxLQUFLLENBQUM7QUFDWjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDeEQsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDNUQsUUFBUSxNQUFNO0FBQ2QsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtBQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtBQUNBLElBQUksSUFBSSxPQUFPO0FBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzNDO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtBQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEIsR0FBRztBQUNIOztBQzdTTyxNQUFN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QUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FDakxPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDaEQ7QUFDQSxR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RyxDQUFDLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMs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LEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5RjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztBQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0FBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7QUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtBQUN6RTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7QUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0FBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUMzRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBQztBQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUM5RDtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0FBQ2hELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFFO0FBQ3BFO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDclJBO0FBSUE7QUFDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO0FBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0FBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLElB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LEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0UsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwRSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hHLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzlDO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLE1BQWtCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ25DLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtBQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QztBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3pCO0FBQ0E7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRCxVQUFVLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEQsVUFBVSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxVQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xELFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUNyQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sTUFBTTtBQUNiO0FBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNuQyxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdEO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNuRDtBQUNBLFNBQVMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hELFNBQVMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4QyxVQUFVLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsVUFBVSxNQUFNLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNqRztBQUNBLFdBQVcsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM5RSxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFB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SSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN0QztBQUNBO0FBQ0EsSUFBSSxHQUFHLENBQUMsV0FBVyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0EsSUFBSSxNQUFNLFFBQVEsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO0FBQ3pGLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQy9ELElBQUksTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5RSxJQUFJLE1BQU0sT0FBTyxNQUFNLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEY7QUFDQTtBQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksQ0FBQyxDQUFDLE1BQU0sT0FBTyxZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUM1QyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3REO0FBQ0E7QUFDQSxJQUFJLElBQUksUUFBUSxFQUFFO0FBQ2xCLE1BQU0sQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0FBQzlCLEtBQUssTUFBTSxJQUFJLFVBQVUsRUFBRTtBQUMzQixNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQztBQUN2QyxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztBQUM1QixLQUFLLE1BQU0sSUFBSSxPQUFPLEVBQUU7QUFDeEIsTUFBTSxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7QUFDaEMsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDNUIsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbkMsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFLEtBQUssR0FBRztBQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN4QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ2QsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QyxJQUFJLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUM1QixHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ25CLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDdkIsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTO0FBQzNFO0FBQ0EsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0FBQzlCLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25ELFVBQVUsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEMsVUFBVSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdB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QUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckM7QUFDQTtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNqRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzVCLEdBQUc7QUFDSDs7QUNsWVksTUFBQyxHQUFHLEdBQUcsWUFBWTtBQUMvQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDO0FBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUN0QztBQUNBLFlBQVksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNCO0FBQ0EsU0FBUyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQzlDO0FBQ0EsWUFBWSxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6RDtBQUNBLFlBQVksSUFBSSxH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Q0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUks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QUFDdEI7QUFDQSxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2QjtBQUNBLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDOUMsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3pDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDMUUsV0FBVztBQUNYLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN6QjtBQUNBLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDaEQsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0I7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxPQUFPO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsR0FB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Q0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZEO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtBQUNYLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEM7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0FBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEdBQUc7QUFDVCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsR0FBRztBQUNkLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUI7QUFDQSxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXO0FBQ2hDLFVBQVUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEMsVUFBVSxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQzdCO0FBQ0EsTUFBTSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ25EO0FBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDekM7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtBQUNwQixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQy9DLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3ZDLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDbEUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25ELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pEO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVU7QUFDM0MsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDMUQsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ2QsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEQsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRO0FBQ3JCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDNUUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUU7QUFDbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUM1QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDaEIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUIsS0FBSztBQUNMLEdBQUc7QUFDSDs7OzsifQ== diff --git a/examples/uil_treelist.html b/examples/uil_treelist.html index 840afae..39e3c22 100644 --- a/examples/uil_treelist.html +++ b/examples/uil_treelist.html @@ -16,113 +16,57 @@
    - - // ----------------------------- - // Utilidad de logging - // ----------------------------- - function log(msg) { - document.getElementById('log').textContent = msg; - } - diff --git a/src/proto/TreeList.js b/src/proto/TreeList.js index 046163a..766d856 100644 --- a/src/proto/TreeList.js +++ b/src/proto/TreeList.js @@ -354,9 +354,13 @@ export class TreeList extends Proto { this.value = newPath.slice(); this.update(); + + // ✅ Actualiza objeto enlazado (si existe) y dispara callbacks “clásicos” + this.send(newPath); // escribe en objectLink[objectKey] si hay referencia this.changeCb(this.tabIndex, this.itemIndex, newPath); } + // ======= API pública ======= setValue(path) { this.value = Array.isArray(path) ? path.slice() : []; From 2e0008dc99a8f122b262b8898e0ca75f0f2526bf Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Fri, 5 Sep 2025 23:54:44 -0300 Subject: [PATCH 11/17] treelist --- build/uil.js | 17098 ++++++++++++++++++---------------------- build/uil.min.js | 9497 +--------------------- build/uil.module.js | 9483 +--------------------- src/proto/TreeList.js | 87 +- 4 files changed, 7743 insertions(+), 28422 deletions(-) diff --git a/build/uil.js b/build/uil.js index 20a4a3c..99e0aaf 100644 --- a/build/uil.js +++ b/build/uil.js @@ -1,9482 +1,7723 @@ +/** + * @license + * Copyright 2010-2021 Uil.js Authors + * SPDX-License-Identifier: MIT + */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.UIL = {})); })(this, (function (exports) { 'use strict'; - /** - * @author lth / https://github.com/lo-th - */ - - const REVISION = "4.3.0"; - - // INTENAL FUNCTION - - const R = { - ui: [], - - dom: null, - - ID: null, - lock: false, - wlock: false, - current: -1, - - needReZone: true, - needResize: false, - forceZone: false, - isEventsInit: false, - isLeave: false, - addDOMEventListeners: true, - - downTime: 0, - prevTime: 0, - - //prevDefault: ['contextmenu', 'wheel'], - prevDefault: ["contextmenu"], - pointerEvent: ["pointerdown", "pointermove", "pointerup"], - eventOut: ["pointercancel", "pointerout", "pointerleave"], - - xmlserializer: null, - tmpTime: null, - tmpImage: null, - - oldCursor: "auto", - - input: null, - parent: null, - firstImput: true, - - hiddenImput: null, - hiddenSizer: null, - hasFocus: false, - startInput: false, - inputRange: [0, 0], - cursorId: 0, - str: "", - pos: 0, - startX: -1, - moveX: -1, - - debugInput: false, - - isLoop: false, - listens: [], - - e: { - type: null, - clientX: 0, - clientY: 0, - keyCode: NaN, - key: null, - delta: 0, - }, - - isMobile: false, - - now: null, - needsUpdate: false, - - getTime: function () { - return self.performance && self.performance.now - ? self.performance.now.bind(performance) - : Date.now; - }, - - add: function (o) { - // R.ui[0] is de GUI object that is added first by the constructor - R.ui.push(o); - R.getZone(o); - - if (!R.isEventsInit) R.initEvents(); - }, - - testMobile: function () { - let n = navigator.userAgent; - if ( - n.match(/Android/i) || - n.match(/webOS/i) || - n.match(/iPhone/i) || - n.match(/iPad/i) || - n.match(/iPod/i) || - n.match(/BlackBerry/i) || - n.match(/Windows Phone/i) - ) - return true; - else return false; - }, - - remove: function (o) { - let i = R.ui.indexOf(o); - - if (i !== -1) { - R.removeListen(o); - R.ui.splice(i, 1); - } - - if (R.ui.length === 0) { - R.removeEvents(); - } - }, - - // ---------------------- - // EVENTS - // ---------------------- - - initEvents: function () { - if (R.isEventsInit) return; - - let dom = document.body; - - R.isMobile = R.testMobile(); - R.now = R.getTime(); - - if (!R.isMobile) { - dom.addEventListener("wheel", R, { passive: false }); - } else { - dom.style.touchAction = "none"; - } - - console.log("R.addDOMEventListeners " + R.addDOMEventListeners); - if (R.addDOMEventListeners) { - dom.addEventListener("pointercancel", R); - dom.addEventListener("pointerleave", R); - //dom.addEventListener( 'pointerout', R ) - - dom.addEventListener("pointermove", R); - dom.addEventListener("pointerdown", R); - dom.addEventListener("pointerup", R); - - dom.addEventListener("keydown", R, false); - dom.addEventListener("keyup", R, false); - } - window.addEventListener("resize", R.resize, false); - - //window.onblur = R.out; - //window.onfocus = R.in; - - R.isEventsInit = true; - R.dom = dom; - }, - - removeEvents: function () { - if (!R.isEventsInit) return; - - let dom = document.body; - - if (!R.isMobile) { - dom.removeEventListener("wheel", R); - } - - if (R.addDOMEventListeners) { - dom.removeEventListener("pointercancel", R); - dom.removeEventListener("pointerleave", R); - //dom.removeEventListener( 'pointerout', R ); - - dom.removeEventListener("pointermove", R); - dom.removeEventListener("pointerdown", R); - dom.removeEventListener("pointerup", R); - - dom.removeEventListener("keydown", R); - dom.removeEventListener("keyup", R); - } - window.removeEventListener("resize", R.resize); - - R.isEventsInit = false; - }, - - resize: function () { - let i = R.ui.length, - u; - - while (i--) { - u = R.ui[i]; - if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); - } - - R.needReZone = true; - R.needResize = false; - }, - - out: function () { - console.log("im am out"); - R.clearOldID(); - }, - - in: function () { - console.log("im am in"); - // R.clearOldID(); - }, - - // ---------------------- - // HANDLE EVENTS - // ---------------------- - - fakeUp: function () { - this.handleEvent({ type: "pointerup" }); - }, - - handleEvent: function (event) { - //console.log("Roots.handleEvent "+event.type) - //if(!event.type) return; - - if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); - - if (R.needResize) R.resize(); - - R.findZone(R.forceZone); - - let e = R.e; - let leave = false; - - if (event.type === "keydown") R.keydown(event); - if (event.type === "keyup") R.keyup(event); - - if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; - else e.delta = 0; - - let ptype = event.pointerType; // mouse, pen, touch - - e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; - e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; - - e.type = event.type; - - if (R.eventOut.indexOf(event.type) !== -1) { - leave = true; - e.type = "mouseup"; - } - - if (event.type === "pointerleave") R.isLeave = true; - - if (event.type === "pointerdown") e.type = "mousedown"; - if (event.type === "pointerup") e.type = "mouseup"; - if (event.type === "pointermove") { - if (R.isLeave) { - // if user resize outside this document - R.isLeave = false; - R.resize(); - } - e.type = "mousemove"; - } - - // double click test - if (e.type === "mousedown") { - R.downTime = R.now(); - let time = R.downTime - R.prevTime; - - // double click on imput - if (time < 200) { - R.selectAll(); - return false; - } - - R.prevTime = R.downTime; - R.forceZone = false; - } - - // for imput - if (e.type === "mousedown") R.clearInput(); - - // mouse lock - if (e.type === "mousedown") R.lock = true; - if (e.type === "mouseup") R.lock = false; - - //if( R.current !== null && R.current.neverlock ) R.lock = false; - - /*if( e.type === 'mousedown' && event.button === 1){ - R.cursor() - e.preventDefault(); - e.stopPropagation(); - }*/ - - //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) - - if (R.isMobile && e.type === "mousedown") R.findID(e); - if (e.type === "mousemove" && !R.lock) R.findID(e); - - if (R.ID !== null) { - if (R.ID.isCanvasOnly) { - e.clientX = R.ID.mouse.x; - e.clientY = R.ID.mouse.y; - } - - //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 - - R.ID.handleEvent(e); - } - - if (R.isMobile && e.type === "mouseup") R.clearOldID(); - if (leave) R.clearOldID(); - }, - - // ---------------------- - // ID - // ---------------------- - - findID: function (e) { - let i = R.ui.length, - next = -1, - u, - x, - y; - - while (i--) { - u = R.ui[i]; - - if (u.isCanvasOnly) { - x = u.mouse.x; - y = u.mouse.y; - } else { - x = e.clientX; - y = e.clientY; - } - - if (R.onZone(u, x, y)) { - next = i; - - if (next !== R.current) { - R.clearOldID(); - R.current = next; - R.ID = u; - } - break; - } - } - - if (next === -1) R.clearOldID(); - }, - - clearOldID: function () { - if (!R.ID) return; - R.current = -1; - R.ID.reset(); - R.ID = null; - R.cursor(); - }, - - // ---------------------- - // GUI / GROUP FUNCTION - // ---------------------- - - calcUis: (uis, zone, py, group = false) => { - //console.log('calc_uis') - - let i = uis.length, - u, - px = 0, - n = 0, - tw, - m; - - let height = 0; - - while (i--) { - u = uis[n]; - n++; - - if (!group && u.isGroup) u.calcUis(); - - m = u.margin; - //div = u.marginDiv - - u.zone.w = u.w; - u.zone.h = u.h + m; - - if (!u.autoWidth) { - if (px === 0) height += u.h + m; - - u.zone.x = zone.x + px; - u.zone.y = py; // + u.mtop - //if(div) u.zone.y += m * 0.5 - - tw = R.getWidth(u); - if (tw) u.zone.w = u.w = tw; - else if (u.fw) u.zone.w = u.w = u.fw; - - px += u.zone.w; - - if (px >= zone.w) { - py += u.h + m; - //if(div) py += m * 0.5 - px = 0; - } - } else { - px = 0; - - u.zone.x = zone.x + u.dx; - u.zone.y = py; - py += u.h + m; - - height += u.h + m; - } - } - - return height; - }, - - findTarget: function (uis, e) { - let i = uis.length; - - while (i--) { - if (R.onZone(uis[i], e.clientX, e.clientY)) return i; - } - - return -1; - }, - - // ---------------------- - // ZONE - // ---------------------- - - findZone: function (force) { - if (!R.needReZone && !force) return; - - var i = R.ui.length, - u; - - while (i--) { - u = R.ui[i]; - R.getZone(u); - if (u.isGui) u.calcUis(); - } - - R.needReZone = false; - }, - - onZone: function (o, x, y) { - if (x === undefined || y === undefined) return false; - - let z = o.zone; - let mx = x - z.x; // - o.dx; - let my = y - z.y; - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 - //if( o.group !== null ) mx -= o.dx - - let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; - - //if( o.marginDiv ) my -= o.margin * 0.5 - - if (over) o.local.set(mx, my); - else o.local.neg(); - - return over; - }, - - getWidth: function (o) { - //return o.getDom().offsetWidth - return o.getDom().clientWidth; - - //let r = o.getDom().getBoundingClientRect(); - //return (r.width) - //return Math.floor(r.width) - }, - - getZone: function (o) { - if (o.isCanvasOnly) return; - let r = o.getDom().getBoundingClientRect(); - - //if( !r.width ) return - //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; - //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; - o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; - - //console.log(o.name, o.zone) - }, - - // ---------------------- - // CURSOR - // ---------------------- - - cursor: function (name) { - name = name ? name : "auto"; - if (name !== R.oldCursor) { - document.body.style.cursor = name; - R.oldCursor = name; - } - }, - - // ---------------------- - // CANVAS - // ---------------------- - - toCanvas: function (o, w, h, force) { - if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); - - // prevent exesive redraw - - if (force && R.tmpTime !== null) { - clearTimeout(R.tmpTime); - R.tmpTime = null; - } - - if (R.tmpTime !== null) return; - - if (R.lock) - R.tmpTime = setTimeout(function () { - R.tmpTime = null; - }, 10); - - /// - - let isNewSize = false; - if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; - - if (R.tmpImage === null) R.tmpImage = new Image(); - - let img = R.tmpImage; //new Image(); - - let htmlString = R.xmlserializer.serializeToString(o.content); - - let svg = - '' + - htmlString + - ""; - - img.onload = function () { - let ctx = o.canvas.getContext("2d"); - - if (isNewSize) { - o.canvas.width = w; - o.canvas.height = h; - } else { - ctx.clearRect(0, 0, w, h); - } - ctx.drawImage(this, 0, 0); - - o.onDraw(); - }; - - img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); - //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); - img.crossOrigin = ""; - R.needsUpdate = false; - }, - - // ---------------------- - // INPUT - // ---------------------- - - setHidden: function () { - if (R.hiddenImput === null) { - //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' - //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' - //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; - - R.hiddenImput = document.createElement("input"); - R.hiddenImput.type = "text"; - //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); - - R.hiddenSizer = document.createElement("div"); - //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; - - document.body.appendChild(R.hiddenImput); - document.body.appendChild(R.hiddenSizer); - } - - let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; - let css = - R.parent.css.txtselect + - "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + - hide; - R.hiddenImput.style.cssText = - css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); - R.hiddenSizer.style.cssText = css + "bottom:40px;"; - - R.hiddenImput.style.width = R.input.clientWidth + "px"; - R.hiddenImput.value = R.str; - R.hiddenSizer.innerHTML = R.str; - - R.hasFocus = true; - }, - - clearHidden: function (p) { - if (R.hiddenImput === null) return; - R.hasFocus = false; - }, - - clickPos: function (x) { - let i = R.str.length, - l = 0, - n = 0; - while (i--) { - l += R.textWidth(R.str[n]); - if (l >= x) break; - n++; - } - return n; - }, - - upInput: function (x, down) { - if (R.parent === null) return false; - - let up = false; - - if (down) { - let id = R.clickPos(x); - - R.moveX = id; - - if (R.startX === -1) { - R.startX = id; - R.cursorId = id; - R.inputRange = [R.startX, R.startX]; - } else { - let isSelection = R.moveX !== R.startX; - - if (isSelection) { - if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; - else R.inputRange = [R.startX, R.moveX]; - } - } - - up = true; - } else { - if (R.startX !== -1) { - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.startX = -1; - - up = true; - } - } - - if (up) R.selectParent(); - - return up; - }, - - selectAll: function () { - if (!R.parent) return; - - R.str = R.input.textContent; - R.inputRange = [0, R.str.length]; - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.cursorId = R.inputRange[1]; - R.selectParent(); - }, - - selectParent: function () { - var c = R.textWidth(R.str.substring(0, R.cursorId)); - var e = R.textWidth(R.str.substring(0, R.inputRange[0])); - var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); - - R.parent.select(c, e, s, R.hiddenSizer.innerHTML); - }, - - textWidth: function (text) { - if (R.hiddenSizer === null) return 0; - text = text.replace(/ /g, " "); - R.hiddenSizer.innerHTML = text; - return R.hiddenSizer.clientWidth; - }, - - clearInput: function () { - if (R.parent === null) return; - if (!R.firstImput) R.parent.validate(true); - - R.clearHidden(); - R.parent.unselect(); - - //R.input.style.background = 'none'; - R.input.style.background = R.parent.colors.back; - R.input.style.borderColor = R.parent.colors.border; - //R.input.style.color = R.parent.colors.text; - R.parent.isEdit = false; - - R.input = null; - R.parent = null; - (R.str = ""), (R.firstImput = true); - }, - - setInput: function (Input, parent) { - R.clearInput(); - - R.input = Input; - R.parent = parent; - - R.input.style.background = R.parent.colors.backoff; - R.input.style.borderColor = R.parent.colors.select; - //R.input.style.color = R.parent.colors.textSelect; - R.str = R.input.textContent; - - R.setHidden(); - }, - - keydown: function (e) { - if (R.parent === null) return; - - let keyCode = e.which; - e.shiftKey; - - //console.log( keyCode ) - - R.firstImput = false; - - if (R.hasFocus) { - // hack to fix touch event bug in iOS Safari - window.focus(); - R.hiddenImput.focus(); - } - - R.parent.isEdit = true; - - // e.preventDefault(); - - // add support for Ctrl/Cmd+A selection - //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { - //R.selectText(); - //e.preventDefault(); - //return self.render(); - //} - - if (keyCode === 13) { - //enter - - R.clearInput(); - - //} else if( keyCode === 9 ){ //tab key - - // R.input.textContent = ''; - } else { - if (R.input.isNum) { - if ( - (e.keyCode > 47 && e.keyCode < 58) || - (e.keyCode > 95 && e.keyCode < 106) || - e.keyCode === 190 || - e.keyCode === 110 || - e.keyCode === 8 || - e.keyCode === 109 - ) { - R.hiddenImput.readOnly = false; - } else { - R.hiddenImput.readOnly = true; - } - } else { - R.hiddenImput.readOnly = false; - } - } - }, - - keyup: function (e) { - if (R.parent === null) return; - - R.str = R.hiddenImput.value; - - if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value - else R.input.textContent = R.str; - - R.cursorId = R.hiddenImput.selectionStart; - R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; - - R.selectParent(); - - //if( R.parent.allway ) - R.parent.validate(); - }, - - // ---------------------- - // - // LISTENING - // - // ---------------------- - - /* - // esta era la funcion original - loop: function () { - - if( R.isLoop ) requestAnimationFrame( R.loop ); - R.update(); - - }, - - */ - - loop: function () { - // modified by Fedemarino - if (R.isLoop) requestAnimationFrame(R.loop); - R.needsUpdate = R.update(); - // if there is a change in a value generated externally, the GUI needs to be redrawn - if (R.ui[0] && R.needsUpdate) R.ui[0].draw(); - }, - - update: function () { - // modified by Fedemarino - let i = R.listens.length; - let needsUpdate = false; - while (i--) { - //check if the value of the object has changed - let hasChanged = R.listens[i].listening(); - if (hasChanged) needsUpdate = true; - } - return needsUpdate; - }, - - removeListen: function (proto) { - let id = R.listens.indexOf(proto); - if (id !== -1) R.listens.splice(id, 1); - if (R.listens.length === 0) R.isLoop = false; - }, - - addListen: function (proto) { - let id = R.listens.indexOf(proto); - - if (id !== -1) return false; - - R.listens.push(proto); - - if (!R.isLoop) { - R.isLoop = true; - R.loop(); - } - - return true; - }, - }; - + /** + * @author lth / https://github.com/lo-th + */ + + const REVISION = "4.3.0"; + + // INTENAL FUNCTION + + const R = { + ui: [], + dom: null, + ID: null, + lock: false, + wlock: false, + current: -1, + needReZone: true, + needResize: false, + forceZone: false, + isEventsInit: false, + isLeave: false, + addDOMEventListeners: true, + downTime: 0, + prevTime: 0, + //prevDefault: ['contextmenu', 'wheel'], + prevDefault: ["contextmenu"], + pointerEvent: ["pointerdown", "pointermove", "pointerup"], + eventOut: ["pointercancel", "pointerout", "pointerleave"], + xmlserializer: null, + tmpTime: null, + tmpImage: null, + oldCursor: "auto", + input: null, + parent: null, + firstImput: true, + hiddenImput: null, + hiddenSizer: null, + hasFocus: false, + startInput: false, + inputRange: [0, 0], + cursorId: 0, + str: "", + pos: 0, + startX: -1, + moveX: -1, + debugInput: false, + isLoop: false, + listens: [], + e: { + type: null, + clientX: 0, + clientY: 0, + keyCode: NaN, + key: null, + delta: 0 + }, + isMobile: false, + now: null, + needsUpdate: false, + getTime: function () { + return self.performance && self.performance.now ? self.performance.now.bind(performance) : Date.now; + }, + add: function (o) { + // R.ui[0] is de GUI object that is added first by the constructor + R.ui.push(o); + R.getZone(o); + if (!R.isEventsInit) R.initEvents(); + }, + testMobile: function () { + let n = navigator.userAgent; + if (n.match(/Android/i) || n.match(/webOS/i) || n.match(/iPhone/i) || n.match(/iPad/i) || n.match(/iPod/i) || n.match(/BlackBerry/i) || n.match(/Windows Phone/i)) return true;else return false; + }, + remove: function (o) { + let i = R.ui.indexOf(o); + if (i !== -1) { + R.removeListen(o); + R.ui.splice(i, 1); + } + if (R.ui.length === 0) { + R.removeEvents(); + } + }, + // ---------------------- + // EVENTS + // ---------------------- + + initEvents: function () { + if (R.isEventsInit) return; + let dom = document.body; + R.isMobile = R.testMobile(); + R.now = R.getTime(); + if (!R.isMobile) { + dom.addEventListener("wheel", R, { + passive: false + }); + } else { + dom.style.touchAction = "none"; + } + console.log("R.addDOMEventListeners " + R.addDOMEventListeners); + if (R.addDOMEventListeners) { + dom.addEventListener("pointercancel", R); + dom.addEventListener("pointerleave", R); + //dom.addEventListener( 'pointerout', R ) + + dom.addEventListener("pointermove", R); + dom.addEventListener("pointerdown", R); + dom.addEventListener("pointerup", R); + dom.addEventListener("keydown", R, false); + dom.addEventListener("keyup", R, false); + } + window.addEventListener("resize", R.resize, false); + + //window.onblur = R.out; + //window.onfocus = R.in; + + R.isEventsInit = true; + R.dom = dom; + }, + removeEvents: function () { + if (!R.isEventsInit) return; + let dom = document.body; + if (!R.isMobile) { + dom.removeEventListener("wheel", R); + } + if (R.addDOMEventListeners) { + dom.removeEventListener("pointercancel", R); + dom.removeEventListener("pointerleave", R); + //dom.removeEventListener( 'pointerout', R ); + + dom.removeEventListener("pointermove", R); + dom.removeEventListener("pointerdown", R); + dom.removeEventListener("pointerup", R); + dom.removeEventListener("keydown", R); + dom.removeEventListener("keyup", R); + } + window.removeEventListener("resize", R.resize); + R.isEventsInit = false; + }, + resize: function () { + let i = R.ui.length, + u; + while (i--) { + u = R.ui[i]; + if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); + } + R.needReZone = true; + R.needResize = false; + }, + out: function () { + console.log("im am out"); + R.clearOldID(); + }, + in: function () { + console.log("im am in"); + // R.clearOldID(); + }, + // ---------------------- + // HANDLE EVENTS + // ---------------------- + + fakeUp: function () { + this.handleEvent({ + type: "pointerup" + }); + }, + handleEvent: function (event) { + //console.log("Roots.handleEvent "+event.type) + //if(!event.type) return; + + if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); + if (R.needResize) R.resize(); + R.findZone(R.forceZone); + let e = R.e; + let leave = false; + if (event.type === "keydown") R.keydown(event); + if (event.type === "keyup") R.keyup(event); + if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1;else e.delta = 0; + let ptype = event.pointerType; // mouse, pen, touch + + e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; + e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; + e.type = event.type; + if (R.eventOut.indexOf(event.type) !== -1) { + leave = true; + e.type = "mouseup"; + } + if (event.type === "pointerleave") R.isLeave = true; + if (event.type === "pointerdown") e.type = "mousedown"; + if (event.type === "pointerup") e.type = "mouseup"; + if (event.type === "pointermove") { + if (R.isLeave) { + // if user resize outside this document + R.isLeave = false; + R.resize(); + } + e.type = "mousemove"; + } + + // double click test + if (e.type === "mousedown") { + R.downTime = R.now(); + let time = R.downTime - R.prevTime; + + // double click on imput + if (time < 200) { + R.selectAll(); + return false; + } + R.prevTime = R.downTime; + R.forceZone = false; + } + + // for imput + if (e.type === "mousedown") R.clearInput(); + + // mouse lock + if (e.type === "mousedown") R.lock = true; + if (e.type === "mouseup") R.lock = false; + + //if( R.current !== null && R.current.neverlock ) R.lock = false; + + /*if( e.type === 'mousedown' && event.button === 1){ + R.cursor() + e.preventDefault(); + e.stopPropagation(); + }*/ + + //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) + + if (R.isMobile && e.type === "mousedown") R.findID(e); + if (e.type === "mousemove" && !R.lock) R.findID(e); + if (R.ID !== null) { + if (R.ID.isCanvasOnly) { + e.clientX = R.ID.mouse.x; + e.clientY = R.ID.mouse.y; + } + + //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 + + R.ID.handleEvent(e); + } + if (R.isMobile && e.type === "mouseup") R.clearOldID(); + if (leave) R.clearOldID(); + }, + // ---------------------- + // ID + // ---------------------- + + findID: function (e) { + let i = R.ui.length, + next = -1, + u, + x, + y; + while (i--) { + u = R.ui[i]; + if (u.isCanvasOnly) { + x = u.mouse.x; + y = u.mouse.y; + } else { + x = e.clientX; + y = e.clientY; + } + if (R.onZone(u, x, y)) { + next = i; + if (next !== R.current) { + R.clearOldID(); + R.current = next; + R.ID = u; + } + break; + } + } + if (next === -1) R.clearOldID(); + }, + clearOldID: function () { + if (!R.ID) return; + R.current = -1; + R.ID.reset(); + R.ID = null; + R.cursor(); + }, + // ---------------------- + // GUI / GROUP FUNCTION + // ---------------------- + + calcUis: (uis, zone, py, group = false) => { + //console.log('calc_uis') + + let i = uis.length, + u, + px = 0, + n = 0, + tw, + m; + let height = 0; + while (i--) { + u = uis[n]; + n++; + if (!group && u.isGroup) u.calcUis(); + m = u.margin; + //div = u.marginDiv + + u.zone.w = u.w; + u.zone.h = u.h + m; + if (!u.autoWidth) { + if (px === 0) height += u.h + m; + u.zone.x = zone.x + px; + u.zone.y = py; // + u.mtop + //if(div) u.zone.y += m * 0.5 + + tw = R.getWidth(u); + if (tw) u.zone.w = u.w = tw;else if (u.fw) u.zone.w = u.w = u.fw; + px += u.zone.w; + if (px >= zone.w) { + py += u.h + m; + //if(div) py += m * 0.5 + px = 0; + } + } else { + px = 0; + u.zone.x = zone.x + u.dx; + u.zone.y = py; + py += u.h + m; + height += u.h + m; + } + } + return height; + }, + findTarget: function (uis, e) { + let i = uis.length; + while (i--) { + if (R.onZone(uis[i], e.clientX, e.clientY)) return i; + } + return -1; + }, + // ---------------------- + // ZONE + // ---------------------- + + findZone: function (force) { + if (!R.needReZone && !force) return; + var i = R.ui.length, + u; + while (i--) { + u = R.ui[i]; + R.getZone(u); + if (u.isGui) u.calcUis(); + } + R.needReZone = false; + }, + onZone: function (o, x, y) { + if (x === undefined || y === undefined) return false; + let z = o.zone; + let mx = x - z.x; // - o.dx; + let my = y - z.y; + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 + //if( o.group !== null ) mx -= o.dx + + let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; + + //if( o.marginDiv ) my -= o.margin * 0.5 + + if (over) o.local.set(mx, my);else o.local.neg(); + return over; + }, + getWidth: function (o) { + //return o.getDom().offsetWidth + return o.getDom().clientWidth; + + //let r = o.getDom().getBoundingClientRect(); + //return (r.width) + //return Math.floor(r.width) + }, + getZone: function (o) { + if (o.isCanvasOnly) return; + let r = o.getDom().getBoundingClientRect(); + + //if( !r.width ) return + //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; + //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; + o.zone = { + x: r.left, + y: r.top, + w: r.width, + h: r.height + }; + + //console.log(o.name, o.zone) + }, + // ---------------------- + // CURSOR + // ---------------------- + + cursor: function (name) { + name = name ? name : "auto"; + if (name !== R.oldCursor) { + document.body.style.cursor = name; + R.oldCursor = name; + } + }, + // ---------------------- + // CANVAS + // ---------------------- + + toCanvas: function (o, w, h, force) { + if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); + + // prevent exesive redraw + + if (force && R.tmpTime !== null) { + clearTimeout(R.tmpTime); + R.tmpTime = null; + } + if (R.tmpTime !== null) return; + if (R.lock) R.tmpTime = setTimeout(function () { + R.tmpTime = null; + }, 10); + + /// + + let isNewSize = false; + if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; + if (R.tmpImage === null) R.tmpImage = new Image(); + let img = R.tmpImage; //new Image(); + + let htmlString = R.xmlserializer.serializeToString(o.content); + let svg = '' + htmlString + ""; + img.onload = function () { + let ctx = o.canvas.getContext("2d"); + if (isNewSize) { + o.canvas.width = w; + o.canvas.height = h; + } else { + ctx.clearRect(0, 0, w, h); + } + ctx.drawImage(this, 0, 0); + o.onDraw(); + }; + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); + //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); + img.crossOrigin = ""; + R.needsUpdate = false; + }, + // ---------------------- + // INPUT + // ---------------------- + + setHidden: function () { + if (R.hiddenImput === null) { + //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' + //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' + //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; + + R.hiddenImput = document.createElement("input"); + R.hiddenImput.type = "text"; + //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); + + R.hiddenSizer = document.createElement("div"); + //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; + + document.body.appendChild(R.hiddenImput); + document.body.appendChild(R.hiddenSizer); + } + let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; + let css = R.parent.css.txtselect + "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + hide; + R.hiddenImput.style.cssText = css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); + R.hiddenSizer.style.cssText = css + "bottom:40px;"; + R.hiddenImput.style.width = R.input.clientWidth + "px"; + R.hiddenImput.value = R.str; + R.hiddenSizer.innerHTML = R.str; + R.hasFocus = true; + }, + clearHidden: function (p) { + if (R.hiddenImput === null) return; + R.hasFocus = false; + }, + clickPos: function (x) { + let i = R.str.length, + l = 0, + n = 0; + while (i--) { + l += R.textWidth(R.str[n]); + if (l >= x) break; + n++; + } + return n; + }, + upInput: function (x, down) { + if (R.parent === null) return false; + let up = false; + if (down) { + let id = R.clickPos(x); + R.moveX = id; + if (R.startX === -1) { + R.startX = id; + R.cursorId = id; + R.inputRange = [R.startX, R.startX]; + } else { + let isSelection = R.moveX !== R.startX; + if (isSelection) { + if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX];else R.inputRange = [R.startX, R.moveX]; + } + } + up = true; + } else { + if (R.startX !== -1) { + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.startX = -1; + up = true; + } + } + if (up) R.selectParent(); + return up; + }, + selectAll: function () { + if (!R.parent) return; + R.str = R.input.textContent; + R.inputRange = [0, R.str.length]; + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.cursorId = R.inputRange[1]; + R.selectParent(); + }, + selectParent: function () { + var c = R.textWidth(R.str.substring(0, R.cursorId)); + var e = R.textWidth(R.str.substring(0, R.inputRange[0])); + var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); + R.parent.select(c, e, s, R.hiddenSizer.innerHTML); + }, + textWidth: function (text) { + if (R.hiddenSizer === null) return 0; + text = text.replace(/ /g, " "); + R.hiddenSizer.innerHTML = text; + return R.hiddenSizer.clientWidth; + }, + clearInput: function () { + if (R.parent === null) return; + if (!R.firstImput) R.parent.validate(true); + R.clearHidden(); + R.parent.unselect(); + + //R.input.style.background = 'none'; + R.input.style.background = R.parent.colors.back; + R.input.style.borderColor = R.parent.colors.border; + //R.input.style.color = R.parent.colors.text; + R.parent.isEdit = false; + R.input = null; + R.parent = null; + R.str = "", R.firstImput = true; + }, + setInput: function (Input, parent) { + R.clearInput(); + R.input = Input; + R.parent = parent; + R.input.style.background = R.parent.colors.backoff; + R.input.style.borderColor = R.parent.colors.select; + //R.input.style.color = R.parent.colors.textSelect; + R.str = R.input.textContent; + R.setHidden(); + }, + keydown: function (e) { + if (R.parent === null) return; + let keyCode = e.which; + e.shiftKey; + + //console.log( keyCode ) + + R.firstImput = false; + if (R.hasFocus) { + // hack to fix touch event bug in iOS Safari + window.focus(); + R.hiddenImput.focus(); + } + R.parent.isEdit = true; + + // e.preventDefault(); + + // add support for Ctrl/Cmd+A selection + //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { + //R.selectText(); + //e.preventDefault(); + //return self.render(); + //} + + if (keyCode === 13) { + //enter + + R.clearInput(); + + //} else if( keyCode === 9 ){ //tab key + + // R.input.textContent = ''; + } else { + if (R.input.isNum) { + if (e.keyCode > 47 && e.keyCode < 58 || e.keyCode > 95 && e.keyCode < 106 || e.keyCode === 190 || e.keyCode === 110 || e.keyCode === 8 || e.keyCode === 109) { + R.hiddenImput.readOnly = false; + } else { + R.hiddenImput.readOnly = true; + } + } else { + R.hiddenImput.readOnly = false; + } + } + }, + keyup: function (e) { + if (R.parent === null) return; + R.str = R.hiddenImput.value; + if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value + else R.input.textContent = R.str; + R.cursorId = R.hiddenImput.selectionStart; + R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; + R.selectParent(); + + //if( R.parent.allway ) + R.parent.validate(); + }, + // ---------------------- + // + // LISTENING + // + // ---------------------- + + /* + // esta era la funcion original + loop: function () { + if( R.isLoop ) requestAnimationFrame( R.loop ); + R.update(); + }, + */ + + loop: function () { + // modified by Fedemarino + if (R.isLoop) requestAnimationFrame(R.loop); + R.needsUpdate = R.update(); + // if there is a change in a value generated externally, the GUI needs to be redrawn + if (R.ui[0] && R.needsUpdate) R.ui[0].draw(); + }, + update: function () { + // modified by Fedemarino + let i = R.listens.length; + let needsUpdate = false; + while (i--) { + //check if the value of the object has changed + let hasChanged = R.listens[i].listening(); + if (hasChanged) needsUpdate = true; + } + return needsUpdate; + }, + removeListen: function (proto) { + let id = R.listens.indexOf(proto); + if (id !== -1) R.listens.splice(id, 1); + if (R.listens.length === 0) R.isLoop = false; + }, + addListen: function (proto) { + let id = R.listens.indexOf(proto); + if (id !== -1) return false; + R.listens.push(proto); + if (!R.isLoop) { + R.isLoop = true; + R.loop(); + } + return true; + } + }; const Roots = R; - /** - * @author lth / https://github.com/lo-th - */ - - const T = { - - transition: 0.2, - - frag: document.createDocumentFragment(), - - colorRing: null, - joystick_0: null, - joystick_1: null, - circular: null, - knob: null, - pad2d: null, - - svgns: "http://www.w3.org/2000/svg", - links: "http://www.w3.org/1999/xlink", - htmls: "http://www.w3.org/1999/xhtml", - - DOM_SIZE: [ 'height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], - SVG_TYPE_D: [ 'pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix' ], - SVG_TYPE_G: [ 'svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject' ], - - PI: Math.PI, - TwoPI: Math.PI*2, - pi90: Math.PI * 0.5, - pi60: Math.PI/3, - - torad: Math.PI / 180, - todeg: 180 / Math.PI, - - clamp: ( v, min, max ) => { - - v = v < min ? min : v; - v = v > max ? max : v; - return v; - - }, - - isDivid: ( v ) => ( v*0.5 === Math.floor(v*0.5) ), - - size: { w: 240, h: 20, p: 30, s: 8 }, - - // ---------------------- - // COLOR - // ---------------------- - - defineColor: ( o, cc = T.colors ) => { - - let color = { ...cc }; - - let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize' ]; - let changeText = false; - - if( o.font ) o.fontFamily = o.font; - if( o.shadow ) o.fontShadow = o.shadow; - if( o.weight ) o.fontWeight = o.weight; - - if( o.fontColor ) o.text = o.fontColor; - if( o.color ) o.text = o.color; - - if( o.text ){ - color.text = o.text; - if( !o.fontColor && !o.color ){ - color.title = T.ColorLuma( o.text, -0.25 ); - color.titleoff = T.ColorLuma( o.text, -0.5 ); - } - color.textOver = T.ColorLuma( o.text, 0.25 ); - color.textSelect = T.ColorLuma( o.text, 0.5 ); - } - - if( o.button ){ - color.button = o.button; - color.border = T.ColorLuma( o.button, 0.1 ); - color.overoff = T.ColorLuma( o.button, 0.2 ); - } - - if( o.select ){ - color.select = o.select; - color.over = T.ColorLuma( o.select, -0.1 ); - } - - if( o.itemBg ) o.back = o.itemBg; - - if( o.back ){ - color.back = o.back; - color.backoff = T.ColorLuma( o.back, -0.1 ); - } - - if( o.fontSelect ) color.textSelect = o.fontSelect; - if( o.groupBorder ) color.gborder = o.groupBorder; - - //if( o.transparent ) o.bg = 'none' - //if( o.bg ) color.background = color.backgroundOver = o.bg - if( o.bgOver ) color.backgroundOver = o.bgOver; - - for( let m in color ){ - if(o[m]!==undefined) color[m] = o[m]; - } - - for( let m in o ){ - if( textChange.indexOf(m) !== -1 ) changeText = true; - } - - if( changeText ) T.defineText( color ); - - return color - - }, - - colors: { - - sx: 4,//4 - sy: 2,//2 - radius:2, - - showOver : 1, - //groupOver : 1, - - content:'none', - background: 'rgba(50,50,50,0.15)', - backgroundOver: 'rgba(50,50,50,0.3)', - - title : '#CCC', - titleoff : '#BBB', - text : '#DDD', - textOver : '#EEE', - textSelect : '#FFF', - - back:'rgba(0,0,0,0.2)', - backoff:'rgba(0,0,0,0.3)', - - // input and button border - border : '#4c4c4c', - borderSize : 1, - - gborder : 'none', - groups : 'none', - - - button : '#3c3c3c', - overoff : '#5c5c5c', - over : '#024699', - select : '#308AFF', - action: '#FF3300', - - //fontFamily: 'Tahoma', - fontFamily: 'Consolas, monospace', - //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", - fontWeight: 'normal', - fontShadow: 'none',//'#000', - fontSize:12, - - joyOver:'rgba(48,138,255,0.25)', - joyOut: 'rgba(100,100,100,0.5)', - joySelect: '#308AFF', - - - hide: 'rgba(0,0,0,0)', - - }, - - // style css - - css : { - - basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', - button:'display:flex; align-items:center; justify-content:center; text-align:center;', - middle:'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' - }, - - // svg path - - svgs: { - - g1:'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', - g2:'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', - - group:'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', - arrow:'M 3 8 L 8 5 3 2 3 8 Z', - - arrowDown:'M 5 8 L 8 3 2 3 5 8 Z', - arrowUp:'M 5 2 L 2 7 8 7 5 2 Z', - - solid:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', - body:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', - vehicle:'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', - articulation:'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', - character:'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', - terrain:'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', - joint:'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', - ray:'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', - collision:'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', - map:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - material:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - texture:'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', - object:'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', - none:'M 9 5 L 5 5 5 9 9 9 9 5 Z', - cursor:'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', - load:'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', - save:'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', - extern:'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z', - - }, - - rezone () { - Roots.needReZone = true; - }, - - getImput: function(){ - - return Roots.input ? true : false - - }, - - setStyle : function ( data ){ - - for ( var o in data ){ - if( T.colors[o] ) T.colors[o] = data[o]; - } - - T.setText(); - - }, - - // ---------------------- - // custom text - // ---------------------- - - defineText: function( o ){ - - T.setText( o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight ); - - }, - - setText: function( size, color, font, shadow, weight ){ - - let cc = T.colors; - - if( font === undefined ) font = cc.fontFamily; - if( size === undefined ) size = cc.fontSize; - if( shadow === undefined ) shadow = cc.fontShadow; - if( weight === undefined ) weight = cc.fontWeight; - if( color === undefined ) color = cc.text; - - if( isNaN(size) ){ if( size.search('em')===-1 ) size += 'px';} - else size += 'px'; - - - //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' - - T.css.txt = T.css.basic + T.css.middle + ' font-family:'+ font +'; font-weight:'+weight+'; font-size:'+size+'; color:'+cc.text+'; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; - if( shadow !== 'none' ) T.css.txt += ' text-shadow: 1px 1px 1px '+shadow+';'; - - T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; - T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; - - }, - - - // note - - //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container - - /*cloneColor: function () { - - let cc = Object.assign({}, T.colors ); - return cc; - - },*/ - - // intern function - - cloneCss: function () { - - //let cc = Object.assign({}, T.css ); - return { ...T.css }; - - }, - - clone: function ( o ) { - - return o.cloneNode( true ); - - }, - - setSvg: function( dom, type, value, id, id2 ){ - - if( id === -1 ) dom.setAttributeNS( null, type, value ); - else if( id2 !== undefined ) dom.childNodes[ id || 0 ].childNodes[ id2 || 0 ].setAttributeNS( null, type, value ); - else dom.childNodes[ id || 0 ].setAttributeNS( null, type, value ); - - }, - - setCss: function( dom, css ){ - - for( let r in css ){ - if( T.DOM_SIZE.indexOf(r) !== -1 ) dom.style[r] = css[r] + 'px'; - else dom.style[r] = css[r]; - } - - }, - - set: function( g, o ){ - - for( let att in o ){ - if( att === 'txt' ) g.textContent = o[ att ]; - if( att === 'link' ) g.setAttributeNS( T.links, 'xlink:href', o[ att ] ); - else g.setAttributeNS( null, att, o[ att ] ); - } - - }, - - get: function( dom, id ){ - - if( id === undefined ) return dom; // root - else if( !isNaN( id ) ) return dom.childNodes[ id ]; // first child - else if( id instanceof Array ){ - if(id.length === 2) return dom.childNodes[ id[0] ].childNodes[ id[1] ]; - if(id.length === 3) return dom.childNodes[ id[0] ].childNodes[ id[1] ].childNodes[ id[2] ]; - } - - }, - - dom : function ( type, css, obj, dom, id ) { - - type = type || 'div'; - - if( T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1 ){ // is svg element - - if( type ==='svg' ){ - - dom = document.createElementNS( T.svgns, 'svg' ); - T.set( dom, obj ); - - /* } else if ( type === 'use' ) { - - dom = document.createElementNS( T.svgns, 'use' ); - T.set( dom, obj ); - */ - } else { - // create new svg if not def - if( dom === undefined ) dom = document.createElementNS( T.svgns, 'svg' ); - T.addAttributes( dom, type, obj, id ); - - } - - } else { // is html element - - if( dom === undefined ) dom = document.createElementNS( T.htmls, type ); - else dom = dom.appendChild( document.createElementNS( T.htmls, type ) ); - - } - - if( css ) dom.style.cssText = css; - - if( id === undefined ) return dom; - else return dom.childNodes[ id || 0 ]; - - }, - - addAttributes : function( dom, type, o, id ){ - - let g = document.createElementNS( T.svgns, type ); - T.set( g, o ); - T.get( dom, id ).appendChild( g ); - if( T.SVG_TYPE_G.indexOf(type) !== -1 ) g.style.pointerEvents = 'none'; - return g; - - }, - - clear : function( dom ){ - - T.purge( dom ); - while (dom.firstChild) { - if ( dom.firstChild.firstChild ) T.clear( dom.firstChild ); - dom.removeChild( dom.firstChild ); - } - - }, - - purge : function ( dom ) { - - let a = dom.attributes, i, n; - if (a) { - i = a.length; - while(i--){ - n = a[i].name; - if (typeof dom[n] === 'function') dom[n] = null; - } - } - a = dom.childNodes; - if (a) { - i = a.length; - while(i--){ - T.purge( dom.childNodes[i] ); - } - } - - }, - - // ---------------------- - // SVG Effects function - // ---------------------- - - addSVGGlowEffect: function () { - - if ( document.getElementById( 'UILGlow') !== null ) return; - - let svgFilter = T.initUILEffects(); - - let filter = T.addAttributes( svgFilter, 'filter', { id: 'UILGlow', x: '-20%', y: '-20%', width: '140%', height: '140%' } ); - T.addAttributes( filter, 'feGaussianBlur', { in: 'SourceGraphic', stdDeviation: '3', result: 'uilBlur' } ); - let feMerge = T.addAttributes( filter, 'feMerge', { } ); - - for( let i = 0; i <= 3; i++ ) { - - T.addAttributes( feMerge, 'feMergeNode', { in: 'uilBlur' } ); - - } - - T.addAttributes( feMerge, 'feMergeNode', { in: 'SourceGraphic' } ); - - }, - - initUILEffects: function () { - - let svgFilter = document.getElementById( 'UILSVGEffects'); - - if ( svgFilter === null ) { - - svgFilter = T.dom( 'svg', undefined , { id: 'UILSVGEffects', width: '0', height: '0' } ); - document.body.appendChild( svgFilter ); - - } - - return svgFilter; - - }, - - // ---------------------- - // Color function - // ---------------------- - - ColorLuma : function ( hex, l ) { - - //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; - - if( hex === 'n' ) hex = '#000'; - - // validate hex string - hex = String(hex).replace(/[^0-9a-f]/gi, ''); - if (hex.length < 6) { - hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; - } - l = l || 0; - - // convert to decimal and change luminosity - let rgb = "#", c, i; - for (i = 0; i < 3; i++) { - c = parseInt(hex.substr(i*2,2), 16); - c = Math.round(Math.min(Math.max(0, c + (c * l)), 255)).toString(16); - rgb += ("00"+c).substr(c.length); - } - - return rgb; - - }, - - findDeepInver: function ( c ) { - - return (c[0] * 0.3 + c[1] * .59 + c[2] * .11) <= 0.6; - - }, - - lerpColor: function( c1, c2, factor ) { - let newColor = {}; - for ( let i = 0; i < 3; i++ ) { - newColor[i] = c1[ i ] + ( c2[ i ] - c1[ i ] ) * factor; - } - return newColor; - }, - - hexToHtml: function ( v ) { - v = v === undefined ? 0x000000 : v; - return "#" + ("000000" + v.toString(16)).substr(-6); - - }, - - htmlToHex: function ( v ) { - - return v.toUpperCase().replace("#", "0x"); - - }, - - u255: function (c, i) { - - return parseInt(c.substring(i, i + 2), 16) / 255; - - }, - - u16: function ( c, i ) { - - return parseInt(c.substring(i, i + 1), 16) / 15; - - }, - - unpack: function( c ){ - - if (c.length == 7) return [ T.u255(c, 1), T.u255(c, 3), T.u255(c, 5) ]; - else if (c.length == 4) return [ T.u16(c,1), T.u16(c,2), T.u16(c,3) ]; - - }, - - p255: function ( c ) { - let h = Math.round( ( c * 255 ) ).toString( 16 ); - if ( h.length < 2 ) h = '0' + h; - return h; - }, - - pack: function ( c ) { - - return '#' + T.p255( c[ 0 ] ) + T.p255( c[ 1 ] ) + T.p255( c[ 2 ] ); - - }, - - htmlRgb: function( c ){ - - return 'rgb(' + Math.round(c[0] * 255) + ','+ Math.round(c[1] * 255) + ','+ Math.round(c[2] * 255) + ')'; - - }, - - pad: function( n ){ - if(n.length == 1)n = '0' + n; - return n; - }, - - rgbToHex : function( c ){ - - let r = Math.round(c[0] * 255).toString(16); - let g = Math.round(c[1] * 255).toString(16); - let b = Math.round(c[2] * 255).toString(16); - return '#' + T.pad(r) + T.pad(g) + T.pad(b); - - // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); - - }, - - hueToRgb: function( p, q, t ){ - - if ( t < 0 ) t += 1; - if ( t > 1 ) t -= 1; - if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; - if ( t < 1 / 2 ) return q; - if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); - return p; - - }, - - rgbToHsl: function ( c ) { - - let r = c[0], g = c[1], b = c[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h = 0, s = 0, l = (min + max) / 2; - if (l > 0 && l < 1) s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); - if (delta > 0) { - if (max == r && max != g) h += (g - b) / delta; - if (max == g && max != b) h += (2 + (b - r) / delta); - if (max == b && max != r) h += (4 + (r - g) / delta); - h /= 6; - } - return [ h, s, l ]; - - }, - - hslToRgb: function ( c ) { - - let p, q, h = c[0], s = c[1], l = c[2]; - - if ( s === 0 ) return [ l, l, l ]; - else { - q = l <= 0.5 ? l * (s + 1) : l + s - ( l * s ); - p = l * 2 - q; - return [ T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333) ]; - } - - }, - - // ---------------------- - // SVG MODEL - // ---------------------- - - makeGradiant: function ( type, settings, parent, colors ) { - - T.dom( type, null, settings, parent, 0 ); - - let n = parent.childNodes[0].childNodes.length - 1, c; - - for( let i = 0; i < colors.length; i++ ){ - - c = colors[i]; - //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); - T.dom( 'stop', null, { offset:c[0]+'%', 'stop-color':c[1], 'stop-opacity':c[2] }, parent, [0,n] ); - - } - - }, - - /*makeGraph: function () { - - let w = 128; - let radius = 34; - let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 - //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 - //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 - - //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 - //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 - T.graph = svg; - - },*/ - - makePad: function ( model ) { - - let ww = 256; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+ww+' '+ww, width:ww, height:ww, preserveAspectRatio:'none' } ); - let w = 200; - let d = (ww-w)*0.5, m = 20; - Tools.dom( 'rect', '', { x: d, y: d, width: w, height: w, fill:T.colors.back }, svg ); // 0 - Tools.dom( 'rect', '', { x: d+m*0.5, y: d+m*0.5, width: w - m , height: w - m, fill:T.colors.button }, svg ); // 1 - // Pointer - Tools.dom( 'line', '', { x1: d+(m*0.5), y1: ww *0.5, x2: d+(w-m*0.5), y2: ww * 0.5, stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 2 - Tools.dom( 'line', '', { x1: ww * 0.5, x2: ww * 0.5, y1: d+(m*0.5), y2: d+(w-m*0.5), stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 3 - Tools.dom( 'circle', '', { cx: ww * 0.5, cy: ww * 0.5, r:5, stroke: T.colors.text, 'stroke-width': 5, fill:'none' }, svg ); // 4 - T.pad2d = svg; - - }, - - makeKnob: function ( model ) { - - let w = 128; - let radius = 34; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'round' }, svg );//1 - T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.1)', 'stroke-width':7 , fill:'none'}, svg );//2 - T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 - T.knob = svg; - - }, - - makeCircular: function ( model ) { - - let w = 128; - let radius = 40; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'circle', '', { cx:64, cy:64, r:radius, stroke:'rgba(0,0,0,0.1)', 'stroke-width':10, fill:'none' }, svg );//0 - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':7, fill:'none', 'stroke-linecap':'butt' }, svg );//1 - T.circular = svg; - - }, - - makeJoystick: function ( model ) { - - //+' background:#f00;' - - let w = 128, ccc; - let radius = Math.floor((w-30)*0.5); - let innerRadius = Math.floor(radius*0.6); - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'defs', null, {}, svg ); - T.dom( 'g', null, {}, svg ); - - if( model === 0 ){ - - - - // gradian background - ccc = [ [40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'grad', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // gradian shadow - ccc = [ [60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'gradS', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // gradian stick - let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; - let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; - - ccc = [ [30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1] ]; - T.makeGradiant( 'radialGradient', { id:'gradIn', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - ccc = [ [30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1] ]; - T.makeGradiant( 'radialGradient', { id:'gradIn2', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // graph - - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'url(#grad)' }, svg );//2 - T.dom( 'circle', '', { cx:64+5, cy:64+10, r:innerRadius+10, fill:'url(#gradS)' }, svg );//3 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'url(#gradIn)' }, svg );//4 - - T.joystick_0 = svg; - - } else { - // gradian shadow - ccc = [ [69, 'rgb(0,0,0)', 0],[70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'gradX', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'none', stroke:'rgba(100,100,100,0.25)', 'stroke-width':'4' }, svg );//2 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius+14, fill:'url(#gradX)' }, svg );//3 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'none', stroke:'rgb(100,100,100)', 'stroke-width':'4' }, svg );//4 - - T.joystick_1 = svg; - } - - - - }, - - makeColorRing: function () { - - let w = 256; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'defs', null, {}, svg ); - T.dom( 'g', null, {}, svg ); - - let s = 30;//stroke - let r =( w-s )*0.5; - let mid = w*0.5; - let n = 24, nudge = 8 / r / n * Math.PI, a1 = 0; - let am, tan, d2, a2, ar, i, j, path, ccc; - let color = []; - - for ( i = 0; i <= n; ++i) { - - d2 = i / n; - a2 = d2 * T.TwoPI; - am = (a1 + a2) * 0.5; - tan = 1 / Math.cos((a2 - a1) * 0.5); - - ar = [ - Math.sin(a1), -Math.cos(a1), - Math.sin(am) * tan, -Math.cos(am) * tan, - Math.sin(a2), -Math.cos(a2) - ]; - - color[1] = T.rgbToHex( T.hslToRgb([d2, 1, 0.5]) ); - - if (i > 0) { - - j = 6; - while(j--){ - ar[j] = ((ar[j]*r)+mid).toFixed(2); - } - - path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; - - ccc = [ [0,color[0],1], [100,color[1],1] ]; - T.makeGradiant( 'linearGradient', { id:'G'+i, x1:ar[0], y1:ar[1], x2:ar[4], y2:ar[5], gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - T.dom( 'path', '', { d:path, 'stroke-width':s, stroke:'url(#G'+i+')', 'stroke-linecap':"butt" }, svg, 1 ); - - } - a1 = a2 - nudge; - color[0] = color[1]; - } - - let tw = 84.90; - - // black / white - ccc = [ [0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1] ]; - T.makeGradiant( 'linearGradient', { id:'GL0', x1:0, y1:mid-tw, x2:0, y2:mid+tw, gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - ccc = [ [0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0] ]; - T.makeGradiant( 'linearGradient', { id:'GL1', x1:mid-49.05, y1:0, x2:mid+98, y2:0, gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - T.dom( 'g', null, { 'transform-origin': '128px 128px', 'transform':'rotate(0)' }, svg );//2 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'red' }, svg, 2 );// 2,0 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL1)','stroke-width':1, stroke:'url(#GL1)' }, svg, 2 );//2,1 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL0)','stroke-width':1, stroke:'url(#GL0)' }, svg, 2 );//2,2 - T.dom( 'path', '', { d:'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill:'none','stroke-width':2, stroke:'#000' }, svg, 2 );//2,3 - //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 - - T.dom( 'circle', '', { cx:128, cy:128, r:6, 'stroke-width':2, stroke:'#000', fill:'none' }, svg );//3 - - T.colorRing = svg; - - }, - - icon: function ( type, color, w ){ - - w = w || 40; - //color = color || '#DEDEDE'; - let viewBox = '0 0 256 256'; - //let viewBox = '0 0 '+ w +' '+ w; - let t = [""]; - switch(type){ - case 'logo': - t[1]=""; - break; - case 'donate': - t[1]=""; - break; - case 'neo': - t[1]=""; - break; - case 'phy': - t[1]=""; - break; - case 'config': - t[1]=""; - break; - case 'github': - t[1]=""; - break; - case 'save': - t[1]=""; - break; - } - t[2] = ""; - return t.join("\n"); - - }, - - logoFill_d:` - M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 - L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 - M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 - Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z - `, - - logo_github:` - M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 - 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 - 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 - 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 - 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z - `, - - logo_neo:` - M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 - 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 - 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 - 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L - 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z - `, - - logo_phy:` - M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 - Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 - `, - - logo_config:` - M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 - L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 - Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 - `, - - logo_donate:` - M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 - 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 - 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 - 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 - 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 - Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 - 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 - 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 - 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M - 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 - 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 - 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 - 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 - 200.9 187.5 200.9 187.5 195.35 Z - `, - - }; - - T.setText(); - - const Tools = T; + /** + * @author lth / https://github.com/lo-th + */ + const T = { + transition: 0.2, + frag: document.createDocumentFragment(), + colorRing: null, + joystick_0: null, + joystick_1: null, + circular: null, + knob: null, + pad2d: null, + svgns: "http://www.w3.org/2000/svg", + links: "http://www.w3.org/1999/xlink", + htmls: "http://www.w3.org/1999/xhtml", + DOM_SIZE: ['height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], + SVG_TYPE_D: ['pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix'], + SVG_TYPE_G: ['svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject'], + PI: Math.PI, + TwoPI: Math.PI * 2, + pi90: Math.PI * 0.5, + pi60: Math.PI / 3, + torad: Math.PI / 180, + todeg: 180 / Math.PI, + clamp: (v, min, max) => { + v = v < min ? min : v; + v = v > max ? max : v; + return v; + }, + isDivid: v => v * 0.5 === Math.floor(v * 0.5), + size: { + w: 240, + h: 20, + p: 30, + s: 8 + }, + // ---------------------- + // COLOR + // ---------------------- + + defineColor: (o, cc = T.colors) => { + let color = { + ...cc + }; + let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize']; + let changeText = false; + if (o.font) o.fontFamily = o.font; + if (o.shadow) o.fontShadow = o.shadow; + if (o.weight) o.fontWeight = o.weight; + if (o.fontColor) o.text = o.fontColor; + if (o.color) o.text = o.color; + if (o.text) { + color.text = o.text; + if (!o.fontColor && !o.color) { + color.title = T.ColorLuma(o.text, -0.25); + color.titleoff = T.ColorLuma(o.text, -0.5); + } + color.textOver = T.ColorLuma(o.text, 0.25); + color.textSelect = T.ColorLuma(o.text, 0.5); + } + if (o.button) { + color.button = o.button; + color.border = T.ColorLuma(o.button, 0.1); + color.overoff = T.ColorLuma(o.button, 0.2); + } + if (o.select) { + color.select = o.select; + color.over = T.ColorLuma(o.select, -0.1); + } + if (o.itemBg) o.back = o.itemBg; + if (o.back) { + color.back = o.back; + color.backoff = T.ColorLuma(o.back, -0.1); + } + if (o.fontSelect) color.textSelect = o.fontSelect; + if (o.groupBorder) color.gborder = o.groupBorder; + + //if( o.transparent ) o.bg = 'none' + //if( o.bg ) color.background = color.backgroundOver = o.bg + if (o.bgOver) color.backgroundOver = o.bgOver; + for (let m in color) { + if (o[m] !== undefined) color[m] = o[m]; + } + for (let m in o) { + if (textChange.indexOf(m) !== -1) changeText = true; + } + if (changeText) T.defineText(color); + return color; + }, + colors: { + sx: 4, + //4 + sy: 2, + //2 + radius: 2, + showOver: 1, + //groupOver : 1, + + content: 'none', + background: 'rgba(50,50,50,0.15)', + backgroundOver: 'rgba(50,50,50,0.3)', + title: '#CCC', + titleoff: '#BBB', + text: '#DDD', + textOver: '#EEE', + textSelect: '#FFF', + back: 'rgba(0,0,0,0.2)', + backoff: 'rgba(0,0,0,0.3)', + // input and button border + border: '#4c4c4c', + borderSize: 1, + gborder: 'none', + groups: 'none', + button: '#3c3c3c', + overoff: '#5c5c5c', + over: '#024699', + select: '#308AFF', + action: '#FF3300', + //fontFamily: 'Tahoma', + fontFamily: 'Consolas, monospace', + //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", + fontWeight: 'normal', + fontShadow: 'none', + //'#000', + fontSize: 12, + joyOver: 'rgba(48,138,255,0.25)', + joyOut: 'rgba(100,100,100,0.5)', + joySelect: '#308AFF', + hide: 'rgba(0,0,0,0)' + }, + // style css + + css: { + basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', + button: 'display:flex; align-items:center; justify-content:center; text-align:center;', + middle: 'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' + }, + // svg path + + svgs: { + g1: 'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', + g2: 'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', + group: 'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', + arrow: 'M 3 8 L 8 5 3 2 3 8 Z', + arrowDown: 'M 5 8 L 8 3 2 3 5 8 Z', + arrowUp: 'M 5 2 L 2 7 8 7 5 2 Z', + solid: 'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', + body: 'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', + vehicle: 'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', + articulation: 'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', + character: 'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', + terrain: 'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', + joint: 'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', + ray: 'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', + collision: 'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', + map: 'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + material: 'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + texture: 'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', + object: 'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', + none: 'M 9 5 L 5 5 5 9 9 9 9 5 Z', + cursor: 'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', + load: 'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', + save: 'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', + extern: 'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z' + }, + rezone() { + Roots.needReZone = true; + }, + getImput: function () { + return Roots.input ? true : false; + }, + setStyle: function (data) { + for (var o in data) { + if (T.colors[o]) T.colors[o] = data[o]; + } + T.setText(); + }, + // ---------------------- + // custom text + // ---------------------- + + defineText: function (o) { + T.setText(o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight); + }, + setText: function (size, color, font, shadow, weight) { + let cc = T.colors; + if (font === undefined) font = cc.fontFamily; + if (size === undefined) size = cc.fontSize; + if (shadow === undefined) shadow = cc.fontShadow; + if (weight === undefined) weight = cc.fontWeight; + if (color === undefined) color = cc.text; + if (isNaN(size)) { + if (size.search('em') === -1) size += 'px'; + } else size += 'px'; + + //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' + + T.css.txt = T.css.basic + T.css.middle + ' font-family:' + font + '; font-weight:' + weight + '; font-size:' + size + '; color:' + cc.text + '; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; + if (shadow !== 'none') T.css.txt += ' text-shadow: 1px 1px 1px ' + shadow + ';'; + T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; + T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; + }, + // note + + //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container + + /*cloneColor: function () { + let cc = Object.assign({}, T.colors ); + return cc; + },*/ + + // intern function + + cloneCss: function () { + //let cc = Object.assign({}, T.css ); + return { + ...T.css + }; + }, + clone: function (o) { + return o.cloneNode(true); + }, + setSvg: function (dom, type, value, id, id2) { + if (id === -1) dom.setAttributeNS(null, type, value);else if (id2 !== undefined) dom.childNodes[id || 0].childNodes[id2 || 0].setAttributeNS(null, type, value);else dom.childNodes[id || 0].setAttributeNS(null, type, value); + }, + setCss: function (dom, css) { + for (let r in css) { + if (T.DOM_SIZE.indexOf(r) !== -1) dom.style[r] = css[r] + 'px';else dom.style[r] = css[r]; + } + }, + set: function (g, o) { + for (let att in o) { + if (att === 'txt') g.textContent = o[att]; + if (att === 'link') g.setAttributeNS(T.links, 'xlink:href', o[att]);else g.setAttributeNS(null, att, o[att]); + } + }, + get: function (dom, id) { + if (id === undefined) return dom; // root + else if (!isNaN(id)) return dom.childNodes[id]; // first child + else if (id instanceof Array) { + if (id.length === 2) return dom.childNodes[id[0]].childNodes[id[1]]; + if (id.length === 3) return dom.childNodes[id[0]].childNodes[id[1]].childNodes[id[2]]; + } + }, + dom: function (type, css, obj, dom, id) { + type = type || 'div'; + if (T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1) { + // is svg element + + if (type === 'svg') { + dom = document.createElementNS(T.svgns, 'svg'); + T.set(dom, obj); + + /* } else if ( type === 'use' ) { + dom = document.createElementNS( T.svgns, 'use' ); + T.set( dom, obj ); + */ + } else { + // create new svg if not def + if (dom === undefined) dom = document.createElementNS(T.svgns, 'svg'); + T.addAttributes(dom, type, obj, id); + } + } else { + // is html element + + if (dom === undefined) dom = document.createElementNS(T.htmls, type);else dom = dom.appendChild(document.createElementNS(T.htmls, type)); + } + if (css) dom.style.cssText = css; + if (id === undefined) return dom;else return dom.childNodes[id || 0]; + }, + addAttributes: function (dom, type, o, id) { + let g = document.createElementNS(T.svgns, type); + T.set(g, o); + T.get(dom, id).appendChild(g); + if (T.SVG_TYPE_G.indexOf(type) !== -1) g.style.pointerEvents = 'none'; + return g; + }, + clear: function (dom) { + T.purge(dom); + while (dom.firstChild) { + if (dom.firstChild.firstChild) T.clear(dom.firstChild); + dom.removeChild(dom.firstChild); + } + }, + purge: function (dom) { + let a = dom.attributes, + i, + n; + if (a) { + i = a.length; + while (i--) { + n = a[i].name; + if (typeof dom[n] === 'function') dom[n] = null; + } + } + a = dom.childNodes; + if (a) { + i = a.length; + while (i--) { + T.purge(dom.childNodes[i]); + } + } + }, + // ---------------------- + // SVG Effects function + // ---------------------- + + addSVGGlowEffect: function () { + if (document.getElementById('UILGlow') !== null) return; + let svgFilter = T.initUILEffects(); + let filter = T.addAttributes(svgFilter, 'filter', { + id: 'UILGlow', + x: '-20%', + y: '-20%', + width: '140%', + height: '140%' + }); + T.addAttributes(filter, 'feGaussianBlur', { + in: 'SourceGraphic', + stdDeviation: '3', + result: 'uilBlur' + }); + let feMerge = T.addAttributes(filter, 'feMerge', {}); + for (let i = 0; i <= 3; i++) { + T.addAttributes(feMerge, 'feMergeNode', { + in: 'uilBlur' + }); + } + T.addAttributes(feMerge, 'feMergeNode', { + in: 'SourceGraphic' + }); + }, + initUILEffects: function () { + let svgFilter = document.getElementById('UILSVGEffects'); + if (svgFilter === null) { + svgFilter = T.dom('svg', undefined, { + id: 'UILSVGEffects', + width: '0', + height: '0' + }); + document.body.appendChild(svgFilter); + } + return svgFilter; + }, + // ---------------------- + // Color function + // ---------------------- + + ColorLuma: function (hex, l) { + //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; + + if (hex === 'n') hex = '#000'; + + // validate hex string + hex = String(hex).replace(/[^0-9a-f]/gi, ''); + if (hex.length < 6) { + hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; + } + l = l || 0; + + // convert to decimal and change luminosity + let rgb = "#", + c, + i; + for (i = 0; i < 3; i++) { + c = parseInt(hex.substr(i * 2, 2), 16); + c = Math.round(Math.min(Math.max(0, c + c * l), 255)).toString(16); + rgb += ("00" + c).substr(c.length); + } + return rgb; + }, + findDeepInver: function (c) { + return c[0] * 0.3 + c[1] * .59 + c[2] * .11 <= 0.6; + }, + lerpColor: function (c1, c2, factor) { + let newColor = {}; + for (let i = 0; i < 3; i++) { + newColor[i] = c1[i] + (c2[i] - c1[i]) * factor; + } + return newColor; + }, + hexToHtml: function (v) { + v = v === undefined ? 0x000000 : v; + return "#" + ("000000" + v.toString(16)).substr(-6); + }, + htmlToHex: function (v) { + return v.toUpperCase().replace("#", "0x"); + }, + u255: function (c, i) { + return parseInt(c.substring(i, i + 2), 16) / 255; + }, + u16: function (c, i) { + return parseInt(c.substring(i, i + 1), 16) / 15; + }, + unpack: function (c) { + if (c.length == 7) return [T.u255(c, 1), T.u255(c, 3), T.u255(c, 5)];else if (c.length == 4) return [T.u16(c, 1), T.u16(c, 2), T.u16(c, 3)]; + }, + p255: function (c) { + let h = Math.round(c * 255).toString(16); + if (h.length < 2) h = '0' + h; + return h; + }, + pack: function (c) { + return '#' + T.p255(c[0]) + T.p255(c[1]) + T.p255(c[2]); + }, + htmlRgb: function (c) { + return 'rgb(' + Math.round(c[0] * 255) + ',' + Math.round(c[1] * 255) + ',' + Math.round(c[2] * 255) + ')'; + }, + pad: function (n) { + if (n.length == 1) n = '0' + n; + return n; + }, + rgbToHex: function (c) { + let r = Math.round(c[0] * 255).toString(16); + let g = Math.round(c[1] * 255).toString(16); + let b = Math.round(c[2] * 255).toString(16); + return '#' + T.pad(r) + T.pad(g) + T.pad(b); + + // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); + }, + hueToRgb: function (p, q, t) { + if (t < 0) t += 1; + if (t > 1) t -= 1; + if (t < 1 / 6) return p + (q - p) * 6 * t; + if (t < 1 / 2) return q; + if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t); + return p; + }, + rgbToHsl: function (c) { + let r = c[0], + g = c[1], + b = c[2], + min = Math.min(r, g, b), + max = Math.max(r, g, b), + delta = max - min, + h = 0, + s = 0, + l = (min + max) / 2; + if (l > 0 && l < 1) s = delta / (l < 0.5 ? 2 * l : 2 - 2 * l); + if (delta > 0) { + if (max == r && max != g) h += (g - b) / delta; + if (max == g && max != b) h += 2 + (b - r) / delta; + if (max == b && max != r) h += 4 + (r - g) / delta; + h /= 6; + } + return [h, s, l]; + }, + hslToRgb: function (c) { + let p, + q, + h = c[0], + s = c[1], + l = c[2]; + if (s === 0) return [l, l, l];else { + q = l <= 0.5 ? l * (s + 1) : l + s - l * s; + p = l * 2 - q; + return [T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333)]; + } + }, + // ---------------------- + // SVG MODEL + // ---------------------- + + makeGradiant: function (type, settings, parent, colors) { + T.dom(type, null, settings, parent, 0); + let n = parent.childNodes[0].childNodes.length - 1, + c; + for (let i = 0; i < colors.length; i++) { + c = colors[i]; + //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); + T.dom('stop', null, { + offset: c[0] + '%', + 'stop-color': c[1], + 'stop-opacity': c[2] + }, parent, [0, n]); + } + }, + /*makeGraph: function () { + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 + //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 + //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + + //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 + //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.graph = svg; + },*/ + + makePad: function (model) { + let ww = 256; + let svg = T.dom('svg', T.css.basic + 'position:relative;', { + viewBox: '0 0 ' + ww + ' ' + ww, + width: ww, + height: ww, + preserveAspectRatio: 'none' + }); + let w = 200; + let d = (ww - w) * 0.5, + m = 20; + Tools.dom('rect', '', { + x: d, + y: d, + width: w, + height: w, + fill: T.colors.back + }, svg); // 0 + Tools.dom('rect', '', { + x: d + m * 0.5, + y: d + m * 0.5, + width: w - m, + height: w - m, + fill: T.colors.button + }, svg); // 1 + // Pointer + Tools.dom('line', '', { + x1: d + m * 0.5, + y1: ww * 0.5, + x2: d + (w - m * 0.5), + y2: ww * 0.5, + stroke: T.colors.back, + 'stroke-width': 2 + }, svg); // 2 + Tools.dom('line', '', { + x1: ww * 0.5, + x2: ww * 0.5, + y1: d + m * 0.5, + y2: d + (w - m * 0.5), + stroke: T.colors.back, + 'stroke-width': 2 + }, svg); // 3 + Tools.dom('circle', '', { + cx: ww * 0.5, + cy: ww * 0.5, + r: 5, + stroke: T.colors.text, + 'stroke-width': 5, + fill: 'none' + }, svg); // 4 + T.pad2d = svg; + }, + makeKnob: function (model) { + let w = 128; + let radius = 34; + let svg = T.dom('svg', T.css.basic + 'position:relative;', { + viewBox: '0 0 ' + w + ' ' + w, + width: w, + height: w, + preserveAspectRatio: 'none' + }); + T.dom('circle', '', { + cx: 64, + cy: 64, + r: radius, + fill: T.colors.button, + stroke: 'rgba(0,0,0,0.3)', + 'stroke-width': 8 + }, svg); //0 + T.dom('path', '', { + d: '', + stroke: T.colors.text, + 'stroke-width': 4, + fill: 'none', + 'stroke-linecap': 'round' + }, svg); //1 + T.dom('circle', '', { + cx: 64, + cy: 64, + r: radius + 7, + stroke: 'rgba(0,0,0,0.1)', + 'stroke-width': 7, + fill: 'none' + }, svg); //2 + T.dom('path', '', { + d: '', + stroke: 'rgba(255,255,255,0.3)', + 'stroke-width': 2, + fill: 'none', + 'stroke-linecap': 'round', + 'stroke-opacity': 0.5 + }, svg); //3 + T.knob = svg; + }, + makeCircular: function (model) { + let w = 128; + let radius = 40; + let svg = T.dom('svg', T.css.basic + 'position:relative;', { + viewBox: '0 0 ' + w + ' ' + w, + width: w, + height: w, + preserveAspectRatio: 'none' + }); + T.dom('circle', '', { + cx: 64, + cy: 64, + r: radius, + stroke: 'rgba(0,0,0,0.1)', + 'stroke-width': 10, + fill: 'none' + }, svg); //0 + T.dom('path', '', { + d: '', + stroke: T.colors.text, + 'stroke-width': 7, + fill: 'none', + 'stroke-linecap': 'butt' + }, svg); //1 + T.circular = svg; + }, + makeJoystick: function (model) { + //+' background:#f00;' + + let w = 128, + ccc; + let radius = Math.floor((w - 30) * 0.5); + let innerRadius = Math.floor(radius * 0.6); + let svg = T.dom('svg', T.css.basic + 'position:relative;', { + viewBox: '0 0 ' + w + ' ' + w, + width: w, + height: w, + preserveAspectRatio: 'none' + }); + T.dom('defs', null, {}, svg); + T.dom('g', null, {}, svg); + if (model === 0) { + // gradian background + ccc = [[40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0]]; + T.makeGradiant('radialGradient', { + id: 'grad', + cx: '50%', + cy: '50%', + r: '50%', + fx: '50%', + fy: '50%' + }, svg, ccc); + + // gradian shadow + ccc = [[60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0]]; + T.makeGradiant('radialGradient', { + id: 'gradS', + cx: '50%', + cy: '50%', + r: '50%', + fx: '50%', + fy: '50%' + }, svg, ccc); + + // gradian stick + let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; + let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; + ccc = [[30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1]]; + T.makeGradiant('radialGradient', { + id: 'gradIn', + cx: '50%', + cy: '50%', + r: '50%', + fx: '50%', + fy: '50%' + }, svg, ccc); + ccc = [[30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1]]; + T.makeGradiant('radialGradient', { + id: 'gradIn2', + cx: '50%', + cy: '50%', + r: '50%', + fx: '50%', + fy: '50%' + }, svg, ccc); + + // graph + + T.dom('circle', '', { + cx: 64, + cy: 64, + r: radius, + fill: 'url(#grad)' + }, svg); //2 + T.dom('circle', '', { + cx: 64 + 5, + cy: 64 + 10, + r: innerRadius + 10, + fill: 'url(#gradS)' + }, svg); //3 + T.dom('circle', '', { + cx: 64, + cy: 64, + r: innerRadius, + fill: 'url(#gradIn)' + }, svg); //4 + + T.joystick_0 = svg; + } else { + // gradian shadow + ccc = [[69, 'rgb(0,0,0)', 0], [70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0]]; + T.makeGradiant('radialGradient', { + id: 'gradX', + cx: '50%', + cy: '50%', + r: '50%', + fx: '50%', + fy: '50%' + }, svg, ccc); + T.dom('circle', '', { + cx: 64, + cy: 64, + r: radius, + fill: 'none', + stroke: 'rgba(100,100,100,0.25)', + 'stroke-width': '4' + }, svg); //2 + T.dom('circle', '', { + cx: 64, + cy: 64, + r: innerRadius + 14, + fill: 'url(#gradX)' + }, svg); //3 + T.dom('circle', '', { + cx: 64, + cy: 64, + r: innerRadius, + fill: 'none', + stroke: 'rgb(100,100,100)', + 'stroke-width': '4' + }, svg); //4 + + T.joystick_1 = svg; + } + }, + makeColorRing: function () { + let w = 256; + let svg = T.dom('svg', T.css.basic + 'position:relative;', { + viewBox: '0 0 ' + w + ' ' + w, + width: w, + height: w, + preserveAspectRatio: 'none' + }); + T.dom('defs', null, {}, svg); + T.dom('g', null, {}, svg); + let s = 30; //stroke + let r = (w - s) * 0.5; + let mid = w * 0.5; + let n = 24, + nudge = 8 / r / n * Math.PI, + a1 = 0; + let am, tan, d2, a2, ar, i, j, path, ccc; + let color = []; + for (i = 0; i <= n; ++i) { + d2 = i / n; + a2 = d2 * T.TwoPI; + am = (a1 + a2) * 0.5; + tan = 1 / Math.cos((a2 - a1) * 0.5); + ar = [Math.sin(a1), -Math.cos(a1), Math.sin(am) * tan, -Math.cos(am) * tan, Math.sin(a2), -Math.cos(a2)]; + color[1] = T.rgbToHex(T.hslToRgb([d2, 1, 0.5])); + if (i > 0) { + j = 6; + while (j--) { + ar[j] = (ar[j] * r + mid).toFixed(2); + } + path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; + ccc = [[0, color[0], 1], [100, color[1], 1]]; + T.makeGradiant('linearGradient', { + id: 'G' + i, + x1: ar[0], + y1: ar[1], + x2: ar[4], + y2: ar[5], + gradientUnits: "userSpaceOnUse" + }, svg, ccc); + T.dom('path', '', { + d: path, + 'stroke-width': s, + stroke: 'url(#G' + i + ')', + 'stroke-linecap': "butt" + }, svg, 1); + } + a1 = a2 - nudge; + color[0] = color[1]; + } + let tw = 84.90; + + // black / white + ccc = [[0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1]]; + T.makeGradiant('linearGradient', { + id: 'GL0', + x1: 0, + y1: mid - tw, + x2: 0, + y2: mid + tw, + gradientUnits: "userSpaceOnUse" + }, svg, ccc); + ccc = [[0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0]]; + T.makeGradiant('linearGradient', { + id: 'GL1', + x1: mid - 49.05, + y1: 0, + x2: mid + 98, + y2: 0, + gradientUnits: "userSpaceOnUse" + }, svg, ccc); + T.dom('g', null, { + 'transform-origin': '128px 128px', + 'transform': 'rotate(0)' + }, svg); //2 + T.dom('polygon', '', { + points: '78.95 43.1 78.95 212.85 226 128', + fill: 'red' + }, svg, 2); // 2,0 + T.dom('polygon', '', { + points: '78.95 43.1 78.95 212.85 226 128', + fill: 'url(#GL1)', + 'stroke-width': 1, + stroke: 'url(#GL1)' + }, svg, 2); //2,1 + T.dom('polygon', '', { + points: '78.95 43.1 78.95 212.85 226 128', + fill: 'url(#GL0)', + 'stroke-width': 1, + stroke: 'url(#GL0)' + }, svg, 2); //2,2 + T.dom('path', '', { + d: 'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', + fill: 'none', + 'stroke-width': 2, + stroke: '#000' + }, svg, 2); //2,3 + //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 + + T.dom('circle', '', { + cx: 128, + cy: 128, + r: 6, + 'stroke-width': 2, + stroke: '#000', + fill: 'none' + }, svg); //3 + + T.colorRing = svg; + }, + icon: function (type, color, w) { + w = w || 40; + //color = color || '#DEDEDE'; + let viewBox = '0 0 256 256'; + //let viewBox = '0 0 '+ w +' '+ w; + let t = [""]; + switch (type) { + case 'logo': + t[1] = ""; + break; + case 'donate': + t[1] = ""; + break; + case 'neo': + t[1] = ""; + break; + case 'phy': + t[1] = ""; + break; + case 'config': + t[1] = ""; + break; + case 'github': + t[1] = ""; + break; + case 'save': + t[1] = ""; + break; + } + t[2] = ""; + return t.join("\n"); + }, + logoFill_d: ` + M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 + L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 + M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 + Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z + `, + logo_github: ` + M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 + 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 + 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 + 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 + 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z + `, + logo_neo: ` + M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 + 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 + 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 + 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L + 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z + `, + logo_phy: ` + M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 + Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 + `, + logo_config: ` + M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 + L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 + Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 + `, + logo_donate: ` + M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 + 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 + 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 + 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 + 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 + Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 + 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 + 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 + 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M + 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 + 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 + 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 + 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 + 200.9 187.5 200.9 187.5 195.35 Z + ` + }; + T.setText(); + const Tools = T; + + ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile + + class Files { + //----------------------------- + // FILE TYPE + //----------------------------- + + static autoTypes(type) { + let t = []; + switch (type) { + case 'svg': + t = [{ + accept: { + 'image/svg+xml': '.svg' + } + }]; + break; + case 'wav': + t = [{ + accept: { + 'audio/wav': '.wav' + } + }]; + break; + case 'mp3': + t = [{ + accept: { + 'audio/mpeg': '.mp3' + } + }]; + break; + case 'mp4': + t = [{ + accept: { + 'video/mp4': '.mp4' + } + }]; + break; + case 'bin': + case 'hex': + t = [{ + description: 'Binary Files', + accept: { + 'application/octet-stream': ['.bin', '.hex'] + } + }]; + break; + case 'text': + t = [{ + description: 'Text Files', + accept: { + 'text/plain': ['.txt', '.text'], + 'text/html': ['.html', '.htm'] + } + }]; + break; + case 'json': + t = [{ + description: 'JSON Files', + accept: { + 'application/json': ['.json'] + } + }]; //text/plain + break; + case 'js': + t = [{ + description: 'JavaScript Files', + accept: { + 'text/javascript': ['.js'] + } + }]; + break; + case 'image': + t = [{ + description: 'Images', + accept: { + 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] + } + }]; + break; + case 'icon': + t = [{ + description: 'Icons', + accept: { + 'image/x-ico': ['.ico'] + } + }]; + break; + case 'lut': + t = [{ + description: 'Lut', + accept: { + 'text/plain': ['.cube', '.3dl'] + } + }]; + break; + } + return t; + } + + //----------------------------- + // LOAD + //----------------------------- + + static async load(o = {}) { + if (typeof window.showOpenFilePicker !== 'function') { + window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; + } + try { + let type = o.type || ''; + const options = { + excludeAcceptAllOption: type ? true : false, + multiple: false + //startIn:'./assets' + }; + options.types = Files.autoTypes(type); + + // create a new handle + const handle = await window.showOpenFilePicker(options); + const file = await handle[0].getFile(); + //let content = await file.text() + + if (!file) return null; + let fname = file.name; + let ftype = fname.substring(fname.lastIndexOf('.') + 1, fname.length); + const dataUrl = ['png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3']; + const dataBuf = ['sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf']; + const reader = new FileReader(); + if (dataUrl.indexOf(ftype) !== -1) reader.readAsDataURL(file);else if (dataBuf.indexOf(ftype) !== -1) reader.readAsArrayBuffer(file);else reader.readAsText(file); + reader.onload = function (e) { + let content = e.target.result; + switch (type) { + case 'image': + let img = new Image(); + img.onload = function () { + if (o.callback) o.callback(img, fname, ftype); + }; + img.src = content; + break; + case 'json': + if (o.callback) o.callback(JSON.parse(content), fname, ftype); + break; + default: + if (o.callback) o.callback(content, fname, ftype); + break; + } + }; + } catch (e) { + console.log(e); + if (o.always && o.callback) o.callback(null); + } + } + static showOpenFilePickerPolyfill(options) { + return new Promise(resolve => { + const input = document.createElement("input"); + input.type = "file"; + input.multiple = options.multiple; + input.accept = options.types.map(type => type.accept).flatMap(inst => Object.keys(inst).flatMap(key => inst[key])).join(","); + input.addEventListener("change", () => { + resolve([...input.files].map(file => { + return { + getFile: async () => new Promise(resolve => { + resolve(file); + }) + }; + })); + }); + input.click(); + }); + } + + //----------------------------- + // SAVE + //----------------------------- + + static async save(o = {}) { + let usePoly = false; + if (typeof window.showSaveFilePicker !== 'function') { + window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; + usePoly = true; + } + try { + let type = o.type || ''; + const options = { + suggestedName: o.name || 'hello', + data: o.data || '' + }; + options.types = Files.autoTypes(type); + options.finalType = Object.keys(options.types[0].accept)[0]; + options.suggestedName += options.types[0].accept[options.finalType][0]; + + // create a new handle + const handle = await window.showSaveFilePicker(options); + if (usePoly) return; + + // create a FileSystemWritableFileStream to write to + const file = await handle.createWritable(); + let blob = new Blob([options.data], { + type: options.finalType + }); + + // write our file + await file.write(blob); + + // close the file and write the contents to disk. + await file.close(); + } catch (e) { + console.log(e); + } + } + static showSaveFilePickerPolyfill(options) { + return new Promise(resolve => { + const a = document.createElement("a"); + a.download = options.suggestedName || "my-file.txt"; + let blob = new Blob([options.data], { + type: options.finalType + }); + a.href = URL.createObjectURL(blob); + a.addEventListener("click", () => { + resolve(setTimeout(() => URL.revokeObjectURL(a.href), 1000)); + }); + a.click(); + }); + } + + //----------------------------- + // FOLDER not possible in poly + //----------------------------- + + static async getFolder() { + try { + const handle = await window.showDirectoryPicker(); + const files = []; + for await (const entry of handle.values()) { + const file = await entry.getFile(); + files.push(file); + } + console.log(files); + return files; + } catch (e) { + console.log(e); + } + } + } + + class V2 { + constructor(x = 0, y = 0) { + this.x = x; + this.y = y; + } + set(x, y) { + this.x = x; + this.y = y; + return this; + } + divide(v) { + this.x /= v.x; + this.y /= v.y; + return this; + } + multiply(v) { + this.x *= v.x; + this.y *= v.y; + return this; + } + multiplyScalar(scalar) { + this.x *= scalar; + this.y *= scalar; + return this; + } + divideScalar(scalar) { + return this.multiplyScalar(1 / scalar); + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y); + } + angle() { + // computes the angle in radians with respect to the positive x-axis + + var angle = Math.atan2(this.y, this.x); + if (angle < 0) angle += 2 * Math.PI; + return angle; + } + addScalar(s) { + this.x += s; + this.y += s; + return this; + } + negate() { + this.x *= -1; + this.y *= -1; + return this; + } + neg() { + this.x = -1; + this.y = -1; + return this; + } + isZero() { + return this.x === 0 && this.y === 0; + } + copy(v) { + this.x = v.x; + this.y = v.y; + return this; + } + equals(v) { + return v.x === this.x && v.y === this.y; + } + nearEquals(v, n) { + return v.x.toFixed(n) === this.x.toFixed(n) && v.y.toFixed(n) === this.y.toFixed(n); + } + lerp(v, alpha) { + if (v === null) { + this.x -= this.x * alpha; + this.y -= this.y * alpha; + } else { + this.x += (v.x - this.x) * alpha; + this.y += (v.y - this.y) * alpha; + } + return this; + } + } + + /** + * @author lth / https://github.com/lo-th + */ + + class Proto { + constructor(o = {}) { + // disable mouse controle + this.lock = o.lock || false; + + // for button + this.neverlock = false; + + // only simple space + this.isSpace = o.isSpace || false; + + // if is on gui or group + this.main = o.main || null; + this.isUI = o.isUI || false; + this.group = o.group || null; + this.isListen = false; + this.top = 0; + this.ytop = 0; + this.dx = o.dx || 0; + this.isSelectable = o.selectable !== undefined ? o.selectable : false; + this.unselectable = o.unselect !== undefined ? o.unselect : this.isSelectable; + this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' + + this.css = this.main ? this.main.css : Tools.css; + this.colors = Tools.defineColor(o, this.main ? this.group ? this.group.colors : this.main.colors : Tools.colors); + this.overEffect = this.colors.showOver; + this.svgs = Tools.svgs; + this.zone = { + x: 0, + y: 0, + w: 0, + h: 0, + d: 0 + }; + this.local = new V2().neg(); + this.isCanvasOnly = false; + this.isSelect = false; + + // percent of title + this.p = o.p !== undefined ? o.p : Tools.size.p; + this.w = this.isUI ? this.main.size.w : Tools.size.w; + if (o.w !== undefined) this.w = o.w; + this.h = this.isUI ? this.main.size.h : Tools.size.h; + if (o.h !== undefined) this.h = o.h; + if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h;else this.lock = true; + + // decale for canvas only + this.fw = o.fw || 0; + this.autoWidth = o.auto || true; // auto width or flex + this.isOpen = false; //false// open statu + + // radius for toolbox + this.radius = o.radius || this.colors.radius; + this.transition = o.transition || Tools.transition; + + // only for number + this.isNumber = false; + this.noNeg = o.noNeg || false; + this.allEqual = o.allEqual || false; + + // only most simple + this.mono = false; + + // stop listening for edit slide text + this.isEdit = false; + + // no title + this.simple = o.simple || false; + if (this.simple) this.sa = 0; + + // define obj size + this.setSize(this.w); + + // title size + if (o.sa !== undefined) this.sa = o.sa; + if (o.sb !== undefined) this.sb = o.sb; + if (this.simple) this.sb = this.w - this.sa; + + // last number size for slide + this.sc = o.sc === undefined ? 47 : o.sc; + + // for listening object + this.objectLink = null; + this.isSend = false; + this.objectKey = null; + this.txt = o.name || ""; + this.name = o.rename || this.txt; + this.target = o.target || null; + + // callback + this.callback = o.callback === undefined ? null : o.callback; + this.endCallback = null; + this.openCallback = o.openCallback === undefined ? null : o.openCallback; + this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; + + // if no callback take one from group or gui + if (this.callback === null && this.isUI && this.main.callback !== null) { + this.callback = this.group ? this.group.callback : this.main.callback; + } + + // elements + this.c = []; + + // style + this.s = []; + this.useFlex = this.isUI ? this.main.useFlex : false; + let flexible = this.useFlex ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" : "float:left;"; + this.c[0] = Tools.dom("div", this.css.basic + flexible + "position:relative; height:20px;"); + this.s[0] = this.c[0].style; + + // bottom margin + this.margin = this.colors.sy; + this.mtop = 0; + let marginDiv = Tools.isDivid(this.margin); + if (this.isUI && this.margin) { + this.s[0].boxSizing = "content-box"; + if (marginDiv) { + this.mtop = this.margin * 0.5; + //this.s[0].borderTop = '${this.mtop}px solid transparent' + //console.log(`${this.mtop}px solid transparent`) + this.s[0].borderTop = this.mtop + "px solid transparent"; + this.s[0].borderBottom = this.mtop + "px solid transparent"; + } else { + this.s[0].borderBottom = this.margin + "px solid transparent"; + } + } + + // with title + if (!this.simple) { + this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); + this.s[1] = this.c[1].style; + this.c[1].textContent = this.name; + this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; + } + if (o.pos) { + this.s[0].position = "absolute"; + for (let p in o.pos) { + this.s[0][p] = o.pos[p]; + } + this.mono = true; + } + if (o.css) this.s[0].cssText = o.css; + } + + // ---------------------- + // make the node + // ---------------------- + + init() { + this.ytop = this.top + this.mtop; + this.zone.h = this.h + this.margin; + this.zone.w = this.w; + let s = this.s; // style cache + let c = this.c; // div cach + + s[0].height = this.h + "px"; + if (this.isUI) s[0].background = this.colors.background; + if (!this.autoWidth && this.useFlex) { + s[0].flex = "1 0 auto"; + s[0].minWidth = this.minw + "px"; + s[0].textAlign = "center"; + } else { + if (this.isUI) s[0].width = "100%"; + } + + //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; + if (c[1] !== undefined && this.autoWidth) { + s[1] = c[1].style; + s[1].top = 1 + "px"; + s[1].height = this.h - 2 + "px"; + } + let frag = Tools.frag; + for (let i = 1, lng = c.length; i !== lng; i++) { + if (c[i] !== undefined) { + frag.appendChild(c[i]); + s[i] = c[i].style; + } + } + let pp = this.target !== null ? this.target : this.isUI ? this.main.inner : document.body; + if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]);else pp.appendChild(c[0]); + c[0].appendChild(frag); + this.rSize(); + + // ! solo proto + if (!this.isUI) { + this.c[0].style.pointerEvents = "auto"; + Roots.add(this); + } + } + addTransition() { + if (this.baseH && this.transition && this.isUI) { + this.c[0].style.transition = "height " + this.transition + "s ease-out"; + } + } + + // from Tools + + dom(type, css, obj, dom, id) { + return Tools.dom(type, css, obj, dom, id); + } + setSvg(dom, type, value, id, id2) { + Tools.setSvg(dom, type, value, id, id2); + } + setCss(dom, css) { + Tools.setCss(dom, css); + } + clamp(value, min, max) { + return Tools.clamp(value, min, max); + } + getColorRing() { + if (!Tools.colorRing) Tools.makeColorRing(); + return Tools.clone(Tools.colorRing); + } + getJoystick(model) { + if (!Tools["joystick_" + model]) Tools.makeJoystick(model); + return Tools.clone(Tools["joystick_" + model]); + } + getCircular(model) { + if (!Tools.circular) Tools.makeCircular(model); + return Tools.clone(Tools.circular); + } + getKnob(model) { + if (!Tools.knob) Tools.makeKnob(model); + return Tools.clone(Tools.knob); + } + getPad2d(model) { + if (!Tools.pad2d) Tools.makePad(model); + return Tools.clone(Tools.pad2d); + } + + // from Roots + + cursor(name) { + Roots.cursor(name); + } + + ///////// + + update() {} + reset() {} + + ///////// + + content() { + return this.c[0]; + } + getDom() { + return this.c[0]; + } + uiout() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.background; + } + uiover() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.backgroundOver; + } + rename(s) { + if (this.c[1] !== undefined) this.c[1].textContent = s; + } + listen() { + this.isListen = Roots.addListen(this); + return this; + } + listening() { + // modified by Fedemarino + if (this.objectLink === null) return; + if (this.isSend) return; + if (this.isEdit) return; + // check if value has changed + let hasChanged = this.setValue(this.objectLink[this.objectKey]); + return hasChanged; + } + setValue(v) { + const old = this.value; + if (this.isNumber) this.value = this.numValue(v); + //else if( v instanceof Array && v.length === 1 ) v = v[0]; + else this.value = v; + this.update(); + let hasChanged = false; + if (old !== this.value) { + hasChanged = true; + } + return hasChanged; + } + + // ---------------------- + // update every change + // ---------------------- + + onChange(f) { + if (this.isSpace) return; + this.callback = f || null; + return this; + } + + // ---------------------- + // update only on end + // ---------------------- + + onFinishChange(f) { + if (this.isSpace) return; + this.callback = null; + this.endCallback = f; + return this; + } + + // ---------------------- + // event on open close + // ---------------------- + + onOpen(f) { + this.openCallback = f; + return this; + } + onClose(f) { + this.closeCallback = f; + return this; + } + + // ---------------------- + // send back value + // ---------------------- + + send(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + this.isSend = true; + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + if (this.callback) this.callback(v, this.objectKey); + this.isSend = false; + } + sendEnd(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + if (this.endCallback) this.endCallback(v); + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + } + + // ---------------------- + // clear node + // ---------------------- + + dispose() { + if (this.isListen) Roots.removeListen(this); + Tools.clear(this.c[0]); + if (this.target !== null) { + if (this.group !== null) this.group.clearOne(this);else this.target.removeChild(this.c[0]); + } else { + if (this.isUI) this.main.clearOne(this);else document.body.removeChild(this.c[0]); + } + if (!this.isUI) Roots.remove(this); + this.c = null; + this.s = null; + this.callback = null; + this.target = null; + this.isListen = false; + } + clear() {} + + // ---------------------- + // change size + // ---------------------- + + getWidth() { + let nw = Roots.getWidth(this); + if (nw) this.w = nw; + } + setSize(sx) { + if (!this.autoWidth) return; + this.w = sx; + if (this.simple) { + this.sb = this.w - this.sa; + } else { + let pp = this.w * (this.p / 100); + //this.sa = Math.floor( pp + 10 ) + //this.sb = Math.floor( this.w - pp - 20 ) + this.sa = Math.floor(pp + 8); + this.sb = Math.floor(this.w - pp - 16); + } + } + rSize() { + if (!this.autoWidth) return; + if (!this.isUI) this.s[0].width = this.w + "px"; + if (!this.simple) this.s[1].width = this.sa + "px"; + } + + // ---------------------- + // for numeric value + // ---------------------- + + setTypeNumber(o) { + this.isNumber = true; + this.value = 0; + if (o.value !== undefined) { + if (typeof o.value === "string") this.value = o.value * 1;else this.value = o.value; + } + this.min = o.min === undefined ? -Infinity : o.min; + this.max = o.max === undefined ? Infinity : o.max; + this.precision = o.precision === undefined ? 2 : o.precision; + let s; + switch (this.precision) { + case 0: + s = 1; + break; + case 1: + s = 0.1; + break; + case 2: + s = 0.01; + break; + case 3: + s = 0.001; + break; + case 4: + s = 0.0001; + break; + case 5: + s = 0.00001; + break; + case 6: + s = 0.000001; + break; + } + this.step = o.step === undefined ? s : o.step; + this.range = this.max - this.min; + this.value = this.numValue(this.value); + } + numValue(n) { + if (this.noNeg) n = Math.abs(n); + return Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1; + } + + // ---------------------- + // EVENTS DEFAULT + // ---------------------- + + handleEvent(e) { + if (this.lock) return; + if (this.neverlock) Roots.lock = false; + if (!this[e.type]) return console.error(e.type, "this type of event no existe !"); + + // TODO !!!! + + //if( this.marginDiv ) z.d -= this.margin * 0.5 + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 + + return this[e.type](e); + } + wheel(e) { + return false; + } + mousedown(e) { + return false; + } + mousemove(e) { + return false; + } + mouseup(e) { + return false; + } + keydown(e) { + return false; + } + keyup(e) { + return false; + } + + // ---------------------- + // object referency + // ---------------------- + + setReferency(obj, key) { + this.objectLink = obj; + this.objectKey = key; + } + display(v = false) { + this.s[0].visibility = v ? "visible" : "hidden"; + } + + // ---------------------- + // resize height + // ---------------------- + + open() { + if (this.isOpen) return; + this.isOpen = true; + Roots.needResize = true; + if (this.openCallback) this.openCallback(); + } + close() { + if (!this.isOpen) return; + this.isOpen = false; + Roots.needResize = true; + if (this.closeCallback) this.closeCallback(); + } + needZone() { + Roots.needReZone = true; + } + rezone() { + Roots.needReZone = true; + } + + // ---------------------- + // INPUT + // ---------------------- + + select() {} + unselect() {} + setInput(Input) { + Roots.setInput(Input, this); + } + upInput(x, down) { + return Roots.upInput(x, down); + } + + // ---------------------- + // special item + // ---------------------- + + selected(b) { + this.isSelect = b || false; + } + } + + class Bool extends Proto { + constructor(o = {}) { + super(o); + this.value = o.value || false; + this.model = o.mode !== undefined ? o.mode : 0; + this.onName = o.rename || this.txt; + if (o.onName) o.onname = o.onName; + if (o.onname) this.onName = o.onname; + this.inh = o.inh || Math.floor(this.h * 0.8); + this.inw = o.inw || 36; + let cc = this.colors; + if (this.model === 0) { + let t = Math.floor(this.h * 0.5) - (this.inh - 2) * 0.5; + this.c[2] = this.dom('div', this.css.basic + 'background:' + cc.inputBg + '; height:' + (this.inh - 2) + 'px; width:' + this.inw + 'px; top:' + t + 'px; border-radius:10px; border:2px solid ' + cc.back); + this.c[3] = this.dom('div', this.css.basic + 'height:' + (this.inh - 6) + 'px; width:16px; top:' + (t + 2) + 'px; border-radius:10px; background:' + cc.button + ';'); + } else { + this.p = 0; + if (this.c[1] !== undefined) this.c[1].textContent = ''; + this.c[2] = this.dom('div', this.css.txt + this.css.button + 'top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.borderSize + 'px solid ' + cc.border + '; border-radius:' + this.radius + 'px;'); + } + this.stat = -1; + this.init(); + this.update(); + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown(e) { + this.value = !this.value; + this.update(true); + return this.mousemove(e); + } + mousemove(e) { + this.cursor('pointer'); + return this.mode(true); + } + reset() { + this.cursor(); + return this.mode(); + } + + // ---------------------- + // MODE + // ---------------------- + + mode(over) { + let change = false; + let cc = this.colors, + s = this.s, + n, + v = this.value; + if (over) n = v ? 4 : 3;else n = v ? 2 : 1; + if (this.stat !== n) { + this.stat = n; + if (this.model !== 0) { + switch (n) { + case 1: + s[2].color = cc.text; + s[2].background = cc.button; + break; + case 2: + s[2].color = cc.textSelect; + s[2].background = cc.select; + break; + case 3: + s[2].color = cc.textOver; + s[2].background = cc.overoff; + break; + case 4: + s[2].color = cc.textOver; + s[2].background = cc.over; + break; + } + this.c[2].innerHTML = v ? this.onName : this.name; + } else { + switch (n) { + case 1: + s[2].background = s[2].borderColor = cc.backoff; + s[3].background = cc.button; + break; + // off out + case 2: + s[2].background = s[2].borderColor = cc.back; + s[3].background = cc.textOver; + break; + // on over + case 3: + s[2].background = s[2].borderColor = cc.back; + s[3].background = cc.overoff; + break; + // off over + case 4: + s[2].background = s[2].borderColor = cc.backoff; + s[3].background = cc.textSelect; + break; + // on out + } + s[3].marginLeft = v ? '17px' : '2px'; + this.c[1].textContent = v ? this.onName : this.name; + } + change = true; + } + return change; + } + + // ---------------------- + + update(up) { + this.mode(); + if (up) this.send(); + } + rSize() { + super.rSize(); + let s = this.s; + let w = this.w - 10 - this.inw; + if (this.model === 0) { + s[2].left = w + 'px'; + s[3].left = w + 'px'; + } else { + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + } + } + } + + class Button extends Proto { + constructor(o = {}) { + super(o); + this.value = ''; + if (o.value !== undefined) this.value = o.value; + this.values = o.value || this.txt; + if (o.values) this.values = o.values; + if (!o.values && !o.value) this.txt = ''; + this.onName = o.onName || null; + this.on = false; + + // force button width + this.bw = o.forceWidth || 0; + if (o.bw) this.bw = o.bw; + this.space = o.space || 3; + if (typeof this.values === 'string') this.values = [this.values]; + this.isDown = false; + this.neverlock = true; + this.res = 0; + this.lng = this.values.length; + this.tmp = []; + this.stat = []; + let sel, + cc = this.colors; + for (let i = 0; i < this.lng; i++) { + sel = false; + if (this.values[i] === this.value && this.isSelectable) sel = true; + this.c[i + 2] = this.dom('div', this.css.txt + this.css.button + 'top:1px; height:' + (this.h - 2) + 'px; border:' + cc.borderSize + 'px solid ' + cc.border + '; border-radius:' + this.radius + 'px;'); + this.c[i + 2].style.background = sel ? cc.select : cc.button; + this.c[i + 2].style.color = sel ? cc.textSelect : cc.text; + this.c[i + 2].innerHTML = this.values[i]; + this.stat[i] = sel ? 3 : 1; + } + if (this.txt === '') this.p = 0; + if (!o.value && !o.values || this.p === 0) { + if (this.c[1] !== undefined) this.c[1].textContent = ''; + } + this.init(); + } + onOff() { + this.on = !this.on; + this.label(this.on ? this.onName : this.value); + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return -1; + let i = this.lng; + let t = this.tmp; + while (i--) { + if (l.x > t[i][0] && l.x < t[i][2]) return i; + } + return -1; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (!this.isDown) return false; + this.isDown = false; + if (this.res !== -1) { + if (this.value === this.values[this.res] && this.unselectable) this.value = '';else this.value = this.values[this.res]; + if (this.onName !== null) this.onOff(); + this.send(); + } + return this.mousemove(e); + } + mousedown(e) { + if (this.isDown) return false; + this.isDown = true; + return this.mousemove(e); + } + mousemove(e) { + let up = false; + this.res = this.testZone(e); + if (this.res !== -1) { + this.cursor('pointer'); + up = this.modes(this.isDown ? 3 : 2, this.res); + } else { + up = this.reset(); + } + return up; + } + + // ---------------------- + + modes(N = 1, id = -1) { + let i = this.lng, + w, + n, + r = false; + while (i--) { + n = N; + w = this.isSelectable ? this.values[i] === this.value : false; + if (i === id) { + if (w && n === 2) n = 3; + } else { + n = 1; + if (w) n = 4; + } + + //if( this.mode( n, i ) ) r = true + r = this.mode(n, i); + } + return r; + } + mode(n, id) { + //if(!this.s) return false + + let change = false; + let cc = this.colors, + s = this.s; + let i = id + 2; + if (this.stat[id] !== n) { + this.stat[id] = n; + switch (n) { + case 1: + s[i].color = cc.text; + s[i].background = cc.button; + break; + case 2: + s[i].color = cc.textOver; + s[i].background = cc.overoff; + break; + case 3: + s[i].color = cc.textOver; + s[i].background = cc.over; + break; + case 4: + s[i].color = cc.textSelect; + s[i].background = cc.select; + break; + } + change = true; + } + return change; + } + + // ---------------------- + + reset() { + this.res = -1; + this.cursor(); + return this.modes(); + } + label(string, n) { + n = n || 2; + this.c[n].textContent = string; + } + switchValues(n, string) { + this.c[n + 2].innerHTML = this.values[n] = string; + } + icon(string, y = 0, n = 2) { + //if(y) this.s[n].margin = ( y ) +'px 0px'; + this.s[n].padding = y + 'px 0px'; + this.c[n].innerHTML = string; + return this; + } + rSize() { + super.rSize(); + let s = this.s; + let w = this.sb; + let d = this.sa; + let i = this.lng; + let sx = this.colors.sx; //this.space; + //let size = Math.floor( ( w-(dc*(i-1)) ) / i ); + let size = (w - sx * (i - 1)) / i; + if (this.bw) { + size = this.bw < size ? this.bw : size; + //d = Math.floor((this.w-( (size * i) + (dc * (i-1)) ))*0.5) + d = (this.w - (size * i + sx * (i - 1))) * 0.5; + } + while (i--) { + //this.tmp[i] = [ Math.floor( d + ( size * i ) + ( dc * i )), size ]; + this.tmp[i] = [d + size * i + sx * i, size]; + this.tmp[i][2] = this.tmp[i][0] + this.tmp[i][1]; + s[i + 2].left = this.tmp[i][0] + 'px'; + s[i + 2].width = this.tmp[i][1] + 'px'; + } + } + } + + class Circular extends Proto { + constructor(o = {}) { + super(o); + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + this.setTypeNumber(o); + this.twoPi = Tools.TwoPI; + this.pi90 = Tools.pi90; + this.offset = new V2(); + this.h = o.h || this.w + 10; + this.c[0].style.width = this.w + 'px'; + this.c[0].style.display = 'block'; + if (this.c[1] !== undefined) { + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + } + this.percent = 0; + this.cmode = 0; + let cc = this.colors; + this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); + + // svg + + this.c[3] = this.getCircular(); + this.setSvg(this.c[3], 'stroke', cc.back, 0); + this.setSvg(this.c[3], 'd', this.makePath(), 1); + this.setSvg(this.c[3], 'stroke', cc.text, 1); + this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); + this.setCss(this.c[3], { + width: this.diam, + height: this.diam, + left: 0, + top: this.top + }); + this.init(); + this.update(); + } + mode(mode) { + if (this.cmode === mode) return false; + let cc = this.colors; + let color; + switch (mode) { + case 0: + // base + + this.s[2].color = cc.text; + this.setSvg(this.c[3], 'stroke', cc.back, 0); + color = this.model > 0 ? Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)) : cc.text; + this.setSvg(this.c[3], 'stroke', color, 1); + break; + case 1: + // down + + this.s[2].color = cc.textOver; + this.setSvg(this.c[3], 'stroke', cc.backoff, 0); + color = this.model > 0 ? Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)) : cc.textOver; + this.setSvg(this.c[3], 'stroke', color, 1); + break; + } + this.cmode = mode; + return true; + } + reset() { + this.isDown = false; + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'circular'; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + this.isDown = false; + this.sendEnd(); + return this.mode(0); + } + mousedown(e) { + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove(e); + return this.mode(1); + } + mousemove(e) { + if (!this.isDown) return; + + //console.log('over') + + let off = this.offset; + off.x = this.w * 0.5 - (e.clientX - this.zone.x); + off.y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); + this.r = off.angle() - this.pi90; + this.r = (this.r % this.twoPi + this.twoPi) % this.twoPi; + if (this.oldr !== null) { + let dif = this.r - this.oldr; + this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; + if (dif > 6) this.r = 0; + if (dif < -6) this.r = this.twoPi; + } + let steps = 1 / this.twoPi; + let value = this.r * steps; + let n = this.range * value + this.min - this.old; + if (n >= this.step || n <= this.step) { + n = ~~(n / this.step); + this.value = this.numValue(this.old + n * this.step); + this.update(true); + this.old = this.value; + this.oldr = this.r; + } + } + wheel(e) { + let name = this.testZone(e); + if (name === 'circular') { + let v = this.value - this.step * e.delta; + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } + this.setValue(v); + this.old = v; + this.update(true); + return true; + } + return false; + } + + // ---------------------- + + makePath() { + let r = 40; + let d = 24; + let a = this.percent * this.twoPi - 0.001; + let x2 = r + r * Math.sin(a) + d; + let y2 = r - r * Math.cos(a) + d; + let big = a > Math.PI ? 1 : 0; + return "M " + (r + d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; + } + update(up) { + this.c[2].textContent = this.value; + this.percent = (this.value - this.min) / this.range; + this.setSvg(this.c[3], 'd', this.makePath(), 1); + if (this.model > 0) { + let cc = this.colors; + let color = Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)); + this.setSvg(this.c[3], 'stroke', color, 1); + } + if (up) this.send(); + } + } + + class Color extends Proto { + constructor(o = {}) { + super(o); + + //this.autoHeight = true; + + this.ctype = o.ctype || 'hex'; + this.wfixe = 256; + this.cw = this.sb > 256 ? 256 : this.sb; + if (o.cw != undefined) this.cw = o.cw; + + // color up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + this.baseH = this.h; + this.offset = new V2(); + this.decal = new V2(); + this.pp = new V2(); + let cc = this.colors; + + // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) + + this.c[2] = this.dom('div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h - 2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};`); + //this.s[2] = this.c[2].style; + + //this.s[2].textShadow = 'none' + + /*if( this.up ){ + this.s[2].top = 'auto'; + this.s[2].bottom = '2px'; + }*/ + + //this.c[0].style.textAlign = 'center'; + this.c[0].style.display = 'block'; + this.c[3] = this.getColorRing(); + this.c[3].style.visibility = 'hidden'; + this.hsl = null; + this.value = '#ffffff'; + if (o.value !== undefined) { + if (o.value instanceof Array) this.value = Tools.rgbToHex(o.value);else if (!isNaN(o.value)) this.value = Tools.hexToHtml(o.value);else this.value = o.value; + } + this.bcolor = null; + this.isDown = false; + this.fistDown = false; + this.notext = o.notext || false; + this.tr = 98; + this.tsl = Math.sqrt(3) * this.tr; + this.hue = 0; + this.d = 256; + this.init(); + this.setColor(this.value); + if (o.open !== undefined) this.open(); + } + testZone(mx, my) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (this.up && this.isOpen) { + if (l.y > this.wfixe) return 'title';else return 'color'; + } else { + if (l.y < this.baseH + 2) return 'title';else if (this.isOpen) return 'color'; + } + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + this.isDown = false; + this.d = 256; + } + mousedown(e) { + let name = this.testZone(e.clientX, e.clientY); + + //if( !name ) return; + if (name === 'title') { + if (!this.isOpen) this.open();else this.close(); + return true; + } + if (name === 'color') { + this.isDown = true; + this.fistDown = true; + this.mousemove(e); + } + } + mousemove(e) { + let name = this.testZone(e.clientX, e.clientY); + let off, + d, + hue, + sat, + lum, + rad, + x, + y, + rr, + T = Tools; + if (name === 'title') this.cursor('pointer'); + if (name === 'color') { + off = this.offset; + off.x = e.clientX - (this.zone.x + this.decal.x + this.mid); + off.y = e.clientY - (this.zone.y + this.decal.y + this.mid) - this.ytop; + d = off.length() * this.ratio; + rr = off.angle(); + if (rr < 0) rr += 2 * T.PI; + if (d < 128) this.cursor('crosshair');else if (!this.isDown) this.cursor(); + if (this.isDown) { + if (this.fistDown) { + this.d = d; + this.fistDown = false; + } + if (this.d < 128) { + if (this.d > this.tr) { + // outside hue + + hue = (rr + T.pi90) / T.TwoPI; + this.hue = (hue + 1) % 1; + this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); + } else { + // triangle + + x = off.x * this.ratio; + y = off.y * this.ratio; + let rr = this.hue * T.TwoPI + T.PI; + if (rr < 0) rr += 2 * T.PI; + rad = Math.atan2(-y, x); + if (rad < 0) rad += 2 * T.PI; + let rad0 = (rad + T.pi90 + T.TwoPI + rr) % T.TwoPI, + rad1 = rad0 % (2 / 3 * T.PI) - T.pi60, + a = 0.5 * this.tr, + b = Math.tan(rad1) * a, + r = Math.sqrt(x * x + y * y), + maxR = Math.sqrt(a * a + b * b); + if (r > maxR) { + let dx = Math.tan(rad1) * r; + let rad2 = Math.atan(dx / maxR); + if (rad2 > T.pi60) rad2 = T.pi60;else if (rad2 < -T.pi60) rad2 = -T.pi60; + rad += rad2 - rad1; + rad0 = (rad + T.pi90 + T.TwoPI + rr) % T.TwoPI, rad1 = rad0 % (2 / 3 * T.PI) - T.pi60; + b = Math.tan(rad1) * a; + r = maxR = Math.sqrt(a * a + b * b); + } + lum = Math.sin(rad0) * r / this.tsl + 0.5; + let w = 1 - Math.abs(lum - 0.5) * 2; + sat = (Math.cos(rad0) * r + this.tr / 2) / (1.5 * this.tr) / w; + sat = T.clamp(sat, 0, 1); + this.setHSL([this.hsl[0], sat, lum]); + } + } + } + } + } + + // ---------------------- + + setHeight() { + this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; + this.s[0].height = this.h + 'px'; + this.zone.h = this.h; + } + parentHeight(t) { + if (this.group !== null) this.group.calc(t);else if (this.isUI) this.main.calc(t); + } + open() { + super.open(); + this.setHeight(); + if (this.up) this.zone.y -= this.wfixe + 5; + let t = this.h - this.baseH; + this.s[3].visibility = 'visible'; + //this.s[3].display = 'block'; + this.parentHeight(t); + } + close() { + super.close(); + if (this.up) this.zone.y += this.wfixe + 5; + let t = this.h - this.baseH; + this.setHeight(); + this.s[3].visibility = 'hidden'; + //this.s[3].display = 'none'; + this.parentHeight(-t); + } + update(up) { + let cc = Tools.rgbToHex(Tools.hslToRgb([this.hsl[0], 1, 0.5])); + this.moveMarkers(); + this.value = this.bcolor; + this.setSvg(this.c[3], 'fill', cc, 2, 0); + this.s[2].background = this.bcolor; + if (!this.notext) this.c[2].textContent = Tools.htmlToHex(this.bcolor); + this.invert = Tools.findDeepInver(this.rgb); + this.s[2].color = this.invert ? '#fff' : '#000'; + if (!up) return; + if (this.ctype === 'array') this.send(this.rgb); + if (this.ctype === 'rgb') this.send(Tools.htmlRgb(this.rgb)); + if (this.ctype === 'hex') this.send(Tools.htmlToHex(this.value)); + if (this.ctype === 'html') this.send(); + } + setValue(v) { + if (v instanceof Array) this.value = Tools.rgbToHex(v);else if (!isNaN(v)) this.value = Tools.hexToHtml(v);else this.value = v; + this.setColor(this.value); + this.update(); + } + setColor(color) { + let unpack = Tools.unpack(color); + if (this.bcolor !== color && unpack) { + this.bcolor = color; + this.rgb = unpack; + this.hsl = Tools.rgbToHsl(this.rgb); + this.hue = this.hsl[0]; + this.update(); + } + return this; + } + setHSL(hsl) { + this.hsl = hsl; + this.rgb = Tools.hslToRgb(hsl); + this.bcolor = Tools.rgbToHex(this.rgb); + this.update(true); + return this; + } + moveMarkers() { + let p = this.pp; + let T = Tools; + this.invert ? '#fff' : '#000'; + let a = this.hsl[0] * T.TwoPI; + let third = 2 / 3 * T.PI; + let r = this.tr; + let h = this.hsl[0]; + let s = this.hsl[1]; + let l = this.hsl[2]; + let angle = (a - T.pi90) * T.todeg; + h = -a + T.pi90; + let hx = Math.cos(h) * r; + let hy = -Math.sin(h) * r; + let sx = Math.cos(h - third) * r; + let sy = -Math.sin(h - third) * r; + let vx = Math.cos(h + third) * r; + let vy = -Math.sin(h + third) * r; + let mx = (sx + vx) / 2, + my = (sy + vy) / 2; + a = (1 - 2 * Math.abs(l - .5)) * s; + let x = sx + (vx - sx) * l + (hx - mx) * a; + let y = sy + (vy - sy) * l + (hy - my) * a; + p.set(x, y).addScalar(128); + + //let ff = (1-l)*255; + // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); + + this.setSvg(this.c[3], 'transform', 'rotate(' + angle + ' )', 2); + this.setSvg(this.c[3], 'cx', p.x, 3); + this.setSvg(this.c[3], 'cy', p.y, 3); + this.setSvg(this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3); + this.setSvg(this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3); + this.setSvg(this.c[3], 'fill', this.bcolor, 3); + } + rSize() { + //Proto.prototype.rSize.call( this ); + super.rSize(); + let s = this.s; + s[2].width = this.sb + 'px'; + s[2].left = this.sa + 'px'; + + //console.log(this.sb) + + this.cw = this.sb > 256 ? 256 : this.sb; + this.rSizeColor(this.cw); + this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + //s[3].left = this.decal.x + 'px'; + } + rSizeColor(w) { + if (w === this.wfixe) return; + this.wfixe = w; + let s = this.s; + + //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; + this.mid = Math.floor(this.wfixe * 0.5); + this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.wfixe + ' ' + this.wfixe); + s[3].width = this.wfixe + 'px'; + s[3].height = this.wfixe + 'px'; + //s[3].left = this.decal.x + 'px'; + s[3].top = this.decal.y + 'px'; + this.ratio = 256 / this.wfixe; + this.square = 1 / (60 * (this.wfixe / 256)); + this.setHeight(); + } + } + + class Fps extends Proto { + constructor(o = {}) { + super(o); + this.round = Math.round; + + //this.autoHeight = true; + + this.baseH = this.h; + this.hplus = o.hplus || 50; + this.res = o.res || 40; + this.l = 1; + this.precision = o.precision || 0; + this.custom = o.custom || false; + this.names = o.names || ['FPS', 'MS']; + let cc = o.cc || ['220,220,220', '255,255,0']; + + // this.divid = [ 100, 100, 100 ]; + // this.multy = [ 30, 30, 30 ]; + + this.adding = o.adding || false; + this.range = o.range || [165, 100, 100]; + this.alpha = o.alpha || 0.25; + this.values = []; + this.points = []; + this.textDisplay = []; + if (!this.custom) { + this.now = Roots.getTime(); + this.startTime = 0; //this.now() + this.prevTime = 0; //this.startTime; + this.frames = 0; + this.ms = 0; + this.fps = 0; + this.mem = 0; + this.mm = 0; + this.isMem = self.performance && self.performance.memory ? true : false; + + // this.divid = [ 100, 200, 1 ]; + // this.multy = [ 30, 30, 30 ]; + + if (this.isMem) { + this.names.push('MEM'); + cc.push('0,255,255'); + } + this.txt = o.name || 'Fps'; + } + let fltop = Math.floor(this.h * 0.5) - 3; + const ccc = this.colors; + this.c[1].textContent = this.txt; + //this.c[1].innerHTML = ' ' + this.txt + this.c[0].style.cursor = 'pointer'; + this.c[0].style.pointerEvents = 'auto'; + let panelCss = 'display:none; left:10px; top:' + this.h + 'px; height:' + (this.hplus - 8) + 'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid ' + ccc.border + ';'; + if (this.radius !== 0) panelCss += 'border-radius:' + this.radius + 'px;'; + this.c[2] = this.dom('path', this.css.basic + panelCss, {}); + this.c[2].setAttribute('viewBox', '0 0 ' + this.res + ' 50'); + this.c[2].setAttribute('height', '100%'); + this.c[2].setAttribute('width', '100%'); + this.c[2].setAttribute('preserveAspectRatio', 'none'); + + //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + + // arrow + this.c[3] = this.dom('path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:' + fltop + 'px;', { + d: this.svgs.g1, + fill: ccc.text, + stroke: 'none' + }); + //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); + + // result test + this.c[4] = this.dom('div', this.css.txt + 'position:absolute; left:10px; top:' + (this.h + 2) + 'px; display:none; width:100%; text-align:center;'); + + // bottom line + if (o.bottomLine) this.c[4] = this.dom('div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); + this.isShow = false; + let s = this.s; + + //s[1].marginLeft = '10px'; + s[1].lineHeight = this.h - 4; + s[1].color = ccc.text; + //s[1].paddingLeft = '18px'; + //s[1].fontWeight = 'bold'; + + if (this.radius !== 0) s[0].borderRadius = this.radius + 'px'; + if (this.colors.gborder !== 'none') s[0].border = '1px solid ' + ccc.gborder; + let j = 0; + for (j = 0; j < this.names.length; j++) { + let base = []; + let i = this.res + 1; + while (i--) base.push(50); + this.range[j] = 1 / this.range[j] * 49; + this.points.push(base); + this.values.push(0); + // this.dom( 'path', null, { fill:'rgba('+cc[j]+',0.5)', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + this.textDisplay.push(" " + this.names[j] + " "); + } + j = this.names.length; + while (j--) { + this.dom('path', null, { + fill: 'rgba(' + cc[j] + ',' + this.alpha + ')', + 'stroke-width': 1, + stroke: 'rgba(' + cc[j] + ',1)', + 'vector-effect': 'non-scaling-stroke' + }, this.c[2]); + } + this.init(); + + //if( this.isShow ) this.show(); + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown(e) { + if (this.isShow) this.close();else this.open(); + } + + // ---------------------- + + /*mode: function ( mode ) { + let s = this.s; + switch(mode){ + case 0: // base + s[1].color = this.colors.text; + //s[1].background = 'none'; + break; + case 1: // over + s[1].color = '#FFF'; + //s[1].background = UIL.SELECT; + break; + case 2: // edit / down + s[1].color = this.colors.text; + //s[1].background = UIL.SELECTDOWN; + break; + } + },*/ + + tick(v) { + this.values = v; + if (!this.isShow) return; + this.drawGraph(); + this.upText(); + } + makePath(point) { + let p = ''; + p += 'M ' + -1 + ' ' + 50; + for (let i = 0; i < this.res + 1; i++) { + p += ' L ' + i + ' ' + point[i]; + } + p += ' L ' + (this.res + 1) + ' ' + 50; + return p; + } + upText(val) { + let v = val || this.values, + t = ''; + for (let j = 0, lng = this.names.length; j < lng; j++) t += this.textDisplay[j] + v[j].toFixed(this.precision) + ''; + this.c[4].innerHTML = t; + } + drawGraph() { + let svg = this.c[2]; + let i = this.names.length, + v, + old = 0, + n = 0; + while (i--) { + if (this.adding) v = (this.values[n] + old) * this.range[n];else v = this.values[n] * this.range[n]; + this.points[n].shift(); + this.points[n].push(50 - v); + this.setSvg(svg, 'd', this.makePath(this.points[n]), i + 1); + old += this.values[n]; + n++; + } + } + open() { + super.open(); + this.h = this.hplus + this.baseH; + this.setSvg(this.c[3], 'd', this.svgs.g2); + if (this.group !== null) { + this.group.calc(this.hplus); + } else if (this.isUI) this.main.calc(this.hplus); + this.s[0].height = this.h + 'px'; + this.s[2].display = 'block'; + this.s[4].display = 'block'; + this.isShow = true; + if (!this.custom) Roots.addListen(this); + } + close() { + super.close(); + this.h = this.baseH; + this.setSvg(this.c[3], 'd', this.svgs.g1); + if (this.group !== null) { + this.group.calc(-this.hplus); + } else if (this.isUI) this.main.calc(-this.hplus); + this.s[0].height = this.h + 'px'; + this.s[2].display = 'none'; + this.s[4].display = 'none'; + this.isShow = false; + if (!this.custom) Roots.removeListen(this); + this.c[4].innerHTML = ''; + } + + ///// AUTO FPS ////// + + begin() { + this.startTime = this.now(); + } + end() { + let time = this.now(); + this.ms = time - this.startTime; + this.frames++; + if (time > this.prevTime + 1000) { + this.fps = this.round(this.frames * 1000 / (time - this.prevTime)); + this.prevTime = time; + this.frames = 0; + if (this.isMem) { + let heapSize = performance.memory.usedJSHeapSize; + let heapSizeLimit = performance.memory.jsHeapSizeLimit; + this.mem = this.round(heapSize * 0.000000954); + this.mm = heapSize / heapSizeLimit; + } + } + this.values = [this.fps, this.ms, this.mm]; + this.drawGraph(); + this.upText([this.fps, this.ms, this.mem]); + return time; + } + listening() { + if (!this.custom) this.startTime = this.end(); + } + rSize() { + let s = this.s; + let w = this.w; + s[3].left = this.sa + this.sb - 6 + 'px'; + s[0].width = w + 'px'; + s[1].width = w + 'px'; + s[2].left = 10 + 'px'; + s[2].width = w - 20 + 'px'; + s[4].width = w - 20 + 'px'; + } + } + + class Graph extends Proto { + constructor(o = {}) { + super(o); + this.value = o.value !== undefined ? o.value : [0, 0, 0]; + this.lng = this.value.length; + this.precision = o.precision !== undefined ? o.precision : 2; + this.multiplicator = o.multiplicator || 1; + this.neg = o.neg || false; + this.line = o.line !== undefined ? o.line : true; + + //if(this.neg)this.multiplicator*=2; + + this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; + this.isNumber = false; + this.isDown = false; + this.h = o.h || 128 + 10; + this.rh = this.h - 10; + this.top = 0; + this.c[0].style.width = this.w + 'px'; + if (this.c[1] !== undefined) { + // with title + + this.c[1].style.width = this.w + 'px'; + if (!this.autoWidth) { + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + } + + //this.c[1].style.background = '#ff0000'; + //this.c[1].style.textAlign = 'center'; + this.top = 10; + this.h += 10; + } + this.gh = this.rh - 28; + this.gw = this.w - 28; + + //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); + + //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' + this.c[2] = this.dom('div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:' + (this.h - 20) + 'px; left:14px; width:' + this.gw + 'px; color:' + this.colors.text); + + //this.c[2].textContent = this.value; + this.c[2].innerHTML = this.valueToHtml(); + let svg = this.dom('svg', this.css.basic, { + viewBox: '0 0 ' + this.w + ' ' + this.rh, + width: this.w, + height: this.rh, + preserveAspectRatio: 'none' + }); + this.setCss(svg, { + width: this.w, + height: this.rh, + left: 0, + top: this.top + }); + this.dom('path', '', { + d: '', + stroke: this.colors.text, + 'stroke-width': 2, + fill: 'none', + 'stroke-linecap': 'butt' + }, svg); + this.dom('rect', '', { + x: 10, + y: 10, + width: this.gw + 8, + height: this.gh + 8, + stroke: 'rgba(0,0,0,0.3)', + 'stroke-width': 1, + fill: 'none' + }, svg); + this.iw = (this.gw - 4 * (this.lng - 1)) / this.lng; + let t = []; + this.cMode = []; + this.v = []; + for (let i = 0; i < this.lng; i++) { + t[i] = [14 + i * this.iw + i * 4, this.iw]; + t[i][2] = t[i][0] + t[i][1]; + this.cMode[i] = 0; + if (this.neg) this.v[i] = (1 + this.value[i] / this.multiplicator) * 0.5;else this.v[i] = this.value[i] / this.multiplicator; + this.dom('rect', '', { + x: t[i][0], + y: 14, + width: t[i][1], + height: 1, + fill: this.colors.text, + 'fill-opacity': 0.3 + }, svg); + } + this.tmp = t; + this.c[3] = svg; + + //console.log(this.w) + + this.init(); + if (this.c[1] !== undefined) { + this.c[1].style.top = 0 + 'px'; + this.c[1].style.height = 20 + 'px'; + this.s[1].lineHeight = 20 - 5 + 'px'; + } + this.update(false); + } + setValue(value) { + this.value = value; + this.lng = this.value.length; + for (var i = 0; i < this.lng; i++) { + if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5;else this.v[i] = value[i] / this.multiplicator; + } + this.update(); + } + valueToHtml() { + let i = this.lng, + n = 0, + r = ''; + let w = 100 / this.lng; + let style = 'width:' + w + '%;'; //' text-align:center;' + while (i--) { + if (n === this.lng - 1) r += '
    ' + this.value[n] + '
    ';else r += '' + this.value[n] + ''; + n++; + } + return r; + } + updateSVG() { + if (this.line) this.setSvg(this.c[3], 'd', this.makePath(), 0); + for (let i = 0; i < this.lng; i++) { + this.setSvg(this.c[3], 'height', this.v[i] * this.gh, i + 2); + this.setSvg(this.c[3], 'y', 14 + (this.gh - this.v[i] * this.gh), i + 2); + if (this.neg) this.value[i] = ((this.v[i] * 2 - 1) * this.multiplicator).toFixed(this.precision) * 1;else this.value[i] = (this.v[i] * this.multiplicator).toFixed(this.precision) * 1; + } + + //this.c[2].textContent = this.value; + this.c[2].innerHTML = this.valueToHtml(); + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + let i = this.lng; + let t = this.tmp; + if (l.y > this.top && l.y < this.h - 20) { + while (i--) { + if (l.x > t[i][0] && l.x < t[i][2]) return i; + } + } + return ''; + } + mode(n, name) { + if (n === this.cMode[name]) return false; + let a; + switch (n) { + case 0: + a = 0.3; + break; + case 1: + a = 0.6; + break; + case 2: + a = 1; + break; + } + this.reset(); + this.setSvg(this.c[3], 'fill-opacity', a, name + 2); + this.cMode[name] = n; + return true; + } + + // ---------------------- + // EVENTS + // ---------------------- + + reset() { + let nup = false; + //this.isDown = false; + + let i = this.lng; + while (i--) { + if (this.cMode[i] !== 0) { + this.cMode[i] = 0; + this.setSvg(this.c[3], 'fill-opacity', 0.3, i + 2); + nup = true; + } + } + return nup; + } + mouseup(e) { + this.isDown = false; + if (this.current !== -1) return this.reset(); + } + mousedown(e) { + this.isDown = true; + return this.mousemove(e); + } + mousemove(e) { + let nup = false; + let name = this.testZone(e); + if (name === '') { + nup = this.reset(); + //this.cursor(); + } else { + nup = this.mode(this.isDown ? 2 : 1, name); + //this.cursor( this.current !== -1 ? 'move' : 'pointer' ); + if (this.isDown) { + this.v[name] = this.clamp(1 - (e.clientY - this.zone.y - this.ytop - 10) / this.gh, 0, 1); + this.update(true); + } + } + return nup; + } + + // ---------------------- + + update(up) { + this.updateSVG(); + if (up) this.send(); + } + makePath() { + let p = "", + h, + w, + wn, + wm, + ow, + oh; + //let g = this.iw*0.5 + + for (let i = 0; i < this.lng; i++) { + h = 14 + (this.gh - this.v[i] * this.gh); + w = 14 + i * this.iw + i * 4; + wm = w + this.iw * 0.5; + wn = w + this.iw; + if (i === 0) p += 'M ' + w + ' ' + h + ' T ' + wm + ' ' + h;else p += ' C ' + ow + ' ' + oh + ',' + w + ' ' + h + ',' + wm + ' ' + h; + if (i === this.lng - 1) p += ' T ' + wn + ' ' + h; + ow = wn; + oh = h; + } + return p; + } + rSize() { + super.rSize(); + let s = this.s; + if (this.c[1] !== undefined) s[1].width = this.w + 'px'; + s[3].width = this.w + 'px'; + let gw = this.w - 28; + let iw = (gw - 4 * (this.lng - 1)) / this.lng; + let t = []; + s[2].width = gw + 'px'; + for (let i = 0; i < this.lng; i++) { + t[i] = [14 + i * iw + i * 4, iw]; + t[i][2] = t[i][0] + t[i][1]; + } + this.tmp = t; + } + } + + class Empty extends Proto { + constructor(o = {}) { + o.isSpace = true; + o.margin = 0; + if (!o.h) o.h = 10; + super(o); + this.init(); + } + } + + class Group extends Proto { + constructor(o = {}) { + super(o); + this.isGroup = true; + this.ADD = o.add; + this.autoHeight = true; + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = o.group ? 8 : 0; + //this.dd = o.group ? o.group.decal + 8 : 0 + + this.baseH = this.h; + this.spaceY = new Empty({ + h: this.margin + }); + let fltop = Math.floor(this.h * 0.5) - 3; + const cc = this.colors; + this.useFlex = true; + let flexible = this.useFlex ? 'display:flex; flex-flow: row wrap;' : ''; + this.c[2] = this.dom('div', this.css.basic + flexible + 'width:100%; left:0; overflow:hidden; top:' + this.h + 'px'); + this.c[3] = this.dom('path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:' + fltop + 'px;', { + d: this.svgs.g1, + fill: cc.text, + stroke: 'none' + }); + let bh = this.mtop === 0 ? this.margin : this.mtop; + this.c[4] = this.dom('div', this.css.basic + 'width:100%; left:0; height:' + (bh + 1) + 'px; top:' + (this.h - 1) + 'px; background:none;'); + this.s; + this.c[1].name = 'group'; + this.init(); + this.setBG(o.bg); + if (o.open) this.open(); + } + setBG(bg) { + const cc = this.colors; + const s = this.s; + if (bg !== undefined) cc.groups = bg; + if (cc.groups === 'none') cc.groups = cc.background; + cc.background = 'none'; + s[0].background = 'none'; + s[1].background = cc.groups; + s[2].background = cc.groups; + if (cc.gborder !== 'none') { + s[1].border = cc.borderSize + 'px solid ' + cc.gborder; + } + if (this.radius !== 0) { + s[1].borderRadius = this.radius + 'px'; + s[2].borderRadius = this.radius + 'px'; + } + + /*let i = this.uis.length; + while(i--){ + this.uis[i].setBG( 'none' ); + //this.uis[i].setBG( this.colors.background ); + }*/ + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + let name = ''; + if (l.y < this.baseH + this.margin) name = 'title';else { + if (this.isOpen) name = 'content'; + } + + //console.log(name) + + return name; + } + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + this.proto = null; + this.current = -1; + this.cursor(); + return true; + } + reset() { + this.clearTarget(); + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent(e) { + let type = e.type; + let change = false; + let protoChange = false; + let name = this.testZone(e); + if (!name) return; + switch (name) { + case 'content': + //this.cursor() + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + + if (Roots.isMobile && type === 'mousedown') this.getNext(e, change); + if (this.proto) { + //e.clientY -= this.margin + protoChange = this.proto.handleEvent(e); + } + if (!Roots.lock) this.getNext(e, change); + break; + case 'title': + //this.cursor( this.isOpen ? 'n-resize':'s-resize' ); + this.cursor('pointer'); + if (type === 'mousedown') { + if (this.isOpen) this.close();else this.open(); + } + break; + } + if (this.isDown) change = true; + if (protoChange) change = true; + return change; + } + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); + if (next !== this.current) { + this.clearTarget(); + this.current = next; + } + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } + + // ---------------------- + + add() { + let a = arguments; + if (typeof a[1] === 'object') { + a[1].isUI = this.isUI; + a[1].target = this.c[2]; + a[1].main = this.main; + a[1].group = this; + } else if (typeof arguments[1] === 'string') { + if (a[2] === undefined) [].push.call(a, { + isUI: true, + target: this.c[2], + main: this.main + });else { + a[2].isUI = true; + a[2].target = this.c[2]; + a[2].main = this.main; + a[2].group = this; + } + } + let u = this.ADD.apply(this, a); + if (u.isGroup) { + //o.add = add; + u.dx = 8; + } + + //u.dx += 4 + //console.log(this.decal) + //u.zone.d -= 8 + Roots.forceZone = true; + //u.margin += this.margin + + //console.log( u.margin ) + //Roots.needReZone = true + + //Roots.resize() + //console.log(Roots.needResize) + + this.uis.push(u); + this.isEmpty = false; + return u; + } + + // remove one node + + remove(n) { + if (n.dispose) n.dispose(); + } + + // clear all iner + + dispose() { + this.clear(); + if (this.isUI) this.main.calc(); + super.dispose(); + } + clear() { + this.empty(); + } + empty() { + this.close(); + let i = this.uis.length, + item; + while (i--) { + item = this.uis.pop(); + this.c[2].removeChild(item.c[0]); + item.clear(true); - ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile - - - class Files { - - //----------------------------- - // FILE TYPE - //----------------------------- - - static autoTypes( type ) { - - let t = []; - - switch( type ){ - case 'svg': - t = [ { accept: { 'image/svg+xml': '.svg'} }, ]; - break; - case 'wav': - t = [ { accept: { 'audio/wav': '.wav'} }, ]; - break; - case 'mp3': - t = [ { accept: { 'audio/mpeg': '.mp3'} }, ]; - break; - case 'mp4': - t = [ { accept: { 'video/mp4': '.mp4'} }, ]; - break; - case 'bin': case 'hex': - t = [ { description: 'Binary Files', accept: { 'application/octet-stream': ['.bin', '.hex'] } }, ]; - break; - case 'text': - t = [ { description: 'Text Files', accept: { 'text/plain': ['.txt', '.text'], 'text/html': ['.html', '.htm'] } }, ]; - break; - case 'json': - t = [ { description: 'JSON Files', accept: { 'application/json': ['.json'] } }, ];//text/plain - break; - case 'js': - t = [ { description: 'JavaScript Files', accept: { 'text/javascript': ['.js'] } }, ]; - break; - case 'image': - t = [ { description: 'Images', accept: { 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] } }, ]; - break; - case 'icon': - t = [ { description: 'Icons', accept: { 'image/x-ico': ['.ico'] } }, ]; - break; - case 'lut': - t = [ { description: 'Lut', accept: { 'text/plain': ['.cube', '.3dl'] } }, ]; - break; - - } - - return t - - } - - - //----------------------------- - // LOAD - //----------------------------- - - static async load( o = {} ) { - - if (typeof window.showOpenFilePicker !== 'function') { - window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; - } - - try { - - let type = o.type || ''; - - const options = { - excludeAcceptAllOption: type ? true : false, - multiple: false, - //startIn:'./assets' - }; - - options.types = Files.autoTypes( type ); - - // create a new handle - const handle = await window.showOpenFilePicker( options ); - const file = await handle[0].getFile(); - //let content = await file.text() - - if( !file ) return null - - let fname = file.name; - let ftype = fname.substring( fname.lastIndexOf('.')+1, fname.length ); - - const dataUrl = [ 'png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3' ]; - const dataBuf = [ 'sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf' ]; - const reader = new FileReader(); - - if( dataUrl.indexOf( ftype ) !== -1 ) reader.readAsDataURL( file ); - else if( dataBuf.indexOf( ftype ) !== -1 ) reader.readAsArrayBuffer( file ); - else reader.readAsText( file ); - - reader.onload = function(e) { - - let content = e.target.result; - - switch(type){ - case 'image': - let img = new Image; - img.onload = function() { - if( o.callback ) o.callback( img, fname, ftype ); - }; - img.src = content; - break; - case 'json': - if( o.callback ) o.callback( JSON.parse( content ), fname, ftype ); - break; - default: - if( o.callback ) o.callback( content, fname, ftype ); - break; - } - - }; - - } catch(e) { - - console.log(e); - if( o.always && o.callback ) o.callback( null ); - - } - - } - - static showOpenFilePickerPolyfill( options ) { - return new Promise((resolve) => { - const input = document.createElement("input"); - input.type = "file"; - input.multiple = options.multiple; - input.accept = options.types - .map((type) => type.accept) - .flatMap((inst) => Object.keys(inst).flatMap((key) => inst[key])) - .join(","); - - input.addEventListener("change", () => { - resolve( - [...input.files].map((file) => { - return { - getFile: async () => - new Promise((resolve) => { - resolve(file); - }), - }; - }) - ); - }); - - input.click(); - }) - } - - - //----------------------------- - // SAVE - //----------------------------- - - static async save( o = {} ) { - - let usePoly = false; - - if (typeof window.showSaveFilePicker !== 'function') { - window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; - usePoly = true; - } - - try { - - let type = o.type || ''; - - const options = { - suggestedName: o.name || 'hello', - data: o.data || '' - }; - - options.types = Files.autoTypes( type ); - options.finalType = Object.keys( options.types[0].accept )[0]; - options.suggestedName += options.types[0].accept[options.finalType][0]; - - - // create a new handle - const handle = await window.showSaveFilePicker( options ); - - if( usePoly ) return - - // create a FileSystemWritableFileStream to write to - const file = await handle.createWritable(); - - let blob = new Blob([ options.data ], { type: options.finalType }); - - // write our file - await file.write(blob); - - // close the file and write the contents to disk. - await file.close(); - - } catch(e) { - - console.log(e); - - } - - } - - static showSaveFilePickerPolyfill( options ) { - return new Promise((resolve) => { - const a = document.createElement("a"); - a.download = options.suggestedName || "my-file.txt"; - let blob = new Blob([ options.data ], { type:options.finalType }); - a.href = URL.createObjectURL( blob ); - - a.addEventListener("click", () => { - resolve( - setTimeout( () => URL.revokeObjectURL(a.href), 1000 ) - ); - }); - a.click(); - }) - } - - - //----------------------------- - // FOLDER not possible in poly - //----------------------------- - - static async getFolder() { - - try { - - const handle = await window.showDirectoryPicker(); - const files = []; - for await (const entry of handle.values()) { - const file = await entry.getFile(); - files.push(file); - } - - console.log(files); - return files; - - } catch(e) { - - console.log(e); - - } - - } - - - - - - - - - - - } + //this.uis[i].clear() + } + this.isEmpty = true; + this.h = this.baseH; + } - class V2 { - - constructor( x = 0, y = 0 ) { - - this.x = x; - this.y = y; - - } - - set ( x, y ) { - - this.x = x; - this.y = y; - return this; - - } - - divide ( v ) { - - this.x /= v.x; - this.y /= v.y; - return this; - - } - - multiply ( v ) { - - this.x *= v.x; - this.y *= v.y; - return this; - - } - - multiplyScalar ( scalar ) { - - this.x *= scalar; - this.y *= scalar; - return this; - - } - - divideScalar ( scalar ) { - - return this.multiplyScalar( 1 / scalar ); - - } - - length () { - - return Math.sqrt( this.x * this.x + this.y * this.y ); - - } - - angle () { - - // computes the angle in radians with respect to the positive x-axis - - var angle = Math.atan2( this.y, this.x ); - - if ( angle < 0 ) angle += 2 * Math.PI; - - return angle; - - } - - addScalar ( s ) { - - this.x += s; - this.y += s; - return this; - - } - - negate () { - - this.x *= -1; - this.y *= -1; - return this; - - } - - neg () { - - this.x = -1; - this.y = -1; - return this; - - } - - isZero () { - - return ( this.x === 0 && this.y === 0 ); - - } - - copy ( v ) { - - this.x = v.x; - this.y = v.y; - - return this; - - } - - equals ( v ) { - - return ( ( v.x === this.x ) && ( v.y === this.y ) ); - - } - - nearEquals ( v, n ) { - - return ( ( v.x.toFixed(n) === this.x.toFixed(n) ) && ( v.y.toFixed(n) === this.y.toFixed(n) ) ); - - } - - lerp ( v, alpha ) { - - if( v === null ){ - this.x -= this.x * alpha; - this.y -= this.y * alpha; - } else { - this.x += ( v.x - this.x ) * alpha; - this.y += ( v.y - this.y ) * alpha; - } - - return this; - - } - - } + // clear one element - /** - * @author lth / https://github.com/lo-th - */ - - class Proto { - constructor(o = {}) { - // disable mouse controle - this.lock = o.lock || false; - - // for button - this.neverlock = false; - - // only simple space - this.isSpace = o.isSpace || false; - - // if is on gui or group - this.main = o.main || null; - this.isUI = o.isUI || false; - this.group = o.group || null; - - this.isListen = false; - - this.top = 0; - this.ytop = 0; - - this.dx = o.dx || 0; - - this.isSelectable = o.selectable !== undefined ? o.selectable : false; - this.unselectable = - o.unselect !== undefined ? o.unselect : this.isSelectable; - - this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' - - this.css = this.main ? this.main.css : Tools.css; - - this.colors = Tools.defineColor( - o, - this.main - ? this.group - ? this.group.colors - : this.main.colors - : Tools.colors - ); - - this.overEffect = this.colors.showOver; - - this.svgs = Tools.svgs; - - this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; - this.local = new V2().neg(); - - this.isCanvasOnly = false; - this.isSelect = false; - - // percent of title - this.p = o.p !== undefined ? o.p : Tools.size.p; - - this.w = this.isUI ? this.main.size.w : Tools.size.w; - if (o.w !== undefined) this.w = o.w; - - this.h = this.isUI ? this.main.size.h : Tools.size.h; - if (o.h !== undefined) this.h = o.h; - if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; - else this.lock = true; - - // decale for canvas only - this.fw = o.fw || 0; - - this.autoWidth = o.auto || true; // auto width or flex - this.isOpen = false; //false// open statu - - // radius for toolbox - this.radius = o.radius || this.colors.radius; - - this.transition = o.transition || Tools.transition; - - // only for number - this.isNumber = false; - this.noNeg = o.noNeg || false; - this.allEqual = o.allEqual || false; - - // only most simple - this.mono = false; - - // stop listening for edit slide text - this.isEdit = false; - - // no title - this.simple = o.simple || false; - if (this.simple) this.sa = 0; - - // define obj size - this.setSize(this.w); - - // title size - if (o.sa !== undefined) this.sa = o.sa; - if (o.sb !== undefined) this.sb = o.sb; - if (this.simple) this.sb = this.w - this.sa; - - // last number size for slide - this.sc = o.sc === undefined ? 47 : o.sc; - - // for listening object - this.objectLink = null; - this.isSend = false; - this.objectKey = null; - - this.txt = o.name || ""; - this.name = o.rename || this.txt; - this.target = o.target || null; - - // callback - this.callback = o.callback === undefined ? null : o.callback; - this.endCallback = null; - this.openCallback = o.openCallback === undefined ? null : o.openCallback; - this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; - - // if no callback take one from group or gui - if (this.callback === null && this.isUI && this.main.callback !== null) { - this.callback = this.group ? this.group.callback : this.main.callback; - } - - // elements - this.c = []; - - // style - this.s = []; - - this.useFlex = this.isUI ? this.main.useFlex : false; - let flexible = this.useFlex - ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" - : "float:left;"; - - this.c[0] = Tools.dom( - "div", - this.css.basic + flexible + "position:relative; height:20px;" - ); - - this.s[0] = this.c[0].style; - - // bottom margin - this.margin = this.colors.sy; - this.mtop = 0; - let marginDiv = Tools.isDivid(this.margin); - - if (this.isUI && this.margin) { - this.s[0].boxSizing = "content-box"; - if (marginDiv) { - this.mtop = this.margin * 0.5; - //this.s[0].borderTop = '${this.mtop}px solid transparent' - //console.log(`${this.mtop}px solid transparent`) - this.s[0].borderTop = this.mtop + "px solid transparent"; - this.s[0].borderBottom = this.mtop + "px solid transparent"; - } else { - this.s[0].borderBottom = this.margin + "px solid transparent"; - } - } - - // with title - if (!this.simple) { - this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); - this.s[1] = this.c[1].style; - this.c[1].textContent = this.name; - this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; - } - - if (o.pos) { - this.s[0].position = "absolute"; - for (let p in o.pos) { - this.s[0][p] = o.pos[p]; - } - this.mono = true; - } - - if (o.css) this.s[0].cssText = o.css; - } - - // ---------------------- - // make the node - // ---------------------- - - init() { - this.ytop = this.top + this.mtop; - - this.zone.h = this.h + this.margin; - this.zone.w = this.w; - - let s = this.s; // style cache - let c = this.c; // div cach - - s[0].height = this.h + "px"; - - if (this.isUI) s[0].background = this.colors.background; - - if (!this.autoWidth && this.useFlex) { - s[0].flex = "1 0 auto"; - s[0].minWidth = this.minw + "px"; - s[0].textAlign = "center"; - } else { - if (this.isUI) s[0].width = "100%"; - } - - //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; - if (c[1] !== undefined && this.autoWidth) { - s[1] = c[1].style; - s[1].top = 1 + "px"; - s[1].height = this.h - 2 + "px"; - } - - let frag = Tools.frag; - - for (let i = 1, lng = c.length; i !== lng; i++) { - if (c[i] !== undefined) { - frag.appendChild(c[i]); - s[i] = c[i].style; - } - } - - let pp = - this.target !== null - ? this.target - : this.isUI - ? this.main.inner - : document.body; - - if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); - else pp.appendChild(c[0]); - - c[0].appendChild(frag); - - this.rSize(); - - // ! solo proto - if (!this.isUI) { - this.c[0].style.pointerEvents = "auto"; - Roots.add(this); - } - } - - addTransition() { - if (this.baseH && this.transition && this.isUI) { - this.c[0].style.transition = "height " + this.transition + "s ease-out"; - } - } - - // from Tools - - dom(type, css, obj, dom, id) { - return Tools.dom(type, css, obj, dom, id); - } - - setSvg(dom, type, value, id, id2) { - Tools.setSvg(dom, type, value, id, id2); - } - - setCss(dom, css) { - Tools.setCss(dom, css); - } - - clamp(value, min, max) { - return Tools.clamp(value, min, max); - } - - getColorRing() { - if (!Tools.colorRing) Tools.makeColorRing(); - return Tools.clone(Tools.colorRing); - } - - getJoystick(model) { - if (!Tools["joystick_" + model]) Tools.makeJoystick(model); - return Tools.clone(Tools["joystick_" + model]); - } - - getCircular(model) { - if (!Tools.circular) Tools.makeCircular(model); - return Tools.clone(Tools.circular); - } - - getKnob(model) { - if (!Tools.knob) Tools.makeKnob(model); - return Tools.clone(Tools.knob); - } - - getPad2d(model) { - if (!Tools.pad2d) Tools.makePad(model); - return Tools.clone(Tools.pad2d); - } - - // from Roots - - cursor(name) { - Roots.cursor(name); - } - - ///////// - - update() {} - - reset() {} - - ///////// - - content() { - return this.c[0]; - } - - getDom() { - return this.c[0]; - } - - uiout() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.background; - } - - uiover() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.backgroundOver; - } - - rename(s) { - if (this.c[1] !== undefined) this.c[1].textContent = s; - } - - listen() { - this.isListen = Roots.addListen(this); - return this; - } - - listening() { - // modified by Fedemarino - if (this.objectLink === null) return; - if (this.isSend) return; - if (this.isEdit) return; - // check if value has changed - let hasChanged = this.setValue(this.objectLink[this.objectKey]); - return hasChanged; - } - - setValue(v) { - const old = this.value; - if (this.isNumber) this.value = this.numValue(v); - //else if( v instanceof Array && v.length === 1 ) v = v[0]; - else this.value = v; - this.update(); - let hasChanged = false; - if (old !== this.value) { - hasChanged = true; - } - - return hasChanged; - } - - // ---------------------- - // update every change - // ---------------------- - - onChange(f) { - if (this.isSpace) return; - this.callback = f || null; - return this; - } - - // ---------------------- - // update only on end - // ---------------------- - - onFinishChange(f) { - if (this.isSpace) return; - this.callback = null; - this.endCallback = f; - return this; - } - - // ---------------------- - // event on open close - // ---------------------- - - onOpen(f) { - this.openCallback = f; - return this; - } - - onClose(f) { - this.closeCallback = f; - return this; - } - - // ---------------------- - // send back value - // ---------------------- - - send(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - - this.isSend = true; - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - if (this.callback) this.callback(v, this.objectKey); - this.isSend = false; - } - - sendEnd(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - - if (this.endCallback) this.endCallback(v); - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - } - - // ---------------------- - // clear node - // ---------------------- - - dispose() { - if (this.isListen) Roots.removeListen(this); - - Tools.clear(this.c[0]); - - if (this.target !== null) { - if (this.group !== null) this.group.clearOne(this); - else this.target.removeChild(this.c[0]); - } else { - if (this.isUI) this.main.clearOne(this); - else document.body.removeChild(this.c[0]); - } - - if (!this.isUI) Roots.remove(this); - - this.c = null; - this.s = null; - this.callback = null; - this.target = null; - this.isListen = false; - } - - clear() {} - - // ---------------------- - // change size - // ---------------------- - - getWidth() { - let nw = Roots.getWidth(this); - if (nw) this.w = nw; - } - - setSize(sx) { - if (!this.autoWidth) return; - - this.w = sx; - - if (this.simple) { - this.sb = this.w - this.sa; - } else { - let pp = this.w * (this.p / 100); - //this.sa = Math.floor( pp + 10 ) - //this.sb = Math.floor( this.w - pp - 20 ) - this.sa = Math.floor(pp + 8); - this.sb = Math.floor(this.w - pp - 16); - } - } - - rSize() { - if (!this.autoWidth) return; - if (!this.isUI) this.s[0].width = this.w + "px"; - if (!this.simple) this.s[1].width = this.sa + "px"; - } - - // ---------------------- - // for numeric value - // ---------------------- - - setTypeNumber(o) { - this.isNumber = true; - - this.value = 0; - if (o.value !== undefined) { - if (typeof o.value === "string") this.value = o.value * 1; - else this.value = o.value; - } - - this.min = o.min === undefined ? -Infinity : o.min; - this.max = o.max === undefined ? Infinity : o.max; - this.precision = o.precision === undefined ? 2 : o.precision; - - let s; - - switch (this.precision) { - case 0: - s = 1; - break; - case 1: - s = 0.1; - break; - case 2: - s = 0.01; - break; - case 3: - s = 0.001; - break; - case 4: - s = 0.0001; - break; - case 5: - s = 0.00001; - break; - case 6: - s = 0.000001; - break; - } - - this.step = o.step === undefined ? s : o.step; - this.range = this.max - this.min; - this.value = this.numValue(this.value); - } - - numValue(n) { - if (this.noNeg) n = Math.abs(n); - return ( - Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 - ); - } - - // ---------------------- - // EVENTS DEFAULT - // ---------------------- - - handleEvent(e) { - if (this.lock) return; - if (this.neverlock) Roots.lock = false; - if (!this[e.type]) - return console.error(e.type, "this type of event no existe !"); - - // TODO !!!! - - //if( this.marginDiv ) z.d -= this.margin * 0.5 - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 - - return this[e.type](e); - } - - wheel(e) { - return false; - } - mousedown(e) { - return false; - } - mousemove(e) { - return false; - } - mouseup(e) { - return false; - } - keydown(e) { - return false; - } - keyup(e) { - return false; - } - - // ---------------------- - // object referency - // ---------------------- - - setReferency(obj, key) { - this.objectLink = obj; - this.objectKey = key; - } - - display(v = false) { - this.s[0].visibility = v ? "visible" : "hidden"; - } - - // ---------------------- - // resize height - // ---------------------- - - open() { - if (this.isOpen) return; - this.isOpen = true; - Roots.needResize = true; - if (this.openCallback) this.openCallback(); - } - - close() { - if (!this.isOpen) return; - this.isOpen = false; - Roots.needResize = true; - if (this.closeCallback) this.closeCallback(); - } - - needZone() { - Roots.needReZone = true; - } - - rezone() { - Roots.needReZone = true; - } - - // ---------------------- - // INPUT - // ---------------------- - - select() {} - - unselect() {} - - setInput(Input) { - Roots.setInput(Input, this); - } - - upInput(x, down) { - return Roots.upInput(x, down); - } - - // ---------------------- - // special item - // ---------------------- - - selected(b) { - this.isSelect = b || false; - } - } + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + this.calc(-(this.uis[id].h + this.margin)); + this.c[2].removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + if (this.uis.length === 0) { + this.isEmpty = true; + this.close(); + } + } + } + open() { + super.open(); + this.setSvg(this.c[3], 'd', this.svgs.g2); + this.rSizeContent(); - class Bool extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || false; - this.model = o.mode !== undefined ? o.mode : 0; - - this.onName = o.rename || this.txt; - if( o.onName ) o.onname = o.onName; - if( o.onname ) this.onName = o.onname; - - this.inh = o.inh || Math.floor( this.h*0.8 ); - this.inw = o.inw || 36; - - let cc = this.colors; - - if( this.model === 0 ){ - let t = Math.floor(this.h*0.5)-((this.inh-2)*0.5); - this.c[2] = this.dom( 'div', this.css.basic + 'background:'+ cc.inputBg +'; height:'+(this.inh-2)+'px; width:'+this.inw+'px; top:'+t+'px; border-radius:10px; border:2px solid '+ cc.back ); - this.c[3] = this.dom( 'div', this.css.basic + 'height:'+(this.inh-6)+'px; width:16px; top:'+(t+2)+'px; border-radius:10px; background:'+ cc.button+';' ); - } else { - this.p = 0; - if( this.c[1] !== undefined ) this.c[1].textContent = ''; - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - } - - this.stat = -1; - - this.init(); - this.update(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown ( e ) { - - this.value = !this.value; - this.update( true ); - return this.mousemove( e ) - - } - - mousemove ( e ) { - - this.cursor('pointer'); - return this.mode( true ) - - } - - reset () { - - this.cursor(); - return this.mode() - - } - - // ---------------------- - // MODE - // ---------------------- - - mode ( over ) { - - let change = false; - let cc = this.colors, s = this.s, n, v = this.value; - - if( over ) n = v ? 4 : 3; - else n = v ? 2 : 1; - - if( this.stat !== n ){ - - this.stat = n; - - if( this.model !== 0 ){ - - switch( n ){ - - case 1: s[2].color = cc.text; s[2].background = cc.button; break; - case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; - case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; - case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; - - } - - this.c[2].innerHTML = v ? this.onName : this.name; - - } else { - - switch( n ){ - - case 1: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.button; break;// off out - case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break;// on over - case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break;// off over - case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break;// on out - - } - - s[3].marginLeft = v ? '17px' : '2px'; - this.c[1].textContent = v ? this.onName : this.name; - - } - - change = true; - - } - - return change - - } - - // ---------------------- - - update ( up ) { - - this.mode(); - if( up ) this.send(); - - } - - rSize () { - - super.rSize(); - - let s = this.s; - let w = (this.w - 10 ) - this.inw; - if( this.model === 0 ){ - s[2].left = w + 'px'; - s[3].left = w + 'px'; - } else { - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - } - - } - - } + //let t = this.h - this.baseH - class Button extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = ''; - if( o.value !== undefined ) this.value = o.value; - - this.values = o.value || this.txt; - if( o.values ) this.values = o.values; - - if( !o.values && !o.value ) this.txt = ''; - - this.onName = o.onName || null; - - this.on = false; - - // force button width - this.bw = o.forceWidth || 0; - if(o.bw) this.bw = o.bw; - this.space = o.space || 3; - - if( typeof this.values === 'string' ) this.values = [ this.values ]; - - this.isDown = false; - this.neverlock = true; - this.res = 0; - - this.lng = this.values.length; - this.tmp = []; - this.stat = []; - - let sel, cc = this.colors; - - for( let i = 0; i < this.lng; i++ ){ - - sel = false; - if( this.values[i] === this.value && this.isSelectable ) sel = true; - - this.c[i+2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[i+2].style.background = sel ? cc.select : cc.button; - this.c[i+2].style.color = sel ? cc.textSelect : cc.text; - this.c[i+2].innerHTML = this.values[i]; - this.stat[i] = sel ? 3:1; - - } - - - if( this.txt==='' ) this.p = 0; - - if( (!o.value && !o.values) || this.p === 0 ){ - if( this.c[1] !== undefined ) this.c[1].textContent = ''; - } - - - this.init(); - - } - - onOff() { - - this.on = !this.on; - this.label( this.on ? this.onName : this.value ); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return -1 - - let i = this.lng; - let t = this.tmp; - - while( i-- ){ - if( l.x>t[i][0] && l.x 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.text; - this.setSvg( this.c[3], 'stroke', color, 1 ); - - break; - case 1: // down - - this.s[2].color = cc.textOver; - this.setSvg( this.c[3], 'stroke', cc.backoff, 0); - color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.textOver; - this.setSvg( this.c[3], 'stroke', color, 1 ); - - break; - } - - this.cmode = mode; - return true; - - } - - reset () { - - this.isDown = false; - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'circular'; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.sendEnd(); - return this.mode(0); - - } - - mousedown ( e ) { - - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove( e ); - return this.mode(1); - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - //console.log('over') - - let off = this.offset; - off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); - off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - this.r = off.angle() - this.pi90; - this.r = (((this.r%this.twoPi)+this.twoPi)%this.twoPi); - - if( this.oldr !== null ){ - - let dif = this.r - this.oldr; - this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; - - if( dif > 6 ) this.r = 0; - if( dif < -6 ) this.r = this.twoPi; - - } - - let steps = 1 / this.twoPi; - let value = this.r * steps; - - let n = ( ( this.range * value ) + this.min ) - this.old; - - if(n >= this.step || n <= this.step){ - n = ~~ ( n / this.step ); - this.value = this.numValue( this.old + ( n * this.step ) ); - this.update( true ); - this.old = this.value; - this.oldr = this.r; - } - - } - - wheel ( e ) { - - let name = this.testZone( e ); - - if( name === 'circular' ) { - - let v = this.value - this.step * e.delta; - - if ( v > this.max ) { - v = this.isCyclic ? this.min : this.max; - } else if ( v < this.min ) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue( v ); - this.old = v; - this.update( true ); - - return true; - - } - return false; - - } - - // ---------------------- - - makePath () { - - let r = 40; - let d = 24; - let a = this.percent * this.twoPi - 0.001; - let x2 = (r + r * Math.sin(a)) + d; - let y2 = (r - r * Math.cos(a)) + d; - let big = a > Math.PI ? 1 : 0; - return "M " + (r+d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; - - } - - update ( up ) { - - this.c[2].textContent = this.value; - this.percent = ( this.value - this.min ) / this.range; - - this.setSvg( this.c[3], 'd', this.makePath(), 1 ); - - if ( this.model > 0 ) { - - let cc = this.colors; - let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ); - this.setSvg( this.c[3], 'stroke', color, 1 ); - - } - - if( up ) this.send(); - - } - - } + //s[2].top = (this.h-1) + 'px' + s[2].top = this.h + this.mtop + 'px'; + s[4].background = cc.groups; //'#0f0' - class Color extends Proto { - - constructor( o = {} ) { - - super( o ); - - //this.autoHeight = true; - - this.ctype = o.ctype || 'hex'; - - this.wfixe = 256; - - this.cw = this.sb > 256 ? 256 : this.sb; - if(o.cw != undefined ) this.cw = o.cw; - - - - // color up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - - this.baseH = this.h; - - this.offset = new V2(); - this.decal = new V2(); - this.pp = new V2(); - - let cc = this.colors; - - // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) - - this.c[2] = this.dom( 'div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};` ); - //this.s[2] = this.c[2].style; - - //this.s[2].textShadow = 'none' - - /*if( this.up ){ - this.s[2].top = 'auto'; - this.s[2].bottom = '2px'; - }*/ - - //this.c[0].style.textAlign = 'center'; - this.c[0].style.display = 'block'; - - this.c[3] = this.getColorRing(); - this.c[3].style.visibility = 'hidden'; - - this.hsl = null; - this.value = '#ffffff'; - if( o.value !== undefined ){ - if( o.value instanceof Array ) this.value = Tools.rgbToHex( o.value ); - else if(!isNaN(o.value)) this.value = Tools.hexToHtml( o.value ); - else this.value = o.value; - } - - this.bcolor = null; - this.isDown = false; - this.fistDown = false; - - this.notext = o.notext || false; - - this.tr = 98; - this.tsl = Math.sqrt(3) * this.tr; - - this.hue = 0; - this.d = 256; - - this.init(); - - this.setColor( this.value ); - - if( o.open !== undefined ) this.open(); - - } - - testZone ( mx, my ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - - if( this.up && this.isOpen ){ - - if( l.y > this.wfixe ) return 'title' - else return 'color' - - } else { - - if( l.y < this.baseH+2 ) return 'title' - else if( this.isOpen ) return 'color' - - } - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.d = 256; - - } - - mousedown ( e ) { - - - let name = this.testZone( e.clientX, e.clientY ); - - - //if( !name ) return; - if(name === 'title'){ - if( !this.isOpen ) this.open(); - else this.close(); - return true; - } - - - if( name === 'color' ){ - - this.isDown = true; - this.fistDown = true; - this.mousemove( e ); - } - } - - mousemove ( e ) { - - let name = this.testZone( e.clientX, e.clientY ); - - let off, d, hue, sat, lum, rad, x, y, rr, T = Tools; - - if( name === 'title' ) this.cursor('pointer'); - - if( name === 'color' ){ - - off = this.offset; - off.x = e.clientX - ( this.zone.x + this.decal.x + this.mid ); - off.y = e.clientY - ( this.zone.y + this.decal.y + this.mid ) - this.ytop; - d = off.length() * this.ratio; - rr = off.angle(); - if(rr < 0) rr += 2 * T.PI; - - - if ( d < 128 ) this.cursor('crosshair'); - else if( !this.isDown ) this.cursor(); - - if( this.isDown ){ - - if( this.fistDown ){ - this.d = d; - this.fistDown = false; - } - - if ( this.d < 128 ) { - - if ( this.d > this.tr ) { // outside hue - - hue = ( rr + T.pi90 ) / T.TwoPI; - this.hue = (hue + 1) % 1; - this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); - - } else { // triangle - - x = off.x * this.ratio; - y = off.y * this.ratio; - - let rr = (this.hue * T.TwoPI) + T.PI; - if(rr < 0) rr += 2 * T.PI; - - rad = Math.atan2(-y, x); - if(rad < 0) rad += 2 * T.PI; - - let rad0 = ( rad + T.pi90 + T.TwoPI + rr ) % (T.TwoPI), - rad1 = rad0 % ((2/3) * T.PI) - (T.pi60), - a = 0.5 * this.tr, - b = Math.tan(rad1) * a, - r = Math.sqrt(x*x + y*y), - maxR = Math.sqrt(a*a + b*b); - - if( r > maxR ) { - let dx = Math.tan(rad1) * r; - let rad2 = Math.atan(dx / maxR); - if(rad2 > T.pi60) rad2 = T.pi60; - else if( rad2 < -T.pi60 ) rad2 = -T.pi60; - - rad += rad2 - rad1; - - rad0 = (rad + T.pi90 + T.TwoPI + rr) % (T.TwoPI), - rad1 = rad0 % ((2/3) * T.PI) - (T.pi60); - b = Math.tan(rad1) * a; - r = maxR = Math.sqrt(a*a + b*b); - } - - lum = ((Math.sin(rad0) * r) / this.tsl) + 0.5; - - let w = 1 - (Math.abs(lum - 0.5) * 2); - sat = (((Math.cos(rad0) * r) + (this.tr / 2)) / (1.5 * this.tr)) / w; - sat = T.clamp( sat, 0, 1 ); - - this.setHSL([this.hsl[0], sat, lum]); - - } - } - } - } - - } - - // ---------------------- - - setHeight () { - - this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; - this.s[0].height = this.h + 'px'; - this.zone.h = this.h; - - } - - parentHeight ( t ) { - - if ( this.group !== null ) this.group.calc( t ); - else if ( this.isUI ) this.main.calc( t ); - - } - - open () { - - super.open(); - - this.setHeight(); - - if( this.up ) this.zone.y -= this.wfixe + 5; - - let t = this.h - this.baseH; - - this.s[3].visibility = 'visible'; - //this.s[3].display = 'block'; - this.parentHeight( t ); - - } - - close () { - - super.close(); - - if( this.up ) this.zone.y += this.wfixe + 5; - - let t = this.h - this.baseH; - - this.setHeight(); - - this.s[3].visibility = 'hidden'; - //this.s[3].display = 'none'; - this.parentHeight( -t ); - - } - - update ( up ) { - - let cc = Tools.rgbToHex( Tools.hslToRgb([ this.hsl[0], 1, 0.5 ]) ); - - this.moveMarkers(); - - this.value = this.bcolor; - - this.setSvg( this.c[3], 'fill', cc, 2, 0 ); - - this.s[2].background = this.bcolor; - if(!this.notext) this.c[2].textContent = Tools.htmlToHex( this.bcolor ); - - this.invert = Tools.findDeepInver( this.rgb ); - this.s[2].color = this.invert ? '#fff' : '#000'; - - if(!up) return; - - if( this.ctype === 'array' ) this.send( this.rgb ); - if( this.ctype === 'rgb' ) this.send( Tools.htmlRgb( this.rgb ) ); - if( this.ctype === 'hex' ) this.send( Tools.htmlToHex( this.value ) ); - if( this.ctype === 'html' ) this.send(); - - } - - setValue ( v ){ - - if( v instanceof Array ) this.value = Tools.rgbToHex( v ); - else if(!isNaN(v)) this.value = Tools.hexToHtml( v ); - else this.value = v; - - this.setColor( this.value ); - this.update(); - - } - - setColor ( color ) { - - let unpack = Tools.unpack(color); - if (this.bcolor !== color && unpack) { - - this.bcolor = color; - this.rgb = unpack; - this.hsl = Tools.rgbToHsl( this.rgb ); - - this.hue = this.hsl[0]; - - this.update(); - } - return this; - - } - - setHSL ( hsl ) { - - this.hsl = hsl; - this.rgb = Tools.hslToRgb( hsl ); - this.bcolor = Tools.rgbToHex( this.rgb ); - this.update( true ); - return this; - - } - - moveMarkers () { - - let p = this.pp; - let T = Tools; - - this.invert ? '#fff' : '#000'; - let a = this.hsl[0] * T.TwoPI; - let third = (2/3) * T.PI; - let r = this.tr; - let h = this.hsl[0]; - let s = this.hsl[1]; - let l = this.hsl[2]; - - let angle = ( a - T.pi90 ) * T.todeg; - - h = - a + T.pi90; - - let hx = Math.cos(h) * r; - let hy = -Math.sin(h) * r; - let sx = Math.cos(h - third) * r; - let sy = -Math.sin(h - third) * r; - let vx = Math.cos(h + third) * r; - let vy = -Math.sin(h + third) * r; - let mx = (sx + vx) / 2, my = (sy + vy) / 2; - a = (1 - 2 * Math.abs(l - .5)) * s; - let x = sx + (vx - sx) * l + (hx - mx) * a; - let y = sy + (vy - sy) * l + (hy - my) * a; - - p.set( x, y ).addScalar(128); - - //let ff = (1-l)*255; - // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); - - this.setSvg( this.c[3], 'transform', 'rotate('+angle+' )', 2 ); - - this.setSvg( this.c[3], 'cx', p.x, 3 ); - this.setSvg( this.c[3], 'cy', p.y, 3 ); - - this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3 ); - this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3 ); - this.setSvg( this.c[3], 'fill',this.bcolor, 3 ); - - } - - rSize () { - - //Proto.prototype.rSize.call( this ); - super.rSize(); - - let s = this.s; - - s[2].width = this.sb + 'px'; - s[2].left = this.sa + 'px'; - - //console.log(this.sb) - - this.cw = this.sb > 256 ? 256 : this.sb; - - - - this.rSizeColor( this.cw ); - - this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - //s[3].left = this.decal.x + 'px'; - - } - - rSizeColor ( w ) { - - - if( w === this.wfixe ) return; - - - - this.wfixe = w; - - - - let s = this.s; - - //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; - this.mid = Math.floor( this.wfixe * 0.5 ); - - this.setSvg( this.c[3], 'viewBox', '0 0 '+ this.wfixe + ' '+ this.wfixe ); - s[3].width = this.wfixe + 'px'; - s[3].height = this.wfixe + 'px'; - //s[3].left = this.decal.x + 'px'; - s[3].top = this.decal.y + 'px'; - - this.ratio = 256 / this.wfixe; - this.square = 1 / (60*(this.wfixe/256)); - this.setHeight(); - - } - - - } + if (this.radius) { + s[1].borderRadius = '0px'; + s[2].borderRadius = '0px'; + s[1].borderTopLeftRadius = this.radius + 'px'; + s[1].borderTopRightRadius = this.radius + 'px'; + s[2].borderBottomLeftRadius = this.radius + 'px'; + s[2].borderBottomRightRadius = this.radius + 'px'; + } + if (cc.gborder !== 'none') { + s[4].borderLeft = cc.borderSize + 'px solid ' + cc.gborder; + s[4].borderRight = cc.borderSize + 'px solid ' + cc.gborder; + s[2].border = cc.borderSize + 'px solid ' + cc.gborder; + s[2].borderTop = 'none'; + s[1].borderBottom = cc.borderSize + 'px solid rgba(0,0,0,0)'; + } + this.parentHeight(); - class Fps extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.round = Math.round; - - //this.autoHeight = true; - - this.baseH = this.h; - this.hplus = o.hplus || 50; - - this.res = o.res || 40; - this.l = 1; - - this.precision = o.precision || 0; - - - this.custom = o.custom || false; - this.names = o.names || ['FPS', 'MS']; - let cc = o.cc || ['220,220,220', '255,255,0']; - - // this.divid = [ 100, 100, 100 ]; - // this.multy = [ 30, 30, 30 ]; - - this.adding = o.adding || false; - - this.range = o.range || [ 165, 100, 100 ]; - - this.alpha = o.alpha || 0.25; - - this.values = []; - this.points = []; - this.textDisplay = []; - - if(!this.custom){ - - this.now = Roots.getTime(); - this.startTime = 0;//this.now() - this.prevTime = 0;//this.startTime; - this.frames = 0; - - this.ms = 0; - this.fps = 0; - this.mem = 0; - this.mm = 0; - - this.isMem = ( self.performance && self.performance.memory ) ? true : false; - - // this.divid = [ 100, 200, 1 ]; - // this.multy = [ 30, 30, 30 ]; - - if( this.isMem ){ - - this.names.push('MEM'); - cc.push('0,255,255'); - - } - - this.txt = o.name || 'Fps'; - - } - - - let fltop = Math.floor(this.h*0.5)-3; - const ccc = this.colors; - - this.c[1].textContent = this.txt; - //this.c[1].innerHTML = ' ' + this.txt - this.c[0].style.cursor = 'pointer'; - this.c[0].style.pointerEvents = 'auto'; - - let panelCss = 'display:none; left:10px; top:'+ this.h + 'px; height:'+(this.hplus - 8)+'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid '+ ccc.border +';'; - - if( this.radius !== 0 ) panelCss += 'border-radius:' + this.radius+'px;'; - - this.c[2] = this.dom( 'path', this.css.basic + panelCss , {} ); - - this.c[2].setAttribute('viewBox', '0 0 '+this.res+' 50' ); - this.c[2].setAttribute('height', '100%' ); - this.c[2].setAttribute('width', '100%' ); - this.c[2].setAttribute('preserveAspectRatio', 'none' ); - - - //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - - // arrow - this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:ccc.text, stroke:'none'}); - //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); - - // result test - this.c[4] = this.dom( 'div', this.css.txt + 'position:absolute; left:10px; top:'+(this.h+2) +'px; display:none; width:100%; text-align:center;' ); - - // bottom line - if( o.bottomLine ) this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); - - this.isShow = false; - - - - let s = this.s; - - //s[1].marginLeft = '10px'; - s[1].lineHeight = this.h-4; - s[1].color = ccc.text; - //s[1].paddingLeft = '18px'; - //s[1].fontWeight = 'bold'; - - if( this.radius !== 0 ) s[0].borderRadius = this.radius+'px'; - if( this.colors.gborder!=='none') s[0].border = '1px solid ' + ccc.gborder; - - - - - let j = 0; - - for( j=0; j " + this.names[j] +" "); - - } - - j = this.names.length; - while(j--){ - this.dom( 'path', null, { fill:'rgba('+cc[j]+','+this.alpha+')', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - } - - - this.init(); - - //if( this.isShow ) this.show(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown ( e ) { - - if( this.isShow ) this.close(); - else this.open(); - - } - - // ---------------------- - - /*mode: function ( mode ) { - - let s = this.s; - - switch(mode){ - case 0: // base - s[1].color = this.colors.text; - //s[1].background = 'none'; - break; - case 1: // over - s[1].color = '#FFF'; - //s[1].background = UIL.SELECT; - break; - case 2: // edit / down - s[1].color = this.colors.text; - //s[1].background = UIL.SELECTDOWN; - break; - - } - },*/ - - tick ( v ) { - - this.values = v; - if( !this.isShow ) return; - this.drawGraph(); - this.upText(); - - } - - makePath ( point ) { - - let p = ''; - p += 'M ' + (-1) + ' ' + 50; - for ( let i = 0; i < this.res + 1; i ++ ) { p += ' L ' + i + ' ' + point[i]; } - p += ' L ' + (this.res + 1) + ' ' + 50; - return p; - - } - - upText ( val ) { - - let v = val || this.values, t = ''; - for( let j=0, lng =this.names.length; j'; - this.c[4].innerHTML = t; - - } - - drawGraph () { - - let svg = this.c[2]; - let i = this.names.length, v, old = 0, n = 0; - - while( i-- ){ - if( this.adding ) v = (this.values[n]+old) * this.range[n]; - else v = (this.values[n] * this.range[n]); - this.points[n].shift(); - this.points[n].push( 50 - v ); - this.setSvg( svg, 'd', this.makePath( this.points[n] ), i+1 ); - old += this.values[n]; - n++; - - } - - } - - open () { - - super.open(); - - this.h = this.hplus + this.baseH; - - this.setSvg( this.c[3], 'd', this.svgs.g2 ); - - if( this.group !== null ){ this.group.calc( this.hplus );} - else if( this.isUI ) this.main.calc( this.hplus ); - - this.s[0].height = this.h +'px'; - this.s[2].display = 'block'; - this.s[4].display = 'block'; - this.isShow = true; - - if( !this.custom ) Roots.addListen( this ); - - } - - close () { - - super.close(); - - this.h = this.baseH; - - this.setSvg( this.c[3], 'd', this.svgs.g1 ); - - if( this.group !== null ){ this.group.calc( -this.hplus );} - else if( this.isUI ) this.main.calc( -this.hplus ); - - this.s[0].height = this.h +'px'; - this.s[2].display = 'none'; - this.s[4].display = 'none'; - this.isShow = false; - - if( !this.custom ) Roots.removeListen( this ); - - this.c[4].innerHTML = ''; - - } - - - ///// AUTO FPS ////// - - begin () { - - this.startTime = this.now(); - - } - - end () { - - let time = this.now(); - this.ms = time - this.startTime; - - this.frames ++; - - if ( time > this.prevTime + 1000 ) { - - this.fps = this.round( ( this.frames * 1000 ) / ( time - this.prevTime ) ); - - this.prevTime = time; - this.frames = 0; - - if ( this.isMem ) { - - let heapSize = performance.memory.usedJSHeapSize; - let heapSizeLimit = performance.memory.jsHeapSizeLimit; - - this.mem = this.round( heapSize * 0.000000954 ); - this.mm = heapSize / heapSizeLimit; - - } - - } - - this.values = [ this.fps, this.ms , this.mm ]; - - this.drawGraph(); - this.upText( [ this.fps, this.ms, this.mem ] ); - - return time; - - } - - listening () { - - if( !this.custom ) this.startTime = this.end(); - - } - - rSize () { - - let s = this.s; - let w = this.w; - - s[3].left = ( this.sa + this.sb - 6 ) + 'px'; - - s[0].width = w + 'px'; - s[1].width = w + 'px'; - s[2].left = 10 + 'px'; - s[2].width = (w-20) + 'px'; - s[4].width = (w-20) + 'px'; - - } - - } + //Roots.isLeave = true + //Roots.needResize = true + } + close() { + super.close(); - class Graph extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value !== undefined ? o.value : [0,0,0]; - this.lng = this.value.length; - - this.precision = o.precision !== undefined ? o.precision : 2; - this.multiplicator = o.multiplicator || 1; - this.neg = o.neg || false; - - this.line = o.line !== undefined ? o.line : true; - - //if(this.neg)this.multiplicator*=2; - - this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; - this.isNumber = false; - - this.isDown = false; - - this.h = o.h || 128 + 10; - this.rh = this.h - 10; - this.top = 0; - - this.c[0].style.width = this.w +'px'; - - if( this.c[1] !== undefined ) { // with title - - this.c[1].style.width = this.w +'px'; - - if(!this.autoWidth){ - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - } - - - //this.c[1].style.background = '#ff0000'; - //this.c[1].style.textAlign = 'center'; - this.top = 10; - this.h += 10; - - } - - this.gh = this.rh - 28; - this.gw = this.w - 28; - - //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); - - //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' - this.c[2] = this.dom( 'div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:'+(this.h-20)+'px; left:14px; width:'+this.gw+'px; color:'+ this.colors.text ); - - //this.c[2].textContent = this.value; - this.c[2].innerHTML = this.valueToHtml(); - - let svg = this.dom( 'svg', this.css.basic , { viewBox:'0 0 '+this.w+' '+this.rh, width:this.w, height:this.rh, preserveAspectRatio:'none' } ); - this.setCss( svg, { width:this.w, height:this.rh, left:0, top:this.top }); - - this.dom( 'path', '', { d:'', stroke:this.colors.text, 'stroke-width':2, fill:'none', 'stroke-linecap':'butt' }, svg ); - this.dom( 'rect', '', { x:10, y:10, width:this.gw+8, height:this.gh+8, stroke:'rgba(0,0,0,0.3)', 'stroke-width':1 , fill:'none'}, svg ); - - this.iw = ((this.gw-(4*(this.lng-1)))/this.lng); - let t = []; - this.cMode = []; - - this.v = []; - - for( let i = 0; i < this.lng; i++ ){ - - t[i] = [ 14 + (i*this.iw) + (i*4), this.iw ]; - t[i][2] = t[i][0] + t[i][1]; - this.cMode[i] = 0; - - if( this.neg ) this.v[i] = ((1+(this.value[i] / this.multiplicator))*0.5); - else this.v[i] = this.value[i] / this.multiplicator; - - this.dom( 'rect', '', { x:t[i][0], y:14, width:t[i][1], height:1, fill:this.colors.text, 'fill-opacity':0.3 }, svg ); - - } - - this.tmp = t; - this.c[3] = svg; - - //console.log(this.w) - - this.init(); - - if( this.c[1] !== undefined ){ - this.c[1].style.top = 0 +'px'; - this.c[1].style.height = 20 +'px'; - this.s[1].lineHeight = (20-5)+'px'; - } - - this.update( false ); - - } - - setValue ( value ) { - - this.value = value; - this.lng = this.value.length; - for (var i = 0; i < this.lng; i++) { - if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5; - else this.v[i] = value[i] / this.multiplicator; - } - this.update(); - - } - - valueToHtml() { - - let i = this.lng, n=0, r = ''; - let w = 100 / this.lng; - let style = 'width:'+ w +'%;';//' text-align:center;' - while(i--){ - if(n===this.lng-1) r += '
    ' + this.value[n] + '
    '; - else r += '' + this.value[n] + ''; - n++; - } - return r - } - - updateSVG () { - - if( this.line ) this.setSvg( this.c[3], 'd', this.makePath(), 0 ); - - for(let i = 0; ithis.top && l.yt[i][0] && l.x this.distance ) { - let angle = Math.atan2(this.tmp.x, this.tmp.y); - this.tmp.x = Math.sin( angle ) * this.distance; - this.tmp.y = Math.cos( angle ) * this.distance; - } - - this.pos.copy( this.tmp ).divideScalar( this.distance ).negate(); - - this.update(); - - } - - setValue ( v ) { - - if(v===undefined) v=[0,0]; - - this.pos.set( v[0] || 0, v[1] || 0 ); - this.updateSVG(); - - } - - update ( up ) { - - if( up === undefined ) up = true; - - if( this.interval !== null ){ - - if( !this.isDown ){ - - this.pos.lerp( null, 0.3 ); - - this.pos.x = Math.abs( this.pos.x ) < 0.01 ? 0 : this.pos.x; - this.pos.y = Math.abs( this.pos.y ) < 0.01 ? 0 : this.pos.y; - - if( this.isUI && this.main.isCanvas ) this.main.draw(); - - } - - } - - this.updateSVG(); - - if( up ) this.send(); - - - if( this.pos.isZero() ) this.stopInterval(); - - } - - updateSVG () { - - //let x = this.radius - ( -this.pos.x * this.distance ); - //let y = this.radius - ( -this.pos.y * this.distance ); - - let x = (this.diam*0.5) - ( -this.pos.x * this.distance ); - let y = (this.diam*0.5) - ( -this.pos.y * this.distance ); - - if(this.model === 0){ - - let sx = x + ((this.pos.x)*5) + 5; - let sy = y + ((this.pos.y)*5) + 10; - - this.setSvg( this.c[3], 'cx', sx*this.ratio, 3 ); - this.setSvg( this.c[3], 'cy', sy*this.ratio, 3 ); - } else { - this.setSvg( this.c[3], 'cx', x*this.ratio, 3 ); - this.setSvg( this.c[3], 'cy', y*this.ratio, 3 ); - } - - - - this.setSvg( this.c[3], 'cx', x*this.ratio, 4 ); - this.setSvg( this.c[3], 'cy', y*this.ratio, 4 ); - - this.value[0] = ( this.pos.x * this.multiplicator ).toFixed( this.precision ) * 1; - this.value[1] = ( this.pos.y * this.multiplicator ).toFixed( this.precision ) * 1; - - if(this.haveText) this.c[2].textContent = this.value; - - } - - clear () { - - this.stopInterval(); - super.clear(); - - } - + class Joystick extends Proto { + constructor(o = {}) { + super(o); + this.autoWidth = false; + this.value = [0, 0]; + this.minw = this.w; + this.diam = o.diam || this.w; + this.joyType = 'analogique'; + this.model = o.mode !== undefined ? o.mode : 0; + this.precision = o.precision || 2; + this.multiplicator = o.multiplicator || 1; + this.pos = new V2(); + this.tmp = new V2(); + this.interval = null; + this.c[0].style.display = 'block'; + this.haveText = o.text !== undefined ? o.text : true; + + //this.radius = this.w * 0.5; + //this.distance = this.radius*0.25; + this.distance = this.diam * 0.5 * 0.25; + this.h = o.h || this.w + (this.haveText ? 10 : 0); + this.c[0].style.width = this.w + 'px'; + if (this.c[1] !== undefined) { + // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + } + let cc = this.colors; + this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); + this.c[2].textContent = this.haveText ? this.value : ''; + this.c[3] = this.getJoystick(this.model); + this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); + this.setCss(this.c[3], { + width: this.diam, + height: this.diam, + left: 0, + top: this.top + }); + this.mode(0); + this.ratio = 128 / this.w; + this.init(); + this.update(false); + } + mode(mode) { + let cc = this.colors; + switch (mode) { + case 0: + // base + if (this.model === 0) { + this.setSvg(this.c[3], 'fill', 'url(#gradIn)', 4); + this.setSvg(this.c[3], 'stroke', '#000', 4); + } else { + this.setSvg(this.c[3], 'stroke', cc.joyOut, 2); + //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.1)', 3 ); + this.setSvg(this.c[3], 'stroke', cc.joyOut, 4); + this.setSvg(this.c[3], 'fill', 'none', 4); + } + break; + case 1: + // over + if (this.model === 0) { + this.setSvg(this.c[3], 'fill', 'url(#gradIn2)', 4); + this.setSvg(this.c[3], 'stroke', 'rgba(0,0,0,0)', 4); + } else { + this.setSvg(this.c[3], 'stroke', cc.joyOver, 2); + //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.3)', 3 ); + this.setSvg(this.c[3], 'stroke', cc.joySelect, 4); + this.setSvg(this.c[3], 'fill', cc.joyOver, 4); + } + break; + } + } + + // ---------------------- + // EVENTS + // ---------------------- + + addInterval() { + if (this.interval !== null) this.stopInterval(); + if (this.pos.isZero()) return; + this.interval = setInterval(function () { + this.update(); + }.bind(this), 10); + } + stopInterval() { + if (this.interval === null) return; + clearInterval(this.interval); + this.interval = null; + } + reset() { + this.addInterval(); + this.mode(0); + } + mouseup(e) { + this.addInterval(); + this.isDown = false; + } + mousedown(e) { + this.isDown = true; + this.mousemove(e); + this.mode(2); + } + mousemove(e) { + this.mode(1); + if (!this.isDown) return; + + //this.tmp.x = this.radius - ( e.clientX - this.zone.x ); + //this.tmp.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + this.tmp.x = this.w * 0.5 - (e.clientX - this.zone.x); + this.tmp.y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); + let distance = this.tmp.length(); + if (distance > this.distance) { + let angle = Math.atan2(this.tmp.x, this.tmp.y); + this.tmp.x = Math.sin(angle) * this.distance; + this.tmp.y = Math.cos(angle) * this.distance; + } + this.pos.copy(this.tmp).divideScalar(this.distance).negate(); + this.update(); + } + setValue(v) { + if (v === undefined) v = [0, 0]; + this.pos.set(v[0] || 0, v[1] || 0); + this.updateSVG(); + } + update(up) { + if (up === undefined) up = true; + if (this.interval !== null) { + if (!this.isDown) { + this.pos.lerp(null, 0.3); + this.pos.x = Math.abs(this.pos.x) < 0.01 ? 0 : this.pos.x; + this.pos.y = Math.abs(this.pos.y) < 0.01 ? 0 : this.pos.y; + if (this.isUI && this.main.isCanvas) this.main.draw(); + } + } + this.updateSVG(); + if (up) this.send(); + if (this.pos.isZero()) this.stopInterval(); + } + updateSVG() { + //let x = this.radius - ( -this.pos.x * this.distance ); + //let y = this.radius - ( -this.pos.y * this.distance ); + + let x = this.diam * 0.5 - -this.pos.x * this.distance; + let y = this.diam * 0.5 - -this.pos.y * this.distance; + if (this.model === 0) { + let sx = x + this.pos.x * 5 + 5; + let sy = y + this.pos.y * 5 + 10; + this.setSvg(this.c[3], 'cx', sx * this.ratio, 3); + this.setSvg(this.c[3], 'cy', sy * this.ratio, 3); + } else { + this.setSvg(this.c[3], 'cx', x * this.ratio, 3); + this.setSvg(this.c[3], 'cy', y * this.ratio, 3); + } + this.setSvg(this.c[3], 'cx', x * this.ratio, 4); + this.setSvg(this.c[3], 'cy', y * this.ratio, 4); + this.value[0] = (this.pos.x * this.multiplicator).toFixed(this.precision) * 1; + this.value[1] = (this.pos.y * this.multiplicator).toFixed(this.precision) * 1; + if (this.haveText) this.c[2].textContent = this.value; + } + clear() { + this.stopInterval(); + super.clear(); + } } - class Knob extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.isCyclic = o.cyclic || false; - this.model = o.stype || 0; - if( o.mode !== undefined ) this.model = o.mode; - - this.autoWidth = false; - - this.setTypeNumber( o ); - - this.minw = this.w; - this.diam = o.diam || this.w; - - this.mPI = Math.PI * 0.8; - this.toDeg = 180 / Math.PI; - this.cirRange = this.mPI * 2; - - this.offset = new V2(); - - this.h = o.h || this.w + 10; - - this.c[0].style.width = this.w +'px'; - this.c[0].style.display = 'block'; - - if(this.c[1] !== undefined) { - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - - } - - this.percent = 0; - - this.cmode = 0; - let cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); - - this.c[3] = this.getKnob(); - this.setSvg( this.c[3], 'fill', cc.button, 0 ); - this.setSvg( this.c[3], 'stroke', cc.text, 1 ); - this.setSvg( this.c[3], 'stroke', cc.text, 3 ); - this.setSvg( this.c[3], 'd', this.makeGrad(), 3 ); - - this.setSvg( this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam ); - this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); - - if ( this.model > 0 ) { - - Tools.dom( 'path', '', { d: '', stroke:cc.text, 'stroke-width': 2, fill: 'none', 'stroke-linecap': 'round' }, this.c[3] ); //4 - - if ( this.model == 2) { - - Tools.addSVGGlowEffect(); - this.setSvg( this.c[3], 'style', 'filter: url("#UILGlow");', 4 ); - - } - - } - - this.r = 0; - - this.init(); - - this.update(); - - } - - mode ( mode ) { - - let cc = this.colors; - - if( this.cmode === mode ) return false; - - switch( mode ) { - case 0: // base - this.s[2].color = cc.text; - this.setSvg( this.c[3], 'fill', cc.button, 0); - //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); - this.setSvg( this.c[3], 'stroke', cc.text, 1 ); - break; - case 1: // down - this.s[2].color = cc.textOver; - this.setSvg( this.c[3], 'fill', cc.select, 0); - //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); - this.setSvg( this.c[3], 'stroke', cc.textOver, 1 ); - break; - } - - this.cmode = mode; - return true; - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'knob'; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.sendEnd(); - return this.mode(0) - - } - - mousedown ( e ) { - - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove( e ); - return this.mode(1) - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - let off = this.offset; - - //off.x = this.radius - ( e.clientX - this.zone.x ); - //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); - - off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); - off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - this.r = - Math.atan2( off.x, off.y ); - - if( this.oldr !== null ) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; - - this.r = this.r > this.mPI ? this.mPI : this.r; - this.r = this.r < -this.mPI ? -this.mPI : this.r; - - let steps = 1 / this.cirRange; - let value = (this.r + this.mPI) * steps; - - let n = ( ( this.range * value ) + this.min ) - this.old; - - if(n >= this.step || n <= this.step){ - n = Math.floor( n / this.step ); - this.value = this.numValue( this.old + ( n * this.step ) ); - this.update( true ); - this.old = this.value; - this.oldr = this.r; - } - - } - - wheel ( e ) { - - let name = this.testZone( e ); - - if( name === 'knob' ) { - - let v = this.value - this.step * e.delta; - - if ( v > this.max ) { - v = this.isCyclic ? this.min : this.max; - } else if ( v < this.min ) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue( v ); - this.old = v; - this.update( true ); - - return true; - - } - return false; - - } - - makeGrad () { - - let d = '', step, range, a, x, y, x2, y2, r = 64; - let startangle = Math.PI + this.mPI; - let endangle = Math.PI - this.mPI; - //let step = this.step>5 ? this.step : 1; - - if(this.step>5){ - range = this.range / this.step; - step = ( startangle - endangle ) / range; - } else { - step = (( startangle - endangle ) / r)*2; - range = r*0.5; - } - - for ( let i = 0; i <= range; ++i ) { - - a = startangle - ( step * i ); - x = r + Math.sin( a ) * ( r - 20 ); - y = r + Math.cos( a ) * ( r - 20 ); - x2 = r + Math.sin( a ) * ( r - 24 ); - y2 = r + Math.cos( a ) * ( r - 24 ); - d += 'M' + x + ' ' + y + ' L' + x2 + ' '+y2 + ' '; - - } - - return d; - - } - - update ( up ) { - - this.c[2].textContent = this.value; - this.percent = (this.value - this.min) / this.range; - - let sa = Math.PI + this.mPI; - let ea = ( ( this.percent * this.cirRange ) - ( this.mPI ) ); - - let sin = Math.sin( ea ); - let cos = Math.cos( ea ); - - let x1 = ( 25 * sin ) + 64; - let y1 = -( 25 * cos ) + 64; - let x2 = ( 20 * sin ) + 64; - let y2 = -( 20 * cos ) + 64; - - this.setSvg( this.c[3], 'd', 'M ' + x1 +' ' + y1 + ' L ' + x2 +' ' + y2, 1 ); - - if ( this.model > 0 ) { - - let x1 = 36 * Math.sin( sa ) + 64; - let y1 = 36 * Math.cos( sa ) + 64; - let x2 = 36 * sin + 64; - let y2 = -36 * cos + 64; - let big = ea <= Math.PI - this.mPI ? 0 : 1; - this.setSvg( this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4 ); - - let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( this.colors.text, -0.75) ), Tools.unpack( this.colors.text ), this.percent ) ); - this.setSvg( this.c[3], 'stroke', color, 4 ); - - } - - if( up ) this.send(); - - } - + class Knob extends Proto { + constructor(o = {}) { + super(o); + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + this.autoWidth = false; + this.setTypeNumber(o); + this.minw = this.w; + this.diam = o.diam || this.w; + this.mPI = Math.PI * 0.8; + this.toDeg = 180 / Math.PI; + this.cirRange = this.mPI * 2; + this.offset = new V2(); + this.h = o.h || this.w + 10; + this.c[0].style.width = this.w + 'px'; + this.c[0].style.display = 'block'; + if (this.c[1] !== undefined) { + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + } + this.percent = 0; + this.cmode = 0; + let cc = this.colors; + this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); + this.c[3] = this.getKnob(); + this.setSvg(this.c[3], 'fill', cc.button, 0); + this.setSvg(this.c[3], 'stroke', cc.text, 1); + this.setSvg(this.c[3], 'stroke', cc.text, 3); + this.setSvg(this.c[3], 'd', this.makeGrad(), 3); + this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); + this.setCss(this.c[3], { + width: this.diam, + height: this.diam, + left: 0, + top: this.top + }); + if (this.model > 0) { + Tools.dom('path', '', { + d: '', + stroke: cc.text, + 'stroke-width': 2, + fill: 'none', + 'stroke-linecap': 'round' + }, this.c[3]); //4 + + if (this.model == 2) { + Tools.addSVGGlowEffect(); + this.setSvg(this.c[3], 'style', 'filter: url("#UILGlow");', 4); + } + } + this.r = 0; + this.init(); + this.update(); + } + mode(mode) { + let cc = this.colors; + if (this.cmode === mode) return false; + switch (mode) { + case 0: + // base + this.s[2].color = cc.text; + this.setSvg(this.c[3], 'fill', cc.button, 0); + //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); + this.setSvg(this.c[3], 'stroke', cc.text, 1); + break; + case 1: + // down + this.s[2].color = cc.textOver; + this.setSvg(this.c[3], 'fill', cc.select, 0); + //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); + this.setSvg(this.c[3], 'stroke', cc.textOver, 1); + break; + } + this.cmode = mode; + return true; + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'knob'; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + this.isDown = false; + this.sendEnd(); + return this.mode(0); + } + mousedown(e) { + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove(e); + return this.mode(1); + } + mousemove(e) { + if (!this.isDown) return; + let off = this.offset; + + //off.x = this.radius - ( e.clientX - this.zone.x ); + //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + off.x = this.w * 0.5 - (e.clientX - this.zone.x); + off.y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); + this.r = -Math.atan2(off.x, off.y); + if (this.oldr !== null) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; + this.r = this.r > this.mPI ? this.mPI : this.r; + this.r = this.r < -this.mPI ? -this.mPI : this.r; + let steps = 1 / this.cirRange; + let value = (this.r + this.mPI) * steps; + let n = this.range * value + this.min - this.old; + if (n >= this.step || n <= this.step) { + n = Math.floor(n / this.step); + this.value = this.numValue(this.old + n * this.step); + this.update(true); + this.old = this.value; + this.oldr = this.r; + } + } + wheel(e) { + let name = this.testZone(e); + if (name === 'knob') { + let v = this.value - this.step * e.delta; + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } + this.setValue(v); + this.old = v; + this.update(true); + return true; + } + return false; + } + makeGrad() { + let d = '', + step, + range, + a, + x, + y, + x2, + y2, + r = 64; + let startangle = Math.PI + this.mPI; + let endangle = Math.PI - this.mPI; + //let step = this.step>5 ? this.step : 1; + + if (this.step > 5) { + range = this.range / this.step; + step = (startangle - endangle) / range; + } else { + step = (startangle - endangle) / r * 2; + range = r * 0.5; + } + for (let i = 0; i <= range; ++i) { + a = startangle - step * i; + x = r + Math.sin(a) * (r - 20); + y = r + Math.cos(a) * (r - 20); + x2 = r + Math.sin(a) * (r - 24); + y2 = r + Math.cos(a) * (r - 24); + d += 'M' + x + ' ' + y + ' L' + x2 + ' ' + y2 + ' '; + } + return d; + } + update(up) { + this.c[2].textContent = this.value; + this.percent = (this.value - this.min) / this.range; + let sa = Math.PI + this.mPI; + let ea = this.percent * this.cirRange - this.mPI; + let sin = Math.sin(ea); + let cos = Math.cos(ea); + let x1 = 25 * sin + 64; + let y1 = -(25 * cos) + 64; + let x2 = 20 * sin + 64; + let y2 = -(20 * cos) + 64; + this.setSvg(this.c[3], 'd', 'M ' + x1 + ' ' + y1 + ' L ' + x2 + ' ' + y2, 1); + if (this.model > 0) { + let x1 = 36 * Math.sin(sa) + 64; + let y1 = 36 * Math.cos(sa) + 64; + let x2 = 36 * sin + 64; + let y2 = -36 * cos + 64; + let big = ea <= Math.PI - this.mPI ? 0 : 1; + this.setSvg(this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4); + let color = Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(this.colors.text, -0.75)), Tools.unpack(this.colors.text), this.percent)); + this.setSvg(this.c[3], 'stroke', color, 4); + } + if (up) this.send(); + } } - class List extends Proto { - - constructor( o = {} ) { - - super( o ); - - // TODO not work - this.hideCurrent = false; - - // images - this.path = o.path || ''; - this.format = o.format || ''; - - - this.isWithImage = this.path !== '' ? true:false; - this.preLoadComplete = false; - - this.tmpImage = {}; - this.tmpUrl = []; - - this.m = o.m !== undefined ? o.m : 5; - - - let align = o.align || 'left'; - - // scroll size - let ss = o.scrollSize || 10; - this.ss = ss+1; - - this.sMode = 0; - this.tMode = 0; - - this.listOnly = o.listOnly || false; - this.staticTop = o.staticTop || false; - - this.isSelectable = this.listOnly; - if( o.select !== undefined ) o.selectable = o.select; - if( o.selectable !== undefined ) this.isSelectable = o.selectable; - - if( this.txt === '' ) this.p = 0; - - - let fltop = Math.floor(this.h*0.5)-3; - let cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.basic + 'top:0; display:none; border-radius:'+this.radius+'px;' ); - this.c[3] = this.dom( 'div', this.css.item + 'padding:0px '+this.m+'px; margin-bottom:0px; position:absolute; justify-content:'+align+'; text-align:'+align+'; line-height:'+(this.h-4)+'px; top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:1px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); - - this.scrollerBack = this.dom( 'div', this.css.basic + 'right:0px; width:'+ss+'px; background:'+cc.back+'; display:none;'); - this.scroller = this.dom( 'div', this.css.basic + 'right:'+((ss-(ss*0.25))*0.5)+'px; width:'+(ss*0.25)+'px; background:'+cc.text+'; display:none; '); - - this.c[3].style.color = cc.text; - - - this.list = []; - this.refObject = null; - - if( o.list ){ - if( o.list instanceof Array ){ - this.list = o.list; - } else if( o.list instanceof Object ){ - this.refObject = o.list; - for( let g in this.refObject ) this.list.push( g ); - } - } - - this.items = []; - - this.prevName = ''; - - - this.tmpId = 0; - - this.baseH = this.h; - - this.itemHeight = o.itemHeight || this.h;//(this.h-3); - - // force full list - this.full = o.full || false; - - this.py = 0; - this.ww = this.sb; - this.scroll = false; - this.isDown = false; - - this.current = null; - - // list up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - - if( this.up ){ - - this.c[2].style.top = 'auto'; - this.c[3].style.top = 'auto'; - this.c[4].style.top = 'auto'; - - this.c[2].style.bottom = this.h-2 + 'px'; - this.c[3].style.bottom = '1px'; - this.c[4].style.bottom = fltop + 'px'; - - } else { - this.c[2].style.top = this.baseH + 'px'; - } - - this.listIn = this.dom( 'div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); - this.listIn.name = 'list'; - - this.topList = 0; - - this.c[2].appendChild( this.listIn ); - this.c[2].appendChild( this.scrollerBack ); - this.c[2].appendChild( this.scroller ); - - if( o.value !== undefined ){ - if(!isNaN(o.value)) this.value = this.list[ o.value ]; - else this.value = o.value; - }else { - this.value = this.list[0]; - } - - this.isOpenOnStart = o.open || false; - - if( this.listOnly ){ - this.baseH = 5; - this.c[3].style.display = 'none'; - this.c[4].style.display = 'none'; - this.c[2].style.top = this.baseH+'px'; - this.isOpenOnStart = true; - } - - - this.miniCanvas = o.miniCanvas || false; - this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; - this.imageSize = o.imageSize || [20,20]; - - // dragout function - this.drag = o.drag || false; - this.dragout = o.dragout || false; - this.dragstart = o.dragstart || null; - this.dragend = o.dragend || null; - - - - //this.c[0].style.background = '#FF0000' - ///if( this.isWithImage ) this.preloadImage(); - - this.setList( this.list ); - this.init(); - if( this.isWithImage ) this.preloadImage(); - if( this.isOpenOnStart ) this.open( true ); - - this.baseH += this.mtop; - - } - - // image list - - preloadImage () { - - - - this.preLoadComplete = false; - - this.tmpImage = {}; - for( let i=0; i this.h - this.baseH ) return 'title'; - else { - if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; - if(l.x > this.sa) return this.testItems( l.y-this.baseH ); - } - - } else { - if( l.y < this.baseH+2 ) return 'title'; - else { - if( this.isOpen ){ - if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; - if(l.x > this.sa) return this.testItems( l.y-this.baseH ); - } - } - - } - - return ''; - - } - - testItems ( y ) { - - let name = ''; - - let items = this.items; - - /*if(this.hideCurrent){ - //items = [...this.items] - items = this.items.slice(this.tmpId) - - }*/ - - let i = items.length, item, a, b; - while(i--){ - item = items[i]; - a = item.posy + this.topList; - b = item.posy + this.itemHeight + 1 + this.topList; - if( y >= a && y <= b ){ - name = 'item' + i; - this.modeItem(0); - this.current = item; - this.modeItem(1); - return name; - } - - } - - return name; - - } - - modeItem ( mode ) { - - if( !this.current ) return - - if( this.current.select && mode===0) mode = 2; - let cc = this.colors; - - switch( mode ){ - - case 0: // base - this.current.style.background = cc.back; - this.current.style.color = cc.text; - break; - case 1: // over - this.current.style.background = cc.over; - this.current.style.color = cc.textOver; - break; - case 2: // edit / down - this.current.style.background = cc.select; - this.current.style.color = cc.textSelect; - break; - - } - } - - unSelected() { - - if( !this.current ) return - this.modeItem(0); - this.current = null; - - } - - selected() { - - if( !this.current ) return - this.resetItems(); - this.modeItem(2); - this.current.select = true; - - - - } - - resetItems() { - - let i = this.items.length; - while(i--){ - this.items[i].select = false; - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text; - } - - } - - hideActive() { - - if( !this.hideCurrent ) return - //if( !this.current ) return - if( this.current )this.tmpId = this.current.id; - this.resetHide(); - //this.items[this.tmpId].style.height = 0+'px' - - } - - resetHide() { - - console.log(this.tmpId); - - let i = this.items.length; - while(i--){ - if(i===this.tmpId){ - this.items[i].style.height = 0+'px'; - this.items[i].posy = -1; - } else { - this.items[i].style.height = this.itemHeight+'px'; - this.items[i].posy = (this.itemHeight+1)*(i-1); - } - //this.items[i].style.display = 'flex' - - /*this.items[i].select = false - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text;*/ - } - - } - - // ---------------------- - // EVENTS - // ---------------------- - - - mouseup ( e ) { - - this.isDown = false; - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false; - - if( name === 'scroll' ){ - - this.isDown = true; - this.mousemove( e ); - - } else if( name === 'title' ){ - - this.modeTitle(2); - if( !this.listOnly ){ - this.hideActive(); - if( !this.isOpen ) this.open(); - else this.close(); - } - } else { - // is item - if( this.current ){ - - this.value = this.list[ this.current.id ]; - //this.tmpId = this.current.id - - if( this.isSelectable ) this.selected(); - - //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); - this.send( this.value ); - - if( !this.listOnly ) { - this.close(); - this.setTopItem(); - //this.hideActive() - } - } - - } - - return true; - - } - - mousemove ( e ) { - - let nup = false; - let name = this.testZone( e ); - - if( !name ) return nup; - - if( name === 'title' ){ - this.unSelected(); - this.modeTitle(1); - this.cursor('pointer'); - - } else if( name === 'scroll' ){ - - this.cursor('s-resize'); - this.modeScroll(1); - if( this.isDown ){ - this.modeScroll(2); - //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - let top = this.zone.y+this.baseH-2; - this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - } - //if(this.isDown) this.listmove(e); - } else { - - // is item - this.modeTitle(0); - this.modeScroll(0); - this.cursor('pointer'); - - } - - if( name !== this.prevName ) nup = true; - this.prevName = name; - - return nup; - - } - - wheel ( e ) { - - let name = this.testZone( e ); - if( name === 'title' ) return false; - this.py += e.delta*10; - this.update(this.py); - return true; - - } - - - - // ---------------------- - - reset () { - - this.prevName = ''; - this.unSelected(); - this.modeTitle(0); - this.modeScroll(0); - - //console.log('this is reset') - - } - - modeScroll ( mode ) { - - if( mode === this.sMode ) return; - - let s = this.scroller.style; - let cc = this.colors; - - switch(mode){ - case 0: // base - s.background = cc.text; - break; - case 1: // over - s.background = cc.select; - break; - case 2: // edit / down - s.background = cc.select; - break; - - } - - this.sMode = mode; - } - - modeTitle ( mode ) { - - if( mode === this.tMode ) return; - - let s = this.s; - let cc = this.colors; - - switch(mode){ - case 0: // base - s[3].color = cc.text; - s[3].background = cc.button; - break; - case 1: // over - s[3].color = cc.textOver; - s[3].background = cc.overoff; - break; - case 2: // edit / down - s[3].color = cc.textSelect; - s[3].background = cc.overoff; - break; - - } - - this.tMode = mode; - - } - - clearList () { - - while ( this.listIn.children.length ) this.listIn.removeChild( this.listIn.lastChild ); - this.items = []; - - } - - setList ( list ) { - - this.clearList(); - - this.list = list; - this.length = this.list.length; - - let lng = this.hideCurrent? this.length-1 : this.length; - - this.maxItem = this.full ? lng : 5; - this.maxItem = lng < this.maxItem ? lng : this.maxItem; - - this.maxHeight = this.maxItem * (this.itemHeight+1) + 2; - - - - this.max = lng * (this.itemHeight+1) + 2; - this.ratio = this.maxHeight / this.max; - this.sh = this.maxHeight * this.ratio; - this.range = this.maxHeight - this.sh; - - this.c[2].style.height = this.maxHeight + 'px'; - this.scrollerBack.style.height = this.maxHeight + 'px'; - this.scroller.style.height = this.sh + 'px'; - - if( this.max > this.maxHeight ){ - this.ww = this.sb - this.ss; - this.scroll = true; - } - - if( this.miniCanvas ) { - - this.tmpCanvas = document.createElement('canvas'); - this.tmpCanvas.width = this.imageSize[0]; - this.tmpCanvas.height = this.imageSize[1]; - this.tmpCtx = this.tmpCanvas.getContext("2d"); - this.tmpCtx.fillStyle = this.canvasBg; - this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); - - } - - let item, n;//, l = this.sb; - for( let i=0; i this.range ? this.range : y; - - this.topList = -Math.floor( y / this.ratio ); - - this.listIn.style.top = this.topList+'px'; - this.scroller.style.top = Math.floor( y ) + 'px'; - - this.py = y; - - } - - parentHeight ( t ) { - - if ( this.group !== null ) this.group.calc( t ); - else if ( this.isUI ) this.main.calc( t ); - - } - - open ( first ) { - - super.open(); - - this.update( 0 ); - - this.h = this.maxHeight + this.baseH + 5; - if( !this.scroll ){ - this.topList = 0; - this.h = this.baseH + 5 + this.max; - this.scroller.style.display = 'none'; - this.scrollerBack.style.display = 'none'; - } else { - this.scroller.style.display = 'block'; - this.scrollerBack.style.display = 'block'; - } - this.s[0].height = this.h + 'px'; - this.s[2].display = 'block'; - - if( this.up ){ - this.zone.y -= this.h - (this.baseH-10); - this.setSvg( this.c[4], 'd', this.svgs.g1 ); - } else { - this.setSvg( this.c[4], 'd', this.svgs.g2 ); - } - - this.rSizeContent(); - - let t = this.h - this.baseH; - - this.zone.h = this.h; - - if(!first) this.parentHeight( t ); - - } - - close () { - - super.close(); - - if( this.up ) this.zone.y += this.h - (this.baseH-10); - - let t = this.h - this.baseH; - - this.h = this.baseH; - this.s[0].height = this.h + 'px'; - this.s[2].display = 'none'; - this.setSvg( this.c[4], 'd', this.svgs.g1 ); - - this.zone.h = this.h; - - this.parentHeight( -t ); - - } - - // ----- - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSizeContent () { - - let i = this.length; - while(i--) this.listIn.children[i].style.width = this.ww + 'px'; - - } - - rSize () { - - super.rSize(); - - //Proto.prototype.rSize.call( this ); - - let s = this.s; - let w = this.sb; - let d = this.sa; - - if(s[2]=== undefined) return; - - s[2].width = w + 'px'; - s[2].left = d +'px'; - - s[3].width = w + 'px'; - s[3].left = d + 'px'; - - s[4].left = d + w - 15 + 'px'; - - this.ww = w; - if( this.max > this.maxHeight ) this.ww = w-this.ss; - if(this.isOpen) this.rSizeContent(); - - } - + class List extends Proto { + constructor(o = {}) { + super(o); + + // TODO not work + this.hideCurrent = false; + + // images + this.path = o.path || ''; + this.format = o.format || ''; + this.isWithImage = this.path !== '' ? true : false; + this.preLoadComplete = false; + this.tmpImage = {}; + this.tmpUrl = []; + this.m = o.m !== undefined ? o.m : 5; + let align = o.align || 'left'; + + // scroll size + let ss = o.scrollSize || 10; + this.ss = ss + 1; + this.sMode = 0; + this.tMode = 0; + this.listOnly = o.listOnly || false; + this.staticTop = o.staticTop || false; + this.isSelectable = this.listOnly; + if (o.select !== undefined) o.selectable = o.select; + if (o.selectable !== undefined) this.isSelectable = o.selectable; + if (this.txt === '') this.p = 0; + let fltop = Math.floor(this.h * 0.5) - 3; + let cc = this.colors; + this.c[2] = this.dom('div', this.css.basic + 'top:0; display:none; border-radius:' + this.radius + 'px;'); + this.c[3] = this.dom('div', this.css.item + 'padding:0px ' + this.m + 'px; margin-bottom:0px; position:absolute; justify-content:' + align + '; text-align:' + align + '; line-height:' + (this.h - 4) + 'px; top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:1px solid ' + cc.border + '; border-radius:' + this.radius + 'px;'); + this.c[4] = this.dom('path', this.css.basic + 'position:absolute; width:6px; height:6px; top:' + fltop + 'px;', { + d: this.svgs.g1, + fill: cc.text, + stroke: 'none' + }); + this.scrollerBack = this.dom('div', this.css.basic + 'right:0px; width:' + ss + 'px; background:' + cc.back + '; display:none;'); + this.scroller = this.dom('div', this.css.basic + 'right:' + (ss - ss * 0.25) * 0.5 + 'px; width:' + ss * 0.25 + 'px; background:' + cc.text + '; display:none; '); + this.c[3].style.color = cc.text; + this.list = []; + this.refObject = null; + if (o.list) { + if (o.list instanceof Array) { + this.list = o.list; + } else if (o.list instanceof Object) { + this.refObject = o.list; + for (let g in this.refObject) this.list.push(g); + } + } + this.items = []; + this.prevName = ''; + this.tmpId = 0; + this.baseH = this.h; + this.itemHeight = o.itemHeight || this.h; //(this.h-3); + + // force full list + this.full = o.full || false; + this.py = 0; + this.ww = this.sb; + this.scroll = false; + this.isDown = false; + this.current = null; + + // list up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + if (this.up) { + this.c[2].style.top = 'auto'; + this.c[3].style.top = 'auto'; + this.c[4].style.top = 'auto'; + this.c[2].style.bottom = this.h - 2 + 'px'; + this.c[3].style.bottom = '1px'; + this.c[4].style.bottom = fltop + 'px'; + } else { + this.c[2].style.top = this.baseH + 'px'; + } + this.listIn = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); + this.listIn.name = 'list'; + this.topList = 0; + this.c[2].appendChild(this.listIn); + this.c[2].appendChild(this.scrollerBack); + this.c[2].appendChild(this.scroller); + if (o.value !== undefined) { + if (!isNaN(o.value)) this.value = this.list[o.value];else this.value = o.value; + } else { + this.value = this.list[0]; + } + this.isOpenOnStart = o.open || false; + if (this.listOnly) { + this.baseH = 5; + this.c[3].style.display = 'none'; + this.c[4].style.display = 'none'; + this.c[2].style.top = this.baseH + 'px'; + this.isOpenOnStart = true; + } + this.miniCanvas = o.miniCanvas || false; + this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; + this.imageSize = o.imageSize || [20, 20]; + + // dragout function + this.drag = o.drag || false; + this.dragout = o.dragout || false; + this.dragstart = o.dragstart || null; + this.dragend = o.dragend || null; + + //this.c[0].style.background = '#FF0000' + ///if( this.isWithImage ) this.preloadImage(); + + this.setList(this.list); + this.init(); + if (this.isWithImage) this.preloadImage(); + if (this.isOpenOnStart) this.open(true); + this.baseH += this.mtop; + } + + // image list + + preloadImage() { + this.preLoadComplete = false; + this.tmpImage = {}; + for (let i = 0; i < this.list.length; i++) this.tmpUrl.push(this.list[i]); + this.loadOne(); + } + nextImg() { + if (this.c === null) return; + this.tmpUrl.shift(); + if (this.tmpUrl.length === 0) { + this.preLoadComplete = true; + this.addImages(); + /*this.setList( this.list ); + this.init(); + if( this.isOpenOnStart ) this.open();*/ + } else this.loadOne(); + } + loadOne() { + let self = this; + let name = this.tmpUrl[0]; + let img = document.createElement('img'); + img.style.cssText = 'position:absolute; width:' + self.imageSize[0] + 'px; height:' + self.imageSize[1] + 'px'; + img.setAttribute('src', this.path + name + this.format); + img.addEventListener('load', function () { + self.imageSize[2] = img.width; + self.imageSize[3] = img.height; + self.tmpImage[name] = img; + self.nextImg(); + }); + } + + // + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (this.up && this.isOpen) { + if (l.y > this.h - this.baseH) return 'title';else { + if (this.scroll && l.x > this.sa + this.sb - this.ss) return 'scroll'; + if (l.x > this.sa) return this.testItems(l.y - this.baseH); + } + } else { + if (l.y < this.baseH + 2) return 'title';else { + if (this.isOpen) { + if (this.scroll && l.x > this.sa + this.sb - this.ss) return 'scroll'; + if (l.x > this.sa) return this.testItems(l.y - this.baseH); + } + } + } + return ''; + } + testItems(y) { + let name = ''; + let items = this.items; + + /*if(this.hideCurrent){ + //items = [...this.items] + items = this.items.slice(this.tmpId) + }*/ + + let i = items.length, + item, + a, + b; + while (i--) { + item = items[i]; + a = item.posy + this.topList; + b = item.posy + this.itemHeight + 1 + this.topList; + if (y >= a && y <= b) { + name = 'item' + i; + this.modeItem(0); + this.current = item; + this.modeItem(1); + return name; + } + } + return name; + } + modeItem(mode) { + if (!this.current) return; + if (this.current.select && mode === 0) mode = 2; + let cc = this.colors; + switch (mode) { + case 0: + // base + this.current.style.background = cc.back; + this.current.style.color = cc.text; + break; + case 1: + // over + this.current.style.background = cc.over; + this.current.style.color = cc.textOver; + break; + case 2: + // edit / down + this.current.style.background = cc.select; + this.current.style.color = cc.textSelect; + break; + } + } + unSelected() { + if (!this.current) return; + this.modeItem(0); + this.current = null; + } + selected() { + if (!this.current) return; + this.resetItems(); + this.modeItem(2); + this.current.select = true; + } + resetItems() { + let i = this.items.length; + while (i--) { + this.items[i].select = false; + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text; + } + } + hideActive() { + if (!this.hideCurrent) return; + //if( !this.current ) return + if (this.current) this.tmpId = this.current.id; + this.resetHide(); + //this.items[this.tmpId].style.height = 0+'px' + } + resetHide() { + console.log(this.tmpId); + let i = this.items.length; + while (i--) { + if (i === this.tmpId) { + this.items[i].style.height = 0 + 'px'; + this.items[i].posy = -1; + } else { + this.items[i].style.height = this.itemHeight + 'px'; + this.items[i].posy = (this.itemHeight + 1) * (i - 1); + } + //this.items[i].style.display = 'flex' + + /*this.items[i].select = false + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text;*/ + } + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + this.isDown = false; + } + mousedown(e) { + let name = this.testZone(e); + if (!name) return false; + if (name === 'scroll') { + this.isDown = true; + this.mousemove(e); + } else if (name === 'title') { + this.modeTitle(2); + if (!this.listOnly) { + this.hideActive(); + if (!this.isOpen) this.open();else this.close(); + } + } else { + // is item + if (this.current) { + this.value = this.list[this.current.id]; + //this.tmpId = this.current.id + + if (this.isSelectable) this.selected(); + + //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); + this.send(this.value); + if (!this.listOnly) { + this.close(); + this.setTopItem(); + //this.hideActive() + } + } + } + return true; + } + mousemove(e) { + let nup = false; + let name = this.testZone(e); + if (!name) return nup; + if (name === 'title') { + this.unSelected(); + this.modeTitle(1); + this.cursor('pointer'); + } else if (name === 'scroll') { + this.cursor('s-resize'); + this.modeScroll(1); + if (this.isDown) { + this.modeScroll(2); + //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + let top = this.zone.y + this.baseH - 2; + this.update(e.clientY - top - this.sh * 0.5); + } + //if(this.isDown) this.listmove(e); + } else { + // is item + this.modeTitle(0); + this.modeScroll(0); + this.cursor('pointer'); + } + if (name !== this.prevName) nup = true; + this.prevName = name; + return nup; + } + wheel(e) { + let name = this.testZone(e); + if (name === 'title') return false; + this.py += e.delta * 10; + this.update(this.py); + return true; + } + + // ---------------------- + + reset() { + this.prevName = ''; + this.unSelected(); + this.modeTitle(0); + this.modeScroll(0); + + //console.log('this is reset') + } + modeScroll(mode) { + if (mode === this.sMode) return; + let s = this.scroller.style; + let cc = this.colors; + switch (mode) { + case 0: + // base + s.background = cc.text; + break; + case 1: + // over + s.background = cc.select; + break; + case 2: + // edit / down + s.background = cc.select; + break; + } + this.sMode = mode; + } + modeTitle(mode) { + if (mode === this.tMode) return; + let s = this.s; + let cc = this.colors; + switch (mode) { + case 0: + // base + s[3].color = cc.text; + s[3].background = cc.button; + break; + case 1: + // over + s[3].color = cc.textOver; + s[3].background = cc.overoff; + break; + case 2: + // edit / down + s[3].color = cc.textSelect; + s[3].background = cc.overoff; + break; + } + this.tMode = mode; + } + clearList() { + while (this.listIn.children.length) this.listIn.removeChild(this.listIn.lastChild); + this.items = []; + } + setList(list) { + this.clearList(); + this.list = list; + this.length = this.list.length; + let lng = this.hideCurrent ? this.length - 1 : this.length; + this.maxItem = this.full ? lng : 5; + this.maxItem = lng < this.maxItem ? lng : this.maxItem; + this.maxHeight = this.maxItem * (this.itemHeight + 1) + 2; + this.max = lng * (this.itemHeight + 1) + 2; + this.ratio = this.maxHeight / this.max; + this.sh = this.maxHeight * this.ratio; + this.range = this.maxHeight - this.sh; + this.c[2].style.height = this.maxHeight + 'px'; + this.scrollerBack.style.height = this.maxHeight + 'px'; + this.scroller.style.height = this.sh + 'px'; + if (this.max > this.maxHeight) { + this.ww = this.sb - this.ss; + this.scroll = true; + } + if (this.miniCanvas) { + this.tmpCanvas = document.createElement('canvas'); + this.tmpCanvas.width = this.imageSize[0]; + this.tmpCanvas.height = this.imageSize[1]; + this.tmpCtx = this.tmpCanvas.getContext("2d"); + this.tmpCtx.fillStyle = this.canvasBg; + this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); + } + let item, n; //, l = this.sb; + for (let i = 0; i < this.length; i++) { + n = this.list[i]; + item = this.dom('div', this.css.item + 'padding:0px ' + (this.m + 1) + 'px; width:' + this.ww + 'px; height:' + this.itemHeight + 'px; line-height:' + (this.itemHeight - 2) + 'px; color:' + this.colors.text + '; background:' + this.colors.back + ';'); + item.name = 'item' + i; + item.id = i; + item.select = false; + item.posy = (this.itemHeight + 1) * i; + this.listIn.appendChild(item); + this.items.push(item); + if (n === this.value) this.current = item; + + //if( this.isWithImage ) item.appendChild( this.tmpImage[n] ); + if (!this.isWithImage) item.textContent = n; + if (this.miniCanvas) { + let c = new Image(); + c.src = this.tmpCanvas.toDataURL(); + + //item.style.marginLeft = (this.imageSize[0]+8)+'px' + + /*let c = document.createElement('canvas') + c.width = this.imageSize[0] + c.height = this.imageSize[1] + let ctx = c.getContext("2d") + ctx.fillStyle = this.canvasBg + ctx.fillRect(0, 0, this.imageSize[0], this.imageSize[1])*/ + + //c.style.cssText = 'position:relative; pointer-events:none; display:inline-block; float:left; margin-left:0px; margin-right:5px; top:2px' + // c.style.cssText =' flex-shrink: 0;' + + c.style.cssText = 'margin-right:4px;'; + + //c.style.cssText = 'display:flex; align-content: flex-start; flex-wrap: wrap;' + //item.style.float = 'right' + item.appendChild(c); + this.tmpImage[n] = c; + } + if (this.dragout) { + item.img = this.tmpImage[n]; + item.style.pointerEvents = 'auto'; + item.draggable = "true"; + item.addEventListener('dragstart', this.dragstart || function () {/*console.log('drag start')*/}); + item.addEventListener('drag', this.drag || function () {/*console.log('drag start')*/}); + //item.addEventListener('dragover', this); + //item.addEventListener('dragenter', this); + item.addEventListener('dragleave', function () { + Roots.fakeUp(); + }); + item.addEventListener('dragend', this.dragend || function () {/*console.log('drag end')*/}.bind(this)); + //item.addEventListener('drop', function(){console.log('drop')}) + } + } + this.setTopItem(); + if (this.isSelectable) this.selected(); + } + drawImage(name, image, x, y, w, h) { + this.tmpCtx.clearRect(0, 0, this.imageSize[0], this.imageSize[1]); + this.tmpCtx.drawImage(image, x, y, w, h, 0, 0, this.imageSize[0], this.imageSize[1]); + this.tmpImage[name].src = this.tmpCanvas.toDataURL(); + + /*let c = this.tmpImage[name] + let ctx = c.getContext("2d") + ctx.drawImage(image, x, y, w, h, 0, 0, this.imageSize[0], this.imageSize[1])*/ + } + addImages() { + let lng = this.list.length; + for (let i = 0; i < lng; i++) { + this.items[i].appendChild(this.tmpImage[this.list[i]]); + } + this.setTopItem(); + } + setValue(value) { + if (!isNaN(value)) this.value = this.list[value];else this.value = value; + + //this.tmpId = value + + this.setTopItem(); + } + setTopItem() { + if (this.staticTop) return; + if (this.isWithImage) { + if (!this.preLoadComplete) return; + if (!this.c[3].children.length) { + this.canvas = document.createElement('canvas'); + this.canvas.width = this.imageSize[0]; + this.canvas.height = this.imageSize[1]; + this.canvas.style.cssText = 'margin-right:4px;'; + this.ctx = this.canvas.getContext("2d"); + this.c[3].style.textAlign = 'left'; + this.c[3].style.justifyContent = 'left'; + this.c[3].appendChild(this.canvas); + } + this.tmpImage[this.value]; + this.ctx.drawImage(this.tmpImage[this.value], 0, 0, this.imageSize[2], this.imageSize[3], 0, 0, this.imageSize[0], this.imageSize[1]); + } else this.c[3].textContent = this.value; + if (this.miniCanvas) { + if (!this.c[3].children.length) { + this.canvas = document.createElement('canvas'); + this.canvas.width = this.imageSize[0]; + this.canvas.height = this.imageSize[1]; + this.canvas.style.cssText = 'margin-right:4px;'; + this.ctx = this.canvas.getContext("2d"); + this.c[3].style.textAlign = 'left'; + this.c[3].style.justifyContent = 'left'; + this.c[3].appendChild(this.canvas); + } + this.ctx.drawImage(this.tmpImage[this.value], 0, 0); + } + } + + // ----- LIST + + update(y) { + if (!this.scroll) return; + y = y < 0 ? 0 : y; + y = y > this.range ? this.range : y; + this.topList = -Math.floor(y / this.ratio); + this.listIn.style.top = this.topList + 'px'; + this.scroller.style.top = Math.floor(y) + 'px'; + this.py = y; + } + parentHeight(t) { + if (this.group !== null) this.group.calc(t);else if (this.isUI) this.main.calc(t); + } + open(first) { + super.open(); + this.update(0); + this.h = this.maxHeight + this.baseH + 5; + if (!this.scroll) { + this.topList = 0; + this.h = this.baseH + 5 + this.max; + this.scroller.style.display = 'none'; + this.scrollerBack.style.display = 'none'; + } else { + this.scroller.style.display = 'block'; + this.scrollerBack.style.display = 'block'; + } + this.s[0].height = this.h + 'px'; + this.s[2].display = 'block'; + if (this.up) { + this.zone.y -= this.h - (this.baseH - 10); + this.setSvg(this.c[4], 'd', this.svgs.g1); + } else { + this.setSvg(this.c[4], 'd', this.svgs.g2); + } + this.rSizeContent(); + let t = this.h - this.baseH; + this.zone.h = this.h; + if (!first) this.parentHeight(t); + } + close() { + super.close(); + if (this.up) this.zone.y += this.h - (this.baseH - 10); + let t = this.h - this.baseH; + this.h = this.baseH; + this.s[0].height = this.h + 'px'; + this.s[2].display = 'none'; + this.setSvg(this.c[4], 'd', this.svgs.g1); + this.zone.h = this.h; + this.parentHeight(-t); + } + + // ----- + + text(txt) { + this.c[3].textContent = txt; + } + rSizeContent() { + let i = this.length; + while (i--) this.listIn.children[i].style.width = this.ww + 'px'; + } + rSize() { + super.rSize(); + + //Proto.prototype.rSize.call( this ); + + let s = this.s; + let w = this.sb; + let d = this.sa; + if (s[2] === undefined) return; + s[2].width = w + 'px'; + s[2].left = d + 'px'; + s[3].width = w + 'px'; + s[3].left = d + 'px'; + s[4].left = d + w - 15 + 'px'; + this.ww = w; + if (this.max > this.maxHeight) this.ww = w - this.ss; + if (this.isOpen) this.rSizeContent(); + } } - class Numeric extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.setTypeNumber( o ); - - this.allway = o.allway || false; - - this.isDown = false; - this.value = [0]; - this.multy = 1; - this.invmulty = 1; - this.isSingle = true; - this.isAngle = false; - this.isVector = false; - - if( o.isAngle ){ - this.isAngle = true; - this.multy = Tools.torad; - this.invmulty = Tools.todeg; - } - - this.isDrag = o.drag || false; - - if( o.value !== undefined ){ - if( !isNaN(o.value) ){ - this.value = [o.value]; - } else if( o.value instanceof Array ){ - this.value = o.value; - this.isSingle = false; - } else if( o.value instanceof Object ){ - this.value = []; - if( o.value.x !== undefined ) this.value[0] = o.value.x; - if( o.value.y !== undefined ) this.value[1] = o.value.y; - if( o.value.z !== undefined ) this.value[2] = o.value.z; - if( o.value.w !== undefined ) this.value[3] = o.value.w; - this.isSingle = false; - this.isVector = true; - } - } - - this.lng = this.value.length; - this.tmp = []; - - this.current = -1; - this.prev = { x:0, y:0, d:0, v:0 }; - - let cc = this.colors; - - // bg - this.c[2] = this.dom( 'div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h-8) + 'px;' ); - - this.cMode = []; - - let i = this.lng; - while(i--){ - - if( this.isAngle ) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed( this.precision ); - this.c[3+i] = this.dom( 'div', this.css.txtselect + 'top:1px; height:'+(this.h-2)+'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;'); - if(o.center) this.c[2+i].style.textAlign = 'center'; - this.c[3+i].textContent = this.value[i]; - this.c[3+i].style.color = this.colors.text; - this.c[3+i].isNum = true; - this.cMode[i] = 0; - - } - - // selection - this.selectId = 3 + this.lng; - this.c[this.selectId] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.cursorId = 4 + this.lng; - this.c[ this.cursorId ] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); - - this.init(); - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - - let i = this.lng; - let t = this.tmp; - - while( i-- ){ - if( l.x>t[i][0] && l.x t[i][0] && l.x < t[i][2]) return i; + } + return ''; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown(e) { + let name = this.testZone(e); + if (!this.isDown) { + this.isDown = true; + if (name !== '') { + this.current = name; + this.prev = { + x: e.clientX, + y: e.clientY, + d: 0, + v: this.isSingle ? parseFloat(this.value) : parseFloat(this.value[this.current]) + }; + this.setInput(this.c[3 + this.current]); + } + return this.mousemove(e); + } + return false; + } + mouseup(e) { + if (this.isDown) { + this.isDown = false; + this.prev = { + x: 0, + y: 0, + d: 0, + v: 0 + }; + return this.mousemove(e); + } + return false; + } + mousemove(e) { + let nup = false; + let x = 0; + let name = this.testZone(e); + if (name === '') this.cursor();else { + if (!this.isDrag) this.cursor('text');else this.cursor(this.current !== -1 ? 'move' : 'pointer'); + } + if (this.isDrag) { + if (this.current !== -1) { + this.prev.d += e.clientX - this.prev.x - (e.clientY - this.prev.y); + let n = this.prev.v + this.prev.d * this.step; + this.value[this.current] = this.numValue(n); + this.c[3 + this.current].textContent = this.value[this.current]; + this.validate(); + this.prev.x = e.clientX; + this.prev.y = e.clientY; + nup = true; + } + } else { + if (this.isDown) x = e.clientX - this.zone.x - 3; + if (this.current !== -1) x -= this.tmp[this.current][0]; + return this.upInput(x, this.isDown); + } + return nup; + } + + // ---------------------- + + reset() { + let nup = false; + return nup; + } + setValue(v) { + if (this.isVector) { + if (v.x !== undefined) this.value[0] = v.x; + if (v.y !== undefined) this.value[1] = v.y; + if (v.z !== undefined) this.value[2] = v.z; + if (v.w !== undefined) this.value[3] = v.w; + } else { + this.value = this.isSingle ? [v] : v; + } + this.update(); + } + sameStr(str) { + let i = this.value.length; + while (i--) this.c[3 + i].textContent = str; + } + update(up) { + let i = this.value.length; + while (i--) { + this.value[i] = this.numValue(this.value[i] * this.invmulty); + this.c[3 + i].textContent = this.value[i]; + } + if (up) this.send(); + } + send(v) { + v = v || this.value; + this.isSend = true; + if (this.objectLink !== null) { + if (this.isVector) { + this.objectLink[this.objectKey].fromArray(v); + } else { + this.objectLink[this.objectKey] = v; + } + } + if (this.callback) this.callback(v, this.objectKey); + this.isSend = false; + } + + // ---------------------- + // INPUT + // ---------------------- + + select(c, e, w, t) { + let s = this.s; + let d = this.current !== -1 ? this.tmp[this.current][0] + 5 : 0; + s[this.cursorId].width = '1px'; + s[this.cursorId].left = d + c + 'px'; + s[this.selectId].left = d + e + 'px'; + s[this.selectId].width = w + 'px'; + this.c[this.selectId].innerHTML = t; + } + unselect() { + let s = this.s; + if (!s) return; + this.c[this.selectId].innerHTML = ''; + s[this.selectId].width = 0 + 'px'; + s[this.cursorId].width = 0 + 'px'; + } + validate(force) { + let ar = []; + let i = this.lng; + if (this.allway) force = true; + while (i--) { + if (!isNaN(this.c[3 + i].textContent)) { + let nx = this.numValue(this.c[3 + i].textContent); + this.c[3 + i].textContent = nx; + this.value[i] = nx; + } else { + // not number + this.c[3 + i].textContent = this.value[i]; + } + ar[i] = this.value[i] * this.multy; + } + if (!force) return; + this.send(this.isSingle ? ar[0] : ar); + } + + // ---------------------- + // REZISE + // ---------------------- + + rSize() { + super.rSize(); + let sx = this.colors.sx; + let ss = sx * (this.lng - 1); + let w = (this.sb - ss) / this.lng; //(( this.sb + sx ) / this.lng )-sx + let s = this.s; + let i = this.lng; + while (i--) { + //this.tmp[i] = [ Math.floor( this.sa + ( w * i )+( 5 * i )), w ]; + this.tmp[i] = [this.sa + w * i + sx * i, w]; + this.tmp[i][2] = this.tmp[i][0] + this.tmp[i][1]; + s[3 + i].left = this.tmp[i][0] + 'px'; + s[3 + i].width = this.tmp[i][1] + 'px'; + } + } } - class Slide extends Proto { - constructor(o = {}) { - super(o); - - if (o.easing <= 0) throw "Easing must be > 0"; - this.easing = o.easing || 1; - - this.setTypeNumber(o); - - this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; - - //this.defaultBorderColor = this.colors.hide; - - this.isDown = false; - this.isOver = false; - this.allway = o.allway || false; - - this.isDeg = o.isDeg || false; - this.isCyclic = o.cyclic || false; - - this.firstImput = false; - - let cc = this.colors; - - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - this.c[2] = this.dom( - "div", - this.css.txtselect + - "border:none; background:none; width:47px; color:" + - cc.text + - ";" - ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); - this.c[3] = this.dom( - "div", - this.css.basic + " top:0; height:" + this.h + "px;" - ); - - this.c[4] = this.dom( - "div", - this.css.basic + - "background:" + - cc.back + - "; top:2px; height:" + - (this.h - 4) + - "px;" - ); - this.c[5] = this.dom( - "div", - this.css.basic + - "left:4px; top:5px; height:" + - (this.h - 10) + - "px; background:" + - cc.text + - ";" - ); - - this.c[2].isNum = true; - //this.c[2].style.height = (this.h-4) + 'px'; - //this.c[2].style.lineHeight = (this.h-8) + 'px'; - this.c[2].style.height = this.h - 2 + "px"; - this.c[2].style.lineHeight = this.h - 10 + "px"; - - if (this.model !== 0) { - let r1 = 4, - h1 = 4, - h2 = 8, - ww = this.h - 6, - ra = 16; - - if (this.model === 2) { - r1 = 0; - h1 = 2; - h2 = 4; - ra = 2; - ww = (this.h - 6) * 0.5; - } - - if (this.model === 3) this.c[5].style.visible = "none"; - - this.c[4].style.borderRadius = r1 + "px"; - this.c[4].style.height = h2 + "px"; - this.c[4].style.top = this.h * 0.5 - h1 + "px"; - this.c[5].style.borderRadius = r1 * 0.5 + "px"; - this.c[5].style.height = h1 + "px"; - this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; - - //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); - this.c[6] = this.dom( - "div", - this.css.basic + - "border-radius:" + - ra + - "px; margin-left:" + - -ww * 0.5 + - "px; background:" + - cc.text + - "; left:4px; top:3px; height:" + - (this.h - 6) + - "px; width:" + - ww + - "px;" - ); - } - - this.init(); - } - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - - if (l.x >= this.txl) return "text"; - else if (l.x >= this.sa) return "scroll"; - else return ""; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (this.isDown) this.isDown = false; - } - - mousedown(e) { - let name = this.testZone(e); - - if (!name) return false; - - if (name === "scroll") { - this.isDown = true; - this.old = this.value; - this.mousemove(e); - } - - /*if( name === 'text' ){ - this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); - }*/ - - return true; - } - - mousemove(e) { - let nup = false; - - let name = this.testZone(e); - - if (name === "scroll") { - this.mode(1); - this.cursor("w-resize"); - //} else if(name === 'text'){ - //this.cursor('pointer'); - } else { - this.cursor(); - } - - if (this.isDown) { - let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; - - // lo mapeo al rango 0 ... 1 - nNormalized = Math.min(1, Math.max(0, nNormalized)); - - // aplico easing - let nEased = Math.pow(nNormalized, this.easing); // easing - - let nNew = nEased * this.range + this.min; - let nNewSlider = nNormalized * this.range + this.min; - - this.sliderValue = this.numValue(nNewSlider); - - let delta = nNew - this.old; - - let steps; - if (delta >= this.step || delta <= this.step) { - steps = Math.floor(delta / this.step); - this.value = this.numValue(this.old + steps * this.step); - // value without easing applied - - this.update(true); - this.old = this.value; - } - //console.log("n, normalized, value", nNew, nNormalized, this.value); - nup = true; - } - - return nup; - } - - wheel(e) { - let name = this.testZone(e); - - if (name === "scroll") { - let v = this.value - this.step * e.delta; - - if (v > this.max) { - v = this.isCyclic ? this.min : this.max; - } else if (v < this.min) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue(v); - this.old = v; - this.update(true); - - return true; - } - - return false; - } - - //keydown: function ( e ) { return true; }, - - // ---------------------- - - validate() { - let n = this.c[2].textContent; - - if (!isNaN(n)) { - this.value = this.numValue(n); - this.update(true); - } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - } - - reset() { - //this.clearInput(); - this.isDown = false; - this.mode(0); - } - - mode(mode) { - let s = this.s; - let cc = this.colors; - - switch (mode) { - case 0: // base - // s[2].border = '1px solid ' + this.colors.hide; - s[2].color = cc.text; - s[4].background = cc.back; - s[5].background = cc.text; - if (this.model !== 0) s[6].background = cc.text; //cc.button; - break; - case 1: // scroll over - //s[2].border = '1px dashed ' + this.colors.hide; - s[2].color = cc.textOver; - s[4].background = cc.back; - s[5].background = cc.textOver; - if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; - break; - } - } - - update(up) { - let normalized = (this.value - this.min) / this.range; - - let uneased = - this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); - - let ww = Math.floor(this.ww * uneased); - //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); - - if (this.model !== 3) this.s[5].width = ww + "px"; - if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; - this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - - if (up) this.send(); - } - - rSize() { - super.rSize(); - - let w = this.sb - this.sc; - this.ww = w - 6; - - let tx = this.sc; - if (this.isUI || !this.simple) tx = this.sc + 10; - this.txl = this.w - tx + 2; - - //let ty = Math.floor(this.h * 0.5) - 8; - - let s = this.s; - - s[2].width = this.sc - 6 + "px"; - s[2].left = this.txl + 4 + "px"; - //s[2].top = ty + 'px'; - s[3].left = this.sa + "px"; - s[3].width = w + "px"; - s[4].left = this.sa + "px"; - s[4].width = w + "px"; - s[5].left = this.sa + 3 + "px"; - - this.update(); - } + class Slide extends Proto { + constructor(o = {}) { + super(o); + if (o.easing <= 0) throw "Easing must be > 0"; + this.easing = o.easing || 1; + this.setTypeNumber(o); + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + + //this.defaultBorderColor = this.colors.hide; + + this.isDown = false; + this.isOver = false; + this.allway = o.allway || false; + this.isDeg = o.isDeg || false; + this.isCyclic = o.cyclic || false; + this.firstImput = false; + let cc = this.colors; + + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + this.c[2] = this.dom("div", this.css.txtselect + "border:none; background:none; width:47px; color:" + cc.text + ";"); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); + this.c[3] = this.dom("div", this.css.basic + " top:0; height:" + this.h + "px;"); + this.c[4] = this.dom("div", this.css.basic + "background:" + cc.back + "; top:2px; height:" + (this.h - 4) + "px;"); + this.c[5] = this.dom("div", this.css.basic + "left:4px; top:5px; height:" + (this.h - 10) + "px; background:" + cc.text + ";"); + this.c[2].isNum = true; + //this.c[2].style.height = (this.h-4) + 'px'; + //this.c[2].style.lineHeight = (this.h-8) + 'px'; + this.c[2].style.height = this.h - 2 + "px"; + this.c[2].style.lineHeight = this.h - 10 + "px"; + if (this.model !== 0) { + let r1 = 4, + h1 = 4, + h2 = 8, + ww = this.h - 6, + ra = 16; + if (this.model === 2) { + r1 = 0; + h1 = 2; + h2 = 4; + ra = 2; + ww = (this.h - 6) * 0.5; + } + if (this.model === 3) this.c[5].style.visible = "none"; + this.c[4].style.borderRadius = r1 + "px"; + this.c[4].style.height = h2 + "px"; + this.c[4].style.top = this.h * 0.5 - h1 + "px"; + this.c[5].style.borderRadius = r1 * 0.5 + "px"; + this.c[5].style.height = h1 + "px"; + this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; + + //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); + this.c[6] = this.dom("div", this.css.basic + "border-radius:" + ra + "px; margin-left:" + -ww * 0.5 + "px; background:" + cc.text + "; left:4px; top:3px; height:" + (this.h - 6) + "px; width:" + ww + "px;"); + } + this.init(); + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + if (l.x >= this.txl) return "text";else if (l.x >= this.sa) return "scroll";else return ""; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (this.isDown) this.isDown = false; + } + mousedown(e) { + let name = this.testZone(e); + if (!name) return false; + if (name === "scroll") { + this.isDown = true; + this.old = this.value; + this.mousemove(e); + } + + /*if( name === 'text' ){ + this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); + }*/ + + return true; + } + mousemove(e) { + let nup = false; + let name = this.testZone(e); + if (name === "scroll") { + this.mode(1); + this.cursor("w-resize"); + //} else if(name === 'text'){ + //this.cursor('pointer'); + } else { + this.cursor(); + } + if (this.isDown) { + let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; + + // lo mapeo al rango 0 ... 1 + nNormalized = Math.min(1, Math.max(0, nNormalized)); + + // aplico easing + let nEased = Math.pow(nNormalized, this.easing); // easing + + let nNew = nEased * this.range + this.min; + let nNewSlider = nNormalized * this.range + this.min; + this.sliderValue = this.numValue(nNewSlider); + let delta = nNew - this.old; + let steps; + if (delta >= this.step || delta <= this.step) { + steps = Math.floor(delta / this.step); + this.value = this.numValue(this.old + steps * this.step); + // value without easing applied + + this.update(true); + this.old = this.value; + } + //console.log("n, normalized, value", nNew, nNormalized, this.value); + nup = true; + } + return nup; + } + wheel(e) { + let name = this.testZone(e); + if (name === "scroll") { + let v = this.value - this.step * e.delta; + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } + this.setValue(v); + this.old = v; + this.update(true); + return true; + } + return false; + } + + //keydown: function ( e ) { return true; }, + + // ---------------------- + + validate() { + let n = this.c[2].textContent; + if (!isNaN(n)) { + this.value = this.numValue(n); + this.update(true); + } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + } + reset() { + //this.clearInput(); + this.isDown = false; + this.mode(0); + } + mode(mode) { + let s = this.s; + let cc = this.colors; + switch (mode) { + case 0: + // base + // s[2].border = '1px solid ' + this.colors.hide; + s[2].color = cc.text; + s[4].background = cc.back; + s[5].background = cc.text; + if (this.model !== 0) s[6].background = cc.text; //cc.button; + break; + case 1: + // scroll over + //s[2].border = '1px dashed ' + this.colors.hide; + s[2].color = cc.textOver; + s[4].background = cc.back; + s[5].background = cc.textOver; + if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; + break; + } + } + update(up) { + let normalized = (this.value - this.min) / this.range; + let uneased = this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); + let ww = Math.floor(this.ww * uneased); + //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); + + if (this.model !== 3) this.s[5].width = ww + "px"; + if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; + this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + if (up) this.send(); + } + rSize() { + super.rSize(); + let w = this.sb - this.sc; + this.ww = w - 6; + let tx = this.sc; + if (this.isUI || !this.simple) tx = this.sc + 10; + this.txl = this.w - tx + 2; + + //let ty = Math.floor(this.h * 0.5) - 8; + + let s = this.s; + s[2].width = this.sc - 6 + "px"; + s[2].left = this.txl + 4 + "px"; + //s[2].top = ty + 'px'; + s[3].left = this.sa + "px"; + s[3].width = w + "px"; + s[4].left = this.sa + "px"; + s[4].width = w + "px"; + s[5].left = this.sa + 3 + "px"; + this.update(); + } } - class TextInput extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.cmode = 0; - - this.value = o.value !== undefined ? o.value : ''; - this.placeHolder = o.placeHolder || ''; - - this.allway = o.allway || false; - this.editable = o.edit !== undefined ? o.edit : true; - - this.isDown = false; - - let cc = this.colors; - - // text - this.c[2] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[2].textContent = this.value; - - // selection - this.c[3] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.c[4] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); - - // fake - this.c[5] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; border:none; justify-content: center; font-style: italic; color:'+cc.border+';' ); - if( this.value === '' ) this.c[5].textContent = this.placeHolder; - - - - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.x >= this.sa ) return 'text'; - return ''; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if(!this.editable) return; - - if( this.isDown ){ - this.isDown = false; - return this.mousemove( e ); - } - - return false; - - } - - mousedown ( e ) { - - if(!this.editable) return; - - let name = this.testZone( e ); - - if( !this.isDown ){ - this.isDown = true; - if( name === 'text' ) this.setInput( this.c[2] ); - return this.mousemove( e ); - } - - return false; - - } - - mousemove ( e ) { - - if(!this.editable) return; - - let name = this.testZone( e ); - - //let l = this.local; - //if( l.x === -1 && l.y === -1 ){ return;} - - //if( l.x >= this.sa ) this.cursor('text'); - //else this.cursor(); - - let x = 0; - - if( name === 'text' ) this.cursor('text'); - else this.cursor(); - - if( this.isDown ) x = e.clientX - this.zone.x; - - return this.upInput( x - this.sa -3, this.isDown ); - - } - - update ( ) { - - this.c[2].textContent = this.value; - - } - - // ---------------------- - - reset () { - - this.cursor(); - - } - - // ---------------------- - // INPUT - // ---------------------- - - select ( c, e, w, t ) { - - let s = this.s; - let d = this.sa + 5; - s[4].width = '1px'; - s[4].left = ( d + e ) + 'px'; - - s[3].left = ( d + e ) + 'px'; - s[3].width = w + 'px'; - this.c[3].innerHTML = t; - - } - - unselect () { - - let s = this.s; - if(!s) return; - s[3].width = 0 + 'px'; - this.c[3].innerHTML = 't'; - s[4].width = 0 + 'px'; - - } - - validate ( force ) { - - if( this.allway ) force = true; - - this.value = this.c[2].textContent; - - if(this.value !== '') this.c[5].textContent = ''; - else this.c[5].textContent = this.placeHolder; - - if( !force ) return; - - this.send(); - - } - - // ---------------------- - // REZISE - // ---------------------- - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - - s[5].left = this.sa + 'px'; - s[5].width = this.sb + 'px'; - - } - - + class TextInput extends Proto { + constructor(o = {}) { + super(o); + this.cmode = 0; + this.value = o.value !== undefined ? o.value : ''; + this.placeHolder = o.placeHolder || ''; + this.allway = o.allway || false; + this.editable = o.edit !== undefined ? o.edit : true; + this.isDown = false; + let cc = this.colors; + + // text + this.c[2] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border + '; border-radius:' + this.radius + 'px;'); + this.c[2].textContent = this.value; + + // selection + this.c[3] = this.dom('div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h - 4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.c[4] = this.dom('div', this.css.basic + 'top:2px; height:' + (this.h - 4) + 'px; width:0px; background:' + cc.text + ';'); + + // fake + this.c[5] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; border:none; justify-content: center; font-style: italic; color:' + cc.border + ';'); + if (this.value === '') this.c[5].textContent = this.placeHolder; + this.init(); + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (l.x >= this.sa) return 'text'; + return ''; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (!this.editable) return; + if (this.isDown) { + this.isDown = false; + return this.mousemove(e); + } + return false; + } + mousedown(e) { + if (!this.editable) return; + let name = this.testZone(e); + if (!this.isDown) { + this.isDown = true; + if (name === 'text') this.setInput(this.c[2]); + return this.mousemove(e); + } + return false; + } + mousemove(e) { + if (!this.editable) return; + let name = this.testZone(e); + + //let l = this.local; + //if( l.x === -1 && l.y === -1 ){ return;} + + //if( l.x >= this.sa ) this.cursor('text'); + //else this.cursor(); + + let x = 0; + if (name === 'text') this.cursor('text');else this.cursor(); + if (this.isDown) x = e.clientX - this.zone.x; + return this.upInput(x - this.sa - 3, this.isDown); + } + update() { + this.c[2].textContent = this.value; + } + + // ---------------------- + + reset() { + this.cursor(); + } + + // ---------------------- + // INPUT + // ---------------------- + + select(c, e, w, t) { + let s = this.s; + let d = this.sa + 5; + s[4].width = '1px'; + s[4].left = d + e + 'px'; + s[3].left = d + e + 'px'; + s[3].width = w + 'px'; + this.c[3].innerHTML = t; + } + unselect() { + let s = this.s; + if (!s) return; + s[3].width = 0 + 'px'; + this.c[3].innerHTML = 't'; + s[4].width = 0 + 'px'; + } + validate(force) { + if (this.allway) force = true; + this.value = this.c[2].textContent; + if (this.value !== '') this.c[5].textContent = '';else this.c[5].textContent = this.placeHolder; + if (!force) return; + this.send(); + } + + // ---------------------- + // REZISE + // ---------------------- + + rSize() { + super.rSize(); + let s = this.s; + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + s[5].left = this.sa + 'px'; + s[5].width = this.sb + 'px'; + } } - class Title extends Proto { - - constructor( o = {} ) { - - super( o ); - - let prefix = o.prefix || ''; - - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:right; width:60px; line-height:'+ (this.h-8) + 'px; color:' + this.colors.text ); - - if( this.h === 31 ){ - - this.s[0].height = this.h + 'px'; - this.s[1].top = 8 + 'px'; - this.c[2].style.top = 8 + 'px'; - - } - - let s = this.s; - - s[1].justifyContent = o.align || 'left'; - //s[1].textAlign = o.align || 'left'; - s[1].fontWeight = o.fontWeight || 'bold'; - - - this.c[1].textContent = this.txt.substring(0,1).toUpperCase() + this.txt.substring(1).replace("-", " "); - this.c[2].textContent = prefix; - - this.init(); - - } - - text( txt ) { - - this.c[1].textContent = txt; - - } - - text2( txt ) { - - this.c[2].textContent = txt; - - } - - rSize() { - - super.rSize(); - this.s[1].width = this.w + 'px'; //- 50 + 'px'; - this.s[2].left = this.w + 'px';//- ( 50 + 26 ) + 'px'; - - } - - setColor( c ) { - this.s[1].color = c; - this.s[2].color = c; - } - + class Title extends Proto { + constructor(o = {}) { + super(o); + let prefix = o.prefix || ''; + this.c[2] = this.dom('div', this.css.txt + 'justify-content:right; width:60px; line-height:' + (this.h - 8) + 'px; color:' + this.colors.text); + if (this.h === 31) { + this.s[0].height = this.h + 'px'; + this.s[1].top = 8 + 'px'; + this.c[2].style.top = 8 + 'px'; + } + let s = this.s; + s[1].justifyContent = o.align || 'left'; + //s[1].textAlign = o.align || 'left'; + s[1].fontWeight = o.fontWeight || 'bold'; + this.c[1].textContent = this.txt.substring(0, 1).toUpperCase() + this.txt.substring(1).replace("-", " "); + this.c[2].textContent = prefix; + this.init(); + } + text(txt) { + this.c[1].textContent = txt; + } + text2(txt) { + this.c[2].textContent = txt; + } + rSize() { + super.rSize(); + this.s[1].width = this.w + 'px'; //- 50 + 'px'; + this.s[2].left = this.w + 'px'; //- ( 50 + 26 ) + 'px'; + } + setColor(c) { + this.s[1].color = c; + this.s[2].color = c; + } } - class Select extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || ''; - this.isDown = false; - this.onActif = o.onActif || function(){}; - - //let prefix = o.prefix || ''; - const cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+ cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); - //this.c[2].style.color = this.fontColor; - - this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); - this.c[3].textContent = this.value; - - let fltop = Math.floor(this.h*0.5)-7; - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'cursor' ], fill:cc.text, stroke:'none'}); - - this.stat = 1; - this.isActif = false; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - if( l.x > this.sa && l.x < this.sa+30 ) return 'over' - return '0' - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( this.isDown ){ - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove( e ) - } - - return false - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false - - this.isDown = true; - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove( e ) - - } - - mousemove ( e ) { - - let up = false; - let name = this.testZone( e ); - - if( name === 'over' ){ - this.cursor('pointer'); - up = this.mode( this.isDown ? 3 : 2 ); - } else { - up = this.reset(); - } - - return up - - } - - // ---------------------- - - apply ( v ) { - - v = v || ''; - - if( v !== this.value ) { - this.value = v; - this.c[3].textContent = this.value; - this.send(); - } - - this.mode(1); - - } - - update () { - - this.mode( 3 ); - - } - - mode ( n ) { - - let change = false; - let cc = this.colors; - - if( this.stat !== n ){ - - if( n===1 ) this.isActif = false; - if( n===3 ){ - if( !this.isActif ){ this.isActif = true; n=4; this.onActif( this ); } - else { this.isActif = false; } - } - - if( n===2 && this.isActif ) n = 4; - - this.stat = n; - - switch( n ){ - - case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base - case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over - case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.action; break; // down - case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.action; break; // actif - - } - - change = true; - - } - - return change - - - - } - - reset () { - - this.cursor(); - return this.mode( this.isActif ? 4 : 1 ) - - } - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = (this.sa + 40) + 'px'; - s[3].width = (this.sb - 40) + 'px'; - s[4].left = (this.sa+8) + 'px'; - - } - + class Select extends Proto { + constructor(o = {}) { + super(o); + this.value = o.value || ''; + this.isDown = false; + this.onActif = o.onActif || function () {}; + + //let prefix = o.prefix || ''; + const cc = this.colors; + this.c[2] = this.dom('div', this.css.txt + this.css.button + ' top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.buttonBorder + '; border-radius:15px; width:30px; left:10px;'); + //this.c[2].style.color = this.fontColor; + + this.c[3] = this.dom('div', this.css.txtselect + 'height:' + (this.h - 4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder + '; border-radius:' + this.radius + 'px;'); + this.c[3].textContent = this.value; + let fltop = Math.floor(this.h * 0.5) - 7; + this.c[4] = this.dom('path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:' + fltop + 'px;', { + d: this.svgs['cursor'], + fill: cc.text, + stroke: 'none' + }); + this.stat = 1; + this.isActif = false; + this.init(); + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (l.x > this.sa && l.x < this.sa + 30) return 'over'; + return '0'; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (this.isDown) { + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove(e); + } + return false; + } + mousedown(e) { + let name = this.testZone(e); + if (!name) return false; + this.isDown = true; + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove(e); + } + mousemove(e) { + let up = false; + let name = this.testZone(e); + if (name === 'over') { + this.cursor('pointer'); + up = this.mode(this.isDown ? 3 : 2); + } else { + up = this.reset(); + } + return up; + } + + // ---------------------- + + apply(v) { + v = v || ''; + if (v !== this.value) { + this.value = v; + this.c[3].textContent = this.value; + this.send(); + } + this.mode(1); + } + update() { + this.mode(3); + } + mode(n) { + let change = false; + let cc = this.colors; + if (this.stat !== n) { + if (n === 1) this.isActif = false; + if (n === 3) { + if (!this.isActif) { + this.isActif = true; + n = 4; + this.onActif(this); + } else { + this.isActif = false; + } + } + if (n === 2 && this.isActif) n = 4; + this.stat = n; + switch (n) { + case 1: + this.s[2].color = cc.text; + this.s[2].background = cc.button; + break; + // base + case 2: + this.s[2].color = cc.textOver; + this.s[2].background = cc.overoff; + break; + // over + case 3: + this.s[2].color = cc.textOver; + this.s[2].background = cc.action; + break; + // down + case 4: + this.s[2].color = cc.textSelect; + this.s[2].background = cc.action; + break; + // actif + } + change = true; + } + return change; + } + reset() { + this.cursor(); + return this.mode(this.isActif ? 4 : 1); + } + text(txt) { + this.c[3].textContent = txt; + } + rSize() { + super.rSize(); + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = this.sa + 40 + 'px'; + s[3].width = this.sb - 40 + 'px'; + s[4].left = this.sa + 8 + 'px'; + } } - class Bitmap extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || ''; - this.refTexture = o.texture || null; - this.img = null; - - this.isDown = false; - this.neverlock = true; - - - - const cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); - - this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); - this.c[3].textContent = this.value; - - let fltop = Math.floor(this.h*0.5)-7; - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'load' ], fill:cc.text, stroke:'none'}); - - this.stat = 1; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.x > this.sa && l.x < this.sa+30 ) return 'over'; - return '0' - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( this.isDown ){ - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove( e ); - } - - return false; - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false; - - if( name === 'over' ){ - this.isDown = true; - Files.load( { callback:this.changeBitmap.bind(this) } ); - - } - - - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove( e ); - - } - - mousemove ( e ) { - - let up = false; - - let name = this.testZone( e ); - - if( name === 'over' ){ - this.cursor('pointer'); - up = this.mode( this.isDown ? 3 : 2 ); - } else { - up = this.reset(); - } - - return up; - - } - - // ---------------------- - - changeBitmap( img, fname ){ - - if( img ){ - this.img = img; - this.apply( fname ); - } else { - this.img = null; - this.apply( 'null' ); - } - - } - - // ---------------------- - - apply ( v ) { - - v = v || ''; - - if( v !== this.value ) { - this.value = v; - this.c[3].textContent = this.value; - - if( this.img !== null ){ - if( this.objectLink !== null ) this.objectLink[ this.val ] = v; - if( this.callback ) this.callback( this.value, this.img, this.name ); - } - - } - - this.mode(1); - - } - - update () { - - this.mode( 3 ); - - } - - mode ( n ) { - - let change = false; - let cc = this.colors; - - if( this.stat !== n ){ - - this.stat = n; - - switch( n ){ - - case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base - case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over - case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.over; break; // down - case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.select; break; // actif - - } - - change = true; - - } - - return change; - - - - } - - reset () { - - this.cursor(); - return this.mode( this.isActif ? 4 : 1 ); - - } - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = (this.sa + 40) + 'px'; - s[3].width = (this.sb - 40) + 'px'; - s[4].left = (this.sa+8) + 'px'; - - } - + class Bitmap extends Proto { + constructor(o = {}) { + super(o); + this.value = o.value || ''; + this.refTexture = o.texture || null; + this.img = null; + this.isDown = false; + this.neverlock = true; + const cc = this.colors; + this.c[2] = this.dom('div', this.css.txt + this.css.button + ' top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.buttonBorder + '; border-radius:15px; width:30px; left:10px;'); + this.c[3] = this.dom('div', this.css.txtselect + 'height:' + (this.h - 4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder + '; border-radius:' + this.radius + 'px;'); + this.c[3].textContent = this.value; + let fltop = Math.floor(this.h * 0.5) - 7; + this.c[4] = this.dom('path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:' + fltop + 'px;', { + d: this.svgs['load'], + fill: cc.text, + stroke: 'none' + }); + this.stat = 1; + this.init(); + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (l.x > this.sa && l.x < this.sa + 30) return 'over'; + return '0'; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (this.isDown) { + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove(e); + } + return false; + } + mousedown(e) { + let name = this.testZone(e); + if (!name) return false; + if (name === 'over') { + this.isDown = true; + Files.load({ + callback: this.changeBitmap.bind(this) + }); + } + + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove(e); + } + mousemove(e) { + let up = false; + let name = this.testZone(e); + if (name === 'over') { + this.cursor('pointer'); + up = this.mode(this.isDown ? 3 : 2); + } else { + up = this.reset(); + } + return up; + } + + // ---------------------- + + changeBitmap(img, fname) { + if (img) { + this.img = img; + this.apply(fname); + } else { + this.img = null; + this.apply('null'); + } + } + + // ---------------------- + + apply(v) { + v = v || ''; + if (v !== this.value) { + this.value = v; + this.c[3].textContent = this.value; + if (this.img !== null) { + if (this.objectLink !== null) this.objectLink[this.val] = v; + if (this.callback) this.callback(this.value, this.img, this.name); + } + } + this.mode(1); + } + update() { + this.mode(3); + } + mode(n) { + let change = false; + let cc = this.colors; + if (this.stat !== n) { + this.stat = n; + switch (n) { + case 1: + this.s[2].color = cc.text; + this.s[2].background = cc.button; + break; + // base + case 2: + this.s[2].color = cc.textOver; + this.s[2].background = cc.overoff; + break; + // over + case 3: + this.s[2].color = cc.textOver; + this.s[2].background = cc.over; + break; + // down + case 4: + this.s[2].color = cc.textSelect; + this.s[2].background = cc.select; + break; + // actif + } + change = true; + } + return change; + } + reset() { + this.cursor(); + return this.mode(this.isActif ? 4 : 1); + } + text(txt) { + this.c[3].textContent = txt; + } + rSize() { + super.rSize(); + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = this.sa + 40 + 'px'; + s[3].width = this.sb - 40 + 'px'; + s[4].left = this.sa + 8 + 'px'; + } } - //import { Proto } from '../core/Proto.js'; - - class Selector extends Button { - - constructor( o = {} ) { - - if( o.selectable === undefined ) o.selectable = true; - super( o ); - - } - + //import { Proto } from '../core/Proto.js'; + class Selector extends Button { + constructor(o = {}) { + if (o.selectable === undefined) o.selectable = true; + super(o); + } } - class Item extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.p = 100; - this.value = this.txt; - this.status = 1; - - this.itype = o.itype || 'none'; - this.val = this.itype; - - this.graph = this.svgs[ this.itype ]; - - let fltop = Math.floor(this.h*0.5)-7; - - this.c[2] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.graph, fill:this.colors.text, stroke:'none'}); - - this.s[1].marginLeft = 20 + 'px'; - - this.init(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousemove ( e ) { - - this.cursor('pointer'); - - //up = this.modes( this.isDown ? 3 : 2, name ); - - } - - mousedown ( e ) { - - if( this.isUI ) this.main.resetItem(); - - this.selected( true ); - - this.send(); - - return true; - - } - - uiout () { - - if( this.isSelect ) this.mode(3); - else this.mode(1); - - } - - uiover () { - - if( this.isSelect ) this.mode(4); - else this.mode(2); - - } - - update () { - - } - - /*rSize () { - - super.rSize(); - - }*/ - - mode ( n ) { - - let change = false; - - if( this.status !== n ){ - - this.status = n; - let s = this.s, cc = this.colors; - - switch( n ){ - - case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; - case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; - case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; - case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; - - } - - change = true; - - } - - return change; - - } - - reset () { - - this.cursor(); - // return this.mode( 1 ); - - } - - selected ( b ){ - - if( this.isSelect ) this.mode(1); - - this.isSelect = b || false; - - if( this.isSelect ) this.mode(3); - - } - - + class Item extends Proto { + constructor(o = {}) { + super(o); + this.p = 100; + this.value = this.txt; + this.status = 1; + this.itype = o.itype || 'none'; + this.val = this.itype; + this.graph = this.svgs[this.itype]; + let fltop = Math.floor(this.h * 0.5) - 7; + this.c[2] = this.dom('path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:' + fltop + 'px;', { + d: this.graph, + fill: this.colors.text, + stroke: 'none' + }); + this.s[1].marginLeft = 20 + 'px'; + this.init(); + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousemove(e) { + this.cursor('pointer'); + + //up = this.modes( this.isDown ? 3 : 2, name ); + } + mousedown(e) { + if (this.isUI) this.main.resetItem(); + this.selected(true); + this.send(); + return true; + } + uiout() { + if (this.isSelect) this.mode(3);else this.mode(1); + } + uiover() { + if (this.isSelect) this.mode(4);else this.mode(2); + } + update() {} + + /*rSize () { + + super.rSize(); + }*/ + + mode(n) { + let change = false; + if (this.status !== n) { + this.status = n; + let s = this.s, + cc = this.colors; + switch (n) { + case 1: + this.status = 1; + s[1].color = cc.text; + s[0].background = 'none'; + break; + case 2: + this.status = 2; + s[1].color = cc.textOver; + s[0].background = cc.back; + break; + case 3: + this.status = 3; + s[1].color = cc.textSelect; + s[0].background = cc.select; + break; + case 4: + this.status = 4; + s[1].color = cc.textOver; + s[0].background = cc.over; + break; + } + change = true; + } + return change; + } + reset() { + this.cursor(); + // return this.mode( 1 ); + } + selected(b) { + if (this.isSelect) this.mode(1); + this.isSelect = b || false; + if (this.isSelect) this.mode(3); + } } - class Grid extends Proto { - - constructor( o = {} ) { - - super( o ); - - /*this.values = o.values || []; - - if( typeof this.values === 'string' ) this.values = [ this.values ];*/ - - this.values = []; - - if( o.values ){ - if( o.values instanceof Array ){ - this.values = o.values; - } else if( o.values instanceof String ){ - this.values = [ o.values ]; - } else if( o.values instanceof Object ){ - this.refObject = o.values; - for( let g in this.refObject ) this.values.push( g ); - } - } - - this.lng = this.values.length; - - - - this.value = o.value || null; - - - - - let cc = this.colors; - - - this.isSelectable = o.selectable || false; - this.spaces = o.spaces || [ cc.sx, cc.sy ]; - this.bsize = o.bsize || [ 90, this.h ]; - - this.bsizeMax = this.bsize[0]; - - this.tmp = []; - this.stat = []; - this.grid = [ 2, Math.round( this.lng * 0.5 ) ]; - - this.h = ( this.grid[1] * this.bsize[1] ) + ( this.grid[1] * this.spaces[1] ); //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); - - this.c[1].textContent = ''; - //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); - this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1])+'px; border:none;' ); - - let n = 0, b, td, tr, sel; - - this.res = -1; - this.isDown = false; - this.neverlock = true; - - this.buttons = []; - this.stat = []; - this.tmpX = []; - this.tmpY = []; - - for( let i = 0; i < this.grid[1]; i++ ){ - - tr = this.c[2].insertRow(); - tr.style.cssText = 'pointer-events:none;'; - for( let j = 0; j < this.grid[0]; j++ ){ - - td = tr.insertCell(); - td.style.cssText = 'pointer-events:none;'; - - if( this.values[n] ){ - - sel = false; - if( this.values[n] === this.value && this.isSelectable ) sel = true; - - b = document.createElement( 'div' ); - b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:'+this.bsize[0]+'px; height:'+(this.bsize[1]-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; left:auto; right:auto; border-radius:'+this.radius+'px;'; - b.style.background = sel ? cc.select : cc.button; - b.style.color = sel ? cc.textSelect : cc.text; - b.innerHTML = this.values[n]; - td.appendChild( b ); - - this.buttons.push(b); - this.stat.push(1); - - } else { - - b = document.createElement( 'div' ); - b.style.cssText = this.css.txt + 'position:static; width:'+this.bsize[0]+'px; height:'+this.bsize[1]+'px; text-align:center; left:auto; right:auto; background:none;'; - td.appendChild( b ); - - } - - if(j===0) b.style.cssText += 'float:right;'; - else b.style.cssText += 'float:left;'; - - n++; - - } - } - - this.s[0].border = 'none'; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return -1; - - l.y += this.mtop; - - let tx = this.tmpX; - let ty = this.tmpY; - - let id = -1; - let c = -1; - let line = -1; - let i = this.grid[0]; - while( i-- ){ - if( l.x > tx[i][0] && l.x < tx[i][1] ) c = i; - } - - i = this.grid[1]; - while( i-- ){ - if( l.y > ty[i][0] && l.y < ty[i][1] ) line = i; - } - - if(c!==-1 && line!==-1){ - id = c + (line*2); - if(id>this.lng-1) id = -1; - } - - return id; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( !this.isDown ) return false - - this.isDown = false; - if( this.res !== -1 ){ - this.value = this.values[this.res]; - this.send(); - } - - return this.mousemove( e ) - - } - - mousedown ( e ) { - - if( this.isDown ) return false - this.isDown = true; - return this.mousemove( e ) - - } - - mousemove ( e ) { - - let up = false; - this.res = this.testZone( e ); - - if( this.res !== -1 ){ - this.cursor('pointer'); - up = this.modes( this.isDown ? 3 : 2, this.res ); - } else { - up = this.reset(); - } - - return up; - - } - - // ---------------------- - // MODE - // ----------------------- - - modes ( N = 1, id = -1 ) { - - let i = this.lng, w, n, r = false; - - while( i-- ){ - - n = N; - w = this.isSelectable ? this.values[ i ] === this.value : false; - - if( i === id ){ - if( w && n === 2 ) n = 3; - } else { - n = 1; - if( w ) n = 4; - } - - if( this.mode( n, i ) ) r = true; - - } - - return r - - } - - mode ( n, id ) { - - let change = false; - let cc = this.colors, s = this.buttons; - let i = id; - - if( this.stat[id] !== n ){ - - this.stat[id] = n; - - switch( n ){ - - case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; - case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; - case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; - case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; - - } - - change = true; - - } - - return change; - - } - - // ---------------------- - - reset () { - - this.res = -1; - this.cursor(); - return this.modes() - - } - - - label ( string, n ) { - - this.buttons[n].textContent = string; - - } - - icon ( string, y, n ) { - - this.buttons[n].style.padding = ( y || 0 ) +'px 0px'; - this.buttons[n].innerHTML = string; - - } - - testW () { - - let vw = this.spaces[0]*3 + this.bsizeMax*2, rz = false; - if( vw > this.w ) { - this.bsize[0] = ( this.w-(this.spaces[0]*3) ) * 0.5; - rz = true; - } else { - if( this.bsize[0] !== this.bsizeMax ) { - this.bsize[0] = this.bsizeMax; - rz = true; - } - } - - if( !rz ) return; - - let i = this.buttons.length; - while(i--) this.buttons[i].style.width = this.bsize[0] + 'px'; - - } - - rSize () { - - super.rSize(); - - this.testW(); - - let mid; - - this.tmpX = []; - this.tmpY = []; - - for( let j = 0; j < this.grid[0]; j++ ){ - - if(j===0){ - mid = ( this.w*0.5 ) - ( this.spaces[0]*0.5 ); - this.tmpX.push( [ mid-this.bsize[0], mid ] ); - } else { - mid = ( this.w*0.5 ) + ( this.spaces[0]*0.5 ); - this.tmpX.push( [ mid, mid+this.bsize[0] ] ); - } - - } - - mid = this.spaces[1]; - - for( let i = 0; i < this.grid[1]; i++ ){ - - this.tmpY.push( [ mid, mid + this.bsize[1] ] ); - mid += this.bsize[1] + this.spaces[1]; - - } - - } - + class Grid extends Proto { + constructor(o = {}) { + super(o); + + /*this.values = o.values || []; + if( typeof this.values === 'string' ) this.values = [ this.values ];*/ + + this.values = []; + if (o.values) { + if (o.values instanceof Array) { + this.values = o.values; + } else if (o.values instanceof String) { + this.values = [o.values]; + } else if (o.values instanceof Object) { + this.refObject = o.values; + for (let g in this.refObject) this.values.push(g); + } + } + this.lng = this.values.length; + this.value = o.value || null; + let cc = this.colors; + this.isSelectable = o.selectable || false; + this.spaces = o.spaces || [cc.sx, cc.sy]; + this.bsize = o.bsize || [90, this.h]; + this.bsizeMax = this.bsize[0]; + this.tmp = []; + this.stat = []; + this.grid = [2, Math.round(this.lng * 0.5)]; + this.h = this.grid[1] * this.bsize[1] + this.grid[1] * this.spaces[1]; //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); + + this.c[1].textContent = ''; + //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); + this.c[2] = this.dom('table', this.css.basic + 'width:100%; border-spacing: ' + (this.spaces[0] - 2) + 'px ' + this.spaces[1] + 'px; border:none;'); + let n = 0, + b, + td, + tr, + sel; + this.res = -1; + this.isDown = false; + this.neverlock = true; + this.buttons = []; + this.stat = []; + this.tmpX = []; + this.tmpY = []; + for (let i = 0; i < this.grid[1]; i++) { + tr = this.c[2].insertRow(); + tr.style.cssText = 'pointer-events:none;'; + for (let j = 0; j < this.grid[0]; j++) { + td = tr.insertCell(); + td.style.cssText = 'pointer-events:none;'; + if (this.values[n]) { + sel = false; + if (this.values[n] === this.value && this.isSelectable) sel = true; + b = document.createElement('div'); + b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:' + this.bsize[0] + 'px; height:' + (this.bsize[1] - 2) + 'px; border:' + cc.borderSize + 'px solid ' + cc.border + '; left:auto; right:auto; border-radius:' + this.radius + 'px;'; + b.style.background = sel ? cc.select : cc.button; + b.style.color = sel ? cc.textSelect : cc.text; + b.innerHTML = this.values[n]; + td.appendChild(b); + this.buttons.push(b); + this.stat.push(1); + } else { + b = document.createElement('div'); + b.style.cssText = this.css.txt + 'position:static; width:' + this.bsize[0] + 'px; height:' + this.bsize[1] + 'px; text-align:center; left:auto; right:auto; background:none;'; + td.appendChild(b); + } + if (j === 0) b.style.cssText += 'float:right;';else b.style.cssText += 'float:left;'; + n++; + } + } + this.s[0].border = 'none'; + this.init(); + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return -1; + l.y += this.mtop; + let tx = this.tmpX; + let ty = this.tmpY; + let id = -1; + let c = -1; + let line = -1; + let i = this.grid[0]; + while (i--) { + if (l.x > tx[i][0] && l.x < tx[i][1]) c = i; + } + i = this.grid[1]; + while (i--) { + if (l.y > ty[i][0] && l.y < ty[i][1]) line = i; + } + if (c !== -1 && line !== -1) { + id = c + line * 2; + if (id > this.lng - 1) id = -1; + } + return id; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (!this.isDown) return false; + this.isDown = false; + if (this.res !== -1) { + this.value = this.values[this.res]; + this.send(); + } + return this.mousemove(e); + } + mousedown(e) { + if (this.isDown) return false; + this.isDown = true; + return this.mousemove(e); + } + mousemove(e) { + let up = false; + this.res = this.testZone(e); + if (this.res !== -1) { + this.cursor('pointer'); + up = this.modes(this.isDown ? 3 : 2, this.res); + } else { + up = this.reset(); + } + return up; + } + + // ---------------------- + // MODE + // ----------------------- + + modes(N = 1, id = -1) { + let i = this.lng, + w, + n, + r = false; + while (i--) { + n = N; + w = this.isSelectable ? this.values[i] === this.value : false; + if (i === id) { + if (w && n === 2) n = 3; + } else { + n = 1; + if (w) n = 4; + } + if (this.mode(n, i)) r = true; + } + return r; + } + mode(n, id) { + let change = false; + let cc = this.colors, + s = this.buttons; + let i = id; + if (this.stat[id] !== n) { + this.stat[id] = n; + switch (n) { + case 1: + s[i].style.color = cc.text; + s[i].style.background = cc.button; + break; + case 2: + s[i].style.color = cc.textOver; + s[i].style.background = cc.overoff; + break; + case 3: + s[i].style.color = cc.textOver; + s[i].style.background = cc.over; + break; + case 4: + s[i].style.color = cc.textSelect; + s[i].style.background = cc.select; + break; + } + change = true; + } + return change; + } + + // ---------------------- + + reset() { + this.res = -1; + this.cursor(); + return this.modes(); + } + label(string, n) { + this.buttons[n].textContent = string; + } + icon(string, y, n) { + this.buttons[n].style.padding = (y || 0) + 'px 0px'; + this.buttons[n].innerHTML = string; + } + testW() { + let vw = this.spaces[0] * 3 + this.bsizeMax * 2, + rz = false; + if (vw > this.w) { + this.bsize[0] = (this.w - this.spaces[0] * 3) * 0.5; + rz = true; + } else { + if (this.bsize[0] !== this.bsizeMax) { + this.bsize[0] = this.bsizeMax; + rz = true; + } + } + if (!rz) return; + let i = this.buttons.length; + while (i--) this.buttons[i].style.width = this.bsize[0] + 'px'; + } + rSize() { + super.rSize(); + this.testW(); + let mid; + this.tmpX = []; + this.tmpY = []; + for (let j = 0; j < this.grid[0]; j++) { + if (j === 0) { + mid = this.w * 0.5 - this.spaces[0] * 0.5; + this.tmpX.push([mid - this.bsize[0], mid]); + } else { + mid = this.w * 0.5 + this.spaces[0] * 0.5; + this.tmpX.push([mid, mid + this.bsize[0]]); + } + } + mid = this.spaces[1]; + for (let i = 0; i < this.grid[1]; i++) { + this.tmpY.push([mid, mid + this.bsize[1]]); + mid += this.bsize[1] + this.spaces[1]; + } + } } - class Pad2D extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.autoWidth = false; - this.minw = this.w; - this.diam = o.diam || this.w; - - //this.margin = 15; - this.pos = new V2(0,0); - this.maxPos = 90; - - this.model = o.stype || 0; - if( o.mode !== undefined ) this.model = o.mode; - - this.min = o.min === undefined ? -1 : o.min; - this.max = o.max === undefined ? 1 : o.max; - - this.range = (this.max - this.min)*0.5; - - this.cmode = 0; - - - //console.log(this.range) - - this.c[0].style.display = 'block'; - - - - - - this.precision = o.precision === undefined ? 2 : o.precision; - - /*this.bounds = {}; - this.bounds.x1 = o.x1 || -1; - this.bounds.x2 = o.x2 || 1; - this.bounds.y1 = o.y1 || -1; - this.bounds.y2 = o.y2 || 1; - - this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); - this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); - - this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); - this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ - - this.value = ( Array.isArray( o.value ) && o.value.length == 2 ) ? o.value : [ 0, 0 ]; - - - this.h = o.h || this.w + 10; - - this.c[0].style.width = this.w + 'px'; - - // Title - if( this.c[1] !== undefined ) { // with title - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - - } - - //this.top -= this.margin - - let cc = this.colors; - - - // Value - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+ ( this.h - 20 ) + 'px; width:100%; color:' + cc.text ); - this.c[2].textContent = this.value; - - // Pad - - let pad = this.getPad2d(); - - this.setSvg( pad, 'fill', cc.back, 0 ); - this.setSvg( pad, 'fill', cc.button, 1 ); - this.setSvg( pad, 'stroke', cc.back, 2 ); - this.setSvg( pad, 'stroke', cc.back, 3 ); - this.setSvg( pad, 'stroke', cc.text, 4 ); - - this.setSvg( pad, 'viewBox', '0 0 '+this.diam+' '+this.diam ); - this.setCss( pad, { width:this.diam, height:this.diam, left:0, top:this.top }); - - this.c[3] = pad; - - this.init(); - this.setValue(); - - } - - testZone ( e ) { - - let l = this.local; - - if( l.x === -1 && l.y === -1 ) return ''; - - - - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'pad'; - - /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { - return 'pad'; - }*/ - - //return ''; - - } - - mouseup ( e ) { - - this.isDown = false; - return this.mode(0); - - } - - mousedown ( e ) { - - if ( this.testZone(e) === 'pad' ) { - - this.isDown = true; - this.mousemove( e ); - return this.mode(1); - } - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - let x = (this.w*0.5) - ( e.clientX - this.zone.x ); - let y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - - let r = 256 / this.diam; - - x = -(x*r); - y = -(y*r); - - x = Tools.clamp( x, -this.maxPos, this.maxPos ); - y = Tools.clamp( y, -this.maxPos, this.maxPos ); - - //let x = e.clientX - this.zone.x; - //let y = e.clientY - this.zone.y - this.top; - - /*if( x < this.margin ) x = this.margin; - if( x > this.w - this.margin ) x = this.w - this.margin; - if( y < this.margin ) y = this.margin; - if( y > this.w - this.margin ) y = this.w - this.margin;*/ - - //console.log(x,y) - - this.setPos( [ x , y ] ); - - this.update( true ); - - } - - mode ( mode ) { - - if( this.cmode === mode ) return false; - - let cc = this.colors; - - switch( mode ){ - case 0: // base - - this.s[2].color = cc.text; - this.setSvg( this.c[3], 'fill', cc.back, 0); - this.setSvg( this.c[3], 'fill', cc.button, 1); - this.setSvg( this.c[3], 'stroke', cc.back, 2); - this.setSvg( this.c[3], 'stroke', cc.back, 3); - this.setSvg( this.c[3], 'stroke', cc.text, 4 ); - - break; - case 1: // down - - this.s[2].color = cc.textSelect; - this.setSvg( this.c[3], 'fill', cc.backoff, 0); - this.setSvg( this.c[3], 'fill', cc.overoff, 1); - this.setSvg( this.c[3], 'stroke', cc.backoff, 2); - this.setSvg( this.c[3], 'stroke', cc.backoff, 3); - this.setSvg( this.c[3], 'stroke', cc.textSelect, 4 ); - - break; - } - - this.cmode = mode; - return true; - - - - } - - update ( up ) { - - //if( up === undefined ) up = true; - - this.c[2].textContent = this.value; - - this.updateSVG(); - - if( up ) this.send(); - - } - - updateSVG() { - - if ( this.model == 1 ) { - - this.setSvg( this.c[3], 'y1', this.pos.y, 2 ); - this.setSvg( this.c[3], 'y2', this.pos.y, 2 ); - - this.setSvg( this.c[3], 'x1', this.pos.x, 3 ); - this.setSvg( this.c[3], 'x2', this.pos.x, 3 ); - - } - - this.setSvg( this.c[3], 'cx', this.pos.x, 4 ); - this.setSvg( this.c[3], 'cy', this.pos.y, 4 ); - - } - - setPos ( p ) { - - //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; - - this.pos.set( p[0]+128 , p[1]+128 ); - - let r = 1/this.maxPos; - - this.value[0] = ((p[0]*r)*this.range).toFixed( this.precision ); - this.value[1] = ((p[1]*r)*this.range).toFixed( this.precision ); - - } - - setValue ( v, up = false ) { - - if( v === undefined ) v = this.value; - - /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; - if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; - if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; - if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ - - this.value[0] = Math.min( this.max, Math.max( this.min, v[0] ) ).toFixed( this.precision ) * 1; - this.value[1] = Math.min( this.max, Math.max( this.min, v[1] ) ).toFixed( this.precision ) * 1; - - this.pos.set( ((this.value[0]/this.range)*this.maxPos)+128 , ((this.value[1]/this.range)*this.maxPos)+128 ); - - //console.log(this.pos) - - this.update( up ); - - } - - /*lerp( s1, s2, d1, d2, c = true ) { - - let s = ( d2 - d1 ) / ( s2 - s1 ); - - return c ? ( v ) => { - return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 - } : ( v ) => { - return ( v - s1 ) * s + d1 - } - - }*/ - + class Pad2D extends Proto { + constructor(o = {}) { + super(o); + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + + //this.margin = 15; + this.pos = new V2(0, 0); + this.maxPos = 90; + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + this.min = o.min === undefined ? -1 : o.min; + this.max = o.max === undefined ? 1 : o.max; + this.range = (this.max - this.min) * 0.5; + this.cmode = 0; + + //console.log(this.range) + + this.c[0].style.display = 'block'; + this.precision = o.precision === undefined ? 2 : o.precision; + + /*this.bounds = {}; + this.bounds.x1 = o.x1 || -1; + this.bounds.x2 = o.x2 || 1; + this.bounds.y1 = o.y1 || -1; + this.bounds.y2 = o.y2 || 1; + this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); + this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); + this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); + this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ + + this.value = Array.isArray(o.value) && o.value.length == 2 ? o.value : [0, 0]; + this.h = o.h || this.w + 10; + this.c[0].style.width = this.w + 'px'; + + // Title + if (this.c[1] !== undefined) { + // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + } + + //this.top -= this.margin + + let cc = this.colors; + + // Value + this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); + this.c[2].textContent = this.value; + + // Pad + + let pad = this.getPad2d(); + this.setSvg(pad, 'fill', cc.back, 0); + this.setSvg(pad, 'fill', cc.button, 1); + this.setSvg(pad, 'stroke', cc.back, 2); + this.setSvg(pad, 'stroke', cc.back, 3); + this.setSvg(pad, 'stroke', cc.text, 4); + this.setSvg(pad, 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); + this.setCss(pad, { + width: this.diam, + height: this.diam, + left: 0, + top: this.top + }); + this.c[3] = pad; + this.init(); + this.setValue(); + } + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ''; + if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'pad'; + + /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { + return 'pad'; + }*/ + + //return ''; + } + mouseup(e) { + this.isDown = false; + return this.mode(0); + } + mousedown(e) { + if (this.testZone(e) === 'pad') { + this.isDown = true; + this.mousemove(e); + return this.mode(1); + } + } + mousemove(e) { + if (!this.isDown) return; + let x = this.w * 0.5 - (e.clientX - this.zone.x); + let y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); + let r = 256 / this.diam; + x = -(x * r); + y = -(y * r); + x = Tools.clamp(x, -this.maxPos, this.maxPos); + y = Tools.clamp(y, -this.maxPos, this.maxPos); + + //let x = e.clientX - this.zone.x; + //let y = e.clientY - this.zone.y - this.top; + + /*if( x < this.margin ) x = this.margin; + if( x > this.w - this.margin ) x = this.w - this.margin; + if( y < this.margin ) y = this.margin; + if( y > this.w - this.margin ) y = this.w - this.margin;*/ + + //console.log(x,y) + + this.setPos([x, y]); + this.update(true); + } + mode(mode) { + if (this.cmode === mode) return false; + let cc = this.colors; + switch (mode) { + case 0: + // base + + this.s[2].color = cc.text; + this.setSvg(this.c[3], 'fill', cc.back, 0); + this.setSvg(this.c[3], 'fill', cc.button, 1); + this.setSvg(this.c[3], 'stroke', cc.back, 2); + this.setSvg(this.c[3], 'stroke', cc.back, 3); + this.setSvg(this.c[3], 'stroke', cc.text, 4); + break; + case 1: + // down + + this.s[2].color = cc.textSelect; + this.setSvg(this.c[3], 'fill', cc.backoff, 0); + this.setSvg(this.c[3], 'fill', cc.overoff, 1); + this.setSvg(this.c[3], 'stroke', cc.backoff, 2); + this.setSvg(this.c[3], 'stroke', cc.backoff, 3); + this.setSvg(this.c[3], 'stroke', cc.textSelect, 4); + break; + } + this.cmode = mode; + return true; + } + update(up) { + //if( up === undefined ) up = true; + + this.c[2].textContent = this.value; + this.updateSVG(); + if (up) this.send(); + } + updateSVG() { + if (this.model == 1) { + this.setSvg(this.c[3], 'y1', this.pos.y, 2); + this.setSvg(this.c[3], 'y2', this.pos.y, 2); + this.setSvg(this.c[3], 'x1', this.pos.x, 3); + this.setSvg(this.c[3], 'x2', this.pos.x, 3); + } + this.setSvg(this.c[3], 'cx', this.pos.x, 4); + this.setSvg(this.c[3], 'cy', this.pos.y, 4); + } + setPos(p) { + //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; + + this.pos.set(p[0] + 128, p[1] + 128); + let r = 1 / this.maxPos; + this.value[0] = (p[0] * r * this.range).toFixed(this.precision); + this.value[1] = (p[1] * r * this.range).toFixed(this.precision); + } + setValue(v, up = false) { + if (v === undefined) v = this.value; + + /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; + if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; + if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; + if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ + + this.value[0] = Math.min(this.max, Math.max(this.min, v[0])).toFixed(this.precision) * 1; + this.value[1] = Math.min(this.max, Math.max(this.min, v[1])).toFixed(this.precision) * 1; + this.pos.set(this.value[0] / this.range * this.maxPos + 128, this.value[1] / this.range * this.maxPos + 128); + + //console.log(this.pos) + + this.update(up); + } + + /*lerp( s1, s2, d1, d2, c = true ) { + let s = ( d2 - d1 ) / ( s2 - s1 ); + return c ? ( v ) => { + return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 + } : ( v ) => { + return ( v - s1 ) * s + d1 + } + }*/ } - // proto/TreeList.js - - class TreeList extends Proto { - constructor(o = {}) { - // API pública esperada: - // o.tree (obj/array), o.value (array) - // o.focused (bool), o.focusPath (array), o.focusLevel (number) - // o.tabIndex, o.itemIndex, o.onChange (fn) - o.selectable = true; - o.name = o.name || 'TreeList'; - super(o); - - // Datos & estado - this.tree = o.tree || {}; - this.value = Array.isArray(o.value) ? o.value.slice() : []; - this.focused = !!o.focused; - this.focusPath = Array.isArray(o.focusPath) ? o.focusPath.slice() : []; - this.focusLevel = typeof o.focusLevel === 'number' ? o.focusLevel : -1; - - this.tabIndex = o.tabIndex ?? null; - this.itemIndex = o.itemIndex ?? null; - - // Callback - this.changeCb = typeof o.onChange === 'function' ? o.onChange : () => {}; - - // Layout interno / publicación de altura - this.lineH = this.h; // alto de UNA fila - this.levelGap = this.colors.sy || 2; // separación vertical entre niveles - this.leafMax = 0; // se calcula en rSize() - - // Modelo visual - this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] - this.itemsDom = []; // espejo DOM por nivel - this.hover = { level: -1, index: -1 }; - - // Contenedor interno (absoluto) - this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); - this.s[2] = this.c[2].style; - - this.init(); - } - - // ======= Helpers de tipo ======= - static isMap(node) { return node && typeof node === 'object' && !Array.isArray(node); } - static isList(node) { return Array.isArray(node); } - - // ======= Recorrido de datos ======= - getNodeAtPath(path) { - let node = this.tree; - for (let i = 0; i < path.length; i++) { - if (TreeList.isMap(node)) { - if (!Object.prototype.hasOwnProperty.call(node, path[i])) return { node: null, depth: i }; - node = node[path[i]]; - } else if (TreeList.isList(node)) { - // Llegamos a una lista: ya no hay más claves válidas - if (i < path.length) return { node, depth: i }; - } else { - return { node: null, depth: i }; - } - } - return { node, depth: path.length }; - } - - // Autocompletar: baja por primeras claves de cada mapa hasta alcanzar una lista - autoCompleteToLeaf(basePath) { - let { node } = this.getNodeAtPath(basePath); - const path = basePath.slice(); - while (TreeList.isMap(node)) { - const keys = Object.keys(node); - if (!keys.length) break; - const k0 = keys[0]; - path.push(k0); - node = node[k0]; - } - // Si termina en lista, NO agrega un ítem final de la hoja - return path; - } - - // Ruta activa (focusPath si focused, sino value) - getActivePath() { - return this.focused ? this.focusPath : this.value; - } - - // ======= Tamaño de hoja máximo (para layout estable) ======= - computeLeafMax(node = this.tree) { - if (Array.isArray(node)) return node.length; - if (!node || typeof node !== 'object') return 0; - let m = 0; - for (const k of Object.keys(node)) { - m = Math.max(m, this.computeLeafMax(node[k])); - } - return m; - } - - // ======= Construcción de niveles (modelo lógico) ======= - buildLevels() { - this.levels.length = 0; - const activePath = this.getActivePath(); - - let node = this.tree; - let level = 0; - - while (node) { - if (TreeList.isMap(node)) { - // Nivel intermedio: claves del mapa (horizontal) - const keys = Object.keys(node); - if (!keys.length) break; - this.levels.push({ - type: 'map', - items: keys.map(k => ({ key: k, label: k, zone: { x:0,y:0,w:0,h:0 } })), - zone: { x:0,y:0,w:0,h: this.lineH } - }); - - const nextKey = activePath[level]; - if (!nextKey || !node.hasOwnProperty(nextKey)) break; - node = node[nextKey]; - } else if (TreeList.isList(node)) { - // Nivel hoja: lista vertical - const items = node.map(label => ({ key: label, label, zone: { x:0,y:0,w:0,h:0 } })); - const hList = Math.max(items.length, this.leafMax) * this.lineH; - this.levels.push({ type: 'list', items, zone: { x:0, y:0, w:0, h: hList } }); - break; - } else { - break; - } - level++; - } - } - - // ======= Layout (zonas & DOM) ======= - layoutLevels() { - - const contentX = (this.sa || 100) + 8; // columna de label + padding - const padRight = 8; - const w = this.zone.w - contentX - padRight; - - - let y = 0; - - // Ajustar itemsDom a cantidad de niveles - while (this.itemsDom.length < this.levels.length) this.itemsDom.push([]); - for (let L = this.levels.length; L < this.itemsDom.length; L++) { - for (const el of this.itemsDom[L]) if (el && el.parentNode) el.parentNode.removeChild(el); - } - this.itemsDom.length = this.levels.length; - - for (let L = 0; L < this.levels.length; L++) { - const lvl = this.levels[L]; - this.itemsDom[L]; - if (lvl.type === 'map') { - const n = Math.max(1, lvl.items.length); - const cellW = Math.floor(w / n); - - lvl.zone = { x: contentX, y, w, h: this.lineH }; - let x = contentX; - - - for (let i = 0; i < lvl.items.length; i++) { - const it = lvl.items[i]; - it.zone = { x, y, w: cellW, h: this.lineH }; - const dom = this.ensureItemDom(L, i); - this.paintItemDom(dom, L, i, it, 'map'); - x += cellW; - } - // eliminar DOM sobrante si antes había más celdas - this._pruneRow(L, lvl.items.length); - y += this.lineH + this.levelGap; - } else { - // lista/hoja: reservar h según leafMax - const n = lvl.items.length; - const hList = Math.max(n, this.leafMax) * this.lineH; - - lvl.zone = { x: contentX, y, w, h: hList }; - - const rows = Math.max(n, this.leafMax); - for (let i = 0; i < rows; i++) { - const isReal = i < n; - const it = isReal ? lvl.items[i] : { key: null, label: '', zone: { x:0,y:0,w:0,h:0 } }; - - it.zone = { x: contentX, y: y + i * this.lineH, w, h: this.lineH }; - const dom = this.ensureItemDom(L, i); - this.paintItemDom(dom, L, i, it, 'list', isReal); - } - // eliminar DOM sobrante si antes había más filas - this._pruneRow(L, rows); - y += hList; - } - } - - // Ajustes de alto interno del contenedor visual - const totalH = y; - this.zone.h = totalH + this.margin; - this.s[0].height = this.zone.h + 'px'; - this.s[2].height = totalH + 'px'; - - // Publicar alto total al GUI (sumará u.h) - this._publishHeight(); - } - - - - // Elimina nodos DOM sobrantes en la fila L a partir del índice keep - _pruneRow(L, keep) { - const row = this.itemsDom[L]; - // si nunca se creó, nada que hacer - if (!row) return; - for (let j = keep; j < row.length; j++) { - const el = row[j]; - if (el && el.parentNode) el.parentNode.removeChild(el); - } - row.length = keep; - } - - - ensureItemDom(L, i) { - const row = this.itemsDom[L]; - while (row.length <= i) row.push(null); - if (!row[i]) { - const div = this.dom('div', Tools.css.txt + 'position:absolute; pointer-events:none;'); - this.c[2].appendChild(div); - row[i] = div; - } - return row[i]; - } - - paintItemDom(div, L, i, it, kind, isReal = true) { - const s = div.style; - const cc = this.colors; - - // Posición - s.left = it.zone.x + 'px'; - s.top = it.zone.y + 'px'; - s.width = it.zone.w + 'px'; - s.height = (it.zone.h - 2) + 'px'; - - // Texto - div.textContent = isReal ? it.label : ''; - - // Estados - const selected = isReal && this.value[L] !== undefined && this.value[L] === it.key; - const inFocusLvl = this.focused && (this.focusLevel === L); - const focusMatch = isReal && inFocusLvl && (this.focusPath[L] === it.key); - const isHover = isReal && (this.hover.level === L && this.hover.index === i); - - // Estilos base - s.background = cc.back; - s.color = cc.text; - s.border = '1px solid ' + cc.border; - s.textAlign = kind === 'map' ? 'center' : 'left'; - - // Prioridad visual: seleccionado > foco > hover > base - if (selected) { - s.background = cc.select; - s.color = cc.textSelect; - } else if (focusMatch) { - s.background = cc.backgroundOver; - s.color = cc.textOver; - } else if (isHover) { - s.background = cc.overoff; - s.color = cc.textOver; - } - - // Filas de padding invisibles en hoja - s.opacity = isReal ? '1' : '0'; - } - - // ======= Ciclo de vida ======= - rSize() { - this.leafMax = this.computeLeafMax(this.tree); - this.buildLevels(); - this.layoutLevels(); - } - - update() { - this.buildLevels(); - this.layoutLevels(); - } - - // ======= Interacción ======= - _toLocal(e) { - const mx = e.clientX - this.zone.x; - const my = e.clientY - this.zone.y; - return { x: mx, y: my }; - } - - _hitTest(mx, my) { - for (let L = 0; L < this.levels.length; L++) { - const lvl = this.levels[L]; - const z = lvl.zone; // x y w ya incluyen contentX - if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; - - if (lvl.type === 'map') { - for (let i = 0; i < lvl.items.length; i++) { - const itz = lvl.items[i].zone; - if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { - return { L, i, real: true }; - } - } - } else { - const nRows = Math.max(lvl.items.length, this.leafMax); - for (let i = 0; i < nRows; i++) { - const isReal = i < lvl.items.length; - const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.lineH, w: z.w, h: this.lineH }; - if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { - return { L, i, real: isReal }; - } - } - } - } - return { L: -1, i: -1, real: false }; - } - - handleEvent(e) { - if (this.lock) return false; - - if (e.type === 'mousemove') { - const { x, y } = this._toLocal(e); - const ht = this._hitTest(x, y); - this.hover = (ht.L !== -1 && ht.real) ? { level: ht.L, index: ht.i } : { level: -1, index: -1 }; - this.update(); - return true; - } - - if (e.type === 'mousedown') { - const { x, y } = this._toLocal(e); - const ht = this._hitTest(x, y); - if (ht.L !== -1 && ht.real) { - this._selectAt(ht.L, ht.i); - return true; - } - } - - if (e.type === 'mouseup') { - return true; - } - - // (Opcional) teclado: integrar navegación en Gui y reenviar aquí si se desea - return false; - } - - // Selección + autocompletado + notificación - _selectAt(L, i) { - const lvl = this.levels[L]; - const chosen = lvl.items[i]; - if (!chosen || !chosen.key) return; - - const base = this.value.slice(0, L); - base[L] = chosen.key; - - const newPath = this.autoCompleteToLeaf(base); - - this.value = newPath.slice(); - this.update(); - - // ✅ Actualiza objeto enlazado (si existe) y dispara callbacks “clásicos” - this.send(newPath); // escribe en objectLink[objectKey] si hay referencia - this.changeCb(this.tabIndex, this.itemIndex, newPath); - } - - - // ======= API pública ======= - setValue(path) { - this.value = Array.isArray(path) ? path.slice() : []; - this.update(); - } - - setTree(tree) { - this.tree = tree || {}; - // recalcular leafMax en próxima pasada - this.leafMax = this.computeLeafMax(this.tree); - this.update(); - } - - setFocus({ focused, focusPath, focusLevel }) { - if (typeof focused === 'boolean') this.focused = focused; - if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); - if (typeof focusLevel === 'number') this.focusLevel = focusLevel; - this.update(); - } - - // ======= Publicación de altura ======= - _countVisibleIntermediates() { - let c = 0; - for (let i = 0; i < this.levels.length; i++) if (this.levels[i].type === 'map') c++; - return c; - } - - _getCurrentLeafLength() { - const last = this.levels[this.levels.length - 1]; - return last && last.type === 'list' ? last.items.length : 0; - } - - _publishHeight() { - const inter = this._countVisibleIntermediates(); - const leafLen = Math.max(this.leafMax, this._getCurrentLeafLength()); - const leafH = leafLen * this.lineH; - const interH = inter * (this.lineH + this.levelGap); - const totalH = interH + (inter ? this.levelGap : 0) + leafH; - - // Actualiza métricas del proto (lo que suma el GUI) - this.h = totalH; - this.zone.h = this.h + this.margin; - this.s[0].height = this.h + 'px'; - - // Avisar al GUI y refrescar zonas - if (this.isUI && this.main) this.main.calc(); - Roots.needReZone = true; - } + // proto/TreeList.js + class TreeList extends Proto { + constructor(o = {}) { + // API pública esperada: + // o.tree (obj/array), o.value (array) + // o.focused (bool), o.focusPath (array), o.focusLevel (number) + // o.tabIndex, o.itemIndex, o.onChange (fn) + o.selectable = true; + o.name = o.name || 'TreeList'; + super(o); + + // Datos & estado + this.tree = o.tree || {}; + this.value = Array.isArray(o.value) ? o.value.slice() : []; + this.focused = !!o.focused; + this.focusPath = Array.isArray(o.focusPath) ? o.focusPath.slice() : []; + this.focusLevel = typeof o.focusLevel === 'number' ? o.focusLevel : -1; + this.tabIndex = o.tabIndex ?? null; + this.itemIndex = o.itemIndex ?? null; + + // Callback + this.changeCb = typeof o.onChange === 'function' ? o.onChange : () => {}; + + // Layout interno / publicación de altura + this.lineH = this.h; // alto de UNA fila + this.levelGap = this.colors.sy || 2; // separación vertical entre niveles + this.leafMax = 0; // se calcula en rSize() + + // Modelo visual + this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] + this.itemsDom = []; // espejo DOM por nivel + this.hover = { + level: -1, + index: -1 + }; + + // 🔸 NUEVO: recordar la última hoja seleccionada (persistente) + this.lastLeaf = { + parentPath: [], + key: null + }; // parentPath es la ruta hasta el mapa padre + + // Contenedor interno (absoluto) + this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); + this.s[2] = this.c[2].style; + this.init(); + + // Si el valor inicial ya apunta a una hoja válida, recordar esa hoja + this._maybeUpdateLastLeafFromValue(); + } + + // ======= Helpers de tipo ======= + static isMap(node) { + return node && typeof node === 'object' && !Array.isArray(node); + } + static isList(node) { + return Array.isArray(node); + } + + // ======= Recorrido de datos ======= + getNodeAtPath(path) { + let node = this.tree; + for (let i = 0; i < path.length; i++) { + if (TreeList.isMap(node)) { + if (!Object.prototype.hasOwnProperty.call(node, path[i])) return { + node: null, + depth: i + }; + node = node[path[i]]; + } else if (TreeList.isList(node)) { + // Llegamos a una lista: ya no hay más claves válidas + if (i < path.length) return { + node, + depth: i + }; + } else { + return { + node: null, + depth: i + }; + } + } + return { + node, + depth: path.length + }; + } + + // Autocompletar: baja por primeras claves de cada mapa hasta alcanzar una lista + autoCompleteToLeaf(basePath) { + let { + node + } = this.getNodeAtPath(basePath); + const path = basePath.slice(); + while (TreeList.isMap(node)) { + const keys = Object.keys(node); + if (!keys.length) break; + const k0 = keys[0]; + path.push(k0); + node = node[k0]; + } + // Si termina en lista, NO agrega un ítem final de la hoja + return path; + } + + // Ruta activa (focusPath si focused, sino value) + getActivePath() { + return this.focused ? this.focusPath : this.value; + } + + // ======= Tamaño de hoja máximo (para layout estable) ======= + computeLeafMax(node = this.tree) { + if (Array.isArray(node)) return node.length; + if (!node || typeof node !== 'object') return 0; + let m = 0; + for (const k of Object.keys(node)) { + m = Math.max(m, this.computeLeafMax(node[k])); + } + return m; + } + + // ======= Construcción de niveles (modelo lógico) ======= + buildLevels() { + this.levels.length = 0; + const activePath = this.getActivePath(); + let node = this.tree; + let level = 0; + while (node) { + if (TreeList.isMap(node)) { + // Nivel intermedio: claves del mapa (horizontal) + const keys = Object.keys(node); + if (!keys.length) break; + this.levels.push({ + type: 'map', + items: keys.map(k => ({ + key: k, + label: k, + zone: { + x: 0, + y: 0, + w: 0, + h: 0 + } + })), + zone: { + x: 0, + y: 0, + w: 0, + h: this.lineH + } + }); + const nextKey = activePath[level]; + if (!nextKey || !node.hasOwnProperty(nextKey)) break; + node = node[nextKey]; + } else if (TreeList.isList(node)) { + // Nivel hoja: lista vertical + const items = node.map(label => ({ + key: label, + label, + zone: { + x: 0, + y: 0, + w: 0, + h: 0 + } + })); + const hList = Math.max(items.length, this.leafMax) * this.lineH; + this.levels.push({ + type: 'list', + items, + zone: { + x: 0, + y: 0, + w: 0, + h: hList + } + }); + break; + } else { + break; + } + level++; + } + } + + // ======= Layout (zonas & DOM) ======= + layoutLevels() { + const contentX = (this.sa || 100) + 8; // columna de label + padding + const padRight = 8; + const w = this.zone.w - contentX - padRight; + let y = 0; + + // Ajustar itemsDom a cantidad de niveles + while (this.itemsDom.length < this.levels.length) this.itemsDom.push([]); + for (let L = this.levels.length; L < this.itemsDom.length; L++) { + for (const el of this.itemsDom[L]) if (el && el.parentNode) el.parentNode.removeChild(el); + } + this.itemsDom.length = this.levels.length; + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + if (lvl.type === 'map') { + const n = Math.max(1, lvl.items.length); + const cellW = Math.floor(w / n); + lvl.zone = { + x: contentX, + y, + w, + h: this.lineH + }; + let x = contentX; + for (let i = 0; i < lvl.items.length; i++) { + const it = lvl.items[i]; + it.zone = { + x, + y, + w: cellW, + h: this.lineH + }; + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, 'map'); + x += cellW; + } + // eliminar DOM sobrante si antes había más celdas + this._pruneRow(L, lvl.items.length); + y += this.lineH + this.levelGap; + } else { + // lista/hoja: reservar h según leafMax + const n = lvl.items.length; + const hList = Math.max(n, this.leafMax) * this.lineH; + lvl.zone = { + x: contentX, + y, + w, + h: hList + }; + const rows = Math.max(n, this.leafMax); + for (let i = 0; i < rows; i++) { + const isReal = i < n; + const it = isReal ? lvl.items[i] : { + key: null, + label: '', + zone: { + x: 0, + y: 0, + w: 0, + h: 0 + } + }; + it.zone = { + x: contentX, + y: y + i * this.lineH, + w, + h: this.lineH + }; + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, 'list', isReal); + } + // eliminar DOM sobrante si antes había más filas + this._pruneRow(L, rows); + y += hList; + } + } + + // Ajustes de alto interno del contenedor visual + const totalH = y; + this.zone.h = totalH + this.margin; + this.s[0].height = this.zone.h + 'px'; + this.s[2].height = totalH + 'px'; + + // Publicar alto total al GUI (sumará u.h) + this._publishHeight(); + } + + // Elimina nodos DOM sobrantes en la fila L a partir del índice keep + _pruneRow(L, keep) { + const row = this.itemsDom[L]; + if (!row) return; + for (let j = keep; j < row.length; j++) { + const el = row[j]; + if (el && el.parentNode) el.parentNode.removeChild(el); + } + row.length = keep; + } + ensureItemDom(L, i) { + const row = this.itemsDom[L]; + while (row.length <= i) row.push(null); + if (!row[i]) { + const div = this.dom('div', Tools.css.txt + 'position:absolute; pointer-events:none;'); + this.c[2].appendChild(div); + row[i] = div; + } + return row[i]; + } + paintItemDom(div, L, i, it, kind, isReal = true) { + const s = div.style; + const cc = this.colors; + + // Posición + s.left = it.zone.x + 'px'; + s.top = it.zone.y + 'px'; + s.width = it.zone.w + 'px'; + s.height = it.zone.h - 2 + 'px'; + + // Texto + div.textContent = isReal ? it.label : ''; + + // Estados + const selected = isReal && this.value[L] !== undefined && this.value[L] === it.key; + const inFocusLvl = this.focused && this.focusLevel === L; + const focusMatch = isReal && inFocusLvl && this.focusPath[L] === it.key; + const isHover = isReal && this.hover.level === L && this.hover.index === i; + + // 🔸 NUEVO: ¿esta fila es la última hoja seleccionada? + let isLastLeaf = false; + if (isReal && kind === 'list' && this.lastLeaf.key != null) { + // La hoja visible corresponde si el padre de esta lista coincide con parentPath guardado + // El padre actual es this.value.slice(0, L) cuando la lista está desplegada por value/focus + const parentNow = this.getActivePath().slice(0, L); + if (this._pathsEqual(parentNow, this.lastLeaf.parentPath) && it.key === this.lastLeaf.key) { + isLastLeaf = true; + } + } + + // Estilos base + s.background = cc.back; + s.color = cc.text; + s.border = '1px solid ' + cc.border; + s.textAlign = kind === 'map' ? 'center' : 'left'; + + // Prioridad visual: + // 1) seleccionado (azul) + // 2) última hoja (nuevo color) + // 3) foco + // 4) hover + if (selected) { + s.background = cc.select; + s.color = cc.textSelect; + } else if (isLastLeaf) { + // color distintivo para "última hoja" (amarillo suave) + s.background = 'rgba(255, 200, 0, 0.25)'; + s.color = cc.text; + } else if (focusMatch) { + s.background = cc.backgroundOver; + s.color = cc.textOver; + } else if (isHover) { + s.background = cc.overoff; + s.color = cc.textOver; + } + + // Filas de padding invisibles en hoja + s.opacity = isReal ? '1' : '0'; + } + _pathsEqual(a, b) { + if (!a || !b || a.length !== b.length) return false; + for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false; + return true; + } + + // ======= Ciclo de vida ======= + rSize() { + this.leafMax = this.computeLeafMax(this.tree); + this.buildLevels(); + this.layoutLevels(); + } + update() { + this.buildLevels(); + this.layoutLevels(); + } + + // ======= Interacción ======= + _toLocal(e) { + const mx = e.clientX - this.zone.x; + const my = e.clientY - this.zone.y; + return { + x: mx, + y: my + }; + } + _hitTest(mx, my) { + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + const z = lvl.zone; // x y w ya incluyen contentX + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.x + z.w) continue; + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; + if (lvl.type === 'map') { + for (let i = 0; i < lvl.items.length; i++) { + const itz = lvl.items[i].zone; + if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { + return { + L, + i, + real: true + }; + } + } + } else { + const nRows = Math.max(lvl.items.length, this.leafMax); + for (let i = 0; i < nRows; i++) { + const isReal = i < lvl.items.length; + const itz = isReal ? lvl.items[i].zone : { + x: z.x, + y: z.y + i * this.lineH, + w: z.w, + h: this.lineH + }; + if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { + return { + L, + i, + real: isReal + }; + } + } + } + } + return { + L: -1, + i: -1, + real: false + }; + } + handleEvent(e) { + if (this.lock) return false; + if (e.type === 'mousemove') { + const { + x, + y + } = this._toLocal(e); + const ht = this._hitTest(x, y); + this.hover = ht.L !== -1 && ht.real ? { + level: ht.L, + index: ht.i + } : { + level: -1, + index: -1 + }; + this.update(); + return true; + } + if (e.type === 'mousedown') { + const { + x, + y + } = this._toLocal(e); + const ht = this._hitTest(x, y); + if (ht.L !== -1 && ht.real) { + this._selectAt(ht.L, ht.i); + return true; + } + } + if (e.type === 'mouseup') { + return true; + } + + // (Opcional) teclado: integrar navegación en Gui y reenviar aquí si se desea + return false; + } + + // Selección + autocompletado + notificación + _selectAt(L, i) { + const lvl = this.levels[L]; + const chosen = lvl.items[i]; + if (!chosen || !chosen.key) return; + const base = this.value.slice(0, L); + base[L] = chosen.key; + const newPath = this.autoCompleteToLeaf(base); + + // 🔸 Si el usuario selecciona explícitamente en el nivel hoja, recordarlo + if (lvl.type === 'list') { + this.lastLeaf.parentPath = this.value.slice(0, L); // padre de la lista actual + this.lastLeaf.key = chosen.key; + } + this.value = newPath.slice(); + this.update(); + + // si está referenciado, propaga a objeto externo + this.send(newPath); + this.changeCb(this.tabIndex, this.itemIndex, newPath); + } + + // ======= API pública ======= + setValue(path) { + this.value = Array.isArray(path) ? path.slice() : []; + // Si desde afuera nos setean una hoja válida, también la recordamos + this._maybeUpdateLastLeafFromValue(); + this.update(); + } + setTree(tree) { + this.tree = tree || {}; + this.leafMax = this.computeLeafMax(this.tree); + this.update(); + } + setFocus({ + focused, + focusPath, + focusLevel + }) { + if (typeof focused === 'boolean') this.focused = focused; + if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); + if (typeof focusLevel === 'number') this.focusLevel = focusLevel; + this.update(); + } + _maybeUpdateLastLeafFromValue() { + // Si value apunta a padre+hoja (…,[leaf]) y es válida, recordar esa hoja + if (!Array.isArray(this.value) || this.value.length === 0) return; + const parent = this.value.slice(0, this.value.length - 1); + const leaf = this.value[this.value.length - 1]; + const info = this.getNodeAtPath(parent); + if (info && Array.isArray(info.node) && info.node.includes(leaf)) { + this.lastLeaf = { + parentPath: parent, + key: leaf + }; + } + } + + // ======= Publicación de altura ======= + _countVisibleIntermediates() { + let c = 0; + for (let i = 0; i < this.levels.length; i++) if (this.levels[i].type === 'map') c++; + return c; + } + _getCurrentLeafLength() { + const last = this.levels[this.levels.length - 1]; + return last && last.type === 'list' ? last.items.length : 0; + } + _publishHeight() { + const inter = this._countVisibleIntermediates(); + const leafLen = Math.max(this.leafMax, this._getCurrentLeafLength()); + const leafH = leafLen * this.lineH; + const interH = inter * (this.lineH + this.levelGap); + const totalH = interH + (inter ? this.levelGap : 0) + leafH; + + // Actualiza métricas del proto (lo que suma el GUI) + this.h = totalH; + this.zone.h = this.h + this.margin; + this.s[0].height = this.h + 'px'; + + // Avisar al GUI y refrescar zonas + if (this.isUI && this.main) this.main.calc(); + Roots.needReZone = true; + } } - const add = function () { - - let a = arguments; - - let type, o, ref = false, n = null; - - if( typeof a[0] === 'string' ){ - - type = a[0]; - o = a[1] || {}; - - } else if ( typeof a[0] === 'object' ){ // like dat gui - - ref = true; - if( a[2] === undefined ) [].push.call(a, {}); - - type = a[2].type ? a[2].type : autoType( a[0][a[1]], a[2] ); - - o = a[2]; - o.name = a[1]; - if (o.hasOwnProperty("displayName")) o.name = o.displayName; - - if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } - else o.value = a[0][a[1]]; - - } - - let name = type.toLowerCase(); - - if( name === 'group' ){ - o.add = add; - //o.dx = 8 - } - - switch( name ){ - - case 'bool': case 'boolean': n = new Bool(o); break; - case 'button': n = new Button(o); break; - case 'circular': n = new Circular(o); break; - case 'color': n = new Color(o); break; - case 'fps': n = new Fps(o); break; - case 'graph': n = new Graph(o); break; - case 'group': n = new Group(o); break; - case 'joystick': n = new Joystick(o); break; - case 'knob': n = new Knob(o); break; - case 'list': n = new List(o); break; - case 'numeric': case 'number': n = new Numeric(o); break; - case 'slide': n = new Slide(o); break; - case 'textInput': case 'string': n = new TextInput(o); break; - case 'title': case 'text': n = new Title(o); break; - case 'select': n = new Select(o); break; - case 'bitmap': n = new Bitmap(o); break; - case 'selector': n = new Selector(o); break; - case 'empty': case 'space': n = new Empty(o); break; - case 'item': n = new Item(o); break; - case 'grid': n = new Grid(o); break; - case 'pad2d': case 'pad': n = new Pad2D(o); break; - case 'treelist': n = new TreeList(o); break; - - } - - - - if( n !== null ){ - - Roots.needResize = true; - - if( ref ) n.setReferency( a[0], a[1] ); - return n; - - } - - }; - - const autoType = function ( v, o ) { - - let type = 'slide'; - - if( typeof v === 'boolean' ) type = 'bool'; - else if( typeof v === 'string' ){ - - if( v.substring(0,1) === '#' ) type = 'color'; - else type = 'string'; - - } else if( typeof v === 'number' ){ - - if( o.ctype ) type = 'color'; - else type = 'slide'; - - } else if( typeof v === 'array' && v instanceof Array ){ - - if( typeof v[0] === 'number' ) type = 'number'; - else if( typeof v[0] === 'string' ) type = 'list'; - - } else if( typeof v === 'object' && v instanceof Object ){ - - if( v.x !== undefined ) type = 'number'; - else type = 'list'; - - } - - return type - + const add = function () { + let a = arguments; + let type, + o, + ref = false, + n = null; + if (typeof a[0] === 'string') { + type = a[0]; + o = a[1] || {}; + } else if (typeof a[0] === 'object') { + // like dat gui + + ref = true; + if (a[2] === undefined) [].push.call(a, {}); + type = a[2].type ? a[2].type : autoType(a[0][a[1]], a[2]); + o = a[2]; + o.name = a[1]; + if (o.hasOwnProperty("displayName")) o.name = o.displayName; + if (type === 'list' && !o.list) { + o.list = a[0][a[1]]; + } else o.value = a[0][a[1]]; + } + let name = type.toLowerCase(); + if (name === 'group') { + o.add = add; + //o.dx = 8 + } + switch (name) { + case 'bool': + case 'boolean': + n = new Bool(o); + break; + case 'button': + n = new Button(o); + break; + case 'circular': + n = new Circular(o); + break; + case 'color': + n = new Color(o); + break; + case 'fps': + n = new Fps(o); + break; + case 'graph': + n = new Graph(o); + break; + case 'group': + n = new Group(o); + break; + case 'joystick': + n = new Joystick(o); + break; + case 'knob': + n = new Knob(o); + break; + case 'list': + n = new List(o); + break; + case 'numeric': + case 'number': + n = new Numeric(o); + break; + case 'slide': + n = new Slide(o); + break; + case 'textInput': + case 'string': + n = new TextInput(o); + break; + case 'title': + case 'text': + n = new Title(o); + break; + case 'select': + n = new Select(o); + break; + case 'bitmap': + n = new Bitmap(o); + break; + case 'selector': + n = new Selector(o); + break; + case 'empty': + case 'space': + n = new Empty(o); + break; + case 'item': + n = new Item(o); + break; + case 'grid': + n = new Grid(o); + break; + case 'pad2d': + case 'pad': + n = new Pad2D(o); + break; + case 'treelist': + n = new TreeList(o); + break; + } + if (n !== null) { + Roots.needResize = true; + if (ref) n.setReferency(a[0], a[1]); + return n; + } + }; + const autoType = function (v, o) { + let type = 'slide'; + if (typeof v === 'boolean') type = 'bool';else if (typeof v === 'string') { + if (v.substring(0, 1) === '#') type = 'color';else type = 'string'; + } else if (typeof v === 'number') { + if (o.ctype) type = 'color';else type = 'slide'; + } else if (typeof v === 'array' && v instanceof Array) { + if (typeof v[0] === 'number') type = 'number';else if (typeof v[0] === 'string') type = 'list'; + } else if (typeof v === 'object' && v instanceof Object) { + if (v.x !== undefined) type = 'number';else type = 'list'; + } + return type; }; - /** - * @author lth / https://github.com/lo-th - */ - - class Gui { - constructor(o = {}) { - this.isGui = true; - - this.name = "gui"; - - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; - - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors); - else this.colors = Tools.defineColor(o); - - //this.cleanning = false - - // style - this.css = Tools.cloneCss(); - - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 - - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; - - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") - ? o.addDOMEventListeners - : true; - - this.callback = o.callback === undefined ? null : o.callback; - - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; - - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - - this.cn = ""; - - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; - - this.size.h = this.size.h < 11 ? 11 : this.size.h; - - // local mouse and zone - this.local = new V2().neg(); - this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; - - // virtual mouse - this.mouse = new V2().neg(); - - this.h = 0; - //this.prevY = -1; - this.sw = 0; - - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); - - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; - - this.autoResize = o.autoResize === undefined ? true : o.autoResize; - - // default position - this.isCenter = o.center || false; - this.cssGui = - o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; - - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; - - this.isNewTarget = false; - - let cc = this.colors; - - this.content = Tools.dom( - "div", - this.css.basic + - " width:0px; height:auto; top:0px; background:" + - cc.content + - "; " + - this.cssGui - ); - - this.innerContent = Tools.dom( - "div", - this.css.basic + - "width:100%; top:0; left:0; height:auto; overflow:hidden;" - ); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); - - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom( - "div", - this.css.basic + flexible + "width:100%; left:0; " - ); - this.innerContent.appendChild(this.inner); - - // scroll - this.scrollBG = Tools.dom( - "div", - this.css.basic + - "right:0; top:0; width:" + - (this.size.s - 1) + - "px; height:10px; display:none; background:" + - cc.background + - ";" - ); - this.content.appendChild(this.scrollBG); - - this.scroll = Tools.dom( - "div", - this.css.basic + - "background:" + - cc.button + - "; right:2px; top:0; width:" + - (this.size.s - 4) + - "px; height:10px;" - ); - this.scrollBG.appendChild(this.scroll); - - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; - - let r = cc.radius; - this.bottom = Tools.dom( - "div", - this.css.txt + - "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + - r + - "px; border-bottom-left-radius:" + - r + - "px; justify-content:center; height:" + - this.bh + - "px; line-height:" + - (this.bh - 5) + - "px; color:" + - cc.text + - ";" - ); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - this.bottom.style.background = cc.background; - - // - - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; - - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } - - if (this.parent !== null) this.parent.appendChild(this.content); - - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } - - // height transition - this.transition = - o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - - this.setWidth(); - - if (this.isCanvas) this.makeCanvas(); - - Roots.add(this); - } - - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseUp(x, y) { - /* - - clientX,clientY are no used when isCanvas==true - */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); - - Roots.needReZone = true; - } - - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = - "height " + this.transition + "s ease-out"; - this.content.style.transition = - "height " + this.transition + "s ease-out"; - this.bottom.style.transition = "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } - - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } - - // ---------------------- - // CANVAS - // ---------------------- - - onDraw() {} - - makeCanvas() { - this.canvas = document.createElementNS( - "http://www.w3.org/1999/xhtml", - "canvas" - ); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - - //console.log( this.canvas.width, this.canvas.height ) - } - - draw(force) { - if (this.canvas === null) return; - - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } - - ////// - - getDom() { - return this.content; - } - - noMouse() { - this.mouse.neg(); - } - - setMouse(uv, flip = true) { - if (flip) - this.mouse.set( - Math.round(uv.x * this.canvas.width), - this.canvas.height - Math.round(uv.y * this.canvas.height) - ); - else - this.mouse.set( - Math.round(uv.x * this.canvas.width), - Math.round(uv.y * this.canvas.height) - ); - //this.mouse.set( m.x, m.y ); - - //console.log("setMouse "+uv.x+" "+uv.y) - } - - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } - - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } - - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } - - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } - - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } - - onChange(f) { - this.callback = f || null; - return this; - } - - // ---------------------- - // STYLES - // ---------------------- - - mode(n) { - let needChange = false; - let cc = this.colors; - - if (n !== this.cn) { - this.cn = n; - - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } - - needChange = true; - } - - return needChange; - } - - // ---------------------- - // TARGET - // ---------------------- - - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } - - this.proto = null; - this.current = -1; - - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - - Roots.cursor(); - return true; - } - - // ---------------------- - // ZONE TEST - // ---------------------- - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - - this.isReset = false; - - let name = ""; - - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; - else name = l.x > s ? "scroll" : "content"; - - return name; - } - - // ---------------------- - // EVENTS - // ---------------------- - - handleEvent(e) { - //if( this.cleanning ) return - - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; - - let change = false; - let protoChange = false; - - let name = this.testZone(e); - - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; - - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } - - if (!name) return; - - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - - if (Roots.isMobile && type === "mousedown") this.getNext(e, change); - - if (this.proto) protoChange = this.proto.handleEvent(e); - - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) - change = this.onWheel(e); - - if (!Roots.lock) { - this.getNext(e, change); - } - - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } - - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); - - break; - } - - if (this.isDown) change = true; - if (protoChange) change = true; - - if (type === "keyup") change = true; - if (type === "keydown") change = true; - - if (change) this.draw(); - } - - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); - - if (next !== this.current) { - this.clearTarget(); - this.current = next; - this.isNewTarget = true; - } - - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } - - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } - - // ---------------------- - // RESET - // ---------------------- - - reset(force) { - if (this.isReset) return; - - //this.resetItem(); - - this.mouse.neg(); - this.isDown = false; - - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); - - if (r || r2) this.draw(true); - - this.isReset = true; - - //Roots.lock = false; - } - - // ---------------------- - // ADD NODE - // ---------------------- - - add() { - //if(this.cleanning) this.cleanning = false - - let a = arguments; - let ontop = false; - - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; - - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); - else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } - - let u = add.apply(this, a); - - if (u === null) return; - - if (ontop) this.uis.unshift(u); - else this.uis.push(u); - - this.calc(); - - this.isEmpty = false; - - return u; - } - - // remove one node - - remove(n) { - if (n.dispose) n.dispose(); - } - - // call after uis clear - - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } - - // clear all gui - - empty() { - //this.cleanning = true - - //this.close(); - - let i = this.uis.length, - item; - - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } - - this.uis = []; - this.isEmpty = true; - this.calc(); - } - - clear() { - this.empty(); - } - - clear2() { - setTimeout(this.empty.bind(this), 0); - } - - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } - - // ---------------------- - // ITEMS SPECIAL - // ---------------------- - - resetItem() { - if (!this.isItemMode) return; - - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } - - setItem(name) { - if (!this.isItemMode) return; - - name = name || ""; - this.resetItem(); - - if (!name) { - this.update(0); - return; - } - - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) - this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } - - // ---------------------- - // SCROLL - // ---------------------- - - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; - - if (b) { - this.total = this.h; - - this.maxView = this.maxHeight; - - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; - - this.range = this.maxView - this.sh; - - this.oy = Tools.clamp(this.oy, 0, this.range); - - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } - - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } - - update(y) { - y = Tools.clamp(y, 0, this.range); - - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } - - // ---------------------- - // RESIZE FUNCTION - // ---------------------- - - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } - - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } - - setHeight() { - if (this.tmp) clearTimeout(this.tmp); - - this.zone.h = this.bh; - this.isScroll = false; - - if (this.isOpen) { - this.h = this.calcUis(); - - let hhh = this.forceHeight - ? this.forceHeight + this.zone.y - : window.innerHeight; - - this.maxHeight = hhh - this.zone.y - this.bh; - - let diff = this.h - this.maxHeight; - - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } - - this.upScroll(this.isScroll); - - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; - - if (this.forceHeight && this.lockHeight) - this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } - - rezone() { - Roots.needReZone = true; - } - - setWidth(w) { - if (w) this.zone.w = w; - - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) - this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } - - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } + /** + * @author lth / https://github.com/lo-th + */ + + class Gui { + constructor(o = {}) { + this.isGui = true; + this.name = "gui"; + + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; + + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors);else this.colors = Tools.defineColor(o); + + //this.cleanning = false + + // style + this.css = Tools.cloneCss(); + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 + + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; + + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") ? o.addDOMEventListeners : true; + this.callback = o.callback === undefined ? null : o.callback; + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + this.cn = ""; + + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; + this.size.h = this.size.h < 11 ? 11 : this.size.h; + + // local mouse and zone + this.local = new V2().neg(); + this.zone = { + x: 0, + y: 0, + w: this.size.w, + h: 0 + }; + + // virtual mouse + this.mouse = new V2().neg(); + this.h = 0; + //this.prevY = -1; + this.sw = 0; + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); + + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; + this.autoResize = o.autoResize === undefined ? true : o.autoResize; + + // default position + this.isCenter = o.center || false; + this.cssGui = o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; + this.isNewTarget = false; + let cc = this.colors; + this.content = Tools.dom("div", this.css.basic + " width:0px; height:auto; top:0px; background:" + cc.content + "; " + this.cssGui); + this.innerContent = Tools.dom("div", this.css.basic + "width:100%; top:0; left:0; height:auto; overflow:hidden;"); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); + + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom("div", this.css.basic + flexible + "width:100%; left:0; "); + this.innerContent.appendChild(this.inner); + + // scroll + this.scrollBG = Tools.dom("div", this.css.basic + "right:0; top:0; width:" + (this.size.s - 1) + "px; height:10px; display:none; background:" + cc.background + ";"); + this.content.appendChild(this.scrollBG); + this.scroll = Tools.dom("div", this.css.basic + "background:" + cc.button + "; right:2px; top:0; width:" + (this.size.s - 4) + "px; height:10px;"); + this.scrollBG.appendChild(this.scroll); + + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; + let r = cc.radius; + this.bottom = Tools.dom("div", this.css.txt + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + r + "px; border-bottom-left-radius:" + r + "px; justify-content:center; height:" + this.bh + "px; line-height:" + (this.bh - 5) + "px; color:" + cc.text + ";"); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen ? this.bottomText[1] : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } + if (this.parent !== null) this.parent.appendChild(this.content); + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } + + // height transition + this.transition = o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + this.setWidth(); + if (this.isCanvas) this.makeCanvas(); + Roots.add(this); + } + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN + }); + } + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN + }); + } + triggerMouseUp(x, y) { + /* + clientX,clientY are no used when isCanvas==true + */ + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN + }); + } + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); + Roots.needReZone = true; + } + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = "height " + this.transition + "s ease-out"; + this.content.style.transition = "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } + + // ---------------------- + // CANVAS + // ---------------------- + + onDraw() {} + makeCanvas() { + this.canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + + //console.log( this.canvas.width, this.canvas.height ) + } + draw(force) { + if (this.canvas === null) return; + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } + + ////// + + getDom() { + return this.content; + } + noMouse() { + this.mouse.neg(); + } + setMouse(uv, flip = true) { + if (flip) this.mouse.set(Math.round(uv.x * this.canvas.width), this.canvas.height - Math.round(uv.y * this.canvas.height));else this.mouse.set(Math.round(uv.x * this.canvas.width), Math.round(uv.y * this.canvas.height)); + //this.mouse.set( m.x, m.y ); + + //console.log("setMouse "+uv.x+" "+uv.y) + } + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } + onChange(f) { + this.callback = f || null; + return this; + } + + // ---------------------- + // STYLES + // ---------------------- + + mode(n) { + let needChange = false; + let cc = this.colors; + if (n !== this.cn) { + this.cn = n; + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } + needChange = true; + } + return needChange; + } + + // ---------------------- + // TARGET + // ---------------------- + + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + this.proto = null; + this.current = -1; + + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + + Roots.cursor(); + return true; + } + + // ---------------------- + // ZONE TEST + // ---------------------- + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + this.isReset = false; + let name = ""; + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom";else name = l.x > s ? "scroll" : "content"; + return name; + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent(e) { + //if( this.cleanning ) return + + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; + let change = false; + let protoChange = false; + let name = this.testZone(e); + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } + if (!name) return; + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); + if (this.proto) protoChange = this.proto.handleEvent(e); + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) change = this.onWheel(e); + if (!Roots.lock) { + this.getNext(e, change); + } + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen ? this.bottomText[1] : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + break; + } + if (this.isDown) change = true; + if (protoChange) change = true; + if (type === "keyup") change = true; + if (type === "keydown") change = true; + if (change) this.draw(); + } + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } + + // ---------------------- + // RESET + // ---------------------- + + reset(force) { + if (this.isReset) return; + + //this.resetItem(); + + this.mouse.neg(); + this.isDown = false; + + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); + if (r || r2) this.draw(true); + this.isReset = true; + + //Roots.lock = false; + } + + // ---------------------- + // ADD NODE + // ---------------------- + + add() { + //if(this.cleanning) this.cleanning = false + + let a = arguments; + let ontop = false; + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { + isUI: true, + main: this + });else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } + let u = add.apply(this, a); + if (u === null) return; + if (ontop) this.uis.unshift(u);else this.uis.push(u); + this.calc(); + this.isEmpty = false; + return u; + } + + // remove one node + + remove(n) { + if (n.dispose) n.dispose(); + } + + // call after uis clear + + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } + + // clear all gui + + empty() { + //this.cleanning = true + + //this.close(); + + let i = this.uis.length, + item; + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } + this.uis = []; + this.isEmpty = true; + this.calc(); + } + clear() { + this.empty(); + } + clear2() { + setTimeout(this.empty.bind(this), 0); + } + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } + + // ---------------------- + // ITEMS SPECIAL + // ---------------------- + + resetItem() { + if (!this.isItemMode) return; + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } + setItem(name) { + if (!this.isItemMode) return; + name = name || ""; + this.resetItem(); + if (!name) { + this.update(0); + return; + } + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } + + // ---------------------- + // SCROLL + // ---------------------- + + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; + if (b) { + this.total = this.h; + this.maxView = this.maxHeight; + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; + this.range = this.maxView - this.sh; + this.oy = Tools.clamp(this.oy, 0, this.range); + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } + update(y) { + y = Tools.clamp(y, 0, this.range); + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } + + // ---------------------- + // RESIZE FUNCTION + // ---------------------- + + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } + setHeight() { + if (this.tmp) clearTimeout(this.tmp); + this.zone.h = this.bh; + this.isScroll = false; + if (this.isOpen) { + this.h = this.calcUis(); + let hhh = this.forceHeight ? this.forceHeight + this.zone.y : window.innerHeight; + this.maxHeight = hhh - this.zone.y - this.bh; + let diff = this.h - this.maxHeight; + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + this.upScroll(this.isScroll); + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + if (this.forceHeight && this.lockHeight) this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + rezone() { + Roots.needReZone = true; + } + setWidth(w) { + if (w) this.zone.w = w; + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } } exports.Files = Files; @@ -9488,4 +7729,3 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvcHJvdG8vVHJlZUxpc3QuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBBUEkgcMO6YmxpY2EgZXNwZXJhZGE6XHJcbiAgICAvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KVxyXG4gICAgLy8gby5mb2N1c2VkIChib29sKSwgby5mb2N1c1BhdGggKGFycmF5KSwgby5mb2N1c0xldmVsIChudW1iZXIpXHJcbiAgICAvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcbiAgICBvLnNlbGVjdGFibGUgPSB0cnVlO1xyXG4gICAgby5uYW1lID0gby5uYW1lIHx8ICdUcmVlTGlzdCc7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICAvLyBEYXRvcyAmIGVzdGFkb1xyXG4gICAgdGhpcy50cmVlICAgICAgID0gby50cmVlIHx8IHt9O1xyXG4gICAgdGhpcy52YWx1ZSAgICAgID0gQXJyYXkuaXNBcnJheShvLnZhbHVlKSA/IG8udmFsdWUuc2xpY2UoKSA6IFtdO1xyXG4gICAgdGhpcy5mb2N1c2VkICAgID0gISFvLmZvY3VzZWQ7XHJcbiAgICB0aGlzLmZvY3VzUGF0aCAgPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09ICdudW1iZXInID8gby5mb2N1c0xldmVsIDogLTE7XHJcblxyXG4gICAgdGhpcy50YWJJbmRleCAgID0gby50YWJJbmRleCA/PyBudWxsO1xyXG4gICAgdGhpcy5pdGVtSW5kZXggID0gby5pdGVtSW5kZXggPz8gbnVsbDtcclxuXHJcbiAgICAvLyBDYWxsYmFja1xyXG4gICAgdGhpcy5jaGFuZ2VDYiA9IHR5cGVvZiBvLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nID8gby5vbkNoYW5nZSA6ICgpID0+IHt9O1xyXG5cclxuICAgIC8vIExheW91dCBpbnRlcm5vIC8gcHVibGljYWNpw7NuIGRlIGFsdHVyYVxyXG4gICAgdGhpcy5saW5lSCAgICA9IHRoaXMuaDsgICAgICAgICAgICAgICAvLyBhbHRvIGRlIFVOQSBmaWxhXHJcbiAgICB0aGlzLmxldmVsR2FwID0gdGhpcy5jb2xvcnMuc3kgfHwgMjsgIC8vIHNlcGFyYWNpw7NuIHZlcnRpY2FsIGVudHJlIG5pdmVsZXNcclxuICAgIHRoaXMubGVhZk1heCAgPSAwOyAgICAgICAgICAgICAgICAgICAgLy8gc2UgY2FsY3VsYSBlbiByU2l6ZSgpXHJcblxyXG4gICAgLy8gTW9kZWxvIHZpc3VhbFxyXG4gICAgdGhpcy5sZXZlbHMgICA9IFtdOyAgIC8vIFt7dHlwZTonbWFwJ3wnbGlzdCcsIGl0ZW1zOlt7a2V5LGxhYmVsLHpvbmV9XSwgem9uZTp7eCx5LHcsaH19Li4uXVxyXG4gICAgdGhpcy5pdGVtc0RvbSA9IFtdOyAgIC8vIGVzcGVqbyBET00gcG9yIG5pdmVsXHJcbiAgICB0aGlzLmhvdmVyICAgID0geyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG5cclxuICAgIC8vIENvbnRlbmVkb3IgaW50ZXJubyAoYWJzb2x1dG8pXHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSgnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnbGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7Jyk7XHJcbiAgICB0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEhlbHBlcnMgZGUgdGlwbyA9PT09PT09XHJcbiAgc3RhdGljIGlzTWFwKG5vZGUpICB7IHJldHVybiBub2RlICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShub2RlKTsgfVxyXG4gIHN0YXRpYyBpc0xpc3Qobm9kZSkgeyByZXR1cm4gQXJyYXkuaXNBcnJheShub2RlKTsgfVxyXG5cclxuICAvLyA9PT09PT09IFJlY29ycmlkbyBkZSBkYXRvcyA9PT09PT09XHJcbiAgZ2V0Tm9kZUF0UGF0aChwYXRoKSB7XHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBwYXRoW2ldKSkgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgICBub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBMbGVnYW1vcyBhIHVuYSBsaXN0YTogeWEgbm8gaGF5IG3DoXMgY2xhdmVzIHbDoWxpZGFzXHJcbiAgICAgICAgaWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuICB9XHJcblxyXG4gIC8vIEF1dG9jb21wbGV0YXI6IGJhamEgcG9yIHByaW1lcmFzIGNsYXZlcyBkZSBjYWRhIG1hcGEgaGFzdGEgYWxjYW56YXIgdW5hIGxpc3RhXHJcbiAgYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2VQYXRoKSB7XHJcbiAgICBsZXQgeyBub2RlIH0gPSB0aGlzLmdldE5vZGVBdFBhdGgoYmFzZVBhdGgpO1xyXG4gICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoLnNsaWNlKCk7XHJcbiAgICB3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgY29uc3QgazAgPSBrZXlzWzBdO1xyXG4gICAgICBwYXRoLnB1c2goazApO1xyXG4gICAgICBub2RlID0gbm9kZVtrMF07XHJcbiAgICB9XHJcbiAgICAvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2EgdW4gw610ZW0gZmluYWwgZGUgbGEgaG9qYVxyXG4gICAgcmV0dXJuIHBhdGg7XHJcbiAgfVxyXG5cclxuICAvLyBSdXRhIGFjdGl2YSAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpbm8gdmFsdWUpXHJcbiAgZ2V0QWN0aXZlUGF0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgPyB0aGlzLmZvY3VzUGF0aCA6IHRoaXMudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IFRhbWHDsW8gZGUgaG9qYSBtw6F4aW1vIChwYXJhIGxheW91dCBlc3RhYmxlKSA9PT09PT09XHJcbiAgY29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBub2RlLmxlbmd0aDtcclxuICAgIGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHJldHVybiAwO1xyXG4gICAgbGV0IG0gPSAwO1xyXG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XHJcbiAgICAgIG0gPSBNYXRoLm1heChtLCB0aGlzLmNvbXB1dGVMZWFmTWF4KG5vZGVba10pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBDb25zdHJ1Y2Npw7NuIGRlIG5pdmVsZXMgKG1vZGVsbyBsw7NnaWNvKSA9PT09PT09XHJcbiAgYnVpbGRMZXZlbHMoKSB7XHJcbiAgICB0aGlzLmxldmVscy5sZW5ndGggPSAwO1xyXG4gICAgY29uc3QgYWN0aXZlUGF0aCA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpO1xyXG5cclxuICAgIGxldCBub2RlID0gdGhpcy50cmVlO1xyXG4gICAgbGV0IGxldmVsID0gMDtcclxuXHJcbiAgICB3aGlsZSAobm9kZSkge1xyXG4gICAgICBpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBpbnRlcm1lZGlvOiBjbGF2ZXMgZGVsIG1hcGEgKGhvcml6b250YWwpXHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICAgIGlmICgha2V5cy5sZW5ndGgpIGJyZWFrO1xyXG4gICAgICAgIHRoaXMubGV2ZWxzLnB1c2goe1xyXG4gICAgICAgICAgdHlwZTogJ21hcCcsXHJcbiAgICAgICAgICBpdGVtczoga2V5cy5tYXAoayA9PiAoeyBrZXk6IGssIGxhYmVsOiBrLCB6b25lOiB7IHg6MCx5OjAsdzowLGg6MCB9IH0pKSxcclxuICAgICAgICAgIHpvbmU6IHsgeDowLHk6MCx3OjAsaDogdGhpcy5saW5lSCB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBhY3RpdmVQYXRoW2xldmVsXTtcclxuICAgICAgICBpZiAoIW5leHRLZXkgfHwgIW5vZGUuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIGJyZWFrO1xyXG4gICAgICAgIG5vZGUgPSBub2RlW25leHRLZXldO1xyXG4gICAgICB9IGVsc2UgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkge1xyXG4gICAgICAgIC8vIE5pdmVsIGhvamE6IGxpc3RhIHZlcnRpY2FsXHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSBub2RlLm1hcChsYWJlbCA9PiAoeyBrZXk6IGxhYmVsLCBsYWJlbCwgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSk7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChpdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCkgKiB0aGlzLmxpbmVIO1xyXG4gICAgICAgIHRoaXMubGV2ZWxzLnB1c2goeyB0eXBlOiAnbGlzdCcsIGl0ZW1zLCB6b25lOiB7IHg6MCwgeTowLCB3OjAsIGg6IGhMaXN0IH0gfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgbGV2ZWwrKztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gTGF5b3V0ICh6b25hcyAmIERPTSkgPT09PT09PVxyXG4gIGxheW91dExldmVscygpIHtcclxuICAgIFxyXG4gICAgY29uc3QgY29udGVudFggPSAodGhpcy5zYSB8fCAxMDApICsgODsgICAvLyBjb2x1bW5hIGRlIGxhYmVsICsgcGFkZGluZ1xyXG4gICAgY29uc3QgcGFkUmlnaHQgPSA4O1xyXG4gICAgY29uc3QgdyA9IHRoaXMuem9uZS53IC0gY29udGVudFggLSBwYWRSaWdodDtcclxuXHJcbiAgICBcclxuICAgIGxldCB5ID0gMDtcclxuXHJcbiAgICAvLyBBanVzdGFyIGl0ZW1zRG9tIGEgY2FudGlkYWQgZGUgbml2ZWxlc1xyXG4gICAgd2hpbGUgKHRoaXMuaXRlbXNEb20ubGVuZ3RoIDwgdGhpcy5sZXZlbHMubGVuZ3RoKSB0aGlzLml0ZW1zRG9tLnB1c2goW10pO1xyXG4gICAgZm9yIChsZXQgTCA9IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCA8IHRoaXMuaXRlbXNEb20ubGVuZ3RoOyBMKyspIHtcclxuICAgICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLml0ZW1zRG9tW0xdKSBpZiAoZWwgJiYgZWwucGFyZW50Tm9kZSkgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLml0ZW1zRG9tLmxlbmd0aCA9IHRoaXMubGV2ZWxzLmxlbmd0aDtcclxuXHJcbiAgICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgICBpZiAobHZsLnR5cGUgPT09ICdtYXAnKSB7XHJcbiAgICAgICAgY29uc3QgbiA9IE1hdGgubWF4KDEsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgIGNvbnN0IGNlbGxXID0gTWF0aC5mbG9vcih3IC8gbik7XHJcblxyXG4gICAgICAgIGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgIGxldCB4ID0gY29udGVudFg7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdCA9IGx2bC5pdGVtc1tpXTtcclxuICAgICAgICAgIGl0LnpvbmUgPSB7IHgsIHksIHc6IGNlbGxXLCBoOiB0aGlzLmxpbmVIIH07XHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbWFwJyk7XHJcbiAgICAgICAgICB4ICs9IGNlbGxXO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgY2VsZGFzXHJcbiAgICAgICAgdGhpcy5fcHJ1bmVSb3coTCwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgeSArPSB0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsaXN0YS9ob2phOiByZXNlcnZhciBoIHNlZ8O6biBsZWFmTWF4XHJcbiAgICAgICAgY29uc3QgbiA9IGx2bC5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgaExpc3QgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICBcclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IGhMaXN0IH07XHJcblxyXG4gICAgICAgICBjb25zdCByb3dzID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KTtcclxuICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBuO1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBpc1JlYWwgPyBsdmwuaXRlbXNbaV0gOiB7IGtleTogbnVsbCwgbGFiZWw6ICcnLCB6b25lOiB7IHg6MCx5OjAsdzowLGg6MCB9IH07XHJcbiAgICAgICAgICBcclxuICAgICAgICAgICBpdC56b25lID0geyB4OiBjb250ZW50WCwgeTogeSArIGkgKiB0aGlzLmxpbmVILCB3LCBoOiB0aGlzLmxpbmVIIH07XHJcbiAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcbiAgICAgICAgICB0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCAnbGlzdCcsIGlzUmVhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBmaWxhc1xyXG4gICAgICAgIHRoaXMuX3BydW5lUm93KEwsIHJvd3MpO1xyXG4gICAgICAgIHkgKz0gaExpc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBanVzdGVzIGRlIGFsdG8gaW50ZXJubyBkZWwgY29udGVuZWRvciB2aXN1YWxcclxuICAgIGNvbnN0IHRvdGFsSCA9IHk7XHJcbiAgICB0aGlzLnpvbmUuaCA9IHRvdGFsSCArIHRoaXMubWFyZ2luO1xyXG4gICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuem9uZS5oICsgJ3B4JztcclxuICAgIHRoaXMuc1syXS5oZWlnaHQgPSB0b3RhbEggKyAncHgnO1xyXG5cclxuICAgIC8vIFB1YmxpY2FyIGFsdG8gdG90YWwgYWwgR1VJIChzdW1hcsOhIHUuaClcclxuICAgIHRoaXMuX3B1Ymxpc2hIZWlnaHQoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8gRWxpbWluYSBub2RvcyBET00gc29icmFudGVzIGVuIGxhIGZpbGEgTCBhIHBhcnRpciBkZWwgw61uZGljZSBrZWVwXHJcbiAgX3BydW5lUm93KEwsIGtlZXApIHtcclxuICAgIGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcbiAgICAvLyBzaSBudW5jYSBzZSBjcmXDsywgbmFkYSBxdWUgaGFjZXJcclxuICAgIGlmICghcm93KSByZXR1cm47XHJcbiAgICBmb3IgKGxldCBqID0ga2VlcDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xyXG4gICAgICBjb25zdCBlbCA9IHJvd1tqXTtcclxuICAgICAgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgcm93Lmxlbmd0aCA9IGtlZXA7XHJcbiAgfVxyXG5cclxuXHJcbiAgZW5zdXJlSXRlbURvbShMLCBpKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgd2hpbGUgKHJvdy5sZW5ndGggPD0gaSkgcm93LnB1c2gobnVsbCk7XHJcbiAgICBpZiAoIXJvd1tpXSkge1xyXG4gICAgICBjb25zdCBkaXYgPSB0aGlzLmRvbSgnZGl2JywgVG9vbHMuY3NzLnR4dCArICdwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsnKTtcclxuICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcbiAgICAgIHJvd1tpXSA9IGRpdjtcclxuICAgIH1cclxuICAgIHJldHVybiByb3dbaV07XHJcbiAgfVxyXG5cclxuICBwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgcyA9IGRpdi5zdHlsZTtcclxuICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy8gUG9zaWNpw7NuXHJcbiAgICBzLmxlZnQgICA9IGl0LnpvbmUueCArICdweCc7XHJcbiAgICBzLnRvcCAgICA9IGl0LnpvbmUueSArICdweCc7XHJcbiAgICBzLndpZHRoICA9IGl0LnpvbmUudyArICdweCc7XHJcbiAgICBzLmhlaWdodCA9IChpdC56b25lLmggLSAyKSArICdweCc7XHJcblxyXG4gICAgLy8gVGV4dG9cclxuICAgIGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogJyc7XHJcblxyXG4gICAgLy8gRXN0YWRvc1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgICA9IGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG4gICAgY29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiAodGhpcy5mb2N1c0xldmVsID09PSBMKTtcclxuICAgIGNvbnN0IGZvY3VzTWF0Y2ggPSBpc1JlYWwgJiYgaW5Gb2N1c0x2bCAmJiAodGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleSk7XHJcbiAgICBjb25zdCBpc0hvdmVyICAgID0gaXNSZWFsICYmICh0aGlzLmhvdmVyLmxldmVsID09PSBMICYmIHRoaXMuaG92ZXIuaW5kZXggPT09IGkpO1xyXG5cclxuICAgIC8vIEVzdGlsb3MgYmFzZVxyXG4gICAgcy5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuICAgIHMuY29sb3IgICAgICA9IGNjLnRleHQ7XHJcbiAgICBzLmJvcmRlciAgICAgPSAnMXB4IHNvbGlkICcgKyBjYy5ib3JkZXI7XHJcbiAgICBzLnRleHRBbGlnbiAgPSBraW5kID09PSAnbWFwJyA/ICdjZW50ZXInIDogJ2xlZnQnO1xyXG5cclxuICAgIC8vIFByaW9yaWRhZCB2aXN1YWw6IHNlbGVjY2lvbmFkbyA+IGZvY28gPiBob3ZlciA+IGJhc2VcclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgfSBlbHNlIGlmIChmb2N1c01hdGNoKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICB9IGVsc2UgaWYgKGlzSG92ZXIpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbGFzIGRlIHBhZGRpbmcgaW52aXNpYmxlcyBlbiBob2phXHJcbiAgICBzLm9wYWNpdHkgPSBpc1JlYWwgPyAnMScgOiAnMCc7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IENpY2xvIGRlIHZpZGEgPT09PT09PVxyXG4gIHJTaXplKCkge1xyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy5idWlsZExldmVscygpO1xyXG4gICAgdGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IEludGVyYWNjacOzbiA9PT09PT09XHJcbiAgX3RvTG9jYWwoZSkge1xyXG4gICAgY29uc3QgbXggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgIGNvbnN0IG15ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnk7XHJcbiAgICByZXR1cm4geyB4OiBteCwgeTogbXkgfTtcclxuICB9XHJcblxyXG4gIF9oaXRUZXN0KG14LCBteSkge1xyXG4gIGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgeiA9IGx2bC56b25lOyAgLy8geCB5IHcgeWEgaW5jbHV5ZW4gY29udGVudFhcclxuICAgIGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaCkgY29udGludWU7XHJcblxyXG4gICAgICBpZiAobHZsLnR5cGUgPT09ICdtYXAnKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGx2bC5pdGVtc1tpXS56b25lO1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiB0cnVlIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5Sb3dzID0gTWF0aC5tYXgobHZsLml0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzUmVhbCA9IGkgPCBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgY29uc3QgaXR6ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldLnpvbmUgOiB7IHg6IHoueCwgeTogei55ICsgaSAqIHRoaXMubGluZUgsIHc6IHoudywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgaWYgKG14ID49IGl0ei54ICYmIG15ID49IGl0ei55ICYmIG14IDw9IGl0ei54ICsgaXR6LncgJiYgbXkgPD0gaXR6LnkgKyBpdHouaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBMLCBpLCByZWFsOiBpc1JlYWwgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IEw6IC0xLCBpOiAtMSwgcmVhbDogZmFsc2UgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vtb3ZlJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgdGhpcy5ob3ZlciA9IChodC5MICE9PSAtMSAmJiBodC5yZWFsKSA/IHsgbGV2ZWw6IGh0LkwsIGluZGV4OiBodC5pIH0gOiB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZWRvd24nKSB7XHJcbiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fdG9Mb2NhbChlKTtcclxuICAgICAgY29uc3QgaHQgPSB0aGlzLl9oaXRUZXN0KHgsIHkpO1xyXG4gICAgICBpZiAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdEF0KGh0LkwsIGh0LmkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNldXAnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIChPcGNpb25hbCkgdGVjbGFkbzogaW50ZWdyYXIgbmF2ZWdhY2nDs24gZW4gR3VpIHkgcmVlbnZpYXIgYXF1w60gc2kgc2UgZGVzZWFcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIFNlbGVjY2nDs24gKyBhdXRvY29tcGxldGFkbyArIG5vdGlmaWNhY2nDs25cclxuICBfc2VsZWN0QXQoTCwgaSkge1xyXG4gICAgY29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcbiAgICBjb25zdCBjaG9zZW4gPSBsdmwuaXRlbXNbaV07XHJcbiAgICBpZiAoIWNob3NlbiB8fCAhY2hvc2VuLmtleSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpO1xyXG4gICAgYmFzZVtMXSA9IGNob3Nlbi5rZXk7XHJcblxyXG4gICAgY29uc3QgbmV3UGF0aCA9IHRoaXMuYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2UpO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSBuZXdQYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIC8vIOKchSBBY3R1YWxpemEgb2JqZXRvIGVubGF6YWRvIChzaSBleGlzdGUpIHkgZGlzcGFyYSBjYWxsYmFja3Mg4oCcY2zDoXNpY29z4oCdXHJcbiAgICB0aGlzLnNlbmQobmV3UGF0aCk7IC8vIGVzY3JpYmUgZW4gb2JqZWN0TGlua1tvYmplY3RLZXldIHNpIGhheSByZWZlcmVuY2lhXHJcbiAgICB0aGlzLmNoYW5nZUNiKHRoaXMudGFiSW5kZXgsIHRoaXMuaXRlbUluZGV4LCBuZXdQYXRoKTtcclxuICB9XHJcblxyXG5cclxuICAvLyA9PT09PT09IEFQSSBww7pibGljYSA9PT09PT09XHJcbiAgc2V0VmFsdWUocGF0aCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRUcmVlKHRyZWUpIHtcclxuICAgIHRoaXMudHJlZSA9IHRyZWUgfHwge307XHJcbiAgICAvLyByZWNhbGN1bGFyIGxlYWZNYXggZW4gcHLDs3hpbWEgcGFzYWRhXHJcbiAgICB0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXMoeyBmb2N1c2VkLCBmb2N1c1BhdGgsIGZvY3VzTGV2ZWwgfSkge1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c2VkID09PSAnYm9vbGVhbicpIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb2N1c1BhdGgpKSB0aGlzLmZvY3VzUGF0aCA9IGZvY3VzUGF0aC5zbGljZSgpO1xyXG4gICAgaWYgKHR5cGVvZiBmb2N1c0xldmVsID09PSAnbnVtYmVyJykgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IFB1YmxpY2FjacOzbiBkZSBhbHR1cmEgPT09PT09PVxyXG4gIF9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCkge1xyXG4gICAgbGV0IGMgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxldmVscy5sZW5ndGg7IGkrKykgaWYgKHRoaXMubGV2ZWxzW2ldLnR5cGUgPT09ICdtYXAnKSBjKys7XHJcbiAgICByZXR1cm4gYztcclxuICB9XHJcblxyXG4gIF9nZXRDdXJyZW50TGVhZkxlbmd0aCgpIHtcclxuICAgIGNvbnN0IGxhc3QgPSB0aGlzLmxldmVsc1t0aGlzLmxldmVscy5sZW5ndGggLSAxXTtcclxuICAgIHJldHVybiBsYXN0ICYmIGxhc3QudHlwZSA9PT0gJ2xpc3QnID8gbGFzdC5pdGVtcy5sZW5ndGggOiAwO1xyXG4gIH1cclxuXHJcbiAgX3B1Ymxpc2hIZWlnaHQoKSB7XHJcbiAgICBjb25zdCBpbnRlciA9IHRoaXMuX2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKTtcclxuICAgIGNvbnN0IGxlYWZMZW4gPSBNYXRoLm1heCh0aGlzLmxlYWZNYXgsIHRoaXMuX2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkpO1xyXG4gICAgY29uc3QgbGVhZkggID0gbGVhZkxlbiAqIHRoaXMubGluZUg7XHJcbiAgICBjb25zdCBpbnRlckggPSBpbnRlciAqICh0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcCk7XHJcbiAgICBjb25zdCB0b3RhbEggPSBpbnRlckggKyAoaW50ZXIgPyB0aGlzLmxldmVsR2FwIDogMCkgKyBsZWFmSDtcclxuXHJcbiAgICAvLyBBY3R1YWxpemEgbcOpdHJpY2FzIGRlbCBwcm90byAobG8gcXVlIHN1bWEgZWwgR1VJKVxyXG4gICAgdGhpcy5oID0gdG90YWxIO1xyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG5cclxuICAgIC8vIEF2aXNhciBhbCBHVUkgeSByZWZyZXNjYXIgem9uYXNcclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYWluKSB0aGlzLm1haW4uY2FsYygpO1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBCb29sIH0gZnJvbSAnLi4vcHJvdG8vQm9vbC5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL3Byb3RvL0J1dHRvbi5qcyc7XHJcbmltcG9ydCB7IENpcmN1bGFyIH0gZnJvbSAnLi4vcHJvdG8vQ2lyY3VsYXIuanMnO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL3Byb3RvL0NvbG9yLmpzJztcclxuaW1wb3J0IHsgRnBzIH0gZnJvbSAnLi4vcHJvdG8vRnBzLmpzJztcclxuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9wcm90by9HcmFwaC5qcyc7XHJcbmltcG9ydCB7IEdyb3VwICB9IGZyb20gJy4uL3Byb3RvL0dyb3VwLmpzJztcclxuaW1wb3J0IHsgSm95c3RpY2sgfSBmcm9tICcuLi9wcm90by9Kb3lzdGljay5qcyc7XHJcbmltcG9ydCB7IEtub2IgfSBmcm9tICcuLi9wcm90by9Lbm9iLmpzJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uL3Byb3RvL0xpc3QuanMnO1xyXG5pbXBvcnQgeyBOdW1lcmljIH0gZnJvbSAnLi4vcHJvdG8vTnVtZXJpYy5qcyc7XHJcbmltcG9ydCB7IFNsaWRlIH0gZnJvbSAnLi4vcHJvdG8vU2xpZGUuanMnO1xyXG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9wcm90by9UZXh0SW5wdXQuanMnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL3Byb3RvL1RpdGxlLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0LmpzJztcclxuaW1wb3J0IHsgQml0bWFwIH0gZnJvbSAnLi4vcHJvdG8vQml0bWFwLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICcuLi9wcm90by9TZWxlY3Rvci5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi4vcHJvdG8vRW1wdHkuanMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vcHJvdG8vSXRlbS5qcyc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi9wcm90by9HcmlkLmpzJztcclxuaW1wb3J0IHsgUGFkMkQgfSBmcm9tICcuLi9wcm90by9QYWQyRC5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFRyZWVMaXN0IH0gZnJvbSAnLi4vcHJvdG8vVHJlZUxpc3QuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndHJlZWxpc3QnOiBuID0gbmV3IFRyZWVMaXN0KG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Q0FBQTtDQUNBO0NBQ0E7QUFDQTtBQUNZLE9BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsTUFBTSxDQUFDLEdBQUc7Q0FDVixFQUFFLEVBQUUs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LEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzNCLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ3pDO0NBQ0E7Q0FDQSxNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtDQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0NBQ3JCLE9BQU87QUFDUDtDQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0NBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDMUIsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtDQUN2QixNQUFNLElBQUksQ0FBQyxD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QUksQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO0NBQ3JCLEdBQUc7QUFDSDtDQUNBLEVBQUUsWUFBWSxFQUFFLFlBQVk7Q0FDNUIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztDQUN4RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0NBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0NBQ3RELEdBQUc7QUFDSDtDQUNBLEVBQUUsU0FBUyxFQUFFLFVBQVUsSUFBSSxFQUFFO0NBQzdCLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztDQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztDQUN4QyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztDQUNuQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7Q0FDckMsR0FBRztBQUNIO0NBQ0EsRUFBRSxVQUFVLEVBQUUsWUFBWTtDQUMxQixJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsT0FBTztDQUNsQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DO0NBQ0EsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7Q0FDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Q0FDcEQsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQ3ZEO0NBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDeEMsR0FBRztBQUNIO0NBQ0EsRUFBRSxRQUFRLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFO0NBQ3JDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3RCO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0NBQ3ZELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztDQUN2RDtDQUNBLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUNoQztDQUNBLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ2xCLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3hCLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxPQUFPO0FBQ2xDO0NBQ0EsSUFBTyxJQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQzFCLE1BQWdCLENBQUMsQ0FBQyxTQUFTO0FBQzNCO0NBQ0E7QUFDQTtDQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDekI7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUNwQjtDQUNBLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ3JCLE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUM1QixLQUFLO0FBQ0w7Q0FDQSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO0NBQ3hCO0FBQ0E7Q0FDQSxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNyQjtDQUNBO0FBQ0E7Q0FDQTtDQUNBLEtBQUssTUFBTTtDQUNYLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtDQUN6QixRQUFRO0NBQ1IsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRTtDQUMzQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0NBQzdDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxHQUFHO0NBQzNCLFVBQVUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxHQUFHO0NBQzNCLFVBQVUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDO0NBQ3pCLFVBQVUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxHQUFHO0NBQzNCLFVBQVU7Q0FDVixVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztDQUN6QyxTQUFTLE1BQU07Q0FDZixVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztDQUN4QyxTQUFTO0NBQ1QsT0FBTyxNQUFNO0NBQ2IsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDdkMsT0FBTztDQUNQLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRTtDQUN0QixJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsT0FBTztBQUNsQztDQUNBLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbkQsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3JDO0NBQ0EsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO0NBQzlDLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDOUU7Q0FDQSxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNyQjtDQUNBO0NBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0NBQ3hCLEdBQUc7QUFDSDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksRUFBRSxZQUFZO0NBQ3BCO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2hELElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDL0I7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDakQsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLEVBQUUsWUFBWTtDQUN0QjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Q0FDN0IsSUFBSSxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7Q0FDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0NBQ2hCO0NBQ0EsTUFBTSxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ2hELE1BQU0sSUFBSSxVQUFVLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQztDQUN6QyxLQUFLO0NBQ0wsSUFBSSxPQUFPLFdBQVcsQ0FBQztDQUN2QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLFlBQVksRUFBRSxVQUFVLEtBQUssRUFBRTtDQUNqQyxJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3RDLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDakQsR0FBRztBQUNIO0NBQ0EsRUFBRSxTQUFTLEVBQUUsVUFBVSxLQUFLLEVBQUU7Q0FDOUIsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztDQUNBLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDaEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtDQUNuQixNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3RCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ2YsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztDQUNoQixHQUFHO0NBQ0gsQ0FBQyxDQUFDO0FBQ0Y7Q0FDTyxNQUFNLEtBQUssR0FBRyxDQUFDOztDQzEwQnRCO0NBQ0E7Q0FDQTtBQUdBO0NBQ0EsTUFBTSxDQUFDLEdBQUc7QUFDVjtDQUNBLElBQUksVUFBVSxFQUFFLEdBQUc7QUFDbkI7Q0FDQSxJQUFJLElBQUksRUFBRSxRQUFRLENBQUMsc0JBQXNCLEVBQUU7QUFDM0M7Q0FDQSxJQUFJLFNBQVMsRUFBRSxJQUFJO0NBQ25CLElBQUksVUFBVSxFQUFFLElBQUk7Q0FDcEIsSUFBSSxVQUFVLEVBQUUsSUFBSTtDQUNwQixJQUFJLFFBQVEsRUFBRSxJQUFJO0NBQ2xCLElBQUksSUFBSSxFQUFFLElBQUk7Q0FDZCxJQUFJLEtBQUssRUFBRSxJQUFJO0FBQ2Y7Q0FDQSxJQUFJLEtBQUssRUFBRSw0QkFBNEI7Q0FDdkMsSUFBSSxLQUFLLEVBQUUsOEJBQThCO0NBQ3pDLElBQUksS0FBSyxFQUFFLDhCQUE4QjtBQUN6QztDQUNBLElBQUksUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDO0NBQ2xJLElBQUksVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUU7Q0FDNUosSUFBSSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRTtBQUNwRztDQUNBLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO0NBQ2YsSUFBSSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BCLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRztDQUN2QixJQUFJLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDbkI7Q0FDQSxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7Q0FDeEIsSUFBSSxLQUFLLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFO0FBQ3hCO0NBQ0EsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTTtBQUM5QjtDQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUM5QixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDOUIsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDckQ7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDekM7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxNQUFNO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFFO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLFVBQVUsR0FBRyxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsR0FBRTtDQUNoRixRQUFRLElBQUksVUFBVSxHQUFHLE1BQUs7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFJO0NBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07Q0FDOUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM5QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVM7Q0FDOUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBSztBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO0NBQ3BCLFlBQVksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSTtDQUMvQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtDQUMxQyxnQkFBZ0IsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEdBQUU7Q0FDMUQsZ0JBQWdCLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFFO0NBQzVELGFBQWE7Q0FDYixZQUFZLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRTtDQUN4RCxZQUFZLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRTtDQUN6RCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRTtDQUN0QixZQUFZLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07Q0FDbkMsWUFBWSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7Q0FDdkQsWUFBWSxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7Q0FDeEQsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7Q0FDdEIsWUFBWSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0NBQ25DLFlBQVksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUU7Q0FDdEQsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTTtBQUN4QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO0NBQ3BCLFlBQVksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSTtDQUMvQixZQUFZLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFFO0NBQ3ZELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFdBQVU7Q0FDMUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsWUFBVztBQUN6RDtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQ3REO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRTtDQUM3QixZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQztDQUNoRCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0NBQ3pCLFlBQVksSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxLQUFJO0NBQ2hFLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLEdBQUU7QUFDOUM7Q0FDQSxRQUFRLE9BQU8sS0FBSztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxFQUFFO0FBQ1o7Q0FDQSxRQUFRLEVBQUUsRUFBRSxDQUFDO0NBQ2IsUUFBUSxFQUFFLEVBQUUsQ0FBQztDQUNiLFFBQVEsTUFBTSxDQUFDLENBQUM7QUFDaEI7Q0FDQSxRQUFRLFFBQVEsR0FBRyxDQUFDO0NBQ3BCO0FBQ0E7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxNQUFNO0NBQ3RCLFFBQVEsVUFBVSxFQUFFLHFCQUFxQjtDQUN6QyxRQUFRLGNBQWMsRUFBRSxvQkFBb0I7QUFDNUM7Q0FDQSxRQUFRLEtBQUssR0FBRyxNQUFNO0NBQ3RCLFFBQVEsUUFBUSxHQUFHLE1BQU07Q0FDekIsUUFBUSxJQUFJLEdBQUcsTUFBTTtDQUNyQixRQUFRLFFBQVEsR0FBRyxNQUFNO0NBQ3pCLFFBQVEsVUFBVSxHQUFHLE1BQU07Q0FDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxpQkFBaUI7Q0FDOUIsUUFBUSxPQUFPLENBQUMsaUJBQWlCO0FBQ2pDO0NBQ0E7Q0FDQSxRQUFRLE1BQU0sR0FBRyxTQUFTO0NBQzFCLFFBQVEsVUFBVSxHQUFHLENBQUM7QUFDdEI7Q0FDQSxRQUFRLE9BQU8sR0FBRyxNQUFNO0NBQ3hCLFFBQVEsTUFBTSxHQUFHLE1BQU07Q0FDdkI7QUFDQTtDQUNBLFFBQVEsTUFBTSxHQUFHLFNBQVM7Q0FDMUIsUUFBUSxPQUFPLEdBQUcsU0FBUztDQUMzQixRQUFRLElBQUksR0FBRyxTQUFTO0NBQ3hCLFFBQVEsTUFBTSxHQUFHLFNBQVM7Q0FDMUIsUUFBUSxNQUFNLEVBQUUsU0FBUztDQUN6QjtDQUNBO0NBQ0EsUUFBUSxVQUFVLEVBQUUscUJBQXFCO0NBQ3pDO0NBQ0EsUUFBUSxVQUFVLEVBQUUsUUFBUTtDQUM1QixRQUFRLFVBQVUsRUFBRSxNQUFNO0NBQzFCLFFBQVEsUUFBUSxDQUFDLEVBQUU7QUFDbkI7Q0FDQSxRQUFRLE9BQU8sQ0FBQyx1QkFBdUI7Q0FDdkMsUUFBUSxNQUFNLEVBQUUsdUJBQXVCO0NBQ3ZDLFFBQVEsU0FBUyxFQUFFLFNBQVM7QUFDNUI7Q0FDQTtDQUNBLFFBQVEsSUFBSSxFQUFFLGVBQWU7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxHQUFHLEdBQUc7QUFDVjtDQUNBLFFBQVEsS0FBSyxFQUFFLHVHQUF1RyxHQUFHLHNIQUFzSDtDQUMvTyxRQUFRLE1BQU0sQ0FBQyw4RUFBOEU7Q0FDN0YsUUFBUSxNQUFNLENBQUMsdUdBQXVHO0NBQ3RILEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksRUFBRTtBQUNWO0NBQ0EsUUFBUSxFQUFFLENBQUMsbURBQW1EO0NBQzlELFFBQVEsRUFBRSxDQUFDLG1EQUFtRDtBQUM5RDtDQUNBLFFBQVEsS0FBSyxDQUFDLDJOQUEyTjtDQUN6TyxRQUFRLEtBQUssQ0FBQyx1QkFBdUI7QUFDckM7Q0FDQSxRQUFRLFNBQVMsQ0FBQyx1QkFBdUI7Q0FDekMsUUFBUSxPQUFPLENBQUMsdUJBQXVCO0FBQ3ZDO0NBQ0EsUUFBUSxLQUFLLENBQUMsZ0ZBQWdGO0NBQzlGLFFBQVEsSUFBSSxDQUFDLG9IQUFvSDtDQUNqSSxRQUFRLE9BQU8sQ0FBQyx3SkFBd0o7Q0FDeEssUUFBUSxZQUFZLENBQUMsNEZBQTRGO0NBQ2pILFFBQVEsU0FBUyxDQUFDLHVHQUF1RztDQUN6SCxRQUFRLE9BQU8sQ0FBQyxrSkFBa0o7Q0FDbEssUUFBUSxLQUFLLENBQUMsZ2RBQWdkO0NBQzlkLFFBQVEsR0FBRyxDQUFDLG9QQUFvUDtDQUNoUSxRQUFRLFNBQVMsQ0FBQyw4RkFBOEY7Q0FDaEgsUUFBUSxHQUFHLENBQUMsNkVBQTZFO0NBQ3pGLFFBQVEsUUFBUSxDQUFDLDZFQUE2RTtDQUM5RixRQUFRLE9BQU8sQ0FBQyxnREFBZ0Q7Q0FDaEUsUUFBUSxNQUFNLENBQUMscUVBQXFFO0NBQ3BGLFFBQVEsSUFBSSxDQUFDLDJCQUEyQjtDQUN4QyxRQUFRLE1BQU0sQ0FBQyxzREFBc0Q7Q0FDckUsUUFBUSxJQUFJLENBQUMsbUZBQW1GO0NBQ2hHLFFBQVEsSUFBSSxDQUFDLDZGQUE2RjtDQUMxRyxRQUFRLE1BQU0sQ0FBQyx5RkFBeUY7QUFDeEc7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHO0NBQ2QsUUFBUSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUNoQyxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxVQUFVO0FBQ3hCO0NBQ0EsUUFBUSxPQUFPLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFDekM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsR0FBRyxXQUFXLElBQUksRUFBRTtBQUNoQztDQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7Q0FDN0IsWUFBWSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDcEQsU0FBUztBQUNUO0NBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzdCO0NBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsR0FBRTtBQUNqRjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUMxRDtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMxQjtDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsV0FBVTtDQUNyRCxRQUFRLElBQUksSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLFNBQVE7Q0FDbkQsUUFBUSxJQUFJLE1BQU0sS0FBSyxTQUFTLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxXQUFVO0NBQ3pELFFBQVEsSUFBSSxNQUFNLEtBQUssU0FBUyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsV0FBVTtDQUN6RCxRQUFRLElBQUksS0FBSyxLQUFLLFNBQVMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUk7QUFDakQ7Q0FDQSxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFJLENBQUM7Q0FDckUsYUFBYSxJQUFJLElBQUksS0FBSTtDQUN6QjtBQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsZUFBZSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyw2SEFBNkgsQ0FBQztDQUNyUSxRQUFRLElBQUksTUFBTSxLQUFLLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ3JGO0NBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxxQ0FBcUMsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztDQUM5RixRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDBEQUF5RDtBQUMxRjtDQUNBLEtBQUs7QUFDTDtBQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFFBQVEsRUFBRSxZQUFZO0FBQzFCO0NBQ0E7Q0FDQSxRQUFRLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDbkM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sRUFBRSxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7QUFDakQ7Q0FDQSxRQUFRLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztDQUNoRSxhQUFhLElBQUksR0FBRyxLQUFLLFNBQVMsR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0NBQzFILGFBQWEsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDM0U7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sRUFBRSxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDaEM7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFO0NBQzNCLFlBQVksSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUUsaUJBQWlCLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3ZDLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN6QjtDQUNBLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7Q0FDM0IsWUFBWSxJQUFJLEdBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDekQsWUFBWSxJQUFJLEdBQUcsS0FBSyxNQUFNLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUNyRixpQkFBaUIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ3pELFNBQVM7Q0FDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsRUFBRTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEtBQUssU0FBUyxHQUFHLE9BQU8sR0FBRyxDQUFDO0NBQzFDLGFBQWEsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDNUQsYUFBYSxJQUFJLEVBQUUsWUFBWSxLQUFLLEVBQUU7Q0FDdEMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDbkYsWUFBWSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3ZHLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxHQUFHLFdBQVcsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRztBQUMvQztDQUNBLFFBQVEsSUFBSSxHQUFHLElBQUksSUFBSSxLQUFLLENBQUM7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDcEY7Q0FDQSxZQUFZLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRTtBQUMvQjtDQUNBLGdCQUFnQixHQUFHLEdBQUcsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0NBQ2pFLGdCQUFnQixDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsQztDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxhQUFhLE1BQU07Q0FDbkI7Q0FDQSxnQkFBZ0IsSUFBSSxHQUFHLEtBQUssU0FBUyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7Q0FDekYsZ0JBQWdCLENBQUMsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDdEQ7Q0FDQSxhQUFhO0NBQ2I7Q0FDQSxTQUFTLE1BQU07QUFDZjtDQUNBLFlBQVksSUFBSSxHQUFHLEtBQUssU0FBUyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDcEYsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3BGO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDMUM7Q0FDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxPQUFPLEdBQUcsQ0FBQztDQUMxQyxhQUFhLE9BQU8sR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDOUM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLGFBQWEsR0FBRyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUNoRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0NBQzFELFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDdEIsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztDQUMvRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLEdBQUcsVUFBVSxHQUFHLEVBQUU7QUFDM0I7Q0FDQSxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxPQUFPLEdBQUcsQ0FBQyxVQUFVLEVBQUU7Q0FDL0IsWUFBWSxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO0NBQ3ZFLFlBQVksR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7Q0FDOUMsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLEdBQUcsV0FBVyxHQUFHLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNyQyxRQUFRLElBQUksQ0FBQyxFQUFFO0NBQ2YsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztDQUN6QixZQUFZLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDdEIsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQzlCLGdCQUFnQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ2hFLGFBQWE7Q0FDYixTQUFTO0NBQ1QsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxFQUFFO0NBQ2YsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztDQUN6QixZQUFZLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDdEIsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzdDLGFBQWE7Q0FDYixTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksZ0JBQWdCLEVBQUUsWUFBWTtBQUNsQztDQUNBLFFBQVEsS0FBSyxRQUFRLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxLQUFLLElBQUksR0FBRyxPQUFPO0FBQ25FO0NBQ0EsUUFBUSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDM0M7Q0FDQSxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUM7Q0FDcEksUUFBUSxDQUFDLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQztDQUNuSCxRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztDQUNqRTtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRztBQUN0QztDQUNBLFlBQVksQ0FBQyxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUM7Q0FDekU7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLENBQUMsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDO0FBQzNFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxjQUFjLEVBQUUsWUFBWTtBQUNoQztDQUNBLFFBQVEsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQztDQUNsRTtDQUNBLFFBQVEsS0FBSyxTQUFTLEtBQUssSUFBSSxHQUFHO0NBQ2xDO0NBQ0EsWUFBWSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ3JHLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUM7Q0FDbkQ7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFNBQVMsR0FBRyxXQUFXLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDcEM7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN2QztDQUNBO0NBQ0EsUUFBUSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDckQsUUFBUSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0NBQzVCLFlBQVksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzVELFNBQVM7Q0FDVCxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CO0NBQ0E7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDaEMsWUFBWSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNoRCxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ2pGLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQzdDLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLGFBQWEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUNsQztDQUNBLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLEdBQUcsQ0FBQztDQUM3RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEdBQUc7Q0FDMUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDMUIsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHO0NBQ3RDLFVBQVUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDO0NBQ2pFLFNBQVM7Q0FDVCxRQUFRLE9BQU8sUUFBUSxDQUFDO0NBQ3hCLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0NBQzlCLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztDQUMzQyxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDNUQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM5QjtDQUNBLFFBQVEsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxQjtDQUNBLFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUMzQjtDQUNBLFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0NBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0NBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtDQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0NBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7Q0FDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FB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LE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztDQUNwSixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3JIO0NBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVB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WUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekg7Q0FDQTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0E7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztDQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0NBQ0E7QUFDQTtDQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdGO0NBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMvQjtDQUNBLFNBQVMsTUFBTTtDQUNmO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzVGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckksWUFBWSxDQUFDLENB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QztBQUN4QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDNUIsSUFBSSxJQUFJ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QU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7Q0FDaEMsS0FBSyxNQUFNO0NBQ1gsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDekMsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0NBQzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDMUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUN0QyxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDMUI7Q0FDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDcEQsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7Q0FDOUIsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDMUIsT0FBTztDQUNQLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxFQUFFO0NBQ1YsTUFBTSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUk7Q0FDMUIs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QUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQ3RELElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNqRTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUM7QUFDVjtDQUNBLElBQUksUUFBUSxJQUFJLENBQUMsU0FBUztDQUMxQixNQUFNLEtBQUssQ0FBQztDQUNaLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNkLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ2hCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ2pCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO0NBQ2xCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0NBQ25CLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDO0NBQ3BCLFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0NBQ3JCLFFBQVEsTUFBTTtDQUNkLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUNsRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJ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QUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBQztBQUN0RDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFHO0NBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07Q0FDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07Q0FDNUI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7Q0FDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0NBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUNBQXFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUU7Q0FDcEssU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUM7Q0FDdEIsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztDQUNyRSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsc0JBQXNCLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRTtDQUMxTixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ25CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRTtBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBSztDQUNoQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxHQUFFO0NBQzNCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQztDQUM5QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7Q0FDaEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7Q0FDckIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDMUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLE1BQU0sR0FBRyxNQUFLO0NBQzFCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQzNEO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0NBQ2hDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztBQUMxQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtBQUM3QjtDQUNBLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3pCO0NBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ2xDO0NBQ0EsZ0JBQWdCLFFBQVEsQ0FBQztBQUN6QjtDQUNBLG9CQUFvQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0NBQ3JGLG9CQUFvQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0NBQzNGLG9CQUFvQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNO0NBQzFGLG9CQUFvQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO0FBQ3ZGO0NBQ0EsaUJBQWlCO0FBQ2pCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQ2pFO0NBQ0EsYUFBYSxNQUFNO0FBQ25CO0NBQ0EsZ0JBQWdCLFFBQVEsQ0FBQztBQUN6QjtDQUNBLG9CQUFvQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07Q0FDaEgsb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTTtDQUMvRyxvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNO0NBQzlHLG9CQUFvQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU07QUFDcEg7Q0FDQSxpQkFBaUI7QUFDakI7Q0FDQSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQUs7Q0FDcEQsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQ25FO0NBQ0EsYUFBYTtBQUNiO0NBQ0EsWUFBWSxNQUFNLEdBQUcsS0FBSTtBQUN6QjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxNQUFNO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ25CLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtDQUM1QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDdEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFHO0NBQ3pDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtDQUM5QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUk7Q0FDaEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFJO0NBQ2hDLFNBQVMsTUFBTTtDQUNmLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7Q0FDdEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksS0FBSTtDQUN4QyxTQUFTO0NBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTs7Q0MzSU8sTUFBTSxNQUFNLFNBQVMsS0FBSyxDQUFDO0FBQ2xDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Q0FDeEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE1BQUs7QUFDeEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBRztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0FBQ2pEO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztBQUN4QjtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksRUFBQztDQUNuQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFFO0NBQy9CLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUM7QUFDakM7Q0FDQSxRQUFRLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRTtBQUMzRTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0NBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFJO0NBQzdCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTTtDQUNyQyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtDQUNyQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRTtBQUN0QjtDQUNBLFFBQVEsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDbEM7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0NBQ0EsWUFBWSxHQUFHLEdBQUcsTUFBSztDQUN2QixZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxHQUFHLEtBQUk7QUFDL0U7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUU7Q0FDbE0sWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFNO0NBQ3RFLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsS0FBSTtDQUNuRSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ25ELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztDQUNBLFNBQVM7QUFDVDtBQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Q0FDckQsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUU7Q0FDcEUsU0FBUztDQUNUO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUN4RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0NBQ3hCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUc7Q0FDeEI7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDcEIsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztDQUNsRCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDM0IsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7Q0FDN0IsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUU7Q0FDM0YsaUJBQWlCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFDO0NBQ25ELFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQ25ELFlBQVksSUFBSSxDQUFDLElBQUksR0FBRTtDQUN2QixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7QUFDbEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztDQUN0QyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSTtDQUMxQixLQUFLLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7QUFDL0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsTUFBSztDQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtDQUM3QixZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFDO0NBQ2xDLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUU7Q0FDNUQsU0FBUyxNQUFNO0NBQ2YsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUMxQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sRUFBRTtBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQUs7QUFDekM7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7Q0FDQSxZQUFZLENBQUMsR0FBRyxFQUFDO0NBQ2pCLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQUs7Q0FDM0U7Q0FDQSxZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRTtDQUMxQixnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztDQUN4QyxhQUFhLE1BQU07Q0FDbkIsZ0JBQWdCLENBQUMsR0FBRyxFQUFDO0NBQ3JCLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztDQUM3QixhQUFhO0FBQ2I7Q0FDQTtDQUNBLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRTtBQUNqQztDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxDQUFDO0FBQ2hCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ25CO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDeEMsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBQztBQUNwQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNqQztDQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDOUI7Q0FDQSxZQUFZLFFBQVEsQ0FBQztBQUNyQjtDQUNBLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLO0NBQ2hGLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLO0NBQ3JGLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLO0NBQ2xGLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLO0FBQ3RGO0NBQ0EsYUFBYTtBQUNiO0NBQ0EsWUFBWSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLE1BQU07QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBQztDQUNyQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7Q0FDckIsUUFBUSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDM0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUc7QUFDeEI7Q0FDQSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ25CLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsT0FBTTtBQUN0QztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksWUFBWSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUU7Q0FDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7Q0FDeEQsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQ2xDO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQztDQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUNyQztDQUNBLFFBQVEsT0FBTyxJQUFJO0FBQ25CO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ3hCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN6QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRTtDQUMvQjtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUM7QUFDdkM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtDQUNyQixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7Q0FDbEQ7Q0FDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7Q0FDQTtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0NBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztDQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFJO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7Q0FDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFDO0NBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztDQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUU7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUk7Q0FDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwQztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU07Q0FDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtDQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtDQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRTtBQUN4QjtDQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQztDQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUN0QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUNsSTtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUN0QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtDQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0NBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0NBQ0EsUUFBUSxRQUFRLElBQUk7Q0FDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0NBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RDtDQUNBLFlBQVksTUFBTTtDQUNsQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztDQUNqRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0NBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7Q0FDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7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QUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNuQztDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7Q0FDQTtDQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztDQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QztDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7Q0FDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0NBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFH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Q0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUN4QyxlQUFlLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQ25EO0NBQ0EsT0FBTyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdkMsT0FBTztBQUNQO0NBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0NBQ3BEO0NBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDakM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0NBQ0EsU0FBUztDQUNULEtBQUs7Q0FDTCxJQUFJO0NBQ0osR0FBRztBQUNIO0NBQ0EsRUFBRTtBQUNGO0NBQ0E7QUFDQTtDQUNBLENBQUMsU0FBUyxDQUFDLEdBQUc7QUFDZDtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7Q0FDakUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN0QjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2xELFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9DO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxJQUFJLENBQUMsR0FBRztBQUNUO0NBQ0EsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDZjtDQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7Q0FDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0NBQ3RDO0NBQ0EsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0EsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEI7Q0FDQSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM5QztDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCO0NBQ0EsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztDQUN0QztDQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDZjtDQUNBLEtBQUssSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hFO0NBQ0EsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Q0FDeEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0NBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3hDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDN0U7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkQsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckQ7Q0FDQSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTztBQUNwQjtDQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUN4RCxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ3ZFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7Q0FDM0UsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QztDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2Y7Q0FDQSxFQUFFLElBQUksQ0FBQyxZQUFZLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUQsYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxhQUFhLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7Q0FDN0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNwQjtDQUNBLEtBQUssSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUN0QyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxFQUFFO0FBQzFDO0NBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDNUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU07Q0FDMUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUM5QztDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0NBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDdkIsTUFBTTtDQUNOLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNoQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDdEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzlDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztDQUN6QixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxXQUFXLENBQUMsR0FBRztBQUNoQjtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7Q0FDakIsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFLO0FBQ2Y7Q0FDQSxLQUFjLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU87Q0FDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDbkMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7Q0FDQSxLQUFLLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7Q0FDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztDQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUM7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0NBQ0E7Q0FDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7Q0FDNUQ7Q0FDQTtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtDQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7Q0FDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtDQUNwQztDQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztDQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0NBQzVDLEtBQUssSUFBSSxD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QyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDbEUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7Q0FDbEQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7Q0FDakQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMvRDtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7Q0FDN0s7QUFDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLG9DQUFvQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0RBQWtELEVBQUUsQ0FBQztBQUMxSjtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFD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QyxLQUFLLEVBQUUsQ0FBQztDQUNuQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMxQyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUUsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsQyxZQUFZLENBQUMsRUFBRSxDQUFDO0FBQ2hCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRztBQUNaO0NBQ0EsUUFBUSxLQUFLLENBQUMsSUFBSSxHQUFFO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUN6QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7Q0FDbEUsYUFBYSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzFEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FB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QyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0NBQ25DO0NBQ0EsS0FBSztDQUNMO0NBQ0E7O0NDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Q0FDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFD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QVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0NBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtDQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0NBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7Q0FDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQztDQUM5QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFJO0NBQzlDLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7Q0FDckMsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUMzQyxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQztDQUNoRixpQkFBaUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztDQUMzRCxTQUFTO0NBQ1QsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFdBQVcsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQ0FBaUM7Q0FDcEUsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUc7Q0FDOUIsUUFBUSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUk7Q0FDckMsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQW9CO0NBQ2pHLGlCQUFpQixDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFPO0NBQ3RFLFlBQVksQ0FBQyxHQUFFO0NBQ2YsU0FBUztDQUNULFFBQVEsT0FBTyxDQUFDO0NBQ2hCLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ25GLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDcEgsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUs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TSxDQUFDLEtBQUk7Q0FDeEQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0NBQzFELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUMzRCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7QUFDbkM7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87Q0FDbkUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0FBQ3BFO0NBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0NBQy9ELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7Q0FDcEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMseUJBQXdCO0FBQ3RFO0NBQ0EsU0FBUztDQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFFO0FBQzNCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRTtB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Q0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0NDNWNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN2RDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztDQUMxQyxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Q0FDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztDQUN6QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFJO0FBQzVEO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztDQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7Q0FDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxPQUFPLElBQUk7Q0FDbkIsWUFBWSxLQUFLLENBQUM7Q0FDbEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDbEMsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3hFLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNsRSxpQkFBaUIsTUFBTTtDQUN2QixvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3JFO0NBQ0Esb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNyRSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDaEUsaUJBQWlCO0NBQ2pCO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0NBQ2xCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0NBQ2xDLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN6RSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDM0UsaUJBQWlCLE1BQU07Q0FDdkIsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN0RTtDQUNBLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDeEUsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNwRSxpQkFBaUI7Q0FDakIsWUFBWSxNQUFNO0FBR2xCO0NBQ0EsU0FBUztDQUNULEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxXQUFXLENBQUMsRUFBRTtDQUNsQixRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0NBQ3pELFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU87Q0FDdkMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbkY7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFlBQVksQ0FBQyxFQUFFO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxHQUFHLE9BQU87Q0FDNUMsUUFBUSxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0NBQ3ZDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUNoRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7Q0FDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7Q0FDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7Q0FDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDM0QsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtDQUNBLFFBQVEsSUFBSSxDQUFD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LE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDN0QsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1RCxTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FD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QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7Q0FDekQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxH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SSxDQUFDLENBQUMsQ0FBQztBQUMzQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0NBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztDQUM5QjtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDckQ7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7Q0FDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN4RCxhQUFhLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztDQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3hELGFBQWE7Q0FDYjtDQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQztDQUNBLFlBQVksT0FBTyxJQUFJLENBQUM7Q0FDeEI7Q0FDQSxTQUFTO0NBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUN6RCxRQUFRLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUM1QyxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUMxQztBQUNBO0NBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFlBQVksS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUM1QyxZQUFZLElBQUksR0FBRyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssS0FBSyxDQUFDO0NBQ3JELFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDckQsWUFBWSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUMxQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUc7QUFDM0M7Q0FDQSxZQUFZLENBQUMsR0FBRyxVQUFVLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUMvQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDL0MsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ2hELFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUNoRCxZQUFZLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUM5RDtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1RDtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDckU7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDakMsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztDQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3JGO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0NBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7Q0FDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztDQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3pEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTs7Q0NsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztDQUNyQztBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7Q0FDQTtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0NBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7Q0FDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtDQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcscUNBQXFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNERBQTRELENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNyVSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsZ0RBQWdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNySztDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsaUJB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Q0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUU7QUFDNUQ7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRTtDQUNoQixRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ25DLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNsQyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDckUsU0FBUztDQUNULFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0NBQzFCLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0NBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztDQUMxRCxhQUFhLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ2hDO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzFCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxVQUFVLENBQUMsRUFBRTtBQUNqQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU87QUFDcEM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUM5QjtDQUNBLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTztBQUM5QztDQUNBLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxD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QUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtBQUNBO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDMUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDNUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztDQUNsRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUMxRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUN2QjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN4RCxhQUFhLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDakQsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUMxQixZQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0NBQzdCLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQy9DLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztDQUNqRCxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDckQsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ2xELFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztDQUN0RCxTQUFTO0NBQ1QsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQ3JCLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3hELFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ3hELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0I7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxD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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVE7Q0FDL0QsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7Q0FDbkQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUN0RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0NBQ3BDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzdCO0NBQ0EsU0FBUztBQUNUO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztBQUMxUDtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFB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QUFDLEdBQUU7Q0FDL0IsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7Q0FDbEMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFHO0NBQ3ZDLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDdEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztBQUN4QjtDQUNBLFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUNsQjtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUU7Q0FDbEUsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7Q0FDNUQsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbkQsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDcEQsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDelRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztDQUNqQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0NBQ3RCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztDQUNsRCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Q0FDOUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNsRDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3BDO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0NBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN0QztDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDNUI7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDekI7Q0FDQTtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHO0NBQ3hCLE1BQU0sS0FBSztDQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTO0NBQ3hCLFFBQVEsa0RBQWtEO0NBQzFELFFBQVEsRUFB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LENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7Q0FDM0IsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ25CLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztDQUM5QjtDQUNBO0NBQ0EsS0FBSyxNQUFNO0NBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDcEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Q0FDckIsTUFBTSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVFO0NBQ0E7Q0FDQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0NBQ0E7Q0FDQSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RDtDQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNoRCxNQUFNLElBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDM0Q7Q0FDQSxNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRDtDQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENB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LEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFEO0NBQ0EsSUFBSSxJQUFJLE9BQU87Q0FDZixNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDM0M7QUFDQTtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDcEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNsQixHQUFHO0NBQ0g7O0NDN1NPLE1BQU0s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QUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzdELFlBQVksT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3ZDLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQztDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7Q0FDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7Q0FDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0NBQy9CO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztDQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztDQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7Q0FDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7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QVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQztBQUNqRDtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7Q0FDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUMzQixLQUFLO0FBQ0w7Q0FDQTs7Q0MxRE8sTUFBTSxNQUFNLFNBQVMsS0FBSyxDQUFDO0FBQ2xDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUU7Q0FDbEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDM0IsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksVUFBVSxHQUFFO0FBQ2hEO0NBQ0E7Q0FDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzlCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsOENBQThDLEdBQUU7Q0FDOU07QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxFQUFFLENBQUMsT0FBTyxHQUFHLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUU7Q0FDNUwsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBSztBQUMxQztDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7Q0FDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDekw7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBQztDQUNyQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBSztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztDQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtDQUNoRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNO0NBQzdELFFBQVEsT0FBTyxHQUFHO0FBQ2xCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztDQUNsQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0NBQ3pCO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDL0I7Q0FDQSxZQUFZLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7Q0FDdEMsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLEtBQUs7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxLQUFLO0FBQ2hDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7Q0FDMUI7Q0FDQTtDQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxNQUFLO0NBQ3RCLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtDQUM3QixZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDbkMsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUU7Q0FDakQsU0FBUyxNQUFNO0NBQ2YsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUM3QixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sRUFBRTtBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUc7Q0FDL0IsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztDQUMzQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDL0MsWUFBWSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDeEIsU0FBUztDQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRztBQUNkO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3ZCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtDQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsTUFBSztDQUMxQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQzdCO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQzVDO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Q0FDdkIsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0NBQ3RGLHFCQUFxQixFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUU7Q0FDOUMsYUFBYTtBQUNiO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0NBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDekI7Q0FDQSxZQUFZLFFBQVEsQ0FBQztBQUNyQjtDQUNBLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07Q0FDL0YsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTTtDQUNwRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0NBQ25HLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07QUFDckc7Q0FDQSxhQUFhO0FBQ2I7Q0FDQSxZQUFZLE1BQU0sR0FBRyxLQUFJO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLE1BQU07QUFDckI7QUFDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2hEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDakI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUc7QUFDbkM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0NBQ3RCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksS0FBSTtDQUN6QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxLQUFJO0NBQzFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUk7QUFDdEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTs7Q0N0S08sTUFBTSxNQUFNLFNBQVMsS0FBSyxDQUFDO0FBQ2xDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUU7Q0FDbEMsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO0NBQzVDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFJO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7QUFDN0I7QUFDQTtBQUNBO0NBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDhDQUE4QyxHQUFFO0FBQzdNO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRTtDQUM1TCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0NBQzVDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQ3ZMO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0NBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLE1BQU0sQ0FBQztDQUM5RCxRQUFRLE9BQU8sR0FBRztBQUNsQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7Q0FDbEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUN6QjtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDaEM7Q0FDQSxZQUFZLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN2QyxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDakM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtDQUM3QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSTtDQUM5QixZQUFZLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRTtBQUNuRTtDQUNBLFNBQVM7QUFDVDtDQUNBO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25DO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztBQUN2QjtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO0NBQzdCLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztDQUNuQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRTtDQUNqRCxTQUFTLE1BQU07Q0FDZixZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDOUIsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFlBQVksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQzlCO0NBQ0EsUUFBUSxJQUFJLEdBQUcsRUFBRTtDQUNqQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBRztDQUMxQixZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFFO0NBQy9CLFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFJO0NBQzNCLFlBQVksSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUU7Q0FDaEMsU0FBUztDQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRztDQUMvQixZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvQztDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRTtDQUNuQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFDO0NBQzlFLGdCQUFnQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNwRixhQUFhO0NBQ2I7Q0FDQSxTQUFTO0NBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHO0FBQ2Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNmO0NBQ0EsUUFBUSxJQUFJLE1BQU0sR0FBRyxNQUFLO0NBQzFCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDN0I7Q0FDQSxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBQztBQUN6QjtDQUNBLFlBQVksUUFBUSxDQUFDO0FBQ3JCO0NBQ0EsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtDQUMvRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNO0NBQ3BHLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07Q0FDakcsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUNyRztDQUNBLGFBQWE7QUFDYjtDQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEI7QUFDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDakQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNqQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3BDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztDQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7Q0FDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDL0xBO0FBRUE7Q0FDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtDQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztDQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztDQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRztBQUNkO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN6QyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHO0NBQ2Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNmO0NBQ0EsUUFBUSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0I7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0NBQzVCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07Q0FDNUM7Q0FDQSxZQUFZLFFBQVEsQ0FBQztBQUNyQjtDQUNBLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUMsTUFBTTtDQUMvRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO0NBQ3BHLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07Q0FDeEcsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtBQUNwRztDQUNBLGFBQWE7QUFDYjtDQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUN0QjtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDbkM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3pDO0NBQ0EsS0FBSztBQUNMO0FBQ0E7Q0FDQTs7Q0NwSE8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7Q0FDdEIsWUFBWSxJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQVksS0FBSyxFQUFFO0NBQzNDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0NBQ3RDLGFBQWEsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQVksTUFBTSxFQUFFO0NBQ25ELGdCQUFnQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQzNDLGFBQWEsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQVksTUFBTSxFQUFFO0NBQ25ELGdCQUFnQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxPQUFNO0NBQ3pDLGdCQUFnQixLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQ3BFLGFBQWE7Q0FDYixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDdEM7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztDQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtDQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdB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SUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFFO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0NBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7Q0FDQTtBQUNBO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlGO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0NBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0NBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDbkIs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QUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Q0FDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFD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R0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUM3RSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ3BFLE1BQU0sS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDaEcsS0FBSztDQUNMLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDOUM7Q0FDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNqRCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakMsTUFBa0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Q0FDbkMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0NBQzlCLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUNoRCxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0NBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDeEQsUUFBUSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7Q0FDekI7QUFDQTtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ25ELFVBQVUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN0RCxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7Q0FDbEQsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDO0NBQ3JCLFNBQVM7Q0FDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUM1QyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDeEMsT0FBTyxNQUFNO0NBQ2I7Q0FDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0NBQ25DLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDN0Q7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ25EO0NBQ0EsU0FBUyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Q0FDaEQsU0FBUyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ3hDLFVBQVUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMvQixVQUFVLE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ2pHO0NBQ0EsV0FBVyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzlFLFVBQVUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDL0MsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7Q0FDM0QsU0FBUztDQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJ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LENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3RDO0NBQ0E7Q0FDQSxJQUFJLEdBQUcsQ0FBQyxXQUFXLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQzdDO0NBQ0E7Q0FDQSxJQUFJLE1BQU0sUUFBUSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7Q0FDekYsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDL0QsSUFBSSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzlFLElBQUksTUFBTSxPQUFPLE1BQU0sTUFBTSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNwRjtDQUNBO0NBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDM0IsSUFBSSxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDM0IsSUFBSSxDQUFDLENBQUMsTUFBTSxPQUFPLFlBQVksR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0NBQzVDLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDdEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxRQUFRLEVBQUU7Q0FDbEIsTUFBTSxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7Q0FDL0IsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7Q0FDOUIsS0FBSyxNQUFNLElBQUksVUFBVSxFQUFFO0NBQzNCLE1BQU0sQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO0NBQ3ZDLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzVCLEtBQUssTUFBTSxJQUFJLE9BQU8sRUFBRTtDQUN4QixNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQztDQUNoQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUM1QixLQUFLO0FBQ0w7Q0FDQTtDQUNBLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNuQyxHQUFHO0FBQ0g7Q0FDQTtDQUNBLEVBQUUsS0FBSyxHQUFHO0NBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2xELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0NBQ3hCLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxHQUFHO0NBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Q0FDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0E7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Q0FDZCxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkMsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZDLElBQUksT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQzVCLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7Q0FDbkIsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDL0MsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztDQUN2QixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVM7QUFDM0U7Q0FDQSxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7Q0FDOUIsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDbkQsVUFBVSxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUN4QyxVQUFVLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FB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SSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7Q0FDcEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDdkMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNyQztDQUNBO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ2pELElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Q0FDNUIsR0FBRztDQUNIOztBQ2xZWSxPQUFDLEdBQUcsR0FBRyxZQUFZO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDMUI7Q0FDQSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7Q0FDQSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3RDO0NBQ0EsWUFBWSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hCLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0I7Q0FDQSxTQUFTLE1BQU0sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDOUM7Q0FDQSxZQUFZLEdBQUcsR0FBRyxJQUFJLENBQUM7Q0FDdkIsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3pEO0NBQ0EsWUFBWSxJQUFJLEdB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QUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDZjtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxD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QUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFO0NBQ1gsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUI7Q0FDQSxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQztDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7Q0FDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7Q0FDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztDQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNoRCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0s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QUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNsRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDbkQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekQ7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVTtDQUMzQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztDQUMxRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3ZDLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxHQUFHO0NBQ1gsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztDQUM1QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Q0FDZCxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNsRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVE7Q0FDckIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM1RSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdDLEdBQUc7QUFDSDtDQUNBLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRTtDQUNsQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0NBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNoQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMxQixLQUFLO0NBQ0wsR0FBRztDQUNIOzs7Ozs7Ozs7Ozs7OzsifQ== diff --git a/build/uil.min.js b/build/uil.min.js index c314212..924fd0f 100644 --- a/build/uil.min.js +++ b/build/uil.min.js @@ -1,9491 +1,6 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.UIL = {})); -})(this, (function (exports) { 'use strict'; - - /** - * @author lth / https://github.com/lo-th - */ - - const REVISION = "4.3.0"; - - // INTENAL FUNCTION - - const R = { - ui: [], - - dom: null, - - ID: null, - lock: false, - wlock: false, - current: -1, - - needReZone: true, - needResize: false, - forceZone: false, - isEventsInit: false, - isLeave: false, - addDOMEventListeners: true, - - downTime: 0, - prevTime: 0, - - //prevDefault: ['contextmenu', 'wheel'], - prevDefault: ["contextmenu"], - pointerEvent: ["pointerdown", "pointermove", "pointerup"], - eventOut: ["pointercancel", "pointerout", "pointerleave"], - - xmlserializer: null, - tmpTime: null, - tmpImage: null, - - oldCursor: "auto", - - input: null, - parent: null, - firstImput: true, - - hiddenImput: null, - hiddenSizer: null, - hasFocus: false, - startInput: false, - inputRange: [0, 0], - cursorId: 0, - str: "", - pos: 0, - startX: -1, - moveX: -1, - - debugInput: false, - - isLoop: false, - listens: [], - - e: { - type: null, - clientX: 0, - clientY: 0, - keyCode: NaN, - key: null, - delta: 0, - }, - - isMobile: false, - - now: null, - needsUpdate: false, - - getTime: function () { - return self.performance && self.performance.now - ? self.performance.now.bind(performance) - : Date.now; - }, - - add: function (o) { - // R.ui[0] is de GUI object that is added first by the constructor - R.ui.push(o); - R.getZone(o); - - if (!R.isEventsInit) R.initEvents(); - }, - - testMobile: function () { - let n = navigator.userAgent; - if ( - n.match(/Android/i) || - n.match(/webOS/i) || - n.match(/iPhone/i) || - n.match(/iPad/i) || - n.match(/iPod/i) || - n.match(/BlackBerry/i) || - n.match(/Windows Phone/i) - ) - return true; - else return false; - }, - - remove: function (o) { - let i = R.ui.indexOf(o); - - if (i !== -1) { - R.removeListen(o); - R.ui.splice(i, 1); - } - - if (R.ui.length === 0) { - R.removeEvents(); - } - }, - - // ---------------------- - // EVENTS - // ---------------------- - - initEvents: function () { - if (R.isEventsInit) return; - - let dom = document.body; - - R.isMobile = R.testMobile(); - R.now = R.getTime(); - - if (!R.isMobile) { - dom.addEventListener("wheel", R, { passive: false }); - } else { - dom.style.touchAction = "none"; - } - - console.log("R.addDOMEventListeners " + R.addDOMEventListeners); - if (R.addDOMEventListeners) { - dom.addEventListener("pointercancel", R); - dom.addEventListener("pointerleave", R); - //dom.addEventListener( 'pointerout', R ) - - dom.addEventListener("pointermove", R); - dom.addEventListener("pointerdown", R); - dom.addEventListener("pointerup", R); - - dom.addEventListener("keydown", R, false); - dom.addEventListener("keyup", R, false); - } - window.addEventListener("resize", R.resize, false); - - //window.onblur = R.out; - //window.onfocus = R.in; - - R.isEventsInit = true; - R.dom = dom; - }, - - removeEvents: function () { - if (!R.isEventsInit) return; - - let dom = document.body; - - if (!R.isMobile) { - dom.removeEventListener("wheel", R); - } - - if (R.addDOMEventListeners) { - dom.removeEventListener("pointercancel", R); - dom.removeEventListener("pointerleave", R); - //dom.removeEventListener( 'pointerout', R ); - - dom.removeEventListener("pointermove", R); - dom.removeEventListener("pointerdown", R); - dom.removeEventListener("pointerup", R); - - dom.removeEventListener("keydown", R); - dom.removeEventListener("keyup", R); - } - window.removeEventListener("resize", R.resize); - - R.isEventsInit = false; - }, - - resize: function () { - let i = R.ui.length, - u; - - while (i--) { - u = R.ui[i]; - if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); - } - - R.needReZone = true; - R.needResize = false; - }, - - out: function () { - console.log("im am out"); - R.clearOldID(); - }, - - in: function () { - console.log("im am in"); - // R.clearOldID(); - }, - - // ---------------------- - // HANDLE EVENTS - // ---------------------- - - fakeUp: function () { - this.handleEvent({ type: "pointerup" }); - }, - - handleEvent: function (event) { - //console.log("Roots.handleEvent "+event.type) - //if(!event.type) return; - - if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); - - if (R.needResize) R.resize(); - - R.findZone(R.forceZone); - - let e = R.e; - let leave = false; - - if (event.type === "keydown") R.keydown(event); - if (event.type === "keyup") R.keyup(event); - - if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; - else e.delta = 0; - - let ptype = event.pointerType; // mouse, pen, touch - - e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; - e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; - - e.type = event.type; - - if (R.eventOut.indexOf(event.type) !== -1) { - leave = true; - e.type = "mouseup"; - } - - if (event.type === "pointerleave") R.isLeave = true; - - if (event.type === "pointerdown") e.type = "mousedown"; - if (event.type === "pointerup") e.type = "mouseup"; - if (event.type === "pointermove") { - if (R.isLeave) { - // if user resize outside this document - R.isLeave = false; - R.resize(); - } - e.type = "mousemove"; - } - - // double click test - if (e.type === "mousedown") { - R.downTime = R.now(); - let time = R.downTime - R.prevTime; - - // double click on imput - if (time < 200) { - R.selectAll(); - return false; - } - - R.prevTime = R.downTime; - R.forceZone = false; - } - - // for imput - if (e.type === "mousedown") R.clearInput(); - - // mouse lock - if (e.type === "mousedown") R.lock = true; - if (e.type === "mouseup") R.lock = false; - - //if( R.current !== null && R.current.neverlock ) R.lock = false; - - /*if( e.type === 'mousedown' && event.button === 1){ - R.cursor() - e.preventDefault(); - e.stopPropagation(); - }*/ - - //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) - - if (R.isMobile && e.type === "mousedown") R.findID(e); - if (e.type === "mousemove" && !R.lock) R.findID(e); - - if (R.ID !== null) { - if (R.ID.isCanvasOnly) { - e.clientX = R.ID.mouse.x; - e.clientY = R.ID.mouse.y; - } - - //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 - - R.ID.handleEvent(e); - } - - if (R.isMobile && e.type === "mouseup") R.clearOldID(); - if (leave) R.clearOldID(); - }, - - // ---------------------- - // ID - // ---------------------- - - findID: function (e) { - let i = R.ui.length, - next = -1, - u, - x, - y; - - while (i--) { - u = R.ui[i]; - - if (u.isCanvasOnly) { - x = u.mouse.x; - y = u.mouse.y; - } else { - x = e.clientX; - y = e.clientY; - } - - if (R.onZone(u, x, y)) { - next = i; - - if (next !== R.current) { - R.clearOldID(); - R.current = next; - R.ID = u; - } - break; - } - } - - if (next === -1) R.clearOldID(); - }, - - clearOldID: function () { - if (!R.ID) return; - R.current = -1; - R.ID.reset(); - R.ID = null; - R.cursor(); - }, - - // ---------------------- - // GUI / GROUP FUNCTION - // ---------------------- - - calcUis: (uis, zone, py, group = false) => { - //console.log('calc_uis') - - let i = uis.length, - u, - px = 0, - n = 0, - tw, - m; - - let height = 0; - - while (i--) { - u = uis[n]; - n++; - - if (!group && u.isGroup) u.calcUis(); - - m = u.margin; - //div = u.marginDiv - - u.zone.w = u.w; - u.zone.h = u.h + m; - - if (!u.autoWidth) { - if (px === 0) height += u.h + m; - - u.zone.x = zone.x + px; - u.zone.y = py; // + u.mtop - //if(div) u.zone.y += m * 0.5 - - tw = R.getWidth(u); - if (tw) u.zone.w = u.w = tw; - else if (u.fw) u.zone.w = u.w = u.fw; - - px += u.zone.w; - - if (px >= zone.w) { - py += u.h + m; - //if(div) py += m * 0.5 - px = 0; - } - } else { - px = 0; - - u.zone.x = zone.x + u.dx; - u.zone.y = py; - py += u.h + m; - - height += u.h + m; - } - } - - return height; - }, - - findTarget: function (uis, e) { - let i = uis.length; - - while (i--) { - if (R.onZone(uis[i], e.clientX, e.clientY)) return i; - } - - return -1; - }, - - // ---------------------- - // ZONE - // ---------------------- - - findZone: function (force) { - if (!R.needReZone && !force) return; - - var i = R.ui.length, - u; - - while (i--) { - u = R.ui[i]; - R.getZone(u); - if (u.isGui) u.calcUis(); - } - - R.needReZone = false; - }, - - onZone: function (o, x, y) { - if (x === undefined || y === undefined) return false; - - let z = o.zone; - let mx = x - z.x; // - o.dx; - let my = y - z.y; - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 - //if( o.group !== null ) mx -= o.dx - - let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; - - //if( o.marginDiv ) my -= o.margin * 0.5 - - if (over) o.local.set(mx, my); - else o.local.neg(); - - return over; - }, - - getWidth: function (o) { - //return o.getDom().offsetWidth - return o.getDom().clientWidth; - - //let r = o.getDom().getBoundingClientRect(); - //return (r.width) - //return Math.floor(r.width) - }, - - getZone: function (o) { - if (o.isCanvasOnly) return; - let r = o.getDom().getBoundingClientRect(); - - //if( !r.width ) return - //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; - //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; - o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; - - //console.log(o.name, o.zone) - }, - - // ---------------------- - // CURSOR - // ---------------------- - - cursor: function (name) { - name = name ? name : "auto"; - if (name !== R.oldCursor) { - document.body.style.cursor = name; - R.oldCursor = name; - } - }, - - // ---------------------- - // CANVAS - // ---------------------- - - toCanvas: function (o, w, h, force) { - if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); - - // prevent exesive redraw - - if (force && R.tmpTime !== null) { - clearTimeout(R.tmpTime); - R.tmpTime = null; - } - - if (R.tmpTime !== null) return; - - if (R.lock) - R.tmpTime = setTimeout(function () { - R.tmpTime = null; - }, 10); - - /// - - let isNewSize = false; - if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; - - if (R.tmpImage === null) R.tmpImage = new Image(); - - let img = R.tmpImage; //new Image(); - - let htmlString = R.xmlserializer.serializeToString(o.content); - - let svg = - '' + - htmlString + - ""; - - img.onload = function () { - let ctx = o.canvas.getContext("2d"); - - if (isNewSize) { - o.canvas.width = w; - o.canvas.height = h; - } else { - ctx.clearRect(0, 0, w, h); - } - ctx.drawImage(this, 0, 0); - - o.onDraw(); - }; - - img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); - //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); - img.crossOrigin = ""; - R.needsUpdate = false; - }, - - // ---------------------- - // INPUT - // ---------------------- - - setHidden: function () { - if (R.hiddenImput === null) { - //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' - //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' - //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; - - R.hiddenImput = document.createElement("input"); - R.hiddenImput.type = "text"; - //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); - - R.hiddenSizer = document.createElement("div"); - //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; - - document.body.appendChild(R.hiddenImput); - document.body.appendChild(R.hiddenSizer); - } - - let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; - let css = - R.parent.css.txtselect + - "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + - hide; - R.hiddenImput.style.cssText = - css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); - R.hiddenSizer.style.cssText = css + "bottom:40px;"; - - R.hiddenImput.style.width = R.input.clientWidth + "px"; - R.hiddenImput.value = R.str; - R.hiddenSizer.innerHTML = R.str; - - R.hasFocus = true; - }, - - clearHidden: function (p) { - if (R.hiddenImput === null) return; - R.hasFocus = false; - }, - - clickPos: function (x) { - let i = R.str.length, - l = 0, - n = 0; - while (i--) { - l += R.textWidth(R.str[n]); - if (l >= x) break; - n++; - } - return n; - }, - - upInput: function (x, down) { - if (R.parent === null) return false; - - let up = false; - - if (down) { - let id = R.clickPos(x); - - R.moveX = id; - - if (R.startX === -1) { - R.startX = id; - R.cursorId = id; - R.inputRange = [R.startX, R.startX]; - } else { - let isSelection = R.moveX !== R.startX; - - if (isSelection) { - if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; - else R.inputRange = [R.startX, R.moveX]; - } - } - - up = true; - } else { - if (R.startX !== -1) { - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.startX = -1; - - up = true; - } - } - - if (up) R.selectParent(); - - return up; - }, - - selectAll: function () { - if (!R.parent) return; - - R.str = R.input.textContent; - R.inputRange = [0, R.str.length]; - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.cursorId = R.inputRange[1]; - R.selectParent(); - }, - - selectParent: function () { - var c = R.textWidth(R.str.substring(0, R.cursorId)); - var e = R.textWidth(R.str.substring(0, R.inputRange[0])); - var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); - - R.parent.select(c, e, s, R.hiddenSizer.innerHTML); - }, - - textWidth: function (text) { - if (R.hiddenSizer === null) return 0; - text = text.replace(/ /g, " "); - R.hiddenSizer.innerHTML = text; - return R.hiddenSizer.clientWidth; - }, - - clearInput: function () { - if (R.parent === null) return; - if (!R.firstImput) R.parent.validate(true); - - R.clearHidden(); - R.parent.unselect(); - - //R.input.style.background = 'none'; - R.input.style.background = R.parent.colors.back; - R.input.style.borderColor = R.parent.colors.border; - //R.input.style.color = R.parent.colors.text; - R.parent.isEdit = false; - - R.input = null; - R.parent = null; - (R.str = ""), (R.firstImput = true); - }, - - setInput: function (Input, parent) { - R.clearInput(); - - R.input = Input; - R.parent = parent; - - R.input.style.background = R.parent.colors.backoff; - R.input.style.borderColor = R.parent.colors.select; - //R.input.style.color = R.parent.colors.textSelect; - R.str = R.input.textContent; - - R.setHidden(); - }, - - keydown: function (e) { - if (R.parent === null) return; - - let keyCode = e.which; - e.shiftKey; - - //console.log( keyCode ) - - R.firstImput = false; - - if (R.hasFocus) { - // hack to fix touch event bug in iOS Safari - window.focus(); - R.hiddenImput.focus(); - } - - R.parent.isEdit = true; - - // e.preventDefault(); - - // add support for Ctrl/Cmd+A selection - //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { - //R.selectText(); - //e.preventDefault(); - //return self.render(); - //} - - if (keyCode === 13) { - //enter - - R.clearInput(); - - //} else if( keyCode === 9 ){ //tab key - - // R.input.textContent = ''; - } else { - if (R.input.isNum) { - if ( - (e.keyCode > 47 && e.keyCode < 58) || - (e.keyCode > 95 && e.keyCode < 106) || - e.keyCode === 190 || - e.keyCode === 110 || - e.keyCode === 8 || - e.keyCode === 109 - ) { - R.hiddenImput.readOnly = false; - } else { - R.hiddenImput.readOnly = true; - } - } else { - R.hiddenImput.readOnly = false; - } - } - }, - - keyup: function (e) { - if (R.parent === null) return; - - R.str = R.hiddenImput.value; - - if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value - else R.input.textContent = R.str; - - R.cursorId = R.hiddenImput.selectionStart; - R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; - - R.selectParent(); - - //if( R.parent.allway ) - R.parent.validate(); - }, - - // ---------------------- - // - // LISTENING - // - // ---------------------- - - /* - // esta era la funcion original - loop: function () { - - if( R.isLoop ) requestAnimationFrame( R.loop ); - R.update(); - - }, - - */ - - loop: function () { - // modified by Fedemarino - if (R.isLoop) requestAnimationFrame(R.loop); - R.needsUpdate = R.update(); - // if there is a change in a value generated externally, the GUI needs to be redrawn - if (R.ui[0] && R.needsUpdate) R.ui[0].draw(); - }, - - update: function () { - // modified by Fedemarino - let i = R.listens.length; - let needsUpdate = false; - while (i--) { - //check if the value of the object has changed - let hasChanged = R.listens[i].listening(); - if (hasChanged) needsUpdate = true; - } - return needsUpdate; - }, - - removeListen: function (proto) { - let id = R.listens.indexOf(proto); - if (id !== -1) R.listens.splice(id, 1); - if (R.listens.length === 0) R.isLoop = false; - }, - - addListen: function (proto) { - let id = R.listens.indexOf(proto); - - if (id !== -1) return false; - - R.listens.push(proto); - - if (!R.isLoop) { - R.isLoop = true; - R.loop(); - } - - return true; - }, - }; - - const Roots = R; - - /** - * @author lth / https://github.com/lo-th - */ - - const T = { - - transition: 0.2, - - frag: document.createDocumentFragment(), - - colorRing: null, - joystick_0: null, - joystick_1: null, - circular: null, - knob: null, - pad2d: null, - - svgns: "http://www.w3.org/2000/svg", - links: "http://www.w3.org/1999/xlink", - htmls: "http://www.w3.org/1999/xhtml", - - DOM_SIZE: [ 'height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], - SVG_TYPE_D: [ 'pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix' ], - SVG_TYPE_G: [ 'svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject' ], - - PI: Math.PI, - TwoPI: Math.PI*2, - pi90: Math.PI * 0.5, - pi60: Math.PI/3, - - torad: Math.PI / 180, - todeg: 180 / Math.PI, - - clamp: ( v, min, max ) => { - - v = v < min ? min : v; - v = v > max ? max : v; - return v; - - }, - - isDivid: ( v ) => ( v*0.5 === Math.floor(v*0.5) ), - - size: { w: 240, h: 20, p: 30, s: 8 }, - - // ---------------------- - // COLOR - // ---------------------- - - defineColor: ( o, cc = T.colors ) => { - - let color = { ...cc }; - - let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize' ]; - let changeText = false; - - if( o.font ) o.fontFamily = o.font; - if( o.shadow ) o.fontShadow = o.shadow; - if( o.weight ) o.fontWeight = o.weight; - - if( o.fontColor ) o.text = o.fontColor; - if( o.color ) o.text = o.color; - - if( o.text ){ - color.text = o.text; - if( !o.fontColor && !o.color ){ - color.title = T.ColorLuma( o.text, -0.25 ); - color.titleoff = T.ColorLuma( o.text, -0.5 ); - } - color.textOver = T.ColorLuma( o.text, 0.25 ); - color.textSelect = T.ColorLuma( o.text, 0.5 ); - } - - if( o.button ){ - color.button = o.button; - color.border = T.ColorLuma( o.button, 0.1 ); - color.overoff = T.ColorLuma( o.button, 0.2 ); - } - - if( o.select ){ - color.select = o.select; - color.over = T.ColorLuma( o.select, -0.1 ); - } - - if( o.itemBg ) o.back = o.itemBg; - - if( o.back ){ - color.back = o.back; - color.backoff = T.ColorLuma( o.back, -0.1 ); - } - - if( o.fontSelect ) color.textSelect = o.fontSelect; - if( o.groupBorder ) color.gborder = o.groupBorder; - - //if( o.transparent ) o.bg = 'none' - //if( o.bg ) color.background = color.backgroundOver = o.bg - if( o.bgOver ) color.backgroundOver = o.bgOver; - - for( let m in color ){ - if(o[m]!==undefined) color[m] = o[m]; - } - - for( let m in o ){ - if( textChange.indexOf(m) !== -1 ) changeText = true; - } - - if( changeText ) T.defineText( color ); - - return color - - }, - - colors: { - - sx: 4,//4 - sy: 2,//2 - radius:2, - - showOver : 1, - //groupOver : 1, - - content:'none', - background: 'rgba(50,50,50,0.15)', - backgroundOver: 'rgba(50,50,50,0.3)', - - title : '#CCC', - titleoff : '#BBB', - text : '#DDD', - textOver : '#EEE', - textSelect : '#FFF', - - back:'rgba(0,0,0,0.2)', - backoff:'rgba(0,0,0,0.3)', - - // input and button border - border : '#4c4c4c', - borderSize : 1, - - gborder : 'none', - groups : 'none', - - - button : '#3c3c3c', - overoff : '#5c5c5c', - over : '#024699', - select : '#308AFF', - action: '#FF3300', - - //fontFamily: 'Tahoma', - fontFamily: 'Consolas, monospace', - //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", - fontWeight: 'normal', - fontShadow: 'none',//'#000', - fontSize:12, - - joyOver:'rgba(48,138,255,0.25)', - joyOut: 'rgba(100,100,100,0.5)', - joySelect: '#308AFF', - - - hide: 'rgba(0,0,0,0)', - - }, - - // style css - - css : { - - basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', - button:'display:flex; align-items:center; justify-content:center; text-align:center;', - middle:'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' - }, - - // svg path - - svgs: { - - g1:'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', - g2:'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', - - group:'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', - arrow:'M 3 8 L 8 5 3 2 3 8 Z', - - arrowDown:'M 5 8 L 8 3 2 3 5 8 Z', - arrowUp:'M 5 2 L 2 7 8 7 5 2 Z', - - solid:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', - body:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', - vehicle:'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', - articulation:'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', - character:'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', - terrain:'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', - joint:'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', - ray:'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', - collision:'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', - map:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - material:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - texture:'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', - object:'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', - none:'M 9 5 L 5 5 5 9 9 9 9 5 Z', - cursor:'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', - load:'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', - save:'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', - extern:'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z', - - }, - - rezone () { - Roots.needReZone = true; - }, - - getImput: function(){ - - return Roots.input ? true : false - - }, - - setStyle : function ( data ){ - - for ( var o in data ){ - if( T.colors[o] ) T.colors[o] = data[o]; - } - - T.setText(); - - }, - - // ---------------------- - // custom text - // ---------------------- - - defineText: function( o ){ - - T.setText( o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight ); - - }, - - setText: function( size, color, font, shadow, weight ){ - - let cc = T.colors; - - if( font === undefined ) font = cc.fontFamily; - if( size === undefined ) size = cc.fontSize; - if( shadow === undefined ) shadow = cc.fontShadow; - if( weight === undefined ) weight = cc.fontWeight; - if( color === undefined ) color = cc.text; - - if( isNaN(size) ){ if( size.search('em')===-1 ) size += 'px';} - else size += 'px'; - - - //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' - - T.css.txt = T.css.basic + T.css.middle + ' font-family:'+ font +'; font-weight:'+weight+'; font-size:'+size+'; color:'+cc.text+'; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; - if( shadow !== 'none' ) T.css.txt += ' text-shadow: 1px 1px 1px '+shadow+';'; - - T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; - T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; - - }, - - - // note - - //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container - - /*cloneColor: function () { - - let cc = Object.assign({}, T.colors ); - return cc; - - },*/ - - // intern function - - cloneCss: function () { - - //let cc = Object.assign({}, T.css ); - return { ...T.css }; - - }, - - clone: function ( o ) { - - return o.cloneNode( true ); - - }, - - setSvg: function( dom, type, value, id, id2 ){ - - if( id === -1 ) dom.setAttributeNS( null, type, value ); - else if( id2 !== undefined ) dom.childNodes[ id || 0 ].childNodes[ id2 || 0 ].setAttributeNS( null, type, value ); - else dom.childNodes[ id || 0 ].setAttributeNS( null, type, value ); - - }, - - setCss: function( dom, css ){ - - for( let r in css ){ - if( T.DOM_SIZE.indexOf(r) !== -1 ) dom.style[r] = css[r] + 'px'; - else dom.style[r] = css[r]; - } - - }, - - set: function( g, o ){ - - for( let att in o ){ - if( att === 'txt' ) g.textContent = o[ att ]; - if( att === 'link' ) g.setAttributeNS( T.links, 'xlink:href', o[ att ] ); - else g.setAttributeNS( null, att, o[ att ] ); - } - - }, - - get: function( dom, id ){ - - if( id === undefined ) return dom; // root - else if( !isNaN( id ) ) return dom.childNodes[ id ]; // first child - else if( id instanceof Array ){ - if(id.length === 2) return dom.childNodes[ id[0] ].childNodes[ id[1] ]; - if(id.length === 3) return dom.childNodes[ id[0] ].childNodes[ id[1] ].childNodes[ id[2] ]; - } - - }, - - dom : function ( type, css, obj, dom, id ) { - - type = type || 'div'; - - if( T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1 ){ // is svg element - - if( type ==='svg' ){ - - dom = document.createElementNS( T.svgns, 'svg' ); - T.set( dom, obj ); - - /* } else if ( type === 'use' ) { - - dom = document.createElementNS( T.svgns, 'use' ); - T.set( dom, obj ); - */ - } else { - // create new svg if not def - if( dom === undefined ) dom = document.createElementNS( T.svgns, 'svg' ); - T.addAttributes( dom, type, obj, id ); - - } - - } else { // is html element - - if( dom === undefined ) dom = document.createElementNS( T.htmls, type ); - else dom = dom.appendChild( document.createElementNS( T.htmls, type ) ); - - } - - if( css ) dom.style.cssText = css; - - if( id === undefined ) return dom; - else return dom.childNodes[ id || 0 ]; - - }, - - addAttributes : function( dom, type, o, id ){ - - let g = document.createElementNS( T.svgns, type ); - T.set( g, o ); - T.get( dom, id ).appendChild( g ); - if( T.SVG_TYPE_G.indexOf(type) !== -1 ) g.style.pointerEvents = 'none'; - return g; - - }, - - clear : function( dom ){ - - T.purge( dom ); - while (dom.firstChild) { - if ( dom.firstChild.firstChild ) T.clear( dom.firstChild ); - dom.removeChild( dom.firstChild ); - } - - }, - - purge : function ( dom ) { - - let a = dom.attributes, i, n; - if (a) { - i = a.length; - while(i--){ - n = a[i].name; - if (typeof dom[n] === 'function') dom[n] = null; - } - } - a = dom.childNodes; - if (a) { - i = a.length; - while(i--){ - T.purge( dom.childNodes[i] ); - } - } - - }, - - // ---------------------- - // SVG Effects function - // ---------------------- - - addSVGGlowEffect: function () { - - if ( document.getElementById( 'UILGlow') !== null ) return; - - let svgFilter = T.initUILEffects(); - - let filter = T.addAttributes( svgFilter, 'filter', { id: 'UILGlow', x: '-20%', y: '-20%', width: '140%', height: '140%' } ); - T.addAttributes( filter, 'feGaussianBlur', { in: 'SourceGraphic', stdDeviation: '3', result: 'uilBlur' } ); - let feMerge = T.addAttributes( filter, 'feMerge', { } ); - - for( let i = 0; i <= 3; i++ ) { - - T.addAttributes( feMerge, 'feMergeNode', { in: 'uilBlur' } ); - - } - - T.addAttributes( feMerge, 'feMergeNode', { in: 'SourceGraphic' } ); - - }, - - initUILEffects: function () { - - let svgFilter = document.getElementById( 'UILSVGEffects'); - - if ( svgFilter === null ) { - - svgFilter = T.dom( 'svg', undefined , { id: 'UILSVGEffects', width: '0', height: '0' } ); - document.body.appendChild( svgFilter ); - - } - - return svgFilter; - - }, - - // ---------------------- - // Color function - // ---------------------- - - ColorLuma : function ( hex, l ) { - - //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; - - if( hex === 'n' ) hex = '#000'; - - // validate hex string - hex = String(hex).replace(/[^0-9a-f]/gi, ''); - if (hex.length < 6) { - hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; - } - l = l || 0; - - // convert to decimal and change luminosity - let rgb = "#", c, i; - for (i = 0; i < 3; i++) { - c = parseInt(hex.substr(i*2,2), 16); - c = Math.round(Math.min(Math.max(0, c + (c * l)), 255)).toString(16); - rgb += ("00"+c).substr(c.length); - } - - return rgb; - - }, - - findDeepInver: function ( c ) { - - return (c[0] * 0.3 + c[1] * .59 + c[2] * .11) <= 0.6; - - }, - - lerpColor: function( c1, c2, factor ) { - let newColor = {}; - for ( let i = 0; i < 3; i++ ) { - newColor[i] = c1[ i ] + ( c2[ i ] - c1[ i ] ) * factor; - } - return newColor; - }, - - hexToHtml: function ( v ) { - v = v === undefined ? 0x000000 : v; - return "#" + ("000000" + v.toString(16)).substr(-6); - - }, - - htmlToHex: function ( v ) { - - return v.toUpperCase().replace("#", "0x"); - - }, - - u255: function (c, i) { - - return parseInt(c.substring(i, i + 2), 16) / 255; - - }, - - u16: function ( c, i ) { - - return parseInt(c.substring(i, i + 1), 16) / 15; - - }, - - unpack: function( c ){ - - if (c.length == 7) return [ T.u255(c, 1), T.u255(c, 3), T.u255(c, 5) ]; - else if (c.length == 4) return [ T.u16(c,1), T.u16(c,2), T.u16(c,3) ]; - - }, - - p255: function ( c ) { - let h = Math.round( ( c * 255 ) ).toString( 16 ); - if ( h.length < 2 ) h = '0' + h; - return h; - }, - - pack: function ( c ) { - - return '#' + T.p255( c[ 0 ] ) + T.p255( c[ 1 ] ) + T.p255( c[ 2 ] ); - - }, - - htmlRgb: function( c ){ - - return 'rgb(' + Math.round(c[0] * 255) + ','+ Math.round(c[1] * 255) + ','+ Math.round(c[2] * 255) + ')'; - - }, - - pad: function( n ){ - if(n.length == 1)n = '0' + n; - return n; - }, - - rgbToHex : function( c ){ - - let r = Math.round(c[0] * 255).toString(16); - let g = Math.round(c[1] * 255).toString(16); - let b = Math.round(c[2] * 255).toString(16); - return '#' + T.pad(r) + T.pad(g) + T.pad(b); - - // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); - - }, - - hueToRgb: function( p, q, t ){ - - if ( t < 0 ) t += 1; - if ( t > 1 ) t -= 1; - if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; - if ( t < 1 / 2 ) return q; - if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); - return p; - - }, - - rgbToHsl: function ( c ) { - - let r = c[0], g = c[1], b = c[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h = 0, s = 0, l = (min + max) / 2; - if (l > 0 && l < 1) s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); - if (delta > 0) { - if (max == r && max != g) h += (g - b) / delta; - if (max == g && max != b) h += (2 + (b - r) / delta); - if (max == b && max != r) h += (4 + (r - g) / delta); - h /= 6; - } - return [ h, s, l ]; - - }, - - hslToRgb: function ( c ) { - - let p, q, h = c[0], s = c[1], l = c[2]; - - if ( s === 0 ) return [ l, l, l ]; - else { - q = l <= 0.5 ? l * (s + 1) : l + s - ( l * s ); - p = l * 2 - q; - return [ T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333) ]; - } - - }, - - // ---------------------- - // SVG MODEL - // ---------------------- - - makeGradiant: function ( type, settings, parent, colors ) { - - T.dom( type, null, settings, parent, 0 ); - - let n = parent.childNodes[0].childNodes.length - 1, c; - - for( let i = 0; i < colors.length; i++ ){ - - c = colors[i]; - //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); - T.dom( 'stop', null, { offset:c[0]+'%', 'stop-color':c[1], 'stop-opacity':c[2] }, parent, [0,n] ); - - } - - }, - - /*makeGraph: function () { - - let w = 128; - let radius = 34; - let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 - //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 - //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 - - //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 - //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 - T.graph = svg; - - },*/ - - makePad: function ( model ) { - - let ww = 256; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+ww+' '+ww, width:ww, height:ww, preserveAspectRatio:'none' } ); - let w = 200; - let d = (ww-w)*0.5, m = 20; - Tools.dom( 'rect', '', { x: d, y: d, width: w, height: w, fill:T.colors.back }, svg ); // 0 - Tools.dom( 'rect', '', { x: d+m*0.5, y: d+m*0.5, width: w - m , height: w - m, fill:T.colors.button }, svg ); // 1 - // Pointer - Tools.dom( 'line', '', { x1: d+(m*0.5), y1: ww *0.5, x2: d+(w-m*0.5), y2: ww * 0.5, stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 2 - Tools.dom( 'line', '', { x1: ww * 0.5, x2: ww * 0.5, y1: d+(m*0.5), y2: d+(w-m*0.5), stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 3 - Tools.dom( 'circle', '', { cx: ww * 0.5, cy: ww * 0.5, r:5, stroke: T.colors.text, 'stroke-width': 5, fill:'none' }, svg ); // 4 - T.pad2d = svg; - - }, - - makeKnob: function ( model ) { - - let w = 128; - let radius = 34; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'round' }, svg );//1 - T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.1)', 'stroke-width':7 , fill:'none'}, svg );//2 - T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 - T.knob = svg; - - }, - - makeCircular: function ( model ) { - - let w = 128; - let radius = 40; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'circle', '', { cx:64, cy:64, r:radius, stroke:'rgba(0,0,0,0.1)', 'stroke-width':10, fill:'none' }, svg );//0 - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':7, fill:'none', 'stroke-linecap':'butt' }, svg );//1 - T.circular = svg; - - }, - - makeJoystick: function ( model ) { - - //+' background:#f00;' - - let w = 128, ccc; - let radius = Math.floor((w-30)*0.5); - let innerRadius = Math.floor(radius*0.6); - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'defs', null, {}, svg ); - T.dom( 'g', null, {}, svg ); - - if( model === 0 ){ - - - - // gradian background - ccc = [ [40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'grad', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // gradian shadow - ccc = [ [60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'gradS', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // gradian stick - let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; - let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; - - ccc = [ [30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1] ]; - T.makeGradiant( 'radialGradient', { id:'gradIn', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - ccc = [ [30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1] ]; - T.makeGradiant( 'radialGradient', { id:'gradIn2', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // graph - - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'url(#grad)' }, svg );//2 - T.dom( 'circle', '', { cx:64+5, cy:64+10, r:innerRadius+10, fill:'url(#gradS)' }, svg );//3 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'url(#gradIn)' }, svg );//4 - - T.joystick_0 = svg; - - } else { - // gradian shadow - ccc = [ [69, 'rgb(0,0,0)', 0],[70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'gradX', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'none', stroke:'rgba(100,100,100,0.25)', 'stroke-width':'4' }, svg );//2 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius+14, fill:'url(#gradX)' }, svg );//3 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'none', stroke:'rgb(100,100,100)', 'stroke-width':'4' }, svg );//4 - - T.joystick_1 = svg; - } - - - - }, - - makeColorRing: function () { - - let w = 256; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'defs', null, {}, svg ); - T.dom( 'g', null, {}, svg ); - - let s = 30;//stroke - let r =( w-s )*0.5; - let mid = w*0.5; - let n = 24, nudge = 8 / r / n * Math.PI, a1 = 0; - let am, tan, d2, a2, ar, i, j, path, ccc; - let color = []; - - for ( i = 0; i <= n; ++i) { - - d2 = i / n; - a2 = d2 * T.TwoPI; - am = (a1 + a2) * 0.5; - tan = 1 / Math.cos((a2 - a1) * 0.5); - - ar = [ - Math.sin(a1), -Math.cos(a1), - Math.sin(am) * tan, -Math.cos(am) * tan, - Math.sin(a2), -Math.cos(a2) - ]; - - color[1] = T.rgbToHex( T.hslToRgb([d2, 1, 0.5]) ); - - if (i > 0) { - - j = 6; - while(j--){ - ar[j] = ((ar[j]*r)+mid).toFixed(2); - } - - path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; - - ccc = [ [0,color[0],1], [100,color[1],1] ]; - T.makeGradiant( 'linearGradient', { id:'G'+i, x1:ar[0], y1:ar[1], x2:ar[4], y2:ar[5], gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - T.dom( 'path', '', { d:path, 'stroke-width':s, stroke:'url(#G'+i+')', 'stroke-linecap':"butt" }, svg, 1 ); - - } - a1 = a2 - nudge; - color[0] = color[1]; - } - - let tw = 84.90; - - // black / white - ccc = [ [0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1] ]; - T.makeGradiant( 'linearGradient', { id:'GL0', x1:0, y1:mid-tw, x2:0, y2:mid+tw, gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - ccc = [ [0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0] ]; - T.makeGradiant( 'linearGradient', { id:'GL1', x1:mid-49.05, y1:0, x2:mid+98, y2:0, gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - T.dom( 'g', null, { 'transform-origin': '128px 128px', 'transform':'rotate(0)' }, svg );//2 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'red' }, svg, 2 );// 2,0 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL1)','stroke-width':1, stroke:'url(#GL1)' }, svg, 2 );//2,1 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL0)','stroke-width':1, stroke:'url(#GL0)' }, svg, 2 );//2,2 - T.dom( 'path', '', { d:'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill:'none','stroke-width':2, stroke:'#000' }, svg, 2 );//2,3 - //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 - - T.dom( 'circle', '', { cx:128, cy:128, r:6, 'stroke-width':2, stroke:'#000', fill:'none' }, svg );//3 - - T.colorRing = svg; - - }, - - icon: function ( type, color, w ){ - - w = w || 40; - //color = color || '#DEDEDE'; - let viewBox = '0 0 256 256'; - //let viewBox = '0 0 '+ w +' '+ w; - let t = [""]; - switch(type){ - case 'logo': - t[1]=""; - break; - case 'donate': - t[1]=""; - break; - case 'neo': - t[1]=""; - break; - case 'phy': - t[1]=""; - break; - case 'config': - t[1]=""; - break; - case 'github': - t[1]=""; - break; - case 'save': - t[1]=""; - break; - } - t[2] = ""; - return t.join("\n"); - - }, - - logoFill_d:` - M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 - L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 - M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 - Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z - `, - - logo_github:` - M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 - 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 - 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 - 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 - 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z - `, - - logo_neo:` - M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 - 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 - 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 - 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L - 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z - `, - - logo_phy:` - M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 - Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 - `, - - logo_config:` - M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 - L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 - Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 - `, - - logo_donate:` - M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 - 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 - 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 - 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 - 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 - Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 - 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 - 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 - 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M - 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 - 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 - 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 - 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 - 200.9 187.5 200.9 187.5 195.35 Z - `, - - }; - - T.setText(); - - const Tools = T; - - ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile - - - class Files { - - //----------------------------- - // FILE TYPE - //----------------------------- - - static autoTypes( type ) { - - let t = []; - - switch( type ){ - case 'svg': - t = [ { accept: { 'image/svg+xml': '.svg'} }, ]; - break; - case 'wav': - t = [ { accept: { 'audio/wav': '.wav'} }, ]; - break; - case 'mp3': - t = [ { accept: { 'audio/mpeg': '.mp3'} }, ]; - break; - case 'mp4': - t = [ { accept: { 'video/mp4': '.mp4'} }, ]; - break; - case 'bin': case 'hex': - t = [ { description: 'Binary Files', accept: { 'application/octet-stream': ['.bin', '.hex'] } }, ]; - break; - case 'text': - t = [ { description: 'Text Files', accept: { 'text/plain': ['.txt', '.text'], 'text/html': ['.html', '.htm'] } }, ]; - break; - case 'json': - t = [ { description: 'JSON Files', accept: { 'application/json': ['.json'] } }, ];//text/plain - break; - case 'js': - t = [ { description: 'JavaScript Files', accept: { 'text/javascript': ['.js'] } }, ]; - break; - case 'image': - t = [ { description: 'Images', accept: { 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] } }, ]; - break; - case 'icon': - t = [ { description: 'Icons', accept: { 'image/x-ico': ['.ico'] } }, ]; - break; - case 'lut': - t = [ { description: 'Lut', accept: { 'text/plain': ['.cube', '.3dl'] } }, ]; - break; - - } - - return t - - } - - - //----------------------------- - // LOAD - //----------------------------- - - static async load( o = {} ) { - - if (typeof window.showOpenFilePicker !== 'function') { - window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; - } - - try { - - let type = o.type || ''; - - const options = { - excludeAcceptAllOption: type ? true : false, - multiple: false, - //startIn:'./assets' - }; - - options.types = Files.autoTypes( type ); - - // create a new handle - const handle = await window.showOpenFilePicker( options ); - const file = await handle[0].getFile(); - //let content = await file.text() - - if( !file ) return null - - let fname = file.name; - let ftype = fname.substring( fname.lastIndexOf('.')+1, fname.length ); - - const dataUrl = [ 'png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3' ]; - const dataBuf = [ 'sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf' ]; - const reader = new FileReader(); - - if( dataUrl.indexOf( ftype ) !== -1 ) reader.readAsDataURL( file ); - else if( dataBuf.indexOf( ftype ) !== -1 ) reader.readAsArrayBuffer( file ); - else reader.readAsText( file ); - - reader.onload = function(e) { - - let content = e.target.result; - - switch(type){ - case 'image': - let img = new Image; - img.onload = function() { - if( o.callback ) o.callback( img, fname, ftype ); - }; - img.src = content; - break; - case 'json': - if( o.callback ) o.callback( JSON.parse( content ), fname, ftype ); - break; - default: - if( o.callback ) o.callback( content, fname, ftype ); - break; - } - - }; - - } catch(e) { - - console.log(e); - if( o.always && o.callback ) o.callback( null ); - - } - - } - - static showOpenFilePickerPolyfill( options ) { - return new Promise((resolve) => { - const input = document.createElement("input"); - input.type = "file"; - input.multiple = options.multiple; - input.accept = options.types - .map((type) => type.accept) - .flatMap((inst) => Object.keys(inst).flatMap((key) => inst[key])) - .join(","); - - input.addEventListener("change", () => { - resolve( - [...input.files].map((file) => { - return { - getFile: async () => - new Promise((resolve) => { - resolve(file); - }), - }; - }) - ); - }); - - input.click(); - }) - } - - - //----------------------------- - // SAVE - //----------------------------- - - static async save( o = {} ) { - - let usePoly = false; - - if (typeof window.showSaveFilePicker !== 'function') { - window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; - usePoly = true; - } - - try { - - let type = o.type || ''; - - const options = { - suggestedName: o.name || 'hello', - data: o.data || '' - }; - - options.types = Files.autoTypes( type ); - options.finalType = Object.keys( options.types[0].accept )[0]; - options.suggestedName += options.types[0].accept[options.finalType][0]; - - - // create a new handle - const handle = await window.showSaveFilePicker( options ); - - if( usePoly ) return - - // create a FileSystemWritableFileStream to write to - const file = await handle.createWritable(); - - let blob = new Blob([ options.data ], { type: options.finalType }); - - // write our file - await file.write(blob); - - // close the file and write the contents to disk. - await file.close(); - - } catch(e) { - - console.log(e); - - } - - } - - static showSaveFilePickerPolyfill( options ) { - return new Promise((resolve) => { - const a = document.createElement("a"); - a.download = options.suggestedName || "my-file.txt"; - let blob = new Blob([ options.data ], { type:options.finalType }); - a.href = URL.createObjectURL( blob ); - - a.addEventListener("click", () => { - resolve( - setTimeout( () => URL.revokeObjectURL(a.href), 1000 ) - ); - }); - a.click(); - }) - } - - - //----------------------------- - // FOLDER not possible in poly - //----------------------------- - - static async getFolder() { - - try { - - const handle = await window.showDirectoryPicker(); - const files = []; - for await (const entry of handle.values()) { - const file = await entry.getFile(); - files.push(file); - } - - console.log(files); - return files; - - } catch(e) { - - console.log(e); - - } - - } - - - - - - - - - - - } - - class V2 { - - constructor( x = 0, y = 0 ) { - - this.x = x; - this.y = y; - - } - - set ( x, y ) { - - this.x = x; - this.y = y; - return this; - - } - - divide ( v ) { - - this.x /= v.x; - this.y /= v.y; - return this; - - } - - multiply ( v ) { - - this.x *= v.x; - this.y *= v.y; - return this; - - } - - multiplyScalar ( scalar ) { - - this.x *= scalar; - this.y *= scalar; - return this; - - } - - divideScalar ( scalar ) { - - return this.multiplyScalar( 1 / scalar ); - - } - - length () { - - return Math.sqrt( this.x * this.x + this.y * this.y ); - - } - - angle () { - - // computes the angle in radians with respect to the positive x-axis - - var angle = Math.atan2( this.y, this.x ); - - if ( angle < 0 ) angle += 2 * Math.PI; - - return angle; - - } - - addScalar ( s ) { - - this.x += s; - this.y += s; - return this; - - } - - negate () { - - this.x *= -1; - this.y *= -1; - return this; - - } - - neg () { - - this.x = -1; - this.y = -1; - return this; - - } - - isZero () { - - return ( this.x === 0 && this.y === 0 ); - - } - - copy ( v ) { - - this.x = v.x; - this.y = v.y; - - return this; - - } - - equals ( v ) { - - return ( ( v.x === this.x ) && ( v.y === this.y ) ); - - } - - nearEquals ( v, n ) { - - return ( ( v.x.toFixed(n) === this.x.toFixed(n) ) && ( v.y.toFixed(n) === this.y.toFixed(n) ) ); - - } - - lerp ( v, alpha ) { - - if( v === null ){ - this.x -= this.x * alpha; - this.y -= this.y * alpha; - } else { - this.x += ( v.x - this.x ) * alpha; - this.y += ( v.y - this.y ) * alpha; - } - - return this; - - } - - } - - /** - * @author lth / https://github.com/lo-th - */ - - class Proto { - constructor(o = {}) { - // disable mouse controle - this.lock = o.lock || false; - - // for button - this.neverlock = false; - - // only simple space - this.isSpace = o.isSpace || false; - - // if is on gui or group - this.main = o.main || null; - this.isUI = o.isUI || false; - this.group = o.group || null; - - this.isListen = false; - - this.top = 0; - this.ytop = 0; - - this.dx = o.dx || 0; - - this.isSelectable = o.selectable !== undefined ? o.selectable : false; - this.unselectable = - o.unselect !== undefined ? o.unselect : this.isSelectable; - - this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' - - this.css = this.main ? this.main.css : Tools.css; - - this.colors = Tools.defineColor( - o, - this.main - ? this.group - ? this.group.colors - : this.main.colors - : Tools.colors - ); - - this.overEffect = this.colors.showOver; - - this.svgs = Tools.svgs; - - this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; - this.local = new V2().neg(); - - this.isCanvasOnly = false; - this.isSelect = false; - - // percent of title - this.p = o.p !== undefined ? o.p : Tools.size.p; - - this.w = this.isUI ? this.main.size.w : Tools.size.w; - if (o.w !== undefined) this.w = o.w; - - this.h = this.isUI ? this.main.size.h : Tools.size.h; - if (o.h !== undefined) this.h = o.h; - if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; - else this.lock = true; - - // decale for canvas only - this.fw = o.fw || 0; - - this.autoWidth = o.auto || true; // auto width or flex - this.isOpen = false; //false// open statu - - // radius for toolbox - this.radius = o.radius || this.colors.radius; - - this.transition = o.transition || Tools.transition; - - // only for number - this.isNumber = false; - this.noNeg = o.noNeg || false; - this.allEqual = o.allEqual || false; - - // only most simple - this.mono = false; - - // stop listening for edit slide text - this.isEdit = false; - - // no title - this.simple = o.simple || false; - if (this.simple) this.sa = 0; - - // define obj size - this.setSize(this.w); - - // title size - if (o.sa !== undefined) this.sa = o.sa; - if (o.sb !== undefined) this.sb = o.sb; - if (this.simple) this.sb = this.w - this.sa; - - // last number size for slide - this.sc = o.sc === undefined ? 47 : o.sc; - - // for listening object - this.objectLink = null; - this.isSend = false; - this.objectKey = null; - - this.txt = o.name || ""; - this.name = o.rename || this.txt; - this.target = o.target || null; - - // callback - this.callback = o.callback === undefined ? null : o.callback; - this.endCallback = null; - this.openCallback = o.openCallback === undefined ? null : o.openCallback; - this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; - - // if no callback take one from group or gui - if (this.callback === null && this.isUI && this.main.callback !== null) { - this.callback = this.group ? this.group.callback : this.main.callback; - } - - // elements - this.c = []; - - // style - this.s = []; - - this.useFlex = this.isUI ? this.main.useFlex : false; - let flexible = this.useFlex - ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" - : "float:left;"; - - this.c[0] = Tools.dom( - "div", - this.css.basic + flexible + "position:relative; height:20px;" - ); - - this.s[0] = this.c[0].style; - - // bottom margin - this.margin = this.colors.sy; - this.mtop = 0; - let marginDiv = Tools.isDivid(this.margin); - - if (this.isUI && this.margin) { - this.s[0].boxSizing = "content-box"; - if (marginDiv) { - this.mtop = this.margin * 0.5; - //this.s[0].borderTop = '${this.mtop}px solid transparent' - //console.log(`${this.mtop}px solid transparent`) - this.s[0].borderTop = this.mtop + "px solid transparent"; - this.s[0].borderBottom = this.mtop + "px solid transparent"; - } else { - this.s[0].borderBottom = this.margin + "px solid transparent"; - } - } - - // with title - if (!this.simple) { - this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); - this.s[1] = this.c[1].style; - this.c[1].textContent = this.name; - this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; - } - - if (o.pos) { - this.s[0].position = "absolute"; - for (let p in o.pos) { - this.s[0][p] = o.pos[p]; - } - this.mono = true; - } - - if (o.css) this.s[0].cssText = o.css; - } - - // ---------------------- - // make the node - // ---------------------- - - init() { - this.ytop = this.top + this.mtop; - - this.zone.h = this.h + this.margin; - this.zone.w = this.w; - - let s = this.s; // style cache - let c = this.c; // div cach - - s[0].height = this.h + "px"; - - if (this.isUI) s[0].background = this.colors.background; - - if (!this.autoWidth && this.useFlex) { - s[0].flex = "1 0 auto"; - s[0].minWidth = this.minw + "px"; - s[0].textAlign = "center"; - } else { - if (this.isUI) s[0].width = "100%"; - } - - //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; - if (c[1] !== undefined && this.autoWidth) { - s[1] = c[1].style; - s[1].top = 1 + "px"; - s[1].height = this.h - 2 + "px"; - } - - let frag = Tools.frag; - - for (let i = 1, lng = c.length; i !== lng; i++) { - if (c[i] !== undefined) { - frag.appendChild(c[i]); - s[i] = c[i].style; - } - } - - let pp = - this.target !== null - ? this.target - : this.isUI - ? this.main.inner - : document.body; - - if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); - else pp.appendChild(c[0]); - - c[0].appendChild(frag); - - this.rSize(); - - // ! solo proto - if (!this.isUI) { - this.c[0].style.pointerEvents = "auto"; - Roots.add(this); - } - } - - addTransition() { - if (this.baseH && this.transition && this.isUI) { - this.c[0].style.transition = "height " + this.transition + "s ease-out"; - } - } - - // from Tools - - dom(type, css, obj, dom, id) { - return Tools.dom(type, css, obj, dom, id); - } - - setSvg(dom, type, value, id, id2) { - Tools.setSvg(dom, type, value, id, id2); - } - - setCss(dom, css) { - Tools.setCss(dom, css); - } - - clamp(value, min, max) { - return Tools.clamp(value, min, max); - } - - getColorRing() { - if (!Tools.colorRing) Tools.makeColorRing(); - return Tools.clone(Tools.colorRing); - } - - getJoystick(model) { - if (!Tools["joystick_" + model]) Tools.makeJoystick(model); - return Tools.clone(Tools["joystick_" + model]); - } - - getCircular(model) { - if (!Tools.circular) Tools.makeCircular(model); - return Tools.clone(Tools.circular); - } - - getKnob(model) { - if (!Tools.knob) Tools.makeKnob(model); - return Tools.clone(Tools.knob); - } - - getPad2d(model) { - if (!Tools.pad2d) Tools.makePad(model); - return Tools.clone(Tools.pad2d); - } - - // from Roots - - cursor(name) { - Roots.cursor(name); - } - - ///////// - - update() {} - - reset() {} - - ///////// - - content() { - return this.c[0]; - } - - getDom() { - return this.c[0]; - } - - uiout() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.background; - } - - uiover() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.backgroundOver; - } - - rename(s) { - if (this.c[1] !== undefined) this.c[1].textContent = s; - } - - listen() { - this.isListen = Roots.addListen(this); - return this; - } - - listening() { - // modified by Fedemarino - if (this.objectLink === null) return; - if (this.isSend) return; - if (this.isEdit) return; - // check if value has changed - let hasChanged = this.setValue(this.objectLink[this.objectKey]); - return hasChanged; - } - - setValue(v) { - const old = this.value; - if (this.isNumber) this.value = this.numValue(v); - //else if( v instanceof Array && v.length === 1 ) v = v[0]; - else this.value = v; - this.update(); - let hasChanged = false; - if (old !== this.value) { - hasChanged = true; - } - - return hasChanged; - } - - // ---------------------- - // update every change - // ---------------------- - - onChange(f) { - if (this.isSpace) return; - this.callback = f || null; - return this; - } - - // ---------------------- - // update only on end - // ---------------------- - - onFinishChange(f) { - if (this.isSpace) return; - this.callback = null; - this.endCallback = f; - return this; - } - - // ---------------------- - // event on open close - // ---------------------- - - onOpen(f) { - this.openCallback = f; - return this; - } - - onClose(f) { - this.closeCallback = f; - return this; - } - - // ---------------------- - // send back value - // ---------------------- - - send(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - - this.isSend = true; - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - if (this.callback) this.callback(v, this.objectKey); - this.isSend = false; - } - - sendEnd(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - - if (this.endCallback) this.endCallback(v); - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - } - - // ---------------------- - // clear node - // ---------------------- - - dispose() { - if (this.isListen) Roots.removeListen(this); - - Tools.clear(this.c[0]); - - if (this.target !== null) { - if (this.group !== null) this.group.clearOne(this); - else this.target.removeChild(this.c[0]); - } else { - if (this.isUI) this.main.clearOne(this); - else document.body.removeChild(this.c[0]); - } - - if (!this.isUI) Roots.remove(this); - - this.c = null; - this.s = null; - this.callback = null; - this.target = null; - this.isListen = false; - } - - clear() {} - - // ---------------------- - // change size - // ---------------------- - - getWidth() { - let nw = Roots.getWidth(this); - if (nw) this.w = nw; - } - - setSize(sx) { - if (!this.autoWidth) return; - - this.w = sx; - - if (this.simple) { - this.sb = this.w - this.sa; - } else { - let pp = this.w * (this.p / 100); - //this.sa = Math.floor( pp + 10 ) - //this.sb = Math.floor( this.w - pp - 20 ) - this.sa = Math.floor(pp + 8); - this.sb = Math.floor(this.w - pp - 16); - } - } - - rSize() { - if (!this.autoWidth) return; - if (!this.isUI) this.s[0].width = this.w + "px"; - if (!this.simple) this.s[1].width = this.sa + "px"; - } - - // ---------------------- - // for numeric value - // ---------------------- - - setTypeNumber(o) { - this.isNumber = true; - - this.value = 0; - if (o.value !== undefined) { - if (typeof o.value === "string") this.value = o.value * 1; - else this.value = o.value; - } - - this.min = o.min === undefined ? -Infinity : o.min; - this.max = o.max === undefined ? Infinity : o.max; - this.precision = o.precision === undefined ? 2 : o.precision; - - let s; - - switch (this.precision) { - case 0: - s = 1; - break; - case 1: - s = 0.1; - break; - case 2: - s = 0.01; - break; - case 3: - s = 0.001; - break; - case 4: - s = 0.0001; - break; - case 5: - s = 0.00001; - break; - case 6: - s = 0.000001; - break; - } - - this.step = o.step === undefined ? s : o.step; - this.range = this.max - this.min; - this.value = this.numValue(this.value); - } - - numValue(n) { - if (this.noNeg) n = Math.abs(n); - return ( - Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 - ); - } - - // ---------------------- - // EVENTS DEFAULT - // ---------------------- - - handleEvent(e) { - if (this.lock) return; - if (this.neverlock) Roots.lock = false; - if (!this[e.type]) - return console.error(e.type, "this type of event no existe !"); - - // TODO !!!! - - //if( this.marginDiv ) z.d -= this.margin * 0.5 - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 - - return this[e.type](e); - } - - wheel(e) { - return false; - } - mousedown(e) { - return false; - } - mousemove(e) { - return false; - } - mouseup(e) { - return false; - } - keydown(e) { - return false; - } - keyup(e) { - return false; - } - - // ---------------------- - // object referency - // ---------------------- - - setReferency(obj, key) { - this.objectLink = obj; - this.objectKey = key; - } - - display(v = false) { - this.s[0].visibility = v ? "visible" : "hidden"; - } - - // ---------------------- - // resize height - // ---------------------- - - open() { - if (this.isOpen) return; - this.isOpen = true; - Roots.needResize = true; - if (this.openCallback) this.openCallback(); - } - - close() { - if (!this.isOpen) return; - this.isOpen = false; - Roots.needResize = true; - if (this.closeCallback) this.closeCallback(); - } - - needZone() { - Roots.needReZone = true; - } - - rezone() { - Roots.needReZone = true; - } - - // ---------------------- - // INPUT - // ---------------------- - - select() {} - - unselect() {} - - setInput(Input) { - Roots.setInput(Input, this); - } - - upInput(x, down) { - return Roots.upInput(x, down); - } - - // ---------------------- - // special item - // ---------------------- - - selected(b) { - this.isSelect = b || false; - } - } - - class Bool extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || false; - this.model = o.mode !== undefined ? o.mode : 0; - - this.onName = o.rename || this.txt; - if( o.onName ) o.onname = o.onName; - if( o.onname ) this.onName = o.onname; - - this.inh = o.inh || Math.floor( this.h*0.8 ); - this.inw = o.inw || 36; - - let cc = this.colors; - - if( this.model === 0 ){ - let t = Math.floor(this.h*0.5)-((this.inh-2)*0.5); - this.c[2] = this.dom( 'div', this.css.basic + 'background:'+ cc.inputBg +'; height:'+(this.inh-2)+'px; width:'+this.inw+'px; top:'+t+'px; border-radius:10px; border:2px solid '+ cc.back ); - this.c[3] = this.dom( 'div', this.css.basic + 'height:'+(this.inh-6)+'px; width:16px; top:'+(t+2)+'px; border-radius:10px; background:'+ cc.button+';' ); - } else { - this.p = 0; - if( this.c[1] !== undefined ) this.c[1].textContent = ''; - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - } - - this.stat = -1; - - this.init(); - this.update(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown ( e ) { - - this.value = !this.value; - this.update( true ); - return this.mousemove( e ) - - } - - mousemove ( e ) { - - this.cursor('pointer'); - return this.mode( true ) - - } - - reset () { - - this.cursor(); - return this.mode() - - } - - // ---------------------- - // MODE - // ---------------------- - - mode ( over ) { - - let change = false; - let cc = this.colors, s = this.s, n, v = this.value; - - if( over ) n = v ? 4 : 3; - else n = v ? 2 : 1; - - if( this.stat !== n ){ - - this.stat = n; - - if( this.model !== 0 ){ - - switch( n ){ - - case 1: s[2].color = cc.text; s[2].background = cc.button; break; - case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; - case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; - case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; - - } - - this.c[2].innerHTML = v ? this.onName : this.name; - - } else { - - switch( n ){ - - case 1: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.button; break;// off out - case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break;// on over - case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break;// off over - case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break;// on out - - } - - s[3].marginLeft = v ? '17px' : '2px'; - this.c[1].textContent = v ? this.onName : this.name; - - } - - change = true; - - } - - return change - - } - - // ---------------------- - - update ( up ) { - - this.mode(); - if( up ) this.send(); - - } - - rSize () { - - super.rSize(); - - let s = this.s; - let w = (this.w - 10 ) - this.inw; - if( this.model === 0 ){ - s[2].left = w + 'px'; - s[3].left = w + 'px'; - } else { - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - } - - } - - } - - class Button extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = ''; - if( o.value !== undefined ) this.value = o.value; - - this.values = o.value || this.txt; - if( o.values ) this.values = o.values; - - if( !o.values && !o.value ) this.txt = ''; - - this.onName = o.onName || null; - - this.on = false; - - // force button width - this.bw = o.forceWidth || 0; - if(o.bw) this.bw = o.bw; - this.space = o.space || 3; - - if( typeof this.values === 'string' ) this.values = [ this.values ]; - - this.isDown = false; - this.neverlock = true; - this.res = 0; - - this.lng = this.values.length; - this.tmp = []; - this.stat = []; - - let sel, cc = this.colors; - - for( let i = 0; i < this.lng; i++ ){ - - sel = false; - if( this.values[i] === this.value && this.isSelectable ) sel = true; - - this.c[i+2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[i+2].style.background = sel ? cc.select : cc.button; - this.c[i+2].style.color = sel ? cc.textSelect : cc.text; - this.c[i+2].innerHTML = this.values[i]; - this.stat[i] = sel ? 3:1; - - } - - - if( this.txt==='' ) this.p = 0; - - if( (!o.value && !o.values) || this.p === 0 ){ - if( this.c[1] !== undefined ) this.c[1].textContent = ''; - } - - - this.init(); - - } - - onOff() { - - this.on = !this.on; - this.label( this.on ? this.onName : this.value ); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return -1 - - let i = this.lng; - let t = this.tmp; - - while( i-- ){ - if( l.x>t[i][0] && l.x 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.text; - this.setSvg( this.c[3], 'stroke', color, 1 ); - - break; - case 1: // down - - this.s[2].color = cc.textOver; - this.setSvg( this.c[3], 'stroke', cc.backoff, 0); - color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.textOver; - this.setSvg( this.c[3], 'stroke', color, 1 ); - - break; - } - - this.cmode = mode; - return true; - - } - - reset () { - - this.isDown = false; - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'circular'; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.sendEnd(); - return this.mode(0); - - } - - mousedown ( e ) { - - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove( e ); - return this.mode(1); - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - //console.log('over') - - let off = this.offset; - off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); - off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - this.r = off.angle() - this.pi90; - this.r = (((this.r%this.twoPi)+this.twoPi)%this.twoPi); - - if( this.oldr !== null ){ - - let dif = this.r - this.oldr; - this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; - - if( dif > 6 ) this.r = 0; - if( dif < -6 ) this.r = this.twoPi; - - } - - let steps = 1 / this.twoPi; - let value = this.r * steps; - - let n = ( ( this.range * value ) + this.min ) - this.old; - - if(n >= this.step || n <= this.step){ - n = ~~ ( n / this.step ); - this.value = this.numValue( this.old + ( n * this.step ) ); - this.update( true ); - this.old = this.value; - this.oldr = this.r; - } - - } - - wheel ( e ) { - - let name = this.testZone( e ); - - if( name === 'circular' ) { - - let v = this.value - this.step * e.delta; - - if ( v > this.max ) { - v = this.isCyclic ? this.min : this.max; - } else if ( v < this.min ) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue( v ); - this.old = v; - this.update( true ); - - return true; - - } - return false; - - } - - // ---------------------- - - makePath () { - - let r = 40; - let d = 24; - let a = this.percent * this.twoPi - 0.001; - let x2 = (r + r * Math.sin(a)) + d; - let y2 = (r - r * Math.cos(a)) + d; - let big = a > Math.PI ? 1 : 0; - return "M " + (r+d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; - - } - - update ( up ) { - - this.c[2].textContent = this.value; - this.percent = ( this.value - this.min ) / this.range; - - this.setSvg( this.c[3], 'd', this.makePath(), 1 ); - - if ( this.model > 0 ) { - - let cc = this.colors; - let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ); - this.setSvg( this.c[3], 'stroke', color, 1 ); - - } - - if( up ) this.send(); - - } - - } - - class Color extends Proto { - - constructor( o = {} ) { - - super( o ); - - //this.autoHeight = true; - - this.ctype = o.ctype || 'hex'; - - this.wfixe = 256; - - this.cw = this.sb > 256 ? 256 : this.sb; - if(o.cw != undefined ) this.cw = o.cw; - - - - // color up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - - this.baseH = this.h; - - this.offset = new V2(); - this.decal = new V2(); - this.pp = new V2(); - - let cc = this.colors; - - // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) - - this.c[2] = this.dom( 'div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};` ); - //this.s[2] = this.c[2].style; - - //this.s[2].textShadow = 'none' - - /*if( this.up ){ - this.s[2].top = 'auto'; - this.s[2].bottom = '2px'; - }*/ - - //this.c[0].style.textAlign = 'center'; - this.c[0].style.display = 'block'; - - this.c[3] = this.getColorRing(); - this.c[3].style.visibility = 'hidden'; - - this.hsl = null; - this.value = '#ffffff'; - if( o.value !== undefined ){ - if( o.value instanceof Array ) this.value = Tools.rgbToHex( o.value ); - else if(!isNaN(o.value)) this.value = Tools.hexToHtml( o.value ); - else this.value = o.value; - } - - this.bcolor = null; - this.isDown = false; - this.fistDown = false; - - this.notext = o.notext || false; - - this.tr = 98; - this.tsl = Math.sqrt(3) * this.tr; - - this.hue = 0; - this.d = 256; - - this.init(); - - this.setColor( this.value ); - - if( o.open !== undefined ) this.open(); - - } - - testZone ( mx, my ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - - if( this.up && this.isOpen ){ - - if( l.y > this.wfixe ) return 'title' - else return 'color' - - } else { - - if( l.y < this.baseH+2 ) return 'title' - else if( this.isOpen ) return 'color' - - } - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.d = 256; - - } - - mousedown ( e ) { - - - let name = this.testZone( e.clientX, e.clientY ); - - - //if( !name ) return; - if(name === 'title'){ - if( !this.isOpen ) this.open(); - else this.close(); - return true; - } - - - if( name === 'color' ){ - - this.isDown = true; - this.fistDown = true; - this.mousemove( e ); - } - } - - mousemove ( e ) { - - let name = this.testZone( e.clientX, e.clientY ); - - let off, d, hue, sat, lum, rad, x, y, rr, T = Tools; - - if( name === 'title' ) this.cursor('pointer'); - - if( name === 'color' ){ - - off = this.offset; - off.x = e.clientX - ( this.zone.x + this.decal.x + this.mid ); - off.y = e.clientY - ( this.zone.y + this.decal.y + this.mid ) - this.ytop; - d = off.length() * this.ratio; - rr = off.angle(); - if(rr < 0) rr += 2 * T.PI; - - - if ( d < 128 ) this.cursor('crosshair'); - else if( !this.isDown ) this.cursor(); - - if( this.isDown ){ - - if( this.fistDown ){ - this.d = d; - this.fistDown = false; - } - - if ( this.d < 128 ) { - - if ( this.d > this.tr ) { // outside hue - - hue = ( rr + T.pi90 ) / T.TwoPI; - this.hue = (hue + 1) % 1; - this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); - - } else { // triangle - - x = off.x * this.ratio; - y = off.y * this.ratio; - - let rr = (this.hue * T.TwoPI) + T.PI; - if(rr < 0) rr += 2 * T.PI; - - rad = Math.atan2(-y, x); - if(rad < 0) rad += 2 * T.PI; - - let rad0 = ( rad + T.pi90 + T.TwoPI + rr ) % (T.TwoPI), - rad1 = rad0 % ((2/3) * T.PI) - (T.pi60), - a = 0.5 * this.tr, - b = Math.tan(rad1) * a, - r = Math.sqrt(x*x + y*y), - maxR = Math.sqrt(a*a + b*b); - - if( r > maxR ) { - let dx = Math.tan(rad1) * r; - let rad2 = Math.atan(dx / maxR); - if(rad2 > T.pi60) rad2 = T.pi60; - else if( rad2 < -T.pi60 ) rad2 = -T.pi60; - - rad += rad2 - rad1; - - rad0 = (rad + T.pi90 + T.TwoPI + rr) % (T.TwoPI), - rad1 = rad0 % ((2/3) * T.PI) - (T.pi60); - b = Math.tan(rad1) * a; - r = maxR = Math.sqrt(a*a + b*b); - } - - lum = ((Math.sin(rad0) * r) / this.tsl) + 0.5; - - let w = 1 - (Math.abs(lum - 0.5) * 2); - sat = (((Math.cos(rad0) * r) + (this.tr / 2)) / (1.5 * this.tr)) / w; - sat = T.clamp( sat, 0, 1 ); - - this.setHSL([this.hsl[0], sat, lum]); - - } - } - } - } - - } - - // ---------------------- - - setHeight () { - - this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; - this.s[0].height = this.h + 'px'; - this.zone.h = this.h; - - } - - parentHeight ( t ) { - - if ( this.group !== null ) this.group.calc( t ); - else if ( this.isUI ) this.main.calc( t ); - - } - - open () { - - super.open(); - - this.setHeight(); - - if( this.up ) this.zone.y -= this.wfixe + 5; - - let t = this.h - this.baseH; - - this.s[3].visibility = 'visible'; - //this.s[3].display = 'block'; - this.parentHeight( t ); - - } - - close () { - - super.close(); - - if( this.up ) this.zone.y += this.wfixe + 5; - - let t = this.h - this.baseH; - - this.setHeight(); - - this.s[3].visibility = 'hidden'; - //this.s[3].display = 'none'; - this.parentHeight( -t ); - - } - - update ( up ) { - - let cc = Tools.rgbToHex( Tools.hslToRgb([ this.hsl[0], 1, 0.5 ]) ); - - this.moveMarkers(); - - this.value = this.bcolor; - - this.setSvg( this.c[3], 'fill', cc, 2, 0 ); - - this.s[2].background = this.bcolor; - if(!this.notext) this.c[2].textContent = Tools.htmlToHex( this.bcolor ); - - this.invert = Tools.findDeepInver( this.rgb ); - this.s[2].color = this.invert ? '#fff' : '#000'; - - if(!up) return; - - if( this.ctype === 'array' ) this.send( this.rgb ); - if( this.ctype === 'rgb' ) this.send( Tools.htmlRgb( this.rgb ) ); - if( this.ctype === 'hex' ) this.send( Tools.htmlToHex( this.value ) ); - if( this.ctype === 'html' ) this.send(); - - } - - setValue ( v ){ - - if( v instanceof Array ) this.value = Tools.rgbToHex( v ); - else if(!isNaN(v)) this.value = Tools.hexToHtml( v ); - else this.value = v; - - this.setColor( this.value ); - this.update(); - - } - - setColor ( color ) { - - let unpack = Tools.unpack(color); - if (this.bcolor !== color && unpack) { - - this.bcolor = color; - this.rgb = unpack; - this.hsl = Tools.rgbToHsl( this.rgb ); - - this.hue = this.hsl[0]; - - this.update(); - } - return this; - - } - - setHSL ( hsl ) { - - this.hsl = hsl; - this.rgb = Tools.hslToRgb( hsl ); - this.bcolor = Tools.rgbToHex( this.rgb ); - this.update( true ); - return this; - - } - - moveMarkers () { - - let p = this.pp; - let T = Tools; - - this.invert ? '#fff' : '#000'; - let a = this.hsl[0] * T.TwoPI; - let third = (2/3) * T.PI; - let r = this.tr; - let h = this.hsl[0]; - let s = this.hsl[1]; - let l = this.hsl[2]; - - let angle = ( a - T.pi90 ) * T.todeg; - - h = - a + T.pi90; - - let hx = Math.cos(h) * r; - let hy = -Math.sin(h) * r; - let sx = Math.cos(h - third) * r; - let sy = -Math.sin(h - third) * r; - let vx = Math.cos(h + third) * r; - let vy = -Math.sin(h + third) * r; - let mx = (sx + vx) / 2, my = (sy + vy) / 2; - a = (1 - 2 * Math.abs(l - .5)) * s; - let x = sx + (vx - sx) * l + (hx - mx) * a; - let y = sy + (vy - sy) * l + (hy - my) * a; - - p.set( x, y ).addScalar(128); - - //let ff = (1-l)*255; - // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); - - this.setSvg( this.c[3], 'transform', 'rotate('+angle+' )', 2 ); - - this.setSvg( this.c[3], 'cx', p.x, 3 ); - this.setSvg( this.c[3], 'cy', p.y, 3 ); - - this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3 ); - this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3 ); - this.setSvg( this.c[3], 'fill',this.bcolor, 3 ); - - } - - rSize () { - - //Proto.prototype.rSize.call( this ); - super.rSize(); - - let s = this.s; - - s[2].width = this.sb + 'px'; - s[2].left = this.sa + 'px'; - - //console.log(this.sb) - - this.cw = this.sb > 256 ? 256 : this.sb; - - - - this.rSizeColor( this.cw ); - - this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - //s[3].left = this.decal.x + 'px'; - - } - - rSizeColor ( w ) { - - - if( w === this.wfixe ) return; - - - - this.wfixe = w; - - - - let s = this.s; - - //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; - this.mid = Math.floor( this.wfixe * 0.5 ); - - this.setSvg( this.c[3], 'viewBox', '0 0 '+ this.wfixe + ' '+ this.wfixe ); - s[3].width = this.wfixe + 'px'; - s[3].height = this.wfixe + 'px'; - //s[3].left = this.decal.x + 'px'; - s[3].top = this.decal.y + 'px'; - - this.ratio = 256 / this.wfixe; - this.square = 1 / (60*(this.wfixe/256)); - this.setHeight(); - - } - - - } - - class Fps extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.round = Math.round; - - //this.autoHeight = true; - - this.baseH = this.h; - this.hplus = o.hplus || 50; - - this.res = o.res || 40; - this.l = 1; - - this.precision = o.precision || 0; - - - this.custom = o.custom || false; - this.names = o.names || ['FPS', 'MS']; - let cc = o.cc || ['220,220,220', '255,255,0']; - - // this.divid = [ 100, 100, 100 ]; - // this.multy = [ 30, 30, 30 ]; - - this.adding = o.adding || false; - - this.range = o.range || [ 165, 100, 100 ]; - - this.alpha = o.alpha || 0.25; - - this.values = []; - this.points = []; - this.textDisplay = []; - - if(!this.custom){ - - this.now = Roots.getTime(); - this.startTime = 0;//this.now() - this.prevTime = 0;//this.startTime; - this.frames = 0; - - this.ms = 0; - this.fps = 0; - this.mem = 0; - this.mm = 0; - - this.isMem = ( self.performance && self.performance.memory ) ? true : false; - - // this.divid = [ 100, 200, 1 ]; - // this.multy = [ 30, 30, 30 ]; - - if( this.isMem ){ - - this.names.push('MEM'); - cc.push('0,255,255'); - - } - - this.txt = o.name || 'Fps'; - - } - - - let fltop = Math.floor(this.h*0.5)-3; - const ccc = this.colors; - - this.c[1].textContent = this.txt; - //this.c[1].innerHTML = ' ' + this.txt - this.c[0].style.cursor = 'pointer'; - this.c[0].style.pointerEvents = 'auto'; - - let panelCss = 'display:none; left:10px; top:'+ this.h + 'px; height:'+(this.hplus - 8)+'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid '+ ccc.border +';'; - - if( this.radius !== 0 ) panelCss += 'border-radius:' + this.radius+'px;'; - - this.c[2] = this.dom( 'path', this.css.basic + panelCss , {} ); - - this.c[2].setAttribute('viewBox', '0 0 '+this.res+' 50' ); - this.c[2].setAttribute('height', '100%' ); - this.c[2].setAttribute('width', '100%' ); - this.c[2].setAttribute('preserveAspectRatio', 'none' ); - - - //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - - // arrow - this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:ccc.text, stroke:'none'}); - //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); - - // result test - this.c[4] = this.dom( 'div', this.css.txt + 'position:absolute; left:10px; top:'+(this.h+2) +'px; display:none; width:100%; text-align:center;' ); - - // bottom line - if( o.bottomLine ) this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); - - this.isShow = false; - - - - let s = this.s; - - //s[1].marginLeft = '10px'; - s[1].lineHeight = this.h-4; - s[1].color = ccc.text; - //s[1].paddingLeft = '18px'; - //s[1].fontWeight = 'bold'; - - if( this.radius !== 0 ) s[0].borderRadius = this.radius+'px'; - if( this.colors.gborder!=='none') s[0].border = '1px solid ' + ccc.gborder; - - - - - let j = 0; - - for( j=0; j " + this.names[j] +" "); - - } - - j = this.names.length; - while(j--){ - this.dom( 'path', null, { fill:'rgba('+cc[j]+','+this.alpha+')', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - } - - - this.init(); - - //if( this.isShow ) this.show(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown ( e ) { - - if( this.isShow ) this.close(); - else this.open(); - - } - - // ---------------------- - - /*mode: function ( mode ) { - - let s = this.s; - - switch(mode){ - case 0: // base - s[1].color = this.colors.text; - //s[1].background = 'none'; - break; - case 1: // over - s[1].color = '#FFF'; - //s[1].background = UIL.SELECT; - break; - case 2: // edit / down - s[1].color = this.colors.text; - //s[1].background = UIL.SELECTDOWN; - break; - - } - },*/ - - tick ( v ) { - - this.values = v; - if( !this.isShow ) return; - this.drawGraph(); - this.upText(); - - } - - makePath ( point ) { - - let p = ''; - p += 'M ' + (-1) + ' ' + 50; - for ( let i = 0; i < this.res + 1; i ++ ) { p += ' L ' + i + ' ' + point[i]; } - p += ' L ' + (this.res + 1) + ' ' + 50; - return p; - - } - - upText ( val ) { - - let v = val || this.values, t = ''; - for( let j=0, lng =this.names.length; j'; - this.c[4].innerHTML = t; - - } - - drawGraph () { - - let svg = this.c[2]; - let i = this.names.length, v, old = 0, n = 0; - - while( i-- ){ - if( this.adding ) v = (this.values[n]+old) * this.range[n]; - else v = (this.values[n] * this.range[n]); - this.points[n].shift(); - this.points[n].push( 50 - v ); - this.setSvg( svg, 'd', this.makePath( this.points[n] ), i+1 ); - old += this.values[n]; - n++; - - } - - } - - open () { - - super.open(); - - this.h = this.hplus + this.baseH; - - this.setSvg( this.c[3], 'd', this.svgs.g2 ); - - if( this.group !== null ){ this.group.calc( this.hplus );} - else if( this.isUI ) this.main.calc( this.hplus ); - - this.s[0].height = this.h +'px'; - this.s[2].display = 'block'; - this.s[4].display = 'block'; - this.isShow = true; - - if( !this.custom ) Roots.addListen( this ); - - } - - close () { - - super.close(); - - this.h = this.baseH; - - this.setSvg( this.c[3], 'd', this.svgs.g1 ); - - if( this.group !== null ){ this.group.calc( -this.hplus );} - else if( this.isUI ) this.main.calc( -this.hplus ); - - this.s[0].height = this.h +'px'; - this.s[2].display = 'none'; - this.s[4].display = 'none'; - this.isShow = false; - - if( !this.custom ) Roots.removeListen( this ); - - this.c[4].innerHTML = ''; - - } - - - ///// AUTO FPS ////// - - begin () { - - this.startTime = this.now(); - - } - - end () { - - let time = this.now(); - this.ms = time - this.startTime; - - this.frames ++; - - if ( time > this.prevTime + 1000 ) { - - this.fps = this.round( ( this.frames * 1000 ) / ( time - this.prevTime ) ); - - this.prevTime = time; - this.frames = 0; - - if ( this.isMem ) { - - let heapSize = performance.memory.usedJSHeapSize; - let heapSizeLimit = performance.memory.jsHeapSizeLimit; - - this.mem = this.round( heapSize * 0.000000954 ); - this.mm = heapSize / heapSizeLimit; - - } - - } - - this.values = [ this.fps, this.ms , this.mm ]; - - this.drawGraph(); - this.upText( [ this.fps, this.ms, this.mem ] ); - - return time; - - } - - listening () { - - if( !this.custom ) this.startTime = this.end(); - - } - - rSize () { - - let s = this.s; - let w = this.w; - - s[3].left = ( this.sa + this.sb - 6 ) + 'px'; - - s[0].width = w + 'px'; - s[1].width = w + 'px'; - s[2].left = 10 + 'px'; - s[2].width = (w-20) + 'px'; - s[4].width = (w-20) + 'px'; - - } - - } - - class Graph extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value !== undefined ? o.value : [0,0,0]; - this.lng = this.value.length; - - this.precision = o.precision !== undefined ? o.precision : 2; - this.multiplicator = o.multiplicator || 1; - this.neg = o.neg || false; - - this.line = o.line !== undefined ? o.line : true; - - //if(this.neg)this.multiplicator*=2; - - this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; - this.isNumber = false; - - this.isDown = false; - - this.h = o.h || 128 + 10; - this.rh = this.h - 10; - this.top = 0; - - this.c[0].style.width = this.w +'px'; - - if( this.c[1] !== undefined ) { // with title - - this.c[1].style.width = this.w +'px'; - - if(!this.autoWidth){ - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - } - - - //this.c[1].style.background = '#ff0000'; - //this.c[1].style.textAlign = 'center'; - this.top = 10; - this.h += 10; - - } - - this.gh = this.rh - 28; - this.gw = this.w - 28; - - //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); - - //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' - this.c[2] = this.dom( 'div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:'+(this.h-20)+'px; left:14px; width:'+this.gw+'px; color:'+ this.colors.text ); - - //this.c[2].textContent = this.value; - this.c[2].innerHTML = this.valueToHtml(); - - let svg = this.dom( 'svg', this.css.basic , { viewBox:'0 0 '+this.w+' '+this.rh, width:this.w, height:this.rh, preserveAspectRatio:'none' } ); - this.setCss( svg, { width:this.w, height:this.rh, left:0, top:this.top }); - - this.dom( 'path', '', { d:'', stroke:this.colors.text, 'stroke-width':2, fill:'none', 'stroke-linecap':'butt' }, svg ); - this.dom( 'rect', '', { x:10, y:10, width:this.gw+8, height:this.gh+8, stroke:'rgba(0,0,0,0.3)', 'stroke-width':1 , fill:'none'}, svg ); - - this.iw = ((this.gw-(4*(this.lng-1)))/this.lng); - let t = []; - this.cMode = []; - - this.v = []; - - for( let i = 0; i < this.lng; i++ ){ - - t[i] = [ 14 + (i*this.iw) + (i*4), this.iw ]; - t[i][2] = t[i][0] + t[i][1]; - this.cMode[i] = 0; - - if( this.neg ) this.v[i] = ((1+(this.value[i] / this.multiplicator))*0.5); - else this.v[i] = this.value[i] / this.multiplicator; - - this.dom( 'rect', '', { x:t[i][0], y:14, width:t[i][1], height:1, fill:this.colors.text, 'fill-opacity':0.3 }, svg ); - - } - - this.tmp = t; - this.c[3] = svg; - - //console.log(this.w) - - this.init(); - - if( this.c[1] !== undefined ){ - this.c[1].style.top = 0 +'px'; - this.c[1].style.height = 20 +'px'; - this.s[1].lineHeight = (20-5)+'px'; - } - - this.update( false ); - - } - - setValue ( value ) { - - this.value = value; - this.lng = this.value.length; - for (var i = 0; i < this.lng; i++) { - if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5; - else this.v[i] = value[i] / this.multiplicator; - } - this.update(); - - } - - valueToHtml() { - - let i = this.lng, n=0, r = ''; - let w = 100 / this.lng; - let style = 'width:'+ w +'%;';//' text-align:center;' - while(i--){ - if(n===this.lng-1) r += '
    ' + this.value[n] + '
    '; - else r += '' + this.value[n] + ''; - n++; - } - return r - } - - updateSVG () { - - if( this.line ) this.setSvg( this.c[3], 'd', this.makePath(), 0 ); - - for(let i = 0; ithis.top && l.yt[i][0] && l.x this.distance ) { - let angle = Math.atan2(this.tmp.x, this.tmp.y); - this.tmp.x = Math.sin( angle ) * this.distance; - this.tmp.y = Math.cos( angle ) * this.distance; - } - - this.pos.copy( this.tmp ).divideScalar( this.distance ).negate(); - - this.update(); - - } - - setValue ( v ) { - - if(v===undefined) v=[0,0]; - - this.pos.set( v[0] || 0, v[1] || 0 ); - this.updateSVG(); - - } - - update ( up ) { - - if( up === undefined ) up = true; - - if( this.interval !== null ){ - - if( !this.isDown ){ - - this.pos.lerp( null, 0.3 ); - - this.pos.x = Math.abs( this.pos.x ) < 0.01 ? 0 : this.pos.x; - this.pos.y = Math.abs( this.pos.y ) < 0.01 ? 0 : this.pos.y; - - if( this.isUI && this.main.isCanvas ) this.main.draw(); - - } - - } - - this.updateSVG(); - - if( up ) this.send(); - - - if( this.pos.isZero() ) this.stopInterval(); - - } - - updateSVG () { - - //let x = this.radius - ( -this.pos.x * this.distance ); - //let y = this.radius - ( -this.pos.y * this.distance ); - - let x = (this.diam*0.5) - ( -this.pos.x * this.distance ); - let y = (this.diam*0.5) - ( -this.pos.y * this.distance ); - - if(this.model === 0){ - - let sx = x + ((this.pos.x)*5) + 5; - let sy = y + ((this.pos.y)*5) + 10; - - this.setSvg( this.c[3], 'cx', sx*this.ratio, 3 ); - this.setSvg( this.c[3], 'cy', sy*this.ratio, 3 ); - } else { - this.setSvg( this.c[3], 'cx', x*this.ratio, 3 ); - this.setSvg( this.c[3], 'cy', y*this.ratio, 3 ); - } - - - - this.setSvg( this.c[3], 'cx', x*this.ratio, 4 ); - this.setSvg( this.c[3], 'cy', y*this.ratio, 4 ); - - this.value[0] = ( this.pos.x * this.multiplicator ).toFixed( this.precision ) * 1; - this.value[1] = ( this.pos.y * this.multiplicator ).toFixed( this.precision ) * 1; - - if(this.haveText) this.c[2].textContent = this.value; - - } - - clear () { - - this.stopInterval(); - super.clear(); - - } - - } - - class Knob extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.isCyclic = o.cyclic || false; - this.model = o.stype || 0; - if( o.mode !== undefined ) this.model = o.mode; - - this.autoWidth = false; - - this.setTypeNumber( o ); - - this.minw = this.w; - this.diam = o.diam || this.w; - - this.mPI = Math.PI * 0.8; - this.toDeg = 180 / Math.PI; - this.cirRange = this.mPI * 2; - - this.offset = new V2(); - - this.h = o.h || this.w + 10; - - this.c[0].style.width = this.w +'px'; - this.c[0].style.display = 'block'; - - if(this.c[1] !== undefined) { - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - - } - - this.percent = 0; - - this.cmode = 0; - let cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); - - this.c[3] = this.getKnob(); - this.setSvg( this.c[3], 'fill', cc.button, 0 ); - this.setSvg( this.c[3], 'stroke', cc.text, 1 ); - this.setSvg( this.c[3], 'stroke', cc.text, 3 ); - this.setSvg( this.c[3], 'd', this.makeGrad(), 3 ); - - this.setSvg( this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam ); - this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); - - if ( this.model > 0 ) { - - Tools.dom( 'path', '', { d: '', stroke:cc.text, 'stroke-width': 2, fill: 'none', 'stroke-linecap': 'round' }, this.c[3] ); //4 - - if ( this.model == 2) { - - Tools.addSVGGlowEffect(); - this.setSvg( this.c[3], 'style', 'filter: url("#UILGlow");', 4 ); - - } - - } - - this.r = 0; - - this.init(); - - this.update(); - - } - - mode ( mode ) { - - let cc = this.colors; - - if( this.cmode === mode ) return false; - - switch( mode ) { - case 0: // base - this.s[2].color = cc.text; - this.setSvg( this.c[3], 'fill', cc.button, 0); - //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); - this.setSvg( this.c[3], 'stroke', cc.text, 1 ); - break; - case 1: // down - this.s[2].color = cc.textOver; - this.setSvg( this.c[3], 'fill', cc.select, 0); - //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); - this.setSvg( this.c[3], 'stroke', cc.textOver, 1 ); - break; - } - - this.cmode = mode; - return true; - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'knob'; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.sendEnd(); - return this.mode(0) - - } - - mousedown ( e ) { - - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove( e ); - return this.mode(1) - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - let off = this.offset; - - //off.x = this.radius - ( e.clientX - this.zone.x ); - //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); - - off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); - off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - this.r = - Math.atan2( off.x, off.y ); - - if( this.oldr !== null ) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; - - this.r = this.r > this.mPI ? this.mPI : this.r; - this.r = this.r < -this.mPI ? -this.mPI : this.r; - - let steps = 1 / this.cirRange; - let value = (this.r + this.mPI) * steps; - - let n = ( ( this.range * value ) + this.min ) - this.old; - - if(n >= this.step || n <= this.step){ - n = Math.floor( n / this.step ); - this.value = this.numValue( this.old + ( n * this.step ) ); - this.update( true ); - this.old = this.value; - this.oldr = this.r; - } - - } - - wheel ( e ) { - - let name = this.testZone( e ); - - if( name === 'knob' ) { - - let v = this.value - this.step * e.delta; - - if ( v > this.max ) { - v = this.isCyclic ? this.min : this.max; - } else if ( v < this.min ) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue( v ); - this.old = v; - this.update( true ); - - return true; - - } - return false; - - } - - makeGrad () { - - let d = '', step, range, a, x, y, x2, y2, r = 64; - let startangle = Math.PI + this.mPI; - let endangle = Math.PI - this.mPI; - //let step = this.step>5 ? this.step : 1; - - if(this.step>5){ - range = this.range / this.step; - step = ( startangle - endangle ) / range; - } else { - step = (( startangle - endangle ) / r)*2; - range = r*0.5; - } - - for ( let i = 0; i <= range; ++i ) { - - a = startangle - ( step * i ); - x = r + Math.sin( a ) * ( r - 20 ); - y = r + Math.cos( a ) * ( r - 20 ); - x2 = r + Math.sin( a ) * ( r - 24 ); - y2 = r + Math.cos( a ) * ( r - 24 ); - d += 'M' + x + ' ' + y + ' L' + x2 + ' '+y2 + ' '; - - } - - return d; - - } - - update ( up ) { - - this.c[2].textContent = this.value; - this.percent = (this.value - this.min) / this.range; - - let sa = Math.PI + this.mPI; - let ea = ( ( this.percent * this.cirRange ) - ( this.mPI ) ); - - let sin = Math.sin( ea ); - let cos = Math.cos( ea ); - - let x1 = ( 25 * sin ) + 64; - let y1 = -( 25 * cos ) + 64; - let x2 = ( 20 * sin ) + 64; - let y2 = -( 20 * cos ) + 64; - - this.setSvg( this.c[3], 'd', 'M ' + x1 +' ' + y1 + ' L ' + x2 +' ' + y2, 1 ); - - if ( this.model > 0 ) { - - let x1 = 36 * Math.sin( sa ) + 64; - let y1 = 36 * Math.cos( sa ) + 64; - let x2 = 36 * sin + 64; - let y2 = -36 * cos + 64; - let big = ea <= Math.PI - this.mPI ? 0 : 1; - this.setSvg( this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4 ); - - let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( this.colors.text, -0.75) ), Tools.unpack( this.colors.text ), this.percent ) ); - this.setSvg( this.c[3], 'stroke', color, 4 ); - - } - - if( up ) this.send(); - - } - - } - - class List extends Proto { - - constructor( o = {} ) { - - super( o ); - - // TODO not work - this.hideCurrent = false; - - // images - this.path = o.path || ''; - this.format = o.format || ''; - - - this.isWithImage = this.path !== '' ? true:false; - this.preLoadComplete = false; - - this.tmpImage = {}; - this.tmpUrl = []; - - this.m = o.m !== undefined ? o.m : 5; - - - let align = o.align || 'left'; - - // scroll size - let ss = o.scrollSize || 10; - this.ss = ss+1; - - this.sMode = 0; - this.tMode = 0; - - this.listOnly = o.listOnly || false; - this.staticTop = o.staticTop || false; - - this.isSelectable = this.listOnly; - if( o.select !== undefined ) o.selectable = o.select; - if( o.selectable !== undefined ) this.isSelectable = o.selectable; - - if( this.txt === '' ) this.p = 0; - - - let fltop = Math.floor(this.h*0.5)-3; - let cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.basic + 'top:0; display:none; border-radius:'+this.radius+'px;' ); - this.c[3] = this.dom( 'div', this.css.item + 'padding:0px '+this.m+'px; margin-bottom:0px; position:absolute; justify-content:'+align+'; text-align:'+align+'; line-height:'+(this.h-4)+'px; top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:1px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); - - this.scrollerBack = this.dom( 'div', this.css.basic + 'right:0px; width:'+ss+'px; background:'+cc.back+'; display:none;'); - this.scroller = this.dom( 'div', this.css.basic + 'right:'+((ss-(ss*0.25))*0.5)+'px; width:'+(ss*0.25)+'px; background:'+cc.text+'; display:none; '); - - this.c[3].style.color = cc.text; - - - this.list = []; - this.refObject = null; - - if( o.list ){ - if( o.list instanceof Array ){ - this.list = o.list; - } else if( o.list instanceof Object ){ - this.refObject = o.list; - for( let g in this.refObject ) this.list.push( g ); - } - } - - this.items = []; - - this.prevName = ''; - - - this.tmpId = 0; - - this.baseH = this.h; - - this.itemHeight = o.itemHeight || this.h;//(this.h-3); - - // force full list - this.full = o.full || false; - - this.py = 0; - this.ww = this.sb; - this.scroll = false; - this.isDown = false; - - this.current = null; - - // list up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - - if( this.up ){ - - this.c[2].style.top = 'auto'; - this.c[3].style.top = 'auto'; - this.c[4].style.top = 'auto'; - - this.c[2].style.bottom = this.h-2 + 'px'; - this.c[3].style.bottom = '1px'; - this.c[4].style.bottom = fltop + 'px'; - - } else { - this.c[2].style.top = this.baseH + 'px'; - } - - this.listIn = this.dom( 'div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); - this.listIn.name = 'list'; - - this.topList = 0; - - this.c[2].appendChild( this.listIn ); - this.c[2].appendChild( this.scrollerBack ); - this.c[2].appendChild( this.scroller ); - - if( o.value !== undefined ){ - if(!isNaN(o.value)) this.value = this.list[ o.value ]; - else this.value = o.value; - }else { - this.value = this.list[0]; - } - - this.isOpenOnStart = o.open || false; - - if( this.listOnly ){ - this.baseH = 5; - this.c[3].style.display = 'none'; - this.c[4].style.display = 'none'; - this.c[2].style.top = this.baseH+'px'; - this.isOpenOnStart = true; - } - - - this.miniCanvas = o.miniCanvas || false; - this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; - this.imageSize = o.imageSize || [20,20]; - - // dragout function - this.drag = o.drag || false; - this.dragout = o.dragout || false; - this.dragstart = o.dragstart || null; - this.dragend = o.dragend || null; - - - - //this.c[0].style.background = '#FF0000' - ///if( this.isWithImage ) this.preloadImage(); - - this.setList( this.list ); - this.init(); - if( this.isWithImage ) this.preloadImage(); - if( this.isOpenOnStart ) this.open( true ); - - this.baseH += this.mtop; - - } - - // image list - - preloadImage () { - - - - this.preLoadComplete = false; - - this.tmpImage = {}; - for( let i=0; i this.h - this.baseH ) return 'title'; - else { - if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; - if(l.x > this.sa) return this.testItems( l.y-this.baseH ); - } - - } else { - if( l.y < this.baseH+2 ) return 'title'; - else { - if( this.isOpen ){ - if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; - if(l.x > this.sa) return this.testItems( l.y-this.baseH ); - } - } - - } - - return ''; - - } - - testItems ( y ) { - - let name = ''; - - let items = this.items; - - /*if(this.hideCurrent){ - //items = [...this.items] - items = this.items.slice(this.tmpId) - - }*/ - - let i = items.length, item, a, b; - while(i--){ - item = items[i]; - a = item.posy + this.topList; - b = item.posy + this.itemHeight + 1 + this.topList; - if( y >= a && y <= b ){ - name = 'item' + i; - this.modeItem(0); - this.current = item; - this.modeItem(1); - return name; - } - - } - - return name; - - } - - modeItem ( mode ) { - - if( !this.current ) return - - if( this.current.select && mode===0) mode = 2; - let cc = this.colors; - - switch( mode ){ - - case 0: // base - this.current.style.background = cc.back; - this.current.style.color = cc.text; - break; - case 1: // over - this.current.style.background = cc.over; - this.current.style.color = cc.textOver; - break; - case 2: // edit / down - this.current.style.background = cc.select; - this.current.style.color = cc.textSelect; - break; - - } - } - - unSelected() { - - if( !this.current ) return - this.modeItem(0); - this.current = null; - - } - - selected() { - - if( !this.current ) return - this.resetItems(); - this.modeItem(2); - this.current.select = true; - - - - } - - resetItems() { - - let i = this.items.length; - while(i--){ - this.items[i].select = false; - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text; - } - - } - - hideActive() { - - if( !this.hideCurrent ) return - //if( !this.current ) return - if( this.current )this.tmpId = this.current.id; - this.resetHide(); - //this.items[this.tmpId].style.height = 0+'px' - - } - - resetHide() { - - console.log(this.tmpId); - - let i = this.items.length; - while(i--){ - if(i===this.tmpId){ - this.items[i].style.height = 0+'px'; - this.items[i].posy = -1; - } else { - this.items[i].style.height = this.itemHeight+'px'; - this.items[i].posy = (this.itemHeight+1)*(i-1); - } - //this.items[i].style.display = 'flex' - - /*this.items[i].select = false - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text;*/ - } - - } - - // ---------------------- - // EVENTS - // ---------------------- - - - mouseup ( e ) { - - this.isDown = false; - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false; - - if( name === 'scroll' ){ - - this.isDown = true; - this.mousemove( e ); - - } else if( name === 'title' ){ - - this.modeTitle(2); - if( !this.listOnly ){ - this.hideActive(); - if( !this.isOpen ) this.open(); - else this.close(); - } - } else { - // is item - if( this.current ){ - - this.value = this.list[ this.current.id ]; - //this.tmpId = this.current.id - - if( this.isSelectable ) this.selected(); - - //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); - this.send( this.value ); - - if( !this.listOnly ) { - this.close(); - this.setTopItem(); - //this.hideActive() - } - } - - } - - return true; - - } - - mousemove ( e ) { - - let nup = false; - let name = this.testZone( e ); - - if( !name ) return nup; - - if( name === 'title' ){ - this.unSelected(); - this.modeTitle(1); - this.cursor('pointer'); - - } else if( name === 'scroll' ){ - - this.cursor('s-resize'); - this.modeScroll(1); - if( this.isDown ){ - this.modeScroll(2); - //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - let top = this.zone.y+this.baseH-2; - this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - } - //if(this.isDown) this.listmove(e); - } else { - - // is item - this.modeTitle(0); - this.modeScroll(0); - this.cursor('pointer'); - - } - - if( name !== this.prevName ) nup = true; - this.prevName = name; - - return nup; - - } - - wheel ( e ) { - - let name = this.testZone( e ); - if( name === 'title' ) return false; - this.py += e.delta*10; - this.update(this.py); - return true; - - } - - - - // ---------------------- - - reset () { - - this.prevName = ''; - this.unSelected(); - this.modeTitle(0); - this.modeScroll(0); - - //console.log('this is reset') - - } - - modeScroll ( mode ) { - - if( mode === this.sMode ) return; - - let s = this.scroller.style; - let cc = this.colors; - - switch(mode){ - case 0: // base - s.background = cc.text; - break; - case 1: // over - s.background = cc.select; - break; - case 2: // edit / down - s.background = cc.select; - break; - - } - - this.sMode = mode; - } - - modeTitle ( mode ) { - - if( mode === this.tMode ) return; - - let s = this.s; - let cc = this.colors; - - switch(mode){ - case 0: // base - s[3].color = cc.text; - s[3].background = cc.button; - break; - case 1: // over - s[3].color = cc.textOver; - s[3].background = cc.overoff; - break; - case 2: // edit / down - s[3].color = cc.textSelect; - s[3].background = cc.overoff; - break; - - } - - this.tMode = mode; - - } - - clearList () { - - while ( this.listIn.children.length ) this.listIn.removeChild( this.listIn.lastChild ); - this.items = []; - - } - - setList ( list ) { - - this.clearList(); - - this.list = list; - this.length = this.list.length; - - let lng = this.hideCurrent? this.length-1 : this.length; - - this.maxItem = this.full ? lng : 5; - this.maxItem = lng < this.maxItem ? lng : this.maxItem; - - this.maxHeight = this.maxItem * (this.itemHeight+1) + 2; - - - - this.max = lng * (this.itemHeight+1) + 2; - this.ratio = this.maxHeight / this.max; - this.sh = this.maxHeight * this.ratio; - this.range = this.maxHeight - this.sh; - - this.c[2].style.height = this.maxHeight + 'px'; - this.scrollerBack.style.height = this.maxHeight + 'px'; - this.scroller.style.height = this.sh + 'px'; - - if( this.max > this.maxHeight ){ - this.ww = this.sb - this.ss; - this.scroll = true; - } - - if( this.miniCanvas ) { - - this.tmpCanvas = document.createElement('canvas'); - this.tmpCanvas.width = this.imageSize[0]; - this.tmpCanvas.height = this.imageSize[1]; - this.tmpCtx = this.tmpCanvas.getContext("2d"); - this.tmpCtx.fillStyle = this.canvasBg; - this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); - - } - - let item, n;//, l = this.sb; - for( let i=0; i this.range ? this.range : y; - - this.topList = -Math.floor( y / this.ratio ); - - this.listIn.style.top = this.topList+'px'; - this.scroller.style.top = Math.floor( y ) + 'px'; - - this.py = y; - - } - - parentHeight ( t ) { - - if ( this.group !== null ) this.group.calc( t ); - else if ( this.isUI ) this.main.calc( t ); - - } - - open ( first ) { - - super.open(); - - this.update( 0 ); - - this.h = this.maxHeight + this.baseH + 5; - if( !this.scroll ){ - this.topList = 0; - this.h = this.baseH + 5 + this.max; - this.scroller.style.display = 'none'; - this.scrollerBack.style.display = 'none'; - } else { - this.scroller.style.display = 'block'; - this.scrollerBack.style.display = 'block'; - } - this.s[0].height = this.h + 'px'; - this.s[2].display = 'block'; - - if( this.up ){ - this.zone.y -= this.h - (this.baseH-10); - this.setSvg( this.c[4], 'd', this.svgs.g1 ); - } else { - this.setSvg( this.c[4], 'd', this.svgs.g2 ); - } - - this.rSizeContent(); - - let t = this.h - this.baseH; - - this.zone.h = this.h; - - if(!first) this.parentHeight( t ); - - } - - close () { - - super.close(); - - if( this.up ) this.zone.y += this.h - (this.baseH-10); - - let t = this.h - this.baseH; - - this.h = this.baseH; - this.s[0].height = this.h + 'px'; - this.s[2].display = 'none'; - this.setSvg( this.c[4], 'd', this.svgs.g1 ); - - this.zone.h = this.h; - - this.parentHeight( -t ); - - } - - // ----- - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSizeContent () { - - let i = this.length; - while(i--) this.listIn.children[i].style.width = this.ww + 'px'; - - } - - rSize () { - - super.rSize(); - - //Proto.prototype.rSize.call( this ); - - let s = this.s; - let w = this.sb; - let d = this.sa; - - if(s[2]=== undefined) return; - - s[2].width = w + 'px'; - s[2].left = d +'px'; - - s[3].width = w + 'px'; - s[3].left = d + 'px'; - - s[4].left = d + w - 15 + 'px'; - - this.ww = w; - if( this.max > this.maxHeight ) this.ww = w-this.ss; - if(this.isOpen) this.rSizeContent(); - - } - - } - - class Numeric extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.setTypeNumber( o ); - - this.allway = o.allway || false; - - this.isDown = false; - this.value = [0]; - this.multy = 1; - this.invmulty = 1; - this.isSingle = true; - this.isAngle = false; - this.isVector = false; - - if( o.isAngle ){ - this.isAngle = true; - this.multy = Tools.torad; - this.invmulty = Tools.todeg; - } - - this.isDrag = o.drag || false; - - if( o.value !== undefined ){ - if( !isNaN(o.value) ){ - this.value = [o.value]; - } else if( o.value instanceof Array ){ - this.value = o.value; - this.isSingle = false; - } else if( o.value instanceof Object ){ - this.value = []; - if( o.value.x !== undefined ) this.value[0] = o.value.x; - if( o.value.y !== undefined ) this.value[1] = o.value.y; - if( o.value.z !== undefined ) this.value[2] = o.value.z; - if( o.value.w !== undefined ) this.value[3] = o.value.w; - this.isSingle = false; - this.isVector = true; - } - } - - this.lng = this.value.length; - this.tmp = []; - - this.current = -1; - this.prev = { x:0, y:0, d:0, v:0 }; - - let cc = this.colors; - - // bg - this.c[2] = this.dom( 'div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h-8) + 'px;' ); - - this.cMode = []; - - let i = this.lng; - while(i--){ - - if( this.isAngle ) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed( this.precision ); - this.c[3+i] = this.dom( 'div', this.css.txtselect + 'top:1px; height:'+(this.h-2)+'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;'); - if(o.center) this.c[2+i].style.textAlign = 'center'; - this.c[3+i].textContent = this.value[i]; - this.c[3+i].style.color = this.colors.text; - this.c[3+i].isNum = true; - this.cMode[i] = 0; - - } - - // selection - this.selectId = 3 + this.lng; - this.c[this.selectId] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.cursorId = 4 + this.lng; - this.c[ this.cursorId ] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); - - this.init(); - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - - let i = this.lng; - let t = this.tmp; - - while( i-- ){ - if( l.x>t[i][0] && l.x 0"; - this.easing = o.easing || 1; - - this.setTypeNumber(o); - - this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; - - //this.defaultBorderColor = this.colors.hide; - - this.isDown = false; - this.isOver = false; - this.allway = o.allway || false; - - this.isDeg = o.isDeg || false; - this.isCyclic = o.cyclic || false; - - this.firstImput = false; - - let cc = this.colors; - - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - this.c[2] = this.dom( - "div", - this.css.txtselect + - "border:none; background:none; width:47px; color:" + - cc.text + - ";" - ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); - this.c[3] = this.dom( - "div", - this.css.basic + " top:0; height:" + this.h + "px;" - ); - - this.c[4] = this.dom( - "div", - this.css.basic + - "background:" + - cc.back + - "; top:2px; height:" + - (this.h - 4) + - "px;" - ); - this.c[5] = this.dom( - "div", - this.css.basic + - "left:4px; top:5px; height:" + - (this.h - 10) + - "px; background:" + - cc.text + - ";" - ); - - this.c[2].isNum = true; - //this.c[2].style.height = (this.h-4) + 'px'; - //this.c[2].style.lineHeight = (this.h-8) + 'px'; - this.c[2].style.height = this.h - 2 + "px"; - this.c[2].style.lineHeight = this.h - 10 + "px"; - - if (this.model !== 0) { - let r1 = 4, - h1 = 4, - h2 = 8, - ww = this.h - 6, - ra = 16; - - if (this.model === 2) { - r1 = 0; - h1 = 2; - h2 = 4; - ra = 2; - ww = (this.h - 6) * 0.5; - } - - if (this.model === 3) this.c[5].style.visible = "none"; - - this.c[4].style.borderRadius = r1 + "px"; - this.c[4].style.height = h2 + "px"; - this.c[4].style.top = this.h * 0.5 - h1 + "px"; - this.c[5].style.borderRadius = r1 * 0.5 + "px"; - this.c[5].style.height = h1 + "px"; - this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; - - //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); - this.c[6] = this.dom( - "div", - this.css.basic + - "border-radius:" + - ra + - "px; margin-left:" + - -ww * 0.5 + - "px; background:" + - cc.text + - "; left:4px; top:3px; height:" + - (this.h - 6) + - "px; width:" + - ww + - "px;" - ); - } - - this.init(); - } - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - - if (l.x >= this.txl) return "text"; - else if (l.x >= this.sa) return "scroll"; - else return ""; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (this.isDown) this.isDown = false; - } - - mousedown(e) { - let name = this.testZone(e); - - if (!name) return false; - - if (name === "scroll") { - this.isDown = true; - this.old = this.value; - this.mousemove(e); - } - - /*if( name === 'text' ){ - this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); - }*/ - - return true; - } - - mousemove(e) { - let nup = false; - - let name = this.testZone(e); - - if (name === "scroll") { - this.mode(1); - this.cursor("w-resize"); - //} else if(name === 'text'){ - //this.cursor('pointer'); - } else { - this.cursor(); - } - - if (this.isDown) { - let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; - - // lo mapeo al rango 0 ... 1 - nNormalized = Math.min(1, Math.max(0, nNormalized)); - - // aplico easing - let nEased = Math.pow(nNormalized, this.easing); // easing - - let nNew = nEased * this.range + this.min; - let nNewSlider = nNormalized * this.range + this.min; - - this.sliderValue = this.numValue(nNewSlider); - - let delta = nNew - this.old; - - let steps; - if (delta >= this.step || delta <= this.step) { - steps = Math.floor(delta / this.step); - this.value = this.numValue(this.old + steps * this.step); - // value without easing applied - - this.update(true); - this.old = this.value; - } - //console.log("n, normalized, value", nNew, nNormalized, this.value); - nup = true; - } - - return nup; - } - - wheel(e) { - let name = this.testZone(e); - - if (name === "scroll") { - let v = this.value - this.step * e.delta; - - if (v > this.max) { - v = this.isCyclic ? this.min : this.max; - } else if (v < this.min) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue(v); - this.old = v; - this.update(true); - - return true; - } - - return false; - } - - //keydown: function ( e ) { return true; }, - - // ---------------------- - - validate() { - let n = this.c[2].textContent; - - if (!isNaN(n)) { - this.value = this.numValue(n); - this.update(true); - } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - } - - reset() { - //this.clearInput(); - this.isDown = false; - this.mode(0); - } - - mode(mode) { - let s = this.s; - let cc = this.colors; - - switch (mode) { - case 0: // base - // s[2].border = '1px solid ' + this.colors.hide; - s[2].color = cc.text; - s[4].background = cc.back; - s[5].background = cc.text; - if (this.model !== 0) s[6].background = cc.text; //cc.button; - break; - case 1: // scroll over - //s[2].border = '1px dashed ' + this.colors.hide; - s[2].color = cc.textOver; - s[4].background = cc.back; - s[5].background = cc.textOver; - if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; - break; - } - } - - update(up) { - let normalized = (this.value - this.min) / this.range; - - let uneased = - this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); - - let ww = Math.floor(this.ww * uneased); - //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); - - if (this.model !== 3) this.s[5].width = ww + "px"; - if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; - this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - - if (up) this.send(); - } - - rSize() { - super.rSize(); - - let w = this.sb - this.sc; - this.ww = w - 6; - - let tx = this.sc; - if (this.isUI || !this.simple) tx = this.sc + 10; - this.txl = this.w - tx + 2; - - //let ty = Math.floor(this.h * 0.5) - 8; - - let s = this.s; - - s[2].width = this.sc - 6 + "px"; - s[2].left = this.txl + 4 + "px"; - //s[2].top = ty + 'px'; - s[3].left = this.sa + "px"; - s[3].width = w + "px"; - s[4].left = this.sa + "px"; - s[4].width = w + "px"; - s[5].left = this.sa + 3 + "px"; - - this.update(); - } - } - - class TextInput extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.cmode = 0; - - this.value = o.value !== undefined ? o.value : ''; - this.placeHolder = o.placeHolder || ''; - - this.allway = o.allway || false; - this.editable = o.edit !== undefined ? o.edit : true; - - this.isDown = false; - - let cc = this.colors; - - // text - this.c[2] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[2].textContent = this.value; - - // selection - this.c[3] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.c[4] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); - - // fake - this.c[5] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; border:none; justify-content: center; font-style: italic; color:'+cc.border+';' ); - if( this.value === '' ) this.c[5].textContent = this.placeHolder; - - - - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.x >= this.sa ) return 'text'; - return ''; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if(!this.editable) return; - - if( this.isDown ){ - this.isDown = false; - return this.mousemove( e ); - } - - return false; - - } - - mousedown ( e ) { - - if(!this.editable) return; - - let name = this.testZone( e ); - - if( !this.isDown ){ - this.isDown = true; - if( name === 'text' ) this.setInput( this.c[2] ); - return this.mousemove( e ); - } - - return false; - - } - - mousemove ( e ) { - - if(!this.editable) return; - - let name = this.testZone( e ); - - //let l = this.local; - //if( l.x === -1 && l.y === -1 ){ return;} - - //if( l.x >= this.sa ) this.cursor('text'); - //else this.cursor(); - - let x = 0; - - if( name === 'text' ) this.cursor('text'); - else this.cursor(); - - if( this.isDown ) x = e.clientX - this.zone.x; - - return this.upInput( x - this.sa -3, this.isDown ); - - } - - update ( ) { - - this.c[2].textContent = this.value; - - } - - // ---------------------- - - reset () { - - this.cursor(); - - } - - // ---------------------- - // INPUT - // ---------------------- - - select ( c, e, w, t ) { - - let s = this.s; - let d = this.sa + 5; - s[4].width = '1px'; - s[4].left = ( d + e ) + 'px'; - - s[3].left = ( d + e ) + 'px'; - s[3].width = w + 'px'; - this.c[3].innerHTML = t; - - } - - unselect () { - - let s = this.s; - if(!s) return; - s[3].width = 0 + 'px'; - this.c[3].innerHTML = 't'; - s[4].width = 0 + 'px'; - - } - - validate ( force ) { - - if( this.allway ) force = true; - - this.value = this.c[2].textContent; - - if(this.value !== '') this.c[5].textContent = ''; - else this.c[5].textContent = this.placeHolder; - - if( !force ) return; - - this.send(); - - } - - // ---------------------- - // REZISE - // ---------------------- - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - - s[5].left = this.sa + 'px'; - s[5].width = this.sb + 'px'; - - } - - - } - - class Title extends Proto { - - constructor( o = {} ) { - - super( o ); - - let prefix = o.prefix || ''; - - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:right; width:60px; line-height:'+ (this.h-8) + 'px; color:' + this.colors.text ); - - if( this.h === 31 ){ - - this.s[0].height = this.h + 'px'; - this.s[1].top = 8 + 'px'; - this.c[2].style.top = 8 + 'px'; - - } - - let s = this.s; - - s[1].justifyContent = o.align || 'left'; - //s[1].textAlign = o.align || 'left'; - s[1].fontWeight = o.fontWeight || 'bold'; - - - this.c[1].textContent = this.txt.substring(0,1).toUpperCase() + this.txt.substring(1).replace("-", " "); - this.c[2].textContent = prefix; - - this.init(); - - } - - text( txt ) { - - this.c[1].textContent = txt; - - } - - text2( txt ) { - - this.c[2].textContent = txt; - - } - - rSize() { - - super.rSize(); - this.s[1].width = this.w + 'px'; //- 50 + 'px'; - this.s[2].left = this.w + 'px';//- ( 50 + 26 ) + 'px'; - - } - - setColor( c ) { - this.s[1].color = c; - this.s[2].color = c; - } - - } - - class Select extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || ''; - this.isDown = false; - this.onActif = o.onActif || function(){}; - - //let prefix = o.prefix || ''; - const cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+ cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); - //this.c[2].style.color = this.fontColor; - - this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); - this.c[3].textContent = this.value; - - let fltop = Math.floor(this.h*0.5)-7; - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'cursor' ], fill:cc.text, stroke:'none'}); - - this.stat = 1; - this.isActif = false; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - if( l.x > this.sa && l.x < this.sa+30 ) return 'over' - return '0' - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( this.isDown ){ - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove( e ) - } - - return false - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false - - this.isDown = true; - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove( e ) - - } - - mousemove ( e ) { - - let up = false; - let name = this.testZone( e ); - - if( name === 'over' ){ - this.cursor('pointer'); - up = this.mode( this.isDown ? 3 : 2 ); - } else { - up = this.reset(); - } - - return up - - } - - // ---------------------- - - apply ( v ) { - - v = v || ''; - - if( v !== this.value ) { - this.value = v; - this.c[3].textContent = this.value; - this.send(); - } - - this.mode(1); - - } - - update () { - - this.mode( 3 ); - - } - - mode ( n ) { - - let change = false; - let cc = this.colors; - - if( this.stat !== n ){ - - if( n===1 ) this.isActif = false; - if( n===3 ){ - if( !this.isActif ){ this.isActif = true; n=4; this.onActif( this ); } - else { this.isActif = false; } - } - - if( n===2 && this.isActif ) n = 4; - - this.stat = n; - - switch( n ){ - - case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base - case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over - case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.action; break; // down - case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.action; break; // actif - - } - - change = true; - - } - - return change - - - - } - - reset () { - - this.cursor(); - return this.mode( this.isActif ? 4 : 1 ) - - } - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = (this.sa + 40) + 'px'; - s[3].width = (this.sb - 40) + 'px'; - s[4].left = (this.sa+8) + 'px'; - - } - - } - - class Bitmap extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || ''; - this.refTexture = o.texture || null; - this.img = null; - - this.isDown = false; - this.neverlock = true; - - - - const cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); - - this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); - this.c[3].textContent = this.value; - - let fltop = Math.floor(this.h*0.5)-7; - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'load' ], fill:cc.text, stroke:'none'}); - - this.stat = 1; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.x > this.sa && l.x < this.sa+30 ) return 'over'; - return '0' - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( this.isDown ){ - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove( e ); - } - - return false; - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false; - - if( name === 'over' ){ - this.isDown = true; - Files.load( { callback:this.changeBitmap.bind(this) } ); - - } - - - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove( e ); - - } - - mousemove ( e ) { - - let up = false; - - let name = this.testZone( e ); - - if( name === 'over' ){ - this.cursor('pointer'); - up = this.mode( this.isDown ? 3 : 2 ); - } else { - up = this.reset(); - } - - return up; - - } - - // ---------------------- - - changeBitmap( img, fname ){ - - if( img ){ - this.img = img; - this.apply( fname ); - } else { - this.img = null; - this.apply( 'null' ); - } - - } - - // ---------------------- - - apply ( v ) { - - v = v || ''; - - if( v !== this.value ) { - this.value = v; - this.c[3].textContent = this.value; - - if( this.img !== null ){ - if( this.objectLink !== null ) this.objectLink[ this.val ] = v; - if( this.callback ) this.callback( this.value, this.img, this.name ); - } - - } - - this.mode(1); - - } - - update () { - - this.mode( 3 ); - - } - - mode ( n ) { - - let change = false; - let cc = this.colors; - - if( this.stat !== n ){ - - this.stat = n; - - switch( n ){ - - case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base - case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over - case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.over; break; // down - case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.select; break; // actif - - } - - change = true; - - } - - return change; - - - - } - - reset () { - - this.cursor(); - return this.mode( this.isActif ? 4 : 1 ); - - } - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = (this.sa + 40) + 'px'; - s[3].width = (this.sb - 40) + 'px'; - s[4].left = (this.sa+8) + 'px'; - - } - - } - - //import { Proto } from '../core/Proto.js'; - - class Selector extends Button { - - constructor( o = {} ) { - - if( o.selectable === undefined ) o.selectable = true; - super( o ); - - } - - } - - class Item extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.p = 100; - this.value = this.txt; - this.status = 1; - - this.itype = o.itype || 'none'; - this.val = this.itype; - - this.graph = this.svgs[ this.itype ]; - - let fltop = Math.floor(this.h*0.5)-7; - - this.c[2] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.graph, fill:this.colors.text, stroke:'none'}); - - this.s[1].marginLeft = 20 + 'px'; - - this.init(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousemove ( e ) { - - this.cursor('pointer'); - - //up = this.modes( this.isDown ? 3 : 2, name ); - - } - - mousedown ( e ) { - - if( this.isUI ) this.main.resetItem(); - - this.selected( true ); - - this.send(); - - return true; - - } - - uiout () { - - if( this.isSelect ) this.mode(3); - else this.mode(1); - - } - - uiover () { - - if( this.isSelect ) this.mode(4); - else this.mode(2); - - } - - update () { - - } - - /*rSize () { - - super.rSize(); - - }*/ - - mode ( n ) { - - let change = false; - - if( this.status !== n ){ - - this.status = n; - let s = this.s, cc = this.colors; - - switch( n ){ - - case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; - case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; - case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; - case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; - - } - - change = true; - - } - - return change; - - } - - reset () { - - this.cursor(); - // return this.mode( 1 ); - - } - - selected ( b ){ - - if( this.isSelect ) this.mode(1); - - this.isSelect = b || false; - - if( this.isSelect ) this.mode(3); - - } - - - } - - class Grid extends Proto { - - constructor( o = {} ) { - - super( o ); - - /*this.values = o.values || []; - - if( typeof this.values === 'string' ) this.values = [ this.values ];*/ - - this.values = []; - - if( o.values ){ - if( o.values instanceof Array ){ - this.values = o.values; - } else if( o.values instanceof String ){ - this.values = [ o.values ]; - } else if( o.values instanceof Object ){ - this.refObject = o.values; - for( let g in this.refObject ) this.values.push( g ); - } - } - - this.lng = this.values.length; - - - - this.value = o.value || null; - - - - - let cc = this.colors; - - - this.isSelectable = o.selectable || false; - this.spaces = o.spaces || [ cc.sx, cc.sy ]; - this.bsize = o.bsize || [ 90, this.h ]; - - this.bsizeMax = this.bsize[0]; - - this.tmp = []; - this.stat = []; - this.grid = [ 2, Math.round( this.lng * 0.5 ) ]; - - this.h = ( this.grid[1] * this.bsize[1] ) + ( this.grid[1] * this.spaces[1] ); //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); - - this.c[1].textContent = ''; - //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); - this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1])+'px; border:none;' ); - - let n = 0, b, td, tr, sel; - - this.res = -1; - this.isDown = false; - this.neverlock = true; - - this.buttons = []; - this.stat = []; - this.tmpX = []; - this.tmpY = []; - - for( let i = 0; i < this.grid[1]; i++ ){ - - tr = this.c[2].insertRow(); - tr.style.cssText = 'pointer-events:none;'; - for( let j = 0; j < this.grid[0]; j++ ){ - - td = tr.insertCell(); - td.style.cssText = 'pointer-events:none;'; - - if( this.values[n] ){ - - sel = false; - if( this.values[n] === this.value && this.isSelectable ) sel = true; - - b = document.createElement( 'div' ); - b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:'+this.bsize[0]+'px; height:'+(this.bsize[1]-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; left:auto; right:auto; border-radius:'+this.radius+'px;'; - b.style.background = sel ? cc.select : cc.button; - b.style.color = sel ? cc.textSelect : cc.text; - b.innerHTML = this.values[n]; - td.appendChild( b ); - - this.buttons.push(b); - this.stat.push(1); - - } else { - - b = document.createElement( 'div' ); - b.style.cssText = this.css.txt + 'position:static; width:'+this.bsize[0]+'px; height:'+this.bsize[1]+'px; text-align:center; left:auto; right:auto; background:none;'; - td.appendChild( b ); - - } - - if(j===0) b.style.cssText += 'float:right;'; - else b.style.cssText += 'float:left;'; - - n++; - - } - } - - this.s[0].border = 'none'; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return -1; - - l.y += this.mtop; - - let tx = this.tmpX; - let ty = this.tmpY; - - let id = -1; - let c = -1; - let line = -1; - let i = this.grid[0]; - while( i-- ){ - if( l.x > tx[i][0] && l.x < tx[i][1] ) c = i; - } - - i = this.grid[1]; - while( i-- ){ - if( l.y > ty[i][0] && l.y < ty[i][1] ) line = i; - } - - if(c!==-1 && line!==-1){ - id = c + (line*2); - if(id>this.lng-1) id = -1; - } - - return id; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( !this.isDown ) return false - - this.isDown = false; - if( this.res !== -1 ){ - this.value = this.values[this.res]; - this.send(); - } - - return this.mousemove( e ) - - } - - mousedown ( e ) { - - if( this.isDown ) return false - this.isDown = true; - return this.mousemove( e ) - - } - - mousemove ( e ) { - - let up = false; - this.res = this.testZone( e ); - - if( this.res !== -1 ){ - this.cursor('pointer'); - up = this.modes( this.isDown ? 3 : 2, this.res ); - } else { - up = this.reset(); - } - - return up; - - } - - // ---------------------- - // MODE - // ----------------------- - - modes ( N = 1, id = -1 ) { - - let i = this.lng, w, n, r = false; - - while( i-- ){ - - n = N; - w = this.isSelectable ? this.values[ i ] === this.value : false; - - if( i === id ){ - if( w && n === 2 ) n = 3; - } else { - n = 1; - if( w ) n = 4; - } - - if( this.mode( n, i ) ) r = true; - - } - - return r - - } - - mode ( n, id ) { - - let change = false; - let cc = this.colors, s = this.buttons; - let i = id; - - if( this.stat[id] !== n ){ - - this.stat[id] = n; - - switch( n ){ - - case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; - case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; - case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; - case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; - - } - - change = true; - - } - - return change; - - } - - // ---------------------- - - reset () { - - this.res = -1; - this.cursor(); - return this.modes() - - } - - - label ( string, n ) { - - this.buttons[n].textContent = string; - - } - - icon ( string, y, n ) { - - this.buttons[n].style.padding = ( y || 0 ) +'px 0px'; - this.buttons[n].innerHTML = string; - - } - - testW () { - - let vw = this.spaces[0]*3 + this.bsizeMax*2, rz = false; - if( vw > this.w ) { - this.bsize[0] = ( this.w-(this.spaces[0]*3) ) * 0.5; - rz = true; - } else { - if( this.bsize[0] !== this.bsizeMax ) { - this.bsize[0] = this.bsizeMax; - rz = true; - } - } - - if( !rz ) return; - - let i = this.buttons.length; - while(i--) this.buttons[i].style.width = this.bsize[0] + 'px'; - - } - - rSize () { - - super.rSize(); - - this.testW(); - - let mid; - - this.tmpX = []; - this.tmpY = []; - - for( let j = 0; j < this.grid[0]; j++ ){ - - if(j===0){ - mid = ( this.w*0.5 ) - ( this.spaces[0]*0.5 ); - this.tmpX.push( [ mid-this.bsize[0], mid ] ); - } else { - mid = ( this.w*0.5 ) + ( this.spaces[0]*0.5 ); - this.tmpX.push( [ mid, mid+this.bsize[0] ] ); - } - - } - - mid = this.spaces[1]; - - for( let i = 0; i < this.grid[1]; i++ ){ - - this.tmpY.push( [ mid, mid + this.bsize[1] ] ); - mid += this.bsize[1] + this.spaces[1]; - - } - - } - - } - - class Pad2D extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.autoWidth = false; - this.minw = this.w; - this.diam = o.diam || this.w; - - //this.margin = 15; - this.pos = new V2(0,0); - this.maxPos = 90; - - this.model = o.stype || 0; - if( o.mode !== undefined ) this.model = o.mode; - - this.min = o.min === undefined ? -1 : o.min; - this.max = o.max === undefined ? 1 : o.max; - - this.range = (this.max - this.min)*0.5; - - this.cmode = 0; - - - //console.log(this.range) - - this.c[0].style.display = 'block'; - - - - - - this.precision = o.precision === undefined ? 2 : o.precision; - - /*this.bounds = {}; - this.bounds.x1 = o.x1 || -1; - this.bounds.x2 = o.x2 || 1; - this.bounds.y1 = o.y1 || -1; - this.bounds.y2 = o.y2 || 1; - - this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); - this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); - - this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); - this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ - - this.value = ( Array.isArray( o.value ) && o.value.length == 2 ) ? o.value : [ 0, 0 ]; - - - this.h = o.h || this.w + 10; - - this.c[0].style.width = this.w + 'px'; - - // Title - if( this.c[1] !== undefined ) { // with title - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - - } - - //this.top -= this.margin - - let cc = this.colors; - - - // Value - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+ ( this.h - 20 ) + 'px; width:100%; color:' + cc.text ); - this.c[2].textContent = this.value; - - // Pad - - let pad = this.getPad2d(); - - this.setSvg( pad, 'fill', cc.back, 0 ); - this.setSvg( pad, 'fill', cc.button, 1 ); - this.setSvg( pad, 'stroke', cc.back, 2 ); - this.setSvg( pad, 'stroke', cc.back, 3 ); - this.setSvg( pad, 'stroke', cc.text, 4 ); - - this.setSvg( pad, 'viewBox', '0 0 '+this.diam+' '+this.diam ); - this.setCss( pad, { width:this.diam, height:this.diam, left:0, top:this.top }); - - this.c[3] = pad; - - this.init(); - this.setValue(); - - } - - testZone ( e ) { - - let l = this.local; - - if( l.x === -1 && l.y === -1 ) return ''; - - - - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'pad'; - - /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { - return 'pad'; - }*/ - - //return ''; - - } - - mouseup ( e ) { - - this.isDown = false; - return this.mode(0); - - } - - mousedown ( e ) { - - if ( this.testZone(e) === 'pad' ) { - - this.isDown = true; - this.mousemove( e ); - return this.mode(1); - } - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - let x = (this.w*0.5) - ( e.clientX - this.zone.x ); - let y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - - let r = 256 / this.diam; - - x = -(x*r); - y = -(y*r); - - x = Tools.clamp( x, -this.maxPos, this.maxPos ); - y = Tools.clamp( y, -this.maxPos, this.maxPos ); - - //let x = e.clientX - this.zone.x; - //let y = e.clientY - this.zone.y - this.top; - - /*if( x < this.margin ) x = this.margin; - if( x > this.w - this.margin ) x = this.w - this.margin; - if( y < this.margin ) y = this.margin; - if( y > this.w - this.margin ) y = this.w - this.margin;*/ - - //console.log(x,y) - - this.setPos( [ x , y ] ); - - this.update( true ); - - } - - mode ( mode ) { - - if( this.cmode === mode ) return false; - - let cc = this.colors; - - switch( mode ){ - case 0: // base - - this.s[2].color = cc.text; - this.setSvg( this.c[3], 'fill', cc.back, 0); - this.setSvg( this.c[3], 'fill', cc.button, 1); - this.setSvg( this.c[3], 'stroke', cc.back, 2); - this.setSvg( this.c[3], 'stroke', cc.back, 3); - this.setSvg( this.c[3], 'stroke', cc.text, 4 ); - - break; - case 1: // down - - this.s[2].color = cc.textSelect; - this.setSvg( this.c[3], 'fill', cc.backoff, 0); - this.setSvg( this.c[3], 'fill', cc.overoff, 1); - this.setSvg( this.c[3], 'stroke', cc.backoff, 2); - this.setSvg( this.c[3], 'stroke', cc.backoff, 3); - this.setSvg( this.c[3], 'stroke', cc.textSelect, 4 ); - - break; - } - - this.cmode = mode; - return true; - - - - } - - update ( up ) { - - //if( up === undefined ) up = true; - - this.c[2].textContent = this.value; - - this.updateSVG(); - - if( up ) this.send(); - - } - - updateSVG() { - - if ( this.model == 1 ) { - - this.setSvg( this.c[3], 'y1', this.pos.y, 2 ); - this.setSvg( this.c[3], 'y2', this.pos.y, 2 ); - - this.setSvg( this.c[3], 'x1', this.pos.x, 3 ); - this.setSvg( this.c[3], 'x2', this.pos.x, 3 ); - - } - - this.setSvg( this.c[3], 'cx', this.pos.x, 4 ); - this.setSvg( this.c[3], 'cy', this.pos.y, 4 ); - - } - - setPos ( p ) { - - //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; - - this.pos.set( p[0]+128 , p[1]+128 ); - - let r = 1/this.maxPos; - - this.value[0] = ((p[0]*r)*this.range).toFixed( this.precision ); - this.value[1] = ((p[1]*r)*this.range).toFixed( this.precision ); - - } - - setValue ( v, up = false ) { - - if( v === undefined ) v = this.value; - - /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; - if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; - if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; - if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ - - this.value[0] = Math.min( this.max, Math.max( this.min, v[0] ) ).toFixed( this.precision ) * 1; - this.value[1] = Math.min( this.max, Math.max( this.min, v[1] ) ).toFixed( this.precision ) * 1; - - this.pos.set( ((this.value[0]/this.range)*this.maxPos)+128 , ((this.value[1]/this.range)*this.maxPos)+128 ); - - //console.log(this.pos) - - this.update( up ); - - } - - /*lerp( s1, s2, d1, d2, c = true ) { - - let s = ( d2 - d1 ) / ( s2 - s1 ); - - return c ? ( v ) => { - return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 - } : ( v ) => { - return ( v - s1 ) * s + d1 - } - - }*/ - - } - - // proto/TreeList.js - - class TreeList extends Proto { - constructor(o = {}) { - // API pública esperada: - // o.tree (obj/array), o.value (array) - // o.focused (bool), o.focusPath (array), o.focusLevel (number) - // o.tabIndex, o.itemIndex, o.onChange (fn) - o.selectable = true; - o.name = o.name || 'TreeList'; - super(o); - - // Datos & estado - this.tree = o.tree || {}; - this.value = Array.isArray(o.value) ? o.value.slice() : []; - this.focused = !!o.focused; - this.focusPath = Array.isArray(o.focusPath) ? o.focusPath.slice() : []; - this.focusLevel = typeof o.focusLevel === 'number' ? o.focusLevel : -1; - - this.tabIndex = o.tabIndex ?? null; - this.itemIndex = o.itemIndex ?? null; - - // Callback - this.changeCb = typeof o.onChange === 'function' ? o.onChange : () => {}; - - // Layout interno / publicación de altura - this.lineH = this.h; // alto de UNA fila - this.levelGap = this.colors.sy || 2; // separación vertical entre niveles - this.leafMax = 0; // se calcula en rSize() - - // Modelo visual - this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] - this.itemsDom = []; // espejo DOM por nivel - this.hover = { level: -1, index: -1 }; - - // Contenedor interno (absoluto) - this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); - this.s[2] = this.c[2].style; - - this.init(); - } - - // ======= Helpers de tipo ======= - static isMap(node) { return node && typeof node === 'object' && !Array.isArray(node); } - static isList(node) { return Array.isArray(node); } - - // ======= Recorrido de datos ======= - getNodeAtPath(path) { - let node = this.tree; - for (let i = 0; i < path.length; i++) { - if (TreeList.isMap(node)) { - if (!Object.prototype.hasOwnProperty.call(node, path[i])) return { node: null, depth: i }; - node = node[path[i]]; - } else if (TreeList.isList(node)) { - // Llegamos a una lista: ya no hay más claves válidas - if (i < path.length) return { node, depth: i }; - } else { - return { node: null, depth: i }; - } - } - return { node, depth: path.length }; - } - - // Autocompletar: baja por primeras claves de cada mapa hasta alcanzar una lista - autoCompleteToLeaf(basePath) { - let { node } = this.getNodeAtPath(basePath); - const path = basePath.slice(); - while (TreeList.isMap(node)) { - const keys = Object.keys(node); - if (!keys.length) break; - const k0 = keys[0]; - path.push(k0); - node = node[k0]; - } - // Si termina en lista, NO agrega un ítem final de la hoja - return path; - } - - // Ruta activa (focusPath si focused, sino value) - getActivePath() { - return this.focused ? this.focusPath : this.value; - } - - // ======= Tamaño de hoja máximo (para layout estable) ======= - computeLeafMax(node = this.tree) { - if (Array.isArray(node)) return node.length; - if (!node || typeof node !== 'object') return 0; - let m = 0; - for (const k of Object.keys(node)) { - m = Math.max(m, this.computeLeafMax(node[k])); - } - return m; - } - - // ======= Construcción de niveles (modelo lógico) ======= - buildLevels() { - this.levels.length = 0; - const activePath = this.getActivePath(); - - let node = this.tree; - let level = 0; - - while (node) { - if (TreeList.isMap(node)) { - // Nivel intermedio: claves del mapa (horizontal) - const keys = Object.keys(node); - if (!keys.length) break; - this.levels.push({ - type: 'map', - items: keys.map(k => ({ key: k, label: k, zone: { x:0,y:0,w:0,h:0 } })), - zone: { x:0,y:0,w:0,h: this.lineH } - }); - - const nextKey = activePath[level]; - if (!nextKey || !node.hasOwnProperty(nextKey)) break; - node = node[nextKey]; - } else if (TreeList.isList(node)) { - // Nivel hoja: lista vertical - const items = node.map(label => ({ key: label, label, zone: { x:0,y:0,w:0,h:0 } })); - const hList = Math.max(items.length, this.leafMax) * this.lineH; - this.levels.push({ type: 'list', items, zone: { x:0, y:0, w:0, h: hList } }); - break; - } else { - break; - } - level++; - } - } - - // ======= Layout (zonas & DOM) ======= - layoutLevels() { - - const contentX = (this.sa || 100) + 8; // columna de label + padding - const padRight = 8; - const w = this.zone.w - contentX - padRight; - - - let y = 0; - - // Ajustar itemsDom a cantidad de niveles - while (this.itemsDom.length < this.levels.length) this.itemsDom.push([]); - for (let L = this.levels.length; L < this.itemsDom.length; L++) { - for (const el of this.itemsDom[L]) if (el && el.parentNode) el.parentNode.removeChild(el); - } - this.itemsDom.length = this.levels.length; - - for (let L = 0; L < this.levels.length; L++) { - const lvl = this.levels[L]; - this.itemsDom[L]; - if (lvl.type === 'map') { - const n = Math.max(1, lvl.items.length); - const cellW = Math.floor(w / n); - - lvl.zone = { x: contentX, y, w, h: this.lineH }; - let x = contentX; - - - for (let i = 0; i < lvl.items.length; i++) { - const it = lvl.items[i]; - it.zone = { x, y, w: cellW, h: this.lineH }; - const dom = this.ensureItemDom(L, i); - this.paintItemDom(dom, L, i, it, 'map'); - x += cellW; - } - // eliminar DOM sobrante si antes había más celdas - this._pruneRow(L, lvl.items.length); - y += this.lineH + this.levelGap; - } else { - // lista/hoja: reservar h según leafMax - const n = lvl.items.length; - const hList = Math.max(n, this.leafMax) * this.lineH; - - lvl.zone = { x: contentX, y, w, h: hList }; - - const rows = Math.max(n, this.leafMax); - for (let i = 0; i < rows; i++) { - const isReal = i < n; - const it = isReal ? lvl.items[i] : { key: null, label: '', zone: { x:0,y:0,w:0,h:0 } }; - - it.zone = { x: contentX, y: y + i * this.lineH, w, h: this.lineH }; - const dom = this.ensureItemDom(L, i); - this.paintItemDom(dom, L, i, it, 'list', isReal); - } - // eliminar DOM sobrante si antes había más filas - this._pruneRow(L, rows); - y += hList; - } - } - - // Ajustes de alto interno del contenedor visual - const totalH = y; - this.zone.h = totalH + this.margin; - this.s[0].height = this.zone.h + 'px'; - this.s[2].height = totalH + 'px'; - - // Publicar alto total al GUI (sumará u.h) - this._publishHeight(); - } - - - - // Elimina nodos DOM sobrantes en la fila L a partir del índice keep - _pruneRow(L, keep) { - const row = this.itemsDom[L]; - // si nunca se creó, nada que hacer - if (!row) return; - for (let j = keep; j < row.length; j++) { - const el = row[j]; - if (el && el.parentNode) el.parentNode.removeChild(el); - } - row.length = keep; - } - - - ensureItemDom(L, i) { - const row = this.itemsDom[L]; - while (row.length <= i) row.push(null); - if (!row[i]) { - const div = this.dom('div', Tools.css.txt + 'position:absolute; pointer-events:none;'); - this.c[2].appendChild(div); - row[i] = div; - } - return row[i]; - } - - paintItemDom(div, L, i, it, kind, isReal = true) { - const s = div.style; - const cc = this.colors; - - // Posición - s.left = it.zone.x + 'px'; - s.top = it.zone.y + 'px'; - s.width = it.zone.w + 'px'; - s.height = (it.zone.h - 2) + 'px'; - - // Texto - div.textContent = isReal ? it.label : ''; - - // Estados - const selected = isReal && this.value[L] !== undefined && this.value[L] === it.key; - const inFocusLvl = this.focused && (this.focusLevel === L); - const focusMatch = isReal && inFocusLvl && (this.focusPath[L] === it.key); - const isHover = isReal && (this.hover.level === L && this.hover.index === i); - - // Estilos base - s.background = cc.back; - s.color = cc.text; - s.border = '1px solid ' + cc.border; - s.textAlign = kind === 'map' ? 'center' : 'left'; - - // Prioridad visual: seleccionado > foco > hover > base - if (selected) { - s.background = cc.select; - s.color = cc.textSelect; - } else if (focusMatch) { - s.background = cc.backgroundOver; - s.color = cc.textOver; - } else if (isHover) { - s.background = cc.overoff; - s.color = cc.textOver; - } - - // Filas de padding invisibles en hoja - s.opacity = isReal ? '1' : '0'; - } - - // ======= Ciclo de vida ======= - rSize() { - this.leafMax = this.computeLeafMax(this.tree); - this.buildLevels(); - this.layoutLevels(); - } - - update() { - this.buildLevels(); - this.layoutLevels(); - } - - // ======= Interacción ======= - _toLocal(e) { - const mx = e.clientX - this.zone.x; - const my = e.clientY - this.zone.y; - return { x: mx, y: my }; - } - - _hitTest(mx, my) { - for (let L = 0; L < this.levels.length; L++) { - const lvl = this.levels[L]; - const z = lvl.zone; // x y w ya incluyen contentX - if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; - - if (lvl.type === 'map') { - for (let i = 0; i < lvl.items.length; i++) { - const itz = lvl.items[i].zone; - if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { - return { L, i, real: true }; - } - } - } else { - const nRows = Math.max(lvl.items.length, this.leafMax); - for (let i = 0; i < nRows; i++) { - const isReal = i < lvl.items.length; - const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.lineH, w: z.w, h: this.lineH }; - if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { - return { L, i, real: isReal }; - } - } - } - } - return { L: -1, i: -1, real: false }; - } - - handleEvent(e) { - if (this.lock) return false; - - if (e.type === 'mousemove') { - const { x, y } = this._toLocal(e); - const ht = this._hitTest(x, y); - this.hover = (ht.L !== -1 && ht.real) ? { level: ht.L, index: ht.i } : { level: -1, index: -1 }; - this.update(); - return true; - } - - if (e.type === 'mousedown') { - const { x, y } = this._toLocal(e); - const ht = this._hitTest(x, y); - if (ht.L !== -1 && ht.real) { - this._selectAt(ht.L, ht.i); - return true; - } - } - - if (e.type === 'mouseup') { - return true; - } - - // (Opcional) teclado: integrar navegación en Gui y reenviar aquí si se desea - return false; - } - - // Selección + autocompletado + notificación - _selectAt(L, i) { - const lvl = this.levels[L]; - const chosen = lvl.items[i]; - if (!chosen || !chosen.key) return; - - const base = this.value.slice(0, L); - base[L] = chosen.key; - - const newPath = this.autoCompleteToLeaf(base); - - this.value = newPath.slice(); - this.update(); - - // ✅ Actualiza objeto enlazado (si existe) y dispara callbacks “clásicos” - this.send(newPath); // escribe en objectLink[objectKey] si hay referencia - this.changeCb(this.tabIndex, this.itemIndex, newPath); - } - - - // ======= API pública ======= - setValue(path) { - this.value = Array.isArray(path) ? path.slice() : []; - this.update(); - } - - setTree(tree) { - this.tree = tree || {}; - // recalcular leafMax en próxima pasada - this.leafMax = this.computeLeafMax(this.tree); - this.update(); - } - - setFocus({ focused, focusPath, focusLevel }) { - if (typeof focused === 'boolean') this.focused = focused; - if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); - if (typeof focusLevel === 'number') this.focusLevel = focusLevel; - this.update(); - } - - // ======= Publicación de altura ======= - _countVisibleIntermediates() { - let c = 0; - for (let i = 0; i < this.levels.length; i++) if (this.levels[i].type === 'map') c++; - return c; - } - - _getCurrentLeafLength() { - const last = this.levels[this.levels.length - 1]; - return last && last.type === 'list' ? last.items.length : 0; - } - - _publishHeight() { - const inter = this._countVisibleIntermediates(); - const leafLen = Math.max(this.leafMax, this._getCurrentLeafLength()); - const leafH = leafLen * this.lineH; - const interH = inter * (this.lineH + this.levelGap); - const totalH = interH + (inter ? this.levelGap : 0) + leafH; - - // Actualiza métricas del proto (lo que suma el GUI) - this.h = totalH; - this.zone.h = this.h + this.margin; - this.s[0].height = this.h + 'px'; - - // Avisar al GUI y refrescar zonas - if (this.isUI && this.main) this.main.calc(); - Roots.needReZone = true; - } - } - - const add = function () { - - let a = arguments; - - let type, o, ref = false, n = null; - - if( typeof a[0] === 'string' ){ - - type = a[0]; - o = a[1] || {}; - - } else if ( typeof a[0] === 'object' ){ // like dat gui - - ref = true; - if( a[2] === undefined ) [].push.call(a, {}); - - type = a[2].type ? a[2].type : autoType( a[0][a[1]], a[2] ); - - o = a[2]; - o.name = a[1]; - if (o.hasOwnProperty("displayName")) o.name = o.displayName; - - if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } - else o.value = a[0][a[1]]; - - } - - let name = type.toLowerCase(); - - if( name === 'group' ){ - o.add = add; - //o.dx = 8 - } - - switch( name ){ - - case 'bool': case 'boolean': n = new Bool(o); break; - case 'button': n = new Button(o); break; - case 'circular': n = new Circular(o); break; - case 'color': n = new Color(o); break; - case 'fps': n = new Fps(o); break; - case 'graph': n = new Graph(o); break; - case 'group': n = new Group(o); break; - case 'joystick': n = new Joystick(o); break; - case 'knob': n = new Knob(o); break; - case 'list': n = new List(o); break; - case 'numeric': case 'number': n = new Numeric(o); break; - case 'slide': n = new Slide(o); break; - case 'textInput': case 'string': n = new TextInput(o); break; - case 'title': case 'text': n = new Title(o); break; - case 'select': n = new Select(o); break; - case 'bitmap': n = new Bitmap(o); break; - case 'selector': n = new Selector(o); break; - case 'empty': case 'space': n = new Empty(o); break; - case 'item': n = new Item(o); break; - case 'grid': n = new Grid(o); break; - case 'pad2d': case 'pad': n = new Pad2D(o); break; - case 'treelist': n = new TreeList(o); break; - - } - - - - if( n !== null ){ - - Roots.needResize = true; - - if( ref ) n.setReferency( a[0], a[1] ); - return n; - - } - - }; - - const autoType = function ( v, o ) { - - let type = 'slide'; - - if( typeof v === 'boolean' ) type = 'bool'; - else if( typeof v === 'string' ){ - - if( v.substring(0,1) === '#' ) type = 'color'; - else type = 'string'; - - } else if( typeof v === 'number' ){ - - if( o.ctype ) type = 'color'; - else type = 'slide'; - - } else if( typeof v === 'array' && v instanceof Array ){ - - if( typeof v[0] === 'number' ) type = 'number'; - else if( typeof v[0] === 'string' ) type = 'list'; - - } else if( typeof v === 'object' && v instanceof Object ){ - - if( v.x !== undefined ) type = 'number'; - else type = 'list'; - - } - - return type - - }; - - /** - * @author lth / https://github.com/lo-th - */ - - class Gui { - constructor(o = {}) { - this.isGui = true; - - this.name = "gui"; - - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; - - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors); - else this.colors = Tools.defineColor(o); - - //this.cleanning = false - - // style - this.css = Tools.cloneCss(); - - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 - - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; - - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") - ? o.addDOMEventListeners - : true; - - this.callback = o.callback === undefined ? null : o.callback; - - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; - - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - - this.cn = ""; - - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; - - this.size.h = this.size.h < 11 ? 11 : this.size.h; - - // local mouse and zone - this.local = new V2().neg(); - this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; - - // virtual mouse - this.mouse = new V2().neg(); - - this.h = 0; - //this.prevY = -1; - this.sw = 0; - - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); - - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; - - this.autoResize = o.autoResize === undefined ? true : o.autoResize; - - // default position - this.isCenter = o.center || false; - this.cssGui = - o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; - - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; - - this.isNewTarget = false; - - let cc = this.colors; - - this.content = Tools.dom( - "div", - this.css.basic + - " width:0px; height:auto; top:0px; background:" + - cc.content + - "; " + - this.cssGui - ); - - this.innerContent = Tools.dom( - "div", - this.css.basic + - "width:100%; top:0; left:0; height:auto; overflow:hidden;" - ); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); - - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom( - "div", - this.css.basic + flexible + "width:100%; left:0; " - ); - this.innerContent.appendChild(this.inner); - - // scroll - this.scrollBG = Tools.dom( - "div", - this.css.basic + - "right:0; top:0; width:" + - (this.size.s - 1) + - "px; height:10px; display:none; background:" + - cc.background + - ";" - ); - this.content.appendChild(this.scrollBG); - - this.scroll = Tools.dom( - "div", - this.css.basic + - "background:" + - cc.button + - "; right:2px; top:0; width:" + - (this.size.s - 4) + - "px; height:10px;" - ); - this.scrollBG.appendChild(this.scroll); - - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; - - let r = cc.radius; - this.bottom = Tools.dom( - "div", - this.css.txt + - "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + - r + - "px; border-bottom-left-radius:" + - r + - "px; justify-content:center; height:" + - this.bh + - "px; line-height:" + - (this.bh - 5) + - "px; color:" + - cc.text + - ";" - ); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - this.bottom.style.background = cc.background; - - // - - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; - - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } - - if (this.parent !== null) this.parent.appendChild(this.content); - - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } - - // height transition - this.transition = - o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - - this.setWidth(); - - if (this.isCanvas) this.makeCanvas(); - - Roots.add(this); - } - - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseUp(x, y) { - /* - - clientX,clientY are no used when isCanvas==true - */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); - - Roots.needReZone = true; - } - - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = - "height " + this.transition + "s ease-out"; - this.content.style.transition = - "height " + this.transition + "s ease-out"; - this.bottom.style.transition = "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } - - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } - - // ---------------------- - // CANVAS - // ---------------------- - - onDraw() {} - - makeCanvas() { - this.canvas = document.createElementNS( - "http://www.w3.org/1999/xhtml", - "canvas" - ); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - - //console.log( this.canvas.width, this.canvas.height ) - } - - draw(force) { - if (this.canvas === null) return; - - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } - - ////// - - getDom() { - return this.content; - } - - noMouse() { - this.mouse.neg(); - } - - setMouse(uv, flip = true) { - if (flip) - this.mouse.set( - Math.round(uv.x * this.canvas.width), - this.canvas.height - Math.round(uv.y * this.canvas.height) - ); - else - this.mouse.set( - Math.round(uv.x * this.canvas.width), - Math.round(uv.y * this.canvas.height) - ); - //this.mouse.set( m.x, m.y ); - - //console.log("setMouse "+uv.x+" "+uv.y) - } - - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } - - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } - - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } - - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } - - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } - - onChange(f) { - this.callback = f || null; - return this; - } - - // ---------------------- - // STYLES - // ---------------------- - - mode(n) { - let needChange = false; - let cc = this.colors; - - if (n !== this.cn) { - this.cn = n; - - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } - - needChange = true; - } - - return needChange; - } - - // ---------------------- - // TARGET - // ---------------------- - - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } - - this.proto = null; - this.current = -1; - - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - - Roots.cursor(); - return true; - } - - // ---------------------- - // ZONE TEST - // ---------------------- - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - - this.isReset = false; - - let name = ""; - - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; - else name = l.x > s ? "scroll" : "content"; - - return name; - } - - // ---------------------- - // EVENTS - // ---------------------- - - handleEvent(e) { - //if( this.cleanning ) return - - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; - - let change = false; - let protoChange = false; - - let name = this.testZone(e); - - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; - - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } - - if (!name) return; - - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - - if (Roots.isMobile && type === "mousedown") this.getNext(e, change); - - if (this.proto) protoChange = this.proto.handleEvent(e); - - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) - change = this.onWheel(e); - - if (!Roots.lock) { - this.getNext(e, change); - } - - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } - - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); - - break; - } - - if (this.isDown) change = true; - if (protoChange) change = true; - - if (type === "keyup") change = true; - if (type === "keydown") change = true; - - if (change) this.draw(); - } - - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); - - if (next !== this.current) { - this.clearTarget(); - this.current = next; - this.isNewTarget = true; - } - - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } - - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } - - // ---------------------- - // RESET - // ---------------------- - - reset(force) { - if (this.isReset) return; - - //this.resetItem(); - - this.mouse.neg(); - this.isDown = false; - - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); - - if (r || r2) this.draw(true); - - this.isReset = true; - - //Roots.lock = false; - } - - // ---------------------- - // ADD NODE - // ---------------------- - - add() { - //if(this.cleanning) this.cleanning = false - - let a = arguments; - let ontop = false; - - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; - - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); - else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } - - let u = add.apply(this, a); - - if (u === null) return; - - if (ontop) this.uis.unshift(u); - else this.uis.push(u); - - this.calc(); - - this.isEmpty = false; - - return u; - } - - // remove one node - - remove(n) { - if (n.dispose) n.dispose(); - } - - // call after uis clear - - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } - - // clear all gui - - empty() { - //this.cleanning = true - - //this.close(); - - let i = this.uis.length, - item; - - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } - - this.uis = []; - this.isEmpty = true; - this.calc(); - } - - clear() { - this.empty(); - } - - clear2() { - setTimeout(this.empty.bind(this), 0); - } - - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } - - // ---------------------- - // ITEMS SPECIAL - // ---------------------- - - resetItem() { - if (!this.isItemMode) return; - - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } - - setItem(name) { - if (!this.isItemMode) return; - - name = name || ""; - this.resetItem(); - - if (!name) { - this.update(0); - return; - } - - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) - this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } - - // ---------------------- - // SCROLL - // ---------------------- - - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; - - if (b) { - this.total = this.h; - - this.maxView = this.maxHeight; - - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; - - this.range = this.maxView - this.sh; - - this.oy = Tools.clamp(this.oy, 0, this.range); - - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } - - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } - - update(y) { - y = Tools.clamp(y, 0, this.range); - - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } - - // ---------------------- - // RESIZE FUNCTION - // ---------------------- - - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } - - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } - - setHeight() { - if (this.tmp) clearTimeout(this.tmp); - - this.zone.h = this.bh; - this.isScroll = false; - - if (this.isOpen) { - this.h = this.calcUis(); - - let hhh = this.forceHeight - ? this.forceHeight + this.zone.y - : window.innerHeight; - - this.maxHeight = hhh - this.zone.y - this.bh; - - let diff = this.h - this.maxHeight; - - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } - - this.upScroll(this.isScroll); - - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; - - if (this.forceHeight && this.lockHeight) - this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } - - rezone() { - Roots.needReZone = true; - } - - setWidth(w) { - if (w) this.zone.w = w; - - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) - this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } - - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } - } - - exports.Files = Files; - exports.Gui = Gui; - exports.REVISION = REVISION; - exports.Tools = Tools; - exports.add = add; - - Object.defineProperty(exports, '__esModule', { value: true }); - -})); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuICAgIC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG4gICAgLy8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG4gICAgby5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuICAgIG8ubmFtZSA9IG8ubmFtZSB8fCAnVHJlZUxpc3QnO1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgLy8gRGF0b3MgJiBlc3RhZG9cclxuICAgIHRoaXMudHJlZSAgICAgICA9IG8udHJlZSB8fCB7fTtcclxuICAgIHRoaXMudmFsdWUgICAgICA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNlZCAgICA9ICEhby5mb2N1c2VkO1xyXG4gICAgdGhpcy5mb2N1c1BhdGggID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSAnbnVtYmVyJyA/IG8uZm9jdXNMZXZlbCA6IC0xO1xyXG5cclxuICAgIHRoaXMudGFiSW5kZXggICA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuICAgIHRoaXMuaXRlbUluZGV4ICA9IG8uaXRlbUluZGV4ID8/IG51bGw7XHJcblxyXG4gICAgLy8gQ2FsbGJhY2tcclxuICAgIHRoaXMuY2hhbmdlQ2IgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcbiAgICAvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuICAgIHRoaXMubGluZUggICAgPSB0aGlzLmg7ICAgICAgICAgICAgICAgLy8gYWx0byBkZSBVTkEgZmlsYVxyXG4gICAgdGhpcy5sZXZlbEdhcCA9IHRoaXMuY29sb3JzLnN5IHx8IDI7ICAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmxlYWZNYXggID0gMDsgICAgICAgICAgICAgICAgICAgIC8vIHNlIGNhbGN1bGEgZW4gclNpemUoKVxyXG5cclxuICAgIC8vIE1vZGVsbyB2aXN1YWxcclxuICAgIHRoaXMubGV2ZWxzICAgPSBbXTsgICAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuICAgIHRoaXMuaXRlbXNEb20gPSBbXTsgICAvLyBlc3Blam8gRE9NIHBvciBuaXZlbFxyXG4gICAgdGhpcy5ob3ZlciAgICA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcbiAgICAvLyBDb250ZW5lZG9yIGludGVybm8gKGFic29sdXRvKVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpO1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG4gIHN0YXRpYyBpc01hcChub2RlKSAgeyByZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuICBzdGF0aWMgaXNMaXN0KG5vZGUpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuXHJcbiAgLy8gPT09PT09PSBSZWNvcnJpZG8gZGUgZGF0b3MgPT09PT09PVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG4gICAgICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG4gIGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG4gICAgbGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG4gICAgd2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgaWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcbiAgICAgIGNvbnN0IGswID0ga2V5c1swXTtcclxuICAgICAgcGF0aC5wdXNoKGswKTtcclxuICAgICAgbm9kZSA9IG5vZGVbazBdO1xyXG4gICAgfVxyXG4gICAgLy8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgLy8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG4gIGdldEFjdGl2ZVBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG4gIGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcbiAgICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gMDtcclxuICAgIGxldCBtID0gMDtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG4gICAgICBtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PVxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTml2ZWwgaW50ZXJtZWRpbzogY2xhdmVzIGRlbCBtYXBhIChob3Jpem9udGFsKVxyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6ICdtYXAnLFxyXG4gICAgICAgICAgaXRlbXM6IGtleXMubWFwKGsgPT4gKHsga2V5OiBrLCBsYWJlbDogaywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSksXHJcbiAgICAgICAgICB6b25lOiB7IHg6MCx5OjAsdzowLGg6IHRoaXMubGluZUggfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAobGFiZWwgPT4gKHsga2V5OiBsYWJlbCwgbGFiZWwsIHpvbmU6IHsgeDowLHk6MCx3OjAsaDowIH0gfSkpO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ2xpc3QnLCBpdGVtcywgem9uZTogeyB4OjAsIHk6MCwgdzowLCBoOiBoTGlzdCB9IH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuICBsYXlvdXRMZXZlbHMoKSB7XHJcbiAgICBcclxuICAgIGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7ICAgLy8gY29sdW1uYSBkZSBsYWJlbCArIHBhZGRpbmdcclxuICAgIGNvbnN0IHBhZFJpZ2h0ID0gODtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIGNvbnRlbnRYIC0gcGFkUmlnaHQ7XHJcblxyXG4gICAgXHJcbiAgICBsZXQgeSA9IDA7XHJcblxyXG4gICAgLy8gQWp1c3RhciBpdGVtc0RvbSBhIGNhbnRpZGFkIGRlIG5pdmVsZXNcclxuICAgIHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkgdGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuICAgIGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSkgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pdGVtc0RvbS5sZW5ndGggPSB0aGlzLmxldmVscy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICBsZXQgeCA9IGNvbnRlbnRYO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ21hcCcpO1xyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG4gICAgICAgIHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgIHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG4gICAgICAgIGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuICAgICAgICAgY29uc3Qgcm93cyA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbjtcclxuICAgICAgICAgIGNvbnN0IGl0ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldIDogeyBrZXk6IG51bGwsIGxhYmVsOiAnJywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9O1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgaXQuem9uZSA9IHsgeDogY29udGVudFgsIHk6IHkgKyBpICogdGhpcy5saW5lSCwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ2xpc3QnLCBpc1JlYWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgZmlsYXNcclxuICAgICAgICB0aGlzLl9wcnVuZVJvdyhMLCByb3dzKTtcclxuICAgICAgICB5ICs9IGhMaXN0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWp1c3RlcyBkZSBhbHRvIGludGVybm8gZGVsIGNvbnRlbmVkb3IgdmlzdWFsXHJcbiAgICBjb25zdCB0b3RhbEggPSB5O1xyXG4gICAgdGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArICdweCc7XHJcbiAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdG90YWxIICsgJ3B4JztcclxuXHJcbiAgICAvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcbiAgICB0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vIEVsaW1pbmEgbm9kb3MgRE9NIHNvYnJhbnRlcyBlbiBsYSBmaWxhIEwgYSBwYXJ0aXIgZGVsIMOtbmRpY2Uga2VlcFxyXG4gIF9wcnVuZVJvdyhMLCBrZWVwKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgLy8gc2kgbnVuY2Egc2UgY3Jlw7MsIG5hZGEgcXVlIGhhY2VyXHJcbiAgICBpZiAoIXJvdykgcmV0dXJuO1xyXG4gICAgZm9yIChsZXQgaiA9IGtlZXA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcclxuICAgICAgY29uc3QgZWwgPSByb3dbal07XHJcbiAgICAgIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHJvdy5sZW5ndGggPSBrZWVwO1xyXG4gIH1cclxuXHJcblxyXG4gIGVuc3VyZUl0ZW1Eb20oTCwgaSkge1xyXG4gICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgIHdoaWxlIChyb3cubGVuZ3RoIDw9IGkpIHJvdy5wdXNoKG51bGwpO1xyXG4gICAgaWYgKCFyb3dbaV0pIHtcclxuICAgICAgY29uc3QgZGl2ID0gdGhpcy5kb20oJ2RpdicsIFRvb2xzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7Jyk7XHJcbiAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgICByb3dbaV0gPSBkaXY7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93W2ldO1xyXG4gIH1cclxuXHJcbiAgcGFpbnRJdGVtRG9tKGRpdiwgTCwgaSwgaXQsIGtpbmQsIGlzUmVhbCA9IHRydWUpIHtcclxuICAgIGNvbnN0IHMgPSBkaXYuc3R5bGU7XHJcbiAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vIFBvc2ljacOzblxyXG4gICAgcy5sZWZ0ICAgPSBpdC56b25lLnggKyAncHgnO1xyXG4gICAgcy50b3AgICAgPSBpdC56b25lLnkgKyAncHgnO1xyXG4gICAgcy53aWR0aCAgPSBpdC56b25lLncgKyAncHgnO1xyXG4gICAgcy5oZWlnaHQgPSAoaXQuem9uZS5oIC0gMikgKyAncHgnO1xyXG5cclxuICAgIC8vIFRleHRvXHJcbiAgICBkaXYudGV4dENvbnRlbnQgPSBpc1JlYWwgPyBpdC5sYWJlbCA6ICcnO1xyXG5cclxuICAgIC8vIEVzdGFkb3NcclxuICAgIGNvbnN0IHNlbGVjdGVkICAgPSBpc1JlYWwgJiYgdGhpcy52YWx1ZVtMXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWVbTF0gPT09IGl0LmtleTtcclxuICAgIGNvbnN0IGluRm9jdXNMdmwgPSB0aGlzLmZvY3VzZWQgJiYgKHRoaXMuZm9jdXNMZXZlbCA9PT0gTCk7XHJcbiAgICBjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgKHRoaXMuZm9jdXNQYXRoW0xdID09PSBpdC5rZXkpO1xyXG4gICAgY29uc3QgaXNIb3ZlciAgICA9IGlzUmVhbCAmJiAodGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJiB0aGlzLmhvdmVyLmluZGV4ID09PSBpKTtcclxuXHJcbiAgICAvLyBFc3RpbG9zIGJhc2VcclxuICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICBzLmNvbG9yICAgICAgPSBjYy50ZXh0O1xyXG4gICAgcy5ib3JkZXIgICAgID0gJzFweCBzb2xpZCAnICsgY2MuYm9yZGVyO1xyXG4gICAgcy50ZXh0QWxpZ24gID0ga2luZCA9PT0gJ21hcCcgPyAnY2VudGVyJyA6ICdsZWZ0JztcclxuXHJcbiAgICAvLyBQcmlvcmlkYWQgdmlzdWFsOiBzZWxlY2Npb25hZG8gPiBmb2NvID4gaG92ZXIgPiBiYXNlXHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgIH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG4gICAgcy5vcGFjaXR5ID0gaXNSZWFsID8gJzEnIDogJzAnO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuICByU2l6ZSgpIHtcclxuICAgIHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoKSB7XHJcbiAgICB0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcbiAgICB0aGlzLmxheW91dExldmVscygpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG4gIF90b0xvY2FsKGUpIHtcclxuICAgIGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICBjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG4gICAgcmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcbiAgfVxyXG5cclxuICBfaGl0VGVzdChteCwgbXkpIHtcclxuICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgIGNvbnN0IHogPSBsdmwuem9uZTsgIC8vIHggeSB3IHlhIGluY2x1eWVuIGNvbnRlbnRYXHJcbiAgICBpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmxpbmVILCB3OiB6LncsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgaWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZXVwJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAoT3BjaW9uYWwpIHRlY2xhZG86IGludGVncmFyIG5hdmVnYWNpw7NuIGVuIEd1aSB5IHJlZW52aWFyIGFxdcOtIHNpIHNlIGRlc2VhXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICAvLyDinIUgQWN0dWFsaXphIG9iamV0byBlbmxhemFkbyAoc2kgZXhpc3RlKSB5IGRpc3BhcmEgY2FsbGJhY2tzIOKAnGNsw6FzaWNvc+KAnVxyXG4gICAgdGhpcy5zZW5kKG5ld1BhdGgpOyAvLyBlc2NyaWJlIGVuIG9iamVjdExpbmtbb2JqZWN0S2V5XSBzaSBoYXkgcmVmZXJlbmNpYVxyXG4gICAgdGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gPT09PT09PSBBUEkgcMO6YmxpY2EgPT09PT09PVxyXG4gIHNldFZhbHVlKHBhdGgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJlZSh0cmVlKSB7XHJcbiAgICB0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG4gICAgLy8gcmVjYWxjdWxhciBsZWFmTWF4IGVuIHByw7N4aW1hIHBhc2FkYVxyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBQdWJsaWNhY2nDs24gZGUgYWx0dXJhID09PT09PT1cclxuICBfY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpIHtcclxuICAgIGxldCBjID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBpKyspIGlmICh0aGlzLmxldmVsc1tpXS50eXBlID09PSAnbWFwJykgYysrO1xyXG4gICAgcmV0dXJuIGM7XHJcbiAgfVxyXG5cclxuICBfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcbiAgICByZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09ICdsaXN0JyA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuICB9XHJcblxyXG4gIF9wdWJsaXNoSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcbiAgICBjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuICAgIGNvbnN0IGxlYWZIICA9IGxlYWZMZW4gKiB0aGlzLmxpbmVIO1xyXG4gICAgY29uc3QgaW50ZXJIID0gaW50ZXIgKiAodGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXApO1xyXG4gICAgY29uc3QgdG90YWxIID0gaW50ZXJIICsgKGludGVyID8gdGhpcy5sZXZlbEdhcCA6IDApICsgbGVhZkg7XHJcblxyXG4gICAgLy8gQWN0dWFsaXphIG3DqXRyaWNhcyBkZWwgcHJvdG8gKGxvIHF1ZSBzdW1hIGVsIEdVSSlcclxuICAgIHRoaXMuaCA9IHRvdGFsSDtcclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuXHJcbiAgICAvLyBBdmlzYXIgYWwgR1VJIHkgcmVmcmVzY2FyIHpvbmFzXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0VBQUE7RUFDQTtFQUNBO0FBQ0E7QUFDWSxRQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLE1BQU0sQ0FBQyxHQUFHO0VBQ1YsRUFBRSxF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UUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUMzQixNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUN6QztFQUNBO0VBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUU7RUFDdEIsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7RUFDdEIsUUFBUSxPQUFPLEtBQUssQ0FBQztFQUNyQixPQUFPO0FBQ1A7RUFDQSxNQUFNLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztFQUM5QixNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0VBQzFCLEtBQUs7QUFDTDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMvQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQzlDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUM3QztFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxRCxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7RUFDdkIsTUFBTSxJQUFJLENB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QyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztFQUNyQixHQUFHO0FBQ0g7RUFDQSxFQUFFLFlBQVksRUFBRSxZQUFZO0VBQzVCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7RUFDeEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRTtFQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztFQUN0RCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsRUFBRSxVQUFVLElBQUksRUFBRTtFQUM3QixJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7RUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7RUFDeEMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7RUFDbkMsSUFBSSxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0VBQ3JDLEdBQUc7QUFDSDtFQUNBLEVBQUUsVUFBVSxFQUFFLFlB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QUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7RUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztFQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0VBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFL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Q0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7RUFDcEosUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDcEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNySDtFQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FB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QUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pIO0VBQ0E7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7RUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtFQUNBO0FBQ0E7RUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtFQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7RUFDQSxTQUFTLE1BQU07RUFDZjtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvRixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwSTtFQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7RUFDL0IsU0FBUztBQUNUO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksYUFBYSxFQUFFLFlBQVk7QUFDL0I7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNwQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztFQUNoSixRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDdkMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDbkIsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQzNCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN4QixRQUFXLElBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBSztFQUM1RCxRQUFRLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUM7RUFDakQsUUFBUSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7RUFDdkI7RUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0VBQ0EsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2QixZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUM5QixZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0VBQ2pDLFlBQVksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNoRDtFQUNBLFlBQVksRUFBRSxHQUFHO0VBQ2pCLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDM0MsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHO0VBQ3ZELGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDM0MsYUFBYSxDQUFDO0VBQ2Q7RUFDQSxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RDtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCO0VBQ0EsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsZ0JBQWdCLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDMUIsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3RELGlCQUFpQjtBQUNqQjtFQUNBLGdCQUFnQixJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0c7RUFDQSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNELGdCQUFnQixDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbko7RUFDQSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUg7RUFDQSxhQUFhO0VBQ2IsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztFQUM1QixZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFFaEMsU0FBUztBQUlUO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDdkI7RUFDQTtFQUNBLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDakcsUUFBUSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JJO0VBQ0EsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQy9FLFFBQVEsQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN4STtFQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNoRyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ25HLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzlJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzlJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLG9GQUFvRixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQy9LO0FBQ0E7RUFDQSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUc7RUFDQSxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQzFCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtBQUNyQztFQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDcEI7RUFDQSxRQUFRLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQztFQUNwQztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLDRGQUE0RixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7RUFDak8sUUFBUSxPQUFPLElBQUk7RUFDbkIsWUFBWSxLQUFLLE1BQU07RUFDdkIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO0VBQzNGLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssUUFBUTtFQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7RUFDNUYsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxLQUFLO0VBQ3RCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztFQUN6RixZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLEtBQUs7RUFDdEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLG1GQUFtRixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0VBQ3pKLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssUUFBUTtFQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsbUZBQW1GLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7RUFDNUosWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxRQUFRO0VBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztFQUM1RixZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLE1BQU07RUFDdkIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLHdKQUF3SixDQUFDLEtBQUssQ0FBQztFQUN2TSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSw0S0FBNEssQ0FBQztFQUMvTCxZQUFZLE1BQU07RUFDbEIsU0FBUztFQUNULFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQztFQUM1QixRQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksVUFBVSxDQUFDLENBQUM7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtFQUNBLElBQUksV0FBVyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsQ0FBQztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLENBQUM7QUFDZDtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7RUFDQSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0VBQ0EsSUFBSSxXQUFXLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7RUFDQSxFQUFDO0FBQ0Q7RUFDQSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDWjtBQUNZLFFBQUMsS0FBSyxHQUFHOztFQ3YzQnJCO0FBQ0E7QUFDQTtFQUNPLE1BQU0sS0FBSyxDQUFDO0FBQ25CO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLE9BQU8sU0FBUyxFQUFFLElBQUksR0FBRztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUNsQjtFQUNBLFFBQVEsUUFBUSxJQUFJO0VBQ3BCLFlBQVksS0FBSyxLQUFLO0VBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBRztFQUMzRCxZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLEtBQUs7RUFDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFHO0VBQ3ZELFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssS0FBSztFQUN0QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUc7RUFDeEQsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxLQUFLO0VBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBRztFQUN2RCxZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssS0FBSztFQUNsQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsRUFBRSwwQkFBMEIsRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7RUFDOUcsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxNQUFNO0VBQ3ZCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFHO0VBQy9ILFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssTUFBTTtFQUN2QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBRztFQUM3RixZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLElBQUk7RUFDckIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBRztFQUNoRyxZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLE9BQU87RUFDeEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFHO0VBQ3hHLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssTUFBTTtFQUN2QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7RUFDbEYsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxLQUFLO0VBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7RUFDeEYsWUFBWSxNQUFNO0FBQ2xCO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLENBQUM7QUFDaEI7RUFDQSxLQUFLO0FBQ0w7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLE9BQU8sTUFBTSxDQUFDLGtCQUFrQixLQUFLLFVBQVUsRUFBRTtFQUM3RCxZQUFZLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsMkJBQTBCO0VBQ3hFLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSTtBQUNaO0VBQ0EsU0FBUyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUU7QUFDaEM7RUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHO0VBQzVCLGdCQUFnQixzQkFBc0IsRUFBRSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUs7RUFDM0QsZ0JBQWdCLFFBQVEsRUFBRSxLQUFLO0VBQy9CO0VBQ0EsYUFBYSxDQUFDO0FBQ2Q7RUFDQSxZQUFZLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUU7QUFDbkQ7RUFDQTtFQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxHQUFFO0VBQ3JFLFlBQVksTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFFO0VBQ2xEO0FBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxJQUFJO0FBQ25DO0VBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEY7RUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7RUFDbEYsWUFBWSxNQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0VBQy9FLFlBQVksTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUM1QztFQUNBLFlBQVksSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxHQUFFO0VBQzlFLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksR0FBRTtFQUN2RixpQkFBaUIsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLEdBQUU7QUFDMUM7RUFDQSxZQUFZLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUU7QUFDeEM7RUFDQSxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFNO0FBQzdDO0VBQ0EsZ0JBQWdCLE9BQU8sSUFBSTtFQUMzQixvQkFBb0IsS0FBSyxPQUFPO0VBQ2hDLHdCQUF3QixJQUFJLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQztFQUM1Qyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sR0FBRyxXQUFXO0VBQ2hELDRCQUE0QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRTtFQUM1RSwwQkFBeUI7RUFDekIsd0JBQXdCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsUUFBTztFQUN6QyxvQkFBb0IsTUFBTTtFQUMxQixvQkFBb0IsS0FBSyxNQUFNO0VBQy9CLHdCQUF3QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUU7RUFDMUYsb0JBQW9CLE1BQU07RUFDMUIsb0JBQW9CO0VBQ3BCLHdCQUF3QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRTtFQUM1RSxvQkFBb0IsTUFBTTtFQUMxQixpQkFBaUI7QUFDakI7RUFDQSxjQUFhO0FBQ2I7RUFDQSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkI7RUFDQSxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUU7QUFDM0Q7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxDQUFDLE9BQU8sMEJBQTBCLEVBQUUsT0FBTyxHQUFHO0VBQzlDLFFBQVEsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSztFQUN4QyxZQUFZLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7RUFDMUQsWUFBWSxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztFQUNoQyxZQUFZLEtBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztFQUM5QyxZQUFZLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUs7RUFDeEMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQzNDLGlCQUFpQixPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDakYsaUJBQWlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtFQUNBLFlBQVksS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxNQUFNO0VBQ25ELGdCQUFnQixPQUFPO0VBQ3ZCLG9CQUFvQixDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSztFQUNuRCx3QkFBd0IsT0FBTztFQUMvQiw0QkFBNEIsT0FBTyxFQUFFO0VBQ3JDLGdDQUFnQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSztFQUN6RCxvQ0FBb0MsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ2xELGlDQUFpQyxDQUFDO0VBQ2xDLHlCQUF5QixDQUFDO0VBQzFCLHFCQUFxQixDQUFDO0VBQ3RCLGlCQUFpQixDQUFDO0VBQ2xCLGFBQWEsQ0FBQyxDQUFDO0FBQ2Y7RUFDQSxZQUFZLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUMxQixTQUFTLENBQUM7RUFDVixLQUFLO0FBQ0w7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxhQUFhLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQ2hDO0VBQ0EsUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksT0FBTyxNQUFNLENBQUMsa0JBQWtCLEtBQUssVUFBVSxFQUFFO0VBQzdELFlBQVksTUFBTSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQywyQkFBMEI7RUFDeEUsWUFBWSxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQzNCLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSTtBQUNaO0VBQ0EsWUFBWSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUU7QUFDbkM7RUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHO0VBQzVCLGdCQUFnQixhQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPO0VBQ2hELGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO0VBQ2xDLGFBQWEsQ0FBQztBQUNkO0VBQ0EsWUFBWSxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxHQUFFO0VBQ25ELFlBQVksT0FBTyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFDO0VBQ3pFLFlBQVksT0FBTyxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xGO0FBQ0E7RUFDQTtFQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDdEU7RUFDQSxZQUFZLElBQUksT0FBTyxHQUFHLE1BQU07QUFDaEM7RUFDQTtFQUNBLFlBQVksTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdkQ7RUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQy9FO0VBQ0E7RUFDQSxZQUFZLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQztFQUNBO0VBQ0EsWUFBWSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvQjtFQUNBLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNuQjtFQUNBLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQjtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTywwQkFBMEIsRUFBRSxPQUFPLEdBQUc7RUFDakQsUUFBUSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLO0VBQ3hDLFlBQVksTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsRCxZQUFZLENBQUMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxjQUFhO0VBQy9ELFlBQVksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7RUFDOUUsWUFBWSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxHQUFFO0FBQ2hEO0VBQ0EsWUFBWSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU07RUFDOUMsZ0JBQWdCLE9BQU87RUFDdkIsb0JBQW9CLFVBQVUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRTtFQUN6RSxrQkFBaUI7RUFDakIsYUFBYSxFQUFDO0VBQ2QsWUFBWSxDQUFDLENBQUMsS0FBSyxHQUFFO0VBQ3JCLFNBQVMsQ0FBQztFQUNWLEtBQUs7QUFDTDtBQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLGFBQWEsU0FBUyxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJO0VBQ1o7RUFDQSxZQUFZLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7RUFDOUQsWUFBWSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7RUFDN0IsWUFBWSxXQUFXLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRTtFQUN2RCxnQkFBZ0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7RUFDbkQsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDakMsYUFBYTtBQUNiO0VBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQztFQUM5QixZQUFZLE9BQU8sS0FBSyxDQUFDO0FBQ3pCO0VBQ0EsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ25CO0VBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsU0FBUztFQUNUO0VBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0E7O0VDalFPLE1BQU0sRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQzdCO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNiLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNkO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNiLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDYixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNkO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEIsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sR0FBRztBQUMzQjtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7RUFDbkIsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztFQUNuQixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sR0FBRztBQUN6QjtFQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUMzQztFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEdBQUc7QUFDWDtFQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN4RDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0M7RUFDQSxFQUFFLEtBQUssS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEM7RUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2Y7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDZCxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0VBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtFQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7RUFDQSxFQUFFLFNBQVMs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QUFDLENBQUMsQ0FBQztBQUN4QztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7RUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0VBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztFQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztFQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzVCLElBQUks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SSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RSxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtFQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7RUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hELEtBQUs7QUFDTDtFQUNBLElBQUksSUFB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RyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDdEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBRztFQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0VBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVB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QUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU07RUFDckMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUU7RUFDckIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUU7QUFDdEI7RUFDQSxRQUFRLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2xDO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztFQUNBLFlBQVksR0FBRyxHQUFHLE1BQUs7RUFDdkIsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxLQUFJO0FBQy9FO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFFO0VBQ2xNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTTtFQUN0RSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FB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QUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztFQUNoRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSztFQUNyRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSztFQUNsRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztBQUN0RjtFQUNBLGFBQWE7QUFDYjtFQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxNQUFNO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUM7RUFDckIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0VBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzNCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHO0FBQ3hCO0VBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE9BQU07QUFDdEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFlBQVksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0VBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0VBQ3hELEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNsQztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUM7RUFDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDckM7RUFDQSxRQUFRLE9BQU8sSUFBSTtBQUNuQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDekIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUU7RUFDL0I7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDO0FBQ3ZDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7RUFDckIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0VBQ2xEO0VBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0VBQ0E7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztFQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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QUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztFQUN2QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxD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LElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0VBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtFQUNoQyxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7RUFDakosWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN6RDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDak9PLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDbkM7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3RCO0VBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQzdDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0M7QUFDQTtBQUNBO0VBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7RUFDbEMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUM7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQzVCLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQzNCLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUN6QjtFQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMs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QUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQzNDO0VBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDdkI7RUFDQSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtFQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7RUFDOUIsUUFBUTtBQUNSO0VBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7RUFDQSxTQUFTLE1BQU07QUFDZjtFQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7RUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0VBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDckM7RUFDQSxTQUFTLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUMvRCxTQUFTLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQ2hELFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRTtFQUM3QixTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDbEMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEMsU0FBUyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztFQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHO0VBQ3hCLE9BQU8sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztFQUN2QyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDeEMsZUFBZSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztFQUNuRDtFQUNBLE9BQU8sR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7RUFDQSxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDeEQsT0FBTyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQy9DLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3ZDLE9BQU87QUFDUDtFQUNBLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNwRDtFQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzVDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0UsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2pDO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtFQUNBLFNBQVM7RUFDVCxLQUFLO0VBQ0wsSUFBSTtFQUNKLEdBQUc7QUFDSDtFQUNBLEVBQUU7QUFDRjtFQUNBO0FBQ0E7RUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtFQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7RUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0VBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztFQUN0QztFQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7RUFDdEM7RUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7RUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtFQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQ3hCO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0VBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7RUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0VBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0M7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNmO0VBQ0EsRUFBRSxJQUFJLENBQUMsWUFBWSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVELGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsYUFBYSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM1QjtFQUNBLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0VBQzdCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDcEI7RUFDQSxLQUFLLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDdEMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUMxQztFQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzVCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFNO0VBQzFCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDOUM7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztFQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3ZCLE1BQU07RUFDTixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDaEI7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3RDLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM5QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDekIsS0FBSyxPQUFPLElBQUksQ0FBQztBQUNqQjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsV0FBVyxDQUFDLEdBQUc7QUFDaEI7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0VBQ2pCLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBSztBQUNmO0VBQ0EsS0FBYyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPO0VBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ25DLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0EsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0VBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7RUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVDO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtFQUNBO0VBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0VBQzVEO0VBQ0E7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7RUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDcEM7RUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7RUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztFQUM1QyxLQUFLLElB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LENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ2xFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0VBQ2xELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0VBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDL0Q7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0VBQzdLO0FBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtEQUFrRCxFQUFFLENBQUM7QUFDMUo7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcs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RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDM0MsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztFQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNoQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtFQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJ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LENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztFQUNuQztFQUNBLEtBQUs7RUFDTDtFQUNBOztFQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0VBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMs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QSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztFQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtFQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0VBQzFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSTtFQUM5QyxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0VBQ3JDLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFF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QU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUc7RUFDMUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RCO0VBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0VBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztFQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0VBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtFQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtFQUNBLE1BQU07QUFDTjtFQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztFQUNBLFFBQVEsSUFB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QUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0VBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtBQUN2QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDN0M7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBOztFQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztFQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7RUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87RUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7RUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0VBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFB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LElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0VBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0VBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzNELFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztFQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtFQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtFQUNBLGFBQWE7QUFDYjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7QUFDQTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7RUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0VBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUQsU0FBUztBQUNUO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFD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QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0VBQ3pEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdB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LElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztFQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7RUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7RUFDOUI7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3JEO0VBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN4RCxhQUFhO0VBQ2I7RUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7RUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0VBQ3hCO0VBQ0EsU0FBUztFQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDekQsUUFBUSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDNUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDMUM7QUFDQTtFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixZQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDNUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLEtBQUssQ0FBQztFQUNyRCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3JELFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDMUIsU0FBUztBQUNUO0VBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHO0FBQzNDO0VBQ0EsWUFBWSxDQUFDLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUNoRCxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDaEQsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDOUQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztFQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNyRjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtFQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0VBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7RUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN6RDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7RUFDckM7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0VBQ0E7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtFQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0VBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07RUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFN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WUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7RUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7RUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztFQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BDO0VBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUN0RDtFQUNBO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN6RDtFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2pDO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxHQUFFO0VBQ25DLGdCQUFnQixDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFFO0FBQ2xEO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLGdCQUFnQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxvQkFBbUI7QUFDcEQ7QUFDQTtFQUNBO0VBQ0E7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUU7QUFDckM7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQ3BDO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDOUI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQztBQUMzQztFQUNBLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7RUFDbEQsZ0JBQWdCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTTtBQUN2QztFQUNBLGdCQUFnQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksVUFBVSxnQ0FBZ0MsRUFBQztFQUNoSCxnQkFBZ0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsZ0NBQWdDLEVBQUM7RUFDdEc7RUFDQTtFQUNBLGdCQUFnQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDbkYsZ0JBQWdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxVQUFVLCtCQUErQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRTtFQUN2SDtBQUNBO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDMUIsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtFQUMvQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFFLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztFQUM1RixRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFFO0FBQzVEO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUU7RUFDaEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUNuQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDbEMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ3JFLFNBQVM7RUFDVCxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztFQUMxQixLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtFQUNBLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7RUFDMUQsYUFBYSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNoQztFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMxQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksVUFBVSxDQUFDLEVBQUU7QUFDakI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDOUI7RUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU87QUFDOUM7RUFDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7RUFDMUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUMvRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUM7RUFDckQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDO0VBQ3RELGdCQUFnQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsb0JBQW1CO0VBQzlELGdCQUFnQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3hELGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTTtFQUNsRCxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLE9BQU07RUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNyRCxhQUFhO0FBQ2I7RUFDQSxZQUFzQixJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUc7RUFDbEQsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JKO0VBQ0EsU0FBUztFQUNULGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzdCO0VBQ0EsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0VBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDL0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxvQkFBbUI7RUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDO0VBQ3ZELGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTTtFQUNsRCxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLE9BQU07RUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7RUFDcEQsYUFBYTtBQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEU7QUFDQTtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtBQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzVDO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7RUFDbEQsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDMUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDdkI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDeEQsYUFBYSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNuQjtFQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ2pELFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDMUIsWUFBWSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztFQUM3QixZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUMvQyxZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7RUFDakQsWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0VBQ3JELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztFQUNsRCxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDdEQsU0FBUztFQUNULFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtFQUNyQixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN4RCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUN4RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0I7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDNUQsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDMzBCTyxNQUFNLE9BQU8sU0FBUyxLQUFLLENBQUM7QUFDbkM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLENB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L0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BEO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzFCLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQztFQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0VBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztFQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7RUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7RUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDaEMsT0FBTztBQUNQO0VBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7RUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtB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SUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0VBQzNCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7RUFDOUI7RUFDQTtFQUNBLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3BCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtFQUNBO0VBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtFQUNBO0VBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0VBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7RUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FB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QUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDbkIsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pCO0VBQ0EsSUFBSSxRQUFRLElBQUk7RUFDaEIsTUFBTSxLQUFLLENBQUM7RUFDWjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDeEQsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDNUQsUUFBUSxNQUFNO0VBQ2QsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtFQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtFQUNBLElBQUksSUFBSSxPQUFPO0VBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0VBQzNDO0FBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtFQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsS0FBSyxHQUFHO0VBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3BDO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDbEIsR0FBRztFQUNIOztFQzdTTyxN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LENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNwQztFQUNBLEtBQUs7QUFDTDtBQUNBO0VBQ0E7O0VDakxPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDaEQ7RUFD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R0FBRyxDQUFDLENBQUM7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENB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QUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM5RjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztFQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0VBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztFQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtFQUNBLEtBQUs7RUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0VBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztFQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0VBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hDLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7RUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtFQUN6RTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7RUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7RUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0VBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7RUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxRQUFRLElBQUk7RUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztFQUMzRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBQztFQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztFQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztFQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUM5RDtFQUNBLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtFQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0VBQ2hELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0VBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFFO0VBQ3BFO0VBQ0EsWUFBWSxNQUFNO0VBQ2xCLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0E7O0VDclJBO0FBSUE7RUFDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7RUFDcEMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtFQUN0QjtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO0VBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0VBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0VBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3RCO0VBQ0E7RUFDQSxJQUFJ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QUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDN0UsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUNwRSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hHLEtBQUs7RUFDTCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzlDO0VBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2pDLE1BQWtCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ25DLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtFQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDaEQsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QztFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0VBQ3pCO0FBQ0E7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUNuRCxVQUFVLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDdEQsVUFBVSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUMvQyxVQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0VBQ2xELFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQztFQUNyQixTQUFTO0VBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDNUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQ3hDLE9BQU8sTUFBTTtFQUNiO0VBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztFQUNuQyxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzdEO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNuRDtFQUNBLFNBQVMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0VBQ2hELFNBQVMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUN4QyxVQUFVLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsVUFBVSxNQUFNLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUNqRztFQUNBLFdBQVcsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUM5RSxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQzNELFNBQVM7RUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUs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SUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN0QztFQUNBO0VBQ0EsSUFBSSxHQUFHLENBQUMsV0FBVyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUM3QztFQUNBO0VBQ0EsSUFBSSxNQUFNLFFBQVEsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO0VBQ3pGLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQy9ELElBQUksTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM5RSxJQUFJLE1BQU0sT0FBTyxNQUFNLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEY7RUFDQTtFQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzNCLElBQUksQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzNCLElBQUksQ0FBQyxDQUFDLE1BQU0sT0FBTyxZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztFQUM1QyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3REO0VBQ0E7RUFDQSxJQUFJLElBQUksUUFBUSxFQUFFO0VBQ2xCLE1BQU0sQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0VBQy9CLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0VBQzlCLEtBQUssTUFBTSxJQUFJLFVBQVUsRUFBRTtFQUMzQixNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQztFQUN2QyxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztFQUM1QixLQUFLLE1BQU0sSUFBSSxPQUFPLEVBQUU7RUFDeEIsTUFBTSxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7RUFDaEMsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDNUIsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDbkMsR0FBRztBQUNIO0VBQ0E7RUFDQSxFQUFFLEtBQUssR0FBRztFQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNsRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztFQUN2QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztFQUN4QixHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sR0FBRztFQUNYLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBO0VBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ2QsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZDLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QyxJQUFJLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUM1QixHQUFHO0FBQ0g7RUFDQSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0VBQ25CLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQy9DLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7RUFDdkIsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTO0FBQzNFO0VBQ0EsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0VBQzlCLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQ25ELFVBQVUsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDeEMsVUFBVSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJ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LElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0VBQ3BCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQ3ZDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckM7RUFDQTtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNqRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0VBQzVCLEdBQUc7RUFDSDs7QUNsWVksUUFBQyxHQUFHLEdBQUcsWUFBWTtBQUMvQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDO0VBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUN0QztFQUNBLFlBQVksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN4QixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNCO0VBQ0EsU0FBUyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQzlDO0VBQ0EsWUFBWSxHQUFHLEdBQUcsSUFBSSxDQUFDO0VBQ3ZCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUN6RDtFQUNBLFlBQVksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3hFO0VBQ0EsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLFlBQVksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDO0FBQ3hFO0VBQ0EsWUFBWSxJQUFJLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtFQUNwRSxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEM7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN0QztFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO0VBQzlCLFlBQVksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDeEI7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLFFBQVEsSUFBSTtBQUNwQjtFQUNBLFlBQVksS0FBSyxNQUFNLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ2hFLFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNwRCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDeEQsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ2xELFlBQVksS0FBSyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUM5QyxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDbEQsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ2xELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUN4RCxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDaEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ2hELFlBQVksS0FBSyxTQUFTLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ3JFLFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNsRCxZQUFZLEtBQUssV0FBVyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUN6RSxZQUFZLEtBQUssT0FBTyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUMvRCxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDcEQsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ3BELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUN4RCxZQUFZLEtBQUssT0FBTyxDQUFDLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNoRSxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDaEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ2hELFlBQVksS0FBSyxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQzlELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN4RDtFQUNBLFNBQVM7QUFDVDtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUN4QjtFQUNBLFlBQVksS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFJO0FBQ25DO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUNuRCxZQUFZLE9BQU8sQ0FBQyxDQUFDO0FBQ3JCO0VBQ0EsU0FBUztBQUNUO0VBQ0EsRUFBQztBQUNEO0VBQ08sTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFDO0VBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxRQUFPO0FBQ3RCO0VBQ0EsSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsT0FBTTtFQUM5QyxTQUFTLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLEdBQUcsUUFBTztFQUNyRCxhQUFhLElBQUksR0FBRyxTQUFRO0FBQzVCO0VBQ0EsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLFFBQU87RUFDcEMsYUFBYSxJQUFJLEdBQUcsUUFBTztBQUMzQjtFQUNBLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFFO0FBQzNEO0VBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsR0FBRyxJQUFJLEdBQUcsU0FBUTtFQUN0RCxhQUFhLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxHQUFHLElBQUksR0FBRyxPQUFNO0FBQ3pEO0VBQ0EsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsWUFBWSxNQUFNLEVBQUU7QUFDN0Q7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLFNBQVE7RUFDL0MsYUFBYSxJQUFJLEdBQUcsT0FBTTtBQUMxQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxJQUFJO0FBQ2Y7RUFDQTs7RUMzSEE7RUFDQTtFQUNBO0FBQ0E7RUFDTyxNQUFNLEdBQUcsQ0FBQztFQUNqQixFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0VBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdEI7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ2pDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7RUFDdEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDM0MsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUM7RUFDQTtBQUNBO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ3ZCO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7RUFDeEMsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztBQUM5QjtFQUNBO0VBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDO0VBQ3pFLFFBQVEsQ0FBQyxDQUFDLG9CQUFvQjtFQUM5QixRQUFRLElBQUksQ0FBQztBQUNiO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ2pFO0VBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0VBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztBQUM1QztFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNwRTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0VBQzNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2Y7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElB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QUM7QUFDdEI7RUFDQSxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0VBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2QjtFQUNBLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDOUMsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0VBQ3pDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7RUFDMUUsV0FBVztFQUNYLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDekIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztFQUN6QjtFQUNBLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7RUFDaEQsT0FBTztFQUNQLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0I7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxPQUFPO0FBQzNCO0VBQ0EsSUFBSSxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMs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QUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZEO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtFQUNYLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0VBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEM7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0VBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0VBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDaEQsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3pCLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtFQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDakQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0QsR0FBRztBQUNIO0VBQ0EsRUFBRSxJQUFJLEdBQUc7RUFDVCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUN6RCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsR0FBRztFQUNkLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3JCLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUI7RUFDQSxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXO0VBQ2hDLFVBQVUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDeEMsVUFBVSxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQzdCO0VBQ0EsTUFBTSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ25EO0VBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDekM7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtFQUNwQixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzdCLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQy9DLE9BQU8sTUFBTTtFQUNiLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQ3ZDLE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pDO0VBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDbEUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ25ELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pEO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVU7RUFDM0MsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7RUFDMUQsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN2QyxHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sR0FBRztFQUNYLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7RUFDNUIsR0FBRztBQUNIO0VBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ2QsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDbEQsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRO0VBQ3JCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDNUUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUM3QyxHQUFHO0FBQ0g7RUFDQSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUU7RUFDbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztFQUM1QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDaEIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDMUIsS0FBSztFQUNMLEdBQUc7RUFDSDs7Ozs7Ozs7Ozs7Ozs7In0= +/** + * @license + * Copyright 2010-2021 Uil.js Authors + * SPDX-License-Identifier: MIT + */ +!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?s(exports):"function"==typeof define&&define.amd?define(["exports"],s):s((t="undefined"!=typeof globalThis?globalThis:t||self).UIL={})}(this,(function(t){"use strict";const s={ui:[],dom:null,ID:null,lock:!1,wlock:!1,current:-1,needReZone:!0,needResize:!1,forceZone:!1,isEventsInit:!1,isLeave:!1,addDOMEventListeners:!0,downTime:0,prevTime:0,prevDefault:["contextmenu"],pointerEvent:["pointerdown","pointermove","pointerup"],eventOut:["pointercancel","pointerout","pointerleave"],xmlserializer:null,tmpTime:null,tmpImage:null,oldCursor:"auto",input:null,parent:null,firstImput:!0,hiddenImput:null,hiddenSizer:null,hasFocus:!1,startInput:!1,inputRange:[0,0],cursorId:0,str:"",pos:0,startX:-1,moveX:-1,debugInput:!1,isLoop:!1,listens:[],e:{type:null,clientX:0,clientY:0,keyCode:NaN,key:null,delta:0},isMobile:!1,now:null,needsUpdate:!1,getTime:function(){return self.performance&&self.performance.now?self.performance.now.bind(performance):Date.now},add:function(t){s.ui.push(t),s.getZone(t),s.isEventsInit||s.initEvents()},testMobile:function(){let t=navigator.userAgent;return!!(t.match(/Android/i)||t.match(/webOS/i)||t.match(/iPhone/i)||t.match(/iPad/i)||t.match(/iPod/i)||t.match(/BlackBerry/i)||t.match(/Windows Phone/i))},remove:function(t){let i=s.ui.indexOf(t);-1!==i&&(s.removeListen(t),s.ui.splice(i,1)),0===s.ui.length&&s.removeEvents()},initEvents:function(){if(s.isEventsInit)return;let t=document.body;s.isMobile=s.testMobile(),s.now=s.getTime(),s.isMobile?t.style.touchAction="none":t.addEventListener("wheel",s,{passive:!1}),console.log("R.addDOMEventListeners "+s.addDOMEventListeners),s.addDOMEventListeners&&(t.addEventListener("pointercancel",s),t.addEventListener("pointerleave",s),t.addEventListener("pointermove",s),t.addEventListener("pointerdown",s),t.addEventListener("pointerup",s),t.addEventListener("keydown",s,!1),t.addEventListener("keyup",s,!1)),window.addEventListener("resize",s.resize,!1),s.isEventsInit=!0,s.dom=t},removeEvents:function(){if(!s.isEventsInit)return;let t=document.body;s.isMobile||t.removeEventListener("wheel",s),s.addDOMEventListeners&&(t.removeEventListener("pointercancel",s),t.removeEventListener("pointerleave",s),t.removeEventListener("pointermove",s),t.removeEventListener("pointerdown",s),t.removeEventListener("pointerup",s),t.removeEventListener("keydown",s),t.removeEventListener("keyup",s)),window.removeEventListener("resize",s.resize),s.isEventsInit=!1},resize:function(){let t,i=s.ui.length;for(;i--;)t=s.ui[i],t.isGui&&!t.isCanvasOnly&&t.autoResize&&t.calc();s.needReZone=!0,s.needResize=!1},out:function(){console.log("im am out"),s.clearOldID()},in:function(){console.log("im am in")},fakeUp:function(){this.handleEvent({type:"pointerup"})},handleEvent:function(t){-1!==s.prevDefault.indexOf(t.type)&&t.preventDefault(),s.needResize&&s.resize(),s.findZone(s.forceZone);let i=s.e,e=!1;"keydown"===t.type&&s.keydown(t),"keyup"===t.type&&s.keyup(t),"wheel"===t.type?i.delta=t.deltaY>0?1:-1:i.delta=0;let h=t.pointerType;if(i.clientX=("touch"===h?t.pageX:t.clientX)||0,i.clientY=("touch"===h?t.pageY:t.clientY)||0,i.type=t.type,-1!==s.eventOut.indexOf(t.type)&&(e=!0,i.type="mouseup"),"pointerleave"===t.type&&(s.isLeave=!0),"pointerdown"===t.type&&(i.type="mousedown"),"pointerup"===t.type&&(i.type="mouseup"),"pointermove"===t.type&&(s.isLeave&&(s.isLeave=!1,s.resize()),i.type="mousemove"),"mousedown"===i.type){if(s.downTime=s.now(),s.downTime-s.prevTime<200)return s.selectAll(),!1;s.prevTime=s.downTime,s.forceZone=!1}"mousedown"===i.type&&s.clearInput(),"mousedown"===i.type&&(s.lock=!0),"mouseup"===i.type&&(s.lock=!1),s.isMobile&&"mousedown"===i.type&&s.findID(i),"mousemove"!==i.type||s.lock||s.findID(i),null!==s.ID&&(s.ID.isCanvasOnly&&(i.clientX=s.ID.mouse.x,i.clientY=s.ID.mouse.y),s.ID.handleEvent(i)),s.isMobile&&"mouseup"===i.type&&s.clearOldID(),e&&s.clearOldID()},findID:function(t){let i,e,h,o=s.ui.length,n=-1;for(;o--;)if(i=s.ui[o],i.isCanvasOnly?(e=i.mouse.x,h=i.mouse.y):(e=t.clientX,h=t.clientY),s.onZone(i,e,h)){n=o,n!==s.current&&(s.clearOldID(),s.current=n,s.ID=i);break}-1===n&&s.clearOldID()},clearOldID:function(){s.ID&&(s.current=-1,s.ID.reset(),s.ID=null,s.cursor())},calcUis:(t,i,e,h=!1)=>{let o,n,r,l=t.length,a=0,c=0,d=0;for(;l--;)o=t[c],c++,!h&&o.isGroup&&o.calcUis(),r=o.margin,o.zone.w=o.w,o.zone.h=o.h+r,o.autoWidth?(a=0,o.zone.x=i.x+o.dx,o.zone.y=e,e+=o.h+r,d+=o.h+r):(0===a&&(d+=o.h+r),o.zone.x=i.x+a,o.zone.y=e,n=s.getWidth(o),n?o.zone.w=o.w=n:o.fw&&(o.zone.w=o.w=o.fw),a+=o.zone.w,a>=i.w&&(e+=o.h+r,a=0));return d},findTarget:function(t,i){let e=t.length;for(;e--;)if(s.onZone(t[e],i.clientX,i.clientY))return e;return-1},findZone:function(t){if(s.needReZone||t){for(var i,e=s.ui.length;e--;)i=s.ui[e],s.getZone(i),i.isGui&&i.calcUis();s.needReZone=!1}},onZone:function(t,s,i){if(void 0===s||void 0===i)return!1;let e=t.zone,h=s-e.x,o=i-e.y,n=h>=0&&o>=0&&h<=e.w&&o<=e.h;return n?t.local.set(h,o):t.local.neg(),n},getWidth:function(t){return t.getDom().clientWidth},getZone:function(t){if(t.isCanvasOnly)return;let s=t.getDom().getBoundingClientRect();t.zone={x:s.left,y:s.top,w:s.width,h:s.height}},cursor:function(t){(t=t||"auto")!==s.oldCursor&&(document.body.style.cursor=t,s.oldCursor=t)},toCanvas:function(t,i,e,h){if(s.xmlserializer||(s.xmlserializer=new XMLSerializer),h&&null!==s.tmpTime&&(clearTimeout(s.tmpTime),s.tmpTime=null),null!==s.tmpTime)return;s.lock&&(s.tmpTime=setTimeout((function(){s.tmpTime=null}),10));let o=!1;i===t.canvas.width&&e===t.canvas.height||(o=!0),null===s.tmpImage&&(s.tmpImage=new Image);let n=s.tmpImage,r=s.xmlserializer.serializeToString(t.content),l=''+r+"";n.onload=function(){let s=t.canvas.getContext("2d");o?(t.canvas.width=i,t.canvas.height=e):s.clearRect(0,0,i,e),s.drawImage(this,0,0),t.onDraw()},n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(l),n.crossOrigin="",s.needsUpdate=!1},setHidden:function(){null===s.hiddenImput&&(s.hiddenImput=document.createElement("input"),s.hiddenImput.type="text",s.hiddenSizer=document.createElement("div"),document.body.appendChild(s.hiddenImput),document.body.appendChild(s.hiddenSizer));let t=s.debugInput?"":"opacity:0; zIndex:0;",i=s.parent.css.txtselect+"padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;"+t;s.hiddenImput.style.cssText=i+"bottom:10px;"+(s.debugInput?"":"transform:scale(0);"),s.hiddenSizer.style.cssText=i+"bottom:40px;",s.hiddenImput.style.width=s.input.clientWidth+"px",s.hiddenImput.value=s.str,s.hiddenSizer.innerHTML=s.str,s.hasFocus=!0},clearHidden:function(t){null!==s.hiddenImput&&(s.hasFocus=!1)},clickPos:function(t){let i=s.str.length,e=0,h=0;for(;i--&&(e+=s.textWidth(s.str[h]),!(e>=t));)h++;return h},upInput:function(t,i){if(null===s.parent)return!1;let e=!1;if(i){let i=s.clickPos(t);if(s.moveX=i,-1===s.startX)s.startX=i,s.cursorId=i,s.inputRange=[s.startX,s.startX];else{s.moveX!==s.startX&&(s.startX>s.moveX?s.inputRange=[s.moveX,s.startX]:s.inputRange=[s.startX,s.moveX])}e=!0}else-1!==s.startX&&(s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.startX=-1,e=!0);return e&&s.selectParent(),e},selectAll:function(){s.parent&&(s.str=s.input.textContent,s.inputRange=[0,s.str.length],s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.cursorId=s.inputRange[1],s.selectParent())},selectParent:function(){var t=s.textWidth(s.str.substring(0,s.cursorId)),i=s.textWidth(s.str.substring(0,s.inputRange[0])),e=s.textWidth(s.str.substring(s.inputRange[0],s.inputRange[1]));s.parent.select(t,i,e,s.hiddenSizer.innerHTML)},textWidth:function(t){return null===s.hiddenSizer?0:(t=t.replace(/ /g," "),s.hiddenSizer.innerHTML=t,s.hiddenSizer.clientWidth)},clearInput:function(){null!==s.parent&&(s.firstImput||s.parent.validate(!0),s.clearHidden(),s.parent.unselect(),s.input.style.background=s.parent.colors.back,s.input.style.borderColor=s.parent.colors.border,s.parent.isEdit=!1,s.input=null,s.parent=null,s.str="",s.firstImput=!0)},setInput:function(t,i){s.clearInput(),s.input=t,s.parent=i,s.input.style.background=s.parent.colors.backoff,s.input.style.borderColor=s.parent.colors.select,s.str=s.input.textContent,s.setHidden()},keydown:function(t){if(null===s.parent)return;let i=t.which;t.shiftKey,s.firstImput=!1,s.hasFocus&&(window.focus(),s.hiddenImput.focus()),s.parent.isEdit=!0,13===i?s.clearInput():s.input.isNum?t.keyCode>47&&t.keyCode<58||t.keyCode>95&&t.keyCode<106||190===t.keyCode||110===t.keyCode||8===t.keyCode||109===t.keyCode?s.hiddenImput.readOnly=!1:s.hiddenImput.readOnly=!0:s.hiddenImput.readOnly=!1},keyup:function(t){null!==s.parent&&(s.str=s.hiddenImput.value,s.parent.allEqual?s.parent.sameStr(s.str):s.input.textContent=s.str,s.cursorId=s.hiddenImput.selectionStart,s.inputRange=[s.hiddenImput.selectionStart,s.hiddenImput.selectionEnd],s.selectParent(),s.parent.validate())},loop:function(){s.isLoop&&requestAnimationFrame(s.loop),s.needsUpdate=s.update(),s.ui[0]&&s.needsUpdate&&s.ui[0].draw()},update:function(){let t=s.listens.length,i=!1;for(;t--;){s.listens[t].listening()&&(i=!0)}return i},removeListen:function(t){let i=s.listens.indexOf(t);-1!==i&&s.listens.splice(i,1),0===s.listens.length&&(s.isLoop=!1)},addListen:function(t){return-1===s.listens.indexOf(t)&&(s.listens.push(t),s.isLoop||(s.isLoop=!0,s.loop()),!0)}},i=s,e={transition:.2,frag:document.createDocumentFragment(),colorRing:null,joystick_0:null,joystick_1:null,circular:null,knob:null,pad2d:null,svgns:"http://www.w3.org/2000/svg",links:"http://www.w3.org/1999/xlink",htmls:"http://www.w3.org/1999/xhtml",DOM_SIZE:["height","width","top","left","bottom","right","margin-left","margin-right","margin-top","margin-bottom"],SVG_TYPE_D:["pattern","defs","transform","stop","animate","radialGradient","linearGradient","animateMotion","use","filter","feColorMatrix"],SVG_TYPE_G:["svg","rect","circle","path","polygon","text","g","line","foreignObject"],PI:Math.PI,TwoPI:2*Math.PI,pi90:.5*Math.PI,pi60:Math.PI/3,torad:Math.PI/180,todeg:180/Math.PI,clamp:(t,s,i)=>t=(t=ti?i:t,isDivid:t=>.5*t===Math.floor(.5*t),size:{w:240,h:20,p:30,s:8},defineColor:(t,s=e.colors)=>{let i={...s},h=["fontFamily","fontWeight","fontShadow","fontSize"],o=!1;t.font&&(t.fontFamily=t.font),t.shadow&&(t.fontShadow=t.shadow),t.weight&&(t.fontWeight=t.weight),t.fontColor&&(t.text=t.fontColor),t.color&&(t.text=t.color),t.text&&(i.text=t.text,t.fontColor||t.color||(i.title=e.ColorLuma(t.text,-.25),i.titleoff=e.ColorLuma(t.text,-.5)),i.textOver=e.ColorLuma(t.text,.25),i.textSelect=e.ColorLuma(t.text,.5)),t.button&&(i.button=t.button,i.border=e.ColorLuma(t.button,.1),i.overoff=e.ColorLuma(t.button,.2)),t.select&&(i.select=t.select,i.over=e.ColorLuma(t.select,-.1)),t.itemBg&&(t.back=t.itemBg),t.back&&(i.back=t.back,i.backoff=e.ColorLuma(t.back,-.1)),t.fontSelect&&(i.textSelect=t.fontSelect),t.groupBorder&&(i.gborder=t.groupBorder),t.bgOver&&(i.backgroundOver=t.bgOver);for(let s in i)void 0!==t[s]&&(i[s]=t[s]);for(let s in t)-1!==h.indexOf(s)&&(o=!0);return o&&e.defineText(i),i},colors:{sx:4,sy:2,radius:2,showOver:1,content:"none",background:"rgba(50,50,50,0.15)",backgroundOver:"rgba(50,50,50,0.3)",title:"#CCC",titleoff:"#BBB",text:"#DDD",textOver:"#EEE",textSelect:"#FFF",back:"rgba(0,0,0,0.2)",backoff:"rgba(0,0,0,0.3)",border:"#4c4c4c",borderSize:1,gborder:"none",groups:"none",button:"#3c3c3c",overoff:"#5c5c5c",over:"#024699",select:"#308AFF",action:"#FF3300",fontFamily:"Consolas, monospace",fontWeight:"normal",fontShadow:"none",fontSize:12,joyOver:"rgba(48,138,255,0.25)",joyOut:"rgba(100,100,100,0.5)",joySelect:"#308AFF",hide:"rgba(0,0,0,0)"},css:{basic:"position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; -o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;",button:"display:flex; align-items:center; justify-content:center; text-align:center;",middle:"display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;"},svgs:{g1:"M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z",g2:"M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z",group:"M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z",arrow:"M 3 8 L 8 5 3 2 3 8 Z",arrowDown:"M 5 8 L 8 3 2 3 5 8 Z",arrowUp:"M 5 2 L 2 7 8 7 5 2 Z",solid:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z",body:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z",vehicle:"M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z",articulation:"M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z",character:"M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z",terrain:"M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z",joint:"M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z",ray:"M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z",collision:"M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z",map:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",material:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",texture:"M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z",object:"M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z",none:"M 9 5 L 5 5 5 9 9 9 9 5 Z",cursor:"M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z",load:"M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z",save:"M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z",extern:"M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z"},rezone(){i.needReZone=!0},getImput:function(){return!!i.input},setStyle:function(t){for(var s in t)e.colors[s]&&(e.colors[s]=t[s]);e.setText()},defineText:function(t){e.setText(t.fontSize,t.text,t.fontFamily,t.fontShadow,t.fontWeight)},setText:function(t,s,i,h,o){let n=e.colors;void 0===i&&(i=n.fontFamily),void 0===t&&(t=n.fontSize),void 0===h&&(h=n.fontShadow),void 0===o&&(o=n.fontWeight),void 0===s&&(s=n.text),isNaN(t)?-1===t.search("em")&&(t+="px"):t+="px",e.css.txt=e.css.basic+e.css.middle+" font-family:"+i+"; font-weight:"+o+"; font-size:"+t+"; color:"+n.text+"; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;","none"!==h&&(e.css.txt+=" text-shadow: 1px 1px 1px "+h+";"),e.css.txtselect=e.css.txt+"padding:0px 4px; border:1px dashed "+n.border+";",e.css.item=e.css.txt+"padding:0px 4px; position:relative; margin-bottom:1px; "},cloneCss:function(){return{...e.css}},clone:function(t){return t.cloneNode(!0)},setSvg:function(t,s,i,e,h){-1===e?t.setAttributeNS(null,s,i):void 0!==h?t.childNodes[e||0].childNodes[h||0].setAttributeNS(null,s,i):t.childNodes[e||0].setAttributeNS(null,s,i)},setCss:function(t,s){for(let i in s)-1!==e.DOM_SIZE.indexOf(i)?t.style[i]=s[i]+"px":t.style[i]=s[i]},set:function(t,s){for(let i in s)"txt"===i&&(t.textContent=s[i]),"link"===i?t.setAttributeNS(e.links,"xlink:href",s[i]):t.setAttributeNS(null,i,s[i])},get:function(t,s){if(void 0===s)return t;if(!isNaN(s))return t.childNodes[s];if(s instanceof Array){if(2===s.length)return t.childNodes[s[0]].childNodes[s[1]];if(3===s.length)return t.childNodes[s[0]].childNodes[s[1]].childNodes[s[2]]}},dom:function(t,s,i,h,o){return t=t||"div",-1!==e.SVG_TYPE_D.indexOf(t)||-1!==e.SVG_TYPE_G.indexOf(t)?"svg"===t?(h=document.createElementNS(e.svgns,"svg"),e.set(h,i)):(void 0===h&&(h=document.createElementNS(e.svgns,"svg")),e.addAttributes(h,t,i,o)):h=void 0===h?document.createElementNS(e.htmls,t):h.appendChild(document.createElementNS(e.htmls,t)),s&&(h.style.cssText=s),void 0===o?h:h.childNodes[o||0]},addAttributes:function(t,s,i,h){let o=document.createElementNS(e.svgns,s);return e.set(o,i),e.get(t,h).appendChild(o),-1!==e.SVG_TYPE_G.indexOf(s)&&(o.style.pointerEvents="none"),o},clear:function(t){for(e.purge(t);t.firstChild;)t.firstChild.firstChild&&e.clear(t.firstChild),t.removeChild(t.firstChild)},purge:function(t){let s,i,h=t.attributes;if(h)for(s=h.length;s--;)i=h[s].name,"function"==typeof t[i]&&(t[i]=null);if(h=t.childNodes,h)for(s=h.length;s--;)e.purge(t.childNodes[s])},addSVGGlowEffect:function(){if(null!==document.getElementById("UILGlow"))return;let t=e.initUILEffects(),s=e.addAttributes(t,"filter",{id:"UILGlow",x:"-20%",y:"-20%",width:"140%",height:"140%"});e.addAttributes(s,"feGaussianBlur",{in:"SourceGraphic",stdDeviation:"3",result:"uilBlur"});let i=e.addAttributes(s,"feMerge",{});for(let t=0;t<=3;t++)e.addAttributes(i,"feMergeNode",{in:"uilBlur"});e.addAttributes(i,"feMergeNode",{in:"SourceGraphic"})},initUILEffects:function(){let t=document.getElementById("UILSVGEffects");return null===t&&(t=e.dom("svg",void 0,{id:"UILSVGEffects",width:"0",height:"0"}),document.body.appendChild(t)),t},ColorLuma:function(t,s){"n"===t&&(t="#000"),(t=String(t).replace(/[^0-9a-f]/gi,"")).length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),s=s||0;let i,e,h="#";for(e=0;e<3;e++)i=parseInt(t.substr(2*e,2),16),i=Math.round(Math.min(Math.max(0,i+i*s),255)).toString(16),h+=("00"+i).substr(i.length);return h},findDeepInver:function(t){return.3*t[0]+.59*t[1]+.11*t[2]<=.6},lerpColor:function(t,s,i){let e={};for(let h=0;h<3;h++)e[h]=t[h]+(s[h]-t[h])*i;return e},hexToHtml:function(t){return"#"+("000000"+(t=void 0===t?0:t).toString(16)).substr(-6)},htmlToHex:function(t){return t.toUpperCase().replace("#","0x")},u255:function(t,s){return parseInt(t.substring(s,s+2),16)/255},u16:function(t,s){return parseInt(t.substring(s,s+1),16)/15},unpack:function(t){return 7==t.length?[e.u255(t,1),e.u255(t,3),e.u255(t,5)]:4==t.length?[e.u16(t,1),e.u16(t,2),e.u16(t,3)]:void 0},p255:function(t){let s=Math.round(255*t).toString(16);return s.length<2&&(s="0"+s),s},pack:function(t){return"#"+e.p255(t[0])+e.p255(t[1])+e.p255(t[2])},htmlRgb:function(t){return"rgb("+Math.round(255*t[0])+","+Math.round(255*t[1])+","+Math.round(255*t[2])+")"},pad:function(t){return 1==t.length&&(t="0"+t),t},rgbToHex:function(t){let s=Math.round(255*t[0]).toString(16),i=Math.round(255*t[1]).toString(16),h=Math.round(255*t[2]).toString(16);return"#"+e.pad(s)+e.pad(i)+e.pad(h)},hueToRgb:function(t,s,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(s-t)*i:i<.5?s:i<2/3?t+6*(s-t)*(2/3-i):t},rgbToHsl:function(t){let s=t[0],i=t[1],e=t[2],h=Math.min(s,i,e),o=Math.max(s,i,e),n=o-h,r=0,l=0,a=(h+o)/2;return a>0&&a<1&&(l=n/(a<.5?2*a:2-2*a)),n>0&&(o==s&&o!=i&&(r+=(i-e)/n),o==i&&o!=e&&(r+=2+(e-s)/n),o==e&&o!=s&&(r+=4+(s-i)/n),r/=6),[r,l,a]},hslToRgb:function(t){let s,i,h=t[0],o=t[1],n=t[2];return 0===o?[n,n,n]:(i=n<=.5?n*(o+1):n+o-n*o,s=2*n-i,[e.hueToRgb(s,i,h+.33333),e.hueToRgb(s,i,h),e.hueToRgb(s,i,h-.33333)])},makeGradiant:function(t,s,i,h){e.dom(t,null,s,i,0);let o,n=i.childNodes[0].childNodes.length-1;for(let t=0;t0){for(a=6;a--;)r[a]=(113*r[a]+u).toFixed(2);c=" M"+r[0]+" "+r[1]+" Q"+r[2]+" "+r[3]+" "+r[4]+" "+r[5],d=[[0,g[0],1],[100,g[1],1]],e.makeGradiant("linearGradient",{id:"G"+l,x1:r[0],y1:r[1],x2:r[4],y2:r[5],gradientUnits:"userSpaceOnUse"},s,d),e.dom("path","",{d:c,"stroke-width":30,stroke:"url(#G"+l+")","stroke-linecap":"butt"},s,1)}m=n-p,g[0]=g[1]}d=[[0,"#FFFFFF",1],[50,"#FFFFFF",0],[50,"#000000",0],[100,"#000000",1]],e.makeGradiant("linearGradient",{id:"GL0",x1:0,y1:u-84.9,x2:0,y2:212.9,gradientUnits:"userSpaceOnUse"},s,d),d=[[0,"#7f7f7f",1],[50,"#7f7f7f",.5],[100,"#7f7f7f",0]],e.makeGradiant("linearGradient",{id:"GL1",x1:78.95,y1:0,x2:226,y2:0,gradientUnits:"userSpaceOnUse"},s,d),e.dom("g",null,{"transform-origin":"128px 128px",transform:"rotate(0)"},s),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"red"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL1)","stroke-width":1,stroke:"url(#GL1)"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL0)","stroke-width":1,stroke:"url(#GL0)"},s,2),e.dom("path","",{d:"M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z",fill:"none","stroke-width":2,stroke:"#000"},s,2),e.dom("circle","",{cx:128,cy:128,r:6,"stroke-width":2,stroke:"#000",fill:"none"},s),e.colorRing=s},icon:function(t,s,i){i=i||40;let h=[""];switch(t){case"logo":h[1]="";break;case"donate":h[1]="";break;case"neo":h[1]="";break;case"phy":h[1]="";break;case"config":h[1]="";break;case"github":h[1]="";break;case"save":h[1]=""}return h[2]="",h.join("\n")},logoFill_d:"\n\t\tM 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 \n\t\tL 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 \n\t\tM 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 \n\t\tQ 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z\n\t\t",logo_github:"\n\t\tM 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 \n\t\t159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 \n\t\t216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 \n\t\t166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 \n\t\t82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z\n\t\t",logo_neo:"\n\t\tM 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 \n\t\t60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 \n\t\t186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 \n\t\t67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L \n\t\t134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z\n\t\t",logo_phy:"\n\t\tM 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 \n\t\tQ 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95\n\t\t",logo_config:"\n\t\tM 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 \n\t\tL 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 \n\t\tQ 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75\n\t\t",logo_donate:"\n\t\tM 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 \n\t\t106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 \n\t\t112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 \n\t\t154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 \n\t\t194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 \n\t\tQ 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 \n\t\t83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 \n\t\t94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 \n\t\t149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M \n\t\t66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 \n\t\t72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 \n\t\t54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 \n\t\t197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 \n\t\t200.9 187.5 200.9 187.5 195.35 Z\n\t\t"};e.setText();const h=e;class o{static autoTypes(t){let s=[];switch(t){case"svg":s=[{accept:{"image/svg+xml":".svg"}}];break;case"wav":s=[{accept:{"audio/wav":".wav"}}];break;case"mp3":s=[{accept:{"audio/mpeg":".mp3"}}];break;case"mp4":s=[{accept:{"video/mp4":".mp4"}}];break;case"bin":case"hex":s=[{description:"Binary Files",accept:{"application/octet-stream":[".bin",".hex"]}}];break;case"text":s=[{description:"Text Files",accept:{"text/plain":[".txt",".text"],"text/html":[".html",".htm"]}}];break;case"json":s=[{description:"JSON Files",accept:{"application/json":[".json"]}}];break;case"js":s=[{description:"JavaScript Files",accept:{"text/javascript":[".js"]}}];break;case"image":s=[{description:"Images",accept:{"image/*":[".png",".gif",".jpeg",".jpg"]}}];break;case"icon":s=[{description:"Icons",accept:{"image/x-ico":[".ico"]}}];break;case"lut":s=[{description:"Lut",accept:{"text/plain":[".cube",".3dl"]}}]}return s}static async load(t={}){"function"!=typeof window.showOpenFilePicker&&(window.showOpenFilePicker=o.showOpenFilePickerPolyfill);try{let s=t.type||"";const i={excludeAcceptAllOption:!!s,multiple:!1};i.types=o.autoTypes(s);const e=await window.showOpenFilePicker(i),h=await e[0].getFile();if(!h)return null;let n=h.name,r=n.substring(n.lastIndexOf(".")+1,n.length);const l=["png","jpg","jpeg","mp4","webm","ogg","mp3"],a=["sea","z","hex","bvh","BVH","glb","gltf"],c=new FileReader;-1!==l.indexOf(r)?c.readAsDataURL(h):-1!==a.indexOf(r)?c.readAsArrayBuffer(h):c.readAsText(h),c.onload=function(i){let e=i.target.result;switch(s){case"image":let s=new Image;s.onload=function(){t.callback&&t.callback(s,n,r)},s.src=e;break;case"json":t.callback&&t.callback(JSON.parse(e),n,r);break;default:t.callback&&t.callback(e,n,r)}}}catch(s){console.log(s),t.always&&t.callback&&t.callback(null)}}static showOpenFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("input");i.type="file",i.multiple=t.multiple,i.accept=t.types.map((t=>t.accept)).flatMap((t=>Object.keys(t).flatMap((s=>t[s])))).join(","),i.addEventListener("change",(()=>{s([...i.files].map((t=>({getFile:async()=>new Promise((s=>{s(t)}))}))))})),i.click()}))}static async save(t={}){let s=!1;"function"!=typeof window.showSaveFilePicker&&(window.showSaveFilePicker=o.showSaveFilePickerPolyfill,s=!0);try{let i=t.type||"";const e={suggestedName:t.name||"hello",data:t.data||""};e.types=o.autoTypes(i),e.finalType=Object.keys(e.types[0].accept)[0],e.suggestedName+=e.types[0].accept[e.finalType][0];const h=await window.showSaveFilePicker(e);if(s)return;const n=await h.createWritable();let r=new Blob([e.data],{type:e.finalType});await n.write(r),await n.close()}catch(t){console.log(t)}}static showSaveFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("a");i.download=t.suggestedName||"my-file.txt";let e=new Blob([t.data],{type:t.finalType});i.href=URL.createObjectURL(e),i.addEventListener("click",(()=>{s(setTimeout((()=>URL.revokeObjectURL(i.href)),1e3))})),i.click()}))}static async getFolder(){try{const t=await window.showDirectoryPicker(),s=[];for await(const i of t.values()){const t=await i.getFile();s.push(t)}return console.log(s),s}catch(t){console.log(t)}}}class n{constructor(t=0,s=0){this.x=t,this.y=s}set(t,s){return this.x=t,this.y=s,this}divide(t){return this.x/=t.x,this.y/=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divideScalar(t){return this.multiplyScalar(1/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}angle(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t}addScalar(t){return this.x+=t,this.y+=t,this}negate(){return this.x*=-1,this.y*=-1,this}neg(){return this.x=-1,this.y=-1,this}isZero(){return 0===this.x&&0===this.y}copy(t){return this.x=t.x,this.y=t.y,this}equals(t){return t.x===this.x&&t.y===this.y}nearEquals(t,s){return t.x.toFixed(s)===this.x.toFixed(s)&&t.y.toFixed(s)===this.y.toFixed(s)}lerp(t,s){return null===t?(this.x-=this.x*s,this.y-=this.y*s):(this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s),this}}class r{constructor(t={}){this.lock=t.lock||!1,this.neverlock=!1,this.isSpace=t.isSpace||!1,this.main=t.main||null,this.isUI=t.isUI||!1,this.group=t.group||null,this.isListen=!1,this.top=0,this.ytop=0,this.dx=t.dx||0,this.isSelectable=void 0!==t.selectable&&t.selectable,this.unselectable=void 0!==t.unselect?t.unselect:this.isSelectable,this.ontop=!!t.ontop&&t.ontop,this.css=this.main?this.main.css:h.css,this.colors=h.defineColor(t,this.main?this.group?this.group.colors:this.main.colors:h.colors),this.overEffect=this.colors.showOver,this.svgs=h.svgs,this.zone={x:0,y:0,w:0,h:0,d:0},this.local=(new n).neg(),this.isCanvasOnly=!1,this.isSelect=!1,this.p=void 0!==t.p?t.p:h.size.p,this.w=this.isUI?this.main.size.w:h.size.w,void 0!==t.w&&(this.w=t.w),this.h=this.isUI?this.main.size.h:h.size.h,void 0!==t.h&&(this.h=t.h),this.isSpace?this.lock=!0:this.h=this.h<11?11:this.h,this.fw=t.fw||0,this.autoWidth=t.auto||!0,this.isOpen=!1,this.radius=t.radius||this.colors.radius,this.transition=t.transition||h.transition,this.isNumber=!1,this.noNeg=t.noNeg||!1,this.allEqual=t.allEqual||!1,this.mono=!1,this.isEdit=!1,this.simple=t.simple||!1,this.simple&&(this.sa=0),this.setSize(this.w),void 0!==t.sa&&(this.sa=t.sa),void 0!==t.sb&&(this.sb=t.sb),this.simple&&(this.sb=this.w-this.sa),this.sc=void 0===t.sc?47:t.sc,this.objectLink=null,this.isSend=!1,this.objectKey=null,this.txt=t.name||"",this.name=t.rename||this.txt,this.target=t.target||null,this.callback=void 0===t.callback?null:t.callback,this.endCallback=null,this.openCallback=void 0===t.openCallback?null:t.openCallback,this.closeCallback=void 0===t.closeCallback?null:t.closeCallback,null===this.callback&&this.isUI&&null!==this.main.callback&&(this.callback=this.group?this.group.callback:this.main.callback),this.c=[],this.s=[],this.useFlex=!!this.isUI&&this.main.useFlex;let s=this.useFlex?"display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;":"float:left;";this.c[0]=h.dom("div",this.css.basic+s+"position:relative; height:20px;"),this.s[0]=this.c[0].style,this.margin=this.colors.sy,this.mtop=0;let i=h.isDivid(this.margin);if(this.isUI&&this.margin&&(this.s[0].boxSizing="content-box",i?(this.mtop=.5*this.margin,this.s[0].borderTop=this.mtop+"px solid transparent",this.s[0].borderBottom=this.mtop+"px solid transparent"):this.s[0].borderBottom=this.margin+"px solid transparent"),this.simple||(this.c[1]=h.dom("div",this.css.txt+this.css.middle),this.s[1]=this.c[1].style,this.c[1].textContent=this.name,this.s[1].color=this.lock?this.colors.titleoff:this.colors.title),t.pos){this.s[0].position="absolute";for(let s in t.pos)this.s[0][s]=t.pos[s];this.mono=!0}t.css&&(this.s[0].cssText=t.css)}init(){this.ytop=this.top+this.mtop,this.zone.h=this.h+this.margin,this.zone.w=this.w;let t=this.s,s=this.c;t[0].height=this.h+"px",this.isUI&&(t[0].background=this.colors.background),!this.autoWidth&&this.useFlex?(t[0].flex="1 0 auto",t[0].minWidth=this.minw+"px",t[0].textAlign="center"):this.isUI&&(t[0].width="100%"),void 0!==s[1]&&this.autoWidth&&(t[1]=s[1].style,t[1].top="1px",t[1].height=this.h-2+"px");let e=h.frag;for(let i=1,h=s.length;i!==h;i++)void 0!==s[i]&&(e.appendChild(s[i]),t[i]=s[i].style);let o=null!==this.target?this.target:this.isUI?this.main.inner:document.body;this.ontop?o.insertAdjacentElement("afterbegin",s[0]):o.appendChild(s[0]),s[0].appendChild(e),this.rSize(),this.isUI||(this.c[0].style.pointerEvents="auto",i.add(this))}addTransition(){this.baseH&&this.transition&&this.isUI&&(this.c[0].style.transition="height "+this.transition+"s ease-out")}dom(t,s,i,e,o){return h.dom(t,s,i,e,o)}setSvg(t,s,i,e,o){h.setSvg(t,s,i,e,o)}setCss(t,s){h.setCss(t,s)}clamp(t,s,i){return h.clamp(t,s,i)}getColorRing(){return h.colorRing||h.makeColorRing(),h.clone(h.colorRing)}getJoystick(t){return h["joystick_"+t]||h.makeJoystick(t),h.clone(h["joystick_"+t])}getCircular(t){return h.circular||h.makeCircular(t),h.clone(h.circular)}getKnob(t){return h.knob||h.makeKnob(t),h.clone(h.knob)}getPad2d(t){return h.pad2d||h.makePad(t),h.clone(h.pad2d)}cursor(t){i.cursor(t)}update(){}reset(){}content(){return this.c[0]}getDom(){return this.c[0]}uiout(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.background)}uiover(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.backgroundOver)}rename(t){void 0!==this.c[1]&&(this.c[1].textContent=t)}listen(){return this.isListen=i.addListen(this),this}listening(){if(null===this.objectLink)return;if(this.isSend)return;if(this.isEdit)return;return this.setValue(this.objectLink[this.objectKey])}setValue(t){const s=this.value;this.isNumber?this.value=this.numValue(t):this.value=t,this.update();let i=!1;return s!==this.value&&(i=!0),i}onChange(t){if(!this.isSpace)return this.callback=t||null,this}onFinishChange(t){if(!this.isSpace)return this.callback=null,this.endCallback=t,this}onOpen(t){return this.openCallback=t,this}onClose(t){return this.closeCallback=t,this}send(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.isSend=!0,null!==this.objectLink&&(this.objectLink[this.objectKey]=t),this.callback&&this.callback(t,this.objectKey),this.isSend=!1}sendEnd(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.endCallback&&this.endCallback(t),null!==this.objectLink&&(this.objectLink[this.objectKey]=t)}dispose(){this.isListen&&i.removeListen(this),h.clear(this.c[0]),null!==this.target?null!==this.group?this.group.clearOne(this):this.target.removeChild(this.c[0]):this.isUI?this.main.clearOne(this):document.body.removeChild(this.c[0]),this.isUI||i.remove(this),this.c=null,this.s=null,this.callback=null,this.target=null,this.isListen=!1}clear(){}getWidth(){let t=i.getWidth(this);t&&(this.w=t)}setSize(t){if(this.autoWidth)if(this.w=t,this.simple)this.sb=this.w-this.sa;else{let t=this.w*(this.p/100);this.sa=Math.floor(t+8),this.sb=Math.floor(this.w-t-16)}}rSize(){this.autoWidth&&(this.isUI||(this.s[0].width=this.w+"px"),this.simple||(this.s[1].width=this.sa+"px"))}setTypeNumber(t){let s;switch(this.isNumber=!0,this.value=0,void 0!==t.value&&("string"==typeof t.value?this.value=1*t.value:this.value=t.value),this.min=void 0===t.min?-1/0:t.min,this.max=void 0===t.max?1/0:t.max,this.precision=void 0===t.precision?2:t.precision,this.precision){case 0:s=1;break;case 1:s=.1;break;case 2:s=.01;break;case 3:s=.001;break;case 4:s=1e-4;break;case 5:s=1e-5;break;case 6:s=1e-6}this.step=void 0===t.step?s:t.step,this.range=this.max-this.min,this.value=this.numValue(this.value)}numValue(t){return this.noNeg&&(t=Math.abs(t)),1*Math.min(this.max,Math.max(this.min,t)).toFixed(this.precision)}handleEvent(t){if(!this.lock)return this.neverlock&&(i.lock=!1),this[t.type]?this[t.type](t):console.error(t.type,"this type of event no existe !")}wheel(t){return!1}mousedown(t){return!1}mousemove(t){return!1}mouseup(t){return!1}keydown(t){return!1}keyup(t){return!1}setReferency(t,s){this.objectLink=t,this.objectKey=s}display(t=!1){this.s[0].visibility=t?"visible":"hidden"}open(){this.isOpen||(this.isOpen=!0,i.needResize=!0,this.openCallback&&this.openCallback())}close(){this.isOpen&&(this.isOpen=!1,i.needResize=!0,this.closeCallback&&this.closeCallback())}needZone(){i.needReZone=!0}rezone(){i.needReZone=!0}select(){}unselect(){}setInput(t){i.setInput(t,this)}upInput(t,s){return i.upInput(t,s)}selected(t){this.isSelect=t||!1}}class l extends r{constructor(t={}){super(t),this.value=t.value||!1,this.model=void 0!==t.mode?t.mode:0,this.onName=t.rename||this.txt,t.onName&&(t.onname=t.onName),t.onname&&(this.onName=t.onname),this.inh=t.inh||Math.floor(.8*this.h),this.inw=t.inw||36;let s=this.colors;if(0===this.model){let t=Math.floor(.5*this.h)-.5*(this.inh-2);this.c[2]=this.dom("div",this.css.basic+"background:"+s.inputBg+"; height:"+(this.inh-2)+"px; width:"+this.inw+"px; top:"+t+"px; border-radius:10px; border:2px solid "+s.back),this.c[3]=this.dom("div",this.css.basic+"height:"+(this.inh-6)+"px; width:16px; top:"+(t+2)+"px; border-radius:10px; background:"+s.button+";")}else this.p=0,void 0!==this.c[1]&&(this.c[1].textContent=""),this.c[2]=this.dom("div",this.css.txt+this.css.button+"top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.borderSize+"px solid "+s.border+"; border-radius:"+this.radius+"px;");this.stat=-1,this.init(),this.update()}mousedown(t){return this.value=!this.value,this.update(!0),this.mousemove(t)}mousemove(t){return this.cursor("pointer"),this.mode(!0)}reset(){return this.cursor(),this.mode()}mode(t){let s,i=!1,e=this.colors,h=this.s,o=this.value;if(s=t?o?4:3:o?2:1,this.stat!==s){if(this.stat=s,0!==this.model){switch(s){case 1:h[2].color=e.text,h[2].background=e.button;break;case 2:h[2].color=e.textSelect,h[2].background=e.select;break;case 3:h[2].color=e.textOver,h[2].background=e.overoff;break;case 4:h[2].color=e.textOver,h[2].background=e.over}this.c[2].innerHTML=o?this.onName:this.name}else{switch(s){case 1:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.button;break;case 2:h[2].background=h[2].borderColor=e.back,h[3].background=e.textOver;break;case 3:h[2].background=h[2].borderColor=e.back,h[3].background=e.overoff;break;case 4:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.textSelect}h[3].marginLeft=o?"17px":"2px",this.c[1].textContent=o?this.onName:this.name}i=!0}return i}update(t){this.mode(),t&&this.send()}rSize(){super.rSize();let t=this.s,s=this.w-10-this.inw;0===this.model?(t[2].left=s+"px",t[3].left=s+"px"):(t[2].left=this.sa+"px",t[2].width=this.sb+"px")}}class a extends r{constructor(t={}){super(t),this.value="",void 0!==t.value&&(this.value=t.value),this.values=t.value||this.txt,t.values&&(this.values=t.values),t.values||t.value||(this.txt=""),this.onName=t.onName||null,this.on=!1,this.bw=t.forceWidth||0,t.bw&&(this.bw=t.bw),this.space=t.space||3,"string"==typeof this.values&&(this.values=[this.values]),this.isDown=!1,this.neverlock=!0,this.res=0,this.lng=this.values.length,this.tmp=[],this.stat=[];let s,i=this.colors;for(let t=0;te[i][0]&&s.x0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.text,this.setSvg(this.c[3],"stroke",s,1);break;case 1:this.s[2].color=i.textOver,this.setSvg(this.c[3],"stroke",i.backoff,0),s=this.model>0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.textOver,this.setSvg(this.c[3],"stroke",s,1)}return this.cmode=t,!0}reset(){this.isDown=!1}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"circular"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;if(s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=s.angle()-this.pi90,this.r=(this.r%this.twoPi+this.twoPi)%this.twoPi,null!==this.oldr){let t=this.r-this.oldr;this.r=Math.abs(t)>Math.PI?this.oldr:this.r,t>6&&(this.r=0),t<-6&&(this.r=this.twoPi)}let i=1/this.twoPi,e=this.r*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=~~(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("circular"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:sMath.PI?1:0)+" 1 "+i+","+e}update(t){if(this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range,this.setSvg(this.c[3],"d",this.makePath(),1),this.model>0){let t=this.colors,s=h.pack(h.lerpColor(h.unpack(h.ColorLuma(t.text,-.75)),h.unpack(t.text),this.percent));this.setSvg(this.c[3],"stroke",s,1)}t&&this.send()}}class d extends r{constructor(t={}){super(t),this.ctype=t.ctype||"hex",this.wfixe=256,this.cw=this.sb>256?256:this.sb,null!=t.cw&&(this.cw=t.cw),this.side=t.side||"down",this.up="down"===this.side?0:1,this.baseH=this.h,this.offset=new n,this.decal=new n,this.pp=new n;let s=this.colors;this.c[2]=this.dom("div",`${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${s.borderSize}px solid ${s.border};`),this.c[0].style.display="block",this.c[3]=this.getColorRing(),this.c[3].style.visibility="hidden",this.hsl=null,this.value="#ffffff",void 0!==t.value&&(t.value instanceof Array?this.value=h.rgbToHex(t.value):isNaN(t.value)?this.value=t.value:this.value=h.hexToHtml(t.value)),this.bcolor=null,this.isDown=!1,this.fistDown=!1,this.notext=t.notext||!1,this.tr=98,this.tsl=Math.sqrt(3)*this.tr,this.hue=0,this.d=256,this.init(),this.setColor(this.value),void 0!==t.open&&this.open()}testZone(t,s){let i=this.local;return-1===i.x&&-1===i.y?"":this.up&&this.isOpen?i.y>this.wfixe?"title":"color":i.ythis.tr)e=(c+u.pi90)/u.TwoPI,this.hue=(e+1)%1,this.setHSL([(e+1)%1,this.hsl[1],this.hsl[2]]);else{l=s.x*this.ratio,a=s.y*this.ratio;let t=this.hue*u.TwoPI+u.PI;t<0&&(t+=2*u.PI),r=Math.atan2(-a,l),r<0&&(r+=2*u.PI);let i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,h=.5*this.tr,c=Math.tan(e)*h,d=Math.sqrt(l*l+a*a),p=Math.sqrt(h*h+c*c);if(d>p){let s=Math.tan(e)*d,o=Math.atan(s/p);o>u.pi60?o=u.pi60:o<-u.pi60&&(o=-u.pi60),r+=o-e,i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,c=Math.tan(e)*h,d=p=Math.sqrt(h*h+c*c)}n=Math.sin(i)*d/this.tsl+.5;let m=1-2*Math.abs(n-.5);o=(Math.cos(i)*d+this.tr/2)/(1.5*this.tr)/m,o=u.clamp(o,0,1),this.setHSL([this.hsl[0],o,n])}}setHeight(){this.h=this.isOpen?this.wfixe+this.baseH+5:this.baseH,this.s[0].height=this.h+"px",this.zone.h=this.h}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(){super.open(),this.setHeight(),this.up&&(this.zone.y-=this.wfixe+5);let t=this.h-this.baseH;this.s[3].visibility="visible",this.parentHeight(t)}close(){super.close(),this.up&&(this.zone.y+=this.wfixe+5);let t=this.h-this.baseH;this.setHeight(),this.s[3].visibility="hidden",this.parentHeight(-t)}update(t){let s=h.rgbToHex(h.hslToRgb([this.hsl[0],1,.5]));this.moveMarkers(),this.value=this.bcolor,this.setSvg(this.c[3],"fill",s,2,0),this.s[2].background=this.bcolor,this.notext||(this.c[2].textContent=h.htmlToHex(this.bcolor)),this.invert=h.findDeepInver(this.rgb),this.s[2].color=this.invert?"#fff":"#000",t&&("array"===this.ctype&&this.send(this.rgb),"rgb"===this.ctype&&this.send(h.htmlRgb(this.rgb)),"hex"===this.ctype&&this.send(h.htmlToHex(this.value)),"html"===this.ctype&&this.send())}setValue(t){t instanceof Array?this.value=h.rgbToHex(t):isNaN(t)?this.value=t:this.value=h.hexToHtml(t),this.setColor(this.value),this.update()}setColor(t){let s=h.unpack(t);return this.bcolor!==t&&s&&(this.bcolor=t,this.rgb=s,this.hsl=h.rgbToHsl(this.rgb),this.hue=this.hsl[0],this.update()),this}setHSL(t){return this.hsl=t,this.rgb=h.hslToRgb(t),this.bcolor=h.rgbToHex(this.rgb),this.update(!0),this}moveMarkers(){let t=this.pp,s=h;this.invert;let i=this.hsl[0]*s.TwoPI,e=2/3*s.PI,o=this.tr,n=this.hsl[0],r=this.hsl[1],l=this.hsl[2],a=(i-s.pi90)*s.todeg;n=-i+s.pi90;let c=Math.cos(n)*o,d=-Math.sin(n)*o,u=Math.cos(n-e)*o,p=-Math.sin(n-e)*o,m=Math.cos(n+e)*o,g=-Math.sin(n+e)*o,x=(u+m)/2,v=(p+g)/2;i=(1-2*Math.abs(l-.5))*r;let f=u+(m-u)*l+(c-x)*i,b=p+(g-p)*l+(d-v)*i;t.set(f,b).addScalar(128),this.setSvg(this.c[3],"transform","rotate("+a+" )",2),this.setSvg(this.c[3],"cx",t.x,3),this.setSvg(this.c[3],"cy",t.y,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",2,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",3),this.setSvg(this.c[3],"fill",this.bcolor,3)}rSize(){super.rSize();let t=this.s;t[2].width=this.sb+"px",t[2].left=this.sa+"px",this.cw=this.sb>256?256:this.sb,this.rSizeColor(this.cw),this.decal.x=Math.floor(.5*(this.w-this.wfixe))}rSizeColor(t){if(t===this.wfixe)return;this.wfixe=t;let s=this.s;this.decal.y="up"===this.side?2:this.baseH+2,this.mid=Math.floor(.5*this.wfixe),this.setSvg(this.c[3],"viewBox","0 0 "+this.wfixe+" "+this.wfixe),s[3].width=this.wfixe+"px",s[3].height=this.wfixe+"px",s[3].top=this.decal.y+"px",this.ratio=256/this.wfixe,this.square=1/(this.wfixe/256*60),this.setHeight()}}class u extends r{constructor(t={}){super(t),this.round=Math.round,this.baseH=this.h,this.hplus=t.hplus||50,this.res=t.res||40,this.l=1,this.precision=t.precision||0,this.custom=t.custom||!1,this.names=t.names||["FPS","MS"];let s=t.cc||["220,220,220","255,255,0"];this.adding=t.adding||!1,this.range=t.range||[165,100,100],this.alpha=t.alpha||.25,this.values=[],this.points=[],this.textDisplay=[],this.custom||(this.now=i.getTime(),this.startTime=0,this.prevTime=0,this.frames=0,this.ms=0,this.fps=0,this.mem=0,this.mm=0,this.isMem=!(!self.performance||!self.performance.memory),this.isMem&&(this.names.push("MEM"),s.push("0,255,255")),this.txt=t.name||"Fps");let e=Math.floor(.5*this.h)-3;const h=this.colors;this.c[1].textContent=this.txt,this.c[0].style.cursor="pointer",this.c[0].style.pointerEvents="auto";let o="display:none; left:10px; top:"+this.h+"px; height:"+(this.hplus-8)+"px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid "+h.border+";";0!==this.radius&&(o+="border-radius:"+this.radius+"px;"),this.c[2]=this.dom("path",this.css.basic+o,{}),this.c[2].setAttribute("viewBox","0 0 "+this.res+" 50"),this.c[2].setAttribute("height","100%"),this.c[2].setAttribute("width","100%"),this.c[2].setAttribute("preserveAspectRatio","none"),this.c[3]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; left:0; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.c[4]=this.dom("div",this.css.txt+"position:absolute; left:10px; top:"+(this.h+2)+"px; display:none; width:100%; text-align:center;"),t.bottomLine&&(this.c[4]=this.dom("div",this.css.basic+"width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);")),this.isShow=!1;let n=this.s;n[1].lineHeight=this.h-4,n[1].color=h.text,0!==this.radius&&(n[0].borderRadius=this.radius+"px"),"none"!==this.colors.gborder&&(n[0].border="1px solid "+h.gborder);let r=0;for(r=0;r "+this.names[r]+" ")}for(r=this.names.length;r--;)this.dom("path",null,{fill:"rgba("+s[r]+","+this.alpha+")","stroke-width":1,stroke:"rgba("+s[r]+",1)","vector-effect":"non-scaling-stroke"},this.c[2]);this.init()}mousedown(t){this.isShow?this.close():this.open()}tick(t){this.values=t,this.isShow&&(this.drawGraph(),this.upText())}makePath(t){let s="";s+="M -1 50";for(let i=0;i";this.c[4].innerHTML=i}drawGraph(){let t,s=this.c[2],i=this.names.length,e=0,h=0;for(;i--;)t=this.adding?(this.values[h]+e)*this.range[h]:this.values[h]*this.range[h],this.points[h].shift(),this.points[h].push(50-t),this.setSvg(s,"d",this.makePath(this.points[h]),i+1),e+=this.values[h],h++}open(){super.open(),this.h=this.hplus+this.baseH,this.setSvg(this.c[3],"d",this.svgs.g2),null!==this.group?this.group.calc(this.hplus):this.isUI&&this.main.calc(this.hplus),this.s[0].height=this.h+"px",this.s[2].display="block",this.s[4].display="block",this.isShow=!0,this.custom||i.addListen(this)}close(){super.close(),this.h=this.baseH,this.setSvg(this.c[3],"d",this.svgs.g1),null!==this.group?this.group.calc(-this.hplus):this.isUI&&this.main.calc(-this.hplus),this.s[0].height=this.h+"px",this.s[2].display="none",this.s[4].display="none",this.isShow=!1,this.custom||i.removeListen(this),this.c[4].innerHTML=""}begin(){this.startTime=this.now()}end(){let t=this.now();if(this.ms=t-this.startTime,this.frames++,t>this.prevTime+1e3&&(this.fps=this.round(1e3*this.frames/(t-this.prevTime)),this.prevTime=t,this.frames=0,this.isMem)){let t=performance.memory.usedJSHeapSize,s=performance.memory.jsHeapSizeLimit;this.mem=this.round(954e-9*t),this.mm=t/s}return this.values=[this.fps,this.ms,this.mm],this.drawGraph(),this.upText([this.fps,this.ms,this.mem]),t}listening(){this.custom||(this.startTime=this.end())}rSize(){let t=this.s,s=this.w;t[3].left=this.sa+this.sb-6+"px",t[0].width=s+"px",t[1].width=s+"px",t[2].left="10px",t[2].width=s-20+"px",t[4].width=s-20+"px"}}class p extends r{constructor(t={}){super(t),this.value=void 0!==t.value?t.value:[0,0,0],this.lng=this.value.length,this.precision=void 0!==t.precision?t.precision:2,this.multiplicator=t.multiplicator||1,this.neg=t.neg||!1,this.line=void 0===t.line||t.line,this.autoWidth=void 0===t.autoWidth||t.autoWidth,this.isNumber=!1,this.isDown=!1,this.h=t.h||138,this.rh=this.h-10,this.top=0,this.c[0].style.width=this.w+"px",void 0!==this.c[1]&&(this.c[1].style.width=this.w+"px",this.autoWidth||(this.c[1].style.width="100%",this.c[1].style.justifyContent="center"),this.top=10,this.h+=10),this.gh=this.rh-28,this.gw=this.w-28,this.c[2]=this.dom("div",this.css.txt+"display:block; text-align:center; padding:0px 0px; top:"+(this.h-20)+"px; left:14px; width:"+this.gw+"px;\tcolor:"+this.colors.text),this.c[2].innerHTML=this.valueToHtml();let s=this.dom("svg",this.css.basic,{viewBox:"0 0 "+this.w+" "+this.rh,width:this.w,height:this.rh,preserveAspectRatio:"none"});this.setCss(s,{width:this.w,height:this.rh,left:0,top:this.top}),this.dom("path","",{d:"",stroke:this.colors.text,"stroke-width":2,fill:"none","stroke-linecap":"butt"},s),this.dom("rect","",{x:10,y:10,width:this.gw+8,height:this.gh+8,stroke:"rgba(0,0,0,0.3)","stroke-width":1,fill:"none"},s),this.iw=(this.gw-4*(this.lng-1))/this.lng;let i=[];this.cMode=[],this.v=[];for(let t=0;t',e="width:"+100/this.lng+"%;";for(;t--;)s===this.lng-1?i+=""+this.value[s]+"":i+=""+this.value[s]+"",s++;return i}updateSVG(){this.line&&this.setSvg(this.c[3],"d",this.makePath(),0);for(let t=0;tthis.top&&s.ye[i][0]&&s.xthis.distance){let t=Math.atan2(this.tmp.x,this.tmp.y);this.tmp.x=Math.sin(t)*this.distance,this.tmp.y=Math.cos(t)*this.distance}this.pos.copy(this.tmp).divideScalar(this.distance).negate(),this.update()}setValue(t){void 0===t&&(t=[0,0]),this.pos.set(t[0]||0,t[1]||0),this.updateSVG()}update(t){void 0===t&&(t=!0),null!==this.interval&&(this.isDown||(this.pos.lerp(null,.3),this.pos.x=Math.abs(this.pos.x)<.01?0:this.pos.x,this.pos.y=Math.abs(this.pos.y)<.01?0:this.pos.y,this.isUI&&this.main.isCanvas&&this.main.draw())),this.updateSVG(),t&&this.send(),this.pos.isZero()&&this.stopInterval()}updateSVG(){let t=.5*this.diam- -this.pos.x*this.distance,s=.5*this.diam- -this.pos.y*this.distance;if(0===this.model){let i=t+5*this.pos.x+5,e=s+5*this.pos.y+10;this.setSvg(this.c[3],"cx",i*this.ratio,3),this.setSvg(this.c[3],"cy",e*this.ratio,3)}else this.setSvg(this.c[3],"cx",t*this.ratio,3),this.setSvg(this.c[3],"cy",s*this.ratio,3);this.setSvg(this.c[3],"cx",t*this.ratio,4),this.setSvg(this.c[3],"cy",s*this.ratio,4),this.value[0]=1*(this.pos.x*this.multiplicator).toFixed(this.precision),this.value[1]=1*(this.pos.y*this.multiplicator).toFixed(this.precision),this.haveText&&(this.c[2].textContent=this.value)}clear(){this.stopInterval(),super.clear()}}class v extends r{constructor(t={}){super(t),this.isCyclic=t.cyclic||!1,this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.autoWidth=!1,this.setTypeNumber(t),this.minw=this.w,this.diam=t.diam||this.w,this.mPI=.8*Math.PI,this.toDeg=180/Math.PI,this.cirRange=2*this.mPI,this.offset=new n,this.h=t.h||this.w+10,this.c[0].style.width=this.w+"px",this.c[0].style.display="block",void 0!==this.c[1]&&(this.c[1].style.width="100%",this.c[1].style.justifyContent="center",this.top=10,this.h+=10),this.percent=0,this.cmode=0;let s=this.colors;this.c[2]=this.dom("div",this.css.txt+"justify-content:center; top:"+(this.h-20)+"px; width:100%; color:"+s.text),this.c[3]=this.getKnob(),this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1),this.setSvg(this.c[3],"stroke",s.text,3),this.setSvg(this.c[3],"d",this.makeGrad(),3),this.setSvg(this.c[3],"viewBox","0 0 "+this.diam+" "+this.diam),this.setCss(this.c[3],{width:this.diam,height:this.diam,left:0,top:this.top}),this.model>0&&(h.dom("path","",{d:"",stroke:s.text,"stroke-width":2,fill:"none","stroke-linecap":"round"},this.c[3]),2==this.model&&(h.addSVGGlowEffect(),this.setSvg(this.c[3],"style",'filter: url("#UILGlow");',4))),this.r=0,this.init(),this.update()}mode(t){let s=this.colors;if(this.cmode===t)return!1;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1);break;case 1:this.s[2].color=s.textOver,this.setSvg(this.c[3],"fill",s.select,0),this.setSvg(this.c[3],"stroke",s.textOver,1)}return this.cmode=t,!0}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"knob"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=-Math.atan2(s.x,s.y),null!==this.oldr&&(this.r=Math.abs(this.r-this.oldr)>Math.PI?this.oldr:this.r),this.r=this.r>this.mPI?this.mPI:this.r,this.r=this.r<-this.mPI?-this.mPI:this.r;let i=1/this.cirRange,e=(this.r+this.mPI)*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=Math.floor(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("knob"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s5?(s=this.range/this.step,t=(a-c)/s):(t=(a-c)/l*2,s=32);for(let c=0;c<=s;++c)i=a-t*c,e=l+44*Math.sin(i),h=l+44*Math.cos(i),o=l+40*Math.sin(i),n=l+40*Math.cos(i),r+="M"+e+" "+h+" L"+o+" "+n+" ";return r}update(t){this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range;let s=Math.PI+this.mPI,i=this.percent*this.cirRange-this.mPI,e=Math.sin(i),o=Math.cos(i),n=25*e+64,r=-25*o+64,l=20*e+64,a=-20*o+64;if(this.setSvg(this.c[3],"d","M "+n+" "+r+" L "+l+" "+a,1),this.model>0){let t=36*Math.sin(s)+64,n=36*Math.cos(s)+64,r=36*e+64,l=-36*o+64,a=i<=Math.PI-this.mPI?0:1;this.setSvg(this.c[3],"d","M "+t+","+n+" A 36,36 1 "+a+" 1 "+r+","+l,4);let c=h.pack(h.lerpColor(h.unpack(h.ColorLuma(this.colors.text,-.75)),h.unpack(this.colors.text),this.percent));this.setSvg(this.c[3],"stroke",c,4)}t&&this.send()}}class f extends r{constructor(t={}){super(t),this.hideCurrent=!1,this.path=t.path||"",this.format=t.format||"",this.isWithImage=""!==this.path,this.preLoadComplete=!1,this.tmpImage={},this.tmpUrl=[],this.m=void 0!==t.m?t.m:5;let s=t.align||"left",i=t.scrollSize||10;this.ss=i+1,this.sMode=0,this.tMode=0,this.listOnly=t.listOnly||!1,this.staticTop=t.staticTop||!1,this.isSelectable=this.listOnly,void 0!==t.select&&(t.selectable=t.select),void 0!==t.selectable&&(this.isSelectable=t.selectable),""===this.txt&&(this.p=0);let e=Math.floor(.5*this.h)-3,h=this.colors;if(this.c[2]=this.dom("div",this.css.basic+"top:0; display:none; border-radius:"+this.radius+"px;"),this.c[3]=this.dom("div",this.css.item+"padding:0px "+this.m+"px; margin-bottom:0px; position:absolute; justify-content:"+s+"; text-align:"+s+"; line-height:"+(this.h-4)+"px; top:1px; background:"+h.button+"; height:"+(this.h-2)+"px; border:1px solid "+h.border+"; border-radius:"+this.radius+"px;"),this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.scrollerBack=this.dom("div",this.css.basic+"right:0px; width:"+i+"px; background:"+h.back+"; display:none;"),this.scroller=this.dom("div",this.css.basic+"right:"+.5*(i-.25*i)+"px; width:"+.25*i+"px; background:"+h.text+"; display:none; "),this.c[3].style.color=h.text,this.list=[],this.refObject=null,t.list)if(t.list instanceof Array)this.list=t.list;else if(t.list instanceof Object){this.refObject=t.list;for(let t in this.refObject)this.list.push(t)}this.items=[],this.prevName="",this.tmpId=0,this.baseH=this.h,this.itemHeight=t.itemHeight||this.h,this.full=t.full||!1,this.py=0,this.ww=this.sb,this.scroll=!1,this.isDown=!1,this.current=null,this.side=t.side||"down",this.up="down"===this.side?0:1,this.up?(this.c[2].style.top="auto",this.c[3].style.top="auto",this.c[4].style.top="auto",this.c[2].style.bottom=this.h-2+"px",this.c[3].style.bottom="1px",this.c[4].style.bottom=e+"px"):this.c[2].style.top=this.baseH+"px",this.listIn=this.dom("div",this.css.basic+"left:0; top:0; width:100%; background:none;"),this.listIn.name="list",this.topList=0,this.c[2].appendChild(this.listIn),this.c[2].appendChild(this.scrollerBack),this.c[2].appendChild(this.scroller),void 0!==t.value?isNaN(t.value)?this.value=t.value:this.value=this.list[t.value]:this.value=this.list[0],this.isOpenOnStart=t.open||!1,this.listOnly&&(this.baseH=5,this.c[3].style.display="none",this.c[4].style.display="none",this.c[2].style.top=this.baseH+"px",this.isOpenOnStart=!0),this.miniCanvas=t.miniCanvas||!1,this.canvasBg=t.canvasBg||"rgba(0,0,0,0)",this.imageSize=t.imageSize||[20,20],this.drag=t.drag||!1,this.dragout=t.dragout||!1,this.dragstart=t.dragstart||null,this.dragend=t.dragend||null,this.setList(this.list),this.init(),this.isWithImage&&this.preloadImage(),this.isOpenOnStart&&this.open(!0),this.baseH+=this.mtop}preloadImage(){this.preLoadComplete=!1,this.tmpImage={};for(let t=0;tthis.h-this.baseH)return"title";if(this.scroll&&s.x>this.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}else{if(s.ythis.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}}return""}testItems(t){let s,i,e,h="",o=this.items,n=o.length;for(;n--;)if(s=o[n],i=s.posy+this.topList,e=s.posy+this.itemHeight+1+this.topList,t>=i&&t<=e)return h="item"+n,this.modeItem(0),this.current=s,this.modeItem(1),h;return h}modeItem(t){if(!this.current)return;this.current.select&&0===t&&(t=2);let s=this.colors;switch(t){case 0:this.current.style.background=s.back,this.current.style.color=s.text;break;case 1:this.current.style.background=s.over,this.current.style.color=s.textOver;break;case 2:this.current.style.background=s.select,this.current.style.color=s.textSelect}}unSelected(){this.current&&(this.modeItem(0),this.current=null)}selected(){this.current&&(this.resetItems(),this.modeItem(2),this.current.select=!0)}resetItems(){let t=this.items.length;for(;t--;)this.items[t].select=!1,this.items[t].style.background=this.colors.back,this.items[t].style.color=this.colors.text}hideActive(){this.hideCurrent&&(this.current&&(this.tmpId=this.current.id),this.resetHide())}resetHide(){console.log(this.tmpId);let t=this.items.length;for(;t--;)t===this.tmpId?(this.items[t].style.height="0px",this.items[t].posy=-1):(this.items[t].style.height=this.itemHeight+"px",this.items[t].posy=(this.itemHeight+1)*(t-1))}mouseup(t){this.isDown=!1}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s?(this.isDown=!0,this.mousemove(t)):"title"===s?(this.modeTitle(2),this.listOnly||(this.hideActive(),this.isOpen?this.close():this.open())):this.current&&(this.value=this.list[this.current.id],this.isSelectable&&this.selected(),this.send(this.value),this.listOnly||(this.close(),this.setTopItem())),!0)}mousemove(t){let s=!1,i=this.testZone(t);if(!i)return s;if("title"===i)this.unSelected(),this.modeTitle(1),this.cursor("pointer");else if("scroll"===i){if(this.cursor("s-resize"),this.modeScroll(1),this.isDown){this.modeScroll(2);let s=this.zone.y+this.baseH-2;this.update(t.clientY-s-.5*this.sh)}}else this.modeTitle(0),this.modeScroll(0),this.cursor("pointer");return i!==this.prevName&&(s=!0),this.prevName=i,s}wheel(t){return"title"!==this.testZone(t)&&(this.py+=10*t.delta,this.update(this.py),!0)}reset(){this.prevName="",this.unSelected(),this.modeTitle(0),this.modeScroll(0)}modeScroll(t){if(t===this.sMode)return;let s=this.scroller.style,i=this.colors;switch(t){case 0:s.background=i.text;break;case 1:case 2:s.background=i.select}this.sMode=t}modeTitle(t){if(t===this.tMode)return;let s=this.s,i=this.colors;switch(t){case 0:s[3].color=i.text,s[3].background=i.button;break;case 1:s[3].color=i.textOver,s[3].background=i.overoff;break;case 2:s[3].color=i.textSelect,s[3].background=i.overoff}this.tMode=t}clearList(){for(;this.listIn.children.length;)this.listIn.removeChild(this.listIn.lastChild);this.items=[]}setList(t){this.clearList(),this.list=t,this.length=this.list.length;let s,e,h=this.hideCurrent?this.length-1:this.length;this.maxItem=this.full?h:5,this.maxItem=hthis.maxHeight&&(this.ww=this.sb-this.ss,this.scroll=!0),this.miniCanvas&&(this.tmpCanvas=document.createElement("canvas"),this.tmpCanvas.width=this.imageSize[0],this.tmpCanvas.height=this.imageSize[1],this.tmpCtx=this.tmpCanvas.getContext("2d"),this.tmpCtx.fillStyle=this.canvasBg,this.tmpCtx.fillRect(0,0,this.imageSize[0],this.imageSize[1]));for(let t=0;tthis.range?this.range:t,this.topList=-Math.floor(t/this.ratio),this.listIn.style.top=this.topList+"px",this.scroller.style.top=Math.floor(t)+"px",this.py=t)}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(t){super.open(),this.update(0),this.h=this.maxHeight+this.baseH+5,this.scroll?(this.scroller.style.display="block",this.scrollerBack.style.display="block"):(this.topList=0,this.h=this.baseH+5+this.max,this.scroller.style.display="none",this.scrollerBack.style.display="none"),this.s[0].height=this.h+"px",this.s[2].display="block",this.up?(this.zone.y-=this.h-(this.baseH-10),this.setSvg(this.c[4],"d",this.svgs.g1)):this.setSvg(this.c[4],"d",this.svgs.g2),this.rSizeContent();let s=this.h-this.baseH;this.zone.h=this.h,t||this.parentHeight(s)}close(){super.close(),this.up&&(this.zone.y+=this.h-(this.baseH-10));let t=this.h-this.baseH;this.h=this.baseH,this.s[0].height=this.h+"px",this.s[2].display="none",this.setSvg(this.c[4],"d",this.svgs.g1),this.zone.h=this.h,this.parentHeight(-t)}text(t){this.c[3].textContent=t}rSizeContent(){let t=this.length;for(;t--;)this.listIn.children[t].style.width=this.ww+"px"}rSize(){super.rSize();let t=this.s,s=this.sb,i=this.sa;void 0!==t[2]&&(t[2].width=s+"px",t[2].left=i+"px",t[3].width=s+"px",t[3].left=i+"px",t[4].left=i+s-15+"px",this.ww=s,this.max>this.maxHeight&&(this.ww=s-this.ss),this.isOpen&&this.rSizeContent())}}class b extends r{constructor(t={}){super(t),this.setTypeNumber(t),this.allway=t.allway||!1,this.isDown=!1,this.value=[0],this.multy=1,this.invmulty=1,this.isSingle=!0,this.isAngle=!1,this.isVector=!1,t.isAngle&&(this.isAngle=!0,this.multy=h.torad,this.invmulty=h.todeg),this.isDrag=t.drag||!1,void 0!==t.value&&(isNaN(t.value)?t.value instanceof Array?(this.value=t.value,this.isSingle=!1):t.value instanceof Object&&(this.value=[],void 0!==t.value.x&&(this.value[0]=t.value.x),void 0!==t.value.y&&(this.value[1]=t.value.y),void 0!==t.value.z&&(this.value[2]=t.value.z),void 0!==t.value.w&&(this.value[3]=t.value.w),this.isSingle=!1,this.isVector=!0):this.value=[t.value]),this.lng=this.value.length,this.tmp=[],this.current=-1,this.prev={x:0,y:0,d:0,v:0};let s=this.colors;this.c[2]=this.dom("div",this.css.basic+" background:"+s.select+"; top:4px; width:0px; height:"+(this.h-8)+"px;"),this.cMode=[];let i=this.lng;for(;i--;)this.isAngle&&(this.value[i]=(180*this.value[i]/Math.PI).toFixed(this.precision)),this.c[3+i]=this.dom("div",this.css.txtselect+"top:1px; height:"+(this.h-2)+"px; color:"+s.text+"; background:"+s.back+"; borderColor:"+s.border+"; border-radius:"+this.radius+"px;"),t.center&&(this.c[2+i].style.textAlign="center"),this.c[3+i].textContent=this.value[i],this.c[3+i].style.color=this.colors.text,this.c[3+i].isNum=!0,this.cMode[i]=0;this.selectId=3+this.lng,this.c[this.selectId]=this.dom("div",this.css.txtselect+"position:absolute; top:2px; height:"+(this.h-4)+"px; padding:0px 0px; width:0px; color:"+s.textSelect+"; background:"+s.select+"; border:none; border-radius:0px;"),this.cursorId=4+this.lng,this.c[this.cursorId]=this.dom("div",this.css.basic+"top:2px; height:"+(this.h-4)+"px; width:0px; background:"+s.text+";"),this.init()}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";let i=this.lng,e=this.tmp;for(;i--;)if(s.x>e[i][0]&&s.x 0";this.easing=t.easing||1,this.setTypeNumber(t),this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.isDown=!1,this.isOver=!1,this.allway=t.allway||!1,this.isDeg=t.isDeg||!1,this.isCyclic=t.cyclic||!1,this.firstImput=!1;let s=this.colors;if(this.c[2]=this.dom("div",this.css.txtselect+"border:none; background:none; width:47px; color:"+s.text+";"),this.c[3]=this.dom("div",this.css.basic+" top:0; height:"+this.h+"px;"),this.c[4]=this.dom("div",this.css.basic+"background:"+s.back+"; top:2px; height:"+(this.h-4)+"px;"),this.c[5]=this.dom("div",this.css.basic+"left:4px; top:5px; height:"+(this.h-10)+"px; background:"+s.text+";"),this.c[2].isNum=!0,this.c[2].style.height=this.h-2+"px",this.c[2].style.lineHeight=this.h-10+"px",0!==this.model){let t=4,i=4,e=8,h=this.h-6,o=16;2===this.model&&(t=0,i=2,e=4,o=2,h=.5*(this.h-6)),3===this.model&&(this.c[5].style.visible="none"),this.c[4].style.borderRadius=t+"px",this.c[4].style.height=e+"px",this.c[4].style.top=.5*this.h-i+"px",this.c[5].style.borderRadius=.5*t+"px",this.c[5].style.height=i+"px",this.c[5].style.top=.5*this.h-.5*i+"px",this.c[6]=this.dom("div",this.css.basic+"border-radius:"+o+"px; margin-left:"+.5*-h+"px; background:"+s.text+"; left:4px; top:3px; height:"+(this.h-6)+"px; width:"+h+"px;")}this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>=this.txl?"text":s.x>=this.sa?"scroll":""}mouseup(t){this.isDown&&(this.isDown=!1)}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s&&(this.isDown=!0,this.old=this.value,this.mousemove(t)),!0)}mousemove(t){let s=!1;if("scroll"===this.testZone(t)?(this.mode(1),this.cursor("w-resize")):this.cursor(),this.isDown){let i=(t.clientX-(this.zone.x+this.sa)-3)/this.ww;i=Math.min(1,Math.max(0,i));let e=Math.pow(i,this.easing)*this.range+this.min,h=i*this.range+this.min;this.sliderValue=this.numValue(h);let o,n=e-this.old;(n>=this.step||n<=this.step)&&(o=Math.floor(n/this.step),this.value=this.numValue(this.old+o*this.step),this.update(!0),this.old=this.value),s=!0}return s}wheel(t){if("scroll"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s=this.sa?"text":""}mouseup(t){if(this.editable)return!!this.isDown&&(this.isDown=!1,this.mousemove(t))}mousedown(t){if(!this.editable)return;let s=this.testZone(t);return!this.isDown&&(this.isDown=!0,"text"===s&&this.setInput(this.c[2]),this.mousemove(t))}mousemove(t){if(!this.editable)return;let s=0;return"text"===this.testZone(t)?this.cursor("text"):this.cursor(),this.isDown&&(s=t.clientX-this.zone.x),this.upInput(s-this.sa-3,this.isDown)}update(){this.c[2].textContent=this.value}reset(){this.cursor()}select(t,s,i,e){let h=this.s,o=this.sa+5;h[4].width="1px",h[4].left=o+s+"px",h[3].left=o+s+"px",h[3].width=i+"px",this.c[3].innerHTML=e}unselect(){let t=this.s;t&&(t[3].width="0px",this.c[3].innerHTML="t",t[4].width="0px")}validate(t){this.allway&&(t=!0),this.value=this.c[2].textContent,""!==this.value?this.c[5].textContent="":this.c[5].textContent=this.placeHolder,t&&this.send()}rSize(){super.rSize();let t=this.s;t[2].left=this.sa+"px",t[2].width=this.sb+"px",t[5].left=this.sa+"px",t[5].width=this.sb+"px"}}class k extends r{constructor(t={}){super(t);let s=t.prefix||"";this.c[2]=this.dom("div",this.css.txt+"justify-content:right; width:60px; line-height:"+(this.h-8)+"px; color:"+this.colors.text),31===this.h&&(this.s[0].height=this.h+"px",this.s[1].top="8px",this.c[2].style.top="8px");let i=this.s;i[1].justifyContent=t.align||"left",i[1].fontWeight=t.fontWeight||"bold",this.c[1].textContent=this.txt.substring(0,1).toUpperCase()+this.txt.substring(1).replace("-"," "),this.c[2].textContent=s,this.init()}text(t){this.c[1].textContent=t}text2(t){this.c[2].textContent=t}rSize(){super.rSize(),this.s[1].width=this.w+"px",this.s[2].left=this.w+"px"}setColor(t){this.s[1].color=t,this.s[2].color=t}}class S extends r{constructor(t={}){super(t),this.value=t.value||"",this.isDown=!1,this.onActif=t.onActif||function(){};const s=this.colors;this.c[2]=this.dom("div",this.css.txt+this.css.button+" top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.buttonBorder+"; border-radius:15px; width:30px; left:10px;"),this.c[3]=this.dom("div",this.css.txtselect+"height:"+(this.h-4)+"px; background:"+s.inputBg+"; borderColor:"+s.inputBorder+"; border-radius:"+this.radius+"px;"),this.c[3].textContent=this.value;let i=Math.floor(.5*this.h)-7;this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:14px; height:14px; left:5px; top:"+i+"px;",{d:this.svgs.cursor,fill:s.text,stroke:"none"}),this.stat=1,this.isActif=!1,this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>this.sa&&s.xthis.sa&&s.xi[r][0]&&s.xe[r][0]&&s.ythis.lng-1&&(h=-1)),h}mouseup(t){return!!this.isDown&&(this.isDown=!1,-1!==this.res&&(this.value=this.values[this.res],this.send()),this.mousemove(t))}mousedown(t){return!this.isDown&&(this.isDown=!0,this.mousemove(t))}mousemove(t){let s=!1;return this.res=this.testZone(t),-1!==this.res?(this.cursor("pointer"),s=this.modes(this.isDown?3:2,this.res)):s=this.reset(),s}modes(t=1,s=-1){let i,e,h=this.lng,o=!1;for(;h--;)e=t,i=!!this.isSelectable&&this.values[h]===this.value,h===s?i&&2===e&&(e=3):(e=1,i&&(e=4)),this.mode(e,h)&&(o=!0);return o}mode(t,s){let i=!1,e=this.colors,h=this.buttons,o=s;if(this.stat[s]!==t){switch(this.stat[s]=t,t){case 1:h[o].style.color=e.text,h[o].style.background=e.button;break;case 2:h[o].style.color=e.textOver,h[o].style.background=e.overoff;break;case 3:h[o].style.color=e.textOver,h[o].style.background=e.over;break;case 4:h[o].style.color=e.textSelect,h[o].style.background=e.select}i=!0}return i}reset(){return this.res=-1,this.cursor(),this.modes()}label(t,s){this.buttons[s].textContent=t}icon(t,s,i){this.buttons[i].style.padding=(s||0)+"px 0px",this.buttons[i].innerHTML=t}testW(){let t=!1;if(3*this.spaces[0]+2*this.bsizeMax>this.w?(this.bsize[0]=.5*(this.w-3*this.spaces[0]),t=!0):this.bsize[0]!==this.bsizeMax&&(this.bsize[0]=this.bsizeMax,t=!0),!t)return;let s=this.buttons.length;for(;s--;)this.buttons[s].style.width=this.bsize[0]+"px"}rSize(){let t;super.rSize(),this.testW(),this.tmpX=[],this.tmpY=[];for(let s=0;sthis.h-this.c[2].offsetHeight?"text":"pad"}mouseup(t){return this.isDown=!1,this.mode(0)}mousedown(t){if("pad"===this.testZone(t))return this.isDown=!0,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=.5*this.w-(t.clientX-this.zone.x),i=.5*this.diam-(t.clientY-this.zone.y-this.ytop),e=256/this.diam;s=-s*e,i=-i*e,s=h.clamp(s,-this.maxPos,this.maxPos),i=h.clamp(i,-this.maxPos,this.maxPos),this.setPos([s,i]),this.update(!0)}mode(t){if(this.cmode===t)return!1;let s=this.colors;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.back,0),this.setSvg(this.c[3],"fill",s.button,1),this.setSvg(this.c[3],"stroke",s.back,2),this.setSvg(this.c[3],"stroke",s.back,3),this.setSvg(this.c[3],"stroke",s.text,4);break;case 1:this.s[2].color=s.textSelect,this.setSvg(this.c[3],"fill",s.backoff,0),this.setSvg(this.c[3],"fill",s.overoff,1),this.setSvg(this.c[3],"stroke",s.backoff,2),this.setSvg(this.c[3],"stroke",s.backoff,3),this.setSvg(this.c[3],"stroke",s.textSelect,4)}return this.cmode=t,!0}update(t){this.c[2].textContent=this.value,this.updateSVG(),t&&this.send()}updateSVG(){1==this.model&&(this.setSvg(this.c[3],"y1",this.pos.y,2),this.setSvg(this.c[3],"y2",this.pos.y,2),this.setSvg(this.c[3],"x1",this.pos.x,3),this.setSvg(this.c[3],"x2",this.pos.x,3)),this.setSvg(this.c[3],"cx",this.pos.x,4),this.setSvg(this.c[3],"cy",this.pos.y,4)}setPos(t){this.pos.set(t[0]+128,t[1]+128);let s=1/this.maxPos;this.value[0]=(t[0]*s*this.range).toFixed(this.precision),this.value[1]=(t[1]*s*this.range).toFixed(this.precision)}setValue(t,s=!1){void 0===t&&(t=this.value),this.value[0]=1*Math.min(this.max,Math.max(this.min,t[0])).toFixed(this.precision),this.value[1]=1*Math.min(this.max,Math.max(this.min,t[1])).toFixed(this.precision),this.pos.set(this.value[0]/this.range*this.maxPos+128,this.value[1]/this.range*this.maxPos+128),this.update(s)}}class T extends r{constructor(t={}){t.selectable=!0,t.name=t.name||"TreeList",super(t),this.tree=t.tree||{},this.value=Array.isArray(t.value)?t.value.slice():[],this.focused=!!t.focused,this.focusPath=Array.isArray(t.focusPath)?t.focusPath.slice():[],this.focusLevel="number"==typeof t.focusLevel?t.focusLevel:-1,this.tabIndex=t.tabIndex??null,this.itemIndex=t.itemIndex??null,this.changeCb="function"==typeof t.onChange?t.onChange:()=>{},this.lineH=this.h,this.levelGap=this.colors.sy||2,this.leafMax=0,this.levels=[],this.itemsDom=[],this.hover={level:-1,index:-1},this.lastLeaf={parentPath:[],key:null},this.c[2]=this.dom("div",this.css.basic+"left:0; top:0; width:100%; height:100%;"),this.s[2]=this.c[2].style,this.init(),this._maybeUpdateLastLeafFromValue()}static isMap(t){return t&&"object"==typeof t&&!Array.isArray(t)}static isList(t){return Array.isArray(t)}getNodeAtPath(t){let s=this.tree;for(let i=0;i({key:t,label:t,zone:{x:0,y:0,w:0,h:0}}))),i=Math.max(t.length,this.leafMax)*this.lineH;this.levels.push({type:"list",items:t,zone:{x:0,y:0,w:0,h:i}});break}break}{const e=Object.keys(s);if(!e.length)break;this.levels.push({type:"map",items:e.map((t=>({key:t,label:t,zone:{x:0,y:0,w:0,h:0}}))),zone:{x:0,y:0,w:0,h:this.lineH}});const h=t[i];if(!h||!s.hasOwnProperty(h))break;s=s[h]}i++}}layoutLevels(){const t=(this.sa||100)+8,s=this.zone.w-t-8;let i=0;for(;this.itemsDom.lengthh.x+h.w||s>h.x+h.w)&&!(th.x+h.w||s>h.y+h.h))if("map"===e.type)for(let h=0;h=o.x&&s>=o.y&&t<=o.x+o.w&&s<=o.y+o.h)return{L:i,i:h,real:!0}}else{const o=Math.max(e.items.length,this.leafMax);for(let n=0;n=r.x&&s>=r.y&&t<=r.x+r.w&&s<=r.y+r.h)return{L:i,i:n,real:o}}}}return{L:-1,i:-1,real:!1}}handleEvent(t){if(this.lock)return!1;if("mousemove"===t.type){const{x:s,y:i}=this._toLocal(t),e=this._hitTest(s,i);return this.hover=-1!==e.L&&e.real?{level:e.L,index:e.i}:{level:-1,index:-1},this.update(),!0}if("mousedown"===t.type){const{x:s,y:i}=this._toLocal(t),e=this._hitTest(s,i);if(-1!==e.L&&e.real)return this._selectAt(e.L,e.i),!0}return"mouseup"===t.type}_selectAt(t,s){const i=this.levels[t],e=i.items[s];if(!e||!e.key)return;const h=this.value.slice(0,t);h[t]=e.key;const o=this.autoCompleteToLeaf(h);"list"===i.type&&(this.lastLeaf.parentPath=this.value.slice(0,t),this.lastLeaf.key=e.key),this.value=o.slice(),this.update(),this.send(o),this.changeCb(this.tabIndex,this.itemIndex,o)}setValue(t){this.value=Array.isArray(t)?t.slice():[],this._maybeUpdateLastLeafFromValue(),this.update()}setTree(t){this.tree=t||{},this.leafMax=this.computeLeafMax(this.tree),this.update()}setFocus({focused:t,focusPath:s,focusLevel:i}){"boolean"==typeof t&&(this.focused=t),Array.isArray(s)&&(this.focusPath=s.slice()),"number"==typeof i&&(this.focusLevel=i),this.update()}_maybeUpdateLastLeafFromValue(){if(!Array.isArray(this.value)||0===this.value.length)return;const t=this.value.slice(0,this.value.length-1),s=this.value[this.value.length-1],i=this.getNodeAtPath(t);i&&Array.isArray(i.node)&&i.node.includes(s)&&(this.lastLeaf={parentPath:t,key:s})}_countVisibleIntermediates(){let t=0;for(let s=0;sthis.zone.h-this.bh&&s.ye?"scroll":"content",i}handleEvent(t){let s=t.type,e=!1,h=!1,o=this.testZone(t);if("mouseup"===s&&this.isDown&&(this.isDown=!1),"mousedown"!==s||this.isDown||(this.isDown=!0),this.isDown&&this.isNewTarget&&(i.clearInput(),this.isNewTarget=!1),o){switch(o){case"content":t.clientY=this.isScroll?t.clientY+this.decal:t.clientY,i.isMobile&&"mousedown"===s&&this.getNext(t,e),this.proto&&(h=this.proto.handleEvent(t)),"mousemove"===s&&(e=this.mode("def")),"wheel"===s&&!h&&this.isScroll&&(e=this.onWheel(t)),i.lock||this.getNext(t,e);break;case"bottom":this.clearTarget(),"mousemove"===s&&(e=this.mode("bottomOver")),"mousedown"===s&&(this.isOpen=!this.isOpen,this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.calc(),this.mode("def"),e=!0);break;case"scroll":this.clearTarget(),"mousemove"===s&&(e=this.mode("scrollOver")),"mousedown"===s&&(e=this.mode("scrollDown")),"wheel"===s&&(e=this.onWheel(t)),this.isDown&&this.update(t.clientY-this.zone.y-.5*this.sh)}this.isDown&&(e=!0),h&&(e=!0),"keyup"===s&&(e=!0),"keydown"===s&&(e=!0),e&&this.draw()}}getNext(t,s){let e=i.findTarget(this.uis,t);e!==this.current&&(this.clearTarget(),this.current=e,this.isNewTarget=!0),-1!==e&&(this.proto=this.uis[this.current],this.proto.uiover())}onWheel(t){return this.oy+=20*t.delta,this.update(this.oy),!0}reset(t){if(this.isReset)return;this.mouse.neg(),this.isDown=!1;let s=this.mode("def"),i=this.clearTarget();(s||i)&&this.draw(!0),this.isReset=!0}add(){let t=arguments,s=!1;"object"==typeof t[1]?(t[1].isUI=!0,t[1].main=this,s=!!t[1].ontop&&t[1].ontop):"string"==typeof t[1]&&(void 0===t[2]?[].push.call(t,{isUI:!0,main:this}):(t[2].isUI=!0,t[2].main=this,s=!!t[2].ontop&&t[2].ontop));let i=O.apply(this,t);if(null!==i)return s?this.uis.unshift(i):this.uis.push(i),this.calc(),this.isEmpty=!1,i}remove(t){t.dispose&&t.dispose()}clearOne(t){let s=this.uis.indexOf(t);-1!==s&&(this.inner.removeChild(this.uis[s].c[0]),this.uis.splice(s,1),this.calc())}empty(){let t,s=this.uis.length;for(;s--;)t=this.uis.pop(),this.inner.removeChild(t.c[0]),t.dispose();this.uis=[],this.isEmpty=!0,this.calc()}clear(){this.empty()}clear2(){setTimeout(this.empty.bind(this),0)}dispose(){this.clear(),null!==this.parent&&this.parent.removeChild(this.content),i.remove(this)}resetItem(){if(!this.isItemMode)return;let t=this.uis.length;for(;t--;)this.uis[t].selected()}setItem(t){if(!this.isItemMode)return;if(t=t||"",this.resetItem(),!t)return void this.update(0);let s=this.uis.length;for(;s--;)this.uis[s].value===t&&(this.uis[s].selected(!0),this.isScroll&&this.update(s*(this.uis[s].h+this.margin)*this.ratio))}upScroll(t){this.sw=t?this.size.s:0,this.oy=t?this.oy:0,this.scrollBG.style.display=t?"block":"none",t&&(this.total=this.h,this.maxView=this.maxHeight,this.ratio=this.maxView/this.total,this.sh=this.maxView*this.ratio,this.range=this.maxView-this.sh,this.oy=h.clamp(this.oy,0,this.range),this.scrollBG.style.height=this.maxView+"px",this.scroll.style.height=this.sh+"px"),this.setItemWidth(this.zone.w-this.sw),this.update(this.oy)}update(t){t=h.clamp(t,0,this.range),this.decal=Math.floor(t/this.ratio),this.inner.style.top=-this.decal+"px",this.scroll.style.top=Math.floor(t)+"px",this.oy=t}calcUis(){return i.calcUis(this.uis,this.zone,this.zone.y)}calc(){clearTimeout(this.tmp),this.tmp=setTimeout(this.setHeight.bind(this),10)}setHeight(){if(this.tmp&&clearTimeout(this.tmp),this.zone.h=this.bh,this.isScroll=!1,this.isOpen){this.h=this.calcUis();let t=this.forceHeight?this.forceHeight+this.zone.y:window.innerHeight;this.maxHeight=t-this.zone.y-this.bh,this.h-this.maxHeight>1?(this.isScroll=!0,this.zone.h=this.maxHeight+this.bh):this.zone.h=this.h+this.bh}this.upScroll(this.isScroll),this.innerContent.style.height=this.zone.h-this.bh+"px",this.content.style.height=this.zone.h+"px",this.bottom.style.top=this.zone.h-this.bh+"px",this.forceHeight&&this.lockHeight&&(this.content.style.height=this.forceHeight+"px"),this.isCanvas&&this.draw(!0)}rezone(){i.needReZone=!0}setWidth(t){t&&(this.zone.w=t),this.zone.w=Math.floor(this.zone.w),this.content.style.width=this.zone.w+"px",this.isCenter&&(this.content.style.marginLeft=-Math.floor(.5*this.zone.w)+"px"),this.setItemWidth(this.zone.w-this.sw)}setItemWidth(t){let s=this.uis.length;for(;s--;)this.uis[s].setSize(t),this.uis[s].rSize()}},t.REVISION="4.3.0",t.Tools=h,t.add=O,Object.defineProperty(t,"__esModule",{value:!0})})); diff --git a/build/uil.module.js b/build/uil.module.js index 0721697..3c6e46c 100644 --- a/build/uil.module.js +++ b/build/uil.module.js @@ -1,9477 +1,6 @@ -/** - * @author lth / https://github.com/lo-th - */ - -const REVISION = "4.3.0"; - -// INTENAL FUNCTION - -const R = { - ui: [], - - dom: null, - - ID: null, - lock: false, - wlock: false, - current: -1, - - needReZone: true, - needResize: false, - forceZone: false, - isEventsInit: false, - isLeave: false, - addDOMEventListeners: true, - - downTime: 0, - prevTime: 0, - - //prevDefault: ['contextmenu', 'wheel'], - prevDefault: ["contextmenu"], - pointerEvent: ["pointerdown", "pointermove", "pointerup"], - eventOut: ["pointercancel", "pointerout", "pointerleave"], - - xmlserializer: null, - tmpTime: null, - tmpImage: null, - - oldCursor: "auto", - - input: null, - parent: null, - firstImput: true, - - hiddenImput: null, - hiddenSizer: null, - hasFocus: false, - startInput: false, - inputRange: [0, 0], - cursorId: 0, - str: "", - pos: 0, - startX: -1, - moveX: -1, - - debugInput: false, - - isLoop: false, - listens: [], - - e: { - type: null, - clientX: 0, - clientY: 0, - keyCode: NaN, - key: null, - delta: 0, - }, - - isMobile: false, - - now: null, - needsUpdate: false, - - getTime: function () { - return self.performance && self.performance.now - ? self.performance.now.bind(performance) - : Date.now; - }, - - add: function (o) { - // R.ui[0] is de GUI object that is added first by the constructor - R.ui.push(o); - R.getZone(o); - - if (!R.isEventsInit) R.initEvents(); - }, - - testMobile: function () { - let n = navigator.userAgent; - if ( - n.match(/Android/i) || - n.match(/webOS/i) || - n.match(/iPhone/i) || - n.match(/iPad/i) || - n.match(/iPod/i) || - n.match(/BlackBerry/i) || - n.match(/Windows Phone/i) - ) - return true; - else return false; - }, - - remove: function (o) { - let i = R.ui.indexOf(o); - - if (i !== -1) { - R.removeListen(o); - R.ui.splice(i, 1); - } - - if (R.ui.length === 0) { - R.removeEvents(); - } - }, - - // ---------------------- - // EVENTS - // ---------------------- - - initEvents: function () { - if (R.isEventsInit) return; - - let dom = document.body; - - R.isMobile = R.testMobile(); - R.now = R.getTime(); - - if (!R.isMobile) { - dom.addEventListener("wheel", R, { passive: false }); - } else { - dom.style.touchAction = "none"; - } - - console.log("R.addDOMEventListeners " + R.addDOMEventListeners); - if (R.addDOMEventListeners) { - dom.addEventListener("pointercancel", R); - dom.addEventListener("pointerleave", R); - //dom.addEventListener( 'pointerout', R ) - - dom.addEventListener("pointermove", R); - dom.addEventListener("pointerdown", R); - dom.addEventListener("pointerup", R); - - dom.addEventListener("keydown", R, false); - dom.addEventListener("keyup", R, false); - } - window.addEventListener("resize", R.resize, false); - - //window.onblur = R.out; - //window.onfocus = R.in; - - R.isEventsInit = true; - R.dom = dom; - }, - - removeEvents: function () { - if (!R.isEventsInit) return; - - let dom = document.body; - - if (!R.isMobile) { - dom.removeEventListener("wheel", R); - } - - if (R.addDOMEventListeners) { - dom.removeEventListener("pointercancel", R); - dom.removeEventListener("pointerleave", R); - //dom.removeEventListener( 'pointerout', R ); - - dom.removeEventListener("pointermove", R); - dom.removeEventListener("pointerdown", R); - dom.removeEventListener("pointerup", R); - - dom.removeEventListener("keydown", R); - dom.removeEventListener("keyup", R); - } - window.removeEventListener("resize", R.resize); - - R.isEventsInit = false; - }, - - resize: function () { - let i = R.ui.length, - u; - - while (i--) { - u = R.ui[i]; - if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); - } - - R.needReZone = true; - R.needResize = false; - }, - - out: function () { - console.log("im am out"); - R.clearOldID(); - }, - - in: function () { - console.log("im am in"); - // R.clearOldID(); - }, - - // ---------------------- - // HANDLE EVENTS - // ---------------------- - - fakeUp: function () { - this.handleEvent({ type: "pointerup" }); - }, - - handleEvent: function (event) { - //console.log("Roots.handleEvent "+event.type) - //if(!event.type) return; - - if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); - - if (R.needResize) R.resize(); - - R.findZone(R.forceZone); - - let e = R.e; - let leave = false; - - if (event.type === "keydown") R.keydown(event); - if (event.type === "keyup") R.keyup(event); - - if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; - else e.delta = 0; - - let ptype = event.pointerType; // mouse, pen, touch - - e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; - e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; - - e.type = event.type; - - if (R.eventOut.indexOf(event.type) !== -1) { - leave = true; - e.type = "mouseup"; - } - - if (event.type === "pointerleave") R.isLeave = true; - - if (event.type === "pointerdown") e.type = "mousedown"; - if (event.type === "pointerup") e.type = "mouseup"; - if (event.type === "pointermove") { - if (R.isLeave) { - // if user resize outside this document - R.isLeave = false; - R.resize(); - } - e.type = "mousemove"; - } - - // double click test - if (e.type === "mousedown") { - R.downTime = R.now(); - let time = R.downTime - R.prevTime; - - // double click on imput - if (time < 200) { - R.selectAll(); - return false; - } - - R.prevTime = R.downTime; - R.forceZone = false; - } - - // for imput - if (e.type === "mousedown") R.clearInput(); - - // mouse lock - if (e.type === "mousedown") R.lock = true; - if (e.type === "mouseup") R.lock = false; - - //if( R.current !== null && R.current.neverlock ) R.lock = false; - - /*if( e.type === 'mousedown' && event.button === 1){ - R.cursor() - e.preventDefault(); - e.stopPropagation(); - }*/ - - //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) - - if (R.isMobile && e.type === "mousedown") R.findID(e); - if (e.type === "mousemove" && !R.lock) R.findID(e); - - if (R.ID !== null) { - if (R.ID.isCanvasOnly) { - e.clientX = R.ID.mouse.x; - e.clientY = R.ID.mouse.y; - } - - //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 - - R.ID.handleEvent(e); - } - - if (R.isMobile && e.type === "mouseup") R.clearOldID(); - if (leave) R.clearOldID(); - }, - - // ---------------------- - // ID - // ---------------------- - - findID: function (e) { - let i = R.ui.length, - next = -1, - u, - x, - y; - - while (i--) { - u = R.ui[i]; - - if (u.isCanvasOnly) { - x = u.mouse.x; - y = u.mouse.y; - } else { - x = e.clientX; - y = e.clientY; - } - - if (R.onZone(u, x, y)) { - next = i; - - if (next !== R.current) { - R.clearOldID(); - R.current = next; - R.ID = u; - } - break; - } - } - - if (next === -1) R.clearOldID(); - }, - - clearOldID: function () { - if (!R.ID) return; - R.current = -1; - R.ID.reset(); - R.ID = null; - R.cursor(); - }, - - // ---------------------- - // GUI / GROUP FUNCTION - // ---------------------- - - calcUis: (uis, zone, py, group = false) => { - //console.log('calc_uis') - - let i = uis.length, - u, - px = 0, - n = 0, - tw, - m; - - let height = 0; - - while (i--) { - u = uis[n]; - n++; - - if (!group && u.isGroup) u.calcUis(); - - m = u.margin; - //div = u.marginDiv - - u.zone.w = u.w; - u.zone.h = u.h + m; - - if (!u.autoWidth) { - if (px === 0) height += u.h + m; - - u.zone.x = zone.x + px; - u.zone.y = py; // + u.mtop - //if(div) u.zone.y += m * 0.5 - - tw = R.getWidth(u); - if (tw) u.zone.w = u.w = tw; - else if (u.fw) u.zone.w = u.w = u.fw; - - px += u.zone.w; - - if (px >= zone.w) { - py += u.h + m; - //if(div) py += m * 0.5 - px = 0; - } - } else { - px = 0; - - u.zone.x = zone.x + u.dx; - u.zone.y = py; - py += u.h + m; - - height += u.h + m; - } - } - - return height; - }, - - findTarget: function (uis, e) { - let i = uis.length; - - while (i--) { - if (R.onZone(uis[i], e.clientX, e.clientY)) return i; - } - - return -1; - }, - - // ---------------------- - // ZONE - // ---------------------- - - findZone: function (force) { - if (!R.needReZone && !force) return; - - var i = R.ui.length, - u; - - while (i--) { - u = R.ui[i]; - R.getZone(u); - if (u.isGui) u.calcUis(); - } - - R.needReZone = false; - }, - - onZone: function (o, x, y) { - if (x === undefined || y === undefined) return false; - - let z = o.zone; - let mx = x - z.x; // - o.dx; - let my = y - z.y; - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 - //if( o.group !== null ) mx -= o.dx - - let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; - - //if( o.marginDiv ) my -= o.margin * 0.5 - - if (over) o.local.set(mx, my); - else o.local.neg(); - - return over; - }, - - getWidth: function (o) { - //return o.getDom().offsetWidth - return o.getDom().clientWidth; - - //let r = o.getDom().getBoundingClientRect(); - //return (r.width) - //return Math.floor(r.width) - }, - - getZone: function (o) { - if (o.isCanvasOnly) return; - let r = o.getDom().getBoundingClientRect(); - - //if( !r.width ) return - //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; - //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; - o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; - - //console.log(o.name, o.zone) - }, - - // ---------------------- - // CURSOR - // ---------------------- - - cursor: function (name) { - name = name ? name : "auto"; - if (name !== R.oldCursor) { - document.body.style.cursor = name; - R.oldCursor = name; - } - }, - - // ---------------------- - // CANVAS - // ---------------------- - - toCanvas: function (o, w, h, force) { - if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); - - // prevent exesive redraw - - if (force && R.tmpTime !== null) { - clearTimeout(R.tmpTime); - R.tmpTime = null; - } - - if (R.tmpTime !== null) return; - - if (R.lock) - R.tmpTime = setTimeout(function () { - R.tmpTime = null; - }, 10); - - /// - - let isNewSize = false; - if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; - - if (R.tmpImage === null) R.tmpImage = new Image(); - - let img = R.tmpImage; //new Image(); - - let htmlString = R.xmlserializer.serializeToString(o.content); - - let svg = - '' + - htmlString + - ""; - - img.onload = function () { - let ctx = o.canvas.getContext("2d"); - - if (isNewSize) { - o.canvas.width = w; - o.canvas.height = h; - } else { - ctx.clearRect(0, 0, w, h); - } - ctx.drawImage(this, 0, 0); - - o.onDraw(); - }; - - img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); - //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); - img.crossOrigin = ""; - R.needsUpdate = false; - }, - - // ---------------------- - // INPUT - // ---------------------- - - setHidden: function () { - if (R.hiddenImput === null) { - //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' - //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' - //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; - - R.hiddenImput = document.createElement("input"); - R.hiddenImput.type = "text"; - //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); - - R.hiddenSizer = document.createElement("div"); - //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; - - document.body.appendChild(R.hiddenImput); - document.body.appendChild(R.hiddenSizer); - } - - let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; - let css = - R.parent.css.txtselect + - "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + - hide; - R.hiddenImput.style.cssText = - css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); - R.hiddenSizer.style.cssText = css + "bottom:40px;"; - - R.hiddenImput.style.width = R.input.clientWidth + "px"; - R.hiddenImput.value = R.str; - R.hiddenSizer.innerHTML = R.str; - - R.hasFocus = true; - }, - - clearHidden: function (p) { - if (R.hiddenImput === null) return; - R.hasFocus = false; - }, - - clickPos: function (x) { - let i = R.str.length, - l = 0, - n = 0; - while (i--) { - l += R.textWidth(R.str[n]); - if (l >= x) break; - n++; - } - return n; - }, - - upInput: function (x, down) { - if (R.parent === null) return false; - - let up = false; - - if (down) { - let id = R.clickPos(x); - - R.moveX = id; - - if (R.startX === -1) { - R.startX = id; - R.cursorId = id; - R.inputRange = [R.startX, R.startX]; - } else { - let isSelection = R.moveX !== R.startX; - - if (isSelection) { - if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; - else R.inputRange = [R.startX, R.moveX]; - } - } - - up = true; - } else { - if (R.startX !== -1) { - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.startX = -1; - - up = true; - } - } - - if (up) R.selectParent(); - - return up; - }, - - selectAll: function () { - if (!R.parent) return; - - R.str = R.input.textContent; - R.inputRange = [0, R.str.length]; - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.cursorId = R.inputRange[1]; - R.selectParent(); - }, - - selectParent: function () { - var c = R.textWidth(R.str.substring(0, R.cursorId)); - var e = R.textWidth(R.str.substring(0, R.inputRange[0])); - var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); - - R.parent.select(c, e, s, R.hiddenSizer.innerHTML); - }, - - textWidth: function (text) { - if (R.hiddenSizer === null) return 0; - text = text.replace(/ /g, " "); - R.hiddenSizer.innerHTML = text; - return R.hiddenSizer.clientWidth; - }, - - clearInput: function () { - if (R.parent === null) return; - if (!R.firstImput) R.parent.validate(true); - - R.clearHidden(); - R.parent.unselect(); - - //R.input.style.background = 'none'; - R.input.style.background = R.parent.colors.back; - R.input.style.borderColor = R.parent.colors.border; - //R.input.style.color = R.parent.colors.text; - R.parent.isEdit = false; - - R.input = null; - R.parent = null; - (R.str = ""), (R.firstImput = true); - }, - - setInput: function (Input, parent) { - R.clearInput(); - - R.input = Input; - R.parent = parent; - - R.input.style.background = R.parent.colors.backoff; - R.input.style.borderColor = R.parent.colors.select; - //R.input.style.color = R.parent.colors.textSelect; - R.str = R.input.textContent; - - R.setHidden(); - }, - - keydown: function (e) { - if (R.parent === null) return; - - let keyCode = e.which; - e.shiftKey; - - //console.log( keyCode ) - - R.firstImput = false; - - if (R.hasFocus) { - // hack to fix touch event bug in iOS Safari - window.focus(); - R.hiddenImput.focus(); - } - - R.parent.isEdit = true; - - // e.preventDefault(); - - // add support for Ctrl/Cmd+A selection - //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { - //R.selectText(); - //e.preventDefault(); - //return self.render(); - //} - - if (keyCode === 13) { - //enter - - R.clearInput(); - - //} else if( keyCode === 9 ){ //tab key - - // R.input.textContent = ''; - } else { - if (R.input.isNum) { - if ( - (e.keyCode > 47 && e.keyCode < 58) || - (e.keyCode > 95 && e.keyCode < 106) || - e.keyCode === 190 || - e.keyCode === 110 || - e.keyCode === 8 || - e.keyCode === 109 - ) { - R.hiddenImput.readOnly = false; - } else { - R.hiddenImput.readOnly = true; - } - } else { - R.hiddenImput.readOnly = false; - } - } - }, - - keyup: function (e) { - if (R.parent === null) return; - - R.str = R.hiddenImput.value; - - if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value - else R.input.textContent = R.str; - - R.cursorId = R.hiddenImput.selectionStart; - R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; - - R.selectParent(); - - //if( R.parent.allway ) - R.parent.validate(); - }, - - // ---------------------- - // - // LISTENING - // - // ---------------------- - - /* - // esta era la funcion original - loop: function () { - - if( R.isLoop ) requestAnimationFrame( R.loop ); - R.update(); - - }, - - */ - - loop: function () { - // modified by Fedemarino - if (R.isLoop) requestAnimationFrame(R.loop); - R.needsUpdate = R.update(); - // if there is a change in a value generated externally, the GUI needs to be redrawn - if (R.ui[0] && R.needsUpdate) R.ui[0].draw(); - }, - - update: function () { - // modified by Fedemarino - let i = R.listens.length; - let needsUpdate = false; - while (i--) { - //check if the value of the object has changed - let hasChanged = R.listens[i].listening(); - if (hasChanged) needsUpdate = true; - } - return needsUpdate; - }, - - removeListen: function (proto) { - let id = R.listens.indexOf(proto); - if (id !== -1) R.listens.splice(id, 1); - if (R.listens.length === 0) R.isLoop = false; - }, - - addListen: function (proto) { - let id = R.listens.indexOf(proto); - - if (id !== -1) return false; - - R.listens.push(proto); - - if (!R.isLoop) { - R.isLoop = true; - R.loop(); - } - - return true; - }, -}; - -const Roots = R; - -/** - * @author lth / https://github.com/lo-th - */ - -const T = { - - transition: 0.2, - - frag: document.createDocumentFragment(), - - colorRing: null, - joystick_0: null, - joystick_1: null, - circular: null, - knob: null, - pad2d: null, - - svgns: "http://www.w3.org/2000/svg", - links: "http://www.w3.org/1999/xlink", - htmls: "http://www.w3.org/1999/xhtml", - - DOM_SIZE: [ 'height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], - SVG_TYPE_D: [ 'pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix' ], - SVG_TYPE_G: [ 'svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject' ], - - PI: Math.PI, - TwoPI: Math.PI*2, - pi90: Math.PI * 0.5, - pi60: Math.PI/3, - - torad: Math.PI / 180, - todeg: 180 / Math.PI, - - clamp: ( v, min, max ) => { - - v = v < min ? min : v; - v = v > max ? max : v; - return v; - - }, - - isDivid: ( v ) => ( v*0.5 === Math.floor(v*0.5) ), - - size: { w: 240, h: 20, p: 30, s: 8 }, - - // ---------------------- - // COLOR - // ---------------------- - - defineColor: ( o, cc = T.colors ) => { - - let color = { ...cc }; - - let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize' ]; - let changeText = false; - - if( o.font ) o.fontFamily = o.font; - if( o.shadow ) o.fontShadow = o.shadow; - if( o.weight ) o.fontWeight = o.weight; - - if( o.fontColor ) o.text = o.fontColor; - if( o.color ) o.text = o.color; - - if( o.text ){ - color.text = o.text; - if( !o.fontColor && !o.color ){ - color.title = T.ColorLuma( o.text, -0.25 ); - color.titleoff = T.ColorLuma( o.text, -0.5 ); - } - color.textOver = T.ColorLuma( o.text, 0.25 ); - color.textSelect = T.ColorLuma( o.text, 0.5 ); - } - - if( o.button ){ - color.button = o.button; - color.border = T.ColorLuma( o.button, 0.1 ); - color.overoff = T.ColorLuma( o.button, 0.2 ); - } - - if( o.select ){ - color.select = o.select; - color.over = T.ColorLuma( o.select, -0.1 ); - } - - if( o.itemBg ) o.back = o.itemBg; - - if( o.back ){ - color.back = o.back; - color.backoff = T.ColorLuma( o.back, -0.1 ); - } - - if( o.fontSelect ) color.textSelect = o.fontSelect; - if( o.groupBorder ) color.gborder = o.groupBorder; - - //if( o.transparent ) o.bg = 'none' - //if( o.bg ) color.background = color.backgroundOver = o.bg - if( o.bgOver ) color.backgroundOver = o.bgOver; - - for( let m in color ){ - if(o[m]!==undefined) color[m] = o[m]; - } - - for( let m in o ){ - if( textChange.indexOf(m) !== -1 ) changeText = true; - } - - if( changeText ) T.defineText( color ); - - return color - - }, - - colors: { - - sx: 4,//4 - sy: 2,//2 - radius:2, - - showOver : 1, - //groupOver : 1, - - content:'none', - background: 'rgba(50,50,50,0.15)', - backgroundOver: 'rgba(50,50,50,0.3)', - - title : '#CCC', - titleoff : '#BBB', - text : '#DDD', - textOver : '#EEE', - textSelect : '#FFF', - - back:'rgba(0,0,0,0.2)', - backoff:'rgba(0,0,0,0.3)', - - // input and button border - border : '#4c4c4c', - borderSize : 1, - - gborder : 'none', - groups : 'none', - - - button : '#3c3c3c', - overoff : '#5c5c5c', - over : '#024699', - select : '#308AFF', - action: '#FF3300', - - //fontFamily: 'Tahoma', - fontFamily: 'Consolas, monospace', - //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", - fontWeight: 'normal', - fontShadow: 'none',//'#000', - fontSize:12, - - joyOver:'rgba(48,138,255,0.25)', - joyOut: 'rgba(100,100,100,0.5)', - joySelect: '#308AFF', - - - hide: 'rgba(0,0,0,0)', - - }, - - // style css - - css : { - - basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', - button:'display:flex; align-items:center; justify-content:center; text-align:center;', - middle:'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' - }, - - // svg path - - svgs: { - - g1:'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', - g2:'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', - - group:'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', - arrow:'M 3 8 L 8 5 3 2 3 8 Z', - - arrowDown:'M 5 8 L 8 3 2 3 5 8 Z', - arrowUp:'M 5 2 L 2 7 8 7 5 2 Z', - - solid:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', - body:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', - vehicle:'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', - articulation:'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', - character:'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', - terrain:'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', - joint:'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', - ray:'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', - collision:'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', - map:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - material:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - texture:'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', - object:'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', - none:'M 9 5 L 5 5 5 9 9 9 9 5 Z', - cursor:'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', - load:'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', - save:'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', - extern:'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z', - - }, - - rezone () { - Roots.needReZone = true; - }, - - getImput: function(){ - - return Roots.input ? true : false - - }, - - setStyle : function ( data ){ - - for ( var o in data ){ - if( T.colors[o] ) T.colors[o] = data[o]; - } - - T.setText(); - - }, - - // ---------------------- - // custom text - // ---------------------- - - defineText: function( o ){ - - T.setText( o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight ); - - }, - - setText: function( size, color, font, shadow, weight ){ - - let cc = T.colors; - - if( font === undefined ) font = cc.fontFamily; - if( size === undefined ) size = cc.fontSize; - if( shadow === undefined ) shadow = cc.fontShadow; - if( weight === undefined ) weight = cc.fontWeight; - if( color === undefined ) color = cc.text; - - if( isNaN(size) ){ if( size.search('em')===-1 ) size += 'px';} - else size += 'px'; - - - //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' - - T.css.txt = T.css.basic + T.css.middle + ' font-family:'+ font +'; font-weight:'+weight+'; font-size:'+size+'; color:'+cc.text+'; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; - if( shadow !== 'none' ) T.css.txt += ' text-shadow: 1px 1px 1px '+shadow+';'; - - T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; - T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; - - }, - - - // note - - //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container - - /*cloneColor: function () { - - let cc = Object.assign({}, T.colors ); - return cc; - - },*/ - - // intern function - - cloneCss: function () { - - //let cc = Object.assign({}, T.css ); - return { ...T.css }; - - }, - - clone: function ( o ) { - - return o.cloneNode( true ); - - }, - - setSvg: function( dom, type, value, id, id2 ){ - - if( id === -1 ) dom.setAttributeNS( null, type, value ); - else if( id2 !== undefined ) dom.childNodes[ id || 0 ].childNodes[ id2 || 0 ].setAttributeNS( null, type, value ); - else dom.childNodes[ id || 0 ].setAttributeNS( null, type, value ); - - }, - - setCss: function( dom, css ){ - - for( let r in css ){ - if( T.DOM_SIZE.indexOf(r) !== -1 ) dom.style[r] = css[r] + 'px'; - else dom.style[r] = css[r]; - } - - }, - - set: function( g, o ){ - - for( let att in o ){ - if( att === 'txt' ) g.textContent = o[ att ]; - if( att === 'link' ) g.setAttributeNS( T.links, 'xlink:href', o[ att ] ); - else g.setAttributeNS( null, att, o[ att ] ); - } - - }, - - get: function( dom, id ){ - - if( id === undefined ) return dom; // root - else if( !isNaN( id ) ) return dom.childNodes[ id ]; // first child - else if( id instanceof Array ){ - if(id.length === 2) return dom.childNodes[ id[0] ].childNodes[ id[1] ]; - if(id.length === 3) return dom.childNodes[ id[0] ].childNodes[ id[1] ].childNodes[ id[2] ]; - } - - }, - - dom : function ( type, css, obj, dom, id ) { - - type = type || 'div'; - - if( T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1 ){ // is svg element - - if( type ==='svg' ){ - - dom = document.createElementNS( T.svgns, 'svg' ); - T.set( dom, obj ); - - /* } else if ( type === 'use' ) { - - dom = document.createElementNS( T.svgns, 'use' ); - T.set( dom, obj ); -*/ - } else { - // create new svg if not def - if( dom === undefined ) dom = document.createElementNS( T.svgns, 'svg' ); - T.addAttributes( dom, type, obj, id ); - - } - - } else { // is html element - - if( dom === undefined ) dom = document.createElementNS( T.htmls, type ); - else dom = dom.appendChild( document.createElementNS( T.htmls, type ) ); - - } - - if( css ) dom.style.cssText = css; - - if( id === undefined ) return dom; - else return dom.childNodes[ id || 0 ]; - - }, - - addAttributes : function( dom, type, o, id ){ - - let g = document.createElementNS( T.svgns, type ); - T.set( g, o ); - T.get( dom, id ).appendChild( g ); - if( T.SVG_TYPE_G.indexOf(type) !== -1 ) g.style.pointerEvents = 'none'; - return g; - - }, - - clear : function( dom ){ - - T.purge( dom ); - while (dom.firstChild) { - if ( dom.firstChild.firstChild ) T.clear( dom.firstChild ); - dom.removeChild( dom.firstChild ); - } - - }, - - purge : function ( dom ) { - - let a = dom.attributes, i, n; - if (a) { - i = a.length; - while(i--){ - n = a[i].name; - if (typeof dom[n] === 'function') dom[n] = null; - } - } - a = dom.childNodes; - if (a) { - i = a.length; - while(i--){ - T.purge( dom.childNodes[i] ); - } - } - - }, - - // ---------------------- - // SVG Effects function - // ---------------------- - - addSVGGlowEffect: function () { - - if ( document.getElementById( 'UILGlow') !== null ) return; - - let svgFilter = T.initUILEffects(); - - let filter = T.addAttributes( svgFilter, 'filter', { id: 'UILGlow', x: '-20%', y: '-20%', width: '140%', height: '140%' } ); - T.addAttributes( filter, 'feGaussianBlur', { in: 'SourceGraphic', stdDeviation: '3', result: 'uilBlur' } ); - let feMerge = T.addAttributes( filter, 'feMerge', { } ); - - for( let i = 0; i <= 3; i++ ) { - - T.addAttributes( feMerge, 'feMergeNode', { in: 'uilBlur' } ); - - } - - T.addAttributes( feMerge, 'feMergeNode', { in: 'SourceGraphic' } ); - - }, - - initUILEffects: function () { - - let svgFilter = document.getElementById( 'UILSVGEffects'); - - if ( svgFilter === null ) { - - svgFilter = T.dom( 'svg', undefined , { id: 'UILSVGEffects', width: '0', height: '0' } ); - document.body.appendChild( svgFilter ); - - } - - return svgFilter; - - }, - - // ---------------------- - // Color function - // ---------------------- - - ColorLuma : function ( hex, l ) { - - //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; - - if( hex === 'n' ) hex = '#000'; - - // validate hex string - hex = String(hex).replace(/[^0-9a-f]/gi, ''); - if (hex.length < 6) { - hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; - } - l = l || 0; - - // convert to decimal and change luminosity - let rgb = "#", c, i; - for (i = 0; i < 3; i++) { - c = parseInt(hex.substr(i*2,2), 16); - c = Math.round(Math.min(Math.max(0, c + (c * l)), 255)).toString(16); - rgb += ("00"+c).substr(c.length); - } - - return rgb; - - }, - - findDeepInver: function ( c ) { - - return (c[0] * 0.3 + c[1] * .59 + c[2] * .11) <= 0.6; - - }, - - lerpColor: function( c1, c2, factor ) { - let newColor = {}; - for ( let i = 0; i < 3; i++ ) { - newColor[i] = c1[ i ] + ( c2[ i ] - c1[ i ] ) * factor; - } - return newColor; - }, - - hexToHtml: function ( v ) { - v = v === undefined ? 0x000000 : v; - return "#" + ("000000" + v.toString(16)).substr(-6); - - }, - - htmlToHex: function ( v ) { - - return v.toUpperCase().replace("#", "0x"); - - }, - - u255: function (c, i) { - - return parseInt(c.substring(i, i + 2), 16) / 255; - - }, - - u16: function ( c, i ) { - - return parseInt(c.substring(i, i + 1), 16) / 15; - - }, - - unpack: function( c ){ - - if (c.length == 7) return [ T.u255(c, 1), T.u255(c, 3), T.u255(c, 5) ]; - else if (c.length == 4) return [ T.u16(c,1), T.u16(c,2), T.u16(c,3) ]; - - }, - - p255: function ( c ) { - let h = Math.round( ( c * 255 ) ).toString( 16 ); - if ( h.length < 2 ) h = '0' + h; - return h; - }, - - pack: function ( c ) { - - return '#' + T.p255( c[ 0 ] ) + T.p255( c[ 1 ] ) + T.p255( c[ 2 ] ); - - }, - - htmlRgb: function( c ){ - - return 'rgb(' + Math.round(c[0] * 255) + ','+ Math.round(c[1] * 255) + ','+ Math.round(c[2] * 255) + ')'; - - }, - - pad: function( n ){ - if(n.length == 1)n = '0' + n; - return n; - }, - - rgbToHex : function( c ){ - - let r = Math.round(c[0] * 255).toString(16); - let g = Math.round(c[1] * 255).toString(16); - let b = Math.round(c[2] * 255).toString(16); - return '#' + T.pad(r) + T.pad(g) + T.pad(b); - - // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); - - }, - - hueToRgb: function( p, q, t ){ - - if ( t < 0 ) t += 1; - if ( t > 1 ) t -= 1; - if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; - if ( t < 1 / 2 ) return q; - if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); - return p; - - }, - - rgbToHsl: function ( c ) { - - let r = c[0], g = c[1], b = c[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h = 0, s = 0, l = (min + max) / 2; - if (l > 0 && l < 1) s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); - if (delta > 0) { - if (max == r && max != g) h += (g - b) / delta; - if (max == g && max != b) h += (2 + (b - r) / delta); - if (max == b && max != r) h += (4 + (r - g) / delta); - h /= 6; - } - return [ h, s, l ]; - - }, - - hslToRgb: function ( c ) { - - let p, q, h = c[0], s = c[1], l = c[2]; - - if ( s === 0 ) return [ l, l, l ]; - else { - q = l <= 0.5 ? l * (s + 1) : l + s - ( l * s ); - p = l * 2 - q; - return [ T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333) ]; - } - - }, - - // ---------------------- - // SVG MODEL - // ---------------------- - - makeGradiant: function ( type, settings, parent, colors ) { - - T.dom( type, null, settings, parent, 0 ); - - let n = parent.childNodes[0].childNodes.length - 1, c; - - for( let i = 0; i < colors.length; i++ ){ - - c = colors[i]; - //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); - T.dom( 'stop', null, { offset:c[0]+'%', 'stop-color':c[1], 'stop-opacity':c[2] }, parent, [0,n] ); - - } - - }, - - /*makeGraph: function () { - - let w = 128; - let radius = 34; - let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 - //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 - //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 - - //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 - //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 - T.graph = svg; - - },*/ - - makePad: function ( model ) { - - let ww = 256; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+ww+' '+ww, width:ww, height:ww, preserveAspectRatio:'none' } ); - let w = 200; - let d = (ww-w)*0.5, m = 20; - Tools.dom( 'rect', '', { x: d, y: d, width: w, height: w, fill:T.colors.back }, svg ); // 0 - Tools.dom( 'rect', '', { x: d+m*0.5, y: d+m*0.5, width: w - m , height: w - m, fill:T.colors.button }, svg ); // 1 - // Pointer - Tools.dom( 'line', '', { x1: d+(m*0.5), y1: ww *0.5, x2: d+(w-m*0.5), y2: ww * 0.5, stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 2 - Tools.dom( 'line', '', { x1: ww * 0.5, x2: ww * 0.5, y1: d+(m*0.5), y2: d+(w-m*0.5), stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 3 - Tools.dom( 'circle', '', { cx: ww * 0.5, cy: ww * 0.5, r:5, stroke: T.colors.text, 'stroke-width': 5, fill:'none' }, svg ); // 4 - T.pad2d = svg; - - }, - - makeKnob: function ( model ) { - - let w = 128; - let radius = 34; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'round' }, svg );//1 - T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.1)', 'stroke-width':7 , fill:'none'}, svg );//2 - T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 - T.knob = svg; - - }, - - makeCircular: function ( model ) { - - let w = 128; - let radius = 40; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'circle', '', { cx:64, cy:64, r:radius, stroke:'rgba(0,0,0,0.1)', 'stroke-width':10, fill:'none' }, svg );//0 - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':7, fill:'none', 'stroke-linecap':'butt' }, svg );//1 - T.circular = svg; - - }, - - makeJoystick: function ( model ) { - - //+' background:#f00;' - - let w = 128, ccc; - let radius = Math.floor((w-30)*0.5); - let innerRadius = Math.floor(radius*0.6); - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'defs', null, {}, svg ); - T.dom( 'g', null, {}, svg ); - - if( model === 0 ){ - - - - // gradian background - ccc = [ [40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'grad', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // gradian shadow - ccc = [ [60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'gradS', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // gradian stick - let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; - let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; - - ccc = [ [30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1] ]; - T.makeGradiant( 'radialGradient', { id:'gradIn', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - ccc = [ [30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1] ]; - T.makeGradiant( 'radialGradient', { id:'gradIn2', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - // graph - - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'url(#grad)' }, svg );//2 - T.dom( 'circle', '', { cx:64+5, cy:64+10, r:innerRadius+10, fill:'url(#gradS)' }, svg );//3 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'url(#gradIn)' }, svg );//4 - - T.joystick_0 = svg; - - } else { - // gradian shadow - ccc = [ [69, 'rgb(0,0,0)', 0],[70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0] ]; - T.makeGradiant( 'radialGradient', { id:'gradX', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); - - T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'none', stroke:'rgba(100,100,100,0.25)', 'stroke-width':'4' }, svg );//2 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius+14, fill:'url(#gradX)' }, svg );//3 - T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'none', stroke:'rgb(100,100,100)', 'stroke-width':'4' }, svg );//4 - - T.joystick_1 = svg; - } - - - - }, - - makeColorRing: function () { - - let w = 256; - let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'defs', null, {}, svg ); - T.dom( 'g', null, {}, svg ); - - let s = 30;//stroke - let r =( w-s )*0.5; - let mid = w*0.5; - let n = 24, nudge = 8 / r / n * Math.PI, a1 = 0; - let am, tan, d2, a2, ar, i, j, path, ccc; - let color = []; - - for ( i = 0; i <= n; ++i) { - - d2 = i / n; - a2 = d2 * T.TwoPI; - am = (a1 + a2) * 0.5; - tan = 1 / Math.cos((a2 - a1) * 0.5); - - ar = [ - Math.sin(a1), -Math.cos(a1), - Math.sin(am) * tan, -Math.cos(am) * tan, - Math.sin(a2), -Math.cos(a2) - ]; - - color[1] = T.rgbToHex( T.hslToRgb([d2, 1, 0.5]) ); - - if (i > 0) { - - j = 6; - while(j--){ - ar[j] = ((ar[j]*r)+mid).toFixed(2); - } - - path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; - - ccc = [ [0,color[0],1], [100,color[1],1] ]; - T.makeGradiant( 'linearGradient', { id:'G'+i, x1:ar[0], y1:ar[1], x2:ar[4], y2:ar[5], gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - T.dom( 'path', '', { d:path, 'stroke-width':s, stroke:'url(#G'+i+')', 'stroke-linecap':"butt" }, svg, 1 ); - - } - a1 = a2 - nudge; - color[0] = color[1]; - } - - let tw = 84.90; - - // black / white - ccc = [ [0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1] ]; - T.makeGradiant( 'linearGradient', { id:'GL0', x1:0, y1:mid-tw, x2:0, y2:mid+tw, gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - ccc = [ [0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0] ]; - T.makeGradiant( 'linearGradient', { id:'GL1', x1:mid-49.05, y1:0, x2:mid+98, y2:0, gradientUnits:"userSpaceOnUse" }, svg, ccc ); - - T.dom( 'g', null, { 'transform-origin': '128px 128px', 'transform':'rotate(0)' }, svg );//2 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'red' }, svg, 2 );// 2,0 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL1)','stroke-width':1, stroke:'url(#GL1)' }, svg, 2 );//2,1 - T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL0)','stroke-width':1, stroke:'url(#GL0)' }, svg, 2 );//2,2 - T.dom( 'path', '', { d:'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill:'none','stroke-width':2, stroke:'#000' }, svg, 2 );//2,3 - //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 - - T.dom( 'circle', '', { cx:128, cy:128, r:6, 'stroke-width':2, stroke:'#000', fill:'none' }, svg );//3 - - T.colorRing = svg; - - }, - - icon: function ( type, color, w ){ - - w = w || 40; - //color = color || '#DEDEDE'; - let viewBox = '0 0 256 256'; - //let viewBox = '0 0 '+ w +' '+ w; - let t = [""]; - switch(type){ - case 'logo': - t[1]=""; - break; - case 'donate': - t[1]=""; - break; - case 'neo': - t[1]=""; - break; - case 'phy': - t[1]=""; - break; - case 'config': - t[1]=""; - break; - case 'github': - t[1]=""; - break; - case 'save': - t[1]=""; - break; - } - t[2] = ""; - return t.join("\n"); - - }, - - logoFill_d:` - M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 - L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 - M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 - Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z - `, - - logo_github:` - M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 - 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 - 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 - 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 - 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z - `, - - logo_neo:` - M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 - 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 - 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 - 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L - 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z - `, - - logo_phy:` - M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 - Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 - `, - - logo_config:` - M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 - L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 - Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 - `, - - logo_donate:` - M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 - 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 - 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 - 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 - 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 - Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 - 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 - 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 - 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M - 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 - 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 - 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 - 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 - 200.9 187.5 200.9 187.5 195.35 Z - `, - -}; - -T.setText(); - -const Tools = T; - -///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile - - -class Files { - - //----------------------------- - // FILE TYPE - //----------------------------- - - static autoTypes( type ) { - - let t = []; - - switch( type ){ - case 'svg': - t = [ { accept: { 'image/svg+xml': '.svg'} }, ]; - break; - case 'wav': - t = [ { accept: { 'audio/wav': '.wav'} }, ]; - break; - case 'mp3': - t = [ { accept: { 'audio/mpeg': '.mp3'} }, ]; - break; - case 'mp4': - t = [ { accept: { 'video/mp4': '.mp4'} }, ]; - break; - case 'bin': case 'hex': - t = [ { description: 'Binary Files', accept: { 'application/octet-stream': ['.bin', '.hex'] } }, ]; - break; - case 'text': - t = [ { description: 'Text Files', accept: { 'text/plain': ['.txt', '.text'], 'text/html': ['.html', '.htm'] } }, ]; - break; - case 'json': - t = [ { description: 'JSON Files', accept: { 'application/json': ['.json'] } }, ];//text/plain - break; - case 'js': - t = [ { description: 'JavaScript Files', accept: { 'text/javascript': ['.js'] } }, ]; - break; - case 'image': - t = [ { description: 'Images', accept: { 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] } }, ]; - break; - case 'icon': - t = [ { description: 'Icons', accept: { 'image/x-ico': ['.ico'] } }, ]; - break; - case 'lut': - t = [ { description: 'Lut', accept: { 'text/plain': ['.cube', '.3dl'] } }, ]; - break; - - } - - return t - - } - - - //----------------------------- - // LOAD - //----------------------------- - - static async load( o = {} ) { - - if (typeof window.showOpenFilePicker !== 'function') { - window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; - } - - try { - - let type = o.type || ''; - - const options = { - excludeAcceptAllOption: type ? true : false, - multiple: false, - //startIn:'./assets' - }; - - options.types = Files.autoTypes( type ); - - // create a new handle - const handle = await window.showOpenFilePicker( options ); - const file = await handle[0].getFile(); - //let content = await file.text() - - if( !file ) return null - - let fname = file.name; - let ftype = fname.substring( fname.lastIndexOf('.')+1, fname.length ); - - const dataUrl = [ 'png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3' ]; - const dataBuf = [ 'sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf' ]; - const reader = new FileReader(); - - if( dataUrl.indexOf( ftype ) !== -1 ) reader.readAsDataURL( file ); - else if( dataBuf.indexOf( ftype ) !== -1 ) reader.readAsArrayBuffer( file ); - else reader.readAsText( file ); - - reader.onload = function(e) { - - let content = e.target.result; - - switch(type){ - case 'image': - let img = new Image; - img.onload = function() { - if( o.callback ) o.callback( img, fname, ftype ); - }; - img.src = content; - break; - case 'json': - if( o.callback ) o.callback( JSON.parse( content ), fname, ftype ); - break; - default: - if( o.callback ) o.callback( content, fname, ftype ); - break; - } - - }; - - } catch(e) { - - console.log(e); - if( o.always && o.callback ) o.callback( null ); - - } - - } - - static showOpenFilePickerPolyfill( options ) { - return new Promise((resolve) => { - const input = document.createElement("input"); - input.type = "file"; - input.multiple = options.multiple; - input.accept = options.types - .map((type) => type.accept) - .flatMap((inst) => Object.keys(inst).flatMap((key) => inst[key])) - .join(","); - - input.addEventListener("change", () => { - resolve( - [...input.files].map((file) => { - return { - getFile: async () => - new Promise((resolve) => { - resolve(file); - }), - }; - }) - ); - }); - - input.click(); - }) - } - - - //----------------------------- - // SAVE - //----------------------------- - - static async save( o = {} ) { - - let usePoly = false; - - if (typeof window.showSaveFilePicker !== 'function') { - window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; - usePoly = true; - } - - try { - - let type = o.type || ''; - - const options = { - suggestedName: o.name || 'hello', - data: o.data || '' - }; - - options.types = Files.autoTypes( type ); - options.finalType = Object.keys( options.types[0].accept )[0]; - options.suggestedName += options.types[0].accept[options.finalType][0]; - - - // create a new handle - const handle = await window.showSaveFilePicker( options ); - - if( usePoly ) return - - // create a FileSystemWritableFileStream to write to - const file = await handle.createWritable(); - - let blob = new Blob([ options.data ], { type: options.finalType }); - - // write our file - await file.write(blob); - - // close the file and write the contents to disk. - await file.close(); - - } catch(e) { - - console.log(e); - - } - - } - - static showSaveFilePickerPolyfill( options ) { - return new Promise((resolve) => { - const a = document.createElement("a"); - a.download = options.suggestedName || "my-file.txt"; - let blob = new Blob([ options.data ], { type:options.finalType }); - a.href = URL.createObjectURL( blob ); - - a.addEventListener("click", () => { - resolve( - setTimeout( () => URL.revokeObjectURL(a.href), 1000 ) - ); - }); - a.click(); - }) - } - - - //----------------------------- - // FOLDER not possible in poly - //----------------------------- - - static async getFolder() { - - try { - - const handle = await window.showDirectoryPicker(); - const files = []; - for await (const entry of handle.values()) { - const file = await entry.getFile(); - files.push(file); - } - - console.log(files); - return files; - - } catch(e) { - - console.log(e); - - } - - } - - - - - - - - - - -} - -class V2 { - - constructor( x = 0, y = 0 ) { - - this.x = x; - this.y = y; - - } - - set ( x, y ) { - - this.x = x; - this.y = y; - return this; - - } - - divide ( v ) { - - this.x /= v.x; - this.y /= v.y; - return this; - - } - - multiply ( v ) { - - this.x *= v.x; - this.y *= v.y; - return this; - - } - - multiplyScalar ( scalar ) { - - this.x *= scalar; - this.y *= scalar; - return this; - - } - - divideScalar ( scalar ) { - - return this.multiplyScalar( 1 / scalar ); - - } - - length () { - - return Math.sqrt( this.x * this.x + this.y * this.y ); - - } - - angle () { - - // computes the angle in radians with respect to the positive x-axis - - var angle = Math.atan2( this.y, this.x ); - - if ( angle < 0 ) angle += 2 * Math.PI; - - return angle; - - } - - addScalar ( s ) { - - this.x += s; - this.y += s; - return this; - - } - - negate () { - - this.x *= -1; - this.y *= -1; - return this; - - } - - neg () { - - this.x = -1; - this.y = -1; - return this; - - } - - isZero () { - - return ( this.x === 0 && this.y === 0 ); - - } - - copy ( v ) { - - this.x = v.x; - this.y = v.y; - - return this; - - } - - equals ( v ) { - - return ( ( v.x === this.x ) && ( v.y === this.y ) ); - - } - - nearEquals ( v, n ) { - - return ( ( v.x.toFixed(n) === this.x.toFixed(n) ) && ( v.y.toFixed(n) === this.y.toFixed(n) ) ); - - } - - lerp ( v, alpha ) { - - if( v === null ){ - this.x -= this.x * alpha; - this.y -= this.y * alpha; - } else { - this.x += ( v.x - this.x ) * alpha; - this.y += ( v.y - this.y ) * alpha; - } - - return this; - - } - -} - -/** - * @author lth / https://github.com/lo-th - */ - -class Proto { - constructor(o = {}) { - // disable mouse controle - this.lock = o.lock || false; - - // for button - this.neverlock = false; - - // only simple space - this.isSpace = o.isSpace || false; - - // if is on gui or group - this.main = o.main || null; - this.isUI = o.isUI || false; - this.group = o.group || null; - - this.isListen = false; - - this.top = 0; - this.ytop = 0; - - this.dx = o.dx || 0; - - this.isSelectable = o.selectable !== undefined ? o.selectable : false; - this.unselectable = - o.unselect !== undefined ? o.unselect : this.isSelectable; - - this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' - - this.css = this.main ? this.main.css : Tools.css; - - this.colors = Tools.defineColor( - o, - this.main - ? this.group - ? this.group.colors - : this.main.colors - : Tools.colors - ); - - this.overEffect = this.colors.showOver; - - this.svgs = Tools.svgs; - - this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; - this.local = new V2().neg(); - - this.isCanvasOnly = false; - this.isSelect = false; - - // percent of title - this.p = o.p !== undefined ? o.p : Tools.size.p; - - this.w = this.isUI ? this.main.size.w : Tools.size.w; - if (o.w !== undefined) this.w = o.w; - - this.h = this.isUI ? this.main.size.h : Tools.size.h; - if (o.h !== undefined) this.h = o.h; - if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; - else this.lock = true; - - // decale for canvas only - this.fw = o.fw || 0; - - this.autoWidth = o.auto || true; // auto width or flex - this.isOpen = false; //false// open statu - - // radius for toolbox - this.radius = o.radius || this.colors.radius; - - this.transition = o.transition || Tools.transition; - - // only for number - this.isNumber = false; - this.noNeg = o.noNeg || false; - this.allEqual = o.allEqual || false; - - // only most simple - this.mono = false; - - // stop listening for edit slide text - this.isEdit = false; - - // no title - this.simple = o.simple || false; - if (this.simple) this.sa = 0; - - // define obj size - this.setSize(this.w); - - // title size - if (o.sa !== undefined) this.sa = o.sa; - if (o.sb !== undefined) this.sb = o.sb; - if (this.simple) this.sb = this.w - this.sa; - - // last number size for slide - this.sc = o.sc === undefined ? 47 : o.sc; - - // for listening object - this.objectLink = null; - this.isSend = false; - this.objectKey = null; - - this.txt = o.name || ""; - this.name = o.rename || this.txt; - this.target = o.target || null; - - // callback - this.callback = o.callback === undefined ? null : o.callback; - this.endCallback = null; - this.openCallback = o.openCallback === undefined ? null : o.openCallback; - this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; - - // if no callback take one from group or gui - if (this.callback === null && this.isUI && this.main.callback !== null) { - this.callback = this.group ? this.group.callback : this.main.callback; - } - - // elements - this.c = []; - - // style - this.s = []; - - this.useFlex = this.isUI ? this.main.useFlex : false; - let flexible = this.useFlex - ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" - : "float:left;"; - - this.c[0] = Tools.dom( - "div", - this.css.basic + flexible + "position:relative; height:20px;" - ); - - this.s[0] = this.c[0].style; - - // bottom margin - this.margin = this.colors.sy; - this.mtop = 0; - let marginDiv = Tools.isDivid(this.margin); - - if (this.isUI && this.margin) { - this.s[0].boxSizing = "content-box"; - if (marginDiv) { - this.mtop = this.margin * 0.5; - //this.s[0].borderTop = '${this.mtop}px solid transparent' - //console.log(`${this.mtop}px solid transparent`) - this.s[0].borderTop = this.mtop + "px solid transparent"; - this.s[0].borderBottom = this.mtop + "px solid transparent"; - } else { - this.s[0].borderBottom = this.margin + "px solid transparent"; - } - } - - // with title - if (!this.simple) { - this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); - this.s[1] = this.c[1].style; - this.c[1].textContent = this.name; - this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; - } - - if (o.pos) { - this.s[0].position = "absolute"; - for (let p in o.pos) { - this.s[0][p] = o.pos[p]; - } - this.mono = true; - } - - if (o.css) this.s[0].cssText = o.css; - } - - // ---------------------- - // make the node - // ---------------------- - - init() { - this.ytop = this.top + this.mtop; - - this.zone.h = this.h + this.margin; - this.zone.w = this.w; - - let s = this.s; // style cache - let c = this.c; // div cach - - s[0].height = this.h + "px"; - - if (this.isUI) s[0].background = this.colors.background; - - if (!this.autoWidth && this.useFlex) { - s[0].flex = "1 0 auto"; - s[0].minWidth = this.minw + "px"; - s[0].textAlign = "center"; - } else { - if (this.isUI) s[0].width = "100%"; - } - - //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; - if (c[1] !== undefined && this.autoWidth) { - s[1] = c[1].style; - s[1].top = 1 + "px"; - s[1].height = this.h - 2 + "px"; - } - - let frag = Tools.frag; - - for (let i = 1, lng = c.length; i !== lng; i++) { - if (c[i] !== undefined) { - frag.appendChild(c[i]); - s[i] = c[i].style; - } - } - - let pp = - this.target !== null - ? this.target - : this.isUI - ? this.main.inner - : document.body; - - if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); - else pp.appendChild(c[0]); - - c[0].appendChild(frag); - - this.rSize(); - - // ! solo proto - if (!this.isUI) { - this.c[0].style.pointerEvents = "auto"; - Roots.add(this); - } - } - - addTransition() { - if (this.baseH && this.transition && this.isUI) { - this.c[0].style.transition = "height " + this.transition + "s ease-out"; - } - } - - // from Tools - - dom(type, css, obj, dom, id) { - return Tools.dom(type, css, obj, dom, id); - } - - setSvg(dom, type, value, id, id2) { - Tools.setSvg(dom, type, value, id, id2); - } - - setCss(dom, css) { - Tools.setCss(dom, css); - } - - clamp(value, min, max) { - return Tools.clamp(value, min, max); - } - - getColorRing() { - if (!Tools.colorRing) Tools.makeColorRing(); - return Tools.clone(Tools.colorRing); - } - - getJoystick(model) { - if (!Tools["joystick_" + model]) Tools.makeJoystick(model); - return Tools.clone(Tools["joystick_" + model]); - } - - getCircular(model) { - if (!Tools.circular) Tools.makeCircular(model); - return Tools.clone(Tools.circular); - } - - getKnob(model) { - if (!Tools.knob) Tools.makeKnob(model); - return Tools.clone(Tools.knob); - } - - getPad2d(model) { - if (!Tools.pad2d) Tools.makePad(model); - return Tools.clone(Tools.pad2d); - } - - // from Roots - - cursor(name) { - Roots.cursor(name); - } - - ///////// - - update() {} - - reset() {} - - ///////// - - content() { - return this.c[0]; - } - - getDom() { - return this.c[0]; - } - - uiout() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.background; - } - - uiover() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.backgroundOver; - } - - rename(s) { - if (this.c[1] !== undefined) this.c[1].textContent = s; - } - - listen() { - this.isListen = Roots.addListen(this); - return this; - } - - listening() { - // modified by Fedemarino - if (this.objectLink === null) return; - if (this.isSend) return; - if (this.isEdit) return; - // check if value has changed - let hasChanged = this.setValue(this.objectLink[this.objectKey]); - return hasChanged; - } - - setValue(v) { - const old = this.value; - if (this.isNumber) this.value = this.numValue(v); - //else if( v instanceof Array && v.length === 1 ) v = v[0]; - else this.value = v; - this.update(); - let hasChanged = false; - if (old !== this.value) { - hasChanged = true; - } - - return hasChanged; - } - - // ---------------------- - // update every change - // ---------------------- - - onChange(f) { - if (this.isSpace) return; - this.callback = f || null; - return this; - } - - // ---------------------- - // update only on end - // ---------------------- - - onFinishChange(f) { - if (this.isSpace) return; - this.callback = null; - this.endCallback = f; - return this; - } - - // ---------------------- - // event on open close - // ---------------------- - - onOpen(f) { - this.openCallback = f; - return this; - } - - onClose(f) { - this.closeCallback = f; - return this; - } - - // ---------------------- - // send back value - // ---------------------- - - send(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - - this.isSend = true; - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - if (this.callback) this.callback(v, this.objectKey); - this.isSend = false; - } - - sendEnd(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - - if (this.endCallback) this.endCallback(v); - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - } - - // ---------------------- - // clear node - // ---------------------- - - dispose() { - if (this.isListen) Roots.removeListen(this); - - Tools.clear(this.c[0]); - - if (this.target !== null) { - if (this.group !== null) this.group.clearOne(this); - else this.target.removeChild(this.c[0]); - } else { - if (this.isUI) this.main.clearOne(this); - else document.body.removeChild(this.c[0]); - } - - if (!this.isUI) Roots.remove(this); - - this.c = null; - this.s = null; - this.callback = null; - this.target = null; - this.isListen = false; - } - - clear() {} - - // ---------------------- - // change size - // ---------------------- - - getWidth() { - let nw = Roots.getWidth(this); - if (nw) this.w = nw; - } - - setSize(sx) { - if (!this.autoWidth) return; - - this.w = sx; - - if (this.simple) { - this.sb = this.w - this.sa; - } else { - let pp = this.w * (this.p / 100); - //this.sa = Math.floor( pp + 10 ) - //this.sb = Math.floor( this.w - pp - 20 ) - this.sa = Math.floor(pp + 8); - this.sb = Math.floor(this.w - pp - 16); - } - } - - rSize() { - if (!this.autoWidth) return; - if (!this.isUI) this.s[0].width = this.w + "px"; - if (!this.simple) this.s[1].width = this.sa + "px"; - } - - // ---------------------- - // for numeric value - // ---------------------- - - setTypeNumber(o) { - this.isNumber = true; - - this.value = 0; - if (o.value !== undefined) { - if (typeof o.value === "string") this.value = o.value * 1; - else this.value = o.value; - } - - this.min = o.min === undefined ? -Infinity : o.min; - this.max = o.max === undefined ? Infinity : o.max; - this.precision = o.precision === undefined ? 2 : o.precision; - - let s; - - switch (this.precision) { - case 0: - s = 1; - break; - case 1: - s = 0.1; - break; - case 2: - s = 0.01; - break; - case 3: - s = 0.001; - break; - case 4: - s = 0.0001; - break; - case 5: - s = 0.00001; - break; - case 6: - s = 0.000001; - break; - } - - this.step = o.step === undefined ? s : o.step; - this.range = this.max - this.min; - this.value = this.numValue(this.value); - } - - numValue(n) { - if (this.noNeg) n = Math.abs(n); - return ( - Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 - ); - } - - // ---------------------- - // EVENTS DEFAULT - // ---------------------- - - handleEvent(e) { - if (this.lock) return; - if (this.neverlock) Roots.lock = false; - if (!this[e.type]) - return console.error(e.type, "this type of event no existe !"); - - // TODO !!!! - - //if( this.marginDiv ) z.d -= this.margin * 0.5 - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 - - return this[e.type](e); - } - - wheel(e) { - return false; - } - mousedown(e) { - return false; - } - mousemove(e) { - return false; - } - mouseup(e) { - return false; - } - keydown(e) { - return false; - } - keyup(e) { - return false; - } - - // ---------------------- - // object referency - // ---------------------- - - setReferency(obj, key) { - this.objectLink = obj; - this.objectKey = key; - } - - display(v = false) { - this.s[0].visibility = v ? "visible" : "hidden"; - } - - // ---------------------- - // resize height - // ---------------------- - - open() { - if (this.isOpen) return; - this.isOpen = true; - Roots.needResize = true; - if (this.openCallback) this.openCallback(); - } - - close() { - if (!this.isOpen) return; - this.isOpen = false; - Roots.needResize = true; - if (this.closeCallback) this.closeCallback(); - } - - needZone() { - Roots.needReZone = true; - } - - rezone() { - Roots.needReZone = true; - } - - // ---------------------- - // INPUT - // ---------------------- - - select() {} - - unselect() {} - - setInput(Input) { - Roots.setInput(Input, this); - } - - upInput(x, down) { - return Roots.upInput(x, down); - } - - // ---------------------- - // special item - // ---------------------- - - selected(b) { - this.isSelect = b || false; - } -} - -class Bool extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || false; - this.model = o.mode !== undefined ? o.mode : 0; - - this.onName = o.rename || this.txt; - if( o.onName ) o.onname = o.onName; - if( o.onname ) this.onName = o.onname; - - this.inh = o.inh || Math.floor( this.h*0.8 ); - this.inw = o.inw || 36; - - let cc = this.colors; - - if( this.model === 0 ){ - let t = Math.floor(this.h*0.5)-((this.inh-2)*0.5); - this.c[2] = this.dom( 'div', this.css.basic + 'background:'+ cc.inputBg +'; height:'+(this.inh-2)+'px; width:'+this.inw+'px; top:'+t+'px; border-radius:10px; border:2px solid '+ cc.back ); - this.c[3] = this.dom( 'div', this.css.basic + 'height:'+(this.inh-6)+'px; width:16px; top:'+(t+2)+'px; border-radius:10px; background:'+ cc.button+';' ); - } else { - this.p = 0; - if( this.c[1] !== undefined ) this.c[1].textContent = ''; - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - } - - this.stat = -1; - - this.init(); - this.update(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown ( e ) { - - this.value = !this.value; - this.update( true ); - return this.mousemove( e ) - - } - - mousemove ( e ) { - - this.cursor('pointer'); - return this.mode( true ) - - } - - reset () { - - this.cursor(); - return this.mode() - - } - - // ---------------------- - // MODE - // ---------------------- - - mode ( over ) { - - let change = false; - let cc = this.colors, s = this.s, n, v = this.value; - - if( over ) n = v ? 4 : 3; - else n = v ? 2 : 1; - - if( this.stat !== n ){ - - this.stat = n; - - if( this.model !== 0 ){ - - switch( n ){ - - case 1: s[2].color = cc.text; s[2].background = cc.button; break; - case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; - case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; - case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; - - } - - this.c[2].innerHTML = v ? this.onName : this.name; - - } else { - - switch( n ){ - - case 1: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.button; break;// off out - case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break;// on over - case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break;// off over - case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break;// on out - - } - - s[3].marginLeft = v ? '17px' : '2px'; - this.c[1].textContent = v ? this.onName : this.name; - - } - - change = true; - - } - - return change - - } - - // ---------------------- - - update ( up ) { - - this.mode(); - if( up ) this.send(); - - } - - rSize () { - - super.rSize(); - - let s = this.s; - let w = (this.w - 10 ) - this.inw; - if( this.model === 0 ){ - s[2].left = w + 'px'; - s[3].left = w + 'px'; - } else { - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - } - - } - -} - -class Button extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = ''; - if( o.value !== undefined ) this.value = o.value; - - this.values = o.value || this.txt; - if( o.values ) this.values = o.values; - - if( !o.values && !o.value ) this.txt = ''; - - this.onName = o.onName || null; - - this.on = false; - - // force button width - this.bw = o.forceWidth || 0; - if(o.bw) this.bw = o.bw; - this.space = o.space || 3; - - if( typeof this.values === 'string' ) this.values = [ this.values ]; - - this.isDown = false; - this.neverlock = true; - this.res = 0; - - this.lng = this.values.length; - this.tmp = []; - this.stat = []; - - let sel, cc = this.colors; - - for( let i = 0; i < this.lng; i++ ){ - - sel = false; - if( this.values[i] === this.value && this.isSelectable ) sel = true; - - this.c[i+2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[i+2].style.background = sel ? cc.select : cc.button; - this.c[i+2].style.color = sel ? cc.textSelect : cc.text; - this.c[i+2].innerHTML = this.values[i]; - this.stat[i] = sel ? 3:1; - - } - - - if( this.txt==='' ) this.p = 0; - - if( (!o.value && !o.values) || this.p === 0 ){ - if( this.c[1] !== undefined ) this.c[1].textContent = ''; - } - - - this.init(); - - } - - onOff() { - - this.on = !this.on; - this.label( this.on ? this.onName : this.value ); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return -1 - - let i = this.lng; - let t = this.tmp; - - while( i-- ){ - if( l.x>t[i][0] && l.x 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.text; - this.setSvg( this.c[3], 'stroke', color, 1 ); - - break; - case 1: // down - - this.s[2].color = cc.textOver; - this.setSvg( this.c[3], 'stroke', cc.backoff, 0); - color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.textOver; - this.setSvg( this.c[3], 'stroke', color, 1 ); - - break; - } - - this.cmode = mode; - return true; - - } - - reset () { - - this.isDown = false; - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'circular'; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.sendEnd(); - return this.mode(0); - - } - - mousedown ( e ) { - - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove( e ); - return this.mode(1); - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - //console.log('over') - - let off = this.offset; - off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); - off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - this.r = off.angle() - this.pi90; - this.r = (((this.r%this.twoPi)+this.twoPi)%this.twoPi); - - if( this.oldr !== null ){ - - let dif = this.r - this.oldr; - this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; - - if( dif > 6 ) this.r = 0; - if( dif < -6 ) this.r = this.twoPi; - - } - - let steps = 1 / this.twoPi; - let value = this.r * steps; - - let n = ( ( this.range * value ) + this.min ) - this.old; - - if(n >= this.step || n <= this.step){ - n = ~~ ( n / this.step ); - this.value = this.numValue( this.old + ( n * this.step ) ); - this.update( true ); - this.old = this.value; - this.oldr = this.r; - } - - } - - wheel ( e ) { - - let name = this.testZone( e ); - - if( name === 'circular' ) { - - let v = this.value - this.step * e.delta; - - if ( v > this.max ) { - v = this.isCyclic ? this.min : this.max; - } else if ( v < this.min ) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue( v ); - this.old = v; - this.update( true ); - - return true; - - } - return false; - - } - - // ---------------------- - - makePath () { - - let r = 40; - let d = 24; - let a = this.percent * this.twoPi - 0.001; - let x2 = (r + r * Math.sin(a)) + d; - let y2 = (r - r * Math.cos(a)) + d; - let big = a > Math.PI ? 1 : 0; - return "M " + (r+d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; - - } - - update ( up ) { - - this.c[2].textContent = this.value; - this.percent = ( this.value - this.min ) / this.range; - - this.setSvg( this.c[3], 'd', this.makePath(), 1 ); - - if ( this.model > 0 ) { - - let cc = this.colors; - let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ); - this.setSvg( this.c[3], 'stroke', color, 1 ); - - } - - if( up ) this.send(); - - } - -} - -class Color extends Proto { - - constructor( o = {} ) { - - super( o ); - - //this.autoHeight = true; - - this.ctype = o.ctype || 'hex'; - - this.wfixe = 256; - - this.cw = this.sb > 256 ? 256 : this.sb; - if(o.cw != undefined ) this.cw = o.cw; - - - - // color up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - - this.baseH = this.h; - - this.offset = new V2(); - this.decal = new V2(); - this.pp = new V2(); - - let cc = this.colors; - - // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) - - this.c[2] = this.dom( 'div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};` ); - //this.s[2] = this.c[2].style; - - //this.s[2].textShadow = 'none' - - /*if( this.up ){ - this.s[2].top = 'auto'; - this.s[2].bottom = '2px'; - }*/ - - //this.c[0].style.textAlign = 'center'; - this.c[0].style.display = 'block'; - - this.c[3] = this.getColorRing(); - this.c[3].style.visibility = 'hidden'; - - this.hsl = null; - this.value = '#ffffff'; - if( o.value !== undefined ){ - if( o.value instanceof Array ) this.value = Tools.rgbToHex( o.value ); - else if(!isNaN(o.value)) this.value = Tools.hexToHtml( o.value ); - else this.value = o.value; - } - - this.bcolor = null; - this.isDown = false; - this.fistDown = false; - - this.notext = o.notext || false; - - this.tr = 98; - this.tsl = Math.sqrt(3) * this.tr; - - this.hue = 0; - this.d = 256; - - this.init(); - - this.setColor( this.value ); - - if( o.open !== undefined ) this.open(); - - } - - testZone ( mx, my ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - - if( this.up && this.isOpen ){ - - if( l.y > this.wfixe ) return 'title' - else return 'color' - - } else { - - if( l.y < this.baseH+2 ) return 'title' - else if( this.isOpen ) return 'color' - - } - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.d = 256; - - } - - mousedown ( e ) { - - - let name = this.testZone( e.clientX, e.clientY ); - - - //if( !name ) return; - if(name === 'title'){ - if( !this.isOpen ) this.open(); - else this.close(); - return true; - } - - - if( name === 'color' ){ - - this.isDown = true; - this.fistDown = true; - this.mousemove( e ); - } - } - - mousemove ( e ) { - - let name = this.testZone( e.clientX, e.clientY ); - - let off, d, hue, sat, lum, rad, x, y, rr, T = Tools; - - if( name === 'title' ) this.cursor('pointer'); - - if( name === 'color' ){ - - off = this.offset; - off.x = e.clientX - ( this.zone.x + this.decal.x + this.mid ); - off.y = e.clientY - ( this.zone.y + this.decal.y + this.mid ) - this.ytop; - d = off.length() * this.ratio; - rr = off.angle(); - if(rr < 0) rr += 2 * T.PI; - - - if ( d < 128 ) this.cursor('crosshair'); - else if( !this.isDown ) this.cursor(); - - if( this.isDown ){ - - if( this.fistDown ){ - this.d = d; - this.fistDown = false; - } - - if ( this.d < 128 ) { - - if ( this.d > this.tr ) { // outside hue - - hue = ( rr + T.pi90 ) / T.TwoPI; - this.hue = (hue + 1) % 1; - this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); - - } else { // triangle - - x = off.x * this.ratio; - y = off.y * this.ratio; - - let rr = (this.hue * T.TwoPI) + T.PI; - if(rr < 0) rr += 2 * T.PI; - - rad = Math.atan2(-y, x); - if(rad < 0) rad += 2 * T.PI; - - let rad0 = ( rad + T.pi90 + T.TwoPI + rr ) % (T.TwoPI), - rad1 = rad0 % ((2/3) * T.PI) - (T.pi60), - a = 0.5 * this.tr, - b = Math.tan(rad1) * a, - r = Math.sqrt(x*x + y*y), - maxR = Math.sqrt(a*a + b*b); - - if( r > maxR ) { - let dx = Math.tan(rad1) * r; - let rad2 = Math.atan(dx / maxR); - if(rad2 > T.pi60) rad2 = T.pi60; - else if( rad2 < -T.pi60 ) rad2 = -T.pi60; - - rad += rad2 - rad1; - - rad0 = (rad + T.pi90 + T.TwoPI + rr) % (T.TwoPI), - rad1 = rad0 % ((2/3) * T.PI) - (T.pi60); - b = Math.tan(rad1) * a; - r = maxR = Math.sqrt(a*a + b*b); - } - - lum = ((Math.sin(rad0) * r) / this.tsl) + 0.5; - - let w = 1 - (Math.abs(lum - 0.5) * 2); - sat = (((Math.cos(rad0) * r) + (this.tr / 2)) / (1.5 * this.tr)) / w; - sat = T.clamp( sat, 0, 1 ); - - this.setHSL([this.hsl[0], sat, lum]); - - } - } - } - } - - } - - // ---------------------- - - setHeight () { - - this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; - this.s[0].height = this.h + 'px'; - this.zone.h = this.h; - - } - - parentHeight ( t ) { - - if ( this.group !== null ) this.group.calc( t ); - else if ( this.isUI ) this.main.calc( t ); - - } - - open () { - - super.open(); - - this.setHeight(); - - if( this.up ) this.zone.y -= this.wfixe + 5; - - let t = this.h - this.baseH; - - this.s[3].visibility = 'visible'; - //this.s[3].display = 'block'; - this.parentHeight( t ); - - } - - close () { - - super.close(); - - if( this.up ) this.zone.y += this.wfixe + 5; - - let t = this.h - this.baseH; - - this.setHeight(); - - this.s[3].visibility = 'hidden'; - //this.s[3].display = 'none'; - this.parentHeight( -t ); - - } - - update ( up ) { - - let cc = Tools.rgbToHex( Tools.hslToRgb([ this.hsl[0], 1, 0.5 ]) ); - - this.moveMarkers(); - - this.value = this.bcolor; - - this.setSvg( this.c[3], 'fill', cc, 2, 0 ); - - this.s[2].background = this.bcolor; - if(!this.notext) this.c[2].textContent = Tools.htmlToHex( this.bcolor ); - - this.invert = Tools.findDeepInver( this.rgb ); - this.s[2].color = this.invert ? '#fff' : '#000'; - - if(!up) return; - - if( this.ctype === 'array' ) this.send( this.rgb ); - if( this.ctype === 'rgb' ) this.send( Tools.htmlRgb( this.rgb ) ); - if( this.ctype === 'hex' ) this.send( Tools.htmlToHex( this.value ) ); - if( this.ctype === 'html' ) this.send(); - - } - - setValue ( v ){ - - if( v instanceof Array ) this.value = Tools.rgbToHex( v ); - else if(!isNaN(v)) this.value = Tools.hexToHtml( v ); - else this.value = v; - - this.setColor( this.value ); - this.update(); - - } - - setColor ( color ) { - - let unpack = Tools.unpack(color); - if (this.bcolor !== color && unpack) { - - this.bcolor = color; - this.rgb = unpack; - this.hsl = Tools.rgbToHsl( this.rgb ); - - this.hue = this.hsl[0]; - - this.update(); - } - return this; - - } - - setHSL ( hsl ) { - - this.hsl = hsl; - this.rgb = Tools.hslToRgb( hsl ); - this.bcolor = Tools.rgbToHex( this.rgb ); - this.update( true ); - return this; - - } - - moveMarkers () { - - let p = this.pp; - let T = Tools; - - this.invert ? '#fff' : '#000'; - let a = this.hsl[0] * T.TwoPI; - let third = (2/3) * T.PI; - let r = this.tr; - let h = this.hsl[0]; - let s = this.hsl[1]; - let l = this.hsl[2]; - - let angle = ( a - T.pi90 ) * T.todeg; - - h = - a + T.pi90; - - let hx = Math.cos(h) * r; - let hy = -Math.sin(h) * r; - let sx = Math.cos(h - third) * r; - let sy = -Math.sin(h - third) * r; - let vx = Math.cos(h + third) * r; - let vy = -Math.sin(h + third) * r; - let mx = (sx + vx) / 2, my = (sy + vy) / 2; - a = (1 - 2 * Math.abs(l - .5)) * s; - let x = sx + (vx - sx) * l + (hx - mx) * a; - let y = sy + (vy - sy) * l + (hy - my) * a; - - p.set( x, y ).addScalar(128); - - //let ff = (1-l)*255; - // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); - - this.setSvg( this.c[3], 'transform', 'rotate('+angle+' )', 2 ); - - this.setSvg( this.c[3], 'cx', p.x, 3 ); - this.setSvg( this.c[3], 'cy', p.y, 3 ); - - this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3 ); - this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3 ); - this.setSvg( this.c[3], 'fill',this.bcolor, 3 ); - - } - - rSize () { - - //Proto.prototype.rSize.call( this ); - super.rSize(); - - let s = this.s; - - s[2].width = this.sb + 'px'; - s[2].left = this.sa + 'px'; - - //console.log(this.sb) - - this.cw = this.sb > 256 ? 256 : this.sb; - - - - this.rSizeColor( this.cw ); - - this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - //s[3].left = this.decal.x + 'px'; - - } - - rSizeColor ( w ) { - - - if( w === this.wfixe ) return; - - - - this.wfixe = w; - - - - let s = this.s; - - //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; - this.mid = Math.floor( this.wfixe * 0.5 ); - - this.setSvg( this.c[3], 'viewBox', '0 0 '+ this.wfixe + ' '+ this.wfixe ); - s[3].width = this.wfixe + 'px'; - s[3].height = this.wfixe + 'px'; - //s[3].left = this.decal.x + 'px'; - s[3].top = this.decal.y + 'px'; - - this.ratio = 256 / this.wfixe; - this.square = 1 / (60*(this.wfixe/256)); - this.setHeight(); - - } - - -} - -class Fps extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.round = Math.round; - - //this.autoHeight = true; - - this.baseH = this.h; - this.hplus = o.hplus || 50; - - this.res = o.res || 40; - this.l = 1; - - this.precision = o.precision || 0; - - - this.custom = o.custom || false; - this.names = o.names || ['FPS', 'MS']; - let cc = o.cc || ['220,220,220', '255,255,0']; - - // this.divid = [ 100, 100, 100 ]; - // this.multy = [ 30, 30, 30 ]; - - this.adding = o.adding || false; - - this.range = o.range || [ 165, 100, 100 ]; - - this.alpha = o.alpha || 0.25; - - this.values = []; - this.points = []; - this.textDisplay = []; - - if(!this.custom){ - - this.now = Roots.getTime(); - this.startTime = 0;//this.now() - this.prevTime = 0;//this.startTime; - this.frames = 0; - - this.ms = 0; - this.fps = 0; - this.mem = 0; - this.mm = 0; - - this.isMem = ( self.performance && self.performance.memory ) ? true : false; - - // this.divid = [ 100, 200, 1 ]; - // this.multy = [ 30, 30, 30 ]; - - if( this.isMem ){ - - this.names.push('MEM'); - cc.push('0,255,255'); - - } - - this.txt = o.name || 'Fps'; - - } - - - let fltop = Math.floor(this.h*0.5)-3; - const ccc = this.colors; - - this.c[1].textContent = this.txt; - //this.c[1].innerHTML = ' ' + this.txt - this.c[0].style.cursor = 'pointer'; - this.c[0].style.pointerEvents = 'auto'; - - let panelCss = 'display:none; left:10px; top:'+ this.h + 'px; height:'+(this.hplus - 8)+'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid '+ ccc.border +';'; - - if( this.radius !== 0 ) panelCss += 'border-radius:' + this.radius+'px;'; - - this.c[2] = this.dom( 'path', this.css.basic + panelCss , {} ); - - this.c[2].setAttribute('viewBox', '0 0 '+this.res+' 50' ); - this.c[2].setAttribute('height', '100%' ); - this.c[2].setAttribute('width', '100%' ); - this.c[2].setAttribute('preserveAspectRatio', 'none' ); - - - //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - - // arrow - this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:ccc.text, stroke:'none'}); - //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); - - // result test - this.c[4] = this.dom( 'div', this.css.txt + 'position:absolute; left:10px; top:'+(this.h+2) +'px; display:none; width:100%; text-align:center;' ); - - // bottom line - if( o.bottomLine ) this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); - - this.isShow = false; - - - - let s = this.s; - - //s[1].marginLeft = '10px'; - s[1].lineHeight = this.h-4; - s[1].color = ccc.text; - //s[1].paddingLeft = '18px'; - //s[1].fontWeight = 'bold'; - - if( this.radius !== 0 ) s[0].borderRadius = this.radius+'px'; - if( this.colors.gborder!=='none') s[0].border = '1px solid ' + ccc.gborder; - - - - - let j = 0; - - for( j=0; j " + this.names[j] +" "); - - } - - j = this.names.length; - while(j--){ - this.dom( 'path', null, { fill:'rgba('+cc[j]+','+this.alpha+')', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - } - - - this.init(); - - //if( this.isShow ) this.show(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown ( e ) { - - if( this.isShow ) this.close(); - else this.open(); - - } - - // ---------------------- - - /*mode: function ( mode ) { - - let s = this.s; - - switch(mode){ - case 0: // base - s[1].color = this.colors.text; - //s[1].background = 'none'; - break; - case 1: // over - s[1].color = '#FFF'; - //s[1].background = UIL.SELECT; - break; - case 2: // edit / down - s[1].color = this.colors.text; - //s[1].background = UIL.SELECTDOWN; - break; - - } - },*/ - - tick ( v ) { - - this.values = v; - if( !this.isShow ) return; - this.drawGraph(); - this.upText(); - - } - - makePath ( point ) { - - let p = ''; - p += 'M ' + (-1) + ' ' + 50; - for ( let i = 0; i < this.res + 1; i ++ ) { p += ' L ' + i + ' ' + point[i]; } - p += ' L ' + (this.res + 1) + ' ' + 50; - return p; - - } - - upText ( val ) { - - let v = val || this.values, t = ''; - for( let j=0, lng =this.names.length; j'; - this.c[4].innerHTML = t; - - } - - drawGraph () { - - let svg = this.c[2]; - let i = this.names.length, v, old = 0, n = 0; - - while( i-- ){ - if( this.adding ) v = (this.values[n]+old) * this.range[n]; - else v = (this.values[n] * this.range[n]); - this.points[n].shift(); - this.points[n].push( 50 - v ); - this.setSvg( svg, 'd', this.makePath( this.points[n] ), i+1 ); - old += this.values[n]; - n++; - - } - - } - - open () { - - super.open(); - - this.h = this.hplus + this.baseH; - - this.setSvg( this.c[3], 'd', this.svgs.g2 ); - - if( this.group !== null ){ this.group.calc( this.hplus );} - else if( this.isUI ) this.main.calc( this.hplus ); - - this.s[0].height = this.h +'px'; - this.s[2].display = 'block'; - this.s[4].display = 'block'; - this.isShow = true; - - if( !this.custom ) Roots.addListen( this ); - - } - - close () { - - super.close(); - - this.h = this.baseH; - - this.setSvg( this.c[3], 'd', this.svgs.g1 ); - - if( this.group !== null ){ this.group.calc( -this.hplus );} - else if( this.isUI ) this.main.calc( -this.hplus ); - - this.s[0].height = this.h +'px'; - this.s[2].display = 'none'; - this.s[4].display = 'none'; - this.isShow = false; - - if( !this.custom ) Roots.removeListen( this ); - - this.c[4].innerHTML = ''; - - } - - - ///// AUTO FPS ////// - - begin () { - - this.startTime = this.now(); - - } - - end () { - - let time = this.now(); - this.ms = time - this.startTime; - - this.frames ++; - - if ( time > this.prevTime + 1000 ) { - - this.fps = this.round( ( this.frames * 1000 ) / ( time - this.prevTime ) ); - - this.prevTime = time; - this.frames = 0; - - if ( this.isMem ) { - - let heapSize = performance.memory.usedJSHeapSize; - let heapSizeLimit = performance.memory.jsHeapSizeLimit; - - this.mem = this.round( heapSize * 0.000000954 ); - this.mm = heapSize / heapSizeLimit; - - } - - } - - this.values = [ this.fps, this.ms , this.mm ]; - - this.drawGraph(); - this.upText( [ this.fps, this.ms, this.mem ] ); - - return time; - - } - - listening () { - - if( !this.custom ) this.startTime = this.end(); - - } - - rSize () { - - let s = this.s; - let w = this.w; - - s[3].left = ( this.sa + this.sb - 6 ) + 'px'; - - s[0].width = w + 'px'; - s[1].width = w + 'px'; - s[2].left = 10 + 'px'; - s[2].width = (w-20) + 'px'; - s[4].width = (w-20) + 'px'; - - } - -} - -class Graph extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value !== undefined ? o.value : [0,0,0]; - this.lng = this.value.length; - - this.precision = o.precision !== undefined ? o.precision : 2; - this.multiplicator = o.multiplicator || 1; - this.neg = o.neg || false; - - this.line = o.line !== undefined ? o.line : true; - - //if(this.neg)this.multiplicator*=2; - - this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; - this.isNumber = false; - - this.isDown = false; - - this.h = o.h || 128 + 10; - this.rh = this.h - 10; - this.top = 0; - - this.c[0].style.width = this.w +'px'; - - if( this.c[1] !== undefined ) { // with title - - this.c[1].style.width = this.w +'px'; - - if(!this.autoWidth){ - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - } - - - //this.c[1].style.background = '#ff0000'; - //this.c[1].style.textAlign = 'center'; - this.top = 10; - this.h += 10; - - } - - this.gh = this.rh - 28; - this.gw = this.w - 28; - - //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); - - //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' - this.c[2] = this.dom( 'div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:'+(this.h-20)+'px; left:14px; width:'+this.gw+'px; color:'+ this.colors.text ); - - //this.c[2].textContent = this.value; - this.c[2].innerHTML = this.valueToHtml(); - - let svg = this.dom( 'svg', this.css.basic , { viewBox:'0 0 '+this.w+' '+this.rh, width:this.w, height:this.rh, preserveAspectRatio:'none' } ); - this.setCss( svg, { width:this.w, height:this.rh, left:0, top:this.top }); - - this.dom( 'path', '', { d:'', stroke:this.colors.text, 'stroke-width':2, fill:'none', 'stroke-linecap':'butt' }, svg ); - this.dom( 'rect', '', { x:10, y:10, width:this.gw+8, height:this.gh+8, stroke:'rgba(0,0,0,0.3)', 'stroke-width':1 , fill:'none'}, svg ); - - this.iw = ((this.gw-(4*(this.lng-1)))/this.lng); - let t = []; - this.cMode = []; - - this.v = []; - - for( let i = 0; i < this.lng; i++ ){ - - t[i] = [ 14 + (i*this.iw) + (i*4), this.iw ]; - t[i][2] = t[i][0] + t[i][1]; - this.cMode[i] = 0; - - if( this.neg ) this.v[i] = ((1+(this.value[i] / this.multiplicator))*0.5); - else this.v[i] = this.value[i] / this.multiplicator; - - this.dom( 'rect', '', { x:t[i][0], y:14, width:t[i][1], height:1, fill:this.colors.text, 'fill-opacity':0.3 }, svg ); - - } - - this.tmp = t; - this.c[3] = svg; - - //console.log(this.w) - - this.init(); - - if( this.c[1] !== undefined ){ - this.c[1].style.top = 0 +'px'; - this.c[1].style.height = 20 +'px'; - this.s[1].lineHeight = (20-5)+'px'; - } - - this.update( false ); - - } - - setValue ( value ) { - - this.value = value; - this.lng = this.value.length; - for (var i = 0; i < this.lng; i++) { - if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5; - else this.v[i] = value[i] / this.multiplicator; - } - this.update(); - - } - - valueToHtml() { - - let i = this.lng, n=0, r = ''; - let w = 100 / this.lng; - let style = 'width:'+ w +'%;';//' text-align:center;' - while(i--){ - if(n===this.lng-1) r += '
    ' + this.value[n] + '
    '; - else r += '' + this.value[n] + ''; - n++; - } - return r - } - - updateSVG () { - - if( this.line ) this.setSvg( this.c[3], 'd', this.makePath(), 0 ); - - for(let i = 0; ithis.top && l.yt[i][0] && l.x this.distance ) { - let angle = Math.atan2(this.tmp.x, this.tmp.y); - this.tmp.x = Math.sin( angle ) * this.distance; - this.tmp.y = Math.cos( angle ) * this.distance; - } - - this.pos.copy( this.tmp ).divideScalar( this.distance ).negate(); - - this.update(); - - } - - setValue ( v ) { - - if(v===undefined) v=[0,0]; - - this.pos.set( v[0] || 0, v[1] || 0 ); - this.updateSVG(); - - } - - update ( up ) { - - if( up === undefined ) up = true; - - if( this.interval !== null ){ - - if( !this.isDown ){ - - this.pos.lerp( null, 0.3 ); - - this.pos.x = Math.abs( this.pos.x ) < 0.01 ? 0 : this.pos.x; - this.pos.y = Math.abs( this.pos.y ) < 0.01 ? 0 : this.pos.y; - - if( this.isUI && this.main.isCanvas ) this.main.draw(); - - } - - } - - this.updateSVG(); - - if( up ) this.send(); - - - if( this.pos.isZero() ) this.stopInterval(); - - } - - updateSVG () { - - //let x = this.radius - ( -this.pos.x * this.distance ); - //let y = this.radius - ( -this.pos.y * this.distance ); - - let x = (this.diam*0.5) - ( -this.pos.x * this.distance ); - let y = (this.diam*0.5) - ( -this.pos.y * this.distance ); - - if(this.model === 0){ - - let sx = x + ((this.pos.x)*5) + 5; - let sy = y + ((this.pos.y)*5) + 10; - - this.setSvg( this.c[3], 'cx', sx*this.ratio, 3 ); - this.setSvg( this.c[3], 'cy', sy*this.ratio, 3 ); - } else { - this.setSvg( this.c[3], 'cx', x*this.ratio, 3 ); - this.setSvg( this.c[3], 'cy', y*this.ratio, 3 ); - } - - - - this.setSvg( this.c[3], 'cx', x*this.ratio, 4 ); - this.setSvg( this.c[3], 'cy', y*this.ratio, 4 ); - - this.value[0] = ( this.pos.x * this.multiplicator ).toFixed( this.precision ) * 1; - this.value[1] = ( this.pos.y * this.multiplicator ).toFixed( this.precision ) * 1; - - if(this.haveText) this.c[2].textContent = this.value; - - } - - clear () { - - this.stopInterval(); - super.clear(); - - } - -} - -class Knob extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.isCyclic = o.cyclic || false; - this.model = o.stype || 0; - if( o.mode !== undefined ) this.model = o.mode; - - this.autoWidth = false; - - this.setTypeNumber( o ); - - this.minw = this.w; - this.diam = o.diam || this.w; - - this.mPI = Math.PI * 0.8; - this.toDeg = 180 / Math.PI; - this.cirRange = this.mPI * 2; - - this.offset = new V2(); - - this.h = o.h || this.w + 10; - - this.c[0].style.width = this.w +'px'; - this.c[0].style.display = 'block'; - - if(this.c[1] !== undefined) { - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - - } - - this.percent = 0; - - this.cmode = 0; - let cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); - - this.c[3] = this.getKnob(); - this.setSvg( this.c[3], 'fill', cc.button, 0 ); - this.setSvg( this.c[3], 'stroke', cc.text, 1 ); - this.setSvg( this.c[3], 'stroke', cc.text, 3 ); - this.setSvg( this.c[3], 'd', this.makeGrad(), 3 ); - - this.setSvg( this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam ); - this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); - - if ( this.model > 0 ) { - - Tools.dom( 'path', '', { d: '', stroke:cc.text, 'stroke-width': 2, fill: 'none', 'stroke-linecap': 'round' }, this.c[3] ); //4 - - if ( this.model == 2) { - - Tools.addSVGGlowEffect(); - this.setSvg( this.c[3], 'style', 'filter: url("#UILGlow");', 4 ); - - } - - } - - this.r = 0; - - this.init(); - - this.update(); - - } - - mode ( mode ) { - - let cc = this.colors; - - if( this.cmode === mode ) return false; - - switch( mode ) { - case 0: // base - this.s[2].color = cc.text; - this.setSvg( this.c[3], 'fill', cc.button, 0); - //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); - this.setSvg( this.c[3], 'stroke', cc.text, 1 ); - break; - case 1: // down - this.s[2].color = cc.textOver; - this.setSvg( this.c[3], 'fill', cc.select, 0); - //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); - this.setSvg( this.c[3], 'stroke', cc.textOver, 1 ); - break; - } - - this.cmode = mode; - return true; - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'knob'; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - this.isDown = false; - this.sendEnd(); - return this.mode(0) - - } - - mousedown ( e ) { - - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove( e ); - return this.mode(1) - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - let off = this.offset; - - //off.x = this.radius - ( e.clientX - this.zone.x ); - //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); - - off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); - off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - this.r = - Math.atan2( off.x, off.y ); - - if( this.oldr !== null ) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; - - this.r = this.r > this.mPI ? this.mPI : this.r; - this.r = this.r < -this.mPI ? -this.mPI : this.r; - - let steps = 1 / this.cirRange; - let value = (this.r + this.mPI) * steps; - - let n = ( ( this.range * value ) + this.min ) - this.old; - - if(n >= this.step || n <= this.step){ - n = Math.floor( n / this.step ); - this.value = this.numValue( this.old + ( n * this.step ) ); - this.update( true ); - this.old = this.value; - this.oldr = this.r; - } - - } - - wheel ( e ) { - - let name = this.testZone( e ); - - if( name === 'knob' ) { - - let v = this.value - this.step * e.delta; - - if ( v > this.max ) { - v = this.isCyclic ? this.min : this.max; - } else if ( v < this.min ) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue( v ); - this.old = v; - this.update( true ); - - return true; - - } - return false; - - } - - makeGrad () { - - let d = '', step, range, a, x, y, x2, y2, r = 64; - let startangle = Math.PI + this.mPI; - let endangle = Math.PI - this.mPI; - //let step = this.step>5 ? this.step : 1; - - if(this.step>5){ - range = this.range / this.step; - step = ( startangle - endangle ) / range; - } else { - step = (( startangle - endangle ) / r)*2; - range = r*0.5; - } - - for ( let i = 0; i <= range; ++i ) { - - a = startangle - ( step * i ); - x = r + Math.sin( a ) * ( r - 20 ); - y = r + Math.cos( a ) * ( r - 20 ); - x2 = r + Math.sin( a ) * ( r - 24 ); - y2 = r + Math.cos( a ) * ( r - 24 ); - d += 'M' + x + ' ' + y + ' L' + x2 + ' '+y2 + ' '; - - } - - return d; - - } - - update ( up ) { - - this.c[2].textContent = this.value; - this.percent = (this.value - this.min) / this.range; - - let sa = Math.PI + this.mPI; - let ea = ( ( this.percent * this.cirRange ) - ( this.mPI ) ); - - let sin = Math.sin( ea ); - let cos = Math.cos( ea ); - - let x1 = ( 25 * sin ) + 64; - let y1 = -( 25 * cos ) + 64; - let x2 = ( 20 * sin ) + 64; - let y2 = -( 20 * cos ) + 64; - - this.setSvg( this.c[3], 'd', 'M ' + x1 +' ' + y1 + ' L ' + x2 +' ' + y2, 1 ); - - if ( this.model > 0 ) { - - let x1 = 36 * Math.sin( sa ) + 64; - let y1 = 36 * Math.cos( sa ) + 64; - let x2 = 36 * sin + 64; - let y2 = -36 * cos + 64; - let big = ea <= Math.PI - this.mPI ? 0 : 1; - this.setSvg( this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4 ); - - let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( this.colors.text, -0.75) ), Tools.unpack( this.colors.text ), this.percent ) ); - this.setSvg( this.c[3], 'stroke', color, 4 ); - - } - - if( up ) this.send(); - - } - -} - -class List extends Proto { - - constructor( o = {} ) { - - super( o ); - - // TODO not work - this.hideCurrent = false; - - // images - this.path = o.path || ''; - this.format = o.format || ''; - - - this.isWithImage = this.path !== '' ? true:false; - this.preLoadComplete = false; - - this.tmpImage = {}; - this.tmpUrl = []; - - this.m = o.m !== undefined ? o.m : 5; - - - let align = o.align || 'left'; - - // scroll size - let ss = o.scrollSize || 10; - this.ss = ss+1; - - this.sMode = 0; - this.tMode = 0; - - this.listOnly = o.listOnly || false; - this.staticTop = o.staticTop || false; - - this.isSelectable = this.listOnly; - if( o.select !== undefined ) o.selectable = o.select; - if( o.selectable !== undefined ) this.isSelectable = o.selectable; - - if( this.txt === '' ) this.p = 0; - - - let fltop = Math.floor(this.h*0.5)-3; - let cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.basic + 'top:0; display:none; border-radius:'+this.radius+'px;' ); - this.c[3] = this.dom( 'div', this.css.item + 'padding:0px '+this.m+'px; margin-bottom:0px; position:absolute; justify-content:'+align+'; text-align:'+align+'; line-height:'+(this.h-4)+'px; top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:1px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); - - this.scrollerBack = this.dom( 'div', this.css.basic + 'right:0px; width:'+ss+'px; background:'+cc.back+'; display:none;'); - this.scroller = this.dom( 'div', this.css.basic + 'right:'+((ss-(ss*0.25))*0.5)+'px; width:'+(ss*0.25)+'px; background:'+cc.text+'; display:none; '); - - this.c[3].style.color = cc.text; - - - this.list = []; - this.refObject = null; - - if( o.list ){ - if( o.list instanceof Array ){ - this.list = o.list; - } else if( o.list instanceof Object ){ - this.refObject = o.list; - for( let g in this.refObject ) this.list.push( g ); - } - } - - this.items = []; - - this.prevName = ''; - - - this.tmpId = 0; - - this.baseH = this.h; - - this.itemHeight = o.itemHeight || this.h;//(this.h-3); - - // force full list - this.full = o.full || false; - - this.py = 0; - this.ww = this.sb; - this.scroll = false; - this.isDown = false; - - this.current = null; - - // list up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - - if( this.up ){ - - this.c[2].style.top = 'auto'; - this.c[3].style.top = 'auto'; - this.c[4].style.top = 'auto'; - - this.c[2].style.bottom = this.h-2 + 'px'; - this.c[3].style.bottom = '1px'; - this.c[4].style.bottom = fltop + 'px'; - - } else { - this.c[2].style.top = this.baseH + 'px'; - } - - this.listIn = this.dom( 'div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); - this.listIn.name = 'list'; - - this.topList = 0; - - this.c[2].appendChild( this.listIn ); - this.c[2].appendChild( this.scrollerBack ); - this.c[2].appendChild( this.scroller ); - - if( o.value !== undefined ){ - if(!isNaN(o.value)) this.value = this.list[ o.value ]; - else this.value = o.value; - }else { - this.value = this.list[0]; - } - - this.isOpenOnStart = o.open || false; - - if( this.listOnly ){ - this.baseH = 5; - this.c[3].style.display = 'none'; - this.c[4].style.display = 'none'; - this.c[2].style.top = this.baseH+'px'; - this.isOpenOnStart = true; - } - - - this.miniCanvas = o.miniCanvas || false; - this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; - this.imageSize = o.imageSize || [20,20]; - - // dragout function - this.drag = o.drag || false; - this.dragout = o.dragout || false; - this.dragstart = o.dragstart || null; - this.dragend = o.dragend || null; - - - - //this.c[0].style.background = '#FF0000' - ///if( this.isWithImage ) this.preloadImage(); - - this.setList( this.list ); - this.init(); - if( this.isWithImage ) this.preloadImage(); - if( this.isOpenOnStart ) this.open( true ); - - this.baseH += this.mtop; - - } - - // image list - - preloadImage () { - - - - this.preLoadComplete = false; - - this.tmpImage = {}; - for( let i=0; i this.h - this.baseH ) return 'title'; - else { - if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; - if(l.x > this.sa) return this.testItems( l.y-this.baseH ); - } - - } else { - if( l.y < this.baseH+2 ) return 'title'; - else { - if( this.isOpen ){ - if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; - if(l.x > this.sa) return this.testItems( l.y-this.baseH ); - } - } - - } - - return ''; - - } - - testItems ( y ) { - - let name = ''; - - let items = this.items; - - /*if(this.hideCurrent){ - //items = [...this.items] - items = this.items.slice(this.tmpId) - - }*/ - - let i = items.length, item, a, b; - while(i--){ - item = items[i]; - a = item.posy + this.topList; - b = item.posy + this.itemHeight + 1 + this.topList; - if( y >= a && y <= b ){ - name = 'item' + i; - this.modeItem(0); - this.current = item; - this.modeItem(1); - return name; - } - - } - - return name; - - } - - modeItem ( mode ) { - - if( !this.current ) return - - if( this.current.select && mode===0) mode = 2; - let cc = this.colors; - - switch( mode ){ - - case 0: // base - this.current.style.background = cc.back; - this.current.style.color = cc.text; - break; - case 1: // over - this.current.style.background = cc.over; - this.current.style.color = cc.textOver; - break; - case 2: // edit / down - this.current.style.background = cc.select; - this.current.style.color = cc.textSelect; - break; - - } - } - - unSelected() { - - if( !this.current ) return - this.modeItem(0); - this.current = null; - - } - - selected() { - - if( !this.current ) return - this.resetItems(); - this.modeItem(2); - this.current.select = true; - - - - } - - resetItems() { - - let i = this.items.length; - while(i--){ - this.items[i].select = false; - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text; - } - - } - - hideActive() { - - if( !this.hideCurrent ) return - //if( !this.current ) return - if( this.current )this.tmpId = this.current.id; - this.resetHide(); - //this.items[this.tmpId].style.height = 0+'px' - - } - - resetHide() { - - console.log(this.tmpId); - - let i = this.items.length; - while(i--){ - if(i===this.tmpId){ - this.items[i].style.height = 0+'px'; - this.items[i].posy = -1; - } else { - this.items[i].style.height = this.itemHeight+'px'; - this.items[i].posy = (this.itemHeight+1)*(i-1); - } - //this.items[i].style.display = 'flex' - - /*this.items[i].select = false - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text;*/ - } - - } - - // ---------------------- - // EVENTS - // ---------------------- - - - mouseup ( e ) { - - this.isDown = false; - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false; - - if( name === 'scroll' ){ - - this.isDown = true; - this.mousemove( e ); - - } else if( name === 'title' ){ - - this.modeTitle(2); - if( !this.listOnly ){ - this.hideActive(); - if( !this.isOpen ) this.open(); - else this.close(); - } - } else { - // is item - if( this.current ){ - - this.value = this.list[ this.current.id ]; - //this.tmpId = this.current.id - - if( this.isSelectable ) this.selected(); - - //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); - this.send( this.value ); - - if( !this.listOnly ) { - this.close(); - this.setTopItem(); - //this.hideActive() - } - } - - } - - return true; - - } - - mousemove ( e ) { - - let nup = false; - let name = this.testZone( e ); - - if( !name ) return nup; - - if( name === 'title' ){ - this.unSelected(); - this.modeTitle(1); - this.cursor('pointer'); - - } else if( name === 'scroll' ){ - - this.cursor('s-resize'); - this.modeScroll(1); - if( this.isDown ){ - this.modeScroll(2); - //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - let top = this.zone.y+this.baseH-2; - this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - } - //if(this.isDown) this.listmove(e); - } else { - - // is item - this.modeTitle(0); - this.modeScroll(0); - this.cursor('pointer'); - - } - - if( name !== this.prevName ) nup = true; - this.prevName = name; - - return nup; - - } - - wheel ( e ) { - - let name = this.testZone( e ); - if( name === 'title' ) return false; - this.py += e.delta*10; - this.update(this.py); - return true; - - } - - - - // ---------------------- - - reset () { - - this.prevName = ''; - this.unSelected(); - this.modeTitle(0); - this.modeScroll(0); - - //console.log('this is reset') - - } - - modeScroll ( mode ) { - - if( mode === this.sMode ) return; - - let s = this.scroller.style; - let cc = this.colors; - - switch(mode){ - case 0: // base - s.background = cc.text; - break; - case 1: // over - s.background = cc.select; - break; - case 2: // edit / down - s.background = cc.select; - break; - - } - - this.sMode = mode; - } - - modeTitle ( mode ) { - - if( mode === this.tMode ) return; - - let s = this.s; - let cc = this.colors; - - switch(mode){ - case 0: // base - s[3].color = cc.text; - s[3].background = cc.button; - break; - case 1: // over - s[3].color = cc.textOver; - s[3].background = cc.overoff; - break; - case 2: // edit / down - s[3].color = cc.textSelect; - s[3].background = cc.overoff; - break; - - } - - this.tMode = mode; - - } - - clearList () { - - while ( this.listIn.children.length ) this.listIn.removeChild( this.listIn.lastChild ); - this.items = []; - - } - - setList ( list ) { - - this.clearList(); - - this.list = list; - this.length = this.list.length; - - let lng = this.hideCurrent? this.length-1 : this.length; - - this.maxItem = this.full ? lng : 5; - this.maxItem = lng < this.maxItem ? lng : this.maxItem; - - this.maxHeight = this.maxItem * (this.itemHeight+1) + 2; - - - - this.max = lng * (this.itemHeight+1) + 2; - this.ratio = this.maxHeight / this.max; - this.sh = this.maxHeight * this.ratio; - this.range = this.maxHeight - this.sh; - - this.c[2].style.height = this.maxHeight + 'px'; - this.scrollerBack.style.height = this.maxHeight + 'px'; - this.scroller.style.height = this.sh + 'px'; - - if( this.max > this.maxHeight ){ - this.ww = this.sb - this.ss; - this.scroll = true; - } - - if( this.miniCanvas ) { - - this.tmpCanvas = document.createElement('canvas'); - this.tmpCanvas.width = this.imageSize[0]; - this.tmpCanvas.height = this.imageSize[1]; - this.tmpCtx = this.tmpCanvas.getContext("2d"); - this.tmpCtx.fillStyle = this.canvasBg; - this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); - - } - - let item, n;//, l = this.sb; - for( let i=0; i this.range ? this.range : y; - - this.topList = -Math.floor( y / this.ratio ); - - this.listIn.style.top = this.topList+'px'; - this.scroller.style.top = Math.floor( y ) + 'px'; - - this.py = y; - - } - - parentHeight ( t ) { - - if ( this.group !== null ) this.group.calc( t ); - else if ( this.isUI ) this.main.calc( t ); - - } - - open ( first ) { - - super.open(); - - this.update( 0 ); - - this.h = this.maxHeight + this.baseH + 5; - if( !this.scroll ){ - this.topList = 0; - this.h = this.baseH + 5 + this.max; - this.scroller.style.display = 'none'; - this.scrollerBack.style.display = 'none'; - } else { - this.scroller.style.display = 'block'; - this.scrollerBack.style.display = 'block'; - } - this.s[0].height = this.h + 'px'; - this.s[2].display = 'block'; - - if( this.up ){ - this.zone.y -= this.h - (this.baseH-10); - this.setSvg( this.c[4], 'd', this.svgs.g1 ); - } else { - this.setSvg( this.c[4], 'd', this.svgs.g2 ); - } - - this.rSizeContent(); - - let t = this.h - this.baseH; - - this.zone.h = this.h; - - if(!first) this.parentHeight( t ); - - } - - close () { - - super.close(); - - if( this.up ) this.zone.y += this.h - (this.baseH-10); - - let t = this.h - this.baseH; - - this.h = this.baseH; - this.s[0].height = this.h + 'px'; - this.s[2].display = 'none'; - this.setSvg( this.c[4], 'd', this.svgs.g1 ); - - this.zone.h = this.h; - - this.parentHeight( -t ); - - } - - // ----- - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSizeContent () { - - let i = this.length; - while(i--) this.listIn.children[i].style.width = this.ww + 'px'; - - } - - rSize () { - - super.rSize(); - - //Proto.prototype.rSize.call( this ); - - let s = this.s; - let w = this.sb; - let d = this.sa; - - if(s[2]=== undefined) return; - - s[2].width = w + 'px'; - s[2].left = d +'px'; - - s[3].width = w + 'px'; - s[3].left = d + 'px'; - - s[4].left = d + w - 15 + 'px'; - - this.ww = w; - if( this.max > this.maxHeight ) this.ww = w-this.ss; - if(this.isOpen) this.rSizeContent(); - - } - -} - -class Numeric extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.setTypeNumber( o ); - - this.allway = o.allway || false; - - this.isDown = false; - this.value = [0]; - this.multy = 1; - this.invmulty = 1; - this.isSingle = true; - this.isAngle = false; - this.isVector = false; - - if( o.isAngle ){ - this.isAngle = true; - this.multy = Tools.torad; - this.invmulty = Tools.todeg; - } - - this.isDrag = o.drag || false; - - if( o.value !== undefined ){ - if( !isNaN(o.value) ){ - this.value = [o.value]; - } else if( o.value instanceof Array ){ - this.value = o.value; - this.isSingle = false; - } else if( o.value instanceof Object ){ - this.value = []; - if( o.value.x !== undefined ) this.value[0] = o.value.x; - if( o.value.y !== undefined ) this.value[1] = o.value.y; - if( o.value.z !== undefined ) this.value[2] = o.value.z; - if( o.value.w !== undefined ) this.value[3] = o.value.w; - this.isSingle = false; - this.isVector = true; - } - } - - this.lng = this.value.length; - this.tmp = []; - - this.current = -1; - this.prev = { x:0, y:0, d:0, v:0 }; - - let cc = this.colors; - - // bg - this.c[2] = this.dom( 'div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h-8) + 'px;' ); - - this.cMode = []; - - let i = this.lng; - while(i--){ - - if( this.isAngle ) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed( this.precision ); - this.c[3+i] = this.dom( 'div', this.css.txtselect + 'top:1px; height:'+(this.h-2)+'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;'); - if(o.center) this.c[2+i].style.textAlign = 'center'; - this.c[3+i].textContent = this.value[i]; - this.c[3+i].style.color = this.colors.text; - this.c[3+i].isNum = true; - this.cMode[i] = 0; - - } - - // selection - this.selectId = 3 + this.lng; - this.c[this.selectId] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.cursorId = 4 + this.lng; - this.c[ this.cursorId ] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); - - this.init(); - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - - let i = this.lng; - let t = this.tmp; - - while( i-- ){ - if( l.x>t[i][0] && l.x 0"; - this.easing = o.easing || 1; - - this.setTypeNumber(o); - - this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; - - //this.defaultBorderColor = this.colors.hide; - - this.isDown = false; - this.isOver = false; - this.allway = o.allway || false; - - this.isDeg = o.isDeg || false; - this.isCyclic = o.cyclic || false; - - this.firstImput = false; - - let cc = this.colors; - - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - this.c[2] = this.dom( - "div", - this.css.txtselect + - "border:none; background:none; width:47px; color:" + - cc.text + - ";" - ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); - this.c[3] = this.dom( - "div", - this.css.basic + " top:0; height:" + this.h + "px;" - ); - - this.c[4] = this.dom( - "div", - this.css.basic + - "background:" + - cc.back + - "; top:2px; height:" + - (this.h - 4) + - "px;" - ); - this.c[5] = this.dom( - "div", - this.css.basic + - "left:4px; top:5px; height:" + - (this.h - 10) + - "px; background:" + - cc.text + - ";" - ); - - this.c[2].isNum = true; - //this.c[2].style.height = (this.h-4) + 'px'; - //this.c[2].style.lineHeight = (this.h-8) + 'px'; - this.c[2].style.height = this.h - 2 + "px"; - this.c[2].style.lineHeight = this.h - 10 + "px"; - - if (this.model !== 0) { - let r1 = 4, - h1 = 4, - h2 = 8, - ww = this.h - 6, - ra = 16; - - if (this.model === 2) { - r1 = 0; - h1 = 2; - h2 = 4; - ra = 2; - ww = (this.h - 6) * 0.5; - } - - if (this.model === 3) this.c[5].style.visible = "none"; - - this.c[4].style.borderRadius = r1 + "px"; - this.c[4].style.height = h2 + "px"; - this.c[4].style.top = this.h * 0.5 - h1 + "px"; - this.c[5].style.borderRadius = r1 * 0.5 + "px"; - this.c[5].style.height = h1 + "px"; - this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; - - //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); - this.c[6] = this.dom( - "div", - this.css.basic + - "border-radius:" + - ra + - "px; margin-left:" + - -ww * 0.5 + - "px; background:" + - cc.text + - "; left:4px; top:3px; height:" + - (this.h - 6) + - "px; width:" + - ww + - "px;" - ); - } - - this.init(); - } - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - - if (l.x >= this.txl) return "text"; - else if (l.x >= this.sa) return "scroll"; - else return ""; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (this.isDown) this.isDown = false; - } - - mousedown(e) { - let name = this.testZone(e); - - if (!name) return false; - - if (name === "scroll") { - this.isDown = true; - this.old = this.value; - this.mousemove(e); - } - - /*if( name === 'text' ){ - this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); - }*/ - - return true; - } - - mousemove(e) { - let nup = false; - - let name = this.testZone(e); - - if (name === "scroll") { - this.mode(1); - this.cursor("w-resize"); - //} else if(name === 'text'){ - //this.cursor('pointer'); - } else { - this.cursor(); - } - - if (this.isDown) { - let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; - - // lo mapeo al rango 0 ... 1 - nNormalized = Math.min(1, Math.max(0, nNormalized)); - - // aplico easing - let nEased = Math.pow(nNormalized, this.easing); // easing - - let nNew = nEased * this.range + this.min; - let nNewSlider = nNormalized * this.range + this.min; - - this.sliderValue = this.numValue(nNewSlider); - - let delta = nNew - this.old; - - let steps; - if (delta >= this.step || delta <= this.step) { - steps = Math.floor(delta / this.step); - this.value = this.numValue(this.old + steps * this.step); - // value without easing applied - - this.update(true); - this.old = this.value; - } - //console.log("n, normalized, value", nNew, nNormalized, this.value); - nup = true; - } - - return nup; - } - - wheel(e) { - let name = this.testZone(e); - - if (name === "scroll") { - let v = this.value - this.step * e.delta; - - if (v > this.max) { - v = this.isCyclic ? this.min : this.max; - } else if (v < this.min) { - v = this.isCyclic ? this.max : this.min; - } - - this.setValue(v); - this.old = v; - this.update(true); - - return true; - } - - return false; - } - - //keydown: function ( e ) { return true; }, - - // ---------------------- - - validate() { - let n = this.c[2].textContent; - - if (!isNaN(n)) { - this.value = this.numValue(n); - this.update(true); - } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - } - - reset() { - //this.clearInput(); - this.isDown = false; - this.mode(0); - } - - mode(mode) { - let s = this.s; - let cc = this.colors; - - switch (mode) { - case 0: // base - // s[2].border = '1px solid ' + this.colors.hide; - s[2].color = cc.text; - s[4].background = cc.back; - s[5].background = cc.text; - if (this.model !== 0) s[6].background = cc.text; //cc.button; - break; - case 1: // scroll over - //s[2].border = '1px dashed ' + this.colors.hide; - s[2].color = cc.textOver; - s[4].background = cc.back; - s[5].background = cc.textOver; - if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; - break; - } - } - - update(up) { - let normalized = (this.value - this.min) / this.range; - - let uneased = - this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); - - let ww = Math.floor(this.ww * uneased); - //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); - - if (this.model !== 3) this.s[5].width = ww + "px"; - if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; - this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - - if (up) this.send(); - } - - rSize() { - super.rSize(); - - let w = this.sb - this.sc; - this.ww = w - 6; - - let tx = this.sc; - if (this.isUI || !this.simple) tx = this.sc + 10; - this.txl = this.w - tx + 2; - - //let ty = Math.floor(this.h * 0.5) - 8; - - let s = this.s; - - s[2].width = this.sc - 6 + "px"; - s[2].left = this.txl + 4 + "px"; - //s[2].top = ty + 'px'; - s[3].left = this.sa + "px"; - s[3].width = w + "px"; - s[4].left = this.sa + "px"; - s[4].width = w + "px"; - s[5].left = this.sa + 3 + "px"; - - this.update(); - } -} - -class TextInput extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.cmode = 0; - - this.value = o.value !== undefined ? o.value : ''; - this.placeHolder = o.placeHolder || ''; - - this.allway = o.allway || false; - this.editable = o.edit !== undefined ? o.edit : true; - - this.isDown = false; - - let cc = this.colors; - - // text - this.c[2] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;' ); - this.c[2].textContent = this.value; - - // selection - this.c[3] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.c[4] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); - - // fake - this.c[5] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; border:none; justify-content: center; font-style: italic; color:'+cc.border+';' ); - if( this.value === '' ) this.c[5].textContent = this.placeHolder; - - - - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.x >= this.sa ) return 'text'; - return ''; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if(!this.editable) return; - - if( this.isDown ){ - this.isDown = false; - return this.mousemove( e ); - } - - return false; - - } - - mousedown ( e ) { - - if(!this.editable) return; - - let name = this.testZone( e ); - - if( !this.isDown ){ - this.isDown = true; - if( name === 'text' ) this.setInput( this.c[2] ); - return this.mousemove( e ); - } - - return false; - - } - - mousemove ( e ) { - - if(!this.editable) return; - - let name = this.testZone( e ); - - //let l = this.local; - //if( l.x === -1 && l.y === -1 ){ return;} - - //if( l.x >= this.sa ) this.cursor('text'); - //else this.cursor(); - - let x = 0; - - if( name === 'text' ) this.cursor('text'); - else this.cursor(); - - if( this.isDown ) x = e.clientX - this.zone.x; - - return this.upInput( x - this.sa -3, this.isDown ); - - } - - update ( ) { - - this.c[2].textContent = this.value; - - } - - // ---------------------- - - reset () { - - this.cursor(); - - } - - // ---------------------- - // INPUT - // ---------------------- - - select ( c, e, w, t ) { - - let s = this.s; - let d = this.sa + 5; - s[4].width = '1px'; - s[4].left = ( d + e ) + 'px'; - - s[3].left = ( d + e ) + 'px'; - s[3].width = w + 'px'; - this.c[3].innerHTML = t; - - } - - unselect () { - - let s = this.s; - if(!s) return; - s[3].width = 0 + 'px'; - this.c[3].innerHTML = 't'; - s[4].width = 0 + 'px'; - - } - - validate ( force ) { - - if( this.allway ) force = true; - - this.value = this.c[2].textContent; - - if(this.value !== '') this.c[5].textContent = ''; - else this.c[5].textContent = this.placeHolder; - - if( !force ) return; - - this.send(); - - } - - // ---------------------- - // REZISE - // ---------------------- - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - - s[5].left = this.sa + 'px'; - s[5].width = this.sb + 'px'; - - } - - -} - -class Title extends Proto { - - constructor( o = {} ) { - - super( o ); - - let prefix = o.prefix || ''; - - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:right; width:60px; line-height:'+ (this.h-8) + 'px; color:' + this.colors.text ); - - if( this.h === 31 ){ - - this.s[0].height = this.h + 'px'; - this.s[1].top = 8 + 'px'; - this.c[2].style.top = 8 + 'px'; - - } - - let s = this.s; - - s[1].justifyContent = o.align || 'left'; - //s[1].textAlign = o.align || 'left'; - s[1].fontWeight = o.fontWeight || 'bold'; - - - this.c[1].textContent = this.txt.substring(0,1).toUpperCase() + this.txt.substring(1).replace("-", " "); - this.c[2].textContent = prefix; - - this.init(); - - } - - text( txt ) { - - this.c[1].textContent = txt; - - } - - text2( txt ) { - - this.c[2].textContent = txt; - - } - - rSize() { - - super.rSize(); - this.s[1].width = this.w + 'px'; //- 50 + 'px'; - this.s[2].left = this.w + 'px';//- ( 50 + 26 ) + 'px'; - - } - - setColor( c ) { - this.s[1].color = c; - this.s[2].color = c; - } - -} - -class Select extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || ''; - this.isDown = false; - this.onActif = o.onActif || function(){}; - - //let prefix = o.prefix || ''; - const cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+ cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); - //this.c[2].style.color = this.fontColor; - - this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); - this.c[3].textContent = this.value; - - let fltop = Math.floor(this.h*0.5)-7; - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'cursor' ], fill:cc.text, stroke:'none'}); - - this.stat = 1; - this.isActif = false; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return '' - if( l.x > this.sa && l.x < this.sa+30 ) return 'over' - return '0' - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( this.isDown ){ - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove( e ) - } - - return false - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false - - this.isDown = true; - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove( e ) - - } - - mousemove ( e ) { - - let up = false; - let name = this.testZone( e ); - - if( name === 'over' ){ - this.cursor('pointer'); - up = this.mode( this.isDown ? 3 : 2 ); - } else { - up = this.reset(); - } - - return up - - } - - // ---------------------- - - apply ( v ) { - - v = v || ''; - - if( v !== this.value ) { - this.value = v; - this.c[3].textContent = this.value; - this.send(); - } - - this.mode(1); - - } - - update () { - - this.mode( 3 ); - - } - - mode ( n ) { - - let change = false; - let cc = this.colors; - - if( this.stat !== n ){ - - if( n===1 ) this.isActif = false; - if( n===3 ){ - if( !this.isActif ){ this.isActif = true; n=4; this.onActif( this ); } - else { this.isActif = false; } - } - - if( n===2 && this.isActif ) n = 4; - - this.stat = n; - - switch( n ){ - - case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base - case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over - case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.action; break; // down - case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.action; break; // actif - - } - - change = true; - - } - - return change - - - - } - - reset () { - - this.cursor(); - return this.mode( this.isActif ? 4 : 1 ) - - } - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = (this.sa + 40) + 'px'; - s[3].width = (this.sb - 40) + 'px'; - s[4].left = (this.sa+8) + 'px'; - - } - -} - -class Bitmap extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.value = o.value || ''; - this.refTexture = o.texture || null; - this.img = null; - - this.isDown = false; - this.neverlock = true; - - - - const cc = this.colors; - - this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); - - this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); - this.c[3].textContent = this.value; - - let fltop = Math.floor(this.h*0.5)-7; - this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'load' ], fill:cc.text, stroke:'none'}); - - this.stat = 1; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return ''; - if( l.x > this.sa && l.x < this.sa+30 ) return 'over'; - return '0' - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( this.isDown ){ - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove( e ); - } - - return false; - - } - - mousedown ( e ) { - - let name = this.testZone( e ); - - if( !name ) return false; - - if( name === 'over' ){ - this.isDown = true; - Files.load( { callback:this.changeBitmap.bind(this) } ); - - } - - - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove( e ); - - } - - mousemove ( e ) { - - let up = false; - - let name = this.testZone( e ); - - if( name === 'over' ){ - this.cursor('pointer'); - up = this.mode( this.isDown ? 3 : 2 ); - } else { - up = this.reset(); - } - - return up; - - } - - // ---------------------- - - changeBitmap( img, fname ){ - - if( img ){ - this.img = img; - this.apply( fname ); - } else { - this.img = null; - this.apply( 'null' ); - } - - } - - // ---------------------- - - apply ( v ) { - - v = v || ''; - - if( v !== this.value ) { - this.value = v; - this.c[3].textContent = this.value; - - if( this.img !== null ){ - if( this.objectLink !== null ) this.objectLink[ this.val ] = v; - if( this.callback ) this.callback( this.value, this.img, this.name ); - } - - } - - this.mode(1); - - } - - update () { - - this.mode( 3 ); - - } - - mode ( n ) { - - let change = false; - let cc = this.colors; - - if( this.stat !== n ){ - - this.stat = n; - - switch( n ){ - - case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base - case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over - case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.over; break; // down - case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.select; break; // actif - - } - - change = true; - - } - - return change; - - - - } - - reset () { - - this.cursor(); - return this.mode( this.isActif ? 4 : 1 ); - - } - - text ( txt ) { - - this.c[3].textContent = txt; - - } - - rSize () { - - super.rSize(); - - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = (this.sa + 40) + 'px'; - s[3].width = (this.sb - 40) + 'px'; - s[4].left = (this.sa+8) + 'px'; - - } - -} - -//import { Proto } from '../core/Proto.js'; - -class Selector extends Button { - - constructor( o = {} ) { - - if( o.selectable === undefined ) o.selectable = true; - super( o ); - - } - -} - -class Item extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.p = 100; - this.value = this.txt; - this.status = 1; - - this.itype = o.itype || 'none'; - this.val = this.itype; - - this.graph = this.svgs[ this.itype ]; - - let fltop = Math.floor(this.h*0.5)-7; - - this.c[2] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.graph, fill:this.colors.text, stroke:'none'}); - - this.s[1].marginLeft = 20 + 'px'; - - this.init(); - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousemove ( e ) { - - this.cursor('pointer'); - - //up = this.modes( this.isDown ? 3 : 2, name ); - - } - - mousedown ( e ) { - - if( this.isUI ) this.main.resetItem(); - - this.selected( true ); - - this.send(); - - return true; - - } - - uiout () { - - if( this.isSelect ) this.mode(3); - else this.mode(1); - - } - - uiover () { - - if( this.isSelect ) this.mode(4); - else this.mode(2); - - } - - update () { - - } - - /*rSize () { - - super.rSize(); - - }*/ - - mode ( n ) { - - let change = false; - - if( this.status !== n ){ - - this.status = n; - let s = this.s, cc = this.colors; - - switch( n ){ - - case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; - case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; - case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; - case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; - - } - - change = true; - - } - - return change; - - } - - reset () { - - this.cursor(); - // return this.mode( 1 ); - - } - - selected ( b ){ - - if( this.isSelect ) this.mode(1); - - this.isSelect = b || false; - - if( this.isSelect ) this.mode(3); - - } - - -} - -class Grid extends Proto { - - constructor( o = {} ) { - - super( o ); - - /*this.values = o.values || []; - - if( typeof this.values === 'string' ) this.values = [ this.values ];*/ - - this.values = []; - - if( o.values ){ - if( o.values instanceof Array ){ - this.values = o.values; - } else if( o.values instanceof String ){ - this.values = [ o.values ]; - } else if( o.values instanceof Object ){ - this.refObject = o.values; - for( let g in this.refObject ) this.values.push( g ); - } - } - - this.lng = this.values.length; - - - - this.value = o.value || null; - - - - - let cc = this.colors; - - - this.isSelectable = o.selectable || false; - this.spaces = o.spaces || [ cc.sx, cc.sy ]; - this.bsize = o.bsize || [ 90, this.h ]; - - this.bsizeMax = this.bsize[0]; - - this.tmp = []; - this.stat = []; - this.grid = [ 2, Math.round( this.lng * 0.5 ) ]; - - this.h = ( this.grid[1] * this.bsize[1] ) + ( this.grid[1] * this.spaces[1] ); //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); - - this.c[1].textContent = ''; - //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); - this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1])+'px; border:none;' ); - - let n = 0, b, td, tr, sel; - - this.res = -1; - this.isDown = false; - this.neverlock = true; - - this.buttons = []; - this.stat = []; - this.tmpX = []; - this.tmpY = []; - - for( let i = 0; i < this.grid[1]; i++ ){ - - tr = this.c[2].insertRow(); - tr.style.cssText = 'pointer-events:none;'; - for( let j = 0; j < this.grid[0]; j++ ){ - - td = tr.insertCell(); - td.style.cssText = 'pointer-events:none;'; - - if( this.values[n] ){ - - sel = false; - if( this.values[n] === this.value && this.isSelectable ) sel = true; - - b = document.createElement( 'div' ); - b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:'+this.bsize[0]+'px; height:'+(this.bsize[1]-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; left:auto; right:auto; border-radius:'+this.radius+'px;'; - b.style.background = sel ? cc.select : cc.button; - b.style.color = sel ? cc.textSelect : cc.text; - b.innerHTML = this.values[n]; - td.appendChild( b ); - - this.buttons.push(b); - this.stat.push(1); - - } else { - - b = document.createElement( 'div' ); - b.style.cssText = this.css.txt + 'position:static; width:'+this.bsize[0]+'px; height:'+this.bsize[1]+'px; text-align:center; left:auto; right:auto; background:none;'; - td.appendChild( b ); - - } - - if(j===0) b.style.cssText += 'float:right;'; - else b.style.cssText += 'float:left;'; - - n++; - - } - } - - this.s[0].border = 'none'; - - this.init(); - - } - - testZone ( e ) { - - let l = this.local; - if( l.x === -1 && l.y === -1 ) return -1; - - l.y += this.mtop; - - let tx = this.tmpX; - let ty = this.tmpY; - - let id = -1; - let c = -1; - let line = -1; - let i = this.grid[0]; - while( i-- ){ - if( l.x > tx[i][0] && l.x < tx[i][1] ) c = i; - } - - i = this.grid[1]; - while( i-- ){ - if( l.y > ty[i][0] && l.y < ty[i][1] ) line = i; - } - - if(c!==-1 && line!==-1){ - id = c + (line*2); - if(id>this.lng-1) id = -1; - } - - return id; - - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup ( e ) { - - if( !this.isDown ) return false - - this.isDown = false; - if( this.res !== -1 ){ - this.value = this.values[this.res]; - this.send(); - } - - return this.mousemove( e ) - - } - - mousedown ( e ) { - - if( this.isDown ) return false - this.isDown = true; - return this.mousemove( e ) - - } - - mousemove ( e ) { - - let up = false; - this.res = this.testZone( e ); - - if( this.res !== -1 ){ - this.cursor('pointer'); - up = this.modes( this.isDown ? 3 : 2, this.res ); - } else { - up = this.reset(); - } - - return up; - - } - - // ---------------------- - // MODE - // ----------------------- - - modes ( N = 1, id = -1 ) { - - let i = this.lng, w, n, r = false; - - while( i-- ){ - - n = N; - w = this.isSelectable ? this.values[ i ] === this.value : false; - - if( i === id ){ - if( w && n === 2 ) n = 3; - } else { - n = 1; - if( w ) n = 4; - } - - if( this.mode( n, i ) ) r = true; - - } - - return r - - } - - mode ( n, id ) { - - let change = false; - let cc = this.colors, s = this.buttons; - let i = id; - - if( this.stat[id] !== n ){ - - this.stat[id] = n; - - switch( n ){ - - case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; - case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; - case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; - case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; - - } - - change = true; - - } - - return change; - - } - - // ---------------------- - - reset () { - - this.res = -1; - this.cursor(); - return this.modes() - - } - - - label ( string, n ) { - - this.buttons[n].textContent = string; - - } - - icon ( string, y, n ) { - - this.buttons[n].style.padding = ( y || 0 ) +'px 0px'; - this.buttons[n].innerHTML = string; - - } - - testW () { - - let vw = this.spaces[0]*3 + this.bsizeMax*2, rz = false; - if( vw > this.w ) { - this.bsize[0] = ( this.w-(this.spaces[0]*3) ) * 0.5; - rz = true; - } else { - if( this.bsize[0] !== this.bsizeMax ) { - this.bsize[0] = this.bsizeMax; - rz = true; - } - } - - if( !rz ) return; - - let i = this.buttons.length; - while(i--) this.buttons[i].style.width = this.bsize[0] + 'px'; - - } - - rSize () { - - super.rSize(); - - this.testW(); - - let mid; - - this.tmpX = []; - this.tmpY = []; - - for( let j = 0; j < this.grid[0]; j++ ){ - - if(j===0){ - mid = ( this.w*0.5 ) - ( this.spaces[0]*0.5 ); - this.tmpX.push( [ mid-this.bsize[0], mid ] ); - } else { - mid = ( this.w*0.5 ) + ( this.spaces[0]*0.5 ); - this.tmpX.push( [ mid, mid+this.bsize[0] ] ); - } - - } - - mid = this.spaces[1]; - - for( let i = 0; i < this.grid[1]; i++ ){ - - this.tmpY.push( [ mid, mid + this.bsize[1] ] ); - mid += this.bsize[1] + this.spaces[1]; - - } - - } - -} - -class Pad2D extends Proto { - - constructor( o = {} ) { - - super( o ); - - this.autoWidth = false; - this.minw = this.w; - this.diam = o.diam || this.w; - - //this.margin = 15; - this.pos = new V2(0,0); - this.maxPos = 90; - - this.model = o.stype || 0; - if( o.mode !== undefined ) this.model = o.mode; - - this.min = o.min === undefined ? -1 : o.min; - this.max = o.max === undefined ? 1 : o.max; - - this.range = (this.max - this.min)*0.5; - - this.cmode = 0; - - - //console.log(this.range) - - this.c[0].style.display = 'block'; - - - - - - this.precision = o.precision === undefined ? 2 : o.precision; - - /*this.bounds = {}; - this.bounds.x1 = o.x1 || -1; - this.bounds.x2 = o.x2 || 1; - this.bounds.y1 = o.y1 || -1; - this.bounds.y2 = o.y2 || 1; - - this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); - this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); - - this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); - this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ - - this.value = ( Array.isArray( o.value ) && o.value.length == 2 ) ? o.value : [ 0, 0 ]; - - - this.h = o.h || this.w + 10; - - this.c[0].style.width = this.w + 'px'; - - // Title - if( this.c[1] !== undefined ) { // with title - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - - } - - //this.top -= this.margin - - let cc = this.colors; - - - // Value - this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+ ( this.h - 20 ) + 'px; width:100%; color:' + cc.text ); - this.c[2].textContent = this.value; - - // Pad - - let pad = this.getPad2d(); - - this.setSvg( pad, 'fill', cc.back, 0 ); - this.setSvg( pad, 'fill', cc.button, 1 ); - this.setSvg( pad, 'stroke', cc.back, 2 ); - this.setSvg( pad, 'stroke', cc.back, 3 ); - this.setSvg( pad, 'stroke', cc.text, 4 ); - - this.setSvg( pad, 'viewBox', '0 0 '+this.diam+' '+this.diam ); - this.setCss( pad, { width:this.diam, height:this.diam, left:0, top:this.top }); - - this.c[3] = pad; - - this.init(); - this.setValue(); - - } - - testZone ( e ) { - - let l = this.local; - - if( l.x === -1 && l.y === -1 ) return ''; - - - - if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; - else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; - else return 'pad'; - - /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { - return 'pad'; - }*/ - - //return ''; - - } - - mouseup ( e ) { - - this.isDown = false; - return this.mode(0); - - } - - mousedown ( e ) { - - if ( this.testZone(e) === 'pad' ) { - - this.isDown = true; - this.mousemove( e ); - return this.mode(1); - } - - } - - mousemove ( e ) { - - if( !this.isDown ) return; - - let x = (this.w*0.5) - ( e.clientX - this.zone.x ); - let y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); - - - let r = 256 / this.diam; - - x = -(x*r); - y = -(y*r); - - x = Tools.clamp( x, -this.maxPos, this.maxPos ); - y = Tools.clamp( y, -this.maxPos, this.maxPos ); - - //let x = e.clientX - this.zone.x; - //let y = e.clientY - this.zone.y - this.top; - - /*if( x < this.margin ) x = this.margin; - if( x > this.w - this.margin ) x = this.w - this.margin; - if( y < this.margin ) y = this.margin; - if( y > this.w - this.margin ) y = this.w - this.margin;*/ - - //console.log(x,y) - - this.setPos( [ x , y ] ); - - this.update( true ); - - } - - mode ( mode ) { - - if( this.cmode === mode ) return false; - - let cc = this.colors; - - switch( mode ){ - case 0: // base - - this.s[2].color = cc.text; - this.setSvg( this.c[3], 'fill', cc.back, 0); - this.setSvg( this.c[3], 'fill', cc.button, 1); - this.setSvg( this.c[3], 'stroke', cc.back, 2); - this.setSvg( this.c[3], 'stroke', cc.back, 3); - this.setSvg( this.c[3], 'stroke', cc.text, 4 ); - - break; - case 1: // down - - this.s[2].color = cc.textSelect; - this.setSvg( this.c[3], 'fill', cc.backoff, 0); - this.setSvg( this.c[3], 'fill', cc.overoff, 1); - this.setSvg( this.c[3], 'stroke', cc.backoff, 2); - this.setSvg( this.c[3], 'stroke', cc.backoff, 3); - this.setSvg( this.c[3], 'stroke', cc.textSelect, 4 ); - - break; - } - - this.cmode = mode; - return true; - - - - } - - update ( up ) { - - //if( up === undefined ) up = true; - - this.c[2].textContent = this.value; - - this.updateSVG(); - - if( up ) this.send(); - - } - - updateSVG() { - - if ( this.model == 1 ) { - - this.setSvg( this.c[3], 'y1', this.pos.y, 2 ); - this.setSvg( this.c[3], 'y2', this.pos.y, 2 ); - - this.setSvg( this.c[3], 'x1', this.pos.x, 3 ); - this.setSvg( this.c[3], 'x2', this.pos.x, 3 ); - - } - - this.setSvg( this.c[3], 'cx', this.pos.x, 4 ); - this.setSvg( this.c[3], 'cy', this.pos.y, 4 ); - - } - - setPos ( p ) { - - //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; - - this.pos.set( p[0]+128 , p[1]+128 ); - - let r = 1/this.maxPos; - - this.value[0] = ((p[0]*r)*this.range).toFixed( this.precision ); - this.value[1] = ((p[1]*r)*this.range).toFixed( this.precision ); - - } - - setValue ( v, up = false ) { - - if( v === undefined ) v = this.value; - - /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; - if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; - if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; - if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ - - this.value[0] = Math.min( this.max, Math.max( this.min, v[0] ) ).toFixed( this.precision ) * 1; - this.value[1] = Math.min( this.max, Math.max( this.min, v[1] ) ).toFixed( this.precision ) * 1; - - this.pos.set( ((this.value[0]/this.range)*this.maxPos)+128 , ((this.value[1]/this.range)*this.maxPos)+128 ); - - //console.log(this.pos) - - this.update( up ); - - } - - /*lerp( s1, s2, d1, d2, c = true ) { - - let s = ( d2 - d1 ) / ( s2 - s1 ); - - return c ? ( v ) => { - return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 - } : ( v ) => { - return ( v - s1 ) * s + d1 - } - - }*/ - -} - -// proto/TreeList.js - -class TreeList extends Proto { - constructor(o = {}) { - // API pública esperada: - // o.tree (obj/array), o.value (array) - // o.focused (bool), o.focusPath (array), o.focusLevel (number) - // o.tabIndex, o.itemIndex, o.onChange (fn) - o.selectable = true; - o.name = o.name || 'TreeList'; - super(o); - - // Datos & estado - this.tree = o.tree || {}; - this.value = Array.isArray(o.value) ? o.value.slice() : []; - this.focused = !!o.focused; - this.focusPath = Array.isArray(o.focusPath) ? o.focusPath.slice() : []; - this.focusLevel = typeof o.focusLevel === 'number' ? o.focusLevel : -1; - - this.tabIndex = o.tabIndex ?? null; - this.itemIndex = o.itemIndex ?? null; - - // Callback - this.changeCb = typeof o.onChange === 'function' ? o.onChange : () => {}; - - // Layout interno / publicación de altura - this.lineH = this.h; // alto de UNA fila - this.levelGap = this.colors.sy || 2; // separación vertical entre niveles - this.leafMax = 0; // se calcula en rSize() - - // Modelo visual - this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] - this.itemsDom = []; // espejo DOM por nivel - this.hover = { level: -1, index: -1 }; - - // Contenedor interno (absoluto) - this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); - this.s[2] = this.c[2].style; - - this.init(); - } - - // ======= Helpers de tipo ======= - static isMap(node) { return node && typeof node === 'object' && !Array.isArray(node); } - static isList(node) { return Array.isArray(node); } - - // ======= Recorrido de datos ======= - getNodeAtPath(path) { - let node = this.tree; - for (let i = 0; i < path.length; i++) { - if (TreeList.isMap(node)) { - if (!Object.prototype.hasOwnProperty.call(node, path[i])) return { node: null, depth: i }; - node = node[path[i]]; - } else if (TreeList.isList(node)) { - // Llegamos a una lista: ya no hay más claves válidas - if (i < path.length) return { node, depth: i }; - } else { - return { node: null, depth: i }; - } - } - return { node, depth: path.length }; - } - - // Autocompletar: baja por primeras claves de cada mapa hasta alcanzar una lista - autoCompleteToLeaf(basePath) { - let { node } = this.getNodeAtPath(basePath); - const path = basePath.slice(); - while (TreeList.isMap(node)) { - const keys = Object.keys(node); - if (!keys.length) break; - const k0 = keys[0]; - path.push(k0); - node = node[k0]; - } - // Si termina en lista, NO agrega un ítem final de la hoja - return path; - } - - // Ruta activa (focusPath si focused, sino value) - getActivePath() { - return this.focused ? this.focusPath : this.value; - } - - // ======= Tamaño de hoja máximo (para layout estable) ======= - computeLeafMax(node = this.tree) { - if (Array.isArray(node)) return node.length; - if (!node || typeof node !== 'object') return 0; - let m = 0; - for (const k of Object.keys(node)) { - m = Math.max(m, this.computeLeafMax(node[k])); - } - return m; - } - - // ======= Construcción de niveles (modelo lógico) ======= - buildLevels() { - this.levels.length = 0; - const activePath = this.getActivePath(); - - let node = this.tree; - let level = 0; - - while (node) { - if (TreeList.isMap(node)) { - // Nivel intermedio: claves del mapa (horizontal) - const keys = Object.keys(node); - if (!keys.length) break; - this.levels.push({ - type: 'map', - items: keys.map(k => ({ key: k, label: k, zone: { x:0,y:0,w:0,h:0 } })), - zone: { x:0,y:0,w:0,h: this.lineH } - }); - - const nextKey = activePath[level]; - if (!nextKey || !node.hasOwnProperty(nextKey)) break; - node = node[nextKey]; - } else if (TreeList.isList(node)) { - // Nivel hoja: lista vertical - const items = node.map(label => ({ key: label, label, zone: { x:0,y:0,w:0,h:0 } })); - const hList = Math.max(items.length, this.leafMax) * this.lineH; - this.levels.push({ type: 'list', items, zone: { x:0, y:0, w:0, h: hList } }); - break; - } else { - break; - } - level++; - } - } - - // ======= Layout (zonas & DOM) ======= - layoutLevels() { - - const contentX = (this.sa || 100) + 8; // columna de label + padding - const padRight = 8; - const w = this.zone.w - contentX - padRight; - - - let y = 0; - - // Ajustar itemsDom a cantidad de niveles - while (this.itemsDom.length < this.levels.length) this.itemsDom.push([]); - for (let L = this.levels.length; L < this.itemsDom.length; L++) { - for (const el of this.itemsDom[L]) if (el && el.parentNode) el.parentNode.removeChild(el); - } - this.itemsDom.length = this.levels.length; - - for (let L = 0; L < this.levels.length; L++) { - const lvl = this.levels[L]; - this.itemsDom[L]; - if (lvl.type === 'map') { - const n = Math.max(1, lvl.items.length); - const cellW = Math.floor(w / n); - - lvl.zone = { x: contentX, y, w, h: this.lineH }; - let x = contentX; - - - for (let i = 0; i < lvl.items.length; i++) { - const it = lvl.items[i]; - it.zone = { x, y, w: cellW, h: this.lineH }; - const dom = this.ensureItemDom(L, i); - this.paintItemDom(dom, L, i, it, 'map'); - x += cellW; - } - // eliminar DOM sobrante si antes había más celdas - this._pruneRow(L, lvl.items.length); - y += this.lineH + this.levelGap; - } else { - // lista/hoja: reservar h según leafMax - const n = lvl.items.length; - const hList = Math.max(n, this.leafMax) * this.lineH; - - lvl.zone = { x: contentX, y, w, h: hList }; - - const rows = Math.max(n, this.leafMax); - for (let i = 0; i < rows; i++) { - const isReal = i < n; - const it = isReal ? lvl.items[i] : { key: null, label: '', zone: { x:0,y:0,w:0,h:0 } }; - - it.zone = { x: contentX, y: y + i * this.lineH, w, h: this.lineH }; - const dom = this.ensureItemDom(L, i); - this.paintItemDom(dom, L, i, it, 'list', isReal); - } - // eliminar DOM sobrante si antes había más filas - this._pruneRow(L, rows); - y += hList; - } - } - - // Ajustes de alto interno del contenedor visual - const totalH = y; - this.zone.h = totalH + this.margin; - this.s[0].height = this.zone.h + 'px'; - this.s[2].height = totalH + 'px'; - - // Publicar alto total al GUI (sumará u.h) - this._publishHeight(); - } - - - - // Elimina nodos DOM sobrantes en la fila L a partir del índice keep - _pruneRow(L, keep) { - const row = this.itemsDom[L]; - // si nunca se creó, nada que hacer - if (!row) return; - for (let j = keep; j < row.length; j++) { - const el = row[j]; - if (el && el.parentNode) el.parentNode.removeChild(el); - } - row.length = keep; - } - - - ensureItemDom(L, i) { - const row = this.itemsDom[L]; - while (row.length <= i) row.push(null); - if (!row[i]) { - const div = this.dom('div', Tools.css.txt + 'position:absolute; pointer-events:none;'); - this.c[2].appendChild(div); - row[i] = div; - } - return row[i]; - } - - paintItemDom(div, L, i, it, kind, isReal = true) { - const s = div.style; - const cc = this.colors; - - // Posición - s.left = it.zone.x + 'px'; - s.top = it.zone.y + 'px'; - s.width = it.zone.w + 'px'; - s.height = (it.zone.h - 2) + 'px'; - - // Texto - div.textContent = isReal ? it.label : ''; - - // Estados - const selected = isReal && this.value[L] !== undefined && this.value[L] === it.key; - const inFocusLvl = this.focused && (this.focusLevel === L); - const focusMatch = isReal && inFocusLvl && (this.focusPath[L] === it.key); - const isHover = isReal && (this.hover.level === L && this.hover.index === i); - - // Estilos base - s.background = cc.back; - s.color = cc.text; - s.border = '1px solid ' + cc.border; - s.textAlign = kind === 'map' ? 'center' : 'left'; - - // Prioridad visual: seleccionado > foco > hover > base - if (selected) { - s.background = cc.select; - s.color = cc.textSelect; - } else if (focusMatch) { - s.background = cc.backgroundOver; - s.color = cc.textOver; - } else if (isHover) { - s.background = cc.overoff; - s.color = cc.textOver; - } - - // Filas de padding invisibles en hoja - s.opacity = isReal ? '1' : '0'; - } - - // ======= Ciclo de vida ======= - rSize() { - this.leafMax = this.computeLeafMax(this.tree); - this.buildLevels(); - this.layoutLevels(); - } - - update() { - this.buildLevels(); - this.layoutLevels(); - } - - // ======= Interacción ======= - _toLocal(e) { - const mx = e.clientX - this.zone.x; - const my = e.clientY - this.zone.y; - return { x: mx, y: my }; - } - - _hitTest(mx, my) { - for (let L = 0; L < this.levels.length; L++) { - const lvl = this.levels[L]; - const z = lvl.zone; // x y w ya incluyen contentX - if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; - - if (lvl.type === 'map') { - for (let i = 0; i < lvl.items.length; i++) { - const itz = lvl.items[i].zone; - if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { - return { L, i, real: true }; - } - } - } else { - const nRows = Math.max(lvl.items.length, this.leafMax); - for (let i = 0; i < nRows; i++) { - const isReal = i < lvl.items.length; - const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.lineH, w: z.w, h: this.lineH }; - if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { - return { L, i, real: isReal }; - } - } - } - } - return { L: -1, i: -1, real: false }; - } - - handleEvent(e) { - if (this.lock) return false; - - if (e.type === 'mousemove') { - const { x, y } = this._toLocal(e); - const ht = this._hitTest(x, y); - this.hover = (ht.L !== -1 && ht.real) ? { level: ht.L, index: ht.i } : { level: -1, index: -1 }; - this.update(); - return true; - } - - if (e.type === 'mousedown') { - const { x, y } = this._toLocal(e); - const ht = this._hitTest(x, y); - if (ht.L !== -1 && ht.real) { - this._selectAt(ht.L, ht.i); - return true; - } - } - - if (e.type === 'mouseup') { - return true; - } - - // (Opcional) teclado: integrar navegación en Gui y reenviar aquí si se desea - return false; - } - - // Selección + autocompletado + notificación - _selectAt(L, i) { - const lvl = this.levels[L]; - const chosen = lvl.items[i]; - if (!chosen || !chosen.key) return; - - const base = this.value.slice(0, L); - base[L] = chosen.key; - - const newPath = this.autoCompleteToLeaf(base); - - this.value = newPath.slice(); - this.update(); - - // ✅ Actualiza objeto enlazado (si existe) y dispara callbacks “clásicos” - this.send(newPath); // escribe en objectLink[objectKey] si hay referencia - this.changeCb(this.tabIndex, this.itemIndex, newPath); - } - - - // ======= API pública ======= - setValue(path) { - this.value = Array.isArray(path) ? path.slice() : []; - this.update(); - } - - setTree(tree) { - this.tree = tree || {}; - // recalcular leafMax en próxima pasada - this.leafMax = this.computeLeafMax(this.tree); - this.update(); - } - - setFocus({ focused, focusPath, focusLevel }) { - if (typeof focused === 'boolean') this.focused = focused; - if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); - if (typeof focusLevel === 'number') this.focusLevel = focusLevel; - this.update(); - } - - // ======= Publicación de altura ======= - _countVisibleIntermediates() { - let c = 0; - for (let i = 0; i < this.levels.length; i++) if (this.levels[i].type === 'map') c++; - return c; - } - - _getCurrentLeafLength() { - const last = this.levels[this.levels.length - 1]; - return last && last.type === 'list' ? last.items.length : 0; - } - - _publishHeight() { - const inter = this._countVisibleIntermediates(); - const leafLen = Math.max(this.leafMax, this._getCurrentLeafLength()); - const leafH = leafLen * this.lineH; - const interH = inter * (this.lineH + this.levelGap); - const totalH = interH + (inter ? this.levelGap : 0) + leafH; - - // Actualiza métricas del proto (lo que suma el GUI) - this.h = totalH; - this.zone.h = this.h + this.margin; - this.s[0].height = this.h + 'px'; - - // Avisar al GUI y refrescar zonas - if (this.isUI && this.main) this.main.calc(); - Roots.needReZone = true; - } -} - -const add = function () { - - let a = arguments; - - let type, o, ref = false, n = null; - - if( typeof a[0] === 'string' ){ - - type = a[0]; - o = a[1] || {}; - - } else if ( typeof a[0] === 'object' ){ // like dat gui - - ref = true; - if( a[2] === undefined ) [].push.call(a, {}); - - type = a[2].type ? a[2].type : autoType( a[0][a[1]], a[2] ); - - o = a[2]; - o.name = a[1]; - if (o.hasOwnProperty("displayName")) o.name = o.displayName; - - if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } - else o.value = a[0][a[1]]; - - } - - let name = type.toLowerCase(); - - if( name === 'group' ){ - o.add = add; - //o.dx = 8 - } - - switch( name ){ - - case 'bool': case 'boolean': n = new Bool(o); break; - case 'button': n = new Button(o); break; - case 'circular': n = new Circular(o); break; - case 'color': n = new Color(o); break; - case 'fps': n = new Fps(o); break; - case 'graph': n = new Graph(o); break; - case 'group': n = new Group(o); break; - case 'joystick': n = new Joystick(o); break; - case 'knob': n = new Knob(o); break; - case 'list': n = new List(o); break; - case 'numeric': case 'number': n = new Numeric(o); break; - case 'slide': n = new Slide(o); break; - case 'textInput': case 'string': n = new TextInput(o); break; - case 'title': case 'text': n = new Title(o); break; - case 'select': n = new Select(o); break; - case 'bitmap': n = new Bitmap(o); break; - case 'selector': n = new Selector(o); break; - case 'empty': case 'space': n = new Empty(o); break; - case 'item': n = new Item(o); break; - case 'grid': n = new Grid(o); break; - case 'pad2d': case 'pad': n = new Pad2D(o); break; - case 'treelist': n = new TreeList(o); break; - - } - - - - if( n !== null ){ - - Roots.needResize = true; - - if( ref ) n.setReferency( a[0], a[1] ); - return n; - - } - -}; - -const autoType = function ( v, o ) { - - let type = 'slide'; - - if( typeof v === 'boolean' ) type = 'bool'; - else if( typeof v === 'string' ){ - - if( v.substring(0,1) === '#' ) type = 'color'; - else type = 'string'; - - } else if( typeof v === 'number' ){ - - if( o.ctype ) type = 'color'; - else type = 'slide'; - - } else if( typeof v === 'array' && v instanceof Array ){ - - if( typeof v[0] === 'number' ) type = 'number'; - else if( typeof v[0] === 'string' ) type = 'list'; - - } else if( typeof v === 'object' && v instanceof Object ){ - - if( v.x !== undefined ) type = 'number'; - else type = 'list'; - - } - - return type - -}; - -/** - * @author lth / https://github.com/lo-th - */ - -class Gui { - constructor(o = {}) { - this.isGui = true; - - this.name = "gui"; - - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; - - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors); - else this.colors = Tools.defineColor(o); - - //this.cleanning = false - - // style - this.css = Tools.cloneCss(); - - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 - - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; - - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") - ? o.addDOMEventListeners - : true; - - this.callback = o.callback === undefined ? null : o.callback; - - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; - - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - - this.cn = ""; - - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; - - this.size.h = this.size.h < 11 ? 11 : this.size.h; - - // local mouse and zone - this.local = new V2().neg(); - this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; - - // virtual mouse - this.mouse = new V2().neg(); - - this.h = 0; - //this.prevY = -1; - this.sw = 0; - - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); - - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; - - this.autoResize = o.autoResize === undefined ? true : o.autoResize; - - // default position - this.isCenter = o.center || false; - this.cssGui = - o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; - - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; - - this.isNewTarget = false; - - let cc = this.colors; - - this.content = Tools.dom( - "div", - this.css.basic + - " width:0px; height:auto; top:0px; background:" + - cc.content + - "; " + - this.cssGui - ); - - this.innerContent = Tools.dom( - "div", - this.css.basic + - "width:100%; top:0; left:0; height:auto; overflow:hidden;" - ); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); - - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom( - "div", - this.css.basic + flexible + "width:100%; left:0; " - ); - this.innerContent.appendChild(this.inner); - - // scroll - this.scrollBG = Tools.dom( - "div", - this.css.basic + - "right:0; top:0; width:" + - (this.size.s - 1) + - "px; height:10px; display:none; background:" + - cc.background + - ";" - ); - this.content.appendChild(this.scrollBG); - - this.scroll = Tools.dom( - "div", - this.css.basic + - "background:" + - cc.button + - "; right:2px; top:0; width:" + - (this.size.s - 4) + - "px; height:10px;" - ); - this.scrollBG.appendChild(this.scroll); - - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; - - let r = cc.radius; - this.bottom = Tools.dom( - "div", - this.css.txt + - "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + - r + - "px; border-bottom-left-radius:" + - r + - "px; justify-content:center; height:" + - this.bh + - "px; line-height:" + - (this.bh - 5) + - "px; color:" + - cc.text + - ";" - ); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - this.bottom.style.background = cc.background; - - // - - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; - - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } - - if (this.parent !== null) this.parent.appendChild(this.content); - - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } - - // height transition - this.transition = - o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - - this.setWidth(); - - if (this.isCanvas) this.makeCanvas(); - - Roots.add(this); - } - - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseUp(x, y) { - /* - - clientX,clientY are no used when isCanvas==true - */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); - - Roots.needReZone = true; - } - - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = - "height " + this.transition + "s ease-out"; - this.content.style.transition = - "height " + this.transition + "s ease-out"; - this.bottom.style.transition = "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } - - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } - - // ---------------------- - // CANVAS - // ---------------------- - - onDraw() {} - - makeCanvas() { - this.canvas = document.createElementNS( - "http://www.w3.org/1999/xhtml", - "canvas" - ); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - - //console.log( this.canvas.width, this.canvas.height ) - } - - draw(force) { - if (this.canvas === null) return; - - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } - - ////// - - getDom() { - return this.content; - } - - noMouse() { - this.mouse.neg(); - } - - setMouse(uv, flip = true) { - if (flip) - this.mouse.set( - Math.round(uv.x * this.canvas.width), - this.canvas.height - Math.round(uv.y * this.canvas.height) - ); - else - this.mouse.set( - Math.round(uv.x * this.canvas.width), - Math.round(uv.y * this.canvas.height) - ); - //this.mouse.set( m.x, m.y ); - - //console.log("setMouse "+uv.x+" "+uv.y) - } - - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } - - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } - - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } - - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } - - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } - - onChange(f) { - this.callback = f || null; - return this; - } - - // ---------------------- - // STYLES - // ---------------------- - - mode(n) { - let needChange = false; - let cc = this.colors; - - if (n !== this.cn) { - this.cn = n; - - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } - - needChange = true; - } - - return needChange; - } - - // ---------------------- - // TARGET - // ---------------------- - - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } - - this.proto = null; - this.current = -1; - - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - - Roots.cursor(); - return true; - } - - // ---------------------- - // ZONE TEST - // ---------------------- - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - - this.isReset = false; - - let name = ""; - - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; - else name = l.x > s ? "scroll" : "content"; - - return name; - } - - // ---------------------- - // EVENTS - // ---------------------- - - handleEvent(e) { - //if( this.cleanning ) return - - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; - - let change = false; - let protoChange = false; - - let name = this.testZone(e); - - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; - - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } - - if (!name) return; - - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - - if (Roots.isMobile && type === "mousedown") this.getNext(e, change); - - if (this.proto) protoChange = this.proto.handleEvent(e); - - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) - change = this.onWheel(e); - - if (!Roots.lock) { - this.getNext(e, change); - } - - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } - - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); - - break; - } - - if (this.isDown) change = true; - if (protoChange) change = true; - - if (type === "keyup") change = true; - if (type === "keydown") change = true; - - if (change) this.draw(); - } - - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); - - if (next !== this.current) { - this.clearTarget(); - this.current = next; - this.isNewTarget = true; - } - - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } - - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } - - // ---------------------- - // RESET - // ---------------------- - - reset(force) { - if (this.isReset) return; - - //this.resetItem(); - - this.mouse.neg(); - this.isDown = false; - - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); - - if (r || r2) this.draw(true); - - this.isReset = true; - - //Roots.lock = false; - } - - // ---------------------- - // ADD NODE - // ---------------------- - - add() { - //if(this.cleanning) this.cleanning = false - - let a = arguments; - let ontop = false; - - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; - - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); - else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } - - let u = add.apply(this, a); - - if (u === null) return; - - if (ontop) this.uis.unshift(u); - else this.uis.push(u); - - this.calc(); - - this.isEmpty = false; - - return u; - } - - // remove one node - - remove(n) { - if (n.dispose) n.dispose(); - } - - // call after uis clear - - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } - - // clear all gui - - empty() { - //this.cleanning = true - - //this.close(); - - let i = this.uis.length, - item; - - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } - - this.uis = []; - this.isEmpty = true; - this.calc(); - } - - clear() { - this.empty(); - } - - clear2() { - setTimeout(this.empty.bind(this), 0); - } - - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } - - // ---------------------- - // ITEMS SPECIAL - // ---------------------- - - resetItem() { - if (!this.isItemMode) return; - - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } - - setItem(name) { - if (!this.isItemMode) return; - - name = name || ""; - this.resetItem(); - - if (!name) { - this.update(0); - return; - } - - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) - this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } - - // ---------------------- - // SCROLL - // ---------------------- - - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; - - if (b) { - this.total = this.h; - - this.maxView = this.maxHeight; - - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; - - this.range = this.maxView - this.sh; - - this.oy = Tools.clamp(this.oy, 0, this.range); - - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } - - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } - - update(y) { - y = Tools.clamp(y, 0, this.range); - - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } - - // ---------------------- - // RESIZE FUNCTION - // ---------------------- - - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } - - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } - - setHeight() { - if (this.tmp) clearTimeout(this.tmp); - - this.zone.h = this.bh; - this.isScroll = false; - - if (this.isOpen) { - this.h = this.calcUis(); - - let hhh = this.forceHeight - ? this.forceHeight + this.zone.y - : window.innerHeight; - - this.maxHeight = hhh - this.zone.y - this.bh; - - let diff = this.h - this.maxHeight; - - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } - - this.upScroll(this.isScroll); - - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; - - if (this.forceHeight && this.lockHeight) - this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } - - rezone() { - Roots.needReZone = true; - } - - setWidth(w) { - if (w) this.zone.w = w; - - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) - this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } - - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } -} - -export { Files, Gui, REVISION, Tools, add }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG4gICAgLy8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuICAgIC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG4gICAgLy8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG4gICAgby5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuICAgIG8ubmFtZSA9IG8ubmFtZSB8fCAnVHJlZUxpc3QnO1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgLy8gRGF0b3MgJiBlc3RhZG9cclxuICAgIHRoaXMudHJlZSAgICAgICA9IG8udHJlZSB8fCB7fTtcclxuICAgIHRoaXMudmFsdWUgICAgICA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuICAgIHRoaXMuZm9jdXNlZCAgICA9ICEhby5mb2N1c2VkO1xyXG4gICAgdGhpcy5mb2N1c1BhdGggID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSAnbnVtYmVyJyA/IG8uZm9jdXNMZXZlbCA6IC0xO1xyXG5cclxuICAgIHRoaXMudGFiSW5kZXggICA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuICAgIHRoaXMuaXRlbUluZGV4ICA9IG8uaXRlbUluZGV4ID8/IG51bGw7XHJcblxyXG4gICAgLy8gQ2FsbGJhY2tcclxuICAgIHRoaXMuY2hhbmdlQ2IgPSB0eXBlb2Ygby5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcbiAgICAvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuICAgIHRoaXMubGluZUggICAgPSB0aGlzLmg7ICAgICAgICAgICAgICAgLy8gYWx0byBkZSBVTkEgZmlsYVxyXG4gICAgdGhpcy5sZXZlbEdhcCA9IHRoaXMuY29sb3JzLnN5IHx8IDI7ICAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcbiAgICB0aGlzLmxlYWZNYXggID0gMDsgICAgICAgICAgICAgICAgICAgIC8vIHNlIGNhbGN1bGEgZW4gclNpemUoKVxyXG5cclxuICAgIC8vIE1vZGVsbyB2aXN1YWxcclxuICAgIHRoaXMubGV2ZWxzICAgPSBbXTsgICAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuICAgIHRoaXMuaXRlbXNEb20gPSBbXTsgICAvLyBlc3Blam8gRE9NIHBvciBuaXZlbFxyXG4gICAgdGhpcy5ob3ZlciAgICA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcbiAgICAvLyBDb250ZW5lZG9yIGludGVybm8gKGFic29sdXRvKVxyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOycpO1xyXG4gICAgdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG4gIHN0YXRpYyBpc01hcChub2RlKSAgeyByZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuICBzdGF0aWMgaXNMaXN0KG5vZGUpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7IH1cclxuXHJcbiAgLy8gPT09PT09PSBSZWNvcnJpZG8gZGUgZGF0b3MgPT09PT09PVxyXG4gIGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpIHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcbiAgICAgICAgbm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcbiAgICAgIH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG4gICAgICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG4gIGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG4gICAgbGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG4gICAgd2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgaWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcbiAgICAgIGNvbnN0IGswID0ga2V5c1swXTtcclxuICAgICAgcGF0aC5wdXNoKGswKTtcclxuICAgICAgbm9kZSA9IG5vZGVbazBdO1xyXG4gICAgfVxyXG4gICAgLy8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgLy8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG4gIGdldEFjdGl2ZVBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG4gIGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcbiAgICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gMDtcclxuICAgIGxldCBtID0gMDtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG4gICAgICBtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PVxyXG4gIGJ1aWxkTGV2ZWxzKCkge1xyXG4gICAgdGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcbiAgICBsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuICAgIGxldCBsZXZlbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcbiAgICAgICAgLy8gTml2ZWwgaW50ZXJtZWRpbzogY2xhdmVzIGRlbCBtYXBhIChob3Jpem9udGFsKVxyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuICAgICAgICBpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6ICdtYXAnLFxyXG4gICAgICAgICAgaXRlbXM6IGtleXMubWFwKGsgPT4gKHsga2V5OiBrLCBsYWJlbDogaywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9KSksXHJcbiAgICAgICAgICB6b25lOiB7IHg6MCx5OjAsdzowLGg6IHRoaXMubGluZUggfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcbiAgICAgICAgaWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuICAgICAgICBub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuICAgICAgfSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuICAgICAgICAvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAobGFiZWwgPT4gKHsga2V5OiBsYWJlbCwgbGFiZWwsIHpvbmU6IHsgeDowLHk6MCx3OjAsaDowIH0gfSkpO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuICAgICAgICB0aGlzLmxldmVscy5wdXNoKHsgdHlwZTogJ2xpc3QnLCBpdGVtcywgem9uZTogeyB4OjAsIHk6MCwgdzowLCBoOiBoTGlzdCB9IH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldmVsKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuICBsYXlvdXRMZXZlbHMoKSB7XHJcbiAgICBcclxuICAgIGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7ICAgLy8gY29sdW1uYSBkZSBsYWJlbCArIHBhZGRpbmdcclxuICAgIGNvbnN0IHBhZFJpZ2h0ID0gODtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIGNvbnRlbnRYIC0gcGFkUmlnaHQ7XHJcblxyXG4gICAgXHJcbiAgICBsZXQgeSA9IDA7XHJcblxyXG4gICAgLy8gQWp1c3RhciBpdGVtc0RvbSBhIGNhbnRpZGFkIGRlIG5pdmVsZXNcclxuICAgIHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkgdGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuICAgIGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSkgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pdGVtc0RvbS5sZW5ndGggPSB0aGlzLmxldmVscy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG4gICAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cclxuICAgICAgICBsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICBsZXQgeCA9IGNvbnRlbnRYO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcbiAgICAgICAgICBpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ21hcCcpO1xyXG4gICAgICAgICAgeCArPSBjZWxsVztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG4gICAgICAgIHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgIHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG4gICAgICAgIGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuICAgICAgICAgY29uc3Qgcm93cyA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbjtcclxuICAgICAgICAgIGNvbnN0IGl0ID0gaXNSZWFsID8gbHZsLml0ZW1zW2ldIDogeyBrZXk6IG51bGwsIGxhYmVsOiAnJywgem9uZTogeyB4OjAseTowLHc6MCxoOjAgfSB9O1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgaXQuem9uZSA9IHsgeDogY29udGVudFgsIHk6IHkgKyBpICogdGhpcy5saW5lSCwgdywgaDogdGhpcy5saW5lSCB9O1xyXG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG4gICAgICAgICAgdGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgJ2xpc3QnLCBpc1JlYWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgZmlsYXNcclxuICAgICAgICB0aGlzLl9wcnVuZVJvdyhMLCByb3dzKTtcclxuICAgICAgICB5ICs9IGhMaXN0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWp1c3RlcyBkZSBhbHRvIGludGVybm8gZGVsIGNvbnRlbmVkb3IgdmlzdWFsXHJcbiAgICBjb25zdCB0b3RhbEggPSB5O1xyXG4gICAgdGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArICdweCc7XHJcbiAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdG90YWxIICsgJ3B4JztcclxuXHJcbiAgICAvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcbiAgICB0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vIEVsaW1pbmEgbm9kb3MgRE9NIHNvYnJhbnRlcyBlbiBsYSBmaWxhIEwgYSBwYXJ0aXIgZGVsIMOtbmRpY2Uga2VlcFxyXG4gIF9wcnVuZVJvdyhMLCBrZWVwKSB7XHJcbiAgICBjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG4gICAgLy8gc2kgbnVuY2Egc2UgY3Jlw7MsIG5hZGEgcXVlIGhhY2VyXHJcbiAgICBpZiAoIXJvdykgcmV0dXJuO1xyXG4gICAgZm9yIChsZXQgaiA9IGtlZXA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcclxuICAgICAgY29uc3QgZWwgPSByb3dbal07XHJcbiAgICAgIGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuICAgIH1cclxuICAgIHJvdy5sZW5ndGggPSBrZWVwO1xyXG4gIH1cclxuXHJcblxyXG4gIGVuc3VyZUl0ZW1Eb20oTCwgaSkge1xyXG4gICAgY29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuICAgIHdoaWxlIChyb3cubGVuZ3RoIDw9IGkpIHJvdy5wdXNoKG51bGwpO1xyXG4gICAgaWYgKCFyb3dbaV0pIHtcclxuICAgICAgY29uc3QgZGl2ID0gdGhpcy5kb20oJ2RpdicsIFRvb2xzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7Jyk7XHJcbiAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgICByb3dbaV0gPSBkaXY7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93W2ldO1xyXG4gIH1cclxuXHJcbiAgcGFpbnRJdGVtRG9tKGRpdiwgTCwgaSwgaXQsIGtpbmQsIGlzUmVhbCA9IHRydWUpIHtcclxuICAgIGNvbnN0IHMgPSBkaXYuc3R5bGU7XHJcbiAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vIFBvc2ljacOzblxyXG4gICAgcy5sZWZ0ICAgPSBpdC56b25lLnggKyAncHgnO1xyXG4gICAgcy50b3AgICAgPSBpdC56b25lLnkgKyAncHgnO1xyXG4gICAgcy53aWR0aCAgPSBpdC56b25lLncgKyAncHgnO1xyXG4gICAgcy5oZWlnaHQgPSAoaXQuem9uZS5oIC0gMikgKyAncHgnO1xyXG5cclxuICAgIC8vIFRleHRvXHJcbiAgICBkaXYudGV4dENvbnRlbnQgPSBpc1JlYWwgPyBpdC5sYWJlbCA6ICcnO1xyXG5cclxuICAgIC8vIEVzdGFkb3NcclxuICAgIGNvbnN0IHNlbGVjdGVkICAgPSBpc1JlYWwgJiYgdGhpcy52YWx1ZVtMXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWVbTF0gPT09IGl0LmtleTtcclxuICAgIGNvbnN0IGluRm9jdXNMdmwgPSB0aGlzLmZvY3VzZWQgJiYgKHRoaXMuZm9jdXNMZXZlbCA9PT0gTCk7XHJcbiAgICBjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgKHRoaXMuZm9jdXNQYXRoW0xdID09PSBpdC5rZXkpO1xyXG4gICAgY29uc3QgaXNIb3ZlciAgICA9IGlzUmVhbCAmJiAodGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJiB0aGlzLmhvdmVyLmluZGV4ID09PSBpKTtcclxuXHJcbiAgICAvLyBFc3RpbG9zIGJhc2VcclxuICAgIHMuYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICBzLmNvbG9yICAgICAgPSBjYy50ZXh0O1xyXG4gICAgcy5ib3JkZXIgICAgID0gJzFweCBzb2xpZCAnICsgY2MuYm9yZGVyO1xyXG4gICAgcy50ZXh0QWxpZ24gID0ga2luZCA9PT0gJ21hcCcgPyAnY2VudGVyJyA6ICdsZWZ0JztcclxuXHJcbiAgICAvLyBQcmlvcmlkYWQgdmlzdWFsOiBzZWxlY2Npb25hZG8gPiBmb2NvID4gaG92ZXIgPiBiYXNlXHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICBzLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgIH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG4gICAgICBzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgcy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgfSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcbiAgICAgIHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgIHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG4gICAgcy5vcGFjaXR5ID0gaXNSZWFsID8gJzEnIDogJzAnO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuICByU2l6ZSgpIHtcclxuICAgIHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuICAgIHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuICAgIHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoKSB7XHJcbiAgICB0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcbiAgICB0aGlzLmxheW91dExldmVscygpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG4gIF90b0xvY2FsKGUpIHtcclxuICAgIGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICBjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG4gICAgcmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcbiAgfVxyXG5cclxuICBfaGl0VGVzdChteCwgbXkpIHtcclxuICBmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcbiAgICBjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuICAgIGNvbnN0IHogPSBsdmwuem9uZTsgIC8vIHggeSB3IHlhIGluY2x1eWVuIGNvbnRlbnRYXHJcbiAgICBpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgaWYgKGx2bC50eXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGl0eiA9IGlzUmVhbCA/IGx2bC5pdGVtc1tpXS56b25lIDogeyB4OiB6LngsIHk6IHoueSArIGkgKiB0aGlzLmxpbmVILCB3OiB6LncsIGg6IHRoaXMubGluZUggfTtcclxuICAgICAgICAgIGlmIChteCA+PSBpdHoueCAmJiBteSA+PSBpdHoueSAmJiBteCA8PSBpdHoueCArIGl0ei53ICYmIG15IDw9IGl0ei55ICsgaXR6LmgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG4gICAgICBjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcbiAgICAgIHRoaXMuaG92ZXIgPSAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkgPyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9IDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xyXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcbiAgICAgIGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuICAgICAgaWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZXVwJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAoT3BjaW9uYWwpIHRlY2xhZG86IGludGVncmFyIG5hdmVnYWNpw7NuIGVuIEd1aSB5IHJlZW52aWFyIGFxdcOtIHNpIHNlIGRlc2VhXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcbiAgX3NlbGVjdEF0KEwsIGkpIHtcclxuICAgIGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG4gICAgY29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG4gICAgaWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuICAgIGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuICAgIGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICAvLyDinIUgQWN0dWFsaXphIG9iamV0byBlbmxhemFkbyAoc2kgZXhpc3RlKSB5IGRpc3BhcmEgY2FsbGJhY2tzIOKAnGNsw6FzaWNvc+KAnVxyXG4gICAgdGhpcy5zZW5kKG5ld1BhdGgpOyAvLyBlc2NyaWJlIGVuIG9iamVjdExpbmtbb2JqZWN0S2V5XSBzaSBoYXkgcmVmZXJlbmNpYVxyXG4gICAgdGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gPT09PT09PSBBUEkgcMO6YmxpY2EgPT09PT09PVxyXG4gIHNldFZhbHVlKHBhdGgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5zbGljZSgpIDogW107XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJlZSh0cmVlKSB7XHJcbiAgICB0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG4gICAgLy8gcmVjYWxjdWxhciBsZWFmTWF4IGVuIHByw7N4aW1hIHBhc2FkYVxyXG4gICAgdGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuICAgIGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gJ251bWJlcicpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PSBQdWJsaWNhY2nDs24gZGUgYWx0dXJhID09PT09PT1cclxuICBfY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpIHtcclxuICAgIGxldCBjID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBpKyspIGlmICh0aGlzLmxldmVsc1tpXS50eXBlID09PSAnbWFwJykgYysrO1xyXG4gICAgcmV0dXJuIGM7XHJcbiAgfVxyXG5cclxuICBfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcbiAgICByZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09ICdsaXN0JyA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuICB9XHJcblxyXG4gIF9wdWJsaXNoSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcbiAgICBjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuICAgIGNvbnN0IGxlYWZIICA9IGxlYWZMZW4gKiB0aGlzLmxpbmVIO1xyXG4gICAgY29uc3QgaW50ZXJIID0gaW50ZXIgKiAodGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXApO1xyXG4gICAgY29uc3QgdG90YWxIID0gaW50ZXJIICsgKGludGVyID8gdGhpcy5sZXZlbEdhcCA6IDApICsgbGVhZkg7XHJcblxyXG4gICAgLy8gQWN0dWFsaXphIG3DqXRyaWNhcyBkZWwgcHJvdG8gKGxvIHF1ZSBzdW1hIGVsIEdVSSlcclxuICAgIHRoaXMuaCA9IHRvdGFsSDtcclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuXHJcbiAgICAvLyBBdmlzYXIgYWwgR1VJIHkgcmVmcmVzY2FyIHpvbmFzXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogLTEsXHJcbiAgICAgIGNsaWVudFk6IC0xLFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuICAgIC8qXHJcblxyXG4gICAgICAgIGNsaWVudFgsY2xpZW50WSBhcmUgbm8gdXNlZCB3aGVuIGlzQ2FudmFzPT10cnVlXHJcbiAgICAgICAgKi9cclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiK3V2LngrXCIgXCIrdXYueSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyhvKSB7XHJcbiAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHRcclxuICAgIFRvb2xzLnNldFRleHQoKTtcclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvcnMobykge1xyXG4gICAgZm9yIChsZXQgYyBpbiBvKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbG9yc1tjXSkgdGhpcy5jb2xvcnNbY10gPSBvW2NdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KSB7XHJcbiAgICBUb29scy5zZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpO1xyXG4gIH1cclxuXHJcbiAgaGlkZShiKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IGIgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU1RZTEVTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb2RlKG4pIHtcclxuICAgIGxldCBuZWVkQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBpZiAobiAhPT0gdGhpcy5jbikge1xyXG4gICAgICB0aGlzLmNuID0gbjtcclxuXHJcbiAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgIGNhc2UgXCJkZWZcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnc2Nyb2xsRGVmJzogdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNjcm9sbDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbE92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcIm5zLXJlc2l6ZVwiKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsRG93blwiOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURlZic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwicG9pbnRlclwiKTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL2Nhc2UgJ2JvdHRvbURvd24nOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2VsZWN0OyB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9ICcjMDAwJzsgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5lZWRDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZWVkQ2hhbmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgVEFSR0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjbGVhclRhcmdldCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IC0xKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wcm90by5zKSB7XHJcbiAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG5cclxuICAgIC8vL2NvbnNvbGUubG9nKHRoaXMuaXNEb3duKS8vaWYodGhpcy5pc0Rvd24pUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFJvb3RzLmN1cnNvcigpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FIFRFU1RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuaXNTY3JvbGwgPyB0aGlzLnpvbmUudyAtIHRoaXMuc2l6ZS5zIDogdGhpcy56b25lLnc7XHJcblxyXG4gICAgaWYgKGwueSA+IHRoaXMuem9uZS5oIC0gdGhpcy5iaCAmJiBsLnkgPCB0aGlzLnpvbmUuaCkgbmFtZSA9IFwiYm90dG9tXCI7XHJcbiAgICBlbHNlIG5hbWUgPSBsLnggPiBzID8gXCJzY3JvbGxcIiA6IFwiY29udGVudFwiO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICAvL2lmKCB0aGlzLmNsZWFubmluZyApIHJldHVyblxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJHdWkuaGFuZGxlRXZlbnRcIilcclxuICAgIC8vY29uc29sZS5sb2coZSk7XHJcbiAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiICYmIHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgIXRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duICYmIHRoaXMuaXNOZXdUYXJnZXQpIHtcclxuICAgICAgUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm47XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZW50XCI6XHJcbiAgICAgICAgZS5jbGllbnRZID0gdGhpcy5pc1Njcm9sbCA/IGUuY2xpZW50WSArIHRoaXMuZGVjYWwgOiBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIGlmIChSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSBcIm1vdXNlZG93blwiKSB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvdG8pIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudChlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiICYmICFwcm90b0NoYW5nZSAmJiB0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG5cclxuICAgICAgICBpZiAoIVJvb3RzLmxvY2spIHtcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcImJvdHRvbU92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gdGhpcy5pc09wZW4gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgICAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgICAgICAgLy90aGlzLnNldEhlaWdodCgpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICAgICAgICB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbE92ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIGNoYW5nZSA9IHRoaXMubW9kZShcInNjcm9sbERvd25cIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIikgY2hhbmdlID0gdGhpcy5vbldoZWVsKGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy51cGRhdGUoZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnNoICogMC41KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHByb3RvQ2hhbmdlKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcImtleXVwXCIpIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNoYW5nZSkgdGhpcy5kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0KGUsIGNoYW5nZSkge1xyXG4gICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KHRoaXMudWlzLCBlKTtcclxuXHJcbiAgICBpZiAobmV4dCAhPT0gdGhpcy5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMucHJvdG8gPSB0aGlzLnVpc1t0aGlzLmN1cnJlbnRdO1xyXG4gICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25XaGVlbChlKSB7XHJcbiAgICB0aGlzLm95ICs9IDIwICogZS5kZWx0YTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXQoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzZXQpIHJldHVybjtcclxuXHJcbiAgICAvL3RoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgLy9Sb290cy5jbGVhcklucHV0KCk7XHJcbiAgICBsZXQgciA9IHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgIGxldCByMiA9IHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuXHJcbiAgICBpZiAociB8fCByMikgdGhpcy5kcmF3KHRydWUpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy9Sb290cy5sb2NrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBBREQgTk9ERVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYWRkKCkge1xyXG4gICAgLy9pZih0aGlzLmNsZWFubmluZykgdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IG9udG9wID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBhWzFdID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGFbMV0uaXNVSSA9IHRydWU7XHJcbiAgICAgIGFbMV0ubWFpbiA9IHRoaXM7XHJcblxyXG4gICAgICBvbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhWzFdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChhWzJdID09PSB1bmRlZmluZWQpIFtdLnB1c2guY2FsbChhLCB7IGlzVUk6IHRydWUsIG1haW46IHRoaXMgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgYVsyXS5tYWluID0gdGhpcztcclxuICAgICAgICAvL29udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgICAgICBvbnRvcCA9IGFbMl0ub250b3AgPyBhWzJdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdSA9IGFkZC5hcHBseSh0aGlzLCBhKTtcclxuXHJcbiAgICBpZiAodSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChvbnRvcCkgdGhpcy51aXMudW5zaGlmdCh1KTtcclxuICAgIGVsc2UgdGhpcy51aXMucHVzaCh1KTtcclxuXHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdTtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICByZW1vdmUobikge1xyXG4gICAgaWYgKG4uZGlzcG9zZSkgbi5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjYWxsIGFmdGVyIHVpcyBjbGVhclxyXG5cclxuICBjbGVhck9uZShuKSB7XHJcbiAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKG4pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkge1xyXG4gICAgICAvL3RoaXMuY2FsYyggLSAodGhpcy51aXNbIGlkIF0uaCArIDEgKSApO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKHRoaXMudWlzW2lkXS5jWzBdKTtcclxuICAgICAgdGhpcy51aXMuc3BsaWNlKGlkLCAxKTtcclxuICAgICAgdGhpcy5jYWxjKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhciBhbGwgZ3VpXHJcblxyXG4gIGVtcHR5KCkge1xyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IHRydWVcclxuXHJcbiAgICAvL3RoaXMuY2xvc2UoKTtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCxcclxuICAgICAgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZChpdGVtLmNbMF0pO1xyXG4gICAgICBpdGVtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsYygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcjIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KHRoaXMuZW1wdHkuYmluZCh0aGlzKSwgMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSVRFTVMgU1BFQ0lBTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcmVzZXRJdGVtKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtKG5hbWUpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbmFtZSA9IG5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLnVpc1tpXS52YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHRoaXMudWlzW2ldLnNlbGVjdGVkKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoaSAqICh0aGlzLnVpc1tpXS5oICsgdGhpcy5tYXJnaW4pICogdGhpcy5yYXRpbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNDUk9MTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdXBTY3JvbGwoYikge1xyXG4gICAgdGhpcy5zdyA9IGIgPyB0aGlzLnNpemUucyA6IDA7XHJcbiAgICB0aGlzLm95ID0gYiA/IHRoaXMub3kgOiAwO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5kaXNwbGF5ID0gYiA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xyXG5cclxuICAgIGlmIChiKSB7XHJcbiAgICAgIHRoaXMudG90YWwgPSB0aGlzLmg7XHJcblxyXG4gICAgICB0aGlzLm1heFZpZXcgPSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heFZpZXcgLyB0aGlzLnRvdGFsO1xyXG4gICAgICB0aGlzLnNoID0gdGhpcy5tYXhWaWV3ICogdGhpcy5yYXRpbztcclxuXHJcbiAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heFZpZXcgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgdGhpcy5veSA9IFRvb2xzLmNsYW1wKHRoaXMub3ksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxCRy5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heFZpZXcgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICAgIHRoaXMudXBkYXRlKHRoaXMub3kpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHkpIHtcclxuICAgIHkgPSBUb29scy5jbGFtcCh5LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmRlY2FsID0gTWF0aC5mbG9vcih5IC8gdGhpcy5yYXRpbyk7XHJcbiAgICB0aGlzLmlubmVyLnN0eWxlLnRvcCA9IC10aGlzLmRlY2FsICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGwuc3R5bGUudG9wID0gTWF0aC5mbG9vcih5KSArIFwicHhcIjtcclxuICAgIHRoaXMub3kgPSB5O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTSVpFIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzKCkge1xyXG4gICAgcmV0dXJuIFJvb3RzLmNhbGNVaXModGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkpO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcbiAgICB0aGlzLnRtcCA9IHNldFRpbWVvdXQodGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMudG1wKSBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5iaDtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5oID0gdGhpcy5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBsZXQgaGhoID0gdGhpcy5mb3JjZUhlaWdodFxyXG4gICAgICAgID8gdGhpcy5mb3JjZUhlaWdodCArIHRoaXMuem9uZS55XHJcbiAgICAgICAgOiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGhoaCAtIHRoaXMuem9uZS55IC0gdGhpcy5iaDtcclxuXHJcbiAgICAgIGxldCBkaWZmID0gdGhpcy5oIC0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAoZGlmZiA+IDEpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMuYmg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwU2Nyb2xsKHRoaXMuaXNTY3JvbGwpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLnRvcCA9IHRoaXMuem9uZS5oIC0gdGhpcy5iaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUhlaWdodCAmJiB0aGlzLmxvY2tIZWlnaHQpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMuZHJhdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgodykge1xyXG4gICAgaWYgKHcpIHRoaXMuem9uZS53ID0gdztcclxuXHJcbiAgICB0aGlzLnpvbmUudyA9IE1hdGguZmxvb3IodGhpcy56b25lLncpO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLndpZHRoID0gdGhpcy56b25lLncgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NlbnRlcilcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtTWF0aC5mbG9vcih0aGlzLnpvbmUudyAqIDAuNSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVdpZHRoKHcpIHtcclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKHcpO1xyXG4gICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDWSxNQUFDLFFBQVEsR0FBRyxRQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxHQUFHO0FBQ1YsRUFBRSxFQUFF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USxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMzQixNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUN6QztBQUNBO0FBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUU7QUFDdEIsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdEIsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixPQUFPO0FBQ1A7QUFDQSxNQUFNLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUM5QixNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQzFCLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMvQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzlDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDdkIsTUFBTSxJQUFJLENBQUMs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QUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNyQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksRUFBRSxZQUFZO0FBQzVCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRTtBQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsRUFBRSxVQUFVLElBQUksRUFBRTtBQUM3QixJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDeEMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDbkMsSUFBSSxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0FBQ3JDLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxFQUFFLFlBQVk7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LEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENB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QyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDcEosUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNySDtBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxF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LFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pIO0FBQ0E7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtBQUNBO0FBQ0E7QUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtBQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMvRixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwSTtBQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksYUFBYSxFQUFFLFlBQVk7QUFDL0I7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNwQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUNoSixRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdkMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkIsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN4QixRQUFXLElBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBSztBQUM1RCxRQUFRLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUM7QUFDakQsUUFBUSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDdkI7QUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0FBQ0EsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QixZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM5QixZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ2pDLFlBQVksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNoRDtBQUNBLFlBQVksRUFBRSxHQUFHO0FBQ2pCLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDM0MsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHO0FBQ3ZELGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDM0MsYUFBYSxDQUFDO0FBQ2Q7QUFDQSxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RDtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCO0FBQ0EsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsZ0JBQWdCLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDMUIsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0c7QUFDQSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNELGdCQUFnQixDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbko7QUFDQSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUg7QUFDQSxhQUFhO0FBQ2IsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztBQUM1QixZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFaEMsU0FBUztBQUlUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDdkI7QUFDQTtBQUNBLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakcsUUFBUSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JJO0FBQ0EsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9FLFFBQVEsQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN4STtBQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoRyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25HLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzlJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzlJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLG9GQUFvRixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9LO0FBQ0E7QUFDQSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUc7QUFDQSxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtBQUNyQztBQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLDRGQUE0RixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDak8sUUFBUSxPQUFPLElBQUk7QUFDbkIsWUFBWSxLQUFLLE1BQU07QUFDdkIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO0FBQzNGLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssUUFBUTtBQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7QUFDNUYsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxLQUFLO0FBQ3RCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztBQUN6RixZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLEtBQUs7QUFDdEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLG1GQUFtRixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ3pKLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssUUFBUTtBQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsbUZBQW1GLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7QUFDNUosWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxRQUFRO0FBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztBQUM1RixZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLE1BQU07QUFDdkIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLHdKQUF3SixDQUFDLEtBQUssQ0FBQztBQUN2TSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSw0S0FBNEssQ0FBQztBQUMvTCxZQUFZLE1BQU07QUFDbEIsU0FBUztBQUNULFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQztBQUM1QixRQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksVUFBVSxDQUFDLENBQUM7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtBQUNBLElBQUksV0FBVyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsQ0FBQztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLENBQUM7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLENBQUM7QUFDZDtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7QUFDQSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQztBQUNMO0FBQ0EsSUFBSSxXQUFXLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxDQUFDO0FBQ0w7QUFDQSxFQUFDO0FBQ0Q7QUFDQSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDWjtBQUNZLE1BQUMsS0FBSyxHQUFHOztBQ3YzQnJCO0FBQ0E7QUFDQTtBQUNPLE1BQU0sS0FBSyxDQUFDO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sU0FBUyxFQUFFLElBQUksR0FBRztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUNsQjtBQUNBLFFBQVEsUUFBUSxJQUFJO0FBQ3BCLFlBQVksS0FBSyxLQUFLO0FBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBRztBQUMzRCxZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLEtBQUs7QUFDdEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFHO0FBQ3ZELFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssS0FBSztBQUN0QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUc7QUFDeEQsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxLQUFLO0FBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBRztBQUN2RCxZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssS0FBSztBQUNsQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsRUFBRSwwQkFBMEIsRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7QUFDOUcsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxNQUFNO0FBQ3ZCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFHO0FBQy9ILFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssTUFBTTtBQUN2QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBRztBQUM3RixZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLElBQUk7QUFDckIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBRztBQUNoRyxZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLE9BQU87QUFDeEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFHO0FBQ3hHLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssTUFBTTtBQUN2QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7QUFDbEYsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxLQUFLO0FBQ3RCLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUc7QUFDeEYsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUM7QUFDaEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLE9BQU8sTUFBTSxDQUFDLGtCQUFrQixLQUFLLFVBQVUsRUFBRTtBQUM3RCxZQUFZLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsMkJBQTBCO0FBQ3hFLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSTtBQUNaO0FBQ0EsU0FBUyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUU7QUFDaEM7QUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHO0FBQzVCLGdCQUFnQixzQkFBc0IsRUFBRSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFDM0QsZ0JBQWdCLFFBQVEsRUFBRSxLQUFLO0FBQy9CO0FBQ0EsYUFBYSxDQUFDO0FBQ2Q7QUFDQSxZQUFZLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUU7QUFDbkQ7QUFDQTtBQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxHQUFFO0FBQ3JFLFlBQVksTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFFO0FBQ2xEO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxJQUFJO0FBQ25DO0FBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEY7QUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDbEYsWUFBWSxNQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQy9FLFlBQVksTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUM1QztBQUNBLFlBQVksSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxHQUFFO0FBQzlFLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksR0FBRTtBQUN2RixpQkFBaUIsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLEdBQUU7QUFDMUM7QUFDQSxZQUFZLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUU7QUFDeEM7QUFDQSxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFNO0FBQzdDO0FBQ0EsZ0JBQWdCLE9BQU8sSUFBSTtBQUMzQixvQkFBb0IsS0FBSyxPQUFPO0FBQ2hDLHdCQUF3QixJQUFJLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUM1Qyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sR0FBRyxXQUFXO0FBQ2hELDRCQUE0QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRTtBQUM1RSwwQkFBeUI7QUFDekIsd0JBQXdCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsUUFBTztBQUN6QyxvQkFBb0IsTUFBTTtBQUMxQixvQkFBb0IsS0FBSyxNQUFNO0FBQy9CLHdCQUF3QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUU7QUFDMUYsb0JBQW9CLE1BQU07QUFDMUIsb0JBQW9CO0FBQ3BCLHdCQUF3QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRTtBQUM1RSxvQkFBb0IsTUFBTTtBQUMxQixpQkFBaUI7QUFDakI7QUFDQSxjQUFhO0FBQ2I7QUFDQSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkI7QUFDQSxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUU7QUFDM0Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDLE9BQU8sMEJBQTBCLEVBQUUsT0FBTyxHQUFHO0FBQzlDLFFBQVEsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSztBQUN4QyxZQUFZLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUQsWUFBWSxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNoQyxZQUFZLEtBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUM5QyxZQUFZLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUs7QUFDeEMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzNDLGlCQUFpQixPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakYsaUJBQWlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtBQUNBLFlBQVksS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxNQUFNO0FBQ25ELGdCQUFnQixPQUFPO0FBQ3ZCLG9CQUFvQixDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSztBQUNuRCx3QkFBd0IsT0FBTztBQUMvQiw0QkFBNEIsT0FBTyxFQUFFO0FBQ3JDLGdDQUFnQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSztBQUN6RCxvQ0FBb0MsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELGlDQUFpQyxDQUFDO0FBQ2xDLHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQixDQUFDO0FBQ3RCLGlCQUFpQixDQUFDO0FBQ2xCLGFBQWEsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxZQUFZLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxQixTQUFTLENBQUM7QUFDVixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxhQUFhLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksT0FBTyxNQUFNLENBQUMsa0JBQWtCLEtBQUssVUFBVSxFQUFFO0FBQzdELFlBQVksTUFBTSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQywyQkFBMEI7QUFDeEUsWUFBWSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSTtBQUNaO0FBQ0EsWUFBWSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUU7QUFDbkM7QUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHO0FBQzVCLGdCQUFnQixhQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPO0FBQ2hELGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO0FBQ2xDLGFBQWEsQ0FBQztBQUNkO0FBQ0EsWUFBWSxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxHQUFFO0FBQ25ELFlBQVksT0FBTyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFDO0FBQ3pFLFlBQVksT0FBTyxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDdEU7QUFDQSxZQUFZLElBQUksT0FBTyxHQUFHLE1BQU07QUFDaEM7QUFDQTtBQUNBLFlBQVksTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdkQ7QUFDQSxZQUFZLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQy9FO0FBQ0E7QUFDQSxZQUFZLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQztBQUNBO0FBQ0EsWUFBWSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvQjtBQUNBLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNuQjtBQUNBLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQjtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTywwQkFBMEIsRUFBRSxPQUFPLEdBQUc7QUFDakQsUUFBUSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLO0FBQ3hDLFlBQVksTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxZQUFZLENBQUMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxjQUFhO0FBQy9ELFlBQVksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDOUUsWUFBWSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxHQUFFO0FBQ2hEO0FBQ0EsWUFBWSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU07QUFDOUMsZ0JBQWdCLE9BQU87QUFDdkIsb0JBQW9CLFVBQVUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRTtBQUN6RSxrQkFBaUI7QUFDakIsYUFBYSxFQUFDO0FBQ2QsWUFBWSxDQUFDLENBQUMsS0FBSyxHQUFFO0FBQ3JCLFNBQVMsQ0FBQztBQUNWLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWEsU0FBUyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJO0FBQ1o7QUFDQSxZQUFZLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDOUQsWUFBWSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDN0IsWUFBWSxXQUFXLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRTtBQUN2RCxnQkFBZ0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkQsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsYUFBYTtBQUNiO0FBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQztBQUM5QixZQUFZLE9BQU8sS0FBSyxDQUFDO0FBQ3pCO0FBQ0EsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ25CO0FBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalFPLE1BQU0sRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNkO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNkO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sR0FBRztBQUMzQjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7QUFDbkIsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUNuQixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2Q7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sR0FBRztBQUN6QjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUMzQztBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEdBQUc7QUFDWDtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN4RDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0M7QUFDQSxFQUFFLEtBQUssS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEM7QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2Y7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDZCxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0FBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDdEQ7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDckI7QUFDQSxFQUFFLFNBQVMsRUFB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LENBQUMsQ0FBQztBQUN4QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzVCLElBQUksSUFB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QUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtBQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxD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QUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDdEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBRztBQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkNBQTJDLEVBQUUs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LFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU07QUFDckMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUU7QUFDckIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUU7QUFDdEI7QUFDQSxRQUFRLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFlBQVksR0FBRyxHQUFHLE1BQUs7QUFDdkIsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxLQUFJO0FBQy9FO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFFO0FBQ2xNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTTtBQUN0RSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxL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LEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztBQUNoRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSztBQUNyRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSztBQUNsRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztBQUN0RjtBQUNBLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxNQUFNO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHO0FBQ3hCO0FBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE9BQU07QUFDdEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0FBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNsQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUM7QUFDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDckM7QUFDQSxRQUFRLE9BQU8sSUFBSTtBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUU7QUFDL0I7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDO0FBQ3ZDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDckIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0FBQ2xEO0FBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0FBQ0E7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxH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LEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN2QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFD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QUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUNoQyxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDakosWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6RDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDak9PLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDbkM7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3RCO0FBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7QUFDbEMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUM7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzVCLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzNCLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FB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LENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQzNDO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDdkI7QUFDQSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUIsUUFBUTtBQUNSO0FBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEM7QUFDQSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckM7QUFDQSxTQUFTLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMvRCxTQUFTLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2hELFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRTtBQUM3QixTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsU0FBUyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHO0FBQ3hCLE9BQU8sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN2QyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEMsZUFBZSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNuRDtBQUNBLE9BQU8sR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQSxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDeEQsT0FBTyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLE9BQU87QUFDUDtBQUNBLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUNwRDtBQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0UsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtBQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7QUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUN0QztBQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7QUFDdEM7QUFDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2Y7QUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RTtBQUNBLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdFO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0FBQ0EsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU87QUFDcEI7QUFDQSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQzNFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0M7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNmO0FBQ0EsRUFBRSxJQUFJLENBQUMsWUFBWSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVELGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsYUFBYSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM1QjtBQUNBLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQzdCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDcEI7QUFDQSxLQUFLLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUMxQztBQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzVCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFNO0FBQzFCLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDOUM7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3ZCLE1BQU07QUFDTixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDaEI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM5QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDekIsS0FBSyxPQUFPLElBQUksQ0FBQztBQUNqQjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsV0FBVyxDQUFDLEdBQUc7QUFDaEI7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ2pCLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBSztBQUNmO0FBQ0EsS0FBYyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPO0FBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ25DLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0FBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7QUFDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtBQUNBO0FBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVEO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDcEM7QUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztBQUM1QyxLQUFLLElBQUks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QUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2xELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQzdLO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtEQUFrRCxFQUFFLENBQUM7QUFDMUo7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FB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QSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDM0MsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtBQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzNEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3REO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDakM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxHQUFHLENBQUMsR0FBRztBQUNYO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3hDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDdkI7QUFDQSxRQUFRLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHO0FBQzNDO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDdkY7QUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUI7QUFDQSxZQUFZLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRztBQUM5QjtBQUNBLGdCQUFnQixJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztBQUNqRSxnQkFBZ0IsSUFBSSxhQUFhLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7QUFDdkU7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztBQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDO0FBQ25EO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN2RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNuQztBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FB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QUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSTtBQUM5QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVB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RUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUc7QUFDMUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RCO0FBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztBQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0FBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtBQUNBLE1BQU07QUFDTjtBQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUNsQjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSTtBQUM5QjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0M7QUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRTtBQUM5QyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUN2QztBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDbFRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxLQUFLLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUNyQixRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBQztBQUNwQixRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRTtBQUN6QixRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDVE8sTUFBTSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7QUFDM0I7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFJO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUU7QUFDckIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBQztBQUN6QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtBQUN6QixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUMzQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFDO0FBQ3BDO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztBQUM1QztBQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUMzQixRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsb0NBQW9DLEdBQUcsR0FBRTtBQUMvRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsNENBQTRDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQztBQUM1SCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDNUs7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDMUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHNCQUFzQixFQUFDO0FBQzFJO0FBQ0EsUUFBZ0IsSUFBSSxDQUFDLEVBQUU7QUFDdkIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFPO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRTtBQUMxQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNqQjtBQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDOUIsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN4QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUM3QyxRQUFRLEdBQUcsRUFBRSxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsV0FBVTtBQUMxRCxZQUFZLEVBQUUsQ0FBQyxVQUFVLEdBQUcsT0FBTTtBQUNsQztBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFNO0FBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTTtBQUNuQztBQUNBLFFBQVEsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtBQUNuQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87QUFDL0QsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQy9CO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtBQUNoRCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0FBQ2hEO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUM7QUFDNUQsYUFBYTtBQUNiLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxTQUFTLENBQUM7QUFDL0MsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFdBQVcsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0MsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzFCO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9CLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvQixTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUMxQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDdEI7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDMUI7QUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUNoQztBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPO0FBQzNCO0FBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEI7QUFDQSxZQUFZLEtBQUssU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxLQUFLLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUU7QUFDbEY7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUM1QjtBQUNBLGdCQUFnQixXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFFO0FBQ3pELGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFFO0FBQ3ZEO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxPQUFPO0FBQ3hCO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQztBQUNsQyxZQUFZLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRTtBQUN0QyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDOUMscUJBQXFCLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDaEMsYUFBYTtBQUNiLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN4QyxRQUFRLElBQUksV0FBVyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDeEM7QUFDQSxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkQ7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDbkMsWUFBWSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUVoQyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3pCLFlBQVksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuRCxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDaEMsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEdBQUcsR0FBRztBQUNWO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDMUI7QUFDQSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3RDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSTtBQUNqQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbkMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQ2pDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQzdCLFNBQVMsTUFBTSxJQUFJLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUNyRCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN2RyxpQkFBZ0I7QUFDaEIsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN0QyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDbEMsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQ3ZCO0FBQ0EsWUFBWSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUM7QUFDcEIsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUk7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQUs7QUFDNUI7QUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxHQUFHO0FBQ2Q7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDcEIsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDeEMsUUFBUSxLQUFLLENBQUMsT0FBTyxHQUFFO0FBQ3ZCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLEdBQUc7QUFDWjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDdEM7QUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUU7QUFDakMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFO0FBQzlDLFlBQVksSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEdBQUU7QUFDOUI7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3ZDO0FBQ0EsUUFBUSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRztBQUN6QixZQUFZLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUU7QUFDN0QsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUN4RCxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUU7QUFDcEM7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3ZDLGdCQUFnQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNwQyxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzdCLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRztBQUNaO0FBQ0EsUUFBUSxLQUFLLENBQUMsSUFBSSxHQUFFO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFFO0FBQ25ELFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3hCLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDOUI7QUFDQTtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFJO0FBQzVDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTTtBQUNuQztBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZCO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLE1BQUs7QUFDckMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLE1BQUs7QUFDckM7QUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7QUFDdkQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0FBQ3hELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtBQUMxRCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7QUFDM0QsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO0FBQ25DO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0FBQ25FLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztBQUNwRTtBQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztBQUMvRCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLHlCQUF3QjtBQUN0RTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUU7QUFDbkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDM0I7QUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3hCLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDOUI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0FBQ0E7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSTtBQUM1QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsT0FBTTtBQUNoQztBQUNBLFFBQVEsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtBQUNuQztBQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxPQUFNO0FBQ2hDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxPQUFNO0FBQ2hDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztBQUMvRCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtBQUM1RDtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUMzQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxDQUFDLEdBQUc7QUFDZjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQzlEO0FBQ0EsYUFBYSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQ3hJO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDdkI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3ZELGFBQWEsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNqRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Y7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU07QUFDakMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDeEMsYUFBYSxJQUFJLENBQUMsT0FBTyxHQUFFO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ3hDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxZQUFZLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFNO0FBQy9CLFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNsQixZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUU7QUFDekMsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRTtBQUMvQixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDcEM7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtBQUN2QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDN0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztBQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJ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QUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0FBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0FBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtBQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0FBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FB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ekI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkk7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcs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QUksQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7QUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7QUFDOUI7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JEO0FBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7QUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN4RCxhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7QUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCO0FBQ0EsU0FBUztBQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDekQsUUFBUSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDNUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDMUM7QUFDQTtBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixZQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLEtBQUssQ0FBQztBQUNyRCxTQUFTLE1BQU07QUFDZixZQUFZLElBQUksR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDMUIsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHO0FBQzNDO0FBQ0EsWUFBWSxDQUFDLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNoRCxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDaEQsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDOUQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtBQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0FBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6RDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDckM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0FBQ0E7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtBQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0FBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7QUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FB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WSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7QUFDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7QUFDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUMvQixZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVB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Q0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN4RCxTQUFTLE1BQU07QUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN4RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0I7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDNUQsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDMzBCTyxNQUFNLE9BQU8sU0FBUyxLQUFLLENBQUM7QUFDbkM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMs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SUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BEO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzFCLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztBQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDaEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9DLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUss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SSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQzNCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDOUI7QUFDQTtBQUNBLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RTtBQUNBO0FBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRDtBQUNBO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDaEQsTUFBTSxJQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNEO0FBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQ7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxD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LElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkIsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pCO0FBQ0EsSUFBSSxRQUFRLElBQUk7QUFDaEIsTUFBTSxLQUFLLENBQUM7QUFDWjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzdCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDeEQsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDNUQsUUFBUSxNQUFNO0FBQ2QsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtBQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtBQUNBLElBQUksSUFBSSxPQUFPO0FBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzNDO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtBQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEIsR0FBRztBQUNIOztBQzdTTyxNQUFN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QUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FDakxPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsaURBQWlELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0SjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMzQjtBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDaEQ7QUFDQSxR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RyxDQUFDLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEdBQUc7QUFDZDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRztBQUNkO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQy9CO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM1QixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVDO0FBQ0EsWUFBWSxRQUFRLENBQUM7QUFDckI7QUFDQSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU07QUFDL0YsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtBQUNwRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0FBQ3hHLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07QUFDcEc7QUFDQSxhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FDcEhPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3RCLFlBQVksSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLEtBQUssRUFBRTtBQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUN0QyxhQUFhLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLE1BQU0sRUFBRTtBQUNuRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQyxhQUFhLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLE1BQU0sRUFBRTtBQUNuRCxnQkFBZ0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsT0FBTTtBQUN6QyxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNwRSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7QUFDakQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUU7QUFDbEQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN4RDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7QUFDckY7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUNuQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUN0SjtBQUNBLFFBQVcsSUFBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSTtBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7QUFDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztBQUNBLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdkMsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxzQkFBc0IsQ0FBQztBQUN0RCxZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25EO0FBQ0EsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDckMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLHNCQUFzQixDQUFDO0FBQzFEO0FBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNwQztBQUNBLG9CQUFvQixHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDeEY7QUFDQSxvQkFBb0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDeEQsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMseUNBQXlDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDdFEsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7QUFDckUsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbEUsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQkFBb0IsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4QztBQUNBLG9CQUFvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDeEMsb0JBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQztBQUNyQztBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0Esb0JBQW9CLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxFQUFFLEtBQUssR0FBRTtBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcseUJBQXlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxpRUFBZ0U7QUFDekwsb0JBQW9CLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFFO0FBQ3ZDO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxjQUFjLENBQUM7QUFDNUQscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQztBQUN0RDtBQUNBLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztBQUNwQjtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE9BQU07QUFDakM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkIsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELFNBQVM7QUFDVDtBQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVELFNBQVM7QUFDVDtBQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0FBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0FBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFFO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDN0IsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQztBQUNsQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQzVELFNBQVMsTUFBTTtBQUNmLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMzQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sRUFBRSxDQUFDO0FBQ2xCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQUs7QUFDekM7QUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7QUFDQSxZQUFZLENBQUMsR0FBRyxFQUFDO0FBQ2pCLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQUs7QUFDM0U7QUFDQSxZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUMxQixnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztBQUN4QyxhQUFhLE1BQU07QUFDbkIsZ0JBQWdCLENBQUMsR0FBRyxFQUFDO0FBQ3JCLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztBQUM3QixhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUk7QUFDNUM7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQztBQUNoQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQU87QUFDOUMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2pDO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QjtBQUNBLFlBQVksUUFBUSxDQUFDO0FBQ3JCO0FBQ0EsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUM3RixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNO0FBQ2xHLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07QUFDL0YsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUNuRztBQUNBLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBQztBQUNyQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDckIsUUFBUSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDM0I7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRztBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzdDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUMxQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUM7QUFDN0QsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDM0M7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDaEUsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHO0FBQzFCLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7QUFDaEUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLEdBQUc7QUFDbEQsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUM5QyxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMxQixhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU87QUFDekI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3BDLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsUUFBVyxJQUFXLElBQUk7QUFDMUI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0FBQ0EsWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckIsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUM3RCxhQUFhLE1BQU07QUFDbkIsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM3RCxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRDtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5RjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztBQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0FBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7QUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtBQUN6RTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7QUFDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0FBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUMzRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBQztBQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUM5RDtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0FBQ2hELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0FBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFFO0FBQ3BFO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDclJBO0FBSUE7QUFDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO0FBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2I7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0FBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUMxQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLElB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LEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0UsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwRSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hHLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzlDO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLE1BQWtCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ25DLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtBQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QztBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3pCO0FBQ0E7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRCxVQUFVLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEQsVUFBVSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxVQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xELFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUNyQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sTUFBTTtBQUNiO0FBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNuQyxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdEO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNuRDtBQUNBLFNBQVMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hELFNBQVMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4QyxVQUFVLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsVUFBVSxNQUFNLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNqRztBQUNBLFdBQVcsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM5RSxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFB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SSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN0QztBQUNBO0FBQ0EsSUFBSSxHQUFHLENBQUMsV0FBVyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0EsSUFBSSxNQUFNLFFBQVEsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO0FBQ3pGLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQy9ELElBQUksTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5RSxJQUFJLE1BQU0sT0FBTyxNQUFNLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEY7QUFDQTtBQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksQ0FBQyxDQUFDLE1BQU0sT0FBTyxZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUM1QyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3REO0FBQ0E7QUFDQSxJQUFJLElBQUksUUFBUSxFQUFFO0FBQ2xCLE1BQU0sQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0FBQzlCLEtBQUssTUFBTSxJQUFJLFVBQVUsRUFBRTtBQUMzQixNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQztBQUN2QyxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztBQUM1QixLQUFLLE1BQU0sSUFBSSxPQUFPLEVBQUU7QUFDeEIsTUFBTSxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7QUFDaEMsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDNUIsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbkMsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFLEtBQUssR0FBRztBQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN4QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ2QsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QyxJQUFJLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUM1QixHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ25CLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDdkIsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTO0FBQzNFO0FBQ0EsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0FBQzlCLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25ELFVBQVUsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEMsVUFBVSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdB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QUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckM7QUFDQTtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNqRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzVCLEdBQUc7QUFDSDs7QUNsWVksTUFBQyxHQUFHLEdBQUcsWUFBWTtBQUMvQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDO0FBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUN0QztBQUNBLFlBQVksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNCO0FBQ0EsU0FBUyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQzlDO0FBQ0EsWUFBWSxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6RDtBQUNBLFlBQVksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3hFO0FBQ0EsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDO0FBQ3hFO0FBQ0EsWUFBWSxJQUFJLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNwRSxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEM7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQzlCLFlBQVksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDeEI7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLFFBQVEsSUFBSTtBQUNwQjtBQUNBLFlBQVksS0FBSyxNQUFNLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2hFLFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNwRCxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDeEQsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2xELFlBQVksS0FBSyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUM5QyxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDbEQsWUFBWSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2xELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN4RCxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDaEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2hELFlBQVksS0FBSyxTQUFTLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3JFLFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNsRCxZQUFZLEtBQUssV0FBVyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN6RSxZQUFZLEtBQUssT0FBTyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUMvRCxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDcEQsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3BELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN4RCxZQUFZLEtBQUssT0FBTyxDQUFDLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNoRSxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDaEQsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2hELFlBQVksS0FBSyxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQzlELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN4RDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUN4QjtBQUNBLFlBQVksS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFJO0FBQ25DO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNuRCxZQUFZLE9BQU8sQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsRUFBQztBQUNEO0FBQ08sTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzFDO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxRQUFPO0FBQ3RCO0FBQ0EsSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsT0FBTTtBQUM5QyxTQUFTLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLEdBQUcsUUFBTztBQUNyRCxhQUFhLElBQUksR0FBRyxTQUFRO0FBQzVCO0FBQ0EsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLFFBQU87QUFDcEMsYUFBYSxJQUFJLEdBQUcsUUFBTztBQUMzQjtBQUNBLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFFO0FBQzNEO0FBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsR0FBRyxJQUFJLEdBQUcsU0FBUTtBQUN0RCxhQUFhLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxHQUFHLElBQUksR0FBRyxPQUFNO0FBQ3pEO0FBQ0EsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsWUFBWSxNQUFNLEVBQUU7QUFDN0Q7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLFNBQVE7QUFDL0MsYUFBYSxJQUFJLEdBQUcsT0FBTTtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJO0FBQ2Y7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNLEdBQUcsQ0FBQztBQUNqQixFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdEI7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ2pDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0MsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztBQUM5QjtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDO0FBQ3pFLFFBQVEsQ0FBQyxDQUFDLG9CQUFvQjtBQUM5QixRQUFRLElBQUksQ0FBQztBQUNiO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ2pFO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztBQUM1QztBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNwRTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUks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QUFDdEI7QUFDQSxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2QjtBQUNBLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDOUMsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3pDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDMUUsV0FBVztBQUNYLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN6QjtBQUNBLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDaEQsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0I7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxPQUFPO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsR0FB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Q0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZEO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtBQUNYLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEM7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0FBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEdBQUc7QUFDVCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsR0FBRztBQUNkLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQjtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUI7QUFDQSxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXO0FBQ2hDLFVBQVUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEMsVUFBVSxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQzdCO0FBQ0EsTUFBTSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ25EO0FBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDekM7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtBQUNwQixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQy9DLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3ZDLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDbEUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25ELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pEO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVU7QUFDM0MsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDMUQsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ2QsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEQsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRO0FBQ3JCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDNUUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUU7QUFDbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUM1QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDaEIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUIsS0FBSztBQUNMLEdBQUc7QUFDSDs7OzsifQ== +/** + * @license + * Copyright 2010-2021 Uil.js Authors + * SPDX-License-Identifier: MIT + */ +const t="4.3.0",s={ui:[],dom:null,ID:null,lock:!1,wlock:!1,current:-1,needReZone:!0,needResize:!1,forceZone:!1,isEventsInit:!1,isLeave:!1,addDOMEventListeners:!0,downTime:0,prevTime:0,prevDefault:["contextmenu"],pointerEvent:["pointerdown","pointermove","pointerup"],eventOut:["pointercancel","pointerout","pointerleave"],xmlserializer:null,tmpTime:null,tmpImage:null,oldCursor:"auto",input:null,parent:null,firstImput:!0,hiddenImput:null,hiddenSizer:null,hasFocus:!1,startInput:!1,inputRange:[0,0],cursorId:0,str:"",pos:0,startX:-1,moveX:-1,debugInput:!1,isLoop:!1,listens:[],e:{type:null,clientX:0,clientY:0,keyCode:NaN,key:null,delta:0},isMobile:!1,now:null,needsUpdate:!1,getTime:function(){return self.performance&&self.performance.now?self.performance.now.bind(performance):Date.now},add:function(t){s.ui.push(t),s.getZone(t),s.isEventsInit||s.initEvents()},testMobile:function(){let t=navigator.userAgent;return!!(t.match(/Android/i)||t.match(/webOS/i)||t.match(/iPhone/i)||t.match(/iPad/i)||t.match(/iPod/i)||t.match(/BlackBerry/i)||t.match(/Windows Phone/i))},remove:function(t){let i=s.ui.indexOf(t);-1!==i&&(s.removeListen(t),s.ui.splice(i,1)),0===s.ui.length&&s.removeEvents()},initEvents:function(){if(s.isEventsInit)return;let t=document.body;s.isMobile=s.testMobile(),s.now=s.getTime(),s.isMobile?t.style.touchAction="none":t.addEventListener("wheel",s,{passive:!1}),console.log("R.addDOMEventListeners "+s.addDOMEventListeners),s.addDOMEventListeners&&(t.addEventListener("pointercancel",s),t.addEventListener("pointerleave",s),t.addEventListener("pointermove",s),t.addEventListener("pointerdown",s),t.addEventListener("pointerup",s),t.addEventListener("keydown",s,!1),t.addEventListener("keyup",s,!1)),window.addEventListener("resize",s.resize,!1),s.isEventsInit=!0,s.dom=t},removeEvents:function(){if(!s.isEventsInit)return;let t=document.body;s.isMobile||t.removeEventListener("wheel",s),s.addDOMEventListeners&&(t.removeEventListener("pointercancel",s),t.removeEventListener("pointerleave",s),t.removeEventListener("pointermove",s),t.removeEventListener("pointerdown",s),t.removeEventListener("pointerup",s),t.removeEventListener("keydown",s),t.removeEventListener("keyup",s)),window.removeEventListener("resize",s.resize),s.isEventsInit=!1},resize:function(){let t,i=s.ui.length;for(;i--;)t=s.ui[i],t.isGui&&!t.isCanvasOnly&&t.autoResize&&t.calc();s.needReZone=!0,s.needResize=!1},out:function(){console.log("im am out"),s.clearOldID()},in:function(){console.log("im am in")},fakeUp:function(){this.handleEvent({type:"pointerup"})},handleEvent:function(t){-1!==s.prevDefault.indexOf(t.type)&&t.preventDefault(),s.needResize&&s.resize(),s.findZone(s.forceZone);let i=s.e,e=!1;"keydown"===t.type&&s.keydown(t),"keyup"===t.type&&s.keyup(t),"wheel"===t.type?i.delta=t.deltaY>0?1:-1:i.delta=0;let h=t.pointerType;if(i.clientX=("touch"===h?t.pageX:t.clientX)||0,i.clientY=("touch"===h?t.pageY:t.clientY)||0,i.type=t.type,-1!==s.eventOut.indexOf(t.type)&&(e=!0,i.type="mouseup"),"pointerleave"===t.type&&(s.isLeave=!0),"pointerdown"===t.type&&(i.type="mousedown"),"pointerup"===t.type&&(i.type="mouseup"),"pointermove"===t.type&&(s.isLeave&&(s.isLeave=!1,s.resize()),i.type="mousemove"),"mousedown"===i.type){if(s.downTime=s.now(),s.downTime-s.prevTime<200)return s.selectAll(),!1;s.prevTime=s.downTime,s.forceZone=!1}"mousedown"===i.type&&s.clearInput(),"mousedown"===i.type&&(s.lock=!0),"mouseup"===i.type&&(s.lock=!1),s.isMobile&&"mousedown"===i.type&&s.findID(i),"mousemove"!==i.type||s.lock||s.findID(i),null!==s.ID&&(s.ID.isCanvasOnly&&(i.clientX=s.ID.mouse.x,i.clientY=s.ID.mouse.y),s.ID.handleEvent(i)),s.isMobile&&"mouseup"===i.type&&s.clearOldID(),e&&s.clearOldID()},findID:function(t){let i,e,h,o=s.ui.length,n=-1;for(;o--;)if(i=s.ui[o],i.isCanvasOnly?(e=i.mouse.x,h=i.mouse.y):(e=t.clientX,h=t.clientY),s.onZone(i,e,h)){n=o,n!==s.current&&(s.clearOldID(),s.current=n,s.ID=i);break}-1===n&&s.clearOldID()},clearOldID:function(){s.ID&&(s.current=-1,s.ID.reset(),s.ID=null,s.cursor())},calcUis:(t,i,e,h=!1)=>{let o,n,r,l=t.length,a=0,c=0,d=0;for(;l--;)o=t[c],c++,!h&&o.isGroup&&o.calcUis(),r=o.margin,o.zone.w=o.w,o.zone.h=o.h+r,o.autoWidth?(a=0,o.zone.x=i.x+o.dx,o.zone.y=e,e+=o.h+r,d+=o.h+r):(0===a&&(d+=o.h+r),o.zone.x=i.x+a,o.zone.y=e,n=s.getWidth(o),n?o.zone.w=o.w=n:o.fw&&(o.zone.w=o.w=o.fw),a+=o.zone.w,a>=i.w&&(e+=o.h+r,a=0));return d},findTarget:function(t,i){let e=t.length;for(;e--;)if(s.onZone(t[e],i.clientX,i.clientY))return e;return-1},findZone:function(t){if(s.needReZone||t){for(var i,e=s.ui.length;e--;)i=s.ui[e],s.getZone(i),i.isGui&&i.calcUis();s.needReZone=!1}},onZone:function(t,s,i){if(void 0===s||void 0===i)return!1;let e=t.zone,h=s-e.x,o=i-e.y,n=h>=0&&o>=0&&h<=e.w&&o<=e.h;return n?t.local.set(h,o):t.local.neg(),n},getWidth:function(t){return t.getDom().clientWidth},getZone:function(t){if(t.isCanvasOnly)return;let s=t.getDom().getBoundingClientRect();t.zone={x:s.left,y:s.top,w:s.width,h:s.height}},cursor:function(t){(t=t||"auto")!==s.oldCursor&&(document.body.style.cursor=t,s.oldCursor=t)},toCanvas:function(t,i,e,h){if(s.xmlserializer||(s.xmlserializer=new XMLSerializer),h&&null!==s.tmpTime&&(clearTimeout(s.tmpTime),s.tmpTime=null),null!==s.tmpTime)return;s.lock&&(s.tmpTime=setTimeout((function(){s.tmpTime=null}),10));let o=!1;i===t.canvas.width&&e===t.canvas.height||(o=!0),null===s.tmpImage&&(s.tmpImage=new Image);let n=s.tmpImage,r=s.xmlserializer.serializeToString(t.content),l=''+r+"";n.onload=function(){let s=t.canvas.getContext("2d");o?(t.canvas.width=i,t.canvas.height=e):s.clearRect(0,0,i,e),s.drawImage(this,0,0),t.onDraw()},n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(l),n.crossOrigin="",s.needsUpdate=!1},setHidden:function(){null===s.hiddenImput&&(s.hiddenImput=document.createElement("input"),s.hiddenImput.type="text",s.hiddenSizer=document.createElement("div"),document.body.appendChild(s.hiddenImput),document.body.appendChild(s.hiddenSizer));let t=s.debugInput?"":"opacity:0; zIndex:0;",i=s.parent.css.txtselect+"padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;"+t;s.hiddenImput.style.cssText=i+"bottom:10px;"+(s.debugInput?"":"transform:scale(0);"),s.hiddenSizer.style.cssText=i+"bottom:40px;",s.hiddenImput.style.width=s.input.clientWidth+"px",s.hiddenImput.value=s.str,s.hiddenSizer.innerHTML=s.str,s.hasFocus=!0},clearHidden:function(t){null!==s.hiddenImput&&(s.hasFocus=!1)},clickPos:function(t){let i=s.str.length,e=0,h=0;for(;i--&&(e+=s.textWidth(s.str[h]),!(e>=t));)h++;return h},upInput:function(t,i){if(null===s.parent)return!1;let e=!1;if(i){let i=s.clickPos(t);if(s.moveX=i,-1===s.startX)s.startX=i,s.cursorId=i,s.inputRange=[s.startX,s.startX];else{s.moveX!==s.startX&&(s.startX>s.moveX?s.inputRange=[s.moveX,s.startX]:s.inputRange=[s.startX,s.moveX])}e=!0}else-1!==s.startX&&(s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.startX=-1,e=!0);return e&&s.selectParent(),e},selectAll:function(){s.parent&&(s.str=s.input.textContent,s.inputRange=[0,s.str.length],s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.cursorId=s.inputRange[1],s.selectParent())},selectParent:function(){var t=s.textWidth(s.str.substring(0,s.cursorId)),i=s.textWidth(s.str.substring(0,s.inputRange[0])),e=s.textWidth(s.str.substring(s.inputRange[0],s.inputRange[1]));s.parent.select(t,i,e,s.hiddenSizer.innerHTML)},textWidth:function(t){return null===s.hiddenSizer?0:(t=t.replace(/ /g," "),s.hiddenSizer.innerHTML=t,s.hiddenSizer.clientWidth)},clearInput:function(){null!==s.parent&&(s.firstImput||s.parent.validate(!0),s.clearHidden(),s.parent.unselect(),s.input.style.background=s.parent.colors.back,s.input.style.borderColor=s.parent.colors.border,s.parent.isEdit=!1,s.input=null,s.parent=null,s.str="",s.firstImput=!0)},setInput:function(t,i){s.clearInput(),s.input=t,s.parent=i,s.input.style.background=s.parent.colors.backoff,s.input.style.borderColor=s.parent.colors.select,s.str=s.input.textContent,s.setHidden()},keydown:function(t){if(null===s.parent)return;let i=t.which;t.shiftKey,s.firstImput=!1,s.hasFocus&&(window.focus(),s.hiddenImput.focus()),s.parent.isEdit=!0,13===i?s.clearInput():s.input.isNum?t.keyCode>47&&t.keyCode<58||t.keyCode>95&&t.keyCode<106||190===t.keyCode||110===t.keyCode||8===t.keyCode||109===t.keyCode?s.hiddenImput.readOnly=!1:s.hiddenImput.readOnly=!0:s.hiddenImput.readOnly=!1},keyup:function(t){null!==s.parent&&(s.str=s.hiddenImput.value,s.parent.allEqual?s.parent.sameStr(s.str):s.input.textContent=s.str,s.cursorId=s.hiddenImput.selectionStart,s.inputRange=[s.hiddenImput.selectionStart,s.hiddenImput.selectionEnd],s.selectParent(),s.parent.validate())},loop:function(){s.isLoop&&requestAnimationFrame(s.loop),s.needsUpdate=s.update(),s.ui[0]&&s.needsUpdate&&s.ui[0].draw()},update:function(){let t=s.listens.length,i=!1;for(;t--;){s.listens[t].listening()&&(i=!0)}return i},removeListen:function(t){let i=s.listens.indexOf(t);-1!==i&&s.listens.splice(i,1),0===s.listens.length&&(s.isLoop=!1)},addListen:function(t){return-1===s.listens.indexOf(t)&&(s.listens.push(t),s.isLoop||(s.isLoop=!0,s.loop()),!0)}},i=s,e={transition:.2,frag:document.createDocumentFragment(),colorRing:null,joystick_0:null,joystick_1:null,circular:null,knob:null,pad2d:null,svgns:"http://www.w3.org/2000/svg",links:"http://www.w3.org/1999/xlink",htmls:"http://www.w3.org/1999/xhtml",DOM_SIZE:["height","width","top","left","bottom","right","margin-left","margin-right","margin-top","margin-bottom"],SVG_TYPE_D:["pattern","defs","transform","stop","animate","radialGradient","linearGradient","animateMotion","use","filter","feColorMatrix"],SVG_TYPE_G:["svg","rect","circle","path","polygon","text","g","line","foreignObject"],PI:Math.PI,TwoPI:2*Math.PI,pi90:.5*Math.PI,pi60:Math.PI/3,torad:Math.PI/180,todeg:180/Math.PI,clamp:(t,s,i)=>t=(t=ti?i:t,isDivid:t=>.5*t===Math.floor(.5*t),size:{w:240,h:20,p:30,s:8},defineColor:(t,s=e.colors)=>{let i={...s},h=["fontFamily","fontWeight","fontShadow","fontSize"],o=!1;t.font&&(t.fontFamily=t.font),t.shadow&&(t.fontShadow=t.shadow),t.weight&&(t.fontWeight=t.weight),t.fontColor&&(t.text=t.fontColor),t.color&&(t.text=t.color),t.text&&(i.text=t.text,t.fontColor||t.color||(i.title=e.ColorLuma(t.text,-.25),i.titleoff=e.ColorLuma(t.text,-.5)),i.textOver=e.ColorLuma(t.text,.25),i.textSelect=e.ColorLuma(t.text,.5)),t.button&&(i.button=t.button,i.border=e.ColorLuma(t.button,.1),i.overoff=e.ColorLuma(t.button,.2)),t.select&&(i.select=t.select,i.over=e.ColorLuma(t.select,-.1)),t.itemBg&&(t.back=t.itemBg),t.back&&(i.back=t.back,i.backoff=e.ColorLuma(t.back,-.1)),t.fontSelect&&(i.textSelect=t.fontSelect),t.groupBorder&&(i.gborder=t.groupBorder),t.bgOver&&(i.backgroundOver=t.bgOver);for(let s in i)void 0!==t[s]&&(i[s]=t[s]);for(let s in t)-1!==h.indexOf(s)&&(o=!0);return o&&e.defineText(i),i},colors:{sx:4,sy:2,radius:2,showOver:1,content:"none",background:"rgba(50,50,50,0.15)",backgroundOver:"rgba(50,50,50,0.3)",title:"#CCC",titleoff:"#BBB",text:"#DDD",textOver:"#EEE",textSelect:"#FFF",back:"rgba(0,0,0,0.2)",backoff:"rgba(0,0,0,0.3)",border:"#4c4c4c",borderSize:1,gborder:"none",groups:"none",button:"#3c3c3c",overoff:"#5c5c5c",over:"#024699",select:"#308AFF",action:"#FF3300",fontFamily:"Consolas, monospace",fontWeight:"normal",fontShadow:"none",fontSize:12,joyOver:"rgba(48,138,255,0.25)",joyOut:"rgba(100,100,100,0.5)",joySelect:"#308AFF",hide:"rgba(0,0,0,0)"},css:{basic:"position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; -o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;",button:"display:flex; align-items:center; justify-content:center; text-align:center;",middle:"display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;"},svgs:{g1:"M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z",g2:"M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z",group:"M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z",arrow:"M 3 8 L 8 5 3 2 3 8 Z",arrowDown:"M 5 8 L 8 3 2 3 5 8 Z",arrowUp:"M 5 2 L 2 7 8 7 5 2 Z",solid:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z",body:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z",vehicle:"M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z",articulation:"M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z",character:"M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z",terrain:"M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z",joint:"M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z",ray:"M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z",collision:"M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z",map:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",material:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",texture:"M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z",object:"M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z",none:"M 9 5 L 5 5 5 9 9 9 9 5 Z",cursor:"M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z",load:"M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z",save:"M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z",extern:"M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z"},rezone(){i.needReZone=!0},getImput:function(){return!!i.input},setStyle:function(t){for(var s in t)e.colors[s]&&(e.colors[s]=t[s]);e.setText()},defineText:function(t){e.setText(t.fontSize,t.text,t.fontFamily,t.fontShadow,t.fontWeight)},setText:function(t,s,i,h,o){let n=e.colors;void 0===i&&(i=n.fontFamily),void 0===t&&(t=n.fontSize),void 0===h&&(h=n.fontShadow),void 0===o&&(o=n.fontWeight),void 0===s&&(s=n.text),isNaN(t)?-1===t.search("em")&&(t+="px"):t+="px",e.css.txt=e.css.basic+e.css.middle+" font-family:"+i+"; font-weight:"+o+"; font-size:"+t+"; color:"+n.text+"; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;","none"!==h&&(e.css.txt+=" text-shadow: 1px 1px 1px "+h+";"),e.css.txtselect=e.css.txt+"padding:0px 4px; border:1px dashed "+n.border+";",e.css.item=e.css.txt+"padding:0px 4px; position:relative; margin-bottom:1px; "},cloneCss:function(){return{...e.css}},clone:function(t){return t.cloneNode(!0)},setSvg:function(t,s,i,e,h){-1===e?t.setAttributeNS(null,s,i):void 0!==h?t.childNodes[e||0].childNodes[h||0].setAttributeNS(null,s,i):t.childNodes[e||0].setAttributeNS(null,s,i)},setCss:function(t,s){for(let i in s)-1!==e.DOM_SIZE.indexOf(i)?t.style[i]=s[i]+"px":t.style[i]=s[i]},set:function(t,s){for(let i in s)"txt"===i&&(t.textContent=s[i]),"link"===i?t.setAttributeNS(e.links,"xlink:href",s[i]):t.setAttributeNS(null,i,s[i])},get:function(t,s){if(void 0===s)return t;if(!isNaN(s))return t.childNodes[s];if(s instanceof Array){if(2===s.length)return t.childNodes[s[0]].childNodes[s[1]];if(3===s.length)return t.childNodes[s[0]].childNodes[s[1]].childNodes[s[2]]}},dom:function(t,s,i,h,o){return t=t||"div",-1!==e.SVG_TYPE_D.indexOf(t)||-1!==e.SVG_TYPE_G.indexOf(t)?"svg"===t?(h=document.createElementNS(e.svgns,"svg"),e.set(h,i)):(void 0===h&&(h=document.createElementNS(e.svgns,"svg")),e.addAttributes(h,t,i,o)):h=void 0===h?document.createElementNS(e.htmls,t):h.appendChild(document.createElementNS(e.htmls,t)),s&&(h.style.cssText=s),void 0===o?h:h.childNodes[o||0]},addAttributes:function(t,s,i,h){let o=document.createElementNS(e.svgns,s);return e.set(o,i),e.get(t,h).appendChild(o),-1!==e.SVG_TYPE_G.indexOf(s)&&(o.style.pointerEvents="none"),o},clear:function(t){for(e.purge(t);t.firstChild;)t.firstChild.firstChild&&e.clear(t.firstChild),t.removeChild(t.firstChild)},purge:function(t){let s,i,h=t.attributes;if(h)for(s=h.length;s--;)i=h[s].name,"function"==typeof t[i]&&(t[i]=null);if(h=t.childNodes,h)for(s=h.length;s--;)e.purge(t.childNodes[s])},addSVGGlowEffect:function(){if(null!==document.getElementById("UILGlow"))return;let t=e.initUILEffects(),s=e.addAttributes(t,"filter",{id:"UILGlow",x:"-20%",y:"-20%",width:"140%",height:"140%"});e.addAttributes(s,"feGaussianBlur",{in:"SourceGraphic",stdDeviation:"3",result:"uilBlur"});let i=e.addAttributes(s,"feMerge",{});for(let t=0;t<=3;t++)e.addAttributes(i,"feMergeNode",{in:"uilBlur"});e.addAttributes(i,"feMergeNode",{in:"SourceGraphic"})},initUILEffects:function(){let t=document.getElementById("UILSVGEffects");return null===t&&(t=e.dom("svg",void 0,{id:"UILSVGEffects",width:"0",height:"0"}),document.body.appendChild(t)),t},ColorLuma:function(t,s){"n"===t&&(t="#000"),(t=String(t).replace(/[^0-9a-f]/gi,"")).length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),s=s||0;let i,e,h="#";for(e=0;e<3;e++)i=parseInt(t.substr(2*e,2),16),i=Math.round(Math.min(Math.max(0,i+i*s),255)).toString(16),h+=("00"+i).substr(i.length);return h},findDeepInver:function(t){return.3*t[0]+.59*t[1]+.11*t[2]<=.6},lerpColor:function(t,s,i){let e={};for(let h=0;h<3;h++)e[h]=t[h]+(s[h]-t[h])*i;return e},hexToHtml:function(t){return"#"+("000000"+(t=void 0===t?0:t).toString(16)).substr(-6)},htmlToHex:function(t){return t.toUpperCase().replace("#","0x")},u255:function(t,s){return parseInt(t.substring(s,s+2),16)/255},u16:function(t,s){return parseInt(t.substring(s,s+1),16)/15},unpack:function(t){return 7==t.length?[e.u255(t,1),e.u255(t,3),e.u255(t,5)]:4==t.length?[e.u16(t,1),e.u16(t,2),e.u16(t,3)]:void 0},p255:function(t){let s=Math.round(255*t).toString(16);return s.length<2&&(s="0"+s),s},pack:function(t){return"#"+e.p255(t[0])+e.p255(t[1])+e.p255(t[2])},htmlRgb:function(t){return"rgb("+Math.round(255*t[0])+","+Math.round(255*t[1])+","+Math.round(255*t[2])+")"},pad:function(t){return 1==t.length&&(t="0"+t),t},rgbToHex:function(t){let s=Math.round(255*t[0]).toString(16),i=Math.round(255*t[1]).toString(16),h=Math.round(255*t[2]).toString(16);return"#"+e.pad(s)+e.pad(i)+e.pad(h)},hueToRgb:function(t,s,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(s-t)*i:i<.5?s:i<2/3?t+6*(s-t)*(2/3-i):t},rgbToHsl:function(t){let s=t[0],i=t[1],e=t[2],h=Math.min(s,i,e),o=Math.max(s,i,e),n=o-h,r=0,l=0,a=(h+o)/2;return a>0&&a<1&&(l=n/(a<.5?2*a:2-2*a)),n>0&&(o==s&&o!=i&&(r+=(i-e)/n),o==i&&o!=e&&(r+=2+(e-s)/n),o==e&&o!=s&&(r+=4+(s-i)/n),r/=6),[r,l,a]},hslToRgb:function(t){let s,i,h=t[0],o=t[1],n=t[2];return 0===o?[n,n,n]:(i=n<=.5?n*(o+1):n+o-n*o,s=2*n-i,[e.hueToRgb(s,i,h+.33333),e.hueToRgb(s,i,h),e.hueToRgb(s,i,h-.33333)])},makeGradiant:function(t,s,i,h){e.dom(t,null,s,i,0);let o,n=i.childNodes[0].childNodes.length-1;for(let t=0;t0){for(a=6;a--;)r[a]=(113*r[a]+u).toFixed(2);c=" M"+r[0]+" "+r[1]+" Q"+r[2]+" "+r[3]+" "+r[4]+" "+r[5],d=[[0,g[0],1],[100,g[1],1]],e.makeGradiant("linearGradient",{id:"G"+l,x1:r[0],y1:r[1],x2:r[4],y2:r[5],gradientUnits:"userSpaceOnUse"},s,d),e.dom("path","",{d:c,"stroke-width":30,stroke:"url(#G"+l+")","stroke-linecap":"butt"},s,1)}m=n-p,g[0]=g[1]}d=[[0,"#FFFFFF",1],[50,"#FFFFFF",0],[50,"#000000",0],[100,"#000000",1]],e.makeGradiant("linearGradient",{id:"GL0",x1:0,y1:u-84.9,x2:0,y2:212.9,gradientUnits:"userSpaceOnUse"},s,d),d=[[0,"#7f7f7f",1],[50,"#7f7f7f",.5],[100,"#7f7f7f",0]],e.makeGradiant("linearGradient",{id:"GL1",x1:78.95,y1:0,x2:226,y2:0,gradientUnits:"userSpaceOnUse"},s,d),e.dom("g",null,{"transform-origin":"128px 128px",transform:"rotate(0)"},s),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"red"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL1)","stroke-width":1,stroke:"url(#GL1)"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL0)","stroke-width":1,stroke:"url(#GL0)"},s,2),e.dom("path","",{d:"M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z",fill:"none","stroke-width":2,stroke:"#000"},s,2),e.dom("circle","",{cx:128,cy:128,r:6,"stroke-width":2,stroke:"#000",fill:"none"},s),e.colorRing=s},icon:function(t,s,i){i=i||40;let h=[""];switch(t){case"logo":h[1]="";break;case"donate":h[1]="";break;case"neo":h[1]="";break;case"phy":h[1]="";break;case"config":h[1]="";break;case"github":h[1]="";break;case"save":h[1]=""}return h[2]="",h.join("\n")},logoFill_d:"\n M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 \n L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 \n M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 \n Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z\n ",logo_github:"\n M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 \n 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 \n 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 \n 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 \n 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z\n ",logo_neo:"\n M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 \n 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 \n 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 \n 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L \n 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z\n ",logo_phy:"\n M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 \n Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95\n ",logo_config:"\n M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 \n L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 \n Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75\n ",logo_donate:"\n M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 \n 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 \n 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 \n 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 \n 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 \n Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 \n 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 \n 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 \n 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M \n 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 \n 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 \n 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 \n 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 \n 200.9 187.5 200.9 187.5 195.35 Z\n "};e.setText();const h=e;class o{static autoTypes(t){let s=[];switch(t){case"svg":s=[{accept:{"image/svg+xml":".svg"}}];break;case"wav":s=[{accept:{"audio/wav":".wav"}}];break;case"mp3":s=[{accept:{"audio/mpeg":".mp3"}}];break;case"mp4":s=[{accept:{"video/mp4":".mp4"}}];break;case"bin":case"hex":s=[{description:"Binary Files",accept:{"application/octet-stream":[".bin",".hex"]}}];break;case"text":s=[{description:"Text Files",accept:{"text/plain":[".txt",".text"],"text/html":[".html",".htm"]}}];break;case"json":s=[{description:"JSON Files",accept:{"application/json":[".json"]}}];break;case"js":s=[{description:"JavaScript Files",accept:{"text/javascript":[".js"]}}];break;case"image":s=[{description:"Images",accept:{"image/*":[".png",".gif",".jpeg",".jpg"]}}];break;case"icon":s=[{description:"Icons",accept:{"image/x-ico":[".ico"]}}];break;case"lut":s=[{description:"Lut",accept:{"text/plain":[".cube",".3dl"]}}]}return s}static async load(t={}){"function"!=typeof window.showOpenFilePicker&&(window.showOpenFilePicker=o.showOpenFilePickerPolyfill);try{let s=t.type||"";const i={excludeAcceptAllOption:!!s,multiple:!1};i.types=o.autoTypes(s);const e=await window.showOpenFilePicker(i),h=await e[0].getFile();if(!h)return null;let n=h.name,r=n.substring(n.lastIndexOf(".")+1,n.length);const l=["png","jpg","jpeg","mp4","webm","ogg","mp3"],a=["sea","z","hex","bvh","BVH","glb","gltf"],c=new FileReader;-1!==l.indexOf(r)?c.readAsDataURL(h):-1!==a.indexOf(r)?c.readAsArrayBuffer(h):c.readAsText(h),c.onload=function(i){let e=i.target.result;switch(s){case"image":let s=new Image;s.onload=function(){t.callback&&t.callback(s,n,r)},s.src=e;break;case"json":t.callback&&t.callback(JSON.parse(e),n,r);break;default:t.callback&&t.callback(e,n,r)}}}catch(s){console.log(s),t.always&&t.callback&&t.callback(null)}}static showOpenFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("input");i.type="file",i.multiple=t.multiple,i.accept=t.types.map((t=>t.accept)).flatMap((t=>Object.keys(t).flatMap((s=>t[s])))).join(","),i.addEventListener("change",(()=>{s([...i.files].map((t=>({getFile:async()=>new Promise((s=>{s(t)}))}))))})),i.click()}))}static async save(t={}){let s=!1;"function"!=typeof window.showSaveFilePicker&&(window.showSaveFilePicker=o.showSaveFilePickerPolyfill,s=!0);try{let i=t.type||"";const e={suggestedName:t.name||"hello",data:t.data||""};e.types=o.autoTypes(i),e.finalType=Object.keys(e.types[0].accept)[0],e.suggestedName+=e.types[0].accept[e.finalType][0];const h=await window.showSaveFilePicker(e);if(s)return;const n=await h.createWritable();let r=new Blob([e.data],{type:e.finalType});await n.write(r),await n.close()}catch(t){console.log(t)}}static showSaveFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("a");i.download=t.suggestedName||"my-file.txt";let e=new Blob([t.data],{type:t.finalType});i.href=URL.createObjectURL(e),i.addEventListener("click",(()=>{s(setTimeout((()=>URL.revokeObjectURL(i.href)),1e3))})),i.click()}))}static async getFolder(){try{const t=await window.showDirectoryPicker(),s=[];for await(const i of t.values()){const t=await i.getFile();s.push(t)}return console.log(s),s}catch(t){console.log(t)}}}class n{constructor(t=0,s=0){this.x=t,this.y=s}set(t,s){return this.x=t,this.y=s,this}divide(t){return this.x/=t.x,this.y/=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divideScalar(t){return this.multiplyScalar(1/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}angle(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t}addScalar(t){return this.x+=t,this.y+=t,this}negate(){return this.x*=-1,this.y*=-1,this}neg(){return this.x=-1,this.y=-1,this}isZero(){return 0===this.x&&0===this.y}copy(t){return this.x=t.x,this.y=t.y,this}equals(t){return t.x===this.x&&t.y===this.y}nearEquals(t,s){return t.x.toFixed(s)===this.x.toFixed(s)&&t.y.toFixed(s)===this.y.toFixed(s)}lerp(t,s){return null===t?(this.x-=this.x*s,this.y-=this.y*s):(this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s),this}}class r{constructor(t={}){this.lock=t.lock||!1,this.neverlock=!1,this.isSpace=t.isSpace||!1,this.main=t.main||null,this.isUI=t.isUI||!1,this.group=t.group||null,this.isListen=!1,this.top=0,this.ytop=0,this.dx=t.dx||0,this.isSelectable=void 0!==t.selectable&&t.selectable,this.unselectable=void 0!==t.unselect?t.unselect:this.isSelectable,this.ontop=!!t.ontop&&t.ontop,this.css=this.main?this.main.css:h.css,this.colors=h.defineColor(t,this.main?this.group?this.group.colors:this.main.colors:h.colors),this.overEffect=this.colors.showOver,this.svgs=h.svgs,this.zone={x:0,y:0,w:0,h:0,d:0},this.local=(new n).neg(),this.isCanvasOnly=!1,this.isSelect=!1,this.p=void 0!==t.p?t.p:h.size.p,this.w=this.isUI?this.main.size.w:h.size.w,void 0!==t.w&&(this.w=t.w),this.h=this.isUI?this.main.size.h:h.size.h,void 0!==t.h&&(this.h=t.h),this.isSpace?this.lock=!0:this.h=this.h<11?11:this.h,this.fw=t.fw||0,this.autoWidth=t.auto||!0,this.isOpen=!1,this.radius=t.radius||this.colors.radius,this.transition=t.transition||h.transition,this.isNumber=!1,this.noNeg=t.noNeg||!1,this.allEqual=t.allEqual||!1,this.mono=!1,this.isEdit=!1,this.simple=t.simple||!1,this.simple&&(this.sa=0),this.setSize(this.w),void 0!==t.sa&&(this.sa=t.sa),void 0!==t.sb&&(this.sb=t.sb),this.simple&&(this.sb=this.w-this.sa),this.sc=void 0===t.sc?47:t.sc,this.objectLink=null,this.isSend=!1,this.objectKey=null,this.txt=t.name||"",this.name=t.rename||this.txt,this.target=t.target||null,this.callback=void 0===t.callback?null:t.callback,this.endCallback=null,this.openCallback=void 0===t.openCallback?null:t.openCallback,this.closeCallback=void 0===t.closeCallback?null:t.closeCallback,null===this.callback&&this.isUI&&null!==this.main.callback&&(this.callback=this.group?this.group.callback:this.main.callback),this.c=[],this.s=[],this.useFlex=!!this.isUI&&this.main.useFlex;let s=this.useFlex?"display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;":"float:left;";this.c[0]=h.dom("div",this.css.basic+s+"position:relative; height:20px;"),this.s[0]=this.c[0].style,this.margin=this.colors.sy,this.mtop=0;let i=h.isDivid(this.margin);if(this.isUI&&this.margin&&(this.s[0].boxSizing="content-box",i?(this.mtop=.5*this.margin,this.s[0].borderTop=this.mtop+"px solid transparent",this.s[0].borderBottom=this.mtop+"px solid transparent"):this.s[0].borderBottom=this.margin+"px solid transparent"),this.simple||(this.c[1]=h.dom("div",this.css.txt+this.css.middle),this.s[1]=this.c[1].style,this.c[1].textContent=this.name,this.s[1].color=this.lock?this.colors.titleoff:this.colors.title),t.pos){this.s[0].position="absolute";for(let s in t.pos)this.s[0][s]=t.pos[s];this.mono=!0}t.css&&(this.s[0].cssText=t.css)}init(){this.ytop=this.top+this.mtop,this.zone.h=this.h+this.margin,this.zone.w=this.w;let t=this.s,s=this.c;t[0].height=this.h+"px",this.isUI&&(t[0].background=this.colors.background),!this.autoWidth&&this.useFlex?(t[0].flex="1 0 auto",t[0].minWidth=this.minw+"px",t[0].textAlign="center"):this.isUI&&(t[0].width="100%"),void 0!==s[1]&&this.autoWidth&&(t[1]=s[1].style,t[1].top="1px",t[1].height=this.h-2+"px");let e=h.frag;for(let i=1,h=s.length;i!==h;i++)void 0!==s[i]&&(e.appendChild(s[i]),t[i]=s[i].style);let o=null!==this.target?this.target:this.isUI?this.main.inner:document.body;this.ontop?o.insertAdjacentElement("afterbegin",s[0]):o.appendChild(s[0]),s[0].appendChild(e),this.rSize(),this.isUI||(this.c[0].style.pointerEvents="auto",i.add(this))}addTransition(){this.baseH&&this.transition&&this.isUI&&(this.c[0].style.transition="height "+this.transition+"s ease-out")}dom(t,s,i,e,o){return h.dom(t,s,i,e,o)}setSvg(t,s,i,e,o){h.setSvg(t,s,i,e,o)}setCss(t,s){h.setCss(t,s)}clamp(t,s,i){return h.clamp(t,s,i)}getColorRing(){return h.colorRing||h.makeColorRing(),h.clone(h.colorRing)}getJoystick(t){return h["joystick_"+t]||h.makeJoystick(t),h.clone(h["joystick_"+t])}getCircular(t){return h.circular||h.makeCircular(t),h.clone(h.circular)}getKnob(t){return h.knob||h.makeKnob(t),h.clone(h.knob)}getPad2d(t){return h.pad2d||h.makePad(t),h.clone(h.pad2d)}cursor(t){i.cursor(t)}update(){}reset(){}content(){return this.c[0]}getDom(){return this.c[0]}uiout(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.background)}uiover(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.backgroundOver)}rename(t){void 0!==this.c[1]&&(this.c[1].textContent=t)}listen(){return this.isListen=i.addListen(this),this}listening(){if(null===this.objectLink)return;if(this.isSend)return;if(this.isEdit)return;return this.setValue(this.objectLink[this.objectKey])}setValue(t){const s=this.value;this.isNumber?this.value=this.numValue(t):this.value=t,this.update();let i=!1;return s!==this.value&&(i=!0),i}onChange(t){if(!this.isSpace)return this.callback=t||null,this}onFinishChange(t){if(!this.isSpace)return this.callback=null,this.endCallback=t,this}onOpen(t){return this.openCallback=t,this}onClose(t){return this.closeCallback=t,this}send(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.isSend=!0,null!==this.objectLink&&(this.objectLink[this.objectKey]=t),this.callback&&this.callback(t,this.objectKey),this.isSend=!1}sendEnd(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.endCallback&&this.endCallback(t),null!==this.objectLink&&(this.objectLink[this.objectKey]=t)}dispose(){this.isListen&&i.removeListen(this),h.clear(this.c[0]),null!==this.target?null!==this.group?this.group.clearOne(this):this.target.removeChild(this.c[0]):this.isUI?this.main.clearOne(this):document.body.removeChild(this.c[0]),this.isUI||i.remove(this),this.c=null,this.s=null,this.callback=null,this.target=null,this.isListen=!1}clear(){}getWidth(){let t=i.getWidth(this);t&&(this.w=t)}setSize(t){if(this.autoWidth)if(this.w=t,this.simple)this.sb=this.w-this.sa;else{let t=this.w*(this.p/100);this.sa=Math.floor(t+8),this.sb=Math.floor(this.w-t-16)}}rSize(){this.autoWidth&&(this.isUI||(this.s[0].width=this.w+"px"),this.simple||(this.s[1].width=this.sa+"px"))}setTypeNumber(t){let s;switch(this.isNumber=!0,this.value=0,void 0!==t.value&&("string"==typeof t.value?this.value=1*t.value:this.value=t.value),this.min=void 0===t.min?-1/0:t.min,this.max=void 0===t.max?1/0:t.max,this.precision=void 0===t.precision?2:t.precision,this.precision){case 0:s=1;break;case 1:s=.1;break;case 2:s=.01;break;case 3:s=.001;break;case 4:s=1e-4;break;case 5:s=1e-5;break;case 6:s=1e-6}this.step=void 0===t.step?s:t.step,this.range=this.max-this.min,this.value=this.numValue(this.value)}numValue(t){return this.noNeg&&(t=Math.abs(t)),1*Math.min(this.max,Math.max(this.min,t)).toFixed(this.precision)}handleEvent(t){if(!this.lock)return this.neverlock&&(i.lock=!1),this[t.type]?this[t.type](t):console.error(t.type,"this type of event no existe !")}wheel(t){return!1}mousedown(t){return!1}mousemove(t){return!1}mouseup(t){return!1}keydown(t){return!1}keyup(t){return!1}setReferency(t,s){this.objectLink=t,this.objectKey=s}display(t=!1){this.s[0].visibility=t?"visible":"hidden"}open(){this.isOpen||(this.isOpen=!0,i.needResize=!0,this.openCallback&&this.openCallback())}close(){this.isOpen&&(this.isOpen=!1,i.needResize=!0,this.closeCallback&&this.closeCallback())}needZone(){i.needReZone=!0}rezone(){i.needReZone=!0}select(){}unselect(){}setInput(t){i.setInput(t,this)}upInput(t,s){return i.upInput(t,s)}selected(t){this.isSelect=t||!1}}class l extends r{constructor(t={}){super(t),this.value=t.value||!1,this.model=void 0!==t.mode?t.mode:0,this.onName=t.rename||this.txt,t.onName&&(t.onname=t.onName),t.onname&&(this.onName=t.onname),this.inh=t.inh||Math.floor(.8*this.h),this.inw=t.inw||36;let s=this.colors;if(0===this.model){let t=Math.floor(.5*this.h)-.5*(this.inh-2);this.c[2]=this.dom("div",this.css.basic+"background:"+s.inputBg+"; height:"+(this.inh-2)+"px; width:"+this.inw+"px; top:"+t+"px; border-radius:10px; border:2px solid "+s.back),this.c[3]=this.dom("div",this.css.basic+"height:"+(this.inh-6)+"px; width:16px; top:"+(t+2)+"px; border-radius:10px; background:"+s.button+";")}else this.p=0,void 0!==this.c[1]&&(this.c[1].textContent=""),this.c[2]=this.dom("div",this.css.txt+this.css.button+"top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.borderSize+"px solid "+s.border+"; border-radius:"+this.radius+"px;");this.stat=-1,this.init(),this.update()}mousedown(t){return this.value=!this.value,this.update(!0),this.mousemove(t)}mousemove(t){return this.cursor("pointer"),this.mode(!0)}reset(){return this.cursor(),this.mode()}mode(t){let s,i=!1,e=this.colors,h=this.s,o=this.value;if(s=t?o?4:3:o?2:1,this.stat!==s){if(this.stat=s,0!==this.model){switch(s){case 1:h[2].color=e.text,h[2].background=e.button;break;case 2:h[2].color=e.textSelect,h[2].background=e.select;break;case 3:h[2].color=e.textOver,h[2].background=e.overoff;break;case 4:h[2].color=e.textOver,h[2].background=e.over}this.c[2].innerHTML=o?this.onName:this.name}else{switch(s){case 1:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.button;break;case 2:h[2].background=h[2].borderColor=e.back,h[3].background=e.textOver;break;case 3:h[2].background=h[2].borderColor=e.back,h[3].background=e.overoff;break;case 4:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.textSelect}h[3].marginLeft=o?"17px":"2px",this.c[1].textContent=o?this.onName:this.name}i=!0}return i}update(t){this.mode(),t&&this.send()}rSize(){super.rSize();let t=this.s,s=this.w-10-this.inw;0===this.model?(t[2].left=s+"px",t[3].left=s+"px"):(t[2].left=this.sa+"px",t[2].width=this.sb+"px")}}class a extends r{constructor(t={}){super(t),this.value="",void 0!==t.value&&(this.value=t.value),this.values=t.value||this.txt,t.values&&(this.values=t.values),t.values||t.value||(this.txt=""),this.onName=t.onName||null,this.on=!1,this.bw=t.forceWidth||0,t.bw&&(this.bw=t.bw),this.space=t.space||3,"string"==typeof this.values&&(this.values=[this.values]),this.isDown=!1,this.neverlock=!0,this.res=0,this.lng=this.values.length,this.tmp=[],this.stat=[];let s,i=this.colors;for(let t=0;te[i][0]&&s.x0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.text,this.setSvg(this.c[3],"stroke",s,1);break;case 1:this.s[2].color=i.textOver,this.setSvg(this.c[3],"stroke",i.backoff,0),s=this.model>0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.textOver,this.setSvg(this.c[3],"stroke",s,1)}return this.cmode=t,!0}reset(){this.isDown=!1}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"circular"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;if(s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=s.angle()-this.pi90,this.r=(this.r%this.twoPi+this.twoPi)%this.twoPi,null!==this.oldr){let t=this.r-this.oldr;this.r=Math.abs(t)>Math.PI?this.oldr:this.r,t>6&&(this.r=0),t<-6&&(this.r=this.twoPi)}let i=1/this.twoPi,e=this.r*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=~~(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("circular"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:sMath.PI?1:0)+" 1 "+i+","+e}update(t){if(this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range,this.setSvg(this.c[3],"d",this.makePath(),1),this.model>0){let t=this.colors,s=h.pack(h.lerpColor(h.unpack(h.ColorLuma(t.text,-.75)),h.unpack(t.text),this.percent));this.setSvg(this.c[3],"stroke",s,1)}t&&this.send()}}class d extends r{constructor(t={}){super(t),this.ctype=t.ctype||"hex",this.wfixe=256,this.cw=this.sb>256?256:this.sb,null!=t.cw&&(this.cw=t.cw),this.side=t.side||"down",this.up="down"===this.side?0:1,this.baseH=this.h,this.offset=new n,this.decal=new n,this.pp=new n;let s=this.colors;this.c[2]=this.dom("div",`${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${s.borderSize}px solid ${s.border};`),this.c[0].style.display="block",this.c[3]=this.getColorRing(),this.c[3].style.visibility="hidden",this.hsl=null,this.value="#ffffff",void 0!==t.value&&(t.value instanceof Array?this.value=h.rgbToHex(t.value):isNaN(t.value)?this.value=t.value:this.value=h.hexToHtml(t.value)),this.bcolor=null,this.isDown=!1,this.fistDown=!1,this.notext=t.notext||!1,this.tr=98,this.tsl=Math.sqrt(3)*this.tr,this.hue=0,this.d=256,this.init(),this.setColor(this.value),void 0!==t.open&&this.open()}testZone(t,s){let i=this.local;return-1===i.x&&-1===i.y?"":this.up&&this.isOpen?i.y>this.wfixe?"title":"color":i.ythis.tr)e=(c+u.pi90)/u.TwoPI,this.hue=(e+1)%1,this.setHSL([(e+1)%1,this.hsl[1],this.hsl[2]]);else{l=s.x*this.ratio,a=s.y*this.ratio;let t=this.hue*u.TwoPI+u.PI;t<0&&(t+=2*u.PI),r=Math.atan2(-a,l),r<0&&(r+=2*u.PI);let i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,h=.5*this.tr,c=Math.tan(e)*h,d=Math.sqrt(l*l+a*a),p=Math.sqrt(h*h+c*c);if(d>p){let s=Math.tan(e)*d,o=Math.atan(s/p);o>u.pi60?o=u.pi60:o<-u.pi60&&(o=-u.pi60),r+=o-e,i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,c=Math.tan(e)*h,d=p=Math.sqrt(h*h+c*c)}n=Math.sin(i)*d/this.tsl+.5;let m=1-2*Math.abs(n-.5);o=(Math.cos(i)*d+this.tr/2)/(1.5*this.tr)/m,o=u.clamp(o,0,1),this.setHSL([this.hsl[0],o,n])}}setHeight(){this.h=this.isOpen?this.wfixe+this.baseH+5:this.baseH,this.s[0].height=this.h+"px",this.zone.h=this.h}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(){super.open(),this.setHeight(),this.up&&(this.zone.y-=this.wfixe+5);let t=this.h-this.baseH;this.s[3].visibility="visible",this.parentHeight(t)}close(){super.close(),this.up&&(this.zone.y+=this.wfixe+5);let t=this.h-this.baseH;this.setHeight(),this.s[3].visibility="hidden",this.parentHeight(-t)}update(t){let s=h.rgbToHex(h.hslToRgb([this.hsl[0],1,.5]));this.moveMarkers(),this.value=this.bcolor,this.setSvg(this.c[3],"fill",s,2,0),this.s[2].background=this.bcolor,this.notext||(this.c[2].textContent=h.htmlToHex(this.bcolor)),this.invert=h.findDeepInver(this.rgb),this.s[2].color=this.invert?"#fff":"#000",t&&("array"===this.ctype&&this.send(this.rgb),"rgb"===this.ctype&&this.send(h.htmlRgb(this.rgb)),"hex"===this.ctype&&this.send(h.htmlToHex(this.value)),"html"===this.ctype&&this.send())}setValue(t){t instanceof Array?this.value=h.rgbToHex(t):isNaN(t)?this.value=t:this.value=h.hexToHtml(t),this.setColor(this.value),this.update()}setColor(t){let s=h.unpack(t);return this.bcolor!==t&&s&&(this.bcolor=t,this.rgb=s,this.hsl=h.rgbToHsl(this.rgb),this.hue=this.hsl[0],this.update()),this}setHSL(t){return this.hsl=t,this.rgb=h.hslToRgb(t),this.bcolor=h.rgbToHex(this.rgb),this.update(!0),this}moveMarkers(){let t=this.pp,s=h;this.invert;let i=this.hsl[0]*s.TwoPI,e=2/3*s.PI,o=this.tr,n=this.hsl[0],r=this.hsl[1],l=this.hsl[2],a=(i-s.pi90)*s.todeg;n=-i+s.pi90;let c=Math.cos(n)*o,d=-Math.sin(n)*o,u=Math.cos(n-e)*o,p=-Math.sin(n-e)*o,m=Math.cos(n+e)*o,g=-Math.sin(n+e)*o,x=(u+m)/2,v=(p+g)/2;i=(1-2*Math.abs(l-.5))*r;let f=u+(m-u)*l+(c-x)*i,b=p+(g-p)*l+(d-v)*i;t.set(f,b).addScalar(128),this.setSvg(this.c[3],"transform","rotate("+a+" )",2),this.setSvg(this.c[3],"cx",t.x,3),this.setSvg(this.c[3],"cy",t.y,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",2,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",3),this.setSvg(this.c[3],"fill",this.bcolor,3)}rSize(){super.rSize();let t=this.s;t[2].width=this.sb+"px",t[2].left=this.sa+"px",this.cw=this.sb>256?256:this.sb,this.rSizeColor(this.cw),this.decal.x=Math.floor(.5*(this.w-this.wfixe))}rSizeColor(t){if(t===this.wfixe)return;this.wfixe=t;let s=this.s;this.decal.y="up"===this.side?2:this.baseH+2,this.mid=Math.floor(.5*this.wfixe),this.setSvg(this.c[3],"viewBox","0 0 "+this.wfixe+" "+this.wfixe),s[3].width=this.wfixe+"px",s[3].height=this.wfixe+"px",s[3].top=this.decal.y+"px",this.ratio=256/this.wfixe,this.square=1/(this.wfixe/256*60),this.setHeight()}}class u extends r{constructor(t={}){super(t),this.round=Math.round,this.baseH=this.h,this.hplus=t.hplus||50,this.res=t.res||40,this.l=1,this.precision=t.precision||0,this.custom=t.custom||!1,this.names=t.names||["FPS","MS"];let s=t.cc||["220,220,220","255,255,0"];this.adding=t.adding||!1,this.range=t.range||[165,100,100],this.alpha=t.alpha||.25,this.values=[],this.points=[],this.textDisplay=[],this.custom||(this.now=i.getTime(),this.startTime=0,this.prevTime=0,this.frames=0,this.ms=0,this.fps=0,this.mem=0,this.mm=0,this.isMem=!(!self.performance||!self.performance.memory),this.isMem&&(this.names.push("MEM"),s.push("0,255,255")),this.txt=t.name||"Fps");let e=Math.floor(.5*this.h)-3;const h=this.colors;this.c[1].textContent=this.txt,this.c[0].style.cursor="pointer",this.c[0].style.pointerEvents="auto";let o="display:none; left:10px; top:"+this.h+"px; height:"+(this.hplus-8)+"px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid "+h.border+";";0!==this.radius&&(o+="border-radius:"+this.radius+"px;"),this.c[2]=this.dom("path",this.css.basic+o,{}),this.c[2].setAttribute("viewBox","0 0 "+this.res+" 50"),this.c[2].setAttribute("height","100%"),this.c[2].setAttribute("width","100%"),this.c[2].setAttribute("preserveAspectRatio","none"),this.c[3]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; left:0; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.c[4]=this.dom("div",this.css.txt+"position:absolute; left:10px; top:"+(this.h+2)+"px; display:none; width:100%; text-align:center;"),t.bottomLine&&(this.c[4]=this.dom("div",this.css.basic+"width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);")),this.isShow=!1;let n=this.s;n[1].lineHeight=this.h-4,n[1].color=h.text,0!==this.radius&&(n[0].borderRadius=this.radius+"px"),"none"!==this.colors.gborder&&(n[0].border="1px solid "+h.gborder);let r=0;for(r=0;r "+this.names[r]+" ")}for(r=this.names.length;r--;)this.dom("path",null,{fill:"rgba("+s[r]+","+this.alpha+")","stroke-width":1,stroke:"rgba("+s[r]+",1)","vector-effect":"non-scaling-stroke"},this.c[2]);this.init()}mousedown(t){this.isShow?this.close():this.open()}tick(t){this.values=t,this.isShow&&(this.drawGraph(),this.upText())}makePath(t){let s="";s+="M -1 50";for(let i=0;i";this.c[4].innerHTML=i}drawGraph(){let t,s=this.c[2],i=this.names.length,e=0,h=0;for(;i--;)t=this.adding?(this.values[h]+e)*this.range[h]:this.values[h]*this.range[h],this.points[h].shift(),this.points[h].push(50-t),this.setSvg(s,"d",this.makePath(this.points[h]),i+1),e+=this.values[h],h++}open(){super.open(),this.h=this.hplus+this.baseH,this.setSvg(this.c[3],"d",this.svgs.g2),null!==this.group?this.group.calc(this.hplus):this.isUI&&this.main.calc(this.hplus),this.s[0].height=this.h+"px",this.s[2].display="block",this.s[4].display="block",this.isShow=!0,this.custom||i.addListen(this)}close(){super.close(),this.h=this.baseH,this.setSvg(this.c[3],"d",this.svgs.g1),null!==this.group?this.group.calc(-this.hplus):this.isUI&&this.main.calc(-this.hplus),this.s[0].height=this.h+"px",this.s[2].display="none",this.s[4].display="none",this.isShow=!1,this.custom||i.removeListen(this),this.c[4].innerHTML=""}begin(){this.startTime=this.now()}end(){let t=this.now();if(this.ms=t-this.startTime,this.frames++,t>this.prevTime+1e3&&(this.fps=this.round(1e3*this.frames/(t-this.prevTime)),this.prevTime=t,this.frames=0,this.isMem)){let t=performance.memory.usedJSHeapSize,s=performance.memory.jsHeapSizeLimit;this.mem=this.round(954e-9*t),this.mm=t/s}return this.values=[this.fps,this.ms,this.mm],this.drawGraph(),this.upText([this.fps,this.ms,this.mem]),t}listening(){this.custom||(this.startTime=this.end())}rSize(){let t=this.s,s=this.w;t[3].left=this.sa+this.sb-6+"px",t[0].width=s+"px",t[1].width=s+"px",t[2].left="10px",t[2].width=s-20+"px",t[4].width=s-20+"px"}}class p extends r{constructor(t={}){super(t),this.value=void 0!==t.value?t.value:[0,0,0],this.lng=this.value.length,this.precision=void 0!==t.precision?t.precision:2,this.multiplicator=t.multiplicator||1,this.neg=t.neg||!1,this.line=void 0===t.line||t.line,this.autoWidth=void 0===t.autoWidth||t.autoWidth,this.isNumber=!1,this.isDown=!1,this.h=t.h||138,this.rh=this.h-10,this.top=0,this.c[0].style.width=this.w+"px",void 0!==this.c[1]&&(this.c[1].style.width=this.w+"px",this.autoWidth||(this.c[1].style.width="100%",this.c[1].style.justifyContent="center"),this.top=10,this.h+=10),this.gh=this.rh-28,this.gw=this.w-28,this.c[2]=this.dom("div",this.css.txt+"display:block; text-align:center; padding:0px 0px; top:"+(this.h-20)+"px; left:14px; width:"+this.gw+"px; color:"+this.colors.text),this.c[2].innerHTML=this.valueToHtml();let s=this.dom("svg",this.css.basic,{viewBox:"0 0 "+this.w+" "+this.rh,width:this.w,height:this.rh,preserveAspectRatio:"none"});this.setCss(s,{width:this.w,height:this.rh,left:0,top:this.top}),this.dom("path","",{d:"",stroke:this.colors.text,"stroke-width":2,fill:"none","stroke-linecap":"butt"},s),this.dom("rect","",{x:10,y:10,width:this.gw+8,height:this.gh+8,stroke:"rgba(0,0,0,0.3)","stroke-width":1,fill:"none"},s),this.iw=(this.gw-4*(this.lng-1))/this.lng;let i=[];this.cMode=[],this.v=[];for(let t=0;t',e="width:"+100/this.lng+"%;";for(;t--;)s===this.lng-1?i+=""+this.value[s]+"":i+=""+this.value[s]+"",s++;return i}updateSVG(){this.line&&this.setSvg(this.c[3],"d",this.makePath(),0);for(let t=0;tthis.top&&s.ye[i][0]&&s.xthis.distance){let t=Math.atan2(this.tmp.x,this.tmp.y);this.tmp.x=Math.sin(t)*this.distance,this.tmp.y=Math.cos(t)*this.distance}this.pos.copy(this.tmp).divideScalar(this.distance).negate(),this.update()}setValue(t){void 0===t&&(t=[0,0]),this.pos.set(t[0]||0,t[1]||0),this.updateSVG()}update(t){void 0===t&&(t=!0),null!==this.interval&&(this.isDown||(this.pos.lerp(null,.3),this.pos.x=Math.abs(this.pos.x)<.01?0:this.pos.x,this.pos.y=Math.abs(this.pos.y)<.01?0:this.pos.y,this.isUI&&this.main.isCanvas&&this.main.draw())),this.updateSVG(),t&&this.send(),this.pos.isZero()&&this.stopInterval()}updateSVG(){let t=.5*this.diam- -this.pos.x*this.distance,s=.5*this.diam- -this.pos.y*this.distance;if(0===this.model){let i=t+5*this.pos.x+5,e=s+5*this.pos.y+10;this.setSvg(this.c[3],"cx",i*this.ratio,3),this.setSvg(this.c[3],"cy",e*this.ratio,3)}else this.setSvg(this.c[3],"cx",t*this.ratio,3),this.setSvg(this.c[3],"cy",s*this.ratio,3);this.setSvg(this.c[3],"cx",t*this.ratio,4),this.setSvg(this.c[3],"cy",s*this.ratio,4),this.value[0]=1*(this.pos.x*this.multiplicator).toFixed(this.precision),this.value[1]=1*(this.pos.y*this.multiplicator).toFixed(this.precision),this.haveText&&(this.c[2].textContent=this.value)}clear(){this.stopInterval(),super.clear()}}class v extends r{constructor(t={}){super(t),this.isCyclic=t.cyclic||!1,this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.autoWidth=!1,this.setTypeNumber(t),this.minw=this.w,this.diam=t.diam||this.w,this.mPI=.8*Math.PI,this.toDeg=180/Math.PI,this.cirRange=2*this.mPI,this.offset=new n,this.h=t.h||this.w+10,this.c[0].style.width=this.w+"px",this.c[0].style.display="block",void 0!==this.c[1]&&(this.c[1].style.width="100%",this.c[1].style.justifyContent="center",this.top=10,this.h+=10),this.percent=0,this.cmode=0;let s=this.colors;this.c[2]=this.dom("div",this.css.txt+"justify-content:center; top:"+(this.h-20)+"px; width:100%; color:"+s.text),this.c[3]=this.getKnob(),this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1),this.setSvg(this.c[3],"stroke",s.text,3),this.setSvg(this.c[3],"d",this.makeGrad(),3),this.setSvg(this.c[3],"viewBox","0 0 "+this.diam+" "+this.diam),this.setCss(this.c[3],{width:this.diam,height:this.diam,left:0,top:this.top}),this.model>0&&(h.dom("path","",{d:"",stroke:s.text,"stroke-width":2,fill:"none","stroke-linecap":"round"},this.c[3]),2==this.model&&(h.addSVGGlowEffect(),this.setSvg(this.c[3],"style",'filter: url("#UILGlow");',4))),this.r=0,this.init(),this.update()}mode(t){let s=this.colors;if(this.cmode===t)return!1;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1);break;case 1:this.s[2].color=s.textOver,this.setSvg(this.c[3],"fill",s.select,0),this.setSvg(this.c[3],"stroke",s.textOver,1)}return this.cmode=t,!0}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"knob"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=-Math.atan2(s.x,s.y),null!==this.oldr&&(this.r=Math.abs(this.r-this.oldr)>Math.PI?this.oldr:this.r),this.r=this.r>this.mPI?this.mPI:this.r,this.r=this.r<-this.mPI?-this.mPI:this.r;let i=1/this.cirRange,e=(this.r+this.mPI)*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=Math.floor(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("knob"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s5?(s=this.range/this.step,t=(a-c)/s):(t=(a-c)/l*2,s=32);for(let c=0;c<=s;++c)i=a-t*c,e=l+44*Math.sin(i),h=l+44*Math.cos(i),o=l+40*Math.sin(i),n=l+40*Math.cos(i),r+="M"+e+" "+h+" L"+o+" "+n+" ";return r}update(t){this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range;let s=Math.PI+this.mPI,i=this.percent*this.cirRange-this.mPI,e=Math.sin(i),o=Math.cos(i),n=25*e+64,r=-25*o+64,l=20*e+64,a=-20*o+64;if(this.setSvg(this.c[3],"d","M "+n+" "+r+" L "+l+" "+a,1),this.model>0){let t=36*Math.sin(s)+64,n=36*Math.cos(s)+64,r=36*e+64,l=-36*o+64,a=i<=Math.PI-this.mPI?0:1;this.setSvg(this.c[3],"d","M "+t+","+n+" A 36,36 1 "+a+" 1 "+r+","+l,4);let c=h.pack(h.lerpColor(h.unpack(h.ColorLuma(this.colors.text,-.75)),h.unpack(this.colors.text),this.percent));this.setSvg(this.c[3],"stroke",c,4)}t&&this.send()}}class f extends r{constructor(t={}){super(t),this.hideCurrent=!1,this.path=t.path||"",this.format=t.format||"",this.isWithImage=""!==this.path,this.preLoadComplete=!1,this.tmpImage={},this.tmpUrl=[],this.m=void 0!==t.m?t.m:5;let s=t.align||"left",i=t.scrollSize||10;this.ss=i+1,this.sMode=0,this.tMode=0,this.listOnly=t.listOnly||!1,this.staticTop=t.staticTop||!1,this.isSelectable=this.listOnly,void 0!==t.select&&(t.selectable=t.select),void 0!==t.selectable&&(this.isSelectable=t.selectable),""===this.txt&&(this.p=0);let e=Math.floor(.5*this.h)-3,h=this.colors;if(this.c[2]=this.dom("div",this.css.basic+"top:0; display:none; border-radius:"+this.radius+"px;"),this.c[3]=this.dom("div",this.css.item+"padding:0px "+this.m+"px; margin-bottom:0px; position:absolute; justify-content:"+s+"; text-align:"+s+"; line-height:"+(this.h-4)+"px; top:1px; background:"+h.button+"; height:"+(this.h-2)+"px; border:1px solid "+h.border+"; border-radius:"+this.radius+"px;"),this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.scrollerBack=this.dom("div",this.css.basic+"right:0px; width:"+i+"px; background:"+h.back+"; display:none;"),this.scroller=this.dom("div",this.css.basic+"right:"+.5*(i-.25*i)+"px; width:"+.25*i+"px; background:"+h.text+"; display:none; "),this.c[3].style.color=h.text,this.list=[],this.refObject=null,t.list)if(t.list instanceof Array)this.list=t.list;else if(t.list instanceof Object){this.refObject=t.list;for(let t in this.refObject)this.list.push(t)}this.items=[],this.prevName="",this.tmpId=0,this.baseH=this.h,this.itemHeight=t.itemHeight||this.h,this.full=t.full||!1,this.py=0,this.ww=this.sb,this.scroll=!1,this.isDown=!1,this.current=null,this.side=t.side||"down",this.up="down"===this.side?0:1,this.up?(this.c[2].style.top="auto",this.c[3].style.top="auto",this.c[4].style.top="auto",this.c[2].style.bottom=this.h-2+"px",this.c[3].style.bottom="1px",this.c[4].style.bottom=e+"px"):this.c[2].style.top=this.baseH+"px",this.listIn=this.dom("div",this.css.basic+"left:0; top:0; width:100%; background:none;"),this.listIn.name="list",this.topList=0,this.c[2].appendChild(this.listIn),this.c[2].appendChild(this.scrollerBack),this.c[2].appendChild(this.scroller),void 0!==t.value?isNaN(t.value)?this.value=t.value:this.value=this.list[t.value]:this.value=this.list[0],this.isOpenOnStart=t.open||!1,this.listOnly&&(this.baseH=5,this.c[3].style.display="none",this.c[4].style.display="none",this.c[2].style.top=this.baseH+"px",this.isOpenOnStart=!0),this.miniCanvas=t.miniCanvas||!1,this.canvasBg=t.canvasBg||"rgba(0,0,0,0)",this.imageSize=t.imageSize||[20,20],this.drag=t.drag||!1,this.dragout=t.dragout||!1,this.dragstart=t.dragstart||null,this.dragend=t.dragend||null,this.setList(this.list),this.init(),this.isWithImage&&this.preloadImage(),this.isOpenOnStart&&this.open(!0),this.baseH+=this.mtop}preloadImage(){this.preLoadComplete=!1,this.tmpImage={};for(let t=0;tthis.h-this.baseH)return"title";if(this.scroll&&s.x>this.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}else{if(s.ythis.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}}return""}testItems(t){let s,i,e,h="",o=this.items,n=o.length;for(;n--;)if(s=o[n],i=s.posy+this.topList,e=s.posy+this.itemHeight+1+this.topList,t>=i&&t<=e)return h="item"+n,this.modeItem(0),this.current=s,this.modeItem(1),h;return h}modeItem(t){if(!this.current)return;this.current.select&&0===t&&(t=2);let s=this.colors;switch(t){case 0:this.current.style.background=s.back,this.current.style.color=s.text;break;case 1:this.current.style.background=s.over,this.current.style.color=s.textOver;break;case 2:this.current.style.background=s.select,this.current.style.color=s.textSelect}}unSelected(){this.current&&(this.modeItem(0),this.current=null)}selected(){this.current&&(this.resetItems(),this.modeItem(2),this.current.select=!0)}resetItems(){let t=this.items.length;for(;t--;)this.items[t].select=!1,this.items[t].style.background=this.colors.back,this.items[t].style.color=this.colors.text}hideActive(){this.hideCurrent&&(this.current&&(this.tmpId=this.current.id),this.resetHide())}resetHide(){console.log(this.tmpId);let t=this.items.length;for(;t--;)t===this.tmpId?(this.items[t].style.height="0px",this.items[t].posy=-1):(this.items[t].style.height=this.itemHeight+"px",this.items[t].posy=(this.itemHeight+1)*(t-1))}mouseup(t){this.isDown=!1}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s?(this.isDown=!0,this.mousemove(t)):"title"===s?(this.modeTitle(2),this.listOnly||(this.hideActive(),this.isOpen?this.close():this.open())):this.current&&(this.value=this.list[this.current.id],this.isSelectable&&this.selected(),this.send(this.value),this.listOnly||(this.close(),this.setTopItem())),!0)}mousemove(t){let s=!1,i=this.testZone(t);if(!i)return s;if("title"===i)this.unSelected(),this.modeTitle(1),this.cursor("pointer");else if("scroll"===i){if(this.cursor("s-resize"),this.modeScroll(1),this.isDown){this.modeScroll(2);let s=this.zone.y+this.baseH-2;this.update(t.clientY-s-.5*this.sh)}}else this.modeTitle(0),this.modeScroll(0),this.cursor("pointer");return i!==this.prevName&&(s=!0),this.prevName=i,s}wheel(t){return"title"!==this.testZone(t)&&(this.py+=10*t.delta,this.update(this.py),!0)}reset(){this.prevName="",this.unSelected(),this.modeTitle(0),this.modeScroll(0)}modeScroll(t){if(t===this.sMode)return;let s=this.scroller.style,i=this.colors;switch(t){case 0:s.background=i.text;break;case 1:case 2:s.background=i.select}this.sMode=t}modeTitle(t){if(t===this.tMode)return;let s=this.s,i=this.colors;switch(t){case 0:s[3].color=i.text,s[3].background=i.button;break;case 1:s[3].color=i.textOver,s[3].background=i.overoff;break;case 2:s[3].color=i.textSelect,s[3].background=i.overoff}this.tMode=t}clearList(){for(;this.listIn.children.length;)this.listIn.removeChild(this.listIn.lastChild);this.items=[]}setList(t){this.clearList(),this.list=t,this.length=this.list.length;let s,e,h=this.hideCurrent?this.length-1:this.length;this.maxItem=this.full?h:5,this.maxItem=hthis.maxHeight&&(this.ww=this.sb-this.ss,this.scroll=!0),this.miniCanvas&&(this.tmpCanvas=document.createElement("canvas"),this.tmpCanvas.width=this.imageSize[0],this.tmpCanvas.height=this.imageSize[1],this.tmpCtx=this.tmpCanvas.getContext("2d"),this.tmpCtx.fillStyle=this.canvasBg,this.tmpCtx.fillRect(0,0,this.imageSize[0],this.imageSize[1]));for(let t=0;tthis.range?this.range:t,this.topList=-Math.floor(t/this.ratio),this.listIn.style.top=this.topList+"px",this.scroller.style.top=Math.floor(t)+"px",this.py=t)}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(t){super.open(),this.update(0),this.h=this.maxHeight+this.baseH+5,this.scroll?(this.scroller.style.display="block",this.scrollerBack.style.display="block"):(this.topList=0,this.h=this.baseH+5+this.max,this.scroller.style.display="none",this.scrollerBack.style.display="none"),this.s[0].height=this.h+"px",this.s[2].display="block",this.up?(this.zone.y-=this.h-(this.baseH-10),this.setSvg(this.c[4],"d",this.svgs.g1)):this.setSvg(this.c[4],"d",this.svgs.g2),this.rSizeContent();let s=this.h-this.baseH;this.zone.h=this.h,t||this.parentHeight(s)}close(){super.close(),this.up&&(this.zone.y+=this.h-(this.baseH-10));let t=this.h-this.baseH;this.h=this.baseH,this.s[0].height=this.h+"px",this.s[2].display="none",this.setSvg(this.c[4],"d",this.svgs.g1),this.zone.h=this.h,this.parentHeight(-t)}text(t){this.c[3].textContent=t}rSizeContent(){let t=this.length;for(;t--;)this.listIn.children[t].style.width=this.ww+"px"}rSize(){super.rSize();let t=this.s,s=this.sb,i=this.sa;void 0!==t[2]&&(t[2].width=s+"px",t[2].left=i+"px",t[3].width=s+"px",t[3].left=i+"px",t[4].left=i+s-15+"px",this.ww=s,this.max>this.maxHeight&&(this.ww=s-this.ss),this.isOpen&&this.rSizeContent())}}class b extends r{constructor(t={}){super(t),this.setTypeNumber(t),this.allway=t.allway||!1,this.isDown=!1,this.value=[0],this.multy=1,this.invmulty=1,this.isSingle=!0,this.isAngle=!1,this.isVector=!1,t.isAngle&&(this.isAngle=!0,this.multy=h.torad,this.invmulty=h.todeg),this.isDrag=t.drag||!1,void 0!==t.value&&(isNaN(t.value)?t.value instanceof Array?(this.value=t.value,this.isSingle=!1):t.value instanceof Object&&(this.value=[],void 0!==t.value.x&&(this.value[0]=t.value.x),void 0!==t.value.y&&(this.value[1]=t.value.y),void 0!==t.value.z&&(this.value[2]=t.value.z),void 0!==t.value.w&&(this.value[3]=t.value.w),this.isSingle=!1,this.isVector=!0):this.value=[t.value]),this.lng=this.value.length,this.tmp=[],this.current=-1,this.prev={x:0,y:0,d:0,v:0};let s=this.colors;this.c[2]=this.dom("div",this.css.basic+" background:"+s.select+"; top:4px; width:0px; height:"+(this.h-8)+"px;"),this.cMode=[];let i=this.lng;for(;i--;)this.isAngle&&(this.value[i]=(180*this.value[i]/Math.PI).toFixed(this.precision)),this.c[3+i]=this.dom("div",this.css.txtselect+"top:1px; height:"+(this.h-2)+"px; color:"+s.text+"; background:"+s.back+"; borderColor:"+s.border+"; border-radius:"+this.radius+"px;"),t.center&&(this.c[2+i].style.textAlign="center"),this.c[3+i].textContent=this.value[i],this.c[3+i].style.color=this.colors.text,this.c[3+i].isNum=!0,this.cMode[i]=0;this.selectId=3+this.lng,this.c[this.selectId]=this.dom("div",this.css.txtselect+"position:absolute; top:2px; height:"+(this.h-4)+"px; padding:0px 0px; width:0px; color:"+s.textSelect+"; background:"+s.select+"; border:none; border-radius:0px;"),this.cursorId=4+this.lng,this.c[this.cursorId]=this.dom("div",this.css.basic+"top:2px; height:"+(this.h-4)+"px; width:0px; background:"+s.text+";"),this.init()}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";let i=this.lng,e=this.tmp;for(;i--;)if(s.x>e[i][0]&&s.x 0";this.easing=t.easing||1,this.setTypeNumber(t),this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.isDown=!1,this.isOver=!1,this.allway=t.allway||!1,this.isDeg=t.isDeg||!1,this.isCyclic=t.cyclic||!1,this.firstImput=!1;let s=this.colors;if(this.c[2]=this.dom("div",this.css.txtselect+"border:none; background:none; width:47px; color:"+s.text+";"),this.c[3]=this.dom("div",this.css.basic+" top:0; height:"+this.h+"px;"),this.c[4]=this.dom("div",this.css.basic+"background:"+s.back+"; top:2px; height:"+(this.h-4)+"px;"),this.c[5]=this.dom("div",this.css.basic+"left:4px; top:5px; height:"+(this.h-10)+"px; background:"+s.text+";"),this.c[2].isNum=!0,this.c[2].style.height=this.h-2+"px",this.c[2].style.lineHeight=this.h-10+"px",0!==this.model){let t=4,i=4,e=8,h=this.h-6,o=16;2===this.model&&(t=0,i=2,e=4,o=2,h=.5*(this.h-6)),3===this.model&&(this.c[5].style.visible="none"),this.c[4].style.borderRadius=t+"px",this.c[4].style.height=e+"px",this.c[4].style.top=.5*this.h-i+"px",this.c[5].style.borderRadius=.5*t+"px",this.c[5].style.height=i+"px",this.c[5].style.top=.5*this.h-.5*i+"px",this.c[6]=this.dom("div",this.css.basic+"border-radius:"+o+"px; margin-left:"+.5*-h+"px; background:"+s.text+"; left:4px; top:3px; height:"+(this.h-6)+"px; width:"+h+"px;")}this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>=this.txl?"text":s.x>=this.sa?"scroll":""}mouseup(t){this.isDown&&(this.isDown=!1)}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s&&(this.isDown=!0,this.old=this.value,this.mousemove(t)),!0)}mousemove(t){let s=!1;if("scroll"===this.testZone(t)?(this.mode(1),this.cursor("w-resize")):this.cursor(),this.isDown){let i=(t.clientX-(this.zone.x+this.sa)-3)/this.ww;i=Math.min(1,Math.max(0,i));let e=Math.pow(i,this.easing)*this.range+this.min,h=i*this.range+this.min;this.sliderValue=this.numValue(h);let o,n=e-this.old;(n>=this.step||n<=this.step)&&(o=Math.floor(n/this.step),this.value=this.numValue(this.old+o*this.step),this.update(!0),this.old=this.value),s=!0}return s}wheel(t){if("scroll"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s=this.sa?"text":""}mouseup(t){if(this.editable)return!!this.isDown&&(this.isDown=!1,this.mousemove(t))}mousedown(t){if(!this.editable)return;let s=this.testZone(t);return!this.isDown&&(this.isDown=!0,"text"===s&&this.setInput(this.c[2]),this.mousemove(t))}mousemove(t){if(!this.editable)return;let s=0;return"text"===this.testZone(t)?this.cursor("text"):this.cursor(),this.isDown&&(s=t.clientX-this.zone.x),this.upInput(s-this.sa-3,this.isDown)}update(){this.c[2].textContent=this.value}reset(){this.cursor()}select(t,s,i,e){let h=this.s,o=this.sa+5;h[4].width="1px",h[4].left=o+s+"px",h[3].left=o+s+"px",h[3].width=i+"px",this.c[3].innerHTML=e}unselect(){let t=this.s;t&&(t[3].width="0px",this.c[3].innerHTML="t",t[4].width="0px")}validate(t){this.allway&&(t=!0),this.value=this.c[2].textContent,""!==this.value?this.c[5].textContent="":this.c[5].textContent=this.placeHolder,t&&this.send()}rSize(){super.rSize();let t=this.s;t[2].left=this.sa+"px",t[2].width=this.sb+"px",t[5].left=this.sa+"px",t[5].width=this.sb+"px"}}class k extends r{constructor(t={}){super(t);let s=t.prefix||"";this.c[2]=this.dom("div",this.css.txt+"justify-content:right; width:60px; line-height:"+(this.h-8)+"px; color:"+this.colors.text),31===this.h&&(this.s[0].height=this.h+"px",this.s[1].top="8px",this.c[2].style.top="8px");let i=this.s;i[1].justifyContent=t.align||"left",i[1].fontWeight=t.fontWeight||"bold",this.c[1].textContent=this.txt.substring(0,1).toUpperCase()+this.txt.substring(1).replace("-"," "),this.c[2].textContent=s,this.init()}text(t){this.c[1].textContent=t}text2(t){this.c[2].textContent=t}rSize(){super.rSize(),this.s[1].width=this.w+"px",this.s[2].left=this.w+"px"}setColor(t){this.s[1].color=t,this.s[2].color=t}}class S extends r{constructor(t={}){super(t),this.value=t.value||"",this.isDown=!1,this.onActif=t.onActif||function(){};const s=this.colors;this.c[2]=this.dom("div",this.css.txt+this.css.button+" top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.buttonBorder+"; border-radius:15px; width:30px; left:10px;"),this.c[3]=this.dom("div",this.css.txtselect+"height:"+(this.h-4)+"px; background:"+s.inputBg+"; borderColor:"+s.inputBorder+"; border-radius:"+this.radius+"px;"),this.c[3].textContent=this.value;let i=Math.floor(.5*this.h)-7;this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:14px; height:14px; left:5px; top:"+i+"px;",{d:this.svgs.cursor,fill:s.text,stroke:"none"}),this.stat=1,this.isActif=!1,this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>this.sa&&s.xthis.sa&&s.xi[r][0]&&s.xe[r][0]&&s.ythis.lng-1&&(h=-1)),h}mouseup(t){return!!this.isDown&&(this.isDown=!1,-1!==this.res&&(this.value=this.values[this.res],this.send()),this.mousemove(t))}mousedown(t){return!this.isDown&&(this.isDown=!0,this.mousemove(t))}mousemove(t){let s=!1;return this.res=this.testZone(t),-1!==this.res?(this.cursor("pointer"),s=this.modes(this.isDown?3:2,this.res)):s=this.reset(),s}modes(t=1,s=-1){let i,e,h=this.lng,o=!1;for(;h--;)e=t,i=!!this.isSelectable&&this.values[h]===this.value,h===s?i&&2===e&&(e=3):(e=1,i&&(e=4)),this.mode(e,h)&&(o=!0);return o}mode(t,s){let i=!1,e=this.colors,h=this.buttons,o=s;if(this.stat[s]!==t){switch(this.stat[s]=t,t){case 1:h[o].style.color=e.text,h[o].style.background=e.button;break;case 2:h[o].style.color=e.textOver,h[o].style.background=e.overoff;break;case 3:h[o].style.color=e.textOver,h[o].style.background=e.over;break;case 4:h[o].style.color=e.textSelect,h[o].style.background=e.select}i=!0}return i}reset(){return this.res=-1,this.cursor(),this.modes()}label(t,s){this.buttons[s].textContent=t}icon(t,s,i){this.buttons[i].style.padding=(s||0)+"px 0px",this.buttons[i].innerHTML=t}testW(){let t=!1;if(3*this.spaces[0]+2*this.bsizeMax>this.w?(this.bsize[0]=.5*(this.w-3*this.spaces[0]),t=!0):this.bsize[0]!==this.bsizeMax&&(this.bsize[0]=this.bsizeMax,t=!0),!t)return;let s=this.buttons.length;for(;s--;)this.buttons[s].style.width=this.bsize[0]+"px"}rSize(){let t;super.rSize(),this.testW(),this.tmpX=[],this.tmpY=[];for(let s=0;sthis.h-this.c[2].offsetHeight?"text":"pad"}mouseup(t){return this.isDown=!1,this.mode(0)}mousedown(t){if("pad"===this.testZone(t))return this.isDown=!0,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=.5*this.w-(t.clientX-this.zone.x),i=.5*this.diam-(t.clientY-this.zone.y-this.ytop),e=256/this.diam;s=-s*e,i=-i*e,s=h.clamp(s,-this.maxPos,this.maxPos),i=h.clamp(i,-this.maxPos,this.maxPos),this.setPos([s,i]),this.update(!0)}mode(t){if(this.cmode===t)return!1;let s=this.colors;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.back,0),this.setSvg(this.c[3],"fill",s.button,1),this.setSvg(this.c[3],"stroke",s.back,2),this.setSvg(this.c[3],"stroke",s.back,3),this.setSvg(this.c[3],"stroke",s.text,4);break;case 1:this.s[2].color=s.textSelect,this.setSvg(this.c[3],"fill",s.backoff,0),this.setSvg(this.c[3],"fill",s.overoff,1),this.setSvg(this.c[3],"stroke",s.backoff,2),this.setSvg(this.c[3],"stroke",s.backoff,3),this.setSvg(this.c[3],"stroke",s.textSelect,4)}return this.cmode=t,!0}update(t){this.c[2].textContent=this.value,this.updateSVG(),t&&this.send()}updateSVG(){1==this.model&&(this.setSvg(this.c[3],"y1",this.pos.y,2),this.setSvg(this.c[3],"y2",this.pos.y,2),this.setSvg(this.c[3],"x1",this.pos.x,3),this.setSvg(this.c[3],"x2",this.pos.x,3)),this.setSvg(this.c[3],"cx",this.pos.x,4),this.setSvg(this.c[3],"cy",this.pos.y,4)}setPos(t){this.pos.set(t[0]+128,t[1]+128);let s=1/this.maxPos;this.value[0]=(t[0]*s*this.range).toFixed(this.precision),this.value[1]=(t[1]*s*this.range).toFixed(this.precision)}setValue(t,s=!1){void 0===t&&(t=this.value),this.value[0]=1*Math.min(this.max,Math.max(this.min,t[0])).toFixed(this.precision),this.value[1]=1*Math.min(this.max,Math.max(this.min,t[1])).toFixed(this.precision),this.pos.set(this.value[0]/this.range*this.maxPos+128,this.value[1]/this.range*this.maxPos+128),this.update(s)}}class T extends r{constructor(t={}){t.selectable=!0,t.name=t.name||"TreeList",super(t),this.tree=t.tree||{},this.value=Array.isArray(t.value)?t.value.slice():[],this.focused=!!t.focused,this.focusPath=Array.isArray(t.focusPath)?t.focusPath.slice():[],this.focusLevel="number"==typeof t.focusLevel?t.focusLevel:-1,this.tabIndex=t.tabIndex??null,this.itemIndex=t.itemIndex??null,this.changeCb="function"==typeof t.onChange?t.onChange:()=>{},this.lineH=this.h,this.levelGap=this.colors.sy||2,this.leafMax=0,this.levels=[],this.itemsDom=[],this.hover={level:-1,index:-1},this.lastLeaf={parentPath:[],key:null},this.c[2]=this.dom("div",this.css.basic+"left:0; top:0; width:100%; height:100%;"),this.s[2]=this.c[2].style,this.init(),this._maybeUpdateLastLeafFromValue()}static isMap(t){return t&&"object"==typeof t&&!Array.isArray(t)}static isList(t){return Array.isArray(t)}getNodeAtPath(t){let s=this.tree;for(let i=0;i({key:t,label:t,zone:{x:0,y:0,w:0,h:0}}))),i=Math.max(t.length,this.leafMax)*this.lineH;this.levels.push({type:"list",items:t,zone:{x:0,y:0,w:0,h:i}});break}break}{const e=Object.keys(s);if(!e.length)break;this.levels.push({type:"map",items:e.map((t=>({key:t,label:t,zone:{x:0,y:0,w:0,h:0}}))),zone:{x:0,y:0,w:0,h:this.lineH}});const h=t[i];if(!h||!s.hasOwnProperty(h))break;s=s[h]}i++}}layoutLevels(){const t=(this.sa||100)+8,s=this.zone.w-t-8;let i=0;for(;this.itemsDom.lengthh.x+h.w||s>h.x+h.w)&&!(th.x+h.w||s>h.y+h.h))if("map"===e.type)for(let h=0;h=o.x&&s>=o.y&&t<=o.x+o.w&&s<=o.y+o.h)return{L:i,i:h,real:!0}}else{const o=Math.max(e.items.length,this.leafMax);for(let n=0;n=r.x&&s>=r.y&&t<=r.x+r.w&&s<=r.y+r.h)return{L:i,i:n,real:o}}}}return{L:-1,i:-1,real:!1}}handleEvent(t){if(this.lock)return!1;if("mousemove"===t.type){const{x:s,y:i}=this._toLocal(t),e=this._hitTest(s,i);return this.hover=-1!==e.L&&e.real?{level:e.L,index:e.i}:{level:-1,index:-1},this.update(),!0}if("mousedown"===t.type){const{x:s,y:i}=this._toLocal(t),e=this._hitTest(s,i);if(-1!==e.L&&e.real)return this._selectAt(e.L,e.i),!0}return"mouseup"===t.type}_selectAt(t,s){const i=this.levels[t],e=i.items[s];if(!e||!e.key)return;const h=this.value.slice(0,t);h[t]=e.key;const o=this.autoCompleteToLeaf(h);"list"===i.type&&(this.lastLeaf.parentPath=this.value.slice(0,t),this.lastLeaf.key=e.key),this.value=o.slice(),this.update(),this.send(o),this.changeCb(this.tabIndex,this.itemIndex,o)}setValue(t){this.value=Array.isArray(t)?t.slice():[],this._maybeUpdateLastLeafFromValue(),this.update()}setTree(t){this.tree=t||{},this.leafMax=this.computeLeafMax(this.tree),this.update()}setFocus({focused:t,focusPath:s,focusLevel:i}){"boolean"==typeof t&&(this.focused=t),Array.isArray(s)&&(this.focusPath=s.slice()),"number"==typeof i&&(this.focusLevel=i),this.update()}_maybeUpdateLastLeafFromValue(){if(!Array.isArray(this.value)||0===this.value.length)return;const t=this.value.slice(0,this.value.length-1),s=this.value[this.value.length-1],i=this.getNodeAtPath(t);i&&Array.isArray(i.node)&&i.node.includes(s)&&(this.lastLeaf={parentPath:t,key:s})}_countVisibleIntermediates(){let t=0;for(let s=0;sthis.zone.h-this.bh&&s.ye?"scroll":"content",i}handleEvent(t){let s=t.type,e=!1,h=!1,o=this.testZone(t);if("mouseup"===s&&this.isDown&&(this.isDown=!1),"mousedown"!==s||this.isDown||(this.isDown=!0),this.isDown&&this.isNewTarget&&(i.clearInput(),this.isNewTarget=!1),o){switch(o){case"content":t.clientY=this.isScroll?t.clientY+this.decal:t.clientY,i.isMobile&&"mousedown"===s&&this.getNext(t,e),this.proto&&(h=this.proto.handleEvent(t)),"mousemove"===s&&(e=this.mode("def")),"wheel"===s&&!h&&this.isScroll&&(e=this.onWheel(t)),i.lock||this.getNext(t,e);break;case"bottom":this.clearTarget(),"mousemove"===s&&(e=this.mode("bottomOver")),"mousedown"===s&&(this.isOpen=!this.isOpen,this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.calc(),this.mode("def"),e=!0);break;case"scroll":this.clearTarget(),"mousemove"===s&&(e=this.mode("scrollOver")),"mousedown"===s&&(e=this.mode("scrollDown")),"wheel"===s&&(e=this.onWheel(t)),this.isDown&&this.update(t.clientY-this.zone.y-.5*this.sh)}this.isDown&&(e=!0),h&&(e=!0),"keyup"===s&&(e=!0),"keydown"===s&&(e=!0),e&&this.draw()}}getNext(t,s){let e=i.findTarget(this.uis,t);e!==this.current&&(this.clearTarget(),this.current=e,this.isNewTarget=!0),-1!==e&&(this.proto=this.uis[this.current],this.proto.uiover())}onWheel(t){return this.oy+=20*t.delta,this.update(this.oy),!0}reset(t){if(this.isReset)return;this.mouse.neg(),this.isDown=!1;let s=this.mode("def"),i=this.clearTarget();(s||i)&&this.draw(!0),this.isReset=!0}add(){let t=arguments,s=!1;"object"==typeof t[1]?(t[1].isUI=!0,t[1].main=this,s=!!t[1].ontop&&t[1].ontop):"string"==typeof t[1]&&(void 0===t[2]?[].push.call(t,{isUI:!0,main:this}):(t[2].isUI=!0,t[2].main=this,s=!!t[2].ontop&&t[2].ontop));let i=O.apply(this,t);if(null!==i)return s?this.uis.unshift(i):this.uis.push(i),this.calc(),this.isEmpty=!1,i}remove(t){t.dispose&&t.dispose()}clearOne(t){let s=this.uis.indexOf(t);-1!==s&&(this.inner.removeChild(this.uis[s].c[0]),this.uis.splice(s,1),this.calc())}empty(){let t,s=this.uis.length;for(;s--;)t=this.uis.pop(),this.inner.removeChild(t.c[0]),t.dispose();this.uis=[],this.isEmpty=!0,this.calc()}clear(){this.empty()}clear2(){setTimeout(this.empty.bind(this),0)}dispose(){this.clear(),null!==this.parent&&this.parent.removeChild(this.content),i.remove(this)}resetItem(){if(!this.isItemMode)return;let t=this.uis.length;for(;t--;)this.uis[t].selected()}setItem(t){if(!this.isItemMode)return;if(t=t||"",this.resetItem(),!t)return void this.update(0);let s=this.uis.length;for(;s--;)this.uis[s].value===t&&(this.uis[s].selected(!0),this.isScroll&&this.update(s*(this.uis[s].h+this.margin)*this.ratio))}upScroll(t){this.sw=t?this.size.s:0,this.oy=t?this.oy:0,this.scrollBG.style.display=t?"block":"none",t&&(this.total=this.h,this.maxView=this.maxHeight,this.ratio=this.maxView/this.total,this.sh=this.maxView*this.ratio,this.range=this.maxView-this.sh,this.oy=h.clamp(this.oy,0,this.range),this.scrollBG.style.height=this.maxView+"px",this.scroll.style.height=this.sh+"px"),this.setItemWidth(this.zone.w-this.sw),this.update(this.oy)}update(t){t=h.clamp(t,0,this.range),this.decal=Math.floor(t/this.ratio),this.inner.style.top=-this.decal+"px",this.scroll.style.top=Math.floor(t)+"px",this.oy=t}calcUis(){return i.calcUis(this.uis,this.zone,this.zone.y)}calc(){clearTimeout(this.tmp),this.tmp=setTimeout(this.setHeight.bind(this),10)}setHeight(){if(this.tmp&&clearTimeout(this.tmp),this.zone.h=this.bh,this.isScroll=!1,this.isOpen){this.h=this.calcUis();let t=this.forceHeight?this.forceHeight+this.zone.y:window.innerHeight;this.maxHeight=t-this.zone.y-this.bh,this.h-this.maxHeight>1?(this.isScroll=!0,this.zone.h=this.maxHeight+this.bh):this.zone.h=this.h+this.bh}this.upScroll(this.isScroll),this.innerContent.style.height=this.zone.h-this.bh+"px",this.content.style.height=this.zone.h+"px",this.bottom.style.top=this.zone.h-this.bh+"px",this.forceHeight&&this.lockHeight&&(this.content.style.height=this.forceHeight+"px"),this.isCanvas&&this.draw(!0)}rezone(){i.needReZone=!0}setWidth(t){t&&(this.zone.w=t),this.zone.w=Math.floor(this.zone.w),this.content.style.width=this.zone.w+"px",this.isCenter&&(this.content.style.marginLeft=-Math.floor(.5*this.zone.w)+"px"),this.setItemWidth(this.zone.w-this.sw)}setItemWidth(t){let s=this.uis.length;for(;s--;)this.uis[s].setSize(t),this.uis[s].rSize()}}export{o as Files,H as Gui,t as REVISION,h as Tools,O as add}; diff --git a/src/proto/TreeList.js b/src/proto/TreeList.js index 766d856..6f57853 100644 --- a/src/proto/TreeList.js +++ b/src/proto/TreeList.js @@ -36,11 +36,17 @@ export class TreeList extends Proto { this.itemsDom = []; // espejo DOM por nivel this.hover = { level: -1, index: -1 }; + // 🔸 NUEVO: recordar la última hoja seleccionada (persistente) + this.lastLeaf = { parentPath: [], key: null }; // parentPath es la ruta hasta el mapa padre + // Contenedor interno (absoluto) this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); this.s[2] = this.c[2].style; this.init(); + + // Si el valor inicial ya apunta a una hoja válida, recordar esa hoja + this._maybeUpdateLastLeafFromValue(); } // ======= Helpers de tipo ======= @@ -132,12 +138,10 @@ export class TreeList extends Proto { // ======= Layout (zonas & DOM) ======= layoutLevels() { - const contentX = (this.sa || 100) + 8; // columna de label + padding const padRight = 8; const w = this.zone.w - contentX - padRight; - let y = 0; // Ajustar itemsDom a cantidad de niveles @@ -149,15 +153,11 @@ export class TreeList extends Proto { for (let L = 0; L < this.levels.length; L++) { const lvl = this.levels[L]; - const row = this.itemsDom[L]; if (lvl.type === 'map') { const n = Math.max(1, lvl.items.length); const cellW = Math.floor(w / n); - lvl.zone = { x: contentX, y, w, h: this.lineH }; let x = contentX; - - for (let i = 0; i < lvl.items.length; i++) { const it = lvl.items[i]; it.zone = { x, y, w: cellW, h: this.lineH }; @@ -172,15 +172,13 @@ export class TreeList extends Proto { // lista/hoja: reservar h según leafMax const n = lvl.items.length; const hList = Math.max(n, this.leafMax) * this.lineH; - lvl.zone = { x: contentX, y, w, h: hList }; - const rows = Math.max(n, this.leafMax); - for (let i = 0; i < rows; i++) { + const rows = Math.max(n, this.leafMax); + for (let i = 0; i < rows; i++) { const isReal = i < n; const it = isReal ? lvl.items[i] : { key: null, label: '', zone: { x:0,y:0,w:0,h:0 } }; - - it.zone = { x: contentX, y: y + i * this.lineH, w, h: this.lineH }; + it.zone = { x: contentX, y: y + i * this.lineH, w, h: this.lineH }; const dom = this.ensureItemDom(L, i); this.paintItemDom(dom, L, i, it, 'list', isReal); } @@ -200,12 +198,9 @@ export class TreeList extends Proto { this._publishHeight(); } - - // Elimina nodos DOM sobrantes en la fila L a partir del índice keep _pruneRow(L, keep) { const row = this.itemsDom[L]; - // si nunca se creó, nada que hacer if (!row) return; for (let j = keep; j < row.length; j++) { const el = row[j]; @@ -214,7 +209,6 @@ export class TreeList extends Proto { row.length = keep; } - ensureItemDom(L, i) { const row = this.itemsDom[L]; while (row.length <= i) row.push(null); @@ -245,16 +239,35 @@ export class TreeList extends Proto { const focusMatch = isReal && inFocusLvl && (this.focusPath[L] === it.key); const isHover = isReal && (this.hover.level === L && this.hover.index === i); + // 🔸 NUEVO: ¿esta fila es la última hoja seleccionada? + let isLastLeaf = false; + if (isReal && kind === 'list' && this.lastLeaf.key != null) { + // La hoja visible corresponde si el padre de esta lista coincide con parentPath guardado + // El padre actual es this.value.slice(0, L) cuando la lista está desplegada por value/focus + const parentNow = this.getActivePath().slice(0, L); + if (this._pathsEqual(parentNow, this.lastLeaf.parentPath) && it.key === this.lastLeaf.key) { + isLastLeaf = true; + } + } + // Estilos base s.background = cc.back; s.color = cc.text; s.border = '1px solid ' + cc.border; s.textAlign = kind === 'map' ? 'center' : 'left'; - // Prioridad visual: seleccionado > foco > hover > base + // Prioridad visual: + // 1) seleccionado (azul) + // 2) última hoja (nuevo color) + // 3) foco + // 4) hover if (selected) { s.background = cc.select; s.color = cc.textSelect; + } else if (isLastLeaf) { + // color distintivo para "última hoja" (amarillo suave) + s.background = 'rgba(255, 200, 0, 0.25)'; + s.color = cc.text; } else if (focusMatch) { s.background = cc.backgroundOver; s.color = cc.textOver; @@ -267,6 +280,12 @@ export class TreeList extends Proto { s.opacity = isReal ? '1' : '0'; } + _pathsEqual(a, b) { + if (!a || !b || a.length !== b.length) return false; + for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false; + return true; + } + // ======= Ciclo de vida ======= rSize() { this.leafMax = this.computeLeafMax(this.tree); @@ -282,15 +301,16 @@ export class TreeList extends Proto { // ======= Interacción ======= _toLocal(e) { const mx = e.clientX - this.zone.x; - const my = e.clientY - this.zone.y; + const my = e.clientY - this.zone.y; return { x: mx, y: my }; } _hitTest(mx, my) { - for (let L = 0; L < this.levels.length; L++) { - const lvl = this.levels[L]; - const z = lvl.zone; // x y w ya incluyen contentX - if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + const z = lvl.zone; // x y w ya incluyen contentX + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.x + z.w) continue; + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; if (lvl.type === 'map') { for (let i = 0; i < lvl.items.length; i++) { @@ -352,24 +372,30 @@ export class TreeList extends Proto { const newPath = this.autoCompleteToLeaf(base); + // 🔸 Si el usuario selecciona explícitamente en el nivel hoja, recordarlo + if (lvl.type === 'list') { + this.lastLeaf.parentPath = this.value.slice(0, L); // padre de la lista actual + this.lastLeaf.key = chosen.key; + } + this.value = newPath.slice(); this.update(); - // ✅ Actualiza objeto enlazado (si existe) y dispara callbacks “clásicos” - this.send(newPath); // escribe en objectLink[objectKey] si hay referencia + // si está referenciado, propaga a objeto externo + this.send(newPath); this.changeCb(this.tabIndex, this.itemIndex, newPath); } - // ======= API pública ======= setValue(path) { this.value = Array.isArray(path) ? path.slice() : []; + // Si desde afuera nos setean una hoja válida, también la recordamos + this._maybeUpdateLastLeafFromValue(); this.update(); } setTree(tree) { this.tree = tree || {}; - // recalcular leafMax en próxima pasada this.leafMax = this.computeLeafMax(this.tree); this.update(); } @@ -381,6 +407,17 @@ export class TreeList extends Proto { this.update(); } + _maybeUpdateLastLeafFromValue() { + // Si value apunta a padre+hoja (…,[leaf]) y es válida, recordar esa hoja + if (!Array.isArray(this.value) || this.value.length === 0) return; + const parent = this.value.slice(0, this.value.length - 1); + const leaf = this.value[this.value.length - 1]; + const info = this.getNodeAtPath(parent); + if (info && Array.isArray(info.node) && info.node.includes(leaf)) { + this.lastLeaf = { parentPath: parent, key: leaf }; + } + } + // ======= Publicación de altura ======= _countVisibleIntermediates() { let c = 0; From 6a70fe64a1ed8782803409e5706ebdb1b05cdbff Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Sat, 6 Sep 2025 23:34:51 -0300 Subject: [PATCH 12/17] fix treelist --- build/uil.js | 17224 +++++++++++++++++++---------------- build/uil.min.js | 9621 ++++++++++++++++++- build/uil.module.js | 9607 ++++++++++++++++++- examples/uil_treelist.html | 113 +- run_build_dev.bat | 1 + src/proto/TreeList.js | 977 +- 6 files changed, 29378 insertions(+), 8165 deletions(-) create mode 100644 run_build_dev.bat diff --git a/build/uil.js b/build/uil.js index 99e0aaf..8d033d7 100644 --- a/build/uil.js +++ b/build/uil.js @@ -1,7723 +1,9606 @@ -/** - * @license - * Copyright 2010-2021 Uil.js Authors - * SPDX-License-Identifier: MIT - */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.UIL = {})); })(this, (function (exports) { 'use strict'; - /** - * @author lth / https://github.com/lo-th - */ - - const REVISION = "4.3.0"; - - // INTENAL FUNCTION - - const R = { - ui: [], - dom: null, - ID: null, - lock: false, - wlock: false, - current: -1, - needReZone: true, - needResize: false, - forceZone: false, - isEventsInit: false, - isLeave: false, - addDOMEventListeners: true, - downTime: 0, - prevTime: 0, - //prevDefault: ['contextmenu', 'wheel'], - prevDefault: ["contextmenu"], - pointerEvent: ["pointerdown", "pointermove", "pointerup"], - eventOut: ["pointercancel", "pointerout", "pointerleave"], - xmlserializer: null, - tmpTime: null, - tmpImage: null, - oldCursor: "auto", - input: null, - parent: null, - firstImput: true, - hiddenImput: null, - hiddenSizer: null, - hasFocus: false, - startInput: false, - inputRange: [0, 0], - cursorId: 0, - str: "", - pos: 0, - startX: -1, - moveX: -1, - debugInput: false, - isLoop: false, - listens: [], - e: { - type: null, - clientX: 0, - clientY: 0, - keyCode: NaN, - key: null, - delta: 0 - }, - isMobile: false, - now: null, - needsUpdate: false, - getTime: function () { - return self.performance && self.performance.now ? self.performance.now.bind(performance) : Date.now; - }, - add: function (o) { - // R.ui[0] is de GUI object that is added first by the constructor - R.ui.push(o); - R.getZone(o); - if (!R.isEventsInit) R.initEvents(); - }, - testMobile: function () { - let n = navigator.userAgent; - if (n.match(/Android/i) || n.match(/webOS/i) || n.match(/iPhone/i) || n.match(/iPad/i) || n.match(/iPod/i) || n.match(/BlackBerry/i) || n.match(/Windows Phone/i)) return true;else return false; - }, - remove: function (o) { - let i = R.ui.indexOf(o); - if (i !== -1) { - R.removeListen(o); - R.ui.splice(i, 1); - } - if (R.ui.length === 0) { - R.removeEvents(); - } - }, - // ---------------------- - // EVENTS - // ---------------------- - - initEvents: function () { - if (R.isEventsInit) return; - let dom = document.body; - R.isMobile = R.testMobile(); - R.now = R.getTime(); - if (!R.isMobile) { - dom.addEventListener("wheel", R, { - passive: false - }); - } else { - dom.style.touchAction = "none"; - } - console.log("R.addDOMEventListeners " + R.addDOMEventListeners); - if (R.addDOMEventListeners) { - dom.addEventListener("pointercancel", R); - dom.addEventListener("pointerleave", R); - //dom.addEventListener( 'pointerout', R ) - - dom.addEventListener("pointermove", R); - dom.addEventListener("pointerdown", R); - dom.addEventListener("pointerup", R); - dom.addEventListener("keydown", R, false); - dom.addEventListener("keyup", R, false); - } - window.addEventListener("resize", R.resize, false); - - //window.onblur = R.out; - //window.onfocus = R.in; - - R.isEventsInit = true; - R.dom = dom; - }, - removeEvents: function () { - if (!R.isEventsInit) return; - let dom = document.body; - if (!R.isMobile) { - dom.removeEventListener("wheel", R); - } - if (R.addDOMEventListeners) { - dom.removeEventListener("pointercancel", R); - dom.removeEventListener("pointerleave", R); - //dom.removeEventListener( 'pointerout', R ); - - dom.removeEventListener("pointermove", R); - dom.removeEventListener("pointerdown", R); - dom.removeEventListener("pointerup", R); - dom.removeEventListener("keydown", R); - dom.removeEventListener("keyup", R); - } - window.removeEventListener("resize", R.resize); - R.isEventsInit = false; - }, - resize: function () { - let i = R.ui.length, - u; - while (i--) { - u = R.ui[i]; - if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); - } - R.needReZone = true; - R.needResize = false; - }, - out: function () { - console.log("im am out"); - R.clearOldID(); - }, - in: function () { - console.log("im am in"); - // R.clearOldID(); - }, - // ---------------------- - // HANDLE EVENTS - // ---------------------- - - fakeUp: function () { - this.handleEvent({ - type: "pointerup" - }); - }, - handleEvent: function (event) { - //console.log("Roots.handleEvent "+event.type) - //if(!event.type) return; - - if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); - if (R.needResize) R.resize(); - R.findZone(R.forceZone); - let e = R.e; - let leave = false; - if (event.type === "keydown") R.keydown(event); - if (event.type === "keyup") R.keyup(event); - if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1;else e.delta = 0; - let ptype = event.pointerType; // mouse, pen, touch - - e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; - e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; - e.type = event.type; - if (R.eventOut.indexOf(event.type) !== -1) { - leave = true; - e.type = "mouseup"; - } - if (event.type === "pointerleave") R.isLeave = true; - if (event.type === "pointerdown") e.type = "mousedown"; - if (event.type === "pointerup") e.type = "mouseup"; - if (event.type === "pointermove") { - if (R.isLeave) { - // if user resize outside this document - R.isLeave = false; - R.resize(); - } - e.type = "mousemove"; - } - - // double click test - if (e.type === "mousedown") { - R.downTime = R.now(); - let time = R.downTime - R.prevTime; - - // double click on imput - if (time < 200) { - R.selectAll(); - return false; - } - R.prevTime = R.downTime; - R.forceZone = false; - } - - // for imput - if (e.type === "mousedown") R.clearInput(); - - // mouse lock - if (e.type === "mousedown") R.lock = true; - if (e.type === "mouseup") R.lock = false; - - //if( R.current !== null && R.current.neverlock ) R.lock = false; - - /*if( e.type === 'mousedown' && event.button === 1){ - R.cursor() - e.preventDefault(); - e.stopPropagation(); - }*/ - - //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) - - if (R.isMobile && e.type === "mousedown") R.findID(e); - if (e.type === "mousemove" && !R.lock) R.findID(e); - if (R.ID !== null) { - if (R.ID.isCanvasOnly) { - e.clientX = R.ID.mouse.x; - e.clientY = R.ID.mouse.y; - } - - //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 - - R.ID.handleEvent(e); - } - if (R.isMobile && e.type === "mouseup") R.clearOldID(); - if (leave) R.clearOldID(); - }, - // ---------------------- - // ID - // ---------------------- - - findID: function (e) { - let i = R.ui.length, - next = -1, - u, - x, - y; - while (i--) { - u = R.ui[i]; - if (u.isCanvasOnly) { - x = u.mouse.x; - y = u.mouse.y; - } else { - x = e.clientX; - y = e.clientY; - } - if (R.onZone(u, x, y)) { - next = i; - if (next !== R.current) { - R.clearOldID(); - R.current = next; - R.ID = u; - } - break; - } - } - if (next === -1) R.clearOldID(); - }, - clearOldID: function () { - if (!R.ID) return; - R.current = -1; - R.ID.reset(); - R.ID = null; - R.cursor(); - }, - // ---------------------- - // GUI / GROUP FUNCTION - // ---------------------- - - calcUis: (uis, zone, py, group = false) => { - //console.log('calc_uis') - - let i = uis.length, - u, - px = 0, - n = 0, - tw, - m; - let height = 0; - while (i--) { - u = uis[n]; - n++; - if (!group && u.isGroup) u.calcUis(); - m = u.margin; - //div = u.marginDiv - - u.zone.w = u.w; - u.zone.h = u.h + m; - if (!u.autoWidth) { - if (px === 0) height += u.h + m; - u.zone.x = zone.x + px; - u.zone.y = py; // + u.mtop - //if(div) u.zone.y += m * 0.5 - - tw = R.getWidth(u); - if (tw) u.zone.w = u.w = tw;else if (u.fw) u.zone.w = u.w = u.fw; - px += u.zone.w; - if (px >= zone.w) { - py += u.h + m; - //if(div) py += m * 0.5 - px = 0; - } - } else { - px = 0; - u.zone.x = zone.x + u.dx; - u.zone.y = py; - py += u.h + m; - height += u.h + m; - } - } - return height; - }, - findTarget: function (uis, e) { - let i = uis.length; - while (i--) { - if (R.onZone(uis[i], e.clientX, e.clientY)) return i; - } - return -1; - }, - // ---------------------- - // ZONE - // ---------------------- - - findZone: function (force) { - if (!R.needReZone && !force) return; - var i = R.ui.length, - u; - while (i--) { - u = R.ui[i]; - R.getZone(u); - if (u.isGui) u.calcUis(); - } - R.needReZone = false; - }, - onZone: function (o, x, y) { - if (x === undefined || y === undefined) return false; - let z = o.zone; - let mx = x - z.x; // - o.dx; - let my = y - z.y; - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 - //if( o.group !== null ) mx -= o.dx - - let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; - - //if( o.marginDiv ) my -= o.margin * 0.5 - - if (over) o.local.set(mx, my);else o.local.neg(); - return over; - }, - getWidth: function (o) { - //return o.getDom().offsetWidth - return o.getDom().clientWidth; - - //let r = o.getDom().getBoundingClientRect(); - //return (r.width) - //return Math.floor(r.width) - }, - getZone: function (o) { - if (o.isCanvasOnly) return; - let r = o.getDom().getBoundingClientRect(); - - //if( !r.width ) return - //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; - //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; - o.zone = { - x: r.left, - y: r.top, - w: r.width, - h: r.height - }; - - //console.log(o.name, o.zone) - }, - // ---------------------- - // CURSOR - // ---------------------- - - cursor: function (name) { - name = name ? name : "auto"; - if (name !== R.oldCursor) { - document.body.style.cursor = name; - R.oldCursor = name; - } - }, - // ---------------------- - // CANVAS - // ---------------------- - - toCanvas: function (o, w, h, force) { - if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); - - // prevent exesive redraw - - if (force && R.tmpTime !== null) { - clearTimeout(R.tmpTime); - R.tmpTime = null; - } - if (R.tmpTime !== null) return; - if (R.lock) R.tmpTime = setTimeout(function () { - R.tmpTime = null; - }, 10); - - /// - - let isNewSize = false; - if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; - if (R.tmpImage === null) R.tmpImage = new Image(); - let img = R.tmpImage; //new Image(); - - let htmlString = R.xmlserializer.serializeToString(o.content); - let svg = '' + htmlString + ""; - img.onload = function () { - let ctx = o.canvas.getContext("2d"); - if (isNewSize) { - o.canvas.width = w; - o.canvas.height = h; - } else { - ctx.clearRect(0, 0, w, h); - } - ctx.drawImage(this, 0, 0); - o.onDraw(); - }; - img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); - //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); - img.crossOrigin = ""; - R.needsUpdate = false; - }, - // ---------------------- - // INPUT - // ---------------------- - - setHidden: function () { - if (R.hiddenImput === null) { - //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' - //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' - //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; - - R.hiddenImput = document.createElement("input"); - R.hiddenImput.type = "text"; - //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); - - R.hiddenSizer = document.createElement("div"); - //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; - - document.body.appendChild(R.hiddenImput); - document.body.appendChild(R.hiddenSizer); - } - let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; - let css = R.parent.css.txtselect + "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + hide; - R.hiddenImput.style.cssText = css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); - R.hiddenSizer.style.cssText = css + "bottom:40px;"; - R.hiddenImput.style.width = R.input.clientWidth + "px"; - R.hiddenImput.value = R.str; - R.hiddenSizer.innerHTML = R.str; - R.hasFocus = true; - }, - clearHidden: function (p) { - if (R.hiddenImput === null) return; - R.hasFocus = false; - }, - clickPos: function (x) { - let i = R.str.length, - l = 0, - n = 0; - while (i--) { - l += R.textWidth(R.str[n]); - if (l >= x) break; - n++; - } - return n; - }, - upInput: function (x, down) { - if (R.parent === null) return false; - let up = false; - if (down) { - let id = R.clickPos(x); - R.moveX = id; - if (R.startX === -1) { - R.startX = id; - R.cursorId = id; - R.inputRange = [R.startX, R.startX]; - } else { - let isSelection = R.moveX !== R.startX; - if (isSelection) { - if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX];else R.inputRange = [R.startX, R.moveX]; - } - } - up = true; - } else { - if (R.startX !== -1) { - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.startX = -1; - up = true; - } - } - if (up) R.selectParent(); - return up; - }, - selectAll: function () { - if (!R.parent) return; - R.str = R.input.textContent; - R.inputRange = [0, R.str.length]; - R.hasFocus = true; - R.hiddenImput.focus(); - R.hiddenImput.selectionStart = R.inputRange[0]; - R.hiddenImput.selectionEnd = R.inputRange[1]; - R.cursorId = R.inputRange[1]; - R.selectParent(); - }, - selectParent: function () { - var c = R.textWidth(R.str.substring(0, R.cursorId)); - var e = R.textWidth(R.str.substring(0, R.inputRange[0])); - var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); - R.parent.select(c, e, s, R.hiddenSizer.innerHTML); - }, - textWidth: function (text) { - if (R.hiddenSizer === null) return 0; - text = text.replace(/ /g, " "); - R.hiddenSizer.innerHTML = text; - return R.hiddenSizer.clientWidth; - }, - clearInput: function () { - if (R.parent === null) return; - if (!R.firstImput) R.parent.validate(true); - R.clearHidden(); - R.parent.unselect(); - - //R.input.style.background = 'none'; - R.input.style.background = R.parent.colors.back; - R.input.style.borderColor = R.parent.colors.border; - //R.input.style.color = R.parent.colors.text; - R.parent.isEdit = false; - R.input = null; - R.parent = null; - R.str = "", R.firstImput = true; - }, - setInput: function (Input, parent) { - R.clearInput(); - R.input = Input; - R.parent = parent; - R.input.style.background = R.parent.colors.backoff; - R.input.style.borderColor = R.parent.colors.select; - //R.input.style.color = R.parent.colors.textSelect; - R.str = R.input.textContent; - R.setHidden(); - }, - keydown: function (e) { - if (R.parent === null) return; - let keyCode = e.which; - e.shiftKey; - - //console.log( keyCode ) - - R.firstImput = false; - if (R.hasFocus) { - // hack to fix touch event bug in iOS Safari - window.focus(); - R.hiddenImput.focus(); - } - R.parent.isEdit = true; - - // e.preventDefault(); - - // add support for Ctrl/Cmd+A selection - //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { - //R.selectText(); - //e.preventDefault(); - //return self.render(); - //} - - if (keyCode === 13) { - //enter - - R.clearInput(); - - //} else if( keyCode === 9 ){ //tab key - - // R.input.textContent = ''; - } else { - if (R.input.isNum) { - if (e.keyCode > 47 && e.keyCode < 58 || e.keyCode > 95 && e.keyCode < 106 || e.keyCode === 190 || e.keyCode === 110 || e.keyCode === 8 || e.keyCode === 109) { - R.hiddenImput.readOnly = false; - } else { - R.hiddenImput.readOnly = true; - } - } else { - R.hiddenImput.readOnly = false; - } - } - }, - keyup: function (e) { - if (R.parent === null) return; - R.str = R.hiddenImput.value; - if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value - else R.input.textContent = R.str; - R.cursorId = R.hiddenImput.selectionStart; - R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; - R.selectParent(); - - //if( R.parent.allway ) - R.parent.validate(); - }, - // ---------------------- - // - // LISTENING - // - // ---------------------- - - /* - // esta era la funcion original - loop: function () { - if( R.isLoop ) requestAnimationFrame( R.loop ); - R.update(); - }, - */ - - loop: function () { - // modified by Fedemarino - if (R.isLoop) requestAnimationFrame(R.loop); - R.needsUpdate = R.update(); - // if there is a change in a value generated externally, the GUI needs to be redrawn - if (R.ui[0] && R.needsUpdate) R.ui[0].draw(); - }, - update: function () { - // modified by Fedemarino - let i = R.listens.length; - let needsUpdate = false; - while (i--) { - //check if the value of the object has changed - let hasChanged = R.listens[i].listening(); - if (hasChanged) needsUpdate = true; - } - return needsUpdate; - }, - removeListen: function (proto) { - let id = R.listens.indexOf(proto); - if (id !== -1) R.listens.splice(id, 1); - if (R.listens.length === 0) R.isLoop = false; - }, - addListen: function (proto) { - let id = R.listens.indexOf(proto); - if (id !== -1) return false; - R.listens.push(proto); - if (!R.isLoop) { - R.isLoop = true; - R.loop(); - } - return true; - } - }; - const Roots = R; - - /** - * @author lth / https://github.com/lo-th - */ - const T = { - transition: 0.2, - frag: document.createDocumentFragment(), - colorRing: null, - joystick_0: null, - joystick_1: null, - circular: null, - knob: null, - pad2d: null, - svgns: "http://www.w3.org/2000/svg", - links: "http://www.w3.org/1999/xlink", - htmls: "http://www.w3.org/1999/xhtml", - DOM_SIZE: ['height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], - SVG_TYPE_D: ['pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix'], - SVG_TYPE_G: ['svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject'], - PI: Math.PI, - TwoPI: Math.PI * 2, - pi90: Math.PI * 0.5, - pi60: Math.PI / 3, - torad: Math.PI / 180, - todeg: 180 / Math.PI, - clamp: (v, min, max) => { - v = v < min ? min : v; - v = v > max ? max : v; - return v; - }, - isDivid: v => v * 0.5 === Math.floor(v * 0.5), - size: { - w: 240, - h: 20, - p: 30, - s: 8 - }, - // ---------------------- - // COLOR - // ---------------------- - - defineColor: (o, cc = T.colors) => { - let color = { - ...cc - }; - let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize']; - let changeText = false; - if (o.font) o.fontFamily = o.font; - if (o.shadow) o.fontShadow = o.shadow; - if (o.weight) o.fontWeight = o.weight; - if (o.fontColor) o.text = o.fontColor; - if (o.color) o.text = o.color; - if (o.text) { - color.text = o.text; - if (!o.fontColor && !o.color) { - color.title = T.ColorLuma(o.text, -0.25); - color.titleoff = T.ColorLuma(o.text, -0.5); - } - color.textOver = T.ColorLuma(o.text, 0.25); - color.textSelect = T.ColorLuma(o.text, 0.5); - } - if (o.button) { - color.button = o.button; - color.border = T.ColorLuma(o.button, 0.1); - color.overoff = T.ColorLuma(o.button, 0.2); - } - if (o.select) { - color.select = o.select; - color.over = T.ColorLuma(o.select, -0.1); - } - if (o.itemBg) o.back = o.itemBg; - if (o.back) { - color.back = o.back; - color.backoff = T.ColorLuma(o.back, -0.1); - } - if (o.fontSelect) color.textSelect = o.fontSelect; - if (o.groupBorder) color.gborder = o.groupBorder; - - //if( o.transparent ) o.bg = 'none' - //if( o.bg ) color.background = color.backgroundOver = o.bg - if (o.bgOver) color.backgroundOver = o.bgOver; - for (let m in color) { - if (o[m] !== undefined) color[m] = o[m]; - } - for (let m in o) { - if (textChange.indexOf(m) !== -1) changeText = true; - } - if (changeText) T.defineText(color); - return color; - }, - colors: { - sx: 4, - //4 - sy: 2, - //2 - radius: 2, - showOver: 1, - //groupOver : 1, - - content: 'none', - background: 'rgba(50,50,50,0.15)', - backgroundOver: 'rgba(50,50,50,0.3)', - title: '#CCC', - titleoff: '#BBB', - text: '#DDD', - textOver: '#EEE', - textSelect: '#FFF', - back: 'rgba(0,0,0,0.2)', - backoff: 'rgba(0,0,0,0.3)', - // input and button border - border: '#4c4c4c', - borderSize: 1, - gborder: 'none', - groups: 'none', - button: '#3c3c3c', - overoff: '#5c5c5c', - over: '#024699', - select: '#308AFF', - action: '#FF3300', - //fontFamily: 'Tahoma', - fontFamily: 'Consolas, monospace', - //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", - fontWeight: 'normal', - fontShadow: 'none', - //'#000', - fontSize: 12, - joyOver: 'rgba(48,138,255,0.25)', - joyOut: 'rgba(100,100,100,0.5)', - joySelect: '#308AFF', - hide: 'rgba(0,0,0,0)' - }, - // style css - - css: { - basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', - button: 'display:flex; align-items:center; justify-content:center; text-align:center;', - middle: 'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' - }, - // svg path - - svgs: { - g1: 'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', - g2: 'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', - group: 'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', - arrow: 'M 3 8 L 8 5 3 2 3 8 Z', - arrowDown: 'M 5 8 L 8 3 2 3 5 8 Z', - arrowUp: 'M 5 2 L 2 7 8 7 5 2 Z', - solid: 'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', - body: 'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', - vehicle: 'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', - articulation: 'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', - character: 'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', - terrain: 'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', - joint: 'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', - ray: 'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', - collision: 'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', - map: 'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - material: 'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', - texture: 'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', - object: 'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', - none: 'M 9 5 L 5 5 5 9 9 9 9 5 Z', - cursor: 'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', - load: 'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', - save: 'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', - extern: 'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z' - }, - rezone() { - Roots.needReZone = true; - }, - getImput: function () { - return Roots.input ? true : false; - }, - setStyle: function (data) { - for (var o in data) { - if (T.colors[o]) T.colors[o] = data[o]; - } - T.setText(); - }, - // ---------------------- - // custom text - // ---------------------- - - defineText: function (o) { - T.setText(o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight); - }, - setText: function (size, color, font, shadow, weight) { - let cc = T.colors; - if (font === undefined) font = cc.fontFamily; - if (size === undefined) size = cc.fontSize; - if (shadow === undefined) shadow = cc.fontShadow; - if (weight === undefined) weight = cc.fontWeight; - if (color === undefined) color = cc.text; - if (isNaN(size)) { - if (size.search('em') === -1) size += 'px'; - } else size += 'px'; - - //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' - - T.css.txt = T.css.basic + T.css.middle + ' font-family:' + font + '; font-weight:' + weight + '; font-size:' + size + '; color:' + cc.text + '; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; - if (shadow !== 'none') T.css.txt += ' text-shadow: 1px 1px 1px ' + shadow + ';'; - T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; - T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; - }, - // note - - //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container - - /*cloneColor: function () { - let cc = Object.assign({}, T.colors ); - return cc; - },*/ - - // intern function - - cloneCss: function () { - //let cc = Object.assign({}, T.css ); - return { - ...T.css - }; - }, - clone: function (o) { - return o.cloneNode(true); - }, - setSvg: function (dom, type, value, id, id2) { - if (id === -1) dom.setAttributeNS(null, type, value);else if (id2 !== undefined) dom.childNodes[id || 0].childNodes[id2 || 0].setAttributeNS(null, type, value);else dom.childNodes[id || 0].setAttributeNS(null, type, value); - }, - setCss: function (dom, css) { - for (let r in css) { - if (T.DOM_SIZE.indexOf(r) !== -1) dom.style[r] = css[r] + 'px';else dom.style[r] = css[r]; - } - }, - set: function (g, o) { - for (let att in o) { - if (att === 'txt') g.textContent = o[att]; - if (att === 'link') g.setAttributeNS(T.links, 'xlink:href', o[att]);else g.setAttributeNS(null, att, o[att]); - } - }, - get: function (dom, id) { - if (id === undefined) return dom; // root - else if (!isNaN(id)) return dom.childNodes[id]; // first child - else if (id instanceof Array) { - if (id.length === 2) return dom.childNodes[id[0]].childNodes[id[1]]; - if (id.length === 3) return dom.childNodes[id[0]].childNodes[id[1]].childNodes[id[2]]; - } - }, - dom: function (type, css, obj, dom, id) { - type = type || 'div'; - if (T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1) { - // is svg element - - if (type === 'svg') { - dom = document.createElementNS(T.svgns, 'svg'); - T.set(dom, obj); - - /* } else if ( type === 'use' ) { - dom = document.createElementNS( T.svgns, 'use' ); - T.set( dom, obj ); - */ - } else { - // create new svg if not def - if (dom === undefined) dom = document.createElementNS(T.svgns, 'svg'); - T.addAttributes(dom, type, obj, id); - } - } else { - // is html element - - if (dom === undefined) dom = document.createElementNS(T.htmls, type);else dom = dom.appendChild(document.createElementNS(T.htmls, type)); - } - if (css) dom.style.cssText = css; - if (id === undefined) return dom;else return dom.childNodes[id || 0]; - }, - addAttributes: function (dom, type, o, id) { - let g = document.createElementNS(T.svgns, type); - T.set(g, o); - T.get(dom, id).appendChild(g); - if (T.SVG_TYPE_G.indexOf(type) !== -1) g.style.pointerEvents = 'none'; - return g; - }, - clear: function (dom) { - T.purge(dom); - while (dom.firstChild) { - if (dom.firstChild.firstChild) T.clear(dom.firstChild); - dom.removeChild(dom.firstChild); - } - }, - purge: function (dom) { - let a = dom.attributes, - i, - n; - if (a) { - i = a.length; - while (i--) { - n = a[i].name; - if (typeof dom[n] === 'function') dom[n] = null; - } - } - a = dom.childNodes; - if (a) { - i = a.length; - while (i--) { - T.purge(dom.childNodes[i]); - } - } - }, - // ---------------------- - // SVG Effects function - // ---------------------- - - addSVGGlowEffect: function () { - if (document.getElementById('UILGlow') !== null) return; - let svgFilter = T.initUILEffects(); - let filter = T.addAttributes(svgFilter, 'filter', { - id: 'UILGlow', - x: '-20%', - y: '-20%', - width: '140%', - height: '140%' - }); - T.addAttributes(filter, 'feGaussianBlur', { - in: 'SourceGraphic', - stdDeviation: '3', - result: 'uilBlur' - }); - let feMerge = T.addAttributes(filter, 'feMerge', {}); - for (let i = 0; i <= 3; i++) { - T.addAttributes(feMerge, 'feMergeNode', { - in: 'uilBlur' - }); - } - T.addAttributes(feMerge, 'feMergeNode', { - in: 'SourceGraphic' - }); - }, - initUILEffects: function () { - let svgFilter = document.getElementById('UILSVGEffects'); - if (svgFilter === null) { - svgFilter = T.dom('svg', undefined, { - id: 'UILSVGEffects', - width: '0', - height: '0' - }); - document.body.appendChild(svgFilter); - } - return svgFilter; - }, - // ---------------------- - // Color function - // ---------------------- - - ColorLuma: function (hex, l) { - //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; - - if (hex === 'n') hex = '#000'; - - // validate hex string - hex = String(hex).replace(/[^0-9a-f]/gi, ''); - if (hex.length < 6) { - hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; - } - l = l || 0; - - // convert to decimal and change luminosity - let rgb = "#", - c, - i; - for (i = 0; i < 3; i++) { - c = parseInt(hex.substr(i * 2, 2), 16); - c = Math.round(Math.min(Math.max(0, c + c * l), 255)).toString(16); - rgb += ("00" + c).substr(c.length); - } - return rgb; - }, - findDeepInver: function (c) { - return c[0] * 0.3 + c[1] * .59 + c[2] * .11 <= 0.6; - }, - lerpColor: function (c1, c2, factor) { - let newColor = {}; - for (let i = 0; i < 3; i++) { - newColor[i] = c1[i] + (c2[i] - c1[i]) * factor; - } - return newColor; - }, - hexToHtml: function (v) { - v = v === undefined ? 0x000000 : v; - return "#" + ("000000" + v.toString(16)).substr(-6); - }, - htmlToHex: function (v) { - return v.toUpperCase().replace("#", "0x"); - }, - u255: function (c, i) { - return parseInt(c.substring(i, i + 2), 16) / 255; - }, - u16: function (c, i) { - return parseInt(c.substring(i, i + 1), 16) / 15; - }, - unpack: function (c) { - if (c.length == 7) return [T.u255(c, 1), T.u255(c, 3), T.u255(c, 5)];else if (c.length == 4) return [T.u16(c, 1), T.u16(c, 2), T.u16(c, 3)]; - }, - p255: function (c) { - let h = Math.round(c * 255).toString(16); - if (h.length < 2) h = '0' + h; - return h; - }, - pack: function (c) { - return '#' + T.p255(c[0]) + T.p255(c[1]) + T.p255(c[2]); - }, - htmlRgb: function (c) { - return 'rgb(' + Math.round(c[0] * 255) + ',' + Math.round(c[1] * 255) + ',' + Math.round(c[2] * 255) + ')'; - }, - pad: function (n) { - if (n.length == 1) n = '0' + n; - return n; - }, - rgbToHex: function (c) { - let r = Math.round(c[0] * 255).toString(16); - let g = Math.round(c[1] * 255).toString(16); - let b = Math.round(c[2] * 255).toString(16); - return '#' + T.pad(r) + T.pad(g) + T.pad(b); - - // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); - }, - hueToRgb: function (p, q, t) { - if (t < 0) t += 1; - if (t > 1) t -= 1; - if (t < 1 / 6) return p + (q - p) * 6 * t; - if (t < 1 / 2) return q; - if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t); - return p; - }, - rgbToHsl: function (c) { - let r = c[0], - g = c[1], - b = c[2], - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h = 0, - s = 0, - l = (min + max) / 2; - if (l > 0 && l < 1) s = delta / (l < 0.5 ? 2 * l : 2 - 2 * l); - if (delta > 0) { - if (max == r && max != g) h += (g - b) / delta; - if (max == g && max != b) h += 2 + (b - r) / delta; - if (max == b && max != r) h += 4 + (r - g) / delta; - h /= 6; - } - return [h, s, l]; - }, - hslToRgb: function (c) { - let p, - q, - h = c[0], - s = c[1], - l = c[2]; - if (s === 0) return [l, l, l];else { - q = l <= 0.5 ? l * (s + 1) : l + s - l * s; - p = l * 2 - q; - return [T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333)]; - } - }, - // ---------------------- - // SVG MODEL - // ---------------------- - - makeGradiant: function (type, settings, parent, colors) { - T.dom(type, null, settings, parent, 0); - let n = parent.childNodes[0].childNodes.length - 1, - c; - for (let i = 0; i < colors.length; i++) { - c = colors[i]; - //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); - T.dom('stop', null, { - offset: c[0] + '%', - 'stop-color': c[1], - 'stop-opacity': c[2] - }, parent, [0, n]); - } - }, - /*makeGraph: function () { - let w = 128; - let radius = 34; - let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); - T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 - //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 - //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 - - //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 - //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 - T.graph = svg; - },*/ - - makePad: function (model) { - let ww = 256; - let svg = T.dom('svg', T.css.basic + 'position:relative;', { - viewBox: '0 0 ' + ww + ' ' + ww, - width: ww, - height: ww, - preserveAspectRatio: 'none' - }); - let w = 200; - let d = (ww - w) * 0.5, - m = 20; - Tools.dom('rect', '', { - x: d, - y: d, - width: w, - height: w, - fill: T.colors.back - }, svg); // 0 - Tools.dom('rect', '', { - x: d + m * 0.5, - y: d + m * 0.5, - width: w - m, - height: w - m, - fill: T.colors.button - }, svg); // 1 - // Pointer - Tools.dom('line', '', { - x1: d + m * 0.5, - y1: ww * 0.5, - x2: d + (w - m * 0.5), - y2: ww * 0.5, - stroke: T.colors.back, - 'stroke-width': 2 - }, svg); // 2 - Tools.dom('line', '', { - x1: ww * 0.5, - x2: ww * 0.5, - y1: d + m * 0.5, - y2: d + (w - m * 0.5), - stroke: T.colors.back, - 'stroke-width': 2 - }, svg); // 3 - Tools.dom('circle', '', { - cx: ww * 0.5, - cy: ww * 0.5, - r: 5, - stroke: T.colors.text, - 'stroke-width': 5, - fill: 'none' - }, svg); // 4 - T.pad2d = svg; - }, - makeKnob: function (model) { - let w = 128; - let radius = 34; - let svg = T.dom('svg', T.css.basic + 'position:relative;', { - viewBox: '0 0 ' + w + ' ' + w, - width: w, - height: w, - preserveAspectRatio: 'none' - }); - T.dom('circle', '', { - cx: 64, - cy: 64, - r: radius, - fill: T.colors.button, - stroke: 'rgba(0,0,0,0.3)', - 'stroke-width': 8 - }, svg); //0 - T.dom('path', '', { - d: '', - stroke: T.colors.text, - 'stroke-width': 4, - fill: 'none', - 'stroke-linecap': 'round' - }, svg); //1 - T.dom('circle', '', { - cx: 64, - cy: 64, - r: radius + 7, - stroke: 'rgba(0,0,0,0.1)', - 'stroke-width': 7, - fill: 'none' - }, svg); //2 - T.dom('path', '', { - d: '', - stroke: 'rgba(255,255,255,0.3)', - 'stroke-width': 2, - fill: 'none', - 'stroke-linecap': 'round', - 'stroke-opacity': 0.5 - }, svg); //3 - T.knob = svg; - }, - makeCircular: function (model) { - let w = 128; - let radius = 40; - let svg = T.dom('svg', T.css.basic + 'position:relative;', { - viewBox: '0 0 ' + w + ' ' + w, - width: w, - height: w, - preserveAspectRatio: 'none' - }); - T.dom('circle', '', { - cx: 64, - cy: 64, - r: radius, - stroke: 'rgba(0,0,0,0.1)', - 'stroke-width': 10, - fill: 'none' - }, svg); //0 - T.dom('path', '', { - d: '', - stroke: T.colors.text, - 'stroke-width': 7, - fill: 'none', - 'stroke-linecap': 'butt' - }, svg); //1 - T.circular = svg; - }, - makeJoystick: function (model) { - //+' background:#f00;' - - let w = 128, - ccc; - let radius = Math.floor((w - 30) * 0.5); - let innerRadius = Math.floor(radius * 0.6); - let svg = T.dom('svg', T.css.basic + 'position:relative;', { - viewBox: '0 0 ' + w + ' ' + w, - width: w, - height: w, - preserveAspectRatio: 'none' - }); - T.dom('defs', null, {}, svg); - T.dom('g', null, {}, svg); - if (model === 0) { - // gradian background - ccc = [[40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0]]; - T.makeGradiant('radialGradient', { - id: 'grad', - cx: '50%', - cy: '50%', - r: '50%', - fx: '50%', - fy: '50%' - }, svg, ccc); - - // gradian shadow - ccc = [[60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0]]; - T.makeGradiant('radialGradient', { - id: 'gradS', - cx: '50%', - cy: '50%', - r: '50%', - fx: '50%', - fy: '50%' - }, svg, ccc); - - // gradian stick - let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; - let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; - ccc = [[30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1]]; - T.makeGradiant('radialGradient', { - id: 'gradIn', - cx: '50%', - cy: '50%', - r: '50%', - fx: '50%', - fy: '50%' - }, svg, ccc); - ccc = [[30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1]]; - T.makeGradiant('radialGradient', { - id: 'gradIn2', - cx: '50%', - cy: '50%', - r: '50%', - fx: '50%', - fy: '50%' - }, svg, ccc); - - // graph - - T.dom('circle', '', { - cx: 64, - cy: 64, - r: radius, - fill: 'url(#grad)' - }, svg); //2 - T.dom('circle', '', { - cx: 64 + 5, - cy: 64 + 10, - r: innerRadius + 10, - fill: 'url(#gradS)' - }, svg); //3 - T.dom('circle', '', { - cx: 64, - cy: 64, - r: innerRadius, - fill: 'url(#gradIn)' - }, svg); //4 - - T.joystick_0 = svg; - } else { - // gradian shadow - ccc = [[69, 'rgb(0,0,0)', 0], [70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0]]; - T.makeGradiant('radialGradient', { - id: 'gradX', - cx: '50%', - cy: '50%', - r: '50%', - fx: '50%', - fy: '50%' - }, svg, ccc); - T.dom('circle', '', { - cx: 64, - cy: 64, - r: radius, - fill: 'none', - stroke: 'rgba(100,100,100,0.25)', - 'stroke-width': '4' - }, svg); //2 - T.dom('circle', '', { - cx: 64, - cy: 64, - r: innerRadius + 14, - fill: 'url(#gradX)' - }, svg); //3 - T.dom('circle', '', { - cx: 64, - cy: 64, - r: innerRadius, - fill: 'none', - stroke: 'rgb(100,100,100)', - 'stroke-width': '4' - }, svg); //4 - - T.joystick_1 = svg; - } - }, - makeColorRing: function () { - let w = 256; - let svg = T.dom('svg', T.css.basic + 'position:relative;', { - viewBox: '0 0 ' + w + ' ' + w, - width: w, - height: w, - preserveAspectRatio: 'none' - }); - T.dom('defs', null, {}, svg); - T.dom('g', null, {}, svg); - let s = 30; //stroke - let r = (w - s) * 0.5; - let mid = w * 0.5; - let n = 24, - nudge = 8 / r / n * Math.PI, - a1 = 0; - let am, tan, d2, a2, ar, i, j, path, ccc; - let color = []; - for (i = 0; i <= n; ++i) { - d2 = i / n; - a2 = d2 * T.TwoPI; - am = (a1 + a2) * 0.5; - tan = 1 / Math.cos((a2 - a1) * 0.5); - ar = [Math.sin(a1), -Math.cos(a1), Math.sin(am) * tan, -Math.cos(am) * tan, Math.sin(a2), -Math.cos(a2)]; - color[1] = T.rgbToHex(T.hslToRgb([d2, 1, 0.5])); - if (i > 0) { - j = 6; - while (j--) { - ar[j] = (ar[j] * r + mid).toFixed(2); - } - path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; - ccc = [[0, color[0], 1], [100, color[1], 1]]; - T.makeGradiant('linearGradient', { - id: 'G' + i, - x1: ar[0], - y1: ar[1], - x2: ar[4], - y2: ar[5], - gradientUnits: "userSpaceOnUse" - }, svg, ccc); - T.dom('path', '', { - d: path, - 'stroke-width': s, - stroke: 'url(#G' + i + ')', - 'stroke-linecap': "butt" - }, svg, 1); - } - a1 = a2 - nudge; - color[0] = color[1]; - } - let tw = 84.90; - - // black / white - ccc = [[0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1]]; - T.makeGradiant('linearGradient', { - id: 'GL0', - x1: 0, - y1: mid - tw, - x2: 0, - y2: mid + tw, - gradientUnits: "userSpaceOnUse" - }, svg, ccc); - ccc = [[0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0]]; - T.makeGradiant('linearGradient', { - id: 'GL1', - x1: mid - 49.05, - y1: 0, - x2: mid + 98, - y2: 0, - gradientUnits: "userSpaceOnUse" - }, svg, ccc); - T.dom('g', null, { - 'transform-origin': '128px 128px', - 'transform': 'rotate(0)' - }, svg); //2 - T.dom('polygon', '', { - points: '78.95 43.1 78.95 212.85 226 128', - fill: 'red' - }, svg, 2); // 2,0 - T.dom('polygon', '', { - points: '78.95 43.1 78.95 212.85 226 128', - fill: 'url(#GL1)', - 'stroke-width': 1, - stroke: 'url(#GL1)' - }, svg, 2); //2,1 - T.dom('polygon', '', { - points: '78.95 43.1 78.95 212.85 226 128', - fill: 'url(#GL0)', - 'stroke-width': 1, - stroke: 'url(#GL0)' - }, svg, 2); //2,2 - T.dom('path', '', { - d: 'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', - fill: 'none', - 'stroke-width': 2, - stroke: '#000' - }, svg, 2); //2,3 - //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 - - T.dom('circle', '', { - cx: 128, - cy: 128, - r: 6, - 'stroke-width': 2, - stroke: '#000', - fill: 'none' - }, svg); //3 - - T.colorRing = svg; - }, - icon: function (type, color, w) { - w = w || 40; - //color = color || '#DEDEDE'; - let viewBox = '0 0 256 256'; - //let viewBox = '0 0 '+ w +' '+ w; - let t = [""]; - switch (type) { - case 'logo': - t[1] = ""; - break; - case 'donate': - t[1] = ""; - break; - case 'neo': - t[1] = ""; - break; - case 'phy': - t[1] = ""; - break; - case 'config': - t[1] = ""; - break; - case 'github': - t[1] = ""; - break; - case 'save': - t[1] = ""; - break; - } - t[2] = ""; - return t.join("\n"); - }, - logoFill_d: ` - M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 - L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 - M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 - Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z - `, - logo_github: ` - M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 - 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 - 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 - 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 - 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z - `, - logo_neo: ` - M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 - 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 - 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 - 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L - 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z - `, - logo_phy: ` - M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 - Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 - `, - logo_config: ` - M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 - L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 - Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 - `, - logo_donate: ` - M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 - 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 - 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 - 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 - 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 - Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 - 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 - 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 - 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M - 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 - 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 - 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 - 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 - 200.9 187.5 200.9 187.5 195.35 Z - ` - }; - T.setText(); - const Tools = T; - - ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile - - class Files { - //----------------------------- - // FILE TYPE - //----------------------------- - - static autoTypes(type) { - let t = []; - switch (type) { - case 'svg': - t = [{ - accept: { - 'image/svg+xml': '.svg' - } - }]; - break; - case 'wav': - t = [{ - accept: { - 'audio/wav': '.wav' - } - }]; - break; - case 'mp3': - t = [{ - accept: { - 'audio/mpeg': '.mp3' - } - }]; - break; - case 'mp4': - t = [{ - accept: { - 'video/mp4': '.mp4' - } - }]; - break; - case 'bin': - case 'hex': - t = [{ - description: 'Binary Files', - accept: { - 'application/octet-stream': ['.bin', '.hex'] - } - }]; - break; - case 'text': - t = [{ - description: 'Text Files', - accept: { - 'text/plain': ['.txt', '.text'], - 'text/html': ['.html', '.htm'] - } - }]; - break; - case 'json': - t = [{ - description: 'JSON Files', - accept: { - 'application/json': ['.json'] - } - }]; //text/plain - break; - case 'js': - t = [{ - description: 'JavaScript Files', - accept: { - 'text/javascript': ['.js'] - } - }]; - break; - case 'image': - t = [{ - description: 'Images', - accept: { - 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] - } - }]; - break; - case 'icon': - t = [{ - description: 'Icons', - accept: { - 'image/x-ico': ['.ico'] - } - }]; - break; - case 'lut': - t = [{ - description: 'Lut', - accept: { - 'text/plain': ['.cube', '.3dl'] - } - }]; - break; - } - return t; - } - - //----------------------------- - // LOAD - //----------------------------- - - static async load(o = {}) { - if (typeof window.showOpenFilePicker !== 'function') { - window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; - } - try { - let type = o.type || ''; - const options = { - excludeAcceptAllOption: type ? true : false, - multiple: false - //startIn:'./assets' - }; - options.types = Files.autoTypes(type); - - // create a new handle - const handle = await window.showOpenFilePicker(options); - const file = await handle[0].getFile(); - //let content = await file.text() - - if (!file) return null; - let fname = file.name; - let ftype = fname.substring(fname.lastIndexOf('.') + 1, fname.length); - const dataUrl = ['png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3']; - const dataBuf = ['sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf']; - const reader = new FileReader(); - if (dataUrl.indexOf(ftype) !== -1) reader.readAsDataURL(file);else if (dataBuf.indexOf(ftype) !== -1) reader.readAsArrayBuffer(file);else reader.readAsText(file); - reader.onload = function (e) { - let content = e.target.result; - switch (type) { - case 'image': - let img = new Image(); - img.onload = function () { - if (o.callback) o.callback(img, fname, ftype); - }; - img.src = content; - break; - case 'json': - if (o.callback) o.callback(JSON.parse(content), fname, ftype); - break; - default: - if (o.callback) o.callback(content, fname, ftype); - break; - } - }; - } catch (e) { - console.log(e); - if (o.always && o.callback) o.callback(null); - } - } - static showOpenFilePickerPolyfill(options) { - return new Promise(resolve => { - const input = document.createElement("input"); - input.type = "file"; - input.multiple = options.multiple; - input.accept = options.types.map(type => type.accept).flatMap(inst => Object.keys(inst).flatMap(key => inst[key])).join(","); - input.addEventListener("change", () => { - resolve([...input.files].map(file => { - return { - getFile: async () => new Promise(resolve => { - resolve(file); - }) - }; - })); - }); - input.click(); - }); - } - - //----------------------------- - // SAVE - //----------------------------- - - static async save(o = {}) { - let usePoly = false; - if (typeof window.showSaveFilePicker !== 'function') { - window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; - usePoly = true; - } - try { - let type = o.type || ''; - const options = { - suggestedName: o.name || 'hello', - data: o.data || '' - }; - options.types = Files.autoTypes(type); - options.finalType = Object.keys(options.types[0].accept)[0]; - options.suggestedName += options.types[0].accept[options.finalType][0]; - - // create a new handle - const handle = await window.showSaveFilePicker(options); - if (usePoly) return; - - // create a FileSystemWritableFileStream to write to - const file = await handle.createWritable(); - let blob = new Blob([options.data], { - type: options.finalType - }); - - // write our file - await file.write(blob); - - // close the file and write the contents to disk. - await file.close(); - } catch (e) { - console.log(e); - } - } - static showSaveFilePickerPolyfill(options) { - return new Promise(resolve => { - const a = document.createElement("a"); - a.download = options.suggestedName || "my-file.txt"; - let blob = new Blob([options.data], { - type: options.finalType - }); - a.href = URL.createObjectURL(blob); - a.addEventListener("click", () => { - resolve(setTimeout(() => URL.revokeObjectURL(a.href), 1000)); - }); - a.click(); - }); - } - - //----------------------------- - // FOLDER not possible in poly - //----------------------------- - - static async getFolder() { - try { - const handle = await window.showDirectoryPicker(); - const files = []; - for await (const entry of handle.values()) { - const file = await entry.getFile(); - files.push(file); - } - console.log(files); - return files; - } catch (e) { - console.log(e); - } - } - } - - class V2 { - constructor(x = 0, y = 0) { - this.x = x; - this.y = y; - } - set(x, y) { - this.x = x; - this.y = y; - return this; - } - divide(v) { - this.x /= v.x; - this.y /= v.y; - return this; - } - multiply(v) { - this.x *= v.x; - this.y *= v.y; - return this; - } - multiplyScalar(scalar) { - this.x *= scalar; - this.y *= scalar; - return this; - } - divideScalar(scalar) { - return this.multiplyScalar(1 / scalar); - } - length() { - return Math.sqrt(this.x * this.x + this.y * this.y); - } - angle() { - // computes the angle in radians with respect to the positive x-axis - - var angle = Math.atan2(this.y, this.x); - if (angle < 0) angle += 2 * Math.PI; - return angle; - } - addScalar(s) { - this.x += s; - this.y += s; - return this; - } - negate() { - this.x *= -1; - this.y *= -1; - return this; - } - neg() { - this.x = -1; - this.y = -1; - return this; - } - isZero() { - return this.x === 0 && this.y === 0; - } - copy(v) { - this.x = v.x; - this.y = v.y; - return this; - } - equals(v) { - return v.x === this.x && v.y === this.y; - } - nearEquals(v, n) { - return v.x.toFixed(n) === this.x.toFixed(n) && v.y.toFixed(n) === this.y.toFixed(n); - } - lerp(v, alpha) { - if (v === null) { - this.x -= this.x * alpha; - this.y -= this.y * alpha; - } else { - this.x += (v.x - this.x) * alpha; - this.y += (v.y - this.y) * alpha; - } - return this; - } - } - - /** - * @author lth / https://github.com/lo-th - */ - - class Proto { - constructor(o = {}) { - // disable mouse controle - this.lock = o.lock || false; - - // for button - this.neverlock = false; - - // only simple space - this.isSpace = o.isSpace || false; - - // if is on gui or group - this.main = o.main || null; - this.isUI = o.isUI || false; - this.group = o.group || null; - this.isListen = false; - this.top = 0; - this.ytop = 0; - this.dx = o.dx || 0; - this.isSelectable = o.selectable !== undefined ? o.selectable : false; - this.unselectable = o.unselect !== undefined ? o.unselect : this.isSelectable; - this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' - - this.css = this.main ? this.main.css : Tools.css; - this.colors = Tools.defineColor(o, this.main ? this.group ? this.group.colors : this.main.colors : Tools.colors); - this.overEffect = this.colors.showOver; - this.svgs = Tools.svgs; - this.zone = { - x: 0, - y: 0, - w: 0, - h: 0, - d: 0 - }; - this.local = new V2().neg(); - this.isCanvasOnly = false; - this.isSelect = false; - - // percent of title - this.p = o.p !== undefined ? o.p : Tools.size.p; - this.w = this.isUI ? this.main.size.w : Tools.size.w; - if (o.w !== undefined) this.w = o.w; - this.h = this.isUI ? this.main.size.h : Tools.size.h; - if (o.h !== undefined) this.h = o.h; - if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h;else this.lock = true; - - // decale for canvas only - this.fw = o.fw || 0; - this.autoWidth = o.auto || true; // auto width or flex - this.isOpen = false; //false// open statu - - // radius for toolbox - this.radius = o.radius || this.colors.radius; - this.transition = o.transition || Tools.transition; - - // only for number - this.isNumber = false; - this.noNeg = o.noNeg || false; - this.allEqual = o.allEqual || false; - - // only most simple - this.mono = false; - - // stop listening for edit slide text - this.isEdit = false; - - // no title - this.simple = o.simple || false; - if (this.simple) this.sa = 0; - - // define obj size - this.setSize(this.w); - - // title size - if (o.sa !== undefined) this.sa = o.sa; - if (o.sb !== undefined) this.sb = o.sb; - if (this.simple) this.sb = this.w - this.sa; - - // last number size for slide - this.sc = o.sc === undefined ? 47 : o.sc; - - // for listening object - this.objectLink = null; - this.isSend = false; - this.objectKey = null; - this.txt = o.name || ""; - this.name = o.rename || this.txt; - this.target = o.target || null; - - // callback - this.callback = o.callback === undefined ? null : o.callback; - this.endCallback = null; - this.openCallback = o.openCallback === undefined ? null : o.openCallback; - this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; - - // if no callback take one from group or gui - if (this.callback === null && this.isUI && this.main.callback !== null) { - this.callback = this.group ? this.group.callback : this.main.callback; - } - - // elements - this.c = []; - - // style - this.s = []; - this.useFlex = this.isUI ? this.main.useFlex : false; - let flexible = this.useFlex ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" : "float:left;"; - this.c[0] = Tools.dom("div", this.css.basic + flexible + "position:relative; height:20px;"); - this.s[0] = this.c[0].style; - - // bottom margin - this.margin = this.colors.sy; - this.mtop = 0; - let marginDiv = Tools.isDivid(this.margin); - if (this.isUI && this.margin) { - this.s[0].boxSizing = "content-box"; - if (marginDiv) { - this.mtop = this.margin * 0.5; - //this.s[0].borderTop = '${this.mtop}px solid transparent' - //console.log(`${this.mtop}px solid transparent`) - this.s[0].borderTop = this.mtop + "px solid transparent"; - this.s[0].borderBottom = this.mtop + "px solid transparent"; - } else { - this.s[0].borderBottom = this.margin + "px solid transparent"; - } - } - - // with title - if (!this.simple) { - this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); - this.s[1] = this.c[1].style; - this.c[1].textContent = this.name; - this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; - } - if (o.pos) { - this.s[0].position = "absolute"; - for (let p in o.pos) { - this.s[0][p] = o.pos[p]; - } - this.mono = true; - } - if (o.css) this.s[0].cssText = o.css; - } - - // ---------------------- - // make the node - // ---------------------- - - init() { - this.ytop = this.top + this.mtop; - this.zone.h = this.h + this.margin; - this.zone.w = this.w; - let s = this.s; // style cache - let c = this.c; // div cach - - s[0].height = this.h + "px"; - if (this.isUI) s[0].background = this.colors.background; - if (!this.autoWidth && this.useFlex) { - s[0].flex = "1 0 auto"; - s[0].minWidth = this.minw + "px"; - s[0].textAlign = "center"; - } else { - if (this.isUI) s[0].width = "100%"; - } - - //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; - if (c[1] !== undefined && this.autoWidth) { - s[1] = c[1].style; - s[1].top = 1 + "px"; - s[1].height = this.h - 2 + "px"; - } - let frag = Tools.frag; - for (let i = 1, lng = c.length; i !== lng; i++) { - if (c[i] !== undefined) { - frag.appendChild(c[i]); - s[i] = c[i].style; - } - } - let pp = this.target !== null ? this.target : this.isUI ? this.main.inner : document.body; - if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]);else pp.appendChild(c[0]); - c[0].appendChild(frag); - this.rSize(); - - // ! solo proto - if (!this.isUI) { - this.c[0].style.pointerEvents = "auto"; - Roots.add(this); - } - } - addTransition() { - if (this.baseH && this.transition && this.isUI) { - this.c[0].style.transition = "height " + this.transition + "s ease-out"; - } - } - - // from Tools - - dom(type, css, obj, dom, id) { - return Tools.dom(type, css, obj, dom, id); - } - setSvg(dom, type, value, id, id2) { - Tools.setSvg(dom, type, value, id, id2); - } - setCss(dom, css) { - Tools.setCss(dom, css); - } - clamp(value, min, max) { - return Tools.clamp(value, min, max); - } - getColorRing() { - if (!Tools.colorRing) Tools.makeColorRing(); - return Tools.clone(Tools.colorRing); - } - getJoystick(model) { - if (!Tools["joystick_" + model]) Tools.makeJoystick(model); - return Tools.clone(Tools["joystick_" + model]); - } - getCircular(model) { - if (!Tools.circular) Tools.makeCircular(model); - return Tools.clone(Tools.circular); - } - getKnob(model) { - if (!Tools.knob) Tools.makeKnob(model); - return Tools.clone(Tools.knob); - } - getPad2d(model) { - if (!Tools.pad2d) Tools.makePad(model); - return Tools.clone(Tools.pad2d); - } - - // from Roots - - cursor(name) { - Roots.cursor(name); - } - - ///////// - - update() {} - reset() {} - - ///////// - - content() { - return this.c[0]; - } - getDom() { - return this.c[0]; - } - uiout() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.background; - } - uiover() { - if (this.lock) return; - if (!this.overEffect) return; - if (this.s) this.s[0].background = this.colors.backgroundOver; - } - rename(s) { - if (this.c[1] !== undefined) this.c[1].textContent = s; - } - listen() { - this.isListen = Roots.addListen(this); - return this; - } - listening() { - // modified by Fedemarino - if (this.objectLink === null) return; - if (this.isSend) return; - if (this.isEdit) return; - // check if value has changed - let hasChanged = this.setValue(this.objectLink[this.objectKey]); - return hasChanged; - } - setValue(v) { - const old = this.value; - if (this.isNumber) this.value = this.numValue(v); - //else if( v instanceof Array && v.length === 1 ) v = v[0]; - else this.value = v; - this.update(); - let hasChanged = false; - if (old !== this.value) { - hasChanged = true; - } - return hasChanged; - } - - // ---------------------- - // update every change - // ---------------------- - - onChange(f) { - if (this.isSpace) return; - this.callback = f || null; - return this; - } - - // ---------------------- - // update only on end - // ---------------------- - - onFinishChange(f) { - if (this.isSpace) return; - this.callback = null; - this.endCallback = f; - return this; - } - - // ---------------------- - // event on open close - // ---------------------- - - onOpen(f) { - this.openCallback = f; - return this; - } - onClose(f) { - this.closeCallback = f; - return this; - } - - // ---------------------- - // send back value - // ---------------------- - - send(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - this.isSend = true; - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - if (this.callback) this.callback(v, this.objectKey); - this.isSend = false; - } - sendEnd(v) { - v = v || this.value; - if (v instanceof Array && v.length === 1) v = v[0]; - if (this.endCallback) this.endCallback(v); - if (this.objectLink !== null) this.objectLink[this.objectKey] = v; - } - - // ---------------------- - // clear node - // ---------------------- - - dispose() { - if (this.isListen) Roots.removeListen(this); - Tools.clear(this.c[0]); - if (this.target !== null) { - if (this.group !== null) this.group.clearOne(this);else this.target.removeChild(this.c[0]); - } else { - if (this.isUI) this.main.clearOne(this);else document.body.removeChild(this.c[0]); - } - if (!this.isUI) Roots.remove(this); - this.c = null; - this.s = null; - this.callback = null; - this.target = null; - this.isListen = false; - } - clear() {} - - // ---------------------- - // change size - // ---------------------- - - getWidth() { - let nw = Roots.getWidth(this); - if (nw) this.w = nw; - } - setSize(sx) { - if (!this.autoWidth) return; - this.w = sx; - if (this.simple) { - this.sb = this.w - this.sa; - } else { - let pp = this.w * (this.p / 100); - //this.sa = Math.floor( pp + 10 ) - //this.sb = Math.floor( this.w - pp - 20 ) - this.sa = Math.floor(pp + 8); - this.sb = Math.floor(this.w - pp - 16); - } - } - rSize() { - if (!this.autoWidth) return; - if (!this.isUI) this.s[0].width = this.w + "px"; - if (!this.simple) this.s[1].width = this.sa + "px"; - } - - // ---------------------- - // for numeric value - // ---------------------- - - setTypeNumber(o) { - this.isNumber = true; - this.value = 0; - if (o.value !== undefined) { - if (typeof o.value === "string") this.value = o.value * 1;else this.value = o.value; - } - this.min = o.min === undefined ? -Infinity : o.min; - this.max = o.max === undefined ? Infinity : o.max; - this.precision = o.precision === undefined ? 2 : o.precision; - let s; - switch (this.precision) { - case 0: - s = 1; - break; - case 1: - s = 0.1; - break; - case 2: - s = 0.01; - break; - case 3: - s = 0.001; - break; - case 4: - s = 0.0001; - break; - case 5: - s = 0.00001; - break; - case 6: - s = 0.000001; - break; - } - this.step = o.step === undefined ? s : o.step; - this.range = this.max - this.min; - this.value = this.numValue(this.value); - } - numValue(n) { - if (this.noNeg) n = Math.abs(n); - return Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1; - } - - // ---------------------- - // EVENTS DEFAULT - // ---------------------- - - handleEvent(e) { - if (this.lock) return; - if (this.neverlock) Roots.lock = false; - if (!this[e.type]) return console.error(e.type, "this type of event no existe !"); - - // TODO !!!! - - //if( this.marginDiv ) z.d -= this.margin * 0.5 - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 - - return this[e.type](e); - } - wheel(e) { - return false; - } - mousedown(e) { - return false; - } - mousemove(e) { - return false; - } - mouseup(e) { - return false; - } - keydown(e) { - return false; - } - keyup(e) { - return false; - } - - // ---------------------- - // object referency - // ---------------------- - - setReferency(obj, key) { - this.objectLink = obj; - this.objectKey = key; - } - display(v = false) { - this.s[0].visibility = v ? "visible" : "hidden"; - } - - // ---------------------- - // resize height - // ---------------------- - - open() { - if (this.isOpen) return; - this.isOpen = true; - Roots.needResize = true; - if (this.openCallback) this.openCallback(); - } - close() { - if (!this.isOpen) return; - this.isOpen = false; - Roots.needResize = true; - if (this.closeCallback) this.closeCallback(); - } - needZone() { - Roots.needReZone = true; - } - rezone() { - Roots.needReZone = true; - } - - // ---------------------- - // INPUT - // ---------------------- - - select() {} - unselect() {} - setInput(Input) { - Roots.setInput(Input, this); - } - upInput(x, down) { - return Roots.upInput(x, down); - } - - // ---------------------- - // special item - // ---------------------- - - selected(b) { - this.isSelect = b || false; - } - } - - class Bool extends Proto { - constructor(o = {}) { - super(o); - this.value = o.value || false; - this.model = o.mode !== undefined ? o.mode : 0; - this.onName = o.rename || this.txt; - if (o.onName) o.onname = o.onName; - if (o.onname) this.onName = o.onname; - this.inh = o.inh || Math.floor(this.h * 0.8); - this.inw = o.inw || 36; - let cc = this.colors; - if (this.model === 0) { - let t = Math.floor(this.h * 0.5) - (this.inh - 2) * 0.5; - this.c[2] = this.dom('div', this.css.basic + 'background:' + cc.inputBg + '; height:' + (this.inh - 2) + 'px; width:' + this.inw + 'px; top:' + t + 'px; border-radius:10px; border:2px solid ' + cc.back); - this.c[3] = this.dom('div', this.css.basic + 'height:' + (this.inh - 6) + 'px; width:16px; top:' + (t + 2) + 'px; border-radius:10px; background:' + cc.button + ';'); - } else { - this.p = 0; - if (this.c[1] !== undefined) this.c[1].textContent = ''; - this.c[2] = this.dom('div', this.css.txt + this.css.button + 'top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.borderSize + 'px solid ' + cc.border + '; border-radius:' + this.radius + 'px;'); - } - this.stat = -1; - this.init(); - this.update(); - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown(e) { - this.value = !this.value; - this.update(true); - return this.mousemove(e); - } - mousemove(e) { - this.cursor('pointer'); - return this.mode(true); - } - reset() { - this.cursor(); - return this.mode(); - } - - // ---------------------- - // MODE - // ---------------------- - - mode(over) { - let change = false; - let cc = this.colors, - s = this.s, - n, - v = this.value; - if (over) n = v ? 4 : 3;else n = v ? 2 : 1; - if (this.stat !== n) { - this.stat = n; - if (this.model !== 0) { - switch (n) { - case 1: - s[2].color = cc.text; - s[2].background = cc.button; - break; - case 2: - s[2].color = cc.textSelect; - s[2].background = cc.select; - break; - case 3: - s[2].color = cc.textOver; - s[2].background = cc.overoff; - break; - case 4: - s[2].color = cc.textOver; - s[2].background = cc.over; - break; - } - this.c[2].innerHTML = v ? this.onName : this.name; - } else { - switch (n) { - case 1: - s[2].background = s[2].borderColor = cc.backoff; - s[3].background = cc.button; - break; - // off out - case 2: - s[2].background = s[2].borderColor = cc.back; - s[3].background = cc.textOver; - break; - // on over - case 3: - s[2].background = s[2].borderColor = cc.back; - s[3].background = cc.overoff; - break; - // off over - case 4: - s[2].background = s[2].borderColor = cc.backoff; - s[3].background = cc.textSelect; - break; - // on out - } - s[3].marginLeft = v ? '17px' : '2px'; - this.c[1].textContent = v ? this.onName : this.name; - } - change = true; - } - return change; - } - - // ---------------------- - - update(up) { - this.mode(); - if (up) this.send(); - } - rSize() { - super.rSize(); - let s = this.s; - let w = this.w - 10 - this.inw; - if (this.model === 0) { - s[2].left = w + 'px'; - s[3].left = w + 'px'; - } else { - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - } - } - } - - class Button extends Proto { - constructor(o = {}) { - super(o); - this.value = ''; - if (o.value !== undefined) this.value = o.value; - this.values = o.value || this.txt; - if (o.values) this.values = o.values; - if (!o.values && !o.value) this.txt = ''; - this.onName = o.onName || null; - this.on = false; - - // force button width - this.bw = o.forceWidth || 0; - if (o.bw) this.bw = o.bw; - this.space = o.space || 3; - if (typeof this.values === 'string') this.values = [this.values]; - this.isDown = false; - this.neverlock = true; - this.res = 0; - this.lng = this.values.length; - this.tmp = []; - this.stat = []; - let sel, - cc = this.colors; - for (let i = 0; i < this.lng; i++) { - sel = false; - if (this.values[i] === this.value && this.isSelectable) sel = true; - this.c[i + 2] = this.dom('div', this.css.txt + this.css.button + 'top:1px; height:' + (this.h - 2) + 'px; border:' + cc.borderSize + 'px solid ' + cc.border + '; border-radius:' + this.radius + 'px;'); - this.c[i + 2].style.background = sel ? cc.select : cc.button; - this.c[i + 2].style.color = sel ? cc.textSelect : cc.text; - this.c[i + 2].innerHTML = this.values[i]; - this.stat[i] = sel ? 3 : 1; - } - if (this.txt === '') this.p = 0; - if (!o.value && !o.values || this.p === 0) { - if (this.c[1] !== undefined) this.c[1].textContent = ''; - } - this.init(); - } - onOff() { - this.on = !this.on; - this.label(this.on ? this.onName : this.value); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return -1; - let i = this.lng; - let t = this.tmp; - while (i--) { - if (l.x > t[i][0] && l.x < t[i][2]) return i; - } - return -1; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (!this.isDown) return false; - this.isDown = false; - if (this.res !== -1) { - if (this.value === this.values[this.res] && this.unselectable) this.value = '';else this.value = this.values[this.res]; - if (this.onName !== null) this.onOff(); - this.send(); - } - return this.mousemove(e); - } - mousedown(e) { - if (this.isDown) return false; - this.isDown = true; - return this.mousemove(e); - } - mousemove(e) { - let up = false; - this.res = this.testZone(e); - if (this.res !== -1) { - this.cursor('pointer'); - up = this.modes(this.isDown ? 3 : 2, this.res); - } else { - up = this.reset(); - } - return up; - } - - // ---------------------- - - modes(N = 1, id = -1) { - let i = this.lng, - w, - n, - r = false; - while (i--) { - n = N; - w = this.isSelectable ? this.values[i] === this.value : false; - if (i === id) { - if (w && n === 2) n = 3; - } else { - n = 1; - if (w) n = 4; - } - - //if( this.mode( n, i ) ) r = true - r = this.mode(n, i); - } - return r; - } - mode(n, id) { - //if(!this.s) return false - - let change = false; - let cc = this.colors, - s = this.s; - let i = id + 2; - if (this.stat[id] !== n) { - this.stat[id] = n; - switch (n) { - case 1: - s[i].color = cc.text; - s[i].background = cc.button; - break; - case 2: - s[i].color = cc.textOver; - s[i].background = cc.overoff; - break; - case 3: - s[i].color = cc.textOver; - s[i].background = cc.over; - break; - case 4: - s[i].color = cc.textSelect; - s[i].background = cc.select; - break; - } - change = true; - } - return change; - } - - // ---------------------- - - reset() { - this.res = -1; - this.cursor(); - return this.modes(); - } - label(string, n) { - n = n || 2; - this.c[n].textContent = string; - } - switchValues(n, string) { - this.c[n + 2].innerHTML = this.values[n] = string; - } - icon(string, y = 0, n = 2) { - //if(y) this.s[n].margin = ( y ) +'px 0px'; - this.s[n].padding = y + 'px 0px'; - this.c[n].innerHTML = string; - return this; - } - rSize() { - super.rSize(); - let s = this.s; - let w = this.sb; - let d = this.sa; - let i = this.lng; - let sx = this.colors.sx; //this.space; - //let size = Math.floor( ( w-(dc*(i-1)) ) / i ); - let size = (w - sx * (i - 1)) / i; - if (this.bw) { - size = this.bw < size ? this.bw : size; - //d = Math.floor((this.w-( (size * i) + (dc * (i-1)) ))*0.5) - d = (this.w - (size * i + sx * (i - 1))) * 0.5; - } - while (i--) { - //this.tmp[i] = [ Math.floor( d + ( size * i ) + ( dc * i )), size ]; - this.tmp[i] = [d + size * i + sx * i, size]; - this.tmp[i][2] = this.tmp[i][0] + this.tmp[i][1]; - s[i + 2].left = this.tmp[i][0] + 'px'; - s[i + 2].width = this.tmp[i][1] + 'px'; - } - } - } - - class Circular extends Proto { - constructor(o = {}) { - super(o); - this.isCyclic = o.cyclic || false; - this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; - this.autoWidth = false; - this.minw = this.w; - this.diam = o.diam || this.w; - this.setTypeNumber(o); - this.twoPi = Tools.TwoPI; - this.pi90 = Tools.pi90; - this.offset = new V2(); - this.h = o.h || this.w + 10; - this.c[0].style.width = this.w + 'px'; - this.c[0].style.display = 'block'; - if (this.c[1] !== undefined) { - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - } - this.percent = 0; - this.cmode = 0; - let cc = this.colors; - this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); - - // svg - - this.c[3] = this.getCircular(); - this.setSvg(this.c[3], 'stroke', cc.back, 0); - this.setSvg(this.c[3], 'd', this.makePath(), 1); - this.setSvg(this.c[3], 'stroke', cc.text, 1); - this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); - this.setCss(this.c[3], { - width: this.diam, - height: this.diam, - left: 0, - top: this.top - }); - this.init(); - this.update(); - } - mode(mode) { - if (this.cmode === mode) return false; - let cc = this.colors; - let color; - switch (mode) { - case 0: - // base - - this.s[2].color = cc.text; - this.setSvg(this.c[3], 'stroke', cc.back, 0); - color = this.model > 0 ? Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)) : cc.text; - this.setSvg(this.c[3], 'stroke', color, 1); - break; - case 1: - // down - - this.s[2].color = cc.textOver; - this.setSvg(this.c[3], 'stroke', cc.backoff, 0); - color = this.model > 0 ? Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)) : cc.textOver; - this.setSvg(this.c[3], 'stroke', color, 1); - break; - } - this.cmode = mode; - return true; - } - reset() { - this.isDown = false; - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'circular'; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - this.isDown = false; - this.sendEnd(); - return this.mode(0); - } - mousedown(e) { - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove(e); - return this.mode(1); - } - mousemove(e) { - if (!this.isDown) return; - - //console.log('over') - - let off = this.offset; - off.x = this.w * 0.5 - (e.clientX - this.zone.x); - off.y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); - this.r = off.angle() - this.pi90; - this.r = (this.r % this.twoPi + this.twoPi) % this.twoPi; - if (this.oldr !== null) { - let dif = this.r - this.oldr; - this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; - if (dif > 6) this.r = 0; - if (dif < -6) this.r = this.twoPi; - } - let steps = 1 / this.twoPi; - let value = this.r * steps; - let n = this.range * value + this.min - this.old; - if (n >= this.step || n <= this.step) { - n = ~~(n / this.step); - this.value = this.numValue(this.old + n * this.step); - this.update(true); - this.old = this.value; - this.oldr = this.r; - } - } - wheel(e) { - let name = this.testZone(e); - if (name === 'circular') { - let v = this.value - this.step * e.delta; - if (v > this.max) { - v = this.isCyclic ? this.min : this.max; - } else if (v < this.min) { - v = this.isCyclic ? this.max : this.min; - } - this.setValue(v); - this.old = v; - this.update(true); - return true; - } - return false; - } - - // ---------------------- - - makePath() { - let r = 40; - let d = 24; - let a = this.percent * this.twoPi - 0.001; - let x2 = r + r * Math.sin(a) + d; - let y2 = r - r * Math.cos(a) + d; - let big = a > Math.PI ? 1 : 0; - return "M " + (r + d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; - } - update(up) { - this.c[2].textContent = this.value; - this.percent = (this.value - this.min) / this.range; - this.setSvg(this.c[3], 'd', this.makePath(), 1); - if (this.model > 0) { - let cc = this.colors; - let color = Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(cc.text, -0.75)), Tools.unpack(cc.text), this.percent)); - this.setSvg(this.c[3], 'stroke', color, 1); - } - if (up) this.send(); - } - } - - class Color extends Proto { - constructor(o = {}) { - super(o); - - //this.autoHeight = true; - - this.ctype = o.ctype || 'hex'; - this.wfixe = 256; - this.cw = this.sb > 256 ? 256 : this.sb; - if (o.cw != undefined) this.cw = o.cw; - - // color up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - this.baseH = this.h; - this.offset = new V2(); - this.decal = new V2(); - this.pp = new V2(); - let cc = this.colors; - - // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) - - this.c[2] = this.dom('div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h - 2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};`); - //this.s[2] = this.c[2].style; - - //this.s[2].textShadow = 'none' - - /*if( this.up ){ - this.s[2].top = 'auto'; - this.s[2].bottom = '2px'; - }*/ - - //this.c[0].style.textAlign = 'center'; - this.c[0].style.display = 'block'; - this.c[3] = this.getColorRing(); - this.c[3].style.visibility = 'hidden'; - this.hsl = null; - this.value = '#ffffff'; - if (o.value !== undefined) { - if (o.value instanceof Array) this.value = Tools.rgbToHex(o.value);else if (!isNaN(o.value)) this.value = Tools.hexToHtml(o.value);else this.value = o.value; - } - this.bcolor = null; - this.isDown = false; - this.fistDown = false; - this.notext = o.notext || false; - this.tr = 98; - this.tsl = Math.sqrt(3) * this.tr; - this.hue = 0; - this.d = 256; - this.init(); - this.setColor(this.value); - if (o.open !== undefined) this.open(); - } - testZone(mx, my) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (this.up && this.isOpen) { - if (l.y > this.wfixe) return 'title';else return 'color'; - } else { - if (l.y < this.baseH + 2) return 'title';else if (this.isOpen) return 'color'; - } - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - this.isDown = false; - this.d = 256; - } - mousedown(e) { - let name = this.testZone(e.clientX, e.clientY); - - //if( !name ) return; - if (name === 'title') { - if (!this.isOpen) this.open();else this.close(); - return true; - } - if (name === 'color') { - this.isDown = true; - this.fistDown = true; - this.mousemove(e); - } - } - mousemove(e) { - let name = this.testZone(e.clientX, e.clientY); - let off, - d, - hue, - sat, - lum, - rad, - x, - y, - rr, - T = Tools; - if (name === 'title') this.cursor('pointer'); - if (name === 'color') { - off = this.offset; - off.x = e.clientX - (this.zone.x + this.decal.x + this.mid); - off.y = e.clientY - (this.zone.y + this.decal.y + this.mid) - this.ytop; - d = off.length() * this.ratio; - rr = off.angle(); - if (rr < 0) rr += 2 * T.PI; - if (d < 128) this.cursor('crosshair');else if (!this.isDown) this.cursor(); - if (this.isDown) { - if (this.fistDown) { - this.d = d; - this.fistDown = false; - } - if (this.d < 128) { - if (this.d > this.tr) { - // outside hue - - hue = (rr + T.pi90) / T.TwoPI; - this.hue = (hue + 1) % 1; - this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); - } else { - // triangle - - x = off.x * this.ratio; - y = off.y * this.ratio; - let rr = this.hue * T.TwoPI + T.PI; - if (rr < 0) rr += 2 * T.PI; - rad = Math.atan2(-y, x); - if (rad < 0) rad += 2 * T.PI; - let rad0 = (rad + T.pi90 + T.TwoPI + rr) % T.TwoPI, - rad1 = rad0 % (2 / 3 * T.PI) - T.pi60, - a = 0.5 * this.tr, - b = Math.tan(rad1) * a, - r = Math.sqrt(x * x + y * y), - maxR = Math.sqrt(a * a + b * b); - if (r > maxR) { - let dx = Math.tan(rad1) * r; - let rad2 = Math.atan(dx / maxR); - if (rad2 > T.pi60) rad2 = T.pi60;else if (rad2 < -T.pi60) rad2 = -T.pi60; - rad += rad2 - rad1; - rad0 = (rad + T.pi90 + T.TwoPI + rr) % T.TwoPI, rad1 = rad0 % (2 / 3 * T.PI) - T.pi60; - b = Math.tan(rad1) * a; - r = maxR = Math.sqrt(a * a + b * b); - } - lum = Math.sin(rad0) * r / this.tsl + 0.5; - let w = 1 - Math.abs(lum - 0.5) * 2; - sat = (Math.cos(rad0) * r + this.tr / 2) / (1.5 * this.tr) / w; - sat = T.clamp(sat, 0, 1); - this.setHSL([this.hsl[0], sat, lum]); - } - } - } - } - } - - // ---------------------- - - setHeight() { - this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; - this.s[0].height = this.h + 'px'; - this.zone.h = this.h; - } - parentHeight(t) { - if (this.group !== null) this.group.calc(t);else if (this.isUI) this.main.calc(t); - } - open() { - super.open(); - this.setHeight(); - if (this.up) this.zone.y -= this.wfixe + 5; - let t = this.h - this.baseH; - this.s[3].visibility = 'visible'; - //this.s[3].display = 'block'; - this.parentHeight(t); - } - close() { - super.close(); - if (this.up) this.zone.y += this.wfixe + 5; - let t = this.h - this.baseH; - this.setHeight(); - this.s[3].visibility = 'hidden'; - //this.s[3].display = 'none'; - this.parentHeight(-t); - } - update(up) { - let cc = Tools.rgbToHex(Tools.hslToRgb([this.hsl[0], 1, 0.5])); - this.moveMarkers(); - this.value = this.bcolor; - this.setSvg(this.c[3], 'fill', cc, 2, 0); - this.s[2].background = this.bcolor; - if (!this.notext) this.c[2].textContent = Tools.htmlToHex(this.bcolor); - this.invert = Tools.findDeepInver(this.rgb); - this.s[2].color = this.invert ? '#fff' : '#000'; - if (!up) return; - if (this.ctype === 'array') this.send(this.rgb); - if (this.ctype === 'rgb') this.send(Tools.htmlRgb(this.rgb)); - if (this.ctype === 'hex') this.send(Tools.htmlToHex(this.value)); - if (this.ctype === 'html') this.send(); - } - setValue(v) { - if (v instanceof Array) this.value = Tools.rgbToHex(v);else if (!isNaN(v)) this.value = Tools.hexToHtml(v);else this.value = v; - this.setColor(this.value); - this.update(); - } - setColor(color) { - let unpack = Tools.unpack(color); - if (this.bcolor !== color && unpack) { - this.bcolor = color; - this.rgb = unpack; - this.hsl = Tools.rgbToHsl(this.rgb); - this.hue = this.hsl[0]; - this.update(); - } - return this; - } - setHSL(hsl) { - this.hsl = hsl; - this.rgb = Tools.hslToRgb(hsl); - this.bcolor = Tools.rgbToHex(this.rgb); - this.update(true); - return this; - } - moveMarkers() { - let p = this.pp; - let T = Tools; - this.invert ? '#fff' : '#000'; - let a = this.hsl[0] * T.TwoPI; - let third = 2 / 3 * T.PI; - let r = this.tr; - let h = this.hsl[0]; - let s = this.hsl[1]; - let l = this.hsl[2]; - let angle = (a - T.pi90) * T.todeg; - h = -a + T.pi90; - let hx = Math.cos(h) * r; - let hy = -Math.sin(h) * r; - let sx = Math.cos(h - third) * r; - let sy = -Math.sin(h - third) * r; - let vx = Math.cos(h + third) * r; - let vy = -Math.sin(h + third) * r; - let mx = (sx + vx) / 2, - my = (sy + vy) / 2; - a = (1 - 2 * Math.abs(l - .5)) * s; - let x = sx + (vx - sx) * l + (hx - mx) * a; - let y = sy + (vy - sy) * l + (hy - my) * a; - p.set(x, y).addScalar(128); - - //let ff = (1-l)*255; - // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); - - this.setSvg(this.c[3], 'transform', 'rotate(' + angle + ' )', 2); - this.setSvg(this.c[3], 'cx', p.x, 3); - this.setSvg(this.c[3], 'cy', p.y, 3); - this.setSvg(this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3); - this.setSvg(this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3); - this.setSvg(this.c[3], 'fill', this.bcolor, 3); - } - rSize() { - //Proto.prototype.rSize.call( this ); - super.rSize(); - let s = this.s; - s[2].width = this.sb + 'px'; - s[2].left = this.sa + 'px'; - - //console.log(this.sb) - - this.cw = this.sb > 256 ? 256 : this.sb; - this.rSizeColor(this.cw); - this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - //s[3].left = this.decal.x + 'px'; - } - rSizeColor(w) { - if (w === this.wfixe) return; - this.wfixe = w; - let s = this.s; - - //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); - this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; - this.mid = Math.floor(this.wfixe * 0.5); - this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.wfixe + ' ' + this.wfixe); - s[3].width = this.wfixe + 'px'; - s[3].height = this.wfixe + 'px'; - //s[3].left = this.decal.x + 'px'; - s[3].top = this.decal.y + 'px'; - this.ratio = 256 / this.wfixe; - this.square = 1 / (60 * (this.wfixe / 256)); - this.setHeight(); - } - } - - class Fps extends Proto { - constructor(o = {}) { - super(o); - this.round = Math.round; - - //this.autoHeight = true; - - this.baseH = this.h; - this.hplus = o.hplus || 50; - this.res = o.res || 40; - this.l = 1; - this.precision = o.precision || 0; - this.custom = o.custom || false; - this.names = o.names || ['FPS', 'MS']; - let cc = o.cc || ['220,220,220', '255,255,0']; - - // this.divid = [ 100, 100, 100 ]; - // this.multy = [ 30, 30, 30 ]; - - this.adding = o.adding || false; - this.range = o.range || [165, 100, 100]; - this.alpha = o.alpha || 0.25; - this.values = []; - this.points = []; - this.textDisplay = []; - if (!this.custom) { - this.now = Roots.getTime(); - this.startTime = 0; //this.now() - this.prevTime = 0; //this.startTime; - this.frames = 0; - this.ms = 0; - this.fps = 0; - this.mem = 0; - this.mm = 0; - this.isMem = self.performance && self.performance.memory ? true : false; - - // this.divid = [ 100, 200, 1 ]; - // this.multy = [ 30, 30, 30 ]; - - if (this.isMem) { - this.names.push('MEM'); - cc.push('0,255,255'); - } - this.txt = o.name || 'Fps'; - } - let fltop = Math.floor(this.h * 0.5) - 3; - const ccc = this.colors; - this.c[1].textContent = this.txt; - //this.c[1].innerHTML = ' ' + this.txt - this.c[0].style.cursor = 'pointer'; - this.c[0].style.pointerEvents = 'auto'; - let panelCss = 'display:none; left:10px; top:' + this.h + 'px; height:' + (this.hplus - 8) + 'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid ' + ccc.border + ';'; - if (this.radius !== 0) panelCss += 'border-radius:' + this.radius + 'px;'; - this.c[2] = this.dom('path', this.css.basic + panelCss, {}); - this.c[2].setAttribute('viewBox', '0 0 ' + this.res + ' 50'); - this.c[2].setAttribute('height', '100%'); - this.c[2].setAttribute('width', '100%'); - this.c[2].setAttribute('preserveAspectRatio', 'none'); - - //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - - // arrow - this.c[3] = this.dom('path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:' + fltop + 'px;', { - d: this.svgs.g1, - fill: ccc.text, - stroke: 'none' - }); - //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); - - // result test - this.c[4] = this.dom('div', this.css.txt + 'position:absolute; left:10px; top:' + (this.h + 2) + 'px; display:none; width:100%; text-align:center;'); - - // bottom line - if (o.bottomLine) this.c[4] = this.dom('div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); - this.isShow = false; - let s = this.s; - - //s[1].marginLeft = '10px'; - s[1].lineHeight = this.h - 4; - s[1].color = ccc.text; - //s[1].paddingLeft = '18px'; - //s[1].fontWeight = 'bold'; - - if (this.radius !== 0) s[0].borderRadius = this.radius + 'px'; - if (this.colors.gborder !== 'none') s[0].border = '1px solid ' + ccc.gborder; - let j = 0; - for (j = 0; j < this.names.length; j++) { - let base = []; - let i = this.res + 1; - while (i--) base.push(50); - this.range[j] = 1 / this.range[j] * 49; - this.points.push(base); - this.values.push(0); - // this.dom( 'path', null, { fill:'rgba('+cc[j]+',0.5)', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); - this.textDisplay.push(" " + this.names[j] + " "); - } - j = this.names.length; - while (j--) { - this.dom('path', null, { - fill: 'rgba(' + cc[j] + ',' + this.alpha + ')', - 'stroke-width': 1, - stroke: 'rgba(' + cc[j] + ',1)', - 'vector-effect': 'non-scaling-stroke' - }, this.c[2]); - } - this.init(); - - //if( this.isShow ) this.show(); - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown(e) { - if (this.isShow) this.close();else this.open(); - } - - // ---------------------- - - /*mode: function ( mode ) { - let s = this.s; - switch(mode){ - case 0: // base - s[1].color = this.colors.text; - //s[1].background = 'none'; - break; - case 1: // over - s[1].color = '#FFF'; - //s[1].background = UIL.SELECT; - break; - case 2: // edit / down - s[1].color = this.colors.text; - //s[1].background = UIL.SELECTDOWN; - break; - } - },*/ - - tick(v) { - this.values = v; - if (!this.isShow) return; - this.drawGraph(); - this.upText(); - } - makePath(point) { - let p = ''; - p += 'M ' + -1 + ' ' + 50; - for (let i = 0; i < this.res + 1; i++) { - p += ' L ' + i + ' ' + point[i]; - } - p += ' L ' + (this.res + 1) + ' ' + 50; - return p; - } - upText(val) { - let v = val || this.values, - t = ''; - for (let j = 0, lng = this.names.length; j < lng; j++) t += this.textDisplay[j] + v[j].toFixed(this.precision) + ''; - this.c[4].innerHTML = t; - } - drawGraph() { - let svg = this.c[2]; - let i = this.names.length, - v, - old = 0, - n = 0; - while (i--) { - if (this.adding) v = (this.values[n] + old) * this.range[n];else v = this.values[n] * this.range[n]; - this.points[n].shift(); - this.points[n].push(50 - v); - this.setSvg(svg, 'd', this.makePath(this.points[n]), i + 1); - old += this.values[n]; - n++; - } - } - open() { - super.open(); - this.h = this.hplus + this.baseH; - this.setSvg(this.c[3], 'd', this.svgs.g2); - if (this.group !== null) { - this.group.calc(this.hplus); - } else if (this.isUI) this.main.calc(this.hplus); - this.s[0].height = this.h + 'px'; - this.s[2].display = 'block'; - this.s[4].display = 'block'; - this.isShow = true; - if (!this.custom) Roots.addListen(this); - } - close() { - super.close(); - this.h = this.baseH; - this.setSvg(this.c[3], 'd', this.svgs.g1); - if (this.group !== null) { - this.group.calc(-this.hplus); - } else if (this.isUI) this.main.calc(-this.hplus); - this.s[0].height = this.h + 'px'; - this.s[2].display = 'none'; - this.s[4].display = 'none'; - this.isShow = false; - if (!this.custom) Roots.removeListen(this); - this.c[4].innerHTML = ''; - } - - ///// AUTO FPS ////// - - begin() { - this.startTime = this.now(); - } - end() { - let time = this.now(); - this.ms = time - this.startTime; - this.frames++; - if (time > this.prevTime + 1000) { - this.fps = this.round(this.frames * 1000 / (time - this.prevTime)); - this.prevTime = time; - this.frames = 0; - if (this.isMem) { - let heapSize = performance.memory.usedJSHeapSize; - let heapSizeLimit = performance.memory.jsHeapSizeLimit; - this.mem = this.round(heapSize * 0.000000954); - this.mm = heapSize / heapSizeLimit; - } - } - this.values = [this.fps, this.ms, this.mm]; - this.drawGraph(); - this.upText([this.fps, this.ms, this.mem]); - return time; - } - listening() { - if (!this.custom) this.startTime = this.end(); - } - rSize() { - let s = this.s; - let w = this.w; - s[3].left = this.sa + this.sb - 6 + 'px'; - s[0].width = w + 'px'; - s[1].width = w + 'px'; - s[2].left = 10 + 'px'; - s[2].width = w - 20 + 'px'; - s[4].width = w - 20 + 'px'; - } - } - - class Graph extends Proto { - constructor(o = {}) { - super(o); - this.value = o.value !== undefined ? o.value : [0, 0, 0]; - this.lng = this.value.length; - this.precision = o.precision !== undefined ? o.precision : 2; - this.multiplicator = o.multiplicator || 1; - this.neg = o.neg || false; - this.line = o.line !== undefined ? o.line : true; - - //if(this.neg)this.multiplicator*=2; - - this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; - this.isNumber = false; - this.isDown = false; - this.h = o.h || 128 + 10; - this.rh = this.h - 10; - this.top = 0; - this.c[0].style.width = this.w + 'px'; - if (this.c[1] !== undefined) { - // with title - - this.c[1].style.width = this.w + 'px'; - if (!this.autoWidth) { - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - } - - //this.c[1].style.background = '#ff0000'; - //this.c[1].style.textAlign = 'center'; - this.top = 10; - this.h += 10; - } - this.gh = this.rh - 28; - this.gw = this.w - 28; - - //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); - - //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' - this.c[2] = this.dom('div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:' + (this.h - 20) + 'px; left:14px; width:' + this.gw + 'px; color:' + this.colors.text); - - //this.c[2].textContent = this.value; - this.c[2].innerHTML = this.valueToHtml(); - let svg = this.dom('svg', this.css.basic, { - viewBox: '0 0 ' + this.w + ' ' + this.rh, - width: this.w, - height: this.rh, - preserveAspectRatio: 'none' - }); - this.setCss(svg, { - width: this.w, - height: this.rh, - left: 0, - top: this.top - }); - this.dom('path', '', { - d: '', - stroke: this.colors.text, - 'stroke-width': 2, - fill: 'none', - 'stroke-linecap': 'butt' - }, svg); - this.dom('rect', '', { - x: 10, - y: 10, - width: this.gw + 8, - height: this.gh + 8, - stroke: 'rgba(0,0,0,0.3)', - 'stroke-width': 1, - fill: 'none' - }, svg); - this.iw = (this.gw - 4 * (this.lng - 1)) / this.lng; - let t = []; - this.cMode = []; - this.v = []; - for (let i = 0; i < this.lng; i++) { - t[i] = [14 + i * this.iw + i * 4, this.iw]; - t[i][2] = t[i][0] + t[i][1]; - this.cMode[i] = 0; - if (this.neg) this.v[i] = (1 + this.value[i] / this.multiplicator) * 0.5;else this.v[i] = this.value[i] / this.multiplicator; - this.dom('rect', '', { - x: t[i][0], - y: 14, - width: t[i][1], - height: 1, - fill: this.colors.text, - 'fill-opacity': 0.3 - }, svg); - } - this.tmp = t; - this.c[3] = svg; - - //console.log(this.w) - - this.init(); - if (this.c[1] !== undefined) { - this.c[1].style.top = 0 + 'px'; - this.c[1].style.height = 20 + 'px'; - this.s[1].lineHeight = 20 - 5 + 'px'; - } - this.update(false); - } - setValue(value) { - this.value = value; - this.lng = this.value.length; - for (var i = 0; i < this.lng; i++) { - if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5;else this.v[i] = value[i] / this.multiplicator; - } - this.update(); - } - valueToHtml() { - let i = this.lng, - n = 0, - r = ''; - let w = 100 / this.lng; - let style = 'width:' + w + '%;'; //' text-align:center;' - while (i--) { - if (n === this.lng - 1) r += '
    ' + this.value[n] + '
    ';else r += '' + this.value[n] + ''; - n++; - } - return r; - } - updateSVG() { - if (this.line) this.setSvg(this.c[3], 'd', this.makePath(), 0); - for (let i = 0; i < this.lng; i++) { - this.setSvg(this.c[3], 'height', this.v[i] * this.gh, i + 2); - this.setSvg(this.c[3], 'y', 14 + (this.gh - this.v[i] * this.gh), i + 2); - if (this.neg) this.value[i] = ((this.v[i] * 2 - 1) * this.multiplicator).toFixed(this.precision) * 1;else this.value[i] = (this.v[i] * this.multiplicator).toFixed(this.precision) * 1; - } - - //this.c[2].textContent = this.value; - this.c[2].innerHTML = this.valueToHtml(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - let i = this.lng; - let t = this.tmp; - if (l.y > this.top && l.y < this.h - 20) { - while (i--) { - if (l.x > t[i][0] && l.x < t[i][2]) return i; - } - } - return ''; - } - mode(n, name) { - if (n === this.cMode[name]) return false; - let a; - switch (n) { - case 0: - a = 0.3; - break; - case 1: - a = 0.6; - break; - case 2: - a = 1; - break; - } - this.reset(); - this.setSvg(this.c[3], 'fill-opacity', a, name + 2); - this.cMode[name] = n; - return true; - } - - // ---------------------- - // EVENTS - // ---------------------- - - reset() { - let nup = false; - //this.isDown = false; - - let i = this.lng; - while (i--) { - if (this.cMode[i] !== 0) { - this.cMode[i] = 0; - this.setSvg(this.c[3], 'fill-opacity', 0.3, i + 2); - nup = true; - } - } - return nup; - } - mouseup(e) { - this.isDown = false; - if (this.current !== -1) return this.reset(); - } - mousedown(e) { - this.isDown = true; - return this.mousemove(e); - } - mousemove(e) { - let nup = false; - let name = this.testZone(e); - if (name === '') { - nup = this.reset(); - //this.cursor(); - } else { - nup = this.mode(this.isDown ? 2 : 1, name); - //this.cursor( this.current !== -1 ? 'move' : 'pointer' ); - if (this.isDown) { - this.v[name] = this.clamp(1 - (e.clientY - this.zone.y - this.ytop - 10) / this.gh, 0, 1); - this.update(true); - } - } - return nup; - } - - // ---------------------- - - update(up) { - this.updateSVG(); - if (up) this.send(); - } - makePath() { - let p = "", - h, - w, - wn, - wm, - ow, - oh; - //let g = this.iw*0.5 - - for (let i = 0; i < this.lng; i++) { - h = 14 + (this.gh - this.v[i] * this.gh); - w = 14 + i * this.iw + i * 4; - wm = w + this.iw * 0.5; - wn = w + this.iw; - if (i === 0) p += 'M ' + w + ' ' + h + ' T ' + wm + ' ' + h;else p += ' C ' + ow + ' ' + oh + ',' + w + ' ' + h + ',' + wm + ' ' + h; - if (i === this.lng - 1) p += ' T ' + wn + ' ' + h; - ow = wn; - oh = h; - } - return p; - } - rSize() { - super.rSize(); - let s = this.s; - if (this.c[1] !== undefined) s[1].width = this.w + 'px'; - s[3].width = this.w + 'px'; - let gw = this.w - 28; - let iw = (gw - 4 * (this.lng - 1)) / this.lng; - let t = []; - s[2].width = gw + 'px'; - for (let i = 0; i < this.lng; i++) { - t[i] = [14 + i * iw + i * 4, iw]; - t[i][2] = t[i][0] + t[i][1]; - } - this.tmp = t; - } - } - - class Empty extends Proto { - constructor(o = {}) { - o.isSpace = true; - o.margin = 0; - if (!o.h) o.h = 10; - super(o); - this.init(); - } - } - - class Group extends Proto { - constructor(o = {}) { - super(o); - this.isGroup = true; - this.ADD = o.add; - this.autoHeight = true; - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = o.group ? 8 : 0; - //this.dd = o.group ? o.group.decal + 8 : 0 - - this.baseH = this.h; - this.spaceY = new Empty({ - h: this.margin - }); - let fltop = Math.floor(this.h * 0.5) - 3; - const cc = this.colors; - this.useFlex = true; - let flexible = this.useFlex ? 'display:flex; flex-flow: row wrap;' : ''; - this.c[2] = this.dom('div', this.css.basic + flexible + 'width:100%; left:0; overflow:hidden; top:' + this.h + 'px'); - this.c[3] = this.dom('path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:' + fltop + 'px;', { - d: this.svgs.g1, - fill: cc.text, - stroke: 'none' - }); - let bh = this.mtop === 0 ? this.margin : this.mtop; - this.c[4] = this.dom('div', this.css.basic + 'width:100%; left:0; height:' + (bh + 1) + 'px; top:' + (this.h - 1) + 'px; background:none;'); - this.s; - this.c[1].name = 'group'; - this.init(); - this.setBG(o.bg); - if (o.open) this.open(); - } - setBG(bg) { - const cc = this.colors; - const s = this.s; - if (bg !== undefined) cc.groups = bg; - if (cc.groups === 'none') cc.groups = cc.background; - cc.background = 'none'; - s[0].background = 'none'; - s[1].background = cc.groups; - s[2].background = cc.groups; - if (cc.gborder !== 'none') { - s[1].border = cc.borderSize + 'px solid ' + cc.gborder; - } - if (this.radius !== 0) { - s[1].borderRadius = this.radius + 'px'; - s[2].borderRadius = this.radius + 'px'; - } - - /*let i = this.uis.length; - while(i--){ - this.uis[i].setBG( 'none' ); - //this.uis[i].setBG( this.colors.background ); - }*/ - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - let name = ''; - if (l.y < this.baseH + this.margin) name = 'title';else { - if (this.isOpen) name = 'content'; - } - - //console.log(name) - - return name; - } - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } - this.proto = null; - this.current = -1; - this.cursor(); - return true; - } - reset() { - this.clearTarget(); - } - - // ---------------------- - // EVENTS - // ---------------------- - - handleEvent(e) { - let type = e.type; - let change = false; - let protoChange = false; - let name = this.testZone(e); - if (!name) return; - switch (name) { - case 'content': - //this.cursor() - - //if( this.marginDiv ) e.clientY -= this.margin * 0.5 - - if (Roots.isMobile && type === 'mousedown') this.getNext(e, change); - if (this.proto) { - //e.clientY -= this.margin - protoChange = this.proto.handleEvent(e); - } - if (!Roots.lock) this.getNext(e, change); - break; - case 'title': - //this.cursor( this.isOpen ? 'n-resize':'s-resize' ); - this.cursor('pointer'); - if (type === 'mousedown') { - if (this.isOpen) this.close();else this.open(); - } - break; - } - if (this.isDown) change = true; - if (protoChange) change = true; - return change; - } - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); - if (next !== this.current) { - this.clearTarget(); - this.current = next; - } - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } - - // ---------------------- - - add() { - let a = arguments; - if (typeof a[1] === 'object') { - a[1].isUI = this.isUI; - a[1].target = this.c[2]; - a[1].main = this.main; - a[1].group = this; - } else if (typeof arguments[1] === 'string') { - if (a[2] === undefined) [].push.call(a, { - isUI: true, - target: this.c[2], - main: this.main - });else { - a[2].isUI = true; - a[2].target = this.c[2]; - a[2].main = this.main; - a[2].group = this; - } - } - let u = this.ADD.apply(this, a); - if (u.isGroup) { - //o.add = add; - u.dx = 8; - } - - //u.dx += 4 - //console.log(this.decal) - //u.zone.d -= 8 - Roots.forceZone = true; - //u.margin += this.margin - - //console.log( u.margin ) - //Roots.needReZone = true - - //Roots.resize() - //console.log(Roots.needResize) - - this.uis.push(u); - this.isEmpty = false; - return u; - } - - // remove one node - - remove(n) { - if (n.dispose) n.dispose(); - } - - // clear all iner - - dispose() { - this.clear(); - if (this.isUI) this.main.calc(); - super.dispose(); - } - clear() { - this.empty(); - } - empty() { - this.close(); - let i = this.uis.length, - item; - while (i--) { - item = this.uis.pop(); - this.c[2].removeChild(item.c[0]); - item.clear(true); - - //this.uis[i].clear() - } - this.isEmpty = true; - this.h = this.baseH; - } - - // clear one element - - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - this.calc(-(this.uis[id].h + this.margin)); - this.c[2].removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - if (this.uis.length === 0) { - this.isEmpty = true; - this.close(); - } - } - } - open() { - super.open(); - this.setSvg(this.c[3], 'd', this.svgs.g2); - this.rSizeContent(); - - //let t = this.h - this.baseH - - const s = this.s; - const cc = this.colors; - - //s[2].top = (this.h-1) + 'px' - s[2].top = this.h + this.mtop + 'px'; - s[4].background = cc.groups; //'#0f0' - - if (this.radius) { - s[1].borderRadius = '0px'; - s[2].borderRadius = '0px'; - s[1].borderTopLeftRadius = this.radius + 'px'; - s[1].borderTopRightRadius = this.radius + 'px'; - s[2].borderBottomLeftRadius = this.radius + 'px'; - s[2].borderBottomRightRadius = this.radius + 'px'; - } - if (cc.gborder !== 'none') { - s[4].borderLeft = cc.borderSize + 'px solid ' + cc.gborder; - s[4].borderRight = cc.borderSize + 'px solid ' + cc.gborder; - s[2].border = cc.borderSize + 'px solid ' + cc.gborder; - s[2].borderTop = 'none'; - s[1].borderBottom = cc.borderSize + 'px solid rgba(0,0,0,0)'; - } - this.parentHeight(); - - //Roots.isLeave = true - //Roots.needResize = true - } - close() { - super.close(); - - //let t = this.h - this.baseH + /** + * @author lth / https://github.com/lo-th + */ + + const REVISION = "4.3.0"; + + // INTENAL FUNCTION + + const R = { + ui: [], + + dom: null, + + ID: null, + lock: false, + wlock: false, + current: -1, + + needReZone: true, + needResize: false, + forceZone: false, + isEventsInit: false, + isLeave: false, + addDOMEventListeners: true, + + downTime: 0, + prevTime: 0, + + //prevDefault: ['contextmenu', 'wheel'], + prevDefault: ["contextmenu"], + pointerEvent: ["pointerdown", "pointermove", "pointerup"], + eventOut: ["pointercancel", "pointerout", "pointerleave"], + + xmlserializer: null, + tmpTime: null, + tmpImage: null, + + oldCursor: "auto", + + input: null, + parent: null, + firstImput: true, + + hiddenImput: null, + hiddenSizer: null, + hasFocus: false, + startInput: false, + inputRange: [0, 0], + cursorId: 0, + str: "", + pos: 0, + startX: -1, + moveX: -1, + + debugInput: false, + + isLoop: false, + listens: [], + + e: { + type: null, + clientX: 0, + clientY: 0, + keyCode: NaN, + key: null, + delta: 0, + }, + + isMobile: false, + + now: null, + needsUpdate: false, + + getTime: function () { + return self.performance && self.performance.now + ? self.performance.now.bind(performance) + : Date.now; + }, + + add: function (o) { + // R.ui[0] is de GUI object that is added first by the constructor + R.ui.push(o); + R.getZone(o); + + if (!R.isEventsInit) R.initEvents(); + }, + + testMobile: function () { + let n = navigator.userAgent; + if ( + n.match(/Android/i) || + n.match(/webOS/i) || + n.match(/iPhone/i) || + n.match(/iPad/i) || + n.match(/iPod/i) || + n.match(/BlackBerry/i) || + n.match(/Windows Phone/i) + ) + return true; + else return false; + }, + + remove: function (o) { + let i = R.ui.indexOf(o); + + if (i !== -1) { + R.removeListen(o); + R.ui.splice(i, 1); + } + + if (R.ui.length === 0) { + R.removeEvents(); + } + }, + + // ---------------------- + // EVENTS + // ---------------------- + + initEvents: function () { + if (R.isEventsInit) return; + + let dom = document.body; + + R.isMobile = R.testMobile(); + R.now = R.getTime(); + + if (!R.isMobile) { + dom.addEventListener("wheel", R, { passive: false }); + } else { + dom.style.touchAction = "none"; + } + + console.log("R.addDOMEventListeners " + R.addDOMEventListeners); + if (R.addDOMEventListeners) { + dom.addEventListener("pointercancel", R); + dom.addEventListener("pointerleave", R); + //dom.addEventListener( 'pointerout', R ) + + dom.addEventListener("pointermove", R); + dom.addEventListener("pointerdown", R); + dom.addEventListener("pointerup", R); + + dom.addEventListener("keydown", R, false); + dom.addEventListener("keyup", R, false); + } + window.addEventListener("resize", R.resize, false); + + //window.onblur = R.out; + //window.onfocus = R.in; + + R.isEventsInit = true; + R.dom = dom; + }, + + removeEvents: function () { + if (!R.isEventsInit) return; + + let dom = document.body; + + if (!R.isMobile) { + dom.removeEventListener("wheel", R); + } + + if (R.addDOMEventListeners) { + dom.removeEventListener("pointercancel", R); + dom.removeEventListener("pointerleave", R); + //dom.removeEventListener( 'pointerout', R ); + + dom.removeEventListener("pointermove", R); + dom.removeEventListener("pointerdown", R); + dom.removeEventListener("pointerup", R); + + dom.removeEventListener("keydown", R); + dom.removeEventListener("keyup", R); + } + window.removeEventListener("resize", R.resize); + + R.isEventsInit = false; + }, + + resize: function () { + let i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); + } + + R.needReZone = true; + R.needResize = false; + }, + + out: function () { + console.log("im am out"); + R.clearOldID(); + }, + + in: function () { + console.log("im am in"); + // R.clearOldID(); + }, + + // ---------------------- + // HANDLE EVENTS + // ---------------------- + + fakeUp: function () { + this.handleEvent({ type: "pointerup" }); + }, + + handleEvent: function (event) { + //console.log("Roots.handleEvent "+event.type) + //if(!event.type) return; + + if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); + + if (R.needResize) R.resize(); + + R.findZone(R.forceZone); + + let e = R.e; + let leave = false; + + if (event.type === "keydown") R.keydown(event); + if (event.type === "keyup") R.keyup(event); + + if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; + else e.delta = 0; + + let ptype = event.pointerType; // mouse, pen, touch + + e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; + e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; + + e.type = event.type; + + if (R.eventOut.indexOf(event.type) !== -1) { + leave = true; + e.type = "mouseup"; + } + + if (event.type === "pointerleave") R.isLeave = true; + + if (event.type === "pointerdown") e.type = "mousedown"; + if (event.type === "pointerup") e.type = "mouseup"; + if (event.type === "pointermove") { + if (R.isLeave) { + // if user resize outside this document + R.isLeave = false; + R.resize(); + } + e.type = "mousemove"; + } + + // double click test + if (e.type === "mousedown") { + R.downTime = R.now(); + let time = R.downTime - R.prevTime; + + // double click on imput + if (time < 200) { + R.selectAll(); + return false; + } + + R.prevTime = R.downTime; + R.forceZone = false; + } + + // for imput + if (e.type === "mousedown") R.clearInput(); + + // mouse lock + if (e.type === "mousedown") R.lock = true; + if (e.type === "mouseup") R.lock = false; + + //if( R.current !== null && R.current.neverlock ) R.lock = false; + + /*if( e.type === 'mousedown' && event.button === 1){ + R.cursor() + e.preventDefault(); + e.stopPropagation(); + }*/ + + //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) + + if (R.isMobile && e.type === "mousedown") R.findID(e); + if (e.type === "mousemove" && !R.lock) R.findID(e); + + if (R.ID !== null) { + if (R.ID.isCanvasOnly) { + e.clientX = R.ID.mouse.x; + e.clientY = R.ID.mouse.y; + } + + //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 + + R.ID.handleEvent(e); + } + + if (R.isMobile && e.type === "mouseup") R.clearOldID(); + if (leave) R.clearOldID(); + }, + + // ---------------------- + // ID + // ---------------------- + + findID: function (e) { + let i = R.ui.length, + next = -1, + u, + x, + y; + + while (i--) { + u = R.ui[i]; + + if (u.isCanvasOnly) { + x = u.mouse.x; + y = u.mouse.y; + } else { + x = e.clientX; + y = e.clientY; + } + + if (R.onZone(u, x, y)) { + next = i; + + if (next !== R.current) { + R.clearOldID(); + R.current = next; + R.ID = u; + } + break; + } + } + + if (next === -1) R.clearOldID(); + }, + + clearOldID: function () { + if (!R.ID) return; + R.current = -1; + R.ID.reset(); + R.ID = null; + R.cursor(); + }, + + // ---------------------- + // GUI / GROUP FUNCTION + // ---------------------- + + calcUis: (uis, zone, py, group = false) => { + //console.log('calc_uis') + + let i = uis.length, + u, + px = 0, + n = 0, + tw, + m; + + let height = 0; + + while (i--) { + u = uis[n]; + n++; + + if (!group && u.isGroup) u.calcUis(); + + m = u.margin; + //div = u.marginDiv + + u.zone.w = u.w; + u.zone.h = u.h + m; + + if (!u.autoWidth) { + if (px === 0) height += u.h + m; + + u.zone.x = zone.x + px; + u.zone.y = py; // + u.mtop + //if(div) u.zone.y += m * 0.5 + + tw = R.getWidth(u); + if (tw) u.zone.w = u.w = tw; + else if (u.fw) u.zone.w = u.w = u.fw; + + px += u.zone.w; + + if (px >= zone.w) { + py += u.h + m; + //if(div) py += m * 0.5 + px = 0; + } + } else { + px = 0; + + u.zone.x = zone.x + u.dx; + u.zone.y = py; + py += u.h + m; + + height += u.h + m; + } + } + + return height; + }, + + findTarget: function (uis, e) { + let i = uis.length; + + while (i--) { + if (R.onZone(uis[i], e.clientX, e.clientY)) return i; + } + + return -1; + }, + + // ---------------------- + // ZONE + // ---------------------- + + findZone: function (force) { + if (!R.needReZone && !force) return; + + var i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + R.getZone(u); + if (u.isGui) u.calcUis(); + } + + R.needReZone = false; + }, + + onZone: function (o, x, y) { + if (x === undefined || y === undefined) return false; + + let z = o.zone; + let mx = x - z.x; // - o.dx; + let my = y - z.y; + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 + //if( o.group !== null ) mx -= o.dx + + let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; + + //if( o.marginDiv ) my -= o.margin * 0.5 + + if (over) o.local.set(mx, my); + else o.local.neg(); + + return over; + }, + + getWidth: function (o) { + //return o.getDom().offsetWidth + return o.getDom().clientWidth; + + //let r = o.getDom().getBoundingClientRect(); + //return (r.width) + //return Math.floor(r.width) + }, + + getZone: function (o) { + if (o.isCanvasOnly) return; + let r = o.getDom().getBoundingClientRect(); + + //if( !r.width ) return + //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; + //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; + o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; + + //console.log(o.name, o.zone) + }, + + // ---------------------- + // CURSOR + // ---------------------- + + cursor: function (name) { + name = name ? name : "auto"; + if (name !== R.oldCursor) { + document.body.style.cursor = name; + R.oldCursor = name; + } + }, + + // ---------------------- + // CANVAS + // ---------------------- + + toCanvas: function (o, w, h, force) { + if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); + + // prevent exesive redraw + + if (force && R.tmpTime !== null) { + clearTimeout(R.tmpTime); + R.tmpTime = null; + } + + if (R.tmpTime !== null) return; + + if (R.lock) + R.tmpTime = setTimeout(function () { + R.tmpTime = null; + }, 10); + + /// + + let isNewSize = false; + if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; + + if (R.tmpImage === null) R.tmpImage = new Image(); + + let img = R.tmpImage; //new Image(); + + let htmlString = R.xmlserializer.serializeToString(o.content); + + let svg = + '' + + htmlString + + ""; + + img.onload = function () { + let ctx = o.canvas.getContext("2d"); + + if (isNewSize) { + o.canvas.width = w; + o.canvas.height = h; + } else { + ctx.clearRect(0, 0, w, h); + } + ctx.drawImage(this, 0, 0); + + o.onDraw(); + }; + + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); + //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); + img.crossOrigin = ""; + R.needsUpdate = false; + }, + + // ---------------------- + // INPUT + // ---------------------- + + setHidden: function () { + if (R.hiddenImput === null) { + //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' + //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' + //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; + + R.hiddenImput = document.createElement("input"); + R.hiddenImput.type = "text"; + //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); + + R.hiddenSizer = document.createElement("div"); + //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; + + document.body.appendChild(R.hiddenImput); + document.body.appendChild(R.hiddenSizer); + } + + let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; + let css = + R.parent.css.txtselect + + "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + + hide; + R.hiddenImput.style.cssText = + css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); + R.hiddenSizer.style.cssText = css + "bottom:40px;"; + + R.hiddenImput.style.width = R.input.clientWidth + "px"; + R.hiddenImput.value = R.str; + R.hiddenSizer.innerHTML = R.str; + + R.hasFocus = true; + }, + + clearHidden: function (p) { + if (R.hiddenImput === null) return; + R.hasFocus = false; + }, + + clickPos: function (x) { + let i = R.str.length, + l = 0, + n = 0; + while (i--) { + l += R.textWidth(R.str[n]); + if (l >= x) break; + n++; + } + return n; + }, + + upInput: function (x, down) { + if (R.parent === null) return false; + + let up = false; + + if (down) { + let id = R.clickPos(x); + + R.moveX = id; + + if (R.startX === -1) { + R.startX = id; + R.cursorId = id; + R.inputRange = [R.startX, R.startX]; + } else { + let isSelection = R.moveX !== R.startX; + + if (isSelection) { + if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; + else R.inputRange = [R.startX, R.moveX]; + } + } + + up = true; + } else { + if (R.startX !== -1) { + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.startX = -1; + + up = true; + } + } + + if (up) R.selectParent(); + + return up; + }, + + selectAll: function () { + if (!R.parent) return; + + R.str = R.input.textContent; + R.inputRange = [0, R.str.length]; + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.cursorId = R.inputRange[1]; + R.selectParent(); + }, + + selectParent: function () { + var c = R.textWidth(R.str.substring(0, R.cursorId)); + var e = R.textWidth(R.str.substring(0, R.inputRange[0])); + var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); + + R.parent.select(c, e, s, R.hiddenSizer.innerHTML); + }, + + textWidth: function (text) { + if (R.hiddenSizer === null) return 0; + text = text.replace(/ /g, " "); + R.hiddenSizer.innerHTML = text; + return R.hiddenSizer.clientWidth; + }, + + clearInput: function () { + if (R.parent === null) return; + if (!R.firstImput) R.parent.validate(true); + + R.clearHidden(); + R.parent.unselect(); + + //R.input.style.background = 'none'; + R.input.style.background = R.parent.colors.back; + R.input.style.borderColor = R.parent.colors.border; + //R.input.style.color = R.parent.colors.text; + R.parent.isEdit = false; + + R.input = null; + R.parent = null; + (R.str = ""), (R.firstImput = true); + }, + + setInput: function (Input, parent) { + R.clearInput(); + + R.input = Input; + R.parent = parent; + + R.input.style.background = R.parent.colors.backoff; + R.input.style.borderColor = R.parent.colors.select; + //R.input.style.color = R.parent.colors.textSelect; + R.str = R.input.textContent; + + R.setHidden(); + }, + + keydown: function (e) { + if (R.parent === null) return; + + let keyCode = e.which; + e.shiftKey; + + //console.log( keyCode ) + + R.firstImput = false; + + if (R.hasFocus) { + // hack to fix touch event bug in iOS Safari + window.focus(); + R.hiddenImput.focus(); + } + + R.parent.isEdit = true; + + // e.preventDefault(); + + // add support for Ctrl/Cmd+A selection + //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { + //R.selectText(); + //e.preventDefault(); + //return self.render(); + //} + + if (keyCode === 13) { + //enter + + R.clearInput(); + + //} else if( keyCode === 9 ){ //tab key + + // R.input.textContent = ''; + } else { + if (R.input.isNum) { + if ( + (e.keyCode > 47 && e.keyCode < 58) || + (e.keyCode > 95 && e.keyCode < 106) || + e.keyCode === 190 || + e.keyCode === 110 || + e.keyCode === 8 || + e.keyCode === 109 + ) { + R.hiddenImput.readOnly = false; + } else { + R.hiddenImput.readOnly = true; + } + } else { + R.hiddenImput.readOnly = false; + } + } + }, + + keyup: function (e) { + if (R.parent === null) return; + + R.str = R.hiddenImput.value; + + if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value + else R.input.textContent = R.str; + + R.cursorId = R.hiddenImput.selectionStart; + R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; + + R.selectParent(); + + //if( R.parent.allway ) + R.parent.validate(); + }, + + // ---------------------- + // + // LISTENING + // + // ---------------------- + + /* + // esta era la funcion original + loop: function () { + + if( R.isLoop ) requestAnimationFrame( R.loop ); + R.update(); + + }, + + */ + + loop: function () { + // modified by Fedemarino + if (R.isLoop) requestAnimationFrame(R.loop); + R.needsUpdate = R.update(); + // if there is a change in a value generated externally, the GUI needs to be redrawn + if (R.ui[0] && R.needsUpdate) R.ui[0].draw(); + }, + + update: function () { + // modified by Fedemarino + let i = R.listens.length; + let needsUpdate = false; + while (i--) { + //check if the value of the object has changed + let hasChanged = R.listens[i].listening(); + if (hasChanged) needsUpdate = true; + } + return needsUpdate; + }, + + removeListen: function (proto) { + let id = R.listens.indexOf(proto); + if (id !== -1) R.listens.splice(id, 1); + if (R.listens.length === 0) R.isLoop = false; + }, + + addListen: function (proto) { + let id = R.listens.indexOf(proto); + + if (id !== -1) return false; + + R.listens.push(proto); + + if (!R.isLoop) { + R.isLoop = true; + R.loop(); + } + + return true; + }, + }; + + const Roots = R; - this.setSvg(this.c[3], 'd', this.svgs.g1); - this.h = this.baseH; - const s = this.s; - const cc = this.colors; - s[0].height = this.h + 'px'; - //s[1].height = (this.h-2) + 'px' - //s[2].top = this.h + 'px' - s[2].top = this.h + this.mtop + 'px'; - s[4].background = 'none'; - if (cc.gborder !== 'none') { - s[4].border = 'none'; - s[2].border = 'none'; - s[1].border = cc.borderSize + 'px solid ' + cc.gborder; - } - if (this.radius) s[1].borderRadius = this.radius + 'px'; - this.parentHeight(); - } - calcUis() { - if (!this.isOpen || this.isEmpty) this.h = this.baseH; - //else this.h = Roots.calcUis( this.uis, this.zone, this.zone.y + this.baseH ) + this.baseH; - else this.h = Roots.calcUis([...this.uis, this.spaceY], this.zone, this.zone.y + this.baseH + this.margin, true) + this.baseH; - this.s[0].height = this.h + 'px'; - this.s[2].height = this.h - this.baseH + 'px'; - } - parentHeight(t) { - if (this.group !== null) this.group.calc(t);else if (this.isUI) this.main.calc(t); - } - calc(y) { - if (!this.isOpen) return; - if (this.isUI) this.main.calc();else this.calcUis(); - this.s[0].height = this.h + 'px'; - this.s[2].height = this.h + 'px'; - } - rSizeContent() { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(this.w); - this.uis[i].rSize(); - } - } - rSize() { - super.rSize(); - let s = this.s; - this.w = this.w - this.decal; - s[3].left = this.sa + this.sb - 6 + 'px'; - s[1].width = this.w + 'px'; - s[2].width = this.w + 'px'; - s[1].left = this.decal + 'px'; - s[2].left = this.decal + 'px'; - if (this.isOpen) this.rSizeContent(); - } + /** + * @author lth / https://github.com/lo-th + */ + + const T = { + + transition: 0.2, + + frag: document.createDocumentFragment(), + + colorRing: null, + joystick_0: null, + joystick_1: null, + circular: null, + knob: null, + pad2d: null, + + svgns: "http://www.w3.org/2000/svg", + links: "http://www.w3.org/1999/xlink", + htmls: "http://www.w3.org/1999/xhtml", + + DOM_SIZE: [ 'height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], + SVG_TYPE_D: [ 'pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix' ], + SVG_TYPE_G: [ 'svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject' ], + + PI: Math.PI, + TwoPI: Math.PI*2, + pi90: Math.PI * 0.5, + pi60: Math.PI/3, + + torad: Math.PI / 180, + todeg: 180 / Math.PI, + + clamp: ( v, min, max ) => { + + v = v < min ? min : v; + v = v > max ? max : v; + return v; + + }, + + isDivid: ( v ) => ( v*0.5 === Math.floor(v*0.5) ), + + size: { w: 240, h: 20, p: 30, s: 8 }, + + // ---------------------- + // COLOR + // ---------------------- + + defineColor: ( o, cc = T.colors ) => { + + let color = { ...cc }; + + let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize' ]; + let changeText = false; + + if( o.font ) o.fontFamily = o.font; + if( o.shadow ) o.fontShadow = o.shadow; + if( o.weight ) o.fontWeight = o.weight; + + if( o.fontColor ) o.text = o.fontColor; + if( o.color ) o.text = o.color; + + if( o.text ){ + color.text = o.text; + if( !o.fontColor && !o.color ){ + color.title = T.ColorLuma( o.text, -0.25 ); + color.titleoff = T.ColorLuma( o.text, -0.5 ); + } + color.textOver = T.ColorLuma( o.text, 0.25 ); + color.textSelect = T.ColorLuma( o.text, 0.5 ); + } + + if( o.button ){ + color.button = o.button; + color.border = T.ColorLuma( o.button, 0.1 ); + color.overoff = T.ColorLuma( o.button, 0.2 ); + } + + if( o.select ){ + color.select = o.select; + color.over = T.ColorLuma( o.select, -0.1 ); + } + + if( o.itemBg ) o.back = o.itemBg; + + if( o.back ){ + color.back = o.back; + color.backoff = T.ColorLuma( o.back, -0.1 ); + } + + if( o.fontSelect ) color.textSelect = o.fontSelect; + if( o.groupBorder ) color.gborder = o.groupBorder; + + //if( o.transparent ) o.bg = 'none' + //if( o.bg ) color.background = color.backgroundOver = o.bg + if( o.bgOver ) color.backgroundOver = o.bgOver; + + for( let m in color ){ + if(o[m]!==undefined) color[m] = o[m]; + } + + for( let m in o ){ + if( textChange.indexOf(m) !== -1 ) changeText = true; + } + + if( changeText ) T.defineText( color ); + + return color + + }, + + colors: { + + sx: 4,//4 + sy: 2,//2 + radius:2, + + showOver : 1, + //groupOver : 1, + + content:'none', + background: 'rgba(50,50,50,0.15)', + backgroundOver: 'rgba(50,50,50,0.3)', + + title : '#CCC', + titleoff : '#BBB', + text : '#DDD', + textOver : '#EEE', + textSelect : '#FFF', + + back:'rgba(0,0,0,0.2)', + backoff:'rgba(0,0,0,0.3)', + + // input and button border + border : '#4c4c4c', + borderSize : 1, + + gborder : 'none', + groups : 'none', + + + button : '#3c3c3c', + overoff : '#5c5c5c', + over : '#024699', + select : '#308AFF', + action: '#FF3300', + + //fontFamily: 'Tahoma', + fontFamily: 'Consolas, monospace', + //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", + fontWeight: 'normal', + fontShadow: 'none',//'#000', + fontSize:12, + + joyOver:'rgba(48,138,255,0.25)', + joyOut: 'rgba(100,100,100,0.5)', + joySelect: '#308AFF', + + + hide: 'rgba(0,0,0,0)', + + }, + + // style css + + css : { + + basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', + button:'display:flex; align-items:center; justify-content:center; text-align:center;', + middle:'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' + }, + + // svg path + + svgs: { + + g1:'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', + g2:'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', + + group:'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', + arrow:'M 3 8 L 8 5 3 2 3 8 Z', + + arrowDown:'M 5 8 L 8 3 2 3 5 8 Z', + arrowUp:'M 5 2 L 2 7 8 7 5 2 Z', + + solid:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', + body:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', + vehicle:'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', + articulation:'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', + character:'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', + terrain:'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', + joint:'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', + ray:'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', + collision:'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', + map:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + material:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + texture:'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', + object:'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', + none:'M 9 5 L 5 5 5 9 9 9 9 5 Z', + cursor:'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', + load:'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', + save:'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', + extern:'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z', + + }, + + rezone () { + Roots.needReZone = true; + }, + + getImput: function(){ + + return Roots.input ? true : false + + }, + + setStyle : function ( data ){ + + for ( var o in data ){ + if( T.colors[o] ) T.colors[o] = data[o]; + } + + T.setText(); + + }, + + // ---------------------- + // custom text + // ---------------------- + + defineText: function( o ){ + + T.setText( o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight ); + + }, + + setText: function( size, color, font, shadow, weight ){ + + let cc = T.colors; + + if( font === undefined ) font = cc.fontFamily; + if( size === undefined ) size = cc.fontSize; + if( shadow === undefined ) shadow = cc.fontShadow; + if( weight === undefined ) weight = cc.fontWeight; + if( color === undefined ) color = cc.text; + + if( isNaN(size) ){ if( size.search('em')===-1 ) size += 'px';} + else size += 'px'; + + + //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' + + T.css.txt = T.css.basic + T.css.middle + ' font-family:'+ font +'; font-weight:'+weight+'; font-size:'+size+'; color:'+cc.text+'; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; + if( shadow !== 'none' ) T.css.txt += ' text-shadow: 1px 1px 1px '+shadow+';'; + + T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; + T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; + + }, + + + // note + + //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container + + /*cloneColor: function () { + + let cc = Object.assign({}, T.colors ); + return cc; + + },*/ + + // intern function + + cloneCss: function () { + + //let cc = Object.assign({}, T.css ); + return { ...T.css }; + + }, + + clone: function ( o ) { + + return o.cloneNode( true ); + + }, + + setSvg: function( dom, type, value, id, id2 ){ + + if( id === -1 ) dom.setAttributeNS( null, type, value ); + else if( id2 !== undefined ) dom.childNodes[ id || 0 ].childNodes[ id2 || 0 ].setAttributeNS( null, type, value ); + else dom.childNodes[ id || 0 ].setAttributeNS( null, type, value ); + + }, + + setCss: function( dom, css ){ + + for( let r in css ){ + if( T.DOM_SIZE.indexOf(r) !== -1 ) dom.style[r] = css[r] + 'px'; + else dom.style[r] = css[r]; + } + + }, + + set: function( g, o ){ + + for( let att in o ){ + if( att === 'txt' ) g.textContent = o[ att ]; + if( att === 'link' ) g.setAttributeNS( T.links, 'xlink:href', o[ att ] ); + else g.setAttributeNS( null, att, o[ att ] ); + } + + }, + + get: function( dom, id ){ + + if( id === undefined ) return dom; // root + else if( !isNaN( id ) ) return dom.childNodes[ id ]; // first child + else if( id instanceof Array ){ + if(id.length === 2) return dom.childNodes[ id[0] ].childNodes[ id[1] ]; + if(id.length === 3) return dom.childNodes[ id[0] ].childNodes[ id[1] ].childNodes[ id[2] ]; + } + + }, + + dom : function ( type, css, obj, dom, id ) { + + type = type || 'div'; + + if( T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1 ){ // is svg element + + if( type ==='svg' ){ + + dom = document.createElementNS( T.svgns, 'svg' ); + T.set( dom, obj ); + + /* } else if ( type === 'use' ) { + + dom = document.createElementNS( T.svgns, 'use' ); + T.set( dom, obj ); + */ + } else { + // create new svg if not def + if( dom === undefined ) dom = document.createElementNS( T.svgns, 'svg' ); + T.addAttributes( dom, type, obj, id ); + + } + + } else { // is html element + + if( dom === undefined ) dom = document.createElementNS( T.htmls, type ); + else dom = dom.appendChild( document.createElementNS( T.htmls, type ) ); + + } + + if( css ) dom.style.cssText = css; + + if( id === undefined ) return dom; + else return dom.childNodes[ id || 0 ]; + + }, + + addAttributes : function( dom, type, o, id ){ + + let g = document.createElementNS( T.svgns, type ); + T.set( g, o ); + T.get( dom, id ).appendChild( g ); + if( T.SVG_TYPE_G.indexOf(type) !== -1 ) g.style.pointerEvents = 'none'; + return g; + + }, + + clear : function( dom ){ + + T.purge( dom ); + while (dom.firstChild) { + if ( dom.firstChild.firstChild ) T.clear( dom.firstChild ); + dom.removeChild( dom.firstChild ); + } + + }, + + purge : function ( dom ) { + + let a = dom.attributes, i, n; + if (a) { + i = a.length; + while(i--){ + n = a[i].name; + if (typeof dom[n] === 'function') dom[n] = null; + } + } + a = dom.childNodes; + if (a) { + i = a.length; + while(i--){ + T.purge( dom.childNodes[i] ); + } + } + + }, + + // ---------------------- + // SVG Effects function + // ---------------------- + + addSVGGlowEffect: function () { + + if ( document.getElementById( 'UILGlow') !== null ) return; + + let svgFilter = T.initUILEffects(); + + let filter = T.addAttributes( svgFilter, 'filter', { id: 'UILGlow', x: '-20%', y: '-20%', width: '140%', height: '140%' } ); + T.addAttributes( filter, 'feGaussianBlur', { in: 'SourceGraphic', stdDeviation: '3', result: 'uilBlur' } ); + let feMerge = T.addAttributes( filter, 'feMerge', { } ); + + for( let i = 0; i <= 3; i++ ) { + + T.addAttributes( feMerge, 'feMergeNode', { in: 'uilBlur' } ); + + } + + T.addAttributes( feMerge, 'feMergeNode', { in: 'SourceGraphic' } ); + + }, + + initUILEffects: function () { + + let svgFilter = document.getElementById( 'UILSVGEffects'); + + if ( svgFilter === null ) { + + svgFilter = T.dom( 'svg', undefined , { id: 'UILSVGEffects', width: '0', height: '0' } ); + document.body.appendChild( svgFilter ); + + } + + return svgFilter; + + }, + + // ---------------------- + // Color function + // ---------------------- + + ColorLuma : function ( hex, l ) { + + //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; + + if( hex === 'n' ) hex = '#000'; + + // validate hex string + hex = String(hex).replace(/[^0-9a-f]/gi, ''); + if (hex.length < 6) { + hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; + } + l = l || 0; + + // convert to decimal and change luminosity + let rgb = "#", c, i; + for (i = 0; i < 3; i++) { + c = parseInt(hex.substr(i*2,2), 16); + c = Math.round(Math.min(Math.max(0, c + (c * l)), 255)).toString(16); + rgb += ("00"+c).substr(c.length); + } + + return rgb; + + }, + + findDeepInver: function ( c ) { + + return (c[0] * 0.3 + c[1] * .59 + c[2] * .11) <= 0.6; + + }, + + lerpColor: function( c1, c2, factor ) { + let newColor = {}; + for ( let i = 0; i < 3; i++ ) { + newColor[i] = c1[ i ] + ( c2[ i ] - c1[ i ] ) * factor; + } + return newColor; + }, + + hexToHtml: function ( v ) { + v = v === undefined ? 0x000000 : v; + return "#" + ("000000" + v.toString(16)).substr(-6); + + }, + + htmlToHex: function ( v ) { + + return v.toUpperCase().replace("#", "0x"); + + }, + + u255: function (c, i) { + + return parseInt(c.substring(i, i + 2), 16) / 255; + + }, + + u16: function ( c, i ) { + + return parseInt(c.substring(i, i + 1), 16) / 15; + + }, + + unpack: function( c ){ + + if (c.length == 7) return [ T.u255(c, 1), T.u255(c, 3), T.u255(c, 5) ]; + else if (c.length == 4) return [ T.u16(c,1), T.u16(c,2), T.u16(c,3) ]; + + }, + + p255: function ( c ) { + let h = Math.round( ( c * 255 ) ).toString( 16 ); + if ( h.length < 2 ) h = '0' + h; + return h; + }, + + pack: function ( c ) { + + return '#' + T.p255( c[ 0 ] ) + T.p255( c[ 1 ] ) + T.p255( c[ 2 ] ); + + }, + + htmlRgb: function( c ){ + + return 'rgb(' + Math.round(c[0] * 255) + ','+ Math.round(c[1] * 255) + ','+ Math.round(c[2] * 255) + ')'; + + }, + + pad: function( n ){ + if(n.length == 1)n = '0' + n; + return n; + }, + + rgbToHex : function( c ){ + + let r = Math.round(c[0] * 255).toString(16); + let g = Math.round(c[1] * 255).toString(16); + let b = Math.round(c[2] * 255).toString(16); + return '#' + T.pad(r) + T.pad(g) + T.pad(b); + + // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); + + }, + + hueToRgb: function( p, q, t ){ + + if ( t < 0 ) t += 1; + if ( t > 1 ) t -= 1; + if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; + if ( t < 1 / 2 ) return q; + if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); + return p; + + }, + + rgbToHsl: function ( c ) { + + let r = c[0], g = c[1], b = c[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h = 0, s = 0, l = (min + max) / 2; + if (l > 0 && l < 1) s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); + if (delta > 0) { + if (max == r && max != g) h += (g - b) / delta; + if (max == g && max != b) h += (2 + (b - r) / delta); + if (max == b && max != r) h += (4 + (r - g) / delta); + h /= 6; + } + return [ h, s, l ]; + + }, + + hslToRgb: function ( c ) { + + let p, q, h = c[0], s = c[1], l = c[2]; + + if ( s === 0 ) return [ l, l, l ]; + else { + q = l <= 0.5 ? l * (s + 1) : l + s - ( l * s ); + p = l * 2 - q; + return [ T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333) ]; + } + + }, + + // ---------------------- + // SVG MODEL + // ---------------------- + + makeGradiant: function ( type, settings, parent, colors ) { + + T.dom( type, null, settings, parent, 0 ); + + let n = parent.childNodes[0].childNodes.length - 1, c; + + for( let i = 0; i < colors.length; i++ ){ + + c = colors[i]; + //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); + T.dom( 'stop', null, { offset:c[0]+'%', 'stop-color':c[1], 'stop-opacity':c[2] }, parent, [0,n] ); + + } + + }, + + /*makeGraph: function () { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 + //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 + //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + + //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 + //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.graph = svg; + + },*/ + + makePad: function ( model ) { + + let ww = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+ww+' '+ww, width:ww, height:ww, preserveAspectRatio:'none' } ); + let w = 200; + let d = (ww-w)*0.5, m = 20; + Tools.dom( 'rect', '', { x: d, y: d, width: w, height: w, fill:T.colors.back }, svg ); // 0 + Tools.dom( 'rect', '', { x: d+m*0.5, y: d+m*0.5, width: w - m , height: w - m, fill:T.colors.button }, svg ); // 1 + // Pointer + Tools.dom( 'line', '', { x1: d+(m*0.5), y1: ww *0.5, x2: d+(w-m*0.5), y2: ww * 0.5, stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 2 + Tools.dom( 'line', '', { x1: ww * 0.5, x2: ww * 0.5, y1: d+(m*0.5), y2: d+(w-m*0.5), stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 3 + Tools.dom( 'circle', '', { cx: ww * 0.5, cy: ww * 0.5, r:5, stroke: T.colors.text, 'stroke-width': 5, fill:'none' }, svg ); // 4 + T.pad2d = svg; + + }, + + makeKnob: function ( model ) { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'round' }, svg );//1 + T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.1)', 'stroke-width':7 , fill:'none'}, svg );//2 + T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.knob = svg; + + }, + + makeCircular: function ( model ) { + + let w = 128; + let radius = 40; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, stroke:'rgba(0,0,0,0.1)', 'stroke-width':10, fill:'none' }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':7, fill:'none', 'stroke-linecap':'butt' }, svg );//1 + T.circular = svg; + + }, + + makeJoystick: function ( model ) { + + //+' background:#f00;' + + let w = 128, ccc; + let radius = Math.floor((w-30)*0.5); + let innerRadius = Math.floor(radius*0.6); + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + if( model === 0 ){ + + + + // gradian background + ccc = [ [40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'grad', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian shadow + ccc = [ [60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradS', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian stick + let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; + let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; + + ccc = [ [30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + ccc = [ [30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn2', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // graph + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'url(#grad)' }, svg );//2 + T.dom( 'circle', '', { cx:64+5, cy:64+10, r:innerRadius+10, fill:'url(#gradS)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'url(#gradIn)' }, svg );//4 + + T.joystick_0 = svg; + + } else { + // gradian shadow + ccc = [ [69, 'rgb(0,0,0)', 0],[70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradX', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'none', stroke:'rgba(100,100,100,0.25)', 'stroke-width':'4' }, svg );//2 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius+14, fill:'url(#gradX)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'none', stroke:'rgb(100,100,100)', 'stroke-width':'4' }, svg );//4 + + T.joystick_1 = svg; + } + + + + }, + + makeColorRing: function () { + + let w = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + let s = 30;//stroke + let r =( w-s )*0.5; + let mid = w*0.5; + let n = 24, nudge = 8 / r / n * Math.PI, a1 = 0; + let am, tan, d2, a2, ar, i, j, path, ccc; + let color = []; + + for ( i = 0; i <= n; ++i) { + + d2 = i / n; + a2 = d2 * T.TwoPI; + am = (a1 + a2) * 0.5; + tan = 1 / Math.cos((a2 - a1) * 0.5); + + ar = [ + Math.sin(a1), -Math.cos(a1), + Math.sin(am) * tan, -Math.cos(am) * tan, + Math.sin(a2), -Math.cos(a2) + ]; + + color[1] = T.rgbToHex( T.hslToRgb([d2, 1, 0.5]) ); + + if (i > 0) { + + j = 6; + while(j--){ + ar[j] = ((ar[j]*r)+mid).toFixed(2); + } + + path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; + + ccc = [ [0,color[0],1], [100,color[1],1] ]; + T.makeGradiant( 'linearGradient', { id:'G'+i, x1:ar[0], y1:ar[1], x2:ar[4], y2:ar[5], gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'path', '', { d:path, 'stroke-width':s, stroke:'url(#G'+i+')', 'stroke-linecap':"butt" }, svg, 1 ); + + } + a1 = a2 - nudge; + color[0] = color[1]; + } + + let tw = 84.90; + + // black / white + ccc = [ [0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1] ]; + T.makeGradiant( 'linearGradient', { id:'GL0', x1:0, y1:mid-tw, x2:0, y2:mid+tw, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + ccc = [ [0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0] ]; + T.makeGradiant( 'linearGradient', { id:'GL1', x1:mid-49.05, y1:0, x2:mid+98, y2:0, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'g', null, { 'transform-origin': '128px 128px', 'transform':'rotate(0)' }, svg );//2 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'red' }, svg, 2 );// 2,0 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL1)','stroke-width':1, stroke:'url(#GL1)' }, svg, 2 );//2,1 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL0)','stroke-width':1, stroke:'url(#GL0)' }, svg, 2 );//2,2 + T.dom( 'path', '', { d:'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill:'none','stroke-width':2, stroke:'#000' }, svg, 2 );//2,3 + //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 + + T.dom( 'circle', '', { cx:128, cy:128, r:6, 'stroke-width':2, stroke:'#000', fill:'none' }, svg );//3 + + T.colorRing = svg; + + }, + + icon: function ( type, color, w ){ + + w = w || 40; + //color = color || '#DEDEDE'; + let viewBox = '0 0 256 256'; + //let viewBox = '0 0 '+ w +' '+ w; + let t = [""]; + switch(type){ + case 'logo': + t[1]=""; + break; + case 'donate': + t[1]=""; + break; + case 'neo': + t[1]=""; + break; + case 'phy': + t[1]=""; + break; + case 'config': + t[1]=""; + break; + case 'github': + t[1]=""; + break; + case 'save': + t[1]=""; + break; + } + t[2] = ""; + return t.join("\n"); + + }, + + logoFill_d:` + M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 + L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 + M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 + Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z + `, + + logo_github:` + M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 + 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 + 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 + 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 + 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z + `, + + logo_neo:` + M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 + 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 + 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 + 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L + 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z + `, + + logo_phy:` + M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 + Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 + `, + + logo_config:` + M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 + L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 + Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 + `, + + logo_donate:` + M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 + 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 + 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 + 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 + 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 + Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 + 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 + 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 + 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M + 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 + 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 + 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 + 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 + 200.9 187.5 200.9 187.5 195.35 Z + `, + + }; + + T.setText(); + + const Tools = T; - // - /* - uiout() { - - if( this.lock ) return; - if(!this.overEffect) return; - if(this.s) this.s[0].background = this.colors.background; - - } - - uiover() { - - if( this.lock ) return; - if(!this.overEffect) return; - //if( this.isOpen ) return; - if(this.s) this.s[0].background = this.colors.backgroundOver; - - } - */ + ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile + + + class Files { + + //----------------------------- + // FILE TYPE + //----------------------------- + + static autoTypes( type ) { + + let t = []; + + switch( type ){ + case 'svg': + t = [ { accept: { 'image/svg+xml': '.svg'} }, ]; + break; + case 'wav': + t = [ { accept: { 'audio/wav': '.wav'} }, ]; + break; + case 'mp3': + t = [ { accept: { 'audio/mpeg': '.mp3'} }, ]; + break; + case 'mp4': + t = [ { accept: { 'video/mp4': '.mp4'} }, ]; + break; + case 'bin': case 'hex': + t = [ { description: 'Binary Files', accept: { 'application/octet-stream': ['.bin', '.hex'] } }, ]; + break; + case 'text': + t = [ { description: 'Text Files', accept: { 'text/plain': ['.txt', '.text'], 'text/html': ['.html', '.htm'] } }, ]; + break; + case 'json': + t = [ { description: 'JSON Files', accept: { 'application/json': ['.json'] } }, ];//text/plain + break; + case 'js': + t = [ { description: 'JavaScript Files', accept: { 'text/javascript': ['.js'] } }, ]; + break; + case 'image': + t = [ { description: 'Images', accept: { 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] } }, ]; + break; + case 'icon': + t = [ { description: 'Icons', accept: { 'image/x-ico': ['.ico'] } }, ]; + break; + case 'lut': + t = [ { description: 'Lut', accept: { 'text/plain': ['.cube', '.3dl'] } }, ]; + break; + + } + + return t + + } + + + //----------------------------- + // LOAD + //----------------------------- + + static async load( o = {} ) { + + if (typeof window.showOpenFilePicker !== 'function') { + window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; + } + + try { + + let type = o.type || ''; + + const options = { + excludeAcceptAllOption: type ? true : false, + multiple: false, + //startIn:'./assets' + }; + + options.types = Files.autoTypes( type ); + + // create a new handle + const handle = await window.showOpenFilePicker( options ); + const file = await handle[0].getFile(); + //let content = await file.text() + + if( !file ) return null + + let fname = file.name; + let ftype = fname.substring( fname.lastIndexOf('.')+1, fname.length ); + + const dataUrl = [ 'png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3' ]; + const dataBuf = [ 'sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf' ]; + const reader = new FileReader(); + + if( dataUrl.indexOf( ftype ) !== -1 ) reader.readAsDataURL( file ); + else if( dataBuf.indexOf( ftype ) !== -1 ) reader.readAsArrayBuffer( file ); + else reader.readAsText( file ); + + reader.onload = function(e) { + + let content = e.target.result; + + switch(type){ + case 'image': + let img = new Image; + img.onload = function() { + if( o.callback ) o.callback( img, fname, ftype ); + }; + img.src = content; + break; + case 'json': + if( o.callback ) o.callback( JSON.parse( content ), fname, ftype ); + break; + default: + if( o.callback ) o.callback( content, fname, ftype ); + break; + } + + }; + + } catch(e) { + + console.log(e); + if( o.always && o.callback ) o.callback( null ); + + } + + } + + static showOpenFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const input = document.createElement("input"); + input.type = "file"; + input.multiple = options.multiple; + input.accept = options.types + .map((type) => type.accept) + .flatMap((inst) => Object.keys(inst).flatMap((key) => inst[key])) + .join(","); + + input.addEventListener("change", () => { + resolve( + [...input.files].map((file) => { + return { + getFile: async () => + new Promise((resolve) => { + resolve(file); + }), + }; + }) + ); + }); + + input.click(); + }) + } + + + //----------------------------- + // SAVE + //----------------------------- + + static async save( o = {} ) { + + let usePoly = false; + + if (typeof window.showSaveFilePicker !== 'function') { + window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; + usePoly = true; + } + + try { + + let type = o.type || ''; + + const options = { + suggestedName: o.name || 'hello', + data: o.data || '' + }; + + options.types = Files.autoTypes( type ); + options.finalType = Object.keys( options.types[0].accept )[0]; + options.suggestedName += options.types[0].accept[options.finalType][0]; + + + // create a new handle + const handle = await window.showSaveFilePicker( options ); + + if( usePoly ) return + + // create a FileSystemWritableFileStream to write to + const file = await handle.createWritable(); + + let blob = new Blob([ options.data ], { type: options.finalType }); + + // write our file + await file.write(blob); + + // close the file and write the contents to disk. + await file.close(); + + } catch(e) { + + console.log(e); + + } + + } + + static showSaveFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const a = document.createElement("a"); + a.download = options.suggestedName || "my-file.txt"; + let blob = new Blob([ options.data ], { type:options.finalType }); + a.href = URL.createObjectURL( blob ); + + a.addEventListener("click", () => { + resolve( + setTimeout( () => URL.revokeObjectURL(a.href), 1000 ) + ); + }); + a.click(); + }) + } + + + //----------------------------- + // FOLDER not possible in poly + //----------------------------- + + static async getFolder() { + + try { + + const handle = await window.showDirectoryPicker(); + const files = []; + for await (const entry of handle.values()) { + const file = await entry.getFile(); + files.push(file); + } + + console.log(files); + return files; + + } catch(e) { + + console.log(e); + + } + + } + + + + + + + + + + } - class Joystick extends Proto { - constructor(o = {}) { - super(o); - this.autoWidth = false; - this.value = [0, 0]; - this.minw = this.w; - this.diam = o.diam || this.w; - this.joyType = 'analogique'; - this.model = o.mode !== undefined ? o.mode : 0; - this.precision = o.precision || 2; - this.multiplicator = o.multiplicator || 1; - this.pos = new V2(); - this.tmp = new V2(); - this.interval = null; - this.c[0].style.display = 'block'; - this.haveText = o.text !== undefined ? o.text : true; - - //this.radius = this.w * 0.5; - //this.distance = this.radius*0.25; - this.distance = this.diam * 0.5 * 0.25; - this.h = o.h || this.w + (this.haveText ? 10 : 0); - this.c[0].style.width = this.w + 'px'; - if (this.c[1] !== undefined) { - // with title - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - } - let cc = this.colors; - this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); - this.c[2].textContent = this.haveText ? this.value : ''; - this.c[3] = this.getJoystick(this.model); - this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); - this.setCss(this.c[3], { - width: this.diam, - height: this.diam, - left: 0, - top: this.top - }); - this.mode(0); - this.ratio = 128 / this.w; - this.init(); - this.update(false); - } - mode(mode) { - let cc = this.colors; - switch (mode) { - case 0: - // base - if (this.model === 0) { - this.setSvg(this.c[3], 'fill', 'url(#gradIn)', 4); - this.setSvg(this.c[3], 'stroke', '#000', 4); - } else { - this.setSvg(this.c[3], 'stroke', cc.joyOut, 2); - //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.1)', 3 ); - this.setSvg(this.c[3], 'stroke', cc.joyOut, 4); - this.setSvg(this.c[3], 'fill', 'none', 4); - } - break; - case 1: - // over - if (this.model === 0) { - this.setSvg(this.c[3], 'fill', 'url(#gradIn2)', 4); - this.setSvg(this.c[3], 'stroke', 'rgba(0,0,0,0)', 4); - } else { - this.setSvg(this.c[3], 'stroke', cc.joyOver, 2); - //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.3)', 3 ); - this.setSvg(this.c[3], 'stroke', cc.joySelect, 4); - this.setSvg(this.c[3], 'fill', cc.joyOver, 4); - } - break; - } - } - - // ---------------------- - // EVENTS - // ---------------------- - - addInterval() { - if (this.interval !== null) this.stopInterval(); - if (this.pos.isZero()) return; - this.interval = setInterval(function () { - this.update(); - }.bind(this), 10); - } - stopInterval() { - if (this.interval === null) return; - clearInterval(this.interval); - this.interval = null; - } - reset() { - this.addInterval(); - this.mode(0); - } - mouseup(e) { - this.addInterval(); - this.isDown = false; - } - mousedown(e) { - this.isDown = true; - this.mousemove(e); - this.mode(2); - } - mousemove(e) { - this.mode(1); - if (!this.isDown) return; - - //this.tmp.x = this.radius - ( e.clientX - this.zone.x ); - //this.tmp.y = this.radius - ( e.clientY - this.zone.y - this.top ); - - this.tmp.x = this.w * 0.5 - (e.clientX - this.zone.x); - this.tmp.y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); - let distance = this.tmp.length(); - if (distance > this.distance) { - let angle = Math.atan2(this.tmp.x, this.tmp.y); - this.tmp.x = Math.sin(angle) * this.distance; - this.tmp.y = Math.cos(angle) * this.distance; - } - this.pos.copy(this.tmp).divideScalar(this.distance).negate(); - this.update(); - } - setValue(v) { - if (v === undefined) v = [0, 0]; - this.pos.set(v[0] || 0, v[1] || 0); - this.updateSVG(); - } - update(up) { - if (up === undefined) up = true; - if (this.interval !== null) { - if (!this.isDown) { - this.pos.lerp(null, 0.3); - this.pos.x = Math.abs(this.pos.x) < 0.01 ? 0 : this.pos.x; - this.pos.y = Math.abs(this.pos.y) < 0.01 ? 0 : this.pos.y; - if (this.isUI && this.main.isCanvas) this.main.draw(); - } - } - this.updateSVG(); - if (up) this.send(); - if (this.pos.isZero()) this.stopInterval(); - } - updateSVG() { - //let x = this.radius - ( -this.pos.x * this.distance ); - //let y = this.radius - ( -this.pos.y * this.distance ); - - let x = this.diam * 0.5 - -this.pos.x * this.distance; - let y = this.diam * 0.5 - -this.pos.y * this.distance; - if (this.model === 0) { - let sx = x + this.pos.x * 5 + 5; - let sy = y + this.pos.y * 5 + 10; - this.setSvg(this.c[3], 'cx', sx * this.ratio, 3); - this.setSvg(this.c[3], 'cy', sy * this.ratio, 3); - } else { - this.setSvg(this.c[3], 'cx', x * this.ratio, 3); - this.setSvg(this.c[3], 'cy', y * this.ratio, 3); - } - this.setSvg(this.c[3], 'cx', x * this.ratio, 4); - this.setSvg(this.c[3], 'cy', y * this.ratio, 4); - this.value[0] = (this.pos.x * this.multiplicator).toFixed(this.precision) * 1; - this.value[1] = (this.pos.y * this.multiplicator).toFixed(this.precision) * 1; - if (this.haveText) this.c[2].textContent = this.value; - } - clear() { - this.stopInterval(); - super.clear(); - } + class V2 { + + constructor( x = 0, y = 0 ) { + + this.x = x; + this.y = y; + + } + + set ( x, y ) { + + this.x = x; + this.y = y; + return this; + + } + + divide ( v ) { + + this.x /= v.x; + this.y /= v.y; + return this; + + } + + multiply ( v ) { + + this.x *= v.x; + this.y *= v.y; + return this; + + } + + multiplyScalar ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + return this; + + } + + divideScalar ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + } + + length () { + + return Math.sqrt( this.x * this.x + this.y * this.y ); + + } + + angle () { + + // computes the angle in radians with respect to the positive x-axis + + var angle = Math.atan2( this.y, this.x ); + + if ( angle < 0 ) angle += 2 * Math.PI; + + return angle; + + } + + addScalar ( s ) { + + this.x += s; + this.y += s; + return this; + + } + + negate () { + + this.x *= -1; + this.y *= -1; + return this; + + } + + neg () { + + this.x = -1; + this.y = -1; + return this; + + } + + isZero () { + + return ( this.x === 0 && this.y === 0 ); + + } + + copy ( v ) { + + this.x = v.x; + this.y = v.y; + + return this; + + } + + equals ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) ); + + } + + nearEquals ( v, n ) { + + return ( ( v.x.toFixed(n) === this.x.toFixed(n) ) && ( v.y.toFixed(n) === this.y.toFixed(n) ) ); + + } + + lerp ( v, alpha ) { + + if( v === null ){ + this.x -= this.x * alpha; + this.y -= this.y * alpha; + } else { + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + } + + return this; + + } + } - class Knob extends Proto { - constructor(o = {}) { - super(o); - this.isCyclic = o.cyclic || false; - this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; - this.autoWidth = false; - this.setTypeNumber(o); - this.minw = this.w; - this.diam = o.diam || this.w; - this.mPI = Math.PI * 0.8; - this.toDeg = 180 / Math.PI; - this.cirRange = this.mPI * 2; - this.offset = new V2(); - this.h = o.h || this.w + 10; - this.c[0].style.width = this.w + 'px'; - this.c[0].style.display = 'block'; - if (this.c[1] !== undefined) { - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - } - this.percent = 0; - this.cmode = 0; - let cc = this.colors; - this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); - this.c[3] = this.getKnob(); - this.setSvg(this.c[3], 'fill', cc.button, 0); - this.setSvg(this.c[3], 'stroke', cc.text, 1); - this.setSvg(this.c[3], 'stroke', cc.text, 3); - this.setSvg(this.c[3], 'd', this.makeGrad(), 3); - this.setSvg(this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); - this.setCss(this.c[3], { - width: this.diam, - height: this.diam, - left: 0, - top: this.top - }); - if (this.model > 0) { - Tools.dom('path', '', { - d: '', - stroke: cc.text, - 'stroke-width': 2, - fill: 'none', - 'stroke-linecap': 'round' - }, this.c[3]); //4 - - if (this.model == 2) { - Tools.addSVGGlowEffect(); - this.setSvg(this.c[3], 'style', 'filter: url("#UILGlow");', 4); - } - } - this.r = 0; - this.init(); - this.update(); - } - mode(mode) { - let cc = this.colors; - if (this.cmode === mode) return false; - switch (mode) { - case 0: - // base - this.s[2].color = cc.text; - this.setSvg(this.c[3], 'fill', cc.button, 0); - //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); - this.setSvg(this.c[3], 'stroke', cc.text, 1); - break; - case 1: - // down - this.s[2].color = cc.textOver; - this.setSvg(this.c[3], 'fill', cc.select, 0); - //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); - this.setSvg(this.c[3], 'stroke', cc.textOver, 1); - break; - } - this.cmode = mode; - return true; - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'knob'; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - this.isDown = false; - this.sendEnd(); - return this.mode(0); - } - mousedown(e) { - this.isDown = true; - this.old = this.value; - this.oldr = null; - this.mousemove(e); - return this.mode(1); - } - mousemove(e) { - if (!this.isDown) return; - let off = this.offset; - - //off.x = this.radius - ( e.clientX - this.zone.x ); - //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); - - off.x = this.w * 0.5 - (e.clientX - this.zone.x); - off.y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); - this.r = -Math.atan2(off.x, off.y); - if (this.oldr !== null) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; - this.r = this.r > this.mPI ? this.mPI : this.r; - this.r = this.r < -this.mPI ? -this.mPI : this.r; - let steps = 1 / this.cirRange; - let value = (this.r + this.mPI) * steps; - let n = this.range * value + this.min - this.old; - if (n >= this.step || n <= this.step) { - n = Math.floor(n / this.step); - this.value = this.numValue(this.old + n * this.step); - this.update(true); - this.old = this.value; - this.oldr = this.r; - } - } - wheel(e) { - let name = this.testZone(e); - if (name === 'knob') { - let v = this.value - this.step * e.delta; - if (v > this.max) { - v = this.isCyclic ? this.min : this.max; - } else if (v < this.min) { - v = this.isCyclic ? this.max : this.min; - } - this.setValue(v); - this.old = v; - this.update(true); - return true; - } - return false; - } - makeGrad() { - let d = '', - step, - range, - a, - x, - y, - x2, - y2, - r = 64; - let startangle = Math.PI + this.mPI; - let endangle = Math.PI - this.mPI; - //let step = this.step>5 ? this.step : 1; - - if (this.step > 5) { - range = this.range / this.step; - step = (startangle - endangle) / range; - } else { - step = (startangle - endangle) / r * 2; - range = r * 0.5; - } - for (let i = 0; i <= range; ++i) { - a = startangle - step * i; - x = r + Math.sin(a) * (r - 20); - y = r + Math.cos(a) * (r - 20); - x2 = r + Math.sin(a) * (r - 24); - y2 = r + Math.cos(a) * (r - 24); - d += 'M' + x + ' ' + y + ' L' + x2 + ' ' + y2 + ' '; - } - return d; - } - update(up) { - this.c[2].textContent = this.value; - this.percent = (this.value - this.min) / this.range; - let sa = Math.PI + this.mPI; - let ea = this.percent * this.cirRange - this.mPI; - let sin = Math.sin(ea); - let cos = Math.cos(ea); - let x1 = 25 * sin + 64; - let y1 = -(25 * cos) + 64; - let x2 = 20 * sin + 64; - let y2 = -(20 * cos) + 64; - this.setSvg(this.c[3], 'd', 'M ' + x1 + ' ' + y1 + ' L ' + x2 + ' ' + y2, 1); - if (this.model > 0) { - let x1 = 36 * Math.sin(sa) + 64; - let y1 = 36 * Math.cos(sa) + 64; - let x2 = 36 * sin + 64; - let y2 = -36 * cos + 64; - let big = ea <= Math.PI - this.mPI ? 0 : 1; - this.setSvg(this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4); - let color = Tools.pack(Tools.lerpColor(Tools.unpack(Tools.ColorLuma(this.colors.text, -0.75)), Tools.unpack(this.colors.text), this.percent)); - this.setSvg(this.c[3], 'stroke', color, 4); - } - if (up) this.send(); - } + /** + * @author lth / https://github.com/lo-th + */ + + class Proto { + constructor(o = {}) { + // disable mouse controle + this.lock = o.lock || false; + + // for button + this.neverlock = false; + + // only simple space + this.isSpace = o.isSpace || false; + + // if is on gui or group + this.main = o.main || null; + this.isUI = o.isUI || false; + this.group = o.group || null; + + this.isListen = false; + + this.top = 0; + this.ytop = 0; + + this.dx = o.dx || 0; + + this.isSelectable = o.selectable !== undefined ? o.selectable : false; + this.unselectable = + o.unselect !== undefined ? o.unselect : this.isSelectable; + + this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' + + this.css = this.main ? this.main.css : Tools.css; + + this.colors = Tools.defineColor( + o, + this.main + ? this.group + ? this.group.colors + : this.main.colors + : Tools.colors + ); + + this.overEffect = this.colors.showOver; + + this.svgs = Tools.svgs; + + this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; + this.local = new V2().neg(); + + this.isCanvasOnly = false; + this.isSelect = false; + + // percent of title + this.p = o.p !== undefined ? o.p : Tools.size.p; + + this.w = this.isUI ? this.main.size.w : Tools.size.w; + if (o.w !== undefined) this.w = o.w; + + this.h = this.isUI ? this.main.size.h : Tools.size.h; + if (o.h !== undefined) this.h = o.h; + if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; + else this.lock = true; + + // decale for canvas only + this.fw = o.fw || 0; + + this.autoWidth = o.auto || true; // auto width or flex + this.isOpen = false; //false// open statu + + // radius for toolbox + this.radius = o.radius || this.colors.radius; + + this.transition = o.transition || Tools.transition; + + // only for number + this.isNumber = false; + this.noNeg = o.noNeg || false; + this.allEqual = o.allEqual || false; + + // only most simple + this.mono = false; + + // stop listening for edit slide text + this.isEdit = false; + + // no title + this.simple = o.simple || false; + if (this.simple) this.sa = 0; + + // define obj size + this.setSize(this.w); + + // title size + if (o.sa !== undefined) this.sa = o.sa; + if (o.sb !== undefined) this.sb = o.sb; + if (this.simple) this.sb = this.w - this.sa; + + // last number size for slide + this.sc = o.sc === undefined ? 47 : o.sc; + + // for listening object + this.objectLink = null; + this.isSend = false; + this.objectKey = null; + + this.txt = o.name || ""; + this.name = o.rename || this.txt; + this.target = o.target || null; + + // callback + this.callback = o.callback === undefined ? null : o.callback; + this.endCallback = null; + this.openCallback = o.openCallback === undefined ? null : o.openCallback; + this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; + + // if no callback take one from group or gui + if (this.callback === null && this.isUI && this.main.callback !== null) { + this.callback = this.group ? this.group.callback : this.main.callback; + } + + // elements + this.c = []; + + // style + this.s = []; + + this.useFlex = this.isUI ? this.main.useFlex : false; + let flexible = this.useFlex + ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" + : "float:left;"; + + this.c[0] = Tools.dom( + "div", + this.css.basic + flexible + "position:relative; height:20px;" + ); + + this.s[0] = this.c[0].style; + + // bottom margin + this.margin = this.colors.sy; + this.mtop = 0; + let marginDiv = Tools.isDivid(this.margin); + + if (this.isUI && this.margin) { + this.s[0].boxSizing = "content-box"; + if (marginDiv) { + this.mtop = this.margin * 0.5; + //this.s[0].borderTop = '${this.mtop}px solid transparent' + //console.log(`${this.mtop}px solid transparent`) + this.s[0].borderTop = this.mtop + "px solid transparent"; + this.s[0].borderBottom = this.mtop + "px solid transparent"; + } else { + this.s[0].borderBottom = this.margin + "px solid transparent"; + } + } + + // with title + if (!this.simple) { + this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); + this.s[1] = this.c[1].style; + this.c[1].textContent = this.name; + this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; + } + + if (o.pos) { + this.s[0].position = "absolute"; + for (let p in o.pos) { + this.s[0][p] = o.pos[p]; + } + this.mono = true; + } + + if (o.css) this.s[0].cssText = o.css; + } + + // ---------------------- + // make the node + // ---------------------- + + init() { + this.ytop = this.top + this.mtop; + + this.zone.h = this.h + this.margin; + this.zone.w = this.w; + + let s = this.s; // style cache + let c = this.c; // div cach + + s[0].height = this.h + "px"; + + if (this.isUI) s[0].background = this.colors.background; + + if (!this.autoWidth && this.useFlex) { + s[0].flex = "1 0 auto"; + s[0].minWidth = this.minw + "px"; + s[0].textAlign = "center"; + } else { + if (this.isUI) s[0].width = "100%"; + } + + //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; + if (c[1] !== undefined && this.autoWidth) { + s[1] = c[1].style; + s[1].top = 1 + "px"; + s[1].height = this.h - 2 + "px"; + } + + let frag = Tools.frag; + + for (let i = 1, lng = c.length; i !== lng; i++) { + if (c[i] !== undefined) { + frag.appendChild(c[i]); + s[i] = c[i].style; + } + } + + let pp = + this.target !== null + ? this.target + : this.isUI + ? this.main.inner + : document.body; + + if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); + else pp.appendChild(c[0]); + + c[0].appendChild(frag); + + this.rSize(); + + // ! solo proto + if (!this.isUI) { + this.c[0].style.pointerEvents = "auto"; + Roots.add(this); + } + } + + addTransition() { + if (this.baseH && this.transition && this.isUI) { + this.c[0].style.transition = "height " + this.transition + "s ease-out"; + } + } + + // from Tools + + dom(type, css, obj, dom, id) { + return Tools.dom(type, css, obj, dom, id); + } + + setSvg(dom, type, value, id, id2) { + Tools.setSvg(dom, type, value, id, id2); + } + + setCss(dom, css) { + Tools.setCss(dom, css); + } + + clamp(value, min, max) { + return Tools.clamp(value, min, max); + } + + getColorRing() { + if (!Tools.colorRing) Tools.makeColorRing(); + return Tools.clone(Tools.colorRing); + } + + getJoystick(model) { + if (!Tools["joystick_" + model]) Tools.makeJoystick(model); + return Tools.clone(Tools["joystick_" + model]); + } + + getCircular(model) { + if (!Tools.circular) Tools.makeCircular(model); + return Tools.clone(Tools.circular); + } + + getKnob(model) { + if (!Tools.knob) Tools.makeKnob(model); + return Tools.clone(Tools.knob); + } + + getPad2d(model) { + if (!Tools.pad2d) Tools.makePad(model); + return Tools.clone(Tools.pad2d); + } + + // from Roots + + cursor(name) { + Roots.cursor(name); + } + + ///////// + + update() {} + + reset() {} + + ///////// + + content() { + return this.c[0]; + } + + getDom() { + return this.c[0]; + } + + uiout() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.background; + } + + uiover() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.backgroundOver; + } + + rename(s) { + if (this.c[1] !== undefined) this.c[1].textContent = s; + } + + listen() { + this.isListen = Roots.addListen(this); + return this; + } + + listening() { + // modified by Fedemarino + if (this.objectLink === null) return; + if (this.isSend) return; + if (this.isEdit) return; + // check if value has changed + let hasChanged = this.setValue(this.objectLink[this.objectKey]); + return hasChanged; + } + + setValue(v) { + const old = this.value; + if (this.isNumber) this.value = this.numValue(v); + //else if( v instanceof Array && v.length === 1 ) v = v[0]; + else this.value = v; + this.update(); + let hasChanged = false; + if (old !== this.value) { + hasChanged = true; + } + + return hasChanged; + } + + // ---------------------- + // update every change + // ---------------------- + + onChange(f) { + if (this.isSpace) return; + this.callback = f || null; + return this; + } + + // ---------------------- + // update only on end + // ---------------------- + + onFinishChange(f) { + if (this.isSpace) return; + this.callback = null; + this.endCallback = f; + return this; + } + + // ---------------------- + // event on open close + // ---------------------- + + onOpen(f) { + this.openCallback = f; + return this; + } + + onClose(f) { + this.closeCallback = f; + return this; + } + + // ---------------------- + // send back value + // ---------------------- + + send(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + this.isSend = true; + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + if (this.callback) this.callback(v, this.objectKey); + this.isSend = false; + } + + sendEnd(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + if (this.endCallback) this.endCallback(v); + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + } + + // ---------------------- + // clear node + // ---------------------- + + dispose() { + if (this.isListen) Roots.removeListen(this); + + Tools.clear(this.c[0]); + + if (this.target !== null) { + if (this.group !== null) this.group.clearOne(this); + else this.target.removeChild(this.c[0]); + } else { + if (this.isUI) this.main.clearOne(this); + else document.body.removeChild(this.c[0]); + } + + if (!this.isUI) Roots.remove(this); + + this.c = null; + this.s = null; + this.callback = null; + this.target = null; + this.isListen = false; + } + + clear() {} + + // ---------------------- + // change size + // ---------------------- + + getWidth() { + let nw = Roots.getWidth(this); + if (nw) this.w = nw; + } + + setSize(sx) { + if (!this.autoWidth) return; + + this.w = sx; + + if (this.simple) { + this.sb = this.w - this.sa; + } else { + let pp = this.w * (this.p / 100); + //this.sa = Math.floor( pp + 10 ) + //this.sb = Math.floor( this.w - pp - 20 ) + this.sa = Math.floor(pp + 8); + this.sb = Math.floor(this.w - pp - 16); + } + } + + rSize() { + if (!this.autoWidth) return; + if (!this.isUI) this.s[0].width = this.w + "px"; + if (!this.simple) this.s[1].width = this.sa + "px"; + } + + // ---------------------- + // for numeric value + // ---------------------- + + setTypeNumber(o) { + this.isNumber = true; + + this.value = 0; + if (o.value !== undefined) { + if (typeof o.value === "string") this.value = o.value * 1; + else this.value = o.value; + } + + this.min = o.min === undefined ? -Infinity : o.min; + this.max = o.max === undefined ? Infinity : o.max; + this.precision = o.precision === undefined ? 2 : o.precision; + + let s; + + switch (this.precision) { + case 0: + s = 1; + break; + case 1: + s = 0.1; + break; + case 2: + s = 0.01; + break; + case 3: + s = 0.001; + break; + case 4: + s = 0.0001; + break; + case 5: + s = 0.00001; + break; + case 6: + s = 0.000001; + break; + } + + this.step = o.step === undefined ? s : o.step; + this.range = this.max - this.min; + this.value = this.numValue(this.value); + } + + numValue(n) { + if (this.noNeg) n = Math.abs(n); + return ( + Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 + ); + } + + // ---------------------- + // EVENTS DEFAULT + // ---------------------- + + handleEvent(e) { + if (this.lock) return; + if (this.neverlock) Roots.lock = false; + if (!this[e.type]) + return console.error(e.type, "this type of event no existe !"); + + // TODO !!!! + + //if( this.marginDiv ) z.d -= this.margin * 0.5 + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 + + return this[e.type](e); + } + + wheel(e) { + return false; + } + mousedown(e) { + return false; + } + mousemove(e) { + return false; + } + mouseup(e) { + return false; + } + keydown(e) { + return false; + } + keyup(e) { + return false; + } + + // ---------------------- + // object referency + // ---------------------- + + setReferency(obj, key) { + this.objectLink = obj; + this.objectKey = key; + } + + display(v = false) { + this.s[0].visibility = v ? "visible" : "hidden"; + } + + // ---------------------- + // resize height + // ---------------------- + + open() { + if (this.isOpen) return; + this.isOpen = true; + Roots.needResize = true; + if (this.openCallback) this.openCallback(); + } + + close() { + if (!this.isOpen) return; + this.isOpen = false; + Roots.needResize = true; + if (this.closeCallback) this.closeCallback(); + } + + needZone() { + Roots.needReZone = true; + } + + rezone() { + Roots.needReZone = true; + } + + // ---------------------- + // INPUT + // ---------------------- + + select() {} + + unselect() {} + + setInput(Input) { + Roots.setInput(Input, this); + } + + upInput(x, down) { + return Roots.upInput(x, down); + } + + // ---------------------- + // special item + // ---------------------- + + selected(b) { + this.isSelect = b || false; + } } - class List extends Proto { - constructor(o = {}) { - super(o); - - // TODO not work - this.hideCurrent = false; - - // images - this.path = o.path || ''; - this.format = o.format || ''; - this.isWithImage = this.path !== '' ? true : false; - this.preLoadComplete = false; - this.tmpImage = {}; - this.tmpUrl = []; - this.m = o.m !== undefined ? o.m : 5; - let align = o.align || 'left'; - - // scroll size - let ss = o.scrollSize || 10; - this.ss = ss + 1; - this.sMode = 0; - this.tMode = 0; - this.listOnly = o.listOnly || false; - this.staticTop = o.staticTop || false; - this.isSelectable = this.listOnly; - if (o.select !== undefined) o.selectable = o.select; - if (o.selectable !== undefined) this.isSelectable = o.selectable; - if (this.txt === '') this.p = 0; - let fltop = Math.floor(this.h * 0.5) - 3; - let cc = this.colors; - this.c[2] = this.dom('div', this.css.basic + 'top:0; display:none; border-radius:' + this.radius + 'px;'); - this.c[3] = this.dom('div', this.css.item + 'padding:0px ' + this.m + 'px; margin-bottom:0px; position:absolute; justify-content:' + align + '; text-align:' + align + '; line-height:' + (this.h - 4) + 'px; top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:1px solid ' + cc.border + '; border-radius:' + this.radius + 'px;'); - this.c[4] = this.dom('path', this.css.basic + 'position:absolute; width:6px; height:6px; top:' + fltop + 'px;', { - d: this.svgs.g1, - fill: cc.text, - stroke: 'none' - }); - this.scrollerBack = this.dom('div', this.css.basic + 'right:0px; width:' + ss + 'px; background:' + cc.back + '; display:none;'); - this.scroller = this.dom('div', this.css.basic + 'right:' + (ss - ss * 0.25) * 0.5 + 'px; width:' + ss * 0.25 + 'px; background:' + cc.text + '; display:none; '); - this.c[3].style.color = cc.text; - this.list = []; - this.refObject = null; - if (o.list) { - if (o.list instanceof Array) { - this.list = o.list; - } else if (o.list instanceof Object) { - this.refObject = o.list; - for (let g in this.refObject) this.list.push(g); - } - } - this.items = []; - this.prevName = ''; - this.tmpId = 0; - this.baseH = this.h; - this.itemHeight = o.itemHeight || this.h; //(this.h-3); - - // force full list - this.full = o.full || false; - this.py = 0; - this.ww = this.sb; - this.scroll = false; - this.isDown = false; - this.current = null; - - // list up or down - this.side = o.side || 'down'; - this.up = this.side === 'down' ? 0 : 1; - if (this.up) { - this.c[2].style.top = 'auto'; - this.c[3].style.top = 'auto'; - this.c[4].style.top = 'auto'; - this.c[2].style.bottom = this.h - 2 + 'px'; - this.c[3].style.bottom = '1px'; - this.c[4].style.bottom = fltop + 'px'; - } else { - this.c[2].style.top = this.baseH + 'px'; - } - this.listIn = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); - this.listIn.name = 'list'; - this.topList = 0; - this.c[2].appendChild(this.listIn); - this.c[2].appendChild(this.scrollerBack); - this.c[2].appendChild(this.scroller); - if (o.value !== undefined) { - if (!isNaN(o.value)) this.value = this.list[o.value];else this.value = o.value; - } else { - this.value = this.list[0]; - } - this.isOpenOnStart = o.open || false; - if (this.listOnly) { - this.baseH = 5; - this.c[3].style.display = 'none'; - this.c[4].style.display = 'none'; - this.c[2].style.top = this.baseH + 'px'; - this.isOpenOnStart = true; - } - this.miniCanvas = o.miniCanvas || false; - this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; - this.imageSize = o.imageSize || [20, 20]; - - // dragout function - this.drag = o.drag || false; - this.dragout = o.dragout || false; - this.dragstart = o.dragstart || null; - this.dragend = o.dragend || null; - - //this.c[0].style.background = '#FF0000' - ///if( this.isWithImage ) this.preloadImage(); - - this.setList(this.list); - this.init(); - if (this.isWithImage) this.preloadImage(); - if (this.isOpenOnStart) this.open(true); - this.baseH += this.mtop; - } - - // image list - - preloadImage() { - this.preLoadComplete = false; - this.tmpImage = {}; - for (let i = 0; i < this.list.length; i++) this.tmpUrl.push(this.list[i]); - this.loadOne(); - } - nextImg() { - if (this.c === null) return; - this.tmpUrl.shift(); - if (this.tmpUrl.length === 0) { - this.preLoadComplete = true; - this.addImages(); - /*this.setList( this.list ); - this.init(); - if( this.isOpenOnStart ) this.open();*/ - } else this.loadOne(); - } - loadOne() { - let self = this; - let name = this.tmpUrl[0]; - let img = document.createElement('img'); - img.style.cssText = 'position:absolute; width:' + self.imageSize[0] + 'px; height:' + self.imageSize[1] + 'px'; - img.setAttribute('src', this.path + name + this.format); - img.addEventListener('load', function () { - self.imageSize[2] = img.width; - self.imageSize[3] = img.height; - self.tmpImage[name] = img; - self.nextImg(); - }); - } - - // - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (this.up && this.isOpen) { - if (l.y > this.h - this.baseH) return 'title';else { - if (this.scroll && l.x > this.sa + this.sb - this.ss) return 'scroll'; - if (l.x > this.sa) return this.testItems(l.y - this.baseH); - } - } else { - if (l.y < this.baseH + 2) return 'title';else { - if (this.isOpen) { - if (this.scroll && l.x > this.sa + this.sb - this.ss) return 'scroll'; - if (l.x > this.sa) return this.testItems(l.y - this.baseH); - } - } - } - return ''; - } - testItems(y) { - let name = ''; - let items = this.items; - - /*if(this.hideCurrent){ - //items = [...this.items] - items = this.items.slice(this.tmpId) - }*/ - - let i = items.length, - item, - a, - b; - while (i--) { - item = items[i]; - a = item.posy + this.topList; - b = item.posy + this.itemHeight + 1 + this.topList; - if (y >= a && y <= b) { - name = 'item' + i; - this.modeItem(0); - this.current = item; - this.modeItem(1); - return name; - } - } - return name; - } - modeItem(mode) { - if (!this.current) return; - if (this.current.select && mode === 0) mode = 2; - let cc = this.colors; - switch (mode) { - case 0: - // base - this.current.style.background = cc.back; - this.current.style.color = cc.text; - break; - case 1: - // over - this.current.style.background = cc.over; - this.current.style.color = cc.textOver; - break; - case 2: - // edit / down - this.current.style.background = cc.select; - this.current.style.color = cc.textSelect; - break; - } - } - unSelected() { - if (!this.current) return; - this.modeItem(0); - this.current = null; - } - selected() { - if (!this.current) return; - this.resetItems(); - this.modeItem(2); - this.current.select = true; - } - resetItems() { - let i = this.items.length; - while (i--) { - this.items[i].select = false; - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text; - } - } - hideActive() { - if (!this.hideCurrent) return; - //if( !this.current ) return - if (this.current) this.tmpId = this.current.id; - this.resetHide(); - //this.items[this.tmpId].style.height = 0+'px' - } - resetHide() { - console.log(this.tmpId); - let i = this.items.length; - while (i--) { - if (i === this.tmpId) { - this.items[i].style.height = 0 + 'px'; - this.items[i].posy = -1; - } else { - this.items[i].style.height = this.itemHeight + 'px'; - this.items[i].posy = (this.itemHeight + 1) * (i - 1); - } - //this.items[i].style.display = 'flex' - - /*this.items[i].select = false - this.items[i].style.background = this.colors.back; - this.items[i].style.color = this.colors.text;*/ - } - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - this.isDown = false; - } - mousedown(e) { - let name = this.testZone(e); - if (!name) return false; - if (name === 'scroll') { - this.isDown = true; - this.mousemove(e); - } else if (name === 'title') { - this.modeTitle(2); - if (!this.listOnly) { - this.hideActive(); - if (!this.isOpen) this.open();else this.close(); - } - } else { - // is item - if (this.current) { - this.value = this.list[this.current.id]; - //this.tmpId = this.current.id - - if (this.isSelectable) this.selected(); - - //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); - this.send(this.value); - if (!this.listOnly) { - this.close(); - this.setTopItem(); - //this.hideActive() - } - } - } - return true; - } - mousemove(e) { - let nup = false; - let name = this.testZone(e); - if (!name) return nup; - if (name === 'title') { - this.unSelected(); - this.modeTitle(1); - this.cursor('pointer'); - } else if (name === 'scroll') { - this.cursor('s-resize'); - this.modeScroll(1); - if (this.isDown) { - this.modeScroll(2); - //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); - let top = this.zone.y + this.baseH - 2; - this.update(e.clientY - top - this.sh * 0.5); - } - //if(this.isDown) this.listmove(e); - } else { - // is item - this.modeTitle(0); - this.modeScroll(0); - this.cursor('pointer'); - } - if (name !== this.prevName) nup = true; - this.prevName = name; - return nup; - } - wheel(e) { - let name = this.testZone(e); - if (name === 'title') return false; - this.py += e.delta * 10; - this.update(this.py); - return true; - } - - // ---------------------- - - reset() { - this.prevName = ''; - this.unSelected(); - this.modeTitle(0); - this.modeScroll(0); - - //console.log('this is reset') - } - modeScroll(mode) { - if (mode === this.sMode) return; - let s = this.scroller.style; - let cc = this.colors; - switch (mode) { - case 0: - // base - s.background = cc.text; - break; - case 1: - // over - s.background = cc.select; - break; - case 2: - // edit / down - s.background = cc.select; - break; - } - this.sMode = mode; - } - modeTitle(mode) { - if (mode === this.tMode) return; - let s = this.s; - let cc = this.colors; - switch (mode) { - case 0: - // base - s[3].color = cc.text; - s[3].background = cc.button; - break; - case 1: - // over - s[3].color = cc.textOver; - s[3].background = cc.overoff; - break; - case 2: - // edit / down - s[3].color = cc.textSelect; - s[3].background = cc.overoff; - break; - } - this.tMode = mode; - } - clearList() { - while (this.listIn.children.length) this.listIn.removeChild(this.listIn.lastChild); - this.items = []; - } - setList(list) { - this.clearList(); - this.list = list; - this.length = this.list.length; - let lng = this.hideCurrent ? this.length - 1 : this.length; - this.maxItem = this.full ? lng : 5; - this.maxItem = lng < this.maxItem ? lng : this.maxItem; - this.maxHeight = this.maxItem * (this.itemHeight + 1) + 2; - this.max = lng * (this.itemHeight + 1) + 2; - this.ratio = this.maxHeight / this.max; - this.sh = this.maxHeight * this.ratio; - this.range = this.maxHeight - this.sh; - this.c[2].style.height = this.maxHeight + 'px'; - this.scrollerBack.style.height = this.maxHeight + 'px'; - this.scroller.style.height = this.sh + 'px'; - if (this.max > this.maxHeight) { - this.ww = this.sb - this.ss; - this.scroll = true; - } - if (this.miniCanvas) { - this.tmpCanvas = document.createElement('canvas'); - this.tmpCanvas.width = this.imageSize[0]; - this.tmpCanvas.height = this.imageSize[1]; - this.tmpCtx = this.tmpCanvas.getContext("2d"); - this.tmpCtx.fillStyle = this.canvasBg; - this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); - } - let item, n; //, l = this.sb; - for (let i = 0; i < this.length; i++) { - n = this.list[i]; - item = this.dom('div', this.css.item + 'padding:0px ' + (this.m + 1) + 'px; width:' + this.ww + 'px; height:' + this.itemHeight + 'px; line-height:' + (this.itemHeight - 2) + 'px; color:' + this.colors.text + '; background:' + this.colors.back + ';'); - item.name = 'item' + i; - item.id = i; - item.select = false; - item.posy = (this.itemHeight + 1) * i; - this.listIn.appendChild(item); - this.items.push(item); - if (n === this.value) this.current = item; - - //if( this.isWithImage ) item.appendChild( this.tmpImage[n] ); - if (!this.isWithImage) item.textContent = n; - if (this.miniCanvas) { - let c = new Image(); - c.src = this.tmpCanvas.toDataURL(); - - //item.style.marginLeft = (this.imageSize[0]+8)+'px' - - /*let c = document.createElement('canvas') - c.width = this.imageSize[0] - c.height = this.imageSize[1] - let ctx = c.getContext("2d") - ctx.fillStyle = this.canvasBg - ctx.fillRect(0, 0, this.imageSize[0], this.imageSize[1])*/ - - //c.style.cssText = 'position:relative; pointer-events:none; display:inline-block; float:left; margin-left:0px; margin-right:5px; top:2px' - // c.style.cssText =' flex-shrink: 0;' - - c.style.cssText = 'margin-right:4px;'; - - //c.style.cssText = 'display:flex; align-content: flex-start; flex-wrap: wrap;' - //item.style.float = 'right' - item.appendChild(c); - this.tmpImage[n] = c; - } - if (this.dragout) { - item.img = this.tmpImage[n]; - item.style.pointerEvents = 'auto'; - item.draggable = "true"; - item.addEventListener('dragstart', this.dragstart || function () {/*console.log('drag start')*/}); - item.addEventListener('drag', this.drag || function () {/*console.log('drag start')*/}); - //item.addEventListener('dragover', this); - //item.addEventListener('dragenter', this); - item.addEventListener('dragleave', function () { - Roots.fakeUp(); - }); - item.addEventListener('dragend', this.dragend || function () {/*console.log('drag end')*/}.bind(this)); - //item.addEventListener('drop', function(){console.log('drop')}) - } - } - this.setTopItem(); - if (this.isSelectable) this.selected(); - } - drawImage(name, image, x, y, w, h) { - this.tmpCtx.clearRect(0, 0, this.imageSize[0], this.imageSize[1]); - this.tmpCtx.drawImage(image, x, y, w, h, 0, 0, this.imageSize[0], this.imageSize[1]); - this.tmpImage[name].src = this.tmpCanvas.toDataURL(); - - /*let c = this.tmpImage[name] - let ctx = c.getContext("2d") - ctx.drawImage(image, x, y, w, h, 0, 0, this.imageSize[0], this.imageSize[1])*/ - } - addImages() { - let lng = this.list.length; - for (let i = 0; i < lng; i++) { - this.items[i].appendChild(this.tmpImage[this.list[i]]); - } - this.setTopItem(); - } - setValue(value) { - if (!isNaN(value)) this.value = this.list[value];else this.value = value; - - //this.tmpId = value - - this.setTopItem(); - } - setTopItem() { - if (this.staticTop) return; - if (this.isWithImage) { - if (!this.preLoadComplete) return; - if (!this.c[3].children.length) { - this.canvas = document.createElement('canvas'); - this.canvas.width = this.imageSize[0]; - this.canvas.height = this.imageSize[1]; - this.canvas.style.cssText = 'margin-right:4px;'; - this.ctx = this.canvas.getContext("2d"); - this.c[3].style.textAlign = 'left'; - this.c[3].style.justifyContent = 'left'; - this.c[3].appendChild(this.canvas); - } - this.tmpImage[this.value]; - this.ctx.drawImage(this.tmpImage[this.value], 0, 0, this.imageSize[2], this.imageSize[3], 0, 0, this.imageSize[0], this.imageSize[1]); - } else this.c[3].textContent = this.value; - if (this.miniCanvas) { - if (!this.c[3].children.length) { - this.canvas = document.createElement('canvas'); - this.canvas.width = this.imageSize[0]; - this.canvas.height = this.imageSize[1]; - this.canvas.style.cssText = 'margin-right:4px;'; - this.ctx = this.canvas.getContext("2d"); - this.c[3].style.textAlign = 'left'; - this.c[3].style.justifyContent = 'left'; - this.c[3].appendChild(this.canvas); - } - this.ctx.drawImage(this.tmpImage[this.value], 0, 0); - } - } - - // ----- LIST - - update(y) { - if (!this.scroll) return; - y = y < 0 ? 0 : y; - y = y > this.range ? this.range : y; - this.topList = -Math.floor(y / this.ratio); - this.listIn.style.top = this.topList + 'px'; - this.scroller.style.top = Math.floor(y) + 'px'; - this.py = y; - } - parentHeight(t) { - if (this.group !== null) this.group.calc(t);else if (this.isUI) this.main.calc(t); - } - open(first) { - super.open(); - this.update(0); - this.h = this.maxHeight + this.baseH + 5; - if (!this.scroll) { - this.topList = 0; - this.h = this.baseH + 5 + this.max; - this.scroller.style.display = 'none'; - this.scrollerBack.style.display = 'none'; - } else { - this.scroller.style.display = 'block'; - this.scrollerBack.style.display = 'block'; - } - this.s[0].height = this.h + 'px'; - this.s[2].display = 'block'; - if (this.up) { - this.zone.y -= this.h - (this.baseH - 10); - this.setSvg(this.c[4], 'd', this.svgs.g1); - } else { - this.setSvg(this.c[4], 'd', this.svgs.g2); - } - this.rSizeContent(); - let t = this.h - this.baseH; - this.zone.h = this.h; - if (!first) this.parentHeight(t); - } - close() { - super.close(); - if (this.up) this.zone.y += this.h - (this.baseH - 10); - let t = this.h - this.baseH; - this.h = this.baseH; - this.s[0].height = this.h + 'px'; - this.s[2].display = 'none'; - this.setSvg(this.c[4], 'd', this.svgs.g1); - this.zone.h = this.h; - this.parentHeight(-t); - } - - // ----- - - text(txt) { - this.c[3].textContent = txt; - } - rSizeContent() { - let i = this.length; - while (i--) this.listIn.children[i].style.width = this.ww + 'px'; - } - rSize() { - super.rSize(); - - //Proto.prototype.rSize.call( this ); - - let s = this.s; - let w = this.sb; - let d = this.sa; - if (s[2] === undefined) return; - s[2].width = w + 'px'; - s[2].left = d + 'px'; - s[3].width = w + 'px'; - s[3].left = d + 'px'; - s[4].left = d + w - 15 + 'px'; - this.ww = w; - if (this.max > this.maxHeight) this.ww = w - this.ss; - if (this.isOpen) this.rSizeContent(); - } + class Bool extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || false; + this.model = o.mode !== undefined ? o.mode : 0; + + this.onName = o.rename || this.txt; + if( o.onName ) o.onname = o.onName; + if( o.onname ) this.onName = o.onname; + + this.inh = o.inh || Math.floor( this.h*0.8 ); + this.inw = o.inw || 36; + + let cc = this.colors; + + if( this.model === 0 ){ + let t = Math.floor(this.h*0.5)-((this.inh-2)*0.5); + this.c[2] = this.dom( 'div', this.css.basic + 'background:'+ cc.inputBg +'; height:'+(this.inh-2)+'px; width:'+this.inw+'px; top:'+t+'px; border-radius:10px; border:2px solid '+ cc.back ); + this.c[3] = this.dom( 'div', this.css.basic + 'height:'+(this.inh-6)+'px; width:16px; top:'+(t+2)+'px; border-radius:10px; background:'+ cc.button+';' ); + } else { + this.p = 0; + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + } + + this.stat = -1; + + this.init(); + this.update(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + this.value = !this.value; + this.update( true ); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + this.cursor('pointer'); + return this.mode( true ) + + } + + reset () { + + this.cursor(); + return this.mode() + + } + + // ---------------------- + // MODE + // ---------------------- + + mode ( over ) { + + let change = false; + let cc = this.colors, s = this.s, n, v = this.value; + + if( over ) n = v ? 4 : 3; + else n = v ? 2 : 1; + + if( this.stat !== n ){ + + this.stat = n; + + if( this.model !== 0 ){ + + switch( n ){ + + case 1: s[2].color = cc.text; s[2].background = cc.button; break; + case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; + case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; + case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; + + } + + this.c[2].innerHTML = v ? this.onName : this.name; + + } else { + + switch( n ){ + + case 1: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.button; break;// off out + case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break;// on over + case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break;// off over + case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break;// on out + + } + + s[3].marginLeft = v ? '17px' : '2px'; + this.c[1].textContent = v ? this.onName : this.name; + + } + + change = true; + + } + + return change + + } + + // ---------------------- + + update ( up ) { + + this.mode(); + if( up ) this.send(); + + } + + rSize () { + + super.rSize(); + + let s = this.s; + let w = (this.w - 10 ) - this.inw; + if( this.model === 0 ){ + s[2].left = w + 'px'; + s[3].left = w + 'px'; + } else { + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + } + + } + } - class Numeric extends Proto { - constructor(o = {}) { - super(o); - this.setTypeNumber(o); - this.allway = o.allway || false; - this.isDown = false; - this.value = [0]; - this.multy = 1; - this.invmulty = 1; - this.isSingle = true; - this.isAngle = false; - this.isVector = false; - if (o.isAngle) { - this.isAngle = true; - this.multy = Tools.torad; - this.invmulty = Tools.todeg; - } - this.isDrag = o.drag || false; - if (o.value !== undefined) { - if (!isNaN(o.value)) { - this.value = [o.value]; - } else if (o.value instanceof Array) { - this.value = o.value; - this.isSingle = false; - } else if (o.value instanceof Object) { - this.value = []; - if (o.value.x !== undefined) this.value[0] = o.value.x; - if (o.value.y !== undefined) this.value[1] = o.value.y; - if (o.value.z !== undefined) this.value[2] = o.value.z; - if (o.value.w !== undefined) this.value[3] = o.value.w; - this.isSingle = false; - this.isVector = true; - } - } - this.lng = this.value.length; - this.tmp = []; - this.current = -1; - this.prev = { - x: 0, - y: 0, - d: 0, - v: 0 - }; - let cc = this.colors; - - // bg - this.c[2] = this.dom('div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h - 8) + 'px;'); - this.cMode = []; - let i = this.lng; - while (i--) { - if (this.isAngle) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed(this.precision); - this.c[3 + i] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border + '; border-radius:' + this.radius + 'px;'); - if (o.center) this.c[2 + i].style.textAlign = 'center'; - this.c[3 + i].textContent = this.value[i]; - this.c[3 + i].style.color = this.colors.text; - this.c[3 + i].isNum = true; - this.cMode[i] = 0; - } - - // selection - this.selectId = 3 + this.lng; - this.c[this.selectId] = this.dom('div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h - 4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.cursorId = 4 + this.lng; - this.c[this.cursorId] = this.dom('div', this.css.basic + 'top:2px; height:' + (this.h - 4) + 'px; width:0px; background:' + cc.text + ';'); - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - let i = this.lng; - let t = this.tmp; - while (i--) { - if (l.x > t[i][0] && l.x < t[i][2]) return i; - } - return ''; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousedown(e) { - let name = this.testZone(e); - if (!this.isDown) { - this.isDown = true; - if (name !== '') { - this.current = name; - this.prev = { - x: e.clientX, - y: e.clientY, - d: 0, - v: this.isSingle ? parseFloat(this.value) : parseFloat(this.value[this.current]) - }; - this.setInput(this.c[3 + this.current]); - } - return this.mousemove(e); - } - return false; - } - mouseup(e) { - if (this.isDown) { - this.isDown = false; - this.prev = { - x: 0, - y: 0, - d: 0, - v: 0 - }; - return this.mousemove(e); - } - return false; - } - mousemove(e) { - let nup = false; - let x = 0; - let name = this.testZone(e); - if (name === '') this.cursor();else { - if (!this.isDrag) this.cursor('text');else this.cursor(this.current !== -1 ? 'move' : 'pointer'); - } - if (this.isDrag) { - if (this.current !== -1) { - this.prev.d += e.clientX - this.prev.x - (e.clientY - this.prev.y); - let n = this.prev.v + this.prev.d * this.step; - this.value[this.current] = this.numValue(n); - this.c[3 + this.current].textContent = this.value[this.current]; - this.validate(); - this.prev.x = e.clientX; - this.prev.y = e.clientY; - nup = true; - } - } else { - if (this.isDown) x = e.clientX - this.zone.x - 3; - if (this.current !== -1) x -= this.tmp[this.current][0]; - return this.upInput(x, this.isDown); - } - return nup; - } - - // ---------------------- - - reset() { - let nup = false; - return nup; - } - setValue(v) { - if (this.isVector) { - if (v.x !== undefined) this.value[0] = v.x; - if (v.y !== undefined) this.value[1] = v.y; - if (v.z !== undefined) this.value[2] = v.z; - if (v.w !== undefined) this.value[3] = v.w; - } else { - this.value = this.isSingle ? [v] : v; - } - this.update(); - } - sameStr(str) { - let i = this.value.length; - while (i--) this.c[3 + i].textContent = str; - } - update(up) { - let i = this.value.length; - while (i--) { - this.value[i] = this.numValue(this.value[i] * this.invmulty); - this.c[3 + i].textContent = this.value[i]; - } - if (up) this.send(); - } - send(v) { - v = v || this.value; - this.isSend = true; - if (this.objectLink !== null) { - if (this.isVector) { - this.objectLink[this.objectKey].fromArray(v); - } else { - this.objectLink[this.objectKey] = v; - } - } - if (this.callback) this.callback(v, this.objectKey); - this.isSend = false; - } - - // ---------------------- - // INPUT - // ---------------------- - - select(c, e, w, t) { - let s = this.s; - let d = this.current !== -1 ? this.tmp[this.current][0] + 5 : 0; - s[this.cursorId].width = '1px'; - s[this.cursorId].left = d + c + 'px'; - s[this.selectId].left = d + e + 'px'; - s[this.selectId].width = w + 'px'; - this.c[this.selectId].innerHTML = t; - } - unselect() { - let s = this.s; - if (!s) return; - this.c[this.selectId].innerHTML = ''; - s[this.selectId].width = 0 + 'px'; - s[this.cursorId].width = 0 + 'px'; - } - validate(force) { - let ar = []; - let i = this.lng; - if (this.allway) force = true; - while (i--) { - if (!isNaN(this.c[3 + i].textContent)) { - let nx = this.numValue(this.c[3 + i].textContent); - this.c[3 + i].textContent = nx; - this.value[i] = nx; - } else { - // not number - this.c[3 + i].textContent = this.value[i]; - } - ar[i] = this.value[i] * this.multy; - } - if (!force) return; - this.send(this.isSingle ? ar[0] : ar); - } - - // ---------------------- - // REZISE - // ---------------------- - - rSize() { - super.rSize(); - let sx = this.colors.sx; - let ss = sx * (this.lng - 1); - let w = (this.sb - ss) / this.lng; //(( this.sb + sx ) / this.lng )-sx - let s = this.s; - let i = this.lng; - while (i--) { - //this.tmp[i] = [ Math.floor( this.sa + ( w * i )+( 5 * i )), w ]; - this.tmp[i] = [this.sa + w * i + sx * i, w]; - this.tmp[i][2] = this.tmp[i][0] + this.tmp[i][1]; - s[3 + i].left = this.tmp[i][0] + 'px'; - s[3 + i].width = this.tmp[i][1] + 'px'; - } - } + class Button extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = ''; + if( o.value !== undefined ) this.value = o.value; + + this.values = o.value || this.txt; + if( o.values ) this.values = o.values; + + if( !o.values && !o.value ) this.txt = ''; + + this.onName = o.onName || null; + + this.on = false; + + // force button width + this.bw = o.forceWidth || 0; + if(o.bw) this.bw = o.bw; + this.space = o.space || 3; + + if( typeof this.values === 'string' ) this.values = [ this.values ]; + + this.isDown = false; + this.neverlock = true; + this.res = 0; + + this.lng = this.values.length; + this.tmp = []; + this.stat = []; + + let sel, cc = this.colors; + + for( let i = 0; i < this.lng; i++ ){ + + sel = false; + if( this.values[i] === this.value && this.isSelectable ) sel = true; + + this.c[i+2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[i+2].style.background = sel ? cc.select : cc.button; + this.c[i+2].style.color = sel ? cc.textSelect : cc.text; + this.c[i+2].innerHTML = this.values[i]; + this.stat[i] = sel ? 3:1; + + } + + + if( this.txt==='' ) this.p = 0; + + if( (!o.value && !o.values) || this.p === 0 ){ + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + } + + + this.init(); + + } + + onOff() { + + this.on = !this.on; + this.label( this.on ? this.onName : this.value ); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1 + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0"; - this.easing = o.easing || 1; - this.setTypeNumber(o); - this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; - - //this.defaultBorderColor = this.colors.hide; - - this.isDown = false; - this.isOver = false; - this.allway = o.allway || false; - this.isDeg = o.isDeg || false; - this.isCyclic = o.cyclic || false; - this.firstImput = false; - let cc = this.colors; - - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); - this.c[2] = this.dom("div", this.css.txtselect + "border:none; background:none; width:47px; color:" + cc.text + ";"); - //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); - this.c[3] = this.dom("div", this.css.basic + " top:0; height:" + this.h + "px;"); - this.c[4] = this.dom("div", this.css.basic + "background:" + cc.back + "; top:2px; height:" + (this.h - 4) + "px;"); - this.c[5] = this.dom("div", this.css.basic + "left:4px; top:5px; height:" + (this.h - 10) + "px; background:" + cc.text + ";"); - this.c[2].isNum = true; - //this.c[2].style.height = (this.h-4) + 'px'; - //this.c[2].style.lineHeight = (this.h-8) + 'px'; - this.c[2].style.height = this.h - 2 + "px"; - this.c[2].style.lineHeight = this.h - 10 + "px"; - if (this.model !== 0) { - let r1 = 4, - h1 = 4, - h2 = 8, - ww = this.h - 6, - ra = 16; - if (this.model === 2) { - r1 = 0; - h1 = 2; - h2 = 4; - ra = 2; - ww = (this.h - 6) * 0.5; - } - if (this.model === 3) this.c[5].style.visible = "none"; - this.c[4].style.borderRadius = r1 + "px"; - this.c[4].style.height = h2 + "px"; - this.c[4].style.top = this.h * 0.5 - h1 + "px"; - this.c[5].style.borderRadius = r1 * 0.5 + "px"; - this.c[5].style.height = h1 + "px"; - this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; - - //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); - this.c[6] = this.dom("div", this.css.basic + "border-radius:" + ra + "px; margin-left:" + -ww * 0.5 + "px; background:" + cc.text + "; left:4px; top:3px; height:" + (this.h - 6) + "px; width:" + ww + "px;"); - } - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - if (l.x >= this.txl) return "text";else if (l.x >= this.sa) return "scroll";else return ""; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (this.isDown) this.isDown = false; - } - mousedown(e) { - let name = this.testZone(e); - if (!name) return false; - if (name === "scroll") { - this.isDown = true; - this.old = this.value; - this.mousemove(e); - } - - /*if( name === 'text' ){ - this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); - }*/ - - return true; - } - mousemove(e) { - let nup = false; - let name = this.testZone(e); - if (name === "scroll") { - this.mode(1); - this.cursor("w-resize"); - //} else if(name === 'text'){ - //this.cursor('pointer'); - } else { - this.cursor(); - } - if (this.isDown) { - let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; - - // lo mapeo al rango 0 ... 1 - nNormalized = Math.min(1, Math.max(0, nNormalized)); - - // aplico easing - let nEased = Math.pow(nNormalized, this.easing); // easing - - let nNew = nEased * this.range + this.min; - let nNewSlider = nNormalized * this.range + this.min; - this.sliderValue = this.numValue(nNewSlider); - let delta = nNew - this.old; - let steps; - if (delta >= this.step || delta <= this.step) { - steps = Math.floor(delta / this.step); - this.value = this.numValue(this.old + steps * this.step); - // value without easing applied - - this.update(true); - this.old = this.value; - } - //console.log("n, normalized, value", nNew, nNormalized, this.value); - nup = true; - } - return nup; - } - wheel(e) { - let name = this.testZone(e); - if (name === "scroll") { - let v = this.value - this.step * e.delta; - if (v > this.max) { - v = this.isCyclic ? this.min : this.max; - } else if (v < this.min) { - v = this.isCyclic ? this.max : this.min; - } - this.setValue(v); - this.old = v; - this.update(true); - return true; - } - return false; - } - - //keydown: function ( e ) { return true; }, - - // ---------------------- - - validate() { - let n = this.c[2].textContent; - if (!isNaN(n)) { - this.value = this.numValue(n); - this.update(true); - } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - } - reset() { - //this.clearInput(); - this.isDown = false; - this.mode(0); - } - mode(mode) { - let s = this.s; - let cc = this.colors; - switch (mode) { - case 0: - // base - // s[2].border = '1px solid ' + this.colors.hide; - s[2].color = cc.text; - s[4].background = cc.back; - s[5].background = cc.text; - if (this.model !== 0) s[6].background = cc.text; //cc.button; - break; - case 1: - // scroll over - //s[2].border = '1px dashed ' + this.colors.hide; - s[2].color = cc.textOver; - s[4].background = cc.back; - s[5].background = cc.textOver; - if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; - break; - } - } - update(up) { - let normalized = (this.value - this.min) / this.range; - let uneased = this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); - let ww = Math.floor(this.ww * uneased); - //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); - - if (this.model !== 3) this.s[5].width = ww + "px"; - if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; - this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); - if (up) this.send(); - } - rSize() { - super.rSize(); - let w = this.sb - this.sc; - this.ww = w - 6; - let tx = this.sc; - if (this.isUI || !this.simple) tx = this.sc + 10; - this.txl = this.w - tx + 2; - - //let ty = Math.floor(this.h * 0.5) - 8; - - let s = this.s; - s[2].width = this.sc - 6 + "px"; - s[2].left = this.txl + 4 + "px"; - //s[2].top = ty + 'px'; - s[3].left = this.sa + "px"; - s[3].width = w + "px"; - s[4].left = this.sa + "px"; - s[4].width = w + "px"; - s[5].left = this.sa + 3 + "px"; - this.update(); - } + class Circular extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + + this.setTypeNumber( o ); + + this.twoPi = Tools.TwoPI; + this.pi90 = Tools.pi90; + + this.offset = new V2(); + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w +'px'; + this.c[0].style.display = 'block'; + + if(this.c[1] !== undefined) { + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + + + this.percent = 0; + this.cmode = 0; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); + + // svg + + this.c[3] = this.getCircular(); + + this.setSvg( this.c[3], 'stroke', cc.back, 0 ); + this.setSvg( this.c[3], 'd', this.makePath(), 1 ); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 '+this.diam+' '+this.diam ); + this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); + + this.init(); + this.update(); + + } + + mode ( mode ) { + + if( this.cmode === mode ) return false; + + let cc = this.colors; + let color; + + switch( mode ){ + case 0: // base + + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'stroke', cc.back, 0); + color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.text; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + case 1: // down + + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'stroke', cc.backoff, 0); + color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.textOver; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + } + + this.cmode = mode; + return true; + + } + + reset () { + + this.isDown = false; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'circular'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0); + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1); + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + //console.log('over') + + let off = this.offset; + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = off.angle() - this.pi90; + this.r = (((this.r%this.twoPi)+this.twoPi)%this.twoPi); + + if( this.oldr !== null ){ + + let dif = this.r - this.oldr; + this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; + + if( dif > 6 ) this.r = 0; + if( dif < -6 ) this.r = this.twoPi; + + } + + let steps = 1 / this.twoPi; + let value = this.r * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = ~~ ( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'circular' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + // ---------------------- + + makePath () { + + let r = 40; + let d = 24; + let a = this.percent * this.twoPi - 0.001; + let x2 = (r + r * Math.sin(a)) + d; + let y2 = (r - r * Math.cos(a)) + d; + let big = a > Math.PI ? 1 : 0; + return "M " + (r+d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = ( this.value - this.min ) / this.range; + + this.setSvg( this.c[3], 'd', this.makePath(), 1 ); + + if ( this.model > 0 ) { + + let cc = this.colors; + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 1 ); + + } + + if( up ) this.send(); + + } + } - class TextInput extends Proto { - constructor(o = {}) { - super(o); - this.cmode = 0; - this.value = o.value !== undefined ? o.value : ''; - this.placeHolder = o.placeHolder || ''; - this.allway = o.allway || false; - this.editable = o.edit !== undefined ? o.edit : true; - this.isDown = false; - let cc = this.colors; - - // text - this.c[2] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border + '; border-radius:' + this.radius + 'px;'); - this.c[2].textContent = this.value; - - // selection - this.c[3] = this.dom('div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h - 4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); - - // cursor - this.c[4] = this.dom('div', this.css.basic + 'top:2px; height:' + (this.h - 4) + 'px; width:0px; background:' + cc.text + ';'); - - // fake - this.c[5] = this.dom('div', this.css.txtselect + 'top:1px; height:' + (this.h - 2) + 'px; border:none; justify-content: center; font-style: italic; color:' + cc.border + ';'); - if (this.value === '') this.c[5].textContent = this.placeHolder; - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.x >= this.sa) return 'text'; - return ''; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (!this.editable) return; - if (this.isDown) { - this.isDown = false; - return this.mousemove(e); - } - return false; - } - mousedown(e) { - if (!this.editable) return; - let name = this.testZone(e); - if (!this.isDown) { - this.isDown = true; - if (name === 'text') this.setInput(this.c[2]); - return this.mousemove(e); - } - return false; - } - mousemove(e) { - if (!this.editable) return; - let name = this.testZone(e); - - //let l = this.local; - //if( l.x === -1 && l.y === -1 ){ return;} - - //if( l.x >= this.sa ) this.cursor('text'); - //else this.cursor(); - - let x = 0; - if (name === 'text') this.cursor('text');else this.cursor(); - if (this.isDown) x = e.clientX - this.zone.x; - return this.upInput(x - this.sa - 3, this.isDown); - } - update() { - this.c[2].textContent = this.value; - } - - // ---------------------- - - reset() { - this.cursor(); - } - - // ---------------------- - // INPUT - // ---------------------- - - select(c, e, w, t) { - let s = this.s; - let d = this.sa + 5; - s[4].width = '1px'; - s[4].left = d + e + 'px'; - s[3].left = d + e + 'px'; - s[3].width = w + 'px'; - this.c[3].innerHTML = t; - } - unselect() { - let s = this.s; - if (!s) return; - s[3].width = 0 + 'px'; - this.c[3].innerHTML = 't'; - s[4].width = 0 + 'px'; - } - validate(force) { - if (this.allway) force = true; - this.value = this.c[2].textContent; - if (this.value !== '') this.c[5].textContent = '';else this.c[5].textContent = this.placeHolder; - if (!force) return; - this.send(); - } - - // ---------------------- - // REZISE - // ---------------------- - - rSize() { - super.rSize(); - let s = this.s; - s[2].left = this.sa + 'px'; - s[2].width = this.sb + 'px'; - s[5].left = this.sa + 'px'; - s[5].width = this.sb + 'px'; - } + class Color extends Proto { + + constructor( o = {} ) { + + super( o ); + + //this.autoHeight = true; + + this.ctype = o.ctype || 'hex'; + + this.wfixe = 256; + + this.cw = this.sb > 256 ? 256 : this.sb; + if(o.cw != undefined ) this.cw = o.cw; + + + + // color up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + this.baseH = this.h; + + this.offset = new V2(); + this.decal = new V2(); + this.pp = new V2(); + + let cc = this.colors; + + // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) + + this.c[2] = this.dom( 'div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};` ); + //this.s[2] = this.c[2].style; + + //this.s[2].textShadow = 'none' + + /*if( this.up ){ + this.s[2].top = 'auto'; + this.s[2].bottom = '2px'; + }*/ + + //this.c[0].style.textAlign = 'center'; + this.c[0].style.display = 'block'; + + this.c[3] = this.getColorRing(); + this.c[3].style.visibility = 'hidden'; + + this.hsl = null; + this.value = '#ffffff'; + if( o.value !== undefined ){ + if( o.value instanceof Array ) this.value = Tools.rgbToHex( o.value ); + else if(!isNaN(o.value)) this.value = Tools.hexToHtml( o.value ); + else this.value = o.value; + } + + this.bcolor = null; + this.isDown = false; + this.fistDown = false; + + this.notext = o.notext || false; + + this.tr = 98; + this.tsl = Math.sqrt(3) * this.tr; + + this.hue = 0; + this.d = 256; + + this.init(); + + this.setColor( this.value ); + + if( o.open !== undefined ) this.open(); + + } + + testZone ( mx, my ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + if( this.up && this.isOpen ){ + + if( l.y > this.wfixe ) return 'title' + else return 'color' + + } else { + + if( l.y < this.baseH+2 ) return 'title' + else if( this.isOpen ) return 'color' + + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.d = 256; + + } + + mousedown ( e ) { + + + let name = this.testZone( e.clientX, e.clientY ); + + + //if( !name ) return; + if(name === 'title'){ + if( !this.isOpen ) this.open(); + else this.close(); + return true; + } + + + if( name === 'color' ){ + + this.isDown = true; + this.fistDown = true; + this.mousemove( e ); + } + } + + mousemove ( e ) { + + let name = this.testZone( e.clientX, e.clientY ); + + let off, d, hue, sat, lum, rad, x, y, rr, T = Tools; + + if( name === 'title' ) this.cursor('pointer'); + + if( name === 'color' ){ + + off = this.offset; + off.x = e.clientX - ( this.zone.x + this.decal.x + this.mid ); + off.y = e.clientY - ( this.zone.y + this.decal.y + this.mid ) - this.ytop; + d = off.length() * this.ratio; + rr = off.angle(); + if(rr < 0) rr += 2 * T.PI; + + + if ( d < 128 ) this.cursor('crosshair'); + else if( !this.isDown ) this.cursor(); + + if( this.isDown ){ + + if( this.fistDown ){ + this.d = d; + this.fistDown = false; + } + + if ( this.d < 128 ) { + + if ( this.d > this.tr ) { // outside hue + + hue = ( rr + T.pi90 ) / T.TwoPI; + this.hue = (hue + 1) % 1; + this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); + + } else { // triangle + + x = off.x * this.ratio; + y = off.y * this.ratio; + + let rr = (this.hue * T.TwoPI) + T.PI; + if(rr < 0) rr += 2 * T.PI; + + rad = Math.atan2(-y, x); + if(rad < 0) rad += 2 * T.PI; + + let rad0 = ( rad + T.pi90 + T.TwoPI + rr ) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60), + a = 0.5 * this.tr, + b = Math.tan(rad1) * a, + r = Math.sqrt(x*x + y*y), + maxR = Math.sqrt(a*a + b*b); + + if( r > maxR ) { + let dx = Math.tan(rad1) * r; + let rad2 = Math.atan(dx / maxR); + if(rad2 > T.pi60) rad2 = T.pi60; + else if( rad2 < -T.pi60 ) rad2 = -T.pi60; + + rad += rad2 - rad1; + + rad0 = (rad + T.pi90 + T.TwoPI + rr) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60); + b = Math.tan(rad1) * a; + r = maxR = Math.sqrt(a*a + b*b); + } + + lum = ((Math.sin(rad0) * r) / this.tsl) + 0.5; + + let w = 1 - (Math.abs(lum - 0.5) * 2); + sat = (((Math.cos(rad0) * r) + (this.tr / 2)) / (1.5 * this.tr)) / w; + sat = T.clamp( sat, 0, 1 ); + + this.setHSL([this.hsl[0], sat, lum]); + + } + } + } + } + + } + + // ---------------------- + + setHeight () { + + this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; + this.s[0].height = this.h + 'px'; + this.zone.h = this.h; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open () { + + super.open(); + + this.setHeight(); + + if( this.up ) this.zone.y -= this.wfixe + 5; + + let t = this.h - this.baseH; + + this.s[3].visibility = 'visible'; + //this.s[3].display = 'block'; + this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.wfixe + 5; + + let t = this.h - this.baseH; + + this.setHeight(); + + this.s[3].visibility = 'hidden'; + //this.s[3].display = 'none'; + this.parentHeight( -t ); + + } + + update ( up ) { + + let cc = Tools.rgbToHex( Tools.hslToRgb([ this.hsl[0], 1, 0.5 ]) ); + + this.moveMarkers(); + + this.value = this.bcolor; + + this.setSvg( this.c[3], 'fill', cc, 2, 0 ); + + this.s[2].background = this.bcolor; + if(!this.notext) this.c[2].textContent = Tools.htmlToHex( this.bcolor ); + + this.invert = Tools.findDeepInver( this.rgb ); + this.s[2].color = this.invert ? '#fff' : '#000'; + + if(!up) return; + + if( this.ctype === 'array' ) this.send( this.rgb ); + if( this.ctype === 'rgb' ) this.send( Tools.htmlRgb( this.rgb ) ); + if( this.ctype === 'hex' ) this.send( Tools.htmlToHex( this.value ) ); + if( this.ctype === 'html' ) this.send(); + + } + + setValue ( v ){ + + if( v instanceof Array ) this.value = Tools.rgbToHex( v ); + else if(!isNaN(v)) this.value = Tools.hexToHtml( v ); + else this.value = v; + + this.setColor( this.value ); + this.update(); + + } + + setColor ( color ) { + + let unpack = Tools.unpack(color); + if (this.bcolor !== color && unpack) { + + this.bcolor = color; + this.rgb = unpack; + this.hsl = Tools.rgbToHsl( this.rgb ); + + this.hue = this.hsl[0]; + + this.update(); + } + return this; + + } + + setHSL ( hsl ) { + + this.hsl = hsl; + this.rgb = Tools.hslToRgb( hsl ); + this.bcolor = Tools.rgbToHex( this.rgb ); + this.update( true ); + return this; + + } + + moveMarkers () { + + let p = this.pp; + let T = Tools; + + this.invert ? '#fff' : '#000'; + let a = this.hsl[0] * T.TwoPI; + let third = (2/3) * T.PI; + let r = this.tr; + let h = this.hsl[0]; + let s = this.hsl[1]; + let l = this.hsl[2]; + + let angle = ( a - T.pi90 ) * T.todeg; + + h = - a + T.pi90; + + let hx = Math.cos(h) * r; + let hy = -Math.sin(h) * r; + let sx = Math.cos(h - third) * r; + let sy = -Math.sin(h - third) * r; + let vx = Math.cos(h + third) * r; + let vy = -Math.sin(h + third) * r; + let mx = (sx + vx) / 2, my = (sy + vy) / 2; + a = (1 - 2 * Math.abs(l - .5)) * s; + let x = sx + (vx - sx) * l + (hx - mx) * a; + let y = sy + (vy - sy) * l + (hy - my) * a; + + p.set( x, y ).addScalar(128); + + //let ff = (1-l)*255; + // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); + + this.setSvg( this.c[3], 'transform', 'rotate('+angle+' )', 2 ); + + this.setSvg( this.c[3], 'cx', p.x, 3 ); + this.setSvg( this.c[3], 'cy', p.y, 3 ); + + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3 ); + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3 ); + this.setSvg( this.c[3], 'fill',this.bcolor, 3 ); + + } + + rSize () { + + //Proto.prototype.rSize.call( this ); + super.rSize(); + + let s = this.s; + + s[2].width = this.sb + 'px'; + s[2].left = this.sa + 'px'; + + //console.log(this.sb) + + this.cw = this.sb > 256 ? 256 : this.sb; + + + + this.rSizeColor( this.cw ); + + this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + //s[3].left = this.decal.x + 'px'; + + } + + rSizeColor ( w ) { + + + if( w === this.wfixe ) return; + + + + this.wfixe = w; + + + + let s = this.s; + + //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; + this.mid = Math.floor( this.wfixe * 0.5 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 '+ this.wfixe + ' '+ this.wfixe ); + s[3].width = this.wfixe + 'px'; + s[3].height = this.wfixe + 'px'; + //s[3].left = this.decal.x + 'px'; + s[3].top = this.decal.y + 'px'; + + this.ratio = 256 / this.wfixe; + this.square = 1 / (60*(this.wfixe/256)); + this.setHeight(); + + } + + } - class Title extends Proto { - constructor(o = {}) { - super(o); - let prefix = o.prefix || ''; - this.c[2] = this.dom('div', this.css.txt + 'justify-content:right; width:60px; line-height:' + (this.h - 8) + 'px; color:' + this.colors.text); - if (this.h === 31) { - this.s[0].height = this.h + 'px'; - this.s[1].top = 8 + 'px'; - this.c[2].style.top = 8 + 'px'; - } - let s = this.s; - s[1].justifyContent = o.align || 'left'; - //s[1].textAlign = o.align || 'left'; - s[1].fontWeight = o.fontWeight || 'bold'; - this.c[1].textContent = this.txt.substring(0, 1).toUpperCase() + this.txt.substring(1).replace("-", " "); - this.c[2].textContent = prefix; - this.init(); - } - text(txt) { - this.c[1].textContent = txt; - } - text2(txt) { - this.c[2].textContent = txt; - } - rSize() { - super.rSize(); - this.s[1].width = this.w + 'px'; //- 50 + 'px'; - this.s[2].left = this.w + 'px'; //- ( 50 + 26 ) + 'px'; - } - setColor(c) { - this.s[1].color = c; - this.s[2].color = c; - } + class Fps extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.round = Math.round; + + //this.autoHeight = true; + + this.baseH = this.h; + this.hplus = o.hplus || 50; + + this.res = o.res || 40; + this.l = 1; + + this.precision = o.precision || 0; + + + this.custom = o.custom || false; + this.names = o.names || ['FPS', 'MS']; + let cc = o.cc || ['220,220,220', '255,255,0']; + + // this.divid = [ 100, 100, 100 ]; + // this.multy = [ 30, 30, 30 ]; + + this.adding = o.adding || false; + + this.range = o.range || [ 165, 100, 100 ]; + + this.alpha = o.alpha || 0.25; + + this.values = []; + this.points = []; + this.textDisplay = []; + + if(!this.custom){ + + this.now = Roots.getTime(); + this.startTime = 0;//this.now() + this.prevTime = 0;//this.startTime; + this.frames = 0; + + this.ms = 0; + this.fps = 0; + this.mem = 0; + this.mm = 0; + + this.isMem = ( self.performance && self.performance.memory ) ? true : false; + + // this.divid = [ 100, 200, 1 ]; + // this.multy = [ 30, 30, 30 ]; + + if( this.isMem ){ + + this.names.push('MEM'); + cc.push('0,255,255'); + + } + + this.txt = o.name || 'Fps'; + + } + + + let fltop = Math.floor(this.h*0.5)-3; + const ccc = this.colors; + + this.c[1].textContent = this.txt; + //this.c[1].innerHTML = ' ' + this.txt + this.c[0].style.cursor = 'pointer'; + this.c[0].style.pointerEvents = 'auto'; + + let panelCss = 'display:none; left:10px; top:'+ this.h + 'px; height:'+(this.hplus - 8)+'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid '+ ccc.border +';'; + + if( this.radius !== 0 ) panelCss += 'border-radius:' + this.radius+'px;'; + + this.c[2] = this.dom( 'path', this.css.basic + panelCss , {} ); + + this.c[2].setAttribute('viewBox', '0 0 '+this.res+' 50' ); + this.c[2].setAttribute('height', '100%' ); + this.c[2].setAttribute('width', '100%' ); + this.c[2].setAttribute('preserveAspectRatio', 'none' ); + + + //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + + // arrow + this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:ccc.text, stroke:'none'}); + //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); + + // result test + this.c[4] = this.dom( 'div', this.css.txt + 'position:absolute; left:10px; top:'+(this.h+2) +'px; display:none; width:100%; text-align:center;' ); + + // bottom line + if( o.bottomLine ) this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); + + this.isShow = false; + + + + let s = this.s; + + //s[1].marginLeft = '10px'; + s[1].lineHeight = this.h-4; + s[1].color = ccc.text; + //s[1].paddingLeft = '18px'; + //s[1].fontWeight = 'bold'; + + if( this.radius !== 0 ) s[0].borderRadius = this.radius+'px'; + if( this.colors.gborder!=='none') s[0].border = '1px solid ' + ccc.gborder; + + + + + let j = 0; + + for( j=0; j " + this.names[j] +" "); + + } + + j = this.names.length; + while(j--){ + this.dom( 'path', null, { fill:'rgba('+cc[j]+','+this.alpha+')', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + } + + + this.init(); + + //if( this.isShow ) this.show(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + if( this.isShow ) this.close(); + else this.open(); + + } + + // ---------------------- + + /*mode: function ( mode ) { + + let s = this.s; + + switch(mode){ + case 0: // base + s[1].color = this.colors.text; + //s[1].background = 'none'; + break; + case 1: // over + s[1].color = '#FFF'; + //s[1].background = UIL.SELECT; + break; + case 2: // edit / down + s[1].color = this.colors.text; + //s[1].background = UIL.SELECTDOWN; + break; + + } + },*/ + + tick ( v ) { + + this.values = v; + if( !this.isShow ) return; + this.drawGraph(); + this.upText(); + + } + + makePath ( point ) { + + let p = ''; + p += 'M ' + (-1) + ' ' + 50; + for ( let i = 0; i < this.res + 1; i ++ ) { p += ' L ' + i + ' ' + point[i]; } + p += ' L ' + (this.res + 1) + ' ' + 50; + return p; + + } + + upText ( val ) { + + let v = val || this.values, t = ''; + for( let j=0, lng =this.names.length; j'; + this.c[4].innerHTML = t; + + } + + drawGraph () { + + let svg = this.c[2]; + let i = this.names.length, v, old = 0, n = 0; + + while( i-- ){ + if( this.adding ) v = (this.values[n]+old) * this.range[n]; + else v = (this.values[n] * this.range[n]); + this.points[n].shift(); + this.points[n].push( 50 - v ); + this.setSvg( svg, 'd', this.makePath( this.points[n] ), i+1 ); + old += this.values[n]; + n++; + + } + + } + + open () { + + super.open(); + + this.h = this.hplus + this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g2 ); + + if( this.group !== null ){ this.group.calc( this.hplus );} + else if( this.isUI ) this.main.calc( this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'block'; + this.s[4].display = 'block'; + this.isShow = true; + + if( !this.custom ) Roots.addListen( this ); + + } + + close () { + + super.close(); + + this.h = this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g1 ); + + if( this.group !== null ){ this.group.calc( -this.hplus );} + else if( this.isUI ) this.main.calc( -this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'none'; + this.s[4].display = 'none'; + this.isShow = false; + + if( !this.custom ) Roots.removeListen( this ); + + this.c[4].innerHTML = ''; + + } + + + ///// AUTO FPS ////// + + begin () { + + this.startTime = this.now(); + + } + + end () { + + let time = this.now(); + this.ms = time - this.startTime; + + this.frames ++; + + if ( time > this.prevTime + 1000 ) { + + this.fps = this.round( ( this.frames * 1000 ) / ( time - this.prevTime ) ); + + this.prevTime = time; + this.frames = 0; + + if ( this.isMem ) { + + let heapSize = performance.memory.usedJSHeapSize; + let heapSizeLimit = performance.memory.jsHeapSizeLimit; + + this.mem = this.round( heapSize * 0.000000954 ); + this.mm = heapSize / heapSizeLimit; + + } + + } + + this.values = [ this.fps, this.ms , this.mm ]; + + this.drawGraph(); + this.upText( [ this.fps, this.ms, this.mem ] ); + + return time; + + } + + listening () { + + if( !this.custom ) this.startTime = this.end(); + + } + + rSize () { + + let s = this.s; + let w = this.w; + + s[3].left = ( this.sa + this.sb - 6 ) + 'px'; + + s[0].width = w + 'px'; + s[1].width = w + 'px'; + s[2].left = 10 + 'px'; + s[2].width = (w-20) + 'px'; + s[4].width = (w-20) + 'px'; + + } + } - class Select extends Proto { - constructor(o = {}) { - super(o); - this.value = o.value || ''; - this.isDown = false; - this.onActif = o.onActif || function () {}; - - //let prefix = o.prefix || ''; - const cc = this.colors; - this.c[2] = this.dom('div', this.css.txt + this.css.button + ' top:1px; background:' + cc.button + '; height:' + (this.h - 2) + 'px; border:' + cc.buttonBorder + '; border-radius:15px; width:30px; left:10px;'); - //this.c[2].style.color = this.fontColor; - - this.c[3] = this.dom('div', this.css.txtselect + 'height:' + (this.h - 4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder + '; border-radius:' + this.radius + 'px;'); - this.c[3].textContent = this.value; - let fltop = Math.floor(this.h * 0.5) - 7; - this.c[4] = this.dom('path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:' + fltop + 'px;', { - d: this.svgs['cursor'], - fill: cc.text, - stroke: 'none' - }); - this.stat = 1; - this.isActif = false; - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.x > this.sa && l.x < this.sa + 30) return 'over'; - return '0'; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (this.isDown) { - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove(e); - } - return false; - } - mousedown(e) { - let name = this.testZone(e); - if (!name) return false; - this.isDown = true; - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove(e); - } - mousemove(e) { - let up = false; - let name = this.testZone(e); - if (name === 'over') { - this.cursor('pointer'); - up = this.mode(this.isDown ? 3 : 2); - } else { - up = this.reset(); - } - return up; - } - - // ---------------------- - - apply(v) { - v = v || ''; - if (v !== this.value) { - this.value = v; - this.c[3].textContent = this.value; - this.send(); - } - this.mode(1); - } - update() { - this.mode(3); - } - mode(n) { - let change = false; - let cc = this.colors; - if (this.stat !== n) { - if (n === 1) this.isActif = false; - if (n === 3) { - if (!this.isActif) { - this.isActif = true; - n = 4; - this.onActif(this); - } else { - this.isActif = false; - } - } - if (n === 2 && this.isActif) n = 4; - this.stat = n; - switch (n) { - case 1: - this.s[2].color = cc.text; - this.s[2].background = cc.button; - break; - // base - case 2: - this.s[2].color = cc.textOver; - this.s[2].background = cc.overoff; - break; - // over - case 3: - this.s[2].color = cc.textOver; - this.s[2].background = cc.action; - break; - // down - case 4: - this.s[2].color = cc.textSelect; - this.s[2].background = cc.action; - break; - // actif - } - change = true; - } - return change; - } - reset() { - this.cursor(); - return this.mode(this.isActif ? 4 : 1); - } - text(txt) { - this.c[3].textContent = txt; - } - rSize() { - super.rSize(); - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = this.sa + 40 + 'px'; - s[3].width = this.sb - 40 + 'px'; - s[4].left = this.sa + 8 + 'px'; - } + class Graph extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value !== undefined ? o.value : [0,0,0]; + this.lng = this.value.length; + + this.precision = o.precision !== undefined ? o.precision : 2; + this.multiplicator = o.multiplicator || 1; + this.neg = o.neg || false; + + this.line = o.line !== undefined ? o.line : true; + + //if(this.neg)this.multiplicator*=2; + + this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; + this.isNumber = false; + + this.isDown = false; + + this.h = o.h || 128 + 10; + this.rh = this.h - 10; + this.top = 0; + + this.c[0].style.width = this.w +'px'; + + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = this.w +'px'; + + if(!this.autoWidth){ + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + } + + + //this.c[1].style.background = '#ff0000'; + //this.c[1].style.textAlign = 'center'; + this.top = 10; + this.h += 10; + + } + + this.gh = this.rh - 28; + this.gw = this.w - 28; + + //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); + + //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' + this.c[2] = this.dom( 'div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:'+(this.h-20)+'px; left:14px; width:'+this.gw+'px; color:'+ this.colors.text ); + + //this.c[2].textContent = this.value; + this.c[2].innerHTML = this.valueToHtml(); + + let svg = this.dom( 'svg', this.css.basic , { viewBox:'0 0 '+this.w+' '+this.rh, width:this.w, height:this.rh, preserveAspectRatio:'none' } ); + this.setCss( svg, { width:this.w, height:this.rh, left:0, top:this.top }); + + this.dom( 'path', '', { d:'', stroke:this.colors.text, 'stroke-width':2, fill:'none', 'stroke-linecap':'butt' }, svg ); + this.dom( 'rect', '', { x:10, y:10, width:this.gw+8, height:this.gh+8, stroke:'rgba(0,0,0,0.3)', 'stroke-width':1 , fill:'none'}, svg ); + + this.iw = ((this.gw-(4*(this.lng-1)))/this.lng); + let t = []; + this.cMode = []; + + this.v = []; + + for( let i = 0; i < this.lng; i++ ){ + + t[i] = [ 14 + (i*this.iw) + (i*4), this.iw ]; + t[i][2] = t[i][0] + t[i][1]; + this.cMode[i] = 0; + + if( this.neg ) this.v[i] = ((1+(this.value[i] / this.multiplicator))*0.5); + else this.v[i] = this.value[i] / this.multiplicator; + + this.dom( 'rect', '', { x:t[i][0], y:14, width:t[i][1], height:1, fill:this.colors.text, 'fill-opacity':0.3 }, svg ); + + } + + this.tmp = t; + this.c[3] = svg; + + //console.log(this.w) + + this.init(); + + if( this.c[1] !== undefined ){ + this.c[1].style.top = 0 +'px'; + this.c[1].style.height = 20 +'px'; + this.s[1].lineHeight = (20-5)+'px'; + } + + this.update( false ); + + } + + setValue ( value ) { + + this.value = value; + this.lng = this.value.length; + for (var i = 0; i < this.lng; i++) { + if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5; + else this.v[i] = value[i] / this.multiplicator; + } + this.update(); + + } + + valueToHtml() { + + let i = this.lng, n=0, r = ''; + let w = 100 / this.lng; + let style = 'width:'+ w +'%;';//' text-align:center;' + while(i--){ + if(n===this.lng-1) r += '
    ' + this.value[n] + '
    '; + else r += '' + this.value[n] + ''; + n++; + } + return r + } + + updateSVG () { + + if( this.line ) this.setSvg( this.c[3], 'd', this.makePath(), 0 ); + + for(let i = 0; ithis.top && l.yt[i][0] && l.x this.sa && l.x < this.sa + 30) return 'over'; - return '0'; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (this.isDown) { - //this.value = false; - this.isDown = false; - //this.send(); - return this.mousemove(e); - } - return false; - } - mousedown(e) { - let name = this.testZone(e); - if (!name) return false; - if (name === 'over') { - this.isDown = true; - Files.load({ - callback: this.changeBitmap.bind(this) - }); - } - - //this.value = this.values[ name-2 ]; - //this.send(); - return this.mousemove(e); - } - mousemove(e) { - let up = false; - let name = this.testZone(e); - if (name === 'over') { - this.cursor('pointer'); - up = this.mode(this.isDown ? 3 : 2); - } else { - up = this.reset(); - } - return up; - } - - // ---------------------- - - changeBitmap(img, fname) { - if (img) { - this.img = img; - this.apply(fname); - } else { - this.img = null; - this.apply('null'); - } - } - - // ---------------------- - - apply(v) { - v = v || ''; - if (v !== this.value) { - this.value = v; - this.c[3].textContent = this.value; - if (this.img !== null) { - if (this.objectLink !== null) this.objectLink[this.val] = v; - if (this.callback) this.callback(this.value, this.img, this.name); - } - } - this.mode(1); - } - update() { - this.mode(3); - } - mode(n) { - let change = false; - let cc = this.colors; - if (this.stat !== n) { - this.stat = n; - switch (n) { - case 1: - this.s[2].color = cc.text; - this.s[2].background = cc.button; - break; - // base - case 2: - this.s[2].color = cc.textOver; - this.s[2].background = cc.overoff; - break; - // over - case 3: - this.s[2].color = cc.textOver; - this.s[2].background = cc.over; - break; - // down - case 4: - this.s[2].color = cc.textSelect; - this.s[2].background = cc.select; - break; - // actif - } - change = true; - } - return change; - } - reset() { - this.cursor(); - return this.mode(this.isActif ? 4 : 1); - } - text(txt) { - this.c[3].textContent = txt; - } - rSize() { - super.rSize(); - let s = this.s; - s[2].left = this.sa + 'px'; - s[3].left = this.sa + 40 + 'px'; - s[3].width = this.sb - 40 + 'px'; - s[4].left = this.sa + 8 + 'px'; - } + class Empty extends Proto { + + constructor( o = {} ) { + + o.isSpace = true; + o.margin = 0; + if(!o.h) o.h = 10; + super( o ); + this.init(); + + } + } - //import { Proto } from '../core/Proto.js'; - class Selector extends Button { - constructor(o = {}) { - if (o.selectable === undefined) o.selectable = true; - super(o); - } + class Group extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.isGroup = true; + + this.ADD = o.add; + + this.autoHeight = true; + + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + + this.decal = o.group ? 8 : 0; + //this.dd = o.group ? o.group.decal + 8 : 0 + + this.baseH = this.h; + + this.spaceY = new Empty({h:this.margin}); + + + + let fltop = Math.floor(this.h*0.5)-3; + + const cc = this.colors; + + this.useFlex = true; + let flexible = this.useFlex ? 'display:flex; flex-flow: row wrap;' : ''; + + this.c[2] = this.dom( 'div', this.css.basic + flexible + 'width:100%; left:0; overflow:hidden; top:'+(this.h)+'px'); + this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); + + let bh = this.mtop === 0 ? this.margin : this.mtop; + + this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; left:0; height:'+(bh+1)+'px; top:'+((this.h-1))+'px; background:none;'); + + this.s; + this.c[1].name = 'group'; + + this.init(); + + this.setBG( o.bg ); + + if( o.open ) this.open(); + + } + + setBG ( bg ) { + + const cc = this.colors; + const s = this.s; + + if( bg !== undefined ) cc.groups = bg; + if(cc.groups === 'none') cc.groups = cc.background; + cc.background = 'none'; + + s[0].background = 'none'; + s[1].background = cc.groups; + s[2].background = cc.groups; + + if( cc.gborder !== 'none' ){ + s[1].border = cc.borderSize+'px solid '+ cc.gborder; + } + + if( this.radius !== 0 ){ + + s[1].borderRadius = this.radius+'px'; + s[2].borderRadius = this.radius+'px'; + + } + + /*let i = this.uis.length; + while(i--){ + this.uis[i].setBG( 'none' ); + //this.uis[i].setBG( this.colors.background ); + }*/ + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + + let name = ''; + + if( l.y < this.baseH + this.margin ) name = 'title'; + else { + if( this.isOpen ) name = 'content'; + } + + //console.log(name) + + return name; + + } + + clearTarget () { + + if( this.current === -1 ) return false; + if( this.proto.s ){ + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + this.proto = null; + this.current = -1; + this.cursor(); + return true; + + } + + reset () { + + this.clearTarget(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent ( e ) { + + let type = e.type; + + let change = false; + let protoChange = false; + + let name = this.testZone( e ); + + if( !name ) return; + + switch( name ){ + + case 'content': + + //this.cursor() + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + + if( Roots.isMobile && type === 'mousedown' ) this.getNext( e, change ); + + if( this.proto ){ + //e.clientY -= this.margin + protoChange = this.proto.handleEvent( e ); + } + + if( !Roots.lock ) this.getNext( e, change ); + + break; + case 'title': + //this.cursor( this.isOpen ? 'n-resize':'s-resize' ); + this.cursor('pointer'); + if( type === 'mousedown' ){ + if( this.isOpen ) this.close(); + else this.open(); + } + break; + + + } + + if( this.isDown ) change = true; + if( protoChange ) change = true; + + return change; + + } + + getNext ( e, change ) { + + let next = Roots.findTarget( this.uis, e ); + + if( next !== this.current ){ + this.clearTarget(); + this.current = next; + } + + if( next !== -1 ){ + this.proto = this.uis[ this.current ]; + this.proto.uiover(); + } + + } + + // ---------------------- + + + + add() { + + let a = arguments; + + if( typeof a[1] === 'object' ){ + a[1].isUI = this.isUI; + a[1].target = this.c[2]; + a[1].main = this.main; + a[1].group = this; + } else if( typeof arguments[1] === 'string' ){ + if( a[2] === undefined ) [].push.call( a, { isUI:true, target:this.c[2], main:this.main }); + else { + a[2].isUI = true; + a[2].target = this.c[2]; + a[2].main = this.main; + a[2].group = this; + } + } + + let u = this.ADD.apply( this, a ); + + if( u.isGroup ){ + //o.add = add; + u.dx = 8; + } + + //u.dx += 4 + //console.log(this.decal) + //u.zone.d -= 8 + Roots.forceZone = true; + //u.margin += this.margin + + //console.log( u.margin ) + //Roots.needReZone = true + + //Roots.resize() + //console.log(Roots.needResize) + + this.uis.push( u ); + + this.isEmpty = false; + + return u; + + } + + // remove one node + + remove ( n ) { + + if( n.dispose ) n.dispose(); + + } + + // clear all iner + + dispose() { + + this.clear(); + if( this.isUI ) this.main.calc(); + super.dispose(); + + } + + clear() { + + this.empty(); + + } + + empty () { + + this.close(); + + let i = this.uis.length, item; + + while( i-- ){ + item = this.uis.pop(); + this.c[2].removeChild( item.c[0] ); + item.clear( true ); + + //this.uis[i].clear() + } + + this.isEmpty = true; + this.h = this.baseH; + + } + + // clear one element + + clearOne ( n ) { + + let id = this.uis.indexOf( n ); + + if ( id !== -1 ) { + this.calc( - ( this.uis[ id ].h + this.margin ) ); + this.c[2].removeChild( this.uis[ id ].c[0] ); + this.uis.splice( id, 1 ); + + if( this.uis.length === 0 ){ + this.isEmpty = true; + this.close(); + } + } + + } + + + + open () { + + super.open(); + + this.setSvg( this.c[3], 'd', this.svgs.g2 ); + this.rSizeContent(); + + //let t = this.h - this.baseH + + const s = this.s; + const cc = this.colors; + + //s[2].top = (this.h-1) + 'px' + s[2].top = (this.h+this.mtop) + 'px'; + s[4].background = cc.groups;//'#0f0' + + if(this.radius){ + + s[1].borderRadius = '0px'; + s[2].borderRadius = '0px'; + + s[1].borderTopLeftRadius = this.radius+'px'; + s[1].borderTopRightRadius = this.radius+'px'; + s[2].borderBottomLeftRadius = this.radius+'px'; + s[2].borderBottomRightRadius = this.radius+'px'; + } + + if( cc.gborder !== 'none' ){ + + s[4].borderLeft = cc.borderSize+'px solid '+ cc.gborder; + s[4].borderRight = cc.borderSize+'px solid '+ cc.gborder; + + s[2].border = cc.borderSize+'px solid '+ cc.gborder; + s[2].borderTop = 'none'; + s[1].borderBottom = cc.borderSize+'px solid rgba(0,0,0,0)'; + + } + + this.parentHeight(); + + //Roots.isLeave = true + //Roots.needResize = true + + } + + close () { + + super.close(); + + //let t = this.h - this.baseH + + this.setSvg( this.c[3], 'd', this.svgs.g1 ); + + this.h = this.baseH; + + const s = this.s; + const cc = this.colors; + + s[0].height = this.h + 'px'; + //s[1].height = (this.h-2) + 'px' + //s[2].top = this.h + 'px' + s[2].top = (this.h+this.mtop) + 'px'; + s[4].background = 'none'; + + if( cc.gborder !== 'none' ){ + + s[4].border = 'none'; + s[2].border = 'none'; + s[1].border = cc.borderSize+'px solid '+ cc.gborder; + } + + if(this.radius) s[1].borderRadius = this.radius+'px'; + + this.parentHeight(); + + } + + calcUis () { + + if( !this.isOpen || this.isEmpty ) this.h = this.baseH; + //else this.h = Roots.calcUis( this.uis, this.zone, this.zone.y + this.baseH ) + this.baseH; + else this.h = Roots.calcUis( [...this.uis, this.spaceY ], this.zone, this.zone.y + this.baseH + this.margin, true ) + this.baseH; + + this.s[0].height = this.h + 'px'; + this.s[2].height =( this.h - this.baseH )+ 'px'; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + calc ( y ) { + + if( !this.isOpen ) return + if( this.isUI ) this.main.calc(); + else this.calcUis(); + this.s[0].height = this.h + 'px'; + this.s[2].height = this.h + 'px'; + + } + + rSizeContent () { + + let i = this.uis.length; + while(i--){ + this.uis[i].setSize( this.w ); + this.uis[i].rSize(); + } + + } + + rSize () { + + super.rSize(); + + let s = this.s; + + this.w = this.w - this.decal; + + s[3].left = ( this.sa + this.sb - 6 ) + 'px'; + + s[1].width = this.w + 'px'; + s[2].width = this.w + 'px'; + s[1].left = (this.decal) + 'px'; + s[2].left = (this.decal) + 'px'; + + if( this.isOpen ) this.rSizeContent(); + + } + + // + /* + uiout() { + + if( this.lock ) return; + if(!this.overEffect) return; + if(this.s) this.s[0].background = this.colors.background; + + } + + uiover() { + + if( this.lock ) return; + if(!this.overEffect) return; + //if( this.isOpen ) return; + if(this.s) this.s[0].background = this.colors.backgroundOver; + + } + */ } - class Item extends Proto { - constructor(o = {}) { - super(o); - this.p = 100; - this.value = this.txt; - this.status = 1; - this.itype = o.itype || 'none'; - this.val = this.itype; - this.graph = this.svgs[this.itype]; - let fltop = Math.floor(this.h * 0.5) - 7; - this.c[2] = this.dom('path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:' + fltop + 'px;', { - d: this.graph, - fill: this.colors.text, - stroke: 'none' - }); - this.s[1].marginLeft = 20 + 'px'; - this.init(); - } - - // ---------------------- - // EVENTS - // ---------------------- - - mousemove(e) { - this.cursor('pointer'); - - //up = this.modes( this.isDown ? 3 : 2, name ); - } - mousedown(e) { - if (this.isUI) this.main.resetItem(); - this.selected(true); - this.send(); - return true; - } - uiout() { - if (this.isSelect) this.mode(3);else this.mode(1); - } - uiover() { - if (this.isSelect) this.mode(4);else this.mode(2); - } - update() {} - - /*rSize () { - - super.rSize(); - }*/ - - mode(n) { - let change = false; - if (this.status !== n) { - this.status = n; - let s = this.s, - cc = this.colors; - switch (n) { - case 1: - this.status = 1; - s[1].color = cc.text; - s[0].background = 'none'; - break; - case 2: - this.status = 2; - s[1].color = cc.textOver; - s[0].background = cc.back; - break; - case 3: - this.status = 3; - s[1].color = cc.textSelect; - s[0].background = cc.select; - break; - case 4: - this.status = 4; - s[1].color = cc.textOver; - s[0].background = cc.over; - break; - } - change = true; - } - return change; - } - reset() { - this.cursor(); - // return this.mode( 1 ); - } - selected(b) { - if (this.isSelect) this.mode(1); - this.isSelect = b || false; - if (this.isSelect) this.mode(3); - } + class Joystick extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.autoWidth = false; + + this.value = [0,0]; + + this.minw = this.w; + this.diam = o.diam || this.w; + + this.joyType = 'analogique'; + this.model = o.mode !== undefined ? o.mode : 0; + + this.precision = o.precision || 2; + this.multiplicator = o.multiplicator || 1; + + this.pos = new V2(); + this.tmp = new V2(); + + this.interval = null; + this.c[0].style.display = 'block'; + this.haveText = o.text !== undefined ? o.text : true; + + //this.radius = this.w * 0.5; + //this.distance = this.radius*0.25; + this.distance = (this.diam*0.5)*0.25; + + this.h = o.h || this.w + (this.haveText ? 10 : 0); + + this.c[0].style.width = this.w +'px'; + + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); + this.c[2].textContent = this.haveText ? this.value : ''; + + this.c[3] = this.getJoystick( this.model ); + this.setSvg( this.c[3], 'viewBox', '0 0 '+this.diam+' '+this.diam ); + this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); + + this.mode(0); + + + this.ratio = 128/this.w; + + this.init(); + + this.update(false); + + } + + mode ( mode ) { + + let cc = this.colors; + + switch(mode){ + case 0: // base + if(this.model===0){ + this.setSvg( this.c[3], 'fill', 'url(#gradIn)', 4 ); + this.setSvg( this.c[3], 'stroke', '#000', 4 ); + } else { + this.setSvg( this.c[3], 'stroke', cc.joyOut, 2 ); + //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.1)', 3 ); + this.setSvg( this.c[3], 'stroke', cc.joyOut, 4 ); + this.setSvg( this.c[3], 'fill', 'none', 4 ); + } + + break; + case 1: // over + if(this.model===0){ + this.setSvg( this.c[3], 'fill', 'url(#gradIn2)', 4 ); + this.setSvg( this.c[3], 'stroke', 'rgba(0,0,0,0)', 4 ); + } else { + this.setSvg( this.c[3], 'stroke', cc.joyOver, 2 ); + //this.setSvg( this.c[3], 'stroke', 'rgb(0,0,0,0.3)', 3 ); + this.setSvg( this.c[3], 'stroke', cc.joySelect, 4 ); + this.setSvg( this.c[3], 'fill', cc.joyOver, 4 ); + } + break; + + } + } + + // ---------------------- + // EVENTS + // ---------------------- + + addInterval (){ + if( this.interval !== null ) this.stopInterval(); + if( this.pos.isZero() ) return; + this.interval = setInterval( function(){ this.update(); }.bind(this), 10 ); + + } + + stopInterval (){ + + if( this.interval === null ) return; + clearInterval( this.interval ); + this.interval = null; + + } + + reset () { + + this.addInterval(); + this.mode(0); + + } + + mouseup ( e ) { + + this.addInterval(); + this.isDown = false; + + } + + mousedown ( e ) { + + this.isDown = true; + this.mousemove( e ); + this.mode( 2 ); + + } + + mousemove ( e ) { + + this.mode(1); + + if( !this.isDown ) return; + + //this.tmp.x = this.radius - ( e.clientX - this.zone.x ); + //this.tmp.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + this.tmp.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + this.tmp.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + let distance = this.tmp.length(); + + if ( distance > this.distance ) { + let angle = Math.atan2(this.tmp.x, this.tmp.y); + this.tmp.x = Math.sin( angle ) * this.distance; + this.tmp.y = Math.cos( angle ) * this.distance; + } + + this.pos.copy( this.tmp ).divideScalar( this.distance ).negate(); + + this.update(); + + } + + setValue ( v ) { + + if(v===undefined) v=[0,0]; + + this.pos.set( v[0] || 0, v[1] || 0 ); + this.updateSVG(); + + } + + update ( up ) { + + if( up === undefined ) up = true; + + if( this.interval !== null ){ + + if( !this.isDown ){ + + this.pos.lerp( null, 0.3 ); + + this.pos.x = Math.abs( this.pos.x ) < 0.01 ? 0 : this.pos.x; + this.pos.y = Math.abs( this.pos.y ) < 0.01 ? 0 : this.pos.y; + + if( this.isUI && this.main.isCanvas ) this.main.draw(); + + } + + } + + this.updateSVG(); + + if( up ) this.send(); + + + if( this.pos.isZero() ) this.stopInterval(); + + } + + updateSVG () { + + //let x = this.radius - ( -this.pos.x * this.distance ); + //let y = this.radius - ( -this.pos.y * this.distance ); + + let x = (this.diam*0.5) - ( -this.pos.x * this.distance ); + let y = (this.diam*0.5) - ( -this.pos.y * this.distance ); + + if(this.model === 0){ + + let sx = x + ((this.pos.x)*5) + 5; + let sy = y + ((this.pos.y)*5) + 10; + + this.setSvg( this.c[3], 'cx', sx*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', sy*this.ratio, 3 ); + } else { + this.setSvg( this.c[3], 'cx', x*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 3 ); + } + + + + this.setSvg( this.c[3], 'cx', x*this.ratio, 4 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 4 ); + + this.value[0] = ( this.pos.x * this.multiplicator ).toFixed( this.precision ) * 1; + this.value[1] = ( this.pos.y * this.multiplicator ).toFixed( this.precision ) * 1; + + if(this.haveText) this.c[2].textContent = this.value; + + } + + clear () { + + this.stopInterval(); + super.clear(); + + } + } - class Grid extends Proto { - constructor(o = {}) { - super(o); - - /*this.values = o.values || []; - if( typeof this.values === 'string' ) this.values = [ this.values ];*/ - - this.values = []; - if (o.values) { - if (o.values instanceof Array) { - this.values = o.values; - } else if (o.values instanceof String) { - this.values = [o.values]; - } else if (o.values instanceof Object) { - this.refObject = o.values; - for (let g in this.refObject) this.values.push(g); - } - } - this.lng = this.values.length; - this.value = o.value || null; - let cc = this.colors; - this.isSelectable = o.selectable || false; - this.spaces = o.spaces || [cc.sx, cc.sy]; - this.bsize = o.bsize || [90, this.h]; - this.bsizeMax = this.bsize[0]; - this.tmp = []; - this.stat = []; - this.grid = [2, Math.round(this.lng * 0.5)]; - this.h = this.grid[1] * this.bsize[1] + this.grid[1] * this.spaces[1]; //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); - - this.c[1].textContent = ''; - //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); - this.c[2] = this.dom('table', this.css.basic + 'width:100%; border-spacing: ' + (this.spaces[0] - 2) + 'px ' + this.spaces[1] + 'px; border:none;'); - let n = 0, - b, - td, - tr, - sel; - this.res = -1; - this.isDown = false; - this.neverlock = true; - this.buttons = []; - this.stat = []; - this.tmpX = []; - this.tmpY = []; - for (let i = 0; i < this.grid[1]; i++) { - tr = this.c[2].insertRow(); - tr.style.cssText = 'pointer-events:none;'; - for (let j = 0; j < this.grid[0]; j++) { - td = tr.insertCell(); - td.style.cssText = 'pointer-events:none;'; - if (this.values[n]) { - sel = false; - if (this.values[n] === this.value && this.isSelectable) sel = true; - b = document.createElement('div'); - b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:' + this.bsize[0] + 'px; height:' + (this.bsize[1] - 2) + 'px; border:' + cc.borderSize + 'px solid ' + cc.border + '; left:auto; right:auto; border-radius:' + this.radius + 'px;'; - b.style.background = sel ? cc.select : cc.button; - b.style.color = sel ? cc.textSelect : cc.text; - b.innerHTML = this.values[n]; - td.appendChild(b); - this.buttons.push(b); - this.stat.push(1); - } else { - b = document.createElement('div'); - b.style.cssText = this.css.txt + 'position:static; width:' + this.bsize[0] + 'px; height:' + this.bsize[1] + 'px; text-align:center; left:auto; right:auto; background:none;'; - td.appendChild(b); - } - if (j === 0) b.style.cssText += 'float:right;';else b.style.cssText += 'float:left;'; - n++; - } - } - this.s[0].border = 'none'; - this.init(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return -1; - l.y += this.mtop; - let tx = this.tmpX; - let ty = this.tmpY; - let id = -1; - let c = -1; - let line = -1; - let i = this.grid[0]; - while (i--) { - if (l.x > tx[i][0] && l.x < tx[i][1]) c = i; - } - i = this.grid[1]; - while (i--) { - if (l.y > ty[i][0] && l.y < ty[i][1]) line = i; - } - if (c !== -1 && line !== -1) { - id = c + line * 2; - if (id > this.lng - 1) id = -1; - } - return id; - } - - // ---------------------- - // EVENTS - // ---------------------- - - mouseup(e) { - if (!this.isDown) return false; - this.isDown = false; - if (this.res !== -1) { - this.value = this.values[this.res]; - this.send(); - } - return this.mousemove(e); - } - mousedown(e) { - if (this.isDown) return false; - this.isDown = true; - return this.mousemove(e); - } - mousemove(e) { - let up = false; - this.res = this.testZone(e); - if (this.res !== -1) { - this.cursor('pointer'); - up = this.modes(this.isDown ? 3 : 2, this.res); - } else { - up = this.reset(); - } - return up; - } - - // ---------------------- - // MODE - // ----------------------- - - modes(N = 1, id = -1) { - let i = this.lng, - w, - n, - r = false; - while (i--) { - n = N; - w = this.isSelectable ? this.values[i] === this.value : false; - if (i === id) { - if (w && n === 2) n = 3; - } else { - n = 1; - if (w) n = 4; - } - if (this.mode(n, i)) r = true; - } - return r; - } - mode(n, id) { - let change = false; - let cc = this.colors, - s = this.buttons; - let i = id; - if (this.stat[id] !== n) { - this.stat[id] = n; - switch (n) { - case 1: - s[i].style.color = cc.text; - s[i].style.background = cc.button; - break; - case 2: - s[i].style.color = cc.textOver; - s[i].style.background = cc.overoff; - break; - case 3: - s[i].style.color = cc.textOver; - s[i].style.background = cc.over; - break; - case 4: - s[i].style.color = cc.textSelect; - s[i].style.background = cc.select; - break; - } - change = true; - } - return change; - } - - // ---------------------- - - reset() { - this.res = -1; - this.cursor(); - return this.modes(); - } - label(string, n) { - this.buttons[n].textContent = string; - } - icon(string, y, n) { - this.buttons[n].style.padding = (y || 0) + 'px 0px'; - this.buttons[n].innerHTML = string; - } - testW() { - let vw = this.spaces[0] * 3 + this.bsizeMax * 2, - rz = false; - if (vw > this.w) { - this.bsize[0] = (this.w - this.spaces[0] * 3) * 0.5; - rz = true; - } else { - if (this.bsize[0] !== this.bsizeMax) { - this.bsize[0] = this.bsizeMax; - rz = true; - } - } - if (!rz) return; - let i = this.buttons.length; - while (i--) this.buttons[i].style.width = this.bsize[0] + 'px'; - } - rSize() { - super.rSize(); - this.testW(); - let mid; - this.tmpX = []; - this.tmpY = []; - for (let j = 0; j < this.grid[0]; j++) { - if (j === 0) { - mid = this.w * 0.5 - this.spaces[0] * 0.5; - this.tmpX.push([mid - this.bsize[0], mid]); - } else { - mid = this.w * 0.5 + this.spaces[0] * 0.5; - this.tmpX.push([mid, mid + this.bsize[0]]); - } - } - mid = this.spaces[1]; - for (let i = 0; i < this.grid[1]; i++) { - this.tmpY.push([mid, mid + this.bsize[1]]); - mid += this.bsize[1] + this.spaces[1]; - } - } + class Knob extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.autoWidth = false; + + this.setTypeNumber( o ); + + this.minw = this.w; + this.diam = o.diam || this.w; + + this.mPI = Math.PI * 0.8; + this.toDeg = 180 / Math.PI; + this.cirRange = this.mPI * 2; + + this.offset = new V2(); + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w +'px'; + this.c[0].style.display = 'block'; + + if(this.c[1] !== undefined) { + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + this.percent = 0; + + this.cmode = 0; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); + + this.c[3] = this.getKnob(); + this.setSvg( this.c[3], 'fill', cc.button, 0 ); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + this.setSvg( this.c[3], 'stroke', cc.text, 3 ); + this.setSvg( this.c[3], 'd', this.makeGrad(), 3 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam ); + this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); + + if ( this.model > 0 ) { + + Tools.dom( 'path', '', { d: '', stroke:cc.text, 'stroke-width': 2, fill: 'none', 'stroke-linecap': 'round' }, this.c[3] ); //4 + + if ( this.model == 2) { + + Tools.addSVGGlowEffect(); + this.setSvg( this.c[3], 'style', 'filter: url("#UILGlow");', 4 ); + + } + + } + + this.r = 0; + + this.init(); + + this.update(); + + } + + mode ( mode ) { + + let cc = this.colors; + + if( this.cmode === mode ) return false; + + switch( mode ) { + case 0: // base + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.button, 0); + //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + break; + case 1: // down + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'fill', cc.select, 0); + //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); + this.setSvg( this.c[3], 'stroke', cc.textOver, 1 ); + break; + } + + this.cmode = mode; + return true; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'knob'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0) + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1) + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let off = this.offset; + + //off.x = this.radius - ( e.clientX - this.zone.x ); + //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = - Math.atan2( off.x, off.y ); + + if( this.oldr !== null ) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; + + this.r = this.r > this.mPI ? this.mPI : this.r; + this.r = this.r < -this.mPI ? -this.mPI : this.r; + + let steps = 1 / this.cirRange; + let value = (this.r + this.mPI) * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = Math.floor( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'knob' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + makeGrad () { + + let d = '', step, range, a, x, y, x2, y2, r = 64; + let startangle = Math.PI + this.mPI; + let endangle = Math.PI - this.mPI; + //let step = this.step>5 ? this.step : 1; + + if(this.step>5){ + range = this.range / this.step; + step = ( startangle - endangle ) / range; + } else { + step = (( startangle - endangle ) / r)*2; + range = r*0.5; + } + + for ( let i = 0; i <= range; ++i ) { + + a = startangle - ( step * i ); + x = r + Math.sin( a ) * ( r - 20 ); + y = r + Math.cos( a ) * ( r - 20 ); + x2 = r + Math.sin( a ) * ( r - 24 ); + y2 = r + Math.cos( a ) * ( r - 24 ); + d += 'M' + x + ' ' + y + ' L' + x2 + ' '+y2 + ' '; + + } + + return d; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = (this.value - this.min) / this.range; + + let sa = Math.PI + this.mPI; + let ea = ( ( this.percent * this.cirRange ) - ( this.mPI ) ); + + let sin = Math.sin( ea ); + let cos = Math.cos( ea ); + + let x1 = ( 25 * sin ) + 64; + let y1 = -( 25 * cos ) + 64; + let x2 = ( 20 * sin ) + 64; + let y2 = -( 20 * cos ) + 64; + + this.setSvg( this.c[3], 'd', 'M ' + x1 +' ' + y1 + ' L ' + x2 +' ' + y2, 1 ); + + if ( this.model > 0 ) { + + let x1 = 36 * Math.sin( sa ) + 64; + let y1 = 36 * Math.cos( sa ) + 64; + let x2 = 36 * sin + 64; + let y2 = -36 * cos + 64; + let big = ea <= Math.PI - this.mPI ? 0 : 1; + this.setSvg( this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4 ); + + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( this.colors.text, -0.75) ), Tools.unpack( this.colors.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 4 ); + + } + + if( up ) this.send(); + + } + } - class Pad2D extends Proto { - constructor(o = {}) { - super(o); - this.autoWidth = false; - this.minw = this.w; - this.diam = o.diam || this.w; - - //this.margin = 15; - this.pos = new V2(0, 0); - this.maxPos = 90; - this.model = o.stype || 0; - if (o.mode !== undefined) this.model = o.mode; - this.min = o.min === undefined ? -1 : o.min; - this.max = o.max === undefined ? 1 : o.max; - this.range = (this.max - this.min) * 0.5; - this.cmode = 0; - - //console.log(this.range) - - this.c[0].style.display = 'block'; - this.precision = o.precision === undefined ? 2 : o.precision; - - /*this.bounds = {}; - this.bounds.x1 = o.x1 || -1; - this.bounds.x2 = o.x2 || 1; - this.bounds.y1 = o.y1 || -1; - this.bounds.y2 = o.y2 || 1; - this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); - this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); - this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); - this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ - - this.value = Array.isArray(o.value) && o.value.length == 2 ? o.value : [0, 0]; - this.h = o.h || this.w + 10; - this.c[0].style.width = this.w + 'px'; - - // Title - if (this.c[1] !== undefined) { - // with title - - this.c[1].style.width = '100%'; - this.c[1].style.justifyContent = 'center'; - this.top = 10; - this.h += 10; - } - - //this.top -= this.margin - - let cc = this.colors; - - // Value - this.c[2] = this.dom('div', this.css.txt + 'justify-content:center; top:' + (this.h - 20) + 'px; width:100%; color:' + cc.text); - this.c[2].textContent = this.value; - - // Pad - - let pad = this.getPad2d(); - this.setSvg(pad, 'fill', cc.back, 0); - this.setSvg(pad, 'fill', cc.button, 1); - this.setSvg(pad, 'stroke', cc.back, 2); - this.setSvg(pad, 'stroke', cc.back, 3); - this.setSvg(pad, 'stroke', cc.text, 4); - this.setSvg(pad, 'viewBox', '0 0 ' + this.diam + ' ' + this.diam); - this.setCss(pad, { - width: this.diam, - height: this.diam, - left: 0, - top: this.top - }); - this.c[3] = pad; - this.init(); - this.setValue(); - } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ''; - if (l.y <= this.c[1].offsetHeight) return 'title';else if (l.y > this.h - this.c[2].offsetHeight) return 'text';else return 'pad'; - - /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { - return 'pad'; - }*/ - - //return ''; - } - mouseup(e) { - this.isDown = false; - return this.mode(0); - } - mousedown(e) { - if (this.testZone(e) === 'pad') { - this.isDown = true; - this.mousemove(e); - return this.mode(1); - } - } - mousemove(e) { - if (!this.isDown) return; - let x = this.w * 0.5 - (e.clientX - this.zone.x); - let y = this.diam * 0.5 - (e.clientY - this.zone.y - this.ytop); - let r = 256 / this.diam; - x = -(x * r); - y = -(y * r); - x = Tools.clamp(x, -this.maxPos, this.maxPos); - y = Tools.clamp(y, -this.maxPos, this.maxPos); - - //let x = e.clientX - this.zone.x; - //let y = e.clientY - this.zone.y - this.top; - - /*if( x < this.margin ) x = this.margin; - if( x > this.w - this.margin ) x = this.w - this.margin; - if( y < this.margin ) y = this.margin; - if( y > this.w - this.margin ) y = this.w - this.margin;*/ - - //console.log(x,y) - - this.setPos([x, y]); - this.update(true); - } - mode(mode) { - if (this.cmode === mode) return false; - let cc = this.colors; - switch (mode) { - case 0: - // base - - this.s[2].color = cc.text; - this.setSvg(this.c[3], 'fill', cc.back, 0); - this.setSvg(this.c[3], 'fill', cc.button, 1); - this.setSvg(this.c[3], 'stroke', cc.back, 2); - this.setSvg(this.c[3], 'stroke', cc.back, 3); - this.setSvg(this.c[3], 'stroke', cc.text, 4); - break; - case 1: - // down - - this.s[2].color = cc.textSelect; - this.setSvg(this.c[3], 'fill', cc.backoff, 0); - this.setSvg(this.c[3], 'fill', cc.overoff, 1); - this.setSvg(this.c[3], 'stroke', cc.backoff, 2); - this.setSvg(this.c[3], 'stroke', cc.backoff, 3); - this.setSvg(this.c[3], 'stroke', cc.textSelect, 4); - break; - } - this.cmode = mode; - return true; - } - update(up) { - //if( up === undefined ) up = true; - - this.c[2].textContent = this.value; - this.updateSVG(); - if (up) this.send(); - } - updateSVG() { - if (this.model == 1) { - this.setSvg(this.c[3], 'y1', this.pos.y, 2); - this.setSvg(this.c[3], 'y2', this.pos.y, 2); - this.setSvg(this.c[3], 'x1', this.pos.x, 3); - this.setSvg(this.c[3], 'x2', this.pos.x, 3); - } - this.setSvg(this.c[3], 'cx', this.pos.x, 4); - this.setSvg(this.c[3], 'cy', this.pos.y, 4); - } - setPos(p) { - //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; - - this.pos.set(p[0] + 128, p[1] + 128); - let r = 1 / this.maxPos; - this.value[0] = (p[0] * r * this.range).toFixed(this.precision); - this.value[1] = (p[1] * r * this.range).toFixed(this.precision); - } - setValue(v, up = false) { - if (v === undefined) v = this.value; - - /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; - if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; - if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; - if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ - - this.value[0] = Math.min(this.max, Math.max(this.min, v[0])).toFixed(this.precision) * 1; - this.value[1] = Math.min(this.max, Math.max(this.min, v[1])).toFixed(this.precision) * 1; - this.pos.set(this.value[0] / this.range * this.maxPos + 128, this.value[1] / this.range * this.maxPos + 128); - - //console.log(this.pos) - - this.update(up); - } - - /*lerp( s1, s2, d1, d2, c = true ) { - let s = ( d2 - d1 ) / ( s2 - s1 ); - return c ? ( v ) => { - return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 - } : ( v ) => { - return ( v - s1 ) * s + d1 - } - }*/ + class List extends Proto { + + constructor( o = {} ) { + + super( o ); + + // TODO not work + this.hideCurrent = false; + + // images + this.path = o.path || ''; + this.format = o.format || ''; + + + this.isWithImage = this.path !== '' ? true:false; + this.preLoadComplete = false; + + this.tmpImage = {}; + this.tmpUrl = []; + + this.m = o.m !== undefined ? o.m : 5; + + + let align = o.align || 'left'; + + // scroll size + let ss = o.scrollSize || 10; + this.ss = ss+1; + + this.sMode = 0; + this.tMode = 0; + + this.listOnly = o.listOnly || false; + this.staticTop = o.staticTop || false; + + this.isSelectable = this.listOnly; + if( o.select !== undefined ) o.selectable = o.select; + if( o.selectable !== undefined ) this.isSelectable = o.selectable; + + if( this.txt === '' ) this.p = 0; + + + let fltop = Math.floor(this.h*0.5)-3; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.basic + 'top:0; display:none; border-radius:'+this.radius+'px;' ); + this.c[3] = this.dom( 'div', this.css.item + 'padding:0px '+this.m+'px; margin-bottom:0px; position:absolute; justify-content:'+align+'; text-align:'+align+'; line-height:'+(this.h-4)+'px; top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:1px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); + + this.scrollerBack = this.dom( 'div', this.css.basic + 'right:0px; width:'+ss+'px; background:'+cc.back+'; display:none;'); + this.scroller = this.dom( 'div', this.css.basic + 'right:'+((ss-(ss*0.25))*0.5)+'px; width:'+(ss*0.25)+'px; background:'+cc.text+'; display:none; '); + + this.c[3].style.color = cc.text; + + + this.list = []; + this.refObject = null; + + if( o.list ){ + if( o.list instanceof Array ){ + this.list = o.list; + } else if( o.list instanceof Object ){ + this.refObject = o.list; + for( let g in this.refObject ) this.list.push( g ); + } + } + + this.items = []; + + this.prevName = ''; + + + this.tmpId = 0; + + this.baseH = this.h; + + this.itemHeight = o.itemHeight || this.h;//(this.h-3); + + // force full list + this.full = o.full || false; + + this.py = 0; + this.ww = this.sb; + this.scroll = false; + this.isDown = false; + + this.current = null; + + // list up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + if( this.up ){ + + this.c[2].style.top = 'auto'; + this.c[3].style.top = 'auto'; + this.c[4].style.top = 'auto'; + + this.c[2].style.bottom = this.h-2 + 'px'; + this.c[3].style.bottom = '1px'; + this.c[4].style.bottom = fltop + 'px'; + + } else { + this.c[2].style.top = this.baseH + 'px'; + } + + this.listIn = this.dom( 'div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); + this.listIn.name = 'list'; + + this.topList = 0; + + this.c[2].appendChild( this.listIn ); + this.c[2].appendChild( this.scrollerBack ); + this.c[2].appendChild( this.scroller ); + + if( o.value !== undefined ){ + if(!isNaN(o.value)) this.value = this.list[ o.value ]; + else this.value = o.value; + }else { + this.value = this.list[0]; + } + + this.isOpenOnStart = o.open || false; + + if( this.listOnly ){ + this.baseH = 5; + this.c[3].style.display = 'none'; + this.c[4].style.display = 'none'; + this.c[2].style.top = this.baseH+'px'; + this.isOpenOnStart = true; + } + + + this.miniCanvas = o.miniCanvas || false; + this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; + this.imageSize = o.imageSize || [20,20]; + + // dragout function + this.drag = o.drag || false; + this.dragout = o.dragout || false; + this.dragstart = o.dragstart || null; + this.dragend = o.dragend || null; + + + + //this.c[0].style.background = '#FF0000' + ///if( this.isWithImage ) this.preloadImage(); + + this.setList( this.list ); + this.init(); + if( this.isWithImage ) this.preloadImage(); + if( this.isOpenOnStart ) this.open( true ); + + this.baseH += this.mtop; + + } + + // image list + + preloadImage () { + + + + this.preLoadComplete = false; + + this.tmpImage = {}; + for( let i=0; i this.h - this.baseH ) return 'title'; + else { + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + + } else { + if( l.y < this.baseH+2 ) return 'title'; + else { + if( this.isOpen ){ + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + } + + } + + return ''; + + } + + testItems ( y ) { + + let name = ''; + + let items = this.items; + + /*if(this.hideCurrent){ + //items = [...this.items] + items = this.items.slice(this.tmpId) + + }*/ + + let i = items.length, item, a, b; + while(i--){ + item = items[i]; + a = item.posy + this.topList; + b = item.posy + this.itemHeight + 1 + this.topList; + if( y >= a && y <= b ){ + name = 'item' + i; + this.modeItem(0); + this.current = item; + this.modeItem(1); + return name; + } + + } + + return name; + + } + + modeItem ( mode ) { + + if( !this.current ) return + + if( this.current.select && mode===0) mode = 2; + let cc = this.colors; + + switch( mode ){ + + case 0: // base + this.current.style.background = cc.back; + this.current.style.color = cc.text; + break; + case 1: // over + this.current.style.background = cc.over; + this.current.style.color = cc.textOver; + break; + case 2: // edit / down + this.current.style.background = cc.select; + this.current.style.color = cc.textSelect; + break; + + } + } + + unSelected() { + + if( !this.current ) return + this.modeItem(0); + this.current = null; + + } + + selected() { + + if( !this.current ) return + this.resetItems(); + this.modeItem(2); + this.current.select = true; + + + + } + + resetItems() { + + let i = this.items.length; + while(i--){ + this.items[i].select = false; + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text; + } + + } + + hideActive() { + + if( !this.hideCurrent ) return + //if( !this.current ) return + if( this.current )this.tmpId = this.current.id; + this.resetHide(); + //this.items[this.tmpId].style.height = 0+'px' + + } + + resetHide() { + + console.log(this.tmpId); + + let i = this.items.length; + while(i--){ + if(i===this.tmpId){ + this.items[i].style.height = 0+'px'; + this.items[i].posy = -1; + } else { + this.items[i].style.height = this.itemHeight+'px'; + this.items[i].posy = (this.itemHeight+1)*(i-1); + } + //this.items[i].style.display = 'flex' + + /*this.items[i].select = false + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text;*/ + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + + mouseup ( e ) { + + this.isDown = false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'scroll' ){ + + this.isDown = true; + this.mousemove( e ); + + } else if( name === 'title' ){ + + this.modeTitle(2); + if( !this.listOnly ){ + this.hideActive(); + if( !this.isOpen ) this.open(); + else this.close(); + } + } else { + // is item + if( this.current ){ + + this.value = this.list[ this.current.id ]; + //this.tmpId = this.current.id + + if( this.isSelectable ) this.selected(); + + //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); + this.send( this.value ); + + if( !this.listOnly ) { + this.close(); + this.setTopItem(); + //this.hideActive() + } + } + + } + + return true; + + } + + mousemove ( e ) { + + let nup = false; + let name = this.testZone( e ); + + if( !name ) return nup; + + if( name === 'title' ){ + this.unSelected(); + this.modeTitle(1); + this.cursor('pointer'); + + } else if( name === 'scroll' ){ + + this.cursor('s-resize'); + this.modeScroll(1); + if( this.isDown ){ + this.modeScroll(2); + //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + let top = this.zone.y+this.baseH-2; + this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + } + //if(this.isDown) this.listmove(e); + } else { + + // is item + this.modeTitle(0); + this.modeScroll(0); + this.cursor('pointer'); + + } + + if( name !== this.prevName ) nup = true; + this.prevName = name; + + return nup; + + } + + wheel ( e ) { + + let name = this.testZone( e ); + if( name === 'title' ) return false; + this.py += e.delta*10; + this.update(this.py); + return true; + + } + + + + // ---------------------- + + reset () { + + this.prevName = ''; + this.unSelected(); + this.modeTitle(0); + this.modeScroll(0); + + //console.log('this is reset') + + } + + modeScroll ( mode ) { + + if( mode === this.sMode ) return; + + let s = this.scroller.style; + let cc = this.colors; + + switch(mode){ + case 0: // base + s.background = cc.text; + break; + case 1: // over + s.background = cc.select; + break; + case 2: // edit / down + s.background = cc.select; + break; + + } + + this.sMode = mode; + } + + modeTitle ( mode ) { + + if( mode === this.tMode ) return; + + let s = this.s; + let cc = this.colors; + + switch(mode){ + case 0: // base + s[3].color = cc.text; + s[3].background = cc.button; + break; + case 1: // over + s[3].color = cc.textOver; + s[3].background = cc.overoff; + break; + case 2: // edit / down + s[3].color = cc.textSelect; + s[3].background = cc.overoff; + break; + + } + + this.tMode = mode; + + } + + clearList () { + + while ( this.listIn.children.length ) this.listIn.removeChild( this.listIn.lastChild ); + this.items = []; + + } + + setList ( list ) { + + this.clearList(); + + this.list = list; + this.length = this.list.length; + + let lng = this.hideCurrent? this.length-1 : this.length; + + this.maxItem = this.full ? lng : 5; + this.maxItem = lng < this.maxItem ? lng : this.maxItem; + + this.maxHeight = this.maxItem * (this.itemHeight+1) + 2; + + + + this.max = lng * (this.itemHeight+1) + 2; + this.ratio = this.maxHeight / this.max; + this.sh = this.maxHeight * this.ratio; + this.range = this.maxHeight - this.sh; + + this.c[2].style.height = this.maxHeight + 'px'; + this.scrollerBack.style.height = this.maxHeight + 'px'; + this.scroller.style.height = this.sh + 'px'; + + if( this.max > this.maxHeight ){ + this.ww = this.sb - this.ss; + this.scroll = true; + } + + if( this.miniCanvas ) { + + this.tmpCanvas = document.createElement('canvas'); + this.tmpCanvas.width = this.imageSize[0]; + this.tmpCanvas.height = this.imageSize[1]; + this.tmpCtx = this.tmpCanvas.getContext("2d"); + this.tmpCtx.fillStyle = this.canvasBg; + this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); + + } + + let item, n;//, l = this.sb; + for( let i=0; i this.range ? this.range : y; + + this.topList = -Math.floor( y / this.ratio ); + + this.listIn.style.top = this.topList+'px'; + this.scroller.style.top = Math.floor( y ) + 'px'; + + this.py = y; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open ( first ) { + + super.open(); + + this.update( 0 ); + + this.h = this.maxHeight + this.baseH + 5; + if( !this.scroll ){ + this.topList = 0; + this.h = this.baseH + 5 + this.max; + this.scroller.style.display = 'none'; + this.scrollerBack.style.display = 'none'; + } else { + this.scroller.style.display = 'block'; + this.scrollerBack.style.display = 'block'; + } + this.s[0].height = this.h + 'px'; + this.s[2].display = 'block'; + + if( this.up ){ + this.zone.y -= this.h - (this.baseH-10); + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + } else { + this.setSvg( this.c[4], 'd', this.svgs.g2 ); + } + + this.rSizeContent(); + + let t = this.h - this.baseH; + + this.zone.h = this.h; + + if(!first) this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.h - (this.baseH-10); + + let t = this.h - this.baseH; + + this.h = this.baseH; + this.s[0].height = this.h + 'px'; + this.s[2].display = 'none'; + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + + this.zone.h = this.h; + + this.parentHeight( -t ); + + } + + // ----- + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSizeContent () { + + let i = this.length; + while(i--) this.listIn.children[i].style.width = this.ww + 'px'; + + } + + rSize () { + + super.rSize(); + + //Proto.prototype.rSize.call( this ); + + let s = this.s; + let w = this.sb; + let d = this.sa; + + if(s[2]=== undefined) return; + + s[2].width = w + 'px'; + s[2].left = d +'px'; + + s[3].width = w + 'px'; + s[3].left = d + 'px'; + + s[4].left = d + w - 15 + 'px'; + + this.ww = w; + if( this.max > this.maxHeight ) this.ww = w-this.ss; + if(this.isOpen) this.rSizeContent(); + + } + } - // proto/TreeList.js - class TreeList extends Proto { - constructor(o = {}) { - // API pública esperada: - // o.tree (obj/array), o.value (array) - // o.focused (bool), o.focusPath (array), o.focusLevel (number) - // o.tabIndex, o.itemIndex, o.onChange (fn) - o.selectable = true; - o.name = o.name || 'TreeList'; - super(o); - - // Datos & estado - this.tree = o.tree || {}; - this.value = Array.isArray(o.value) ? o.value.slice() : []; - this.focused = !!o.focused; - this.focusPath = Array.isArray(o.focusPath) ? o.focusPath.slice() : []; - this.focusLevel = typeof o.focusLevel === 'number' ? o.focusLevel : -1; - this.tabIndex = o.tabIndex ?? null; - this.itemIndex = o.itemIndex ?? null; - - // Callback - this.changeCb = typeof o.onChange === 'function' ? o.onChange : () => {}; - - // Layout interno / publicación de altura - this.lineH = this.h; // alto de UNA fila - this.levelGap = this.colors.sy || 2; // separación vertical entre niveles - this.leafMax = 0; // se calcula en rSize() - - // Modelo visual - this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] - this.itemsDom = []; // espejo DOM por nivel - this.hover = { - level: -1, - index: -1 - }; - - // 🔸 NUEVO: recordar la última hoja seleccionada (persistente) - this.lastLeaf = { - parentPath: [], - key: null - }; // parentPath es la ruta hasta el mapa padre - - // Contenedor interno (absoluto) - this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); - this.s[2] = this.c[2].style; - this.init(); - - // Si el valor inicial ya apunta a una hoja válida, recordar esa hoja - this._maybeUpdateLastLeafFromValue(); - } - - // ======= Helpers de tipo ======= - static isMap(node) { - return node && typeof node === 'object' && !Array.isArray(node); - } - static isList(node) { - return Array.isArray(node); - } - - // ======= Recorrido de datos ======= - getNodeAtPath(path) { - let node = this.tree; - for (let i = 0; i < path.length; i++) { - if (TreeList.isMap(node)) { - if (!Object.prototype.hasOwnProperty.call(node, path[i])) return { - node: null, - depth: i - }; - node = node[path[i]]; - } else if (TreeList.isList(node)) { - // Llegamos a una lista: ya no hay más claves válidas - if (i < path.length) return { - node, - depth: i - }; - } else { - return { - node: null, - depth: i - }; - } - } - return { - node, - depth: path.length - }; - } - - // Autocompletar: baja por primeras claves de cada mapa hasta alcanzar una lista - autoCompleteToLeaf(basePath) { - let { - node - } = this.getNodeAtPath(basePath); - const path = basePath.slice(); - while (TreeList.isMap(node)) { - const keys = Object.keys(node); - if (!keys.length) break; - const k0 = keys[0]; - path.push(k0); - node = node[k0]; - } - // Si termina en lista, NO agrega un ítem final de la hoja - return path; - } - - // Ruta activa (focusPath si focused, sino value) - getActivePath() { - return this.focused ? this.focusPath : this.value; - } - - // ======= Tamaño de hoja máximo (para layout estable) ======= - computeLeafMax(node = this.tree) { - if (Array.isArray(node)) return node.length; - if (!node || typeof node !== 'object') return 0; - let m = 0; - for (const k of Object.keys(node)) { - m = Math.max(m, this.computeLeafMax(node[k])); - } - return m; - } - - // ======= Construcción de niveles (modelo lógico) ======= - buildLevels() { - this.levels.length = 0; - const activePath = this.getActivePath(); - let node = this.tree; - let level = 0; - while (node) { - if (TreeList.isMap(node)) { - // Nivel intermedio: claves del mapa (horizontal) - const keys = Object.keys(node); - if (!keys.length) break; - this.levels.push({ - type: 'map', - items: keys.map(k => ({ - key: k, - label: k, - zone: { - x: 0, - y: 0, - w: 0, - h: 0 - } - })), - zone: { - x: 0, - y: 0, - w: 0, - h: this.lineH - } - }); - const nextKey = activePath[level]; - if (!nextKey || !node.hasOwnProperty(nextKey)) break; - node = node[nextKey]; - } else if (TreeList.isList(node)) { - // Nivel hoja: lista vertical - const items = node.map(label => ({ - key: label, - label, - zone: { - x: 0, - y: 0, - w: 0, - h: 0 - } - })); - const hList = Math.max(items.length, this.leafMax) * this.lineH; - this.levels.push({ - type: 'list', - items, - zone: { - x: 0, - y: 0, - w: 0, - h: hList - } - }); - break; - } else { - break; - } - level++; - } - } - - // ======= Layout (zonas & DOM) ======= - layoutLevels() { - const contentX = (this.sa || 100) + 8; // columna de label + padding - const padRight = 8; - const w = this.zone.w - contentX - padRight; - let y = 0; - - // Ajustar itemsDom a cantidad de niveles - while (this.itemsDom.length < this.levels.length) this.itemsDom.push([]); - for (let L = this.levels.length; L < this.itemsDom.length; L++) { - for (const el of this.itemsDom[L]) if (el && el.parentNode) el.parentNode.removeChild(el); - } - this.itemsDom.length = this.levels.length; - for (let L = 0; L < this.levels.length; L++) { - const lvl = this.levels[L]; - if (lvl.type === 'map') { - const n = Math.max(1, lvl.items.length); - const cellW = Math.floor(w / n); - lvl.zone = { - x: contentX, - y, - w, - h: this.lineH - }; - let x = contentX; - for (let i = 0; i < lvl.items.length; i++) { - const it = lvl.items[i]; - it.zone = { - x, - y, - w: cellW, - h: this.lineH - }; - const dom = this.ensureItemDom(L, i); - this.paintItemDom(dom, L, i, it, 'map'); - x += cellW; - } - // eliminar DOM sobrante si antes había más celdas - this._pruneRow(L, lvl.items.length); - y += this.lineH + this.levelGap; - } else { - // lista/hoja: reservar h según leafMax - const n = lvl.items.length; - const hList = Math.max(n, this.leafMax) * this.lineH; - lvl.zone = { - x: contentX, - y, - w, - h: hList - }; - const rows = Math.max(n, this.leafMax); - for (let i = 0; i < rows; i++) { - const isReal = i < n; - const it = isReal ? lvl.items[i] : { - key: null, - label: '', - zone: { - x: 0, - y: 0, - w: 0, - h: 0 - } - }; - it.zone = { - x: contentX, - y: y + i * this.lineH, - w, - h: this.lineH - }; - const dom = this.ensureItemDom(L, i); - this.paintItemDom(dom, L, i, it, 'list', isReal); - } - // eliminar DOM sobrante si antes había más filas - this._pruneRow(L, rows); - y += hList; - } - } - - // Ajustes de alto interno del contenedor visual - const totalH = y; - this.zone.h = totalH + this.margin; - this.s[0].height = this.zone.h + 'px'; - this.s[2].height = totalH + 'px'; - - // Publicar alto total al GUI (sumará u.h) - this._publishHeight(); - } - - // Elimina nodos DOM sobrantes en la fila L a partir del índice keep - _pruneRow(L, keep) { - const row = this.itemsDom[L]; - if (!row) return; - for (let j = keep; j < row.length; j++) { - const el = row[j]; - if (el && el.parentNode) el.parentNode.removeChild(el); - } - row.length = keep; - } - ensureItemDom(L, i) { - const row = this.itemsDom[L]; - while (row.length <= i) row.push(null); - if (!row[i]) { - const div = this.dom('div', Tools.css.txt + 'position:absolute; pointer-events:none;'); - this.c[2].appendChild(div); - row[i] = div; - } - return row[i]; - } - paintItemDom(div, L, i, it, kind, isReal = true) { - const s = div.style; - const cc = this.colors; - - // Posición - s.left = it.zone.x + 'px'; - s.top = it.zone.y + 'px'; - s.width = it.zone.w + 'px'; - s.height = it.zone.h - 2 + 'px'; - - // Texto - div.textContent = isReal ? it.label : ''; - - // Estados - const selected = isReal && this.value[L] !== undefined && this.value[L] === it.key; - const inFocusLvl = this.focused && this.focusLevel === L; - const focusMatch = isReal && inFocusLvl && this.focusPath[L] === it.key; - const isHover = isReal && this.hover.level === L && this.hover.index === i; - - // 🔸 NUEVO: ¿esta fila es la última hoja seleccionada? - let isLastLeaf = false; - if (isReal && kind === 'list' && this.lastLeaf.key != null) { - // La hoja visible corresponde si el padre de esta lista coincide con parentPath guardado - // El padre actual es this.value.slice(0, L) cuando la lista está desplegada por value/focus - const parentNow = this.getActivePath().slice(0, L); - if (this._pathsEqual(parentNow, this.lastLeaf.parentPath) && it.key === this.lastLeaf.key) { - isLastLeaf = true; - } - } - - // Estilos base - s.background = cc.back; - s.color = cc.text; - s.border = '1px solid ' + cc.border; - s.textAlign = kind === 'map' ? 'center' : 'left'; - - // Prioridad visual: - // 1) seleccionado (azul) - // 2) última hoja (nuevo color) - // 3) foco - // 4) hover - if (selected) { - s.background = cc.select; - s.color = cc.textSelect; - } else if (isLastLeaf) { - // color distintivo para "última hoja" (amarillo suave) - s.background = 'rgba(255, 200, 0, 0.25)'; - s.color = cc.text; - } else if (focusMatch) { - s.background = cc.backgroundOver; - s.color = cc.textOver; - } else if (isHover) { - s.background = cc.overoff; - s.color = cc.textOver; - } - - // Filas de padding invisibles en hoja - s.opacity = isReal ? '1' : '0'; - } - _pathsEqual(a, b) { - if (!a || !b || a.length !== b.length) return false; - for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false; - return true; - } - - // ======= Ciclo de vida ======= - rSize() { - this.leafMax = this.computeLeafMax(this.tree); - this.buildLevels(); - this.layoutLevels(); - } - update() { - this.buildLevels(); - this.layoutLevels(); - } + class Numeric extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.setTypeNumber( o ); + + this.allway = o.allway || false; + + this.isDown = false; + this.value = [0]; + this.multy = 1; + this.invmulty = 1; + this.isSingle = true; + this.isAngle = false; + this.isVector = false; + + if( o.isAngle ){ + this.isAngle = true; + this.multy = Tools.torad; + this.invmulty = Tools.todeg; + } + + this.isDrag = o.drag || false; + + if( o.value !== undefined ){ + if( !isNaN(o.value) ){ + this.value = [o.value]; + } else if( o.value instanceof Array ){ + this.value = o.value; + this.isSingle = false; + } else if( o.value instanceof Object ){ + this.value = []; + if( o.value.x !== undefined ) this.value[0] = o.value.x; + if( o.value.y !== undefined ) this.value[1] = o.value.y; + if( o.value.z !== undefined ) this.value[2] = o.value.z; + if( o.value.w !== undefined ) this.value[3] = o.value.w; + this.isSingle = false; + this.isVector = true; + } + } + + this.lng = this.value.length; + this.tmp = []; + + this.current = -1; + this.prev = { x:0, y:0, d:0, v:0 }; + + let cc = this.colors; + + // bg + this.c[2] = this.dom( 'div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h-8) + 'px;' ); + + this.cMode = []; + + let i = this.lng; + while(i--){ + + if( this.isAngle ) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed( this.precision ); + this.c[3+i] = this.dom( 'div', this.css.txtselect + 'top:1px; height:'+(this.h-2)+'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;'); + if(o.center) this.c[2+i].style.textAlign = 'center'; + this.c[3+i].textContent = this.value[i]; + this.c[3+i].style.color = this.colors.text; + this.c[3+i].isNum = true; + this.cMode[i] = 0; + + } + + // selection + this.selectId = 3 + this.lng; + this.c[this.selectId] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.cursorId = 4 + this.lng; + this.c[ this.cursorId ] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + this.init(); + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x z.x + z.w || my > z.x + z.w) continue; - if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; - if (lvl.type === 'map') { - for (let i = 0; i < lvl.items.length; i++) { - const itz = lvl.items[i].zone; - if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { - return { - L, - i, - real: true - }; - } - } - } else { - const nRows = Math.max(lvl.items.length, this.leafMax); - for (let i = 0; i < nRows; i++) { - const isReal = i < lvl.items.length; - const itz = isReal ? lvl.items[i].zone : { - x: z.x, - y: z.y + i * this.lineH, - w: z.w, - h: this.lineH - }; - if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { - return { - L, - i, - real: isReal - }; - } - } - } - } - return { - L: -1, - i: -1, - real: false - }; - } - handleEvent(e) { - if (this.lock) return false; - if (e.type === 'mousemove') { - const { - x, - y - } = this._toLocal(e); - const ht = this._hitTest(x, y); - this.hover = ht.L !== -1 && ht.real ? { - level: ht.L, - index: ht.i - } : { - level: -1, - index: -1 - }; - this.update(); - return true; - } - if (e.type === 'mousedown') { - const { - x, - y - } = this._toLocal(e); - const ht = this._hitTest(x, y); - if (ht.L !== -1 && ht.real) { - this._selectAt(ht.L, ht.i); - return true; - } - } - if (e.type === 'mouseup') { - return true; - } + class Slide extends Proto { + constructor(o = {}) { + super(o); + + if (o.easing <= 0) throw "Easing must be > 0"; + this.easing = o.easing || 1; + + this.setTypeNumber(o); + + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + + //this.defaultBorderColor = this.colors.hide; + + this.isDown = false; + this.isOver = false; + this.allway = o.allway || false; + + this.isDeg = o.isDeg || false; + this.isCyclic = o.cyclic || false; + + this.firstImput = false; + + let cc = this.colors; + + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + this.c[2] = this.dom( + "div", + this.css.txtselect + + "border:none; background:none; width:47px; color:" + + cc.text + + ";" + ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); + this.c[3] = this.dom( + "div", + this.css.basic + " top:0; height:" + this.h + "px;" + ); + + this.c[4] = this.dom( + "div", + this.css.basic + + "background:" + + cc.back + + "; top:2px; height:" + + (this.h - 4) + + "px;" + ); + this.c[5] = this.dom( + "div", + this.css.basic + + "left:4px; top:5px; height:" + + (this.h - 10) + + "px; background:" + + cc.text + + ";" + ); + + this.c[2].isNum = true; + //this.c[2].style.height = (this.h-4) + 'px'; + //this.c[2].style.lineHeight = (this.h-8) + 'px'; + this.c[2].style.height = this.h - 2 + "px"; + this.c[2].style.lineHeight = this.h - 10 + "px"; + + if (this.model !== 0) { + let r1 = 4, + h1 = 4, + h2 = 8, + ww = this.h - 6, + ra = 16; + + if (this.model === 2) { + r1 = 0; + h1 = 2; + h2 = 4; + ra = 2; + ww = (this.h - 6) * 0.5; + } + + if (this.model === 3) this.c[5].style.visible = "none"; + + this.c[4].style.borderRadius = r1 + "px"; + this.c[4].style.height = h2 + "px"; + this.c[4].style.top = this.h * 0.5 - h1 + "px"; + this.c[5].style.borderRadius = r1 * 0.5 + "px"; + this.c[5].style.height = h1 + "px"; + this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; + + //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); + this.c[6] = this.dom( + "div", + this.css.basic + + "border-radius:" + + ra + + "px; margin-left:" + + -ww * 0.5 + + "px; background:" + + cc.text + + "; left:4px; top:3px; height:" + + (this.h - 6) + + "px; width:" + + ww + + "px;" + ); + } + + this.init(); + } + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + if (l.x >= this.txl) return "text"; + else if (l.x >= this.sa) return "scroll"; + else return ""; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (this.isDown) this.isDown = false; + } + + mousedown(e) { + let name = this.testZone(e); + + if (!name) return false; + + if (name === "scroll") { + this.isDown = true; + this.old = this.value; + this.mousemove(e); + } + + /*if( name === 'text' ){ + this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); + }*/ + + return true; + } + + mousemove(e) { + let nup = false; + + let name = this.testZone(e); + + if (name === "scroll") { + this.mode(1); + this.cursor("w-resize"); + //} else if(name === 'text'){ + //this.cursor('pointer'); + } else { + this.cursor(); + } + + if (this.isDown) { + let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; + + // lo mapeo al rango 0 ... 1 + nNormalized = Math.min(1, Math.max(0, nNormalized)); + + // aplico easing + let nEased = Math.pow(nNormalized, this.easing); // easing + + let nNew = nEased * this.range + this.min; + let nNewSlider = nNormalized * this.range + this.min; + + this.sliderValue = this.numValue(nNewSlider); + + let delta = nNew - this.old; + + let steps; + if (delta >= this.step || delta <= this.step) { + steps = Math.floor(delta / this.step); + this.value = this.numValue(this.old + steps * this.step); + // value without easing applied + + this.update(true); + this.old = this.value; + } + //console.log("n, normalized, value", nNew, nNormalized, this.value); + nup = true; + } + + return nup; + } + + wheel(e) { + let name = this.testZone(e); + + if (name === "scroll") { + let v = this.value - this.step * e.delta; + + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue(v); + this.old = v; + this.update(true); + + return true; + } + + return false; + } + + //keydown: function ( e ) { return true; }, + + // ---------------------- + + validate() { + let n = this.c[2].textContent; + + if (!isNaN(n)) { + this.value = this.numValue(n); + this.update(true); + } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + } + + reset() { + //this.clearInput(); + this.isDown = false; + this.mode(0); + } + + mode(mode) { + let s = this.s; + let cc = this.colors; + + switch (mode) { + case 0: // base + // s[2].border = '1px solid ' + this.colors.hide; + s[2].color = cc.text; + s[4].background = cc.back; + s[5].background = cc.text; + if (this.model !== 0) s[6].background = cc.text; //cc.button; + break; + case 1: // scroll over + //s[2].border = '1px dashed ' + this.colors.hide; + s[2].color = cc.textOver; + s[4].background = cc.back; + s[5].background = cc.textOver; + if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; + break; + } + } + + update(up) { + let normalized = (this.value - this.min) / this.range; + + let uneased = + this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); + + let ww = Math.floor(this.ww * uneased); + //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); + + if (this.model !== 3) this.s[5].width = ww + "px"; + if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; + this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + + if (up) this.send(); + } + + rSize() { + super.rSize(); + + let w = this.sb - this.sc; + this.ww = w - 6; + + let tx = this.sc; + if (this.isUI || !this.simple) tx = this.sc + 10; + this.txl = this.w - tx + 2; + + //let ty = Math.floor(this.h * 0.5) - 8; + + let s = this.s; + + s[2].width = this.sc - 6 + "px"; + s[2].left = this.txl + 4 + "px"; + //s[2].top = ty + 'px'; + s[3].left = this.sa + "px"; + s[3].width = w + "px"; + s[4].left = this.sa + "px"; + s[4].width = w + "px"; + s[5].left = this.sa + 3 + "px"; + + this.update(); + } + } - // (Opcional) teclado: integrar navegación en Gui y reenviar aquí si se desea - return false; - } + class TextInput extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.cmode = 0; + + this.value = o.value !== undefined ? o.value : ''; + this.placeHolder = o.placeHolder || ''; + + this.allway = o.allway || false; + this.editable = o.edit !== undefined ? o.edit : true; + + this.isDown = false; + + let cc = this.colors; + + // text + this.c[2] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[2].textContent = this.value; + + // selection + this.c[3] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.c[4] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + // fake + this.c[5] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; border:none; justify-content: center; font-style: italic; color:'+cc.border+';' ); + if( this.value === '' ) this.c[5].textContent = this.placeHolder; + + + + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x >= this.sa ) return 'text'; + return ''; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if(!this.editable) return; + + if( this.isDown ){ + this.isDown = false; + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + if( !this.isDown ){ + this.isDown = true; + if( name === 'text' ) this.setInput( this.c[2] ); + return this.mousemove( e ); + } + + return false; + + } + + mousemove ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + //let l = this.local; + //if( l.x === -1 && l.y === -1 ){ return;} + + //if( l.x >= this.sa ) this.cursor('text'); + //else this.cursor(); + + let x = 0; + + if( name === 'text' ) this.cursor('text'); + else this.cursor(); + + if( this.isDown ) x = e.clientX - this.zone.x; + + return this.upInput( x - this.sa -3, this.isDown ); + + } + + update ( ) { + + this.c[2].textContent = this.value; + + } + + // ---------------------- + + reset () { + + this.cursor(); + + } + + // ---------------------- + // INPUT + // ---------------------- + + select ( c, e, w, t ) { + + let s = this.s; + let d = this.sa + 5; + s[4].width = '1px'; + s[4].left = ( d + e ) + 'px'; + + s[3].left = ( d + e ) + 'px'; + s[3].width = w + 'px'; + this.c[3].innerHTML = t; + + } + + unselect () { + + let s = this.s; + if(!s) return; + s[3].width = 0 + 'px'; + this.c[3].innerHTML = 't'; + s[4].width = 0 + 'px'; + + } + + validate ( force ) { + + if( this.allway ) force = true; + + this.value = this.c[2].textContent; + + if(this.value !== '') this.c[5].textContent = ''; + else this.c[5].textContent = this.placeHolder; + + if( !force ) return; + + this.send(); + + } + + // ---------------------- + // REZISE + // ---------------------- + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + + s[5].left = this.sa + 'px'; + s[5].width = this.sb + 'px'; + + } + + + } - // Selección + autocompletado + notificación - _selectAt(L, i) { - const lvl = this.levels[L]; - const chosen = lvl.items[i]; - if (!chosen || !chosen.key) return; - const base = this.value.slice(0, L); - base[L] = chosen.key; - const newPath = this.autoCompleteToLeaf(base); + class Title extends Proto { + + constructor( o = {} ) { + + super( o ); + + let prefix = o.prefix || ''; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:right; width:60px; line-height:'+ (this.h-8) + 'px; color:' + this.colors.text ); + + if( this.h === 31 ){ + + this.s[0].height = this.h + 'px'; + this.s[1].top = 8 + 'px'; + this.c[2].style.top = 8 + 'px'; + + } + + let s = this.s; + + s[1].justifyContent = o.align || 'left'; + //s[1].textAlign = o.align || 'left'; + s[1].fontWeight = o.fontWeight || 'bold'; + + + this.c[1].textContent = this.txt.substring(0,1).toUpperCase() + this.txt.substring(1).replace("-", " "); + this.c[2].textContent = prefix; + + this.init(); + + } + + text( txt ) { + + this.c[1].textContent = txt; + + } + + text2( txt ) { + + this.c[2].textContent = txt; + + } + + rSize() { + + super.rSize(); + this.s[1].width = this.w + 'px'; //- 50 + 'px'; + this.s[2].left = this.w + 'px';//- ( 50 + 26 ) + 'px'; + + } + + setColor( c ) { + this.s[1].color = c; + this.s[2].color = c; + } + + } - // 🔸 Si el usuario selecciona explícitamente en el nivel hoja, recordarlo - if (lvl.type === 'list') { - this.lastLeaf.parentPath = this.value.slice(0, L); // padre de la lista actual - this.lastLeaf.key = chosen.key; - } - this.value = newPath.slice(); - this.update(); + class Select extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.isDown = false; + this.onActif = o.onActif || function(){}; + + //let prefix = o.prefix || ''; + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+ cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + //this.c[2].style.color = this.fontColor; + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'cursor' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + this.isActif = false; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + if( l.x > this.sa && l.x < this.sa+30 ) return 'over' + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ) + } + + return false + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false + + this.isDown = true; + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + this.send(); + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + if( n===1 ) this.isActif = false; + if( n===3 ){ + if( !this.isActif ){ this.isActif = true; n=4; this.onActif( this ); } + else { this.isActif = false; } + } + + if( n===2 && this.isActif ) n = 4; + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.action; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.action; break; // actif + + } + + change = true; + + } + + return change + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ) + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + + } - // si está referenciado, propaga a objeto externo - this.send(newPath); - this.changeCb(this.tabIndex, this.itemIndex, newPath); - } + class Bitmap extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.refTexture = o.texture || null; + this.img = null; + + this.isDown = false; + this.neverlock = true; + + + + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'load' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x > this.sa && l.x < this.sa+30 ) return 'over'; + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'over' ){ + this.isDown = true; + Files.load( { callback:this.changeBitmap.bind(this) } ); + + } + + + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ); + + } + + mousemove ( e ) { + + let up = false; + + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + + changeBitmap( img, fname ){ + + if( img ){ + this.img = img; + this.apply( fname ); + } else { + this.img = null; + this.apply( 'null' ); + } + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + + if( this.img !== null ){ + if( this.objectLink !== null ) this.objectLink[ this.val ] = v; + if( this.callback ) this.callback( this.value, this.img, this.name ); + } + + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.over; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.select; break; // actif + + } + + change = true; + + } + + return change; + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ); + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + + } - // ======= API pública ======= - setValue(path) { - this.value = Array.isArray(path) ? path.slice() : []; - // Si desde afuera nos setean una hoja válida, también la recordamos - this._maybeUpdateLastLeafFromValue(); - this.update(); - } - setTree(tree) { - this.tree = tree || {}; - this.leafMax = this.computeLeafMax(this.tree); - this.update(); - } - setFocus({ - focused, - focusPath, - focusLevel - }) { - if (typeof focused === 'boolean') this.focused = focused; - if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); - if (typeof focusLevel === 'number') this.focusLevel = focusLevel; - this.update(); - } - _maybeUpdateLastLeafFromValue() { - // Si value apunta a padre+hoja (…,[leaf]) y es válida, recordar esa hoja - if (!Array.isArray(this.value) || this.value.length === 0) return; - const parent = this.value.slice(0, this.value.length - 1); - const leaf = this.value[this.value.length - 1]; - const info = this.getNodeAtPath(parent); - if (info && Array.isArray(info.node) && info.node.includes(leaf)) { - this.lastLeaf = { - parentPath: parent, - key: leaf - }; - } - } + //import { Proto } from '../core/Proto.js'; + + class Selector extends Button { + + constructor( o = {} ) { + + if( o.selectable === undefined ) o.selectable = true; + super( o ); + + } + + } - // ======= Publicación de altura ======= - _countVisibleIntermediates() { - let c = 0; - for (let i = 0; i < this.levels.length; i++) if (this.levels[i].type === 'map') c++; - return c; - } - _getCurrentLeafLength() { - const last = this.levels[this.levels.length - 1]; - return last && last.type === 'list' ? last.items.length : 0; - } - _publishHeight() { - const inter = this._countVisibleIntermediates(); - const leafLen = Math.max(this.leafMax, this._getCurrentLeafLength()); - const leafH = leafLen * this.lineH; - const interH = inter * (this.lineH + this.levelGap); - const totalH = interH + (inter ? this.levelGap : 0) + leafH; + class Item extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.p = 100; + this.value = this.txt; + this.status = 1; + + this.itype = o.itype || 'none'; + this.val = this.itype; + + this.graph = this.svgs[ this.itype ]; + + let fltop = Math.floor(this.h*0.5)-7; + + this.c[2] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.graph, fill:this.colors.text, stroke:'none'}); + + this.s[1].marginLeft = 20 + 'px'; + + this.init(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousemove ( e ) { + + this.cursor('pointer'); + + //up = this.modes( this.isDown ? 3 : 2, name ); + + } + + mousedown ( e ) { + + if( this.isUI ) this.main.resetItem(); + + this.selected( true ); + + this.send(); + + return true; + + } + + uiout () { + + if( this.isSelect ) this.mode(3); + else this.mode(1); + + } + + uiover () { + + if( this.isSelect ) this.mode(4); + else this.mode(2); + + } + + update () { + + } + + /*rSize () { + + super.rSize(); + + }*/ + + mode ( n ) { + + let change = false; + + if( this.status !== n ){ + + this.status = n; + let s = this.s, cc = this.colors; + + switch( n ){ + + case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; + case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; + case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; + case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; + + } + + change = true; + + } + + return change; + + } + + reset () { + + this.cursor(); + // return this.mode( 1 ); + + } + + selected ( b ){ + + if( this.isSelect ) this.mode(1); + + this.isSelect = b || false; + + if( this.isSelect ) this.mode(3); + + } + + + } - // Actualiza métricas del proto (lo que suma el GUI) - this.h = totalH; - this.zone.h = this.h + this.margin; - this.s[0].height = this.h + 'px'; + class Grid extends Proto { + + constructor( o = {} ) { + + super( o ); + + /*this.values = o.values || []; + + if( typeof this.values === 'string' ) this.values = [ this.values ];*/ + + this.values = []; + + if( o.values ){ + if( o.values instanceof Array ){ + this.values = o.values; + } else if( o.values instanceof String ){ + this.values = [ o.values ]; + } else if( o.values instanceof Object ){ + this.refObject = o.values; + for( let g in this.refObject ) this.values.push( g ); + } + } + + this.lng = this.values.length; + + + + this.value = o.value || null; + + + + + let cc = this.colors; + + + this.isSelectable = o.selectable || false; + this.spaces = o.spaces || [ cc.sx, cc.sy ]; + this.bsize = o.bsize || [ 90, this.h ]; + + this.bsizeMax = this.bsize[0]; + + this.tmp = []; + this.stat = []; + this.grid = [ 2, Math.round( this.lng * 0.5 ) ]; + + this.h = ( this.grid[1] * this.bsize[1] ) + ( this.grid[1] * this.spaces[1] ); //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); + + this.c[1].textContent = ''; + //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); + this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1])+'px; border:none;' ); + + let n = 0, b, td, tr, sel; + + this.res = -1; + this.isDown = false; + this.neverlock = true; + + this.buttons = []; + this.stat = []; + this.tmpX = []; + this.tmpY = []; + + for( let i = 0; i < this.grid[1]; i++ ){ + + tr = this.c[2].insertRow(); + tr.style.cssText = 'pointer-events:none;'; + for( let j = 0; j < this.grid[0]; j++ ){ + + td = tr.insertCell(); + td.style.cssText = 'pointer-events:none;'; + + if( this.values[n] ){ + + sel = false; + if( this.values[n] === this.value && this.isSelectable ) sel = true; + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:'+this.bsize[0]+'px; height:'+(this.bsize[1]-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; left:auto; right:auto; border-radius:'+this.radius+'px;'; + b.style.background = sel ? cc.select : cc.button; + b.style.color = sel ? cc.textSelect : cc.text; + b.innerHTML = this.values[n]; + td.appendChild( b ); + + this.buttons.push(b); + this.stat.push(1); + + } else { + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + 'position:static; width:'+this.bsize[0]+'px; height:'+this.bsize[1]+'px; text-align:center; left:auto; right:auto; background:none;'; + td.appendChild( b ); + + } + + if(j===0) b.style.cssText += 'float:right;'; + else b.style.cssText += 'float:left;'; + + n++; + + } + } + + this.s[0].border = 'none'; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1; + + l.y += this.mtop; + + let tx = this.tmpX; + let ty = this.tmpY; + + let id = -1; + let c = -1; + let line = -1; + let i = this.grid[0]; + while( i-- ){ + if( l.x > tx[i][0] && l.x < tx[i][1] ) c = i; + } + + i = this.grid[1]; + while( i-- ){ + if( l.y > ty[i][0] && l.y < ty[i][1] ) line = i; + } + + if(c!==-1 && line!==-1){ + id = c + (line*2); + if(id>this.lng-1) id = -1; + } + + return id; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( !this.isDown ) return false + + this.isDown = false; + if( this.res !== -1 ){ + this.value = this.values[this.res]; + this.send(); + } + + return this.mousemove( e ) + + } + + mousedown ( e ) { + + if( this.isDown ) return false + this.isDown = true; + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + this.res = this.testZone( e ); + + if( this.res !== -1 ){ + this.cursor('pointer'); + up = this.modes( this.isDown ? 3 : 2, this.res ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + // MODE + // ----------------------- + + modes ( N = 1, id = -1 ) { + + let i = this.lng, w, n, r = false; + + while( i-- ){ + + n = N; + w = this.isSelectable ? this.values[ i ] === this.value : false; + + if( i === id ){ + if( w && n === 2 ) n = 3; + } else { + n = 1; + if( w ) n = 4; + } + + if( this.mode( n, i ) ) r = true; + + } + + return r + + } + + mode ( n, id ) { + + let change = false; + let cc = this.colors, s = this.buttons; + let i = id; + + if( this.stat[id] !== n ){ + + this.stat[id] = n; + + switch( n ){ + + case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; + case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; + case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; + case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; + + } + + change = true; + + } + + return change; + + } + + // ---------------------- + + reset () { + + this.res = -1; + this.cursor(); + return this.modes() + + } + + + label ( string, n ) { + + this.buttons[n].textContent = string; + + } + + icon ( string, y, n ) { + + this.buttons[n].style.padding = ( y || 0 ) +'px 0px'; + this.buttons[n].innerHTML = string; + + } + + testW () { + + let vw = this.spaces[0]*3 + this.bsizeMax*2, rz = false; + if( vw > this.w ) { + this.bsize[0] = ( this.w-(this.spaces[0]*3) ) * 0.5; + rz = true; + } else { + if( this.bsize[0] !== this.bsizeMax ) { + this.bsize[0] = this.bsizeMax; + rz = true; + } + } + + if( !rz ) return; + + let i = this.buttons.length; + while(i--) this.buttons[i].style.width = this.bsize[0] + 'px'; + + } + + rSize () { + + super.rSize(); + + this.testW(); + + let mid; + + this.tmpX = []; + this.tmpY = []; + + for( let j = 0; j < this.grid[0]; j++ ){ + + if(j===0){ + mid = ( this.w*0.5 ) - ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid-this.bsize[0], mid ] ); + } else { + mid = ( this.w*0.5 ) + ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid, mid+this.bsize[0] ] ); + } + + } + + mid = this.spaces[1]; + + for( let i = 0; i < this.grid[1]; i++ ){ + + this.tmpY.push( [ mid, mid + this.bsize[1] ] ); + mid += this.bsize[1] + this.spaces[1]; + + } + + } + + } - // Avisar al GUI y refrescar zonas - if (this.isUI && this.main) this.main.calc(); - Roots.needReZone = true; - } + class Pad2D extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + + //this.margin = 15; + this.pos = new V2(0,0); + this.maxPos = 90; + + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.min = o.min === undefined ? -1 : o.min; + this.max = o.max === undefined ? 1 : o.max; + + this.range = (this.max - this.min)*0.5; + + this.cmode = 0; + + + //console.log(this.range) + + this.c[0].style.display = 'block'; + + + + + + this.precision = o.precision === undefined ? 2 : o.precision; + + /*this.bounds = {}; + this.bounds.x1 = o.x1 || -1; + this.bounds.x2 = o.x2 || 1; + this.bounds.y1 = o.y1 || -1; + this.bounds.y2 = o.y2 || 1; + + this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); + this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); + + this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); + this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ + + this.value = ( Array.isArray( o.value ) && o.value.length == 2 ) ? o.value : [ 0, 0 ]; + + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w + 'px'; + + // Title + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + //this.top -= this.margin + + let cc = this.colors; + + + // Value + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+ ( this.h - 20 ) + 'px; width:100%; color:' + cc.text ); + this.c[2].textContent = this.value; + + // Pad + + let pad = this.getPad2d(); + + this.setSvg( pad, 'fill', cc.back, 0 ); + this.setSvg( pad, 'fill', cc.button, 1 ); + this.setSvg( pad, 'stroke', cc.back, 2 ); + this.setSvg( pad, 'stroke', cc.back, 3 ); + this.setSvg( pad, 'stroke', cc.text, 4 ); + + this.setSvg( pad, 'viewBox', '0 0 '+this.diam+' '+this.diam ); + this.setCss( pad, { width:this.diam, height:this.diam, left:0, top:this.top }); + + this.c[3] = pad; + + this.init(); + this.setValue(); + + } + + testZone ( e ) { + + let l = this.local; + + if( l.x === -1 && l.y === -1 ) return ''; + + + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'pad'; + + /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { + return 'pad'; + }*/ + + //return ''; + + } + + mouseup ( e ) { + + this.isDown = false; + return this.mode(0); + + } + + mousedown ( e ) { + + if ( this.testZone(e) === 'pad' ) { + + this.isDown = true; + this.mousemove( e ); + return this.mode(1); + } + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let x = (this.w*0.5) - ( e.clientX - this.zone.x ); + let y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + + let r = 256 / this.diam; + + x = -(x*r); + y = -(y*r); + + x = Tools.clamp( x, -this.maxPos, this.maxPos ); + y = Tools.clamp( y, -this.maxPos, this.maxPos ); + + //let x = e.clientX - this.zone.x; + //let y = e.clientY - this.zone.y - this.top; + + /*if( x < this.margin ) x = this.margin; + if( x > this.w - this.margin ) x = this.w - this.margin; + if( y < this.margin ) y = this.margin; + if( y > this.w - this.margin ) y = this.w - this.margin;*/ + + //console.log(x,y) + + this.setPos( [ x , y ] ); + + this.update( true ); + + } + + mode ( mode ) { + + if( this.cmode === mode ) return false; + + let cc = this.colors; + + switch( mode ){ + case 0: // base + + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.back, 0); + this.setSvg( this.c[3], 'fill', cc.button, 1); + this.setSvg( this.c[3], 'stroke', cc.back, 2); + this.setSvg( this.c[3], 'stroke', cc.back, 3); + this.setSvg( this.c[3], 'stroke', cc.text, 4 ); + + break; + case 1: // down + + this.s[2].color = cc.textSelect; + this.setSvg( this.c[3], 'fill', cc.backoff, 0); + this.setSvg( this.c[3], 'fill', cc.overoff, 1); + this.setSvg( this.c[3], 'stroke', cc.backoff, 2); + this.setSvg( this.c[3], 'stroke', cc.backoff, 3); + this.setSvg( this.c[3], 'stroke', cc.textSelect, 4 ); + + break; + } + + this.cmode = mode; + return true; + + + + } + + update ( up ) { + + //if( up === undefined ) up = true; + + this.c[2].textContent = this.value; + + this.updateSVG(); + + if( up ) this.send(); + + } + + updateSVG() { + + if ( this.model == 1 ) { + + this.setSvg( this.c[3], 'y1', this.pos.y, 2 ); + this.setSvg( this.c[3], 'y2', this.pos.y, 2 ); + + this.setSvg( this.c[3], 'x1', this.pos.x, 3 ); + this.setSvg( this.c[3], 'x2', this.pos.x, 3 ); + + } + + this.setSvg( this.c[3], 'cx', this.pos.x, 4 ); + this.setSvg( this.c[3], 'cy', this.pos.y, 4 ); + + } + + setPos ( p ) { + + //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; + + this.pos.set( p[0]+128 , p[1]+128 ); + + let r = 1/this.maxPos; + + this.value[0] = ((p[0]*r)*this.range).toFixed( this.precision ); + this.value[1] = ((p[1]*r)*this.range).toFixed( this.precision ); + + } + + setValue ( v, up = false ) { + + if( v === undefined ) v = this.value; + + /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; + if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; + if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; + if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ + + this.value[0] = Math.min( this.max, Math.max( this.min, v[0] ) ).toFixed( this.precision ) * 1; + this.value[1] = Math.min( this.max, Math.max( this.min, v[1] ) ).toFixed( this.precision ) * 1; + + this.pos.set( ((this.value[0]/this.range)*this.maxPos)+128 , ((this.value[1]/this.range)*this.maxPos)+128 ); + + //console.log(this.pos) + + this.update( up ); + + } + + /*lerp( s1, s2, d1, d2, c = true ) { + + let s = ( d2 - d1 ) / ( s2 - s1 ); + + return c ? ( v ) => { + return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 + } : ( v ) => { + return ( v - s1 ) * s + d1 + } + + }*/ + } - const add = function () { - let a = arguments; - let type, - o, - ref = false, - n = null; - if (typeof a[0] === 'string') { - type = a[0]; - o = a[1] || {}; - } else if (typeof a[0] === 'object') { - // like dat gui + // proto/TreeList.js + + class TreeList extends Proto { + constructor(o = {}) { + // API pública esperada: + // o.tree (obj/array), o.value (array) + // o.focused (bool), o.focusPath (array), o.focusLevel (number) + // o.tabIndex, o.itemIndex, o.onChange (fn) + o.selectable = true; + o.name = o.name || "TreeList"; + + super(o); + this.enableHover = o.enableHover !== false; + + // Datos & estado + this.tree = o.tree || {}; + this.value = Array.isArray(o.value) ? o.value.slice() : []; + this.focused = !!o.focused; + this.focusPath = Array.isArray(o.focusPath) ? o.focusPath.slice() : []; + this.focusLevel = typeof o.focusLevel === "number" ? o.focusLevel : -1; + + this.tabIndex = o.tabIndex ?? null; + this.itemIndex = o.itemIndex ?? null; + + // Callback + this.changeCb = + typeof o.onChange === "function" ? o.onChange : () => {}; + + // Layout interno / publicación de altura + this.lineH = this.h; // alto de UNA fila + this.levelGap = this.colors.sy || 2; // separación vertical entre niveles + this.leafMax = 0; // se calcula en rSize() + + // Modelo visual + this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] + this.itemsDom = []; // espejo DOM por nivel + this.hover = { level: -1, index: -1 }; + + // 🔸 NUEVO: recordar la última hoja seleccionada (persistente) + this.lastLeaf = { parentPath: [], key: null }; // parentPath es la ruta hasta el mapa padre + + // Contenedor interno (absoluto) + this.c[2] = this.dom( + "div", + this.css.basic + "left:0; top:0; width:100%; height:100%;" + ); + this.s[2] = this.c[2].style; + + this.init(); + + // Si el valor inicial ya apunta a una hoja válida, recordar esa hoja + this._maybeUpdateLastLeafFromValue(); + } + + // ======= Helpers de tipo ======= + static isMap(node) { + return node && typeof node === "object" && !Array.isArray(node); + } + static isList(node) { + return Array.isArray(node); + } + + // ======= Recorrido de datos ======= + getNodeAtPath(path) { + let node = this.tree; + for (let i = 0; i < path.length; i++) { + if (TreeList.isMap(node)) { + if (!Object.prototype.hasOwnProperty.call(node, path[i])) + return { node: null, depth: i }; + node = node[path[i]]; + } else if (TreeList.isList(node)) { + // Llegamos a una lista: ya no hay más claves válidas + if (i < path.length) return { node, depth: i }; + } else { + return { node: null, depth: i }; + } + } + return { node, depth: path.length }; + } + + // Autocompletar: baja por primeras claves de cada mapa hasta alcanzar una lista + autoCompleteToLeaf(basePath) { + let { node } = this.getNodeAtPath(basePath); + const path = basePath.slice(); + while (TreeList.isMap(node)) { + const keys = Object.keys(node); + if (!keys.length) break; + const k0 = keys[0]; + path.push(k0); + node = node[k0]; + } + // Si termina en lista, NO agrega un ítem final de la hoja + return path; + } + + // Ruta activa (focusPath si focused, sino value) + getActivePath() { + return this.focused ? this.focusPath : this.value; + } + + // ======= Tamaño de hoja máximo (para layout estable) ======= + computeLeafMax(node = this.tree) { + if (Array.isArray(node)) return node.length; + if (!node || typeof node !== "object") return 0; + let m = 0; + for (const k of Object.keys(node)) { + m = Math.max(m, this.computeLeafMax(node[k])); + } + return m; + } + + // ======= Construcción de niveles (modelo lógico) ======= + buildLevels() { + this.levels.length = 0; + const activePath = this.getActivePath(); + + let node = this.tree; + let level = 0; + + while (node) { + if (TreeList.isMap(node)) { + // Nivel intermedio: claves del mapa (horizontal) + const keys = Object.keys(node); + if (!keys.length) break; + this.levels.push({ + type: "map", + items: keys.map((k) => ({ + key: k, + label: k, + zone: { x: 0, y: 0, w: 0, h: 0 }, + })), + zone: { x: 0, y: 0, w: 0, h: this.lineH }, + }); + + const nextKey = activePath[level]; + if (!nextKey || !node.hasOwnProperty(nextKey)) break; + node = node[nextKey]; + } else if (TreeList.isList(node)) { + // Nivel hoja: lista vertical + const items = node.map((label) => ({ + key: label, + label, + zone: { x: 0, y: 0, w: 0, h: 0 }, + })); + const hList = Math.max(items.length, this.leafMax) * this.lineH; + this.levels.push({ + type: "list", + items, + zone: { x: 0, y: 0, w: 0, h: hList }, + }); + break; + } else { + break; + } + level++; + } + } + + // ======= Layout (zonas & DOM) ======= + layoutLevels() { + const contentX = (this.sa || 100) + 8; // columna de label + padding + const padRight = 8; + const w = this.zone.w - contentX - padRight; + + let y = 0; + + // Ajustar itemsDom a cantidad de niveles + while (this.itemsDom.length < this.levels.length) + this.itemsDom.push([]); + for (let L = this.levels.length; L < this.itemsDom.length; L++) { + for (const el of this.itemsDom[L]) + if (el && el.parentNode) el.parentNode.removeChild(el); + } + this.itemsDom.length = this.levels.length; + + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + if (lvl.type === "map") { + const n = Math.max(1, lvl.items.length); + const cellW = Math.floor(w / n); + lvl.zone = { x: contentX, y, w, h: this.lineH }; + let x = contentX; + for (let i = 0; i < lvl.items.length; i++) { + const it = lvl.items[i]; + it.zone = { x, y, w: cellW, h: this.lineH }; + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, "map"); + x += cellW; + } + // eliminar DOM sobrante si antes había más celdas + this._pruneRow(L, lvl.items.length); + y += this.lineH + this.levelGap; + } else { + // lista/hoja: reservar h según leafMax + const n = lvl.items.length; + const hList = Math.max(n, this.leafMax) * this.lineH; + lvl.zone = { x: contentX, y, w, h: hList }; + + const rows = Math.max(n, this.leafMax); + for (let i = 0; i < rows; i++) { + const isReal = i < n; + const it = isReal + ? lvl.items[i] + : { + key: null, + label: "", + zone: { x: 0, y: 0, w: 0, h: 0 }, + }; + it.zone = { + x: contentX, + y: y + i * this.lineH, + w, + h: this.lineH, + }; + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, "list", isReal); + } + // eliminar DOM sobrante si antes había más filas + this._pruneRow(L, rows); + y += hList; + } + } + + // Ajustes de alto interno del contenedor visual + const totalH = y; + this.zone.h = totalH + this.margin; + this.s[0].height = this.zone.h + "px"; + this.s[2].height = totalH + "px"; + + // Publicar alto total al GUI (sumará u.h) + this._publishHeight(); + } + + // Elimina nodos DOM sobrantes en la fila L a partir del índice keep + _pruneRow(L, keep) { + const row = this.itemsDom[L]; + if (!row) return; + for (let j = keep; j < row.length; j++) { + const el = row[j]; + if (el && el.parentNode) el.parentNode.removeChild(el); + } + row.length = keep; + } + + ensureItemDom(L, i) { + const row = this.itemsDom[L]; + while (row.length <= i) row.push(null); + if (!row[i]) { + const div = this.dom( + "div", + Tools.css.txt + "position:absolute; pointer-events:none;" + ); + this.c[2].appendChild(div); + row[i] = div; + } + return row[i]; + } + + paintItemDom(div, L, i, it, kind, isReal = true) { + const s = div.style; + const cc = this.colors; + + // Posición + s.left = it.zone.x + "px"; + s.top = it.zone.y + "px"; + s.width = it.zone.w + "px"; + s.height = it.zone.h - 2 + "px"; + + // Texto + div.textContent = isReal ? it.label : ""; + + // Estados + const selected = + isReal && this.value[L] !== undefined && this.value[L] === it.key; + const inFocusLvl = this.focused && this.focusLevel === L; + const focusMatch = isReal && inFocusLvl && this.focusPath[L] === it.key; + const isHover = + this.enableHover && + isReal && + this.hover.level === L && + this.hover.index === i; + + // 🔸 NUEVO: ¿esta fila es la última hoja seleccionada? + let isLastLeaf = false; + if (isReal && kind === "list" && this.lastLeaf.key != null) { + // La hoja visible corresponde si el padre de esta lista coincide con parentPath guardado + // El padre actual es this.value.slice(0, L) cuando la lista está desplegada por value/focus + const parentNow = this.getActivePath().slice(0, L); + if ( + this._pathsEqual(parentNow, this.lastLeaf.parentPath) && + it.key === this.lastLeaf.key + ) { + isLastLeaf = true; + } + } + + // Estilos base + s.background = cc.back; + s.color = cc.text; + s.border = "1px solid " + cc.border; + s.textAlign = kind === "map" ? "center" : "left"; + + // Prioridad visual: + // 1) seleccionado (azul) + // 2) última hoja (nuevo color) + // 3) foco + // 4) hover + if (selected) { + s.background = cc.select; + s.color = cc.textSelect; + } else if (isLastLeaf) { + // color distintivo para "última hoja" (amarillo suave) + s.background = "rgba(255, 200, 0, 0.25)"; + s.color = cc.text; + } else if (focusMatch) { + s.background = cc.backgroundOver; + s.color = cc.textOver; + } else if (isHover) { + s.background = cc.overoff; + s.color = cc.textOver; + } + + // Filas de padding invisibles en hoja + s.opacity = isReal ? "1" : "0"; + } + + _pathsEqual(a, b) { + if (!a || !b || a.length !== b.length) return false; + for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false; + return true; + } + + // ======= Ciclo de vida ======= + rSize() { + this.leafMax = this.computeLeafMax(this.tree); + this.buildLevels(); + this.layoutLevels(); + } + + update() { + this.buildLevels(); + this.layoutLevels(); + } + + // ======= Interacción ======= + _toLocal(e) { + const mx = e.clientX - this.zone.x; + const my = e.clientY - this.zone.y; + return { x: mx, y: my }; + } + + _hitTest(mx, my) { + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + const z = lvl.zone; // x y w ya incluyen contentX + + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) + continue; + + if (lvl.type === "map") { + for (let i = 0; i < lvl.items.length; i++) { + const itz = lvl.items[i].zone; + if ( + mx >= itz.x && + my >= itz.y && + mx <= itz.x + itz.w && + my <= itz.y + itz.h + ) { + return { L, i, real: true }; + } + } + } else { + const nRows = Math.max(lvl.items.length, this.leafMax); + for (let i = 0; i < nRows; i++) { + const isReal = i < lvl.items.length; + const itz = isReal + ? lvl.items[i].zone + : { + x: z.x, + y: z.y + i * this.lineH, + w: z.w, + h: this.lineH, + }; + if ( + mx >= itz.x && + my >= itz.y && + mx <= itz.x + itz.w && + my <= itz.y + itz.h + ) { + return { L, i, real: isReal }; + } + } + } + } + return { L: -1, i: -1, real: false }; + } + + handleEvent(e) { + if (this.lock) return false; + + if (e.type === "mousemove") { + // Si el hover está desactivado, no hay trabajo que hacer. + if (!this.enableHover) return false; + + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + + // nuevo hover calculado + const newHover = + ht.L !== -1 && ht.real + ? { level: ht.L, index: ht.i } + : { level: -1, index: -1 }; + // solo repintar si cambia realmente el hover + if ( + newHover.level === this.hover.level && + newHover.index === this.hover.index + ) + return false; + this.hover = newHover; + this.update(); + return true; + } + + if (e.type === "mousedown") { + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + if (ht.L !== -1 && ht.real) { + this._selectAt(ht.L, ht.i); + return true; // solo true si realmente se seleccionó algo + } + return false; + } + + if (e.type === "mouseup") { + return false; + } + + return false; + } + + // Selección + autocompletado + notificación + _selectAt(L, i) { + const lvl = this.levels[L]; + const chosen = lvl.items[i]; + if (!chosen || !chosen.key) return; + + const base = this.value.slice(0, L); + base[L] = chosen.key; + + const newPath = this.autoCompleteToLeaf(base); + + // 🔸 Si el usuario selecciona explícitamente en el nivel hoja, recordarlo + if (lvl.type === "list") { + this.lastLeaf.parentPath = this.value.slice(0, L); // padre de la lista actual + this.lastLeaf.key = chosen.key; + } + + this.value = newPath.slice(); + this.update(); + + // si está referenciado, propaga a objeto externo + this.send(newPath); + this.changeCb(this.tabIndex, this.itemIndex, newPath); + } + + // ======= API pública ======= + setValue(path) { + this.value = Array.isArray(path) ? path.slice() : []; + // Si desde afuera nos setean una hoja válida, también la recordamos + this._maybeUpdateLastLeafFromValue(); + this.update(); + } + + setTree(tree) { + this.tree = tree || {}; + this.leafMax = this.computeLeafMax(this.tree); + this.update(); + } + + setFocus({ focused, focusPath, focusLevel }) { + if (typeof focused === "boolean") this.focused = focused; + if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); + if (typeof focusLevel === "number") this.focusLevel = focusLevel; + this.update(); + } + + _maybeUpdateLastLeafFromValue() { + // Si value apunta a padre+hoja (…,[leaf]) y es válida, recordar esa hoja + if (!Array.isArray(this.value) || this.value.length === 0) return; + const parent = this.value.slice(0, this.value.length - 1); + const leaf = this.value[this.value.length - 1]; + const info = this.getNodeAtPath(parent); + if (info && Array.isArray(info.node) && info.node.includes(leaf)) { + this.lastLeaf = { parentPath: parent, key: leaf }; + } + } + + // ======= Publicación de altura ======= + _countVisibleIntermediates() { + let c = 0; + for (let i = 0; i < this.levels.length; i++) + if (this.levels[i].type === "map") c++; + return c; + } + + _getCurrentLeafLength() { + const last = this.levels[this.levels.length - 1]; + return last && last.type === "list" ? last.items.length : 0; + } + + _publishHeight() { + const inter = this._countVisibleIntermediates(); + const leafLen = Math.max(this.leafMax, this._getCurrentLeafLength()); + const leafH = leafLen * this.lineH; + const interH = inter * (this.lineH + this.levelGap); + const totalH = inter ? interH + this.levelGap + leafH : leafH; + + // Normalizamos a px enteros para evitar jitter por redondeo + const newH = Math.floor(totalH); + + // Actualizamos métricas locales siempre + this.h = newH; + this.zone.h = this.h + this.margin; + this.s[0].height = this.h + "px"; + + // Solo avisamos al GUI si la altura cambió + if (newH !== this._lastPublishedH) { + this._lastPublishedH = newH; + Roots.needReZone = true; + if (this.isUI && this.main) this.main.calc(); + } + } + } - ref = true; - if (a[2] === undefined) [].push.call(a, {}); - type = a[2].type ? a[2].type : autoType(a[0][a[1]], a[2]); - o = a[2]; - o.name = a[1]; - if (o.hasOwnProperty("displayName")) o.name = o.displayName; - if (type === 'list' && !o.list) { - o.list = a[0][a[1]]; - } else o.value = a[0][a[1]]; - } - let name = type.toLowerCase(); - if (name === 'group') { - o.add = add; - //o.dx = 8 - } - switch (name) { - case 'bool': - case 'boolean': - n = new Bool(o); - break; - case 'button': - n = new Button(o); - break; - case 'circular': - n = new Circular(o); - break; - case 'color': - n = new Color(o); - break; - case 'fps': - n = new Fps(o); - break; - case 'graph': - n = new Graph(o); - break; - case 'group': - n = new Group(o); - break; - case 'joystick': - n = new Joystick(o); - break; - case 'knob': - n = new Knob(o); - break; - case 'list': - n = new List(o); - break; - case 'numeric': - case 'number': - n = new Numeric(o); - break; - case 'slide': - n = new Slide(o); - break; - case 'textInput': - case 'string': - n = new TextInput(o); - break; - case 'title': - case 'text': - n = new Title(o); - break; - case 'select': - n = new Select(o); - break; - case 'bitmap': - n = new Bitmap(o); - break; - case 'selector': - n = new Selector(o); - break; - case 'empty': - case 'space': - n = new Empty(o); - break; - case 'item': - n = new Item(o); - break; - case 'grid': - n = new Grid(o); - break; - case 'pad2d': - case 'pad': - n = new Pad2D(o); - break; - case 'treelist': - n = new TreeList(o); - break; - } - if (n !== null) { - Roots.needResize = true; - if (ref) n.setReferency(a[0], a[1]); - return n; - } - }; - const autoType = function (v, o) { - let type = 'slide'; - if (typeof v === 'boolean') type = 'bool';else if (typeof v === 'string') { - if (v.substring(0, 1) === '#') type = 'color';else type = 'string'; - } else if (typeof v === 'number') { - if (o.ctype) type = 'color';else type = 'slide'; - } else if (typeof v === 'array' && v instanceof Array) { - if (typeof v[0] === 'number') type = 'number';else if (typeof v[0] === 'string') type = 'list'; - } else if (typeof v === 'object' && v instanceof Object) { - if (v.x !== undefined) type = 'number';else type = 'list'; - } - return type; + const add = function () { + + let a = arguments; + + let type, o, ref = false, n = null; + + if( typeof a[0] === 'string' ){ + + type = a[0]; + o = a[1] || {}; + + } else if ( typeof a[0] === 'object' ){ // like dat gui + + ref = true; + if( a[2] === undefined ) [].push.call(a, {}); + + type = a[2].type ? a[2].type : autoType( a[0][a[1]], a[2] ); + + o = a[2]; + o.name = a[1]; + if (o.hasOwnProperty("displayName")) o.name = o.displayName; + + if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } + else o.value = a[0][a[1]]; + + } + + let name = type.toLowerCase(); + + if( name === 'group' ){ + o.add = add; + //o.dx = 8 + } + + switch( name ){ + + case 'bool': case 'boolean': n = new Bool(o); break; + case 'button': n = new Button(o); break; + case 'circular': n = new Circular(o); break; + case 'color': n = new Color(o); break; + case 'fps': n = new Fps(o); break; + case 'graph': n = new Graph(o); break; + case 'group': n = new Group(o); break; + case 'joystick': n = new Joystick(o); break; + case 'knob': n = new Knob(o); break; + case 'list': n = new List(o); break; + case 'numeric': case 'number': n = new Numeric(o); break; + case 'slide': n = new Slide(o); break; + case 'textInput': case 'string': n = new TextInput(o); break; + case 'title': case 'text': n = new Title(o); break; + case 'select': n = new Select(o); break; + case 'bitmap': n = new Bitmap(o); break; + case 'selector': n = new Selector(o); break; + case 'empty': case 'space': n = new Empty(o); break; + case 'item': n = new Item(o); break; + case 'grid': n = new Grid(o); break; + case 'pad2d': case 'pad': n = new Pad2D(o); break; + case 'treelist': n = new TreeList(o); break; + + } + + + + if( n !== null ){ + + Roots.needResize = true; + + if( ref ) n.setReferency( a[0], a[1] ); + return n; + + } + + }; + + const autoType = function ( v, o ) { + + let type = 'slide'; + + if( typeof v === 'boolean' ) type = 'bool'; + else if( typeof v === 'string' ){ + + if( v.substring(0,1) === '#' ) type = 'color'; + else type = 'string'; + + } else if( typeof v === 'number' ){ + + if( o.ctype ) type = 'color'; + else type = 'slide'; + + } else if( typeof v === 'array' && v instanceof Array ){ + + if( typeof v[0] === 'number' ) type = 'number'; + else if( typeof v[0] === 'string' ) type = 'list'; + + } else if( typeof v === 'object' && v instanceof Object ){ + + if( v.x !== undefined ) type = 'number'; + else type = 'list'; + + } + + return type + }; - /** - * @author lth / https://github.com/lo-th - */ - - class Gui { - constructor(o = {}) { - this.isGui = true; - this.name = "gui"; - - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; - - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors);else this.colors = Tools.defineColor(o); - - //this.cleanning = false - - // style - this.css = Tools.cloneCss(); - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 - - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; - - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") ? o.addDOMEventListeners : true; - this.callback = o.callback === undefined ? null : o.callback; - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - this.cn = ""; - - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; - this.size.h = this.size.h < 11 ? 11 : this.size.h; - - // local mouse and zone - this.local = new V2().neg(); - this.zone = { - x: 0, - y: 0, - w: this.size.w, - h: 0 - }; - - // virtual mouse - this.mouse = new V2().neg(); - this.h = 0; - //this.prevY = -1; - this.sw = 0; - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); - - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; - this.autoResize = o.autoResize === undefined ? true : o.autoResize; - - // default position - this.isCenter = o.center || false; - this.cssGui = o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; - this.isNewTarget = false; - let cc = this.colors; - this.content = Tools.dom("div", this.css.basic + " width:0px; height:auto; top:0px; background:" + cc.content + "; " + this.cssGui); - this.innerContent = Tools.dom("div", this.css.basic + "width:100%; top:0; left:0; height:auto; overflow:hidden;"); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); - - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom("div", this.css.basic + flexible + "width:100%; left:0; "); - this.innerContent.appendChild(this.inner); - - // scroll - this.scrollBG = Tools.dom("div", this.css.basic + "right:0; top:0; width:" + (this.size.s - 1) + "px; height:10px; display:none; background:" + cc.background + ";"); - this.content.appendChild(this.scrollBG); - this.scroll = Tools.dom("div", this.css.basic + "background:" + cc.button + "; right:2px; top:0; width:" + (this.size.s - 4) + "px; height:10px;"); - this.scrollBG.appendChild(this.scroll); - - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; - let r = cc.radius; - this.bottom = Tools.dom("div", this.css.txt + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + r + "px; border-bottom-left-radius:" + r + "px; justify-content:center; height:" + this.bh + "px; line-height:" + (this.bh - 5) + "px; color:" + cc.text + ";"); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen ? this.bottomText[1] : this.bottomText[0]; - this.bottom.style.background = cc.background; - - // - - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } - if (this.parent !== null) this.parent.appendChild(this.content); - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } - - // height transition - this.transition = o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - this.setWidth(); - if (this.isCanvas) this.makeCanvas(); - Roots.add(this); - } - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN - }); - } - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN - }); - } - triggerMouseUp(x, y) { - /* - clientX,clientY are no used when isCanvas==true - */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN - }); - } - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); - Roots.needReZone = true; - } - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = "height " + this.transition + "s ease-out"; - this.content.style.transition = "height " + this.transition + "s ease-out"; - this.bottom.style.transition = "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } - - // ---------------------- - // CANVAS - // ---------------------- - - onDraw() {} - makeCanvas() { - this.canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - - //console.log( this.canvas.width, this.canvas.height ) - } - draw(force) { - if (this.canvas === null) return; - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } - - ////// - - getDom() { - return this.content; - } - noMouse() { - this.mouse.neg(); - } - setMouse(uv, flip = true) { - if (flip) this.mouse.set(Math.round(uv.x * this.canvas.width), this.canvas.height - Math.round(uv.y * this.canvas.height));else this.mouse.set(Math.round(uv.x * this.canvas.width), Math.round(uv.y * this.canvas.height)); - //this.mouse.set( m.x, m.y ); - - //console.log("setMouse "+uv.x+" "+uv.y) - } - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } - onChange(f) { - this.callback = f || null; - return this; - } - - // ---------------------- - // STYLES - // ---------------------- - - mode(n) { - let needChange = false; - let cc = this.colors; - if (n !== this.cn) { - this.cn = n; - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } - needChange = true; - } - return needChange; - } - - // ---------------------- - // TARGET - // ---------------------- - - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } - this.proto = null; - this.current = -1; - - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - - Roots.cursor(); - return true; - } - - // ---------------------- - // ZONE TEST - // ---------------------- - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - this.isReset = false; - let name = ""; - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom";else name = l.x > s ? "scroll" : "content"; - return name; - } - - // ---------------------- - // EVENTS - // ---------------------- - - handleEvent(e) { - //if( this.cleanning ) return - - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; - let change = false; - let protoChange = false; - let name = this.testZone(e); - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } - if (!name) return; - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - if (Roots.isMobile && type === "mousedown") this.getNext(e, change); - if (this.proto) protoChange = this.proto.handleEvent(e); - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) change = this.onWheel(e); - if (!Roots.lock) { - this.getNext(e, change); - } - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen ? this.bottomText[1] : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); - break; - } - if (this.isDown) change = true; - if (protoChange) change = true; - if (type === "keyup") change = true; - if (type === "keydown") change = true; - if (change) this.draw(); - } - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); - if (next !== this.current) { - this.clearTarget(); - this.current = next; - this.isNewTarget = true; - } - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } - - // ---------------------- - // RESET - // ---------------------- - - reset(force) { - if (this.isReset) return; - - //this.resetItem(); - - this.mouse.neg(); - this.isDown = false; - - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); - if (r || r2) this.draw(true); - this.isReset = true; - - //Roots.lock = false; - } - - // ---------------------- - // ADD NODE - // ---------------------- - - add() { - //if(this.cleanning) this.cleanning = false - - let a = arguments; - let ontop = false; - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { - isUI: true, - main: this - });else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } - let u = add.apply(this, a); - if (u === null) return; - if (ontop) this.uis.unshift(u);else this.uis.push(u); - this.calc(); - this.isEmpty = false; - return u; - } - - // remove one node - - remove(n) { - if (n.dispose) n.dispose(); - } - - // call after uis clear - - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } - - // clear all gui - - empty() { - //this.cleanning = true - - //this.close(); - - let i = this.uis.length, - item; - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } - this.uis = []; - this.isEmpty = true; - this.calc(); - } - clear() { - this.empty(); - } - clear2() { - setTimeout(this.empty.bind(this), 0); - } - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } - - // ---------------------- - // ITEMS SPECIAL - // ---------------------- - - resetItem() { - if (!this.isItemMode) return; - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } - setItem(name) { - if (!this.isItemMode) return; - name = name || ""; - this.resetItem(); - if (!name) { - this.update(0); - return; - } - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } - - // ---------------------- - // SCROLL - // ---------------------- - - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; - if (b) { - this.total = this.h; - this.maxView = this.maxHeight; - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; - this.range = this.maxView - this.sh; - this.oy = Tools.clamp(this.oy, 0, this.range); - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } - update(y) { - y = Tools.clamp(y, 0, this.range); - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } - - // ---------------------- - // RESIZE FUNCTION - // ---------------------- - - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } - setHeight() { - if (this.tmp) clearTimeout(this.tmp); - this.zone.h = this.bh; - this.isScroll = false; - if (this.isOpen) { - this.h = this.calcUis(); - let hhh = this.forceHeight ? this.forceHeight + this.zone.y : window.innerHeight; - this.maxHeight = hhh - this.zone.y - this.bh; - let diff = this.h - this.maxHeight; - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } - this.upScroll(this.isScroll); - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; - if (this.forceHeight && this.lockHeight) this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } - rezone() { - Roots.needReZone = true; - } - setWidth(w) { - if (w) this.zone.w = w; - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } + /** + * @author lth / https://github.com/lo-th + */ + + class Gui { + constructor(o = {}) { + this.isGui = true; + + this.name = "gui"; + + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; + + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); + + //this.cleanning = false + + // style + this.css = Tools.cloneCss(); + + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 + + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; + + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; + + this.callback = o.callback === undefined ? null : o.callback; + + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; + + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + + this.cn = ""; + + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; + + this.size.h = this.size.h < 11 ? 11 : this.size.h; + + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + + // virtual mouse + this.mouse = new V2().neg(); + + this.h = 0; + //this.prevY = -1; + this.sw = 0; + + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); + + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; + + this.autoResize = o.autoResize === undefined ? true : o.autoResize; + + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; + + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; + + this.isNewTarget = false; + + let cc = this.colors; + + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); + + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); + + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); + + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); + + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); + + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; + + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } + + if (this.parent !== null) this.parent.appendChild(this.content); + + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } + + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + + this.setWidth(); + + if (this.isCanvas) this.makeCanvas(); + + Roots.add(this); + } + + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseUp(x, y) { + /* + + clientX,clientY are no used when isCanvas==true + */ + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); + + Roots.needReZone = true; + } + + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } + + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } + + // ---------------------- + // CANVAS + // ---------------------- + + onDraw() {} + + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + + //console.log( this.canvas.width, this.canvas.height ) + } + + draw(force) { + if (this.canvas === null) return; + + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } + + ////// + + getDom() { + return this.content; + } + + noMouse() { + this.mouse.neg(); + } + + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); + + //console.log("setMouse "+uv.x+" "+uv.y) + } + + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } + + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } + + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } + + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } + + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } + + onChange(f) { + this.callback = f || null; + return this; + } + + // ---------------------- + // STYLES + // ---------------------- + + mode(n) { + let needChange = false; + let cc = this.colors; + + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } + + needChange = true; + } + + return needChange; + } + + // ---------------------- + // TARGET + // ---------------------- + + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + + this.proto = null; + this.current = -1; + + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + + Roots.cursor(); + return true; + } + + // ---------------------- + // ZONE TEST + // ---------------------- + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + this.isReset = false; + + let name = ""; + + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; + + return name; + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent(e) { + //if( this.cleanning ) return + + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; + + let change = false; + let protoChange = false; + + let name = this.testZone(e); + + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; + + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } + + if (!name) return; + + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); + + if (this.proto) protoChange = this.proto.handleEvent(e); + + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); + + if (!Roots.lock) { + this.getNext(e, change); + } + + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } + + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + + break; + } + + if (this.isDown) change = true; + if (protoChange) change = true; + + if (type === "keyup") change = true; + if (type === "keydown") change = true; + + if (change) this.draw(); + } + + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); + + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } + + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } + + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } + + // ---------------------- + // RESET + // ---------------------- + + reset(force) { + if (this.isReset) return; + + //this.resetItem(); + + this.mouse.neg(); + this.isDown = false; + + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); + + if (r || r2) this.draw(true); + + this.isReset = true; + + //Roots.lock = false; + } + + // ---------------------- + // ADD NODE + // ---------------------- + + add() { + //if(this.cleanning) this.cleanning = false + + let a = arguments; + let ontop = false; + + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; + + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } + + let u = add.apply(this, a); + + if (u === null) return; + + if (ontop) this.uis.unshift(u); + else this.uis.push(u); + + this.calc(); + + this.isEmpty = false; + + return u; + } + + // remove one node + + remove(n) { + if (n.dispose) n.dispose(); + } + + // call after uis clear + + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } + + // clear all gui + + empty() { + //this.cleanning = true + + //this.close(); + + let i = this.uis.length, + item; + + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } + + this.uis = []; + this.isEmpty = true; + this.calc(); + } + + clear() { + this.empty(); + } + + clear2() { + setTimeout(this.empty.bind(this), 0); + } + + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } + + // ---------------------- + // ITEMS SPECIAL + // ---------------------- + + resetItem() { + if (!this.isItemMode) return; + + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } + + setItem(name) { + if (!this.isItemMode) return; + + name = name || ""; + this.resetItem(); + + if (!name) { + this.update(0); + return; + } + + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } + + // ---------------------- + // SCROLL + // ---------------------- + + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; + + if (b) { + this.total = this.h; + + this.maxView = this.maxHeight; + + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; + + this.range = this.maxView - this.sh; + + this.oy = Tools.clamp(this.oy, 0, this.range); + + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } + + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } + + update(y) { + y = Tools.clamp(y, 0, this.range); + + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } + + // ---------------------- + // RESIZE FUNCTION + // ---------------------- + + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } + + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } + + setHeight() { + if (this.tmp) clearTimeout(this.tmp); + + this.zone.h = this.bh; + this.isScroll = false; + + if (this.isOpen) { + this.h = this.calcUis(); + + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; + + this.maxHeight = hhh - this.zone.y - this.bh; + + let diff = this.h - this.maxHeight; + + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + + this.upScroll(this.isScroll); + + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + + rezone() { + Roots.needReZone = true; + } + + setWidth(w) { + if (w) this.zone.w = w; + + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } } exports.Files = Files; @@ -7729,3 +9612,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvcHJvdG8vVHJlZUxpc3QuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gXCIuLi9jb3JlL1Jvb3RzLmpzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcblx0Y29uc3RydWN0b3IobyA9IHt9KSB7XHJcblx0XHQvLyBBUEkgcMO6YmxpY2EgZXNwZXJhZGE6XHJcblx0XHQvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KVxyXG5cdFx0Ly8gby5mb2N1c2VkIChib29sKSwgby5mb2N1c1BhdGggKGFycmF5KSwgby5mb2N1c0xldmVsIChudW1iZXIpXHJcblx0XHQvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcblx0XHRvLnNlbGVjdGFibGUgPSB0cnVlO1xyXG5cdFx0by5uYW1lID0gby5uYW1lIHx8IFwiVHJlZUxpc3RcIjtcclxuXHJcblx0XHRzdXBlcihvKTtcclxuXHRcdHRoaXMuZW5hYmxlSG92ZXIgPSBvLmVuYWJsZUhvdmVyICE9PSBmYWxzZTtcclxuXHJcblx0XHQvLyBEYXRvcyAmIGVzdGFkb1xyXG5cdFx0dGhpcy50cmVlID0gby50cmVlIHx8IHt9O1xyXG5cdFx0dGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNlZCA9ICEhby5mb2N1c2VkO1xyXG5cdFx0dGhpcy5mb2N1c1BhdGggPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09IFwibnVtYmVyXCIgPyBvLmZvY3VzTGV2ZWwgOiAtMTtcclxuXHJcblx0XHR0aGlzLnRhYkluZGV4ID0gby50YWJJbmRleCA/PyBudWxsO1xyXG5cdFx0dGhpcy5pdGVtSW5kZXggPSBvLml0ZW1JbmRleCA/PyBudWxsO1xyXG5cclxuXHRcdC8vIENhbGxiYWNrXHJcblx0XHR0aGlzLmNoYW5nZUNiID1cclxuXHRcdFx0dHlwZW9mIG8ub25DaGFuZ2UgPT09IFwiZnVuY3Rpb25cIiA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcblx0XHQvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuXHRcdHRoaXMubGluZUggPSB0aGlzLmg7IC8vIGFsdG8gZGUgVU5BIGZpbGFcclxuXHRcdHRoaXMubGV2ZWxHYXAgPSB0aGlzLmNvbG9ycy5zeSB8fCAyOyAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcblx0XHR0aGlzLmxlYWZNYXggPSAwOyAvLyBzZSBjYWxjdWxhIGVuIHJTaXplKClcclxuXHJcblx0XHQvLyBNb2RlbG8gdmlzdWFsXHJcblx0XHR0aGlzLmxldmVscyA9IFtdOyAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuXHRcdHRoaXMuaXRlbXNEb20gPSBbXTsgLy8gZXNwZWpvIERPTSBwb3Igbml2ZWxcclxuXHRcdHRoaXMuaG92ZXIgPSB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogcmVjb3JkYXIgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYSAocGVyc2lzdGVudGUpXHJcblx0XHR0aGlzLmxhc3RMZWFmID0geyBwYXJlbnRQYXRoOiBbXSwga2V5OiBudWxsIH07IC8vIHBhcmVudFBhdGggZXMgbGEgcnV0YSBoYXN0YSBlbCBtYXBhIHBhZHJlXHJcblxyXG5cdFx0Ly8gQ29udGVuZWRvciBpbnRlcm5vIChhYnNvbHV0bylcclxuXHRcdHRoaXMuY1syXSA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcImRpdlwiLFxyXG5cdFx0XHR0aGlzLmNzcy5iYXNpYyArIFwibGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7XCJcclxuXHRcdCk7XHJcblx0XHR0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG5cdFx0dGhpcy5pbml0KCk7XHJcblxyXG5cdFx0Ly8gU2kgZWwgdmFsb3IgaW5pY2lhbCB5YSBhcHVudGEgYSB1bmEgaG9qYSB2w6FsaWRhLCByZWNvcmRhciBlc2EgaG9qYVxyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG5cdHN0YXRpYyBpc01hcChub2RlKSB7XHJcblx0XHRyZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblx0c3RhdGljIGlzTGlzdChub2RlKSB7XHJcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUmVjb3JyaWRvIGRlIGRhdG9zID09PT09PT1cclxuXHRnZXROb2RlQXRQYXRoKHBhdGgpIHtcclxuXHRcdGxldCBub2RlID0gdGhpcy50cmVlO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIHBhdGhbaV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuXHRcdFx0XHRub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBMbGVnYW1vcyBhIHVuYSBsaXN0YTogeWEgbm8gaGF5IG3DoXMgY2xhdmVzIHbDoWxpZGFzXHJcblx0XHRcdFx0aWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuXHR9XHJcblxyXG5cdC8vIEF1dG9jb21wbGV0YXI6IGJhamEgcG9yIHByaW1lcmFzIGNsYXZlcyBkZSBjYWRhIG1hcGEgaGFzdGEgYWxjYW56YXIgdW5hIGxpc3RhXHJcblx0YXV0b0NvbXBsZXRlVG9MZWFmKGJhc2VQYXRoKSB7XHJcblx0XHRsZXQgeyBub2RlIH0gPSB0aGlzLmdldE5vZGVBdFBhdGgoYmFzZVBhdGgpO1xyXG5cdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLnNsaWNlKCk7XHJcblx0XHR3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG5cdFx0XHRpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuXHRcdFx0Y29uc3QgazAgPSBrZXlzWzBdO1xyXG5cdFx0XHRwYXRoLnB1c2goazApO1xyXG5cdFx0XHRub2RlID0gbm9kZVtrMF07XHJcblx0XHR9XHJcblx0XHQvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2EgdW4gw610ZW0gZmluYWwgZGUgbGEgaG9qYVxyXG5cdFx0cmV0dXJuIHBhdGg7XHJcblx0fVxyXG5cclxuXHQvLyBSdXRhIGFjdGl2YSAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpbm8gdmFsdWUpXHJcblx0Z2V0QWN0aXZlUGF0aCgpIHtcclxuXHRcdHJldHVybiB0aGlzLmZvY3VzZWQgPyB0aGlzLmZvY3VzUGF0aCA6IHRoaXMudmFsdWU7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFRhbWHDsW8gZGUgaG9qYSBtw6F4aW1vIChwYXJhIGxheW91dCBlc3RhYmxlKSA9PT09PT09XHJcblx0Y29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBub2RlLmxlbmd0aDtcclxuXHRcdGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIDA7XHJcblx0XHRsZXQgbSA9IDA7XHJcblx0XHRmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcclxuXHRcdFx0bSA9IE1hdGgubWF4KG0sIHRoaXMuY29tcHV0ZUxlYWZNYXgobm9kZVtrXSkpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG07XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IENvbnN0cnVjY2nDs24gZGUgbml2ZWxlcyAobW9kZWxvIGzDs2dpY28pID09PT09PT1cclxuXHRidWlsZExldmVscygpIHtcclxuXHRcdHRoaXMubGV2ZWxzLmxlbmd0aCA9IDA7XHJcblx0XHRjb25zdCBhY3RpdmVQYXRoID0gdGhpcy5nZXRBY3RpdmVQYXRoKCk7XHJcblxyXG5cdFx0bGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcblx0XHRsZXQgbGV2ZWwgPSAwO1xyXG5cclxuXHRcdHdoaWxlIChub2RlKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdC8vIE5pdmVsIGludGVybWVkaW86IGNsYXZlcyBkZWwgbWFwYSAoaG9yaXpvbnRhbClcclxuXHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcblx0XHRcdFx0aWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcblx0XHRcdFx0dGhpcy5sZXZlbHMucHVzaCh7XHJcblx0XHRcdFx0XHR0eXBlOiBcIm1hcFwiLFxyXG5cdFx0XHRcdFx0aXRlbXM6IGtleXMubWFwKChrKSA9PiAoe1xyXG5cdFx0XHRcdFx0XHRrZXk6IGssXHJcblx0XHRcdFx0XHRcdGxhYmVsOiBrLFxyXG5cdFx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAgfSxcclxuXHRcdFx0XHRcdH0pKSxcclxuXHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogdGhpcy5saW5lSCB9LFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcblx0XHRcdFx0aWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuXHRcdFx0XHRub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAoKGxhYmVsKSA9PiAoe1xyXG5cdFx0XHRcdFx0a2V5OiBsYWJlbCxcclxuXHRcdFx0XHRcdGxhYmVsLFxyXG5cdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuXHRcdFx0XHR0aGlzLmxldmVscy5wdXNoKHtcclxuXHRcdFx0XHRcdHR5cGU6IFwibGlzdFwiLFxyXG5cdFx0XHRcdFx0aXRlbXMsXHJcblx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IGhMaXN0IH0sXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV2ZWwrKztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gTGF5b3V0ICh6b25hcyAmIERPTSkgPT09PT09PVxyXG5cdGxheW91dExldmVscygpIHtcclxuXHRcdGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7IC8vIGNvbHVtbmEgZGUgbGFiZWwgKyBwYWRkaW5nXHJcblx0XHRjb25zdCBwYWRSaWdodCA9IDg7XHJcblx0XHRjb25zdCB3ID0gdGhpcy56b25lLncgLSBjb250ZW50WCAtIHBhZFJpZ2h0O1xyXG5cclxuXHRcdGxldCB5ID0gMDtcclxuXHJcblx0XHQvLyBBanVzdGFyIGl0ZW1zRG9tIGEgY2FudGlkYWQgZGUgbml2ZWxlc1xyXG5cdFx0d2hpbGUgKHRoaXMuaXRlbXNEb20ubGVuZ3RoIDwgdGhpcy5sZXZlbHMubGVuZ3RoKVxyXG5cdFx0XHR0aGlzLml0ZW1zRG9tLnB1c2goW10pO1xyXG5cdFx0Zm9yIChsZXQgTCA9IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCA8IHRoaXMuaXRlbXNEb20ubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiB0aGlzLml0ZW1zRG9tW0xdKVxyXG5cdFx0XHRcdGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuXHRcdFx0XHRjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cdFx0XHRcdGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG5cdFx0XHRcdGxldCB4ID0gY29udGVudFg7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0XHRcdFx0aXQuem9uZSA9IHsgeCwgeSwgdzogY2VsbFcsIGg6IHRoaXMubGluZUggfTtcclxuXHRcdFx0XHRcdGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuXHRcdFx0XHRcdHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsIFwibWFwXCIpO1xyXG5cdFx0XHRcdFx0eCArPSBjZWxsVztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG5cdFx0XHRcdHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG5cdFx0XHRcdGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcblx0XHRcdFx0bHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuXHRcdFx0XHRjb25zdCByb3dzID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNSZWFsID0gaSA8IG47XHJcblx0XHRcdFx0XHRjb25zdCBpdCA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXVxyXG5cdFx0XHRcdFx0XHQ6IHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTogbnVsbCxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0XHRcdCAgfTtcclxuXHRcdFx0XHRcdGl0LnpvbmUgPSB7XHJcblx0XHRcdFx0XHRcdHg6IGNvbnRlbnRYLFxyXG5cdFx0XHRcdFx0XHR5OiB5ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdHcsXHJcblx0XHRcdFx0XHRcdGg6IHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Y29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG5cdFx0XHRcdFx0dGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgXCJsaXN0XCIsIGlzUmVhbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBmaWxhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIHJvd3MpO1xyXG5cdFx0XHRcdHkgKz0gaExpc3Q7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBBanVzdGVzIGRlIGFsdG8gaW50ZXJubyBkZWwgY29udGVuZWRvciB2aXN1YWxcclxuXHRcdGNvbnN0IHRvdGFsSCA9IHk7XHJcblx0XHR0aGlzLnpvbmUuaCA9IHRvdGFsSCArIHRoaXMubWFyZ2luO1xyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG5cdFx0dGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArIFwicHhcIjtcclxuXHJcblx0XHQvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcblx0XHR0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcblx0fVxyXG5cclxuXHQvLyBFbGltaW5hIG5vZG9zIERPTSBzb2JyYW50ZXMgZW4gbGEgZmlsYSBMIGEgcGFydGlyIGRlbCDDrW5kaWNlIGtlZXBcclxuXHRfcHJ1bmVSb3coTCwga2VlcCkge1xyXG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuXHRcdGlmICghcm93KSByZXR1cm47XHJcblx0XHRmb3IgKGxldCBqID0ga2VlcDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRjb25zdCBlbCA9IHJvd1tqXTtcclxuXHRcdFx0aWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG5cdFx0fVxyXG5cdFx0cm93Lmxlbmd0aCA9IGtlZXA7XHJcblx0fVxyXG5cclxuXHRlbnN1cmVJdGVtRG9tKEwsIGkpIHtcclxuXHRcdGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcblx0XHR3aGlsZSAocm93Lmxlbmd0aCA8PSBpKSByb3cucHVzaChudWxsKTtcclxuXHRcdGlmICghcm93W2ldKSB7XHJcblx0XHRcdGNvbnN0IGRpdiA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcdFwiZGl2XCIsXHJcblx0XHRcdFx0VG9vbHMuY3NzLnR4dCArIFwicG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7XCJcclxuXHRcdFx0KTtcclxuXHRcdFx0dGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcblx0XHRcdHJvd1tpXSA9IGRpdjtcclxuXHRcdH1cclxuXHRcdHJldHVybiByb3dbaV07XHJcblx0fVxyXG5cclxuXHRwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG5cdFx0Y29uc3QgcyA9IGRpdi5zdHlsZTtcclxuXHRcdGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG5cdFx0Ly8gUG9zaWNpw7NuXHJcblx0XHRzLmxlZnQgPSBpdC56b25lLnggKyBcInB4XCI7XHJcblx0XHRzLnRvcCA9IGl0LnpvbmUueSArIFwicHhcIjtcclxuXHRcdHMud2lkdGggPSBpdC56b25lLncgKyBcInB4XCI7XHJcblx0XHRzLmhlaWdodCA9IGl0LnpvbmUuaCAtIDIgKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gVGV4dG9cclxuXHRcdGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogXCJcIjtcclxuXHJcblx0XHQvLyBFc3RhZG9zXHJcblx0XHRjb25zdCBzZWxlY3RlZCA9XHJcblx0XHRcdGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG5cdFx0Y29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiB0aGlzLmZvY3VzTGV2ZWwgPT09IEw7XHJcblx0XHRjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgdGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleTtcclxuXHRcdGNvbnN0IGlzSG92ZXIgPVxyXG5cdFx0XHR0aGlzLmVuYWJsZUhvdmVyICYmXHJcblx0XHRcdGlzUmVhbCAmJlxyXG5cdFx0XHR0aGlzLmhvdmVyLmxldmVsID09PSBMICYmXHJcblx0XHRcdHRoaXMuaG92ZXIuaW5kZXggPT09IGk7XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogwr9lc3RhIGZpbGEgZXMgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYT9cclxuXHRcdGxldCBpc0xhc3RMZWFmID0gZmFsc2U7XHJcblx0XHRpZiAoaXNSZWFsICYmIGtpbmQgPT09IFwibGlzdFwiICYmIHRoaXMubGFzdExlYWYua2V5ICE9IG51bGwpIHtcclxuXHRcdFx0Ly8gTGEgaG9qYSB2aXNpYmxlIGNvcnJlc3BvbmRlIHNpIGVsIHBhZHJlIGRlIGVzdGEgbGlzdGEgY29pbmNpZGUgY29uIHBhcmVudFBhdGggZ3VhcmRhZG9cclxuXHRcdFx0Ly8gRWwgcGFkcmUgYWN0dWFsIGVzIHRoaXMudmFsdWUuc2xpY2UoMCwgTCkgY3VhbmRvIGxhIGxpc3RhIGVzdMOhIGRlc3BsZWdhZGEgcG9yIHZhbHVlL2ZvY3VzXHJcblx0XHRcdGNvbnN0IHBhcmVudE5vdyA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpLnNsaWNlKDAsIEwpO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5fcGF0aHNFcXVhbChwYXJlbnROb3csIHRoaXMubGFzdExlYWYucGFyZW50UGF0aCkgJiZcclxuXHRcdFx0XHRpdC5rZXkgPT09IHRoaXMubGFzdExlYWYua2V5XHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGlzTGFzdExlYWYgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRXN0aWxvcyBiYXNlXHJcblx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG5cdFx0cy5jb2xvciA9IGNjLnRleHQ7XHJcblx0XHRzLmJvcmRlciA9IFwiMXB4IHNvbGlkIFwiICsgY2MuYm9yZGVyO1xyXG5cdFx0cy50ZXh0QWxpZ24gPSBraW5kID09PSBcIm1hcFwiID8gXCJjZW50ZXJcIiA6IFwibGVmdFwiO1xyXG5cclxuXHRcdC8vIFByaW9yaWRhZCB2aXN1YWw6XHJcblx0XHQvLyAxKSBzZWxlY2Npb25hZG8gKGF6dWwpXHJcblx0XHQvLyAyKSDDumx0aW1hIGhvamEgKG51ZXZvIGNvbG9yKVxyXG5cdFx0Ly8gMykgZm9jb1xyXG5cdFx0Ly8gNCkgaG92ZXJcclxuXHRcdGlmIChzZWxlY3RlZCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG5cdFx0fSBlbHNlIGlmIChpc0xhc3RMZWFmKSB7XHJcblx0XHRcdC8vIGNvbG9yIGRpc3RpbnRpdm8gcGFyYSBcIsO6bHRpbWEgaG9qYVwiIChhbWFyaWxsbyBzdWF2ZSlcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gXCJyZ2JhKDI1NSwgMjAwLCAwLCAwLjI1KVwiO1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dDtcclxuXHRcdH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG5cdFx0fSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG5cdFx0cy5vcGFjaXR5ID0gaXNSZWFsID8gXCIxXCIgOiBcIjBcIjtcclxuXHR9XHJcblxyXG5cdF9wYXRoc0VxdWFsKGEsIGIpIHtcclxuXHRcdGlmICghYSB8fCAhYiB8fCBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuXHRyU2l6ZSgpIHtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuXHRcdHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGUoKSB7XHJcblx0XHR0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcblx0XHR0aGlzLmxheW91dExldmVscygpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG5cdF90b0xvY2FsKGUpIHtcclxuXHRcdGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblx0XHRjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG5cdFx0cmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcblx0fVxyXG5cclxuXHRfaGl0VGVzdChteCwgbXkpIHtcclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGNvbnN0IHogPSBsdmwuem9uZTsgLy8geCB5IHcgeWEgaW5jbHV5ZW4gY29udGVudFhcclxuXHJcblx0XHRcdGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0bXggPj0gaXR6LnggJiZcclxuXHRcdFx0XHRcdFx0bXkgPj0gaXR6LnkgJiZcclxuXHRcdFx0XHRcdFx0bXggPD0gaXR6LnggKyBpdHoudyAmJlxyXG5cdFx0XHRcdFx0XHRteSA8PSBpdHoueSArIGl0ei5oXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuXHRcdFx0XHRcdGNvbnN0IGl0eiA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXS56b25lXHJcblx0XHRcdFx0XHRcdDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0eDogei54LFxyXG5cdFx0XHRcdFx0XHRcdFx0eTogei55ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdFx0XHR3OiB6LncsXHJcblx0XHRcdFx0XHRcdFx0XHRoOiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHQgIH07XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdG14ID49IGl0ei54ICYmXHJcblx0XHRcdFx0XHRcdG15ID49IGl0ei55ICYmXHJcblx0XHRcdFx0XHRcdG14IDw9IGl0ei54ICsgaXR6LncgJiZcclxuXHRcdFx0XHRcdFx0bXkgPD0gaXR6LnkgKyBpdHouaFxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IEwsIGksIHJlYWw6IGlzUmVhbCB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgTDogLTEsIGk6IC0xLCByZWFsOiBmYWxzZSB9O1xyXG5cdH1cclxuXHJcblx0aGFuZGxlRXZlbnQoZSkge1xyXG5cdFx0aWYgKHRoaXMubG9jaykgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcclxuXHRcdFx0Ly8gU2kgZWwgaG92ZXIgZXN0w6EgZGVzYWN0aXZhZG8sIG5vIGhheSB0cmFiYWpvIHF1ZSBoYWNlci5cclxuXHRcdFx0aWYgKCF0aGlzLmVuYWJsZUhvdmVyKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHJcblx0XHRcdC8vIG51ZXZvIGhvdmVyIGNhbGN1bGFkb1xyXG5cdFx0XHRjb25zdCBuZXdIb3ZlciA9XHJcblx0XHRcdFx0aHQuTCAhPT0gLTEgJiYgaHQucmVhbFxyXG5cdFx0XHRcdFx0PyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9XHJcblx0XHRcdFx0XHQ6IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHRcdFx0Ly8gc29sbyByZXBpbnRhciBzaSBjYW1iaWEgcmVhbG1lbnRlIGVsIGhvdmVyXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRuZXdIb3Zlci5sZXZlbCA9PT0gdGhpcy5ob3Zlci5sZXZlbCAmJlxyXG5cdFx0XHRcdG5ld0hvdmVyLmluZGV4ID09PSB0aGlzLmhvdmVyLmluZGV4XHJcblx0XHRcdClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdHRoaXMuaG92ZXIgPSBuZXdIb3ZlcjtcclxuXHRcdFx0dGhpcy51cGRhdGUoKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHRcdFx0aWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuXHRcdFx0XHR0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLy8gc29sbyB0cnVlIHNpIHJlYWxtZW50ZSBzZSBzZWxlY2Npb27DsyBhbGdvXHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcblx0X3NlbGVjdEF0KEwsIGkpIHtcclxuXHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0Y29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0aWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuXHRcdGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuXHRcdGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcblx0XHQvLyDwn5S4IFNpIGVsIHVzdWFyaW8gc2VsZWNjaW9uYSBleHBsw61jaXRhbWVudGUgZW4gZWwgbml2ZWwgaG9qYSwgcmVjb3JkYXJsb1xyXG5cdFx0aWYgKGx2bC50eXBlID09PSBcImxpc3RcIikge1xyXG5cdFx0XHR0aGlzLmxhc3RMZWFmLnBhcmVudFBhdGggPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpOyAvLyBwYWRyZSBkZSBsYSBsaXN0YSBhY3R1YWxcclxuXHRcdFx0dGhpcy5sYXN0TGVhZi5rZXkgPSBjaG9zZW4ua2V5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMudmFsdWUgPSBuZXdQYXRoLnNsaWNlKCk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHRcdC8vIHNpIGVzdMOhIHJlZmVyZW5jaWFkbywgcHJvcGFnYSBhIG9iamV0byBleHRlcm5vXHJcblx0XHR0aGlzLnNlbmQobmV3UGF0aCk7XHJcblx0XHR0aGlzLmNoYW5nZUNiKHRoaXMudGFiSW5kZXgsIHRoaXMuaXRlbUluZGV4LCBuZXdQYXRoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gQVBJIHDDumJsaWNhID09PT09PT1cclxuXHRzZXRWYWx1ZShwYXRoKSB7XHJcblx0XHR0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguc2xpY2UoKSA6IFtdO1xyXG5cdFx0Ly8gU2kgZGVzZGUgYWZ1ZXJhIG5vcyBzZXRlYW4gdW5hIGhvamEgdsOhbGlkYSwgdGFtYmnDqW4gbGEgcmVjb3JkYW1vc1xyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdHNldFRyZWUodHJlZSkge1xyXG5cdFx0dGhpcy50cmVlID0gdHJlZSB8fCB7fTtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRzZXRGb2N1cyh7IGZvY3VzZWQsIGZvY3VzUGF0aCwgZm9jdXNMZXZlbCB9KSB7XHJcblx0XHRpZiAodHlwZW9mIGZvY3VzZWQgPT09IFwiYm9vbGVhblwiKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuXHRcdGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gXCJudW1iZXJcIikgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRfbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpIHtcclxuXHRcdC8vIFNpIHZhbHVlIGFwdW50YSBhIHBhZHJlK2hvamEgKOKApixbbGVhZl0pIHkgZXMgdsOhbGlkYSwgcmVjb3JkYXIgZXNhIGhvamFcclxuXHRcdGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLnZhbHVlLmxlbmd0aCAtIDEpO1xyXG5cdFx0Y29uc3QgbGVhZiA9IHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdGNvbnN0IGluZm8gPSB0aGlzLmdldE5vZGVBdFBhdGgocGFyZW50KTtcclxuXHRcdGlmIChpbmZvICYmIEFycmF5LmlzQXJyYXkoaW5mby5ub2RlKSAmJiBpbmZvLm5vZGUuaW5jbHVkZXMobGVhZikpIHtcclxuXHRcdFx0dGhpcy5sYXN0TGVhZiA9IHsgcGFyZW50UGF0aDogcGFyZW50LCBrZXk6IGxlYWYgfTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUHVibGljYWNpw7NuIGRlIGFsdHVyYSA9PT09PT09XHJcblx0X2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKSB7XHJcblx0XHRsZXQgYyA9IDA7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgaSsrKVxyXG5cdFx0XHRpZiAodGhpcy5sZXZlbHNbaV0udHlwZSA9PT0gXCJtYXBcIikgYysrO1xyXG5cdFx0cmV0dXJuIGM7XHJcblx0fVxyXG5cclxuXHRfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcblx0XHRjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcblx0XHRyZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09IFwibGlzdFwiID8gbGFzdC5pdGVtcy5sZW5ndGggOiAwO1xyXG5cdH1cclxuXHJcblx0X3B1Ymxpc2hIZWlnaHQoKSB7XHJcblx0XHRjb25zdCBpbnRlciA9IHRoaXMuX2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKTtcclxuXHRcdGNvbnN0IGxlYWZMZW4gPSBNYXRoLm1heCh0aGlzLmxlYWZNYXgsIHRoaXMuX2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkpO1xyXG5cdFx0Y29uc3QgbGVhZkggPSBsZWFmTGVuICogdGhpcy5saW5lSDtcclxuXHRcdGNvbnN0IGludGVySCA9IGludGVyICogKHRoaXMubGluZUggKyB0aGlzLmxldmVsR2FwKTtcclxuXHRcdGNvbnN0IHRvdGFsSCA9IGludGVyID8gaW50ZXJIICsgdGhpcy5sZXZlbEdhcCArIGxlYWZIIDogbGVhZkg7XHJcblxyXG5cdFx0Ly8gTm9ybWFsaXphbW9zIGEgcHggZW50ZXJvcyBwYXJhIGV2aXRhciBqaXR0ZXIgcG9yIHJlZG9uZGVvXHJcblx0XHRjb25zdCBuZXdIID0gTWF0aC5mbG9vcih0b3RhbEgpO1xyXG5cclxuXHRcdC8vIEFjdHVhbGl6YW1vcyBtw6l0cmljYXMgbG9jYWxlcyBzaWVtcHJlXHJcblx0XHR0aGlzLmggPSBuZXdIO1xyXG5cdFx0dGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gU29sbyBhdmlzYW1vcyBhbCBHVUkgc2kgbGEgYWx0dXJhIGNhbWJpw7NcclxuXHRcdGlmIChuZXdIICE9PSB0aGlzLl9sYXN0UHVibGlzaGVkSCkge1xyXG5cdFx0XHR0aGlzLl9sYXN0UHVibGlzaGVkSCA9IG5ld0g7XHJcblx0XHRcdFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG5cdFx0XHRpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiXHJcbmltcG9ydCB7IEJvb2wgfSBmcm9tICcuLi9wcm90by9Cb29sLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vcHJvdG8vQnV0dG9uLmpzJztcclxuaW1wb3J0IHsgQ2lyY3VsYXIgfSBmcm9tICcuLi9wcm90by9DaXJjdWxhci5qcyc7XHJcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnLi4vcHJvdG8vQ29sb3IuanMnO1xyXG5pbXBvcnQgeyBGcHMgfSBmcm9tICcuLi9wcm90by9GcHMuanMnO1xyXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL3Byb3RvL0dyYXBoLmpzJztcclxuaW1wb3J0IHsgR3JvdXAgIH0gZnJvbSAnLi4vcHJvdG8vR3JvdXAuanMnO1xyXG5pbXBvcnQgeyBKb3lzdGljayB9IGZyb20gJy4uL3Byb3RvL0pveXN0aWNrLmpzJztcclxuaW1wb3J0IHsgS25vYiB9IGZyb20gJy4uL3Byb3RvL0tub2IuanMnO1xyXG5pbXBvcnQgeyBMaXN0IH0gZnJvbSAnLi4vcHJvdG8vTGlzdC5qcyc7XHJcbmltcG9ydCB7IE51bWVyaWMgfSBmcm9tICcuLi9wcm90by9OdW1lcmljLmpzJztcclxuaW1wb3J0IHsgU2xpZGUgfSBmcm9tICcuLi9wcm90by9TbGlkZS5qcyc7XHJcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gJy4uL3Byb3RvL1RleHRJbnB1dC5qcyc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vcHJvdG8vVGl0bGUuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuLi9wcm90by9TZWxlY3QuanMnO1xyXG5pbXBvcnQgeyBCaXRtYXAgfSBmcm9tICcuLi9wcm90by9CaXRtYXAuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdG9yLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuLi9wcm90by9FbXB0eS5qcyc7XHJcbmltcG9ydCB7IEl0ZW0gfSBmcm9tICcuLi9wcm90by9JdGVtLmpzJztcclxuaW1wb3J0IHsgR3JpZCB9IGZyb20gJy4uL3Byb3RvL0dyaWQuanMnO1xyXG5pbXBvcnQgeyBQYWQyRCB9IGZyb20gJy4uL3Byb3RvL1BhZDJELmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgVHJlZUxpc3QgfSBmcm9tICcuLi9wcm90by9UcmVlTGlzdC5qcyc7XHJcblxyXG5leHBvcnQgY29uc3QgYWRkID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGFyZ3VtZW50czsgXHJcblxyXG4gICAgICAgIGxldCB0eXBlLCBvLCByZWYgPSBmYWxzZSwgbiA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVswXSA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgICAgICB0eXBlID0gYVswXTtcclxuICAgICAgICAgICAgbyA9IGFbMV0gfHwge307XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBhWzBdID09PSAnb2JqZWN0JyApeyAvLyBsaWtlIGRhdCBndWlcclxuXHJcbiAgICAgICAgICAgIHJlZiA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoYSwge30pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzJdLnR5cGUgPyBhWzJdLnR5cGUgOiBhdXRvVHlwZSggYVswXVthWzFdXSwgYVsyXSApO1xyXG5cclxuICAgICAgICAgICAgbyA9IGFbMl07XHJcbiAgICAgICAgICAgIG8ubmFtZSA9IGFbMV07XHJcbiAgICAgICAgICAgIGlmIChvLmhhc093blByb3BlcnR5KFwiZGlzcGxheU5hbWVcIikpIG8ubmFtZSA9IG8uZGlzcGxheU5hbWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ2xpc3QnICYmICFvLmxpc3QgKXsgby5saXN0ID0gYVswXVthWzFdXTsgfVxyXG4gICAgICAgICAgICBlbHNlIG8udmFsdWUgPSBhWzBdW2FbMV1dO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2dyb3VwJyApeyBcclxuICAgICAgICAgICAgby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIC8vby5keCA9IDhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCggbmFtZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnYm9vbCc6IGNhc2UgJ2Jvb2xlYW4nOiBuID0gbmV3IEJvb2wobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdidXR0b24nOiBuID0gbmV3IEJ1dHRvbihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NpcmN1bGFyJzogbiA9IG5ldyBDaXJjdWxhcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzogbiA9IG5ldyBDb2xvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Zwcyc6IG4gPSBuZXcgRnBzKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JhcGgnOiBuID0gbmV3IEdyYXBoKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOiBuID0gbmV3IEdyb3VwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnam95c3RpY2snOiBuID0gbmV3IEpveXN0aWNrKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAna25vYic6IG4gPSBuZXcgS25vYihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xpc3QnOiBuID0gbmV3IExpc3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdudW1lcmljJzogY2FzZSAnbnVtYmVyJzogbiA9IG5ldyBOdW1lcmljKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2xpZGUnOiBuID0gbmV3IFNsaWRlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGV4dElucHV0JzogY2FzZSAnc3RyaW5nJzogbiA9IG5ldyBUZXh0SW5wdXQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6IGNhc2UgJ3RleHQnOiBuID0gbmV3IFRpdGxlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzogbiA9IG5ldyBTZWxlY3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdiaXRtYXAnOiBuID0gbmV3IEJpdG1hcChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdG9yJzogbiA9IG5ldyBTZWxlY3RvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzogY2FzZSAnc3BhY2UnOiBuID0gbmV3IEVtcHR5KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaXRlbSc6IG4gPSBuZXcgSXRlbShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyaWQnOiBuID0gbmV3IEdyaWQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwYWQyZCc6IGNhc2UgJ3BhZCc6IG4gPSBuZXcgUGFkMkQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0cmVlbGlzdCc6IG4gPSBuZXcgVHJlZUxpc3Qobyk7IGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggbiAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGlmKCByZWYgKSBuLnNldFJlZmVyZW5jeSggYVswXSwgYVsxXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gbjtcclxuXHJcbiAgICAgICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGF1dG9UeXBlID0gZnVuY3Rpb24gKCB2LCBvICkge1xyXG5cclxuICAgIGxldCB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIGlmKCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkgdHlwZSA9ICdib29sJyBcclxuICAgIGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgaWYoIHYuc3Vic3RyaW5nKDAsMSkgPT09ICcjJyApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3N0cmluZycgXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ251bWJlcicgKXsgXHJcblxyXG4gICAgICAgIGlmKCBvLmN0eXBlICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ2FycmF5JyAmJiB2IGluc3RhbmNlb2YgQXJyYXkgKXtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB2WzBdID09PSAnbnVtYmVyJyApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgaWYoIHR5cGVvZiB2WzBdID09PSAnc3RyaW5nJyApIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcblxyXG4gICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHlwZVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBhZGQgfSBmcm9tIFwiLi9hZGQuanNcIjtcclxuaW1wb3J0IHsgVjIgfSBmcm9tIFwiLi9WMi5qc1wiO1xyXG5cclxuLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIEd1aSB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICB0aGlzLmlzR3VpID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBcImd1aVwiO1xyXG5cclxuICAgIC8vIGZvciAzZFxyXG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xyXG4gICAgdGhpcy5zY3JlZW4gPSBudWxsO1xyXG4gICAgdGhpcy5wbGFuZSA9IG8ucGxhbmUgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjb2xvclxyXG4gICAgaWYgKG8uY29uZmlnKSBvLmNvbG9ycyA9IG8uY29uZmlnO1xyXG4gICAgaWYgKG8uY29sb3JzKSB0aGlzLnNldENvbmZpZyhvLmNvbG9ycyk7XHJcbiAgICBlbHNlIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcblxyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMuY3NzID0gVG9vbHMuY2xvbmVDc3MoKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG4gICAgdGhpcy50bXBBZGQgPSBudWxsO1xyXG4gICAgLy90aGlzLnRtcEggPSAwXHJcblxyXG4gICAgdGhpcy5pc0NhbnZhcyA9IG8uaXNDYW52YXMgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIE1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIC8vIG9wdGlvbiB0byBkZWZpbmUgd2hldGhlciB0aGUgZXZlbnQgbGlzdGVuZXJzIHNob3VsZCBiZSBhZGRlZCBvciBub3RcclxuICAgIFJvb3RzLmFkZERPTUV2ZW50TGlzdGVuZXJzID0gby5oYXNPd25Qcm9wZXJ0eShcImFkZERPTUV2ZW50TGlzdGVuZXJzXCIpXHJcbiAgICAgID8gby5hZGRET01FdmVudExpc3RlbmVyc1xyXG4gICAgICA6IHRydWU7XHJcblxyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG5cclxuICAgIHRoaXMuZm9yY2VIZWlnaHQgPSBvLm1heEhlaWdodCB8fCAwO1xyXG4gICAgdGhpcy5sb2NrSGVpZ2h0ID0gby5sb2NrSGVpZ2h0IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNJdGVtTW9kZSA9IG8uaXRlbU1vZGUgIT09IHVuZGVmaW5lZCA/IG8uaXRlbU1vZGUgOiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmNuID0gXCJcIjtcclxuXHJcbiAgICAvLyBzaXplIGRlZmluZVxyXG4gICAgdGhpcy5zaXplID0gVG9vbHMuc2l6ZTtcclxuICAgIGlmIChvLnAgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnAgPSBvLnA7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS53ID0gby53O1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUuaCA9IG8uaDtcclxuICAgIGlmIChvLnMgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnMgPSBvLnM7XHJcblxyXG4gICAgdGhpcy5zaXplLmggPSB0aGlzLnNpemUuaCA8IDExID8gMTEgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICAvLyBsb2NhbCBtb3VzZSBhbmQgem9uZVxyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG4gICAgdGhpcy56b25lID0geyB4OiAwLCB5OiAwLCB3OiB0aGlzLnNpemUudywgaDogMCB9O1xyXG5cclxuICAgIC8vIHZpcnR1YWwgbW91c2VcclxuICAgIHRoaXMubW91c2UgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmggPSAwO1xyXG4gICAgLy90aGlzLnByZXZZID0gLTE7XHJcbiAgICB0aGlzLnN3ID0gMDtcclxuXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICAvLyBib3R0b20gYW5kIGNsb3NlIGhlaWdodFxyXG4gICAgdGhpcy5pc1dpdGhDbG9zZSA9IG8uY2xvc2UgIT09IHVuZGVmaW5lZCA/IG8uY2xvc2UgOiB0cnVlO1xyXG4gICAgdGhpcy5iaCA9ICF0aGlzLmlzV2l0aENsb3NlID8gMCA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG8uYXV0b1Jlc2l6ZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG8uYXV0b1Jlc2l6ZTtcclxuXHJcbiAgICAvLyBkZWZhdWx0IHBvc2l0aW9uXHJcbiAgICB0aGlzLmlzQ2VudGVyID0gby5jZW50ZXIgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmNzc0d1aSA9XHJcbiAgICAgIG8uY3NzICE9PSB1bmRlZmluZWQgPyBvLmNzcyA6IHRoaXMuaXNDZW50ZXIgPyBcIlwiIDogXCJyaWdodDoxMHB4O1wiO1xyXG5cclxuICAgIHRoaXMuaXNPcGVuID0gby5vcGVuICE9PSB1bmRlZmluZWQgPyBvLm9wZW4gOiB0cnVlO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmRlY2FsID0gMDtcclxuICAgIHRoaXMucmF0aW8gPSAxO1xyXG4gICAgdGhpcy5veSA9IDA7XHJcblxyXG4gICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIHRoaXMuY29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiIHdpZHRoOjBweDsgaGVpZ2h0OmF1dG87IHRvcDowcHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmNvbnRlbnQgK1xyXG4gICAgICAgIFwiOyBcIiArXHJcbiAgICAgICAgdGhpcy5jc3NHdWlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyB0aGlzLmNzcy5idXR0b24gKyAnd2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyQ29udGVudCk7XHJcblxyXG4gICAgLy90aGlzLmlubmVyID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyAnKVxyXG4gICAgdGhpcy51c2VGbGV4ID0gdHJ1ZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/IFwiZGlzcGxheTpmbGV4OyBmbGV4LWZsb3c6IHJvdyB3cmFwO1wiIDogXCJcIjsgLy8nIGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnN0YXJ0OyBhbGlnbi1pdGVtczpzdGFydDtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYWxpZ24taXRlbXM6IGNlbnRlcjsnO1xyXG4gICAgdGhpcy5pbm5lciA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwid2lkdGg6MTAwJTsgbGVmdDowOyBcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuaW5uZXJDb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXIpO1xyXG5cclxuICAgIC8vIHNjcm9sbFxyXG4gICAgdGhpcy5zY3JvbGxCRyA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwicmlnaHQ6MDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSAxKSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7IGRpc3BsYXk6bm9uZTsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYmFja2dyb3VuZCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxCRyk7XHJcblxyXG4gICAgdGhpcy5zY3JvbGwgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJ1dHRvbiArXHJcbiAgICAgICAgXCI7IHJpZ2h0OjJweDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSA0KSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLnNjcm9sbEJHLmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsKTtcclxuXHJcbiAgICAvLyBib3R0b20gYnV0dG9uXHJcbiAgICB0aGlzLmJvdHRvbVRleHQgPSBvLmJvdHRvbVRleHQgfHwgW1wib3BlblwiLCBcImNsb3NlXCJdO1xyXG5cclxuICAgIGxldCByID0gY2MucmFkaXVzO1xyXG4gICAgdGhpcy5ib3R0b20gPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dCArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6YXV0bzsgYm90dG9tOjA7IGxlZnQ6MDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGhlaWdodDpcIiArXHJcbiAgICAgICAgdGhpcy5iaCArXHJcbiAgICAgICAgXCJweDsgbGluZS1oZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmJoIC0gNSkgK1xyXG4gICAgICAgIFwicHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTsgLy8gYm9yZGVyLXRvcDoxcHggc29saWQgJytUb29scy5jb2xvcnMuc3Ryb2tlKyc7Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5ib3R0b20pO1xyXG4gICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIC8vXHJcblxyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnBhcmVudCAhPT0gdW5kZWZpbmVkID8gby5wYXJlbnQgOiBudWxsO1xyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnRhcmdldCAhPT0gdW5kZWZpbmVkID8gby50YXJnZXQgOiB0aGlzLnBhcmVudDtcclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgPT09IG51bGwgJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5wYXJlbnQgPSBkb2N1bWVudC5ib2R5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcyAmJiB0aGlzLnBhcmVudCA9PT0gbnVsbCkgdGhpcy5pc0NhbnZhc09ubHkgPSB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XHJcbiAgICAgIG8udHJhbnNpdGlvbiA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGVpZ2h0IHRyYW5zaXRpb25cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9XHJcbiAgICAgIG8udHJhbnNpdGlvbiAhPT0gdW5kZWZpbmVkID8gby50cmFuc2l0aW9uIDogVG9vbHMudHJhbnNpdGlvbjtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24pIHNldFRpbWVvdXQodGhpcy5hZGRUcmFuc2l0aW9uLmJpbmQodGhpcyksIDEwMDApO1xyXG5cclxuICAgIHRoaXMuc2V0V2lkdGgoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5tYWtlQ2FudmFzKCk7XHJcblxyXG4gICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlRG93bih4LCB5KSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcmRvd25cIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VNb3ZlKCkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJtb3ZlXCIsXHJcbiAgICAgIGNsaWVudFg6IC0xLFxyXG4gICAgICBjbGllbnRZOiAtMSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcCh4LCB5KSB7XHJcbiAgICAvKlxyXG5cclxuICAgICAgICBjbGllbnRYLGNsaWVudFkgYXJlIG5vIHVzZWQgd2hlbiBpc0NhbnZhcz09dHJ1ZVxyXG4gICAgICAgICovXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcnVwXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0VG9wKHQsIGgpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS50b3AgPSB0ICsgXCJweFwiO1xyXG4gICAgaWYgKGggIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JjZUhlaWdodCA9IGg7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFkZFRyYW5zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmJvdHRvbS5zdHlsZS50cmFuc2l0aW9uID0gXCJ0b3AgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgLy90aGlzLmJvdHRvbS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBSb290cy5yZXNpemUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uYWRkVHJhbnNpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkRyYXcoKSB7fVxyXG5cclxuICBtYWtlQ2FudmFzKCkge1xyXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXHJcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFxyXG4gICAgICBcImNhbnZhc1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLnpvbmUudztcclxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyggdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCApXHJcbiAgfVxyXG5cclxuICBkcmF3KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5jYW52YXMgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuem9uZS53O1xyXG4gICAgbGV0IGggPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG4gICAgUm9vdHMudG9DYW52YXModGhpcywgdywgaCwgZm9yY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vXHJcblxyXG4gIGdldERvbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBub01vdXNlKCkge1xyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICB9XHJcblxyXG4gIHNldE1vdXNlKHV2LCBmbGlwID0gdHJ1ZSkge1xyXG4gICAgaWYgKGZsaXApXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgLSBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICAvL3RoaXMubW91c2Uuc2V0KCBtLngsIG0ueSApO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJzZXRNb3VzZSBcIit1di54K1wiIFwiK3V2LnkpXHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcobykge1xyXG4gICAgLy8gcmVzZXQgdG8gZGVmYXVsdCB0ZXh0XHJcbiAgICBUb29scy5zZXRUZXh0KCk7XHJcbiAgICB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29sb3JzKG8pIHtcclxuICAgIGZvciAobGV0IGMgaW4gbykge1xyXG4gICAgICBpZiAodGhpcy5jb2xvcnNbY10pIHRoaXMuY29sb3JzW2NdID0gb1tjXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdykge1xyXG4gICAgVG9vbHMuc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KTtcclxuICB9XHJcblxyXG4gIGhpZGUoYikge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSBiID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheSh2ID0gZmFsc2UpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gdiA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIjtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKGYpIHtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBmIHx8IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNUWUxFU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW9kZShuKSB7XHJcbiAgICBsZXQgbmVlZENoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgaWYgKG4gIT09IHRoaXMuY24pIHtcclxuICAgICAgdGhpcy5jbiA9IG47XHJcblxyXG4gICAgICBzd2l0Y2ggKG4pIHtcclxuICAgICAgICBjYXNlIFwiZGVmXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ3Njcm9sbERlZic6IHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zY3JvbGw7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxPdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJucy1yZXNpemVcIik7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbERvd25cIjpcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdib3R0b21EZWYnOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImJvdHRvbU92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcInBvaW50ZXJcIik7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9jYXNlICdib3R0b21Eb3duJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNlbGVjdDsgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSAnIzAwMCc7IGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuZWVkQ2hhbmdlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmVlZENoYW5nZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFRBUkdFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2xlYXJUYXJnZXQoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50ID09PSAtMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHRoaXMucHJvdG8ucykge1xyXG4gICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuXHJcbiAgICAvLy9jb25zb2xlLmxvZyh0aGlzLmlzRG93bikvL2lmKHRoaXMuaXNEb3duKVJvb3RzLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSb290cy5jdXJzb3IoKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgWk9ORSBURVNUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0ZXN0Wm9uZShlKSB7XHJcbiAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICBpZiAobC54ID09PSAtMSAmJiBsLnkgPT09IC0xKSByZXR1cm4gXCJcIjtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IFwiXCI7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLmlzU2Nyb2xsID8gdGhpcy56b25lLncgLSB0aGlzLnNpemUucyA6IHRoaXMuem9uZS53O1xyXG5cclxuICAgIGlmIChsLnkgPiB0aGlzLnpvbmUuaCAtIHRoaXMuYmggJiYgbC55IDwgdGhpcy56b25lLmgpIG5hbWUgPSBcImJvdHRvbVwiO1xyXG4gICAgZWxzZSBuYW1lID0gbC54ID4gcyA/IFwic2Nyb2xsXCIgOiBcImNvbnRlbnRcIjtcclxuXHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgLy9pZiggdGhpcy5jbGVhbm5pbmcgKSByZXR1cm5cclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwiR3VpLmhhbmRsZUV2ZW50XCIpXHJcbiAgICAvL2NvbnNvbGUubG9nKGUpO1xyXG4gICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IHByb3RvQ2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcIm1vdXNldXBcIiAmJiB0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmICF0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzRG93biAmJiB0aGlzLmlzTmV3VGFyZ2V0KSB7XHJcbiAgICAgIFJvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuO1xyXG5cclxuICAgIHN3aXRjaCAobmFtZSkge1xyXG4gICAgICBjYXNlIFwiY29udGVudFwiOlxyXG4gICAgICAgIGUuY2xpZW50WSA9IHRoaXMuaXNTY3JvbGwgPyBlLmNsaWVudFkgKyB0aGlzLmRlY2FsIDogZS5jbGllbnRZO1xyXG5cclxuICAgICAgICBpZiAoUm9vdHMuaXNNb2JpbGUgJiYgdHlwZSA9PT0gXCJtb3VzZWRvd25cIikgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByb3RvKSBwcm90b0NoYW5nZSA9IHRoaXMucHJvdG8uaGFuZGxlRXZlbnQoZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIiAmJiAhcHJvdG9DaGFuZ2UgJiYgdGhpcy5pc1Njcm9sbClcclxuICAgICAgICAgIGNoYW5nZSA9IHRoaXMub25XaGVlbChlKTtcclxuXHJcbiAgICAgICAgaWYgKCFSb290cy5sb2NrKSB7XHJcbiAgICAgICAgICB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJib3R0b21PdmVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRoaXMuaXNPcGVuID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICAgICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICAgICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgICAgICAgIC8vdGhpcy5zZXRIZWlnaHQoKTtcclxuICAgICAgICAgIHRoaXMuY2FsYygpO1xyXG4gICAgICAgICAgdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwic2Nyb2xsXCI6XHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJzY3JvbGxPdmVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJzY3JvbGxEb3duXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIpIGNoYW5nZSA9IHRoaXMub25XaGVlbChlKTtcclxuICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMudXBkYXRlKGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy5zaCAqIDAuNSk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmIChwcm90b0NoYW5nZSkgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXl1cFwiKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmIChjaGFuZ2UpIHRoaXMuZHJhdygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV4dChlLCBjaGFuZ2UpIHtcclxuICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCh0aGlzLnVpcywgZSk7XHJcblxyXG4gICAgaWYgKG5leHQgIT09IHRoaXMuY3VycmVudCkge1xyXG4gICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLnByb3RvID0gdGhpcy51aXNbdGhpcy5jdXJyZW50XTtcclxuICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uV2hlZWwoZSkge1xyXG4gICAgdGhpcy5veSArPSAyMCAqIGUuZGVsdGE7XHJcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLm95KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHJlc2V0KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5pc1Jlc2V0KSByZXR1cm47XHJcblxyXG4gICAgLy90aGlzLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgIC8vUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgbGV0IHIgPSB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICBsZXQgcjIgPSB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcblxyXG4gICAgaWYgKHIgfHwgcjIpIHRoaXMuZHJhdyh0cnVlKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG5cclxuICAgIC8vUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQUREIE5PREVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGFkZCgpIHtcclxuICAgIC8vaWYodGhpcy5jbGVhbm5pbmcpIHRoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICBsZXQgYSA9IGFyZ3VtZW50cztcclxuICAgIGxldCBvbnRvcCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0eXBlb2YgYVsxXSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICBhWzFdLmlzVUkgPSB0cnVlO1xyXG4gICAgICBhWzFdLm1haW4gPSB0aGlzO1xyXG5cclxuICAgICAgb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYVsxXSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBpZiAoYVsyXSA9PT0gdW5kZWZpbmVkKSBbXS5wdXNoLmNhbGwoYSwgeyBpc1VJOiB0cnVlLCBtYWluOiB0aGlzIH0pO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgIGFbMl0ubWFpbiA9IHRoaXM7XHJcbiAgICAgICAgLy9vbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgICAgb250b3AgPSBhWzJdLm9udG9wID8gYVsyXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHUgPSBhZGQuYXBwbHkodGhpcywgYSk7XHJcblxyXG4gICAgaWYgKHUgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBpZiAob250b3ApIHRoaXMudWlzLnVuc2hpZnQodSk7XHJcbiAgICBlbHNlIHRoaXMudWlzLnB1c2godSk7XHJcblxyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgdGhpcy5pc0VtcHR5ID0gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHU7XHJcbiAgfVxyXG5cclxuICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgcmVtb3ZlKG4pIHtcclxuICAgIGlmIChuLmRpc3Bvc2UpIG4uZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2FsbCBhZnRlciB1aXMgY2xlYXJcclxuXHJcbiAgY2xlYXJPbmUobikge1xyXG4gICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZihuKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIHtcclxuICAgICAgLy90aGlzLmNhbGMoIC0gKHRoaXMudWlzWyBpZCBdLmggKyAxICkgKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZCh0aGlzLnVpc1tpZF0uY1swXSk7XHJcbiAgICAgIHRoaXMudWlzLnNwbGljZShpZCwgMSk7XHJcbiAgICAgIHRoaXMuY2FsYygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gY2xlYXIgYWxsIGd1aVxyXG5cclxuICBlbXB0eSgpIHtcclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSB0cnVlXHJcblxyXG4gICAgLy90aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsXHJcbiAgICAgIGl0ZW07XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpdGVtID0gdGhpcy51aXMucG9wKCk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQoaXRlbS5jWzBdKTtcclxuICAgICAgaXRlbS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyKCkge1xyXG4gICAgdGhpcy5lbXB0eSgpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIyKCkge1xyXG4gICAgc2V0VGltZW91dCh0aGlzLmVtcHR5LmJpbmQodGhpcyksIDApO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5jb250ZW50KTtcclxuICAgIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElURU1TIFNQRUNJQUxcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHJlc2V0SXRlbSgpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5zZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbShuYW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIG5hbWUgPSBuYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZSgwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAodGhpcy51aXNbaV0udmFsdWUgPT09IG5hbWUpIHtcclxuICAgICAgICB0aGlzLnVpc1tpXS5zZWxlY3RlZCh0cnVlKTtcclxuICAgICAgICBpZiAodGhpcy5pc1Njcm9sbClcclxuICAgICAgICAgIHRoaXMudXBkYXRlKGkgKiAodGhpcy51aXNbaV0uaCArIHRoaXMubWFyZ2luKSAqIHRoaXMucmF0aW8pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTQ1JPTExcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHVwU2Nyb2xsKGIpIHtcclxuICAgIHRoaXMuc3cgPSBiID8gdGhpcy5zaXplLnMgOiAwO1xyXG4gICAgdGhpcy5veSA9IGIgPyB0aGlzLm95IDogMDtcclxuICAgIHRoaXMuc2Nyb2xsQkcuc3R5bGUuZGlzcGxheSA9IGIgPyBcImJsb2NrXCIgOiBcIm5vbmVcIjtcclxuXHJcbiAgICBpZiAoYikge1xyXG4gICAgICB0aGlzLnRvdGFsID0gdGhpcy5oO1xyXG5cclxuICAgICAgdGhpcy5tYXhWaWV3ID0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLnJhdGlvID0gdGhpcy5tYXhWaWV3IC8gdGhpcy50b3RhbDtcclxuICAgICAgdGhpcy5zaCA9IHRoaXMubWF4VmlldyAqIHRoaXMucmF0aW87XHJcblxyXG4gICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhWaWV3IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgIHRoaXMub3kgPSBUb29scy5jbGFtcCh0aGlzLm95LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICAgIHRoaXMuc2Nyb2xsQkcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhWaWV3ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLnNjcm9sbC5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLm95KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSh5KSB7XHJcbiAgICB5ID0gVG9vbHMuY2xhbXAoeSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgdGhpcy5kZWNhbCA9IE1hdGguZmxvb3IoeSAvIHRoaXMucmF0aW8pO1xyXG4gICAgdGhpcy5pbm5lci5zdHlsZS50b3AgPSAtdGhpcy5kZWNhbCArIFwicHhcIjtcclxuICAgIHRoaXMuc2Nyb2xsLnN0eWxlLnRvcCA9IE1hdGguZmxvb3IoeSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLm95ID0geTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0laRSBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpcygpIHtcclxuICAgIHJldHVybiBSb290cy5jYWxjVWlzKHRoaXMudWlzLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55KTtcclxuICB9XHJcblxyXG4gIGNhbGMoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG4gICAgdGhpcy50bXAgPSBzZXRUaW1lb3V0KHRoaXMuc2V0SGVpZ2h0LmJpbmQodGhpcyksIDEwKTtcclxuICB9XHJcblxyXG4gIHNldEhlaWdodCgpIHtcclxuICAgIGlmICh0aGlzLnRtcCkgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuXHJcbiAgICB0aGlzLnpvbmUuaCA9IHRoaXMuYmg7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHRoaXMuaCA9IHRoaXMuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbGV0IGhoaCA9IHRoaXMuZm9yY2VIZWlnaHRcclxuICAgICAgICA/IHRoaXMuZm9yY2VIZWlnaHQgKyB0aGlzLnpvbmUueVxyXG4gICAgICAgIDogd2luZG93LmlubmVySGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5tYXhIZWlnaHQgPSBoaGggLSB0aGlzLnpvbmUueSAtIHRoaXMuYmg7XHJcblxyXG4gICAgICBsZXQgZGlmZiA9IHRoaXMuaCAtIHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgaWYgKGRpZmYgPiAxKSB7XHJcbiAgICAgICAgdGhpcy5pc1Njcm9sbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLmJoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cFNjcm9sbCh0aGlzLmlzU2Nyb2xsKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCAtIHRoaXMuYmggKyBcInB4XCI7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggKyBcInB4XCI7XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS50b3AgPSB0aGlzLnpvbmUuaCAtIHRoaXMuYmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9yY2VIZWlnaHQgJiYgdGhpcy5sb2NrSGVpZ2h0KVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLmRyYXcodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNldFdpZHRoKHcpIHtcclxuICAgIGlmICh3KSB0aGlzLnpvbmUudyA9IHc7XHJcblxyXG4gICAgdGhpcy56b25lLncgPSBNYXRoLmZsb29yKHRoaXMuem9uZS53KTtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS53aWR0aCA9IHRoaXMuem9uZS53ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDZW50ZXIpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5tYXJnaW5MZWZ0ID0gLU1hdGguZmxvb3IodGhpcy56b25lLncgKiAwLjUpICsgXCJweFwiO1xyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW1XaWR0aCh3KSB7XHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdGhpcy51aXNbaV0uc2V0U2l6ZSh3KTtcclxuICAgICAgdGhpcy51aXNbaV0uclNpemUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztDQUFBO0NBQ0E7Q0FDQTtBQUNBO0FBQ1ksT0FBQyxRQUFRLEdBQUcsUUFBUTtBQUNoQztDQUNBO0FBQ0E7Q0FDQSxNQUFNLENBQUMsR0FBRztDQUNWLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDUjtDQUNBLEVBQUUsR0FBRyxFQUFFLElBQUk7QUFDWDtDQUNBLEVBQUUsRUFBRSxFQUFFLElBQUk7Q0FDVixFQUFFLElBQUksRUFBRSxL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LENBQUM7QUFDekM7Q0FDQTtDQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFO0NBQ3RCLFFBQVEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ3RCLFFBQVEsT0FBTyxLQUFLLENBQUM7Q0FDckIsT0FBTztBQUNQO0NBQ0EsTUFBTSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7Q0FDOUIsTUFBTSxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztDQUMxQixLQUFLO0FBQ0w7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDL0M7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUM5QyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDN0M7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFO0NBQ3ZCLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRTtDQUM3QixRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxD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QUFDO0NBQzdEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sR0FBRztDQUMxQyxRQUFRLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztDQUMxQixRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUc7Q0FDdEMsVUFBVSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUM7Q0FDakUsU0FBUztDQUNULFFBQVEsT0FBTyxRQUFRLENBQUM7Q0FDeEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7Q0FDOUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0NBQzNDLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzlCO0NBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzNCO0NBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDekI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDL0UsYUFBYSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7Q0FDekIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDekQsUUFBUSxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3hDLFFBQVEsT0FBTyxDQUFDLENBQUM7Q0FDakIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDekI7Q0FDQSxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzVFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDMUI7Q0FDQSxRQUFRLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pIO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7Q0FDdEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3JDLFFBQVEsT0FBTyxDQUFDLENBQUM7Q0FDakIsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwRCxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakM7Q0FDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RELFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztDQUNsQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQ2xFLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQ2pKLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFFLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0NBQ3ZCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7Q0FDM0QsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztDQUNqRSxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0NBQ2pFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNuQixTQUFTO0NBQ1QsUUFBUSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMzQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0M7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxQyxhQUFhO0NBQ2IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzNELFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzFCLFlBQVksT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztDQUN6RyxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksWUFBWSxFQUFFLFdBQVcsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHO0FBQzlEO0NBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hEO0NBQ0EsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRztDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksT0FBTyxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ2hDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFHO0NBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0NBQ3BKLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ25DLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvRixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckg7Q0FDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzdJLFFB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LENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN6SDtDQUNBO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDdEUsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7Q0FDQTtDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0NBQzFFLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzFFO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzSDtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDNUg7Q0FDQTtBQUNBO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDdEYsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDcEcsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0Y7Q0FDQSxZQUFZLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQy9CO0NBQ0EsU0FBUyxNQUFNO0NBQ2Y7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDNUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7Q0FDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLHdCQUF3QixFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNySSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FB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QUFJLENBQUMsSUFBSSxDQUFDLE1BQU07Q0FDNUIsVUFBVSxLQUFLLENBQUMsTUFBTTtDQUN0QixLQUFLLENBQUM7QUFDTjtDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUMzQztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzNCO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDakQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN4QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDMUQsU0FBUyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hCO0NBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0NBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2pEO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztBQUN2RDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztDQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7Q0FDbEMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO0FBQ3hDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7Q0FDcEMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0NBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztDQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFD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dkQ7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEUsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLE9BQU8sR0FBRztDQUNaLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEQ7Q0FDQSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO0NBQzlCLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN6RCxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM5QyxLQUFLLE1BQU07Q0FDWCxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM5QyxXQUFXLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoRCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkM7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdB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QUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNWO0NBQ0EsSUFBSSxRQUFRLElBQUksQ0FBQyxTQUFTO0NBQzFCLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2QsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDaEIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDakIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7Q0FDbEIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7Q0FDbkIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxPQUFPLENBQUM7Q0FDcEIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7Q0FDckIsUUFBUSxNQUFNO0NBQ2QsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQ2xELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzNDLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtD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QUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbkQsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDO0NBQ0EsU0FBUztBQUNUO0FBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtDQUNyRCxZQUFZLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRTtDQUNwRSxTQUFTO0NBQ1Q7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLEdBQUc7QUFDWjtDQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQ3hEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLENB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QUN2QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQ3JCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSTtDQUNsRDtDQUNBLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFDO0NBQzVELFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQjtDQUNBO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7Q0FDckUsU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRDtDQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0NBQy9DLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2hEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDcFBPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFLO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUM7Q0FDakMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUk7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBSztDQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDMUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFFO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFLO0NBQ2hDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsR0FBRTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRTtBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSTtDQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0NBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3BDO0NBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTTtDQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxTQUFRO0NBQ3JELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0NBQ3pCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFFO0FBQ3hCO0NBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFDO0NBQ3hCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQ3RCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0FBQ2xJO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFFO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0NBQ3pELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUMzRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUM1RjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNuQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztBQUMvQztDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07Q0FDNUIsUUFBUSxJQUFJLE1BQUs7QUFDakI7Q0FDQSxRQUFRLFFBQVEsSUFBSTtDQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDOUQsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDNUssZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDOUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNqRSxnQkFBZ0IsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVE7Q0FDL0ssZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0NBQ2pEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxPQUFPLENBQUM7Q0FDN0QsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztDQUMxRSxhQUFhLE9BQU8sVUFBVSxDQUFDO0FBQy9CO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN6QixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDOUIsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9EO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ2hDO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDekMsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEU7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNyQyxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvQztDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbkMsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztDQUM1QyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNyQyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLFVBQVUsR0FBRztDQUNsQztDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDckQ7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7Q0FDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN4RCxhQUFhLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztDQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3hELGFBQWE7Q0FDYjtDQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQztDQUNBLFlBQVksT0FBTyxJQUFJLENBQUM7Q0FDeEI7Q0FDQSxTQUFTO0NBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkIsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQ2xELFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QyxRQUFRLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNsRztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FB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QUFXLEVBQUUsQ0FBQztDQUN4QjtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDaEQ7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDeEMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuRCxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyRDtDQUNBLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPO0FBQ3BCO0NBQ0EsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3hELEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDdkUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztDQUMzRSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdDO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDZjtDQUNBLEVBQUUsSUFBSSxDQUFDLFlBQVksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1RCxhQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdELGFBQWEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUM3QixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3BCO0NBQ0EsS0FBSyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3RDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxNQUFNLEVBQUU7QUFDMUM7Q0FDQSxTQUFTLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztDQUM1QixTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTTtDQUMxQixTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQzlDO0NBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEM7Q0FDQSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUN2QixNQUFNO0NBQ04sS0FBSyxPQUFPLElBQUksQ0FBQztBQUNqQjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0NBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUN0QyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDOUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ3pCLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFdBQVcsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRTtDQUNqQixFQUFFLElBQUksQ0FBQyxHQUFHLE1BQUs7QUFDZjtDQUNBLEtBQWMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTztDQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUNuQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtDQUNBLEtBQUssSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzFDO0NBQ0EsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN0QjtDQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDM0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzVCLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDN0MsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN0QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDN0MsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDO0NBQ0EsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEM7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEU7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1QztDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FB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RSxDQUFDO0NBQzFDLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMxRSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xDLFlBQVksQ0FBQyxFQUFFLENBQUM7QUFDaEI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLEtBQUssQ0FBQyxJQUFJLEdBQUU7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztDQUNsRSxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDbkQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztDQUNuRSxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMzRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7Q0FDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN0RDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0NBQ2pDO0NBQ0EsS0FBSztBQUNMO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNwQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksR0FBRyxDQUFDLEdBQUc7QUFDWDtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzlCLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN4QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0FBQ3ZCO0NBQ0EsUUFBUSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRztBQUMzQztDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO0FBQ3ZGO0NBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztDQUNqQyxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsWUFBWSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUc7QUFDOUI7Q0FDQSxnQkFBZ0IsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7Q0FDakUsZ0JBQWdCLElBQUksYUFBYSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO0FBQ3ZFO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEdBQUcsV0FBVyxFQUFFLENBQUM7Q0FDaEUsZ0JBQWdCLElBQUksQ0FBQyxFQUFFLEdBQUcsUUFBUSxHQUFHLGFBQWEsQ0FBQztBQUNuRDtDQUNBLGFBQWE7QUFDYjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUN6QixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDdkQ7Q0FDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDdkQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxLQUFJO0FBQ3BEO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7Q0FDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7Q0FDbkM7Q0FDQSxLQUFLO0NBQ0w7Q0FDQTs7Q0MzVU8sTUFBTSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ2pDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzVELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNyQztDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztDQUNyRSxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7Q0FDbEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2xDO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFEO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztDQUN4RSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzlCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDakMsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzlCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ2pEO0NBQ0EsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztDQUMvQixnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztDQUMvQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFNBQVE7Q0FDekQsYUFBYTtDQUNiO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9CLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM5QjtDQUNBO0FBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyx5REFBeUQsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDNUw7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pEO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0NBQ3RKLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNsRjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9ILFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2hKO0NBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN4RCxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuQixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0M7Q0FDQSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDdEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNyQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUN0RixjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQzdEO0NBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUg7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7Q0FDckMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQztDQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDO0NBQzlDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUk7Q0FDOUMsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztDQUNyQyxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQzNDLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FB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QyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDOUcsYUFBYSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ2pDLGFBQWE7QUFDYjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRTtDQUNyQztBQUNBO0NBQ0EsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyQztDQUNBLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBQztDQUM1QyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFHO0NBQzFCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRTtB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QUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLDRDQUE0QyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUM7Q0FDNUgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQzVLO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFJO0NBQzFEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFBQztBQUMxSTtDQUNBLFFBQWdCLElBQUksQ0FBQyxFQUFFO0NBQ3ZCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBTztBQUNoQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUU7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ2hDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDakI7Q0FDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0NBQzlCLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDeEI7Q0FDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLEdBQUU7Q0FDN0MsUUFBUSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFdBQVU7Q0FDMUQsWUFBWSxFQUFFLENBQUMsVUFBVSxHQUFHLE9BQU07QUFDbEM7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0NBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTTtDQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU07QUFDbkM7Q0FDQSxRQUFRLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7Q0FDbkMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0NBQy9ELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQjtDQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7Q0FDaEQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtBQUNoRDtDQUNBLFNBQVM7QUFDVDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDakQ7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDO0NBQzVELGFBQWE7Q0FDYixZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsU0FBUyxDQUFDO0NBQy9DLFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxXQUFXLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDO0NBQy9DLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtDQUMxQjtDQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDL0IsU0FBUztDQUNULFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDMUIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQzFCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQ3RCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUU7QUFDMUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDaEM7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTztBQUMzQjtDQUNBLFFBQVEsUUFBUSxJQUFJO0FBQ3BCO0NBQ0EsWUFBWSxLQUFLLFNBQVM7QUFDMUI7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBLFlBQVksSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksS0FBSyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFFO0FBQ2xGO0NBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Q0FDNUI7Q0FDQSxnQkFBZ0IsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRTtDQUN6RCxhQUFhO0FBQ2I7Q0FDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRTtBQUN2RDtDQUNBLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssT0FBTztDQUN4QjtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUM7Q0FDbEMsWUFBWSxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUU7Q0FDdEMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQzlDLHFCQUFxQixJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ2hDLGFBQWE7Q0FDYixZQUFZLE1BQU07QUFDbEI7QUFDQTtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDeEMsUUFBUSxJQUFJLFdBQVcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3hDO0NBQ0EsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRztBQUMxQjtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25EO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO0NBQ25DLFlBQVksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQy9CLFlBQVksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FFaEMsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRTtDQUN6QixZQUFZLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDbkQsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQ2hDLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxHQUFHLEdBQUc7QUFDVjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtDQUN0QyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUk7Q0FDakMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0NBQ25DLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSTtDQUNqQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSTtDQUM3QixTQUFTLE1BQU0sSUFBSSxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7Q0FDckQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Q0FDdkcsaUJBQWdCO0NBQ2hCLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUNqQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDdEMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQ2xDLGFBQWE7Q0FDYixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDekM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtDQUN2QjtDQUNBLFlBQVksQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFDO0NBQ3BCLFNBQVM7Q0FDVDtDQUNBO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFJO0NBQzlCO0FBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUMxQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFLO0FBQzVCO0NBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNwQztDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sR0FBRztBQUNkO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQ3BCLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ3hDLFFBQVEsS0FBSyxDQUFDLE9BQU8sR0FBRTtBQUN2QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO0FBQ3RDO0NBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0NBQ3BCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFFO0NBQ2pDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRTtDQUM5QyxZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxHQUFFO0FBQzlCO0NBQ0E7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2QztDQUNBLFFBQVEsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUc7Q0FDekIsWUFBWSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFFO0NBQzdELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUU7Q0FDeEQsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQ3BDO0NBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtDQUN2QyxnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDcEMsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUM3QixhQUFhO0NBQ2IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtDQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRTtDQUNuRCxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDM0I7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztDQUN4QixRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzlCO0NBQ0E7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSTtDQUM1QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU07QUFDbkM7Q0FDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN2QjtDQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxNQUFLO0NBQ3JDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxNQUFLO0FBQ3JDO0NBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0NBQ3ZELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtDQUN4RCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7Q0FDMUQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0NBQzNELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtBQUNuQztDQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztDQUNuRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87QUFDcEU7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87Q0FDL0QsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztDQUNwQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyx5QkFBd0I7QUFDdEU7Q0FDQSxTQUFTO0NBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDM0I7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFFO0FBQ25EO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQzNCO0NBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMs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RyxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Q0FDOUMsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7QUFDcEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzlCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzQztDQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUM1RSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUU7Q0FDQSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdkU7Q0FDQSxhQUFhO0FBQ2I7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzdCO0FBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDcEQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0NBQ2xFLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRTtDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUM1QjtDQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxTQUFTLE1BQU07Q0FDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVELFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDeEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUMzRixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFB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RyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7Q0FDakQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxPQUFPLENBQUM7Q0FDN0QsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztDQUMxRSxhQUFhLE9BQU8sTUFBTSxDQUFDO0FBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFFO0NBQ3RCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7Q0FDMUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFLO0NBQzdCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFJO0NBQ3hCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUU7Q0FDM0IsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZELFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RDtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDdEMsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDNUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzVDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0NBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztDQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUMvQixTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHO0NBQzlCO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUNyRDtDQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztDQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0NBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDeEQsYUFBYTtDQUNiO0NBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztDQUN4QjtDQUNBLFNBQVM7Q0FDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3pELFFBQVEsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQzVDLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQzFDO0FBQ0E7Q0FDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsWUFBWSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQzVDLFlBQVksSUFBSSxHQUFHLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxLQUFLLENBQUM7Q0FDckQsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNyRCxZQUFZLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQzFCLFNBQVM7QUFDVDtDQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRztBQUMzQztDQUNBLFlBQVksQ0FBQyxHQUFHLFVBQVUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7Q0FDMUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQy9DLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUMvQyxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDaEQsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ2hELFlBQVksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQzlEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVEO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDcEMsUUFBUSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNyRTtDQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztDQUNqQyxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDakM7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDcEMsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDckY7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7Q0FDQSxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ25DLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNwQyxZQUFZLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqSTtDQUNBLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO0NBQ25LLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDekQ7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ2xRTyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUM7QUFDaEM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFLO0FBQ2hDO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDakMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0NBQ3JDO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUN6RCxRQUFRLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUM1QztBQUNBO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztBQUN0QztDQUNBO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEdBQUU7Q0FDbkMsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztDQUN2QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksTUFBSztDQUMzQyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxNQUFLO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFRO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFNO0NBQzVELFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxXQUFVO0FBQ3pFO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0E7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FB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QUcsSUFBSSxDQUFDO0NBQ3JELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztDQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2xEO0NBQ0EsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDcEQsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDZDQUE2QyxDQUFDLENBQUM7Q0FDdkcsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDbEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDN0MsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Q0FDbkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7Q0FDbkMsWUFBWSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJ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QUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDeEQsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDeEQsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtDQUNBLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJ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QUFHLE1BQUs7Q0FDdEMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSTtDQUNoRCxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFJO0NBQ2xELFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUk7Q0FDM0MsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBQztDQUMzQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0NBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUU7Q0FDNUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSTtDQUN6QyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFJO0FBQ3pDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUU7Q0FDbkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztBQUN4QjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxLQUFJO0FBQ3RDO0NBQ0EsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFNBQVMs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LElBQUksUUFBUSxJQUFJO0NBQ2hCLE1BQU0sS0FBSyxDQUFDO0NBQ1o7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUM3QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQ3hELFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1o7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUNqQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUN0QyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzVELFFBQVEsTUFBTTtDQUNkLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7Q0FDYixJQUFJLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUQ7Q0FDQSxJQUFJLElBQUksT0FBTztDQUNmLE1BQU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUU7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztDQUMzQztBQUNBO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDdEQsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM1RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDakU7Q0FDQSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUN4QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLEtBQUssR0FBRztDQUNWLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xCO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDOUIsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEI7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDckIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJ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Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLGlEQUFpRCxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdEo7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7QUFDM0I7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzdDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0NBQ2hEO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDO0FBQ2pEO0FBQ0E7Q0FDQSxRQUFRLElB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LENBQUMsS0FBSyxHQUFFO0NBQzVMLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7Q0FDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDdkw7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBQztBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7Q0FDakQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sTUFBTSxDQUFDO0NBQzlELFFBQVEsT0FBTyxHQUFHO0FBQ2xCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJ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SSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEw7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0I7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzlDO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxD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LElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Q0FDbEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2RDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNuRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztDQUNBO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3JFO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxF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QUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFFO0NBQzFELFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDekU7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQy9CO0NBQ0EsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0NBQ2xCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNsQjtDQUNBLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0NBQ3ZELFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3ZEO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUNqQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsUUFBUSxJQUFJO0NBQ3BCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDMUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7Q0FDM0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUM7Q0FDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7Q0FDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7Q0FDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDOUQ7Q0FDQSxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztDQUNoRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRTtDQUNwRTtDQUNBLFlBQVksTUFBTTtDQUNsQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHO0FBQy9CO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3REO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFNO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUN4RSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRztBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDdkcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFFO0FBQ3BIO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMxQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBOztDQ3JSQTtBQUlBO0NBQ08sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0NBQ3BDLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Q0FDckI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0NBQ3RCLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQztBQUNoQztDQUNBLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ1gsRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDO0FBQzdDO0NBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxJQUFJ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R0FBRyxJQUFJLENBQUMsQ0FBQztDQUN4QyxFQUFFLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztDQUNyQixFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDOUM7Q0FDQSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaO0NBQ0E7Q0FDQSxFQUFFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0NBQ2xELEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDMUIsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNsRSxHQUFHLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Q0FDcEMsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzNELEdBQUc7Q0FDSCxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzVDO0NBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDL0MsR0FBRyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlCLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtDQUMzQixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDNUMsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUNwQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNwRCxJQUFJLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztDQUNyQixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUMvQyxLQUFLLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0IsS0FBSyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDakQsS0FBSyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMxQyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0NBQzdDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztDQUNoQixLQUFLO0NBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDeEMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQ3BDLElBQUksTUFBTTtD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O0NBQ0EsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM1QixFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzNCLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDN0IsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEM7Q0FDQTtDQUNBLEVBQUUsR0FBRyxDQUFDLFdBQVcsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDM0M7Q0FDQTtDQUNBLEVBQUUsTUFBTSxRQUFRO0NBQ2hCLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztDQUNyRSxFQUFFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUM7Q0FDM0QsRUFBRSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztDQUMxRSxFQUFFLE1BQU0sT0FBTztDQUNmLEdBQUcsSUFBSSxDQUFDLFdBQVc7Q0FDbkIsR0FBRyxNQUFNO0NBQ1QsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDO0NBQ3pCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQSxFQUFFLElBQUksVUFBVSxHQUFHLEtB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QUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDZjtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxV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QUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFO0NBQ1gsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUI7Q0FDQSxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQztDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7Q0FDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7Q0FDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztDQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNoRCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDekIsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0NBQ1os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QUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM1RSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdDLEdBQUc7QUFDSDtDQUNBLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRTtDQUNsQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0NBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNoQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMxQixLQUFLO0NBQ0wsR0FBRztDQUNIOzs7Ozs7Ozs7Ozs7OzsifQ== diff --git a/build/uil.min.js b/build/uil.min.js index 924fd0f..cc88dcc 100644 --- a/build/uil.min.js +++ b/build/uil.min.js @@ -1,6 +1,9615 @@ -/** - * @license - * Copyright 2010-2021 Uil.js Authors - * SPDX-License-Identifier: MIT - */ -!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?s(exports):"function"==typeof define&&define.amd?define(["exports"],s):s((t="undefined"!=typeof globalThis?globalThis:t||self).UIL={})}(this,(function(t){"use strict";const s={ui:[],dom:null,ID:null,lock:!1,wlock:!1,current:-1,needReZone:!0,needResize:!1,forceZone:!1,isEventsInit:!1,isLeave:!1,addDOMEventListeners:!0,downTime:0,prevTime:0,prevDefault:["contextmenu"],pointerEvent:["pointerdown","pointermove","pointerup"],eventOut:["pointercancel","pointerout","pointerleave"],xmlserializer:null,tmpTime:null,tmpImage:null,oldCursor:"auto",input:null,parent:null,firstImput:!0,hiddenImput:null,hiddenSizer:null,hasFocus:!1,startInput:!1,inputRange:[0,0],cursorId:0,str:"",pos:0,startX:-1,moveX:-1,debugInput:!1,isLoop:!1,listens:[],e:{type:null,clientX:0,clientY:0,keyCode:NaN,key:null,delta:0},isMobile:!1,now:null,needsUpdate:!1,getTime:function(){return self.performance&&self.performance.now?self.performance.now.bind(performance):Date.now},add:function(t){s.ui.push(t),s.getZone(t),s.isEventsInit||s.initEvents()},testMobile:function(){let t=navigator.userAgent;return!!(t.match(/Android/i)||t.match(/webOS/i)||t.match(/iPhone/i)||t.match(/iPad/i)||t.match(/iPod/i)||t.match(/BlackBerry/i)||t.match(/Windows Phone/i))},remove:function(t){let i=s.ui.indexOf(t);-1!==i&&(s.removeListen(t),s.ui.splice(i,1)),0===s.ui.length&&s.removeEvents()},initEvents:function(){if(s.isEventsInit)return;let t=document.body;s.isMobile=s.testMobile(),s.now=s.getTime(),s.isMobile?t.style.touchAction="none":t.addEventListener("wheel",s,{passive:!1}),console.log("R.addDOMEventListeners "+s.addDOMEventListeners),s.addDOMEventListeners&&(t.addEventListener("pointercancel",s),t.addEventListener("pointerleave",s),t.addEventListener("pointermove",s),t.addEventListener("pointerdown",s),t.addEventListener("pointerup",s),t.addEventListener("keydown",s,!1),t.addEventListener("keyup",s,!1)),window.addEventListener("resize",s.resize,!1),s.isEventsInit=!0,s.dom=t},removeEvents:function(){if(!s.isEventsInit)return;let t=document.body;s.isMobile||t.removeEventListener("wheel",s),s.addDOMEventListeners&&(t.removeEventListener("pointercancel",s),t.removeEventListener("pointerleave",s),t.removeEventListener("pointermove",s),t.removeEventListener("pointerdown",s),t.removeEventListener("pointerup",s),t.removeEventListener("keydown",s),t.removeEventListener("keyup",s)),window.removeEventListener("resize",s.resize),s.isEventsInit=!1},resize:function(){let t,i=s.ui.length;for(;i--;)t=s.ui[i],t.isGui&&!t.isCanvasOnly&&t.autoResize&&t.calc();s.needReZone=!0,s.needResize=!1},out:function(){console.log("im am out"),s.clearOldID()},in:function(){console.log("im am in")},fakeUp:function(){this.handleEvent({type:"pointerup"})},handleEvent:function(t){-1!==s.prevDefault.indexOf(t.type)&&t.preventDefault(),s.needResize&&s.resize(),s.findZone(s.forceZone);let i=s.e,e=!1;"keydown"===t.type&&s.keydown(t),"keyup"===t.type&&s.keyup(t),"wheel"===t.type?i.delta=t.deltaY>0?1:-1:i.delta=0;let h=t.pointerType;if(i.clientX=("touch"===h?t.pageX:t.clientX)||0,i.clientY=("touch"===h?t.pageY:t.clientY)||0,i.type=t.type,-1!==s.eventOut.indexOf(t.type)&&(e=!0,i.type="mouseup"),"pointerleave"===t.type&&(s.isLeave=!0),"pointerdown"===t.type&&(i.type="mousedown"),"pointerup"===t.type&&(i.type="mouseup"),"pointermove"===t.type&&(s.isLeave&&(s.isLeave=!1,s.resize()),i.type="mousemove"),"mousedown"===i.type){if(s.downTime=s.now(),s.downTime-s.prevTime<200)return s.selectAll(),!1;s.prevTime=s.downTime,s.forceZone=!1}"mousedown"===i.type&&s.clearInput(),"mousedown"===i.type&&(s.lock=!0),"mouseup"===i.type&&(s.lock=!1),s.isMobile&&"mousedown"===i.type&&s.findID(i),"mousemove"!==i.type||s.lock||s.findID(i),null!==s.ID&&(s.ID.isCanvasOnly&&(i.clientX=s.ID.mouse.x,i.clientY=s.ID.mouse.y),s.ID.handleEvent(i)),s.isMobile&&"mouseup"===i.type&&s.clearOldID(),e&&s.clearOldID()},findID:function(t){let i,e,h,o=s.ui.length,n=-1;for(;o--;)if(i=s.ui[o],i.isCanvasOnly?(e=i.mouse.x,h=i.mouse.y):(e=t.clientX,h=t.clientY),s.onZone(i,e,h)){n=o,n!==s.current&&(s.clearOldID(),s.current=n,s.ID=i);break}-1===n&&s.clearOldID()},clearOldID:function(){s.ID&&(s.current=-1,s.ID.reset(),s.ID=null,s.cursor())},calcUis:(t,i,e,h=!1)=>{let o,n,r,l=t.length,a=0,c=0,d=0;for(;l--;)o=t[c],c++,!h&&o.isGroup&&o.calcUis(),r=o.margin,o.zone.w=o.w,o.zone.h=o.h+r,o.autoWidth?(a=0,o.zone.x=i.x+o.dx,o.zone.y=e,e+=o.h+r,d+=o.h+r):(0===a&&(d+=o.h+r),o.zone.x=i.x+a,o.zone.y=e,n=s.getWidth(o),n?o.zone.w=o.w=n:o.fw&&(o.zone.w=o.w=o.fw),a+=o.zone.w,a>=i.w&&(e+=o.h+r,a=0));return d},findTarget:function(t,i){let e=t.length;for(;e--;)if(s.onZone(t[e],i.clientX,i.clientY))return e;return-1},findZone:function(t){if(s.needReZone||t){for(var i,e=s.ui.length;e--;)i=s.ui[e],s.getZone(i),i.isGui&&i.calcUis();s.needReZone=!1}},onZone:function(t,s,i){if(void 0===s||void 0===i)return!1;let e=t.zone,h=s-e.x,o=i-e.y,n=h>=0&&o>=0&&h<=e.w&&o<=e.h;return n?t.local.set(h,o):t.local.neg(),n},getWidth:function(t){return t.getDom().clientWidth},getZone:function(t){if(t.isCanvasOnly)return;let s=t.getDom().getBoundingClientRect();t.zone={x:s.left,y:s.top,w:s.width,h:s.height}},cursor:function(t){(t=t||"auto")!==s.oldCursor&&(document.body.style.cursor=t,s.oldCursor=t)},toCanvas:function(t,i,e,h){if(s.xmlserializer||(s.xmlserializer=new XMLSerializer),h&&null!==s.tmpTime&&(clearTimeout(s.tmpTime),s.tmpTime=null),null!==s.tmpTime)return;s.lock&&(s.tmpTime=setTimeout((function(){s.tmpTime=null}),10));let o=!1;i===t.canvas.width&&e===t.canvas.height||(o=!0),null===s.tmpImage&&(s.tmpImage=new Image);let n=s.tmpImage,r=s.xmlserializer.serializeToString(t.content),l=''+r+"";n.onload=function(){let s=t.canvas.getContext("2d");o?(t.canvas.width=i,t.canvas.height=e):s.clearRect(0,0,i,e),s.drawImage(this,0,0),t.onDraw()},n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(l),n.crossOrigin="",s.needsUpdate=!1},setHidden:function(){null===s.hiddenImput&&(s.hiddenImput=document.createElement("input"),s.hiddenImput.type="text",s.hiddenSizer=document.createElement("div"),document.body.appendChild(s.hiddenImput),document.body.appendChild(s.hiddenSizer));let t=s.debugInput?"":"opacity:0; zIndex:0;",i=s.parent.css.txtselect+"padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;"+t;s.hiddenImput.style.cssText=i+"bottom:10px;"+(s.debugInput?"":"transform:scale(0);"),s.hiddenSizer.style.cssText=i+"bottom:40px;",s.hiddenImput.style.width=s.input.clientWidth+"px",s.hiddenImput.value=s.str,s.hiddenSizer.innerHTML=s.str,s.hasFocus=!0},clearHidden:function(t){null!==s.hiddenImput&&(s.hasFocus=!1)},clickPos:function(t){let i=s.str.length,e=0,h=0;for(;i--&&(e+=s.textWidth(s.str[h]),!(e>=t));)h++;return h},upInput:function(t,i){if(null===s.parent)return!1;let e=!1;if(i){let i=s.clickPos(t);if(s.moveX=i,-1===s.startX)s.startX=i,s.cursorId=i,s.inputRange=[s.startX,s.startX];else{s.moveX!==s.startX&&(s.startX>s.moveX?s.inputRange=[s.moveX,s.startX]:s.inputRange=[s.startX,s.moveX])}e=!0}else-1!==s.startX&&(s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.startX=-1,e=!0);return e&&s.selectParent(),e},selectAll:function(){s.parent&&(s.str=s.input.textContent,s.inputRange=[0,s.str.length],s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.cursorId=s.inputRange[1],s.selectParent())},selectParent:function(){var t=s.textWidth(s.str.substring(0,s.cursorId)),i=s.textWidth(s.str.substring(0,s.inputRange[0])),e=s.textWidth(s.str.substring(s.inputRange[0],s.inputRange[1]));s.parent.select(t,i,e,s.hiddenSizer.innerHTML)},textWidth:function(t){return null===s.hiddenSizer?0:(t=t.replace(/ /g," "),s.hiddenSizer.innerHTML=t,s.hiddenSizer.clientWidth)},clearInput:function(){null!==s.parent&&(s.firstImput||s.parent.validate(!0),s.clearHidden(),s.parent.unselect(),s.input.style.background=s.parent.colors.back,s.input.style.borderColor=s.parent.colors.border,s.parent.isEdit=!1,s.input=null,s.parent=null,s.str="",s.firstImput=!0)},setInput:function(t,i){s.clearInput(),s.input=t,s.parent=i,s.input.style.background=s.parent.colors.backoff,s.input.style.borderColor=s.parent.colors.select,s.str=s.input.textContent,s.setHidden()},keydown:function(t){if(null===s.parent)return;let i=t.which;t.shiftKey,s.firstImput=!1,s.hasFocus&&(window.focus(),s.hiddenImput.focus()),s.parent.isEdit=!0,13===i?s.clearInput():s.input.isNum?t.keyCode>47&&t.keyCode<58||t.keyCode>95&&t.keyCode<106||190===t.keyCode||110===t.keyCode||8===t.keyCode||109===t.keyCode?s.hiddenImput.readOnly=!1:s.hiddenImput.readOnly=!0:s.hiddenImput.readOnly=!1},keyup:function(t){null!==s.parent&&(s.str=s.hiddenImput.value,s.parent.allEqual?s.parent.sameStr(s.str):s.input.textContent=s.str,s.cursorId=s.hiddenImput.selectionStart,s.inputRange=[s.hiddenImput.selectionStart,s.hiddenImput.selectionEnd],s.selectParent(),s.parent.validate())},loop:function(){s.isLoop&&requestAnimationFrame(s.loop),s.needsUpdate=s.update(),s.ui[0]&&s.needsUpdate&&s.ui[0].draw()},update:function(){let t=s.listens.length,i=!1;for(;t--;){s.listens[t].listening()&&(i=!0)}return i},removeListen:function(t){let i=s.listens.indexOf(t);-1!==i&&s.listens.splice(i,1),0===s.listens.length&&(s.isLoop=!1)},addListen:function(t){return-1===s.listens.indexOf(t)&&(s.listens.push(t),s.isLoop||(s.isLoop=!0,s.loop()),!0)}},i=s,e={transition:.2,frag:document.createDocumentFragment(),colorRing:null,joystick_0:null,joystick_1:null,circular:null,knob:null,pad2d:null,svgns:"http://www.w3.org/2000/svg",links:"http://www.w3.org/1999/xlink",htmls:"http://www.w3.org/1999/xhtml",DOM_SIZE:["height","width","top","left","bottom","right","margin-left","margin-right","margin-top","margin-bottom"],SVG_TYPE_D:["pattern","defs","transform","stop","animate","radialGradient","linearGradient","animateMotion","use","filter","feColorMatrix"],SVG_TYPE_G:["svg","rect","circle","path","polygon","text","g","line","foreignObject"],PI:Math.PI,TwoPI:2*Math.PI,pi90:.5*Math.PI,pi60:Math.PI/3,torad:Math.PI/180,todeg:180/Math.PI,clamp:(t,s,i)=>t=(t=ti?i:t,isDivid:t=>.5*t===Math.floor(.5*t),size:{w:240,h:20,p:30,s:8},defineColor:(t,s=e.colors)=>{let i={...s},h=["fontFamily","fontWeight","fontShadow","fontSize"],o=!1;t.font&&(t.fontFamily=t.font),t.shadow&&(t.fontShadow=t.shadow),t.weight&&(t.fontWeight=t.weight),t.fontColor&&(t.text=t.fontColor),t.color&&(t.text=t.color),t.text&&(i.text=t.text,t.fontColor||t.color||(i.title=e.ColorLuma(t.text,-.25),i.titleoff=e.ColorLuma(t.text,-.5)),i.textOver=e.ColorLuma(t.text,.25),i.textSelect=e.ColorLuma(t.text,.5)),t.button&&(i.button=t.button,i.border=e.ColorLuma(t.button,.1),i.overoff=e.ColorLuma(t.button,.2)),t.select&&(i.select=t.select,i.over=e.ColorLuma(t.select,-.1)),t.itemBg&&(t.back=t.itemBg),t.back&&(i.back=t.back,i.backoff=e.ColorLuma(t.back,-.1)),t.fontSelect&&(i.textSelect=t.fontSelect),t.groupBorder&&(i.gborder=t.groupBorder),t.bgOver&&(i.backgroundOver=t.bgOver);for(let s in i)void 0!==t[s]&&(i[s]=t[s]);for(let s in t)-1!==h.indexOf(s)&&(o=!0);return o&&e.defineText(i),i},colors:{sx:4,sy:2,radius:2,showOver:1,content:"none",background:"rgba(50,50,50,0.15)",backgroundOver:"rgba(50,50,50,0.3)",title:"#CCC",titleoff:"#BBB",text:"#DDD",textOver:"#EEE",textSelect:"#FFF",back:"rgba(0,0,0,0.2)",backoff:"rgba(0,0,0,0.3)",border:"#4c4c4c",borderSize:1,gborder:"none",groups:"none",button:"#3c3c3c",overoff:"#5c5c5c",over:"#024699",select:"#308AFF",action:"#FF3300",fontFamily:"Consolas, monospace",fontWeight:"normal",fontShadow:"none",fontSize:12,joyOver:"rgba(48,138,255,0.25)",joyOut:"rgba(100,100,100,0.5)",joySelect:"#308AFF",hide:"rgba(0,0,0,0)"},css:{basic:"position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; -o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;",button:"display:flex; align-items:center; justify-content:center; text-align:center;",middle:"display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;"},svgs:{g1:"M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z",g2:"M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z",group:"M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z",arrow:"M 3 8 L 8 5 3 2 3 8 Z",arrowDown:"M 5 8 L 8 3 2 3 5 8 Z",arrowUp:"M 5 2 L 2 7 8 7 5 2 Z",solid:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z",body:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z",vehicle:"M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z",articulation:"M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z",character:"M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z",terrain:"M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z",joint:"M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z",ray:"M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z",collision:"M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z",map:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",material:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",texture:"M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z",object:"M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z",none:"M 9 5 L 5 5 5 9 9 9 9 5 Z",cursor:"M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z",load:"M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z",save:"M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z",extern:"M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z"},rezone(){i.needReZone=!0},getImput:function(){return!!i.input},setStyle:function(t){for(var s in t)e.colors[s]&&(e.colors[s]=t[s]);e.setText()},defineText:function(t){e.setText(t.fontSize,t.text,t.fontFamily,t.fontShadow,t.fontWeight)},setText:function(t,s,i,h,o){let n=e.colors;void 0===i&&(i=n.fontFamily),void 0===t&&(t=n.fontSize),void 0===h&&(h=n.fontShadow),void 0===o&&(o=n.fontWeight),void 0===s&&(s=n.text),isNaN(t)?-1===t.search("em")&&(t+="px"):t+="px",e.css.txt=e.css.basic+e.css.middle+" font-family:"+i+"; font-weight:"+o+"; font-size:"+t+"; color:"+n.text+"; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;","none"!==h&&(e.css.txt+=" text-shadow: 1px 1px 1px "+h+";"),e.css.txtselect=e.css.txt+"padding:0px 4px; border:1px dashed "+n.border+";",e.css.item=e.css.txt+"padding:0px 4px; position:relative; margin-bottom:1px; "},cloneCss:function(){return{...e.css}},clone:function(t){return t.cloneNode(!0)},setSvg:function(t,s,i,e,h){-1===e?t.setAttributeNS(null,s,i):void 0!==h?t.childNodes[e||0].childNodes[h||0].setAttributeNS(null,s,i):t.childNodes[e||0].setAttributeNS(null,s,i)},setCss:function(t,s){for(let i in s)-1!==e.DOM_SIZE.indexOf(i)?t.style[i]=s[i]+"px":t.style[i]=s[i]},set:function(t,s){for(let i in s)"txt"===i&&(t.textContent=s[i]),"link"===i?t.setAttributeNS(e.links,"xlink:href",s[i]):t.setAttributeNS(null,i,s[i])},get:function(t,s){if(void 0===s)return t;if(!isNaN(s))return t.childNodes[s];if(s instanceof Array){if(2===s.length)return t.childNodes[s[0]].childNodes[s[1]];if(3===s.length)return t.childNodes[s[0]].childNodes[s[1]].childNodes[s[2]]}},dom:function(t,s,i,h,o){return t=t||"div",-1!==e.SVG_TYPE_D.indexOf(t)||-1!==e.SVG_TYPE_G.indexOf(t)?"svg"===t?(h=document.createElementNS(e.svgns,"svg"),e.set(h,i)):(void 0===h&&(h=document.createElementNS(e.svgns,"svg")),e.addAttributes(h,t,i,o)):h=void 0===h?document.createElementNS(e.htmls,t):h.appendChild(document.createElementNS(e.htmls,t)),s&&(h.style.cssText=s),void 0===o?h:h.childNodes[o||0]},addAttributes:function(t,s,i,h){let o=document.createElementNS(e.svgns,s);return e.set(o,i),e.get(t,h).appendChild(o),-1!==e.SVG_TYPE_G.indexOf(s)&&(o.style.pointerEvents="none"),o},clear:function(t){for(e.purge(t);t.firstChild;)t.firstChild.firstChild&&e.clear(t.firstChild),t.removeChild(t.firstChild)},purge:function(t){let s,i,h=t.attributes;if(h)for(s=h.length;s--;)i=h[s].name,"function"==typeof t[i]&&(t[i]=null);if(h=t.childNodes,h)for(s=h.length;s--;)e.purge(t.childNodes[s])},addSVGGlowEffect:function(){if(null!==document.getElementById("UILGlow"))return;let t=e.initUILEffects(),s=e.addAttributes(t,"filter",{id:"UILGlow",x:"-20%",y:"-20%",width:"140%",height:"140%"});e.addAttributes(s,"feGaussianBlur",{in:"SourceGraphic",stdDeviation:"3",result:"uilBlur"});let i=e.addAttributes(s,"feMerge",{});for(let t=0;t<=3;t++)e.addAttributes(i,"feMergeNode",{in:"uilBlur"});e.addAttributes(i,"feMergeNode",{in:"SourceGraphic"})},initUILEffects:function(){let t=document.getElementById("UILSVGEffects");return null===t&&(t=e.dom("svg",void 0,{id:"UILSVGEffects",width:"0",height:"0"}),document.body.appendChild(t)),t},ColorLuma:function(t,s){"n"===t&&(t="#000"),(t=String(t).replace(/[^0-9a-f]/gi,"")).length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),s=s||0;let i,e,h="#";for(e=0;e<3;e++)i=parseInt(t.substr(2*e,2),16),i=Math.round(Math.min(Math.max(0,i+i*s),255)).toString(16),h+=("00"+i).substr(i.length);return h},findDeepInver:function(t){return.3*t[0]+.59*t[1]+.11*t[2]<=.6},lerpColor:function(t,s,i){let e={};for(let h=0;h<3;h++)e[h]=t[h]+(s[h]-t[h])*i;return e},hexToHtml:function(t){return"#"+("000000"+(t=void 0===t?0:t).toString(16)).substr(-6)},htmlToHex:function(t){return t.toUpperCase().replace("#","0x")},u255:function(t,s){return parseInt(t.substring(s,s+2),16)/255},u16:function(t,s){return parseInt(t.substring(s,s+1),16)/15},unpack:function(t){return 7==t.length?[e.u255(t,1),e.u255(t,3),e.u255(t,5)]:4==t.length?[e.u16(t,1),e.u16(t,2),e.u16(t,3)]:void 0},p255:function(t){let s=Math.round(255*t).toString(16);return s.length<2&&(s="0"+s),s},pack:function(t){return"#"+e.p255(t[0])+e.p255(t[1])+e.p255(t[2])},htmlRgb:function(t){return"rgb("+Math.round(255*t[0])+","+Math.round(255*t[1])+","+Math.round(255*t[2])+")"},pad:function(t){return 1==t.length&&(t="0"+t),t},rgbToHex:function(t){let s=Math.round(255*t[0]).toString(16),i=Math.round(255*t[1]).toString(16),h=Math.round(255*t[2]).toString(16);return"#"+e.pad(s)+e.pad(i)+e.pad(h)},hueToRgb:function(t,s,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(s-t)*i:i<.5?s:i<2/3?t+6*(s-t)*(2/3-i):t},rgbToHsl:function(t){let s=t[0],i=t[1],e=t[2],h=Math.min(s,i,e),o=Math.max(s,i,e),n=o-h,r=0,l=0,a=(h+o)/2;return a>0&&a<1&&(l=n/(a<.5?2*a:2-2*a)),n>0&&(o==s&&o!=i&&(r+=(i-e)/n),o==i&&o!=e&&(r+=2+(e-s)/n),o==e&&o!=s&&(r+=4+(s-i)/n),r/=6),[r,l,a]},hslToRgb:function(t){let s,i,h=t[0],o=t[1],n=t[2];return 0===o?[n,n,n]:(i=n<=.5?n*(o+1):n+o-n*o,s=2*n-i,[e.hueToRgb(s,i,h+.33333),e.hueToRgb(s,i,h),e.hueToRgb(s,i,h-.33333)])},makeGradiant:function(t,s,i,h){e.dom(t,null,s,i,0);let o,n=i.childNodes[0].childNodes.length-1;for(let t=0;t0){for(a=6;a--;)r[a]=(113*r[a]+u).toFixed(2);c=" M"+r[0]+" "+r[1]+" Q"+r[2]+" "+r[3]+" "+r[4]+" "+r[5],d=[[0,g[0],1],[100,g[1],1]],e.makeGradiant("linearGradient",{id:"G"+l,x1:r[0],y1:r[1],x2:r[4],y2:r[5],gradientUnits:"userSpaceOnUse"},s,d),e.dom("path","",{d:c,"stroke-width":30,stroke:"url(#G"+l+")","stroke-linecap":"butt"},s,1)}m=n-p,g[0]=g[1]}d=[[0,"#FFFFFF",1],[50,"#FFFFFF",0],[50,"#000000",0],[100,"#000000",1]],e.makeGradiant("linearGradient",{id:"GL0",x1:0,y1:u-84.9,x2:0,y2:212.9,gradientUnits:"userSpaceOnUse"},s,d),d=[[0,"#7f7f7f",1],[50,"#7f7f7f",.5],[100,"#7f7f7f",0]],e.makeGradiant("linearGradient",{id:"GL1",x1:78.95,y1:0,x2:226,y2:0,gradientUnits:"userSpaceOnUse"},s,d),e.dom("g",null,{"transform-origin":"128px 128px",transform:"rotate(0)"},s),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"red"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL1)","stroke-width":1,stroke:"url(#GL1)"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL0)","stroke-width":1,stroke:"url(#GL0)"},s,2),e.dom("path","",{d:"M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z",fill:"none","stroke-width":2,stroke:"#000"},s,2),e.dom("circle","",{cx:128,cy:128,r:6,"stroke-width":2,stroke:"#000",fill:"none"},s),e.colorRing=s},icon:function(t,s,i){i=i||40;let h=[""];switch(t){case"logo":h[1]="";break;case"donate":h[1]="";break;case"neo":h[1]="";break;case"phy":h[1]="";break;case"config":h[1]="";break;case"github":h[1]="";break;case"save":h[1]=""}return h[2]="",h.join("\n")},logoFill_d:"\n\t\tM 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 \n\t\tL 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 \n\t\tM 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 \n\t\tQ 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z\n\t\t",logo_github:"\n\t\tM 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 \n\t\t159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 \n\t\t216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 \n\t\t166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 \n\t\t82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z\n\t\t",logo_neo:"\n\t\tM 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 \n\t\t60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 \n\t\t186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 \n\t\t67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L \n\t\t134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z\n\t\t",logo_phy:"\n\t\tM 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 \n\t\tQ 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95\n\t\t",logo_config:"\n\t\tM 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 \n\t\tL 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 \n\t\tQ 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75\n\t\t",logo_donate:"\n\t\tM 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 \n\t\t106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 \n\t\t112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 \n\t\t154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 \n\t\t194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 \n\t\tQ 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 \n\t\t83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 \n\t\t94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 \n\t\t149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M \n\t\t66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 \n\t\t72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 \n\t\t54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 \n\t\t197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 \n\t\t200.9 187.5 200.9 187.5 195.35 Z\n\t\t"};e.setText();const h=e;class o{static autoTypes(t){let s=[];switch(t){case"svg":s=[{accept:{"image/svg+xml":".svg"}}];break;case"wav":s=[{accept:{"audio/wav":".wav"}}];break;case"mp3":s=[{accept:{"audio/mpeg":".mp3"}}];break;case"mp4":s=[{accept:{"video/mp4":".mp4"}}];break;case"bin":case"hex":s=[{description:"Binary Files",accept:{"application/octet-stream":[".bin",".hex"]}}];break;case"text":s=[{description:"Text Files",accept:{"text/plain":[".txt",".text"],"text/html":[".html",".htm"]}}];break;case"json":s=[{description:"JSON Files",accept:{"application/json":[".json"]}}];break;case"js":s=[{description:"JavaScript Files",accept:{"text/javascript":[".js"]}}];break;case"image":s=[{description:"Images",accept:{"image/*":[".png",".gif",".jpeg",".jpg"]}}];break;case"icon":s=[{description:"Icons",accept:{"image/x-ico":[".ico"]}}];break;case"lut":s=[{description:"Lut",accept:{"text/plain":[".cube",".3dl"]}}]}return s}static async load(t={}){"function"!=typeof window.showOpenFilePicker&&(window.showOpenFilePicker=o.showOpenFilePickerPolyfill);try{let s=t.type||"";const i={excludeAcceptAllOption:!!s,multiple:!1};i.types=o.autoTypes(s);const e=await window.showOpenFilePicker(i),h=await e[0].getFile();if(!h)return null;let n=h.name,r=n.substring(n.lastIndexOf(".")+1,n.length);const l=["png","jpg","jpeg","mp4","webm","ogg","mp3"],a=["sea","z","hex","bvh","BVH","glb","gltf"],c=new FileReader;-1!==l.indexOf(r)?c.readAsDataURL(h):-1!==a.indexOf(r)?c.readAsArrayBuffer(h):c.readAsText(h),c.onload=function(i){let e=i.target.result;switch(s){case"image":let s=new Image;s.onload=function(){t.callback&&t.callback(s,n,r)},s.src=e;break;case"json":t.callback&&t.callback(JSON.parse(e),n,r);break;default:t.callback&&t.callback(e,n,r)}}}catch(s){console.log(s),t.always&&t.callback&&t.callback(null)}}static showOpenFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("input");i.type="file",i.multiple=t.multiple,i.accept=t.types.map((t=>t.accept)).flatMap((t=>Object.keys(t).flatMap((s=>t[s])))).join(","),i.addEventListener("change",(()=>{s([...i.files].map((t=>({getFile:async()=>new Promise((s=>{s(t)}))}))))})),i.click()}))}static async save(t={}){let s=!1;"function"!=typeof window.showSaveFilePicker&&(window.showSaveFilePicker=o.showSaveFilePickerPolyfill,s=!0);try{let i=t.type||"";const e={suggestedName:t.name||"hello",data:t.data||""};e.types=o.autoTypes(i),e.finalType=Object.keys(e.types[0].accept)[0],e.suggestedName+=e.types[0].accept[e.finalType][0];const h=await window.showSaveFilePicker(e);if(s)return;const n=await h.createWritable();let r=new Blob([e.data],{type:e.finalType});await n.write(r),await n.close()}catch(t){console.log(t)}}static showSaveFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("a");i.download=t.suggestedName||"my-file.txt";let e=new Blob([t.data],{type:t.finalType});i.href=URL.createObjectURL(e),i.addEventListener("click",(()=>{s(setTimeout((()=>URL.revokeObjectURL(i.href)),1e3))})),i.click()}))}static async getFolder(){try{const t=await window.showDirectoryPicker(),s=[];for await(const i of t.values()){const t=await i.getFile();s.push(t)}return console.log(s),s}catch(t){console.log(t)}}}class n{constructor(t=0,s=0){this.x=t,this.y=s}set(t,s){return this.x=t,this.y=s,this}divide(t){return this.x/=t.x,this.y/=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divideScalar(t){return this.multiplyScalar(1/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}angle(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t}addScalar(t){return this.x+=t,this.y+=t,this}negate(){return this.x*=-1,this.y*=-1,this}neg(){return this.x=-1,this.y=-1,this}isZero(){return 0===this.x&&0===this.y}copy(t){return this.x=t.x,this.y=t.y,this}equals(t){return t.x===this.x&&t.y===this.y}nearEquals(t,s){return t.x.toFixed(s)===this.x.toFixed(s)&&t.y.toFixed(s)===this.y.toFixed(s)}lerp(t,s){return null===t?(this.x-=this.x*s,this.y-=this.y*s):(this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s),this}}class r{constructor(t={}){this.lock=t.lock||!1,this.neverlock=!1,this.isSpace=t.isSpace||!1,this.main=t.main||null,this.isUI=t.isUI||!1,this.group=t.group||null,this.isListen=!1,this.top=0,this.ytop=0,this.dx=t.dx||0,this.isSelectable=void 0!==t.selectable&&t.selectable,this.unselectable=void 0!==t.unselect?t.unselect:this.isSelectable,this.ontop=!!t.ontop&&t.ontop,this.css=this.main?this.main.css:h.css,this.colors=h.defineColor(t,this.main?this.group?this.group.colors:this.main.colors:h.colors),this.overEffect=this.colors.showOver,this.svgs=h.svgs,this.zone={x:0,y:0,w:0,h:0,d:0},this.local=(new n).neg(),this.isCanvasOnly=!1,this.isSelect=!1,this.p=void 0!==t.p?t.p:h.size.p,this.w=this.isUI?this.main.size.w:h.size.w,void 0!==t.w&&(this.w=t.w),this.h=this.isUI?this.main.size.h:h.size.h,void 0!==t.h&&(this.h=t.h),this.isSpace?this.lock=!0:this.h=this.h<11?11:this.h,this.fw=t.fw||0,this.autoWidth=t.auto||!0,this.isOpen=!1,this.radius=t.radius||this.colors.radius,this.transition=t.transition||h.transition,this.isNumber=!1,this.noNeg=t.noNeg||!1,this.allEqual=t.allEqual||!1,this.mono=!1,this.isEdit=!1,this.simple=t.simple||!1,this.simple&&(this.sa=0),this.setSize(this.w),void 0!==t.sa&&(this.sa=t.sa),void 0!==t.sb&&(this.sb=t.sb),this.simple&&(this.sb=this.w-this.sa),this.sc=void 0===t.sc?47:t.sc,this.objectLink=null,this.isSend=!1,this.objectKey=null,this.txt=t.name||"",this.name=t.rename||this.txt,this.target=t.target||null,this.callback=void 0===t.callback?null:t.callback,this.endCallback=null,this.openCallback=void 0===t.openCallback?null:t.openCallback,this.closeCallback=void 0===t.closeCallback?null:t.closeCallback,null===this.callback&&this.isUI&&null!==this.main.callback&&(this.callback=this.group?this.group.callback:this.main.callback),this.c=[],this.s=[],this.useFlex=!!this.isUI&&this.main.useFlex;let s=this.useFlex?"display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;":"float:left;";this.c[0]=h.dom("div",this.css.basic+s+"position:relative; height:20px;"),this.s[0]=this.c[0].style,this.margin=this.colors.sy,this.mtop=0;let i=h.isDivid(this.margin);if(this.isUI&&this.margin&&(this.s[0].boxSizing="content-box",i?(this.mtop=.5*this.margin,this.s[0].borderTop=this.mtop+"px solid transparent",this.s[0].borderBottom=this.mtop+"px solid transparent"):this.s[0].borderBottom=this.margin+"px solid transparent"),this.simple||(this.c[1]=h.dom("div",this.css.txt+this.css.middle),this.s[1]=this.c[1].style,this.c[1].textContent=this.name,this.s[1].color=this.lock?this.colors.titleoff:this.colors.title),t.pos){this.s[0].position="absolute";for(let s in t.pos)this.s[0][s]=t.pos[s];this.mono=!0}t.css&&(this.s[0].cssText=t.css)}init(){this.ytop=this.top+this.mtop,this.zone.h=this.h+this.margin,this.zone.w=this.w;let t=this.s,s=this.c;t[0].height=this.h+"px",this.isUI&&(t[0].background=this.colors.background),!this.autoWidth&&this.useFlex?(t[0].flex="1 0 auto",t[0].minWidth=this.minw+"px",t[0].textAlign="center"):this.isUI&&(t[0].width="100%"),void 0!==s[1]&&this.autoWidth&&(t[1]=s[1].style,t[1].top="1px",t[1].height=this.h-2+"px");let e=h.frag;for(let i=1,h=s.length;i!==h;i++)void 0!==s[i]&&(e.appendChild(s[i]),t[i]=s[i].style);let o=null!==this.target?this.target:this.isUI?this.main.inner:document.body;this.ontop?o.insertAdjacentElement("afterbegin",s[0]):o.appendChild(s[0]),s[0].appendChild(e),this.rSize(),this.isUI||(this.c[0].style.pointerEvents="auto",i.add(this))}addTransition(){this.baseH&&this.transition&&this.isUI&&(this.c[0].style.transition="height "+this.transition+"s ease-out")}dom(t,s,i,e,o){return h.dom(t,s,i,e,o)}setSvg(t,s,i,e,o){h.setSvg(t,s,i,e,o)}setCss(t,s){h.setCss(t,s)}clamp(t,s,i){return h.clamp(t,s,i)}getColorRing(){return h.colorRing||h.makeColorRing(),h.clone(h.colorRing)}getJoystick(t){return h["joystick_"+t]||h.makeJoystick(t),h.clone(h["joystick_"+t])}getCircular(t){return h.circular||h.makeCircular(t),h.clone(h.circular)}getKnob(t){return h.knob||h.makeKnob(t),h.clone(h.knob)}getPad2d(t){return h.pad2d||h.makePad(t),h.clone(h.pad2d)}cursor(t){i.cursor(t)}update(){}reset(){}content(){return this.c[0]}getDom(){return this.c[0]}uiout(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.background)}uiover(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.backgroundOver)}rename(t){void 0!==this.c[1]&&(this.c[1].textContent=t)}listen(){return this.isListen=i.addListen(this),this}listening(){if(null===this.objectLink)return;if(this.isSend)return;if(this.isEdit)return;return this.setValue(this.objectLink[this.objectKey])}setValue(t){const s=this.value;this.isNumber?this.value=this.numValue(t):this.value=t,this.update();let i=!1;return s!==this.value&&(i=!0),i}onChange(t){if(!this.isSpace)return this.callback=t||null,this}onFinishChange(t){if(!this.isSpace)return this.callback=null,this.endCallback=t,this}onOpen(t){return this.openCallback=t,this}onClose(t){return this.closeCallback=t,this}send(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.isSend=!0,null!==this.objectLink&&(this.objectLink[this.objectKey]=t),this.callback&&this.callback(t,this.objectKey),this.isSend=!1}sendEnd(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.endCallback&&this.endCallback(t),null!==this.objectLink&&(this.objectLink[this.objectKey]=t)}dispose(){this.isListen&&i.removeListen(this),h.clear(this.c[0]),null!==this.target?null!==this.group?this.group.clearOne(this):this.target.removeChild(this.c[0]):this.isUI?this.main.clearOne(this):document.body.removeChild(this.c[0]),this.isUI||i.remove(this),this.c=null,this.s=null,this.callback=null,this.target=null,this.isListen=!1}clear(){}getWidth(){let t=i.getWidth(this);t&&(this.w=t)}setSize(t){if(this.autoWidth)if(this.w=t,this.simple)this.sb=this.w-this.sa;else{let t=this.w*(this.p/100);this.sa=Math.floor(t+8),this.sb=Math.floor(this.w-t-16)}}rSize(){this.autoWidth&&(this.isUI||(this.s[0].width=this.w+"px"),this.simple||(this.s[1].width=this.sa+"px"))}setTypeNumber(t){let s;switch(this.isNumber=!0,this.value=0,void 0!==t.value&&("string"==typeof t.value?this.value=1*t.value:this.value=t.value),this.min=void 0===t.min?-1/0:t.min,this.max=void 0===t.max?1/0:t.max,this.precision=void 0===t.precision?2:t.precision,this.precision){case 0:s=1;break;case 1:s=.1;break;case 2:s=.01;break;case 3:s=.001;break;case 4:s=1e-4;break;case 5:s=1e-5;break;case 6:s=1e-6}this.step=void 0===t.step?s:t.step,this.range=this.max-this.min,this.value=this.numValue(this.value)}numValue(t){return this.noNeg&&(t=Math.abs(t)),1*Math.min(this.max,Math.max(this.min,t)).toFixed(this.precision)}handleEvent(t){if(!this.lock)return this.neverlock&&(i.lock=!1),this[t.type]?this[t.type](t):console.error(t.type,"this type of event no existe !")}wheel(t){return!1}mousedown(t){return!1}mousemove(t){return!1}mouseup(t){return!1}keydown(t){return!1}keyup(t){return!1}setReferency(t,s){this.objectLink=t,this.objectKey=s}display(t=!1){this.s[0].visibility=t?"visible":"hidden"}open(){this.isOpen||(this.isOpen=!0,i.needResize=!0,this.openCallback&&this.openCallback())}close(){this.isOpen&&(this.isOpen=!1,i.needResize=!0,this.closeCallback&&this.closeCallback())}needZone(){i.needReZone=!0}rezone(){i.needReZone=!0}select(){}unselect(){}setInput(t){i.setInput(t,this)}upInput(t,s){return i.upInput(t,s)}selected(t){this.isSelect=t||!1}}class l extends r{constructor(t={}){super(t),this.value=t.value||!1,this.model=void 0!==t.mode?t.mode:0,this.onName=t.rename||this.txt,t.onName&&(t.onname=t.onName),t.onname&&(this.onName=t.onname),this.inh=t.inh||Math.floor(.8*this.h),this.inw=t.inw||36;let s=this.colors;if(0===this.model){let t=Math.floor(.5*this.h)-.5*(this.inh-2);this.c[2]=this.dom("div",this.css.basic+"background:"+s.inputBg+"; height:"+(this.inh-2)+"px; width:"+this.inw+"px; top:"+t+"px; border-radius:10px; border:2px solid "+s.back),this.c[3]=this.dom("div",this.css.basic+"height:"+(this.inh-6)+"px; width:16px; top:"+(t+2)+"px; border-radius:10px; background:"+s.button+";")}else this.p=0,void 0!==this.c[1]&&(this.c[1].textContent=""),this.c[2]=this.dom("div",this.css.txt+this.css.button+"top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.borderSize+"px solid "+s.border+"; border-radius:"+this.radius+"px;");this.stat=-1,this.init(),this.update()}mousedown(t){return this.value=!this.value,this.update(!0),this.mousemove(t)}mousemove(t){return this.cursor("pointer"),this.mode(!0)}reset(){return this.cursor(),this.mode()}mode(t){let s,i=!1,e=this.colors,h=this.s,o=this.value;if(s=t?o?4:3:o?2:1,this.stat!==s){if(this.stat=s,0!==this.model){switch(s){case 1:h[2].color=e.text,h[2].background=e.button;break;case 2:h[2].color=e.textSelect,h[2].background=e.select;break;case 3:h[2].color=e.textOver,h[2].background=e.overoff;break;case 4:h[2].color=e.textOver,h[2].background=e.over}this.c[2].innerHTML=o?this.onName:this.name}else{switch(s){case 1:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.button;break;case 2:h[2].background=h[2].borderColor=e.back,h[3].background=e.textOver;break;case 3:h[2].background=h[2].borderColor=e.back,h[3].background=e.overoff;break;case 4:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.textSelect}h[3].marginLeft=o?"17px":"2px",this.c[1].textContent=o?this.onName:this.name}i=!0}return i}update(t){this.mode(),t&&this.send()}rSize(){super.rSize();let t=this.s,s=this.w-10-this.inw;0===this.model?(t[2].left=s+"px",t[3].left=s+"px"):(t[2].left=this.sa+"px",t[2].width=this.sb+"px")}}class a extends r{constructor(t={}){super(t),this.value="",void 0!==t.value&&(this.value=t.value),this.values=t.value||this.txt,t.values&&(this.values=t.values),t.values||t.value||(this.txt=""),this.onName=t.onName||null,this.on=!1,this.bw=t.forceWidth||0,t.bw&&(this.bw=t.bw),this.space=t.space||3,"string"==typeof this.values&&(this.values=[this.values]),this.isDown=!1,this.neverlock=!0,this.res=0,this.lng=this.values.length,this.tmp=[],this.stat=[];let s,i=this.colors;for(let t=0;te[i][0]&&s.x0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.text,this.setSvg(this.c[3],"stroke",s,1);break;case 1:this.s[2].color=i.textOver,this.setSvg(this.c[3],"stroke",i.backoff,0),s=this.model>0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.textOver,this.setSvg(this.c[3],"stroke",s,1)}return this.cmode=t,!0}reset(){this.isDown=!1}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"circular"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;if(s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=s.angle()-this.pi90,this.r=(this.r%this.twoPi+this.twoPi)%this.twoPi,null!==this.oldr){let t=this.r-this.oldr;this.r=Math.abs(t)>Math.PI?this.oldr:this.r,t>6&&(this.r=0),t<-6&&(this.r=this.twoPi)}let i=1/this.twoPi,e=this.r*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=~~(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("circular"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:sMath.PI?1:0)+" 1 "+i+","+e}update(t){if(this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range,this.setSvg(this.c[3],"d",this.makePath(),1),this.model>0){let t=this.colors,s=h.pack(h.lerpColor(h.unpack(h.ColorLuma(t.text,-.75)),h.unpack(t.text),this.percent));this.setSvg(this.c[3],"stroke",s,1)}t&&this.send()}}class d extends r{constructor(t={}){super(t),this.ctype=t.ctype||"hex",this.wfixe=256,this.cw=this.sb>256?256:this.sb,null!=t.cw&&(this.cw=t.cw),this.side=t.side||"down",this.up="down"===this.side?0:1,this.baseH=this.h,this.offset=new n,this.decal=new n,this.pp=new n;let s=this.colors;this.c[2]=this.dom("div",`${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${s.borderSize}px solid ${s.border};`),this.c[0].style.display="block",this.c[3]=this.getColorRing(),this.c[3].style.visibility="hidden",this.hsl=null,this.value="#ffffff",void 0!==t.value&&(t.value instanceof Array?this.value=h.rgbToHex(t.value):isNaN(t.value)?this.value=t.value:this.value=h.hexToHtml(t.value)),this.bcolor=null,this.isDown=!1,this.fistDown=!1,this.notext=t.notext||!1,this.tr=98,this.tsl=Math.sqrt(3)*this.tr,this.hue=0,this.d=256,this.init(),this.setColor(this.value),void 0!==t.open&&this.open()}testZone(t,s){let i=this.local;return-1===i.x&&-1===i.y?"":this.up&&this.isOpen?i.y>this.wfixe?"title":"color":i.ythis.tr)e=(c+u.pi90)/u.TwoPI,this.hue=(e+1)%1,this.setHSL([(e+1)%1,this.hsl[1],this.hsl[2]]);else{l=s.x*this.ratio,a=s.y*this.ratio;let t=this.hue*u.TwoPI+u.PI;t<0&&(t+=2*u.PI),r=Math.atan2(-a,l),r<0&&(r+=2*u.PI);let i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,h=.5*this.tr,c=Math.tan(e)*h,d=Math.sqrt(l*l+a*a),p=Math.sqrt(h*h+c*c);if(d>p){let s=Math.tan(e)*d,o=Math.atan(s/p);o>u.pi60?o=u.pi60:o<-u.pi60&&(o=-u.pi60),r+=o-e,i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,c=Math.tan(e)*h,d=p=Math.sqrt(h*h+c*c)}n=Math.sin(i)*d/this.tsl+.5;let m=1-2*Math.abs(n-.5);o=(Math.cos(i)*d+this.tr/2)/(1.5*this.tr)/m,o=u.clamp(o,0,1),this.setHSL([this.hsl[0],o,n])}}setHeight(){this.h=this.isOpen?this.wfixe+this.baseH+5:this.baseH,this.s[0].height=this.h+"px",this.zone.h=this.h}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(){super.open(),this.setHeight(),this.up&&(this.zone.y-=this.wfixe+5);let t=this.h-this.baseH;this.s[3].visibility="visible",this.parentHeight(t)}close(){super.close(),this.up&&(this.zone.y+=this.wfixe+5);let t=this.h-this.baseH;this.setHeight(),this.s[3].visibility="hidden",this.parentHeight(-t)}update(t){let s=h.rgbToHex(h.hslToRgb([this.hsl[0],1,.5]));this.moveMarkers(),this.value=this.bcolor,this.setSvg(this.c[3],"fill",s,2,0),this.s[2].background=this.bcolor,this.notext||(this.c[2].textContent=h.htmlToHex(this.bcolor)),this.invert=h.findDeepInver(this.rgb),this.s[2].color=this.invert?"#fff":"#000",t&&("array"===this.ctype&&this.send(this.rgb),"rgb"===this.ctype&&this.send(h.htmlRgb(this.rgb)),"hex"===this.ctype&&this.send(h.htmlToHex(this.value)),"html"===this.ctype&&this.send())}setValue(t){t instanceof Array?this.value=h.rgbToHex(t):isNaN(t)?this.value=t:this.value=h.hexToHtml(t),this.setColor(this.value),this.update()}setColor(t){let s=h.unpack(t);return this.bcolor!==t&&s&&(this.bcolor=t,this.rgb=s,this.hsl=h.rgbToHsl(this.rgb),this.hue=this.hsl[0],this.update()),this}setHSL(t){return this.hsl=t,this.rgb=h.hslToRgb(t),this.bcolor=h.rgbToHex(this.rgb),this.update(!0),this}moveMarkers(){let t=this.pp,s=h;this.invert;let i=this.hsl[0]*s.TwoPI,e=2/3*s.PI,o=this.tr,n=this.hsl[0],r=this.hsl[1],l=this.hsl[2],a=(i-s.pi90)*s.todeg;n=-i+s.pi90;let c=Math.cos(n)*o,d=-Math.sin(n)*o,u=Math.cos(n-e)*o,p=-Math.sin(n-e)*o,m=Math.cos(n+e)*o,g=-Math.sin(n+e)*o,x=(u+m)/2,v=(p+g)/2;i=(1-2*Math.abs(l-.5))*r;let f=u+(m-u)*l+(c-x)*i,b=p+(g-p)*l+(d-v)*i;t.set(f,b).addScalar(128),this.setSvg(this.c[3],"transform","rotate("+a+" )",2),this.setSvg(this.c[3],"cx",t.x,3),this.setSvg(this.c[3],"cy",t.y,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",2,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",3),this.setSvg(this.c[3],"fill",this.bcolor,3)}rSize(){super.rSize();let t=this.s;t[2].width=this.sb+"px",t[2].left=this.sa+"px",this.cw=this.sb>256?256:this.sb,this.rSizeColor(this.cw),this.decal.x=Math.floor(.5*(this.w-this.wfixe))}rSizeColor(t){if(t===this.wfixe)return;this.wfixe=t;let s=this.s;this.decal.y="up"===this.side?2:this.baseH+2,this.mid=Math.floor(.5*this.wfixe),this.setSvg(this.c[3],"viewBox","0 0 "+this.wfixe+" "+this.wfixe),s[3].width=this.wfixe+"px",s[3].height=this.wfixe+"px",s[3].top=this.decal.y+"px",this.ratio=256/this.wfixe,this.square=1/(this.wfixe/256*60),this.setHeight()}}class u extends r{constructor(t={}){super(t),this.round=Math.round,this.baseH=this.h,this.hplus=t.hplus||50,this.res=t.res||40,this.l=1,this.precision=t.precision||0,this.custom=t.custom||!1,this.names=t.names||["FPS","MS"];let s=t.cc||["220,220,220","255,255,0"];this.adding=t.adding||!1,this.range=t.range||[165,100,100],this.alpha=t.alpha||.25,this.values=[],this.points=[],this.textDisplay=[],this.custom||(this.now=i.getTime(),this.startTime=0,this.prevTime=0,this.frames=0,this.ms=0,this.fps=0,this.mem=0,this.mm=0,this.isMem=!(!self.performance||!self.performance.memory),this.isMem&&(this.names.push("MEM"),s.push("0,255,255")),this.txt=t.name||"Fps");let e=Math.floor(.5*this.h)-3;const h=this.colors;this.c[1].textContent=this.txt,this.c[0].style.cursor="pointer",this.c[0].style.pointerEvents="auto";let o="display:none; left:10px; top:"+this.h+"px; height:"+(this.hplus-8)+"px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid "+h.border+";";0!==this.radius&&(o+="border-radius:"+this.radius+"px;"),this.c[2]=this.dom("path",this.css.basic+o,{}),this.c[2].setAttribute("viewBox","0 0 "+this.res+" 50"),this.c[2].setAttribute("height","100%"),this.c[2].setAttribute("width","100%"),this.c[2].setAttribute("preserveAspectRatio","none"),this.c[3]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; left:0; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.c[4]=this.dom("div",this.css.txt+"position:absolute; left:10px; top:"+(this.h+2)+"px; display:none; width:100%; text-align:center;"),t.bottomLine&&(this.c[4]=this.dom("div",this.css.basic+"width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);")),this.isShow=!1;let n=this.s;n[1].lineHeight=this.h-4,n[1].color=h.text,0!==this.radius&&(n[0].borderRadius=this.radius+"px"),"none"!==this.colors.gborder&&(n[0].border="1px solid "+h.gborder);let r=0;for(r=0;r "+this.names[r]+" ")}for(r=this.names.length;r--;)this.dom("path",null,{fill:"rgba("+s[r]+","+this.alpha+")","stroke-width":1,stroke:"rgba("+s[r]+",1)","vector-effect":"non-scaling-stroke"},this.c[2]);this.init()}mousedown(t){this.isShow?this.close():this.open()}tick(t){this.values=t,this.isShow&&(this.drawGraph(),this.upText())}makePath(t){let s="";s+="M -1 50";for(let i=0;i";this.c[4].innerHTML=i}drawGraph(){let t,s=this.c[2],i=this.names.length,e=0,h=0;for(;i--;)t=this.adding?(this.values[h]+e)*this.range[h]:this.values[h]*this.range[h],this.points[h].shift(),this.points[h].push(50-t),this.setSvg(s,"d",this.makePath(this.points[h]),i+1),e+=this.values[h],h++}open(){super.open(),this.h=this.hplus+this.baseH,this.setSvg(this.c[3],"d",this.svgs.g2),null!==this.group?this.group.calc(this.hplus):this.isUI&&this.main.calc(this.hplus),this.s[0].height=this.h+"px",this.s[2].display="block",this.s[4].display="block",this.isShow=!0,this.custom||i.addListen(this)}close(){super.close(),this.h=this.baseH,this.setSvg(this.c[3],"d",this.svgs.g1),null!==this.group?this.group.calc(-this.hplus):this.isUI&&this.main.calc(-this.hplus),this.s[0].height=this.h+"px",this.s[2].display="none",this.s[4].display="none",this.isShow=!1,this.custom||i.removeListen(this),this.c[4].innerHTML=""}begin(){this.startTime=this.now()}end(){let t=this.now();if(this.ms=t-this.startTime,this.frames++,t>this.prevTime+1e3&&(this.fps=this.round(1e3*this.frames/(t-this.prevTime)),this.prevTime=t,this.frames=0,this.isMem)){let t=performance.memory.usedJSHeapSize,s=performance.memory.jsHeapSizeLimit;this.mem=this.round(954e-9*t),this.mm=t/s}return this.values=[this.fps,this.ms,this.mm],this.drawGraph(),this.upText([this.fps,this.ms,this.mem]),t}listening(){this.custom||(this.startTime=this.end())}rSize(){let t=this.s,s=this.w;t[3].left=this.sa+this.sb-6+"px",t[0].width=s+"px",t[1].width=s+"px",t[2].left="10px",t[2].width=s-20+"px",t[4].width=s-20+"px"}}class p extends r{constructor(t={}){super(t),this.value=void 0!==t.value?t.value:[0,0,0],this.lng=this.value.length,this.precision=void 0!==t.precision?t.precision:2,this.multiplicator=t.multiplicator||1,this.neg=t.neg||!1,this.line=void 0===t.line||t.line,this.autoWidth=void 0===t.autoWidth||t.autoWidth,this.isNumber=!1,this.isDown=!1,this.h=t.h||138,this.rh=this.h-10,this.top=0,this.c[0].style.width=this.w+"px",void 0!==this.c[1]&&(this.c[1].style.width=this.w+"px",this.autoWidth||(this.c[1].style.width="100%",this.c[1].style.justifyContent="center"),this.top=10,this.h+=10),this.gh=this.rh-28,this.gw=this.w-28,this.c[2]=this.dom("div",this.css.txt+"display:block; text-align:center; padding:0px 0px; top:"+(this.h-20)+"px; left:14px; width:"+this.gw+"px;\tcolor:"+this.colors.text),this.c[2].innerHTML=this.valueToHtml();let s=this.dom("svg",this.css.basic,{viewBox:"0 0 "+this.w+" "+this.rh,width:this.w,height:this.rh,preserveAspectRatio:"none"});this.setCss(s,{width:this.w,height:this.rh,left:0,top:this.top}),this.dom("path","",{d:"",stroke:this.colors.text,"stroke-width":2,fill:"none","stroke-linecap":"butt"},s),this.dom("rect","",{x:10,y:10,width:this.gw+8,height:this.gh+8,stroke:"rgba(0,0,0,0.3)","stroke-width":1,fill:"none"},s),this.iw=(this.gw-4*(this.lng-1))/this.lng;let i=[];this.cMode=[],this.v=[];for(let t=0;t',e="width:"+100/this.lng+"%;";for(;t--;)s===this.lng-1?i+=""+this.value[s]+"":i+=""+this.value[s]+"",s++;return i}updateSVG(){this.line&&this.setSvg(this.c[3],"d",this.makePath(),0);for(let t=0;tthis.top&&s.ye[i][0]&&s.xthis.distance){let t=Math.atan2(this.tmp.x,this.tmp.y);this.tmp.x=Math.sin(t)*this.distance,this.tmp.y=Math.cos(t)*this.distance}this.pos.copy(this.tmp).divideScalar(this.distance).negate(),this.update()}setValue(t){void 0===t&&(t=[0,0]),this.pos.set(t[0]||0,t[1]||0),this.updateSVG()}update(t){void 0===t&&(t=!0),null!==this.interval&&(this.isDown||(this.pos.lerp(null,.3),this.pos.x=Math.abs(this.pos.x)<.01?0:this.pos.x,this.pos.y=Math.abs(this.pos.y)<.01?0:this.pos.y,this.isUI&&this.main.isCanvas&&this.main.draw())),this.updateSVG(),t&&this.send(),this.pos.isZero()&&this.stopInterval()}updateSVG(){let t=.5*this.diam- -this.pos.x*this.distance,s=.5*this.diam- -this.pos.y*this.distance;if(0===this.model){let i=t+5*this.pos.x+5,e=s+5*this.pos.y+10;this.setSvg(this.c[3],"cx",i*this.ratio,3),this.setSvg(this.c[3],"cy",e*this.ratio,3)}else this.setSvg(this.c[3],"cx",t*this.ratio,3),this.setSvg(this.c[3],"cy",s*this.ratio,3);this.setSvg(this.c[3],"cx",t*this.ratio,4),this.setSvg(this.c[3],"cy",s*this.ratio,4),this.value[0]=1*(this.pos.x*this.multiplicator).toFixed(this.precision),this.value[1]=1*(this.pos.y*this.multiplicator).toFixed(this.precision),this.haveText&&(this.c[2].textContent=this.value)}clear(){this.stopInterval(),super.clear()}}class v extends r{constructor(t={}){super(t),this.isCyclic=t.cyclic||!1,this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.autoWidth=!1,this.setTypeNumber(t),this.minw=this.w,this.diam=t.diam||this.w,this.mPI=.8*Math.PI,this.toDeg=180/Math.PI,this.cirRange=2*this.mPI,this.offset=new n,this.h=t.h||this.w+10,this.c[0].style.width=this.w+"px",this.c[0].style.display="block",void 0!==this.c[1]&&(this.c[1].style.width="100%",this.c[1].style.justifyContent="center",this.top=10,this.h+=10),this.percent=0,this.cmode=0;let s=this.colors;this.c[2]=this.dom("div",this.css.txt+"justify-content:center; top:"+(this.h-20)+"px; width:100%; color:"+s.text),this.c[3]=this.getKnob(),this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1),this.setSvg(this.c[3],"stroke",s.text,3),this.setSvg(this.c[3],"d",this.makeGrad(),3),this.setSvg(this.c[3],"viewBox","0 0 "+this.diam+" "+this.diam),this.setCss(this.c[3],{width:this.diam,height:this.diam,left:0,top:this.top}),this.model>0&&(h.dom("path","",{d:"",stroke:s.text,"stroke-width":2,fill:"none","stroke-linecap":"round"},this.c[3]),2==this.model&&(h.addSVGGlowEffect(),this.setSvg(this.c[3],"style",'filter: url("#UILGlow");',4))),this.r=0,this.init(),this.update()}mode(t){let s=this.colors;if(this.cmode===t)return!1;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1);break;case 1:this.s[2].color=s.textOver,this.setSvg(this.c[3],"fill",s.select,0),this.setSvg(this.c[3],"stroke",s.textOver,1)}return this.cmode=t,!0}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"knob"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=-Math.atan2(s.x,s.y),null!==this.oldr&&(this.r=Math.abs(this.r-this.oldr)>Math.PI?this.oldr:this.r),this.r=this.r>this.mPI?this.mPI:this.r,this.r=this.r<-this.mPI?-this.mPI:this.r;let i=1/this.cirRange,e=(this.r+this.mPI)*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=Math.floor(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("knob"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s5?(s=this.range/this.step,t=(a-c)/s):(t=(a-c)/l*2,s=32);for(let c=0;c<=s;++c)i=a-t*c,e=l+44*Math.sin(i),h=l+44*Math.cos(i),o=l+40*Math.sin(i),n=l+40*Math.cos(i),r+="M"+e+" "+h+" L"+o+" "+n+" ";return r}update(t){this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range;let s=Math.PI+this.mPI,i=this.percent*this.cirRange-this.mPI,e=Math.sin(i),o=Math.cos(i),n=25*e+64,r=-25*o+64,l=20*e+64,a=-20*o+64;if(this.setSvg(this.c[3],"d","M "+n+" "+r+" L "+l+" "+a,1),this.model>0){let t=36*Math.sin(s)+64,n=36*Math.cos(s)+64,r=36*e+64,l=-36*o+64,a=i<=Math.PI-this.mPI?0:1;this.setSvg(this.c[3],"d","M "+t+","+n+" A 36,36 1 "+a+" 1 "+r+","+l,4);let c=h.pack(h.lerpColor(h.unpack(h.ColorLuma(this.colors.text,-.75)),h.unpack(this.colors.text),this.percent));this.setSvg(this.c[3],"stroke",c,4)}t&&this.send()}}class f extends r{constructor(t={}){super(t),this.hideCurrent=!1,this.path=t.path||"",this.format=t.format||"",this.isWithImage=""!==this.path,this.preLoadComplete=!1,this.tmpImage={},this.tmpUrl=[],this.m=void 0!==t.m?t.m:5;let s=t.align||"left",i=t.scrollSize||10;this.ss=i+1,this.sMode=0,this.tMode=0,this.listOnly=t.listOnly||!1,this.staticTop=t.staticTop||!1,this.isSelectable=this.listOnly,void 0!==t.select&&(t.selectable=t.select),void 0!==t.selectable&&(this.isSelectable=t.selectable),""===this.txt&&(this.p=0);let e=Math.floor(.5*this.h)-3,h=this.colors;if(this.c[2]=this.dom("div",this.css.basic+"top:0; display:none; border-radius:"+this.radius+"px;"),this.c[3]=this.dom("div",this.css.item+"padding:0px "+this.m+"px; margin-bottom:0px; position:absolute; justify-content:"+s+"; text-align:"+s+"; line-height:"+(this.h-4)+"px; top:1px; background:"+h.button+"; height:"+(this.h-2)+"px; border:1px solid "+h.border+"; border-radius:"+this.radius+"px;"),this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.scrollerBack=this.dom("div",this.css.basic+"right:0px; width:"+i+"px; background:"+h.back+"; display:none;"),this.scroller=this.dom("div",this.css.basic+"right:"+.5*(i-.25*i)+"px; width:"+.25*i+"px; background:"+h.text+"; display:none; "),this.c[3].style.color=h.text,this.list=[],this.refObject=null,t.list)if(t.list instanceof Array)this.list=t.list;else if(t.list instanceof Object){this.refObject=t.list;for(let t in this.refObject)this.list.push(t)}this.items=[],this.prevName="",this.tmpId=0,this.baseH=this.h,this.itemHeight=t.itemHeight||this.h,this.full=t.full||!1,this.py=0,this.ww=this.sb,this.scroll=!1,this.isDown=!1,this.current=null,this.side=t.side||"down",this.up="down"===this.side?0:1,this.up?(this.c[2].style.top="auto",this.c[3].style.top="auto",this.c[4].style.top="auto",this.c[2].style.bottom=this.h-2+"px",this.c[3].style.bottom="1px",this.c[4].style.bottom=e+"px"):this.c[2].style.top=this.baseH+"px",this.listIn=this.dom("div",this.css.basic+"left:0; top:0; width:100%; background:none;"),this.listIn.name="list",this.topList=0,this.c[2].appendChild(this.listIn),this.c[2].appendChild(this.scrollerBack),this.c[2].appendChild(this.scroller),void 0!==t.value?isNaN(t.value)?this.value=t.value:this.value=this.list[t.value]:this.value=this.list[0],this.isOpenOnStart=t.open||!1,this.listOnly&&(this.baseH=5,this.c[3].style.display="none",this.c[4].style.display="none",this.c[2].style.top=this.baseH+"px",this.isOpenOnStart=!0),this.miniCanvas=t.miniCanvas||!1,this.canvasBg=t.canvasBg||"rgba(0,0,0,0)",this.imageSize=t.imageSize||[20,20],this.drag=t.drag||!1,this.dragout=t.dragout||!1,this.dragstart=t.dragstart||null,this.dragend=t.dragend||null,this.setList(this.list),this.init(),this.isWithImage&&this.preloadImage(),this.isOpenOnStart&&this.open(!0),this.baseH+=this.mtop}preloadImage(){this.preLoadComplete=!1,this.tmpImage={};for(let t=0;tthis.h-this.baseH)return"title";if(this.scroll&&s.x>this.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}else{if(s.ythis.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}}return""}testItems(t){let s,i,e,h="",o=this.items,n=o.length;for(;n--;)if(s=o[n],i=s.posy+this.topList,e=s.posy+this.itemHeight+1+this.topList,t>=i&&t<=e)return h="item"+n,this.modeItem(0),this.current=s,this.modeItem(1),h;return h}modeItem(t){if(!this.current)return;this.current.select&&0===t&&(t=2);let s=this.colors;switch(t){case 0:this.current.style.background=s.back,this.current.style.color=s.text;break;case 1:this.current.style.background=s.over,this.current.style.color=s.textOver;break;case 2:this.current.style.background=s.select,this.current.style.color=s.textSelect}}unSelected(){this.current&&(this.modeItem(0),this.current=null)}selected(){this.current&&(this.resetItems(),this.modeItem(2),this.current.select=!0)}resetItems(){let t=this.items.length;for(;t--;)this.items[t].select=!1,this.items[t].style.background=this.colors.back,this.items[t].style.color=this.colors.text}hideActive(){this.hideCurrent&&(this.current&&(this.tmpId=this.current.id),this.resetHide())}resetHide(){console.log(this.tmpId);let t=this.items.length;for(;t--;)t===this.tmpId?(this.items[t].style.height="0px",this.items[t].posy=-1):(this.items[t].style.height=this.itemHeight+"px",this.items[t].posy=(this.itemHeight+1)*(t-1))}mouseup(t){this.isDown=!1}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s?(this.isDown=!0,this.mousemove(t)):"title"===s?(this.modeTitle(2),this.listOnly||(this.hideActive(),this.isOpen?this.close():this.open())):this.current&&(this.value=this.list[this.current.id],this.isSelectable&&this.selected(),this.send(this.value),this.listOnly||(this.close(),this.setTopItem())),!0)}mousemove(t){let s=!1,i=this.testZone(t);if(!i)return s;if("title"===i)this.unSelected(),this.modeTitle(1),this.cursor("pointer");else if("scroll"===i){if(this.cursor("s-resize"),this.modeScroll(1),this.isDown){this.modeScroll(2);let s=this.zone.y+this.baseH-2;this.update(t.clientY-s-.5*this.sh)}}else this.modeTitle(0),this.modeScroll(0),this.cursor("pointer");return i!==this.prevName&&(s=!0),this.prevName=i,s}wheel(t){return"title"!==this.testZone(t)&&(this.py+=10*t.delta,this.update(this.py),!0)}reset(){this.prevName="",this.unSelected(),this.modeTitle(0),this.modeScroll(0)}modeScroll(t){if(t===this.sMode)return;let s=this.scroller.style,i=this.colors;switch(t){case 0:s.background=i.text;break;case 1:case 2:s.background=i.select}this.sMode=t}modeTitle(t){if(t===this.tMode)return;let s=this.s,i=this.colors;switch(t){case 0:s[3].color=i.text,s[3].background=i.button;break;case 1:s[3].color=i.textOver,s[3].background=i.overoff;break;case 2:s[3].color=i.textSelect,s[3].background=i.overoff}this.tMode=t}clearList(){for(;this.listIn.children.length;)this.listIn.removeChild(this.listIn.lastChild);this.items=[]}setList(t){this.clearList(),this.list=t,this.length=this.list.length;let s,e,h=this.hideCurrent?this.length-1:this.length;this.maxItem=this.full?h:5,this.maxItem=hthis.maxHeight&&(this.ww=this.sb-this.ss,this.scroll=!0),this.miniCanvas&&(this.tmpCanvas=document.createElement("canvas"),this.tmpCanvas.width=this.imageSize[0],this.tmpCanvas.height=this.imageSize[1],this.tmpCtx=this.tmpCanvas.getContext("2d"),this.tmpCtx.fillStyle=this.canvasBg,this.tmpCtx.fillRect(0,0,this.imageSize[0],this.imageSize[1]));for(let t=0;tthis.range?this.range:t,this.topList=-Math.floor(t/this.ratio),this.listIn.style.top=this.topList+"px",this.scroller.style.top=Math.floor(t)+"px",this.py=t)}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(t){super.open(),this.update(0),this.h=this.maxHeight+this.baseH+5,this.scroll?(this.scroller.style.display="block",this.scrollerBack.style.display="block"):(this.topList=0,this.h=this.baseH+5+this.max,this.scroller.style.display="none",this.scrollerBack.style.display="none"),this.s[0].height=this.h+"px",this.s[2].display="block",this.up?(this.zone.y-=this.h-(this.baseH-10),this.setSvg(this.c[4],"d",this.svgs.g1)):this.setSvg(this.c[4],"d",this.svgs.g2),this.rSizeContent();let s=this.h-this.baseH;this.zone.h=this.h,t||this.parentHeight(s)}close(){super.close(),this.up&&(this.zone.y+=this.h-(this.baseH-10));let t=this.h-this.baseH;this.h=this.baseH,this.s[0].height=this.h+"px",this.s[2].display="none",this.setSvg(this.c[4],"d",this.svgs.g1),this.zone.h=this.h,this.parentHeight(-t)}text(t){this.c[3].textContent=t}rSizeContent(){let t=this.length;for(;t--;)this.listIn.children[t].style.width=this.ww+"px"}rSize(){super.rSize();let t=this.s,s=this.sb,i=this.sa;void 0!==t[2]&&(t[2].width=s+"px",t[2].left=i+"px",t[3].width=s+"px",t[3].left=i+"px",t[4].left=i+s-15+"px",this.ww=s,this.max>this.maxHeight&&(this.ww=s-this.ss),this.isOpen&&this.rSizeContent())}}class b extends r{constructor(t={}){super(t),this.setTypeNumber(t),this.allway=t.allway||!1,this.isDown=!1,this.value=[0],this.multy=1,this.invmulty=1,this.isSingle=!0,this.isAngle=!1,this.isVector=!1,t.isAngle&&(this.isAngle=!0,this.multy=h.torad,this.invmulty=h.todeg),this.isDrag=t.drag||!1,void 0!==t.value&&(isNaN(t.value)?t.value instanceof Array?(this.value=t.value,this.isSingle=!1):t.value instanceof Object&&(this.value=[],void 0!==t.value.x&&(this.value[0]=t.value.x),void 0!==t.value.y&&(this.value[1]=t.value.y),void 0!==t.value.z&&(this.value[2]=t.value.z),void 0!==t.value.w&&(this.value[3]=t.value.w),this.isSingle=!1,this.isVector=!0):this.value=[t.value]),this.lng=this.value.length,this.tmp=[],this.current=-1,this.prev={x:0,y:0,d:0,v:0};let s=this.colors;this.c[2]=this.dom("div",this.css.basic+" background:"+s.select+"; top:4px; width:0px; height:"+(this.h-8)+"px;"),this.cMode=[];let i=this.lng;for(;i--;)this.isAngle&&(this.value[i]=(180*this.value[i]/Math.PI).toFixed(this.precision)),this.c[3+i]=this.dom("div",this.css.txtselect+"top:1px; height:"+(this.h-2)+"px; color:"+s.text+"; background:"+s.back+"; borderColor:"+s.border+"; border-radius:"+this.radius+"px;"),t.center&&(this.c[2+i].style.textAlign="center"),this.c[3+i].textContent=this.value[i],this.c[3+i].style.color=this.colors.text,this.c[3+i].isNum=!0,this.cMode[i]=0;this.selectId=3+this.lng,this.c[this.selectId]=this.dom("div",this.css.txtselect+"position:absolute; top:2px; height:"+(this.h-4)+"px; padding:0px 0px; width:0px; color:"+s.textSelect+"; background:"+s.select+"; border:none; border-radius:0px;"),this.cursorId=4+this.lng,this.c[this.cursorId]=this.dom("div",this.css.basic+"top:2px; height:"+(this.h-4)+"px; width:0px; background:"+s.text+";"),this.init()}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";let i=this.lng,e=this.tmp;for(;i--;)if(s.x>e[i][0]&&s.x 0";this.easing=t.easing||1,this.setTypeNumber(t),this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.isDown=!1,this.isOver=!1,this.allway=t.allway||!1,this.isDeg=t.isDeg||!1,this.isCyclic=t.cyclic||!1,this.firstImput=!1;let s=this.colors;if(this.c[2]=this.dom("div",this.css.txtselect+"border:none; background:none; width:47px; color:"+s.text+";"),this.c[3]=this.dom("div",this.css.basic+" top:0; height:"+this.h+"px;"),this.c[4]=this.dom("div",this.css.basic+"background:"+s.back+"; top:2px; height:"+(this.h-4)+"px;"),this.c[5]=this.dom("div",this.css.basic+"left:4px; top:5px; height:"+(this.h-10)+"px; background:"+s.text+";"),this.c[2].isNum=!0,this.c[2].style.height=this.h-2+"px",this.c[2].style.lineHeight=this.h-10+"px",0!==this.model){let t=4,i=4,e=8,h=this.h-6,o=16;2===this.model&&(t=0,i=2,e=4,o=2,h=.5*(this.h-6)),3===this.model&&(this.c[5].style.visible="none"),this.c[4].style.borderRadius=t+"px",this.c[4].style.height=e+"px",this.c[4].style.top=.5*this.h-i+"px",this.c[5].style.borderRadius=.5*t+"px",this.c[5].style.height=i+"px",this.c[5].style.top=.5*this.h-.5*i+"px",this.c[6]=this.dom("div",this.css.basic+"border-radius:"+o+"px; margin-left:"+.5*-h+"px; background:"+s.text+"; left:4px; top:3px; height:"+(this.h-6)+"px; width:"+h+"px;")}this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>=this.txl?"text":s.x>=this.sa?"scroll":""}mouseup(t){this.isDown&&(this.isDown=!1)}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s&&(this.isDown=!0,this.old=this.value,this.mousemove(t)),!0)}mousemove(t){let s=!1;if("scroll"===this.testZone(t)?(this.mode(1),this.cursor("w-resize")):this.cursor(),this.isDown){let i=(t.clientX-(this.zone.x+this.sa)-3)/this.ww;i=Math.min(1,Math.max(0,i));let e=Math.pow(i,this.easing)*this.range+this.min,h=i*this.range+this.min;this.sliderValue=this.numValue(h);let o,n=e-this.old;(n>=this.step||n<=this.step)&&(o=Math.floor(n/this.step),this.value=this.numValue(this.old+o*this.step),this.update(!0),this.old=this.value),s=!0}return s}wheel(t){if("scroll"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s=this.sa?"text":""}mouseup(t){if(this.editable)return!!this.isDown&&(this.isDown=!1,this.mousemove(t))}mousedown(t){if(!this.editable)return;let s=this.testZone(t);return!this.isDown&&(this.isDown=!0,"text"===s&&this.setInput(this.c[2]),this.mousemove(t))}mousemove(t){if(!this.editable)return;let s=0;return"text"===this.testZone(t)?this.cursor("text"):this.cursor(),this.isDown&&(s=t.clientX-this.zone.x),this.upInput(s-this.sa-3,this.isDown)}update(){this.c[2].textContent=this.value}reset(){this.cursor()}select(t,s,i,e){let h=this.s,o=this.sa+5;h[4].width="1px",h[4].left=o+s+"px",h[3].left=o+s+"px",h[3].width=i+"px",this.c[3].innerHTML=e}unselect(){let t=this.s;t&&(t[3].width="0px",this.c[3].innerHTML="t",t[4].width="0px")}validate(t){this.allway&&(t=!0),this.value=this.c[2].textContent,""!==this.value?this.c[5].textContent="":this.c[5].textContent=this.placeHolder,t&&this.send()}rSize(){super.rSize();let t=this.s;t[2].left=this.sa+"px",t[2].width=this.sb+"px",t[5].left=this.sa+"px",t[5].width=this.sb+"px"}}class k extends r{constructor(t={}){super(t);let s=t.prefix||"";this.c[2]=this.dom("div",this.css.txt+"justify-content:right; width:60px; line-height:"+(this.h-8)+"px; color:"+this.colors.text),31===this.h&&(this.s[0].height=this.h+"px",this.s[1].top="8px",this.c[2].style.top="8px");let i=this.s;i[1].justifyContent=t.align||"left",i[1].fontWeight=t.fontWeight||"bold",this.c[1].textContent=this.txt.substring(0,1).toUpperCase()+this.txt.substring(1).replace("-"," "),this.c[2].textContent=s,this.init()}text(t){this.c[1].textContent=t}text2(t){this.c[2].textContent=t}rSize(){super.rSize(),this.s[1].width=this.w+"px",this.s[2].left=this.w+"px"}setColor(t){this.s[1].color=t,this.s[2].color=t}}class S extends r{constructor(t={}){super(t),this.value=t.value||"",this.isDown=!1,this.onActif=t.onActif||function(){};const s=this.colors;this.c[2]=this.dom("div",this.css.txt+this.css.button+" top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.buttonBorder+"; border-radius:15px; width:30px; left:10px;"),this.c[3]=this.dom("div",this.css.txtselect+"height:"+(this.h-4)+"px; background:"+s.inputBg+"; borderColor:"+s.inputBorder+"; border-radius:"+this.radius+"px;"),this.c[3].textContent=this.value;let i=Math.floor(.5*this.h)-7;this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:14px; height:14px; left:5px; top:"+i+"px;",{d:this.svgs.cursor,fill:s.text,stroke:"none"}),this.stat=1,this.isActif=!1,this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>this.sa&&s.xthis.sa&&s.xi[r][0]&&s.xe[r][0]&&s.ythis.lng-1&&(h=-1)),h}mouseup(t){return!!this.isDown&&(this.isDown=!1,-1!==this.res&&(this.value=this.values[this.res],this.send()),this.mousemove(t))}mousedown(t){return!this.isDown&&(this.isDown=!0,this.mousemove(t))}mousemove(t){let s=!1;return this.res=this.testZone(t),-1!==this.res?(this.cursor("pointer"),s=this.modes(this.isDown?3:2,this.res)):s=this.reset(),s}modes(t=1,s=-1){let i,e,h=this.lng,o=!1;for(;h--;)e=t,i=!!this.isSelectable&&this.values[h]===this.value,h===s?i&&2===e&&(e=3):(e=1,i&&(e=4)),this.mode(e,h)&&(o=!0);return o}mode(t,s){let i=!1,e=this.colors,h=this.buttons,o=s;if(this.stat[s]!==t){switch(this.stat[s]=t,t){case 1:h[o].style.color=e.text,h[o].style.background=e.button;break;case 2:h[o].style.color=e.textOver,h[o].style.background=e.overoff;break;case 3:h[o].style.color=e.textOver,h[o].style.background=e.over;break;case 4:h[o].style.color=e.textSelect,h[o].style.background=e.select}i=!0}return i}reset(){return this.res=-1,this.cursor(),this.modes()}label(t,s){this.buttons[s].textContent=t}icon(t,s,i){this.buttons[i].style.padding=(s||0)+"px 0px",this.buttons[i].innerHTML=t}testW(){let t=!1;if(3*this.spaces[0]+2*this.bsizeMax>this.w?(this.bsize[0]=.5*(this.w-3*this.spaces[0]),t=!0):this.bsize[0]!==this.bsizeMax&&(this.bsize[0]=this.bsizeMax,t=!0),!t)return;let s=this.buttons.length;for(;s--;)this.buttons[s].style.width=this.bsize[0]+"px"}rSize(){let t;super.rSize(),this.testW(),this.tmpX=[],this.tmpY=[];for(let s=0;sthis.h-this.c[2].offsetHeight?"text":"pad"}mouseup(t){return this.isDown=!1,this.mode(0)}mousedown(t){if("pad"===this.testZone(t))return this.isDown=!0,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=.5*this.w-(t.clientX-this.zone.x),i=.5*this.diam-(t.clientY-this.zone.y-this.ytop),e=256/this.diam;s=-s*e,i=-i*e,s=h.clamp(s,-this.maxPos,this.maxPos),i=h.clamp(i,-this.maxPos,this.maxPos),this.setPos([s,i]),this.update(!0)}mode(t){if(this.cmode===t)return!1;let s=this.colors;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.back,0),this.setSvg(this.c[3],"fill",s.button,1),this.setSvg(this.c[3],"stroke",s.back,2),this.setSvg(this.c[3],"stroke",s.back,3),this.setSvg(this.c[3],"stroke",s.text,4);break;case 1:this.s[2].color=s.textSelect,this.setSvg(this.c[3],"fill",s.backoff,0),this.setSvg(this.c[3],"fill",s.overoff,1),this.setSvg(this.c[3],"stroke",s.backoff,2),this.setSvg(this.c[3],"stroke",s.backoff,3),this.setSvg(this.c[3],"stroke",s.textSelect,4)}return this.cmode=t,!0}update(t){this.c[2].textContent=this.value,this.updateSVG(),t&&this.send()}updateSVG(){1==this.model&&(this.setSvg(this.c[3],"y1",this.pos.y,2),this.setSvg(this.c[3],"y2",this.pos.y,2),this.setSvg(this.c[3],"x1",this.pos.x,3),this.setSvg(this.c[3],"x2",this.pos.x,3)),this.setSvg(this.c[3],"cx",this.pos.x,4),this.setSvg(this.c[3],"cy",this.pos.y,4)}setPos(t){this.pos.set(t[0]+128,t[1]+128);let s=1/this.maxPos;this.value[0]=(t[0]*s*this.range).toFixed(this.precision),this.value[1]=(t[1]*s*this.range).toFixed(this.precision)}setValue(t,s=!1){void 0===t&&(t=this.value),this.value[0]=1*Math.min(this.max,Math.max(this.min,t[0])).toFixed(this.precision),this.value[1]=1*Math.min(this.max,Math.max(this.min,t[1])).toFixed(this.precision),this.pos.set(this.value[0]/this.range*this.maxPos+128,this.value[1]/this.range*this.maxPos+128),this.update(s)}}class T extends r{constructor(t={}){t.selectable=!0,t.name=t.name||"TreeList",super(t),this.tree=t.tree||{},this.value=Array.isArray(t.value)?t.value.slice():[],this.focused=!!t.focused,this.focusPath=Array.isArray(t.focusPath)?t.focusPath.slice():[],this.focusLevel="number"==typeof t.focusLevel?t.focusLevel:-1,this.tabIndex=t.tabIndex??null,this.itemIndex=t.itemIndex??null,this.changeCb="function"==typeof t.onChange?t.onChange:()=>{},this.lineH=this.h,this.levelGap=this.colors.sy||2,this.leafMax=0,this.levels=[],this.itemsDom=[],this.hover={level:-1,index:-1},this.lastLeaf={parentPath:[],key:null},this.c[2]=this.dom("div",this.css.basic+"left:0; top:0; width:100%; height:100%;"),this.s[2]=this.c[2].style,this.init(),this._maybeUpdateLastLeafFromValue()}static isMap(t){return t&&"object"==typeof t&&!Array.isArray(t)}static isList(t){return Array.isArray(t)}getNodeAtPath(t){let s=this.tree;for(let i=0;i({key:t,label:t,zone:{x:0,y:0,w:0,h:0}}))),i=Math.max(t.length,this.leafMax)*this.lineH;this.levels.push({type:"list",items:t,zone:{x:0,y:0,w:0,h:i}});break}break}{const e=Object.keys(s);if(!e.length)break;this.levels.push({type:"map",items:e.map((t=>({key:t,label:t,zone:{x:0,y:0,w:0,h:0}}))),zone:{x:0,y:0,w:0,h:this.lineH}});const h=t[i];if(!h||!s.hasOwnProperty(h))break;s=s[h]}i++}}layoutLevels(){const t=(this.sa||100)+8,s=this.zone.w-t-8;let i=0;for(;this.itemsDom.lengthh.x+h.w||s>h.x+h.w)&&!(th.x+h.w||s>h.y+h.h))if("map"===e.type)for(let h=0;h=o.x&&s>=o.y&&t<=o.x+o.w&&s<=o.y+o.h)return{L:i,i:h,real:!0}}else{const o=Math.max(e.items.length,this.leafMax);for(let n=0;n=r.x&&s>=r.y&&t<=r.x+r.w&&s<=r.y+r.h)return{L:i,i:n,real:o}}}}return{L:-1,i:-1,real:!1}}handleEvent(t){if(this.lock)return!1;if("mousemove"===t.type){const{x:s,y:i}=this._toLocal(t),e=this._hitTest(s,i);return this.hover=-1!==e.L&&e.real?{level:e.L,index:e.i}:{level:-1,index:-1},this.update(),!0}if("mousedown"===t.type){const{x:s,y:i}=this._toLocal(t),e=this._hitTest(s,i);if(-1!==e.L&&e.real)return this._selectAt(e.L,e.i),!0}return"mouseup"===t.type}_selectAt(t,s){const i=this.levels[t],e=i.items[s];if(!e||!e.key)return;const h=this.value.slice(0,t);h[t]=e.key;const o=this.autoCompleteToLeaf(h);"list"===i.type&&(this.lastLeaf.parentPath=this.value.slice(0,t),this.lastLeaf.key=e.key),this.value=o.slice(),this.update(),this.send(o),this.changeCb(this.tabIndex,this.itemIndex,o)}setValue(t){this.value=Array.isArray(t)?t.slice():[],this._maybeUpdateLastLeafFromValue(),this.update()}setTree(t){this.tree=t||{},this.leafMax=this.computeLeafMax(this.tree),this.update()}setFocus({focused:t,focusPath:s,focusLevel:i}){"boolean"==typeof t&&(this.focused=t),Array.isArray(s)&&(this.focusPath=s.slice()),"number"==typeof i&&(this.focusLevel=i),this.update()}_maybeUpdateLastLeafFromValue(){if(!Array.isArray(this.value)||0===this.value.length)return;const t=this.value.slice(0,this.value.length-1),s=this.value[this.value.length-1],i=this.getNodeAtPath(t);i&&Array.isArray(i.node)&&i.node.includes(s)&&(this.lastLeaf={parentPath:t,key:s})}_countVisibleIntermediates(){let t=0;for(let s=0;sthis.zone.h-this.bh&&s.ye?"scroll":"content",i}handleEvent(t){let s=t.type,e=!1,h=!1,o=this.testZone(t);if("mouseup"===s&&this.isDown&&(this.isDown=!1),"mousedown"!==s||this.isDown||(this.isDown=!0),this.isDown&&this.isNewTarget&&(i.clearInput(),this.isNewTarget=!1),o){switch(o){case"content":t.clientY=this.isScroll?t.clientY+this.decal:t.clientY,i.isMobile&&"mousedown"===s&&this.getNext(t,e),this.proto&&(h=this.proto.handleEvent(t)),"mousemove"===s&&(e=this.mode("def")),"wheel"===s&&!h&&this.isScroll&&(e=this.onWheel(t)),i.lock||this.getNext(t,e);break;case"bottom":this.clearTarget(),"mousemove"===s&&(e=this.mode("bottomOver")),"mousedown"===s&&(this.isOpen=!this.isOpen,this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.calc(),this.mode("def"),e=!0);break;case"scroll":this.clearTarget(),"mousemove"===s&&(e=this.mode("scrollOver")),"mousedown"===s&&(e=this.mode("scrollDown")),"wheel"===s&&(e=this.onWheel(t)),this.isDown&&this.update(t.clientY-this.zone.y-.5*this.sh)}this.isDown&&(e=!0),h&&(e=!0),"keyup"===s&&(e=!0),"keydown"===s&&(e=!0),e&&this.draw()}}getNext(t,s){let e=i.findTarget(this.uis,t);e!==this.current&&(this.clearTarget(),this.current=e,this.isNewTarget=!0),-1!==e&&(this.proto=this.uis[this.current],this.proto.uiover())}onWheel(t){return this.oy+=20*t.delta,this.update(this.oy),!0}reset(t){if(this.isReset)return;this.mouse.neg(),this.isDown=!1;let s=this.mode("def"),i=this.clearTarget();(s||i)&&this.draw(!0),this.isReset=!0}add(){let t=arguments,s=!1;"object"==typeof t[1]?(t[1].isUI=!0,t[1].main=this,s=!!t[1].ontop&&t[1].ontop):"string"==typeof t[1]&&(void 0===t[2]?[].push.call(t,{isUI:!0,main:this}):(t[2].isUI=!0,t[2].main=this,s=!!t[2].ontop&&t[2].ontop));let i=O.apply(this,t);if(null!==i)return s?this.uis.unshift(i):this.uis.push(i),this.calc(),this.isEmpty=!1,i}remove(t){t.dispose&&t.dispose()}clearOne(t){let s=this.uis.indexOf(t);-1!==s&&(this.inner.removeChild(this.uis[s].c[0]),this.uis.splice(s,1),this.calc())}empty(){let t,s=this.uis.length;for(;s--;)t=this.uis.pop(),this.inner.removeChild(t.c[0]),t.dispose();this.uis=[],this.isEmpty=!0,this.calc()}clear(){this.empty()}clear2(){setTimeout(this.empty.bind(this),0)}dispose(){this.clear(),null!==this.parent&&this.parent.removeChild(this.content),i.remove(this)}resetItem(){if(!this.isItemMode)return;let t=this.uis.length;for(;t--;)this.uis[t].selected()}setItem(t){if(!this.isItemMode)return;if(t=t||"",this.resetItem(),!t)return void this.update(0);let s=this.uis.length;for(;s--;)this.uis[s].value===t&&(this.uis[s].selected(!0),this.isScroll&&this.update(s*(this.uis[s].h+this.margin)*this.ratio))}upScroll(t){this.sw=t?this.size.s:0,this.oy=t?this.oy:0,this.scrollBG.style.display=t?"block":"none",t&&(this.total=this.h,this.maxView=this.maxHeight,this.ratio=this.maxView/this.total,this.sh=this.maxView*this.ratio,this.range=this.maxView-this.sh,this.oy=h.clamp(this.oy,0,this.range),this.scrollBG.style.height=this.maxView+"px",this.scroll.style.height=this.sh+"px"),this.setItemWidth(this.zone.w-this.sw),this.update(this.oy)}update(t){t=h.clamp(t,0,this.range),this.decal=Math.floor(t/this.ratio),this.inner.style.top=-this.decal+"px",this.scroll.style.top=Math.floor(t)+"px",this.oy=t}calcUis(){return i.calcUis(this.uis,this.zone,this.zone.y)}calc(){clearTimeout(this.tmp),this.tmp=setTimeout(this.setHeight.bind(this),10)}setHeight(){if(this.tmp&&clearTimeout(this.tmp),this.zone.h=this.bh,this.isScroll=!1,this.isOpen){this.h=this.calcUis();let t=this.forceHeight?this.forceHeight+this.zone.y:window.innerHeight;this.maxHeight=t-this.zone.y-this.bh,this.h-this.maxHeight>1?(this.isScroll=!0,this.zone.h=this.maxHeight+this.bh):this.zone.h=this.h+this.bh}this.upScroll(this.isScroll),this.innerContent.style.height=this.zone.h-this.bh+"px",this.content.style.height=this.zone.h+"px",this.bottom.style.top=this.zone.h-this.bh+"px",this.forceHeight&&this.lockHeight&&(this.content.style.height=this.forceHeight+"px"),this.isCanvas&&this.draw(!0)}rezone(){i.needReZone=!0}setWidth(t){t&&(this.zone.w=t),this.zone.w=Math.floor(this.zone.w),this.content.style.width=this.zone.w+"px",this.isCenter&&(this.content.style.marginLeft=-Math.floor(.5*this.zone.w)+"px"),this.setItemWidth(this.zone.w-this.sw)}setItemWidth(t){let s=this.uis.length;for(;s--;)this.uis[s].setSize(t),this.uis[s].rSize()}},t.REVISION="4.3.0",t.Tools=h,t.add=O,Object.defineProperty(t,"__esModule",{value:!0})})); +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.UIL = {})); +})(this, (function (exports) { 'use strict'; + + /** + * @author lth / https://github.com/lo-th + */ + + const REVISION = "4.3.0"; + + // INTENAL FUNCTION + + const R = { + ui: [], + + dom: null, + + ID: null, + lock: false, + wlock: false, + current: -1, + + needReZone: true, + needResize: false, + forceZone: false, + isEventsInit: false, + isLeave: false, + addDOMEventListeners: true, + + downTime: 0, + prevTime: 0, + + //prevDefault: ['contextmenu', 'wheel'], + prevDefault: ["contextmenu"], + pointerEvent: ["pointerdown", "pointermove", "pointerup"], + eventOut: ["pointercancel", "pointerout", "pointerleave"], + + xmlserializer: null, + tmpTime: null, + tmpImage: null, + + oldCursor: "auto", + + input: null, + parent: null, + firstImput: true, + + hiddenImput: null, + hiddenSizer: null, + hasFocus: false, + startInput: false, + inputRange: [0, 0], + cursorId: 0, + str: "", + pos: 0, + startX: -1, + moveX: -1, + + debugInput: false, + + isLoop: false, + listens: [], + + e: { + type: null, + clientX: 0, + clientY: 0, + keyCode: NaN, + key: null, + delta: 0, + }, + + isMobile: false, + + now: null, + needsUpdate: false, + + getTime: function () { + return self.performance && self.performance.now + ? self.performance.now.bind(performance) + : Date.now; + }, + + add: function (o) { + // R.ui[0] is de GUI object that is added first by the constructor + R.ui.push(o); + R.getZone(o); + + if (!R.isEventsInit) R.initEvents(); + }, + + testMobile: function () { + let n = navigator.userAgent; + if ( + n.match(/Android/i) || + n.match(/webOS/i) || + n.match(/iPhone/i) || + n.match(/iPad/i) || + n.match(/iPod/i) || + n.match(/BlackBerry/i) || + n.match(/Windows Phone/i) + ) + return true; + else return false; + }, + + remove: function (o) { + let i = R.ui.indexOf(o); + + if (i !== -1) { + R.removeListen(o); + R.ui.splice(i, 1); + } + + if (R.ui.length === 0) { + R.removeEvents(); + } + }, + + // ---------------------- + // EVENTS + // ---------------------- + + initEvents: function () { + if (R.isEventsInit) return; + + let dom = document.body; + + R.isMobile = R.testMobile(); + R.now = R.getTime(); + + if (!R.isMobile) { + dom.addEventListener("wheel", R, { passive: false }); + } else { + dom.style.touchAction = "none"; + } + + console.log("R.addDOMEventListeners " + R.addDOMEventListeners); + if (R.addDOMEventListeners) { + dom.addEventListener("pointercancel", R); + dom.addEventListener("pointerleave", R); + //dom.addEventListener( 'pointerout', R ) + + dom.addEventListener("pointermove", R); + dom.addEventListener("pointerdown", R); + dom.addEventListener("pointerup", R); + + dom.addEventListener("keydown", R, false); + dom.addEventListener("keyup", R, false); + } + window.addEventListener("resize", R.resize, false); + + //window.onblur = R.out; + //window.onfocus = R.in; + + R.isEventsInit = true; + R.dom = dom; + }, + + removeEvents: function () { + if (!R.isEventsInit) return; + + let dom = document.body; + + if (!R.isMobile) { + dom.removeEventListener("wheel", R); + } + + if (R.addDOMEventListeners) { + dom.removeEventListener("pointercancel", R); + dom.removeEventListener("pointerleave", R); + //dom.removeEventListener( 'pointerout', R ); + + dom.removeEventListener("pointermove", R); + dom.removeEventListener("pointerdown", R); + dom.removeEventListener("pointerup", R); + + dom.removeEventListener("keydown", R); + dom.removeEventListener("keyup", R); + } + window.removeEventListener("resize", R.resize); + + R.isEventsInit = false; + }, + + resize: function () { + let i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); + } + + R.needReZone = true; + R.needResize = false; + }, + + out: function () { + console.log("im am out"); + R.clearOldID(); + }, + + in: function () { + console.log("im am in"); + // R.clearOldID(); + }, + + // ---------------------- + // HANDLE EVENTS + // ---------------------- + + fakeUp: function () { + this.handleEvent({ type: "pointerup" }); + }, + + handleEvent: function (event) { + //console.log("Roots.handleEvent "+event.type) + //if(!event.type) return; + + if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); + + if (R.needResize) R.resize(); + + R.findZone(R.forceZone); + + let e = R.e; + let leave = false; + + if (event.type === "keydown") R.keydown(event); + if (event.type === "keyup") R.keyup(event); + + if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; + else e.delta = 0; + + let ptype = event.pointerType; // mouse, pen, touch + + e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; + e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; + + e.type = event.type; + + if (R.eventOut.indexOf(event.type) !== -1) { + leave = true; + e.type = "mouseup"; + } + + if (event.type === "pointerleave") R.isLeave = true; + + if (event.type === "pointerdown") e.type = "mousedown"; + if (event.type === "pointerup") e.type = "mouseup"; + if (event.type === "pointermove") { + if (R.isLeave) { + // if user resize outside this document + R.isLeave = false; + R.resize(); + } + e.type = "mousemove"; + } + + // double click test + if (e.type === "mousedown") { + R.downTime = R.now(); + let time = R.downTime - R.prevTime; + + // double click on imput + if (time < 200) { + R.selectAll(); + return false; + } + + R.prevTime = R.downTime; + R.forceZone = false; + } + + // for imput + if (e.type === "mousedown") R.clearInput(); + + // mouse lock + if (e.type === "mousedown") R.lock = true; + if (e.type === "mouseup") R.lock = false; + + //if( R.current !== null && R.current.neverlock ) R.lock = false; + + /*if( e.type === 'mousedown' && event.button === 1){ + R.cursor() + e.preventDefault(); + e.stopPropagation(); + }*/ + + //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) + + if (R.isMobile && e.type === "mousedown") R.findID(e); + if (e.type === "mousemove" && !R.lock) R.findID(e); + + if (R.ID !== null) { + if (R.ID.isCanvasOnly) { + e.clientX = R.ID.mouse.x; + e.clientY = R.ID.mouse.y; + } + + //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 + + R.ID.handleEvent(e); + } + + if (R.isMobile && e.type === "mouseup") R.clearOldID(); + if (leave) R.clearOldID(); + }, + + // ---------------------- + // ID + // ---------------------- + + findID: function (e) { + let i = R.ui.length, + next = -1, + u, + x, + y; + + while (i--) { + u = R.ui[i]; + + if (u.isCanvasOnly) { + x = u.mouse.x; + y = u.mouse.y; + } else { + x = e.clientX; + y = e.clientY; + } + + if (R.onZone(u, x, y)) { + next = i; + + if (next !== R.current) { + R.clearOldID(); + R.current = next; + R.ID = u; + } + break; + } + } + + if (next === -1) R.clearOldID(); + }, + + clearOldID: function () { + if (!R.ID) return; + R.current = -1; + R.ID.reset(); + R.ID = null; + R.cursor(); + }, + + // ---------------------- + // GUI / GROUP FUNCTION + // ---------------------- + + calcUis: (uis, zone, py, group = false) => { + //console.log('calc_uis') + + let i = uis.length, + u, + px = 0, + n = 0, + tw, + m; + + let height = 0; + + while (i--) { + u = uis[n]; + n++; + + if (!group && u.isGroup) u.calcUis(); + + m = u.margin; + //div = u.marginDiv + + u.zone.w = u.w; + u.zone.h = u.h + m; + + if (!u.autoWidth) { + if (px === 0) height += u.h + m; + + u.zone.x = zone.x + px; + u.zone.y = py; // + u.mtop + //if(div) u.zone.y += m * 0.5 + + tw = R.getWidth(u); + if (tw) u.zone.w = u.w = tw; + else if (u.fw) u.zone.w = u.w = u.fw; + + px += u.zone.w; + + if (px >= zone.w) { + py += u.h + m; + //if(div) py += m * 0.5 + px = 0; + } + } else { + px = 0; + + u.zone.x = zone.x + u.dx; + u.zone.y = py; + py += u.h + m; + + height += u.h + m; + } + } + + return height; + }, + + findTarget: function (uis, e) { + let i = uis.length; + + while (i--) { + if (R.onZone(uis[i], e.clientX, e.clientY)) return i; + } + + return -1; + }, + + // ---------------------- + // ZONE + // ---------------------- + + findZone: function (force) { + if (!R.needReZone && !force) return; + + var i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + R.getZone(u); + if (u.isGui) u.calcUis(); + } + + R.needReZone = false; + }, + + onZone: function (o, x, y) { + if (x === undefined || y === undefined) return false; + + let z = o.zone; + let mx = x - z.x; // - o.dx; + let my = y - z.y; + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 + //if( o.group !== null ) mx -= o.dx + + let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; + + //if( o.marginDiv ) my -= o.margin * 0.5 + + if (over) o.local.set(mx, my); + else o.local.neg(); + + return over; + }, + + getWidth: function (o) { + //return o.getDom().offsetWidth + return o.getDom().clientWidth; + + //let r = o.getDom().getBoundingClientRect(); + //return (r.width) + //return Math.floor(r.width) + }, + + getZone: function (o) { + if (o.isCanvasOnly) return; + let r = o.getDom().getBoundingClientRect(); + + //if( !r.width ) return + //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; + //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; + o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; + + //console.log(o.name, o.zone) + }, + + // ---------------------- + // CURSOR + // ---------------------- + + cursor: function (name) { + name = name ? name : "auto"; + if (name !== R.oldCursor) { + document.body.style.cursor = name; + R.oldCursor = name; + } + }, + + // ---------------------- + // CANVAS + // ---------------------- + + toCanvas: function (o, w, h, force) { + if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); + + // prevent exesive redraw + + if (force && R.tmpTime !== null) { + clearTimeout(R.tmpTime); + R.tmpTime = null; + } + + if (R.tmpTime !== null) return; + + if (R.lock) + R.tmpTime = setTimeout(function () { + R.tmpTime = null; + }, 10); + + /// + + let isNewSize = false; + if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; + + if (R.tmpImage === null) R.tmpImage = new Image(); + + let img = R.tmpImage; //new Image(); + + let htmlString = R.xmlserializer.serializeToString(o.content); + + let svg = + '' + + htmlString + + ""; + + img.onload = function () { + let ctx = o.canvas.getContext("2d"); + + if (isNewSize) { + o.canvas.width = w; + o.canvas.height = h; + } else { + ctx.clearRect(0, 0, w, h); + } + ctx.drawImage(this, 0, 0); + + o.onDraw(); + }; + + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); + //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); + img.crossOrigin = ""; + R.needsUpdate = false; + }, + + // ---------------------- + // INPUT + // ---------------------- + + setHidden: function () { + if (R.hiddenImput === null) { + //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' + //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' + //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; + + R.hiddenImput = document.createElement("input"); + R.hiddenImput.type = "text"; + //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); + + R.hiddenSizer = document.createElement("div"); + //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; + + document.body.appendChild(R.hiddenImput); + document.body.appendChild(R.hiddenSizer); + } + + let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; + let css = + R.parent.css.txtselect + + "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + + hide; + R.hiddenImput.style.cssText = + css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); + R.hiddenSizer.style.cssText = css + "bottom:40px;"; + + R.hiddenImput.style.width = R.input.clientWidth + "px"; + R.hiddenImput.value = R.str; + R.hiddenSizer.innerHTML = R.str; + + R.hasFocus = true; + }, + + clearHidden: function (p) { + if (R.hiddenImput === null) return; + R.hasFocus = false; + }, + + clickPos: function (x) { + let i = R.str.length, + l = 0, + n = 0; + while (i--) { + l += R.textWidth(R.str[n]); + if (l >= x) break; + n++; + } + return n; + }, + + upInput: function (x, down) { + if (R.parent === null) return false; + + let up = false; + + if (down) { + let id = R.clickPos(x); + + R.moveX = id; + + if (R.startX === -1) { + R.startX = id; + R.cursorId = id; + R.inputRange = [R.startX, R.startX]; + } else { + let isSelection = R.moveX !== R.startX; + + if (isSelection) { + if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; + else R.inputRange = [R.startX, R.moveX]; + } + } + + up = true; + } else { + if (R.startX !== -1) { + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.startX = -1; + + up = true; + } + } + + if (up) R.selectParent(); + + return up; + }, + + selectAll: function () { + if (!R.parent) return; + + R.str = R.input.textContent; + R.inputRange = [0, R.str.length]; + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.cursorId = R.inputRange[1]; + R.selectParent(); + }, + + selectParent: function () { + var c = R.textWidth(R.str.substring(0, R.cursorId)); + var e = R.textWidth(R.str.substring(0, R.inputRange[0])); + var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); + + R.parent.select(c, e, s, R.hiddenSizer.innerHTML); + }, + + textWidth: function (text) { + if (R.hiddenSizer === null) return 0; + text = text.replace(/ /g, " "); + R.hiddenSizer.innerHTML = text; + return R.hiddenSizer.clientWidth; + }, + + clearInput: function () { + if (R.parent === null) return; + if (!R.firstImput) R.parent.validate(true); + + R.clearHidden(); + R.parent.unselect(); + + //R.input.style.background = 'none'; + R.input.style.background = R.parent.colors.back; + R.input.style.borderColor = R.parent.colors.border; + //R.input.style.color = R.parent.colors.text; + R.parent.isEdit = false; + + R.input = null; + R.parent = null; + (R.str = ""), (R.firstImput = true); + }, + + setInput: function (Input, parent) { + R.clearInput(); + + R.input = Input; + R.parent = parent; + + R.input.style.background = R.parent.colors.backoff; + R.input.style.borderColor = R.parent.colors.select; + //R.input.style.color = R.parent.colors.textSelect; + R.str = R.input.textContent; + + R.setHidden(); + }, + + keydown: function (e) { + if (R.parent === null) return; + + let keyCode = e.which; + e.shiftKey; + + //console.log( keyCode ) + + R.firstImput = false; + + if (R.hasFocus) { + // hack to fix touch event bug in iOS Safari + window.focus(); + R.hiddenImput.focus(); + } + + R.parent.isEdit = true; + + // e.preventDefault(); + + // add support for Ctrl/Cmd+A selection + //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { + //R.selectText(); + //e.preventDefault(); + //return self.render(); + //} + + if (keyCode === 13) { + //enter + + R.clearInput(); + + //} else if( keyCode === 9 ){ //tab key + + // R.input.textContent = ''; + } else { + if (R.input.isNum) { + if ( + (e.keyCode > 47 && e.keyCode < 58) || + (e.keyCode > 95 && e.keyCode < 106) || + e.keyCode === 190 || + e.keyCode === 110 || + e.keyCode === 8 || + e.keyCode === 109 + ) { + R.hiddenImput.readOnly = false; + } else { + R.hiddenImput.readOnly = true; + } + } else { + R.hiddenImput.readOnly = false; + } + } + }, + + keyup: function (e) { + if (R.parent === null) return; + + R.str = R.hiddenImput.value; + + if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value + else R.input.textContent = R.str; + + R.cursorId = R.hiddenImput.selectionStart; + R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; + + R.selectParent(); + + //if( R.parent.allway ) + R.parent.validate(); + }, + + // ---------------------- + // + // LISTENING + // + // ---------------------- + + /* + // esta era la funcion original + loop: function () { + + if( R.isLoop ) requestAnimationFrame( R.loop ); + R.update(); + + }, + + */ + + loop: function () { + // modified by Fedemarino + if (R.isLoop) requestAnimationFrame(R.loop); + R.needsUpdate = R.update(); + // if there is a change in a value generated externally, the GUI needs to be redrawn + if (R.ui[0] && R.needsUpdate) R.ui[0].draw(); + }, + + update: function () { + // modified by Fedemarino + let i = R.listens.length; + let needsUpdate = false; + while (i--) { + //check if the value of the object has changed + let hasChanged = R.listens[i].listening(); + if (hasChanged) needsUpdate = true; + } + return needsUpdate; + }, + + removeListen: function (proto) { + let id = R.listens.indexOf(proto); + if (id !== -1) R.listens.splice(id, 1); + if (R.listens.length === 0) R.isLoop = false; + }, + + addListen: function (proto) { + let id = R.listens.indexOf(proto); + + if (id !== -1) return false; + + R.listens.push(proto); + + if (!R.isLoop) { + R.isLoop = true; + R.loop(); + } + + return true; + }, + }; + + const Roots = R; + + /** + * @author lth / https://github.com/lo-th + */ + + const T = { + + transition: 0.2, + + frag: document.createDocumentFragment(), + + colorRing: null, + joystick_0: null, + joystick_1: null, + circular: null, + knob: null, + pad2d: null, + + svgns: "http://www.w3.org/2000/svg", + links: "http://www.w3.org/1999/xlink", + htmls: "http://www.w3.org/1999/xhtml", + + DOM_SIZE: [ 'height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], + SVG_TYPE_D: [ 'pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix' ], + SVG_TYPE_G: [ 'svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject' ], + + PI: Math.PI, + TwoPI: Math.PI*2, + pi90: Math.PI * 0.5, + pi60: Math.PI/3, + + torad: Math.PI / 180, + todeg: 180 / Math.PI, + + clamp: ( v, min, max ) => { + + v = v < min ? min : v; + v = v > max ? max : v; + return v; + + }, + + isDivid: ( v ) => ( v*0.5 === Math.floor(v*0.5) ), + + size: { w: 240, h: 20, p: 30, s: 8 }, + + // ---------------------- + // COLOR + // ---------------------- + + defineColor: ( o, cc = T.colors ) => { + + let color = { ...cc }; + + let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize' ]; + let changeText = false; + + if( o.font ) o.fontFamily = o.font; + if( o.shadow ) o.fontShadow = o.shadow; + if( o.weight ) o.fontWeight = o.weight; + + if( o.fontColor ) o.text = o.fontColor; + if( o.color ) o.text = o.color; + + if( o.text ){ + color.text = o.text; + if( !o.fontColor && !o.color ){ + color.title = T.ColorLuma( o.text, -0.25 ); + color.titleoff = T.ColorLuma( o.text, -0.5 ); + } + color.textOver = T.ColorLuma( o.text, 0.25 ); + color.textSelect = T.ColorLuma( o.text, 0.5 ); + } + + if( o.button ){ + color.button = o.button; + color.border = T.ColorLuma( o.button, 0.1 ); + color.overoff = T.ColorLuma( o.button, 0.2 ); + } + + if( o.select ){ + color.select = o.select; + color.over = T.ColorLuma( o.select, -0.1 ); + } + + if( o.itemBg ) o.back = o.itemBg; + + if( o.back ){ + color.back = o.back; + color.backoff = T.ColorLuma( o.back, -0.1 ); + } + + if( o.fontSelect ) color.textSelect = o.fontSelect; + if( o.groupBorder ) color.gborder = o.groupBorder; + + //if( o.transparent ) o.bg = 'none' + //if( o.bg ) color.background = color.backgroundOver = o.bg + if( o.bgOver ) color.backgroundOver = o.bgOver; + + for( let m in color ){ + if(o[m]!==undefined) color[m] = o[m]; + } + + for( let m in o ){ + if( textChange.indexOf(m) !== -1 ) changeText = true; + } + + if( changeText ) T.defineText( color ); + + return color + + }, + + colors: { + + sx: 4,//4 + sy: 2,//2 + radius:2, + + showOver : 1, + //groupOver : 1, + + content:'none', + background: 'rgba(50,50,50,0.15)', + backgroundOver: 'rgba(50,50,50,0.3)', + + title : '#CCC', + titleoff : '#BBB', + text : '#DDD', + textOver : '#EEE', + textSelect : '#FFF', + + back:'rgba(0,0,0,0.2)', + backoff:'rgba(0,0,0,0.3)', + + // input and button border + border : '#4c4c4c', + borderSize : 1, + + gborder : 'none', + groups : 'none', + + + button : '#3c3c3c', + overoff : '#5c5c5c', + over : '#024699', + select : '#308AFF', + action: '#FF3300', + + //fontFamily: 'Tahoma', + fontFamily: 'Consolas, monospace', + //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", + fontWeight: 'normal', + fontShadow: 'none',//'#000', + fontSize:12, + + joyOver:'rgba(48,138,255,0.25)', + joyOut: 'rgba(100,100,100,0.5)', + joySelect: '#308AFF', + + + hide: 'rgba(0,0,0,0)', + + }, + + // style css + + css : { + + basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', + button:'display:flex; align-items:center; justify-content:center; text-align:center;', + middle:'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' + }, + + // svg path + + svgs: { + + g1:'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', + g2:'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', + + group:'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', + arrow:'M 3 8 L 8 5 3 2 3 8 Z', + + arrowDown:'M 5 8 L 8 3 2 3 5 8 Z', + arrowUp:'M 5 2 L 2 7 8 7 5 2 Z', + + solid:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', + body:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', + vehicle:'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', + articulation:'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', + character:'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', + terrain:'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', + joint:'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', + ray:'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', + collision:'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', + map:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + material:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + texture:'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', + object:'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', + none:'M 9 5 L 5 5 5 9 9 9 9 5 Z', + cursor:'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', + load:'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', + save:'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', + extern:'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z', + + }, + + rezone () { + Roots.needReZone = true; + }, + + getImput: function(){ + + return Roots.input ? true : false + + }, + + setStyle : function ( data ){ + + for ( var o in data ){ + if( T.colors[o] ) T.colors[o] = data[o]; + } + + T.setText(); + + }, + + // ---------------------- + // custom text + // ---------------------- + + defineText: function( o ){ + + T.setText( o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight ); + + }, + + setText: function( size, color, font, shadow, weight ){ + + let cc = T.colors; + + if( font === undefined ) font = cc.fontFamily; + if( size === undefined ) size = cc.fontSize; + if( shadow === undefined ) shadow = cc.fontShadow; + if( weight === undefined ) weight = cc.fontWeight; + if( color === undefined ) color = cc.text; + + if( isNaN(size) ){ if( size.search('em')===-1 ) size += 'px';} + else size += 'px'; + + + //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' + + T.css.txt = T.css.basic + T.css.middle + ' font-family:'+ font +'; font-weight:'+weight+'; font-size:'+size+'; color:'+cc.text+'; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; + if( shadow !== 'none' ) T.css.txt += ' text-shadow: 1px 1px 1px '+shadow+';'; + + T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; + T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; + + }, + + + // note + + //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container + + /*cloneColor: function () { + + let cc = Object.assign({}, T.colors ); + return cc; + + },*/ + + // intern function + + cloneCss: function () { + + //let cc = Object.assign({}, T.css ); + return { ...T.css }; + + }, + + clone: function ( o ) { + + return o.cloneNode( true ); + + }, + + setSvg: function( dom, type, value, id, id2 ){ + + if( id === -1 ) dom.setAttributeNS( null, type, value ); + else if( id2 !== undefined ) dom.childNodes[ id || 0 ].childNodes[ id2 || 0 ].setAttributeNS( null, type, value ); + else dom.childNodes[ id || 0 ].setAttributeNS( null, type, value ); + + }, + + setCss: function( dom, css ){ + + for( let r in css ){ + if( T.DOM_SIZE.indexOf(r) !== -1 ) dom.style[r] = css[r] + 'px'; + else dom.style[r] = css[r]; + } + + }, + + set: function( g, o ){ + + for( let att in o ){ + if( att === 'txt' ) g.textContent = o[ att ]; + if( att === 'link' ) g.setAttributeNS( T.links, 'xlink:href', o[ att ] ); + else g.setAttributeNS( null, att, o[ att ] ); + } + + }, + + get: function( dom, id ){ + + if( id === undefined ) return dom; // root + else if( !isNaN( id ) ) return dom.childNodes[ id ]; // first child + else if( id instanceof Array ){ + if(id.length === 2) return dom.childNodes[ id[0] ].childNodes[ id[1] ]; + if(id.length === 3) return dom.childNodes[ id[0] ].childNodes[ id[1] ].childNodes[ id[2] ]; + } + + }, + + dom : function ( type, css, obj, dom, id ) { + + type = type || 'div'; + + if( T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1 ){ // is svg element + + if( type ==='svg' ){ + + dom = document.createElementNS( T.svgns, 'svg' ); + T.set( dom, obj ); + + /* } else if ( type === 'use' ) { + + dom = document.createElementNS( T.svgns, 'use' ); + T.set( dom, obj ); + */ + } else { + // create new svg if not def + if( dom === undefined ) dom = document.createElementNS( T.svgns, 'svg' ); + T.addAttributes( dom, type, obj, id ); + + } + + } else { // is html element + + if( dom === undefined ) dom = document.createElementNS( T.htmls, type ); + else dom = dom.appendChild( document.createElementNS( T.htmls, type ) ); + + } + + if( css ) dom.style.cssText = css; + + if( id === undefined ) return dom; + else return dom.childNodes[ id || 0 ]; + + }, + + addAttributes : function( dom, type, o, id ){ + + let g = document.createElementNS( T.svgns, type ); + T.set( g, o ); + T.get( dom, id ).appendChild( g ); + if( T.SVG_TYPE_G.indexOf(type) !== -1 ) g.style.pointerEvents = 'none'; + return g; + + }, + + clear : function( dom ){ + + T.purge( dom ); + while (dom.firstChild) { + if ( dom.firstChild.firstChild ) T.clear( dom.firstChild ); + dom.removeChild( dom.firstChild ); + } + + }, + + purge : function ( dom ) { + + let a = dom.attributes, i, n; + if (a) { + i = a.length; + while(i--){ + n = a[i].name; + if (typeof dom[n] === 'function') dom[n] = null; + } + } + a = dom.childNodes; + if (a) { + i = a.length; + while(i--){ + T.purge( dom.childNodes[i] ); + } + } + + }, + + // ---------------------- + // SVG Effects function + // ---------------------- + + addSVGGlowEffect: function () { + + if ( document.getElementById( 'UILGlow') !== null ) return; + + let svgFilter = T.initUILEffects(); + + let filter = T.addAttributes( svgFilter, 'filter', { id: 'UILGlow', x: '-20%', y: '-20%', width: '140%', height: '140%' } ); + T.addAttributes( filter, 'feGaussianBlur', { in: 'SourceGraphic', stdDeviation: '3', result: 'uilBlur' } ); + let feMerge = T.addAttributes( filter, 'feMerge', { } ); + + for( let i = 0; i <= 3; i++ ) { + + T.addAttributes( feMerge, 'feMergeNode', { in: 'uilBlur' } ); + + } + + T.addAttributes( feMerge, 'feMergeNode', { in: 'SourceGraphic' } ); + + }, + + initUILEffects: function () { + + let svgFilter = document.getElementById( 'UILSVGEffects'); + + if ( svgFilter === null ) { + + svgFilter = T.dom( 'svg', undefined , { id: 'UILSVGEffects', width: '0', height: '0' } ); + document.body.appendChild( svgFilter ); + + } + + return svgFilter; + + }, + + // ---------------------- + // Color function + // ---------------------- + + ColorLuma : function ( hex, l ) { + + //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; + + if( hex === 'n' ) hex = '#000'; + + // validate hex string + hex = String(hex).replace(/[^0-9a-f]/gi, ''); + if (hex.length < 6) { + hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; + } + l = l || 0; + + // convert to decimal and change luminosity + let rgb = "#", c, i; + for (i = 0; i < 3; i++) { + c = parseInt(hex.substr(i*2,2), 16); + c = Math.round(Math.min(Math.max(0, c + (c * l)), 255)).toString(16); + rgb += ("00"+c).substr(c.length); + } + + return rgb; + + }, + + findDeepInver: function ( c ) { + + return (c[0] * 0.3 + c[1] * .59 + c[2] * .11) <= 0.6; + + }, + + lerpColor: function( c1, c2, factor ) { + let newColor = {}; + for ( let i = 0; i < 3; i++ ) { + newColor[i] = c1[ i ] + ( c2[ i ] - c1[ i ] ) * factor; + } + return newColor; + }, + + hexToHtml: function ( v ) { + v = v === undefined ? 0x000000 : v; + return "#" + ("000000" + v.toString(16)).substr(-6); + + }, + + htmlToHex: function ( v ) { + + return v.toUpperCase().replace("#", "0x"); + + }, + + u255: function (c, i) { + + return parseInt(c.substring(i, i + 2), 16) / 255; + + }, + + u16: function ( c, i ) { + + return parseInt(c.substring(i, i + 1), 16) / 15; + + }, + + unpack: function( c ){ + + if (c.length == 7) return [ T.u255(c, 1), T.u255(c, 3), T.u255(c, 5) ]; + else if (c.length == 4) return [ T.u16(c,1), T.u16(c,2), T.u16(c,3) ]; + + }, + + p255: function ( c ) { + let h = Math.round( ( c * 255 ) ).toString( 16 ); + if ( h.length < 2 ) h = '0' + h; + return h; + }, + + pack: function ( c ) { + + return '#' + T.p255( c[ 0 ] ) + T.p255( c[ 1 ] ) + T.p255( c[ 2 ] ); + + }, + + htmlRgb: function( c ){ + + return 'rgb(' + Math.round(c[0] * 255) + ','+ Math.round(c[1] * 255) + ','+ Math.round(c[2] * 255) + ')'; + + }, + + pad: function( n ){ + if(n.length == 1)n = '0' + n; + return n; + }, + + rgbToHex : function( c ){ + + let r = Math.round(c[0] * 255).toString(16); + let g = Math.round(c[1] * 255).toString(16); + let b = Math.round(c[2] * 255).toString(16); + return '#' + T.pad(r) + T.pad(g) + T.pad(b); + + // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); + + }, + + hueToRgb: function( p, q, t ){ + + if ( t < 0 ) t += 1; + if ( t > 1 ) t -= 1; + if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; + if ( t < 1 / 2 ) return q; + if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); + return p; + + }, + + rgbToHsl: function ( c ) { + + let r = c[0], g = c[1], b = c[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h = 0, s = 0, l = (min + max) / 2; + if (l > 0 && l < 1) s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); + if (delta > 0) { + if (max == r && max != g) h += (g - b) / delta; + if (max == g && max != b) h += (2 + (b - r) / delta); + if (max == b && max != r) h += (4 + (r - g) / delta); + h /= 6; + } + return [ h, s, l ]; + + }, + + hslToRgb: function ( c ) { + + let p, q, h = c[0], s = c[1], l = c[2]; + + if ( s === 0 ) return [ l, l, l ]; + else { + q = l <= 0.5 ? l * (s + 1) : l + s - ( l * s ); + p = l * 2 - q; + return [ T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333) ]; + } + + }, + + // ---------------------- + // SVG MODEL + // ---------------------- + + makeGradiant: function ( type, settings, parent, colors ) { + + T.dom( type, null, settings, parent, 0 ); + + let n = parent.childNodes[0].childNodes.length - 1, c; + + for( let i = 0; i < colors.length; i++ ){ + + c = colors[i]; + //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); + T.dom( 'stop', null, { offset:c[0]+'%', 'stop-color':c[1], 'stop-opacity':c[2] }, parent, [0,n] ); + + } + + }, + + /*makeGraph: function () { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 + //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 + //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + + //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 + //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.graph = svg; + + },*/ + + makePad: function ( model ) { + + let ww = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+ww+' '+ww, width:ww, height:ww, preserveAspectRatio:'none' } ); + let w = 200; + let d = (ww-w)*0.5, m = 20; + Tools.dom( 'rect', '', { x: d, y: d, width: w, height: w, fill:T.colors.back }, svg ); // 0 + Tools.dom( 'rect', '', { x: d+m*0.5, y: d+m*0.5, width: w - m , height: w - m, fill:T.colors.button }, svg ); // 1 + // Pointer + Tools.dom( 'line', '', { x1: d+(m*0.5), y1: ww *0.5, x2: d+(w-m*0.5), y2: ww * 0.5, stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 2 + Tools.dom( 'line', '', { x1: ww * 0.5, x2: ww * 0.5, y1: d+(m*0.5), y2: d+(w-m*0.5), stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 3 + Tools.dom( 'circle', '', { cx: ww * 0.5, cy: ww * 0.5, r:5, stroke: T.colors.text, 'stroke-width': 5, fill:'none' }, svg ); // 4 + T.pad2d = svg; + + }, + + makeKnob: function ( model ) { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'round' }, svg );//1 + T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.1)', 'stroke-width':7 , fill:'none'}, svg );//2 + T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.knob = svg; + + }, + + makeCircular: function ( model ) { + + let w = 128; + let radius = 40; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, stroke:'rgba(0,0,0,0.1)', 'stroke-width':10, fill:'none' }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':7, fill:'none', 'stroke-linecap':'butt' }, svg );//1 + T.circular = svg; + + }, + + makeJoystick: function ( model ) { + + //+' background:#f00;' + + let w = 128, ccc; + let radius = Math.floor((w-30)*0.5); + let innerRadius = Math.floor(radius*0.6); + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + if( model === 0 ){ + + + + // gradian background + ccc = [ [40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'grad', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian shadow + ccc = [ [60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradS', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian stick + let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; + let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; + + ccc = [ [30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + ccc = [ [30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn2', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // graph + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'url(#grad)' }, svg );//2 + T.dom( 'circle', '', { cx:64+5, cy:64+10, r:innerRadius+10, fill:'url(#gradS)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'url(#gradIn)' }, svg );//4 + + T.joystick_0 = svg; + + } else { + // gradian shadow + ccc = [ [69, 'rgb(0,0,0)', 0],[70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradX', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'none', stroke:'rgba(100,100,100,0.25)', 'stroke-width':'4' }, svg );//2 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius+14, fill:'url(#gradX)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'none', stroke:'rgb(100,100,100)', 'stroke-width':'4' }, svg );//4 + + T.joystick_1 = svg; + } + + + + }, + + makeColorRing: function () { + + let w = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + let s = 30;//stroke + let r =( w-s )*0.5; + let mid = w*0.5; + let n = 24, nudge = 8 / r / n * Math.PI, a1 = 0; + let am, tan, d2, a2, ar, i, j, path, ccc; + let color = []; + + for ( i = 0; i <= n; ++i) { + + d2 = i / n; + a2 = d2 * T.TwoPI; + am = (a1 + a2) * 0.5; + tan = 1 / Math.cos((a2 - a1) * 0.5); + + ar = [ + Math.sin(a1), -Math.cos(a1), + Math.sin(am) * tan, -Math.cos(am) * tan, + Math.sin(a2), -Math.cos(a2) + ]; + + color[1] = T.rgbToHex( T.hslToRgb([d2, 1, 0.5]) ); + + if (i > 0) { + + j = 6; + while(j--){ + ar[j] = ((ar[j]*r)+mid).toFixed(2); + } + + path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; + + ccc = [ [0,color[0],1], [100,color[1],1] ]; + T.makeGradiant( 'linearGradient', { id:'G'+i, x1:ar[0], y1:ar[1], x2:ar[4], y2:ar[5], gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'path', '', { d:path, 'stroke-width':s, stroke:'url(#G'+i+')', 'stroke-linecap':"butt" }, svg, 1 ); + + } + a1 = a2 - nudge; + color[0] = color[1]; + } + + let tw = 84.90; + + // black / white + ccc = [ [0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1] ]; + T.makeGradiant( 'linearGradient', { id:'GL0', x1:0, y1:mid-tw, x2:0, y2:mid+tw, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + ccc = [ [0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0] ]; + T.makeGradiant( 'linearGradient', { id:'GL1', x1:mid-49.05, y1:0, x2:mid+98, y2:0, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'g', null, { 'transform-origin': '128px 128px', 'transform':'rotate(0)' }, svg );//2 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'red' }, svg, 2 );// 2,0 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL1)','stroke-width':1, stroke:'url(#GL1)' }, svg, 2 );//2,1 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL0)','stroke-width':1, stroke:'url(#GL0)' }, svg, 2 );//2,2 + T.dom( 'path', '', { d:'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill:'none','stroke-width':2, stroke:'#000' }, svg, 2 );//2,3 + //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 + + T.dom( 'circle', '', { cx:128, cy:128, r:6, 'stroke-width':2, stroke:'#000', fill:'none' }, svg );//3 + + T.colorRing = svg; + + }, + + icon: function ( type, color, w ){ + + w = w || 40; + //color = color || '#DEDEDE'; + let viewBox = '0 0 256 256'; + //let viewBox = '0 0 '+ w +' '+ w; + let t = [""]; + switch(type){ + case 'logo': + t[1]=""; + break; + case 'donate': + t[1]=""; + break; + case 'neo': + t[1]=""; + break; + case 'phy': + t[1]=""; + break; + case 'config': + t[1]=""; + break; + case 'github': + t[1]=""; + break; + case 'save': + t[1]=""; + break; + } + t[2] = ""; + return t.join("\n"); + + }, + + logoFill_d:` + M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 + L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 + M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 + Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z + `, + + logo_github:` + M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 + 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 + 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 + 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 + 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z + `, + + logo_neo:` + M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 + 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 + 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 + 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L + 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z + `, + + logo_phy:` + M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 + Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 + `, + + logo_config:` + M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 + L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 + Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 + `, + + logo_donate:` + M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 + 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 + 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 + 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 + 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 + Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 + 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 + 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 + 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M + 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 + 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 + 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 + 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 + 200.9 187.5 200.9 187.5 195.35 Z + `, + + }; + + T.setText(); + + const Tools = T; + + ///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile + + + class Files { + + //----------------------------- + // FILE TYPE + //----------------------------- + + static autoTypes( type ) { + + let t = []; + + switch( type ){ + case 'svg': + t = [ { accept: { 'image/svg+xml': '.svg'} }, ]; + break; + case 'wav': + t = [ { accept: { 'audio/wav': '.wav'} }, ]; + break; + case 'mp3': + t = [ { accept: { 'audio/mpeg': '.mp3'} }, ]; + break; + case 'mp4': + t = [ { accept: { 'video/mp4': '.mp4'} }, ]; + break; + case 'bin': case 'hex': + t = [ { description: 'Binary Files', accept: { 'application/octet-stream': ['.bin', '.hex'] } }, ]; + break; + case 'text': + t = [ { description: 'Text Files', accept: { 'text/plain': ['.txt', '.text'], 'text/html': ['.html', '.htm'] } }, ]; + break; + case 'json': + t = [ { description: 'JSON Files', accept: { 'application/json': ['.json'] } }, ];//text/plain + break; + case 'js': + t = [ { description: 'JavaScript Files', accept: { 'text/javascript': ['.js'] } }, ]; + break; + case 'image': + t = [ { description: 'Images', accept: { 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] } }, ]; + break; + case 'icon': + t = [ { description: 'Icons', accept: { 'image/x-ico': ['.ico'] } }, ]; + break; + case 'lut': + t = [ { description: 'Lut', accept: { 'text/plain': ['.cube', '.3dl'] } }, ]; + break; + + } + + return t + + } + + + //----------------------------- + // LOAD + //----------------------------- + + static async load( o = {} ) { + + if (typeof window.showOpenFilePicker !== 'function') { + window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; + } + + try { + + let type = o.type || ''; + + const options = { + excludeAcceptAllOption: type ? true : false, + multiple: false, + //startIn:'./assets' + }; + + options.types = Files.autoTypes( type ); + + // create a new handle + const handle = await window.showOpenFilePicker( options ); + const file = await handle[0].getFile(); + //let content = await file.text() + + if( !file ) return null + + let fname = file.name; + let ftype = fname.substring( fname.lastIndexOf('.')+1, fname.length ); + + const dataUrl = [ 'png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3' ]; + const dataBuf = [ 'sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf' ]; + const reader = new FileReader(); + + if( dataUrl.indexOf( ftype ) !== -1 ) reader.readAsDataURL( file ); + else if( dataBuf.indexOf( ftype ) !== -1 ) reader.readAsArrayBuffer( file ); + else reader.readAsText( file ); + + reader.onload = function(e) { + + let content = e.target.result; + + switch(type){ + case 'image': + let img = new Image; + img.onload = function() { + if( o.callback ) o.callback( img, fname, ftype ); + }; + img.src = content; + break; + case 'json': + if( o.callback ) o.callback( JSON.parse( content ), fname, ftype ); + break; + default: + if( o.callback ) o.callback( content, fname, ftype ); + break; + } + + }; + + } catch(e) { + + console.log(e); + if( o.always && o.callback ) o.callback( null ); + + } + + } + + static showOpenFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const input = document.createElement("input"); + input.type = "file"; + input.multiple = options.multiple; + input.accept = options.types + .map((type) => type.accept) + .flatMap((inst) => Object.keys(inst).flatMap((key) => inst[key])) + .join(","); + + input.addEventListener("change", () => { + resolve( + [...input.files].map((file) => { + return { + getFile: async () => + new Promise((resolve) => { + resolve(file); + }), + }; + }) + ); + }); + + input.click(); + }) + } + + + //----------------------------- + // SAVE + //----------------------------- + + static async save( o = {} ) { + + let usePoly = false; + + if (typeof window.showSaveFilePicker !== 'function') { + window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; + usePoly = true; + } + + try { + + let type = o.type || ''; + + const options = { + suggestedName: o.name || 'hello', + data: o.data || '' + }; + + options.types = Files.autoTypes( type ); + options.finalType = Object.keys( options.types[0].accept )[0]; + options.suggestedName += options.types[0].accept[options.finalType][0]; + + + // create a new handle + const handle = await window.showSaveFilePicker( options ); + + if( usePoly ) return + + // create a FileSystemWritableFileStream to write to + const file = await handle.createWritable(); + + let blob = new Blob([ options.data ], { type: options.finalType }); + + // write our file + await file.write(blob); + + // close the file and write the contents to disk. + await file.close(); + + } catch(e) { + + console.log(e); + + } + + } + + static showSaveFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const a = document.createElement("a"); + a.download = options.suggestedName || "my-file.txt"; + let blob = new Blob([ options.data ], { type:options.finalType }); + a.href = URL.createObjectURL( blob ); + + a.addEventListener("click", () => { + resolve( + setTimeout( () => URL.revokeObjectURL(a.href), 1000 ) + ); + }); + a.click(); + }) + } + + + //----------------------------- + // FOLDER not possible in poly + //----------------------------- + + static async getFolder() { + + try { + + const handle = await window.showDirectoryPicker(); + const files = []; + for await (const entry of handle.values()) { + const file = await entry.getFile(); + files.push(file); + } + + console.log(files); + return files; + + } catch(e) { + + console.log(e); + + } + + } + + + + + + + + + + + } + + class V2 { + + constructor( x = 0, y = 0 ) { + + this.x = x; + this.y = y; + + } + + set ( x, y ) { + + this.x = x; + this.y = y; + return this; + + } + + divide ( v ) { + + this.x /= v.x; + this.y /= v.y; + return this; + + } + + multiply ( v ) { + + this.x *= v.x; + this.y *= v.y; + return this; + + } + + multiplyScalar ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + return this; + + } + + divideScalar ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + } + + length () { + + return Math.sqrt( this.x * this.x + this.y * this.y ); + + } + + angle () { + + // computes the angle in radians with respect to the positive x-axis + + var angle = Math.atan2( this.y, this.x ); + + if ( angle < 0 ) angle += 2 * Math.PI; + + return angle; + + } + + addScalar ( s ) { + + this.x += s; + this.y += s; + return this; + + } + + negate () { + + this.x *= -1; + this.y *= -1; + return this; + + } + + neg () { + + this.x = -1; + this.y = -1; + return this; + + } + + isZero () { + + return ( this.x === 0 && this.y === 0 ); + + } + + copy ( v ) { + + this.x = v.x; + this.y = v.y; + + return this; + + } + + equals ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) ); + + } + + nearEquals ( v, n ) { + + return ( ( v.x.toFixed(n) === this.x.toFixed(n) ) && ( v.y.toFixed(n) === this.y.toFixed(n) ) ); + + } + + lerp ( v, alpha ) { + + if( v === null ){ + this.x -= this.x * alpha; + this.y -= this.y * alpha; + } else { + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + } + + return this; + + } + + } + + /** + * @author lth / https://github.com/lo-th + */ + + class Proto { + constructor(o = {}) { + // disable mouse controle + this.lock = o.lock || false; + + // for button + this.neverlock = false; + + // only simple space + this.isSpace = o.isSpace || false; + + // if is on gui or group + this.main = o.main || null; + this.isUI = o.isUI || false; + this.group = o.group || null; + + this.isListen = false; + + this.top = 0; + this.ytop = 0; + + this.dx = o.dx || 0; + + this.isSelectable = o.selectable !== undefined ? o.selectable : false; + this.unselectable = + o.unselect !== undefined ? o.unselect : this.isSelectable; + + this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' + + this.css = this.main ? this.main.css : Tools.css; + + this.colors = Tools.defineColor( + o, + this.main + ? this.group + ? this.group.colors + : this.main.colors + : Tools.colors + ); + + this.overEffect = this.colors.showOver; + + this.svgs = Tools.svgs; + + this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; + this.local = new V2().neg(); + + this.isCanvasOnly = false; + this.isSelect = false; + + // percent of title + this.p = o.p !== undefined ? o.p : Tools.size.p; + + this.w = this.isUI ? this.main.size.w : Tools.size.w; + if (o.w !== undefined) this.w = o.w; + + this.h = this.isUI ? this.main.size.h : Tools.size.h; + if (o.h !== undefined) this.h = o.h; + if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; + else this.lock = true; + + // decale for canvas only + this.fw = o.fw || 0; + + this.autoWidth = o.auto || true; // auto width or flex + this.isOpen = false; //false// open statu + + // radius for toolbox + this.radius = o.radius || this.colors.radius; + + this.transition = o.transition || Tools.transition; + + // only for number + this.isNumber = false; + this.noNeg = o.noNeg || false; + this.allEqual = o.allEqual || false; + + // only most simple + this.mono = false; + + // stop listening for edit slide text + this.isEdit = false; + + // no title + this.simple = o.simple || false; + if (this.simple) this.sa = 0; + + // define obj size + this.setSize(this.w); + + // title size + if (o.sa !== undefined) this.sa = o.sa; + if (o.sb !== undefined) this.sb = o.sb; + if (this.simple) this.sb = this.w - this.sa; + + // last number size for slide + this.sc = o.sc === undefined ? 47 : o.sc; + + // for listening object + this.objectLink = null; + this.isSend = false; + this.objectKey = null; + + this.txt = o.name || ""; + this.name = o.rename || this.txt; + this.target = o.target || null; + + // callback + this.callback = o.callback === undefined ? null : o.callback; + this.endCallback = null; + this.openCallback = o.openCallback === undefined ? null : o.openCallback; + this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; + + // if no callback take one from group or gui + if (this.callback === null && this.isUI && this.main.callback !== null) { + this.callback = this.group ? this.group.callback : this.main.callback; + } + + // elements + this.c = []; + + // style + this.s = []; + + this.useFlex = this.isUI ? this.main.useFlex : false; + let flexible = this.useFlex + ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" + : "float:left;"; + + this.c[0] = Tools.dom( + "div", + this.css.basic + flexible + "position:relative; height:20px;" + ); + + this.s[0] = this.c[0].style; + + // bottom margin + this.margin = this.colors.sy; + this.mtop = 0; + let marginDiv = Tools.isDivid(this.margin); + + if (this.isUI && this.margin) { + this.s[0].boxSizing = "content-box"; + if (marginDiv) { + this.mtop = this.margin * 0.5; + //this.s[0].borderTop = '${this.mtop}px solid transparent' + //console.log(`${this.mtop}px solid transparent`) + this.s[0].borderTop = this.mtop + "px solid transparent"; + this.s[0].borderBottom = this.mtop + "px solid transparent"; + } else { + this.s[0].borderBottom = this.margin + "px solid transparent"; + } + } + + // with title + if (!this.simple) { + this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); + this.s[1] = this.c[1].style; + this.c[1].textContent = this.name; + this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; + } + + if (o.pos) { + this.s[0].position = "absolute"; + for (let p in o.pos) { + this.s[0][p] = o.pos[p]; + } + this.mono = true; + } + + if (o.css) this.s[0].cssText = o.css; + } + + // ---------------------- + // make the node + // ---------------------- + + init() { + this.ytop = this.top + this.mtop; + + this.zone.h = this.h + this.margin; + this.zone.w = this.w; + + let s = this.s; // style cache + let c = this.c; // div cach + + s[0].height = this.h + "px"; + + if (this.isUI) s[0].background = this.colors.background; + + if (!this.autoWidth && this.useFlex) { + s[0].flex = "1 0 auto"; + s[0].minWidth = this.minw + "px"; + s[0].textAlign = "center"; + } else { + if (this.isUI) s[0].width = "100%"; + } + + //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; + if (c[1] !== undefined && this.autoWidth) { + s[1] = c[1].style; + s[1].top = 1 + "px"; + s[1].height = this.h - 2 + "px"; + } + + let frag = Tools.frag; + + for (let i = 1, lng = c.length; i !== lng; i++) { + if (c[i] !== undefined) { + frag.appendChild(c[i]); + s[i] = c[i].style; + } + } + + let pp = + this.target !== null + ? this.target + : this.isUI + ? this.main.inner + : document.body; + + if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); + else pp.appendChild(c[0]); + + c[0].appendChild(frag); + + this.rSize(); + + // ! solo proto + if (!this.isUI) { + this.c[0].style.pointerEvents = "auto"; + Roots.add(this); + } + } + + addTransition() { + if (this.baseH && this.transition && this.isUI) { + this.c[0].style.transition = "height " + this.transition + "s ease-out"; + } + } + + // from Tools + + dom(type, css, obj, dom, id) { + return Tools.dom(type, css, obj, dom, id); + } + + setSvg(dom, type, value, id, id2) { + Tools.setSvg(dom, type, value, id, id2); + } + + setCss(dom, css) { + Tools.setCss(dom, css); + } + + clamp(value, min, max) { + return Tools.clamp(value, min, max); + } + + getColorRing() { + if (!Tools.colorRing) Tools.makeColorRing(); + return Tools.clone(Tools.colorRing); + } + + getJoystick(model) { + if (!Tools["joystick_" + model]) Tools.makeJoystick(model); + return Tools.clone(Tools["joystick_" + model]); + } + + getCircular(model) { + if (!Tools.circular) Tools.makeCircular(model); + return Tools.clone(Tools.circular); + } + + getKnob(model) { + if (!Tools.knob) Tools.makeKnob(model); + return Tools.clone(Tools.knob); + } + + getPad2d(model) { + if (!Tools.pad2d) Tools.makePad(model); + return Tools.clone(Tools.pad2d); + } + + // from Roots + + cursor(name) { + Roots.cursor(name); + } + + ///////// + + update() {} + + reset() {} + + ///////// + + content() { + return this.c[0]; + } + + getDom() { + return this.c[0]; + } + + uiout() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.background; + } + + uiover() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.backgroundOver; + } + + rename(s) { + if (this.c[1] !== undefined) this.c[1].textContent = s; + } + + listen() { + this.isListen = Roots.addListen(this); + return this; + } + + listening() { + // modified by Fedemarino + if (this.objectLink === null) return; + if (this.isSend) return; + if (this.isEdit) return; + // check if value has changed + let hasChanged = this.setValue(this.objectLink[this.objectKey]); + return hasChanged; + } + + setValue(v) { + const old = this.value; + if (this.isNumber) this.value = this.numValue(v); + //else if( v instanceof Array && v.length === 1 ) v = v[0]; + else this.value = v; + this.update(); + let hasChanged = false; + if (old !== this.value) { + hasChanged = true; + } + + return hasChanged; + } + + // ---------------------- + // update every change + // ---------------------- + + onChange(f) { + if (this.isSpace) return; + this.callback = f || null; + return this; + } + + // ---------------------- + // update only on end + // ---------------------- + + onFinishChange(f) { + if (this.isSpace) return; + this.callback = null; + this.endCallback = f; + return this; + } + + // ---------------------- + // event on open close + // ---------------------- + + onOpen(f) { + this.openCallback = f; + return this; + } + + onClose(f) { + this.closeCallback = f; + return this; + } + + // ---------------------- + // send back value + // ---------------------- + + send(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + this.isSend = true; + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + if (this.callback) this.callback(v, this.objectKey); + this.isSend = false; + } + + sendEnd(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + if (this.endCallback) this.endCallback(v); + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + } + + // ---------------------- + // clear node + // ---------------------- + + dispose() { + if (this.isListen) Roots.removeListen(this); + + Tools.clear(this.c[0]); + + if (this.target !== null) { + if (this.group !== null) this.group.clearOne(this); + else this.target.removeChild(this.c[0]); + } else { + if (this.isUI) this.main.clearOne(this); + else document.body.removeChild(this.c[0]); + } + + if (!this.isUI) Roots.remove(this); + + this.c = null; + this.s = null; + this.callback = null; + this.target = null; + this.isListen = false; + } + + clear() {} + + // ---------------------- + // change size + // ---------------------- + + getWidth() { + let nw = Roots.getWidth(this); + if (nw) this.w = nw; + } + + setSize(sx) { + if (!this.autoWidth) return; + + this.w = sx; + + if (this.simple) { + this.sb = this.w - this.sa; + } else { + let pp = this.w * (this.p / 100); + //this.sa = Math.floor( pp + 10 ) + //this.sb = Math.floor( this.w - pp - 20 ) + this.sa = Math.floor(pp + 8); + this.sb = Math.floor(this.w - pp - 16); + } + } + + rSize() { + if (!this.autoWidth) return; + if (!this.isUI) this.s[0].width = this.w + "px"; + if (!this.simple) this.s[1].width = this.sa + "px"; + } + + // ---------------------- + // for numeric value + // ---------------------- + + setTypeNumber(o) { + this.isNumber = true; + + this.value = 0; + if (o.value !== undefined) { + if (typeof o.value === "string") this.value = o.value * 1; + else this.value = o.value; + } + + this.min = o.min === undefined ? -Infinity : o.min; + this.max = o.max === undefined ? Infinity : o.max; + this.precision = o.precision === undefined ? 2 : o.precision; + + let s; + + switch (this.precision) { + case 0: + s = 1; + break; + case 1: + s = 0.1; + break; + case 2: + s = 0.01; + break; + case 3: + s = 0.001; + break; + case 4: + s = 0.0001; + break; + case 5: + s = 0.00001; + break; + case 6: + s = 0.000001; + break; + } + + this.step = o.step === undefined ? s : o.step; + this.range = this.max - this.min; + this.value = this.numValue(this.value); + } + + numValue(n) { + if (this.noNeg) n = Math.abs(n); + return ( + Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 + ); + } + + // ---------------------- + // EVENTS DEFAULT + // ---------------------- + + handleEvent(e) { + if (this.lock) return; + if (this.neverlock) Roots.lock = false; + if (!this[e.type]) + return console.error(e.type, "this type of event no existe !"); + + // TODO !!!! + + //if( this.marginDiv ) z.d -= this.margin * 0.5 + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 + + return this[e.type](e); + } + + wheel(e) { + return false; + } + mousedown(e) { + return false; + } + mousemove(e) { + return false; + } + mouseup(e) { + return false; + } + keydown(e) { + return false; + } + keyup(e) { + return false; + } + + // ---------------------- + // object referency + // ---------------------- + + setReferency(obj, key) { + this.objectLink = obj; + this.objectKey = key; + } + + display(v = false) { + this.s[0].visibility = v ? "visible" : "hidden"; + } + + // ---------------------- + // resize height + // ---------------------- + + open() { + if (this.isOpen) return; + this.isOpen = true; + Roots.needResize = true; + if (this.openCallback) this.openCallback(); + } + + close() { + if (!this.isOpen) return; + this.isOpen = false; + Roots.needResize = true; + if (this.closeCallback) this.closeCallback(); + } + + needZone() { + Roots.needReZone = true; + } + + rezone() { + Roots.needReZone = true; + } + + // ---------------------- + // INPUT + // ---------------------- + + select() {} + + unselect() {} + + setInput(Input) { + Roots.setInput(Input, this); + } + + upInput(x, down) { + return Roots.upInput(x, down); + } + + // ---------------------- + // special item + // ---------------------- + + selected(b) { + this.isSelect = b || false; + } + } + + class Bool extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || false; + this.model = o.mode !== undefined ? o.mode : 0; + + this.onName = o.rename || this.txt; + if( o.onName ) o.onname = o.onName; + if( o.onname ) this.onName = o.onname; + + this.inh = o.inh || Math.floor( this.h*0.8 ); + this.inw = o.inw || 36; + + let cc = this.colors; + + if( this.model === 0 ){ + let t = Math.floor(this.h*0.5)-((this.inh-2)*0.5); + this.c[2] = this.dom( 'div', this.css.basic + 'background:'+ cc.inputBg +'; height:'+(this.inh-2)+'px; width:'+this.inw+'px; top:'+t+'px; border-radius:10px; border:2px solid '+ cc.back ); + this.c[3] = this.dom( 'div', this.css.basic + 'height:'+(this.inh-6)+'px; width:16px; top:'+(t+2)+'px; border-radius:10px; background:'+ cc.button+';' ); + } else { + this.p = 0; + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + } + + this.stat = -1; + + this.init(); + this.update(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + this.value = !this.value; + this.update( true ); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + this.cursor('pointer'); + return this.mode( true ) + + } + + reset () { + + this.cursor(); + return this.mode() + + } + + // ---------------------- + // MODE + // ---------------------- + + mode ( over ) { + + let change = false; + let cc = this.colors, s = this.s, n, v = this.value; + + if( over ) n = v ? 4 : 3; + else n = v ? 2 : 1; + + if( this.stat !== n ){ + + this.stat = n; + + if( this.model !== 0 ){ + + switch( n ){ + + case 1: s[2].color = cc.text; s[2].background = cc.button; break; + case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; + case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; + case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; + + } + + this.c[2].innerHTML = v ? this.onName : this.name; + + } else { + + switch( n ){ + + case 1: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.button; break;// off out + case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break;// on over + case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break;// off over + case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break;// on out + + } + + s[3].marginLeft = v ? '17px' : '2px'; + this.c[1].textContent = v ? this.onName : this.name; + + } + + change = true; + + } + + return change + + } + + // ---------------------- + + update ( up ) { + + this.mode(); + if( up ) this.send(); + + } + + rSize () { + + super.rSize(); + + let s = this.s; + let w = (this.w - 10 ) - this.inw; + if( this.model === 0 ){ + s[2].left = w + 'px'; + s[3].left = w + 'px'; + } else { + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + } + + } + + } + + class Button extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = ''; + if( o.value !== undefined ) this.value = o.value; + + this.values = o.value || this.txt; + if( o.values ) this.values = o.values; + + if( !o.values && !o.value ) this.txt = ''; + + this.onName = o.onName || null; + + this.on = false; + + // force button width + this.bw = o.forceWidth || 0; + if(o.bw) this.bw = o.bw; + this.space = o.space || 3; + + if( typeof this.values === 'string' ) this.values = [ this.values ]; + + this.isDown = false; + this.neverlock = true; + this.res = 0; + + this.lng = this.values.length; + this.tmp = []; + this.stat = []; + + let sel, cc = this.colors; + + for( let i = 0; i < this.lng; i++ ){ + + sel = false; + if( this.values[i] === this.value && this.isSelectable ) sel = true; + + this.c[i+2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[i+2].style.background = sel ? cc.select : cc.button; + this.c[i+2].style.color = sel ? cc.textSelect : cc.text; + this.c[i+2].innerHTML = this.values[i]; + this.stat[i] = sel ? 3:1; + + } + + + if( this.txt==='' ) this.p = 0; + + if( (!o.value && !o.values) || this.p === 0 ){ + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + } + + + this.init(); + + } + + onOff() { + + this.on = !this.on; + this.label( this.on ? this.onName : this.value ); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1 + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.text; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + case 1: // down + + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'stroke', cc.backoff, 0); + color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.textOver; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + } + + this.cmode = mode; + return true; + + } + + reset () { + + this.isDown = false; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'circular'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0); + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1); + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + //console.log('over') + + let off = this.offset; + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = off.angle() - this.pi90; + this.r = (((this.r%this.twoPi)+this.twoPi)%this.twoPi); + + if( this.oldr !== null ){ + + let dif = this.r - this.oldr; + this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; + + if( dif > 6 ) this.r = 0; + if( dif < -6 ) this.r = this.twoPi; + + } + + let steps = 1 / this.twoPi; + let value = this.r * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = ~~ ( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'circular' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + // ---------------------- + + makePath () { + + let r = 40; + let d = 24; + let a = this.percent * this.twoPi - 0.001; + let x2 = (r + r * Math.sin(a)) + d; + let y2 = (r - r * Math.cos(a)) + d; + let big = a > Math.PI ? 1 : 0; + return "M " + (r+d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = ( this.value - this.min ) / this.range; + + this.setSvg( this.c[3], 'd', this.makePath(), 1 ); + + if ( this.model > 0 ) { + + let cc = this.colors; + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 1 ); + + } + + if( up ) this.send(); + + } + + } + + class Color extends Proto { + + constructor( o = {} ) { + + super( o ); + + //this.autoHeight = true; + + this.ctype = o.ctype || 'hex'; + + this.wfixe = 256; + + this.cw = this.sb > 256 ? 256 : this.sb; + if(o.cw != undefined ) this.cw = o.cw; + + + + // color up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + this.baseH = this.h; + + this.offset = new V2(); + this.decal = new V2(); + this.pp = new V2(); + + let cc = this.colors; + + // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) + + this.c[2] = this.dom( 'div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};` ); + //this.s[2] = this.c[2].style; + + //this.s[2].textShadow = 'none' + + /*if( this.up ){ + this.s[2].top = 'auto'; + this.s[2].bottom = '2px'; + }*/ + + //this.c[0].style.textAlign = 'center'; + this.c[0].style.display = 'block'; + + this.c[3] = this.getColorRing(); + this.c[3].style.visibility = 'hidden'; + + this.hsl = null; + this.value = '#ffffff'; + if( o.value !== undefined ){ + if( o.value instanceof Array ) this.value = Tools.rgbToHex( o.value ); + else if(!isNaN(o.value)) this.value = Tools.hexToHtml( o.value ); + else this.value = o.value; + } + + this.bcolor = null; + this.isDown = false; + this.fistDown = false; + + this.notext = o.notext || false; + + this.tr = 98; + this.tsl = Math.sqrt(3) * this.tr; + + this.hue = 0; + this.d = 256; + + this.init(); + + this.setColor( this.value ); + + if( o.open !== undefined ) this.open(); + + } + + testZone ( mx, my ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + if( this.up && this.isOpen ){ + + if( l.y > this.wfixe ) return 'title' + else return 'color' + + } else { + + if( l.y < this.baseH+2 ) return 'title' + else if( this.isOpen ) return 'color' + + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.d = 256; + + } + + mousedown ( e ) { + + + let name = this.testZone( e.clientX, e.clientY ); + + + //if( !name ) return; + if(name === 'title'){ + if( !this.isOpen ) this.open(); + else this.close(); + return true; + } + + + if( name === 'color' ){ + + this.isDown = true; + this.fistDown = true; + this.mousemove( e ); + } + } + + mousemove ( e ) { + + let name = this.testZone( e.clientX, e.clientY ); + + let off, d, hue, sat, lum, rad, x, y, rr, T = Tools; + + if( name === 'title' ) this.cursor('pointer'); + + if( name === 'color' ){ + + off = this.offset; + off.x = e.clientX - ( this.zone.x + this.decal.x + this.mid ); + off.y = e.clientY - ( this.zone.y + this.decal.y + this.mid ) - this.ytop; + d = off.length() * this.ratio; + rr = off.angle(); + if(rr < 0) rr += 2 * T.PI; + + + if ( d < 128 ) this.cursor('crosshair'); + else if( !this.isDown ) this.cursor(); + + if( this.isDown ){ + + if( this.fistDown ){ + this.d = d; + this.fistDown = false; + } + + if ( this.d < 128 ) { + + if ( this.d > this.tr ) { // outside hue + + hue = ( rr + T.pi90 ) / T.TwoPI; + this.hue = (hue + 1) % 1; + this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); + + } else { // triangle + + x = off.x * this.ratio; + y = off.y * this.ratio; + + let rr = (this.hue * T.TwoPI) + T.PI; + if(rr < 0) rr += 2 * T.PI; + + rad = Math.atan2(-y, x); + if(rad < 0) rad += 2 * T.PI; + + let rad0 = ( rad + T.pi90 + T.TwoPI + rr ) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60), + a = 0.5 * this.tr, + b = Math.tan(rad1) * a, + r = Math.sqrt(x*x + y*y), + maxR = Math.sqrt(a*a + b*b); + + if( r > maxR ) { + let dx = Math.tan(rad1) * r; + let rad2 = Math.atan(dx / maxR); + if(rad2 > T.pi60) rad2 = T.pi60; + else if( rad2 < -T.pi60 ) rad2 = -T.pi60; + + rad += rad2 - rad1; + + rad0 = (rad + T.pi90 + T.TwoPI + rr) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60); + b = Math.tan(rad1) * a; + r = maxR = Math.sqrt(a*a + b*b); + } + + lum = ((Math.sin(rad0) * r) / this.tsl) + 0.5; + + let w = 1 - (Math.abs(lum - 0.5) * 2); + sat = (((Math.cos(rad0) * r) + (this.tr / 2)) / (1.5 * this.tr)) / w; + sat = T.clamp( sat, 0, 1 ); + + this.setHSL([this.hsl[0], sat, lum]); + + } + } + } + } + + } + + // ---------------------- + + setHeight () { + + this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; + this.s[0].height = this.h + 'px'; + this.zone.h = this.h; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open () { + + super.open(); + + this.setHeight(); + + if( this.up ) this.zone.y -= this.wfixe + 5; + + let t = this.h - this.baseH; + + this.s[3].visibility = 'visible'; + //this.s[3].display = 'block'; + this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.wfixe + 5; + + let t = this.h - this.baseH; + + this.setHeight(); + + this.s[3].visibility = 'hidden'; + //this.s[3].display = 'none'; + this.parentHeight( -t ); + + } + + update ( up ) { + + let cc = Tools.rgbToHex( Tools.hslToRgb([ this.hsl[0], 1, 0.5 ]) ); + + this.moveMarkers(); + + this.value = this.bcolor; + + this.setSvg( this.c[3], 'fill', cc, 2, 0 ); + + this.s[2].background = this.bcolor; + if(!this.notext) this.c[2].textContent = Tools.htmlToHex( this.bcolor ); + + this.invert = Tools.findDeepInver( this.rgb ); + this.s[2].color = this.invert ? '#fff' : '#000'; + + if(!up) return; + + if( this.ctype === 'array' ) this.send( this.rgb ); + if( this.ctype === 'rgb' ) this.send( Tools.htmlRgb( this.rgb ) ); + if( this.ctype === 'hex' ) this.send( Tools.htmlToHex( this.value ) ); + if( this.ctype === 'html' ) this.send(); + + } + + setValue ( v ){ + + if( v instanceof Array ) this.value = Tools.rgbToHex( v ); + else if(!isNaN(v)) this.value = Tools.hexToHtml( v ); + else this.value = v; + + this.setColor( this.value ); + this.update(); + + } + + setColor ( color ) { + + let unpack = Tools.unpack(color); + if (this.bcolor !== color && unpack) { + + this.bcolor = color; + this.rgb = unpack; + this.hsl = Tools.rgbToHsl( this.rgb ); + + this.hue = this.hsl[0]; + + this.update(); + } + return this; + + } + + setHSL ( hsl ) { + + this.hsl = hsl; + this.rgb = Tools.hslToRgb( hsl ); + this.bcolor = Tools.rgbToHex( this.rgb ); + this.update( true ); + return this; + + } + + moveMarkers () { + + let p = this.pp; + let T = Tools; + + this.invert ? '#fff' : '#000'; + let a = this.hsl[0] * T.TwoPI; + let third = (2/3) * T.PI; + let r = this.tr; + let h = this.hsl[0]; + let s = this.hsl[1]; + let l = this.hsl[2]; + + let angle = ( a - T.pi90 ) * T.todeg; + + h = - a + T.pi90; + + let hx = Math.cos(h) * r; + let hy = -Math.sin(h) * r; + let sx = Math.cos(h - third) * r; + let sy = -Math.sin(h - third) * r; + let vx = Math.cos(h + third) * r; + let vy = -Math.sin(h + third) * r; + let mx = (sx + vx) / 2, my = (sy + vy) / 2; + a = (1 - 2 * Math.abs(l - .5)) * s; + let x = sx + (vx - sx) * l + (hx - mx) * a; + let y = sy + (vy - sy) * l + (hy - my) * a; + + p.set( x, y ).addScalar(128); + + //let ff = (1-l)*255; + // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); + + this.setSvg( this.c[3], 'transform', 'rotate('+angle+' )', 2 ); + + this.setSvg( this.c[3], 'cx', p.x, 3 ); + this.setSvg( this.c[3], 'cy', p.y, 3 ); + + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3 ); + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3 ); + this.setSvg( this.c[3], 'fill',this.bcolor, 3 ); + + } + + rSize () { + + //Proto.prototype.rSize.call( this ); + super.rSize(); + + let s = this.s; + + s[2].width = this.sb + 'px'; + s[2].left = this.sa + 'px'; + + //console.log(this.sb) + + this.cw = this.sb > 256 ? 256 : this.sb; + + + + this.rSizeColor( this.cw ); + + this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + //s[3].left = this.decal.x + 'px'; + + } + + rSizeColor ( w ) { + + + if( w === this.wfixe ) return; + + + + this.wfixe = w; + + + + let s = this.s; + + //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; + this.mid = Math.floor( this.wfixe * 0.5 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 '+ this.wfixe + ' '+ this.wfixe ); + s[3].width = this.wfixe + 'px'; + s[3].height = this.wfixe + 'px'; + //s[3].left = this.decal.x + 'px'; + s[3].top = this.decal.y + 'px'; + + this.ratio = 256 / this.wfixe; + this.square = 1 / (60*(this.wfixe/256)); + this.setHeight(); + + } + + + } + + class Fps extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.round = Math.round; + + //this.autoHeight = true; + + this.baseH = this.h; + this.hplus = o.hplus || 50; + + this.res = o.res || 40; + this.l = 1; + + this.precision = o.precision || 0; + + + this.custom = o.custom || false; + this.names = o.names || ['FPS', 'MS']; + let cc = o.cc || ['220,220,220', '255,255,0']; + + // this.divid = [ 100, 100, 100 ]; + // this.multy = [ 30, 30, 30 ]; + + this.adding = o.adding || false; + + this.range = o.range || [ 165, 100, 100 ]; + + this.alpha = o.alpha || 0.25; + + this.values = []; + this.points = []; + this.textDisplay = []; + + if(!this.custom){ + + this.now = Roots.getTime(); + this.startTime = 0;//this.now() + this.prevTime = 0;//this.startTime; + this.frames = 0; + + this.ms = 0; + this.fps = 0; + this.mem = 0; + this.mm = 0; + + this.isMem = ( self.performance && self.performance.memory ) ? true : false; + + // this.divid = [ 100, 200, 1 ]; + // this.multy = [ 30, 30, 30 ]; + + if( this.isMem ){ + + this.names.push('MEM'); + cc.push('0,255,255'); + + } + + this.txt = o.name || 'Fps'; + + } + + + let fltop = Math.floor(this.h*0.5)-3; + const ccc = this.colors; + + this.c[1].textContent = this.txt; + //this.c[1].innerHTML = ' ' + this.txt + this.c[0].style.cursor = 'pointer'; + this.c[0].style.pointerEvents = 'auto'; + + let panelCss = 'display:none; left:10px; top:'+ this.h + 'px; height:'+(this.hplus - 8)+'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid '+ ccc.border +';'; + + if( this.radius !== 0 ) panelCss += 'border-radius:' + this.radius+'px;'; + + this.c[2] = this.dom( 'path', this.css.basic + panelCss , {} ); + + this.c[2].setAttribute('viewBox', '0 0 '+this.res+' 50' ); + this.c[2].setAttribute('height', '100%' ); + this.c[2].setAttribute('width', '100%' ); + this.c[2].setAttribute('preserveAspectRatio', 'none' ); + + + //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + + // arrow + this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:ccc.text, stroke:'none'}); + //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); + + // result test + this.c[4] = this.dom( 'div', this.css.txt + 'position:absolute; left:10px; top:'+(this.h+2) +'px; display:none; width:100%; text-align:center;' ); + + // bottom line + if( o.bottomLine ) this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); + + this.isShow = false; + + + + let s = this.s; + + //s[1].marginLeft = '10px'; + s[1].lineHeight = this.h-4; + s[1].color = ccc.text; + //s[1].paddingLeft = '18px'; + //s[1].fontWeight = 'bold'; + + if( this.radius !== 0 ) s[0].borderRadius = this.radius+'px'; + if( this.colors.gborder!=='none') s[0].border = '1px solid ' + ccc.gborder; + + + + + let j = 0; + + for( j=0; j " + this.names[j] +" "); + + } + + j = this.names.length; + while(j--){ + this.dom( 'path', null, { fill:'rgba('+cc[j]+','+this.alpha+')', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + } + + + this.init(); + + //if( this.isShow ) this.show(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + if( this.isShow ) this.close(); + else this.open(); + + } + + // ---------------------- + + /*mode: function ( mode ) { + + let s = this.s; + + switch(mode){ + case 0: // base + s[1].color = this.colors.text; + //s[1].background = 'none'; + break; + case 1: // over + s[1].color = '#FFF'; + //s[1].background = UIL.SELECT; + break; + case 2: // edit / down + s[1].color = this.colors.text; + //s[1].background = UIL.SELECTDOWN; + break; + + } + },*/ + + tick ( v ) { + + this.values = v; + if( !this.isShow ) return; + this.drawGraph(); + this.upText(); + + } + + makePath ( point ) { + + let p = ''; + p += 'M ' + (-1) + ' ' + 50; + for ( let i = 0; i < this.res + 1; i ++ ) { p += ' L ' + i + ' ' + point[i]; } + p += ' L ' + (this.res + 1) + ' ' + 50; + return p; + + } + + upText ( val ) { + + let v = val || this.values, t = ''; + for( let j=0, lng =this.names.length; j'; + this.c[4].innerHTML = t; + + } + + drawGraph () { + + let svg = this.c[2]; + let i = this.names.length, v, old = 0, n = 0; + + while( i-- ){ + if( this.adding ) v = (this.values[n]+old) * this.range[n]; + else v = (this.values[n] * this.range[n]); + this.points[n].shift(); + this.points[n].push( 50 - v ); + this.setSvg( svg, 'd', this.makePath( this.points[n] ), i+1 ); + old += this.values[n]; + n++; + + } + + } + + open () { + + super.open(); + + this.h = this.hplus + this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g2 ); + + if( this.group !== null ){ this.group.calc( this.hplus );} + else if( this.isUI ) this.main.calc( this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'block'; + this.s[4].display = 'block'; + this.isShow = true; + + if( !this.custom ) Roots.addListen( this ); + + } + + close () { + + super.close(); + + this.h = this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g1 ); + + if( this.group !== null ){ this.group.calc( -this.hplus );} + else if( this.isUI ) this.main.calc( -this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'none'; + this.s[4].display = 'none'; + this.isShow = false; + + if( !this.custom ) Roots.removeListen( this ); + + this.c[4].innerHTML = ''; + + } + + + ///// AUTO FPS ////// + + begin () { + + this.startTime = this.now(); + + } + + end () { + + let time = this.now(); + this.ms = time - this.startTime; + + this.frames ++; + + if ( time > this.prevTime + 1000 ) { + + this.fps = this.round( ( this.frames * 1000 ) / ( time - this.prevTime ) ); + + this.prevTime = time; + this.frames = 0; + + if ( this.isMem ) { + + let heapSize = performance.memory.usedJSHeapSize; + let heapSizeLimit = performance.memory.jsHeapSizeLimit; + + this.mem = this.round( heapSize * 0.000000954 ); + this.mm = heapSize / heapSizeLimit; + + } + + } + + this.values = [ this.fps, this.ms , this.mm ]; + + this.drawGraph(); + this.upText( [ this.fps, this.ms, this.mem ] ); + + return time; + + } + + listening () { + + if( !this.custom ) this.startTime = this.end(); + + } + + rSize () { + + let s = this.s; + let w = this.w; + + s[3].left = ( this.sa + this.sb - 6 ) + 'px'; + + s[0].width = w + 'px'; + s[1].width = w + 'px'; + s[2].left = 10 + 'px'; + s[2].width = (w-20) + 'px'; + s[4].width = (w-20) + 'px'; + + } + + } + + class Graph extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value !== undefined ? o.value : [0,0,0]; + this.lng = this.value.length; + + this.precision = o.precision !== undefined ? o.precision : 2; + this.multiplicator = o.multiplicator || 1; + this.neg = o.neg || false; + + this.line = o.line !== undefined ? o.line : true; + + //if(this.neg)this.multiplicator*=2; + + this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; + this.isNumber = false; + + this.isDown = false; + + this.h = o.h || 128 + 10; + this.rh = this.h - 10; + this.top = 0; + + this.c[0].style.width = this.w +'px'; + + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = this.w +'px'; + + if(!this.autoWidth){ + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + } + + + //this.c[1].style.background = '#ff0000'; + //this.c[1].style.textAlign = 'center'; + this.top = 10; + this.h += 10; + + } + + this.gh = this.rh - 28; + this.gw = this.w - 28; + + //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); + + //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' + this.c[2] = this.dom( 'div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:'+(this.h-20)+'px; left:14px; width:'+this.gw+'px; color:'+ this.colors.text ); + + //this.c[2].textContent = this.value; + this.c[2].innerHTML = this.valueToHtml(); + + let svg = this.dom( 'svg', this.css.basic , { viewBox:'0 0 '+this.w+' '+this.rh, width:this.w, height:this.rh, preserveAspectRatio:'none' } ); + this.setCss( svg, { width:this.w, height:this.rh, left:0, top:this.top }); + + this.dom( 'path', '', { d:'', stroke:this.colors.text, 'stroke-width':2, fill:'none', 'stroke-linecap':'butt' }, svg ); + this.dom( 'rect', '', { x:10, y:10, width:this.gw+8, height:this.gh+8, stroke:'rgba(0,0,0,0.3)', 'stroke-width':1 , fill:'none'}, svg ); + + this.iw = ((this.gw-(4*(this.lng-1)))/this.lng); + let t = []; + this.cMode = []; + + this.v = []; + + for( let i = 0; i < this.lng; i++ ){ + + t[i] = [ 14 + (i*this.iw) + (i*4), this.iw ]; + t[i][2] = t[i][0] + t[i][1]; + this.cMode[i] = 0; + + if( this.neg ) this.v[i] = ((1+(this.value[i] / this.multiplicator))*0.5); + else this.v[i] = this.value[i] / this.multiplicator; + + this.dom( 'rect', '', { x:t[i][0], y:14, width:t[i][1], height:1, fill:this.colors.text, 'fill-opacity':0.3 }, svg ); + + } + + this.tmp = t; + this.c[3] = svg; + + //console.log(this.w) + + this.init(); + + if( this.c[1] !== undefined ){ + this.c[1].style.top = 0 +'px'; + this.c[1].style.height = 20 +'px'; + this.s[1].lineHeight = (20-5)+'px'; + } + + this.update( false ); + + } + + setValue ( value ) { + + this.value = value; + this.lng = this.value.length; + for (var i = 0; i < this.lng; i++) { + if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5; + else this.v[i] = value[i] / this.multiplicator; + } + this.update(); + + } + + valueToHtml() { + + let i = this.lng, n=0, r = ''; + let w = 100 / this.lng; + let style = 'width:'+ w +'%;';//' text-align:center;' + while(i--){ + if(n===this.lng-1) r += '
    ' + this.value[n] + '
    '; + else r += '' + this.value[n] + ''; + n++; + } + return r + } + + updateSVG () { + + if( this.line ) this.setSvg( this.c[3], 'd', this.makePath(), 0 ); + + for(let i = 0; ithis.top && l.yt[i][0] && l.x this.distance ) { + let angle = Math.atan2(this.tmp.x, this.tmp.y); + this.tmp.x = Math.sin( angle ) * this.distance; + this.tmp.y = Math.cos( angle ) * this.distance; + } + + this.pos.copy( this.tmp ).divideScalar( this.distance ).negate(); + + this.update(); + + } + + setValue ( v ) { + + if(v===undefined) v=[0,0]; + + this.pos.set( v[0] || 0, v[1] || 0 ); + this.updateSVG(); + + } + + update ( up ) { + + if( up === undefined ) up = true; + + if( this.interval !== null ){ + + if( !this.isDown ){ + + this.pos.lerp( null, 0.3 ); + + this.pos.x = Math.abs( this.pos.x ) < 0.01 ? 0 : this.pos.x; + this.pos.y = Math.abs( this.pos.y ) < 0.01 ? 0 : this.pos.y; + + if( this.isUI && this.main.isCanvas ) this.main.draw(); + + } + + } + + this.updateSVG(); + + if( up ) this.send(); + + + if( this.pos.isZero() ) this.stopInterval(); + + } + + updateSVG () { + + //let x = this.radius - ( -this.pos.x * this.distance ); + //let y = this.radius - ( -this.pos.y * this.distance ); + + let x = (this.diam*0.5) - ( -this.pos.x * this.distance ); + let y = (this.diam*0.5) - ( -this.pos.y * this.distance ); + + if(this.model === 0){ + + let sx = x + ((this.pos.x)*5) + 5; + let sy = y + ((this.pos.y)*5) + 10; + + this.setSvg( this.c[3], 'cx', sx*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', sy*this.ratio, 3 ); + } else { + this.setSvg( this.c[3], 'cx', x*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 3 ); + } + + + + this.setSvg( this.c[3], 'cx', x*this.ratio, 4 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 4 ); + + this.value[0] = ( this.pos.x * this.multiplicator ).toFixed( this.precision ) * 1; + this.value[1] = ( this.pos.y * this.multiplicator ).toFixed( this.precision ) * 1; + + if(this.haveText) this.c[2].textContent = this.value; + + } + + clear () { + + this.stopInterval(); + super.clear(); + + } + + } + + class Knob extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.autoWidth = false; + + this.setTypeNumber( o ); + + this.minw = this.w; + this.diam = o.diam || this.w; + + this.mPI = Math.PI * 0.8; + this.toDeg = 180 / Math.PI; + this.cirRange = this.mPI * 2; + + this.offset = new V2(); + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w +'px'; + this.c[0].style.display = 'block'; + + if(this.c[1] !== undefined) { + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + this.percent = 0; + + this.cmode = 0; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); + + this.c[3] = this.getKnob(); + this.setSvg( this.c[3], 'fill', cc.button, 0 ); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + this.setSvg( this.c[3], 'stroke', cc.text, 3 ); + this.setSvg( this.c[3], 'd', this.makeGrad(), 3 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam ); + this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); + + if ( this.model > 0 ) { + + Tools.dom( 'path', '', { d: '', stroke:cc.text, 'stroke-width': 2, fill: 'none', 'stroke-linecap': 'round' }, this.c[3] ); //4 + + if ( this.model == 2) { + + Tools.addSVGGlowEffect(); + this.setSvg( this.c[3], 'style', 'filter: url("#UILGlow");', 4 ); + + } + + } + + this.r = 0; + + this.init(); + + this.update(); + + } + + mode ( mode ) { + + let cc = this.colors; + + if( this.cmode === mode ) return false; + + switch( mode ) { + case 0: // base + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.button, 0); + //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + break; + case 1: // down + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'fill', cc.select, 0); + //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); + this.setSvg( this.c[3], 'stroke', cc.textOver, 1 ); + break; + } + + this.cmode = mode; + return true; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'knob'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0) + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1) + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let off = this.offset; + + //off.x = this.radius - ( e.clientX - this.zone.x ); + //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = - Math.atan2( off.x, off.y ); + + if( this.oldr !== null ) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; + + this.r = this.r > this.mPI ? this.mPI : this.r; + this.r = this.r < -this.mPI ? -this.mPI : this.r; + + let steps = 1 / this.cirRange; + let value = (this.r + this.mPI) * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = Math.floor( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'knob' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + makeGrad () { + + let d = '', step, range, a, x, y, x2, y2, r = 64; + let startangle = Math.PI + this.mPI; + let endangle = Math.PI - this.mPI; + //let step = this.step>5 ? this.step : 1; + + if(this.step>5){ + range = this.range / this.step; + step = ( startangle - endangle ) / range; + } else { + step = (( startangle - endangle ) / r)*2; + range = r*0.5; + } + + for ( let i = 0; i <= range; ++i ) { + + a = startangle - ( step * i ); + x = r + Math.sin( a ) * ( r - 20 ); + y = r + Math.cos( a ) * ( r - 20 ); + x2 = r + Math.sin( a ) * ( r - 24 ); + y2 = r + Math.cos( a ) * ( r - 24 ); + d += 'M' + x + ' ' + y + ' L' + x2 + ' '+y2 + ' '; + + } + + return d; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = (this.value - this.min) / this.range; + + let sa = Math.PI + this.mPI; + let ea = ( ( this.percent * this.cirRange ) - ( this.mPI ) ); + + let sin = Math.sin( ea ); + let cos = Math.cos( ea ); + + let x1 = ( 25 * sin ) + 64; + let y1 = -( 25 * cos ) + 64; + let x2 = ( 20 * sin ) + 64; + let y2 = -( 20 * cos ) + 64; + + this.setSvg( this.c[3], 'd', 'M ' + x1 +' ' + y1 + ' L ' + x2 +' ' + y2, 1 ); + + if ( this.model > 0 ) { + + let x1 = 36 * Math.sin( sa ) + 64; + let y1 = 36 * Math.cos( sa ) + 64; + let x2 = 36 * sin + 64; + let y2 = -36 * cos + 64; + let big = ea <= Math.PI - this.mPI ? 0 : 1; + this.setSvg( this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4 ); + + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( this.colors.text, -0.75) ), Tools.unpack( this.colors.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 4 ); + + } + + if( up ) this.send(); + + } + + } + + class List extends Proto { + + constructor( o = {} ) { + + super( o ); + + // TODO not work + this.hideCurrent = false; + + // images + this.path = o.path || ''; + this.format = o.format || ''; + + + this.isWithImage = this.path !== '' ? true:false; + this.preLoadComplete = false; + + this.tmpImage = {}; + this.tmpUrl = []; + + this.m = o.m !== undefined ? o.m : 5; + + + let align = o.align || 'left'; + + // scroll size + let ss = o.scrollSize || 10; + this.ss = ss+1; + + this.sMode = 0; + this.tMode = 0; + + this.listOnly = o.listOnly || false; + this.staticTop = o.staticTop || false; + + this.isSelectable = this.listOnly; + if( o.select !== undefined ) o.selectable = o.select; + if( o.selectable !== undefined ) this.isSelectable = o.selectable; + + if( this.txt === '' ) this.p = 0; + + + let fltop = Math.floor(this.h*0.5)-3; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.basic + 'top:0; display:none; border-radius:'+this.radius+'px;' ); + this.c[3] = this.dom( 'div', this.css.item + 'padding:0px '+this.m+'px; margin-bottom:0px; position:absolute; justify-content:'+align+'; text-align:'+align+'; line-height:'+(this.h-4)+'px; top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:1px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); + + this.scrollerBack = this.dom( 'div', this.css.basic + 'right:0px; width:'+ss+'px; background:'+cc.back+'; display:none;'); + this.scroller = this.dom( 'div', this.css.basic + 'right:'+((ss-(ss*0.25))*0.5)+'px; width:'+(ss*0.25)+'px; background:'+cc.text+'; display:none; '); + + this.c[3].style.color = cc.text; + + + this.list = []; + this.refObject = null; + + if( o.list ){ + if( o.list instanceof Array ){ + this.list = o.list; + } else if( o.list instanceof Object ){ + this.refObject = o.list; + for( let g in this.refObject ) this.list.push( g ); + } + } + + this.items = []; + + this.prevName = ''; + + + this.tmpId = 0; + + this.baseH = this.h; + + this.itemHeight = o.itemHeight || this.h;//(this.h-3); + + // force full list + this.full = o.full || false; + + this.py = 0; + this.ww = this.sb; + this.scroll = false; + this.isDown = false; + + this.current = null; + + // list up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + if( this.up ){ + + this.c[2].style.top = 'auto'; + this.c[3].style.top = 'auto'; + this.c[4].style.top = 'auto'; + + this.c[2].style.bottom = this.h-2 + 'px'; + this.c[3].style.bottom = '1px'; + this.c[4].style.bottom = fltop + 'px'; + + } else { + this.c[2].style.top = this.baseH + 'px'; + } + + this.listIn = this.dom( 'div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); + this.listIn.name = 'list'; + + this.topList = 0; + + this.c[2].appendChild( this.listIn ); + this.c[2].appendChild( this.scrollerBack ); + this.c[2].appendChild( this.scroller ); + + if( o.value !== undefined ){ + if(!isNaN(o.value)) this.value = this.list[ o.value ]; + else this.value = o.value; + }else { + this.value = this.list[0]; + } + + this.isOpenOnStart = o.open || false; + + if( this.listOnly ){ + this.baseH = 5; + this.c[3].style.display = 'none'; + this.c[4].style.display = 'none'; + this.c[2].style.top = this.baseH+'px'; + this.isOpenOnStart = true; + } + + + this.miniCanvas = o.miniCanvas || false; + this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; + this.imageSize = o.imageSize || [20,20]; + + // dragout function + this.drag = o.drag || false; + this.dragout = o.dragout || false; + this.dragstart = o.dragstart || null; + this.dragend = o.dragend || null; + + + + //this.c[0].style.background = '#FF0000' + ///if( this.isWithImage ) this.preloadImage(); + + this.setList( this.list ); + this.init(); + if( this.isWithImage ) this.preloadImage(); + if( this.isOpenOnStart ) this.open( true ); + + this.baseH += this.mtop; + + } + + // image list + + preloadImage () { + + + + this.preLoadComplete = false; + + this.tmpImage = {}; + for( let i=0; i this.h - this.baseH ) return 'title'; + else { + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + + } else { + if( l.y < this.baseH+2 ) return 'title'; + else { + if( this.isOpen ){ + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + } + + } + + return ''; + + } + + testItems ( y ) { + + let name = ''; + + let items = this.items; + + /*if(this.hideCurrent){ + //items = [...this.items] + items = this.items.slice(this.tmpId) + + }*/ + + let i = items.length, item, a, b; + while(i--){ + item = items[i]; + a = item.posy + this.topList; + b = item.posy + this.itemHeight + 1 + this.topList; + if( y >= a && y <= b ){ + name = 'item' + i; + this.modeItem(0); + this.current = item; + this.modeItem(1); + return name; + } + + } + + return name; + + } + + modeItem ( mode ) { + + if( !this.current ) return + + if( this.current.select && mode===0) mode = 2; + let cc = this.colors; + + switch( mode ){ + + case 0: // base + this.current.style.background = cc.back; + this.current.style.color = cc.text; + break; + case 1: // over + this.current.style.background = cc.over; + this.current.style.color = cc.textOver; + break; + case 2: // edit / down + this.current.style.background = cc.select; + this.current.style.color = cc.textSelect; + break; + + } + } + + unSelected() { + + if( !this.current ) return + this.modeItem(0); + this.current = null; + + } + + selected() { + + if( !this.current ) return + this.resetItems(); + this.modeItem(2); + this.current.select = true; + + + + } + + resetItems() { + + let i = this.items.length; + while(i--){ + this.items[i].select = false; + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text; + } + + } + + hideActive() { + + if( !this.hideCurrent ) return + //if( !this.current ) return + if( this.current )this.tmpId = this.current.id; + this.resetHide(); + //this.items[this.tmpId].style.height = 0+'px' + + } + + resetHide() { + + console.log(this.tmpId); + + let i = this.items.length; + while(i--){ + if(i===this.tmpId){ + this.items[i].style.height = 0+'px'; + this.items[i].posy = -1; + } else { + this.items[i].style.height = this.itemHeight+'px'; + this.items[i].posy = (this.itemHeight+1)*(i-1); + } + //this.items[i].style.display = 'flex' + + /*this.items[i].select = false + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text;*/ + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + + mouseup ( e ) { + + this.isDown = false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'scroll' ){ + + this.isDown = true; + this.mousemove( e ); + + } else if( name === 'title' ){ + + this.modeTitle(2); + if( !this.listOnly ){ + this.hideActive(); + if( !this.isOpen ) this.open(); + else this.close(); + } + } else { + // is item + if( this.current ){ + + this.value = this.list[ this.current.id ]; + //this.tmpId = this.current.id + + if( this.isSelectable ) this.selected(); + + //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); + this.send( this.value ); + + if( !this.listOnly ) { + this.close(); + this.setTopItem(); + //this.hideActive() + } + } + + } + + return true; + + } + + mousemove ( e ) { + + let nup = false; + let name = this.testZone( e ); + + if( !name ) return nup; + + if( name === 'title' ){ + this.unSelected(); + this.modeTitle(1); + this.cursor('pointer'); + + } else if( name === 'scroll' ){ + + this.cursor('s-resize'); + this.modeScroll(1); + if( this.isDown ){ + this.modeScroll(2); + //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + let top = this.zone.y+this.baseH-2; + this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + } + //if(this.isDown) this.listmove(e); + } else { + + // is item + this.modeTitle(0); + this.modeScroll(0); + this.cursor('pointer'); + + } + + if( name !== this.prevName ) nup = true; + this.prevName = name; + + return nup; + + } + + wheel ( e ) { + + let name = this.testZone( e ); + if( name === 'title' ) return false; + this.py += e.delta*10; + this.update(this.py); + return true; + + } + + + + // ---------------------- + + reset () { + + this.prevName = ''; + this.unSelected(); + this.modeTitle(0); + this.modeScroll(0); + + //console.log('this is reset') + + } + + modeScroll ( mode ) { + + if( mode === this.sMode ) return; + + let s = this.scroller.style; + let cc = this.colors; + + switch(mode){ + case 0: // base + s.background = cc.text; + break; + case 1: // over + s.background = cc.select; + break; + case 2: // edit / down + s.background = cc.select; + break; + + } + + this.sMode = mode; + } + + modeTitle ( mode ) { + + if( mode === this.tMode ) return; + + let s = this.s; + let cc = this.colors; + + switch(mode){ + case 0: // base + s[3].color = cc.text; + s[3].background = cc.button; + break; + case 1: // over + s[3].color = cc.textOver; + s[3].background = cc.overoff; + break; + case 2: // edit / down + s[3].color = cc.textSelect; + s[3].background = cc.overoff; + break; + + } + + this.tMode = mode; + + } + + clearList () { + + while ( this.listIn.children.length ) this.listIn.removeChild( this.listIn.lastChild ); + this.items = []; + + } + + setList ( list ) { + + this.clearList(); + + this.list = list; + this.length = this.list.length; + + let lng = this.hideCurrent? this.length-1 : this.length; + + this.maxItem = this.full ? lng : 5; + this.maxItem = lng < this.maxItem ? lng : this.maxItem; + + this.maxHeight = this.maxItem * (this.itemHeight+1) + 2; + + + + this.max = lng * (this.itemHeight+1) + 2; + this.ratio = this.maxHeight / this.max; + this.sh = this.maxHeight * this.ratio; + this.range = this.maxHeight - this.sh; + + this.c[2].style.height = this.maxHeight + 'px'; + this.scrollerBack.style.height = this.maxHeight + 'px'; + this.scroller.style.height = this.sh + 'px'; + + if( this.max > this.maxHeight ){ + this.ww = this.sb - this.ss; + this.scroll = true; + } + + if( this.miniCanvas ) { + + this.tmpCanvas = document.createElement('canvas'); + this.tmpCanvas.width = this.imageSize[0]; + this.tmpCanvas.height = this.imageSize[1]; + this.tmpCtx = this.tmpCanvas.getContext("2d"); + this.tmpCtx.fillStyle = this.canvasBg; + this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); + + } + + let item, n;//, l = this.sb; + for( let i=0; i this.range ? this.range : y; + + this.topList = -Math.floor( y / this.ratio ); + + this.listIn.style.top = this.topList+'px'; + this.scroller.style.top = Math.floor( y ) + 'px'; + + this.py = y; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open ( first ) { + + super.open(); + + this.update( 0 ); + + this.h = this.maxHeight + this.baseH + 5; + if( !this.scroll ){ + this.topList = 0; + this.h = this.baseH + 5 + this.max; + this.scroller.style.display = 'none'; + this.scrollerBack.style.display = 'none'; + } else { + this.scroller.style.display = 'block'; + this.scrollerBack.style.display = 'block'; + } + this.s[0].height = this.h + 'px'; + this.s[2].display = 'block'; + + if( this.up ){ + this.zone.y -= this.h - (this.baseH-10); + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + } else { + this.setSvg( this.c[4], 'd', this.svgs.g2 ); + } + + this.rSizeContent(); + + let t = this.h - this.baseH; + + this.zone.h = this.h; + + if(!first) this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.h - (this.baseH-10); + + let t = this.h - this.baseH; + + this.h = this.baseH; + this.s[0].height = this.h + 'px'; + this.s[2].display = 'none'; + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + + this.zone.h = this.h; + + this.parentHeight( -t ); + + } + + // ----- + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSizeContent () { + + let i = this.length; + while(i--) this.listIn.children[i].style.width = this.ww + 'px'; + + } + + rSize () { + + super.rSize(); + + //Proto.prototype.rSize.call( this ); + + let s = this.s; + let w = this.sb; + let d = this.sa; + + if(s[2]=== undefined) return; + + s[2].width = w + 'px'; + s[2].left = d +'px'; + + s[3].width = w + 'px'; + s[3].left = d + 'px'; + + s[4].left = d + w - 15 + 'px'; + + this.ww = w; + if( this.max > this.maxHeight ) this.ww = w-this.ss; + if(this.isOpen) this.rSizeContent(); + + } + + } + + class Numeric extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.setTypeNumber( o ); + + this.allway = o.allway || false; + + this.isDown = false; + this.value = [0]; + this.multy = 1; + this.invmulty = 1; + this.isSingle = true; + this.isAngle = false; + this.isVector = false; + + if( o.isAngle ){ + this.isAngle = true; + this.multy = Tools.torad; + this.invmulty = Tools.todeg; + } + + this.isDrag = o.drag || false; + + if( o.value !== undefined ){ + if( !isNaN(o.value) ){ + this.value = [o.value]; + } else if( o.value instanceof Array ){ + this.value = o.value; + this.isSingle = false; + } else if( o.value instanceof Object ){ + this.value = []; + if( o.value.x !== undefined ) this.value[0] = o.value.x; + if( o.value.y !== undefined ) this.value[1] = o.value.y; + if( o.value.z !== undefined ) this.value[2] = o.value.z; + if( o.value.w !== undefined ) this.value[3] = o.value.w; + this.isSingle = false; + this.isVector = true; + } + } + + this.lng = this.value.length; + this.tmp = []; + + this.current = -1; + this.prev = { x:0, y:0, d:0, v:0 }; + + let cc = this.colors; + + // bg + this.c[2] = this.dom( 'div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h-8) + 'px;' ); + + this.cMode = []; + + let i = this.lng; + while(i--){ + + if( this.isAngle ) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed( this.precision ); + this.c[3+i] = this.dom( 'div', this.css.txtselect + 'top:1px; height:'+(this.h-2)+'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;'); + if(o.center) this.c[2+i].style.textAlign = 'center'; + this.c[3+i].textContent = this.value[i]; + this.c[3+i].style.color = this.colors.text; + this.c[3+i].isNum = true; + this.cMode[i] = 0; + + } + + // selection + this.selectId = 3 + this.lng; + this.c[this.selectId] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.cursorId = 4 + this.lng; + this.c[ this.cursorId ] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + this.init(); + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0"; + this.easing = o.easing || 1; + + this.setTypeNumber(o); + + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + + //this.defaultBorderColor = this.colors.hide; + + this.isDown = false; + this.isOver = false; + this.allway = o.allway || false; + + this.isDeg = o.isDeg || false; + this.isCyclic = o.cyclic || false; + + this.firstImput = false; + + let cc = this.colors; + + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + this.c[2] = this.dom( + "div", + this.css.txtselect + + "border:none; background:none; width:47px; color:" + + cc.text + + ";" + ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); + this.c[3] = this.dom( + "div", + this.css.basic + " top:0; height:" + this.h + "px;" + ); + + this.c[4] = this.dom( + "div", + this.css.basic + + "background:" + + cc.back + + "; top:2px; height:" + + (this.h - 4) + + "px;" + ); + this.c[5] = this.dom( + "div", + this.css.basic + + "left:4px; top:5px; height:" + + (this.h - 10) + + "px; background:" + + cc.text + + ";" + ); + + this.c[2].isNum = true; + //this.c[2].style.height = (this.h-4) + 'px'; + //this.c[2].style.lineHeight = (this.h-8) + 'px'; + this.c[2].style.height = this.h - 2 + "px"; + this.c[2].style.lineHeight = this.h - 10 + "px"; + + if (this.model !== 0) { + let r1 = 4, + h1 = 4, + h2 = 8, + ww = this.h - 6, + ra = 16; + + if (this.model === 2) { + r1 = 0; + h1 = 2; + h2 = 4; + ra = 2; + ww = (this.h - 6) * 0.5; + } + + if (this.model === 3) this.c[5].style.visible = "none"; + + this.c[4].style.borderRadius = r1 + "px"; + this.c[4].style.height = h2 + "px"; + this.c[4].style.top = this.h * 0.5 - h1 + "px"; + this.c[5].style.borderRadius = r1 * 0.5 + "px"; + this.c[5].style.height = h1 + "px"; + this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; + + //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); + this.c[6] = this.dom( + "div", + this.css.basic + + "border-radius:" + + ra + + "px; margin-left:" + + -ww * 0.5 + + "px; background:" + + cc.text + + "; left:4px; top:3px; height:" + + (this.h - 6) + + "px; width:" + + ww + + "px;" + ); + } + + this.init(); + } + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + if (l.x >= this.txl) return "text"; + else if (l.x >= this.sa) return "scroll"; + else return ""; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (this.isDown) this.isDown = false; + } + + mousedown(e) { + let name = this.testZone(e); + + if (!name) return false; + + if (name === "scroll") { + this.isDown = true; + this.old = this.value; + this.mousemove(e); + } + + /*if( name === 'text' ){ + this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); + }*/ + + return true; + } + + mousemove(e) { + let nup = false; + + let name = this.testZone(e); + + if (name === "scroll") { + this.mode(1); + this.cursor("w-resize"); + //} else if(name === 'text'){ + //this.cursor('pointer'); + } else { + this.cursor(); + } + + if (this.isDown) { + let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; + + // lo mapeo al rango 0 ... 1 + nNormalized = Math.min(1, Math.max(0, nNormalized)); + + // aplico easing + let nEased = Math.pow(nNormalized, this.easing); // easing + + let nNew = nEased * this.range + this.min; + let nNewSlider = nNormalized * this.range + this.min; + + this.sliderValue = this.numValue(nNewSlider); + + let delta = nNew - this.old; + + let steps; + if (delta >= this.step || delta <= this.step) { + steps = Math.floor(delta / this.step); + this.value = this.numValue(this.old + steps * this.step); + // value without easing applied + + this.update(true); + this.old = this.value; + } + //console.log("n, normalized, value", nNew, nNormalized, this.value); + nup = true; + } + + return nup; + } + + wheel(e) { + let name = this.testZone(e); + + if (name === "scroll") { + let v = this.value - this.step * e.delta; + + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue(v); + this.old = v; + this.update(true); + + return true; + } + + return false; + } + + //keydown: function ( e ) { return true; }, + + // ---------------------- + + validate() { + let n = this.c[2].textContent; + + if (!isNaN(n)) { + this.value = this.numValue(n); + this.update(true); + } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + } + + reset() { + //this.clearInput(); + this.isDown = false; + this.mode(0); + } + + mode(mode) { + let s = this.s; + let cc = this.colors; + + switch (mode) { + case 0: // base + // s[2].border = '1px solid ' + this.colors.hide; + s[2].color = cc.text; + s[4].background = cc.back; + s[5].background = cc.text; + if (this.model !== 0) s[6].background = cc.text; //cc.button; + break; + case 1: // scroll over + //s[2].border = '1px dashed ' + this.colors.hide; + s[2].color = cc.textOver; + s[4].background = cc.back; + s[5].background = cc.textOver; + if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; + break; + } + } + + update(up) { + let normalized = (this.value - this.min) / this.range; + + let uneased = + this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); + + let ww = Math.floor(this.ww * uneased); + //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); + + if (this.model !== 3) this.s[5].width = ww + "px"; + if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; + this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + + if (up) this.send(); + } + + rSize() { + super.rSize(); + + let w = this.sb - this.sc; + this.ww = w - 6; + + let tx = this.sc; + if (this.isUI || !this.simple) tx = this.sc + 10; + this.txl = this.w - tx + 2; + + //let ty = Math.floor(this.h * 0.5) - 8; + + let s = this.s; + + s[2].width = this.sc - 6 + "px"; + s[2].left = this.txl + 4 + "px"; + //s[2].top = ty + 'px'; + s[3].left = this.sa + "px"; + s[3].width = w + "px"; + s[4].left = this.sa + "px"; + s[4].width = w + "px"; + s[5].left = this.sa + 3 + "px"; + + this.update(); + } + } + + class TextInput extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.cmode = 0; + + this.value = o.value !== undefined ? o.value : ''; + this.placeHolder = o.placeHolder || ''; + + this.allway = o.allway || false; + this.editable = o.edit !== undefined ? o.edit : true; + + this.isDown = false; + + let cc = this.colors; + + // text + this.c[2] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[2].textContent = this.value; + + // selection + this.c[3] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.c[4] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + // fake + this.c[5] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; border:none; justify-content: center; font-style: italic; color:'+cc.border+';' ); + if( this.value === '' ) this.c[5].textContent = this.placeHolder; + + + + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x >= this.sa ) return 'text'; + return ''; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if(!this.editable) return; + + if( this.isDown ){ + this.isDown = false; + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + if( !this.isDown ){ + this.isDown = true; + if( name === 'text' ) this.setInput( this.c[2] ); + return this.mousemove( e ); + } + + return false; + + } + + mousemove ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + //let l = this.local; + //if( l.x === -1 && l.y === -1 ){ return;} + + //if( l.x >= this.sa ) this.cursor('text'); + //else this.cursor(); + + let x = 0; + + if( name === 'text' ) this.cursor('text'); + else this.cursor(); + + if( this.isDown ) x = e.clientX - this.zone.x; + + return this.upInput( x - this.sa -3, this.isDown ); + + } + + update ( ) { + + this.c[2].textContent = this.value; + + } + + // ---------------------- + + reset () { + + this.cursor(); + + } + + // ---------------------- + // INPUT + // ---------------------- + + select ( c, e, w, t ) { + + let s = this.s; + let d = this.sa + 5; + s[4].width = '1px'; + s[4].left = ( d + e ) + 'px'; + + s[3].left = ( d + e ) + 'px'; + s[3].width = w + 'px'; + this.c[3].innerHTML = t; + + } + + unselect () { + + let s = this.s; + if(!s) return; + s[3].width = 0 + 'px'; + this.c[3].innerHTML = 't'; + s[4].width = 0 + 'px'; + + } + + validate ( force ) { + + if( this.allway ) force = true; + + this.value = this.c[2].textContent; + + if(this.value !== '') this.c[5].textContent = ''; + else this.c[5].textContent = this.placeHolder; + + if( !force ) return; + + this.send(); + + } + + // ---------------------- + // REZISE + // ---------------------- + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + + s[5].left = this.sa + 'px'; + s[5].width = this.sb + 'px'; + + } + + + } + + class Title extends Proto { + + constructor( o = {} ) { + + super( o ); + + let prefix = o.prefix || ''; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:right; width:60px; line-height:'+ (this.h-8) + 'px; color:' + this.colors.text ); + + if( this.h === 31 ){ + + this.s[0].height = this.h + 'px'; + this.s[1].top = 8 + 'px'; + this.c[2].style.top = 8 + 'px'; + + } + + let s = this.s; + + s[1].justifyContent = o.align || 'left'; + //s[1].textAlign = o.align || 'left'; + s[1].fontWeight = o.fontWeight || 'bold'; + + + this.c[1].textContent = this.txt.substring(0,1).toUpperCase() + this.txt.substring(1).replace("-", " "); + this.c[2].textContent = prefix; + + this.init(); + + } + + text( txt ) { + + this.c[1].textContent = txt; + + } + + text2( txt ) { + + this.c[2].textContent = txt; + + } + + rSize() { + + super.rSize(); + this.s[1].width = this.w + 'px'; //- 50 + 'px'; + this.s[2].left = this.w + 'px';//- ( 50 + 26 ) + 'px'; + + } + + setColor( c ) { + this.s[1].color = c; + this.s[2].color = c; + } + + } + + class Select extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.isDown = false; + this.onActif = o.onActif || function(){}; + + //let prefix = o.prefix || ''; + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+ cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + //this.c[2].style.color = this.fontColor; + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'cursor' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + this.isActif = false; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + if( l.x > this.sa && l.x < this.sa+30 ) return 'over' + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ) + } + + return false + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false + + this.isDown = true; + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + this.send(); + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + if( n===1 ) this.isActif = false; + if( n===3 ){ + if( !this.isActif ){ this.isActif = true; n=4; this.onActif( this ); } + else { this.isActif = false; } + } + + if( n===2 && this.isActif ) n = 4; + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.action; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.action; break; // actif + + } + + change = true; + + } + + return change + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ) + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + + } + + class Bitmap extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.refTexture = o.texture || null; + this.img = null; + + this.isDown = false; + this.neverlock = true; + + + + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'load' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x > this.sa && l.x < this.sa+30 ) return 'over'; + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'over' ){ + this.isDown = true; + Files.load( { callback:this.changeBitmap.bind(this) } ); + + } + + + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ); + + } + + mousemove ( e ) { + + let up = false; + + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + + changeBitmap( img, fname ){ + + if( img ){ + this.img = img; + this.apply( fname ); + } else { + this.img = null; + this.apply( 'null' ); + } + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + + if( this.img !== null ){ + if( this.objectLink !== null ) this.objectLink[ this.val ] = v; + if( this.callback ) this.callback( this.value, this.img, this.name ); + } + + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.over; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.select; break; // actif + + } + + change = true; + + } + + return change; + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ); + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + + } + + //import { Proto } from '../core/Proto.js'; + + class Selector extends Button { + + constructor( o = {} ) { + + if( o.selectable === undefined ) o.selectable = true; + super( o ); + + } + + } + + class Item extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.p = 100; + this.value = this.txt; + this.status = 1; + + this.itype = o.itype || 'none'; + this.val = this.itype; + + this.graph = this.svgs[ this.itype ]; + + let fltop = Math.floor(this.h*0.5)-7; + + this.c[2] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.graph, fill:this.colors.text, stroke:'none'}); + + this.s[1].marginLeft = 20 + 'px'; + + this.init(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousemove ( e ) { + + this.cursor('pointer'); + + //up = this.modes( this.isDown ? 3 : 2, name ); + + } + + mousedown ( e ) { + + if( this.isUI ) this.main.resetItem(); + + this.selected( true ); + + this.send(); + + return true; + + } + + uiout () { + + if( this.isSelect ) this.mode(3); + else this.mode(1); + + } + + uiover () { + + if( this.isSelect ) this.mode(4); + else this.mode(2); + + } + + update () { + + } + + /*rSize () { + + super.rSize(); + + }*/ + + mode ( n ) { + + let change = false; + + if( this.status !== n ){ + + this.status = n; + let s = this.s, cc = this.colors; + + switch( n ){ + + case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; + case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; + case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; + case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; + + } + + change = true; + + } + + return change; + + } + + reset () { + + this.cursor(); + // return this.mode( 1 ); + + } + + selected ( b ){ + + if( this.isSelect ) this.mode(1); + + this.isSelect = b || false; + + if( this.isSelect ) this.mode(3); + + } + + + } + + class Grid extends Proto { + + constructor( o = {} ) { + + super( o ); + + /*this.values = o.values || []; + + if( typeof this.values === 'string' ) this.values = [ this.values ];*/ + + this.values = []; + + if( o.values ){ + if( o.values instanceof Array ){ + this.values = o.values; + } else if( o.values instanceof String ){ + this.values = [ o.values ]; + } else if( o.values instanceof Object ){ + this.refObject = o.values; + for( let g in this.refObject ) this.values.push( g ); + } + } + + this.lng = this.values.length; + + + + this.value = o.value || null; + + + + + let cc = this.colors; + + + this.isSelectable = o.selectable || false; + this.spaces = o.spaces || [ cc.sx, cc.sy ]; + this.bsize = o.bsize || [ 90, this.h ]; + + this.bsizeMax = this.bsize[0]; + + this.tmp = []; + this.stat = []; + this.grid = [ 2, Math.round( this.lng * 0.5 ) ]; + + this.h = ( this.grid[1] * this.bsize[1] ) + ( this.grid[1] * this.spaces[1] ); //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); + + this.c[1].textContent = ''; + //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); + this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1])+'px; border:none;' ); + + let n = 0, b, td, tr, sel; + + this.res = -1; + this.isDown = false; + this.neverlock = true; + + this.buttons = []; + this.stat = []; + this.tmpX = []; + this.tmpY = []; + + for( let i = 0; i < this.grid[1]; i++ ){ + + tr = this.c[2].insertRow(); + tr.style.cssText = 'pointer-events:none;'; + for( let j = 0; j < this.grid[0]; j++ ){ + + td = tr.insertCell(); + td.style.cssText = 'pointer-events:none;'; + + if( this.values[n] ){ + + sel = false; + if( this.values[n] === this.value && this.isSelectable ) sel = true; + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:'+this.bsize[0]+'px; height:'+(this.bsize[1]-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; left:auto; right:auto; border-radius:'+this.radius+'px;'; + b.style.background = sel ? cc.select : cc.button; + b.style.color = sel ? cc.textSelect : cc.text; + b.innerHTML = this.values[n]; + td.appendChild( b ); + + this.buttons.push(b); + this.stat.push(1); + + } else { + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + 'position:static; width:'+this.bsize[0]+'px; height:'+this.bsize[1]+'px; text-align:center; left:auto; right:auto; background:none;'; + td.appendChild( b ); + + } + + if(j===0) b.style.cssText += 'float:right;'; + else b.style.cssText += 'float:left;'; + + n++; + + } + } + + this.s[0].border = 'none'; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1; + + l.y += this.mtop; + + let tx = this.tmpX; + let ty = this.tmpY; + + let id = -1; + let c = -1; + let line = -1; + let i = this.grid[0]; + while( i-- ){ + if( l.x > tx[i][0] && l.x < tx[i][1] ) c = i; + } + + i = this.grid[1]; + while( i-- ){ + if( l.y > ty[i][0] && l.y < ty[i][1] ) line = i; + } + + if(c!==-1 && line!==-1){ + id = c + (line*2); + if(id>this.lng-1) id = -1; + } + + return id; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( !this.isDown ) return false + + this.isDown = false; + if( this.res !== -1 ){ + this.value = this.values[this.res]; + this.send(); + } + + return this.mousemove( e ) + + } + + mousedown ( e ) { + + if( this.isDown ) return false + this.isDown = true; + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + this.res = this.testZone( e ); + + if( this.res !== -1 ){ + this.cursor('pointer'); + up = this.modes( this.isDown ? 3 : 2, this.res ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + // MODE + // ----------------------- + + modes ( N = 1, id = -1 ) { + + let i = this.lng, w, n, r = false; + + while( i-- ){ + + n = N; + w = this.isSelectable ? this.values[ i ] === this.value : false; + + if( i === id ){ + if( w && n === 2 ) n = 3; + } else { + n = 1; + if( w ) n = 4; + } + + if( this.mode( n, i ) ) r = true; + + } + + return r + + } + + mode ( n, id ) { + + let change = false; + let cc = this.colors, s = this.buttons; + let i = id; + + if( this.stat[id] !== n ){ + + this.stat[id] = n; + + switch( n ){ + + case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; + case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; + case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; + case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; + + } + + change = true; + + } + + return change; + + } + + // ---------------------- + + reset () { + + this.res = -1; + this.cursor(); + return this.modes() + + } + + + label ( string, n ) { + + this.buttons[n].textContent = string; + + } + + icon ( string, y, n ) { + + this.buttons[n].style.padding = ( y || 0 ) +'px 0px'; + this.buttons[n].innerHTML = string; + + } + + testW () { + + let vw = this.spaces[0]*3 + this.bsizeMax*2, rz = false; + if( vw > this.w ) { + this.bsize[0] = ( this.w-(this.spaces[0]*3) ) * 0.5; + rz = true; + } else { + if( this.bsize[0] !== this.bsizeMax ) { + this.bsize[0] = this.bsizeMax; + rz = true; + } + } + + if( !rz ) return; + + let i = this.buttons.length; + while(i--) this.buttons[i].style.width = this.bsize[0] + 'px'; + + } + + rSize () { + + super.rSize(); + + this.testW(); + + let mid; + + this.tmpX = []; + this.tmpY = []; + + for( let j = 0; j < this.grid[0]; j++ ){ + + if(j===0){ + mid = ( this.w*0.5 ) - ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid-this.bsize[0], mid ] ); + } else { + mid = ( this.w*0.5 ) + ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid, mid+this.bsize[0] ] ); + } + + } + + mid = this.spaces[1]; + + for( let i = 0; i < this.grid[1]; i++ ){ + + this.tmpY.push( [ mid, mid + this.bsize[1] ] ); + mid += this.bsize[1] + this.spaces[1]; + + } + + } + + } + + class Pad2D extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + + //this.margin = 15; + this.pos = new V2(0,0); + this.maxPos = 90; + + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.min = o.min === undefined ? -1 : o.min; + this.max = o.max === undefined ? 1 : o.max; + + this.range = (this.max - this.min)*0.5; + + this.cmode = 0; + + + //console.log(this.range) + + this.c[0].style.display = 'block'; + + + + + + this.precision = o.precision === undefined ? 2 : o.precision; + + /*this.bounds = {}; + this.bounds.x1 = o.x1 || -1; + this.bounds.x2 = o.x2 || 1; + this.bounds.y1 = o.y1 || -1; + this.bounds.y2 = o.y2 || 1; + + this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); + this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); + + this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); + this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ + + this.value = ( Array.isArray( o.value ) && o.value.length == 2 ) ? o.value : [ 0, 0 ]; + + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w + 'px'; + + // Title + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + //this.top -= this.margin + + let cc = this.colors; + + + // Value + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+ ( this.h - 20 ) + 'px; width:100%; color:' + cc.text ); + this.c[2].textContent = this.value; + + // Pad + + let pad = this.getPad2d(); + + this.setSvg( pad, 'fill', cc.back, 0 ); + this.setSvg( pad, 'fill', cc.button, 1 ); + this.setSvg( pad, 'stroke', cc.back, 2 ); + this.setSvg( pad, 'stroke', cc.back, 3 ); + this.setSvg( pad, 'stroke', cc.text, 4 ); + + this.setSvg( pad, 'viewBox', '0 0 '+this.diam+' '+this.diam ); + this.setCss( pad, { width:this.diam, height:this.diam, left:0, top:this.top }); + + this.c[3] = pad; + + this.init(); + this.setValue(); + + } + + testZone ( e ) { + + let l = this.local; + + if( l.x === -1 && l.y === -1 ) return ''; + + + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'pad'; + + /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { + return 'pad'; + }*/ + + //return ''; + + } + + mouseup ( e ) { + + this.isDown = false; + return this.mode(0); + + } + + mousedown ( e ) { + + if ( this.testZone(e) === 'pad' ) { + + this.isDown = true; + this.mousemove( e ); + return this.mode(1); + } + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let x = (this.w*0.5) - ( e.clientX - this.zone.x ); + let y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + + let r = 256 / this.diam; + + x = -(x*r); + y = -(y*r); + + x = Tools.clamp( x, -this.maxPos, this.maxPos ); + y = Tools.clamp( y, -this.maxPos, this.maxPos ); + + //let x = e.clientX - this.zone.x; + //let y = e.clientY - this.zone.y - this.top; + + /*if( x < this.margin ) x = this.margin; + if( x > this.w - this.margin ) x = this.w - this.margin; + if( y < this.margin ) y = this.margin; + if( y > this.w - this.margin ) y = this.w - this.margin;*/ + + //console.log(x,y) + + this.setPos( [ x , y ] ); + + this.update( true ); + + } + + mode ( mode ) { + + if( this.cmode === mode ) return false; + + let cc = this.colors; + + switch( mode ){ + case 0: // base + + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.back, 0); + this.setSvg( this.c[3], 'fill', cc.button, 1); + this.setSvg( this.c[3], 'stroke', cc.back, 2); + this.setSvg( this.c[3], 'stroke', cc.back, 3); + this.setSvg( this.c[3], 'stroke', cc.text, 4 ); + + break; + case 1: // down + + this.s[2].color = cc.textSelect; + this.setSvg( this.c[3], 'fill', cc.backoff, 0); + this.setSvg( this.c[3], 'fill', cc.overoff, 1); + this.setSvg( this.c[3], 'stroke', cc.backoff, 2); + this.setSvg( this.c[3], 'stroke', cc.backoff, 3); + this.setSvg( this.c[3], 'stroke', cc.textSelect, 4 ); + + break; + } + + this.cmode = mode; + return true; + + + + } + + update ( up ) { + + //if( up === undefined ) up = true; + + this.c[2].textContent = this.value; + + this.updateSVG(); + + if( up ) this.send(); + + } + + updateSVG() { + + if ( this.model == 1 ) { + + this.setSvg( this.c[3], 'y1', this.pos.y, 2 ); + this.setSvg( this.c[3], 'y2', this.pos.y, 2 ); + + this.setSvg( this.c[3], 'x1', this.pos.x, 3 ); + this.setSvg( this.c[3], 'x2', this.pos.x, 3 ); + + } + + this.setSvg( this.c[3], 'cx', this.pos.x, 4 ); + this.setSvg( this.c[3], 'cy', this.pos.y, 4 ); + + } + + setPos ( p ) { + + //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; + + this.pos.set( p[0]+128 , p[1]+128 ); + + let r = 1/this.maxPos; + + this.value[0] = ((p[0]*r)*this.range).toFixed( this.precision ); + this.value[1] = ((p[1]*r)*this.range).toFixed( this.precision ); + + } + + setValue ( v, up = false ) { + + if( v === undefined ) v = this.value; + + /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; + if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; + if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; + if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ + + this.value[0] = Math.min( this.max, Math.max( this.min, v[0] ) ).toFixed( this.precision ) * 1; + this.value[1] = Math.min( this.max, Math.max( this.min, v[1] ) ).toFixed( this.precision ) * 1; + + this.pos.set( ((this.value[0]/this.range)*this.maxPos)+128 , ((this.value[1]/this.range)*this.maxPos)+128 ); + + //console.log(this.pos) + + this.update( up ); + + } + + /*lerp( s1, s2, d1, d2, c = true ) { + + let s = ( d2 - d1 ) / ( s2 - s1 ); + + return c ? ( v ) => { + return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 + } : ( v ) => { + return ( v - s1 ) * s + d1 + } + + }*/ + + } + + // proto/TreeList.js + + class TreeList extends Proto { + constructor(o = {}) { + // API pública esperada: + // o.tree (obj/array), o.value (array) + // o.focused (bool), o.focusPath (array), o.focusLevel (number) + // o.tabIndex, o.itemIndex, o.onChange (fn) + o.selectable = true; + o.name = o.name || "TreeList"; + + super(o); + this.enableHover = o.enableHover !== false; + + // Datos & estado + this.tree = o.tree || {}; + this.value = Array.isArray(o.value) ? o.value.slice() : []; + this.focused = !!o.focused; + this.focusPath = Array.isArray(o.focusPath) ? o.focusPath.slice() : []; + this.focusLevel = typeof o.focusLevel === "number" ? o.focusLevel : -1; + + this.tabIndex = o.tabIndex ?? null; + this.itemIndex = o.itemIndex ?? null; + + // Callback + this.changeCb = + typeof o.onChange === "function" ? o.onChange : () => {}; + + // Layout interno / publicación de altura + this.lineH = this.h; // alto de UNA fila + this.levelGap = this.colors.sy || 2; // separación vertical entre niveles + this.leafMax = 0; // se calcula en rSize() + + // Modelo visual + this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] + this.itemsDom = []; // espejo DOM por nivel + this.hover = { level: -1, index: -1 }; + + // 🔸 NUEVO: recordar la última hoja seleccionada (persistente) + this.lastLeaf = { parentPath: [], key: null }; // parentPath es la ruta hasta el mapa padre + + // Contenedor interno (absoluto) + this.c[2] = this.dom( + "div", + this.css.basic + "left:0; top:0; width:100%; height:100%;" + ); + this.s[2] = this.c[2].style; + + this.init(); + + // Si el valor inicial ya apunta a una hoja válida, recordar esa hoja + this._maybeUpdateLastLeafFromValue(); + } + + // ======= Helpers de tipo ======= + static isMap(node) { + return node && typeof node === "object" && !Array.isArray(node); + } + static isList(node) { + return Array.isArray(node); + } + + // ======= Recorrido de datos ======= + getNodeAtPath(path) { + let node = this.tree; + for (let i = 0; i < path.length; i++) { + if (TreeList.isMap(node)) { + if (!Object.prototype.hasOwnProperty.call(node, path[i])) + return { node: null, depth: i }; + node = node[path[i]]; + } else if (TreeList.isList(node)) { + // Llegamos a una lista: ya no hay más claves válidas + if (i < path.length) return { node, depth: i }; + } else { + return { node: null, depth: i }; + } + } + return { node, depth: path.length }; + } + + // Autocompletar: baja por primeras claves de cada mapa hasta alcanzar una lista + autoCompleteToLeaf(basePath) { + let { node } = this.getNodeAtPath(basePath); + const path = basePath.slice(); + while (TreeList.isMap(node)) { + const keys = Object.keys(node); + if (!keys.length) break; + const k0 = keys[0]; + path.push(k0); + node = node[k0]; + } + // Si termina en lista, NO agrega un ítem final de la hoja + return path; + } + + // Ruta activa (focusPath si focused, sino value) + getActivePath() { + return this.focused ? this.focusPath : this.value; + } + + // ======= Tamaño de hoja máximo (para layout estable) ======= + computeLeafMax(node = this.tree) { + if (Array.isArray(node)) return node.length; + if (!node || typeof node !== "object") return 0; + let m = 0; + for (const k of Object.keys(node)) { + m = Math.max(m, this.computeLeafMax(node[k])); + } + return m; + } + + // ======= Construcción de niveles (modelo lógico) ======= + buildLevels() { + this.levels.length = 0; + const activePath = this.getActivePath(); + + let node = this.tree; + let level = 0; + + while (node) { + if (TreeList.isMap(node)) { + // Nivel intermedio: claves del mapa (horizontal) + const keys = Object.keys(node); + if (!keys.length) break; + this.levels.push({ + type: "map", + items: keys.map((k) => ({ + key: k, + label: k, + zone: { x: 0, y: 0, w: 0, h: 0 }, + })), + zone: { x: 0, y: 0, w: 0, h: this.lineH }, + }); + + const nextKey = activePath[level]; + if (!nextKey || !node.hasOwnProperty(nextKey)) break; + node = node[nextKey]; + } else if (TreeList.isList(node)) { + // Nivel hoja: lista vertical + const items = node.map((label) => ({ + key: label, + label, + zone: { x: 0, y: 0, w: 0, h: 0 }, + })); + const hList = Math.max(items.length, this.leafMax) * this.lineH; + this.levels.push({ + type: "list", + items, + zone: { x: 0, y: 0, w: 0, h: hList }, + }); + break; + } else { + break; + } + level++; + } + } + + // ======= Layout (zonas & DOM) ======= + layoutLevels() { + const contentX = (this.sa || 100) + 8; // columna de label + padding + const padRight = 8; + const w = this.zone.w - contentX - padRight; + + let y = 0; + + // Ajustar itemsDom a cantidad de niveles + while (this.itemsDom.length < this.levels.length) + this.itemsDom.push([]); + for (let L = this.levels.length; L < this.itemsDom.length; L++) { + for (const el of this.itemsDom[L]) + if (el && el.parentNode) el.parentNode.removeChild(el); + } + this.itemsDom.length = this.levels.length; + + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + if (lvl.type === "map") { + const n = Math.max(1, lvl.items.length); + const cellW = Math.floor(w / n); + lvl.zone = { x: contentX, y, w, h: this.lineH }; + let x = contentX; + for (let i = 0; i < lvl.items.length; i++) { + const it = lvl.items[i]; + it.zone = { x, y, w: cellW, h: this.lineH }; + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, "map"); + x += cellW; + } + // eliminar DOM sobrante si antes había más celdas + this._pruneRow(L, lvl.items.length); + y += this.lineH + this.levelGap; + } else { + // lista/hoja: reservar h según leafMax + const n = lvl.items.length; + const hList = Math.max(n, this.leafMax) * this.lineH; + lvl.zone = { x: contentX, y, w, h: hList }; + + const rows = Math.max(n, this.leafMax); + for (let i = 0; i < rows; i++) { + const isReal = i < n; + const it = isReal + ? lvl.items[i] + : { + key: null, + label: "", + zone: { x: 0, y: 0, w: 0, h: 0 }, + }; + it.zone = { + x: contentX, + y: y + i * this.lineH, + w, + h: this.lineH, + }; + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, "list", isReal); + } + // eliminar DOM sobrante si antes había más filas + this._pruneRow(L, rows); + y += hList; + } + } + + // Ajustes de alto interno del contenedor visual + const totalH = y; + this.zone.h = totalH + this.margin; + this.s[0].height = this.zone.h + "px"; + this.s[2].height = totalH + "px"; + + // Publicar alto total al GUI (sumará u.h) + this._publishHeight(); + } + + // Elimina nodos DOM sobrantes en la fila L a partir del índice keep + _pruneRow(L, keep) { + const row = this.itemsDom[L]; + if (!row) return; + for (let j = keep; j < row.length; j++) { + const el = row[j]; + if (el && el.parentNode) el.parentNode.removeChild(el); + } + row.length = keep; + } + + ensureItemDom(L, i) { + const row = this.itemsDom[L]; + while (row.length <= i) row.push(null); + if (!row[i]) { + const div = this.dom( + "div", + Tools.css.txt + "position:absolute; pointer-events:none;" + ); + this.c[2].appendChild(div); + row[i] = div; + } + return row[i]; + } + + paintItemDom(div, L, i, it, kind, isReal = true) { + const s = div.style; + const cc = this.colors; + + // Posición + s.left = it.zone.x + "px"; + s.top = it.zone.y + "px"; + s.width = it.zone.w + "px"; + s.height = it.zone.h - 2 + "px"; + + // Texto + div.textContent = isReal ? it.label : ""; + + // Estados + const selected = + isReal && this.value[L] !== undefined && this.value[L] === it.key; + const inFocusLvl = this.focused && this.focusLevel === L; + const focusMatch = isReal && inFocusLvl && this.focusPath[L] === it.key; + const isHover = + this.enableHover && + isReal && + this.hover.level === L && + this.hover.index === i; + + // 🔸 NUEVO: ¿esta fila es la última hoja seleccionada? + let isLastLeaf = false; + if (isReal && kind === "list" && this.lastLeaf.key != null) { + // La hoja visible corresponde si el padre de esta lista coincide con parentPath guardado + // El padre actual es this.value.slice(0, L) cuando la lista está desplegada por value/focus + const parentNow = this.getActivePath().slice(0, L); + if ( + this._pathsEqual(parentNow, this.lastLeaf.parentPath) && + it.key === this.lastLeaf.key + ) { + isLastLeaf = true; + } + } + + // Estilos base + s.background = cc.back; + s.color = cc.text; + s.border = "1px solid " + cc.border; + s.textAlign = kind === "map" ? "center" : "left"; + + // Prioridad visual: + // 1) seleccionado (azul) + // 2) última hoja (nuevo color) + // 3) foco + // 4) hover + if (selected) { + s.background = cc.select; + s.color = cc.textSelect; + } else if (isLastLeaf) { + // color distintivo para "última hoja" (amarillo suave) + s.background = "rgba(255, 200, 0, 0.25)"; + s.color = cc.text; + } else if (focusMatch) { + s.background = cc.backgroundOver; + s.color = cc.textOver; + } else if (isHover) { + s.background = cc.overoff; + s.color = cc.textOver; + } + + // Filas de padding invisibles en hoja + s.opacity = isReal ? "1" : "0"; + } + + _pathsEqual(a, b) { + if (!a || !b || a.length !== b.length) return false; + for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false; + return true; + } + + // ======= Ciclo de vida ======= + rSize() { + this.leafMax = this.computeLeafMax(this.tree); + this.buildLevels(); + this.layoutLevels(); + } + + update() { + this.buildLevels(); + this.layoutLevels(); + } + + // ======= Interacción ======= + _toLocal(e) { + const mx = e.clientX - this.zone.x; + const my = e.clientY - this.zone.y; + return { x: mx, y: my }; + } + + _hitTest(mx, my) { + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + const z = lvl.zone; // x y w ya incluyen contentX + + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) + continue; + + if (lvl.type === "map") { + for (let i = 0; i < lvl.items.length; i++) { + const itz = lvl.items[i].zone; + if ( + mx >= itz.x && + my >= itz.y && + mx <= itz.x + itz.w && + my <= itz.y + itz.h + ) { + return { L, i, real: true }; + } + } + } else { + const nRows = Math.max(lvl.items.length, this.leafMax); + for (let i = 0; i < nRows; i++) { + const isReal = i < lvl.items.length; + const itz = isReal + ? lvl.items[i].zone + : { + x: z.x, + y: z.y + i * this.lineH, + w: z.w, + h: this.lineH, + }; + if ( + mx >= itz.x && + my >= itz.y && + mx <= itz.x + itz.w && + my <= itz.y + itz.h + ) { + return { L, i, real: isReal }; + } + } + } + } + return { L: -1, i: -1, real: false }; + } + + handleEvent(e) { + if (this.lock) return false; + + if (e.type === "mousemove") { + // Si el hover está desactivado, no hay trabajo que hacer. + if (!this.enableHover) return false; + + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + + // nuevo hover calculado + const newHover = + ht.L !== -1 && ht.real + ? { level: ht.L, index: ht.i } + : { level: -1, index: -1 }; + // solo repintar si cambia realmente el hover + if ( + newHover.level === this.hover.level && + newHover.index === this.hover.index + ) + return false; + this.hover = newHover; + this.update(); + return true; + } + + if (e.type === "mousedown") { + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + if (ht.L !== -1 && ht.real) { + this._selectAt(ht.L, ht.i); + return true; // solo true si realmente se seleccionó algo + } + return false; + } + + if (e.type === "mouseup") { + return false; + } + + return false; + } + + // Selección + autocompletado + notificación + _selectAt(L, i) { + const lvl = this.levels[L]; + const chosen = lvl.items[i]; + if (!chosen || !chosen.key) return; + + const base = this.value.slice(0, L); + base[L] = chosen.key; + + const newPath = this.autoCompleteToLeaf(base); + + // 🔸 Si el usuario selecciona explícitamente en el nivel hoja, recordarlo + if (lvl.type === "list") { + this.lastLeaf.parentPath = this.value.slice(0, L); // padre de la lista actual + this.lastLeaf.key = chosen.key; + } + + this.value = newPath.slice(); + this.update(); + + // si está referenciado, propaga a objeto externo + this.send(newPath); + this.changeCb(this.tabIndex, this.itemIndex, newPath); + } + + // ======= API pública ======= + setValue(path) { + this.value = Array.isArray(path) ? path.slice() : []; + // Si desde afuera nos setean una hoja válida, también la recordamos + this._maybeUpdateLastLeafFromValue(); + this.update(); + } + + setTree(tree) { + this.tree = tree || {}; + this.leafMax = this.computeLeafMax(this.tree); + this.update(); + } + + setFocus({ focused, focusPath, focusLevel }) { + if (typeof focused === "boolean") this.focused = focused; + if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); + if (typeof focusLevel === "number") this.focusLevel = focusLevel; + this.update(); + } + + _maybeUpdateLastLeafFromValue() { + // Si value apunta a padre+hoja (…,[leaf]) y es válida, recordar esa hoja + if (!Array.isArray(this.value) || this.value.length === 0) return; + const parent = this.value.slice(0, this.value.length - 1); + const leaf = this.value[this.value.length - 1]; + const info = this.getNodeAtPath(parent); + if (info && Array.isArray(info.node) && info.node.includes(leaf)) { + this.lastLeaf = { parentPath: parent, key: leaf }; + } + } + + // ======= Publicación de altura ======= + _countVisibleIntermediates() { + let c = 0; + for (let i = 0; i < this.levels.length; i++) + if (this.levels[i].type === "map") c++; + return c; + } + + _getCurrentLeafLength() { + const last = this.levels[this.levels.length - 1]; + return last && last.type === "list" ? last.items.length : 0; + } + + _publishHeight() { + const inter = this._countVisibleIntermediates(); + const leafLen = Math.max(this.leafMax, this._getCurrentLeafLength()); + const leafH = leafLen * this.lineH; + const interH = inter * (this.lineH + this.levelGap); + const totalH = inter ? interH + this.levelGap + leafH : leafH; + + // Normalizamos a px enteros para evitar jitter por redondeo + const newH = Math.floor(totalH); + + // Actualizamos métricas locales siempre + this.h = newH; + this.zone.h = this.h + this.margin; + this.s[0].height = this.h + "px"; + + // Solo avisamos al GUI si la altura cambió + if (newH !== this._lastPublishedH) { + this._lastPublishedH = newH; + Roots.needReZone = true; + if (this.isUI && this.main) this.main.calc(); + } + } + } + + const add = function () { + + let a = arguments; + + let type, o, ref = false, n = null; + + if( typeof a[0] === 'string' ){ + + type = a[0]; + o = a[1] || {}; + + } else if ( typeof a[0] === 'object' ){ // like dat gui + + ref = true; + if( a[2] === undefined ) [].push.call(a, {}); + + type = a[2].type ? a[2].type : autoType( a[0][a[1]], a[2] ); + + o = a[2]; + o.name = a[1]; + if (o.hasOwnProperty("displayName")) o.name = o.displayName; + + if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } + else o.value = a[0][a[1]]; + + } + + let name = type.toLowerCase(); + + if( name === 'group' ){ + o.add = add; + //o.dx = 8 + } + + switch( name ){ + + case 'bool': case 'boolean': n = new Bool(o); break; + case 'button': n = new Button(o); break; + case 'circular': n = new Circular(o); break; + case 'color': n = new Color(o); break; + case 'fps': n = new Fps(o); break; + case 'graph': n = new Graph(o); break; + case 'group': n = new Group(o); break; + case 'joystick': n = new Joystick(o); break; + case 'knob': n = new Knob(o); break; + case 'list': n = new List(o); break; + case 'numeric': case 'number': n = new Numeric(o); break; + case 'slide': n = new Slide(o); break; + case 'textInput': case 'string': n = new TextInput(o); break; + case 'title': case 'text': n = new Title(o); break; + case 'select': n = new Select(o); break; + case 'bitmap': n = new Bitmap(o); break; + case 'selector': n = new Selector(o); break; + case 'empty': case 'space': n = new Empty(o); break; + case 'item': n = new Item(o); break; + case 'grid': n = new Grid(o); break; + case 'pad2d': case 'pad': n = new Pad2D(o); break; + case 'treelist': n = new TreeList(o); break; + + } + + + + if( n !== null ){ + + Roots.needResize = true; + + if( ref ) n.setReferency( a[0], a[1] ); + return n; + + } + + }; + + const autoType = function ( v, o ) { + + let type = 'slide'; + + if( typeof v === 'boolean' ) type = 'bool'; + else if( typeof v === 'string' ){ + + if( v.substring(0,1) === '#' ) type = 'color'; + else type = 'string'; + + } else if( typeof v === 'number' ){ + + if( o.ctype ) type = 'color'; + else type = 'slide'; + + } else if( typeof v === 'array' && v instanceof Array ){ + + if( typeof v[0] === 'number' ) type = 'number'; + else if( typeof v[0] === 'string' ) type = 'list'; + + } else if( typeof v === 'object' && v instanceof Object ){ + + if( v.x !== undefined ) type = 'number'; + else type = 'list'; + + } + + return type + + }; + + /** + * @author lth / https://github.com/lo-th + */ + + class Gui { + constructor(o = {}) { + this.isGui = true; + + this.name = "gui"; + + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; + + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); + + //this.cleanning = false + + // style + this.css = Tools.cloneCss(); + + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 + + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; + + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; + + this.callback = o.callback === undefined ? null : o.callback; + + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; + + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + + this.cn = ""; + + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; + + this.size.h = this.size.h < 11 ? 11 : this.size.h; + + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + + // virtual mouse + this.mouse = new V2().neg(); + + this.h = 0; + //this.prevY = -1; + this.sw = 0; + + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); + + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; + + this.autoResize = o.autoResize === undefined ? true : o.autoResize; + + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; + + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; + + this.isNewTarget = false; + + let cc = this.colors; + + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); + + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); + + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); + + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); + + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); + + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; + + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } + + if (this.parent !== null) this.parent.appendChild(this.content); + + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } + + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + + this.setWidth(); + + if (this.isCanvas) this.makeCanvas(); + + Roots.add(this); + } + + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseUp(x, y) { + /* + + clientX,clientY are no used when isCanvas==true + */ + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); + + Roots.needReZone = true; + } + + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } + + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } + + // ---------------------- + // CANVAS + // ---------------------- + + onDraw() {} + + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + + //console.log( this.canvas.width, this.canvas.height ) + } + + draw(force) { + if (this.canvas === null) return; + + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } + + ////// + + getDom() { + return this.content; + } + + noMouse() { + this.mouse.neg(); + } + + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); + + //console.log("setMouse "+uv.x+" "+uv.y) + } + + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } + + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } + + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } + + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } + + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } + + onChange(f) { + this.callback = f || null; + return this; + } + + // ---------------------- + // STYLES + // ---------------------- + + mode(n) { + let needChange = false; + let cc = this.colors; + + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } + + needChange = true; + } + + return needChange; + } + + // ---------------------- + // TARGET + // ---------------------- + + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + + this.proto = null; + this.current = -1; + + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + + Roots.cursor(); + return true; + } + + // ---------------------- + // ZONE TEST + // ---------------------- + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + this.isReset = false; + + let name = ""; + + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; + + return name; + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent(e) { + //if( this.cleanning ) return + + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; + + let change = false; + let protoChange = false; + + let name = this.testZone(e); + + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; + + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } + + if (!name) return; + + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); + + if (this.proto) protoChange = this.proto.handleEvent(e); + + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); + + if (!Roots.lock) { + this.getNext(e, change); + } + + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } + + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + + break; + } + + if (this.isDown) change = true; + if (protoChange) change = true; + + if (type === "keyup") change = true; + if (type === "keydown") change = true; + + if (change) this.draw(); + } + + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); + + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } + + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } + + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } + + // ---------------------- + // RESET + // ---------------------- + + reset(force) { + if (this.isReset) return; + + //this.resetItem(); + + this.mouse.neg(); + this.isDown = false; + + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); + + if (r || r2) this.draw(true); + + this.isReset = true; + + //Roots.lock = false; + } + + // ---------------------- + // ADD NODE + // ---------------------- + + add() { + //if(this.cleanning) this.cleanning = false + + let a = arguments; + let ontop = false; + + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; + + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } + + let u = add.apply(this, a); + + if (u === null) return; + + if (ontop) this.uis.unshift(u); + else this.uis.push(u); + + this.calc(); + + this.isEmpty = false; + + return u; + } + + // remove one node + + remove(n) { + if (n.dispose) n.dispose(); + } + + // call after uis clear + + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } + + // clear all gui + + empty() { + //this.cleanning = true + + //this.close(); + + let i = this.uis.length, + item; + + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } + + this.uis = []; + this.isEmpty = true; + this.calc(); + } + + clear() { + this.empty(); + } + + clear2() { + setTimeout(this.empty.bind(this), 0); + } + + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } + + // ---------------------- + // ITEMS SPECIAL + // ---------------------- + + resetItem() { + if (!this.isItemMode) return; + + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } + + setItem(name) { + if (!this.isItemMode) return; + + name = name || ""; + this.resetItem(); + + if (!name) { + this.update(0); + return; + } + + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } + + // ---------------------- + // SCROLL + // ---------------------- + + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; + + if (b) { + this.total = this.h; + + this.maxView = this.maxHeight; + + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; + + this.range = this.maxView - this.sh; + + this.oy = Tools.clamp(this.oy, 0, this.range); + + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } + + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } + + update(y) { + y = Tools.clamp(y, 0, this.range); + + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } + + // ---------------------- + // RESIZE FUNCTION + // ---------------------- + + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } + + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } + + setHeight() { + if (this.tmp) clearTimeout(this.tmp); + + this.zone.h = this.bh; + this.isScroll = false; + + if (this.isOpen) { + this.h = this.calcUis(); + + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; + + this.maxHeight = hhh - this.zone.y - this.bh; + + let diff = this.h - this.maxHeight; + + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + + this.upScroll(this.isScroll); + + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + + rezone() { + Roots.needReZone = true; + } + + setWidth(w) { + if (w) this.zone.w = w; + + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } + } + + exports.Files = Files; + exports.Gui = Gui; + exports.REVISION = REVISION; + exports.Tools = Tools; + exports.add = add; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gXCIuLi9jb3JlL1Byb3RvLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4uL2NvcmUvVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi4vY29yZS9Sb290cy5qc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cdGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG5cdFx0Ly8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG5cdFx0Ly8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuXHRcdC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG5cdFx0Ly8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG5cdFx0by5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuXHRcdG8ubmFtZSA9IG8ubmFtZSB8fCBcIlRyZWVMaXN0XCI7XHJcblxyXG5cdFx0c3VwZXIobyk7XHJcblx0XHR0aGlzLmVuYWJsZUhvdmVyID0gby5lbmFibGVIb3ZlciAhPT0gZmFsc2U7XHJcblxyXG5cdFx0Ly8gRGF0b3MgJiBlc3RhZG9cclxuXHRcdHRoaXMudHJlZSA9IG8udHJlZSB8fCB7fTtcclxuXHRcdHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KG8udmFsdWUpID8gby52YWx1ZS5zbGljZSgpIDogW107XHJcblx0XHR0aGlzLmZvY3VzZWQgPSAhIW8uZm9jdXNlZDtcclxuXHRcdHRoaXMuZm9jdXNQYXRoID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcblx0XHR0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSBcIm51bWJlclwiID8gby5mb2N1c0xldmVsIDogLTE7XHJcblxyXG5cdFx0dGhpcy50YWJJbmRleCA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuXHRcdHRoaXMuaXRlbUluZGV4ID0gby5pdGVtSW5kZXggPz8gbnVsbDtcclxuXHJcblx0XHQvLyBDYWxsYmFja1xyXG5cdFx0dGhpcy5jaGFuZ2VDYiA9XHJcblx0XHRcdHR5cGVvZiBvLm9uQ2hhbmdlID09PSBcImZ1bmN0aW9uXCIgPyBvLm9uQ2hhbmdlIDogKCkgPT4ge307XHJcblxyXG5cdFx0Ly8gTGF5b3V0IGludGVybm8gLyBwdWJsaWNhY2nDs24gZGUgYWx0dXJhXHJcblx0XHR0aGlzLmxpbmVIID0gdGhpcy5oOyAvLyBhbHRvIGRlIFVOQSBmaWxhXHJcblx0XHR0aGlzLmxldmVsR2FwID0gdGhpcy5jb2xvcnMuc3kgfHwgMjsgLy8gc2VwYXJhY2nDs24gdmVydGljYWwgZW50cmUgbml2ZWxlc1xyXG5cdFx0dGhpcy5sZWFmTWF4ID0gMDsgLy8gc2UgY2FsY3VsYSBlbiByU2l6ZSgpXHJcblxyXG5cdFx0Ly8gTW9kZWxvIHZpc3VhbFxyXG5cdFx0dGhpcy5sZXZlbHMgPSBbXTsgLy8gW3t0eXBlOidtYXAnfCdsaXN0JywgaXRlbXM6W3trZXksbGFiZWwsem9uZX1dLCB6b25lOnt4LHksdyxofX0uLi5dXHJcblx0XHR0aGlzLml0ZW1zRG9tID0gW107IC8vIGVzcGVqbyBET00gcG9yIG5pdmVsXHJcblx0XHR0aGlzLmhvdmVyID0geyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG5cclxuXHRcdC8vIPCflLggTlVFVk86IHJlY29yZGFyIGxhIMO6bHRpbWEgaG9qYSBzZWxlY2Npb25hZGEgKHBlcnNpc3RlbnRlKVxyXG5cdFx0dGhpcy5sYXN0TGVhZiA9IHsgcGFyZW50UGF0aDogW10sIGtleTogbnVsbCB9OyAvLyBwYXJlbnRQYXRoIGVzIGxhIHJ1dGEgaGFzdGEgZWwgbWFwYSBwYWRyZVxyXG5cclxuXHRcdC8vIENvbnRlbmVkb3IgaW50ZXJubyAoYWJzb2x1dG8pXHJcblx0XHR0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuXHRcdFx0XCJkaXZcIixcclxuXHRcdFx0dGhpcy5jc3MuYmFzaWMgKyBcImxlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlO1wiXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHRcdHRoaXMuaW5pdCgpO1xyXG5cclxuXHRcdC8vIFNpIGVsIHZhbG9yIGluaWNpYWwgeWEgYXB1bnRhIGEgdW5hIGhvamEgdsOhbGlkYSwgcmVjb3JkYXIgZXNhIGhvamFcclxuXHRcdHRoaXMuX21heWJlVXBkYXRlTGFzdExlYWZGcm9tVmFsdWUoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gSGVscGVycyBkZSB0aXBvID09PT09PT1cclxuXHRzdGF0aWMgaXNNYXAobm9kZSkge1xyXG5cdFx0cmV0dXJuIG5vZGUgJiYgdHlwZW9mIG5vZGUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7XHJcblx0fVxyXG5cdHN0YXRpYyBpc0xpc3Qobm9kZSkge1xyXG5cdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFJlY29ycmlkbyBkZSBkYXRvcyA9PT09PT09XHJcblx0Z2V0Tm9kZUF0UGF0aChwYXRoKSB7XHJcblx0XHRsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBwYXRoW2ldKSlcclxuXHRcdFx0XHRcdHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcblx0XHRcdFx0bm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcblx0XHRcdH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcblx0XHRcdFx0Ly8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG5cdFx0XHRcdGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcblx0fVxyXG5cclxuXHQvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG5cdGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG5cdFx0bGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuXHRcdGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG5cdFx0d2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcblx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuXHRcdFx0aWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcblx0XHRcdGNvbnN0IGswID0ga2V5c1swXTtcclxuXHRcdFx0cGF0aC5wdXNoKGswKTtcclxuXHRcdFx0bm9kZSA9IG5vZGVbazBdO1xyXG5cdFx0fVxyXG5cdFx0Ly8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuXHRcdHJldHVybiBwYXRoO1xyXG5cdH1cclxuXHJcblx0Ly8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG5cdGdldEFjdGl2ZVBhdGgoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG5cdGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcblx0XHRpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09IFwib2JqZWN0XCIpIHJldHVybiAwO1xyXG5cdFx0bGV0IG0gPSAwO1xyXG5cdFx0Zm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XHJcblx0XHRcdG0gPSBNYXRoLm1heChtLCB0aGlzLmNvbXB1dGVMZWFmTWF4KG5vZGVba10pKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBDb25zdHJ1Y2Npw7NuIGRlIG5pdmVsZXMgKG1vZGVsbyBsw7NnaWNvKSA9PT09PT09XHJcblx0YnVpbGRMZXZlbHMoKSB7XHJcblx0XHR0aGlzLmxldmVscy5sZW5ndGggPSAwO1xyXG5cdFx0Y29uc3QgYWN0aXZlUGF0aCA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpO1xyXG5cclxuXHRcdGxldCBub2RlID0gdGhpcy50cmVlO1xyXG5cdFx0bGV0IGxldmVsID0gMDtcclxuXHJcblx0XHR3aGlsZSAobm9kZSkge1xyXG5cdFx0XHRpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBOaXZlbCBpbnRlcm1lZGlvOiBjbGF2ZXMgZGVsIG1hcGEgKGhvcml6b250YWwpXHJcblx0XHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG5cdFx0XHRcdGlmICgha2V5cy5sZW5ndGgpIGJyZWFrO1xyXG5cdFx0XHRcdHRoaXMubGV2ZWxzLnB1c2goe1xyXG5cdFx0XHRcdFx0dHlwZTogXCJtYXBcIixcclxuXHRcdFx0XHRcdGl0ZW1zOiBrZXlzLm1hcCgoaykgPT4gKHtcclxuXHRcdFx0XHRcdFx0a2V5OiBrLFxyXG5cdFx0XHRcdFx0XHRsYWJlbDogayxcclxuXHRcdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0XHR9KSksXHJcblx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IHRoaXMubGluZUggfSxcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0Y29uc3QgbmV4dEtleSA9IGFjdGl2ZVBhdGhbbGV2ZWxdO1xyXG5cdFx0XHRcdGlmICghbmV4dEtleSB8fCAhbm9kZS5oYXNPd25Qcm9wZXJ0eShuZXh0S2V5KSkgYnJlYWs7XHJcblx0XHRcdFx0bm9kZSA9IG5vZGVbbmV4dEtleV07XHJcblx0XHRcdH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcblx0XHRcdFx0Ly8gTml2ZWwgaG9qYTogbGlzdGEgdmVydGljYWxcclxuXHRcdFx0XHRjb25zdCBpdGVtcyA9IG5vZGUubWFwKChsYWJlbCkgPT4gKHtcclxuXHRcdFx0XHRcdGtleTogbGFiZWwsXHJcblx0XHRcdFx0XHRsYWJlbCxcclxuXHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCB9LFxyXG5cdFx0XHRcdH0pKTtcclxuXHRcdFx0XHRjb25zdCBoTGlzdCA9IE1hdGgubWF4KGl0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcblx0XHRcdFx0dGhpcy5sZXZlbHMucHVzaCh7XHJcblx0XHRcdFx0XHR0eXBlOiBcImxpc3RcIixcclxuXHRcdFx0XHRcdGl0ZW1zLFxyXG5cdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiBoTGlzdCB9LFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldmVsKys7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuXHRsYXlvdXRMZXZlbHMoKSB7XHJcblx0XHRjb25zdCBjb250ZW50WCA9ICh0aGlzLnNhIHx8IDEwMCkgKyA4OyAvLyBjb2x1bW5hIGRlIGxhYmVsICsgcGFkZGluZ1xyXG5cdFx0Y29uc3QgcGFkUmlnaHQgPSA4O1xyXG5cdFx0Y29uc3QgdyA9IHRoaXMuem9uZS53IC0gY29udGVudFggLSBwYWRSaWdodDtcclxuXHJcblx0XHRsZXQgeSA9IDA7XHJcblxyXG5cdFx0Ly8gQWp1c3RhciBpdGVtc0RvbSBhIGNhbnRpZGFkIGRlIG5pdmVsZXNcclxuXHRcdHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aClcclxuXHRcdFx0dGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuXHRcdGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSlcclxuXHRcdFx0XHRpZiAoZWwgJiYgZWwucGFyZW50Tm9kZSkgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XHJcblx0XHR9XHJcblx0XHR0aGlzLml0ZW1zRG9tLmxlbmd0aCA9IHRoaXMubGV2ZWxzLmxlbmd0aDtcclxuXHJcblx0XHRmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcblx0XHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0XHRpZiAobHZsLnR5cGUgPT09IFwibWFwXCIpIHtcclxuXHRcdFx0XHRjb25zdCBuID0gTWF0aC5tYXgoMSwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcblx0XHRcdFx0Y29uc3QgY2VsbFcgPSBNYXRoLmZsb29yKHcgLyBuKTtcclxuXHRcdFx0XHRsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IHRoaXMubGluZUggfTtcclxuXHRcdFx0XHRsZXQgeCA9IGNvbnRlbnRYO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdCA9IGx2bC5pdGVtc1tpXTtcclxuXHRcdFx0XHRcdGl0LnpvbmUgPSB7IHgsIHksIHc6IGNlbGxXLCBoOiB0aGlzLmxpbmVIIH07XHJcblx0XHRcdFx0XHRjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcblx0XHRcdFx0XHR0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCBcIm1hcFwiKTtcclxuXHRcdFx0XHRcdHggKz0gY2VsbFc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBjZWxkYXNcclxuXHRcdFx0XHR0aGlzLl9wcnVuZVJvdyhMLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuXHRcdFx0XHR5ICs9IHRoaXMubGluZUggKyB0aGlzLmxldmVsR2FwO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIGxpc3RhL2hvamE6IHJlc2VydmFyIGggc2Vnw7puIGxlYWZNYXhcclxuXHRcdFx0XHRjb25zdCBuID0gbHZsLml0ZW1zLmxlbmd0aDtcclxuXHRcdFx0XHRjb25zdCBoTGlzdCA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCkgKiB0aGlzLmxpbmVIO1xyXG5cdFx0XHRcdGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogaExpc3QgfTtcclxuXHJcblx0XHRcdFx0Y29uc3Qgcm93cyA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGlzUmVhbCA9IGkgPCBuO1xyXG5cdFx0XHRcdFx0Y29uc3QgaXQgPSBpc1JlYWxcclxuXHRcdFx0XHRcdFx0PyBsdmwuaXRlbXNbaV1cclxuXHRcdFx0XHRcdFx0OiB7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6IG51bGwsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCB9LFxyXG5cdFx0XHRcdFx0XHQgIH07XHJcblx0XHRcdFx0XHRpdC56b25lID0ge1xyXG5cdFx0XHRcdFx0XHR4OiBjb250ZW50WCxcclxuXHRcdFx0XHRcdFx0eTogeSArIGkgKiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHR3LFxyXG5cdFx0XHRcdFx0XHRoOiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuXHRcdFx0XHRcdHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsIFwibGlzdFwiLCBpc1JlYWwpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgZmlsYXNcclxuXHRcdFx0XHR0aGlzLl9wcnVuZVJvdyhMLCByb3dzKTtcclxuXHRcdFx0XHR5ICs9IGhMaXN0O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQWp1c3RlcyBkZSBhbHRvIGludGVybm8gZGVsIGNvbnRlbmVkb3IgdmlzdWFsXHJcblx0XHRjb25zdCB0b3RhbEggPSB5O1xyXG5cdFx0dGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjtcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuXHRcdHRoaXMuc1syXS5oZWlnaHQgPSB0b3RhbEggKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gUHVibGljYXIgYWx0byB0b3RhbCBhbCBHVUkgKHN1bWFyw6EgdS5oKVxyXG5cdFx0dGhpcy5fcHVibGlzaEhlaWdodCgpO1xyXG5cdH1cclxuXHJcblx0Ly8gRWxpbWluYSBub2RvcyBET00gc29icmFudGVzIGVuIGxhIGZpbGEgTCBhIHBhcnRpciBkZWwgw61uZGljZSBrZWVwXHJcblx0X3BydW5lUm93KEwsIGtlZXApIHtcclxuXHRcdGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcblx0XHRpZiAoIXJvdykgcmV0dXJuO1xyXG5cdFx0Zm9yIChsZXQgaiA9IGtlZXA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0Y29uc3QgZWwgPSByb3dbal07XHJcblx0XHRcdGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuXHRcdH1cclxuXHRcdHJvdy5sZW5ndGggPSBrZWVwO1xyXG5cdH1cclxuXHJcblx0ZW5zdXJlSXRlbURvbShMLCBpKSB7XHJcblx0XHRjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG5cdFx0d2hpbGUgKHJvdy5sZW5ndGggPD0gaSkgcm93LnB1c2gobnVsbCk7XHJcblx0XHRpZiAoIXJvd1tpXSkge1xyXG5cdFx0XHRjb25zdCBkaXYgPSB0aGlzLmRvbShcclxuXHRcdFx0XHRcImRpdlwiLFxyXG5cdFx0XHRcdFRvb2xzLmNzcy50eHQgKyBcInBvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lO1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG5cdFx0XHRyb3dbaV0gPSBkaXY7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcm93W2ldO1xyXG5cdH1cclxuXHJcblx0cGFpbnRJdGVtRG9tKGRpdiwgTCwgaSwgaXQsIGtpbmQsIGlzUmVhbCA9IHRydWUpIHtcclxuXHRcdGNvbnN0IHMgPSBkaXYuc3R5bGU7XHJcblx0XHRjb25zdCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuXHRcdC8vIFBvc2ljacOzblxyXG5cdFx0cy5sZWZ0ID0gaXQuem9uZS54ICsgXCJweFwiO1xyXG5cdFx0cy50b3AgPSBpdC56b25lLnkgKyBcInB4XCI7XHJcblx0XHRzLndpZHRoID0gaXQuem9uZS53ICsgXCJweFwiO1xyXG5cdFx0cy5oZWlnaHQgPSBpdC56b25lLmggLSAyICsgXCJweFwiO1xyXG5cclxuXHRcdC8vIFRleHRvXHJcblx0XHRkaXYudGV4dENvbnRlbnQgPSBpc1JlYWwgPyBpdC5sYWJlbCA6IFwiXCI7XHJcblxyXG5cdFx0Ly8gRXN0YWRvc1xyXG5cdFx0Y29uc3Qgc2VsZWN0ZWQgPVxyXG5cdFx0XHRpc1JlYWwgJiYgdGhpcy52YWx1ZVtMXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWVbTF0gPT09IGl0LmtleTtcclxuXHRcdGNvbnN0IGluRm9jdXNMdmwgPSB0aGlzLmZvY3VzZWQgJiYgdGhpcy5mb2N1c0xldmVsID09PSBMO1xyXG5cdFx0Y29uc3QgZm9jdXNNYXRjaCA9IGlzUmVhbCAmJiBpbkZvY3VzTHZsICYmIHRoaXMuZm9jdXNQYXRoW0xdID09PSBpdC5rZXk7XHJcblx0XHRjb25zdCBpc0hvdmVyID1cclxuXHRcdFx0dGhpcy5lbmFibGVIb3ZlciAmJlxyXG5cdFx0XHRpc1JlYWwgJiZcclxuXHRcdFx0dGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJlxyXG5cdFx0XHR0aGlzLmhvdmVyLmluZGV4ID09PSBpO1xyXG5cclxuXHRcdC8vIPCflLggTlVFVk86IMK/ZXN0YSBmaWxhIGVzIGxhIMO6bHRpbWEgaG9qYSBzZWxlY2Npb25hZGE/XHJcblx0XHRsZXQgaXNMYXN0TGVhZiA9IGZhbHNlO1xyXG5cdFx0aWYgKGlzUmVhbCAmJiBraW5kID09PSBcImxpc3RcIiAmJiB0aGlzLmxhc3RMZWFmLmtleSAhPSBudWxsKSB7XHJcblx0XHRcdC8vIExhIGhvamEgdmlzaWJsZSBjb3JyZXNwb25kZSBzaSBlbCBwYWRyZSBkZSBlc3RhIGxpc3RhIGNvaW5jaWRlIGNvbiBwYXJlbnRQYXRoIGd1YXJkYWRvXHJcblx0XHRcdC8vIEVsIHBhZHJlIGFjdHVhbCBlcyB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpIGN1YW5kbyBsYSBsaXN0YSBlc3TDoSBkZXNwbGVnYWRhIHBvciB2YWx1ZS9mb2N1c1xyXG5cdFx0XHRjb25zdCBwYXJlbnROb3cgPSB0aGlzLmdldEFjdGl2ZVBhdGgoKS5zbGljZSgwLCBMKTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMuX3BhdGhzRXF1YWwocGFyZW50Tm93LCB0aGlzLmxhc3RMZWFmLnBhcmVudFBhdGgpICYmXHJcblx0XHRcdFx0aXQua2V5ID09PSB0aGlzLmxhc3RMZWFmLmtleVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRpc0xhc3RMZWFmID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEVzdGlsb3MgYmFzZVxyXG5cdFx0cy5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuXHRcdHMuY29sb3IgPSBjYy50ZXh0O1xyXG5cdFx0cy5ib3JkZXIgPSBcIjFweCBzb2xpZCBcIiArIGNjLmJvcmRlcjtcclxuXHRcdHMudGV4dEFsaWduID0ga2luZCA9PT0gXCJtYXBcIiA/IFwiY2VudGVyXCIgOiBcImxlZnRcIjtcclxuXHJcblx0XHQvLyBQcmlvcmlkYWQgdmlzdWFsOlxyXG5cdFx0Ly8gMSkgc2VsZWNjaW9uYWRvIChhenVsKVxyXG5cdFx0Ly8gMikgw7psdGltYSBob2phIChudWV2byBjb2xvcilcclxuXHRcdC8vIDMpIGZvY29cclxuXHRcdC8vIDQpIGhvdmVyXHJcblx0XHRpZiAoc2VsZWN0ZWQpIHtcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuXHRcdH0gZWxzZSBpZiAoaXNMYXN0TGVhZikge1xyXG5cdFx0XHQvLyBjb2xvciBkaXN0aW50aXZvIHBhcmEgXCLDumx0aW1hIGhvamFcIiAoYW1hcmlsbG8gc3VhdmUpXHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IFwicmdiYSgyNTUsIDIwMCwgMCwgMC4yNSlcIjtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHQ7XHJcblx0XHR9IGVsc2UgaWYgKGZvY3VzTWF0Y2gpIHtcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuXHRcdH0gZWxzZSBpZiAoaXNIb3Zlcikge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmlsYXMgZGUgcGFkZGluZyBpbnZpc2libGVzIGVuIGhvamFcclxuXHRcdHMub3BhY2l0eSA9IGlzUmVhbCA/IFwiMVwiIDogXCIwXCI7XHJcblx0fVxyXG5cclxuXHRfcGF0aHNFcXVhbChhLCBiKSB7XHJcblx0XHRpZiAoIWEgfHwgIWIgfHwgYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gQ2ljbG8gZGUgdmlkYSA9PT09PT09XHJcblx0clNpemUoKSB7XHJcblx0XHR0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcblx0XHR0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcblx0XHR0aGlzLmxheW91dExldmVscygpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlKCkge1xyXG5cdFx0dGhpcy5idWlsZExldmVscygpO1xyXG5cdFx0dGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gSW50ZXJhY2Npw7NuID09PT09PT1cclxuXHRfdG9Mb2NhbChlKSB7XHJcblx0XHRjb25zdCBteCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cdFx0Y29uc3QgbXkgPSBlLmNsaWVudFkgLSB0aGlzLnpvbmUueTtcclxuXHRcdHJldHVybiB7IHg6IG14LCB5OiBteSB9O1xyXG5cdH1cclxuXHJcblx0X2hpdFRlc3QobXgsIG15KSB7XHJcblx0XHRmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcblx0XHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0XHRjb25zdCB6ID0gbHZsLnpvbmU7IC8vIHggeSB3IHlhIGluY2x1eWVuIGNvbnRlbnRYXHJcblxyXG5cdFx0XHRpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAobHZsLnR5cGUgPT09IFwibWFwXCIpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXR6ID0gbHZsLml0ZW1zW2ldLnpvbmU7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdG14ID49IGl0ei54ICYmXHJcblx0XHRcdFx0XHRcdG15ID49IGl0ei55ICYmXHJcblx0XHRcdFx0XHRcdG14IDw9IGl0ei54ICsgaXR6LncgJiZcclxuXHRcdFx0XHRcdFx0bXkgPD0gaXR6LnkgKyBpdHouaFxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IEwsIGksIHJlYWw6IHRydWUgfTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29uc3QgblJvd3MgPSBNYXRoLm1heChsdmwuaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNSZWFsID0gaSA8IGx2bC5pdGVtcy5sZW5ndGg7XHJcblx0XHRcdFx0XHRjb25zdCBpdHogPSBpc1JlYWxcclxuXHRcdFx0XHRcdFx0PyBsdmwuaXRlbXNbaV0uem9uZVxyXG5cdFx0XHRcdFx0XHQ6IHtcclxuXHRcdFx0XHRcdFx0XHRcdHg6IHoueCxcclxuXHRcdFx0XHRcdFx0XHRcdHk6IHoueSArIGkgKiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHRcdFx0dzogei53LFxyXG5cdFx0XHRcdFx0XHRcdFx0aDogdGhpcy5saW5lSCxcclxuXHRcdFx0XHRcdFx0ICB9O1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRteCA+PSBpdHoueCAmJlxyXG5cdFx0XHRcdFx0XHRteSA+PSBpdHoueSAmJlxyXG5cdFx0XHRcdFx0XHRteCA8PSBpdHoueCArIGl0ei53ICYmXHJcblx0XHRcdFx0XHRcdG15IDw9IGl0ei55ICsgaXR6LmhcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4geyBMLCBpLCByZWFsOiBpc1JlYWwgfTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB7IEw6IC0xLCBpOiAtMSwgcmVhbDogZmFsc2UgfTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUV2ZW50KGUpIHtcclxuXHRcdGlmICh0aGlzLmxvY2spIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRpZiAoZS50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XHJcblx0XHRcdC8vIFNpIGVsIGhvdmVyIGVzdMOhIGRlc2FjdGl2YWRvLCBubyBoYXkgdHJhYmFqbyBxdWUgaGFjZXIuXHJcblx0XHRcdGlmICghdGhpcy5lbmFibGVIb3ZlcikgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0Y29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG5cdFx0XHRjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcblxyXG5cdFx0XHQvLyBudWV2byBob3ZlciBjYWxjdWxhZG9cclxuXHRcdFx0Y29uc3QgbmV3SG92ZXIgPVxyXG5cdFx0XHRcdGh0LkwgIT09IC0xICYmIGh0LnJlYWxcclxuXHRcdFx0XHRcdD8geyBsZXZlbDogaHQuTCwgaW5kZXg6IGh0LmkgfVxyXG5cdFx0XHRcdFx0OiB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblx0XHRcdC8vIHNvbG8gcmVwaW50YXIgc2kgY2FtYmlhIHJlYWxtZW50ZSBlbCBob3ZlclxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0bmV3SG92ZXIubGV2ZWwgPT09IHRoaXMuaG92ZXIubGV2ZWwgJiZcclxuXHRcdFx0XHRuZXdIb3Zlci5pbmRleCA9PT0gdGhpcy5ob3Zlci5pbmRleFxyXG5cdFx0XHQpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR0aGlzLmhvdmVyID0gbmV3SG92ZXI7XHJcblx0XHRcdHRoaXMudXBkYXRlKCk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuXHRcdFx0Y29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG5cdFx0XHRjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcblx0XHRcdGlmIChodC5MICE9PSAtMSAmJiBodC5yZWFsKSB7XHJcblx0XHRcdFx0dGhpcy5fc2VsZWN0QXQoaHQuTCwgaHQuaSk7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7IC8vIHNvbG8gdHJ1ZSBzaSByZWFsbWVudGUgc2Ugc2VsZWNjaW9uw7MgYWxnb1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gU2VsZWNjacOzbiArIGF1dG9jb21wbGV0YWRvICsgbm90aWZpY2FjacOzblxyXG5cdF9zZWxlY3RBdChMLCBpKSB7XHJcblx0XHRjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuXHRcdGNvbnN0IGNob3NlbiA9IGx2bC5pdGVtc1tpXTtcclxuXHRcdGlmICghY2hvc2VuIHx8ICFjaG9zZW4ua2V5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgYmFzZSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgTCk7XHJcblx0XHRiYXNlW0xdID0gY2hvc2VuLmtleTtcclxuXHJcblx0XHRjb25zdCBuZXdQYXRoID0gdGhpcy5hdXRvQ29tcGxldGVUb0xlYWYoYmFzZSk7XHJcblxyXG5cdFx0Ly8g8J+UuCBTaSBlbCB1c3VhcmlvIHNlbGVjY2lvbmEgZXhwbMOtY2l0YW1lbnRlIGVuIGVsIG5pdmVsIGhvamEsIHJlY29yZGFybG9cclxuXHRcdGlmIChsdmwudHlwZSA9PT0gXCJsaXN0XCIpIHtcclxuXHRcdFx0dGhpcy5sYXN0TGVhZi5wYXJlbnRQYXRoID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTsgLy8gcGFkcmUgZGUgbGEgbGlzdGEgYWN0dWFsXHJcblx0XHRcdHRoaXMubGFzdExlYWYua2V5ID0gY2hvc2VuLmtleTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHJcblx0XHQvLyBzaSBlc3TDoSByZWZlcmVuY2lhZG8sIHByb3BhZ2EgYSBvYmpldG8gZXh0ZXJub1xyXG5cdFx0dGhpcy5zZW5kKG5ld1BhdGgpO1xyXG5cdFx0dGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IEFQSSBww7pibGljYSA9PT09PT09XHJcblx0c2V0VmFsdWUocGF0aCkge1xyXG5cdFx0dGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoLnNsaWNlKCkgOiBbXTtcclxuXHRcdC8vIFNpIGRlc2RlIGFmdWVyYSBub3Mgc2V0ZWFuIHVuYSBob2phIHbDoWxpZGEsIHRhbWJpw6luIGxhIHJlY29yZGFtb3NcclxuXHRcdHRoaXMuX21heWJlVXBkYXRlTGFzdExlYWZGcm9tVmFsdWUoKTtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRzZXRUcmVlKHRyZWUpIHtcclxuXHRcdHRoaXMudHJlZSA9IHRyZWUgfHwge307XHJcblx0XHR0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0c2V0Rm9jdXMoeyBmb2N1c2VkLCBmb2N1c1BhdGgsIGZvY3VzTGV2ZWwgfSkge1xyXG5cdFx0aWYgKHR5cGVvZiBmb2N1c2VkID09PSBcImJvb2xlYW5cIikgdGhpcy5mb2N1c2VkID0gZm9jdXNlZDtcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KGZvY3VzUGF0aCkpIHRoaXMuZm9jdXNQYXRoID0gZm9jdXNQYXRoLnNsaWNlKCk7XHJcblx0XHRpZiAodHlwZW9mIGZvY3VzTGV2ZWwgPT09IFwibnVtYmVyXCIpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0X21heWJlVXBkYXRlTGFzdExlYWZGcm9tVmFsdWUoKSB7XHJcblx0XHQvLyBTaSB2YWx1ZSBhcHVudGEgYSBwYWRyZStob2phICjigKYsW2xlYWZdKSB5IGVzIHbDoWxpZGEsIHJlY29yZGFyIGVzYSBob2phXHJcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgfHwgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy52YWx1ZS5sZW5ndGggLSAxKTtcclxuXHRcdGNvbnN0IGxlYWYgPSB0aGlzLnZhbHVlW3RoaXMudmFsdWUubGVuZ3RoIC0gMV07XHJcblx0XHRjb25zdCBpbmZvID0gdGhpcy5nZXROb2RlQXRQYXRoKHBhcmVudCk7XHJcblx0XHRpZiAoaW5mbyAmJiBBcnJheS5pc0FycmF5KGluZm8ubm9kZSkgJiYgaW5mby5ub2RlLmluY2x1ZGVzKGxlYWYpKSB7XHJcblx0XHRcdHRoaXMubGFzdExlYWYgPSB7IHBhcmVudFBhdGg6IHBhcmVudCwga2V5OiBsZWFmIH07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFB1YmxpY2FjacOzbiBkZSBhbHR1cmEgPT09PT09PVxyXG5cdF9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCkge1xyXG5cdFx0bGV0IGMgPSAwO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxldmVscy5sZW5ndGg7IGkrKylcclxuXHRcdFx0aWYgKHRoaXMubGV2ZWxzW2ldLnR5cGUgPT09IFwibWFwXCIpIGMrKztcclxuXHRcdHJldHVybiBjO1xyXG5cdH1cclxuXHJcblx0X2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkge1xyXG5cdFx0Y29uc3QgbGFzdCA9IHRoaXMubGV2ZWxzW3RoaXMubGV2ZWxzLmxlbmd0aCAtIDFdO1xyXG5cdFx0cmV0dXJuIGxhc3QgJiYgbGFzdC50eXBlID09PSBcImxpc3RcIiA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuXHR9XHJcblxyXG5cdF9wdWJsaXNoSGVpZ2h0KCkge1xyXG5cdFx0Y29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcblx0XHRjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuXHRcdGNvbnN0IGxlYWZIID0gbGVhZkxlbiAqIHRoaXMubGluZUg7XHJcblx0XHRjb25zdCBpbnRlckggPSBpbnRlciAqICh0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcCk7XHJcblx0XHRjb25zdCB0b3RhbEggPSBpbnRlciA/IGludGVySCArIHRoaXMubGV2ZWxHYXAgKyBsZWFmSCA6IGxlYWZIO1xyXG5cclxuXHRcdC8vIE5vcm1hbGl6YW1vcyBhIHB4IGVudGVyb3MgcGFyYSBldml0YXIgaml0dGVyIHBvciByZWRvbmRlb1xyXG5cdFx0Y29uc3QgbmV3SCA9IE1hdGguZmxvb3IodG90YWxIKTtcclxuXHJcblx0XHQvLyBBY3R1YWxpemFtb3MgbcOpdHJpY2FzIGxvY2FsZXMgc2llbXByZVxyXG5cdFx0dGhpcy5oID0gbmV3SDtcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcblx0XHR0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuXHRcdC8vIFNvbG8gYXZpc2Ftb3MgYWwgR1VJIHNpIGxhIGFsdHVyYSBjYW1iacOzXHJcblx0XHRpZiAobmV3SCAhPT0gdGhpcy5fbGFzdFB1Ymxpc2hlZEgpIHtcclxuXHRcdFx0dGhpcy5fbGFzdFB1Ymxpc2hlZEggPSBuZXdIO1xyXG5cdFx0XHRSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuXHRcdFx0aWYgKHRoaXMuaXNVSSAmJiB0aGlzLm1haW4pIHRoaXMubWFpbi5jYWxjKCk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBCb29sIH0gZnJvbSAnLi4vcHJvdG8vQm9vbC5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL3Byb3RvL0J1dHRvbi5qcyc7XHJcbmltcG9ydCB7IENpcmN1bGFyIH0gZnJvbSAnLi4vcHJvdG8vQ2lyY3VsYXIuanMnO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL3Byb3RvL0NvbG9yLmpzJztcclxuaW1wb3J0IHsgRnBzIH0gZnJvbSAnLi4vcHJvdG8vRnBzLmpzJztcclxuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9wcm90by9HcmFwaC5qcyc7XHJcbmltcG9ydCB7IEdyb3VwICB9IGZyb20gJy4uL3Byb3RvL0dyb3VwLmpzJztcclxuaW1wb3J0IHsgSm95c3RpY2sgfSBmcm9tICcuLi9wcm90by9Kb3lzdGljay5qcyc7XHJcbmltcG9ydCB7IEtub2IgfSBmcm9tICcuLi9wcm90by9Lbm9iLmpzJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uL3Byb3RvL0xpc3QuanMnO1xyXG5pbXBvcnQgeyBOdW1lcmljIH0gZnJvbSAnLi4vcHJvdG8vTnVtZXJpYy5qcyc7XHJcbmltcG9ydCB7IFNsaWRlIH0gZnJvbSAnLi4vcHJvdG8vU2xpZGUuanMnO1xyXG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9wcm90by9UZXh0SW5wdXQuanMnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL3Byb3RvL1RpdGxlLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0LmpzJztcclxuaW1wb3J0IHsgQml0bWFwIH0gZnJvbSAnLi4vcHJvdG8vQml0bWFwLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICcuLi9wcm90by9TZWxlY3Rvci5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi4vcHJvdG8vRW1wdHkuanMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vcHJvdG8vSXRlbS5qcyc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi9wcm90by9HcmlkLmpzJztcclxuaW1wb3J0IHsgUGFkMkQgfSBmcm9tICcuLi9wcm90by9QYWQyRC5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFRyZWVMaXN0IH0gZnJvbSAnLi4vcHJvdG8vVHJlZUxpc3QuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndHJlZWxpc3QnOiBuID0gbmV3IFRyZWVMaXN0KG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7RUFBQTtFQUNBO0VBQ0E7QUFDQTtBQUNZLFFBQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7RUFDQTtBQUNBO0VBQ0EsTUFBTSxDQUFDLEdBQUc7RUFDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7RUFDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7RUFDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0VBQ1YsRUFBRSxJQUFJLEVB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UUFBUSxDQUFDO0FBQ3pDO0VBQ0E7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtFQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztFQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0VBQ3JCLE9BQU87QUFDUDtFQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0VBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7RUFDMUIsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtFQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7RUFDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENB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LEtBQUs7QUFDTDtFQUNBLElBQUksR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUMzQjtFQUNBLFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0VBQ2pCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0VBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0VBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0VBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0VBQ2pCLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0VBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7RUFDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztFQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtFQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0VBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7RUFDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztFQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDbkIsU0FB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LENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztFQUNwSixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JIO0VBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM3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Q0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekg7RUFDQTtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0VBQ0E7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztFQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0VBQ0E7QUFDQTtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdGO0VBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMvQjtFQUNBLFNBQVMsTUFBTTtFQUNmO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzVGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0VBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckksWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9GLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BJO0VBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztFQUMvQixTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxhQUFhLEVBQUUsWUFBWTtBQUMvQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0VBQ2hKLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN2QyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDM0IsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQ3hCLFFBQVcsSUFBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0VBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztFQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztFQUN2QjtFQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7RUFDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7RUFDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0VBQ0EsWUFBWSxFQUFFLEdBQUc7RUFDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7RUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMs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TSxHQUFHLEtBQUssQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7RUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcs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Q0FBQztFQUN0RSxPQUFPO0VBQ1AsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3RCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQzdFLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0VBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7RUFDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEMsT0FBTztFQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDdkIsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN6QyxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxHQUFHO0VBQ1QsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNyQztFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7RUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQzVEO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0VBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7RUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3ZDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7RUFDaEMsS0FBSyxNQUFNO0VBQ1gsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDekMsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0VBQzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDMUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUN0QyxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDMUI7RUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDcEQsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7RUFDOUIsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDMUIsT0FBTztFQUNQLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFO0VBQ1YsTUFBTSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUk7RUFDMUIsVUFBVSxJQUFJLENBQUMsTUFBTTtFQUNyQixVQUFVLElBQUksQ0FBQyxJQUFJO0VBQ25CLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO0VBQ3pC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RyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFHO0VBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07RUFDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07RUFDNUI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7RUFDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0VBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtB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QyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ25ELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztFQUNBLFNBQVM7QUFDVDtBQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUN0QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7RUFDckQsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUU7RUFDcEUsU0FBUztFQUNUO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUN4RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FB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QUM7QUFDdkM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtFQUNyQixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7RUFDbEQ7RUFDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztFQUM1RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7RUFDQTtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0VBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7RUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtFQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7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LElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0VBQ0EsUUFBUSxRQUFRLElBQUk7RUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RDtFQUNBLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtFQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0VBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RDtFQUNBLFlBQVksTUFBTTtFQUNsQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztFQUNqRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0VBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7RUFDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7RUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDckMsWUFBWSxJQUFJLENBQUMs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QUssQ0FBQztBQUNuQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7RUFDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7RUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztFQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM1QztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7RUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENB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QUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQ25EO0VBQ0EsT0FBTyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtFQUNBLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkMsT0FBTztBQUNQO0VBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3BEO0VBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDakM7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0VBQ0EsU0FBUztFQUNULEtBQUs7RUFDTCxJQUFJO0VBQ0osR0FBRztBQUNIO0VBQ0EsRUFBRTtBQUNGO0VBQ0E7QUFDQTtFQUNBLENBQUMsU0FBUyxDQUFDLEdBQUc7QUFDZDtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7RUFDakUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDbEMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN0QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2xELFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9DO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxJQUFJLENBQUMsR0FBRztBQUNUO0VBQ0EsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDZjtFQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0VBQ3RDO0VBQ0EsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0VBQ0EsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEI7RUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM5QztFQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCO0VBQ0EsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztFQUN0QztFQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDZjtFQUNBLEtBQUssSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hFO0VBQ0EsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDeEI7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0VBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQ3hDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDN0U7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDbkQsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckQ7RUFDQSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTztBQUNwQjtFQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUN4RCxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQ3ZFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7RUFDM0UsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QztFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2Y7RUFDQSxFQUFFLElBQUksQ0FBQyxZQUFZLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUQsYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RCxhQUFhLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7RUFDN0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNwQjtFQUNBLEtBQUssSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUN0QyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxFQUFFO0FBQzFDO0VBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7RUFDNUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU07RUFDMUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUM5QztFQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0VBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDdkIsTUFBTTtFQUNOLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNoQjtFQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDdEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQzlDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUN6QixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxXQUFXLENBQUMsR0FBRztBQUNoQjtFQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7RUFDakIsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFLO0FBQ2Y7RUFDQSxLQUFjLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU87RUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDbkMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7RUFDQSxLQUFLLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMxQztFQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7RUFDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztFQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUM7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0VBQ0E7RUFDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtFQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7RUFDQTtBQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7RUFDNUQ7RUFDQTtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtFQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0VBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0VBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtFQUNwQztFQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztFQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0VBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtFQUNBLEVBQUU7QUFDRjtBQUNBO0VBQ0E7O0VDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQztBQUMvQjtFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hDO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQzVCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUNuQztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztFQUMvQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0VBQzFDO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7RUFDeEMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDOUMsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3REO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3hDO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2xEO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztFQUN6QixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDOUI7RUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3hCO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLEdBQUU7RUFDdEMsWUFBWSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUMvQixZQUFZLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQzlCLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUI7RUFDQSxZQUFZLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3hCLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDekIsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN6QixZQUFZLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCO0VBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3hGO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDNUI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDdkMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDckM7RUFDQSxhQUFhO0FBQ2I7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFLO0FBQ3RDO0VBQ0EsU0FBUztBQUNUO0FBQ0E7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsUUFBUSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2hDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO0VBQzNDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztBQUMvQztFQUNBLFFBQVEsSUFBSSxRQUFRLEdBQUcsK0JBQStCLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyw4RUFBOEUsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztBQUNoTTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxRQUFRLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDakY7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3ZFO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbEUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7RUFDbEQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7RUFDakQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMvRDtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7RUFDN0s7QUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLG9DQUFvQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0RBQWtELEVBQUUsQ0FBQztBQUMxSjtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRywyRUFBMkUsQ0FBQyxDQUFDO0FBQ3RKO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QjtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQTtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztFQUM5QjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztFQUN0RSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtFQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QztFQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDL0IsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkM7RUFDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDdkQ7RUFDQSxZQUFZLElBQUksQ0FBQyxN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LEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0VBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0VBQ25DO0VBQ0EsS0FBSztFQUNMO0VBQ0E7O0VDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7RUFDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0VBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztFQUNBLFFBQVEsSUFBSSxDQUFD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RyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0VBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtFQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0VBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7RUFDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQztFQUM5QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFJO0VBQzlDLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7RUFDckMsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUMzQyxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQztFQUNoRixpQkFBaUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztFQUMzRCxTQUFTO0VBQ1QsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFdBQVcsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQ0FBaUM7RUFDcEUsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUc7RUFDOUIsUUFBUSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUk7RUFDckMsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2xCLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQW9CO0VBQ2pHLGlCQUFpQixDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFPO0VBQ3RFLFlBQVksQ0FBQyxHQUFFO0VBQ2YsU0FBUztFQUNULFFBQVEsT0FBTyxDQUFDO0VBQ2hCLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEM7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ25GLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDcEgsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEc7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxT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QUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyw0Q0FBNEMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDO0VBQzVILFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyx3REFBd0QsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUM1SztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSTtFQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw2QkFBNkIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLEVBQUM7QUFDMUk7RUFDQSxRQUFnQixJQUFJLENBQUMsRUFBRTtFQUN2QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQU87QUFDaEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFFO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcs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SUFBSSxFQUFFLEVBQUUsQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7RUFDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztFQUN6QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFJO0FBQzVEO0VBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztFQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7RUFDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0Es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LElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUNoRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7RUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7RUFDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7RUFDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDM0QsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0VBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtFQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0VBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM3QjtBQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztFQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7RUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7RUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsU0FBUyxNQUFNO0VBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFD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USxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztFQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDL0IsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztFQUM5QjtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDckQ7RUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN4RCxhQUFhLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztFQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3hELGFBQWE7RUFDYjtFQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMvQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3pCLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQztFQUNBLFlBQVksT0FBTyxJQUFJLENBQUM7RUFDeEI7RUFDQSxTQUFTO0VBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUN6RCxRQUFRLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUM1QyxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUMxQztBQUNBO0VBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZCLFlBQVksS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUM1QyxZQUFZLElBQUksR0FBRyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssS0FBSyxDQUFDO0VBQ3JELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDckQsWUFBWSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUMxQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUc7QUFDM0M7RUFDQSxZQUFZLENBQUMsR0FBRyxVQUFVLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO0VBQzFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUMvQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDL0MsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQ2hELFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUNoRCxZQUFZLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUM5RDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1RDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3BDLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDckU7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDakMsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0VBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztFQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3JGO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0VBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7RUFDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztFQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3pEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztFQUNyQztBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0VBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7RUFDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtFQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFD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RTtBQUNBO0VBQ0EsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0FBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7RUFDQSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDMUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDNUM7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztFQUNsRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUN2QjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN4RCxhQUFhLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ3hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDakQsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtFQUMxQixZQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQzdCLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQy9DLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNqRCxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7RUFDckQsU0FBUyxNQUFNO0VBQ2YsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0VBQ2xELFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztFQUN0RCxTQUFTO0VBQ1QsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUNwQztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0VBQ3JCLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ3hELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ3hELFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0I7RUFDQSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdB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Q0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7RUFDM0M7QUFDQTtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0VBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDeEIsR0FBRztBQUNIO0VBQ0EsRUFBRSxLQUFLLEdBQUc7RUFDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7RUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDcEM7RUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNsQixHQUFHO0VBQ0g7O0VDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUss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QVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0VBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQztFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0VBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7RUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7RUFDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0VBQy9CO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztFQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztFQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7RUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxH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USxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7RUFDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtB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QUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztFQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7RUFDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDL0xBO0FBRUE7RUFDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtFQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNuQjtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztFQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVB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LE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDdEM7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztFQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtFQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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UUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0VBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7RUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzlGO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0VBQ0E7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7RUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0VBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtFQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0VBQ0EsS0FBSztFQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7RUFDbkI7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QUM7QUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7RUFDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkc7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNwSDtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDMUI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTs7RUNyUkE7QUFJQTtFQUNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztFQUNwQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0VBQ3JCO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUN0QixFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUM7QUFDaEM7RUFDQSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNYLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQztBQUM3QztFQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzNCLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM3RCxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7RUFDN0IsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3pFLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekU7RUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7RUFDckMsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0VBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRO0VBQ2YsR0FBRyxPQUFPLENBQUMsQ0FBQyxRQUFRLEtBQUssVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDNUQ7RUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3RCLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDdEMsRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNuQjtFQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFH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LENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQzVDLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDcEMsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDcEQsSUFBSSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7RUFDckIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDL0MsS0FBSyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ2pELEtBQUssTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDMUMsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztFQUM3QyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7RUFDaEIsS0FBSztFQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQ3hDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUNwQyxJQUFJLE1B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QUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2Y7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsSUFBSSxJQUFJLENB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LENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNO0VBQ3pDLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7RUFDMUIsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7QUFDakQ7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQzNELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDbEU7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0VBQ2hELE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0VBQ2xDLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEU7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN4RTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7RUFDNUIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdB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QVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZEO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtFQUNYLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0VBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEM7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0VBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0VBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDaEQsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3pCLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtFQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDakQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0QsR0FBRztBQUNIO0VBQ0EsRUFBRSxJQUFJLEdBQUc7RUFDVCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUN6RCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsR0FBRztFQUNkLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElB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QUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDNUUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUM3QyxHQUFHO0FBQ0g7RUFDQSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUU7RUFDbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztFQUM1QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDaEIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDMUIsS0FBSztFQUNMLEdBQUc7RUFDSDs7Ozs7Ozs7Ozs7Ozs7In0= diff --git a/build/uil.module.js b/build/uil.module.js index 3c6e46c..eeb943a 100644 --- a/build/uil.module.js +++ b/build/uil.module.js @@ -1,6 +1,9601 @@ -/** - * @license - * Copyright 2010-2021 Uil.js Authors - * SPDX-License-Identifier: MIT - */ -const t="4.3.0",s={ui:[],dom:null,ID:null,lock:!1,wlock:!1,current:-1,needReZone:!0,needResize:!1,forceZone:!1,isEventsInit:!1,isLeave:!1,addDOMEventListeners:!0,downTime:0,prevTime:0,prevDefault:["contextmenu"],pointerEvent:["pointerdown","pointermove","pointerup"],eventOut:["pointercancel","pointerout","pointerleave"],xmlserializer:null,tmpTime:null,tmpImage:null,oldCursor:"auto",input:null,parent:null,firstImput:!0,hiddenImput:null,hiddenSizer:null,hasFocus:!1,startInput:!1,inputRange:[0,0],cursorId:0,str:"",pos:0,startX:-1,moveX:-1,debugInput:!1,isLoop:!1,listens:[],e:{type:null,clientX:0,clientY:0,keyCode:NaN,key:null,delta:0},isMobile:!1,now:null,needsUpdate:!1,getTime:function(){return self.performance&&self.performance.now?self.performance.now.bind(performance):Date.now},add:function(t){s.ui.push(t),s.getZone(t),s.isEventsInit||s.initEvents()},testMobile:function(){let t=navigator.userAgent;return!!(t.match(/Android/i)||t.match(/webOS/i)||t.match(/iPhone/i)||t.match(/iPad/i)||t.match(/iPod/i)||t.match(/BlackBerry/i)||t.match(/Windows Phone/i))},remove:function(t){let i=s.ui.indexOf(t);-1!==i&&(s.removeListen(t),s.ui.splice(i,1)),0===s.ui.length&&s.removeEvents()},initEvents:function(){if(s.isEventsInit)return;let t=document.body;s.isMobile=s.testMobile(),s.now=s.getTime(),s.isMobile?t.style.touchAction="none":t.addEventListener("wheel",s,{passive:!1}),console.log("R.addDOMEventListeners "+s.addDOMEventListeners),s.addDOMEventListeners&&(t.addEventListener("pointercancel",s),t.addEventListener("pointerleave",s),t.addEventListener("pointermove",s),t.addEventListener("pointerdown",s),t.addEventListener("pointerup",s),t.addEventListener("keydown",s,!1),t.addEventListener("keyup",s,!1)),window.addEventListener("resize",s.resize,!1),s.isEventsInit=!0,s.dom=t},removeEvents:function(){if(!s.isEventsInit)return;let t=document.body;s.isMobile||t.removeEventListener("wheel",s),s.addDOMEventListeners&&(t.removeEventListener("pointercancel",s),t.removeEventListener("pointerleave",s),t.removeEventListener("pointermove",s),t.removeEventListener("pointerdown",s),t.removeEventListener("pointerup",s),t.removeEventListener("keydown",s),t.removeEventListener("keyup",s)),window.removeEventListener("resize",s.resize),s.isEventsInit=!1},resize:function(){let t,i=s.ui.length;for(;i--;)t=s.ui[i],t.isGui&&!t.isCanvasOnly&&t.autoResize&&t.calc();s.needReZone=!0,s.needResize=!1},out:function(){console.log("im am out"),s.clearOldID()},in:function(){console.log("im am in")},fakeUp:function(){this.handleEvent({type:"pointerup"})},handleEvent:function(t){-1!==s.prevDefault.indexOf(t.type)&&t.preventDefault(),s.needResize&&s.resize(),s.findZone(s.forceZone);let i=s.e,e=!1;"keydown"===t.type&&s.keydown(t),"keyup"===t.type&&s.keyup(t),"wheel"===t.type?i.delta=t.deltaY>0?1:-1:i.delta=0;let h=t.pointerType;if(i.clientX=("touch"===h?t.pageX:t.clientX)||0,i.clientY=("touch"===h?t.pageY:t.clientY)||0,i.type=t.type,-1!==s.eventOut.indexOf(t.type)&&(e=!0,i.type="mouseup"),"pointerleave"===t.type&&(s.isLeave=!0),"pointerdown"===t.type&&(i.type="mousedown"),"pointerup"===t.type&&(i.type="mouseup"),"pointermove"===t.type&&(s.isLeave&&(s.isLeave=!1,s.resize()),i.type="mousemove"),"mousedown"===i.type){if(s.downTime=s.now(),s.downTime-s.prevTime<200)return s.selectAll(),!1;s.prevTime=s.downTime,s.forceZone=!1}"mousedown"===i.type&&s.clearInput(),"mousedown"===i.type&&(s.lock=!0),"mouseup"===i.type&&(s.lock=!1),s.isMobile&&"mousedown"===i.type&&s.findID(i),"mousemove"!==i.type||s.lock||s.findID(i),null!==s.ID&&(s.ID.isCanvasOnly&&(i.clientX=s.ID.mouse.x,i.clientY=s.ID.mouse.y),s.ID.handleEvent(i)),s.isMobile&&"mouseup"===i.type&&s.clearOldID(),e&&s.clearOldID()},findID:function(t){let i,e,h,o=s.ui.length,n=-1;for(;o--;)if(i=s.ui[o],i.isCanvasOnly?(e=i.mouse.x,h=i.mouse.y):(e=t.clientX,h=t.clientY),s.onZone(i,e,h)){n=o,n!==s.current&&(s.clearOldID(),s.current=n,s.ID=i);break}-1===n&&s.clearOldID()},clearOldID:function(){s.ID&&(s.current=-1,s.ID.reset(),s.ID=null,s.cursor())},calcUis:(t,i,e,h=!1)=>{let o,n,r,l=t.length,a=0,c=0,d=0;for(;l--;)o=t[c],c++,!h&&o.isGroup&&o.calcUis(),r=o.margin,o.zone.w=o.w,o.zone.h=o.h+r,o.autoWidth?(a=0,o.zone.x=i.x+o.dx,o.zone.y=e,e+=o.h+r,d+=o.h+r):(0===a&&(d+=o.h+r),o.zone.x=i.x+a,o.zone.y=e,n=s.getWidth(o),n?o.zone.w=o.w=n:o.fw&&(o.zone.w=o.w=o.fw),a+=o.zone.w,a>=i.w&&(e+=o.h+r,a=0));return d},findTarget:function(t,i){let e=t.length;for(;e--;)if(s.onZone(t[e],i.clientX,i.clientY))return e;return-1},findZone:function(t){if(s.needReZone||t){for(var i,e=s.ui.length;e--;)i=s.ui[e],s.getZone(i),i.isGui&&i.calcUis();s.needReZone=!1}},onZone:function(t,s,i){if(void 0===s||void 0===i)return!1;let e=t.zone,h=s-e.x,o=i-e.y,n=h>=0&&o>=0&&h<=e.w&&o<=e.h;return n?t.local.set(h,o):t.local.neg(),n},getWidth:function(t){return t.getDom().clientWidth},getZone:function(t){if(t.isCanvasOnly)return;let s=t.getDom().getBoundingClientRect();t.zone={x:s.left,y:s.top,w:s.width,h:s.height}},cursor:function(t){(t=t||"auto")!==s.oldCursor&&(document.body.style.cursor=t,s.oldCursor=t)},toCanvas:function(t,i,e,h){if(s.xmlserializer||(s.xmlserializer=new XMLSerializer),h&&null!==s.tmpTime&&(clearTimeout(s.tmpTime),s.tmpTime=null),null!==s.tmpTime)return;s.lock&&(s.tmpTime=setTimeout((function(){s.tmpTime=null}),10));let o=!1;i===t.canvas.width&&e===t.canvas.height||(o=!0),null===s.tmpImage&&(s.tmpImage=new Image);let n=s.tmpImage,r=s.xmlserializer.serializeToString(t.content),l=''+r+"";n.onload=function(){let s=t.canvas.getContext("2d");o?(t.canvas.width=i,t.canvas.height=e):s.clearRect(0,0,i,e),s.drawImage(this,0,0),t.onDraw()},n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(l),n.crossOrigin="",s.needsUpdate=!1},setHidden:function(){null===s.hiddenImput&&(s.hiddenImput=document.createElement("input"),s.hiddenImput.type="text",s.hiddenSizer=document.createElement("div"),document.body.appendChild(s.hiddenImput),document.body.appendChild(s.hiddenSizer));let t=s.debugInput?"":"opacity:0; zIndex:0;",i=s.parent.css.txtselect+"padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;"+t;s.hiddenImput.style.cssText=i+"bottom:10px;"+(s.debugInput?"":"transform:scale(0);"),s.hiddenSizer.style.cssText=i+"bottom:40px;",s.hiddenImput.style.width=s.input.clientWidth+"px",s.hiddenImput.value=s.str,s.hiddenSizer.innerHTML=s.str,s.hasFocus=!0},clearHidden:function(t){null!==s.hiddenImput&&(s.hasFocus=!1)},clickPos:function(t){let i=s.str.length,e=0,h=0;for(;i--&&(e+=s.textWidth(s.str[h]),!(e>=t));)h++;return h},upInput:function(t,i){if(null===s.parent)return!1;let e=!1;if(i){let i=s.clickPos(t);if(s.moveX=i,-1===s.startX)s.startX=i,s.cursorId=i,s.inputRange=[s.startX,s.startX];else{s.moveX!==s.startX&&(s.startX>s.moveX?s.inputRange=[s.moveX,s.startX]:s.inputRange=[s.startX,s.moveX])}e=!0}else-1!==s.startX&&(s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.startX=-1,e=!0);return e&&s.selectParent(),e},selectAll:function(){s.parent&&(s.str=s.input.textContent,s.inputRange=[0,s.str.length],s.hasFocus=!0,s.hiddenImput.focus(),s.hiddenImput.selectionStart=s.inputRange[0],s.hiddenImput.selectionEnd=s.inputRange[1],s.cursorId=s.inputRange[1],s.selectParent())},selectParent:function(){var t=s.textWidth(s.str.substring(0,s.cursorId)),i=s.textWidth(s.str.substring(0,s.inputRange[0])),e=s.textWidth(s.str.substring(s.inputRange[0],s.inputRange[1]));s.parent.select(t,i,e,s.hiddenSizer.innerHTML)},textWidth:function(t){return null===s.hiddenSizer?0:(t=t.replace(/ /g," "),s.hiddenSizer.innerHTML=t,s.hiddenSizer.clientWidth)},clearInput:function(){null!==s.parent&&(s.firstImput||s.parent.validate(!0),s.clearHidden(),s.parent.unselect(),s.input.style.background=s.parent.colors.back,s.input.style.borderColor=s.parent.colors.border,s.parent.isEdit=!1,s.input=null,s.parent=null,s.str="",s.firstImput=!0)},setInput:function(t,i){s.clearInput(),s.input=t,s.parent=i,s.input.style.background=s.parent.colors.backoff,s.input.style.borderColor=s.parent.colors.select,s.str=s.input.textContent,s.setHidden()},keydown:function(t){if(null===s.parent)return;let i=t.which;t.shiftKey,s.firstImput=!1,s.hasFocus&&(window.focus(),s.hiddenImput.focus()),s.parent.isEdit=!0,13===i?s.clearInput():s.input.isNum?t.keyCode>47&&t.keyCode<58||t.keyCode>95&&t.keyCode<106||190===t.keyCode||110===t.keyCode||8===t.keyCode||109===t.keyCode?s.hiddenImput.readOnly=!1:s.hiddenImput.readOnly=!0:s.hiddenImput.readOnly=!1},keyup:function(t){null!==s.parent&&(s.str=s.hiddenImput.value,s.parent.allEqual?s.parent.sameStr(s.str):s.input.textContent=s.str,s.cursorId=s.hiddenImput.selectionStart,s.inputRange=[s.hiddenImput.selectionStart,s.hiddenImput.selectionEnd],s.selectParent(),s.parent.validate())},loop:function(){s.isLoop&&requestAnimationFrame(s.loop),s.needsUpdate=s.update(),s.ui[0]&&s.needsUpdate&&s.ui[0].draw()},update:function(){let t=s.listens.length,i=!1;for(;t--;){s.listens[t].listening()&&(i=!0)}return i},removeListen:function(t){let i=s.listens.indexOf(t);-1!==i&&s.listens.splice(i,1),0===s.listens.length&&(s.isLoop=!1)},addListen:function(t){return-1===s.listens.indexOf(t)&&(s.listens.push(t),s.isLoop||(s.isLoop=!0,s.loop()),!0)}},i=s,e={transition:.2,frag:document.createDocumentFragment(),colorRing:null,joystick_0:null,joystick_1:null,circular:null,knob:null,pad2d:null,svgns:"http://www.w3.org/2000/svg",links:"http://www.w3.org/1999/xlink",htmls:"http://www.w3.org/1999/xhtml",DOM_SIZE:["height","width","top","left","bottom","right","margin-left","margin-right","margin-top","margin-bottom"],SVG_TYPE_D:["pattern","defs","transform","stop","animate","radialGradient","linearGradient","animateMotion","use","filter","feColorMatrix"],SVG_TYPE_G:["svg","rect","circle","path","polygon","text","g","line","foreignObject"],PI:Math.PI,TwoPI:2*Math.PI,pi90:.5*Math.PI,pi60:Math.PI/3,torad:Math.PI/180,todeg:180/Math.PI,clamp:(t,s,i)=>t=(t=ti?i:t,isDivid:t=>.5*t===Math.floor(.5*t),size:{w:240,h:20,p:30,s:8},defineColor:(t,s=e.colors)=>{let i={...s},h=["fontFamily","fontWeight","fontShadow","fontSize"],o=!1;t.font&&(t.fontFamily=t.font),t.shadow&&(t.fontShadow=t.shadow),t.weight&&(t.fontWeight=t.weight),t.fontColor&&(t.text=t.fontColor),t.color&&(t.text=t.color),t.text&&(i.text=t.text,t.fontColor||t.color||(i.title=e.ColorLuma(t.text,-.25),i.titleoff=e.ColorLuma(t.text,-.5)),i.textOver=e.ColorLuma(t.text,.25),i.textSelect=e.ColorLuma(t.text,.5)),t.button&&(i.button=t.button,i.border=e.ColorLuma(t.button,.1),i.overoff=e.ColorLuma(t.button,.2)),t.select&&(i.select=t.select,i.over=e.ColorLuma(t.select,-.1)),t.itemBg&&(t.back=t.itemBg),t.back&&(i.back=t.back,i.backoff=e.ColorLuma(t.back,-.1)),t.fontSelect&&(i.textSelect=t.fontSelect),t.groupBorder&&(i.gborder=t.groupBorder),t.bgOver&&(i.backgroundOver=t.bgOver);for(let s in i)void 0!==t[s]&&(i[s]=t[s]);for(let s in t)-1!==h.indexOf(s)&&(o=!0);return o&&e.defineText(i),i},colors:{sx:4,sy:2,radius:2,showOver:1,content:"none",background:"rgba(50,50,50,0.15)",backgroundOver:"rgba(50,50,50,0.3)",title:"#CCC",titleoff:"#BBB",text:"#DDD",textOver:"#EEE",textSelect:"#FFF",back:"rgba(0,0,0,0.2)",backoff:"rgba(0,0,0,0.3)",border:"#4c4c4c",borderSize:1,gborder:"none",groups:"none",button:"#3c3c3c",overoff:"#5c5c5c",over:"#024699",select:"#308AFF",action:"#FF3300",fontFamily:"Consolas, monospace",fontWeight:"normal",fontShadow:"none",fontSize:12,joyOver:"rgba(48,138,255,0.25)",joyOut:"rgba(100,100,100,0.5)",joySelect:"#308AFF",hide:"rgba(0,0,0,0)"},css:{basic:"position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; -o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;",button:"display:flex; align-items:center; justify-content:center; text-align:center;",middle:"display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;"},svgs:{g1:"M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z",g2:"M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z",group:"M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z",arrow:"M 3 8 L 8 5 3 2 3 8 Z",arrowDown:"M 5 8 L 8 3 2 3 5 8 Z",arrowUp:"M 5 2 L 2 7 8 7 5 2 Z",solid:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z",body:"M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z",vehicle:"M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z",articulation:"M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z",character:"M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z",terrain:"M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z",joint:"M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z",ray:"M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z",collision:"M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z",map:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",material:"M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z",texture:"M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z",object:"M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z",none:"M 9 5 L 5 5 5 9 9 9 9 5 Z",cursor:"M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z",load:"M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z",save:"M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z",extern:"M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z"},rezone(){i.needReZone=!0},getImput:function(){return!!i.input},setStyle:function(t){for(var s in t)e.colors[s]&&(e.colors[s]=t[s]);e.setText()},defineText:function(t){e.setText(t.fontSize,t.text,t.fontFamily,t.fontShadow,t.fontWeight)},setText:function(t,s,i,h,o){let n=e.colors;void 0===i&&(i=n.fontFamily),void 0===t&&(t=n.fontSize),void 0===h&&(h=n.fontShadow),void 0===o&&(o=n.fontWeight),void 0===s&&(s=n.text),isNaN(t)?-1===t.search("em")&&(t+="px"):t+="px",e.css.txt=e.css.basic+e.css.middle+" font-family:"+i+"; font-weight:"+o+"; font-size:"+t+"; color:"+n.text+"; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;","none"!==h&&(e.css.txt+=" text-shadow: 1px 1px 1px "+h+";"),e.css.txtselect=e.css.txt+"padding:0px 4px; border:1px dashed "+n.border+";",e.css.item=e.css.txt+"padding:0px 4px; position:relative; margin-bottom:1px; "},cloneCss:function(){return{...e.css}},clone:function(t){return t.cloneNode(!0)},setSvg:function(t,s,i,e,h){-1===e?t.setAttributeNS(null,s,i):void 0!==h?t.childNodes[e||0].childNodes[h||0].setAttributeNS(null,s,i):t.childNodes[e||0].setAttributeNS(null,s,i)},setCss:function(t,s){for(let i in s)-1!==e.DOM_SIZE.indexOf(i)?t.style[i]=s[i]+"px":t.style[i]=s[i]},set:function(t,s){for(let i in s)"txt"===i&&(t.textContent=s[i]),"link"===i?t.setAttributeNS(e.links,"xlink:href",s[i]):t.setAttributeNS(null,i,s[i])},get:function(t,s){if(void 0===s)return t;if(!isNaN(s))return t.childNodes[s];if(s instanceof Array){if(2===s.length)return t.childNodes[s[0]].childNodes[s[1]];if(3===s.length)return t.childNodes[s[0]].childNodes[s[1]].childNodes[s[2]]}},dom:function(t,s,i,h,o){return t=t||"div",-1!==e.SVG_TYPE_D.indexOf(t)||-1!==e.SVG_TYPE_G.indexOf(t)?"svg"===t?(h=document.createElementNS(e.svgns,"svg"),e.set(h,i)):(void 0===h&&(h=document.createElementNS(e.svgns,"svg")),e.addAttributes(h,t,i,o)):h=void 0===h?document.createElementNS(e.htmls,t):h.appendChild(document.createElementNS(e.htmls,t)),s&&(h.style.cssText=s),void 0===o?h:h.childNodes[o||0]},addAttributes:function(t,s,i,h){let o=document.createElementNS(e.svgns,s);return e.set(o,i),e.get(t,h).appendChild(o),-1!==e.SVG_TYPE_G.indexOf(s)&&(o.style.pointerEvents="none"),o},clear:function(t){for(e.purge(t);t.firstChild;)t.firstChild.firstChild&&e.clear(t.firstChild),t.removeChild(t.firstChild)},purge:function(t){let s,i,h=t.attributes;if(h)for(s=h.length;s--;)i=h[s].name,"function"==typeof t[i]&&(t[i]=null);if(h=t.childNodes,h)for(s=h.length;s--;)e.purge(t.childNodes[s])},addSVGGlowEffect:function(){if(null!==document.getElementById("UILGlow"))return;let t=e.initUILEffects(),s=e.addAttributes(t,"filter",{id:"UILGlow",x:"-20%",y:"-20%",width:"140%",height:"140%"});e.addAttributes(s,"feGaussianBlur",{in:"SourceGraphic",stdDeviation:"3",result:"uilBlur"});let i=e.addAttributes(s,"feMerge",{});for(let t=0;t<=3;t++)e.addAttributes(i,"feMergeNode",{in:"uilBlur"});e.addAttributes(i,"feMergeNode",{in:"SourceGraphic"})},initUILEffects:function(){let t=document.getElementById("UILSVGEffects");return null===t&&(t=e.dom("svg",void 0,{id:"UILSVGEffects",width:"0",height:"0"}),document.body.appendChild(t)),t},ColorLuma:function(t,s){"n"===t&&(t="#000"),(t=String(t).replace(/[^0-9a-f]/gi,"")).length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),s=s||0;let i,e,h="#";for(e=0;e<3;e++)i=parseInt(t.substr(2*e,2),16),i=Math.round(Math.min(Math.max(0,i+i*s),255)).toString(16),h+=("00"+i).substr(i.length);return h},findDeepInver:function(t){return.3*t[0]+.59*t[1]+.11*t[2]<=.6},lerpColor:function(t,s,i){let e={};for(let h=0;h<3;h++)e[h]=t[h]+(s[h]-t[h])*i;return e},hexToHtml:function(t){return"#"+("000000"+(t=void 0===t?0:t).toString(16)).substr(-6)},htmlToHex:function(t){return t.toUpperCase().replace("#","0x")},u255:function(t,s){return parseInt(t.substring(s,s+2),16)/255},u16:function(t,s){return parseInt(t.substring(s,s+1),16)/15},unpack:function(t){return 7==t.length?[e.u255(t,1),e.u255(t,3),e.u255(t,5)]:4==t.length?[e.u16(t,1),e.u16(t,2),e.u16(t,3)]:void 0},p255:function(t){let s=Math.round(255*t).toString(16);return s.length<2&&(s="0"+s),s},pack:function(t){return"#"+e.p255(t[0])+e.p255(t[1])+e.p255(t[2])},htmlRgb:function(t){return"rgb("+Math.round(255*t[0])+","+Math.round(255*t[1])+","+Math.round(255*t[2])+")"},pad:function(t){return 1==t.length&&(t="0"+t),t},rgbToHex:function(t){let s=Math.round(255*t[0]).toString(16),i=Math.round(255*t[1]).toString(16),h=Math.round(255*t[2]).toString(16);return"#"+e.pad(s)+e.pad(i)+e.pad(h)},hueToRgb:function(t,s,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(s-t)*i:i<.5?s:i<2/3?t+6*(s-t)*(2/3-i):t},rgbToHsl:function(t){let s=t[0],i=t[1],e=t[2],h=Math.min(s,i,e),o=Math.max(s,i,e),n=o-h,r=0,l=0,a=(h+o)/2;return a>0&&a<1&&(l=n/(a<.5?2*a:2-2*a)),n>0&&(o==s&&o!=i&&(r+=(i-e)/n),o==i&&o!=e&&(r+=2+(e-s)/n),o==e&&o!=s&&(r+=4+(s-i)/n),r/=6),[r,l,a]},hslToRgb:function(t){let s,i,h=t[0],o=t[1],n=t[2];return 0===o?[n,n,n]:(i=n<=.5?n*(o+1):n+o-n*o,s=2*n-i,[e.hueToRgb(s,i,h+.33333),e.hueToRgb(s,i,h),e.hueToRgb(s,i,h-.33333)])},makeGradiant:function(t,s,i,h){e.dom(t,null,s,i,0);let o,n=i.childNodes[0].childNodes.length-1;for(let t=0;t0){for(a=6;a--;)r[a]=(113*r[a]+u).toFixed(2);c=" M"+r[0]+" "+r[1]+" Q"+r[2]+" "+r[3]+" "+r[4]+" "+r[5],d=[[0,g[0],1],[100,g[1],1]],e.makeGradiant("linearGradient",{id:"G"+l,x1:r[0],y1:r[1],x2:r[4],y2:r[5],gradientUnits:"userSpaceOnUse"},s,d),e.dom("path","",{d:c,"stroke-width":30,stroke:"url(#G"+l+")","stroke-linecap":"butt"},s,1)}m=n-p,g[0]=g[1]}d=[[0,"#FFFFFF",1],[50,"#FFFFFF",0],[50,"#000000",0],[100,"#000000",1]],e.makeGradiant("linearGradient",{id:"GL0",x1:0,y1:u-84.9,x2:0,y2:212.9,gradientUnits:"userSpaceOnUse"},s,d),d=[[0,"#7f7f7f",1],[50,"#7f7f7f",.5],[100,"#7f7f7f",0]],e.makeGradiant("linearGradient",{id:"GL1",x1:78.95,y1:0,x2:226,y2:0,gradientUnits:"userSpaceOnUse"},s,d),e.dom("g",null,{"transform-origin":"128px 128px",transform:"rotate(0)"},s),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"red"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL1)","stroke-width":1,stroke:"url(#GL1)"},s,2),e.dom("polygon","",{points:"78.95 43.1 78.95 212.85 226 128",fill:"url(#GL0)","stroke-width":1,stroke:"url(#GL0)"},s,2),e.dom("path","",{d:"M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z",fill:"none","stroke-width":2,stroke:"#000"},s,2),e.dom("circle","",{cx:128,cy:128,r:6,"stroke-width":2,stroke:"#000",fill:"none"},s),e.colorRing=s},icon:function(t,s,i){i=i||40;let h=[""];switch(t){case"logo":h[1]="";break;case"donate":h[1]="";break;case"neo":h[1]="";break;case"phy":h[1]="";break;case"config":h[1]="";break;case"github":h[1]="";break;case"save":h[1]=""}return h[2]="",h.join("\n")},logoFill_d:"\n M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 \n L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 \n M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 \n Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z\n ",logo_github:"\n M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 \n 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 \n 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 \n 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 \n 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z\n ",logo_neo:"\n M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 \n 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 \n 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 \n 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L \n 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z\n ",logo_phy:"\n M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 \n Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95\n ",logo_config:"\n M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 \n L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 \n Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75\n ",logo_donate:"\n M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 \n 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 \n 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 \n 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 \n 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 \n Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 \n 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 \n 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 \n 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M \n 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 \n 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 \n 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 \n 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 \n 200.9 187.5 200.9 187.5 195.35 Z\n "};e.setText();const h=e;class o{static autoTypes(t){let s=[];switch(t){case"svg":s=[{accept:{"image/svg+xml":".svg"}}];break;case"wav":s=[{accept:{"audio/wav":".wav"}}];break;case"mp3":s=[{accept:{"audio/mpeg":".mp3"}}];break;case"mp4":s=[{accept:{"video/mp4":".mp4"}}];break;case"bin":case"hex":s=[{description:"Binary Files",accept:{"application/octet-stream":[".bin",".hex"]}}];break;case"text":s=[{description:"Text Files",accept:{"text/plain":[".txt",".text"],"text/html":[".html",".htm"]}}];break;case"json":s=[{description:"JSON Files",accept:{"application/json":[".json"]}}];break;case"js":s=[{description:"JavaScript Files",accept:{"text/javascript":[".js"]}}];break;case"image":s=[{description:"Images",accept:{"image/*":[".png",".gif",".jpeg",".jpg"]}}];break;case"icon":s=[{description:"Icons",accept:{"image/x-ico":[".ico"]}}];break;case"lut":s=[{description:"Lut",accept:{"text/plain":[".cube",".3dl"]}}]}return s}static async load(t={}){"function"!=typeof window.showOpenFilePicker&&(window.showOpenFilePicker=o.showOpenFilePickerPolyfill);try{let s=t.type||"";const i={excludeAcceptAllOption:!!s,multiple:!1};i.types=o.autoTypes(s);const e=await window.showOpenFilePicker(i),h=await e[0].getFile();if(!h)return null;let n=h.name,r=n.substring(n.lastIndexOf(".")+1,n.length);const l=["png","jpg","jpeg","mp4","webm","ogg","mp3"],a=["sea","z","hex","bvh","BVH","glb","gltf"],c=new FileReader;-1!==l.indexOf(r)?c.readAsDataURL(h):-1!==a.indexOf(r)?c.readAsArrayBuffer(h):c.readAsText(h),c.onload=function(i){let e=i.target.result;switch(s){case"image":let s=new Image;s.onload=function(){t.callback&&t.callback(s,n,r)},s.src=e;break;case"json":t.callback&&t.callback(JSON.parse(e),n,r);break;default:t.callback&&t.callback(e,n,r)}}}catch(s){console.log(s),t.always&&t.callback&&t.callback(null)}}static showOpenFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("input");i.type="file",i.multiple=t.multiple,i.accept=t.types.map((t=>t.accept)).flatMap((t=>Object.keys(t).flatMap((s=>t[s])))).join(","),i.addEventListener("change",(()=>{s([...i.files].map((t=>({getFile:async()=>new Promise((s=>{s(t)}))}))))})),i.click()}))}static async save(t={}){let s=!1;"function"!=typeof window.showSaveFilePicker&&(window.showSaveFilePicker=o.showSaveFilePickerPolyfill,s=!0);try{let i=t.type||"";const e={suggestedName:t.name||"hello",data:t.data||""};e.types=o.autoTypes(i),e.finalType=Object.keys(e.types[0].accept)[0],e.suggestedName+=e.types[0].accept[e.finalType][0];const h=await window.showSaveFilePicker(e);if(s)return;const n=await h.createWritable();let r=new Blob([e.data],{type:e.finalType});await n.write(r),await n.close()}catch(t){console.log(t)}}static showSaveFilePickerPolyfill(t){return new Promise((s=>{const i=document.createElement("a");i.download=t.suggestedName||"my-file.txt";let e=new Blob([t.data],{type:t.finalType});i.href=URL.createObjectURL(e),i.addEventListener("click",(()=>{s(setTimeout((()=>URL.revokeObjectURL(i.href)),1e3))})),i.click()}))}static async getFolder(){try{const t=await window.showDirectoryPicker(),s=[];for await(const i of t.values()){const t=await i.getFile();s.push(t)}return console.log(s),s}catch(t){console.log(t)}}}class n{constructor(t=0,s=0){this.x=t,this.y=s}set(t,s){return this.x=t,this.y=s,this}divide(t){return this.x/=t.x,this.y/=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divideScalar(t){return this.multiplyScalar(1/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}angle(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t}addScalar(t){return this.x+=t,this.y+=t,this}negate(){return this.x*=-1,this.y*=-1,this}neg(){return this.x=-1,this.y=-1,this}isZero(){return 0===this.x&&0===this.y}copy(t){return this.x=t.x,this.y=t.y,this}equals(t){return t.x===this.x&&t.y===this.y}nearEquals(t,s){return t.x.toFixed(s)===this.x.toFixed(s)&&t.y.toFixed(s)===this.y.toFixed(s)}lerp(t,s){return null===t?(this.x-=this.x*s,this.y-=this.y*s):(this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s),this}}class r{constructor(t={}){this.lock=t.lock||!1,this.neverlock=!1,this.isSpace=t.isSpace||!1,this.main=t.main||null,this.isUI=t.isUI||!1,this.group=t.group||null,this.isListen=!1,this.top=0,this.ytop=0,this.dx=t.dx||0,this.isSelectable=void 0!==t.selectable&&t.selectable,this.unselectable=void 0!==t.unselect?t.unselect:this.isSelectable,this.ontop=!!t.ontop&&t.ontop,this.css=this.main?this.main.css:h.css,this.colors=h.defineColor(t,this.main?this.group?this.group.colors:this.main.colors:h.colors),this.overEffect=this.colors.showOver,this.svgs=h.svgs,this.zone={x:0,y:0,w:0,h:0,d:0},this.local=(new n).neg(),this.isCanvasOnly=!1,this.isSelect=!1,this.p=void 0!==t.p?t.p:h.size.p,this.w=this.isUI?this.main.size.w:h.size.w,void 0!==t.w&&(this.w=t.w),this.h=this.isUI?this.main.size.h:h.size.h,void 0!==t.h&&(this.h=t.h),this.isSpace?this.lock=!0:this.h=this.h<11?11:this.h,this.fw=t.fw||0,this.autoWidth=t.auto||!0,this.isOpen=!1,this.radius=t.radius||this.colors.radius,this.transition=t.transition||h.transition,this.isNumber=!1,this.noNeg=t.noNeg||!1,this.allEqual=t.allEqual||!1,this.mono=!1,this.isEdit=!1,this.simple=t.simple||!1,this.simple&&(this.sa=0),this.setSize(this.w),void 0!==t.sa&&(this.sa=t.sa),void 0!==t.sb&&(this.sb=t.sb),this.simple&&(this.sb=this.w-this.sa),this.sc=void 0===t.sc?47:t.sc,this.objectLink=null,this.isSend=!1,this.objectKey=null,this.txt=t.name||"",this.name=t.rename||this.txt,this.target=t.target||null,this.callback=void 0===t.callback?null:t.callback,this.endCallback=null,this.openCallback=void 0===t.openCallback?null:t.openCallback,this.closeCallback=void 0===t.closeCallback?null:t.closeCallback,null===this.callback&&this.isUI&&null!==this.main.callback&&(this.callback=this.group?this.group.callback:this.main.callback),this.c=[],this.s=[],this.useFlex=!!this.isUI&&this.main.useFlex;let s=this.useFlex?"display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;":"float:left;";this.c[0]=h.dom("div",this.css.basic+s+"position:relative; height:20px;"),this.s[0]=this.c[0].style,this.margin=this.colors.sy,this.mtop=0;let i=h.isDivid(this.margin);if(this.isUI&&this.margin&&(this.s[0].boxSizing="content-box",i?(this.mtop=.5*this.margin,this.s[0].borderTop=this.mtop+"px solid transparent",this.s[0].borderBottom=this.mtop+"px solid transparent"):this.s[0].borderBottom=this.margin+"px solid transparent"),this.simple||(this.c[1]=h.dom("div",this.css.txt+this.css.middle),this.s[1]=this.c[1].style,this.c[1].textContent=this.name,this.s[1].color=this.lock?this.colors.titleoff:this.colors.title),t.pos){this.s[0].position="absolute";for(let s in t.pos)this.s[0][s]=t.pos[s];this.mono=!0}t.css&&(this.s[0].cssText=t.css)}init(){this.ytop=this.top+this.mtop,this.zone.h=this.h+this.margin,this.zone.w=this.w;let t=this.s,s=this.c;t[0].height=this.h+"px",this.isUI&&(t[0].background=this.colors.background),!this.autoWidth&&this.useFlex?(t[0].flex="1 0 auto",t[0].minWidth=this.minw+"px",t[0].textAlign="center"):this.isUI&&(t[0].width="100%"),void 0!==s[1]&&this.autoWidth&&(t[1]=s[1].style,t[1].top="1px",t[1].height=this.h-2+"px");let e=h.frag;for(let i=1,h=s.length;i!==h;i++)void 0!==s[i]&&(e.appendChild(s[i]),t[i]=s[i].style);let o=null!==this.target?this.target:this.isUI?this.main.inner:document.body;this.ontop?o.insertAdjacentElement("afterbegin",s[0]):o.appendChild(s[0]),s[0].appendChild(e),this.rSize(),this.isUI||(this.c[0].style.pointerEvents="auto",i.add(this))}addTransition(){this.baseH&&this.transition&&this.isUI&&(this.c[0].style.transition="height "+this.transition+"s ease-out")}dom(t,s,i,e,o){return h.dom(t,s,i,e,o)}setSvg(t,s,i,e,o){h.setSvg(t,s,i,e,o)}setCss(t,s){h.setCss(t,s)}clamp(t,s,i){return h.clamp(t,s,i)}getColorRing(){return h.colorRing||h.makeColorRing(),h.clone(h.colorRing)}getJoystick(t){return h["joystick_"+t]||h.makeJoystick(t),h.clone(h["joystick_"+t])}getCircular(t){return h.circular||h.makeCircular(t),h.clone(h.circular)}getKnob(t){return h.knob||h.makeKnob(t),h.clone(h.knob)}getPad2d(t){return h.pad2d||h.makePad(t),h.clone(h.pad2d)}cursor(t){i.cursor(t)}update(){}reset(){}content(){return this.c[0]}getDom(){return this.c[0]}uiout(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.background)}uiover(){this.lock||this.overEffect&&this.s&&(this.s[0].background=this.colors.backgroundOver)}rename(t){void 0!==this.c[1]&&(this.c[1].textContent=t)}listen(){return this.isListen=i.addListen(this),this}listening(){if(null===this.objectLink)return;if(this.isSend)return;if(this.isEdit)return;return this.setValue(this.objectLink[this.objectKey])}setValue(t){const s=this.value;this.isNumber?this.value=this.numValue(t):this.value=t,this.update();let i=!1;return s!==this.value&&(i=!0),i}onChange(t){if(!this.isSpace)return this.callback=t||null,this}onFinishChange(t){if(!this.isSpace)return this.callback=null,this.endCallback=t,this}onOpen(t){return this.openCallback=t,this}onClose(t){return this.closeCallback=t,this}send(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.isSend=!0,null!==this.objectLink&&(this.objectLink[this.objectKey]=t),this.callback&&this.callback(t,this.objectKey),this.isSend=!1}sendEnd(t){(t=t||this.value)instanceof Array&&1===t.length&&(t=t[0]),this.endCallback&&this.endCallback(t),null!==this.objectLink&&(this.objectLink[this.objectKey]=t)}dispose(){this.isListen&&i.removeListen(this),h.clear(this.c[0]),null!==this.target?null!==this.group?this.group.clearOne(this):this.target.removeChild(this.c[0]):this.isUI?this.main.clearOne(this):document.body.removeChild(this.c[0]),this.isUI||i.remove(this),this.c=null,this.s=null,this.callback=null,this.target=null,this.isListen=!1}clear(){}getWidth(){let t=i.getWidth(this);t&&(this.w=t)}setSize(t){if(this.autoWidth)if(this.w=t,this.simple)this.sb=this.w-this.sa;else{let t=this.w*(this.p/100);this.sa=Math.floor(t+8),this.sb=Math.floor(this.w-t-16)}}rSize(){this.autoWidth&&(this.isUI||(this.s[0].width=this.w+"px"),this.simple||(this.s[1].width=this.sa+"px"))}setTypeNumber(t){let s;switch(this.isNumber=!0,this.value=0,void 0!==t.value&&("string"==typeof t.value?this.value=1*t.value:this.value=t.value),this.min=void 0===t.min?-1/0:t.min,this.max=void 0===t.max?1/0:t.max,this.precision=void 0===t.precision?2:t.precision,this.precision){case 0:s=1;break;case 1:s=.1;break;case 2:s=.01;break;case 3:s=.001;break;case 4:s=1e-4;break;case 5:s=1e-5;break;case 6:s=1e-6}this.step=void 0===t.step?s:t.step,this.range=this.max-this.min,this.value=this.numValue(this.value)}numValue(t){return this.noNeg&&(t=Math.abs(t)),1*Math.min(this.max,Math.max(this.min,t)).toFixed(this.precision)}handleEvent(t){if(!this.lock)return this.neverlock&&(i.lock=!1),this[t.type]?this[t.type](t):console.error(t.type,"this type of event no existe !")}wheel(t){return!1}mousedown(t){return!1}mousemove(t){return!1}mouseup(t){return!1}keydown(t){return!1}keyup(t){return!1}setReferency(t,s){this.objectLink=t,this.objectKey=s}display(t=!1){this.s[0].visibility=t?"visible":"hidden"}open(){this.isOpen||(this.isOpen=!0,i.needResize=!0,this.openCallback&&this.openCallback())}close(){this.isOpen&&(this.isOpen=!1,i.needResize=!0,this.closeCallback&&this.closeCallback())}needZone(){i.needReZone=!0}rezone(){i.needReZone=!0}select(){}unselect(){}setInput(t){i.setInput(t,this)}upInput(t,s){return i.upInput(t,s)}selected(t){this.isSelect=t||!1}}class l extends r{constructor(t={}){super(t),this.value=t.value||!1,this.model=void 0!==t.mode?t.mode:0,this.onName=t.rename||this.txt,t.onName&&(t.onname=t.onName),t.onname&&(this.onName=t.onname),this.inh=t.inh||Math.floor(.8*this.h),this.inw=t.inw||36;let s=this.colors;if(0===this.model){let t=Math.floor(.5*this.h)-.5*(this.inh-2);this.c[2]=this.dom("div",this.css.basic+"background:"+s.inputBg+"; height:"+(this.inh-2)+"px; width:"+this.inw+"px; top:"+t+"px; border-radius:10px; border:2px solid "+s.back),this.c[3]=this.dom("div",this.css.basic+"height:"+(this.inh-6)+"px; width:16px; top:"+(t+2)+"px; border-radius:10px; background:"+s.button+";")}else this.p=0,void 0!==this.c[1]&&(this.c[1].textContent=""),this.c[2]=this.dom("div",this.css.txt+this.css.button+"top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.borderSize+"px solid "+s.border+"; border-radius:"+this.radius+"px;");this.stat=-1,this.init(),this.update()}mousedown(t){return this.value=!this.value,this.update(!0),this.mousemove(t)}mousemove(t){return this.cursor("pointer"),this.mode(!0)}reset(){return this.cursor(),this.mode()}mode(t){let s,i=!1,e=this.colors,h=this.s,o=this.value;if(s=t?o?4:3:o?2:1,this.stat!==s){if(this.stat=s,0!==this.model){switch(s){case 1:h[2].color=e.text,h[2].background=e.button;break;case 2:h[2].color=e.textSelect,h[2].background=e.select;break;case 3:h[2].color=e.textOver,h[2].background=e.overoff;break;case 4:h[2].color=e.textOver,h[2].background=e.over}this.c[2].innerHTML=o?this.onName:this.name}else{switch(s){case 1:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.button;break;case 2:h[2].background=h[2].borderColor=e.back,h[3].background=e.textOver;break;case 3:h[2].background=h[2].borderColor=e.back,h[3].background=e.overoff;break;case 4:h[2].background=h[2].borderColor=e.backoff,h[3].background=e.textSelect}h[3].marginLeft=o?"17px":"2px",this.c[1].textContent=o?this.onName:this.name}i=!0}return i}update(t){this.mode(),t&&this.send()}rSize(){super.rSize();let t=this.s,s=this.w-10-this.inw;0===this.model?(t[2].left=s+"px",t[3].left=s+"px"):(t[2].left=this.sa+"px",t[2].width=this.sb+"px")}}class a extends r{constructor(t={}){super(t),this.value="",void 0!==t.value&&(this.value=t.value),this.values=t.value||this.txt,t.values&&(this.values=t.values),t.values||t.value||(this.txt=""),this.onName=t.onName||null,this.on=!1,this.bw=t.forceWidth||0,t.bw&&(this.bw=t.bw),this.space=t.space||3,"string"==typeof this.values&&(this.values=[this.values]),this.isDown=!1,this.neverlock=!0,this.res=0,this.lng=this.values.length,this.tmp=[],this.stat=[];let s,i=this.colors;for(let t=0;te[i][0]&&s.x0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.text,this.setSvg(this.c[3],"stroke",s,1);break;case 1:this.s[2].color=i.textOver,this.setSvg(this.c[3],"stroke",i.backoff,0),s=this.model>0?h.pack(h.lerpColor(h.unpack(h.ColorLuma(i.text,-.75)),h.unpack(i.text),this.percent)):i.textOver,this.setSvg(this.c[3],"stroke",s,1)}return this.cmode=t,!0}reset(){this.isDown=!1}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"circular"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;if(s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=s.angle()-this.pi90,this.r=(this.r%this.twoPi+this.twoPi)%this.twoPi,null!==this.oldr){let t=this.r-this.oldr;this.r=Math.abs(t)>Math.PI?this.oldr:this.r,t>6&&(this.r=0),t<-6&&(this.r=this.twoPi)}let i=1/this.twoPi,e=this.r*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=~~(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("circular"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:sMath.PI?1:0)+" 1 "+i+","+e}update(t){if(this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range,this.setSvg(this.c[3],"d",this.makePath(),1),this.model>0){let t=this.colors,s=h.pack(h.lerpColor(h.unpack(h.ColorLuma(t.text,-.75)),h.unpack(t.text),this.percent));this.setSvg(this.c[3],"stroke",s,1)}t&&this.send()}}class d extends r{constructor(t={}){super(t),this.ctype=t.ctype||"hex",this.wfixe=256,this.cw=this.sb>256?256:this.sb,null!=t.cw&&(this.cw=t.cw),this.side=t.side||"down",this.up="down"===this.side?0:1,this.baseH=this.h,this.offset=new n,this.decal=new n,this.pp=new n;let s=this.colors;this.c[2]=this.dom("div",`${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${s.borderSize}px solid ${s.border};`),this.c[0].style.display="block",this.c[3]=this.getColorRing(),this.c[3].style.visibility="hidden",this.hsl=null,this.value="#ffffff",void 0!==t.value&&(t.value instanceof Array?this.value=h.rgbToHex(t.value):isNaN(t.value)?this.value=t.value:this.value=h.hexToHtml(t.value)),this.bcolor=null,this.isDown=!1,this.fistDown=!1,this.notext=t.notext||!1,this.tr=98,this.tsl=Math.sqrt(3)*this.tr,this.hue=0,this.d=256,this.init(),this.setColor(this.value),void 0!==t.open&&this.open()}testZone(t,s){let i=this.local;return-1===i.x&&-1===i.y?"":this.up&&this.isOpen?i.y>this.wfixe?"title":"color":i.ythis.tr)e=(c+u.pi90)/u.TwoPI,this.hue=(e+1)%1,this.setHSL([(e+1)%1,this.hsl[1],this.hsl[2]]);else{l=s.x*this.ratio,a=s.y*this.ratio;let t=this.hue*u.TwoPI+u.PI;t<0&&(t+=2*u.PI),r=Math.atan2(-a,l),r<0&&(r+=2*u.PI);let i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,h=.5*this.tr,c=Math.tan(e)*h,d=Math.sqrt(l*l+a*a),p=Math.sqrt(h*h+c*c);if(d>p){let s=Math.tan(e)*d,o=Math.atan(s/p);o>u.pi60?o=u.pi60:o<-u.pi60&&(o=-u.pi60),r+=o-e,i=(r+u.pi90+u.TwoPI+t)%u.TwoPI,e=i%(2/3*u.PI)-u.pi60,c=Math.tan(e)*h,d=p=Math.sqrt(h*h+c*c)}n=Math.sin(i)*d/this.tsl+.5;let m=1-2*Math.abs(n-.5);o=(Math.cos(i)*d+this.tr/2)/(1.5*this.tr)/m,o=u.clamp(o,0,1),this.setHSL([this.hsl[0],o,n])}}setHeight(){this.h=this.isOpen?this.wfixe+this.baseH+5:this.baseH,this.s[0].height=this.h+"px",this.zone.h=this.h}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(){super.open(),this.setHeight(),this.up&&(this.zone.y-=this.wfixe+5);let t=this.h-this.baseH;this.s[3].visibility="visible",this.parentHeight(t)}close(){super.close(),this.up&&(this.zone.y+=this.wfixe+5);let t=this.h-this.baseH;this.setHeight(),this.s[3].visibility="hidden",this.parentHeight(-t)}update(t){let s=h.rgbToHex(h.hslToRgb([this.hsl[0],1,.5]));this.moveMarkers(),this.value=this.bcolor,this.setSvg(this.c[3],"fill",s,2,0),this.s[2].background=this.bcolor,this.notext||(this.c[2].textContent=h.htmlToHex(this.bcolor)),this.invert=h.findDeepInver(this.rgb),this.s[2].color=this.invert?"#fff":"#000",t&&("array"===this.ctype&&this.send(this.rgb),"rgb"===this.ctype&&this.send(h.htmlRgb(this.rgb)),"hex"===this.ctype&&this.send(h.htmlToHex(this.value)),"html"===this.ctype&&this.send())}setValue(t){t instanceof Array?this.value=h.rgbToHex(t):isNaN(t)?this.value=t:this.value=h.hexToHtml(t),this.setColor(this.value),this.update()}setColor(t){let s=h.unpack(t);return this.bcolor!==t&&s&&(this.bcolor=t,this.rgb=s,this.hsl=h.rgbToHsl(this.rgb),this.hue=this.hsl[0],this.update()),this}setHSL(t){return this.hsl=t,this.rgb=h.hslToRgb(t),this.bcolor=h.rgbToHex(this.rgb),this.update(!0),this}moveMarkers(){let t=this.pp,s=h;this.invert;let i=this.hsl[0]*s.TwoPI,e=2/3*s.PI,o=this.tr,n=this.hsl[0],r=this.hsl[1],l=this.hsl[2],a=(i-s.pi90)*s.todeg;n=-i+s.pi90;let c=Math.cos(n)*o,d=-Math.sin(n)*o,u=Math.cos(n-e)*o,p=-Math.sin(n-e)*o,m=Math.cos(n+e)*o,g=-Math.sin(n+e)*o,x=(u+m)/2,v=(p+g)/2;i=(1-2*Math.abs(l-.5))*r;let f=u+(m-u)*l+(c-x)*i,b=p+(g-p)*l+(d-v)*i;t.set(f,b).addScalar(128),this.setSvg(this.c[3],"transform","rotate("+a+" )",2),this.setSvg(this.c[3],"cx",t.x,3),this.setSvg(this.c[3],"cy",t.y,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",2,3),this.setSvg(this.c[3],"stroke",this.invert?"#fff":"#000",3),this.setSvg(this.c[3],"fill",this.bcolor,3)}rSize(){super.rSize();let t=this.s;t[2].width=this.sb+"px",t[2].left=this.sa+"px",this.cw=this.sb>256?256:this.sb,this.rSizeColor(this.cw),this.decal.x=Math.floor(.5*(this.w-this.wfixe))}rSizeColor(t){if(t===this.wfixe)return;this.wfixe=t;let s=this.s;this.decal.y="up"===this.side?2:this.baseH+2,this.mid=Math.floor(.5*this.wfixe),this.setSvg(this.c[3],"viewBox","0 0 "+this.wfixe+" "+this.wfixe),s[3].width=this.wfixe+"px",s[3].height=this.wfixe+"px",s[3].top=this.decal.y+"px",this.ratio=256/this.wfixe,this.square=1/(this.wfixe/256*60),this.setHeight()}}class u extends r{constructor(t={}){super(t),this.round=Math.round,this.baseH=this.h,this.hplus=t.hplus||50,this.res=t.res||40,this.l=1,this.precision=t.precision||0,this.custom=t.custom||!1,this.names=t.names||["FPS","MS"];let s=t.cc||["220,220,220","255,255,0"];this.adding=t.adding||!1,this.range=t.range||[165,100,100],this.alpha=t.alpha||.25,this.values=[],this.points=[],this.textDisplay=[],this.custom||(this.now=i.getTime(),this.startTime=0,this.prevTime=0,this.frames=0,this.ms=0,this.fps=0,this.mem=0,this.mm=0,this.isMem=!(!self.performance||!self.performance.memory),this.isMem&&(this.names.push("MEM"),s.push("0,255,255")),this.txt=t.name||"Fps");let e=Math.floor(.5*this.h)-3;const h=this.colors;this.c[1].textContent=this.txt,this.c[0].style.cursor="pointer",this.c[0].style.pointerEvents="auto";let o="display:none; left:10px; top:"+this.h+"px; height:"+(this.hplus-8)+"px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid "+h.border+";";0!==this.radius&&(o+="border-radius:"+this.radius+"px;"),this.c[2]=this.dom("path",this.css.basic+o,{}),this.c[2].setAttribute("viewBox","0 0 "+this.res+" 50"),this.c[2].setAttribute("height","100%"),this.c[2].setAttribute("width","100%"),this.c[2].setAttribute("preserveAspectRatio","none"),this.c[3]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; left:0; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.c[4]=this.dom("div",this.css.txt+"position:absolute; left:10px; top:"+(this.h+2)+"px; display:none; width:100%; text-align:center;"),t.bottomLine&&(this.c[4]=this.dom("div",this.css.basic+"width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);")),this.isShow=!1;let n=this.s;n[1].lineHeight=this.h-4,n[1].color=h.text,0!==this.radius&&(n[0].borderRadius=this.radius+"px"),"none"!==this.colors.gborder&&(n[0].border="1px solid "+h.gborder);let r=0;for(r=0;r "+this.names[r]+" ")}for(r=this.names.length;r--;)this.dom("path",null,{fill:"rgba("+s[r]+","+this.alpha+")","stroke-width":1,stroke:"rgba("+s[r]+",1)","vector-effect":"non-scaling-stroke"},this.c[2]);this.init()}mousedown(t){this.isShow?this.close():this.open()}tick(t){this.values=t,this.isShow&&(this.drawGraph(),this.upText())}makePath(t){let s="";s+="M -1 50";for(let i=0;i";this.c[4].innerHTML=i}drawGraph(){let t,s=this.c[2],i=this.names.length,e=0,h=0;for(;i--;)t=this.adding?(this.values[h]+e)*this.range[h]:this.values[h]*this.range[h],this.points[h].shift(),this.points[h].push(50-t),this.setSvg(s,"d",this.makePath(this.points[h]),i+1),e+=this.values[h],h++}open(){super.open(),this.h=this.hplus+this.baseH,this.setSvg(this.c[3],"d",this.svgs.g2),null!==this.group?this.group.calc(this.hplus):this.isUI&&this.main.calc(this.hplus),this.s[0].height=this.h+"px",this.s[2].display="block",this.s[4].display="block",this.isShow=!0,this.custom||i.addListen(this)}close(){super.close(),this.h=this.baseH,this.setSvg(this.c[3],"d",this.svgs.g1),null!==this.group?this.group.calc(-this.hplus):this.isUI&&this.main.calc(-this.hplus),this.s[0].height=this.h+"px",this.s[2].display="none",this.s[4].display="none",this.isShow=!1,this.custom||i.removeListen(this),this.c[4].innerHTML=""}begin(){this.startTime=this.now()}end(){let t=this.now();if(this.ms=t-this.startTime,this.frames++,t>this.prevTime+1e3&&(this.fps=this.round(1e3*this.frames/(t-this.prevTime)),this.prevTime=t,this.frames=0,this.isMem)){let t=performance.memory.usedJSHeapSize,s=performance.memory.jsHeapSizeLimit;this.mem=this.round(954e-9*t),this.mm=t/s}return this.values=[this.fps,this.ms,this.mm],this.drawGraph(),this.upText([this.fps,this.ms,this.mem]),t}listening(){this.custom||(this.startTime=this.end())}rSize(){let t=this.s,s=this.w;t[3].left=this.sa+this.sb-6+"px",t[0].width=s+"px",t[1].width=s+"px",t[2].left="10px",t[2].width=s-20+"px",t[4].width=s-20+"px"}}class p extends r{constructor(t={}){super(t),this.value=void 0!==t.value?t.value:[0,0,0],this.lng=this.value.length,this.precision=void 0!==t.precision?t.precision:2,this.multiplicator=t.multiplicator||1,this.neg=t.neg||!1,this.line=void 0===t.line||t.line,this.autoWidth=void 0===t.autoWidth||t.autoWidth,this.isNumber=!1,this.isDown=!1,this.h=t.h||138,this.rh=this.h-10,this.top=0,this.c[0].style.width=this.w+"px",void 0!==this.c[1]&&(this.c[1].style.width=this.w+"px",this.autoWidth||(this.c[1].style.width="100%",this.c[1].style.justifyContent="center"),this.top=10,this.h+=10),this.gh=this.rh-28,this.gw=this.w-28,this.c[2]=this.dom("div",this.css.txt+"display:block; text-align:center; padding:0px 0px; top:"+(this.h-20)+"px; left:14px; width:"+this.gw+"px; color:"+this.colors.text),this.c[2].innerHTML=this.valueToHtml();let s=this.dom("svg",this.css.basic,{viewBox:"0 0 "+this.w+" "+this.rh,width:this.w,height:this.rh,preserveAspectRatio:"none"});this.setCss(s,{width:this.w,height:this.rh,left:0,top:this.top}),this.dom("path","",{d:"",stroke:this.colors.text,"stroke-width":2,fill:"none","stroke-linecap":"butt"},s),this.dom("rect","",{x:10,y:10,width:this.gw+8,height:this.gh+8,stroke:"rgba(0,0,0,0.3)","stroke-width":1,fill:"none"},s),this.iw=(this.gw-4*(this.lng-1))/this.lng;let i=[];this.cMode=[],this.v=[];for(let t=0;t',e="width:"+100/this.lng+"%;";for(;t--;)s===this.lng-1?i+=""+this.value[s]+"":i+=""+this.value[s]+"",s++;return i}updateSVG(){this.line&&this.setSvg(this.c[3],"d",this.makePath(),0);for(let t=0;tthis.top&&s.ye[i][0]&&s.xthis.distance){let t=Math.atan2(this.tmp.x,this.tmp.y);this.tmp.x=Math.sin(t)*this.distance,this.tmp.y=Math.cos(t)*this.distance}this.pos.copy(this.tmp).divideScalar(this.distance).negate(),this.update()}setValue(t){void 0===t&&(t=[0,0]),this.pos.set(t[0]||0,t[1]||0),this.updateSVG()}update(t){void 0===t&&(t=!0),null!==this.interval&&(this.isDown||(this.pos.lerp(null,.3),this.pos.x=Math.abs(this.pos.x)<.01?0:this.pos.x,this.pos.y=Math.abs(this.pos.y)<.01?0:this.pos.y,this.isUI&&this.main.isCanvas&&this.main.draw())),this.updateSVG(),t&&this.send(),this.pos.isZero()&&this.stopInterval()}updateSVG(){let t=.5*this.diam- -this.pos.x*this.distance,s=.5*this.diam- -this.pos.y*this.distance;if(0===this.model){let i=t+5*this.pos.x+5,e=s+5*this.pos.y+10;this.setSvg(this.c[3],"cx",i*this.ratio,3),this.setSvg(this.c[3],"cy",e*this.ratio,3)}else this.setSvg(this.c[3],"cx",t*this.ratio,3),this.setSvg(this.c[3],"cy",s*this.ratio,3);this.setSvg(this.c[3],"cx",t*this.ratio,4),this.setSvg(this.c[3],"cy",s*this.ratio,4),this.value[0]=1*(this.pos.x*this.multiplicator).toFixed(this.precision),this.value[1]=1*(this.pos.y*this.multiplicator).toFixed(this.precision),this.haveText&&(this.c[2].textContent=this.value)}clear(){this.stopInterval(),super.clear()}}class v extends r{constructor(t={}){super(t),this.isCyclic=t.cyclic||!1,this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.autoWidth=!1,this.setTypeNumber(t),this.minw=this.w,this.diam=t.diam||this.w,this.mPI=.8*Math.PI,this.toDeg=180/Math.PI,this.cirRange=2*this.mPI,this.offset=new n,this.h=t.h||this.w+10,this.c[0].style.width=this.w+"px",this.c[0].style.display="block",void 0!==this.c[1]&&(this.c[1].style.width="100%",this.c[1].style.justifyContent="center",this.top=10,this.h+=10),this.percent=0,this.cmode=0;let s=this.colors;this.c[2]=this.dom("div",this.css.txt+"justify-content:center; top:"+(this.h-20)+"px; width:100%; color:"+s.text),this.c[3]=this.getKnob(),this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1),this.setSvg(this.c[3],"stroke",s.text,3),this.setSvg(this.c[3],"d",this.makeGrad(),3),this.setSvg(this.c[3],"viewBox","0 0 "+this.diam+" "+this.diam),this.setCss(this.c[3],{width:this.diam,height:this.diam,left:0,top:this.top}),this.model>0&&(h.dom("path","",{d:"",stroke:s.text,"stroke-width":2,fill:"none","stroke-linecap":"round"},this.c[3]),2==this.model&&(h.addSVGGlowEffect(),this.setSvg(this.c[3],"style",'filter: url("#UILGlow");',4))),this.r=0,this.init(),this.update()}mode(t){let s=this.colors;if(this.cmode===t)return!1;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.button,0),this.setSvg(this.c[3],"stroke",s.text,1);break;case 1:this.s[2].color=s.textOver,this.setSvg(this.c[3],"fill",s.select,0),this.setSvg(this.c[3],"stroke",s.textOver,1)}return this.cmode=t,!0}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.y<=this.c[1].offsetHeight?"title":s.y>this.h-this.c[2].offsetHeight?"text":"knob"}mouseup(t){return this.isDown=!1,this.sendEnd(),this.mode(0)}mousedown(t){return this.isDown=!0,this.old=this.value,this.oldr=null,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=this.offset;s.x=.5*this.w-(t.clientX-this.zone.x),s.y=.5*this.diam-(t.clientY-this.zone.y-this.ytop),this.r=-Math.atan2(s.x,s.y),null!==this.oldr&&(this.r=Math.abs(this.r-this.oldr)>Math.PI?this.oldr:this.r),this.r=this.r>this.mPI?this.mPI:this.r,this.r=this.r<-this.mPI?-this.mPI:this.r;let i=1/this.cirRange,e=(this.r+this.mPI)*i,h=this.range*e+this.min-this.old;(h>=this.step||h<=this.step)&&(h=Math.floor(h/this.step),this.value=this.numValue(this.old+h*this.step),this.update(!0),this.old=this.value,this.oldr=this.r)}wheel(t){if("knob"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s5?(s=this.range/this.step,t=(a-c)/s):(t=(a-c)/l*2,s=32);for(let c=0;c<=s;++c)i=a-t*c,e=l+44*Math.sin(i),h=l+44*Math.cos(i),o=l+40*Math.sin(i),n=l+40*Math.cos(i),r+="M"+e+" "+h+" L"+o+" "+n+" ";return r}update(t){this.c[2].textContent=this.value,this.percent=(this.value-this.min)/this.range;let s=Math.PI+this.mPI,i=this.percent*this.cirRange-this.mPI,e=Math.sin(i),o=Math.cos(i),n=25*e+64,r=-25*o+64,l=20*e+64,a=-20*o+64;if(this.setSvg(this.c[3],"d","M "+n+" "+r+" L "+l+" "+a,1),this.model>0){let t=36*Math.sin(s)+64,n=36*Math.cos(s)+64,r=36*e+64,l=-36*o+64,a=i<=Math.PI-this.mPI?0:1;this.setSvg(this.c[3],"d","M "+t+","+n+" A 36,36 1 "+a+" 1 "+r+","+l,4);let c=h.pack(h.lerpColor(h.unpack(h.ColorLuma(this.colors.text,-.75)),h.unpack(this.colors.text),this.percent));this.setSvg(this.c[3],"stroke",c,4)}t&&this.send()}}class f extends r{constructor(t={}){super(t),this.hideCurrent=!1,this.path=t.path||"",this.format=t.format||"",this.isWithImage=""!==this.path,this.preLoadComplete=!1,this.tmpImage={},this.tmpUrl=[],this.m=void 0!==t.m?t.m:5;let s=t.align||"left",i=t.scrollSize||10;this.ss=i+1,this.sMode=0,this.tMode=0,this.listOnly=t.listOnly||!1,this.staticTop=t.staticTop||!1,this.isSelectable=this.listOnly,void 0!==t.select&&(t.selectable=t.select),void 0!==t.selectable&&(this.isSelectable=t.selectable),""===this.txt&&(this.p=0);let e=Math.floor(.5*this.h)-3,h=this.colors;if(this.c[2]=this.dom("div",this.css.basic+"top:0; display:none; border-radius:"+this.radius+"px;"),this.c[3]=this.dom("div",this.css.item+"padding:0px "+this.m+"px; margin-bottom:0px; position:absolute; justify-content:"+s+"; text-align:"+s+"; line-height:"+(this.h-4)+"px; top:1px; background:"+h.button+"; height:"+(this.h-2)+"px; border:1px solid "+h.border+"; border-radius:"+this.radius+"px;"),this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:6px; height:6px; top:"+e+"px;",{d:this.svgs.g1,fill:h.text,stroke:"none"}),this.scrollerBack=this.dom("div",this.css.basic+"right:0px; width:"+i+"px; background:"+h.back+"; display:none;"),this.scroller=this.dom("div",this.css.basic+"right:"+.5*(i-.25*i)+"px; width:"+.25*i+"px; background:"+h.text+"; display:none; "),this.c[3].style.color=h.text,this.list=[],this.refObject=null,t.list)if(t.list instanceof Array)this.list=t.list;else if(t.list instanceof Object){this.refObject=t.list;for(let t in this.refObject)this.list.push(t)}this.items=[],this.prevName="",this.tmpId=0,this.baseH=this.h,this.itemHeight=t.itemHeight||this.h,this.full=t.full||!1,this.py=0,this.ww=this.sb,this.scroll=!1,this.isDown=!1,this.current=null,this.side=t.side||"down",this.up="down"===this.side?0:1,this.up?(this.c[2].style.top="auto",this.c[3].style.top="auto",this.c[4].style.top="auto",this.c[2].style.bottom=this.h-2+"px",this.c[3].style.bottom="1px",this.c[4].style.bottom=e+"px"):this.c[2].style.top=this.baseH+"px",this.listIn=this.dom("div",this.css.basic+"left:0; top:0; width:100%; background:none;"),this.listIn.name="list",this.topList=0,this.c[2].appendChild(this.listIn),this.c[2].appendChild(this.scrollerBack),this.c[2].appendChild(this.scroller),void 0!==t.value?isNaN(t.value)?this.value=t.value:this.value=this.list[t.value]:this.value=this.list[0],this.isOpenOnStart=t.open||!1,this.listOnly&&(this.baseH=5,this.c[3].style.display="none",this.c[4].style.display="none",this.c[2].style.top=this.baseH+"px",this.isOpenOnStart=!0),this.miniCanvas=t.miniCanvas||!1,this.canvasBg=t.canvasBg||"rgba(0,0,0,0)",this.imageSize=t.imageSize||[20,20],this.drag=t.drag||!1,this.dragout=t.dragout||!1,this.dragstart=t.dragstart||null,this.dragend=t.dragend||null,this.setList(this.list),this.init(),this.isWithImage&&this.preloadImage(),this.isOpenOnStart&&this.open(!0),this.baseH+=this.mtop}preloadImage(){this.preLoadComplete=!1,this.tmpImage={};for(let t=0;tthis.h-this.baseH)return"title";if(this.scroll&&s.x>this.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}else{if(s.ythis.sa+this.sb-this.ss)return"scroll";if(s.x>this.sa)return this.testItems(s.y-this.baseH)}}return""}testItems(t){let s,i,e,h="",o=this.items,n=o.length;for(;n--;)if(s=o[n],i=s.posy+this.topList,e=s.posy+this.itemHeight+1+this.topList,t>=i&&t<=e)return h="item"+n,this.modeItem(0),this.current=s,this.modeItem(1),h;return h}modeItem(t){if(!this.current)return;this.current.select&&0===t&&(t=2);let s=this.colors;switch(t){case 0:this.current.style.background=s.back,this.current.style.color=s.text;break;case 1:this.current.style.background=s.over,this.current.style.color=s.textOver;break;case 2:this.current.style.background=s.select,this.current.style.color=s.textSelect}}unSelected(){this.current&&(this.modeItem(0),this.current=null)}selected(){this.current&&(this.resetItems(),this.modeItem(2),this.current.select=!0)}resetItems(){let t=this.items.length;for(;t--;)this.items[t].select=!1,this.items[t].style.background=this.colors.back,this.items[t].style.color=this.colors.text}hideActive(){this.hideCurrent&&(this.current&&(this.tmpId=this.current.id),this.resetHide())}resetHide(){console.log(this.tmpId);let t=this.items.length;for(;t--;)t===this.tmpId?(this.items[t].style.height="0px",this.items[t].posy=-1):(this.items[t].style.height=this.itemHeight+"px",this.items[t].posy=(this.itemHeight+1)*(t-1))}mouseup(t){this.isDown=!1}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s?(this.isDown=!0,this.mousemove(t)):"title"===s?(this.modeTitle(2),this.listOnly||(this.hideActive(),this.isOpen?this.close():this.open())):this.current&&(this.value=this.list[this.current.id],this.isSelectable&&this.selected(),this.send(this.value),this.listOnly||(this.close(),this.setTopItem())),!0)}mousemove(t){let s=!1,i=this.testZone(t);if(!i)return s;if("title"===i)this.unSelected(),this.modeTitle(1),this.cursor("pointer");else if("scroll"===i){if(this.cursor("s-resize"),this.modeScroll(1),this.isDown){this.modeScroll(2);let s=this.zone.y+this.baseH-2;this.update(t.clientY-s-.5*this.sh)}}else this.modeTitle(0),this.modeScroll(0),this.cursor("pointer");return i!==this.prevName&&(s=!0),this.prevName=i,s}wheel(t){return"title"!==this.testZone(t)&&(this.py+=10*t.delta,this.update(this.py),!0)}reset(){this.prevName="",this.unSelected(),this.modeTitle(0),this.modeScroll(0)}modeScroll(t){if(t===this.sMode)return;let s=this.scroller.style,i=this.colors;switch(t){case 0:s.background=i.text;break;case 1:case 2:s.background=i.select}this.sMode=t}modeTitle(t){if(t===this.tMode)return;let s=this.s,i=this.colors;switch(t){case 0:s[3].color=i.text,s[3].background=i.button;break;case 1:s[3].color=i.textOver,s[3].background=i.overoff;break;case 2:s[3].color=i.textSelect,s[3].background=i.overoff}this.tMode=t}clearList(){for(;this.listIn.children.length;)this.listIn.removeChild(this.listIn.lastChild);this.items=[]}setList(t){this.clearList(),this.list=t,this.length=this.list.length;let s,e,h=this.hideCurrent?this.length-1:this.length;this.maxItem=this.full?h:5,this.maxItem=hthis.maxHeight&&(this.ww=this.sb-this.ss,this.scroll=!0),this.miniCanvas&&(this.tmpCanvas=document.createElement("canvas"),this.tmpCanvas.width=this.imageSize[0],this.tmpCanvas.height=this.imageSize[1],this.tmpCtx=this.tmpCanvas.getContext("2d"),this.tmpCtx.fillStyle=this.canvasBg,this.tmpCtx.fillRect(0,0,this.imageSize[0],this.imageSize[1]));for(let t=0;tthis.range?this.range:t,this.topList=-Math.floor(t/this.ratio),this.listIn.style.top=this.topList+"px",this.scroller.style.top=Math.floor(t)+"px",this.py=t)}parentHeight(t){null!==this.group?this.group.calc(t):this.isUI&&this.main.calc(t)}open(t){super.open(),this.update(0),this.h=this.maxHeight+this.baseH+5,this.scroll?(this.scroller.style.display="block",this.scrollerBack.style.display="block"):(this.topList=0,this.h=this.baseH+5+this.max,this.scroller.style.display="none",this.scrollerBack.style.display="none"),this.s[0].height=this.h+"px",this.s[2].display="block",this.up?(this.zone.y-=this.h-(this.baseH-10),this.setSvg(this.c[4],"d",this.svgs.g1)):this.setSvg(this.c[4],"d",this.svgs.g2),this.rSizeContent();let s=this.h-this.baseH;this.zone.h=this.h,t||this.parentHeight(s)}close(){super.close(),this.up&&(this.zone.y+=this.h-(this.baseH-10));let t=this.h-this.baseH;this.h=this.baseH,this.s[0].height=this.h+"px",this.s[2].display="none",this.setSvg(this.c[4],"d",this.svgs.g1),this.zone.h=this.h,this.parentHeight(-t)}text(t){this.c[3].textContent=t}rSizeContent(){let t=this.length;for(;t--;)this.listIn.children[t].style.width=this.ww+"px"}rSize(){super.rSize();let t=this.s,s=this.sb,i=this.sa;void 0!==t[2]&&(t[2].width=s+"px",t[2].left=i+"px",t[3].width=s+"px",t[3].left=i+"px",t[4].left=i+s-15+"px",this.ww=s,this.max>this.maxHeight&&(this.ww=s-this.ss),this.isOpen&&this.rSizeContent())}}class b extends r{constructor(t={}){super(t),this.setTypeNumber(t),this.allway=t.allway||!1,this.isDown=!1,this.value=[0],this.multy=1,this.invmulty=1,this.isSingle=!0,this.isAngle=!1,this.isVector=!1,t.isAngle&&(this.isAngle=!0,this.multy=h.torad,this.invmulty=h.todeg),this.isDrag=t.drag||!1,void 0!==t.value&&(isNaN(t.value)?t.value instanceof Array?(this.value=t.value,this.isSingle=!1):t.value instanceof Object&&(this.value=[],void 0!==t.value.x&&(this.value[0]=t.value.x),void 0!==t.value.y&&(this.value[1]=t.value.y),void 0!==t.value.z&&(this.value[2]=t.value.z),void 0!==t.value.w&&(this.value[3]=t.value.w),this.isSingle=!1,this.isVector=!0):this.value=[t.value]),this.lng=this.value.length,this.tmp=[],this.current=-1,this.prev={x:0,y:0,d:0,v:0};let s=this.colors;this.c[2]=this.dom("div",this.css.basic+" background:"+s.select+"; top:4px; width:0px; height:"+(this.h-8)+"px;"),this.cMode=[];let i=this.lng;for(;i--;)this.isAngle&&(this.value[i]=(180*this.value[i]/Math.PI).toFixed(this.precision)),this.c[3+i]=this.dom("div",this.css.txtselect+"top:1px; height:"+(this.h-2)+"px; color:"+s.text+"; background:"+s.back+"; borderColor:"+s.border+"; border-radius:"+this.radius+"px;"),t.center&&(this.c[2+i].style.textAlign="center"),this.c[3+i].textContent=this.value[i],this.c[3+i].style.color=this.colors.text,this.c[3+i].isNum=!0,this.cMode[i]=0;this.selectId=3+this.lng,this.c[this.selectId]=this.dom("div",this.css.txtselect+"position:absolute; top:2px; height:"+(this.h-4)+"px; padding:0px 0px; width:0px; color:"+s.textSelect+"; background:"+s.select+"; border:none; border-radius:0px;"),this.cursorId=4+this.lng,this.c[this.cursorId]=this.dom("div",this.css.basic+"top:2px; height:"+(this.h-4)+"px; width:0px; background:"+s.text+";"),this.init()}testZone(t){let s=this.local;if(-1===s.x&&-1===s.y)return"";let i=this.lng,e=this.tmp;for(;i--;)if(s.x>e[i][0]&&s.x 0";this.easing=t.easing||1,this.setTypeNumber(t),this.model=t.stype||0,void 0!==t.mode&&(this.model=t.mode),this.isDown=!1,this.isOver=!1,this.allway=t.allway||!1,this.isDeg=t.isDeg||!1,this.isCyclic=t.cyclic||!1,this.firstImput=!1;let s=this.colors;if(this.c[2]=this.dom("div",this.css.txtselect+"border:none; background:none; width:47px; color:"+s.text+";"),this.c[3]=this.dom("div",this.css.basic+" top:0; height:"+this.h+"px;"),this.c[4]=this.dom("div",this.css.basic+"background:"+s.back+"; top:2px; height:"+(this.h-4)+"px;"),this.c[5]=this.dom("div",this.css.basic+"left:4px; top:5px; height:"+(this.h-10)+"px; background:"+s.text+";"),this.c[2].isNum=!0,this.c[2].style.height=this.h-2+"px",this.c[2].style.lineHeight=this.h-10+"px",0!==this.model){let t=4,i=4,e=8,h=this.h-6,o=16;2===this.model&&(t=0,i=2,e=4,o=2,h=.5*(this.h-6)),3===this.model&&(this.c[5].style.visible="none"),this.c[4].style.borderRadius=t+"px",this.c[4].style.height=e+"px",this.c[4].style.top=.5*this.h-i+"px",this.c[5].style.borderRadius=.5*t+"px",this.c[5].style.height=i+"px",this.c[5].style.top=.5*this.h-.5*i+"px",this.c[6]=this.dom("div",this.css.basic+"border-radius:"+o+"px; margin-left:"+.5*-h+"px; background:"+s.text+"; left:4px; top:3px; height:"+(this.h-6)+"px; width:"+h+"px;")}this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>=this.txl?"text":s.x>=this.sa?"scroll":""}mouseup(t){this.isDown&&(this.isDown=!1)}mousedown(t){let s=this.testZone(t);return!!s&&("scroll"===s&&(this.isDown=!0,this.old=this.value,this.mousemove(t)),!0)}mousemove(t){let s=!1;if("scroll"===this.testZone(t)?(this.mode(1),this.cursor("w-resize")):this.cursor(),this.isDown){let i=(t.clientX-(this.zone.x+this.sa)-3)/this.ww;i=Math.min(1,Math.max(0,i));let e=Math.pow(i,this.easing)*this.range+this.min,h=i*this.range+this.min;this.sliderValue=this.numValue(h);let o,n=e-this.old;(n>=this.step||n<=this.step)&&(o=Math.floor(n/this.step),this.value=this.numValue(this.old+o*this.step),this.update(!0),this.old=this.value),s=!0}return s}wheel(t){if("scroll"===this.testZone(t)){let s=this.value-this.step*t.delta;return s>this.max?s=this.isCyclic?this.min:this.max:s=this.sa?"text":""}mouseup(t){if(this.editable)return!!this.isDown&&(this.isDown=!1,this.mousemove(t))}mousedown(t){if(!this.editable)return;let s=this.testZone(t);return!this.isDown&&(this.isDown=!0,"text"===s&&this.setInput(this.c[2]),this.mousemove(t))}mousemove(t){if(!this.editable)return;let s=0;return"text"===this.testZone(t)?this.cursor("text"):this.cursor(),this.isDown&&(s=t.clientX-this.zone.x),this.upInput(s-this.sa-3,this.isDown)}update(){this.c[2].textContent=this.value}reset(){this.cursor()}select(t,s,i,e){let h=this.s,o=this.sa+5;h[4].width="1px",h[4].left=o+s+"px",h[3].left=o+s+"px",h[3].width=i+"px",this.c[3].innerHTML=e}unselect(){let t=this.s;t&&(t[3].width="0px",this.c[3].innerHTML="t",t[4].width="0px")}validate(t){this.allway&&(t=!0),this.value=this.c[2].textContent,""!==this.value?this.c[5].textContent="":this.c[5].textContent=this.placeHolder,t&&this.send()}rSize(){super.rSize();let t=this.s;t[2].left=this.sa+"px",t[2].width=this.sb+"px",t[5].left=this.sa+"px",t[5].width=this.sb+"px"}}class k extends r{constructor(t={}){super(t);let s=t.prefix||"";this.c[2]=this.dom("div",this.css.txt+"justify-content:right; width:60px; line-height:"+(this.h-8)+"px; color:"+this.colors.text),31===this.h&&(this.s[0].height=this.h+"px",this.s[1].top="8px",this.c[2].style.top="8px");let i=this.s;i[1].justifyContent=t.align||"left",i[1].fontWeight=t.fontWeight||"bold",this.c[1].textContent=this.txt.substring(0,1).toUpperCase()+this.txt.substring(1).replace("-"," "),this.c[2].textContent=s,this.init()}text(t){this.c[1].textContent=t}text2(t){this.c[2].textContent=t}rSize(){super.rSize(),this.s[1].width=this.w+"px",this.s[2].left=this.w+"px"}setColor(t){this.s[1].color=t,this.s[2].color=t}}class S extends r{constructor(t={}){super(t),this.value=t.value||"",this.isDown=!1,this.onActif=t.onActif||function(){};const s=this.colors;this.c[2]=this.dom("div",this.css.txt+this.css.button+" top:1px; background:"+s.button+"; height:"+(this.h-2)+"px; border:"+s.buttonBorder+"; border-radius:15px; width:30px; left:10px;"),this.c[3]=this.dom("div",this.css.txtselect+"height:"+(this.h-4)+"px; background:"+s.inputBg+"; borderColor:"+s.inputBorder+"; border-radius:"+this.radius+"px;"),this.c[3].textContent=this.value;let i=Math.floor(.5*this.h)-7;this.c[4]=this.dom("path",this.css.basic+"position:absolute; width:14px; height:14px; left:5px; top:"+i+"px;",{d:this.svgs.cursor,fill:s.text,stroke:"none"}),this.stat=1,this.isActif=!1,this.init()}testZone(t){let s=this.local;return-1===s.x&&-1===s.y?"":s.x>this.sa&&s.xthis.sa&&s.xi[r][0]&&s.xe[r][0]&&s.ythis.lng-1&&(h=-1)),h}mouseup(t){return!!this.isDown&&(this.isDown=!1,-1!==this.res&&(this.value=this.values[this.res],this.send()),this.mousemove(t))}mousedown(t){return!this.isDown&&(this.isDown=!0,this.mousemove(t))}mousemove(t){let s=!1;return this.res=this.testZone(t),-1!==this.res?(this.cursor("pointer"),s=this.modes(this.isDown?3:2,this.res)):s=this.reset(),s}modes(t=1,s=-1){let i,e,h=this.lng,o=!1;for(;h--;)e=t,i=!!this.isSelectable&&this.values[h]===this.value,h===s?i&&2===e&&(e=3):(e=1,i&&(e=4)),this.mode(e,h)&&(o=!0);return o}mode(t,s){let i=!1,e=this.colors,h=this.buttons,o=s;if(this.stat[s]!==t){switch(this.stat[s]=t,t){case 1:h[o].style.color=e.text,h[o].style.background=e.button;break;case 2:h[o].style.color=e.textOver,h[o].style.background=e.overoff;break;case 3:h[o].style.color=e.textOver,h[o].style.background=e.over;break;case 4:h[o].style.color=e.textSelect,h[o].style.background=e.select}i=!0}return i}reset(){return this.res=-1,this.cursor(),this.modes()}label(t,s){this.buttons[s].textContent=t}icon(t,s,i){this.buttons[i].style.padding=(s||0)+"px 0px",this.buttons[i].innerHTML=t}testW(){let t=!1;if(3*this.spaces[0]+2*this.bsizeMax>this.w?(this.bsize[0]=.5*(this.w-3*this.spaces[0]),t=!0):this.bsize[0]!==this.bsizeMax&&(this.bsize[0]=this.bsizeMax,t=!0),!t)return;let s=this.buttons.length;for(;s--;)this.buttons[s].style.width=this.bsize[0]+"px"}rSize(){let t;super.rSize(),this.testW(),this.tmpX=[],this.tmpY=[];for(let s=0;sthis.h-this.c[2].offsetHeight?"text":"pad"}mouseup(t){return this.isDown=!1,this.mode(0)}mousedown(t){if("pad"===this.testZone(t))return this.isDown=!0,this.mousemove(t),this.mode(1)}mousemove(t){if(!this.isDown)return;let s=.5*this.w-(t.clientX-this.zone.x),i=.5*this.diam-(t.clientY-this.zone.y-this.ytop),e=256/this.diam;s=-s*e,i=-i*e,s=h.clamp(s,-this.maxPos,this.maxPos),i=h.clamp(i,-this.maxPos,this.maxPos),this.setPos([s,i]),this.update(!0)}mode(t){if(this.cmode===t)return!1;let s=this.colors;switch(t){case 0:this.s[2].color=s.text,this.setSvg(this.c[3],"fill",s.back,0),this.setSvg(this.c[3],"fill",s.button,1),this.setSvg(this.c[3],"stroke",s.back,2),this.setSvg(this.c[3],"stroke",s.back,3),this.setSvg(this.c[3],"stroke",s.text,4);break;case 1:this.s[2].color=s.textSelect,this.setSvg(this.c[3],"fill",s.backoff,0),this.setSvg(this.c[3],"fill",s.overoff,1),this.setSvg(this.c[3],"stroke",s.backoff,2),this.setSvg(this.c[3],"stroke",s.backoff,3),this.setSvg(this.c[3],"stroke",s.textSelect,4)}return this.cmode=t,!0}update(t){this.c[2].textContent=this.value,this.updateSVG(),t&&this.send()}updateSVG(){1==this.model&&(this.setSvg(this.c[3],"y1",this.pos.y,2),this.setSvg(this.c[3],"y2",this.pos.y,2),this.setSvg(this.c[3],"x1",this.pos.x,3),this.setSvg(this.c[3],"x2",this.pos.x,3)),this.setSvg(this.c[3],"cx",this.pos.x,4),this.setSvg(this.c[3],"cy",this.pos.y,4)}setPos(t){this.pos.set(t[0]+128,t[1]+128);let s=1/this.maxPos;this.value[0]=(t[0]*s*this.range).toFixed(this.precision),this.value[1]=(t[1]*s*this.range).toFixed(this.precision)}setValue(t,s=!1){void 0===t&&(t=this.value),this.value[0]=1*Math.min(this.max,Math.max(this.min,t[0])).toFixed(this.precision),this.value[1]=1*Math.min(this.max,Math.max(this.min,t[1])).toFixed(this.precision),this.pos.set(this.value[0]/this.range*this.maxPos+128,this.value[1]/this.range*this.maxPos+128),this.update(s)}}class T extends r{constructor(t={}){t.selectable=!0,t.name=t.name||"TreeList",super(t),this.tree=t.tree||{},this.value=Array.isArray(t.value)?t.value.slice():[],this.focused=!!t.focused,this.focusPath=Array.isArray(t.focusPath)?t.focusPath.slice():[],this.focusLevel="number"==typeof t.focusLevel?t.focusLevel:-1,this.tabIndex=t.tabIndex??null,this.itemIndex=t.itemIndex??null,this.changeCb="function"==typeof t.onChange?t.onChange:()=>{},this.lineH=this.h,this.levelGap=this.colors.sy||2,this.leafMax=0,this.levels=[],this.itemsDom=[],this.hover={level:-1,index:-1},this.lastLeaf={parentPath:[],key:null},this.c[2]=this.dom("div",this.css.basic+"left:0; top:0; width:100%; height:100%;"),this.s[2]=this.c[2].style,this.init(),this._maybeUpdateLastLeafFromValue()}static isMap(t){return t&&"object"==typeof t&&!Array.isArray(t)}static isList(t){return Array.isArray(t)}getNodeAtPath(t){let s=this.tree;for(let i=0;i({key:t,label:t,zone:{x:0,y:0,w:0,h:0}}))),i=Math.max(t.length,this.leafMax)*this.lineH;this.levels.push({type:"list",items:t,zone:{x:0,y:0,w:0,h:i}});break}break}{const e=Object.keys(s);if(!e.length)break;this.levels.push({type:"map",items:e.map((t=>({key:t,label:t,zone:{x:0,y:0,w:0,h:0}}))),zone:{x:0,y:0,w:0,h:this.lineH}});const h=t[i];if(!h||!s.hasOwnProperty(h))break;s=s[h]}i++}}layoutLevels(){const t=(this.sa||100)+8,s=this.zone.w-t-8;let i=0;for(;this.itemsDom.lengthh.x+h.w||s>h.x+h.w)&&!(th.x+h.w||s>h.y+h.h))if("map"===e.type)for(let h=0;h=o.x&&s>=o.y&&t<=o.x+o.w&&s<=o.y+o.h)return{L:i,i:h,real:!0}}else{const o=Math.max(e.items.length,this.leafMax);for(let n=0;n=r.x&&s>=r.y&&t<=r.x+r.w&&s<=r.y+r.h)return{L:i,i:n,real:o}}}}return{L:-1,i:-1,real:!1}}handleEvent(t){if(this.lock)return!1;if("mousemove"===t.type){const{x:s,y:i}=this._toLocal(t),e=this._hitTest(s,i);return this.hover=-1!==e.L&&e.real?{level:e.L,index:e.i}:{level:-1,index:-1},this.update(),!0}if("mousedown"===t.type){const{x:s,y:i}=this._toLocal(t),e=this._hitTest(s,i);if(-1!==e.L&&e.real)return this._selectAt(e.L,e.i),!0}return"mouseup"===t.type}_selectAt(t,s){const i=this.levels[t],e=i.items[s];if(!e||!e.key)return;const h=this.value.slice(0,t);h[t]=e.key;const o=this.autoCompleteToLeaf(h);"list"===i.type&&(this.lastLeaf.parentPath=this.value.slice(0,t),this.lastLeaf.key=e.key),this.value=o.slice(),this.update(),this.send(o),this.changeCb(this.tabIndex,this.itemIndex,o)}setValue(t){this.value=Array.isArray(t)?t.slice():[],this._maybeUpdateLastLeafFromValue(),this.update()}setTree(t){this.tree=t||{},this.leafMax=this.computeLeafMax(this.tree),this.update()}setFocus({focused:t,focusPath:s,focusLevel:i}){"boolean"==typeof t&&(this.focused=t),Array.isArray(s)&&(this.focusPath=s.slice()),"number"==typeof i&&(this.focusLevel=i),this.update()}_maybeUpdateLastLeafFromValue(){if(!Array.isArray(this.value)||0===this.value.length)return;const t=this.value.slice(0,this.value.length-1),s=this.value[this.value.length-1],i=this.getNodeAtPath(t);i&&Array.isArray(i.node)&&i.node.includes(s)&&(this.lastLeaf={parentPath:t,key:s})}_countVisibleIntermediates(){let t=0;for(let s=0;sthis.zone.h-this.bh&&s.ye?"scroll":"content",i}handleEvent(t){let s=t.type,e=!1,h=!1,o=this.testZone(t);if("mouseup"===s&&this.isDown&&(this.isDown=!1),"mousedown"!==s||this.isDown||(this.isDown=!0),this.isDown&&this.isNewTarget&&(i.clearInput(),this.isNewTarget=!1),o){switch(o){case"content":t.clientY=this.isScroll?t.clientY+this.decal:t.clientY,i.isMobile&&"mousedown"===s&&this.getNext(t,e),this.proto&&(h=this.proto.handleEvent(t)),"mousemove"===s&&(e=this.mode("def")),"wheel"===s&&!h&&this.isScroll&&(e=this.onWheel(t)),i.lock||this.getNext(t,e);break;case"bottom":this.clearTarget(),"mousemove"===s&&(e=this.mode("bottomOver")),"mousedown"===s&&(this.isOpen=!this.isOpen,this.bottom.textContent=this.isOpen?this.bottomText[1]:this.bottomText[0],this.calc(),this.mode("def"),e=!0);break;case"scroll":this.clearTarget(),"mousemove"===s&&(e=this.mode("scrollOver")),"mousedown"===s&&(e=this.mode("scrollDown")),"wheel"===s&&(e=this.onWheel(t)),this.isDown&&this.update(t.clientY-this.zone.y-.5*this.sh)}this.isDown&&(e=!0),h&&(e=!0),"keyup"===s&&(e=!0),"keydown"===s&&(e=!0),e&&this.draw()}}getNext(t,s){let e=i.findTarget(this.uis,t);e!==this.current&&(this.clearTarget(),this.current=e,this.isNewTarget=!0),-1!==e&&(this.proto=this.uis[this.current],this.proto.uiover())}onWheel(t){return this.oy+=20*t.delta,this.update(this.oy),!0}reset(t){if(this.isReset)return;this.mouse.neg(),this.isDown=!1;let s=this.mode("def"),i=this.clearTarget();(s||i)&&this.draw(!0),this.isReset=!0}add(){let t=arguments,s=!1;"object"==typeof t[1]?(t[1].isUI=!0,t[1].main=this,s=!!t[1].ontop&&t[1].ontop):"string"==typeof t[1]&&(void 0===t[2]?[].push.call(t,{isUI:!0,main:this}):(t[2].isUI=!0,t[2].main=this,s=!!t[2].ontop&&t[2].ontop));let i=O.apply(this,t);if(null!==i)return s?this.uis.unshift(i):this.uis.push(i),this.calc(),this.isEmpty=!1,i}remove(t){t.dispose&&t.dispose()}clearOne(t){let s=this.uis.indexOf(t);-1!==s&&(this.inner.removeChild(this.uis[s].c[0]),this.uis.splice(s,1),this.calc())}empty(){let t,s=this.uis.length;for(;s--;)t=this.uis.pop(),this.inner.removeChild(t.c[0]),t.dispose();this.uis=[],this.isEmpty=!0,this.calc()}clear(){this.empty()}clear2(){setTimeout(this.empty.bind(this),0)}dispose(){this.clear(),null!==this.parent&&this.parent.removeChild(this.content),i.remove(this)}resetItem(){if(!this.isItemMode)return;let t=this.uis.length;for(;t--;)this.uis[t].selected()}setItem(t){if(!this.isItemMode)return;if(t=t||"",this.resetItem(),!t)return void this.update(0);let s=this.uis.length;for(;s--;)this.uis[s].value===t&&(this.uis[s].selected(!0),this.isScroll&&this.update(s*(this.uis[s].h+this.margin)*this.ratio))}upScroll(t){this.sw=t?this.size.s:0,this.oy=t?this.oy:0,this.scrollBG.style.display=t?"block":"none",t&&(this.total=this.h,this.maxView=this.maxHeight,this.ratio=this.maxView/this.total,this.sh=this.maxView*this.ratio,this.range=this.maxView-this.sh,this.oy=h.clamp(this.oy,0,this.range),this.scrollBG.style.height=this.maxView+"px",this.scroll.style.height=this.sh+"px"),this.setItemWidth(this.zone.w-this.sw),this.update(this.oy)}update(t){t=h.clamp(t,0,this.range),this.decal=Math.floor(t/this.ratio),this.inner.style.top=-this.decal+"px",this.scroll.style.top=Math.floor(t)+"px",this.oy=t}calcUis(){return i.calcUis(this.uis,this.zone,this.zone.y)}calc(){clearTimeout(this.tmp),this.tmp=setTimeout(this.setHeight.bind(this),10)}setHeight(){if(this.tmp&&clearTimeout(this.tmp),this.zone.h=this.bh,this.isScroll=!1,this.isOpen){this.h=this.calcUis();let t=this.forceHeight?this.forceHeight+this.zone.y:window.innerHeight;this.maxHeight=t-this.zone.y-this.bh,this.h-this.maxHeight>1?(this.isScroll=!0,this.zone.h=this.maxHeight+this.bh):this.zone.h=this.h+this.bh}this.upScroll(this.isScroll),this.innerContent.style.height=this.zone.h-this.bh+"px",this.content.style.height=this.zone.h+"px",this.bottom.style.top=this.zone.h-this.bh+"px",this.forceHeight&&this.lockHeight&&(this.content.style.height=this.forceHeight+"px"),this.isCanvas&&this.draw(!0)}rezone(){i.needReZone=!0}setWidth(t){t&&(this.zone.w=t),this.zone.w=Math.floor(this.zone.w),this.content.style.width=this.zone.w+"px",this.isCenter&&(this.content.style.marginLeft=-Math.floor(.5*this.zone.w)+"px"),this.setItemWidth(this.zone.w-this.sw)}setItemWidth(t){let s=this.uis.length;for(;s--;)this.uis[s].setSize(t),this.uis[s].rSize()}}export{o as Files,H as Gui,t as REVISION,h as Tools,O as add}; +/** + * @author lth / https://github.com/lo-th + */ + +const REVISION = "4.3.0"; + +// INTENAL FUNCTION + +const R = { + ui: [], + + dom: null, + + ID: null, + lock: false, + wlock: false, + current: -1, + + needReZone: true, + needResize: false, + forceZone: false, + isEventsInit: false, + isLeave: false, + addDOMEventListeners: true, + + downTime: 0, + prevTime: 0, + + //prevDefault: ['contextmenu', 'wheel'], + prevDefault: ["contextmenu"], + pointerEvent: ["pointerdown", "pointermove", "pointerup"], + eventOut: ["pointercancel", "pointerout", "pointerleave"], + + xmlserializer: null, + tmpTime: null, + tmpImage: null, + + oldCursor: "auto", + + input: null, + parent: null, + firstImput: true, + + hiddenImput: null, + hiddenSizer: null, + hasFocus: false, + startInput: false, + inputRange: [0, 0], + cursorId: 0, + str: "", + pos: 0, + startX: -1, + moveX: -1, + + debugInput: false, + + isLoop: false, + listens: [], + + e: { + type: null, + clientX: 0, + clientY: 0, + keyCode: NaN, + key: null, + delta: 0, + }, + + isMobile: false, + + now: null, + needsUpdate: false, + + getTime: function () { + return self.performance && self.performance.now + ? self.performance.now.bind(performance) + : Date.now; + }, + + add: function (o) { + // R.ui[0] is de GUI object that is added first by the constructor + R.ui.push(o); + R.getZone(o); + + if (!R.isEventsInit) R.initEvents(); + }, + + testMobile: function () { + let n = navigator.userAgent; + if ( + n.match(/Android/i) || + n.match(/webOS/i) || + n.match(/iPhone/i) || + n.match(/iPad/i) || + n.match(/iPod/i) || + n.match(/BlackBerry/i) || + n.match(/Windows Phone/i) + ) + return true; + else return false; + }, + + remove: function (o) { + let i = R.ui.indexOf(o); + + if (i !== -1) { + R.removeListen(o); + R.ui.splice(i, 1); + } + + if (R.ui.length === 0) { + R.removeEvents(); + } + }, + + // ---------------------- + // EVENTS + // ---------------------- + + initEvents: function () { + if (R.isEventsInit) return; + + let dom = document.body; + + R.isMobile = R.testMobile(); + R.now = R.getTime(); + + if (!R.isMobile) { + dom.addEventListener("wheel", R, { passive: false }); + } else { + dom.style.touchAction = "none"; + } + + console.log("R.addDOMEventListeners " + R.addDOMEventListeners); + if (R.addDOMEventListeners) { + dom.addEventListener("pointercancel", R); + dom.addEventListener("pointerleave", R); + //dom.addEventListener( 'pointerout', R ) + + dom.addEventListener("pointermove", R); + dom.addEventListener("pointerdown", R); + dom.addEventListener("pointerup", R); + + dom.addEventListener("keydown", R, false); + dom.addEventListener("keyup", R, false); + } + window.addEventListener("resize", R.resize, false); + + //window.onblur = R.out; + //window.onfocus = R.in; + + R.isEventsInit = true; + R.dom = dom; + }, + + removeEvents: function () { + if (!R.isEventsInit) return; + + let dom = document.body; + + if (!R.isMobile) { + dom.removeEventListener("wheel", R); + } + + if (R.addDOMEventListeners) { + dom.removeEventListener("pointercancel", R); + dom.removeEventListener("pointerleave", R); + //dom.removeEventListener( 'pointerout', R ); + + dom.removeEventListener("pointermove", R); + dom.removeEventListener("pointerdown", R); + dom.removeEventListener("pointerup", R); + + dom.removeEventListener("keydown", R); + dom.removeEventListener("keyup", R); + } + window.removeEventListener("resize", R.resize); + + R.isEventsInit = false; + }, + + resize: function () { + let i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + if (u.isGui && !u.isCanvasOnly && u.autoResize) u.calc(); + } + + R.needReZone = true; + R.needResize = false; + }, + + out: function () { + console.log("im am out"); + R.clearOldID(); + }, + + in: function () { + console.log("im am in"); + // R.clearOldID(); + }, + + // ---------------------- + // HANDLE EVENTS + // ---------------------- + + fakeUp: function () { + this.handleEvent({ type: "pointerup" }); + }, + + handleEvent: function (event) { + //console.log("Roots.handleEvent "+event.type) + //if(!event.type) return; + + if (R.prevDefault.indexOf(event.type) !== -1) event.preventDefault(); + + if (R.needResize) R.resize(); + + R.findZone(R.forceZone); + + let e = R.e; + let leave = false; + + if (event.type === "keydown") R.keydown(event); + if (event.type === "keyup") R.keyup(event); + + if (event.type === "wheel") e.delta = event.deltaY > 0 ? 1 : -1; + else e.delta = 0; + + let ptype = event.pointerType; // mouse, pen, touch + + e.clientX = (ptype === "touch" ? event.pageX : event.clientX) || 0; + e.clientY = (ptype === "touch" ? event.pageY : event.clientY) || 0; + + e.type = event.type; + + if (R.eventOut.indexOf(event.type) !== -1) { + leave = true; + e.type = "mouseup"; + } + + if (event.type === "pointerleave") R.isLeave = true; + + if (event.type === "pointerdown") e.type = "mousedown"; + if (event.type === "pointerup") e.type = "mouseup"; + if (event.type === "pointermove") { + if (R.isLeave) { + // if user resize outside this document + R.isLeave = false; + R.resize(); + } + e.type = "mousemove"; + } + + // double click test + if (e.type === "mousedown") { + R.downTime = R.now(); + let time = R.downTime - R.prevTime; + + // double click on imput + if (time < 200) { + R.selectAll(); + return false; + } + + R.prevTime = R.downTime; + R.forceZone = false; + } + + // for imput + if (e.type === "mousedown") R.clearInput(); + + // mouse lock + if (e.type === "mousedown") R.lock = true; + if (e.type === "mouseup") R.lock = false; + + //if( R.current !== null && R.current.neverlock ) R.lock = false; + + /*if( e.type === 'mousedown' && event.button === 1){ + R.cursor() + e.preventDefault(); + e.stopPropagation(); + }*/ + + //console.log("p4 "+R.isMobile+" "+e.type+" "+R.lock) + + if (R.isMobile && e.type === "mousedown") R.findID(e); + if (e.type === "mousemove" && !R.lock) R.findID(e); + + if (R.ID !== null) { + if (R.ID.isCanvasOnly) { + e.clientX = R.ID.mouse.x; + e.clientY = R.ID.mouse.y; + } + + //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 + + R.ID.handleEvent(e); + } + + if (R.isMobile && e.type === "mouseup") R.clearOldID(); + if (leave) R.clearOldID(); + }, + + // ---------------------- + // ID + // ---------------------- + + findID: function (e) { + let i = R.ui.length, + next = -1, + u, + x, + y; + + while (i--) { + u = R.ui[i]; + + if (u.isCanvasOnly) { + x = u.mouse.x; + y = u.mouse.y; + } else { + x = e.clientX; + y = e.clientY; + } + + if (R.onZone(u, x, y)) { + next = i; + + if (next !== R.current) { + R.clearOldID(); + R.current = next; + R.ID = u; + } + break; + } + } + + if (next === -1) R.clearOldID(); + }, + + clearOldID: function () { + if (!R.ID) return; + R.current = -1; + R.ID.reset(); + R.ID = null; + R.cursor(); + }, + + // ---------------------- + // GUI / GROUP FUNCTION + // ---------------------- + + calcUis: (uis, zone, py, group = false) => { + //console.log('calc_uis') + + let i = uis.length, + u, + px = 0, + n = 0, + tw, + m; + + let height = 0; + + while (i--) { + u = uis[n]; + n++; + + if (!group && u.isGroup) u.calcUis(); + + m = u.margin; + //div = u.marginDiv + + u.zone.w = u.w; + u.zone.h = u.h + m; + + if (!u.autoWidth) { + if (px === 0) height += u.h + m; + + u.zone.x = zone.x + px; + u.zone.y = py; // + u.mtop + //if(div) u.zone.y += m * 0.5 + + tw = R.getWidth(u); + if (tw) u.zone.w = u.w = tw; + else if (u.fw) u.zone.w = u.w = u.fw; + + px += u.zone.w; + + if (px >= zone.w) { + py += u.h + m; + //if(div) py += m * 0.5 + px = 0; + } + } else { + px = 0; + + u.zone.x = zone.x + u.dx; + u.zone.y = py; + py += u.h + m; + + height += u.h + m; + } + } + + return height; + }, + + findTarget: function (uis, e) { + let i = uis.length; + + while (i--) { + if (R.onZone(uis[i], e.clientX, e.clientY)) return i; + } + + return -1; + }, + + // ---------------------- + // ZONE + // ---------------------- + + findZone: function (force) { + if (!R.needReZone && !force) return; + + var i = R.ui.length, + u; + + while (i--) { + u = R.ui[i]; + R.getZone(u); + if (u.isGui) u.calcUis(); + } + + R.needReZone = false; + }, + + onZone: function (o, x, y) { + if (x === undefined || y === undefined) return false; + + let z = o.zone; + let mx = x - z.x; // - o.dx; + let my = y - z.y; + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( o.group && o.group.marginDiv ) my += o.group.margin * 0.5 + //if( o.group !== null ) mx -= o.dx + + let over = mx >= 0 && my >= 0 && mx <= z.w && my <= z.h; + + //if( o.marginDiv ) my -= o.margin * 0.5 + + if (over) o.local.set(mx, my); + else o.local.neg(); + + return over; + }, + + getWidth: function (o) { + //return o.getDom().offsetWidth + return o.getDom().clientWidth; + + //let r = o.getDom().getBoundingClientRect(); + //return (r.width) + //return Math.floor(r.width) + }, + + getZone: function (o) { + if (o.isCanvasOnly) return; + let r = o.getDom().getBoundingClientRect(); + + //if( !r.width ) return + //o.zone = { x:Math.floor(r.left), y:Math.floor(r.top), w:Math.floor(r.width), h:Math.floor(r.height) }; + //o.zone = { x:Math.round(r.left), y:Math.round(r.top), w:Math.round(r.width), h:Math.round(r.height) }; + o.zone = { x: r.left, y: r.top, w: r.width, h: r.height }; + + //console.log(o.name, o.zone) + }, + + // ---------------------- + // CURSOR + // ---------------------- + + cursor: function (name) { + name = name ? name : "auto"; + if (name !== R.oldCursor) { + document.body.style.cursor = name; + R.oldCursor = name; + } + }, + + // ---------------------- + // CANVAS + // ---------------------- + + toCanvas: function (o, w, h, force) { + if (!R.xmlserializer) R.xmlserializer = new XMLSerializer(); + + // prevent exesive redraw + + if (force && R.tmpTime !== null) { + clearTimeout(R.tmpTime); + R.tmpTime = null; + } + + if (R.tmpTime !== null) return; + + if (R.lock) + R.tmpTime = setTimeout(function () { + R.tmpTime = null; + }, 10); + + /// + + let isNewSize = false; + if (w !== o.canvas.width || h !== o.canvas.height) isNewSize = true; + + if (R.tmpImage === null) R.tmpImage = new Image(); + + let img = R.tmpImage; //new Image(); + + let htmlString = R.xmlserializer.serializeToString(o.content); + + let svg = + '' + + htmlString + + ""; + + img.onload = function () { + let ctx = o.canvas.getContext("2d"); + + if (isNewSize) { + o.canvas.width = w; + o.canvas.height = h; + } else { + ctx.clearRect(0, 0, w, h); + } + ctx.drawImage(this, 0, 0); + + o.onDraw(); + }; + + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg); + //img.src = 'data:image/svg+xml;base64,'+ window.btoa( svg ); + img.crossOrigin = ""; + R.needsUpdate = false; + }, + + // ---------------------- + // INPUT + // ---------------------- + + setHidden: function () { + if (R.hiddenImput === null) { + //let css = R.parent.css.txtselect + 'padding:0; width:auto; height:auto; ' + //let css = R.parent.css.txt + 'padding:0; width:auto; height:auto; text-shadow:none;' + //css += 'left:10px; top:auto; border:none; color:#FFF; background:#000;' + hide; + + R.hiddenImput = document.createElement("input"); + R.hiddenImput.type = "text"; + //R.hiddenImput.style.cssText = css + 'bottom:30px;' + (R.debugInput ? '' : 'transform:scale(0);'); + + R.hiddenSizer = document.createElement("div"); + //R.hiddenSizer.style.cssText = css + 'bottom:60px;'; + + document.body.appendChild(R.hiddenImput); + document.body.appendChild(R.hiddenSizer); + } + + let hide = R.debugInput ? "" : "opacity:0; zIndex:0;"; + let css = + R.parent.css.txtselect + + "padding:0; width:auto; height:auto; left:10px; top:auto; color:#FFF; background:#000;" + + hide; + R.hiddenImput.style.cssText = + css + "bottom:10px;" + (R.debugInput ? "" : "transform:scale(0);"); + R.hiddenSizer.style.cssText = css + "bottom:40px;"; + + R.hiddenImput.style.width = R.input.clientWidth + "px"; + R.hiddenImput.value = R.str; + R.hiddenSizer.innerHTML = R.str; + + R.hasFocus = true; + }, + + clearHidden: function (p) { + if (R.hiddenImput === null) return; + R.hasFocus = false; + }, + + clickPos: function (x) { + let i = R.str.length, + l = 0, + n = 0; + while (i--) { + l += R.textWidth(R.str[n]); + if (l >= x) break; + n++; + } + return n; + }, + + upInput: function (x, down) { + if (R.parent === null) return false; + + let up = false; + + if (down) { + let id = R.clickPos(x); + + R.moveX = id; + + if (R.startX === -1) { + R.startX = id; + R.cursorId = id; + R.inputRange = [R.startX, R.startX]; + } else { + let isSelection = R.moveX !== R.startX; + + if (isSelection) { + if (R.startX > R.moveX) R.inputRange = [R.moveX, R.startX]; + else R.inputRange = [R.startX, R.moveX]; + } + } + + up = true; + } else { + if (R.startX !== -1) { + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.startX = -1; + + up = true; + } + } + + if (up) R.selectParent(); + + return up; + }, + + selectAll: function () { + if (!R.parent) return; + + R.str = R.input.textContent; + R.inputRange = [0, R.str.length]; + R.hasFocus = true; + R.hiddenImput.focus(); + R.hiddenImput.selectionStart = R.inputRange[0]; + R.hiddenImput.selectionEnd = R.inputRange[1]; + R.cursorId = R.inputRange[1]; + R.selectParent(); + }, + + selectParent: function () { + var c = R.textWidth(R.str.substring(0, R.cursorId)); + var e = R.textWidth(R.str.substring(0, R.inputRange[0])); + var s = R.textWidth(R.str.substring(R.inputRange[0], R.inputRange[1])); + + R.parent.select(c, e, s, R.hiddenSizer.innerHTML); + }, + + textWidth: function (text) { + if (R.hiddenSizer === null) return 0; + text = text.replace(/ /g, " "); + R.hiddenSizer.innerHTML = text; + return R.hiddenSizer.clientWidth; + }, + + clearInput: function () { + if (R.parent === null) return; + if (!R.firstImput) R.parent.validate(true); + + R.clearHidden(); + R.parent.unselect(); + + //R.input.style.background = 'none'; + R.input.style.background = R.parent.colors.back; + R.input.style.borderColor = R.parent.colors.border; + //R.input.style.color = R.parent.colors.text; + R.parent.isEdit = false; + + R.input = null; + R.parent = null; + (R.str = ""), (R.firstImput = true); + }, + + setInput: function (Input, parent) { + R.clearInput(); + + R.input = Input; + R.parent = parent; + + R.input.style.background = R.parent.colors.backoff; + R.input.style.borderColor = R.parent.colors.select; + //R.input.style.color = R.parent.colors.textSelect; + R.str = R.input.textContent; + + R.setHidden(); + }, + + keydown: function (e) { + if (R.parent === null) return; + + let keyCode = e.which; + e.shiftKey; + + //console.log( keyCode ) + + R.firstImput = false; + + if (R.hasFocus) { + // hack to fix touch event bug in iOS Safari + window.focus(); + R.hiddenImput.focus(); + } + + R.parent.isEdit = true; + + // e.preventDefault(); + + // add support for Ctrl/Cmd+A selection + //if ( keyCode === 65 && (e.ctrlKey || e.metaKey )) { + //R.selectText(); + //e.preventDefault(); + //return self.render(); + //} + + if (keyCode === 13) { + //enter + + R.clearInput(); + + //} else if( keyCode === 9 ){ //tab key + + // R.input.textContent = ''; + } else { + if (R.input.isNum) { + if ( + (e.keyCode > 47 && e.keyCode < 58) || + (e.keyCode > 95 && e.keyCode < 106) || + e.keyCode === 190 || + e.keyCode === 110 || + e.keyCode === 8 || + e.keyCode === 109 + ) { + R.hiddenImput.readOnly = false; + } else { + R.hiddenImput.readOnly = true; + } + } else { + R.hiddenImput.readOnly = false; + } + } + }, + + keyup: function (e) { + if (R.parent === null) return; + + R.str = R.hiddenImput.value; + + if (R.parent.allEqual) R.parent.sameStr(R.str); // numeric samùe value + else R.input.textContent = R.str; + + R.cursorId = R.hiddenImput.selectionStart; + R.inputRange = [R.hiddenImput.selectionStart, R.hiddenImput.selectionEnd]; + + R.selectParent(); + + //if( R.parent.allway ) + R.parent.validate(); + }, + + // ---------------------- + // + // LISTENING + // + // ---------------------- + + /* + // esta era la funcion original + loop: function () { + + if( R.isLoop ) requestAnimationFrame( R.loop ); + R.update(); + + }, + + */ + + loop: function () { + // modified by Fedemarino + if (R.isLoop) requestAnimationFrame(R.loop); + R.needsUpdate = R.update(); + // if there is a change in a value generated externally, the GUI needs to be redrawn + if (R.ui[0] && R.needsUpdate) R.ui[0].draw(); + }, + + update: function () { + // modified by Fedemarino + let i = R.listens.length; + let needsUpdate = false; + while (i--) { + //check if the value of the object has changed + let hasChanged = R.listens[i].listening(); + if (hasChanged) needsUpdate = true; + } + return needsUpdate; + }, + + removeListen: function (proto) { + let id = R.listens.indexOf(proto); + if (id !== -1) R.listens.splice(id, 1); + if (R.listens.length === 0) R.isLoop = false; + }, + + addListen: function (proto) { + let id = R.listens.indexOf(proto); + + if (id !== -1) return false; + + R.listens.push(proto); + + if (!R.isLoop) { + R.isLoop = true; + R.loop(); + } + + return true; + }, +}; + +const Roots = R; + +/** + * @author lth / https://github.com/lo-th + */ + +const T = { + + transition: 0.2, + + frag: document.createDocumentFragment(), + + colorRing: null, + joystick_0: null, + joystick_1: null, + circular: null, + knob: null, + pad2d: null, + + svgns: "http://www.w3.org/2000/svg", + links: "http://www.w3.org/1999/xlink", + htmls: "http://www.w3.org/1999/xhtml", + + DOM_SIZE: [ 'height', 'width', 'top', 'left', 'bottom', 'right', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom'], + SVG_TYPE_D: [ 'pattern', 'defs', 'transform', 'stop', 'animate', 'radialGradient', 'linearGradient', 'animateMotion', 'use', 'filter', 'feColorMatrix' ], + SVG_TYPE_G: [ 'svg', 'rect', 'circle', 'path', 'polygon', 'text', 'g', 'line', 'foreignObject' ], + + PI: Math.PI, + TwoPI: Math.PI*2, + pi90: Math.PI * 0.5, + pi60: Math.PI/3, + + torad: Math.PI / 180, + todeg: 180 / Math.PI, + + clamp: ( v, min, max ) => { + + v = v < min ? min : v; + v = v > max ? max : v; + return v; + + }, + + isDivid: ( v ) => ( v*0.5 === Math.floor(v*0.5) ), + + size: { w: 240, h: 20, p: 30, s: 8 }, + + // ---------------------- + // COLOR + // ---------------------- + + defineColor: ( o, cc = T.colors ) => { + + let color = { ...cc }; + + let textChange = ['fontFamily', 'fontWeight', 'fontShadow', 'fontSize' ]; + let changeText = false; + + if( o.font ) o.fontFamily = o.font; + if( o.shadow ) o.fontShadow = o.shadow; + if( o.weight ) o.fontWeight = o.weight; + + if( o.fontColor ) o.text = o.fontColor; + if( o.color ) o.text = o.color; + + if( o.text ){ + color.text = o.text; + if( !o.fontColor && !o.color ){ + color.title = T.ColorLuma( o.text, -0.25 ); + color.titleoff = T.ColorLuma( o.text, -0.5 ); + } + color.textOver = T.ColorLuma( o.text, 0.25 ); + color.textSelect = T.ColorLuma( o.text, 0.5 ); + } + + if( o.button ){ + color.button = o.button; + color.border = T.ColorLuma( o.button, 0.1 ); + color.overoff = T.ColorLuma( o.button, 0.2 ); + } + + if( o.select ){ + color.select = o.select; + color.over = T.ColorLuma( o.select, -0.1 ); + } + + if( o.itemBg ) o.back = o.itemBg; + + if( o.back ){ + color.back = o.back; + color.backoff = T.ColorLuma( o.back, -0.1 ); + } + + if( o.fontSelect ) color.textSelect = o.fontSelect; + if( o.groupBorder ) color.gborder = o.groupBorder; + + //if( o.transparent ) o.bg = 'none' + //if( o.bg ) color.background = color.backgroundOver = o.bg + if( o.bgOver ) color.backgroundOver = o.bgOver; + + for( let m in color ){ + if(o[m]!==undefined) color[m] = o[m]; + } + + for( let m in o ){ + if( textChange.indexOf(m) !== -1 ) changeText = true; + } + + if( changeText ) T.defineText( color ); + + return color + + }, + + colors: { + + sx: 4,//4 + sy: 2,//2 + radius:2, + + showOver : 1, + //groupOver : 1, + + content:'none', + background: 'rgba(50,50,50,0.15)', + backgroundOver: 'rgba(50,50,50,0.3)', + + title : '#CCC', + titleoff : '#BBB', + text : '#DDD', + textOver : '#EEE', + textSelect : '#FFF', + + back:'rgba(0,0,0,0.2)', + backoff:'rgba(0,0,0,0.3)', + + // input and button border + border : '#4c4c4c', + borderSize : 1, + + gborder : 'none', + groups : 'none', + + + button : '#3c3c3c', + overoff : '#5c5c5c', + over : '#024699', + select : '#308AFF', + action: '#FF3300', + + //fontFamily: 'Tahoma', + fontFamily: 'Consolas, monospace', + //fontFamily: "'Roboto Mono', 'Source Code Pro', Menlo, Courier, monospace", + fontWeight: 'normal', + fontShadow: 'none',//'#000', + fontSize:12, + + joyOver:'rgba(48,138,255,0.25)', + joyOut: 'rgba(100,100,100,0.5)', + joySelect: '#308AFF', + + + hide: 'rgba(0,0,0,0)', + + }, + + // style css + + css : { + + basic: 'position:absolute; pointer-events:none; box-sizing:border-box; margin:0; padding:0; overflow:hidden; ' + '-o-user-select:none; -ms-user-select:none; -khtml-user-select:none; -webkit-user-select:none; -moz-user-select:none;', + button:'display:flex; align-items:center; justify-content:center; text-align:center;', + middle:'display:flex; align-items:center; justify-content:left; text-align:left; flex-direction: row-reverse;' + }, + + // svg path + + svgs: { + + g1:'M 6 4 L 0 4 0 6 6 6 6 4 M 6 0 L 0 0 0 2 6 2 6 0 Z', + g2:'M 6 0 L 4 0 4 6 6 6 6 0 M 2 0 L 0 0 0 6 2 6 2 0 Z', + + group:'M 7 7 L 7 8 8 8 8 7 7 7 M 5 7 L 5 8 6 8 6 7 5 7 M 3 7 L 3 8 4 8 4 7 3 7 M 7 5 L 7 6 8 6 8 5 7 5 M 6 6 L 6 5 5 5 5 6 6 6 M 7 3 L 7 4 8 4 8 3 7 3 M 6 4 L 6 3 5 3 5 4 6 4 M 3 5 L 3 6 4 6 4 5 3 5 M 3 3 L 3 4 4 4 4 3 3 3 Z', + arrow:'M 3 8 L 8 5 3 2 3 8 Z', + + arrowDown:'M 5 8 L 8 3 2 3 5 8 Z', + arrowUp:'M 5 2 L 2 7 8 7 5 2 Z', + + solid:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 Z', + body:'M 13 10 L 13 1 4 1 1 4 1 13 10 13 13 10 M 11 3 L 11 9 9 11 3 11 3 5 5 3 11 3 M 5 4 L 4 5 4 10 9 10 10 9 10 4 5 4 Z', + vehicle:'M 13 6 L 11 1 3 1 1 6 1 13 3 13 3 11 11 11 11 13 13 13 13 6 M 2.4 6 L 4 2 10 2 11.6 6 2.4 6 M 12 8 L 12 10 10 10 10 8 12 8 M 4 8 L 4 10 2 10 2 8 4 8 Z', + articulation:'M 13 9 L 12 9 9 2 9 1 5 1 5 2 2 9 1 9 1 13 5 13 5 9 4 9 6 5 8 5 10 9 9 9 9 13 13 13 13 9 Z', + character:'M 13 4 L 12 3 9 4 5 4 2 3 1 4 5 6 5 8 4 13 6 13 7 9 8 13 10 13 9 8 9 6 13 4 M 6 1 L 6 3 8 3 8 1 6 1 Z', + terrain:'M 13 8 L 12 7 Q 9.06 -3.67 5.95 4.85 4.04 3.27 2 7 L 1 8 7 13 13 8 M 3 8 Q 3.78 5.420 5.4 6.6 5.20 7.25 5 8 L 7 8 Q 8.39 -0.16 11 8 L 7 11 3 8 Z', + joint:'M 7.7 7.7 Q 8 7.45 8 7 8 6.6 7.7 6.3 7.45 6 7 6 6.6 6 6.3 6.3 6 6.6 6 7 6 7.45 6.3 7.7 6.6 8 7 8 7.45 8 7.7 7.7 M 3.35 8.65 L 1 11 3 13 5.35 10.65 Q 6.1 11 7 11 8.28 11 9.25 10.25 L 7.8 8.8 Q 7.45 9 7 9 6.15 9 5.55 8.4 5 7.85 5 7 5 6.54 5.15 6.15 L 3.7 4.7 Q 3 5.712 3 7 3 7.9 3.35 8.65 M 10.25 9.25 Q 11 8.28 11 7 11 6.1 10.65 5.35 L 13 3 11 1 8.65 3.35 Q 7.9 3 7 3 5.7 3 4.7 3.7 L 6.15 5.15 Q 6.54 5 7 5 7.85 5 8.4 5.55 9 6.15 9 7 9 7.45 8.8 7.8 L 10.25 9.25 Z', + ray:'M 9 11 L 5 11 5 12 9 12 9 11 M 12 5 L 11 5 11 9 12 9 12 5 M 11.5 10 Q 10.9 10 10.45 10.45 10 10.9 10 11.5 10 12.2 10.45 12.55 10.9 13 11.5 13 12.2 13 12.55 12.55 13 12.2 13 11.5 13 10.9 12.55 10.45 12.2 10 11.5 10 M 9 10 L 10 9 2 1 1 2 9 10 Z', + collision:'M 11 12 L 13 10 10 7 13 4 11 2 7.5 5.5 9 7 7.5 8.5 11 12 M 3 2 L 1 4 4 7 1 10 3 12 8 7 3 2 Z', + map:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + material:'M 13 1 L 1 1 1 13 13 13 13 1 M 12 2 L 12 7 7 7 7 12 2 12 2 7 7 7 7 2 12 2 Z', + texture:'M 13 4 L 13 1 1 1 1 4 5 4 5 13 9 13 9 4 13 4 Z', + object:'M 10 1 L 7 4 4 1 1 1 1 13 4 13 4 5 7 8 10 5 10 13 13 13 13 1 10 1 Z', + none:'M 9 5 L 5 5 5 9 9 9 9 5 Z', + cursor:'M 4 7 L 1 10 1 12 2 13 4 13 7 10 9 14 14 0 0 5 4 7 Z', + load:'M 13 8 L 11.5 6.5 9 9 9 3 5 3 5 9 2.5 6.5 1 8 7 14 13 8 M 9 2 L 9 0 5 0 5 2 9 2 Z', + save:'M 9 12 L 5 12 5 14 9 14 9 12 M 11.5 7.5 L 13 6 7 0 1 6 2.5 7.5 5 5 5 11 9 11 9 5 11.5 7.5 Z', + extern:'M 14 14 L 14 0 0 0 0 14 14 14 M 12 6 L 12 12 2 12 2 6 12 6 M 12 2 L 12 4 2 4 2 2 12 2 Z', + + }, + + rezone () { + Roots.needReZone = true; + }, + + getImput: function(){ + + return Roots.input ? true : false + + }, + + setStyle : function ( data ){ + + for ( var o in data ){ + if( T.colors[o] ) T.colors[o] = data[o]; + } + + T.setText(); + + }, + + // ---------------------- + // custom text + // ---------------------- + + defineText: function( o ){ + + T.setText( o.fontSize, o.text, o.fontFamily, o.fontShadow, o.fontWeight ); + + }, + + setText: function( size, color, font, shadow, weight ){ + + let cc = T.colors; + + if( font === undefined ) font = cc.fontFamily; + if( size === undefined ) size = cc.fontSize; + if( shadow === undefined ) shadow = cc.fontShadow; + if( weight === undefined ) weight = cc.fontWeight; + if( color === undefined ) color = cc.text; + + if( isNaN(size) ){ if( size.search('em')===-1 ) size += 'px';} + else size += 'px'; + + + //let align = 'display:flex; justify-content:left; align-items:center; text-align:left;' + + T.css.txt = T.css.basic + T.css.middle + ' font-family:'+ font +'; font-weight:'+weight+'; font-size:'+size+'; color:'+cc.text+'; padding:0px 8px; left:0; top:2px; height:16px; width:100px; overflow:hidden; white-space: nowrap; letter-spacing: normal;'; + if( shadow !== 'none' ) T.css.txt += ' text-shadow: 1px 1px 1px '+shadow+';'; + + T.css.txtselect = T.css.txt + 'padding:0px 4px; border:1px dashed ' + cc.border + ';'; + T.css.item = T.css.txt + 'padding:0px 4px; position:relative; margin-bottom:1px; '; + + }, + + + // note + + //https://developer.mozilla.org/fr/docs/Web/CSS/css_flexible_box_layout/aligning_items_in_a_flex_container + + /*cloneColor: function () { + + let cc = Object.assign({}, T.colors ); + return cc; + + },*/ + + // intern function + + cloneCss: function () { + + //let cc = Object.assign({}, T.css ); + return { ...T.css }; + + }, + + clone: function ( o ) { + + return o.cloneNode( true ); + + }, + + setSvg: function( dom, type, value, id, id2 ){ + + if( id === -1 ) dom.setAttributeNS( null, type, value ); + else if( id2 !== undefined ) dom.childNodes[ id || 0 ].childNodes[ id2 || 0 ].setAttributeNS( null, type, value ); + else dom.childNodes[ id || 0 ].setAttributeNS( null, type, value ); + + }, + + setCss: function( dom, css ){ + + for( let r in css ){ + if( T.DOM_SIZE.indexOf(r) !== -1 ) dom.style[r] = css[r] + 'px'; + else dom.style[r] = css[r]; + } + + }, + + set: function( g, o ){ + + for( let att in o ){ + if( att === 'txt' ) g.textContent = o[ att ]; + if( att === 'link' ) g.setAttributeNS( T.links, 'xlink:href', o[ att ] ); + else g.setAttributeNS( null, att, o[ att ] ); + } + + }, + + get: function( dom, id ){ + + if( id === undefined ) return dom; // root + else if( !isNaN( id ) ) return dom.childNodes[ id ]; // first child + else if( id instanceof Array ){ + if(id.length === 2) return dom.childNodes[ id[0] ].childNodes[ id[1] ]; + if(id.length === 3) return dom.childNodes[ id[0] ].childNodes[ id[1] ].childNodes[ id[2] ]; + } + + }, + + dom : function ( type, css, obj, dom, id ) { + + type = type || 'div'; + + if( T.SVG_TYPE_D.indexOf(type) !== -1 || T.SVG_TYPE_G.indexOf(type) !== -1 ){ // is svg element + + if( type ==='svg' ){ + + dom = document.createElementNS( T.svgns, 'svg' ); + T.set( dom, obj ); + + /* } else if ( type === 'use' ) { + + dom = document.createElementNS( T.svgns, 'use' ); + T.set( dom, obj ); +*/ + } else { + // create new svg if not def + if( dom === undefined ) dom = document.createElementNS( T.svgns, 'svg' ); + T.addAttributes( dom, type, obj, id ); + + } + + } else { // is html element + + if( dom === undefined ) dom = document.createElementNS( T.htmls, type ); + else dom = dom.appendChild( document.createElementNS( T.htmls, type ) ); + + } + + if( css ) dom.style.cssText = css; + + if( id === undefined ) return dom; + else return dom.childNodes[ id || 0 ]; + + }, + + addAttributes : function( dom, type, o, id ){ + + let g = document.createElementNS( T.svgns, type ); + T.set( g, o ); + T.get( dom, id ).appendChild( g ); + if( T.SVG_TYPE_G.indexOf(type) !== -1 ) g.style.pointerEvents = 'none'; + return g; + + }, + + clear : function( dom ){ + + T.purge( dom ); + while (dom.firstChild) { + if ( dom.firstChild.firstChild ) T.clear( dom.firstChild ); + dom.removeChild( dom.firstChild ); + } + + }, + + purge : function ( dom ) { + + let a = dom.attributes, i, n; + if (a) { + i = a.length; + while(i--){ + n = a[i].name; + if (typeof dom[n] === 'function') dom[n] = null; + } + } + a = dom.childNodes; + if (a) { + i = a.length; + while(i--){ + T.purge( dom.childNodes[i] ); + } + } + + }, + + // ---------------------- + // SVG Effects function + // ---------------------- + + addSVGGlowEffect: function () { + + if ( document.getElementById( 'UILGlow') !== null ) return; + + let svgFilter = T.initUILEffects(); + + let filter = T.addAttributes( svgFilter, 'filter', { id: 'UILGlow', x: '-20%', y: '-20%', width: '140%', height: '140%' } ); + T.addAttributes( filter, 'feGaussianBlur', { in: 'SourceGraphic', stdDeviation: '3', result: 'uilBlur' } ); + let feMerge = T.addAttributes( filter, 'feMerge', { } ); + + for( let i = 0; i <= 3; i++ ) { + + T.addAttributes( feMerge, 'feMergeNode', { in: 'uilBlur' } ); + + } + + T.addAttributes( feMerge, 'feMergeNode', { in: 'SourceGraphic' } ); + + }, + + initUILEffects: function () { + + let svgFilter = document.getElementById( 'UILSVGEffects'); + + if ( svgFilter === null ) { + + svgFilter = T.dom( 'svg', undefined , { id: 'UILSVGEffects', width: '0', height: '0' } ); + document.body.appendChild( svgFilter ); + + } + + return svgFilter; + + }, + + // ---------------------- + // Color function + // ---------------------- + + ColorLuma : function ( hex, l ) { + + //if( hex.substring(0, 3) === 'rgba' ) hex = '#000'; + + if( hex === 'n' ) hex = '#000'; + + // validate hex string + hex = String(hex).replace(/[^0-9a-f]/gi, ''); + if (hex.length < 6) { + hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; + } + l = l || 0; + + // convert to decimal and change luminosity + let rgb = "#", c, i; + for (i = 0; i < 3; i++) { + c = parseInt(hex.substr(i*2,2), 16); + c = Math.round(Math.min(Math.max(0, c + (c * l)), 255)).toString(16); + rgb += ("00"+c).substr(c.length); + } + + return rgb; + + }, + + findDeepInver: function ( c ) { + + return (c[0] * 0.3 + c[1] * .59 + c[2] * .11) <= 0.6; + + }, + + lerpColor: function( c1, c2, factor ) { + let newColor = {}; + for ( let i = 0; i < 3; i++ ) { + newColor[i] = c1[ i ] + ( c2[ i ] - c1[ i ] ) * factor; + } + return newColor; + }, + + hexToHtml: function ( v ) { + v = v === undefined ? 0x000000 : v; + return "#" + ("000000" + v.toString(16)).substr(-6); + + }, + + htmlToHex: function ( v ) { + + return v.toUpperCase().replace("#", "0x"); + + }, + + u255: function (c, i) { + + return parseInt(c.substring(i, i + 2), 16) / 255; + + }, + + u16: function ( c, i ) { + + return parseInt(c.substring(i, i + 1), 16) / 15; + + }, + + unpack: function( c ){ + + if (c.length == 7) return [ T.u255(c, 1), T.u255(c, 3), T.u255(c, 5) ]; + else if (c.length == 4) return [ T.u16(c,1), T.u16(c,2), T.u16(c,3) ]; + + }, + + p255: function ( c ) { + let h = Math.round( ( c * 255 ) ).toString( 16 ); + if ( h.length < 2 ) h = '0' + h; + return h; + }, + + pack: function ( c ) { + + return '#' + T.p255( c[ 0 ] ) + T.p255( c[ 1 ] ) + T.p255( c[ 2 ] ); + + }, + + htmlRgb: function( c ){ + + return 'rgb(' + Math.round(c[0] * 255) + ','+ Math.round(c[1] * 255) + ','+ Math.round(c[2] * 255) + ')'; + + }, + + pad: function( n ){ + if(n.length == 1)n = '0' + n; + return n; + }, + + rgbToHex : function( c ){ + + let r = Math.round(c[0] * 255).toString(16); + let g = Math.round(c[1] * 255).toString(16); + let b = Math.round(c[2] * 255).toString(16); + return '#' + T.pad(r) + T.pad(g) + T.pad(b); + + // return '#' + ( '000000' + ( ( c[0] * 255 ) << 16 ^ ( c[1] * 255 ) << 8 ^ ( c[2] * 255 ) << 0 ).toString( 16 ) ).slice( - 6 ); + + }, + + hueToRgb: function( p, q, t ){ + + if ( t < 0 ) t += 1; + if ( t > 1 ) t -= 1; + if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; + if ( t < 1 / 2 ) return q; + if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); + return p; + + }, + + rgbToHsl: function ( c ) { + + let r = c[0], g = c[1], b = c[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h = 0, s = 0, l = (min + max) / 2; + if (l > 0 && l < 1) s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); + if (delta > 0) { + if (max == r && max != g) h += (g - b) / delta; + if (max == g && max != b) h += (2 + (b - r) / delta); + if (max == b && max != r) h += (4 + (r - g) / delta); + h /= 6; + } + return [ h, s, l ]; + + }, + + hslToRgb: function ( c ) { + + let p, q, h = c[0], s = c[1], l = c[2]; + + if ( s === 0 ) return [ l, l, l ]; + else { + q = l <= 0.5 ? l * (s + 1) : l + s - ( l * s ); + p = l * 2 - q; + return [ T.hueToRgb(p, q, h + 0.33333), T.hueToRgb(p, q, h), T.hueToRgb(p, q, h - 0.33333) ]; + } + + }, + + // ---------------------- + // SVG MODEL + // ---------------------- + + makeGradiant: function ( type, settings, parent, colors ) { + + T.dom( type, null, settings, parent, 0 ); + + let n = parent.childNodes[0].childNodes.length - 1, c; + + for( let i = 0; i < colors.length; i++ ){ + + c = colors[i]; + //T.dom( 'stop', null, { offset:c[0]+'%', style:'stop-color:'+c[1]+'; stop-opacity:'+c[2]+';' }, parent, [0,n] ); + T.dom( 'stop', null, { offset:c[0]+'%', 'stop-color':c[1], 'stop-opacity':c[2] }, parent, [0,n] ); + + } + + }, + + /*makeGraph: function () { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic , { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'butt' }, svg );//0 + //T.dom( 'rect', '', { x:10, y:10, width:108, height:108, stroke:'rgba(0,0,0,0.3)', 'stroke-width':2 , fill:'none'}, svg );//1 + //T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + + //T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.3)', 'stroke-width':7 , fill:'none'}, svg );//2 + //T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.graph = svg; + + },*/ + + makePad: function ( model ) { + + let ww = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+ww+' '+ww, width:ww, height:ww, preserveAspectRatio:'none' } ); + let w = 200; + let d = (ww-w)*0.5, m = 20; + Tools.dom( 'rect', '', { x: d, y: d, width: w, height: w, fill:T.colors.back }, svg ); // 0 + Tools.dom( 'rect', '', { x: d+m*0.5, y: d+m*0.5, width: w - m , height: w - m, fill:T.colors.button }, svg ); // 1 + // Pointer + Tools.dom( 'line', '', { x1: d+(m*0.5), y1: ww *0.5, x2: d+(w-m*0.5), y2: ww * 0.5, stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 2 + Tools.dom( 'line', '', { x1: ww * 0.5, x2: ww * 0.5, y1: d+(m*0.5), y2: d+(w-m*0.5), stroke:T.colors.back, 'stroke-width': 2 }, svg ); // 3 + Tools.dom( 'circle', '', { cx: ww * 0.5, cy: ww * 0.5, r:5, stroke: T.colors.text, 'stroke-width': 5, fill:'none' }, svg ); // 4 + T.pad2d = svg; + + }, + + makeKnob: function ( model ) { + + let w = 128; + let radius = 34; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:T.colors.button, stroke:'rgba(0,0,0,0.3)', 'stroke-width':8 }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':4, fill:'none', 'stroke-linecap':'round' }, svg );//1 + T.dom( 'circle', '', { cx:64, cy:64, r:radius+7, stroke:'rgba(0,0,0,0.1)', 'stroke-width':7 , fill:'none'}, svg );//2 + T.dom( 'path', '', { d:'', stroke:'rgba(255,255,255,0.3)', 'stroke-width':2, fill:'none', 'stroke-linecap':'round', 'stroke-opacity':0.5 }, svg );//3 + T.knob = svg; + + }, + + makeCircular: function ( model ) { + + let w = 128; + let radius = 40; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'circle', '', { cx:64, cy:64, r:radius, stroke:'rgba(0,0,0,0.1)', 'stroke-width':10, fill:'none' }, svg );//0 + T.dom( 'path', '', { d:'', stroke:T.colors.text, 'stroke-width':7, fill:'none', 'stroke-linecap':'butt' }, svg );//1 + T.circular = svg; + + }, + + makeJoystick: function ( model ) { + + //+' background:#f00;' + + let w = 128, ccc; + let radius = Math.floor((w-30)*0.5); + let innerRadius = Math.floor(radius*0.6); + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + if( model === 0 ){ + + + + // gradian background + ccc = [ [40, 'rgb(0,0,0)', 0.3], [80, 'rgb(0,0,0)', 0], [90, 'rgb(50,50,50)', 0.4], [100, 'rgb(50,50,50)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'grad', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian shadow + ccc = [ [60, 'rgb(0,0,0)', 0.5], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradS', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // gradian stick + let cc0 = ['rgb(40,40,40)', 'rgb(48,48,48)', 'rgb(30,30,30)']; + let cc1 = ['rgb(1,90,197)', 'rgb(3,95,207)', 'rgb(0,65,167)']; + + ccc = [ [30, cc0[0], 1], [60, cc0[1], 1], [80, cc0[1], 1], [100, cc0[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + ccc = [ [30, cc1[0], 1], [60, cc1[1], 1], [80, cc1[1], 1], [100, cc1[2], 1] ]; + T.makeGradiant( 'radialGradient', { id:'gradIn2', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + // graph + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'url(#grad)' }, svg );//2 + T.dom( 'circle', '', { cx:64+5, cy:64+10, r:innerRadius+10, fill:'url(#gradS)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'url(#gradIn)' }, svg );//4 + + T.joystick_0 = svg; + + } else { + // gradian shadow + ccc = [ [69, 'rgb(0,0,0)', 0],[70, 'rgb(0,0,0)', 0.3], [100, 'rgb(0,0,0)', 0] ]; + T.makeGradiant( 'radialGradient', { id:'gradX', cx:'50%', cy:'50%', r:'50%', fx:'50%', fy:'50%' }, svg, ccc ); + + T.dom( 'circle', '', { cx:64, cy:64, r:radius, fill:'none', stroke:'rgba(100,100,100,0.25)', 'stroke-width':'4' }, svg );//2 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius+14, fill:'url(#gradX)' }, svg );//3 + T.dom( 'circle', '', { cx:64, cy:64, r:innerRadius, fill:'none', stroke:'rgb(100,100,100)', 'stroke-width':'4' }, svg );//4 + + T.joystick_1 = svg; + } + + + + }, + + makeColorRing: function () { + + let w = 256; + let svg = T.dom( 'svg', T.css.basic + 'position:relative;', { viewBox:'0 0 '+w+' '+w, width:w, height:w, preserveAspectRatio:'none' } ); + T.dom( 'defs', null, {}, svg ); + T.dom( 'g', null, {}, svg ); + + let s = 30;//stroke + let r =( w-s )*0.5; + let mid = w*0.5; + let n = 24, nudge = 8 / r / n * Math.PI, a1 = 0; + let am, tan, d2, a2, ar, i, j, path, ccc; + let color = []; + + for ( i = 0; i <= n; ++i) { + + d2 = i / n; + a2 = d2 * T.TwoPI; + am = (a1 + a2) * 0.5; + tan = 1 / Math.cos((a2 - a1) * 0.5); + + ar = [ + Math.sin(a1), -Math.cos(a1), + Math.sin(am) * tan, -Math.cos(am) * tan, + Math.sin(a2), -Math.cos(a2) + ]; + + color[1] = T.rgbToHex( T.hslToRgb([d2, 1, 0.5]) ); + + if (i > 0) { + + j = 6; + while(j--){ + ar[j] = ((ar[j]*r)+mid).toFixed(2); + } + + path = ' M' + ar[0] + ' ' + ar[1] + ' Q' + ar[2] + ' ' + ar[3] + ' ' + ar[4] + ' ' + ar[5]; + + ccc = [ [0,color[0],1], [100,color[1],1] ]; + T.makeGradiant( 'linearGradient', { id:'G'+i, x1:ar[0], y1:ar[1], x2:ar[4], y2:ar[5], gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'path', '', { d:path, 'stroke-width':s, stroke:'url(#G'+i+')', 'stroke-linecap':"butt" }, svg, 1 ); + + } + a1 = a2 - nudge; + color[0] = color[1]; + } + + let tw = 84.90; + + // black / white + ccc = [ [0, '#FFFFFF', 1], [50, '#FFFFFF', 0], [50, '#000000', 0], [100, '#000000', 1] ]; + T.makeGradiant( 'linearGradient', { id:'GL0', x1:0, y1:mid-tw, x2:0, y2:mid+tw, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + ccc = [ [0, '#7f7f7f', 1], [50, '#7f7f7f', 0.5], [100, '#7f7f7f', 0] ]; + T.makeGradiant( 'linearGradient', { id:'GL1', x1:mid-49.05, y1:0, x2:mid+98, y2:0, gradientUnits:"userSpaceOnUse" }, svg, ccc ); + + T.dom( 'g', null, { 'transform-origin': '128px 128px', 'transform':'rotate(0)' }, svg );//2 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'red' }, svg, 2 );// 2,0 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL1)','stroke-width':1, stroke:'url(#GL1)' }, svg, 2 );//2,1 + T.dom( 'polygon', '', { points:'78.95 43.1 78.95 212.85 226 128', fill:'url(#GL0)','stroke-width':1, stroke:'url(#GL0)' }, svg, 2 );//2,2 + T.dom( 'path', '', { d:'M 255.75 136.5 Q 256 132.3 256 128 256 123.7 255.75 119.5 L 241 128 255.75 136.5 Z', fill:'none','stroke-width':2, stroke:'#000' }, svg, 2 );//2,3 + //T.dom( 'circle', '', { cx:128+113, cy:128, r:6, 'stroke-width':3, stroke:'#000', fill:'none' }, svg, 2 );//2.3 + + T.dom( 'circle', '', { cx:128, cy:128, r:6, 'stroke-width':2, stroke:'#000', fill:'none' }, svg );//3 + + T.colorRing = svg; + + }, + + icon: function ( type, color, w ){ + + w = w || 40; + //color = color || '#DEDEDE'; + let viewBox = '0 0 256 256'; + //let viewBox = '0 0 '+ w +' '+ w; + let t = [""]; + switch(type){ + case 'logo': + t[1]=""; + break; + case 'donate': + t[1]=""; + break; + case 'neo': + t[1]=""; + break; + case 'phy': + t[1]=""; + break; + case 'config': + t[1]=""; + break; + case 'github': + t[1]=""; + break; + case 'save': + t[1]=""; + break; + } + t[2] = ""; + return t.join("\n"); + + }, + + logoFill_d:` + M 171 150.75 L 171 33.25 155.5 33.25 155.5 150.75 Q 155.5 162.2 147.45 170.2 139.45 178.25 128 178.25 116.6 178.25 108.55 170.2 100.5 162.2 100.5 150.75 + L 100.5 33.25 85 33.25 85 150.75 Q 85 168.65 97.55 181.15 110.15 193.75 128 193.75 145.9 193.75 158.4 181.15 171 168.65 171 150.75 + M 200 33.25 L 184 33.25 184 150.8 Q 184 174.1 167.6 190.4 151.3 206.8 128 206.8 104.75 206.8 88.3 190.4 72 174.1 72 150.8 L 72 33.25 56 33.25 56 150.75 + Q 56 180.55 77.05 201.6 98.2 222.75 128 222.75 157.8 222.75 178.9 201.6 200 180.55 200 150.75 L 200 33.25 Z + `, + + logo_github:` + M 180.5 70 Q 186.3 82.4 181.55 96.55 196.5 111.5 189.7 140.65 183.65 168.35 146 172.7 152.5 178.7 152.55 185.9 L 152.55 218.15 Q 152.84 224.56 159.15 223.3 + 159.21 223.3 159.25 223.3 181.14 216.25 198.7 198.7 228 169.4 228 128 228 86.6 198.7 57.3 169.4 28 128 28 86.6 28 57.3 57.3 28 86.6 28 128 28 169.4 57.3 198.7 74.85 + 216.25 96.75 223.3 96.78 223.3 96.8 223.3 103.16 224.54 103.45 218.15 L 103.45 200 Q 82.97 203.1 75.1 196.35 69.85 191.65 68.4 185.45 64.27 177.055 59.4 174.15 49.20 + 166.87 60.8 167.8 69.85 169.61 75.7 180 81.13 188.09 90 188.55 98.18 188.86 103.45 185.9 103.49 178.67 110 172.7 72.33 168.33 66.3 140.65 59.48 111.49 74.45 96.55 69.7 + 82.41 75.5 70 84.87 68.74 103.15 80 115.125 76.635 128 76.85 140.85 76.65 152.85 80 171.1 68.75 180.5 70 Z + `, + + logo_neo:` + M 219 52 L 206 52 206 166 Q 206 183.4 193.75 195.65 181.4 208 164 208 146.6 208 134.35 195.65 122 183.4 122 166 L 122 90 Q 122 77.6 113.15 68.85 104.4 60 92 60 79.55 + 60 70.75 68.85 62 77.6 62 90 L 62 204 75 204 75 90 Q 75 83 79.95 78 84.95 73 92 73 99 73 104 78 109 83 109 90 L 109 166 Q 109 188.8 125.15 204.85 141.2 221 164 221 + 186.75 221 202.95 204.85 219 188.8 219 166 L 219 52 M 194 52 L 181 52 181 166 Q 181 173 176.05 178 171.05 183 164 183 157 183 152 178 147 173 147 166 L 147 90 Q 147 + 67.2 130.85 51.15 114.8 35 92 35 69.25 35 53.05 51.15 37 67.2 37 90 L 37 204 50 204 50 90 Q 50 72.6 62.25 60.35 74.6 48 92 48 109.4 48 121.65 60.35 134 72.6 134 90 L + 134 166 Q 134 178.4 142.85 187.15 151.6 196 164 196 176.45 196 185.25 187.15 194 178.4 194 166 L 194 52 Z + `, + + logo_phy:` + M 103.55 37.95 L 127.95 37.95 Q 162.35 37.95 186.5 55 210.9 72.35 210.9 96.5 210.9 120.65 186.5 137.7 162.35 155 127.95 155 L 127.95 237.95 M 127.95 155 + Q 93.55 155 69.15 137.7 45 120.65 45 96.5 45 72.35 69.15 55 70.9 53.8 72.85 52.85 M 127.95 155 L 127.95 37.95 + `, + + logo_config:` + M 204.35 51.65 L 173.25 82.75 Q 192 101.5 192 128 L 236 128 M 192 128 Q 192 154.55 173.25 173.25 L 204.4 204.4 M 51.65 51.65 L 82.75 82.75 Q 101.5 64 128 64 + L 128 20 M 51.6 204.4 L 82.75 173.25 Q 64 154.55 64 128 L 20 128 M 128 236 L 128 192 Q 101.5 192 82.75 173.25 M 64 128 Q 64 101.5 82.75 82.75 M 173.25 173.25 + Q 154.55 192 128 192 M 128 64 Q 154.55 64 173.25 82.75 + `, + + logo_donate:` + M 171.3 80.3 Q 179.5 62.15 171.3 45.8 164.1 32.5 141.35 30.1 L 94.35 30.1 Q 89.35 30.4 88.3 35.15 L 70.5 148.05 Q 70.2 152.5 73.7 152.6 L 100.95 152.6 107 111.6 Q 108.75 + 106.55 112.6 106.45 130.45 108.05 145.3 103.9 163.35 98.75 171.3 80.3 M 179.8 71.5 Q 178.6 79.75 174.9 87.85 168.45 102.9 151.9 109.15 140.65 113.95 117.55 113 113.15 + 112.75 111 117.45 L 102.7 169.95 Q 102.45 173.8 105.5 173.85 L 128.95 173.85 Q 132.2 174.2 133.35 169.65 L 138.3 139.95 Q 139.75 135.6 143.1 135.5 146.6 135.75 150.6 135.65 + 154.55 135.5 157.35 135.1 160.15 134.7 166.75 132.35 181.35 127.4 187.9 111.2 194.25 95.75 189.5 81.95 186.75 74.85 179.8 71.5 M 103.5 209.9 Q 103.5 202.85 99.7 198.85 95.95 + 194.75 89.4 194.75 82.8 194.75 79.05 198.85 75.3 202.9 75.3 209.9 75.3 216.85 79.05 220.95 82.8 225.05 89.4 225.05 95.95 225.05 99.7 221 103.5 216.95 103.5 209.9 M 95.45 205.5 + Q 95.95 207.3 95.95 209.9 95.95 212.65 95.45 214.35 94.95 216 94 217.3 93.1 218.45 91.9 219 90.7 219.55 89.4 219.55 88.15 219.55 86.95 219.05 85.75 218.55 84.8 217.3 83.9 216.15 + 83.4 214.35 82.85 212.6 82.85 209.9 82.85 207.3 83.4 205.45 83.95 203.55 84.85 202.45 85.9 201.2 86.95 200.75 88.05 200.25 89.4 200.25 90.7 200.25 91.85 200.8 93.05 201.3 94 202.5 + 94.9 203.65 95.45 205.5 M 153.3 195.35 L 145.3 195.35 135.5 224.45 142.8 224.45 144.6 218.5 153.75 218.5 155.6 224.45 163.1 224.45 153.3 195.35 M 152.15 213.25 L 146.25 213.25 + 149.2 203.65 152.15 213.25 M 116.75 195.35 L 107.8 195.35 107.8 224.45 114.5 224.45 114.5 204.2 125.7 224.45 132.75 224.45 132.75 195.35 126.05 195.35 126.05 212.05 116.75 195.35 M + 66.5 197.65 Q 64.15 196.15 61.45 195.75 58.8 195.35 55.75 195.35 L 46.7 195.35 46.7 224.45 55.8 224.45 Q 58.8 224.45 61.5 224.05 64.15 223.6 66.4 222.15 69.15 220.45 70.9 217.2 + 72.7 214 72.7 209.95 72.7 205.7 71 202.6 69.35 199.5 66.5 197.65 M 64.2 205 Q 65.2 207 65.2 209.9 65.2 212.75 64.25 214.75 63.3 216.75 61.5 217.85 60 218.85 58.3 218.9 56.6 219 + 54.15 219 L 54 219 54 200.8 54.15 200.8 Q 56.4 200.8 58.05 200.9 59.7 200.95 61.15 201.75 63.2 202.95 64.2 205 M 210.2 195.35 L 190.5 195.35 190.5 224.45 210.2 224.45 210.2 218.9 + 197.75 218.9 197.75 211.55 209.2 211.55 209.2 206 197.75 206 197.75 200.9 210.2 200.9 210.2 195.35 M 187.5 195.35 L 163 195.35 163 200.9 171.6 200.9 171.6 224.45 178.9 224.45 178.9 + 200.9 187.5 200.9 187.5 195.35 Z + `, + +}; + +T.setText(); + +const Tools = T; + +///https://wicg.github.io/file-system-access/#api-filesystemfilehandle-getfile + + +class Files { + + //----------------------------- + // FILE TYPE + //----------------------------- + + static autoTypes( type ) { + + let t = []; + + switch( type ){ + case 'svg': + t = [ { accept: { 'image/svg+xml': '.svg'} }, ]; + break; + case 'wav': + t = [ { accept: { 'audio/wav': '.wav'} }, ]; + break; + case 'mp3': + t = [ { accept: { 'audio/mpeg': '.mp3'} }, ]; + break; + case 'mp4': + t = [ { accept: { 'video/mp4': '.mp4'} }, ]; + break; + case 'bin': case 'hex': + t = [ { description: 'Binary Files', accept: { 'application/octet-stream': ['.bin', '.hex'] } }, ]; + break; + case 'text': + t = [ { description: 'Text Files', accept: { 'text/plain': ['.txt', '.text'], 'text/html': ['.html', '.htm'] } }, ]; + break; + case 'json': + t = [ { description: 'JSON Files', accept: { 'application/json': ['.json'] } }, ];//text/plain + break; + case 'js': + t = [ { description: 'JavaScript Files', accept: { 'text/javascript': ['.js'] } }, ]; + break; + case 'image': + t = [ { description: 'Images', accept: { 'image/*': ['.png', '.gif', '.jpeg', '.jpg'] } }, ]; + break; + case 'icon': + t = [ { description: 'Icons', accept: { 'image/x-ico': ['.ico'] } }, ]; + break; + case 'lut': + t = [ { description: 'Lut', accept: { 'text/plain': ['.cube', '.3dl'] } }, ]; + break; + + } + + return t + + } + + + //----------------------------- + // LOAD + //----------------------------- + + static async load( o = {} ) { + + if (typeof window.showOpenFilePicker !== 'function') { + window.showOpenFilePicker = Files.showOpenFilePickerPolyfill; + } + + try { + + let type = o.type || ''; + + const options = { + excludeAcceptAllOption: type ? true : false, + multiple: false, + //startIn:'./assets' + }; + + options.types = Files.autoTypes( type ); + + // create a new handle + const handle = await window.showOpenFilePicker( options ); + const file = await handle[0].getFile(); + //let content = await file.text() + + if( !file ) return null + + let fname = file.name; + let ftype = fname.substring( fname.lastIndexOf('.')+1, fname.length ); + + const dataUrl = [ 'png', 'jpg', 'jpeg', 'mp4', 'webm', 'ogg', 'mp3' ]; + const dataBuf = [ 'sea', 'z', 'hex', 'bvh', 'BVH', 'glb', 'gltf' ]; + const reader = new FileReader(); + + if( dataUrl.indexOf( ftype ) !== -1 ) reader.readAsDataURL( file ); + else if( dataBuf.indexOf( ftype ) !== -1 ) reader.readAsArrayBuffer( file ); + else reader.readAsText( file ); + + reader.onload = function(e) { + + let content = e.target.result; + + switch(type){ + case 'image': + let img = new Image; + img.onload = function() { + if( o.callback ) o.callback( img, fname, ftype ); + }; + img.src = content; + break; + case 'json': + if( o.callback ) o.callback( JSON.parse( content ), fname, ftype ); + break; + default: + if( o.callback ) o.callback( content, fname, ftype ); + break; + } + + }; + + } catch(e) { + + console.log(e); + if( o.always && o.callback ) o.callback( null ); + + } + + } + + static showOpenFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const input = document.createElement("input"); + input.type = "file"; + input.multiple = options.multiple; + input.accept = options.types + .map((type) => type.accept) + .flatMap((inst) => Object.keys(inst).flatMap((key) => inst[key])) + .join(","); + + input.addEventListener("change", () => { + resolve( + [...input.files].map((file) => { + return { + getFile: async () => + new Promise((resolve) => { + resolve(file); + }), + }; + }) + ); + }); + + input.click(); + }) + } + + + //----------------------------- + // SAVE + //----------------------------- + + static async save( o = {} ) { + + let usePoly = false; + + if (typeof window.showSaveFilePicker !== 'function') { + window.showSaveFilePicker = Files.showSaveFilePickerPolyfill; + usePoly = true; + } + + try { + + let type = o.type || ''; + + const options = { + suggestedName: o.name || 'hello', + data: o.data || '' + }; + + options.types = Files.autoTypes( type ); + options.finalType = Object.keys( options.types[0].accept )[0]; + options.suggestedName += options.types[0].accept[options.finalType][0]; + + + // create a new handle + const handle = await window.showSaveFilePicker( options ); + + if( usePoly ) return + + // create a FileSystemWritableFileStream to write to + const file = await handle.createWritable(); + + let blob = new Blob([ options.data ], { type: options.finalType }); + + // write our file + await file.write(blob); + + // close the file and write the contents to disk. + await file.close(); + + } catch(e) { + + console.log(e); + + } + + } + + static showSaveFilePickerPolyfill( options ) { + return new Promise((resolve) => { + const a = document.createElement("a"); + a.download = options.suggestedName || "my-file.txt"; + let blob = new Blob([ options.data ], { type:options.finalType }); + a.href = URL.createObjectURL( blob ); + + a.addEventListener("click", () => { + resolve( + setTimeout( () => URL.revokeObjectURL(a.href), 1000 ) + ); + }); + a.click(); + }) + } + + + //----------------------------- + // FOLDER not possible in poly + //----------------------------- + + static async getFolder() { + + try { + + const handle = await window.showDirectoryPicker(); + const files = []; + for await (const entry of handle.values()) { + const file = await entry.getFile(); + files.push(file); + } + + console.log(files); + return files; + + } catch(e) { + + console.log(e); + + } + + } + + + + + + + + + + +} + +class V2 { + + constructor( x = 0, y = 0 ) { + + this.x = x; + this.y = y; + + } + + set ( x, y ) { + + this.x = x; + this.y = y; + return this; + + } + + divide ( v ) { + + this.x /= v.x; + this.y /= v.y; + return this; + + } + + multiply ( v ) { + + this.x *= v.x; + this.y *= v.y; + return this; + + } + + multiplyScalar ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + return this; + + } + + divideScalar ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + } + + length () { + + return Math.sqrt( this.x * this.x + this.y * this.y ); + + } + + angle () { + + // computes the angle in radians with respect to the positive x-axis + + var angle = Math.atan2( this.y, this.x ); + + if ( angle < 0 ) angle += 2 * Math.PI; + + return angle; + + } + + addScalar ( s ) { + + this.x += s; + this.y += s; + return this; + + } + + negate () { + + this.x *= -1; + this.y *= -1; + return this; + + } + + neg () { + + this.x = -1; + this.y = -1; + return this; + + } + + isZero () { + + return ( this.x === 0 && this.y === 0 ); + + } + + copy ( v ) { + + this.x = v.x; + this.y = v.y; + + return this; + + } + + equals ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) ); + + } + + nearEquals ( v, n ) { + + return ( ( v.x.toFixed(n) === this.x.toFixed(n) ) && ( v.y.toFixed(n) === this.y.toFixed(n) ) ); + + } + + lerp ( v, alpha ) { + + if( v === null ){ + this.x -= this.x * alpha; + this.y -= this.y * alpha; + } else { + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + } + + return this; + + } + +} + +/** + * @author lth / https://github.com/lo-th + */ + +class Proto { + constructor(o = {}) { + // disable mouse controle + this.lock = o.lock || false; + + // for button + this.neverlock = false; + + // only simple space + this.isSpace = o.isSpace || false; + + // if is on gui or group + this.main = o.main || null; + this.isUI = o.isUI || false; + this.group = o.group || null; + + this.isListen = false; + + this.top = 0; + this.ytop = 0; + + this.dx = o.dx || 0; + + this.isSelectable = o.selectable !== undefined ? o.selectable : false; + this.unselectable = + o.unselect !== undefined ? o.unselect : this.isSelectable; + + this.ontop = o.ontop ? o.ontop : false; // 'beforebegin' 'afterbegin' 'beforeend' 'afterend' + + this.css = this.main ? this.main.css : Tools.css; + + this.colors = Tools.defineColor( + o, + this.main + ? this.group + ? this.group.colors + : this.main.colors + : Tools.colors + ); + + this.overEffect = this.colors.showOver; + + this.svgs = Tools.svgs; + + this.zone = { x: 0, y: 0, w: 0, h: 0, d: 0 }; + this.local = new V2().neg(); + + this.isCanvasOnly = false; + this.isSelect = false; + + // percent of title + this.p = o.p !== undefined ? o.p : Tools.size.p; + + this.w = this.isUI ? this.main.size.w : Tools.size.w; + if (o.w !== undefined) this.w = o.w; + + this.h = this.isUI ? this.main.size.h : Tools.size.h; + if (o.h !== undefined) this.h = o.h; + if (!this.isSpace) this.h = this.h < 11 ? 11 : this.h; + else this.lock = true; + + // decale for canvas only + this.fw = o.fw || 0; + + this.autoWidth = o.auto || true; // auto width or flex + this.isOpen = false; //false// open statu + + // radius for toolbox + this.radius = o.radius || this.colors.radius; + + this.transition = o.transition || Tools.transition; + + // only for number + this.isNumber = false; + this.noNeg = o.noNeg || false; + this.allEqual = o.allEqual || false; + + // only most simple + this.mono = false; + + // stop listening for edit slide text + this.isEdit = false; + + // no title + this.simple = o.simple || false; + if (this.simple) this.sa = 0; + + // define obj size + this.setSize(this.w); + + // title size + if (o.sa !== undefined) this.sa = o.sa; + if (o.sb !== undefined) this.sb = o.sb; + if (this.simple) this.sb = this.w - this.sa; + + // last number size for slide + this.sc = o.sc === undefined ? 47 : o.sc; + + // for listening object + this.objectLink = null; + this.isSend = false; + this.objectKey = null; + + this.txt = o.name || ""; + this.name = o.rename || this.txt; + this.target = o.target || null; + + // callback + this.callback = o.callback === undefined ? null : o.callback; + this.endCallback = null; + this.openCallback = o.openCallback === undefined ? null : o.openCallback; + this.closeCallback = o.closeCallback === undefined ? null : o.closeCallback; + + // if no callback take one from group or gui + if (this.callback === null && this.isUI && this.main.callback !== null) { + this.callback = this.group ? this.group.callback : this.main.callback; + } + + // elements + this.c = []; + + // style + this.s = []; + + this.useFlex = this.isUI ? this.main.useFlex : false; + let flexible = this.useFlex + ? "display:flex; justify-content:center; align-items:center; text-align:center; flex: 1 100%;" + : "float:left;"; + + this.c[0] = Tools.dom( + "div", + this.css.basic + flexible + "position:relative; height:20px;" + ); + + this.s[0] = this.c[0].style; + + // bottom margin + this.margin = this.colors.sy; + this.mtop = 0; + let marginDiv = Tools.isDivid(this.margin); + + if (this.isUI && this.margin) { + this.s[0].boxSizing = "content-box"; + if (marginDiv) { + this.mtop = this.margin * 0.5; + //this.s[0].borderTop = '${this.mtop}px solid transparent' + //console.log(`${this.mtop}px solid transparent`) + this.s[0].borderTop = this.mtop + "px solid transparent"; + this.s[0].borderBottom = this.mtop + "px solid transparent"; + } else { + this.s[0].borderBottom = this.margin + "px solid transparent"; + } + } + + // with title + if (!this.simple) { + this.c[1] = Tools.dom("div", this.css.txt + this.css.middle); + this.s[1] = this.c[1].style; + this.c[1].textContent = this.name; + this.s[1].color = this.lock ? this.colors.titleoff : this.colors.title; + } + + if (o.pos) { + this.s[0].position = "absolute"; + for (let p in o.pos) { + this.s[0][p] = o.pos[p]; + } + this.mono = true; + } + + if (o.css) this.s[0].cssText = o.css; + } + + // ---------------------- + // make the node + // ---------------------- + + init() { + this.ytop = this.top + this.mtop; + + this.zone.h = this.h + this.margin; + this.zone.w = this.w; + + let s = this.s; // style cache + let c = this.c; // div cach + + s[0].height = this.h + "px"; + + if (this.isUI) s[0].background = this.colors.background; + + if (!this.autoWidth && this.useFlex) { + s[0].flex = "1 0 auto"; + s[0].minWidth = this.minw + "px"; + s[0].textAlign = "center"; + } else { + if (this.isUI) s[0].width = "100%"; + } + + //if( this.autoHeight ) s[0].transition = 'height 0.01s ease-out'; + if (c[1] !== undefined && this.autoWidth) { + s[1] = c[1].style; + s[1].top = 1 + "px"; + s[1].height = this.h - 2 + "px"; + } + + let frag = Tools.frag; + + for (let i = 1, lng = c.length; i !== lng; i++) { + if (c[i] !== undefined) { + frag.appendChild(c[i]); + s[i] = c[i].style; + } + } + + let pp = + this.target !== null + ? this.target + : this.isUI + ? this.main.inner + : document.body; + + if (this.ontop) pp.insertAdjacentElement("afterbegin", c[0]); + else pp.appendChild(c[0]); + + c[0].appendChild(frag); + + this.rSize(); + + // ! solo proto + if (!this.isUI) { + this.c[0].style.pointerEvents = "auto"; + Roots.add(this); + } + } + + addTransition() { + if (this.baseH && this.transition && this.isUI) { + this.c[0].style.transition = "height " + this.transition + "s ease-out"; + } + } + + // from Tools + + dom(type, css, obj, dom, id) { + return Tools.dom(type, css, obj, dom, id); + } + + setSvg(dom, type, value, id, id2) { + Tools.setSvg(dom, type, value, id, id2); + } + + setCss(dom, css) { + Tools.setCss(dom, css); + } + + clamp(value, min, max) { + return Tools.clamp(value, min, max); + } + + getColorRing() { + if (!Tools.colorRing) Tools.makeColorRing(); + return Tools.clone(Tools.colorRing); + } + + getJoystick(model) { + if (!Tools["joystick_" + model]) Tools.makeJoystick(model); + return Tools.clone(Tools["joystick_" + model]); + } + + getCircular(model) { + if (!Tools.circular) Tools.makeCircular(model); + return Tools.clone(Tools.circular); + } + + getKnob(model) { + if (!Tools.knob) Tools.makeKnob(model); + return Tools.clone(Tools.knob); + } + + getPad2d(model) { + if (!Tools.pad2d) Tools.makePad(model); + return Tools.clone(Tools.pad2d); + } + + // from Roots + + cursor(name) { + Roots.cursor(name); + } + + ///////// + + update() {} + + reset() {} + + ///////// + + content() { + return this.c[0]; + } + + getDom() { + return this.c[0]; + } + + uiout() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.background; + } + + uiover() { + if (this.lock) return; + if (!this.overEffect) return; + if (this.s) this.s[0].background = this.colors.backgroundOver; + } + + rename(s) { + if (this.c[1] !== undefined) this.c[1].textContent = s; + } + + listen() { + this.isListen = Roots.addListen(this); + return this; + } + + listening() { + // modified by Fedemarino + if (this.objectLink === null) return; + if (this.isSend) return; + if (this.isEdit) return; + // check if value has changed + let hasChanged = this.setValue(this.objectLink[this.objectKey]); + return hasChanged; + } + + setValue(v) { + const old = this.value; + if (this.isNumber) this.value = this.numValue(v); + //else if( v instanceof Array && v.length === 1 ) v = v[0]; + else this.value = v; + this.update(); + let hasChanged = false; + if (old !== this.value) { + hasChanged = true; + } + + return hasChanged; + } + + // ---------------------- + // update every change + // ---------------------- + + onChange(f) { + if (this.isSpace) return; + this.callback = f || null; + return this; + } + + // ---------------------- + // update only on end + // ---------------------- + + onFinishChange(f) { + if (this.isSpace) return; + this.callback = null; + this.endCallback = f; + return this; + } + + // ---------------------- + // event on open close + // ---------------------- + + onOpen(f) { + this.openCallback = f; + return this; + } + + onClose(f) { + this.closeCallback = f; + return this; + } + + // ---------------------- + // send back value + // ---------------------- + + send(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + this.isSend = true; + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + if (this.callback) this.callback(v, this.objectKey); + this.isSend = false; + } + + sendEnd(v) { + v = v || this.value; + if (v instanceof Array && v.length === 1) v = v[0]; + + if (this.endCallback) this.endCallback(v); + if (this.objectLink !== null) this.objectLink[this.objectKey] = v; + } + + // ---------------------- + // clear node + // ---------------------- + + dispose() { + if (this.isListen) Roots.removeListen(this); + + Tools.clear(this.c[0]); + + if (this.target !== null) { + if (this.group !== null) this.group.clearOne(this); + else this.target.removeChild(this.c[0]); + } else { + if (this.isUI) this.main.clearOne(this); + else document.body.removeChild(this.c[0]); + } + + if (!this.isUI) Roots.remove(this); + + this.c = null; + this.s = null; + this.callback = null; + this.target = null; + this.isListen = false; + } + + clear() {} + + // ---------------------- + // change size + // ---------------------- + + getWidth() { + let nw = Roots.getWidth(this); + if (nw) this.w = nw; + } + + setSize(sx) { + if (!this.autoWidth) return; + + this.w = sx; + + if (this.simple) { + this.sb = this.w - this.sa; + } else { + let pp = this.w * (this.p / 100); + //this.sa = Math.floor( pp + 10 ) + //this.sb = Math.floor( this.w - pp - 20 ) + this.sa = Math.floor(pp + 8); + this.sb = Math.floor(this.w - pp - 16); + } + } + + rSize() { + if (!this.autoWidth) return; + if (!this.isUI) this.s[0].width = this.w + "px"; + if (!this.simple) this.s[1].width = this.sa + "px"; + } + + // ---------------------- + // for numeric value + // ---------------------- + + setTypeNumber(o) { + this.isNumber = true; + + this.value = 0; + if (o.value !== undefined) { + if (typeof o.value === "string") this.value = o.value * 1; + else this.value = o.value; + } + + this.min = o.min === undefined ? -Infinity : o.min; + this.max = o.max === undefined ? Infinity : o.max; + this.precision = o.precision === undefined ? 2 : o.precision; + + let s; + + switch (this.precision) { + case 0: + s = 1; + break; + case 1: + s = 0.1; + break; + case 2: + s = 0.01; + break; + case 3: + s = 0.001; + break; + case 4: + s = 0.0001; + break; + case 5: + s = 0.00001; + break; + case 6: + s = 0.000001; + break; + } + + this.step = o.step === undefined ? s : o.step; + this.range = this.max - this.min; + this.value = this.numValue(this.value); + } + + numValue(n) { + if (this.noNeg) n = Math.abs(n); + return ( + Math.min(this.max, Math.max(this.min, n)).toFixed(this.precision) * 1 + ); + } + + // ---------------------- + // EVENTS DEFAULT + // ---------------------- + + handleEvent(e) { + if (this.lock) return; + if (this.neverlock) Roots.lock = false; + if (!this[e.type]) + return console.error(e.type, "this type of event no existe !"); + + // TODO !!!! + + //if( this.marginDiv ) z.d -= this.margin * 0.5 + + //if( this.marginDiv ) e.clientY -= this.margin * 0.5 + //if( this.group && this.group.marginDiv ) e.clientY -= this.group.margin * 0.5 + + return this[e.type](e); + } + + wheel(e) { + return false; + } + mousedown(e) { + return false; + } + mousemove(e) { + return false; + } + mouseup(e) { + return false; + } + keydown(e) { + return false; + } + keyup(e) { + return false; + } + + // ---------------------- + // object referency + // ---------------------- + + setReferency(obj, key) { + this.objectLink = obj; + this.objectKey = key; + } + + display(v = false) { + this.s[0].visibility = v ? "visible" : "hidden"; + } + + // ---------------------- + // resize height + // ---------------------- + + open() { + if (this.isOpen) return; + this.isOpen = true; + Roots.needResize = true; + if (this.openCallback) this.openCallback(); + } + + close() { + if (!this.isOpen) return; + this.isOpen = false; + Roots.needResize = true; + if (this.closeCallback) this.closeCallback(); + } + + needZone() { + Roots.needReZone = true; + } + + rezone() { + Roots.needReZone = true; + } + + // ---------------------- + // INPUT + // ---------------------- + + select() {} + + unselect() {} + + setInput(Input) { + Roots.setInput(Input, this); + } + + upInput(x, down) { + return Roots.upInput(x, down); + } + + // ---------------------- + // special item + // ---------------------- + + selected(b) { + this.isSelect = b || false; + } +} + +class Bool extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || false; + this.model = o.mode !== undefined ? o.mode : 0; + + this.onName = o.rename || this.txt; + if( o.onName ) o.onname = o.onName; + if( o.onname ) this.onName = o.onname; + + this.inh = o.inh || Math.floor( this.h*0.8 ); + this.inw = o.inw || 36; + + let cc = this.colors; + + if( this.model === 0 ){ + let t = Math.floor(this.h*0.5)-((this.inh-2)*0.5); + this.c[2] = this.dom( 'div', this.css.basic + 'background:'+ cc.inputBg +'; height:'+(this.inh-2)+'px; width:'+this.inw+'px; top:'+t+'px; border-radius:10px; border:2px solid '+ cc.back ); + this.c[3] = this.dom( 'div', this.css.basic + 'height:'+(this.inh-6)+'px; width:16px; top:'+(t+2)+'px; border-radius:10px; background:'+ cc.button+';' ); + } else { + this.p = 0; + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + } + + this.stat = -1; + + this.init(); + this.update(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + this.value = !this.value; + this.update( true ); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + this.cursor('pointer'); + return this.mode( true ) + + } + + reset () { + + this.cursor(); + return this.mode() + + } + + // ---------------------- + // MODE + // ---------------------- + + mode ( over ) { + + let change = false; + let cc = this.colors, s = this.s, n, v = this.value; + + if( over ) n = v ? 4 : 3; + else n = v ? 2 : 1; + + if( this.stat !== n ){ + + this.stat = n; + + if( this.model !== 0 ){ + + switch( n ){ + + case 1: s[2].color = cc.text; s[2].background = cc.button; break; + case 2: s[2].color = cc.textSelect; s[2].background = cc.select; break; + case 3: s[2].color = cc.textOver; s[2].background = cc.overoff; break; + case 4: s[2].color = cc.textOver; s[2].background = cc.over; break; + + } + + this.c[2].innerHTML = v ? this.onName : this.name; + + } else { + + switch( n ){ + + case 1: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.button; break;// off out + case 2: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.textOver; break;// on over + case 3: s[2].background = s[2].borderColor = cc.back; s[3].background = cc.overoff; break;// off over + case 4: s[2].background = s[2].borderColor = cc.backoff; s[3].background = cc.textSelect; break;// on out + + } + + s[3].marginLeft = v ? '17px' : '2px'; + this.c[1].textContent = v ? this.onName : this.name; + + } + + change = true; + + } + + return change + + } + + // ---------------------- + + update ( up ) { + + this.mode(); + if( up ) this.send(); + + } + + rSize () { + + super.rSize(); + + let s = this.s; + let w = (this.w - 10 ) - this.inw; + if( this.model === 0 ){ + s[2].left = w + 'px'; + s[3].left = w + 'px'; + } else { + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + } + + } + +} + +class Button extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = ''; + if( o.value !== undefined ) this.value = o.value; + + this.values = o.value || this.txt; + if( o.values ) this.values = o.values; + + if( !o.values && !o.value ) this.txt = ''; + + this.onName = o.onName || null; + + this.on = false; + + // force button width + this.bw = o.forceWidth || 0; + if(o.bw) this.bw = o.bw; + this.space = o.space || 3; + + if( typeof this.values === 'string' ) this.values = [ this.values ]; + + this.isDown = false; + this.neverlock = true; + this.res = 0; + + this.lng = this.values.length; + this.tmp = []; + this.stat = []; + + let sel, cc = this.colors; + + for( let i = 0; i < this.lng; i++ ){ + + sel = false; + if( this.values[i] === this.value && this.isSelectable ) sel = true; + + this.c[i+2] = this.dom( 'div', this.css.txt + this.css.button + 'top:1px; height:'+(this.h-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[i+2].style.background = sel ? cc.select : cc.button; + this.c[i+2].style.color = sel ? cc.textSelect : cc.text; + this.c[i+2].innerHTML = this.values[i]; + this.stat[i] = sel ? 3:1; + + } + + + if( this.txt==='' ) this.p = 0; + + if( (!o.value && !o.values) || this.p === 0 ){ + if( this.c[1] !== undefined ) this.c[1].textContent = ''; + } + + + this.init(); + + } + + onOff() { + + this.on = !this.on; + this.label( this.on ? this.onName : this.value ); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1 + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.text; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + case 1: // down + + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'stroke', cc.backoff, 0); + color = this.model > 0 ? Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ) : cc.textOver; + this.setSvg( this.c[3], 'stroke', color, 1 ); + + break; + } + + this.cmode = mode; + return true; + + } + + reset () { + + this.isDown = false; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'circular'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0); + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1); + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + //console.log('over') + + let off = this.offset; + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = off.angle() - this.pi90; + this.r = (((this.r%this.twoPi)+this.twoPi)%this.twoPi); + + if( this.oldr !== null ){ + + let dif = this.r - this.oldr; + this.r = Math.abs(dif) > Math.PI ? this.oldr : this.r; + + if( dif > 6 ) this.r = 0; + if( dif < -6 ) this.r = this.twoPi; + + } + + let steps = 1 / this.twoPi; + let value = this.r * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = ~~ ( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'circular' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + // ---------------------- + + makePath () { + + let r = 40; + let d = 24; + let a = this.percent * this.twoPi - 0.001; + let x2 = (r + r * Math.sin(a)) + d; + let y2 = (r - r * Math.cos(a)) + d; + let big = a > Math.PI ? 1 : 0; + return "M " + (r+d) + "," + d + " A " + r + "," + r + " 0 " + big + " 1 " + x2 + "," + y2; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = ( this.value - this.min ) / this.range; + + this.setSvg( this.c[3], 'd', this.makePath(), 1 ); + + if ( this.model > 0 ) { + + let cc = this.colors; + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( cc.text, -0.75) ), Tools.unpack( cc.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 1 ); + + } + + if( up ) this.send(); + + } + +} + +class Color extends Proto { + + constructor( o = {} ) { + + super( o ); + + //this.autoHeight = true; + + this.ctype = o.ctype || 'hex'; + + this.wfixe = 256; + + this.cw = this.sb > 256 ? 256 : this.sb; + if(o.cw != undefined ) this.cw = o.cw; + + + + // color up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + this.baseH = this.h; + + this.offset = new V2(); + this.decal = new V2(); + this.pp = new V2(); + + let cc = this.colors; + + // this.c[2] = this.dom( 'div', this.css.txt + this.css.middle + 'top:1px; height:'+(this.h-2)+'px;' + 'border-radius:'+this.radius+'px; text-shadow:none; border:'+cc.borderSize+'px solid '+cc.border+';' ) + + this.c[2] = this.dom( 'div', `${this.css.txt} ${this.css.middle} top:1px; height:${this.h-2}px; border-radius:${this.radius}px; text-shadow:none; border:${cc.borderSize}px solid ${cc.border};` ); + //this.s[2] = this.c[2].style; + + //this.s[2].textShadow = 'none' + + /*if( this.up ){ + this.s[2].top = 'auto'; + this.s[2].bottom = '2px'; + }*/ + + //this.c[0].style.textAlign = 'center'; + this.c[0].style.display = 'block'; + + this.c[3] = this.getColorRing(); + this.c[3].style.visibility = 'hidden'; + + this.hsl = null; + this.value = '#ffffff'; + if( o.value !== undefined ){ + if( o.value instanceof Array ) this.value = Tools.rgbToHex( o.value ); + else if(!isNaN(o.value)) this.value = Tools.hexToHtml( o.value ); + else this.value = o.value; + } + + this.bcolor = null; + this.isDown = false; + this.fistDown = false; + + this.notext = o.notext || false; + + this.tr = 98; + this.tsl = Math.sqrt(3) * this.tr; + + this.hue = 0; + this.d = 256; + + this.init(); + + this.setColor( this.value ); + + if( o.open !== undefined ) this.open(); + + } + + testZone ( mx, my ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + if( this.up && this.isOpen ){ + + if( l.y > this.wfixe ) return 'title' + else return 'color' + + } else { + + if( l.y < this.baseH+2 ) return 'title' + else if( this.isOpen ) return 'color' + + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.d = 256; + + } + + mousedown ( e ) { + + + let name = this.testZone( e.clientX, e.clientY ); + + + //if( !name ) return; + if(name === 'title'){ + if( !this.isOpen ) this.open(); + else this.close(); + return true; + } + + + if( name === 'color' ){ + + this.isDown = true; + this.fistDown = true; + this.mousemove( e ); + } + } + + mousemove ( e ) { + + let name = this.testZone( e.clientX, e.clientY ); + + let off, d, hue, sat, lum, rad, x, y, rr, T = Tools; + + if( name === 'title' ) this.cursor('pointer'); + + if( name === 'color' ){ + + off = this.offset; + off.x = e.clientX - ( this.zone.x + this.decal.x + this.mid ); + off.y = e.clientY - ( this.zone.y + this.decal.y + this.mid ) - this.ytop; + d = off.length() * this.ratio; + rr = off.angle(); + if(rr < 0) rr += 2 * T.PI; + + + if ( d < 128 ) this.cursor('crosshair'); + else if( !this.isDown ) this.cursor(); + + if( this.isDown ){ + + if( this.fistDown ){ + this.d = d; + this.fistDown = false; + } + + if ( this.d < 128 ) { + + if ( this.d > this.tr ) { // outside hue + + hue = ( rr + T.pi90 ) / T.TwoPI; + this.hue = (hue + 1) % 1; + this.setHSL([(hue + 1) % 1, this.hsl[1], this.hsl[2]]); + + } else { // triangle + + x = off.x * this.ratio; + y = off.y * this.ratio; + + let rr = (this.hue * T.TwoPI) + T.PI; + if(rr < 0) rr += 2 * T.PI; + + rad = Math.atan2(-y, x); + if(rad < 0) rad += 2 * T.PI; + + let rad0 = ( rad + T.pi90 + T.TwoPI + rr ) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60), + a = 0.5 * this.tr, + b = Math.tan(rad1) * a, + r = Math.sqrt(x*x + y*y), + maxR = Math.sqrt(a*a + b*b); + + if( r > maxR ) { + let dx = Math.tan(rad1) * r; + let rad2 = Math.atan(dx / maxR); + if(rad2 > T.pi60) rad2 = T.pi60; + else if( rad2 < -T.pi60 ) rad2 = -T.pi60; + + rad += rad2 - rad1; + + rad0 = (rad + T.pi90 + T.TwoPI + rr) % (T.TwoPI), + rad1 = rad0 % ((2/3) * T.PI) - (T.pi60); + b = Math.tan(rad1) * a; + r = maxR = Math.sqrt(a*a + b*b); + } + + lum = ((Math.sin(rad0) * r) / this.tsl) + 0.5; + + let w = 1 - (Math.abs(lum - 0.5) * 2); + sat = (((Math.cos(rad0) * r) + (this.tr / 2)) / (1.5 * this.tr)) / w; + sat = T.clamp( sat, 0, 1 ); + + this.setHSL([this.hsl[0], sat, lum]); + + } + } + } + } + + } + + // ---------------------- + + setHeight () { + + this.h = this.isOpen ? this.wfixe + this.baseH + 5 : this.baseH; + this.s[0].height = this.h + 'px'; + this.zone.h = this.h; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open () { + + super.open(); + + this.setHeight(); + + if( this.up ) this.zone.y -= this.wfixe + 5; + + let t = this.h - this.baseH; + + this.s[3].visibility = 'visible'; + //this.s[3].display = 'block'; + this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.wfixe + 5; + + let t = this.h - this.baseH; + + this.setHeight(); + + this.s[3].visibility = 'hidden'; + //this.s[3].display = 'none'; + this.parentHeight( -t ); + + } + + update ( up ) { + + let cc = Tools.rgbToHex( Tools.hslToRgb([ this.hsl[0], 1, 0.5 ]) ); + + this.moveMarkers(); + + this.value = this.bcolor; + + this.setSvg( this.c[3], 'fill', cc, 2, 0 ); + + this.s[2].background = this.bcolor; + if(!this.notext) this.c[2].textContent = Tools.htmlToHex( this.bcolor ); + + this.invert = Tools.findDeepInver( this.rgb ); + this.s[2].color = this.invert ? '#fff' : '#000'; + + if(!up) return; + + if( this.ctype === 'array' ) this.send( this.rgb ); + if( this.ctype === 'rgb' ) this.send( Tools.htmlRgb( this.rgb ) ); + if( this.ctype === 'hex' ) this.send( Tools.htmlToHex( this.value ) ); + if( this.ctype === 'html' ) this.send(); + + } + + setValue ( v ){ + + if( v instanceof Array ) this.value = Tools.rgbToHex( v ); + else if(!isNaN(v)) this.value = Tools.hexToHtml( v ); + else this.value = v; + + this.setColor( this.value ); + this.update(); + + } + + setColor ( color ) { + + let unpack = Tools.unpack(color); + if (this.bcolor !== color && unpack) { + + this.bcolor = color; + this.rgb = unpack; + this.hsl = Tools.rgbToHsl( this.rgb ); + + this.hue = this.hsl[0]; + + this.update(); + } + return this; + + } + + setHSL ( hsl ) { + + this.hsl = hsl; + this.rgb = Tools.hslToRgb( hsl ); + this.bcolor = Tools.rgbToHex( this.rgb ); + this.update( true ); + return this; + + } + + moveMarkers () { + + let p = this.pp; + let T = Tools; + + this.invert ? '#fff' : '#000'; + let a = this.hsl[0] * T.TwoPI; + let third = (2/3) * T.PI; + let r = this.tr; + let h = this.hsl[0]; + let s = this.hsl[1]; + let l = this.hsl[2]; + + let angle = ( a - T.pi90 ) * T.todeg; + + h = - a + T.pi90; + + let hx = Math.cos(h) * r; + let hy = -Math.sin(h) * r; + let sx = Math.cos(h - third) * r; + let sy = -Math.sin(h - third) * r; + let vx = Math.cos(h + third) * r; + let vy = -Math.sin(h + third) * r; + let mx = (sx + vx) / 2, my = (sy + vy) / 2; + a = (1 - 2 * Math.abs(l - .5)) * s; + let x = sx + (vx - sx) * l + (hx - mx) * a; + let y = sy + (vy - sy) * l + (hy - my) * a; + + p.set( x, y ).addScalar(128); + + //let ff = (1-l)*255; + // this.setSvg( this.c[3], 'stroke', 'rgb('+ff+','+ff+','+ff+')', 3 ); + + this.setSvg( this.c[3], 'transform', 'rotate('+angle+' )', 2 ); + + this.setSvg( this.c[3], 'cx', p.x, 3 ); + this.setSvg( this.c[3], 'cy', p.y, 3 ); + + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 2, 3 ); + this.setSvg( this.c[3], 'stroke', this.invert ? '#fff' : '#000', 3 ); + this.setSvg( this.c[3], 'fill',this.bcolor, 3 ); + + } + + rSize () { + + //Proto.prototype.rSize.call( this ); + super.rSize(); + + let s = this.s; + + s[2].width = this.sb + 'px'; + s[2].left = this.sa + 'px'; + + //console.log(this.sb) + + this.cw = this.sb > 256 ? 256 : this.sb; + + + + this.rSizeColor( this.cw ); + + this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + //s[3].left = this.decal.x + 'px'; + + } + + rSizeColor ( w ) { + + + if( w === this.wfixe ) return; + + + + this.wfixe = w; + + + + let s = this.s; + + //this.decal.x = Math.floor((this.w - this.wfixe) * 0.5); + this.decal.y = this.side === 'up' ? 2 : this.baseH + 2; + this.mid = Math.floor( this.wfixe * 0.5 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 '+ this.wfixe + ' '+ this.wfixe ); + s[3].width = this.wfixe + 'px'; + s[3].height = this.wfixe + 'px'; + //s[3].left = this.decal.x + 'px'; + s[3].top = this.decal.y + 'px'; + + this.ratio = 256 / this.wfixe; + this.square = 1 / (60*(this.wfixe/256)); + this.setHeight(); + + } + + +} + +class Fps extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.round = Math.round; + + //this.autoHeight = true; + + this.baseH = this.h; + this.hplus = o.hplus || 50; + + this.res = o.res || 40; + this.l = 1; + + this.precision = o.precision || 0; + + + this.custom = o.custom || false; + this.names = o.names || ['FPS', 'MS']; + let cc = o.cc || ['220,220,220', '255,255,0']; + + // this.divid = [ 100, 100, 100 ]; + // this.multy = [ 30, 30, 30 ]; + + this.adding = o.adding || false; + + this.range = o.range || [ 165, 100, 100 ]; + + this.alpha = o.alpha || 0.25; + + this.values = []; + this.points = []; + this.textDisplay = []; + + if(!this.custom){ + + this.now = Roots.getTime(); + this.startTime = 0;//this.now() + this.prevTime = 0;//this.startTime; + this.frames = 0; + + this.ms = 0; + this.fps = 0; + this.mem = 0; + this.mm = 0; + + this.isMem = ( self.performance && self.performance.memory ) ? true : false; + + // this.divid = [ 100, 200, 1 ]; + // this.multy = [ 30, 30, 30 ]; + + if( this.isMem ){ + + this.names.push('MEM'); + cc.push('0,255,255'); + + } + + this.txt = o.name || 'Fps'; + + } + + + let fltop = Math.floor(this.h*0.5)-3; + const ccc = this.colors; + + this.c[1].textContent = this.txt; + //this.c[1].innerHTML = ' ' + this.txt + this.c[0].style.cursor = 'pointer'; + this.c[0].style.pointerEvents = 'auto'; + + let panelCss = 'display:none; left:10px; top:'+ this.h + 'px; height:'+(this.hplus - 8)+'px; box-sizing:border-box; background: rgba(0, 0, 0, 0.2); border:1px solid '+ ccc.border +';'; + + if( this.radius !== 0 ) panelCss += 'border-radius:' + this.radius+'px;'; + + this.c[2] = this.dom( 'path', this.css.basic + panelCss , {} ); + + this.c[2].setAttribute('viewBox', '0 0 '+this.res+' 50' ); + this.c[2].setAttribute('height', '100%' ); + this.c[2].setAttribute('width', '100%' ); + this.c[2].setAttribute('preserveAspectRatio', 'none' ); + + + //this.dom( 'path', null, { fill:'rgba(255,255,0,0.3)', 'stroke-width':1, stroke:'#FF0', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + //this.dom( 'path', null, { fill:'rgba(0,255,255,0.3)', 'stroke-width':1, stroke:'#0FF', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + + // arrow + this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; left:0; top:'+fltop+'px;', { d:this.svgs.g1, fill:ccc.text, stroke:'none'}); + //this.c[3] = this.dom( 'path', this.css.basic + 'position:absolute; width:10px; height:10px; left:4px; top:'+fltop+'px;', { d:this.svgs.arrow, fill:this.colors.text, stroke:'none'}); + + // result test + this.c[4] = this.dom( 'div', this.css.txt + 'position:absolute; left:10px; top:'+(this.h+2) +'px; display:none; width:100%; text-align:center;' ); + + // bottom line + if( o.bottomLine ) this.c[4] = this.dom( 'div', this.css.basic + 'width:100%; bottom:0px; height:1px; background: rgba(255, 255, 255, 0.2);'); + + this.isShow = false; + + + + let s = this.s; + + //s[1].marginLeft = '10px'; + s[1].lineHeight = this.h-4; + s[1].color = ccc.text; + //s[1].paddingLeft = '18px'; + //s[1].fontWeight = 'bold'; + + if( this.radius !== 0 ) s[0].borderRadius = this.radius+'px'; + if( this.colors.gborder!=='none') s[0].border = '1px solid ' + ccc.gborder; + + + + + let j = 0; + + for( j=0; j " + this.names[j] +" "); + + } + + j = this.names.length; + while(j--){ + this.dom( 'path', null, { fill:'rgba('+cc[j]+','+this.alpha+')', 'stroke-width':1, stroke:'rgba('+cc[j]+',1)', 'vector-effect':'non-scaling-stroke' }, this.c[2] ); + } + + + this.init(); + + //if( this.isShow ) this.show(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousedown ( e ) { + + if( this.isShow ) this.close(); + else this.open(); + + } + + // ---------------------- + + /*mode: function ( mode ) { + + let s = this.s; + + switch(mode){ + case 0: // base + s[1].color = this.colors.text; + //s[1].background = 'none'; + break; + case 1: // over + s[1].color = '#FFF'; + //s[1].background = UIL.SELECT; + break; + case 2: // edit / down + s[1].color = this.colors.text; + //s[1].background = UIL.SELECTDOWN; + break; + + } + },*/ + + tick ( v ) { + + this.values = v; + if( !this.isShow ) return; + this.drawGraph(); + this.upText(); + + } + + makePath ( point ) { + + let p = ''; + p += 'M ' + (-1) + ' ' + 50; + for ( let i = 0; i < this.res + 1; i ++ ) { p += ' L ' + i + ' ' + point[i]; } + p += ' L ' + (this.res + 1) + ' ' + 50; + return p; + + } + + upText ( val ) { + + let v = val || this.values, t = ''; + for( let j=0, lng =this.names.length; j'; + this.c[4].innerHTML = t; + + } + + drawGraph () { + + let svg = this.c[2]; + let i = this.names.length, v, old = 0, n = 0; + + while( i-- ){ + if( this.adding ) v = (this.values[n]+old) * this.range[n]; + else v = (this.values[n] * this.range[n]); + this.points[n].shift(); + this.points[n].push( 50 - v ); + this.setSvg( svg, 'd', this.makePath( this.points[n] ), i+1 ); + old += this.values[n]; + n++; + + } + + } + + open () { + + super.open(); + + this.h = this.hplus + this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g2 ); + + if( this.group !== null ){ this.group.calc( this.hplus );} + else if( this.isUI ) this.main.calc( this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'block'; + this.s[4].display = 'block'; + this.isShow = true; + + if( !this.custom ) Roots.addListen( this ); + + } + + close () { + + super.close(); + + this.h = this.baseH; + + this.setSvg( this.c[3], 'd', this.svgs.g1 ); + + if( this.group !== null ){ this.group.calc( -this.hplus );} + else if( this.isUI ) this.main.calc( -this.hplus ); + + this.s[0].height = this.h +'px'; + this.s[2].display = 'none'; + this.s[4].display = 'none'; + this.isShow = false; + + if( !this.custom ) Roots.removeListen( this ); + + this.c[4].innerHTML = ''; + + } + + + ///// AUTO FPS ////// + + begin () { + + this.startTime = this.now(); + + } + + end () { + + let time = this.now(); + this.ms = time - this.startTime; + + this.frames ++; + + if ( time > this.prevTime + 1000 ) { + + this.fps = this.round( ( this.frames * 1000 ) / ( time - this.prevTime ) ); + + this.prevTime = time; + this.frames = 0; + + if ( this.isMem ) { + + let heapSize = performance.memory.usedJSHeapSize; + let heapSizeLimit = performance.memory.jsHeapSizeLimit; + + this.mem = this.round( heapSize * 0.000000954 ); + this.mm = heapSize / heapSizeLimit; + + } + + } + + this.values = [ this.fps, this.ms , this.mm ]; + + this.drawGraph(); + this.upText( [ this.fps, this.ms, this.mem ] ); + + return time; + + } + + listening () { + + if( !this.custom ) this.startTime = this.end(); + + } + + rSize () { + + let s = this.s; + let w = this.w; + + s[3].left = ( this.sa + this.sb - 6 ) + 'px'; + + s[0].width = w + 'px'; + s[1].width = w + 'px'; + s[2].left = 10 + 'px'; + s[2].width = (w-20) + 'px'; + s[4].width = (w-20) + 'px'; + + } + +} + +class Graph extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value !== undefined ? o.value : [0,0,0]; + this.lng = this.value.length; + + this.precision = o.precision !== undefined ? o.precision : 2; + this.multiplicator = o.multiplicator || 1; + this.neg = o.neg || false; + + this.line = o.line !== undefined ? o.line : true; + + //if(this.neg)this.multiplicator*=2; + + this.autoWidth = o.autoWidth !== undefined ? o.autoWidth : true; + this.isNumber = false; + + this.isDown = false; + + this.h = o.h || 128 + 10; + this.rh = this.h - 10; + this.top = 0; + + this.c[0].style.width = this.w +'px'; + + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = this.w +'px'; + + if(!this.autoWidth){ + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + } + + + //this.c[1].style.background = '#ff0000'; + //this.c[1].style.textAlign = 'center'; + this.top = 10; + this.h += 10; + + } + + this.gh = this.rh - 28; + this.gw = this.w - 28; + + //this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; text-align: justify; column-count:'+this.lng+'; top:'+(this.h-20)+'px; width:100%; color:'+ this.colors.text ); + + //let colum = 'column-count:'+this.lng+'; column:'+this.lng+'; break-inside: column; top:' + this.c[2] = this.dom( 'div', this.css.txt + 'display:block; text-align:center; padding:0px 0px; top:'+(this.h-20)+'px; left:14px; width:'+this.gw+'px; color:'+ this.colors.text ); + + //this.c[2].textContent = this.value; + this.c[2].innerHTML = this.valueToHtml(); + + let svg = this.dom( 'svg', this.css.basic , { viewBox:'0 0 '+this.w+' '+this.rh, width:this.w, height:this.rh, preserveAspectRatio:'none' } ); + this.setCss( svg, { width:this.w, height:this.rh, left:0, top:this.top }); + + this.dom( 'path', '', { d:'', stroke:this.colors.text, 'stroke-width':2, fill:'none', 'stroke-linecap':'butt' }, svg ); + this.dom( 'rect', '', { x:10, y:10, width:this.gw+8, height:this.gh+8, stroke:'rgba(0,0,0,0.3)', 'stroke-width':1 , fill:'none'}, svg ); + + this.iw = ((this.gw-(4*(this.lng-1)))/this.lng); + let t = []; + this.cMode = []; + + this.v = []; + + for( let i = 0; i < this.lng; i++ ){ + + t[i] = [ 14 + (i*this.iw) + (i*4), this.iw ]; + t[i][2] = t[i][0] + t[i][1]; + this.cMode[i] = 0; + + if( this.neg ) this.v[i] = ((1+(this.value[i] / this.multiplicator))*0.5); + else this.v[i] = this.value[i] / this.multiplicator; + + this.dom( 'rect', '', { x:t[i][0], y:14, width:t[i][1], height:1, fill:this.colors.text, 'fill-opacity':0.3 }, svg ); + + } + + this.tmp = t; + this.c[3] = svg; + + //console.log(this.w) + + this.init(); + + if( this.c[1] !== undefined ){ + this.c[1].style.top = 0 +'px'; + this.c[1].style.height = 20 +'px'; + this.s[1].lineHeight = (20-5)+'px'; + } + + this.update( false ); + + } + + setValue ( value ) { + + this.value = value; + this.lng = this.value.length; + for (var i = 0; i < this.lng; i++) { + if (this.neg) this.v[i] = (1 + value[i] / this.multiplicator) * 0.5; + else this.v[i] = value[i] / this.multiplicator; + } + this.update(); + + } + + valueToHtml() { + + let i = this.lng, n=0, r = ''; + let w = 100 / this.lng; + let style = 'width:'+ w +'%;';//' text-align:center;' + while(i--){ + if(n===this.lng-1) r += '
    ' + this.value[n] + '
    '; + else r += '' + this.value[n] + ''; + n++; + } + return r + } + + updateSVG () { + + if( this.line ) this.setSvg( this.c[3], 'd', this.makePath(), 0 ); + + for(let i = 0; ithis.top && l.yt[i][0] && l.x this.distance ) { + let angle = Math.atan2(this.tmp.x, this.tmp.y); + this.tmp.x = Math.sin( angle ) * this.distance; + this.tmp.y = Math.cos( angle ) * this.distance; + } + + this.pos.copy( this.tmp ).divideScalar( this.distance ).negate(); + + this.update(); + + } + + setValue ( v ) { + + if(v===undefined) v=[0,0]; + + this.pos.set( v[0] || 0, v[1] || 0 ); + this.updateSVG(); + + } + + update ( up ) { + + if( up === undefined ) up = true; + + if( this.interval !== null ){ + + if( !this.isDown ){ + + this.pos.lerp( null, 0.3 ); + + this.pos.x = Math.abs( this.pos.x ) < 0.01 ? 0 : this.pos.x; + this.pos.y = Math.abs( this.pos.y ) < 0.01 ? 0 : this.pos.y; + + if( this.isUI && this.main.isCanvas ) this.main.draw(); + + } + + } + + this.updateSVG(); + + if( up ) this.send(); + + + if( this.pos.isZero() ) this.stopInterval(); + + } + + updateSVG () { + + //let x = this.radius - ( -this.pos.x * this.distance ); + //let y = this.radius - ( -this.pos.y * this.distance ); + + let x = (this.diam*0.5) - ( -this.pos.x * this.distance ); + let y = (this.diam*0.5) - ( -this.pos.y * this.distance ); + + if(this.model === 0){ + + let sx = x + ((this.pos.x)*5) + 5; + let sy = y + ((this.pos.y)*5) + 10; + + this.setSvg( this.c[3], 'cx', sx*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', sy*this.ratio, 3 ); + } else { + this.setSvg( this.c[3], 'cx', x*this.ratio, 3 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 3 ); + } + + + + this.setSvg( this.c[3], 'cx', x*this.ratio, 4 ); + this.setSvg( this.c[3], 'cy', y*this.ratio, 4 ); + + this.value[0] = ( this.pos.x * this.multiplicator ).toFixed( this.precision ) * 1; + this.value[1] = ( this.pos.y * this.multiplicator ).toFixed( this.precision ) * 1; + + if(this.haveText) this.c[2].textContent = this.value; + + } + + clear () { + + this.stopInterval(); + super.clear(); + + } + +} + +class Knob extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.isCyclic = o.cyclic || false; + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.autoWidth = false; + + this.setTypeNumber( o ); + + this.minw = this.w; + this.diam = o.diam || this.w; + + this.mPI = Math.PI * 0.8; + this.toDeg = 180 / Math.PI; + this.cirRange = this.mPI * 2; + + this.offset = new V2(); + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w +'px'; + this.c[0].style.display = 'block'; + + if(this.c[1] !== undefined) { + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + this.percent = 0; + + this.cmode = 0; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+(this.h-20)+'px; width:100%; color:'+ cc.text ); + + this.c[3] = this.getKnob(); + this.setSvg( this.c[3], 'fill', cc.button, 0 ); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + this.setSvg( this.c[3], 'stroke', cc.text, 3 ); + this.setSvg( this.c[3], 'd', this.makeGrad(), 3 ); + + this.setSvg( this.c[3], 'viewBox', '0 0 ' + this.diam + ' ' + this.diam ); + this.setCss( this.c[3], { width:this.diam, height:this.diam, left:0, top:this.top }); + + if ( this.model > 0 ) { + + Tools.dom( 'path', '', { d: '', stroke:cc.text, 'stroke-width': 2, fill: 'none', 'stroke-linecap': 'round' }, this.c[3] ); //4 + + if ( this.model == 2) { + + Tools.addSVGGlowEffect(); + this.setSvg( this.c[3], 'style', 'filter: url("#UILGlow");', 4 ); + + } + + } + + this.r = 0; + + this.init(); + + this.update(); + + } + + mode ( mode ) { + + let cc = this.colors; + + if( this.cmode === mode ) return false; + + switch( mode ) { + case 0: // base + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.button, 0); + //this.setSvg( this.c[3], 'stroke','rgba(255,0,0,0.2)', 2); + this.setSvg( this.c[3], 'stroke', cc.text, 1 ); + break; + case 1: // down + this.s[2].color = cc.textOver; + this.setSvg( this.c[3], 'fill', cc.select, 0); + //this.setSvg( this.c[3], 'stroke','rgba(0,0,0,0.6)', 2); + this.setSvg( this.c[3], 'stroke', cc.textOver, 1 ); + break; + } + + this.cmode = mode; + return true; + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'knob'; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + this.isDown = false; + this.sendEnd(); + return this.mode(0) + + } + + mousedown ( e ) { + + this.isDown = true; + this.old = this.value; + this.oldr = null; + this.mousemove( e ); + return this.mode(1) + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let off = this.offset; + + //off.x = this.radius - ( e.clientX - this.zone.x ); + //off.y = this.radius - ( e.clientY - this.zone.y - this.top ); + + off.x = (this.w*0.5) - ( e.clientX - this.zone.x ); + off.y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + this.r = - Math.atan2( off.x, off.y ); + + if( this.oldr !== null ) this.r = Math.abs(this.r - this.oldr) > Math.PI ? this.oldr : this.r; + + this.r = this.r > this.mPI ? this.mPI : this.r; + this.r = this.r < -this.mPI ? -this.mPI : this.r; + + let steps = 1 / this.cirRange; + let value = (this.r + this.mPI) * steps; + + let n = ( ( this.range * value ) + this.min ) - this.old; + + if(n >= this.step || n <= this.step){ + n = Math.floor( n / this.step ); + this.value = this.numValue( this.old + ( n * this.step ) ); + this.update( true ); + this.old = this.value; + this.oldr = this.r; + } + + } + + wheel ( e ) { + + let name = this.testZone( e ); + + if( name === 'knob' ) { + + let v = this.value - this.step * e.delta; + + if ( v > this.max ) { + v = this.isCyclic ? this.min : this.max; + } else if ( v < this.min ) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue( v ); + this.old = v; + this.update( true ); + + return true; + + } + return false; + + } + + makeGrad () { + + let d = '', step, range, a, x, y, x2, y2, r = 64; + let startangle = Math.PI + this.mPI; + let endangle = Math.PI - this.mPI; + //let step = this.step>5 ? this.step : 1; + + if(this.step>5){ + range = this.range / this.step; + step = ( startangle - endangle ) / range; + } else { + step = (( startangle - endangle ) / r)*2; + range = r*0.5; + } + + for ( let i = 0; i <= range; ++i ) { + + a = startangle - ( step * i ); + x = r + Math.sin( a ) * ( r - 20 ); + y = r + Math.cos( a ) * ( r - 20 ); + x2 = r + Math.sin( a ) * ( r - 24 ); + y2 = r + Math.cos( a ) * ( r - 24 ); + d += 'M' + x + ' ' + y + ' L' + x2 + ' '+y2 + ' '; + + } + + return d; + + } + + update ( up ) { + + this.c[2].textContent = this.value; + this.percent = (this.value - this.min) / this.range; + + let sa = Math.PI + this.mPI; + let ea = ( ( this.percent * this.cirRange ) - ( this.mPI ) ); + + let sin = Math.sin( ea ); + let cos = Math.cos( ea ); + + let x1 = ( 25 * sin ) + 64; + let y1 = -( 25 * cos ) + 64; + let x2 = ( 20 * sin ) + 64; + let y2 = -( 20 * cos ) + 64; + + this.setSvg( this.c[3], 'd', 'M ' + x1 +' ' + y1 + ' L ' + x2 +' ' + y2, 1 ); + + if ( this.model > 0 ) { + + let x1 = 36 * Math.sin( sa ) + 64; + let y1 = 36 * Math.cos( sa ) + 64; + let x2 = 36 * sin + 64; + let y2 = -36 * cos + 64; + let big = ea <= Math.PI - this.mPI ? 0 : 1; + this.setSvg( this.c[3], 'd', 'M ' + x1 + ',' + y1 + ' A ' + 36 + ',' + 36 + ' 1 ' + big + ' 1 ' + x2 + ',' + y2, 4 ); + + let color = Tools.pack( Tools.lerpColor( Tools.unpack( Tools.ColorLuma( this.colors.text, -0.75) ), Tools.unpack( this.colors.text ), this.percent ) ); + this.setSvg( this.c[3], 'stroke', color, 4 ); + + } + + if( up ) this.send(); + + } + +} + +class List extends Proto { + + constructor( o = {} ) { + + super( o ); + + // TODO not work + this.hideCurrent = false; + + // images + this.path = o.path || ''; + this.format = o.format || ''; + + + this.isWithImage = this.path !== '' ? true:false; + this.preLoadComplete = false; + + this.tmpImage = {}; + this.tmpUrl = []; + + this.m = o.m !== undefined ? o.m : 5; + + + let align = o.align || 'left'; + + // scroll size + let ss = o.scrollSize || 10; + this.ss = ss+1; + + this.sMode = 0; + this.tMode = 0; + + this.listOnly = o.listOnly || false; + this.staticTop = o.staticTop || false; + + this.isSelectable = this.listOnly; + if( o.select !== undefined ) o.selectable = o.select; + if( o.selectable !== undefined ) this.isSelectable = o.selectable; + + if( this.txt === '' ) this.p = 0; + + + let fltop = Math.floor(this.h*0.5)-3; + let cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.basic + 'top:0; display:none; border-radius:'+this.radius+'px;' ); + this.c[3] = this.dom( 'div', this.css.item + 'padding:0px '+this.m+'px; margin-bottom:0px; position:absolute; justify-content:'+align+'; text-align:'+align+'; line-height:'+(this.h-4)+'px; top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:1px solid '+cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:6px; height:6px; top:'+fltop+'px;', { d:this.svgs.g1, fill:cc.text, stroke:'none'}); + + this.scrollerBack = this.dom( 'div', this.css.basic + 'right:0px; width:'+ss+'px; background:'+cc.back+'; display:none;'); + this.scroller = this.dom( 'div', this.css.basic + 'right:'+((ss-(ss*0.25))*0.5)+'px; width:'+(ss*0.25)+'px; background:'+cc.text+'; display:none; '); + + this.c[3].style.color = cc.text; + + + this.list = []; + this.refObject = null; + + if( o.list ){ + if( o.list instanceof Array ){ + this.list = o.list; + } else if( o.list instanceof Object ){ + this.refObject = o.list; + for( let g in this.refObject ) this.list.push( g ); + } + } + + this.items = []; + + this.prevName = ''; + + + this.tmpId = 0; + + this.baseH = this.h; + + this.itemHeight = o.itemHeight || this.h;//(this.h-3); + + // force full list + this.full = o.full || false; + + this.py = 0; + this.ww = this.sb; + this.scroll = false; + this.isDown = false; + + this.current = null; + + // list up or down + this.side = o.side || 'down'; + this.up = this.side === 'down' ? 0 : 1; + + if( this.up ){ + + this.c[2].style.top = 'auto'; + this.c[3].style.top = 'auto'; + this.c[4].style.top = 'auto'; + + this.c[2].style.bottom = this.h-2 + 'px'; + this.c[3].style.bottom = '1px'; + this.c[4].style.bottom = fltop + 'px'; + + } else { + this.c[2].style.top = this.baseH + 'px'; + } + + this.listIn = this.dom( 'div', this.css.basic + 'left:0; top:0; width:100%; background:none;'); + this.listIn.name = 'list'; + + this.topList = 0; + + this.c[2].appendChild( this.listIn ); + this.c[2].appendChild( this.scrollerBack ); + this.c[2].appendChild( this.scroller ); + + if( o.value !== undefined ){ + if(!isNaN(o.value)) this.value = this.list[ o.value ]; + else this.value = o.value; + }else { + this.value = this.list[0]; + } + + this.isOpenOnStart = o.open || false; + + if( this.listOnly ){ + this.baseH = 5; + this.c[3].style.display = 'none'; + this.c[4].style.display = 'none'; + this.c[2].style.top = this.baseH+'px'; + this.isOpenOnStart = true; + } + + + this.miniCanvas = o.miniCanvas || false; + this.canvasBg = o.canvasBg || 'rgba(0,0,0,0)'; + this.imageSize = o.imageSize || [20,20]; + + // dragout function + this.drag = o.drag || false; + this.dragout = o.dragout || false; + this.dragstart = o.dragstart || null; + this.dragend = o.dragend || null; + + + + //this.c[0].style.background = '#FF0000' + ///if( this.isWithImage ) this.preloadImage(); + + this.setList( this.list ); + this.init(); + if( this.isWithImage ) this.preloadImage(); + if( this.isOpenOnStart ) this.open( true ); + + this.baseH += this.mtop; + + } + + // image list + + preloadImage () { + + + + this.preLoadComplete = false; + + this.tmpImage = {}; + for( let i=0; i this.h - this.baseH ) return 'title'; + else { + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + + } else { + if( l.y < this.baseH+2 ) return 'title'; + else { + if( this.isOpen ){ + if( this.scroll && ( l.x > (this.sa+this.sb-this.ss)) ) return 'scroll'; + if(l.x > this.sa) return this.testItems( l.y-this.baseH ); + } + } + + } + + return ''; + + } + + testItems ( y ) { + + let name = ''; + + let items = this.items; + + /*if(this.hideCurrent){ + //items = [...this.items] + items = this.items.slice(this.tmpId) + + }*/ + + let i = items.length, item, a, b; + while(i--){ + item = items[i]; + a = item.posy + this.topList; + b = item.posy + this.itemHeight + 1 + this.topList; + if( y >= a && y <= b ){ + name = 'item' + i; + this.modeItem(0); + this.current = item; + this.modeItem(1); + return name; + } + + } + + return name; + + } + + modeItem ( mode ) { + + if( !this.current ) return + + if( this.current.select && mode===0) mode = 2; + let cc = this.colors; + + switch( mode ){ + + case 0: // base + this.current.style.background = cc.back; + this.current.style.color = cc.text; + break; + case 1: // over + this.current.style.background = cc.over; + this.current.style.color = cc.textOver; + break; + case 2: // edit / down + this.current.style.background = cc.select; + this.current.style.color = cc.textSelect; + break; + + } + } + + unSelected() { + + if( !this.current ) return + this.modeItem(0); + this.current = null; + + } + + selected() { + + if( !this.current ) return + this.resetItems(); + this.modeItem(2); + this.current.select = true; + + + + } + + resetItems() { + + let i = this.items.length; + while(i--){ + this.items[i].select = false; + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text; + } + + } + + hideActive() { + + if( !this.hideCurrent ) return + //if( !this.current ) return + if( this.current )this.tmpId = this.current.id; + this.resetHide(); + //this.items[this.tmpId].style.height = 0+'px' + + } + + resetHide() { + + console.log(this.tmpId); + + let i = this.items.length; + while(i--){ + if(i===this.tmpId){ + this.items[i].style.height = 0+'px'; + this.items[i].posy = -1; + } else { + this.items[i].style.height = this.itemHeight+'px'; + this.items[i].posy = (this.itemHeight+1)*(i-1); + } + //this.items[i].style.display = 'flex' + + /*this.items[i].select = false + this.items[i].style.background = this.colors.back; + this.items[i].style.color = this.colors.text;*/ + } + + } + + // ---------------------- + // EVENTS + // ---------------------- + + + mouseup ( e ) { + + this.isDown = false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'scroll' ){ + + this.isDown = true; + this.mousemove( e ); + + } else if( name === 'title' ){ + + this.modeTitle(2); + if( !this.listOnly ){ + this.hideActive(); + if( !this.isOpen ) this.open(); + else this.close(); + } + } else { + // is item + if( this.current ){ + + this.value = this.list[ this.current.id ]; + //this.tmpId = this.current.id + + if( this.isSelectable ) this.selected(); + + //this.send( this.refObject !== null ? this.refObject[ this.list[this.current.id]] : this.value ); + this.send( this.value ); + + if( !this.listOnly ) { + this.close(); + this.setTopItem(); + //this.hideActive() + } + } + + } + + return true; + + } + + mousemove ( e ) { + + let nup = false; + let name = this.testZone( e ); + + if( !name ) return nup; + + if( name === 'title' ){ + this.unSelected(); + this.modeTitle(1); + this.cursor('pointer'); + + } else if( name === 'scroll' ){ + + this.cursor('s-resize'); + this.modeScroll(1); + if( this.isDown ){ + this.modeScroll(2); + //this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + let top = this.zone.y+this.baseH-2; + this.update( ( e.clientY - top ) - ( this.sh*0.5 ) ); + } + //if(this.isDown) this.listmove(e); + } else { + + // is item + this.modeTitle(0); + this.modeScroll(0); + this.cursor('pointer'); + + } + + if( name !== this.prevName ) nup = true; + this.prevName = name; + + return nup; + + } + + wheel ( e ) { + + let name = this.testZone( e ); + if( name === 'title' ) return false; + this.py += e.delta*10; + this.update(this.py); + return true; + + } + + + + // ---------------------- + + reset () { + + this.prevName = ''; + this.unSelected(); + this.modeTitle(0); + this.modeScroll(0); + + //console.log('this is reset') + + } + + modeScroll ( mode ) { + + if( mode === this.sMode ) return; + + let s = this.scroller.style; + let cc = this.colors; + + switch(mode){ + case 0: // base + s.background = cc.text; + break; + case 1: // over + s.background = cc.select; + break; + case 2: // edit / down + s.background = cc.select; + break; + + } + + this.sMode = mode; + } + + modeTitle ( mode ) { + + if( mode === this.tMode ) return; + + let s = this.s; + let cc = this.colors; + + switch(mode){ + case 0: // base + s[3].color = cc.text; + s[3].background = cc.button; + break; + case 1: // over + s[3].color = cc.textOver; + s[3].background = cc.overoff; + break; + case 2: // edit / down + s[3].color = cc.textSelect; + s[3].background = cc.overoff; + break; + + } + + this.tMode = mode; + + } + + clearList () { + + while ( this.listIn.children.length ) this.listIn.removeChild( this.listIn.lastChild ); + this.items = []; + + } + + setList ( list ) { + + this.clearList(); + + this.list = list; + this.length = this.list.length; + + let lng = this.hideCurrent? this.length-1 : this.length; + + this.maxItem = this.full ? lng : 5; + this.maxItem = lng < this.maxItem ? lng : this.maxItem; + + this.maxHeight = this.maxItem * (this.itemHeight+1) + 2; + + + + this.max = lng * (this.itemHeight+1) + 2; + this.ratio = this.maxHeight / this.max; + this.sh = this.maxHeight * this.ratio; + this.range = this.maxHeight - this.sh; + + this.c[2].style.height = this.maxHeight + 'px'; + this.scrollerBack.style.height = this.maxHeight + 'px'; + this.scroller.style.height = this.sh + 'px'; + + if( this.max > this.maxHeight ){ + this.ww = this.sb - this.ss; + this.scroll = true; + } + + if( this.miniCanvas ) { + + this.tmpCanvas = document.createElement('canvas'); + this.tmpCanvas.width = this.imageSize[0]; + this.tmpCanvas.height = this.imageSize[1]; + this.tmpCtx = this.tmpCanvas.getContext("2d"); + this.tmpCtx.fillStyle = this.canvasBg; + this.tmpCtx.fillRect(0, 0, this.imageSize[0], this.imageSize[1]); + + } + + let item, n;//, l = this.sb; + for( let i=0; i this.range ? this.range : y; + + this.topList = -Math.floor( y / this.ratio ); + + this.listIn.style.top = this.topList+'px'; + this.scroller.style.top = Math.floor( y ) + 'px'; + + this.py = y; + + } + + parentHeight ( t ) { + + if ( this.group !== null ) this.group.calc( t ); + else if ( this.isUI ) this.main.calc( t ); + + } + + open ( first ) { + + super.open(); + + this.update( 0 ); + + this.h = this.maxHeight + this.baseH + 5; + if( !this.scroll ){ + this.topList = 0; + this.h = this.baseH + 5 + this.max; + this.scroller.style.display = 'none'; + this.scrollerBack.style.display = 'none'; + } else { + this.scroller.style.display = 'block'; + this.scrollerBack.style.display = 'block'; + } + this.s[0].height = this.h + 'px'; + this.s[2].display = 'block'; + + if( this.up ){ + this.zone.y -= this.h - (this.baseH-10); + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + } else { + this.setSvg( this.c[4], 'd', this.svgs.g2 ); + } + + this.rSizeContent(); + + let t = this.h - this.baseH; + + this.zone.h = this.h; + + if(!first) this.parentHeight( t ); + + } + + close () { + + super.close(); + + if( this.up ) this.zone.y += this.h - (this.baseH-10); + + let t = this.h - this.baseH; + + this.h = this.baseH; + this.s[0].height = this.h + 'px'; + this.s[2].display = 'none'; + this.setSvg( this.c[4], 'd', this.svgs.g1 ); + + this.zone.h = this.h; + + this.parentHeight( -t ); + + } + + // ----- + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSizeContent () { + + let i = this.length; + while(i--) this.listIn.children[i].style.width = this.ww + 'px'; + + } + + rSize () { + + super.rSize(); + + //Proto.prototype.rSize.call( this ); + + let s = this.s; + let w = this.sb; + let d = this.sa; + + if(s[2]=== undefined) return; + + s[2].width = w + 'px'; + s[2].left = d +'px'; + + s[3].width = w + 'px'; + s[3].left = d + 'px'; + + s[4].left = d + w - 15 + 'px'; + + this.ww = w; + if( this.max > this.maxHeight ) this.ww = w-this.ss; + if(this.isOpen) this.rSizeContent(); + + } + +} + +class Numeric extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.setTypeNumber( o ); + + this.allway = o.allway || false; + + this.isDown = false; + this.value = [0]; + this.multy = 1; + this.invmulty = 1; + this.isSingle = true; + this.isAngle = false; + this.isVector = false; + + if( o.isAngle ){ + this.isAngle = true; + this.multy = Tools.torad; + this.invmulty = Tools.todeg; + } + + this.isDrag = o.drag || false; + + if( o.value !== undefined ){ + if( !isNaN(o.value) ){ + this.value = [o.value]; + } else if( o.value instanceof Array ){ + this.value = o.value; + this.isSingle = false; + } else if( o.value instanceof Object ){ + this.value = []; + if( o.value.x !== undefined ) this.value[0] = o.value.x; + if( o.value.y !== undefined ) this.value[1] = o.value.y; + if( o.value.z !== undefined ) this.value[2] = o.value.z; + if( o.value.w !== undefined ) this.value[3] = o.value.w; + this.isSingle = false; + this.isVector = true; + } + } + + this.lng = this.value.length; + this.tmp = []; + + this.current = -1; + this.prev = { x:0, y:0, d:0, v:0 }; + + let cc = this.colors; + + // bg + this.c[2] = this.dom( 'div', this.css.basic + ' background:' + cc.select + '; top:4px; width:0px; height:' + (this.h-8) + 'px;' ); + + this.cMode = []; + + let i = this.lng; + while(i--){ + + if( this.isAngle ) this.value[i] = (this.value[i] * 180 / Math.PI).toFixed( this.precision ); + this.c[3+i] = this.dom( 'div', this.css.txtselect + 'top:1px; height:'+(this.h-2)+'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;'); + if(o.center) this.c[2+i].style.textAlign = 'center'; + this.c[3+i].textContent = this.value[i]; + this.c[3+i].style.color = this.colors.text; + this.c[3+i].isNum = true; + this.cMode[i] = 0; + + } + + // selection + this.selectId = 3 + this.lng; + this.c[this.selectId] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.cursorId = 4 + this.lng; + this.c[ this.cursorId ] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + this.init(); + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + + let i = this.lng; + let t = this.tmp; + + while( i-- ){ + if( l.x>t[i][0] && l.x 0"; + this.easing = o.easing || 1; + + this.setTypeNumber(o); + + this.model = o.stype || 0; + if (o.mode !== undefined) this.model = o.mode; + + //this.defaultBorderColor = this.colors.hide; + + this.isDown = false; + this.isOver = false; + this.allway = o.allway || false; + + this.isDeg = o.isDeg || false; + this.isCyclic = o.cyclic || false; + + this.firstImput = false; + + let cc = this.colors; + + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'text-align:right; width:47px; border:1px dashed '+this.defaultBorderColor+'; color:'+ this.colors.text ); + this.c[2] = this.dom( + "div", + this.css.txtselect + + "border:none; background:none; width:47px; color:" + + cc.text + + ";" + ); + //this.c[2] = this.dom( 'div', this.css.txtselect + 'letter-spacing:-1px; text-align:right; width:47px; color:'+ this.colors.text ); + this.c[3] = this.dom( + "div", + this.css.basic + " top:0; height:" + this.h + "px;" + ); + + this.c[4] = this.dom( + "div", + this.css.basic + + "background:" + + cc.back + + "; top:2px; height:" + + (this.h - 4) + + "px;" + ); + this.c[5] = this.dom( + "div", + this.css.basic + + "left:4px; top:5px; height:" + + (this.h - 10) + + "px; background:" + + cc.text + + ";" + ); + + this.c[2].isNum = true; + //this.c[2].style.height = (this.h-4) + 'px'; + //this.c[2].style.lineHeight = (this.h-8) + 'px'; + this.c[2].style.height = this.h - 2 + "px"; + this.c[2].style.lineHeight = this.h - 10 + "px"; + + if (this.model !== 0) { + let r1 = 4, + h1 = 4, + h2 = 8, + ww = this.h - 6, + ra = 16; + + if (this.model === 2) { + r1 = 0; + h1 = 2; + h2 = 4; + ra = 2; + ww = (this.h - 6) * 0.5; + } + + if (this.model === 3) this.c[5].style.visible = "none"; + + this.c[4].style.borderRadius = r1 + "px"; + this.c[4].style.height = h2 + "px"; + this.c[4].style.top = this.h * 0.5 - h1 + "px"; + this.c[5].style.borderRadius = r1 * 0.5 + "px"; + this.c[5].style.height = h1 + "px"; + this.c[5].style.top = this.h * 0.5 - h1 * 0.5 + "px"; + + //this.c[6] = this.dom( 'div', this.css.basic + 'border-radius:'+ra+'px; margin-left:'+(-ww*0.5)+'px; border:1px solid '+cc.border+'; background:'+cc.button+'; left:4px; top:2px; height:'+(this.h-4)+'px; width:'+ww+'px;' ); + this.c[6] = this.dom( + "div", + this.css.basic + + "border-radius:" + + ra + + "px; margin-left:" + + -ww * 0.5 + + "px; background:" + + cc.text + + "; left:4px; top:3px; height:" + + (this.h - 6) + + "px; width:" + + ww + + "px;" + ); + } + + this.init(); + } + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + if (l.x >= this.txl) return "text"; + else if (l.x >= this.sa) return "scroll"; + else return ""; + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup(e) { + if (this.isDown) this.isDown = false; + } + + mousedown(e) { + let name = this.testZone(e); + + if (!name) return false; + + if (name === "scroll") { + this.isDown = true; + this.old = this.value; + this.mousemove(e); + } + + /*if( name === 'text' ){ + this.setInput( this.c[2], function(){ this.validate() }.bind(this) ); + }*/ + + return true; + } + + mousemove(e) { + let nup = false; + + let name = this.testZone(e); + + if (name === "scroll") { + this.mode(1); + this.cursor("w-resize"); + //} else if(name === 'text'){ + //this.cursor('pointer'); + } else { + this.cursor(); + } + + if (this.isDown) { + let nNormalized = (e.clientX - (this.zone.x + this.sa) - 3) / this.ww; + + // lo mapeo al rango 0 ... 1 + nNormalized = Math.min(1, Math.max(0, nNormalized)); + + // aplico easing + let nEased = Math.pow(nNormalized, this.easing); // easing + + let nNew = nEased * this.range + this.min; + let nNewSlider = nNormalized * this.range + this.min; + + this.sliderValue = this.numValue(nNewSlider); + + let delta = nNew - this.old; + + let steps; + if (delta >= this.step || delta <= this.step) { + steps = Math.floor(delta / this.step); + this.value = this.numValue(this.old + steps * this.step); + // value without easing applied + + this.update(true); + this.old = this.value; + } + //console.log("n, normalized, value", nNew, nNormalized, this.value); + nup = true; + } + + return nup; + } + + wheel(e) { + let name = this.testZone(e); + + if (name === "scroll") { + let v = this.value - this.step * e.delta; + + if (v > this.max) { + v = this.isCyclic ? this.min : this.max; + } else if (v < this.min) { + v = this.isCyclic ? this.max : this.min; + } + + this.setValue(v); + this.old = v; + this.update(true); + + return true; + } + + return false; + } + + //keydown: function ( e ) { return true; }, + + // ---------------------- + + validate() { + let n = this.c[2].textContent; + + if (!isNaN(n)) { + this.value = this.numValue(n); + this.update(true); + } else this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + } + + reset() { + //this.clearInput(); + this.isDown = false; + this.mode(0); + } + + mode(mode) { + let s = this.s; + let cc = this.colors; + + switch (mode) { + case 0: // base + // s[2].border = '1px solid ' + this.colors.hide; + s[2].color = cc.text; + s[4].background = cc.back; + s[5].background = cc.text; + if (this.model !== 0) s[6].background = cc.text; //cc.button; + break; + case 1: // scroll over + //s[2].border = '1px dashed ' + this.colors.hide; + s[2].color = cc.textOver; + s[4].background = cc.back; + s[5].background = cc.textOver; + if (this.model !== 0) s[6].background = cc.textOver; //cc.overoff; + break; + } + } + + update(up) { + let normalized = (this.value - this.min) / this.range; + + let uneased = + this.easing == 1 ? normalized : Math.pow(normalized, 1 / this.easing); + + let ww = Math.floor(this.ww * uneased); + //let ww = Math.floor(this.ww * ((this.value - this.min) / this.range)); + + if (this.model !== 3) this.s[5].width = ww + "px"; + if (this.s[6]) this.s[6].left = this.sa + ww + 3 + "px"; + this.c[2].textContent = this.value + (this.isDeg ? "°" : ""); + + if (up) this.send(); + } + + rSize() { + super.rSize(); + + let w = this.sb - this.sc; + this.ww = w - 6; + + let tx = this.sc; + if (this.isUI || !this.simple) tx = this.sc + 10; + this.txl = this.w - tx + 2; + + //let ty = Math.floor(this.h * 0.5) - 8; + + let s = this.s; + + s[2].width = this.sc - 6 + "px"; + s[2].left = this.txl + 4 + "px"; + //s[2].top = ty + 'px'; + s[3].left = this.sa + "px"; + s[3].width = w + "px"; + s[4].left = this.sa + "px"; + s[4].width = w + "px"; + s[5].left = this.sa + 3 + "px"; + + this.update(); + } +} + +class TextInput extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.cmode = 0; + + this.value = o.value !== undefined ? o.value : ''; + this.placeHolder = o.placeHolder || ''; + + this.allway = o.allway || false; + this.editable = o.edit !== undefined ? o.edit : true; + + this.isDown = false; + + let cc = this.colors; + + // text + this.c[2] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; color:' + cc.text + '; background:' + cc.back + '; borderColor:' + cc.border+'; border-radius:'+this.radius+'px;' ); + this.c[2].textContent = this.value; + + // selection + this.c[3] = this.dom( 'div', this.css.txtselect + 'position:absolute; top:2px; height:' + (this.h-4) + 'px; padding:0px 0px; width:0px; color:' + cc.textSelect + '; background:' + cc.select + '; border:none; border-radius:0px;'); + + // cursor + this.c[4] = this.dom( 'div', this.css.basic + 'top:2px; height:' + (this.h-4) + 'px; width:0px; background:'+cc.text+';' ); + + // fake + this.c[5] = this.dom( 'div', this.css.txtselect + 'top:1px; height:' + (this.h-2) + 'px; border:none; justify-content: center; font-style: italic; color:'+cc.border+';' ); + if( this.value === '' ) this.c[5].textContent = this.placeHolder; + + + + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x >= this.sa ) return 'text'; + return ''; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if(!this.editable) return; + + if( this.isDown ){ + this.isDown = false; + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + if( !this.isDown ){ + this.isDown = true; + if( name === 'text' ) this.setInput( this.c[2] ); + return this.mousemove( e ); + } + + return false; + + } + + mousemove ( e ) { + + if(!this.editable) return; + + let name = this.testZone( e ); + + //let l = this.local; + //if( l.x === -1 && l.y === -1 ){ return;} + + //if( l.x >= this.sa ) this.cursor('text'); + //else this.cursor(); + + let x = 0; + + if( name === 'text' ) this.cursor('text'); + else this.cursor(); + + if( this.isDown ) x = e.clientX - this.zone.x; + + return this.upInput( x - this.sa -3, this.isDown ); + + } + + update ( ) { + + this.c[2].textContent = this.value; + + } + + // ---------------------- + + reset () { + + this.cursor(); + + } + + // ---------------------- + // INPUT + // ---------------------- + + select ( c, e, w, t ) { + + let s = this.s; + let d = this.sa + 5; + s[4].width = '1px'; + s[4].left = ( d + e ) + 'px'; + + s[3].left = ( d + e ) + 'px'; + s[3].width = w + 'px'; + this.c[3].innerHTML = t; + + } + + unselect () { + + let s = this.s; + if(!s) return; + s[3].width = 0 + 'px'; + this.c[3].innerHTML = 't'; + s[4].width = 0 + 'px'; + + } + + validate ( force ) { + + if( this.allway ) force = true; + + this.value = this.c[2].textContent; + + if(this.value !== '') this.c[5].textContent = ''; + else this.c[5].textContent = this.placeHolder; + + if( !force ) return; + + this.send(); + + } + + // ---------------------- + // REZISE + // ---------------------- + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[2].width = this.sb + 'px'; + + s[5].left = this.sa + 'px'; + s[5].width = this.sb + 'px'; + + } + + +} + +class Title extends Proto { + + constructor( o = {} ) { + + super( o ); + + let prefix = o.prefix || ''; + + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:right; width:60px; line-height:'+ (this.h-8) + 'px; color:' + this.colors.text ); + + if( this.h === 31 ){ + + this.s[0].height = this.h + 'px'; + this.s[1].top = 8 + 'px'; + this.c[2].style.top = 8 + 'px'; + + } + + let s = this.s; + + s[1].justifyContent = o.align || 'left'; + //s[1].textAlign = o.align || 'left'; + s[1].fontWeight = o.fontWeight || 'bold'; + + + this.c[1].textContent = this.txt.substring(0,1).toUpperCase() + this.txt.substring(1).replace("-", " "); + this.c[2].textContent = prefix; + + this.init(); + + } + + text( txt ) { + + this.c[1].textContent = txt; + + } + + text2( txt ) { + + this.c[2].textContent = txt; + + } + + rSize() { + + super.rSize(); + this.s[1].width = this.w + 'px'; //- 50 + 'px'; + this.s[2].left = this.w + 'px';//- ( 50 + 26 ) + 'px'; + + } + + setColor( c ) { + this.s[1].color = c; + this.s[2].color = c; + } + +} + +class Select extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.isDown = false; + this.onActif = o.onActif || function(){}; + + //let prefix = o.prefix || ''; + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+ cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + //this.c[2].style.color = this.fontColor; + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'cursor' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + this.isActif = false; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return '' + if( l.x > this.sa && l.x < this.sa+30 ) return 'over' + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ) + } + + return false + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false + + this.isDown = true; + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + this.send(); + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + if( n===1 ) this.isActif = false; + if( n===3 ){ + if( !this.isActif ){ this.isActif = true; n=4; this.onActif( this ); } + else { this.isActif = false; } + } + + if( n===2 && this.isActif ) n = 4; + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.action; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.action; break; // actif + + } + + change = true; + + } + + return change + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ) + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + +} + +class Bitmap extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.value = o.value || ''; + this.refTexture = o.texture || null; + this.img = null; + + this.isDown = false; + this.neverlock = true; + + + + const cc = this.colors; + + this.c[2] = this.dom( 'div', this.css.txt + this.css.button + ' top:1px; background:'+cc.button+'; height:'+(this.h-2)+'px; border:'+cc.buttonBorder+'; border-radius:15px; width:30px; left:10px;' ); + + this.c[3] = this.dom( 'div', this.css.txtselect + 'height:' + (this.h-4) + 'px; background:' + cc.inputBg + '; borderColor:' + cc.inputBorder+'; border-radius:'+this.radius+'px;' ); + this.c[3].textContent = this.value; + + let fltop = Math.floor(this.h*0.5)-7; + this.c[4] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.svgs[ 'load' ], fill:cc.text, stroke:'none'}); + + this.stat = 1; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return ''; + if( l.x > this.sa && l.x < this.sa+30 ) return 'over'; + return '0' + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( this.isDown ){ + //this.value = false; + this.isDown = false; + //this.send(); + return this.mousemove( e ); + } + + return false; + + } + + mousedown ( e ) { + + let name = this.testZone( e ); + + if( !name ) return false; + + if( name === 'over' ){ + this.isDown = true; + Files.load( { callback:this.changeBitmap.bind(this) } ); + + } + + + //this.value = this.values[ name-2 ]; + //this.send(); + return this.mousemove( e ); + + } + + mousemove ( e ) { + + let up = false; + + let name = this.testZone( e ); + + if( name === 'over' ){ + this.cursor('pointer'); + up = this.mode( this.isDown ? 3 : 2 ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + + changeBitmap( img, fname ){ + + if( img ){ + this.img = img; + this.apply( fname ); + } else { + this.img = null; + this.apply( 'null' ); + } + + } + + // ---------------------- + + apply ( v ) { + + v = v || ''; + + if( v !== this.value ) { + this.value = v; + this.c[3].textContent = this.value; + + if( this.img !== null ){ + if( this.objectLink !== null ) this.objectLink[ this.val ] = v; + if( this.callback ) this.callback( this.value, this.img, this.name ); + } + + } + + this.mode(1); + + } + + update () { + + this.mode( 3 ); + + } + + mode ( n ) { + + let change = false; + let cc = this.colors; + + if( this.stat !== n ){ + + this.stat = n; + + switch( n ){ + + case 1: this.s[ 2 ].color = cc.text; this.s[ 2 ].background = cc.button; break; // base + case 2: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.overoff; break; // over + case 3: this.s[ 2 ].color = cc.textOver; this.s[ 2 ].background = cc.over; break; // down + case 4: this.s[ 2 ].color = cc.textSelect; this.s[ 2 ].background = cc.select; break; // actif + + } + + change = true; + + } + + return change; + + + + } + + reset () { + + this.cursor(); + return this.mode( this.isActif ? 4 : 1 ); + + } + + text ( txt ) { + + this.c[3].textContent = txt; + + } + + rSize () { + + super.rSize(); + + let s = this.s; + s[2].left = this.sa + 'px'; + s[3].left = (this.sa + 40) + 'px'; + s[3].width = (this.sb - 40) + 'px'; + s[4].left = (this.sa+8) + 'px'; + + } + +} + +//import { Proto } from '../core/Proto.js'; + +class Selector extends Button { + + constructor( o = {} ) { + + if( o.selectable === undefined ) o.selectable = true; + super( o ); + + } + +} + +class Item extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.p = 100; + this.value = this.txt; + this.status = 1; + + this.itype = o.itype || 'none'; + this.val = this.itype; + + this.graph = this.svgs[ this.itype ]; + + let fltop = Math.floor(this.h*0.5)-7; + + this.c[2] = this.dom( 'path', this.css.basic + 'position:absolute; width:14px; height:14px; left:5px; top:'+fltop+'px;', { d:this.graph, fill:this.colors.text, stroke:'none'}); + + this.s[1].marginLeft = 20 + 'px'; + + this.init(); + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mousemove ( e ) { + + this.cursor('pointer'); + + //up = this.modes( this.isDown ? 3 : 2, name ); + + } + + mousedown ( e ) { + + if( this.isUI ) this.main.resetItem(); + + this.selected( true ); + + this.send(); + + return true; + + } + + uiout () { + + if( this.isSelect ) this.mode(3); + else this.mode(1); + + } + + uiover () { + + if( this.isSelect ) this.mode(4); + else this.mode(2); + + } + + update () { + + } + + /*rSize () { + + super.rSize(); + + }*/ + + mode ( n ) { + + let change = false; + + if( this.status !== n ){ + + this.status = n; + let s = this.s, cc = this.colors; + + switch( n ){ + + case 1: this.status = 1; s[1].color = cc.text; s[0].background = 'none'; break; + case 2: this.status = 2; s[1].color = cc.textOver; s[0].background = cc.back; break; + case 3: this.status = 3; s[1].color = cc.textSelect; s[0].background = cc.select; break; + case 4: this.status = 4; s[1].color = cc.textOver; s[0].background = cc.over; break; + + } + + change = true; + + } + + return change; + + } + + reset () { + + this.cursor(); + // return this.mode( 1 ); + + } + + selected ( b ){ + + if( this.isSelect ) this.mode(1); + + this.isSelect = b || false; + + if( this.isSelect ) this.mode(3); + + } + + +} + +class Grid extends Proto { + + constructor( o = {} ) { + + super( o ); + + /*this.values = o.values || []; + + if( typeof this.values === 'string' ) this.values = [ this.values ];*/ + + this.values = []; + + if( o.values ){ + if( o.values instanceof Array ){ + this.values = o.values; + } else if( o.values instanceof String ){ + this.values = [ o.values ]; + } else if( o.values instanceof Object ){ + this.refObject = o.values; + for( let g in this.refObject ) this.values.push( g ); + } + } + + this.lng = this.values.length; + + + + this.value = o.value || null; + + + + + let cc = this.colors; + + + this.isSelectable = o.selectable || false; + this.spaces = o.spaces || [ cc.sx, cc.sy ]; + this.bsize = o.bsize || [ 90, this.h ]; + + this.bsizeMax = this.bsize[0]; + + this.tmp = []; + this.stat = []; + this.grid = [ 2, Math.round( this.lng * 0.5 ) ]; + + this.h = ( this.grid[1] * this.bsize[1] ) + ( this.grid[1] * this.spaces[1] ); //+ 4 - (this.mtop*2) //+ (this.spaces[1] - this.mtop); + + this.c[1].textContent = ''; + //this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; top:'+(this.spaces[1]-2)+'px; height:auto; border-collapse:separate; border:none; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1]-2)+'px;' ); + this.c[2] = this.dom( 'table', this.css.basic + 'width:100%; border-spacing: '+(this.spaces[0]-2)+'px '+(this.spaces[1])+'px; border:none;' ); + + let n = 0, b, td, tr, sel; + + this.res = -1; + this.isDown = false; + this.neverlock = true; + + this.buttons = []; + this.stat = []; + this.tmpX = []; + this.tmpY = []; + + for( let i = 0; i < this.grid[1]; i++ ){ + + tr = this.c[2].insertRow(); + tr.style.cssText = 'pointer-events:none;'; + for( let j = 0; j < this.grid[0]; j++ ){ + + td = tr.insertCell(); + td.style.cssText = 'pointer-events:none;'; + + if( this.values[n] ){ + + sel = false; + if( this.values[n] === this.value && this.isSelectable ) sel = true; + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + this.css.button + 'position:static; top:1px; width:'+this.bsize[0]+'px; height:'+(this.bsize[1]-2)+'px; border:'+cc.borderSize+'px solid '+cc.border+'; left:auto; right:auto; border-radius:'+this.radius+'px;'; + b.style.background = sel ? cc.select : cc.button; + b.style.color = sel ? cc.textSelect : cc.text; + b.innerHTML = this.values[n]; + td.appendChild( b ); + + this.buttons.push(b); + this.stat.push(1); + + } else { + + b = document.createElement( 'div' ); + b.style.cssText = this.css.txt + 'position:static; width:'+this.bsize[0]+'px; height:'+this.bsize[1]+'px; text-align:center; left:auto; right:auto; background:none;'; + td.appendChild( b ); + + } + + if(j===0) b.style.cssText += 'float:right;'; + else b.style.cssText += 'float:left;'; + + n++; + + } + } + + this.s[0].border = 'none'; + + this.init(); + + } + + testZone ( e ) { + + let l = this.local; + if( l.x === -1 && l.y === -1 ) return -1; + + l.y += this.mtop; + + let tx = this.tmpX; + let ty = this.tmpY; + + let id = -1; + let c = -1; + let line = -1; + let i = this.grid[0]; + while( i-- ){ + if( l.x > tx[i][0] && l.x < tx[i][1] ) c = i; + } + + i = this.grid[1]; + while( i-- ){ + if( l.y > ty[i][0] && l.y < ty[i][1] ) line = i; + } + + if(c!==-1 && line!==-1){ + id = c + (line*2); + if(id>this.lng-1) id = -1; + } + + return id; + + } + + // ---------------------- + // EVENTS + // ---------------------- + + mouseup ( e ) { + + if( !this.isDown ) return false + + this.isDown = false; + if( this.res !== -1 ){ + this.value = this.values[this.res]; + this.send(); + } + + return this.mousemove( e ) + + } + + mousedown ( e ) { + + if( this.isDown ) return false + this.isDown = true; + return this.mousemove( e ) + + } + + mousemove ( e ) { + + let up = false; + this.res = this.testZone( e ); + + if( this.res !== -1 ){ + this.cursor('pointer'); + up = this.modes( this.isDown ? 3 : 2, this.res ); + } else { + up = this.reset(); + } + + return up; + + } + + // ---------------------- + // MODE + // ----------------------- + + modes ( N = 1, id = -1 ) { + + let i = this.lng, w, n, r = false; + + while( i-- ){ + + n = N; + w = this.isSelectable ? this.values[ i ] === this.value : false; + + if( i === id ){ + if( w && n === 2 ) n = 3; + } else { + n = 1; + if( w ) n = 4; + } + + if( this.mode( n, i ) ) r = true; + + } + + return r + + } + + mode ( n, id ) { + + let change = false; + let cc = this.colors, s = this.buttons; + let i = id; + + if( this.stat[id] !== n ){ + + this.stat[id] = n; + + switch( n ){ + + case 1: s[i].style.color = cc.text; s[i].style.background = cc.button; break; + case 2: s[i].style.color = cc.textOver; s[i].style.background = cc.overoff; break; + case 3: s[i].style.color = cc.textOver; s[i].style.background = cc.over; break; + case 4: s[i].style.color = cc.textSelect; s[i].style.background = cc.select; break; + + } + + change = true; + + } + + return change; + + } + + // ---------------------- + + reset () { + + this.res = -1; + this.cursor(); + return this.modes() + + } + + + label ( string, n ) { + + this.buttons[n].textContent = string; + + } + + icon ( string, y, n ) { + + this.buttons[n].style.padding = ( y || 0 ) +'px 0px'; + this.buttons[n].innerHTML = string; + + } + + testW () { + + let vw = this.spaces[0]*3 + this.bsizeMax*2, rz = false; + if( vw > this.w ) { + this.bsize[0] = ( this.w-(this.spaces[0]*3) ) * 0.5; + rz = true; + } else { + if( this.bsize[0] !== this.bsizeMax ) { + this.bsize[0] = this.bsizeMax; + rz = true; + } + } + + if( !rz ) return; + + let i = this.buttons.length; + while(i--) this.buttons[i].style.width = this.bsize[0] + 'px'; + + } + + rSize () { + + super.rSize(); + + this.testW(); + + let mid; + + this.tmpX = []; + this.tmpY = []; + + for( let j = 0; j < this.grid[0]; j++ ){ + + if(j===0){ + mid = ( this.w*0.5 ) - ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid-this.bsize[0], mid ] ); + } else { + mid = ( this.w*0.5 ) + ( this.spaces[0]*0.5 ); + this.tmpX.push( [ mid, mid+this.bsize[0] ] ); + } + + } + + mid = this.spaces[1]; + + for( let i = 0; i < this.grid[1]; i++ ){ + + this.tmpY.push( [ mid, mid + this.bsize[1] ] ); + mid += this.bsize[1] + this.spaces[1]; + + } + + } + +} + +class Pad2D extends Proto { + + constructor( o = {} ) { + + super( o ); + + this.autoWidth = false; + this.minw = this.w; + this.diam = o.diam || this.w; + + //this.margin = 15; + this.pos = new V2(0,0); + this.maxPos = 90; + + this.model = o.stype || 0; + if( o.mode !== undefined ) this.model = o.mode; + + this.min = o.min === undefined ? -1 : o.min; + this.max = o.max === undefined ? 1 : o.max; + + this.range = (this.max - this.min)*0.5; + + this.cmode = 0; + + + //console.log(this.range) + + this.c[0].style.display = 'block'; + + + + + + this.precision = o.precision === undefined ? 2 : o.precision; + + /*this.bounds = {}; + this.bounds.x1 = o.x1 || -1; + this.bounds.x2 = o.x2 || 1; + this.bounds.y1 = o.y1 || -1; + this.bounds.y2 = o.y2 || 1; + + this.lerpX = this.lerp( this.margin, this.w - this.margin , this.bounds.x1, this.bounds.x2 ); + this.lerpY = this.lerp( this.margin, this.w - this.margin , this.bounds.y1, this.bounds.y2 ); + + this.alerpX = this.lerp( this.bounds.x1, this.bounds.x2, this.margin, this.w - this.margin ); + this.alerpY = this.lerp( this.bounds.y1, this.bounds.y2, this.margin, this.w - this.margin );*/ + + this.value = ( Array.isArray( o.value ) && o.value.length == 2 ) ? o.value : [ 0, 0 ]; + + + this.h = o.h || this.w + 10; + + this.c[0].style.width = this.w + 'px'; + + // Title + if( this.c[1] !== undefined ) { // with title + + this.c[1].style.width = '100%'; + this.c[1].style.justifyContent = 'center'; + this.top = 10; + this.h += 10; + + } + + //this.top -= this.margin + + let cc = this.colors; + + + // Value + this.c[2] = this.dom( 'div', this.css.txt + 'justify-content:center; top:'+ ( this.h - 20 ) + 'px; width:100%; color:' + cc.text ); + this.c[2].textContent = this.value; + + // Pad + + let pad = this.getPad2d(); + + this.setSvg( pad, 'fill', cc.back, 0 ); + this.setSvg( pad, 'fill', cc.button, 1 ); + this.setSvg( pad, 'stroke', cc.back, 2 ); + this.setSvg( pad, 'stroke', cc.back, 3 ); + this.setSvg( pad, 'stroke', cc.text, 4 ); + + this.setSvg( pad, 'viewBox', '0 0 '+this.diam+' '+this.diam ); + this.setCss( pad, { width:this.diam, height:this.diam, left:0, top:this.top }); + + this.c[3] = pad; + + this.init(); + this.setValue(); + + } + + testZone ( e ) { + + let l = this.local; + + if( l.x === -1 && l.y === -1 ) return ''; + + + + if( l.y <= this.c[ 1 ].offsetHeight ) return 'title'; + else if ( l.y > this.h - this.c[ 2 ].offsetHeight ) return 'text'; + else return 'pad'; + + /*if( ( l.x >= this.margin ) && ( l.x <= this.w - this.margin ) && ( l.y >= this.top + this.margin ) && ( l.y <= this.top + this.w - this.margin ) ) { + return 'pad'; + }*/ + + //return ''; + + } + + mouseup ( e ) { + + this.isDown = false; + return this.mode(0); + + } + + mousedown ( e ) { + + if ( this.testZone(e) === 'pad' ) { + + this.isDown = true; + this.mousemove( e ); + return this.mode(1); + } + + } + + mousemove ( e ) { + + if( !this.isDown ) return; + + let x = (this.w*0.5) - ( e.clientX - this.zone.x ); + let y = (this.diam*0.5) - ( e.clientY - this.zone.y - this.ytop ); + + + let r = 256 / this.diam; + + x = -(x*r); + y = -(y*r); + + x = Tools.clamp( x, -this.maxPos, this.maxPos ); + y = Tools.clamp( y, -this.maxPos, this.maxPos ); + + //let x = e.clientX - this.zone.x; + //let y = e.clientY - this.zone.y - this.top; + + /*if( x < this.margin ) x = this.margin; + if( x > this.w - this.margin ) x = this.w - this.margin; + if( y < this.margin ) y = this.margin; + if( y > this.w - this.margin ) y = this.w - this.margin;*/ + + //console.log(x,y) + + this.setPos( [ x , y ] ); + + this.update( true ); + + } + + mode ( mode ) { + + if( this.cmode === mode ) return false; + + let cc = this.colors; + + switch( mode ){ + case 0: // base + + this.s[2].color = cc.text; + this.setSvg( this.c[3], 'fill', cc.back, 0); + this.setSvg( this.c[3], 'fill', cc.button, 1); + this.setSvg( this.c[3], 'stroke', cc.back, 2); + this.setSvg( this.c[3], 'stroke', cc.back, 3); + this.setSvg( this.c[3], 'stroke', cc.text, 4 ); + + break; + case 1: // down + + this.s[2].color = cc.textSelect; + this.setSvg( this.c[3], 'fill', cc.backoff, 0); + this.setSvg( this.c[3], 'fill', cc.overoff, 1); + this.setSvg( this.c[3], 'stroke', cc.backoff, 2); + this.setSvg( this.c[3], 'stroke', cc.backoff, 3); + this.setSvg( this.c[3], 'stroke', cc.textSelect, 4 ); + + break; + } + + this.cmode = mode; + return true; + + + + } + + update ( up ) { + + //if( up === undefined ) up = true; + + this.c[2].textContent = this.value; + + this.updateSVG(); + + if( up ) this.send(); + + } + + updateSVG() { + + if ( this.model == 1 ) { + + this.setSvg( this.c[3], 'y1', this.pos.y, 2 ); + this.setSvg( this.c[3], 'y2', this.pos.y, 2 ); + + this.setSvg( this.c[3], 'x1', this.pos.x, 3 ); + this.setSvg( this.c[3], 'x2', this.pos.x, 3 ); + + } + + this.setSvg( this.c[3], 'cx', this.pos.x, 4 ); + this.setSvg( this.c[3], 'cy', this.pos.y, 4 ); + + } + + setPos ( p ) { + + //if( p === undefined ) p = [ this.w / 2, this.w / 2 ]; + + this.pos.set( p[0]+128 , p[1]+128 ); + + let r = 1/this.maxPos; + + this.value[0] = ((p[0]*r)*this.range).toFixed( this.precision ); + this.value[1] = ((p[1]*r)*this.range).toFixed( this.precision ); + + } + + setValue ( v, up = false ) { + + if( v === undefined ) v = this.value; + + /*if ( v[0] < this.bounds.x1 ) v[0] = this.bounds.x1; + if ( v[0] > this.bounds.x2 ) v[0] = this.bounds.x2; + if ( v[1] < this.bounds.y1 ) v[1] = this.bounds.y1; + if ( v[1] > this.bounds.y2 ) v[1] = this.bounds.y2;*/ + + this.value[0] = Math.min( this.max, Math.max( this.min, v[0] ) ).toFixed( this.precision ) * 1; + this.value[1] = Math.min( this.max, Math.max( this.min, v[1] ) ).toFixed( this.precision ) * 1; + + this.pos.set( ((this.value[0]/this.range)*this.maxPos)+128 , ((this.value[1]/this.range)*this.maxPos)+128 ); + + //console.log(this.pos) + + this.update( up ); + + } + + /*lerp( s1, s2, d1, d2, c = true ) { + + let s = ( d2 - d1 ) / ( s2 - s1 ); + + return c ? ( v ) => { + return ( ( v < s1 ? s1 : v > s2 ? s2 : v ) - s1 ) * s + d1 + } : ( v ) => { + return ( v - s1 ) * s + d1 + } + + }*/ + +} + +// proto/TreeList.js + +class TreeList extends Proto { + constructor(o = {}) { + // API pública esperada: + // o.tree (obj/array), o.value (array) + // o.focused (bool), o.focusPath (array), o.focusLevel (number) + // o.tabIndex, o.itemIndex, o.onChange (fn) + o.selectable = true; + o.name = o.name || "TreeList"; + + super(o); + this.enableHover = o.enableHover !== false; + + // Datos & estado + this.tree = o.tree || {}; + this.value = Array.isArray(o.value) ? o.value.slice() : []; + this.focused = !!o.focused; + this.focusPath = Array.isArray(o.focusPath) ? o.focusPath.slice() : []; + this.focusLevel = typeof o.focusLevel === "number" ? o.focusLevel : -1; + + this.tabIndex = o.tabIndex ?? null; + this.itemIndex = o.itemIndex ?? null; + + // Callback + this.changeCb = + typeof o.onChange === "function" ? o.onChange : () => {}; + + // Layout interno / publicación de altura + this.lineH = this.h; // alto de UNA fila + this.levelGap = this.colors.sy || 2; // separación vertical entre niveles + this.leafMax = 0; // se calcula en rSize() + + // Modelo visual + this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] + this.itemsDom = []; // espejo DOM por nivel + this.hover = { level: -1, index: -1 }; + + // 🔸 NUEVO: recordar la última hoja seleccionada (persistente) + this.lastLeaf = { parentPath: [], key: null }; // parentPath es la ruta hasta el mapa padre + + // Contenedor interno (absoluto) + this.c[2] = this.dom( + "div", + this.css.basic + "left:0; top:0; width:100%; height:100%;" + ); + this.s[2] = this.c[2].style; + + this.init(); + + // Si el valor inicial ya apunta a una hoja válida, recordar esa hoja + this._maybeUpdateLastLeafFromValue(); + } + + // ======= Helpers de tipo ======= + static isMap(node) { + return node && typeof node === "object" && !Array.isArray(node); + } + static isList(node) { + return Array.isArray(node); + } + + // ======= Recorrido de datos ======= + getNodeAtPath(path) { + let node = this.tree; + for (let i = 0; i < path.length; i++) { + if (TreeList.isMap(node)) { + if (!Object.prototype.hasOwnProperty.call(node, path[i])) + return { node: null, depth: i }; + node = node[path[i]]; + } else if (TreeList.isList(node)) { + // Llegamos a una lista: ya no hay más claves válidas + if (i < path.length) return { node, depth: i }; + } else { + return { node: null, depth: i }; + } + } + return { node, depth: path.length }; + } + + // Autocompletar: baja por primeras claves de cada mapa hasta alcanzar una lista + autoCompleteToLeaf(basePath) { + let { node } = this.getNodeAtPath(basePath); + const path = basePath.slice(); + while (TreeList.isMap(node)) { + const keys = Object.keys(node); + if (!keys.length) break; + const k0 = keys[0]; + path.push(k0); + node = node[k0]; + } + // Si termina en lista, NO agrega un ítem final de la hoja + return path; + } + + // Ruta activa (focusPath si focused, sino value) + getActivePath() { + return this.focused ? this.focusPath : this.value; + } + + // ======= Tamaño de hoja máximo (para layout estable) ======= + computeLeafMax(node = this.tree) { + if (Array.isArray(node)) return node.length; + if (!node || typeof node !== "object") return 0; + let m = 0; + for (const k of Object.keys(node)) { + m = Math.max(m, this.computeLeafMax(node[k])); + } + return m; + } + + // ======= Construcción de niveles (modelo lógico) ======= + buildLevels() { + this.levels.length = 0; + const activePath = this.getActivePath(); + + let node = this.tree; + let level = 0; + + while (node) { + if (TreeList.isMap(node)) { + // Nivel intermedio: claves del mapa (horizontal) + const keys = Object.keys(node); + if (!keys.length) break; + this.levels.push({ + type: "map", + items: keys.map((k) => ({ + key: k, + label: k, + zone: { x: 0, y: 0, w: 0, h: 0 }, + })), + zone: { x: 0, y: 0, w: 0, h: this.lineH }, + }); + + const nextKey = activePath[level]; + if (!nextKey || !node.hasOwnProperty(nextKey)) break; + node = node[nextKey]; + } else if (TreeList.isList(node)) { + // Nivel hoja: lista vertical + const items = node.map((label) => ({ + key: label, + label, + zone: { x: 0, y: 0, w: 0, h: 0 }, + })); + const hList = Math.max(items.length, this.leafMax) * this.lineH; + this.levels.push({ + type: "list", + items, + zone: { x: 0, y: 0, w: 0, h: hList }, + }); + break; + } else { + break; + } + level++; + } + } + + // ======= Layout (zonas & DOM) ======= + layoutLevels() { + const contentX = (this.sa || 100) + 8; // columna de label + padding + const padRight = 8; + const w = this.zone.w - contentX - padRight; + + let y = 0; + + // Ajustar itemsDom a cantidad de niveles + while (this.itemsDom.length < this.levels.length) + this.itemsDom.push([]); + for (let L = this.levels.length; L < this.itemsDom.length; L++) { + for (const el of this.itemsDom[L]) + if (el && el.parentNode) el.parentNode.removeChild(el); + } + this.itemsDom.length = this.levels.length; + + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + if (lvl.type === "map") { + const n = Math.max(1, lvl.items.length); + const cellW = Math.floor(w / n); + lvl.zone = { x: contentX, y, w, h: this.lineH }; + let x = contentX; + for (let i = 0; i < lvl.items.length; i++) { + const it = lvl.items[i]; + it.zone = { x, y, w: cellW, h: this.lineH }; + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, "map"); + x += cellW; + } + // eliminar DOM sobrante si antes había más celdas + this._pruneRow(L, lvl.items.length); + y += this.lineH + this.levelGap; + } else { + // lista/hoja: reservar h según leafMax + const n = lvl.items.length; + const hList = Math.max(n, this.leafMax) * this.lineH; + lvl.zone = { x: contentX, y, w, h: hList }; + + const rows = Math.max(n, this.leafMax); + for (let i = 0; i < rows; i++) { + const isReal = i < n; + const it = isReal + ? lvl.items[i] + : { + key: null, + label: "", + zone: { x: 0, y: 0, w: 0, h: 0 }, + }; + it.zone = { + x: contentX, + y: y + i * this.lineH, + w, + h: this.lineH, + }; + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, "list", isReal); + } + // eliminar DOM sobrante si antes había más filas + this._pruneRow(L, rows); + y += hList; + } + } + + // Ajustes de alto interno del contenedor visual + const totalH = y; + this.zone.h = totalH + this.margin; + this.s[0].height = this.zone.h + "px"; + this.s[2].height = totalH + "px"; + + // Publicar alto total al GUI (sumará u.h) + this._publishHeight(); + } + + // Elimina nodos DOM sobrantes en la fila L a partir del índice keep + _pruneRow(L, keep) { + const row = this.itemsDom[L]; + if (!row) return; + for (let j = keep; j < row.length; j++) { + const el = row[j]; + if (el && el.parentNode) el.parentNode.removeChild(el); + } + row.length = keep; + } + + ensureItemDom(L, i) { + const row = this.itemsDom[L]; + while (row.length <= i) row.push(null); + if (!row[i]) { + const div = this.dom( + "div", + Tools.css.txt + "position:absolute; pointer-events:none;" + ); + this.c[2].appendChild(div); + row[i] = div; + } + return row[i]; + } + + paintItemDom(div, L, i, it, kind, isReal = true) { + const s = div.style; + const cc = this.colors; + + // Posición + s.left = it.zone.x + "px"; + s.top = it.zone.y + "px"; + s.width = it.zone.w + "px"; + s.height = it.zone.h - 2 + "px"; + + // Texto + div.textContent = isReal ? it.label : ""; + + // Estados + const selected = + isReal && this.value[L] !== undefined && this.value[L] === it.key; + const inFocusLvl = this.focused && this.focusLevel === L; + const focusMatch = isReal && inFocusLvl && this.focusPath[L] === it.key; + const isHover = + this.enableHover && + isReal && + this.hover.level === L && + this.hover.index === i; + + // 🔸 NUEVO: ¿esta fila es la última hoja seleccionada? + let isLastLeaf = false; + if (isReal && kind === "list" && this.lastLeaf.key != null) { + // La hoja visible corresponde si el padre de esta lista coincide con parentPath guardado + // El padre actual es this.value.slice(0, L) cuando la lista está desplegada por value/focus + const parentNow = this.getActivePath().slice(0, L); + if ( + this._pathsEqual(parentNow, this.lastLeaf.parentPath) && + it.key === this.lastLeaf.key + ) { + isLastLeaf = true; + } + } + + // Estilos base + s.background = cc.back; + s.color = cc.text; + s.border = "1px solid " + cc.border; + s.textAlign = kind === "map" ? "center" : "left"; + + // Prioridad visual: + // 1) seleccionado (azul) + // 2) última hoja (nuevo color) + // 3) foco + // 4) hover + if (selected) { + s.background = cc.select; + s.color = cc.textSelect; + } else if (isLastLeaf) { + // color distintivo para "última hoja" (amarillo suave) + s.background = "rgba(255, 200, 0, 0.25)"; + s.color = cc.text; + } else if (focusMatch) { + s.background = cc.backgroundOver; + s.color = cc.textOver; + } else if (isHover) { + s.background = cc.overoff; + s.color = cc.textOver; + } + + // Filas de padding invisibles en hoja + s.opacity = isReal ? "1" : "0"; + } + + _pathsEqual(a, b) { + if (!a || !b || a.length !== b.length) return false; + for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false; + return true; + } + + // ======= Ciclo de vida ======= + rSize() { + this.leafMax = this.computeLeafMax(this.tree); + this.buildLevels(); + this.layoutLevels(); + } + + update() { + this.buildLevels(); + this.layoutLevels(); + } + + // ======= Interacción ======= + _toLocal(e) { + const mx = e.clientX - this.zone.x; + const my = e.clientY - this.zone.y; + return { x: mx, y: my }; + } + + _hitTest(mx, my) { + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + const z = lvl.zone; // x y w ya incluyen contentX + + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) + continue; + + if (lvl.type === "map") { + for (let i = 0; i < lvl.items.length; i++) { + const itz = lvl.items[i].zone; + if ( + mx >= itz.x && + my >= itz.y && + mx <= itz.x + itz.w && + my <= itz.y + itz.h + ) { + return { L, i, real: true }; + } + } + } else { + const nRows = Math.max(lvl.items.length, this.leafMax); + for (let i = 0; i < nRows; i++) { + const isReal = i < lvl.items.length; + const itz = isReal + ? lvl.items[i].zone + : { + x: z.x, + y: z.y + i * this.lineH, + w: z.w, + h: this.lineH, + }; + if ( + mx >= itz.x && + my >= itz.y && + mx <= itz.x + itz.w && + my <= itz.y + itz.h + ) { + return { L, i, real: isReal }; + } + } + } + } + return { L: -1, i: -1, real: false }; + } + + handleEvent(e) { + if (this.lock) return false; + + if (e.type === "mousemove") { + // Si el hover está desactivado, no hay trabajo que hacer. + if (!this.enableHover) return false; + + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + + // nuevo hover calculado + const newHover = + ht.L !== -1 && ht.real + ? { level: ht.L, index: ht.i } + : { level: -1, index: -1 }; + // solo repintar si cambia realmente el hover + if ( + newHover.level === this.hover.level && + newHover.index === this.hover.index + ) + return false; + this.hover = newHover; + this.update(); + return true; + } + + if (e.type === "mousedown") { + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + if (ht.L !== -1 && ht.real) { + this._selectAt(ht.L, ht.i); + return true; // solo true si realmente se seleccionó algo + } + return false; + } + + if (e.type === "mouseup") { + return false; + } + + return false; + } + + // Selección + autocompletado + notificación + _selectAt(L, i) { + const lvl = this.levels[L]; + const chosen = lvl.items[i]; + if (!chosen || !chosen.key) return; + + const base = this.value.slice(0, L); + base[L] = chosen.key; + + const newPath = this.autoCompleteToLeaf(base); + + // 🔸 Si el usuario selecciona explícitamente en el nivel hoja, recordarlo + if (lvl.type === "list") { + this.lastLeaf.parentPath = this.value.slice(0, L); // padre de la lista actual + this.lastLeaf.key = chosen.key; + } + + this.value = newPath.slice(); + this.update(); + + // si está referenciado, propaga a objeto externo + this.send(newPath); + this.changeCb(this.tabIndex, this.itemIndex, newPath); + } + + // ======= API pública ======= + setValue(path) { + this.value = Array.isArray(path) ? path.slice() : []; + // Si desde afuera nos setean una hoja válida, también la recordamos + this._maybeUpdateLastLeafFromValue(); + this.update(); + } + + setTree(tree) { + this.tree = tree || {}; + this.leafMax = this.computeLeafMax(this.tree); + this.update(); + } + + setFocus({ focused, focusPath, focusLevel }) { + if (typeof focused === "boolean") this.focused = focused; + if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); + if (typeof focusLevel === "number") this.focusLevel = focusLevel; + this.update(); + } + + _maybeUpdateLastLeafFromValue() { + // Si value apunta a padre+hoja (…,[leaf]) y es válida, recordar esa hoja + if (!Array.isArray(this.value) || this.value.length === 0) return; + const parent = this.value.slice(0, this.value.length - 1); + const leaf = this.value[this.value.length - 1]; + const info = this.getNodeAtPath(parent); + if (info && Array.isArray(info.node) && info.node.includes(leaf)) { + this.lastLeaf = { parentPath: parent, key: leaf }; + } + } + + // ======= Publicación de altura ======= + _countVisibleIntermediates() { + let c = 0; + for (let i = 0; i < this.levels.length; i++) + if (this.levels[i].type === "map") c++; + return c; + } + + _getCurrentLeafLength() { + const last = this.levels[this.levels.length - 1]; + return last && last.type === "list" ? last.items.length : 0; + } + + _publishHeight() { + const inter = this._countVisibleIntermediates(); + const leafLen = Math.max(this.leafMax, this._getCurrentLeafLength()); + const leafH = leafLen * this.lineH; + const interH = inter * (this.lineH + this.levelGap); + const totalH = inter ? interH + this.levelGap + leafH : leafH; + + // Normalizamos a px enteros para evitar jitter por redondeo + const newH = Math.floor(totalH); + + // Actualizamos métricas locales siempre + this.h = newH; + this.zone.h = this.h + this.margin; + this.s[0].height = this.h + "px"; + + // Solo avisamos al GUI si la altura cambió + if (newH !== this._lastPublishedH) { + this._lastPublishedH = newH; + Roots.needReZone = true; + if (this.isUI && this.main) this.main.calc(); + } + } +} + +const add = function () { + + let a = arguments; + + let type, o, ref = false, n = null; + + if( typeof a[0] === 'string' ){ + + type = a[0]; + o = a[1] || {}; + + } else if ( typeof a[0] === 'object' ){ // like dat gui + + ref = true; + if( a[2] === undefined ) [].push.call(a, {}); + + type = a[2].type ? a[2].type : autoType( a[0][a[1]], a[2] ); + + o = a[2]; + o.name = a[1]; + if (o.hasOwnProperty("displayName")) o.name = o.displayName; + + if( type === 'list' && !o.list ){ o.list = a[0][a[1]]; } + else o.value = a[0][a[1]]; + + } + + let name = type.toLowerCase(); + + if( name === 'group' ){ + o.add = add; + //o.dx = 8 + } + + switch( name ){ + + case 'bool': case 'boolean': n = new Bool(o); break; + case 'button': n = new Button(o); break; + case 'circular': n = new Circular(o); break; + case 'color': n = new Color(o); break; + case 'fps': n = new Fps(o); break; + case 'graph': n = new Graph(o); break; + case 'group': n = new Group(o); break; + case 'joystick': n = new Joystick(o); break; + case 'knob': n = new Knob(o); break; + case 'list': n = new List(o); break; + case 'numeric': case 'number': n = new Numeric(o); break; + case 'slide': n = new Slide(o); break; + case 'textInput': case 'string': n = new TextInput(o); break; + case 'title': case 'text': n = new Title(o); break; + case 'select': n = new Select(o); break; + case 'bitmap': n = new Bitmap(o); break; + case 'selector': n = new Selector(o); break; + case 'empty': case 'space': n = new Empty(o); break; + case 'item': n = new Item(o); break; + case 'grid': n = new Grid(o); break; + case 'pad2d': case 'pad': n = new Pad2D(o); break; + case 'treelist': n = new TreeList(o); break; + + } + + + + if( n !== null ){ + + Roots.needResize = true; + + if( ref ) n.setReferency( a[0], a[1] ); + return n; + + } + +}; + +const autoType = function ( v, o ) { + + let type = 'slide'; + + if( typeof v === 'boolean' ) type = 'bool'; + else if( typeof v === 'string' ){ + + if( v.substring(0,1) === '#' ) type = 'color'; + else type = 'string'; + + } else if( typeof v === 'number' ){ + + if( o.ctype ) type = 'color'; + else type = 'slide'; + + } else if( typeof v === 'array' && v instanceof Array ){ + + if( typeof v[0] === 'number' ) type = 'number'; + else if( typeof v[0] === 'string' ) type = 'list'; + + } else if( typeof v === 'object' && v instanceof Object ){ + + if( v.x !== undefined ) type = 'number'; + else type = 'list'; + + } + + return type + +}; + +/** + * @author lth / https://github.com/lo-th + */ + +class Gui { + constructor(o = {}) { + this.isGui = true; + + this.name = "gui"; + + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; + + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); + + //this.cleanning = false + + // style + this.css = Tools.cloneCss(); + + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 + + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; + + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; + + this.callback = o.callback === undefined ? null : o.callback; + + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; + + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + + this.cn = ""; + + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; + + this.size.h = this.size.h < 11 ? 11 : this.size.h; + + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + + // virtual mouse + this.mouse = new V2().neg(); + + this.h = 0; + //this.prevY = -1; + this.sw = 0; + + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); + + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; + + this.autoResize = o.autoResize === undefined ? true : o.autoResize; + + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; + + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; + + this.isNewTarget = false; + + let cc = this.colors; + + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); + + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); + + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); + + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); + + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); + + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; + + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } + + if (this.parent !== null) this.parent.appendChild(this.content); + + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } + + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + + this.setWidth(); + + if (this.isCanvas) this.makeCanvas(); + + Roots.add(this); + } + + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseUp(x, y) { + /* + + clientX,clientY are no used when isCanvas==true + */ + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); + + Roots.needReZone = true; + } + + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } + + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } + + // ---------------------- + // CANVAS + // ---------------------- + + onDraw() {} + + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + + //console.log( this.canvas.width, this.canvas.height ) + } + + draw(force) { + if (this.canvas === null) return; + + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } + + ////// + + getDom() { + return this.content; + } + + noMouse() { + this.mouse.neg(); + } + + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); + + //console.log("setMouse "+uv.x+" "+uv.y) + } + + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } + + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } + + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } + + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } + + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } + + onChange(f) { + this.callback = f || null; + return this; + } + + // ---------------------- + // STYLES + // ---------------------- + + mode(n) { + let needChange = false; + let cc = this.colors; + + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } + + needChange = true; + } + + return needChange; + } + + // ---------------------- + // TARGET + // ---------------------- + + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + + this.proto = null; + this.current = -1; + + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + + Roots.cursor(); + return true; + } + + // ---------------------- + // ZONE TEST + // ---------------------- + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + this.isReset = false; + + let name = ""; + + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; + + return name; + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent(e) { + //if( this.cleanning ) return + + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; + + let change = false; + let protoChange = false; + + let name = this.testZone(e); + + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; + + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } + + if (!name) return; + + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); + + if (this.proto) protoChange = this.proto.handleEvent(e); + + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); + + if (!Roots.lock) { + this.getNext(e, change); + } + + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } + + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + + break; + } + + if (this.isDown) change = true; + if (protoChange) change = true; + + if (type === "keyup") change = true; + if (type === "keydown") change = true; + + if (change) this.draw(); + } + + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); + + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } + + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } + + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } + + // ---------------------- + // RESET + // ---------------------- + + reset(force) { + if (this.isReset) return; + + //this.resetItem(); + + this.mouse.neg(); + this.isDown = false; + + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); + + if (r || r2) this.draw(true); + + this.isReset = true; + + //Roots.lock = false; + } + + // ---------------------- + // ADD NODE + // ---------------------- + + add() { + //if(this.cleanning) this.cleanning = false + + let a = arguments; + let ontop = false; + + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; + + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } + + let u = add.apply(this, a); + + if (u === null) return; + + if (ontop) this.uis.unshift(u); + else this.uis.push(u); + + this.calc(); + + this.isEmpty = false; + + return u; + } + + // remove one node + + remove(n) { + if (n.dispose) n.dispose(); + } + + // call after uis clear + + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } + + // clear all gui + + empty() { + //this.cleanning = true + + //this.close(); + + let i = this.uis.length, + item; + + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } + + this.uis = []; + this.isEmpty = true; + this.calc(); + } + + clear() { + this.empty(); + } + + clear2() { + setTimeout(this.empty.bind(this), 0); + } + + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } + + // ---------------------- + // ITEMS SPECIAL + // ---------------------- + + resetItem() { + if (!this.isItemMode) return; + + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } + + setItem(name) { + if (!this.isItemMode) return; + + name = name || ""; + this.resetItem(); + + if (!name) { + this.update(0); + return; + } + + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } + + // ---------------------- + // SCROLL + // ---------------------- + + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; + + if (b) { + this.total = this.h; + + this.maxView = this.maxHeight; + + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; + + this.range = this.maxView - this.sh; + + this.oy = Tools.clamp(this.oy, 0, this.range); + + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } + + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } + + update(y) { + y = Tools.clamp(y, 0, this.range); + + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } + + // ---------------------- + // RESIZE FUNCTION + // ---------------------- + + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } + + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } + + setHeight() { + if (this.tmp) clearTimeout(this.tmp); + + this.zone.h = this.bh; + this.isScroll = false; + + if (this.isOpen) { + this.h = this.calcUis(); + + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; + + this.maxHeight = hhh - this.zone.y - this.bh; + + let diff = this.h - this.maxHeight; + + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + + this.upScroll(this.isScroll); + + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + + rezone() { + Roots.needReZone = true; + } + + setWidth(w) { + if (w) this.zone.w = w; + + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } +} + +export { Files, Gui, REVISION, Tools, add }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gXCIuLi9jb3JlL1Byb3RvLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4uL2NvcmUvVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi4vY29yZS9Sb290cy5qc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cdGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG5cdFx0Ly8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG5cdFx0Ly8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuXHRcdC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG5cdFx0Ly8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG5cdFx0by5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuXHRcdG8ubmFtZSA9IG8ubmFtZSB8fCBcIlRyZWVMaXN0XCI7XHJcblxyXG5cdFx0c3VwZXIobyk7XHJcblx0XHR0aGlzLmVuYWJsZUhvdmVyID0gby5lbmFibGVIb3ZlciAhPT0gZmFsc2U7XHJcblxyXG5cdFx0Ly8gRGF0b3MgJiBlc3RhZG9cclxuXHRcdHRoaXMudHJlZSA9IG8udHJlZSB8fCB7fTtcclxuXHRcdHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KG8udmFsdWUpID8gby52YWx1ZS5zbGljZSgpIDogW107XHJcblx0XHR0aGlzLmZvY3VzZWQgPSAhIW8uZm9jdXNlZDtcclxuXHRcdHRoaXMuZm9jdXNQYXRoID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcblx0XHR0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSBcIm51bWJlclwiID8gby5mb2N1c0xldmVsIDogLTE7XHJcblxyXG5cdFx0dGhpcy50YWJJbmRleCA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuXHRcdHRoaXMuaXRlbUluZGV4ID0gby5pdGVtSW5kZXggPz8gbnVsbDtcclxuXHJcblx0XHQvLyBDYWxsYmFja1xyXG5cdFx0dGhpcy5jaGFuZ2VDYiA9XHJcblx0XHRcdHR5cGVvZiBvLm9uQ2hhbmdlID09PSBcImZ1bmN0aW9uXCIgPyBvLm9uQ2hhbmdlIDogKCkgPT4ge307XHJcblxyXG5cdFx0Ly8gTGF5b3V0IGludGVybm8gLyBwdWJsaWNhY2nDs24gZGUgYWx0dXJhXHJcblx0XHR0aGlzLmxpbmVIID0gdGhpcy5oOyAvLyBhbHRvIGRlIFVOQSBmaWxhXHJcblx0XHR0aGlzLmxldmVsR2FwID0gdGhpcy5jb2xvcnMuc3kgfHwgMjsgLy8gc2VwYXJhY2nDs24gdmVydGljYWwgZW50cmUgbml2ZWxlc1xyXG5cdFx0dGhpcy5sZWFmTWF4ID0gMDsgLy8gc2UgY2FsY3VsYSBlbiByU2l6ZSgpXHJcblxyXG5cdFx0Ly8gTW9kZWxvIHZpc3VhbFxyXG5cdFx0dGhpcy5sZXZlbHMgPSBbXTsgLy8gW3t0eXBlOidtYXAnfCdsaXN0JywgaXRlbXM6W3trZXksbGFiZWwsem9uZX1dLCB6b25lOnt4LHksdyxofX0uLi5dXHJcblx0XHR0aGlzLml0ZW1zRG9tID0gW107IC8vIGVzcGVqbyBET00gcG9yIG5pdmVsXHJcblx0XHR0aGlzLmhvdmVyID0geyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG5cclxuXHRcdC8vIPCflLggTlVFVk86IHJlY29yZGFyIGxhIMO6bHRpbWEgaG9qYSBzZWxlY2Npb25hZGEgKHBlcnNpc3RlbnRlKVxyXG5cdFx0dGhpcy5sYXN0TGVhZiA9IHsgcGFyZW50UGF0aDogW10sIGtleTogbnVsbCB9OyAvLyBwYXJlbnRQYXRoIGVzIGxhIHJ1dGEgaGFzdGEgZWwgbWFwYSBwYWRyZVxyXG5cclxuXHRcdC8vIENvbnRlbmVkb3IgaW50ZXJubyAoYWJzb2x1dG8pXHJcblx0XHR0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuXHRcdFx0XCJkaXZcIixcclxuXHRcdFx0dGhpcy5jc3MuYmFzaWMgKyBcImxlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlO1wiXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHRcdHRoaXMuaW5pdCgpO1xyXG5cclxuXHRcdC8vIFNpIGVsIHZhbG9yIGluaWNpYWwgeWEgYXB1bnRhIGEgdW5hIGhvamEgdsOhbGlkYSwgcmVjb3JkYXIgZXNhIGhvamFcclxuXHRcdHRoaXMuX21heWJlVXBkYXRlTGFzdExlYWZGcm9tVmFsdWUoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gSGVscGVycyBkZSB0aXBvID09PT09PT1cclxuXHRzdGF0aWMgaXNNYXAobm9kZSkge1xyXG5cdFx0cmV0dXJuIG5vZGUgJiYgdHlwZW9mIG5vZGUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7XHJcblx0fVxyXG5cdHN0YXRpYyBpc0xpc3Qobm9kZSkge1xyXG5cdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFJlY29ycmlkbyBkZSBkYXRvcyA9PT09PT09XHJcblx0Z2V0Tm9kZUF0UGF0aChwYXRoKSB7XHJcblx0XHRsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBwYXRoW2ldKSlcclxuXHRcdFx0XHRcdHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcblx0XHRcdFx0bm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcblx0XHRcdH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcblx0XHRcdFx0Ly8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG5cdFx0XHRcdGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcblx0fVxyXG5cclxuXHQvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG5cdGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG5cdFx0bGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuXHRcdGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG5cdFx0d2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcblx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuXHRcdFx0aWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcblx0XHRcdGNvbnN0IGswID0ga2V5c1swXTtcclxuXHRcdFx0cGF0aC5wdXNoKGswKTtcclxuXHRcdFx0bm9kZSA9IG5vZGVbazBdO1xyXG5cdFx0fVxyXG5cdFx0Ly8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuXHRcdHJldHVybiBwYXRoO1xyXG5cdH1cclxuXHJcblx0Ly8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG5cdGdldEFjdGl2ZVBhdGgoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG5cdGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcblx0XHRpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09IFwib2JqZWN0XCIpIHJldHVybiAwO1xyXG5cdFx0bGV0IG0gPSAwO1xyXG5cdFx0Zm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XHJcblx0XHRcdG0gPSBNYXRoLm1heChtLCB0aGlzLmNvbXB1dGVMZWFmTWF4KG5vZGVba10pKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBDb25zdHJ1Y2Npw7NuIGRlIG5pdmVsZXMgKG1vZGVsbyBsw7NnaWNvKSA9PT09PT09XHJcblx0YnVpbGRMZXZlbHMoKSB7XHJcblx0XHR0aGlzLmxldmVscy5sZW5ndGggPSAwO1xyXG5cdFx0Y29uc3QgYWN0aXZlUGF0aCA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpO1xyXG5cclxuXHRcdGxldCBub2RlID0gdGhpcy50cmVlO1xyXG5cdFx0bGV0IGxldmVsID0gMDtcclxuXHJcblx0XHR3aGlsZSAobm9kZSkge1xyXG5cdFx0XHRpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBOaXZlbCBpbnRlcm1lZGlvOiBjbGF2ZXMgZGVsIG1hcGEgKGhvcml6b250YWwpXHJcblx0XHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG5cdFx0XHRcdGlmICgha2V5cy5sZW5ndGgpIGJyZWFrO1xyXG5cdFx0XHRcdHRoaXMubGV2ZWxzLnB1c2goe1xyXG5cdFx0XHRcdFx0dHlwZTogXCJtYXBcIixcclxuXHRcdFx0XHRcdGl0ZW1zOiBrZXlzLm1hcCgoaykgPT4gKHtcclxuXHRcdFx0XHRcdFx0a2V5OiBrLFxyXG5cdFx0XHRcdFx0XHRsYWJlbDogayxcclxuXHRcdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0XHR9KSksXHJcblx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IHRoaXMubGluZUggfSxcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0Y29uc3QgbmV4dEtleSA9IGFjdGl2ZVBhdGhbbGV2ZWxdO1xyXG5cdFx0XHRcdGlmICghbmV4dEtleSB8fCAhbm9kZS5oYXNPd25Qcm9wZXJ0eShuZXh0S2V5KSkgYnJlYWs7XHJcblx0XHRcdFx0bm9kZSA9IG5vZGVbbmV4dEtleV07XHJcblx0XHRcdH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcblx0XHRcdFx0Ly8gTml2ZWwgaG9qYTogbGlzdGEgdmVydGljYWxcclxuXHRcdFx0XHRjb25zdCBpdGVtcyA9IG5vZGUubWFwKChsYWJlbCkgPT4gKHtcclxuXHRcdFx0XHRcdGtleTogbGFiZWwsXHJcblx0XHRcdFx0XHRsYWJlbCxcclxuXHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCB9LFxyXG5cdFx0XHRcdH0pKTtcclxuXHRcdFx0XHRjb25zdCBoTGlzdCA9IE1hdGgubWF4KGl0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcblx0XHRcdFx0dGhpcy5sZXZlbHMucHVzaCh7XHJcblx0XHRcdFx0XHR0eXBlOiBcImxpc3RcIixcclxuXHRcdFx0XHRcdGl0ZW1zLFxyXG5cdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiBoTGlzdCB9LFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldmVsKys7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuXHRsYXlvdXRMZXZlbHMoKSB7XHJcblx0XHRjb25zdCBjb250ZW50WCA9ICh0aGlzLnNhIHx8IDEwMCkgKyA4OyAvLyBjb2x1bW5hIGRlIGxhYmVsICsgcGFkZGluZ1xyXG5cdFx0Y29uc3QgcGFkUmlnaHQgPSA4O1xyXG5cdFx0Y29uc3QgdyA9IHRoaXMuem9uZS53IC0gY29udGVudFggLSBwYWRSaWdodDtcclxuXHJcblx0XHRsZXQgeSA9IDA7XHJcblxyXG5cdFx0Ly8gQWp1c3RhciBpdGVtc0RvbSBhIGNhbnRpZGFkIGRlIG5pdmVsZXNcclxuXHRcdHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aClcclxuXHRcdFx0dGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuXHRcdGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSlcclxuXHRcdFx0XHRpZiAoZWwgJiYgZWwucGFyZW50Tm9kZSkgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XHJcblx0XHR9XHJcblx0XHR0aGlzLml0ZW1zRG9tLmxlbmd0aCA9IHRoaXMubGV2ZWxzLmxlbmd0aDtcclxuXHJcblx0XHRmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcblx0XHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0XHRpZiAobHZsLnR5cGUgPT09IFwibWFwXCIpIHtcclxuXHRcdFx0XHRjb25zdCBuID0gTWF0aC5tYXgoMSwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcblx0XHRcdFx0Y29uc3QgY2VsbFcgPSBNYXRoLmZsb29yKHcgLyBuKTtcclxuXHRcdFx0XHRsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IHRoaXMubGluZUggfTtcclxuXHRcdFx0XHRsZXQgeCA9IGNvbnRlbnRYO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdCA9IGx2bC5pdGVtc1tpXTtcclxuXHRcdFx0XHRcdGl0LnpvbmUgPSB7IHgsIHksIHc6IGNlbGxXLCBoOiB0aGlzLmxpbmVIIH07XHJcblx0XHRcdFx0XHRjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcblx0XHRcdFx0XHR0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCBcIm1hcFwiKTtcclxuXHRcdFx0XHRcdHggKz0gY2VsbFc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBjZWxkYXNcclxuXHRcdFx0XHR0aGlzLl9wcnVuZVJvdyhMLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuXHRcdFx0XHR5ICs9IHRoaXMubGluZUggKyB0aGlzLmxldmVsR2FwO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIGxpc3RhL2hvamE6IHJlc2VydmFyIGggc2Vnw7puIGxlYWZNYXhcclxuXHRcdFx0XHRjb25zdCBuID0gbHZsLml0ZW1zLmxlbmd0aDtcclxuXHRcdFx0XHRjb25zdCBoTGlzdCA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCkgKiB0aGlzLmxpbmVIO1xyXG5cdFx0XHRcdGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogaExpc3QgfTtcclxuXHJcblx0XHRcdFx0Y29uc3Qgcm93cyA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGlzUmVhbCA9IGkgPCBuO1xyXG5cdFx0XHRcdFx0Y29uc3QgaXQgPSBpc1JlYWxcclxuXHRcdFx0XHRcdFx0PyBsdmwuaXRlbXNbaV1cclxuXHRcdFx0XHRcdFx0OiB7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6IG51bGwsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCB9LFxyXG5cdFx0XHRcdFx0XHQgIH07XHJcblx0XHRcdFx0XHRpdC56b25lID0ge1xyXG5cdFx0XHRcdFx0XHR4OiBjb250ZW50WCxcclxuXHRcdFx0XHRcdFx0eTogeSArIGkgKiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHR3LFxyXG5cdFx0XHRcdFx0XHRoOiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuXHRcdFx0XHRcdHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsIFwibGlzdFwiLCBpc1JlYWwpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgZmlsYXNcclxuXHRcdFx0XHR0aGlzLl9wcnVuZVJvdyhMLCByb3dzKTtcclxuXHRcdFx0XHR5ICs9IGhMaXN0O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQWp1c3RlcyBkZSBhbHRvIGludGVybm8gZGVsIGNvbnRlbmVkb3IgdmlzdWFsXHJcblx0XHRjb25zdCB0b3RhbEggPSB5O1xyXG5cdFx0dGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjtcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuXHRcdHRoaXMuc1syXS5oZWlnaHQgPSB0b3RhbEggKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gUHVibGljYXIgYWx0byB0b3RhbCBhbCBHVUkgKHN1bWFyw6EgdS5oKVxyXG5cdFx0dGhpcy5fcHVibGlzaEhlaWdodCgpO1xyXG5cdH1cclxuXHJcblx0Ly8gRWxpbWluYSBub2RvcyBET00gc29icmFudGVzIGVuIGxhIGZpbGEgTCBhIHBhcnRpciBkZWwgw61uZGljZSBrZWVwXHJcblx0X3BydW5lUm93KEwsIGtlZXApIHtcclxuXHRcdGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcblx0XHRpZiAoIXJvdykgcmV0dXJuO1xyXG5cdFx0Zm9yIChsZXQgaiA9IGtlZXA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0Y29uc3QgZWwgPSByb3dbal07XHJcblx0XHRcdGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuXHRcdH1cclxuXHRcdHJvdy5sZW5ndGggPSBrZWVwO1xyXG5cdH1cclxuXHJcblx0ZW5zdXJlSXRlbURvbShMLCBpKSB7XHJcblx0XHRjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG5cdFx0d2hpbGUgKHJvdy5sZW5ndGggPD0gaSkgcm93LnB1c2gobnVsbCk7XHJcblx0XHRpZiAoIXJvd1tpXSkge1xyXG5cdFx0XHRjb25zdCBkaXYgPSB0aGlzLmRvbShcclxuXHRcdFx0XHRcImRpdlwiLFxyXG5cdFx0XHRcdFRvb2xzLmNzcy50eHQgKyBcInBvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lO1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG5cdFx0XHRyb3dbaV0gPSBkaXY7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcm93W2ldO1xyXG5cdH1cclxuXHJcblx0cGFpbnRJdGVtRG9tKGRpdiwgTCwgaSwgaXQsIGtpbmQsIGlzUmVhbCA9IHRydWUpIHtcclxuXHRcdGNvbnN0IHMgPSBkaXYuc3R5bGU7XHJcblx0XHRjb25zdCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuXHRcdC8vIFBvc2ljacOzblxyXG5cdFx0cy5sZWZ0ID0gaXQuem9uZS54ICsgXCJweFwiO1xyXG5cdFx0cy50b3AgPSBpdC56b25lLnkgKyBcInB4XCI7XHJcblx0XHRzLndpZHRoID0gaXQuem9uZS53ICsgXCJweFwiO1xyXG5cdFx0cy5oZWlnaHQgPSBpdC56b25lLmggLSAyICsgXCJweFwiO1xyXG5cclxuXHRcdC8vIFRleHRvXHJcblx0XHRkaXYudGV4dENvbnRlbnQgPSBpc1JlYWwgPyBpdC5sYWJlbCA6IFwiXCI7XHJcblxyXG5cdFx0Ly8gRXN0YWRvc1xyXG5cdFx0Y29uc3Qgc2VsZWN0ZWQgPVxyXG5cdFx0XHRpc1JlYWwgJiYgdGhpcy52YWx1ZVtMXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWVbTF0gPT09IGl0LmtleTtcclxuXHRcdGNvbnN0IGluRm9jdXNMdmwgPSB0aGlzLmZvY3VzZWQgJiYgdGhpcy5mb2N1c0xldmVsID09PSBMO1xyXG5cdFx0Y29uc3QgZm9jdXNNYXRjaCA9IGlzUmVhbCAmJiBpbkZvY3VzTHZsICYmIHRoaXMuZm9jdXNQYXRoW0xdID09PSBpdC5rZXk7XHJcblx0XHRjb25zdCBpc0hvdmVyID1cclxuXHRcdFx0dGhpcy5lbmFibGVIb3ZlciAmJlxyXG5cdFx0XHRpc1JlYWwgJiZcclxuXHRcdFx0dGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJlxyXG5cdFx0XHR0aGlzLmhvdmVyLmluZGV4ID09PSBpO1xyXG5cclxuXHRcdC8vIPCflLggTlVFVk86IMK/ZXN0YSBmaWxhIGVzIGxhIMO6bHRpbWEgaG9qYSBzZWxlY2Npb25hZGE/XHJcblx0XHRsZXQgaXNMYXN0TGVhZiA9IGZhbHNlO1xyXG5cdFx0aWYgKGlzUmVhbCAmJiBraW5kID09PSBcImxpc3RcIiAmJiB0aGlzLmxhc3RMZWFmLmtleSAhPSBudWxsKSB7XHJcblx0XHRcdC8vIExhIGhvamEgdmlzaWJsZSBjb3JyZXNwb25kZSBzaSBlbCBwYWRyZSBkZSBlc3RhIGxpc3RhIGNvaW5jaWRlIGNvbiBwYXJlbnRQYXRoIGd1YXJkYWRvXHJcblx0XHRcdC8vIEVsIHBhZHJlIGFjdHVhbCBlcyB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpIGN1YW5kbyBsYSBsaXN0YSBlc3TDoSBkZXNwbGVnYWRhIHBvciB2YWx1ZS9mb2N1c1xyXG5cdFx0XHRjb25zdCBwYXJlbnROb3cgPSB0aGlzLmdldEFjdGl2ZVBhdGgoKS5zbGljZSgwLCBMKTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMuX3BhdGhzRXF1YWwocGFyZW50Tm93LCB0aGlzLmxhc3RMZWFmLnBhcmVudFBhdGgpICYmXHJcblx0XHRcdFx0aXQua2V5ID09PSB0aGlzLmxhc3RMZWFmLmtleVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRpc0xhc3RMZWFmID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEVzdGlsb3MgYmFzZVxyXG5cdFx0cy5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuXHRcdHMuY29sb3IgPSBjYy50ZXh0O1xyXG5cdFx0cy5ib3JkZXIgPSBcIjFweCBzb2xpZCBcIiArIGNjLmJvcmRlcjtcclxuXHRcdHMudGV4dEFsaWduID0ga2luZCA9PT0gXCJtYXBcIiA/IFwiY2VudGVyXCIgOiBcImxlZnRcIjtcclxuXHJcblx0XHQvLyBQcmlvcmlkYWQgdmlzdWFsOlxyXG5cdFx0Ly8gMSkgc2VsZWNjaW9uYWRvIChhenVsKVxyXG5cdFx0Ly8gMikgw7psdGltYSBob2phIChudWV2byBjb2xvcilcclxuXHRcdC8vIDMpIGZvY29cclxuXHRcdC8vIDQpIGhvdmVyXHJcblx0XHRpZiAoc2VsZWN0ZWQpIHtcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuXHRcdH0gZWxzZSBpZiAoaXNMYXN0TGVhZikge1xyXG5cdFx0XHQvLyBjb2xvciBkaXN0aW50aXZvIHBhcmEgXCLDumx0aW1hIGhvamFcIiAoYW1hcmlsbG8gc3VhdmUpXHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IFwicmdiYSgyNTUsIDIwMCwgMCwgMC4yNSlcIjtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHQ7XHJcblx0XHR9IGVsc2UgaWYgKGZvY3VzTWF0Y2gpIHtcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuXHRcdH0gZWxzZSBpZiAoaXNIb3Zlcikge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmlsYXMgZGUgcGFkZGluZyBpbnZpc2libGVzIGVuIGhvamFcclxuXHRcdHMub3BhY2l0eSA9IGlzUmVhbCA/IFwiMVwiIDogXCIwXCI7XHJcblx0fVxyXG5cclxuXHRfcGF0aHNFcXVhbChhLCBiKSB7XHJcblx0XHRpZiAoIWEgfHwgIWIgfHwgYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gQ2ljbG8gZGUgdmlkYSA9PT09PT09XHJcblx0clNpemUoKSB7XHJcblx0XHR0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcblx0XHR0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcblx0XHR0aGlzLmxheW91dExldmVscygpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlKCkge1xyXG5cdFx0dGhpcy5idWlsZExldmVscygpO1xyXG5cdFx0dGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gSW50ZXJhY2Npw7NuID09PT09PT1cclxuXHRfdG9Mb2NhbChlKSB7XHJcblx0XHRjb25zdCBteCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cdFx0Y29uc3QgbXkgPSBlLmNsaWVudFkgLSB0aGlzLnpvbmUueTtcclxuXHRcdHJldHVybiB7IHg6IG14LCB5OiBteSB9O1xyXG5cdH1cclxuXHJcblx0X2hpdFRlc3QobXgsIG15KSB7XHJcblx0XHRmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcblx0XHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0XHRjb25zdCB6ID0gbHZsLnpvbmU7IC8vIHggeSB3IHlhIGluY2x1eWVuIGNvbnRlbnRYXHJcblxyXG5cdFx0XHRpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAobHZsLnR5cGUgPT09IFwibWFwXCIpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXR6ID0gbHZsLml0ZW1zW2ldLnpvbmU7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdG14ID49IGl0ei54ICYmXHJcblx0XHRcdFx0XHRcdG15ID49IGl0ei55ICYmXHJcblx0XHRcdFx0XHRcdG14IDw9IGl0ei54ICsgaXR6LncgJiZcclxuXHRcdFx0XHRcdFx0bXkgPD0gaXR6LnkgKyBpdHouaFxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IEwsIGksIHJlYWw6IHRydWUgfTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29uc3QgblJvd3MgPSBNYXRoLm1heChsdmwuaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNSZWFsID0gaSA8IGx2bC5pdGVtcy5sZW5ndGg7XHJcblx0XHRcdFx0XHRjb25zdCBpdHogPSBpc1JlYWxcclxuXHRcdFx0XHRcdFx0PyBsdmwuaXRlbXNbaV0uem9uZVxyXG5cdFx0XHRcdFx0XHQ6IHtcclxuXHRcdFx0XHRcdFx0XHRcdHg6IHoueCxcclxuXHRcdFx0XHRcdFx0XHRcdHk6IHoueSArIGkgKiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHRcdFx0dzogei53LFxyXG5cdFx0XHRcdFx0XHRcdFx0aDogdGhpcy5saW5lSCxcclxuXHRcdFx0XHRcdFx0ICB9O1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRteCA+PSBpdHoueCAmJlxyXG5cdFx0XHRcdFx0XHRteSA+PSBpdHoueSAmJlxyXG5cdFx0XHRcdFx0XHRteCA8PSBpdHoueCArIGl0ei53ICYmXHJcblx0XHRcdFx0XHRcdG15IDw9IGl0ei55ICsgaXR6LmhcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4geyBMLCBpLCByZWFsOiBpc1JlYWwgfTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB7IEw6IC0xLCBpOiAtMSwgcmVhbDogZmFsc2UgfTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUV2ZW50KGUpIHtcclxuXHRcdGlmICh0aGlzLmxvY2spIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRpZiAoZS50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XHJcblx0XHRcdC8vIFNpIGVsIGhvdmVyIGVzdMOhIGRlc2FjdGl2YWRvLCBubyBoYXkgdHJhYmFqbyBxdWUgaGFjZXIuXHJcblx0XHRcdGlmICghdGhpcy5lbmFibGVIb3ZlcikgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0Y29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG5cdFx0XHRjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcblxyXG5cdFx0XHQvLyBudWV2byBob3ZlciBjYWxjdWxhZG9cclxuXHRcdFx0Y29uc3QgbmV3SG92ZXIgPVxyXG5cdFx0XHRcdGh0LkwgIT09IC0xICYmIGh0LnJlYWxcclxuXHRcdFx0XHRcdD8geyBsZXZlbDogaHQuTCwgaW5kZXg6IGh0LmkgfVxyXG5cdFx0XHRcdFx0OiB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblx0XHRcdC8vIHNvbG8gcmVwaW50YXIgc2kgY2FtYmlhIHJlYWxtZW50ZSBlbCBob3ZlclxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0bmV3SG92ZXIubGV2ZWwgPT09IHRoaXMuaG92ZXIubGV2ZWwgJiZcclxuXHRcdFx0XHRuZXdIb3Zlci5pbmRleCA9PT0gdGhpcy5ob3Zlci5pbmRleFxyXG5cdFx0XHQpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR0aGlzLmhvdmVyID0gbmV3SG92ZXI7XHJcblx0XHRcdHRoaXMudXBkYXRlKCk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuXHRcdFx0Y29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG5cdFx0XHRjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcblx0XHRcdGlmIChodC5MICE9PSAtMSAmJiBodC5yZWFsKSB7XHJcblx0XHRcdFx0dGhpcy5fc2VsZWN0QXQoaHQuTCwgaHQuaSk7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7IC8vIHNvbG8gdHJ1ZSBzaSByZWFsbWVudGUgc2Ugc2VsZWNjaW9uw7MgYWxnb1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gU2VsZWNjacOzbiArIGF1dG9jb21wbGV0YWRvICsgbm90aWZpY2FjacOzblxyXG5cdF9zZWxlY3RBdChMLCBpKSB7XHJcblx0XHRjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuXHRcdGNvbnN0IGNob3NlbiA9IGx2bC5pdGVtc1tpXTtcclxuXHRcdGlmICghY2hvc2VuIHx8ICFjaG9zZW4ua2V5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgYmFzZSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgTCk7XHJcblx0XHRiYXNlW0xdID0gY2hvc2VuLmtleTtcclxuXHJcblx0XHRjb25zdCBuZXdQYXRoID0gdGhpcy5hdXRvQ29tcGxldGVUb0xlYWYoYmFzZSk7XHJcblxyXG5cdFx0Ly8g8J+UuCBTaSBlbCB1c3VhcmlvIHNlbGVjY2lvbmEgZXhwbMOtY2l0YW1lbnRlIGVuIGVsIG5pdmVsIGhvamEsIHJlY29yZGFybG9cclxuXHRcdGlmIChsdmwudHlwZSA9PT0gXCJsaXN0XCIpIHtcclxuXHRcdFx0dGhpcy5sYXN0TGVhZi5wYXJlbnRQYXRoID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTsgLy8gcGFkcmUgZGUgbGEgbGlzdGEgYWN0dWFsXHJcblx0XHRcdHRoaXMubGFzdExlYWYua2V5ID0gY2hvc2VuLmtleTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHJcblx0XHQvLyBzaSBlc3TDoSByZWZlcmVuY2lhZG8sIHByb3BhZ2EgYSBvYmpldG8gZXh0ZXJub1xyXG5cdFx0dGhpcy5zZW5kKG5ld1BhdGgpO1xyXG5cdFx0dGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IEFQSSBww7pibGljYSA9PT09PT09XHJcblx0c2V0VmFsdWUocGF0aCkge1xyXG5cdFx0dGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoLnNsaWNlKCkgOiBbXTtcclxuXHRcdC8vIFNpIGRlc2RlIGFmdWVyYSBub3Mgc2V0ZWFuIHVuYSBob2phIHbDoWxpZGEsIHRhbWJpw6luIGxhIHJlY29yZGFtb3NcclxuXHRcdHRoaXMuX21heWJlVXBkYXRlTGFzdExlYWZGcm9tVmFsdWUoKTtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRzZXRUcmVlKHRyZWUpIHtcclxuXHRcdHRoaXMudHJlZSA9IHRyZWUgfHwge307XHJcblx0XHR0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0c2V0Rm9jdXMoeyBmb2N1c2VkLCBmb2N1c1BhdGgsIGZvY3VzTGV2ZWwgfSkge1xyXG5cdFx0aWYgKHR5cGVvZiBmb2N1c2VkID09PSBcImJvb2xlYW5cIikgdGhpcy5mb2N1c2VkID0gZm9jdXNlZDtcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KGZvY3VzUGF0aCkpIHRoaXMuZm9jdXNQYXRoID0gZm9jdXNQYXRoLnNsaWNlKCk7XHJcblx0XHRpZiAodHlwZW9mIGZvY3VzTGV2ZWwgPT09IFwibnVtYmVyXCIpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0X21heWJlVXBkYXRlTGFzdExlYWZGcm9tVmFsdWUoKSB7XHJcblx0XHQvLyBTaSB2YWx1ZSBhcHVudGEgYSBwYWRyZStob2phICjigKYsW2xlYWZdKSB5IGVzIHbDoWxpZGEsIHJlY29yZGFyIGVzYSBob2phXHJcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgfHwgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy52YWx1ZS5sZW5ndGggLSAxKTtcclxuXHRcdGNvbnN0IGxlYWYgPSB0aGlzLnZhbHVlW3RoaXMudmFsdWUubGVuZ3RoIC0gMV07XHJcblx0XHRjb25zdCBpbmZvID0gdGhpcy5nZXROb2RlQXRQYXRoKHBhcmVudCk7XHJcblx0XHRpZiAoaW5mbyAmJiBBcnJheS5pc0FycmF5KGluZm8ubm9kZSkgJiYgaW5mby5ub2RlLmluY2x1ZGVzKGxlYWYpKSB7XHJcblx0XHRcdHRoaXMubGFzdExlYWYgPSB7IHBhcmVudFBhdGg6IHBhcmVudCwga2V5OiBsZWFmIH07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFB1YmxpY2FjacOzbiBkZSBhbHR1cmEgPT09PT09PVxyXG5cdF9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCkge1xyXG5cdFx0bGV0IGMgPSAwO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxldmVscy5sZW5ndGg7IGkrKylcclxuXHRcdFx0aWYgKHRoaXMubGV2ZWxzW2ldLnR5cGUgPT09IFwibWFwXCIpIGMrKztcclxuXHRcdHJldHVybiBjO1xyXG5cdH1cclxuXHJcblx0X2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkge1xyXG5cdFx0Y29uc3QgbGFzdCA9IHRoaXMubGV2ZWxzW3RoaXMubGV2ZWxzLmxlbmd0aCAtIDFdO1xyXG5cdFx0cmV0dXJuIGxhc3QgJiYgbGFzdC50eXBlID09PSBcImxpc3RcIiA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuXHR9XHJcblxyXG5cdF9wdWJsaXNoSGVpZ2h0KCkge1xyXG5cdFx0Y29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcblx0XHRjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuXHRcdGNvbnN0IGxlYWZIID0gbGVhZkxlbiAqIHRoaXMubGluZUg7XHJcblx0XHRjb25zdCBpbnRlckggPSBpbnRlciAqICh0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcCk7XHJcblx0XHRjb25zdCB0b3RhbEggPSBpbnRlciA/IGludGVySCArIHRoaXMubGV2ZWxHYXAgKyBsZWFmSCA6IGxlYWZIO1xyXG5cclxuXHRcdC8vIE5vcm1hbGl6YW1vcyBhIHB4IGVudGVyb3MgcGFyYSBldml0YXIgaml0dGVyIHBvciByZWRvbmRlb1xyXG5cdFx0Y29uc3QgbmV3SCA9IE1hdGguZmxvb3IodG90YWxIKTtcclxuXHJcblx0XHQvLyBBY3R1YWxpemFtb3MgbcOpdHJpY2FzIGxvY2FsZXMgc2llbXByZVxyXG5cdFx0dGhpcy5oID0gbmV3SDtcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcblx0XHR0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuXHRcdC8vIFNvbG8gYXZpc2Ftb3MgYWwgR1VJIHNpIGxhIGFsdHVyYSBjYW1iacOzXHJcblx0XHRpZiAobmV3SCAhPT0gdGhpcy5fbGFzdFB1Ymxpc2hlZEgpIHtcclxuXHRcdFx0dGhpcy5fbGFzdFB1Ymxpc2hlZEggPSBuZXdIO1xyXG5cdFx0XHRSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuXHRcdFx0aWYgKHRoaXMuaXNVSSAmJiB0aGlzLm1haW4pIHRoaXMubWFpbi5jYWxjKCk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBCb29sIH0gZnJvbSAnLi4vcHJvdG8vQm9vbC5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL3Byb3RvL0J1dHRvbi5qcyc7XHJcbmltcG9ydCB7IENpcmN1bGFyIH0gZnJvbSAnLi4vcHJvdG8vQ2lyY3VsYXIuanMnO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL3Byb3RvL0NvbG9yLmpzJztcclxuaW1wb3J0IHsgRnBzIH0gZnJvbSAnLi4vcHJvdG8vRnBzLmpzJztcclxuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9wcm90by9HcmFwaC5qcyc7XHJcbmltcG9ydCB7IEdyb3VwICB9IGZyb20gJy4uL3Byb3RvL0dyb3VwLmpzJztcclxuaW1wb3J0IHsgSm95c3RpY2sgfSBmcm9tICcuLi9wcm90by9Kb3lzdGljay5qcyc7XHJcbmltcG9ydCB7IEtub2IgfSBmcm9tICcuLi9wcm90by9Lbm9iLmpzJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uL3Byb3RvL0xpc3QuanMnO1xyXG5pbXBvcnQgeyBOdW1lcmljIH0gZnJvbSAnLi4vcHJvdG8vTnVtZXJpYy5qcyc7XHJcbmltcG9ydCB7IFNsaWRlIH0gZnJvbSAnLi4vcHJvdG8vU2xpZGUuanMnO1xyXG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9wcm90by9UZXh0SW5wdXQuanMnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL3Byb3RvL1RpdGxlLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0LmpzJztcclxuaW1wb3J0IHsgQml0bWFwIH0gZnJvbSAnLi4vcHJvdG8vQml0bWFwLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICcuLi9wcm90by9TZWxlY3Rvci5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi4vcHJvdG8vRW1wdHkuanMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vcHJvdG8vSXRlbS5qcyc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi9wcm90by9HcmlkLmpzJztcclxuaW1wb3J0IHsgUGFkMkQgfSBmcm9tICcuLi9wcm90by9QYWQyRC5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFRyZWVMaXN0IH0gZnJvbSAnLi4vcHJvdG8vVHJlZUxpc3QuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndHJlZWxpc3QnOiBuID0gbmV3IFRyZWVMaXN0KG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNZLE1BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsTUFBTSxDQUFDLEdBQUc7QUFDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7QUFDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7QUFDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0FBQ1YsRUFBRSxJQUFJLEVBQUUs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USxDQUFDO0FBQ3pDO0FBQ0E7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtBQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDMUIsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtBQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7QUFDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMs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QUs7QUFDTDtBQUNBLElBQUksR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUMzQjtBQUNBLFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0FBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0FBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtBQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkIsU0FBUztBQUNULFFBQVEsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDM0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUMsYUFBYTtBQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQixZQUFZLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDekcsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFlBQVksRUFBRSxXQUFXLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRztBQUM5RDtBQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakQ7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRDtBQUNBLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0c7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sRUFBRSxXQUFXLEtBQUssR0FBRztBQUNoQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBRztBQUNwQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUNwSixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JIO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3SSxR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QyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekg7QUFDQTtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0FBQ0E7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0FBQ0E7QUFDQTtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdGO0FBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMvQjtBQUNBLFNBQVMsTUFBTTtBQUNmO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzVGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0FBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckksWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQy9GLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BJO0FBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMvQixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxhQUFhLEVBQUUsWUFBWTtBQUMvQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0FBQ2hKLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN2QyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0IsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3hCLFFBQVcsSUFBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0FBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN2QjtBQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7QUFDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsWUFBWSxFQUFFLEdBQUc7QUFDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7QUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FB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QUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDbkM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUNqRSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsWUFBWSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztBQUM3RSxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUM7QUFDaEY7QUFDQTtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUM1RSxNQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUM1RSxLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEI7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDekQsSUFBSSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTztBQUMvQixRQUFRLDRGQUE0RjtBQUNwRyxRQUFRLGFBQWEsQ0FBQztBQUN0QjtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRztBQUN6QixNQUFNLEtBQUs7QUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxpQ0FBaUM7QUFDbkUsS0FBSyxDQUFDO0FBQ047QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDaEM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNqQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLElBQUksSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0M7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDO0FBQzFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7QUFDckIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ3RDO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUM7QUFDakUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDO0FBQ3BFLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQztBQUN0RSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3RCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzdFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0FBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsT0FBTztBQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN6QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxHQUFHO0FBQ1QsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNyQztBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7QUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQzVEO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7QUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDaEMsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDekMsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDMUI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEQsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDOUIsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFO0FBQ1YsTUFBTSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUk7QUFDMUIsVUFBVSxJQUFJLENBQUMsTUFBTTtBQUNyQixVQUFVLElBQUksQ0FBQyxJQUFJO0FBQ25CLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO0FBQ3pCLFVB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QUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFHO0FBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0FBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUss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QUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDckQsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUU7QUFDcEUsU0FBUztBQUNUO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUN4RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxD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QUFDdkM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUNyQixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7QUFDbEQ7QUFDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztBQUM1RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7QUFDQTtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0FBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztBQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFJO0FBQ3REO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7QUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztBQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUU7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDbkM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUk7QUFDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwQztBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU07QUFDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtBQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtBQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRTtBQUN4QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQztBQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUN0QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUNsSTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUN0QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtBQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0FBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RDtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0FBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RDtBQUNBLFlBQVksTUFBTTtBQUNsQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0FBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7QUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckMsWUFBWSxJQUFJLENBQUMsS0FB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Q0FBQztBQUNuQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7QUFDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztBQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7QUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMs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LElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ25EO0FBQ0EsT0FBTyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsT0FBTztBQUNQO0FBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakM7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTCxJQUFJO0FBQ0osR0FBRztBQUNIO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLENBQUMsU0FBUyxDQUFDLEdBQUc7QUFDZDtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDakUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN0QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2xELFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9DO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsR0FBRztBQUNUO0FBQ0EsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDZjtBQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQ3RDO0FBQ0EsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0FBQ0EsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEI7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM5QztBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCO0FBQ0EsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztBQUN0QztBQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDZjtBQUNBLEtBQUssSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hFO0FBQ0EsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDeEI7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3hDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDN0U7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkQsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckQ7QUFDQSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTztBQUNwQjtBQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RCxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3ZFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7QUFDM0UsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QztBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2Y7QUFDQSxFQUFFLElBQUksQ0FBQyxZQUFZLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RCxhQUFhLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDN0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNwQjtBQUNBLEtBQUssSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxFQUFFO0FBQzFDO0FBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7QUFDNUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU07QUFDMUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUM5QztBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdkIsTUFBTTtBQUNOLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNoQjtBQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN6QixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxXQUFXLENBQUMsR0FBRztBQUNoQjtBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7QUFDakIsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFLO0FBQ2Y7QUFDQSxLQUFjLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU87QUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDbkMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7QUFDQSxLQUFLLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMxQztBQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7QUFDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztBQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUM7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0FBQ0E7QUFDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtBQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7QUFDNUQ7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0FBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtBQUNwQztBQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0FBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQztBQUMvQjtBQUNBLElB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QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQTtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM5QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztBQUN0RSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QztBQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0IsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkM7QUFDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkQ7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFN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QUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ25DO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztBQUNBLFFBQVEsSUFBSSxDQUFDLElB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QUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0FBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQztBQUM5QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFJO0FBQzlDLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckMsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQztBQUNoRixpQkFBaUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUMzRCxTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFdBQVcsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQ0FBaUM7QUFDcEUsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUc7QUFDOUIsUUFBUSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUk7QUFDckMsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2xCLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQW9CO0FBQ2pHLGlCQUFpQixDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFPO0FBQ3RFLFlBQVksQ0FBQyxHQUFFO0FBQ2YsU0FBUztBQUNULFFBQVEsT0FBTyxDQUFDO0FBQ2hCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEM7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25GLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEgsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEc7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFT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Q0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyw0Q0FBNEMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDO0FBQzVILFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyx3REFBd0QsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUM1SztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSTtBQUMxRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw2QkFBNkIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLEVBQUM7QUFDMUk7QUFDQSxRQUFnQixJQUFJLENBQUMsRUFBRTtBQUN2QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQU87QUFDaEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFFO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFB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SSxFQUFFLEVBQUUsQ0FBQztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFJO0FBQzVEO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFB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QUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNoRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7QUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7QUFDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7QUFDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDM0QsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtBQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0FBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7QUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7QUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsU0FBUyxNQUFNO0FBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFB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QUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7QUFDekQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDakYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUs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QUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0IsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztBQUM5QjtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDckQ7QUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7QUFDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN4RCxhQUFhLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztBQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hELGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQztBQUNBLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEI7QUFDQSxTQUFTO0FBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6RCxRQUFRLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUM1QyxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMxQztBQUNBO0FBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFlBQVksS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUM1QyxZQUFZLElBQUksR0FBRyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssS0FBSyxDQUFDO0FBQ3JELFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckQsWUFBWSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUMxQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUc7QUFDM0M7QUFDQSxZQUFZLENBQUMsR0FBRyxVQUFVLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQzFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUMvQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDL0MsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ2hELFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNoRCxZQUFZLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUM5RDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1RDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDckU7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDakMsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JGO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7QUFDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztBQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3pEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUNyQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0FBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7QUFDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdB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SUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3hELFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3hELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0I7QUFDQSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcs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QyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDM0M7QUFDQTtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0FBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLEdBQUc7QUFDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7QUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEM7QUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsQixHQUFHO0FBQ0g7O0FDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFB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QUFDVDtBQUNBLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7QUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0FBQy9CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztBQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztBQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7QUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFH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QUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7QUFDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUss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SUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztBQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDL0xBO0FBRUE7QUFDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtBQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztBQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUs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QU0sQ0FBQyxNQUFNLENBQUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztBQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtBQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxX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USxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzlGO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0FBQ0E7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0FBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFDMUUsYUFBYSxPQUFPLEtBQUssQ0FBQztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQzFDO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMvQixZQUFZLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDaEMsWUFBWSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRTtBQUMxRCxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ3pFO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSTtBQUMvQjtBQUNBLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNsQixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDbEI7QUFDQSxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRTtBQUN2RCxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRTtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDakM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLFFBQVEsSUFBSTtBQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0FBQzNELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0FBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0FBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0FBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzlEO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7QUFDaEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUU7QUFDcEU7QUFDQSxZQUFZLE1BQU07QUFDbEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUMxQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkc7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNwSDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDMUI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyUkE7QUFJQTtBQUNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN0QixFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUM7QUFDaEM7QUFDQSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNYLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQztBQUM3QztBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzNCLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RCxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDN0IsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pFLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekU7QUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDckMsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRO0FBQ2YsR0FBRyxPQUFPLENBQUMsQ0FBQyxRQUFRLEtBQUssVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDNUQ7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNuQjtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN4QztBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEQ7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRztBQUN0QixHQUFHLEtBQUs7QUFDUixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHlDQUF5QztBQUM3RCxHQUFHLENBQUM7QUFDSixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNkO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0FBQ3ZDLEVBQUU7QUFDRjtBQUNBO0FBQ0EsQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFDcEIsRUFBRSxPQUFPLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xFLEVBQUU7QUFDRixDQUFDLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRTtBQUNyQixFQUFFLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixFQUFFO0FBQ0Y7QUFDQTtBQUNBLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRTtBQUNyQixFQUFFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDdkIsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4QyxHQUFHLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCxLQUFLLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsSUFBSSxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNyQztBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuRCxJQUFJLE1BQU07QUFDVixJQUFJLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwQyxJQUFJO0FBQ0osR0FBRztBQUNILEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RDLEVBQUU7QUFDRjtBQUNBO0FBQ0EsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7QUFDOUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QyxFQUFFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNoQyxFQUFFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMvQixHQUFHLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNO0FBQzNCLEdBQUcsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQixHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLEVBQUU7QUFDRjtBQUNBO0FBQ0EsQ0FBQyxhQUFhLEdBQUc7QUFDakIsRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BELEVBQUU7QUFDRjtBQUNBO0FBQ0EsQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDbEMsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlDLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEQsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWixFQUFFLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNyQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsR0FBRztBQUNILEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDWCxFQUFFO0FBQ0Y7QUFDQTtBQUNBLENBQUMsV0FBVyxHQUFHO0FBQ2YsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDekIsRUFBRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDMUM7QUFDQSxFQUFFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDdkIsRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxFQUFFLE9BQU8sSUFBSSxFQUFFO0FBQ2YsR0FBRyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDN0I7QUFDQSxJQUFJLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNO0FBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDckIsS0FBSyxJQUFJLEVBQUUsS0FBSztBQUNoQixLQUFLLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQzdCLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDWixNQUFNLEtBQUssRUFBRSxDQUFDO0FBQ2QsTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RDLE1BQU0sQ0FBQyxDQUFDO0FBQ1IsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUM5QyxLQUFLLENBQUMsQ0FBQztBQUNQO0FBQ0EsSUFBSSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNO0FBQ3pELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6QixJQUFJLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JDO0FBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxNQUFNO0FBQ3ZDLEtBQUssR0FBRyxFQUFFLEtBQUs7QUFDZixLQUFLLEtBQUs7QUFDVixLQUFLLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDckMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNSLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDckIsS0FBSyxJQUFJLEVBQUUsTUFBTTtBQUNqQixLQUFLLEtBQUs7QUFDVixLQUFLLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7QUFDekMsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE1BQU07QUFDVixJQUFJLE1BQU07QUFDVixJQUFJLE1BQU07QUFDVixJQUFJO0FBQ0osR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNYLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBLENBQUMsWUFBWSxHQUFHO0FBQ2hCLEVBQUUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDeEMsRUFBRSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDckIsRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzlDO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWjtBQUNBO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUNsRCxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEUsR0FBRyxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzRCxHQUFHO0FBQ0gsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM1QztBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DLEdBQUcsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7QUFDM0IsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEMsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEQsSUFBSSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDckIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0MsS0FBSyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pELEtBQUssTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUMsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3QyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDaEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNwQyxJQUFJLE1BQU07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R0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsSUFBSSxJQUFJLENBQUMs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QUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNO0FBQ3pDLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDbEU7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ2hELE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQ2xDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEU7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN4RTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDNUIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBQ2hELEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDeEMsTUFBTSxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUN2QixLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVU7QUFDbkIsTUFBTSxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDbkUsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pFO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDcEI7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDekM7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3pCLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUN0QixNQUFNLElBQUksRUFBRSxhQUFhO0FBQ3pCLE1BQU0sT0FBTyxFQUFFLENBQUM7QUFDaEIsTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUNoQixNQUFNLEtBQUssRUFBRSxDQUFDO0FBQ2QsTUFBTSxHQUFHLEVBQUUsSUFBSTtBQUNmLE1BQU0sT0FBTyxFQUFFLEdBQUc7QUFDbEIsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGdCQUFnQixHQUFHO0FBQ3JCLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUN0QixNQUFNLElBQUksRUFBRSxhQUFhO0FBQ3pCLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNqQixNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDakIsTUFBTSxLQUFLLEVBQUUsQ0FBQztBQUNkLE1BQU0sR0FBRyxFQUFFLElBQUk7QUFDZixNQUFNLE9BQU8sRUFBRSxHQUFHO0FBQ2xCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUN0QixNQUFNLElBQUksRUFBRSxXQUFXO0FBQ3ZCLE1BQU0sT0FBTyxFQUFFLENBQUM7QUFDaEIsTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUNoQixNQUFNLEtBQUssRUFBRSxDQUFDO0FBQ2QsTUFBTSxHQUFHLEVBQUUsSUFBSTtBQUNmLE1BQU0sT0FBTyxFQUFFLEdBQUc7QUFDbEIsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2YsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0QyxJQUFJLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUM5QyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoQjtBQUNBLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxhQUFhLEdBQUc7QUFDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzNDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVTtBQUN4QyxRQUFRLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztBQUNuRCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVU7QUFDbkMsUUFBUSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFDbkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO0FBQzdFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUM1QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUM1QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFDYjtBQUNBLEVBQUUsVUFBVSxHQUFHO0FBQ2YsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxlQUFlO0FBQzFDLE1BQU0sOEJBQThCO0FBQ3BDLE1BQU0sUUFBUTtBQUNkLEtBQUssQ0FBQztBQUNOLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0U7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNkLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxPQUFPO0FBQ3JDO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5RCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdEMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUUsTUFBTSxHQUFHO0FBQ1gsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEdBQUc7QUFDWixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUU7QUFDNUIsSUFBSSxJQUFJLElBQUk7QUFDWixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNwQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNsRSxPQUFPLENBQUM7QUFDUjtBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQ3BCLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzVDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzdDLE9BQU8sQ0FBQztBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRTtBQUNmO0FBQ0EsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0FBQ2YsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNyQixNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ3JDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM3QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDVixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUM3RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFO0FBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQzdELEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNkLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQzlCLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDVixJQUFJLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztBQUMzQixJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDekI7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDdkIsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBLE1BQU0sUUFBUSxDQUFDO0FBQ2YsUUFBUSxLQUFLLEtBQUs7QUFDbEIsVUFBVSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekIsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUNuRCxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0FBQ3ZELFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDNUMsVUFBVSxNQUFNO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLEtBQUssWUFBWTtBQUN6QixVQUFVLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDcEMsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUNuRCxVQUFVLE1BQU07QUFDaEIsUUFBUSxLQUFLLFlBQVk7QUFDekIsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUNuRCxVQUFVLE1BQU07QUFDaEI7QUFDQTtBQUNBLFFBQVEsS0FBSyxZQUFZO0FBQ3pCLFVBQVUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsQyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO0FBQzNELFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDaEQsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsT0FBTztBQUNQO0FBQ0EsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxVQUFVLENBQUM7QUFDdEIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFdBQVcsR0FBRztBQUNoQixJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUMxQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDdEI7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekIsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3pCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ25CLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDZCxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUM1QztBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDekI7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNsQjtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRTtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsUUFBUSxDQUFDO0FBQzFFLFNBQVMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsR0FBRyxTQUFTLENBQUM7QUFDL0M7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0FBQ0EsSUFBSSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDdkIsSUFBSSxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQy9ELElBQUksSUFBSSxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNqRTtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDekMsTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDekIsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUMvQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTztBQUN0QjtBQUNBLElBQUksUUFBUSxJQUFJO0FBQ2hCLE1BQU0sS0FBSyxTQUFTO0FBQ3BCLFFBQVEsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3ZFO0FBQ0EsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1RTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRTtBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVELFFBQVEsSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRO0FBQzdELFVBQVUsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQ3pCLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLFFBQVE7QUFDbkIsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDM0IsUUFBUSxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbkUsUUFBUSxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUU7QUFDbEMsVUFBVSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNuRCxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNO0FBQy9DLGNBQWMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDaEMsY0FBYyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsVUFBVSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdEIsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLFVBQVUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU07QUFDZCxNQUFNLEtBQUssUUFBUTtBQUNuQixRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNuRSxRQUFRLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNuRSxRQUFRLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM5RTtBQUNBLFFBQVEsTUFBTTtBQUNkLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbkMsSUFBSSxJQUFJLFdBQVcsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN4QyxJQUFJLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzFDO0FBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRTtBQUNyQixJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QztBQUNBLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUMvQixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN6QixNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBRTFCLE1BQU0sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDOUIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNyQixNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzFCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUU7QUFDYixJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDNUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQ2YsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTztBQUM3QjtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQztBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDeEI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxHQUFHLEdBQUc7QUFDUjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDdEIsSUFBSSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdEI7QUFDQSxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2QjtBQUNBLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDOUMsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3pDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDMUUsV0FBVztBQUNYLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN6QjtBQUNBLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDaEQsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0I7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxPQUFPO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDaEI7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ3pCO0FBQ0EsSUFBSSxPQUFPLENBQUMsQ0FBQztBQUNiLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUU7QUFDWixJQUFJLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDL0IsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNkLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsSUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNuQjtBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNsQixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTTtBQUMzQixNQUFNLElBQUksQ0FBQztBQUNYO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ2hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDckIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNsQixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLEdBQUc7QUFDWCxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRztBQUNaLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxTQUFTLEdBQUc7QUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU87QUFDakM7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU87QUFDakM7QUFDQSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ3RCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ2hCLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7QUFDdEMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVE7QUFDekIsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RFLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDZCxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZEO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtBQUNYLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEM7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0FBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEdBQUc7QUFDVCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsR0FBRztBQUNkLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUks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 diff --git a/examples/uil_treelist.html b/examples/uil_treelist.html index 39e3c22..ec46c5e 100644 --- a/examples/uil_treelist.html +++ b/examples/uil_treelist.html @@ -18,53 +18,90 @@ diff --git a/run_build_dev.bat b/run_build_dev.bat new file mode 100644 index 0000000..7c95c2d --- /dev/null +++ b/run_build_dev.bat @@ -0,0 +1 @@ +npm run build-dev \ No newline at end of file diff --git a/src/proto/TreeList.js b/src/proto/TreeList.js index 6f57853..69e6230 100644 --- a/src/proto/TreeList.js +++ b/src/proto/TreeList.js @@ -1,449 +1,536 @@ // proto/TreeList.js -import { Proto } from '../core/Proto.js'; -import { Tools } from '../core/Tools.js'; -import { Roots } from '../core/Roots.js'; +import { Proto } from "../core/Proto.js"; +import { Tools } from "../core/Tools.js"; +import { Roots } from "../core/Roots.js"; export class TreeList extends Proto { - constructor(o = {}) { - // API pública esperada: - // o.tree (obj/array), o.value (array) - // o.focused (bool), o.focusPath (array), o.focusLevel (number) - // o.tabIndex, o.itemIndex, o.onChange (fn) - o.selectable = true; - o.name = o.name || 'TreeList'; - super(o); - - // Datos & estado - this.tree = o.tree || {}; - this.value = Array.isArray(o.value) ? o.value.slice() : []; - this.focused = !!o.focused; - this.focusPath = Array.isArray(o.focusPath) ? o.focusPath.slice() : []; - this.focusLevel = typeof o.focusLevel === 'number' ? o.focusLevel : -1; - - this.tabIndex = o.tabIndex ?? null; - this.itemIndex = o.itemIndex ?? null; - - // Callback - this.changeCb = typeof o.onChange === 'function' ? o.onChange : () => {}; - - // Layout interno / publicación de altura - this.lineH = this.h; // alto de UNA fila - this.levelGap = this.colors.sy || 2; // separación vertical entre niveles - this.leafMax = 0; // se calcula en rSize() - - // Modelo visual - this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] - this.itemsDom = []; // espejo DOM por nivel - this.hover = { level: -1, index: -1 }; - - // 🔸 NUEVO: recordar la última hoja seleccionada (persistente) - this.lastLeaf = { parentPath: [], key: null }; // parentPath es la ruta hasta el mapa padre - - // Contenedor interno (absoluto) - this.c[2] = this.dom('div', this.css.basic + 'left:0; top:0; width:100%; height:100%;'); - this.s[2] = this.c[2].style; - - this.init(); - - // Si el valor inicial ya apunta a una hoja válida, recordar esa hoja - this._maybeUpdateLastLeafFromValue(); - } - - // ======= Helpers de tipo ======= - static isMap(node) { return node && typeof node === 'object' && !Array.isArray(node); } - static isList(node) { return Array.isArray(node); } - - // ======= Recorrido de datos ======= - getNodeAtPath(path) { - let node = this.tree; - for (let i = 0; i < path.length; i++) { - if (TreeList.isMap(node)) { - if (!Object.prototype.hasOwnProperty.call(node, path[i])) return { node: null, depth: i }; - node = node[path[i]]; - } else if (TreeList.isList(node)) { - // Llegamos a una lista: ya no hay más claves válidas - if (i < path.length) return { node, depth: i }; - } else { - return { node: null, depth: i }; - } - } - return { node, depth: path.length }; - } - - // Autocompletar: baja por primeras claves de cada mapa hasta alcanzar una lista - autoCompleteToLeaf(basePath) { - let { node } = this.getNodeAtPath(basePath); - const path = basePath.slice(); - while (TreeList.isMap(node)) { - const keys = Object.keys(node); - if (!keys.length) break; - const k0 = keys[0]; - path.push(k0); - node = node[k0]; - } - // Si termina en lista, NO agrega un ítem final de la hoja - return path; - } - - // Ruta activa (focusPath si focused, sino value) - getActivePath() { - return this.focused ? this.focusPath : this.value; - } - - // ======= Tamaño de hoja máximo (para layout estable) ======= - computeLeafMax(node = this.tree) { - if (Array.isArray(node)) return node.length; - if (!node || typeof node !== 'object') return 0; - let m = 0; - for (const k of Object.keys(node)) { - m = Math.max(m, this.computeLeafMax(node[k])); - } - return m; - } - - // ======= Construcción de niveles (modelo lógico) ======= - buildLevels() { - this.levels.length = 0; - const activePath = this.getActivePath(); - - let node = this.tree; - let level = 0; - - while (node) { - if (TreeList.isMap(node)) { - // Nivel intermedio: claves del mapa (horizontal) - const keys = Object.keys(node); - if (!keys.length) break; - this.levels.push({ - type: 'map', - items: keys.map(k => ({ key: k, label: k, zone: { x:0,y:0,w:0,h:0 } })), - zone: { x:0,y:0,w:0,h: this.lineH } - }); - - const nextKey = activePath[level]; - if (!nextKey || !node.hasOwnProperty(nextKey)) break; - node = node[nextKey]; - } else if (TreeList.isList(node)) { - // Nivel hoja: lista vertical - const items = node.map(label => ({ key: label, label, zone: { x:0,y:0,w:0,h:0 } })); - const hList = Math.max(items.length, this.leafMax) * this.lineH; - this.levels.push({ type: 'list', items, zone: { x:0, y:0, w:0, h: hList } }); - break; - } else { - break; - } - level++; - } - } - - // ======= Layout (zonas & DOM) ======= - layoutLevels() { - const contentX = (this.sa || 100) + 8; // columna de label + padding - const padRight = 8; - const w = this.zone.w - contentX - padRight; - - let y = 0; - - // Ajustar itemsDom a cantidad de niveles - while (this.itemsDom.length < this.levels.length) this.itemsDom.push([]); - for (let L = this.levels.length; L < this.itemsDom.length; L++) { - for (const el of this.itemsDom[L]) if (el && el.parentNode) el.parentNode.removeChild(el); - } - this.itemsDom.length = this.levels.length; - - for (let L = 0; L < this.levels.length; L++) { - const lvl = this.levels[L]; - if (lvl.type === 'map') { - const n = Math.max(1, lvl.items.length); - const cellW = Math.floor(w / n); - lvl.zone = { x: contentX, y, w, h: this.lineH }; - let x = contentX; - for (let i = 0; i < lvl.items.length; i++) { - const it = lvl.items[i]; - it.zone = { x, y, w: cellW, h: this.lineH }; - const dom = this.ensureItemDom(L, i); - this.paintItemDom(dom, L, i, it, 'map'); - x += cellW; - } - // eliminar DOM sobrante si antes había más celdas - this._pruneRow(L, lvl.items.length); - y += this.lineH + this.levelGap; - } else { - // lista/hoja: reservar h según leafMax - const n = lvl.items.length; - const hList = Math.max(n, this.leafMax) * this.lineH; - lvl.zone = { x: contentX, y, w, h: hList }; - - const rows = Math.max(n, this.leafMax); - for (let i = 0; i < rows; i++) { - const isReal = i < n; - const it = isReal ? lvl.items[i] : { key: null, label: '', zone: { x:0,y:0,w:0,h:0 } }; - it.zone = { x: contentX, y: y + i * this.lineH, w, h: this.lineH }; - const dom = this.ensureItemDom(L, i); - this.paintItemDom(dom, L, i, it, 'list', isReal); - } - // eliminar DOM sobrante si antes había más filas - this._pruneRow(L, rows); - y += hList; - } - } - - // Ajustes de alto interno del contenedor visual - const totalH = y; - this.zone.h = totalH + this.margin; - this.s[0].height = this.zone.h + 'px'; - this.s[2].height = totalH + 'px'; - - // Publicar alto total al GUI (sumará u.h) - this._publishHeight(); - } - - // Elimina nodos DOM sobrantes en la fila L a partir del índice keep - _pruneRow(L, keep) { - const row = this.itemsDom[L]; - if (!row) return; - for (let j = keep; j < row.length; j++) { - const el = row[j]; - if (el && el.parentNode) el.parentNode.removeChild(el); - } - row.length = keep; - } - - ensureItemDom(L, i) { - const row = this.itemsDom[L]; - while (row.length <= i) row.push(null); - if (!row[i]) { - const div = this.dom('div', Tools.css.txt + 'position:absolute; pointer-events:none;'); - this.c[2].appendChild(div); - row[i] = div; - } - return row[i]; - } - - paintItemDom(div, L, i, it, kind, isReal = true) { - const s = div.style; - const cc = this.colors; - - // Posición - s.left = it.zone.x + 'px'; - s.top = it.zone.y + 'px'; - s.width = it.zone.w + 'px'; - s.height = (it.zone.h - 2) + 'px'; - - // Texto - div.textContent = isReal ? it.label : ''; - - // Estados - const selected = isReal && this.value[L] !== undefined && this.value[L] === it.key; - const inFocusLvl = this.focused && (this.focusLevel === L); - const focusMatch = isReal && inFocusLvl && (this.focusPath[L] === it.key); - const isHover = isReal && (this.hover.level === L && this.hover.index === i); - - // 🔸 NUEVO: ¿esta fila es la última hoja seleccionada? - let isLastLeaf = false; - if (isReal && kind === 'list' && this.lastLeaf.key != null) { - // La hoja visible corresponde si el padre de esta lista coincide con parentPath guardado - // El padre actual es this.value.slice(0, L) cuando la lista está desplegada por value/focus - const parentNow = this.getActivePath().slice(0, L); - if (this._pathsEqual(parentNow, this.lastLeaf.parentPath) && it.key === this.lastLeaf.key) { - isLastLeaf = true; - } - } - - // Estilos base - s.background = cc.back; - s.color = cc.text; - s.border = '1px solid ' + cc.border; - s.textAlign = kind === 'map' ? 'center' : 'left'; - - // Prioridad visual: - // 1) seleccionado (azul) - // 2) última hoja (nuevo color) - // 3) foco - // 4) hover - if (selected) { - s.background = cc.select; - s.color = cc.textSelect; - } else if (isLastLeaf) { - // color distintivo para "última hoja" (amarillo suave) - s.background = 'rgba(255, 200, 0, 0.25)'; - s.color = cc.text; - } else if (focusMatch) { - s.background = cc.backgroundOver; - s.color = cc.textOver; - } else if (isHover) { - s.background = cc.overoff; - s.color = cc.textOver; - } - - // Filas de padding invisibles en hoja - s.opacity = isReal ? '1' : '0'; - } - - _pathsEqual(a, b) { - if (!a || !b || a.length !== b.length) return false; - for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false; - return true; - } - - // ======= Ciclo de vida ======= - rSize() { - this.leafMax = this.computeLeafMax(this.tree); - this.buildLevels(); - this.layoutLevels(); - } - - update() { - this.buildLevels(); - this.layoutLevels(); - } - - // ======= Interacción ======= - _toLocal(e) { - const mx = e.clientX - this.zone.x; - const my = e.clientY - this.zone.y; - return { x: mx, y: my }; - } - - _hitTest(mx, my) { - for (let L = 0; L < this.levels.length; L++) { - const lvl = this.levels[L]; - const z = lvl.zone; // x y w ya incluyen contentX - if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.x + z.w) continue; - if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) continue; - - if (lvl.type === 'map') { - for (let i = 0; i < lvl.items.length; i++) { - const itz = lvl.items[i].zone; - if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { - return { L, i, real: true }; - } - } - } else { - const nRows = Math.max(lvl.items.length, this.leafMax); - for (let i = 0; i < nRows; i++) { - const isReal = i < lvl.items.length; - const itz = isReal ? lvl.items[i].zone : { x: z.x, y: z.y + i * this.lineH, w: z.w, h: this.lineH }; - if (mx >= itz.x && my >= itz.y && mx <= itz.x + itz.w && my <= itz.y + itz.h) { - return { L, i, real: isReal }; - } - } - } - } - return { L: -1, i: -1, real: false }; - } - - handleEvent(e) { - if (this.lock) return false; - - if (e.type === 'mousemove') { - const { x, y } = this._toLocal(e); - const ht = this._hitTest(x, y); - this.hover = (ht.L !== -1 && ht.real) ? { level: ht.L, index: ht.i } : { level: -1, index: -1 }; - this.update(); - return true; - } - - if (e.type === 'mousedown') { - const { x, y } = this._toLocal(e); - const ht = this._hitTest(x, y); - if (ht.L !== -1 && ht.real) { - this._selectAt(ht.L, ht.i); - return true; - } - } - - if (e.type === 'mouseup') { - return true; - } - - // (Opcional) teclado: integrar navegación en Gui y reenviar aquí si se desea - return false; - } - - // Selección + autocompletado + notificación - _selectAt(L, i) { - const lvl = this.levels[L]; - const chosen = lvl.items[i]; - if (!chosen || !chosen.key) return; - - const base = this.value.slice(0, L); - base[L] = chosen.key; - - const newPath = this.autoCompleteToLeaf(base); - - // 🔸 Si el usuario selecciona explícitamente en el nivel hoja, recordarlo - if (lvl.type === 'list') { - this.lastLeaf.parentPath = this.value.slice(0, L); // padre de la lista actual - this.lastLeaf.key = chosen.key; - } - - this.value = newPath.slice(); - this.update(); - - // si está referenciado, propaga a objeto externo - this.send(newPath); - this.changeCb(this.tabIndex, this.itemIndex, newPath); - } - - // ======= API pública ======= - setValue(path) { - this.value = Array.isArray(path) ? path.slice() : []; - // Si desde afuera nos setean una hoja válida, también la recordamos - this._maybeUpdateLastLeafFromValue(); - this.update(); - } - - setTree(tree) { - this.tree = tree || {}; - this.leafMax = this.computeLeafMax(this.tree); - this.update(); - } - - setFocus({ focused, focusPath, focusLevel }) { - if (typeof focused === 'boolean') this.focused = focused; - if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); - if (typeof focusLevel === 'number') this.focusLevel = focusLevel; - this.update(); - } - - _maybeUpdateLastLeafFromValue() { - // Si value apunta a padre+hoja (…,[leaf]) y es válida, recordar esa hoja - if (!Array.isArray(this.value) || this.value.length === 0) return; - const parent = this.value.slice(0, this.value.length - 1); - const leaf = this.value[this.value.length - 1]; - const info = this.getNodeAtPath(parent); - if (info && Array.isArray(info.node) && info.node.includes(leaf)) { - this.lastLeaf = { parentPath: parent, key: leaf }; - } - } - - // ======= Publicación de altura ======= - _countVisibleIntermediates() { - let c = 0; - for (let i = 0; i < this.levels.length; i++) if (this.levels[i].type === 'map') c++; - return c; - } - - _getCurrentLeafLength() { - const last = this.levels[this.levels.length - 1]; - return last && last.type === 'list' ? last.items.length : 0; - } - - _publishHeight() { - const inter = this._countVisibleIntermediates(); - const leafLen = Math.max(this.leafMax, this._getCurrentLeafLength()); - const leafH = leafLen * this.lineH; - const interH = inter * (this.lineH + this.levelGap); - const totalH = interH + (inter ? this.levelGap : 0) + leafH; - - // Actualiza métricas del proto (lo que suma el GUI) - this.h = totalH; - this.zone.h = this.h + this.margin; - this.s[0].height = this.h + 'px'; - - // Avisar al GUI y refrescar zonas - if (this.isUI && this.main) this.main.calc(); - Roots.needReZone = true; - } + constructor(o = {}) { + // API pública esperada: + // o.tree (obj/array), o.value (array) + // o.focused (bool), o.focusPath (array), o.focusLevel (number) + // o.tabIndex, o.itemIndex, o.onChange (fn) + o.selectable = true; + o.name = o.name || "TreeList"; + + super(o); + this.enableHover = o.enableHover !== false; + + // Datos & estado + this.tree = o.tree || {}; + this.value = Array.isArray(o.value) ? o.value.slice() : []; + this.focused = !!o.focused; + this.focusPath = Array.isArray(o.focusPath) ? o.focusPath.slice() : []; + this.focusLevel = typeof o.focusLevel === "number" ? o.focusLevel : -1; + + this.tabIndex = o.tabIndex ?? null; + this.itemIndex = o.itemIndex ?? null; + + // Callback + this.changeCb = + typeof o.onChange === "function" ? o.onChange : () => {}; + + // Layout interno / publicación de altura + this.lineH = this.h; // alto de UNA fila + this.levelGap = this.colors.sy || 2; // separación vertical entre niveles + this.leafMax = 0; // se calcula en rSize() + + // Modelo visual + this.levels = []; // [{type:'map'|'list', items:[{key,label,zone}], zone:{x,y,w,h}}...] + this.itemsDom = []; // espejo DOM por nivel + this.hover = { level: -1, index: -1 }; + + // 🔸 NUEVO: recordar la última hoja seleccionada (persistente) + this.lastLeaf = { parentPath: [], key: null }; // parentPath es la ruta hasta el mapa padre + + // Contenedor interno (absoluto) + this.c[2] = this.dom( + "div", + this.css.basic + "left:0; top:0; width:100%; height:100%;" + ); + this.s[2] = this.c[2].style; + + this.init(); + + // Si el valor inicial ya apunta a una hoja válida, recordar esa hoja + this._maybeUpdateLastLeafFromValue(); + } + + // ======= Helpers de tipo ======= + static isMap(node) { + return node && typeof node === "object" && !Array.isArray(node); + } + static isList(node) { + return Array.isArray(node); + } + + // ======= Recorrido de datos ======= + getNodeAtPath(path) { + let node = this.tree; + for (let i = 0; i < path.length; i++) { + if (TreeList.isMap(node)) { + if (!Object.prototype.hasOwnProperty.call(node, path[i])) + return { node: null, depth: i }; + node = node[path[i]]; + } else if (TreeList.isList(node)) { + // Llegamos a una lista: ya no hay más claves válidas + if (i < path.length) return { node, depth: i }; + } else { + return { node: null, depth: i }; + } + } + return { node, depth: path.length }; + } + + // Autocompletar: baja por primeras claves de cada mapa hasta alcanzar una lista + autoCompleteToLeaf(basePath) { + let { node } = this.getNodeAtPath(basePath); + const path = basePath.slice(); + while (TreeList.isMap(node)) { + const keys = Object.keys(node); + if (!keys.length) break; + const k0 = keys[0]; + path.push(k0); + node = node[k0]; + } + // Si termina en lista, NO agrega un ítem final de la hoja + return path; + } + + // Ruta activa (focusPath si focused, sino value) + getActivePath() { + return this.focused ? this.focusPath : this.value; + } + + // ======= Tamaño de hoja máximo (para layout estable) ======= + computeLeafMax(node = this.tree) { + if (Array.isArray(node)) return node.length; + if (!node || typeof node !== "object") return 0; + let m = 0; + for (const k of Object.keys(node)) { + m = Math.max(m, this.computeLeafMax(node[k])); + } + return m; + } + + // ======= Construcción de niveles (modelo lógico) ======= + buildLevels() { + this.levels.length = 0; + const activePath = this.getActivePath(); + + let node = this.tree; + let level = 0; + + while (node) { + if (TreeList.isMap(node)) { + // Nivel intermedio: claves del mapa (horizontal) + const keys = Object.keys(node); + if (!keys.length) break; + this.levels.push({ + type: "map", + items: keys.map((k) => ({ + key: k, + label: k, + zone: { x: 0, y: 0, w: 0, h: 0 }, + })), + zone: { x: 0, y: 0, w: 0, h: this.lineH }, + }); + + const nextKey = activePath[level]; + if (!nextKey || !node.hasOwnProperty(nextKey)) break; + node = node[nextKey]; + } else if (TreeList.isList(node)) { + // Nivel hoja: lista vertical + const items = node.map((label) => ({ + key: label, + label, + zone: { x: 0, y: 0, w: 0, h: 0 }, + })); + const hList = Math.max(items.length, this.leafMax) * this.lineH; + this.levels.push({ + type: "list", + items, + zone: { x: 0, y: 0, w: 0, h: hList }, + }); + break; + } else { + break; + } + level++; + } + } + + // ======= Layout (zonas & DOM) ======= + layoutLevels() { + const contentX = (this.sa || 100) + 8; // columna de label + padding + const padRight = 8; + const w = this.zone.w - contentX - padRight; + + let y = 0; + + // Ajustar itemsDom a cantidad de niveles + while (this.itemsDom.length < this.levels.length) + this.itemsDom.push([]); + for (let L = this.levels.length; L < this.itemsDom.length; L++) { + for (const el of this.itemsDom[L]) + if (el && el.parentNode) el.parentNode.removeChild(el); + } + this.itemsDom.length = this.levels.length; + + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + if (lvl.type === "map") { + const n = Math.max(1, lvl.items.length); + const cellW = Math.floor(w / n); + lvl.zone = { x: contentX, y, w, h: this.lineH }; + let x = contentX; + for (let i = 0; i < lvl.items.length; i++) { + const it = lvl.items[i]; + it.zone = { x, y, w: cellW, h: this.lineH }; + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, "map"); + x += cellW; + } + // eliminar DOM sobrante si antes había más celdas + this._pruneRow(L, lvl.items.length); + y += this.lineH + this.levelGap; + } else { + // lista/hoja: reservar h según leafMax + const n = lvl.items.length; + const hList = Math.max(n, this.leafMax) * this.lineH; + lvl.zone = { x: contentX, y, w, h: hList }; + + const rows = Math.max(n, this.leafMax); + for (let i = 0; i < rows; i++) { + const isReal = i < n; + const it = isReal + ? lvl.items[i] + : { + key: null, + label: "", + zone: { x: 0, y: 0, w: 0, h: 0 }, + }; + it.zone = { + x: contentX, + y: y + i * this.lineH, + w, + h: this.lineH, + }; + const dom = this.ensureItemDom(L, i); + this.paintItemDom(dom, L, i, it, "list", isReal); + } + // eliminar DOM sobrante si antes había más filas + this._pruneRow(L, rows); + y += hList; + } + } + + // Ajustes de alto interno del contenedor visual + const totalH = y; + this.zone.h = totalH + this.margin; + this.s[0].height = this.zone.h + "px"; + this.s[2].height = totalH + "px"; + + // Publicar alto total al GUI (sumará u.h) + this._publishHeight(); + } + + // Elimina nodos DOM sobrantes en la fila L a partir del índice keep + _pruneRow(L, keep) { + const row = this.itemsDom[L]; + if (!row) return; + for (let j = keep; j < row.length; j++) { + const el = row[j]; + if (el && el.parentNode) el.parentNode.removeChild(el); + } + row.length = keep; + } + + ensureItemDom(L, i) { + const row = this.itemsDom[L]; + while (row.length <= i) row.push(null); + if (!row[i]) { + const div = this.dom( + "div", + Tools.css.txt + "position:absolute; pointer-events:none;" + ); + this.c[2].appendChild(div); + row[i] = div; + } + return row[i]; + } + + paintItemDom(div, L, i, it, kind, isReal = true) { + const s = div.style; + const cc = this.colors; + + // Posición + s.left = it.zone.x + "px"; + s.top = it.zone.y + "px"; + s.width = it.zone.w + "px"; + s.height = it.zone.h - 2 + "px"; + + // Texto + div.textContent = isReal ? it.label : ""; + + // Estados + const selected = + isReal && this.value[L] !== undefined && this.value[L] === it.key; + const inFocusLvl = this.focused && this.focusLevel === L; + const focusMatch = isReal && inFocusLvl && this.focusPath[L] === it.key; + const isHover = + this.enableHover && + isReal && + this.hover.level === L && + this.hover.index === i; + + // 🔸 NUEVO: ¿esta fila es la última hoja seleccionada? + let isLastLeaf = false; + if (isReal && kind === "list" && this.lastLeaf.key != null) { + // La hoja visible corresponde si el padre de esta lista coincide con parentPath guardado + // El padre actual es this.value.slice(0, L) cuando la lista está desplegada por value/focus + const parentNow = this.getActivePath().slice(0, L); + if ( + this._pathsEqual(parentNow, this.lastLeaf.parentPath) && + it.key === this.lastLeaf.key + ) { + isLastLeaf = true; + } + } + + // Estilos base + s.background = cc.back; + s.color = cc.text; + s.border = "1px solid " + cc.border; + s.textAlign = kind === "map" ? "center" : "left"; + + // Prioridad visual: + // 1) seleccionado (azul) + // 2) última hoja (nuevo color) + // 3) foco + // 4) hover + if (selected) { + s.background = cc.select; + s.color = cc.textSelect; + } else if (isLastLeaf) { + // color distintivo para "última hoja" (amarillo suave) + s.background = "rgba(255, 200, 0, 0.25)"; + s.color = cc.text; + } else if (focusMatch) { + s.background = cc.backgroundOver; + s.color = cc.textOver; + } else if (isHover) { + s.background = cc.overoff; + s.color = cc.textOver; + } + + // Filas de padding invisibles en hoja + s.opacity = isReal ? "1" : "0"; + } + + _pathsEqual(a, b) { + if (!a || !b || a.length !== b.length) return false; + for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false; + return true; + } + + // ======= Ciclo de vida ======= + rSize() { + this.leafMax = this.computeLeafMax(this.tree); + this.buildLevels(); + this.layoutLevels(); + } + + update() { + this.buildLevels(); + this.layoutLevels(); + } + + // ======= Interacción ======= + _toLocal(e) { + const mx = e.clientX - this.zone.x; + const my = e.clientY - this.zone.y; + return { x: mx, y: my }; + } + + _hitTest(mx, my) { + for (let L = 0; L < this.levels.length; L++) { + const lvl = this.levels[L]; + const z = lvl.zone; // x y w ya incluyen contentX + + if (mx < z.x || my < z.y || mx > z.x + z.w || my > z.y + z.h) + continue; + + if (lvl.type === "map") { + for (let i = 0; i < lvl.items.length; i++) { + const itz = lvl.items[i].zone; + if ( + mx >= itz.x && + my >= itz.y && + mx <= itz.x + itz.w && + my <= itz.y + itz.h + ) { + return { L, i, real: true }; + } + } + } else { + const nRows = Math.max(lvl.items.length, this.leafMax); + for (let i = 0; i < nRows; i++) { + const isReal = i < lvl.items.length; + const itz = isReal + ? lvl.items[i].zone + : { + x: z.x, + y: z.y + i * this.lineH, + w: z.w, + h: this.lineH, + }; + if ( + mx >= itz.x && + my >= itz.y && + mx <= itz.x + itz.w && + my <= itz.y + itz.h + ) { + return { L, i, real: isReal }; + } + } + } + } + return { L: -1, i: -1, real: false }; + } + + handleEvent(e) { + if (this.lock) return false; + + if (e.type === "mousemove") { + // Si el hover está desactivado, no hay trabajo que hacer. + if (!this.enableHover) return false; + + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + + // nuevo hover calculado + const newHover = + ht.L !== -1 && ht.real + ? { level: ht.L, index: ht.i } + : { level: -1, index: -1 }; + // solo repintar si cambia realmente el hover + if ( + newHover.level === this.hover.level && + newHover.index === this.hover.index + ) + return false; + this.hover = newHover; + this.update(); + return true; + } + + if (e.type === "mousedown") { + const { x, y } = this._toLocal(e); + const ht = this._hitTest(x, y); + if (ht.L !== -1 && ht.real) { + this._selectAt(ht.L, ht.i); + return true; // solo true si realmente se seleccionó algo + } + return false; + } + + if (e.type === "mouseup") { + return false; + } + + return false; + } + + // Selección + autocompletado + notificación + _selectAt(L, i) { + const lvl = this.levels[L]; + const chosen = lvl.items[i]; + if (!chosen || !chosen.key) return; + + const base = this.value.slice(0, L); + base[L] = chosen.key; + + const newPath = this.autoCompleteToLeaf(base); + + // 🔸 Si el usuario selecciona explícitamente en el nivel hoja, recordarlo + if (lvl.type === "list") { + this.lastLeaf.parentPath = this.value.slice(0, L); // padre de la lista actual + this.lastLeaf.key = chosen.key; + } + + this.value = newPath.slice(); + this.update(); + + // si está referenciado, propaga a objeto externo + this.send(newPath); + this.changeCb(this.tabIndex, this.itemIndex, newPath); + } + + // ======= API pública ======= + setValue(path) { + this.value = Array.isArray(path) ? path.slice() : []; + // Si desde afuera nos setean una hoja válida, también la recordamos + this._maybeUpdateLastLeafFromValue(); + this.update(); + } + + setTree(tree) { + this.tree = tree || {}; + this.leafMax = this.computeLeafMax(this.tree); + this.update(); + } + + setFocus({ focused, focusPath, focusLevel }) { + if (typeof focused === "boolean") this.focused = focused; + if (Array.isArray(focusPath)) this.focusPath = focusPath.slice(); + if (typeof focusLevel === "number") this.focusLevel = focusLevel; + this.update(); + } + + _maybeUpdateLastLeafFromValue() { + // Si value apunta a padre+hoja (…,[leaf]) y es válida, recordar esa hoja + if (!Array.isArray(this.value) || this.value.length === 0) return; + const parent = this.value.slice(0, this.value.length - 1); + const leaf = this.value[this.value.length - 1]; + const info = this.getNodeAtPath(parent); + if (info && Array.isArray(info.node) && info.node.includes(leaf)) { + this.lastLeaf = { parentPath: parent, key: leaf }; + } + } + + // ======= Publicación de altura ======= + _countVisibleIntermediates() { + let c = 0; + for (let i = 0; i < this.levels.length; i++) + if (this.levels[i].type === "map") c++; + return c; + } + + _getCurrentLeafLength() { + const last = this.levels[this.levels.length - 1]; + return last && last.type === "list" ? last.items.length : 0; + } + + _publishHeight() { + const inter = this._countVisibleIntermediates(); + const leafLen = Math.max(this.leafMax, this._getCurrentLeafLength()); + const leafH = leafLen * this.lineH; + const interH = inter * (this.lineH + this.levelGap); + const totalH = inter ? interH + this.levelGap + leafH : leafH; + + // Normalizamos a px enteros para evitar jitter por redondeo + const newH = Math.floor(totalH); + + // Actualizamos métricas locales siempre + this.h = newH; + this.zone.h = this.h + this.margin; + this.s[0].height = this.h + "px"; + + // Solo avisamos al GUI si la altura cambió + if (newH !== this._lastPublishedH) { + this._lastPublishedH = newH; + Roots.needReZone = true; + if (this.isUI && this.main) this.main.calc(); + } + } } From ea25d6a8ee0543067fed88164e99b0812ee5b0af Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Sun, 7 Sep 2025 18:39:41 -0300 Subject: [PATCH 13/17] menores --- build/uil.js | 1211 +++++++++++++++---------------- build/uil.min.js | 1211 +++++++++++++++---------------- build/uil.module.js | 1211 +++++++++++++++---------------- examples/uil_vr_test.html | 6 +- src/core/Gui.js | 1426 +++++++++++++++++++------------------ 5 files changed, 2539 insertions(+), 2526 deletions(-) diff --git a/build/uil.js b/build/uil.js index 8d033d7..d3f718b 100644 --- a/build/uil.js +++ b/build/uil.js @@ -8826,781 +8826,785 @@ */ class Gui { - constructor(o = {}) { - this.isGui = true; + constructor(o = {}) { + this.isGui = true; - this.name = "gui"; + this.name = "gui"; - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors); - else this.colors = Tools.defineColor(o); + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); - //this.cleanning = false + //this.cleanning = false - // style - this.css = Tools.cloneCss(); + // style + this.css = Tools.cloneCss(); - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") - ? o.addDOMEventListeners - : true; + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; - this.callback = o.callback === undefined ? null : o.callback; + this.callback = o.callback === undefined ? null : o.callback; - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - this.cn = ""; + this.cn = ""; - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; - this.size.h = this.size.h < 11 ? 11 : this.size.h; + this.size.h = this.size.h < 11 ? 11 : this.size.h; - // local mouse and zone - this.local = new V2().neg(); - this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; - // virtual mouse - this.mouse = new V2().neg(); + // virtual mouse + this.mouse = new V2().neg(); - this.h = 0; - //this.prevY = -1; - this.sw = 0; + this.h = 0; + //this.prevY = -1; + this.sw = 0; - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; - this.autoResize = o.autoResize === undefined ? true : o.autoResize; + this.autoResize = o.autoResize === undefined ? true : o.autoResize; - // default position - this.isCenter = o.center || false; - this.cssGui = - o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; - this.isNewTarget = false; + this.isNewTarget = false; - let cc = this.colors; - - this.content = Tools.dom( - "div", - this.css.basic + - " width:0px; height:auto; top:0px; background:" + - cc.content + - "; " + - this.cssGui - ); - - this.innerContent = Tools.dom( - "div", - this.css.basic + - "width:100%; top:0; left:0; height:auto; overflow:hidden;" - ); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); + let cc = this.colors; - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom( - "div", - this.css.basic + flexible + "width:100%; left:0; " - ); - this.innerContent.appendChild(this.inner); - - // scroll - this.scrollBG = Tools.dom( - "div", - this.css.basic + - "right:0; top:0; width:" + - (this.size.s - 1) + - "px; height:10px; display:none; background:" + - cc.background + - ";" - ); - this.content.appendChild(this.scrollBG); + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); - this.scroll = Tools.dom( - "div", - this.css.basic + - "background:" + - cc.button + - "; right:2px; top:0; width:" + - (this.size.s - 4) + - "px; height:10px;" - ); - this.scrollBG.appendChild(this.scroll); + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); - let r = cc.radius; - this.bottom = Tools.dom( - "div", - this.css.txt + - "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + - r + - "px; border-bottom-left-radius:" + - r + - "px; justify-content:center; height:" + - this.bh + - "px; line-height:" + - (this.bh - 5) + - "px; color:" + - cc.text + - ";" - ); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - this.bottom.style.background = cc.background; + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); - // + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } - if (this.parent !== null) this.parent.appendChild(this.content); + if (this.parent !== null) this.parent.appendChild(this.content); - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } - // height transition - this.transition = - o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - this.setWidth(); + this.setWidth(); - if (this.isCanvas) this.makeCanvas(); + if (this.isCanvas) this.makeCanvas(); - Roots.add(this); - } + Roots.add(this); + } - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN, - }); - } + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + }); + } - triggerMouseUp(x, y) { - /* + triggerMouseUp(x, y) { + /* clientX,clientY are no used when isCanvas==true */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } - Roots.needReZone = true; - } + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = - "height " + this.transition + "s ease-out"; - this.content.style.transition = - "height " + this.transition + "s ease-out"; - this.bottom.style.transition = "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } + Roots.needReZone = true; + } - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = + "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } - // ---------------------- - // CANVAS - // ---------------------- + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } - onDraw() {} + // ---------------------- + // CANVAS + // ---------------------- - makeCanvas() { - this.canvas = document.createElementNS( - "http://www.w3.org/1999/xhtml", - "canvas" - ); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + onDraw() {} - //console.log( this.canvas.width, this.canvas.height ) - } + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - draw(force) { - if (this.canvas === null) return; + //console.log( this.canvas.width, this.canvas.height ) + } - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } + draw(force) { + if (this.canvas === null) return; - ////// + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } - getDom() { - return this.content; - } + ////// - noMouse() { - this.mouse.neg(); - } + getDom() { + return this.content; + } - setMouse(uv, flip = true) { - if (flip) - this.mouse.set( - Math.round(uv.x * this.canvas.width), - this.canvas.height - Math.round(uv.y * this.canvas.height) - ); - else - this.mouse.set( - Math.round(uv.x * this.canvas.width), - Math.round(uv.y * this.canvas.height) - ); - //this.mouse.set( m.x, m.y ); + noMouse() { + this.mouse.neg(); + } - //console.log("setMouse "+uv.x+" "+uv.y) - } + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } + console.log("setMouse " + uv.x + " " + uv.y); + } - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } - onChange(f) { - this.callback = f || null; - return this; - } + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } - // ---------------------- - // STYLES - // ---------------------- + onChange(f) { + this.callback = f || null; + return this; + } - mode(n) { - let needChange = false; - let cc = this.colors; + // ---------------------- + // STYLES + // ---------------------- - if (n !== this.cn) { - this.cn = n; - - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } + mode(n) { + let needChange = false; + let cc = this.colors; + + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } - needChange = true; - } + needChange = true; + } - return needChange; - } + return needChange; + } - // ---------------------- - // TARGET - // ---------------------- + // ---------------------- + // TARGET + // ---------------------- - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } - this.proto = null; - this.current = -1; + this.proto = null; + this.current = -1; - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - Roots.cursor(); - return true; - } + Roots.cursor(); + return true; + } - // ---------------------- - // ZONE TEST - // ---------------------- + // ---------------------- + // ZONE TEST + // ---------------------- - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; - this.isReset = false; + this.isReset = false; - let name = ""; + let name = ""; - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; - else name = l.x > s ? "scroll" : "content"; + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; - return name; - } + return name; + } - // ---------------------- - // EVENTS - // ---------------------- + // ---------------------- + // EVENTS + // ---------------------- - handleEvent(e) { - //if( this.cleanning ) return + handleEvent(e) { + //if( this.cleanning ) return - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; - let change = false; - let protoChange = false; + let change = false; + let protoChange = false; - let name = this.testZone(e); + let name = this.testZone(e); - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } - if (!name) return; + if (!name) return; - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - if (Roots.isMobile && type === "mousedown") this.getNext(e, change); + if (Roots.isMobile && type === "mousedown") + this.getNext(e, change); - if (this.proto) protoChange = this.proto.handleEvent(e); + if (this.proto) protoChange = this.proto.handleEvent(e); - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) - change = this.onWheel(e); + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); - if (!Roots.lock) { - this.getNext(e, change); - } + if (!Roots.lock) { + this.getNext(e, change); + } - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) + this.update(e.clientY - this.zone.y - this.sh * 0.5); - break; - } + break; + } - if (this.isDown) change = true; - if (protoChange) change = true; + if (this.isDown) change = true; + if (protoChange) change = true; - if (type === "keyup") change = true; - if (type === "keydown") change = true; + if (type === "keyup") change = true; + if (type === "keydown") change = true; - if (change) this.draw(); - } + if (change) this.draw(); + } - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); - if (next !== this.current) { - this.clearTarget(); - this.current = next; - this.isNewTarget = true; - } + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } - // ---------------------- - // RESET - // ---------------------- + // ---------------------- + // RESET + // ---------------------- - reset(force) { - if (this.isReset) return; + reset(force) { + if (this.isReset) return; - //this.resetItem(); + //this.resetItem(); - this.mouse.neg(); - this.isDown = false; + this.mouse.neg(); + this.isDown = false; - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); - if (r || r2) this.draw(true); + if (r || r2) this.draw(true); - this.isReset = true; + this.isReset = true; - //Roots.lock = false; - } + //Roots.lock = false; + } - // ---------------------- - // ADD NODE - // ---------------------- + // ---------------------- + // ADD NODE + // ---------------------- - add() { - //if(this.cleanning) this.cleanning = false + add() { + //if(this.cleanning) this.cleanning = false - let a = arguments; - let ontop = false; + let a = arguments; + let ontop = false; - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); - else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } - let u = add.apply(this, a); + let u = add.apply(this, a); - if (u === null) return; + if (u === null) return; - if (ontop) this.uis.unshift(u); - else this.uis.push(u); + if (ontop) this.uis.unshift(u); + else this.uis.push(u); - this.calc(); + this.calc(); - this.isEmpty = false; + this.isEmpty = false; - return u; - } + return u; + } - // remove one node + // remove one node - remove(n) { - if (n.dispose) n.dispose(); - } + remove(n) { + if (n.dispose) n.dispose(); + } - // call after uis clear + // call after uis clear - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } - // clear all gui + // clear all gui - empty() { - //this.cleanning = true + empty() { + //this.cleanning = true - //this.close(); + //this.close(); - let i = this.uis.length, - item; + let i = this.uis.length, + item; - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } - this.uis = []; - this.isEmpty = true; - this.calc(); - } + this.uis = []; + this.isEmpty = true; + this.calc(); + } - clear() { - this.empty(); - } + clear() { + this.empty(); + } - clear2() { - setTimeout(this.empty.bind(this), 0); - } + clear2() { + setTimeout(this.empty.bind(this), 0); + } - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } - // ---------------------- - // ITEMS SPECIAL - // ---------------------- + // ---------------------- + // ITEMS SPECIAL + // ---------------------- - resetItem() { - if (!this.isItemMode) return; + resetItem() { + if (!this.isItemMode) return; - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } - setItem(name) { - if (!this.isItemMode) return; + setItem(name) { + if (!this.isItemMode) return; - name = name || ""; - this.resetItem(); + name = name || ""; + this.resetItem(); - if (!name) { - this.update(0); - return; - } + if (!name) { + this.update(0); + return; + } - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) - this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } - // ---------------------- - // SCROLL - // ---------------------- + // ---------------------- + // SCROLL + // ---------------------- - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; - if (b) { - this.total = this.h; + if (b) { + this.total = this.h; - this.maxView = this.maxHeight; + this.maxView = this.maxHeight; - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; - this.range = this.maxView - this.sh; + this.range = this.maxView - this.sh; - this.oy = Tools.clamp(this.oy, 0, this.range); + this.oy = Tools.clamp(this.oy, 0, this.range); - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } - update(y) { - y = Tools.clamp(y, 0, this.range); + update(y) { + y = Tools.clamp(y, 0, this.range); - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } - // ---------------------- - // RESIZE FUNCTION - // ---------------------- + // ---------------------- + // RESIZE FUNCTION + // ---------------------- - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } - setHeight() { - if (this.tmp) clearTimeout(this.tmp); + setHeight() { + if (this.tmp) clearTimeout(this.tmp); - this.zone.h = this.bh; - this.isScroll = false; + this.zone.h = this.bh; + this.isScroll = false; - if (this.isOpen) { - this.h = this.calcUis(); + if (this.isOpen) { + this.h = this.calcUis(); - let hhh = this.forceHeight - ? this.forceHeight + this.zone.y - : window.innerHeight; + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; - this.maxHeight = hhh - this.zone.y - this.bh; + this.maxHeight = hhh - this.zone.y - this.bh; - let diff = this.h - this.maxHeight; + let diff = this.h - this.maxHeight; - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } - this.upScroll(this.isScroll); + this.upScroll(this.isScroll); - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; - if (this.forceHeight && this.lockHeight) - this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } - rezone() { - Roots.needReZone = true; - } + rezone() { + Roots.needReZone = true; + } - setWidth(w) { - if (w) this.zone.w = w; + setWidth(w) { + if (w) this.zone.w = w; - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) - this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = + -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } } exports.Files = Files; @@ -9612,4 +9616,3 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvcHJvdG8vVHJlZUxpc3QuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gXCIuLi9jb3JlL1Jvb3RzLmpzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcblx0Y29uc3RydWN0b3IobyA9IHt9KSB7XHJcblx0XHQvLyBBUEkgcMO6YmxpY2EgZXNwZXJhZGE6XHJcblx0XHQvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KVxyXG5cdFx0Ly8gby5mb2N1c2VkIChib29sKSwgby5mb2N1c1BhdGggKGFycmF5KSwgby5mb2N1c0xldmVsIChudW1iZXIpXHJcblx0XHQvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcblx0XHRvLnNlbGVjdGFibGUgPSB0cnVlO1xyXG5cdFx0by5uYW1lID0gby5uYW1lIHx8IFwiVHJlZUxpc3RcIjtcclxuXHJcblx0XHRzdXBlcihvKTtcclxuXHRcdHRoaXMuZW5hYmxlSG92ZXIgPSBvLmVuYWJsZUhvdmVyICE9PSBmYWxzZTtcclxuXHJcblx0XHQvLyBEYXRvcyAmIGVzdGFkb1xyXG5cdFx0dGhpcy50cmVlID0gby50cmVlIHx8IHt9O1xyXG5cdFx0dGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNlZCA9ICEhby5mb2N1c2VkO1xyXG5cdFx0dGhpcy5mb2N1c1BhdGggPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09IFwibnVtYmVyXCIgPyBvLmZvY3VzTGV2ZWwgOiAtMTtcclxuXHJcblx0XHR0aGlzLnRhYkluZGV4ID0gby50YWJJbmRleCA/PyBudWxsO1xyXG5cdFx0dGhpcy5pdGVtSW5kZXggPSBvLml0ZW1JbmRleCA/PyBudWxsO1xyXG5cclxuXHRcdC8vIENhbGxiYWNrXHJcblx0XHR0aGlzLmNoYW5nZUNiID1cclxuXHRcdFx0dHlwZW9mIG8ub25DaGFuZ2UgPT09IFwiZnVuY3Rpb25cIiA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcblx0XHQvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuXHRcdHRoaXMubGluZUggPSB0aGlzLmg7IC8vIGFsdG8gZGUgVU5BIGZpbGFcclxuXHRcdHRoaXMubGV2ZWxHYXAgPSB0aGlzLmNvbG9ycy5zeSB8fCAyOyAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcblx0XHR0aGlzLmxlYWZNYXggPSAwOyAvLyBzZSBjYWxjdWxhIGVuIHJTaXplKClcclxuXHJcblx0XHQvLyBNb2RlbG8gdmlzdWFsXHJcblx0XHR0aGlzLmxldmVscyA9IFtdOyAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuXHRcdHRoaXMuaXRlbXNEb20gPSBbXTsgLy8gZXNwZWpvIERPTSBwb3Igbml2ZWxcclxuXHRcdHRoaXMuaG92ZXIgPSB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogcmVjb3JkYXIgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYSAocGVyc2lzdGVudGUpXHJcblx0XHR0aGlzLmxhc3RMZWFmID0geyBwYXJlbnRQYXRoOiBbXSwga2V5OiBudWxsIH07IC8vIHBhcmVudFBhdGggZXMgbGEgcnV0YSBoYXN0YSBlbCBtYXBhIHBhZHJlXHJcblxyXG5cdFx0Ly8gQ29udGVuZWRvciBpbnRlcm5vIChhYnNvbHV0bylcclxuXHRcdHRoaXMuY1syXSA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcImRpdlwiLFxyXG5cdFx0XHR0aGlzLmNzcy5iYXNpYyArIFwibGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7XCJcclxuXHRcdCk7XHJcblx0XHR0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG5cdFx0dGhpcy5pbml0KCk7XHJcblxyXG5cdFx0Ly8gU2kgZWwgdmFsb3IgaW5pY2lhbCB5YSBhcHVudGEgYSB1bmEgaG9qYSB2w6FsaWRhLCByZWNvcmRhciBlc2EgaG9qYVxyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG5cdHN0YXRpYyBpc01hcChub2RlKSB7XHJcblx0XHRyZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblx0c3RhdGljIGlzTGlzdChub2RlKSB7XHJcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUmVjb3JyaWRvIGRlIGRhdG9zID09PT09PT1cclxuXHRnZXROb2RlQXRQYXRoKHBhdGgpIHtcclxuXHRcdGxldCBub2RlID0gdGhpcy50cmVlO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIHBhdGhbaV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuXHRcdFx0XHRub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBMbGVnYW1vcyBhIHVuYSBsaXN0YTogeWEgbm8gaGF5IG3DoXMgY2xhdmVzIHbDoWxpZGFzXHJcblx0XHRcdFx0aWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuXHR9XHJcblxyXG5cdC8vIEF1dG9jb21wbGV0YXI6IGJhamEgcG9yIHByaW1lcmFzIGNsYXZlcyBkZSBjYWRhIG1hcGEgaGFzdGEgYWxjYW56YXIgdW5hIGxpc3RhXHJcblx0YXV0b0NvbXBsZXRlVG9MZWFmKGJhc2VQYXRoKSB7XHJcblx0XHRsZXQgeyBub2RlIH0gPSB0aGlzLmdldE5vZGVBdFBhdGgoYmFzZVBhdGgpO1xyXG5cdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLnNsaWNlKCk7XHJcblx0XHR3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG5cdFx0XHRpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuXHRcdFx0Y29uc3QgazAgPSBrZXlzWzBdO1xyXG5cdFx0XHRwYXRoLnB1c2goazApO1xyXG5cdFx0XHRub2RlID0gbm9kZVtrMF07XHJcblx0XHR9XHJcblx0XHQvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2EgdW4gw610ZW0gZmluYWwgZGUgbGEgaG9qYVxyXG5cdFx0cmV0dXJuIHBhdGg7XHJcblx0fVxyXG5cclxuXHQvLyBSdXRhIGFjdGl2YSAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpbm8gdmFsdWUpXHJcblx0Z2V0QWN0aXZlUGF0aCgpIHtcclxuXHRcdHJldHVybiB0aGlzLmZvY3VzZWQgPyB0aGlzLmZvY3VzUGF0aCA6IHRoaXMudmFsdWU7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFRhbWHDsW8gZGUgaG9qYSBtw6F4aW1vIChwYXJhIGxheW91dCBlc3RhYmxlKSA9PT09PT09XHJcblx0Y29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBub2RlLmxlbmd0aDtcclxuXHRcdGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIDA7XHJcblx0XHRsZXQgbSA9IDA7XHJcblx0XHRmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcclxuXHRcdFx0bSA9IE1hdGgubWF4KG0sIHRoaXMuY29tcHV0ZUxlYWZNYXgobm9kZVtrXSkpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG07XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IENvbnN0cnVjY2nDs24gZGUgbml2ZWxlcyAobW9kZWxvIGzDs2dpY28pID09PT09PT1cclxuXHRidWlsZExldmVscygpIHtcclxuXHRcdHRoaXMubGV2ZWxzLmxlbmd0aCA9IDA7XHJcblx0XHRjb25zdCBhY3RpdmVQYXRoID0gdGhpcy5nZXRBY3RpdmVQYXRoKCk7XHJcblxyXG5cdFx0bGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcblx0XHRsZXQgbGV2ZWwgPSAwO1xyXG5cclxuXHRcdHdoaWxlIChub2RlKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdC8vIE5pdmVsIGludGVybWVkaW86IGNsYXZlcyBkZWwgbWFwYSAoaG9yaXpvbnRhbClcclxuXHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcblx0XHRcdFx0aWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcblx0XHRcdFx0dGhpcy5sZXZlbHMucHVzaCh7XHJcblx0XHRcdFx0XHR0eXBlOiBcIm1hcFwiLFxyXG5cdFx0XHRcdFx0aXRlbXM6IGtleXMubWFwKChrKSA9PiAoe1xyXG5cdFx0XHRcdFx0XHRrZXk6IGssXHJcblx0XHRcdFx0XHRcdGxhYmVsOiBrLFxyXG5cdFx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAgfSxcclxuXHRcdFx0XHRcdH0pKSxcclxuXHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogdGhpcy5saW5lSCB9LFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcblx0XHRcdFx0aWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuXHRcdFx0XHRub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAoKGxhYmVsKSA9PiAoe1xyXG5cdFx0XHRcdFx0a2V5OiBsYWJlbCxcclxuXHRcdFx0XHRcdGxhYmVsLFxyXG5cdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuXHRcdFx0XHR0aGlzLmxldmVscy5wdXNoKHtcclxuXHRcdFx0XHRcdHR5cGU6IFwibGlzdFwiLFxyXG5cdFx0XHRcdFx0aXRlbXMsXHJcblx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IGhMaXN0IH0sXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV2ZWwrKztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gTGF5b3V0ICh6b25hcyAmIERPTSkgPT09PT09PVxyXG5cdGxheW91dExldmVscygpIHtcclxuXHRcdGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7IC8vIGNvbHVtbmEgZGUgbGFiZWwgKyBwYWRkaW5nXHJcblx0XHRjb25zdCBwYWRSaWdodCA9IDg7XHJcblx0XHRjb25zdCB3ID0gdGhpcy56b25lLncgLSBjb250ZW50WCAtIHBhZFJpZ2h0O1xyXG5cclxuXHRcdGxldCB5ID0gMDtcclxuXHJcblx0XHQvLyBBanVzdGFyIGl0ZW1zRG9tIGEgY2FudGlkYWQgZGUgbml2ZWxlc1xyXG5cdFx0d2hpbGUgKHRoaXMuaXRlbXNEb20ubGVuZ3RoIDwgdGhpcy5sZXZlbHMubGVuZ3RoKVxyXG5cdFx0XHR0aGlzLml0ZW1zRG9tLnB1c2goW10pO1xyXG5cdFx0Zm9yIChsZXQgTCA9IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCA8IHRoaXMuaXRlbXNEb20ubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiB0aGlzLml0ZW1zRG9tW0xdKVxyXG5cdFx0XHRcdGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuXHRcdFx0XHRjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cdFx0XHRcdGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG5cdFx0XHRcdGxldCB4ID0gY29udGVudFg7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0XHRcdFx0aXQuem9uZSA9IHsgeCwgeSwgdzogY2VsbFcsIGg6IHRoaXMubGluZUggfTtcclxuXHRcdFx0XHRcdGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuXHRcdFx0XHRcdHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsIFwibWFwXCIpO1xyXG5cdFx0XHRcdFx0eCArPSBjZWxsVztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG5cdFx0XHRcdHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG5cdFx0XHRcdGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcblx0XHRcdFx0bHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuXHRcdFx0XHRjb25zdCByb3dzID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNSZWFsID0gaSA8IG47XHJcblx0XHRcdFx0XHRjb25zdCBpdCA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXVxyXG5cdFx0XHRcdFx0XHQ6IHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTogbnVsbCxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0XHRcdCAgfTtcclxuXHRcdFx0XHRcdGl0LnpvbmUgPSB7XHJcblx0XHRcdFx0XHRcdHg6IGNvbnRlbnRYLFxyXG5cdFx0XHRcdFx0XHR5OiB5ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdHcsXHJcblx0XHRcdFx0XHRcdGg6IHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Y29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG5cdFx0XHRcdFx0dGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgXCJsaXN0XCIsIGlzUmVhbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBmaWxhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIHJvd3MpO1xyXG5cdFx0XHRcdHkgKz0gaExpc3Q7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBBanVzdGVzIGRlIGFsdG8gaW50ZXJubyBkZWwgY29udGVuZWRvciB2aXN1YWxcclxuXHRcdGNvbnN0IHRvdGFsSCA9IHk7XHJcblx0XHR0aGlzLnpvbmUuaCA9IHRvdGFsSCArIHRoaXMubWFyZ2luO1xyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG5cdFx0dGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArIFwicHhcIjtcclxuXHJcblx0XHQvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcblx0XHR0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcblx0fVxyXG5cclxuXHQvLyBFbGltaW5hIG5vZG9zIERPTSBzb2JyYW50ZXMgZW4gbGEgZmlsYSBMIGEgcGFydGlyIGRlbCDDrW5kaWNlIGtlZXBcclxuXHRfcHJ1bmVSb3coTCwga2VlcCkge1xyXG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuXHRcdGlmICghcm93KSByZXR1cm47XHJcblx0XHRmb3IgKGxldCBqID0ga2VlcDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRjb25zdCBlbCA9IHJvd1tqXTtcclxuXHRcdFx0aWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG5cdFx0fVxyXG5cdFx0cm93Lmxlbmd0aCA9IGtlZXA7XHJcblx0fVxyXG5cclxuXHRlbnN1cmVJdGVtRG9tKEwsIGkpIHtcclxuXHRcdGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcblx0XHR3aGlsZSAocm93Lmxlbmd0aCA8PSBpKSByb3cucHVzaChudWxsKTtcclxuXHRcdGlmICghcm93W2ldKSB7XHJcblx0XHRcdGNvbnN0IGRpdiA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcdFwiZGl2XCIsXHJcblx0XHRcdFx0VG9vbHMuY3NzLnR4dCArIFwicG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7XCJcclxuXHRcdFx0KTtcclxuXHRcdFx0dGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcblx0XHRcdHJvd1tpXSA9IGRpdjtcclxuXHRcdH1cclxuXHRcdHJldHVybiByb3dbaV07XHJcblx0fVxyXG5cclxuXHRwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG5cdFx0Y29uc3QgcyA9IGRpdi5zdHlsZTtcclxuXHRcdGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG5cdFx0Ly8gUG9zaWNpw7NuXHJcblx0XHRzLmxlZnQgPSBpdC56b25lLnggKyBcInB4XCI7XHJcblx0XHRzLnRvcCA9IGl0LnpvbmUueSArIFwicHhcIjtcclxuXHRcdHMud2lkdGggPSBpdC56b25lLncgKyBcInB4XCI7XHJcblx0XHRzLmhlaWdodCA9IGl0LnpvbmUuaCAtIDIgKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gVGV4dG9cclxuXHRcdGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogXCJcIjtcclxuXHJcblx0XHQvLyBFc3RhZG9zXHJcblx0XHRjb25zdCBzZWxlY3RlZCA9XHJcblx0XHRcdGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG5cdFx0Y29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiB0aGlzLmZvY3VzTGV2ZWwgPT09IEw7XHJcblx0XHRjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgdGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleTtcclxuXHRcdGNvbnN0IGlzSG92ZXIgPVxyXG5cdFx0XHR0aGlzLmVuYWJsZUhvdmVyICYmXHJcblx0XHRcdGlzUmVhbCAmJlxyXG5cdFx0XHR0aGlzLmhvdmVyLmxldmVsID09PSBMICYmXHJcblx0XHRcdHRoaXMuaG92ZXIuaW5kZXggPT09IGk7XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogwr9lc3RhIGZpbGEgZXMgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYT9cclxuXHRcdGxldCBpc0xhc3RMZWFmID0gZmFsc2U7XHJcblx0XHRpZiAoaXNSZWFsICYmIGtpbmQgPT09IFwibGlzdFwiICYmIHRoaXMubGFzdExlYWYua2V5ICE9IG51bGwpIHtcclxuXHRcdFx0Ly8gTGEgaG9qYSB2aXNpYmxlIGNvcnJlc3BvbmRlIHNpIGVsIHBhZHJlIGRlIGVzdGEgbGlzdGEgY29pbmNpZGUgY29uIHBhcmVudFBhdGggZ3VhcmRhZG9cclxuXHRcdFx0Ly8gRWwgcGFkcmUgYWN0dWFsIGVzIHRoaXMudmFsdWUuc2xpY2UoMCwgTCkgY3VhbmRvIGxhIGxpc3RhIGVzdMOhIGRlc3BsZWdhZGEgcG9yIHZhbHVlL2ZvY3VzXHJcblx0XHRcdGNvbnN0IHBhcmVudE5vdyA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpLnNsaWNlKDAsIEwpO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5fcGF0aHNFcXVhbChwYXJlbnROb3csIHRoaXMubGFzdExlYWYucGFyZW50UGF0aCkgJiZcclxuXHRcdFx0XHRpdC5rZXkgPT09IHRoaXMubGFzdExlYWYua2V5XHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGlzTGFzdExlYWYgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRXN0aWxvcyBiYXNlXHJcblx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG5cdFx0cy5jb2xvciA9IGNjLnRleHQ7XHJcblx0XHRzLmJvcmRlciA9IFwiMXB4IHNvbGlkIFwiICsgY2MuYm9yZGVyO1xyXG5cdFx0cy50ZXh0QWxpZ24gPSBraW5kID09PSBcIm1hcFwiID8gXCJjZW50ZXJcIiA6IFwibGVmdFwiO1xyXG5cclxuXHRcdC8vIFByaW9yaWRhZCB2aXN1YWw6XHJcblx0XHQvLyAxKSBzZWxlY2Npb25hZG8gKGF6dWwpXHJcblx0XHQvLyAyKSDDumx0aW1hIGhvamEgKG51ZXZvIGNvbG9yKVxyXG5cdFx0Ly8gMykgZm9jb1xyXG5cdFx0Ly8gNCkgaG92ZXJcclxuXHRcdGlmIChzZWxlY3RlZCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG5cdFx0fSBlbHNlIGlmIChpc0xhc3RMZWFmKSB7XHJcblx0XHRcdC8vIGNvbG9yIGRpc3RpbnRpdm8gcGFyYSBcIsO6bHRpbWEgaG9qYVwiIChhbWFyaWxsbyBzdWF2ZSlcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gXCJyZ2JhKDI1NSwgMjAwLCAwLCAwLjI1KVwiO1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dDtcclxuXHRcdH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG5cdFx0fSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG5cdFx0cy5vcGFjaXR5ID0gaXNSZWFsID8gXCIxXCIgOiBcIjBcIjtcclxuXHR9XHJcblxyXG5cdF9wYXRoc0VxdWFsKGEsIGIpIHtcclxuXHRcdGlmICghYSB8fCAhYiB8fCBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuXHRyU2l6ZSgpIHtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuXHRcdHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGUoKSB7XHJcblx0XHR0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcblx0XHR0aGlzLmxheW91dExldmVscygpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG5cdF90b0xvY2FsKGUpIHtcclxuXHRcdGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblx0XHRjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG5cdFx0cmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcblx0fVxyXG5cclxuXHRfaGl0VGVzdChteCwgbXkpIHtcclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGNvbnN0IHogPSBsdmwuem9uZTsgLy8geCB5IHcgeWEgaW5jbHV5ZW4gY29udGVudFhcclxuXHJcblx0XHRcdGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0bXggPj0gaXR6LnggJiZcclxuXHRcdFx0XHRcdFx0bXkgPj0gaXR6LnkgJiZcclxuXHRcdFx0XHRcdFx0bXggPD0gaXR6LnggKyBpdHoudyAmJlxyXG5cdFx0XHRcdFx0XHRteSA8PSBpdHoueSArIGl0ei5oXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuXHRcdFx0XHRcdGNvbnN0IGl0eiA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXS56b25lXHJcblx0XHRcdFx0XHRcdDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0eDogei54LFxyXG5cdFx0XHRcdFx0XHRcdFx0eTogei55ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdFx0XHR3OiB6LncsXHJcblx0XHRcdFx0XHRcdFx0XHRoOiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHQgIH07XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdG14ID49IGl0ei54ICYmXHJcblx0XHRcdFx0XHRcdG15ID49IGl0ei55ICYmXHJcblx0XHRcdFx0XHRcdG14IDw9IGl0ei54ICsgaXR6LncgJiZcclxuXHRcdFx0XHRcdFx0bXkgPD0gaXR6LnkgKyBpdHouaFxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IEwsIGksIHJlYWw6IGlzUmVhbCB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgTDogLTEsIGk6IC0xLCByZWFsOiBmYWxzZSB9O1xyXG5cdH1cclxuXHJcblx0aGFuZGxlRXZlbnQoZSkge1xyXG5cdFx0aWYgKHRoaXMubG9jaykgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcclxuXHRcdFx0Ly8gU2kgZWwgaG92ZXIgZXN0w6EgZGVzYWN0aXZhZG8sIG5vIGhheSB0cmFiYWpvIHF1ZSBoYWNlci5cclxuXHRcdFx0aWYgKCF0aGlzLmVuYWJsZUhvdmVyKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHJcblx0XHRcdC8vIG51ZXZvIGhvdmVyIGNhbGN1bGFkb1xyXG5cdFx0XHRjb25zdCBuZXdIb3ZlciA9XHJcblx0XHRcdFx0aHQuTCAhPT0gLTEgJiYgaHQucmVhbFxyXG5cdFx0XHRcdFx0PyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9XHJcblx0XHRcdFx0XHQ6IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHRcdFx0Ly8gc29sbyByZXBpbnRhciBzaSBjYW1iaWEgcmVhbG1lbnRlIGVsIGhvdmVyXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRuZXdIb3Zlci5sZXZlbCA9PT0gdGhpcy5ob3Zlci5sZXZlbCAmJlxyXG5cdFx0XHRcdG5ld0hvdmVyLmluZGV4ID09PSB0aGlzLmhvdmVyLmluZGV4XHJcblx0XHRcdClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdHRoaXMuaG92ZXIgPSBuZXdIb3ZlcjtcclxuXHRcdFx0dGhpcy51cGRhdGUoKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHRcdFx0aWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuXHRcdFx0XHR0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLy8gc29sbyB0cnVlIHNpIHJlYWxtZW50ZSBzZSBzZWxlY2Npb27DsyBhbGdvXHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcblx0X3NlbGVjdEF0KEwsIGkpIHtcclxuXHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0Y29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0aWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuXHRcdGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuXHRcdGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcblx0XHQvLyDwn5S4IFNpIGVsIHVzdWFyaW8gc2VsZWNjaW9uYSBleHBsw61jaXRhbWVudGUgZW4gZWwgbml2ZWwgaG9qYSwgcmVjb3JkYXJsb1xyXG5cdFx0aWYgKGx2bC50eXBlID09PSBcImxpc3RcIikge1xyXG5cdFx0XHR0aGlzLmxhc3RMZWFmLnBhcmVudFBhdGggPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpOyAvLyBwYWRyZSBkZSBsYSBsaXN0YSBhY3R1YWxcclxuXHRcdFx0dGhpcy5sYXN0TGVhZi5rZXkgPSBjaG9zZW4ua2V5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMudmFsdWUgPSBuZXdQYXRoLnNsaWNlKCk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHRcdC8vIHNpIGVzdMOhIHJlZmVyZW5jaWFkbywgcHJvcGFnYSBhIG9iamV0byBleHRlcm5vXHJcblx0XHR0aGlzLnNlbmQobmV3UGF0aCk7XHJcblx0XHR0aGlzLmNoYW5nZUNiKHRoaXMudGFiSW5kZXgsIHRoaXMuaXRlbUluZGV4LCBuZXdQYXRoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gQVBJIHDDumJsaWNhID09PT09PT1cclxuXHRzZXRWYWx1ZShwYXRoKSB7XHJcblx0XHR0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguc2xpY2UoKSA6IFtdO1xyXG5cdFx0Ly8gU2kgZGVzZGUgYWZ1ZXJhIG5vcyBzZXRlYW4gdW5hIGhvamEgdsOhbGlkYSwgdGFtYmnDqW4gbGEgcmVjb3JkYW1vc1xyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdHNldFRyZWUodHJlZSkge1xyXG5cdFx0dGhpcy50cmVlID0gdHJlZSB8fCB7fTtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRzZXRGb2N1cyh7IGZvY3VzZWQsIGZvY3VzUGF0aCwgZm9jdXNMZXZlbCB9KSB7XHJcblx0XHRpZiAodHlwZW9mIGZvY3VzZWQgPT09IFwiYm9vbGVhblwiKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuXHRcdGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gXCJudW1iZXJcIikgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRfbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpIHtcclxuXHRcdC8vIFNpIHZhbHVlIGFwdW50YSBhIHBhZHJlK2hvamEgKOKApixbbGVhZl0pIHkgZXMgdsOhbGlkYSwgcmVjb3JkYXIgZXNhIGhvamFcclxuXHRcdGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLnZhbHVlLmxlbmd0aCAtIDEpO1xyXG5cdFx0Y29uc3QgbGVhZiA9IHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdGNvbnN0IGluZm8gPSB0aGlzLmdldE5vZGVBdFBhdGgocGFyZW50KTtcclxuXHRcdGlmIChpbmZvICYmIEFycmF5LmlzQXJyYXkoaW5mby5ub2RlKSAmJiBpbmZvLm5vZGUuaW5jbHVkZXMobGVhZikpIHtcclxuXHRcdFx0dGhpcy5sYXN0TGVhZiA9IHsgcGFyZW50UGF0aDogcGFyZW50LCBrZXk6IGxlYWYgfTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUHVibGljYWNpw7NuIGRlIGFsdHVyYSA9PT09PT09XHJcblx0X2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKSB7XHJcblx0XHRsZXQgYyA9IDA7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgaSsrKVxyXG5cdFx0XHRpZiAodGhpcy5sZXZlbHNbaV0udHlwZSA9PT0gXCJtYXBcIikgYysrO1xyXG5cdFx0cmV0dXJuIGM7XHJcblx0fVxyXG5cclxuXHRfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcblx0XHRjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcblx0XHRyZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09IFwibGlzdFwiID8gbGFzdC5pdGVtcy5sZW5ndGggOiAwO1xyXG5cdH1cclxuXHJcblx0X3B1Ymxpc2hIZWlnaHQoKSB7XHJcblx0XHRjb25zdCBpbnRlciA9IHRoaXMuX2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKTtcclxuXHRcdGNvbnN0IGxlYWZMZW4gPSBNYXRoLm1heCh0aGlzLmxlYWZNYXgsIHRoaXMuX2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkpO1xyXG5cdFx0Y29uc3QgbGVhZkggPSBsZWFmTGVuICogdGhpcy5saW5lSDtcclxuXHRcdGNvbnN0IGludGVySCA9IGludGVyICogKHRoaXMubGluZUggKyB0aGlzLmxldmVsR2FwKTtcclxuXHRcdGNvbnN0IHRvdGFsSCA9IGludGVyID8gaW50ZXJIICsgdGhpcy5sZXZlbEdhcCArIGxlYWZIIDogbGVhZkg7XHJcblxyXG5cdFx0Ly8gTm9ybWFsaXphbW9zIGEgcHggZW50ZXJvcyBwYXJhIGV2aXRhciBqaXR0ZXIgcG9yIHJlZG9uZGVvXHJcblx0XHRjb25zdCBuZXdIID0gTWF0aC5mbG9vcih0b3RhbEgpO1xyXG5cclxuXHRcdC8vIEFjdHVhbGl6YW1vcyBtw6l0cmljYXMgbG9jYWxlcyBzaWVtcHJlXHJcblx0XHR0aGlzLmggPSBuZXdIO1xyXG5cdFx0dGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gU29sbyBhdmlzYW1vcyBhbCBHVUkgc2kgbGEgYWx0dXJhIGNhbWJpw7NcclxuXHRcdGlmIChuZXdIICE9PSB0aGlzLl9sYXN0UHVibGlzaGVkSCkge1xyXG5cdFx0XHR0aGlzLl9sYXN0UHVibGlzaGVkSCA9IG5ld0g7XHJcblx0XHRcdFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG5cdFx0XHRpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiXHJcbmltcG9ydCB7IEJvb2wgfSBmcm9tICcuLi9wcm90by9Cb29sLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vcHJvdG8vQnV0dG9uLmpzJztcclxuaW1wb3J0IHsgQ2lyY3VsYXIgfSBmcm9tICcuLi9wcm90by9DaXJjdWxhci5qcyc7XHJcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnLi4vcHJvdG8vQ29sb3IuanMnO1xyXG5pbXBvcnQgeyBGcHMgfSBmcm9tICcuLi9wcm90by9GcHMuanMnO1xyXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL3Byb3RvL0dyYXBoLmpzJztcclxuaW1wb3J0IHsgR3JvdXAgIH0gZnJvbSAnLi4vcHJvdG8vR3JvdXAuanMnO1xyXG5pbXBvcnQgeyBKb3lzdGljayB9IGZyb20gJy4uL3Byb3RvL0pveXN0aWNrLmpzJztcclxuaW1wb3J0IHsgS25vYiB9IGZyb20gJy4uL3Byb3RvL0tub2IuanMnO1xyXG5pbXBvcnQgeyBMaXN0IH0gZnJvbSAnLi4vcHJvdG8vTGlzdC5qcyc7XHJcbmltcG9ydCB7IE51bWVyaWMgfSBmcm9tICcuLi9wcm90by9OdW1lcmljLmpzJztcclxuaW1wb3J0IHsgU2xpZGUgfSBmcm9tICcuLi9wcm90by9TbGlkZS5qcyc7XHJcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gJy4uL3Byb3RvL1RleHRJbnB1dC5qcyc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vcHJvdG8vVGl0bGUuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuLi9wcm90by9TZWxlY3QuanMnO1xyXG5pbXBvcnQgeyBCaXRtYXAgfSBmcm9tICcuLi9wcm90by9CaXRtYXAuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdG9yLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuLi9wcm90by9FbXB0eS5qcyc7XHJcbmltcG9ydCB7IEl0ZW0gfSBmcm9tICcuLi9wcm90by9JdGVtLmpzJztcclxuaW1wb3J0IHsgR3JpZCB9IGZyb20gJy4uL3Byb3RvL0dyaWQuanMnO1xyXG5pbXBvcnQgeyBQYWQyRCB9IGZyb20gJy4uL3Byb3RvL1BhZDJELmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgVHJlZUxpc3QgfSBmcm9tICcuLi9wcm90by9UcmVlTGlzdC5qcyc7XHJcblxyXG5leHBvcnQgY29uc3QgYWRkID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGFyZ3VtZW50czsgXHJcblxyXG4gICAgICAgIGxldCB0eXBlLCBvLCByZWYgPSBmYWxzZSwgbiA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVswXSA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgICAgICB0eXBlID0gYVswXTtcclxuICAgICAgICAgICAgbyA9IGFbMV0gfHwge307XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBhWzBdID09PSAnb2JqZWN0JyApeyAvLyBsaWtlIGRhdCBndWlcclxuXHJcbiAgICAgICAgICAgIHJlZiA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoYSwge30pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzJdLnR5cGUgPyBhWzJdLnR5cGUgOiBhdXRvVHlwZSggYVswXVthWzFdXSwgYVsyXSApO1xyXG5cclxuICAgICAgICAgICAgbyA9IGFbMl07XHJcbiAgICAgICAgICAgIG8ubmFtZSA9IGFbMV07XHJcbiAgICAgICAgICAgIGlmIChvLmhhc093blByb3BlcnR5KFwiZGlzcGxheU5hbWVcIikpIG8ubmFtZSA9IG8uZGlzcGxheU5hbWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ2xpc3QnICYmICFvLmxpc3QgKXsgby5saXN0ID0gYVswXVthWzFdXTsgfVxyXG4gICAgICAgICAgICBlbHNlIG8udmFsdWUgPSBhWzBdW2FbMV1dO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2dyb3VwJyApeyBcclxuICAgICAgICAgICAgby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIC8vby5keCA9IDhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCggbmFtZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnYm9vbCc6IGNhc2UgJ2Jvb2xlYW4nOiBuID0gbmV3IEJvb2wobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdidXR0b24nOiBuID0gbmV3IEJ1dHRvbihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NpcmN1bGFyJzogbiA9IG5ldyBDaXJjdWxhcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzogbiA9IG5ldyBDb2xvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Zwcyc6IG4gPSBuZXcgRnBzKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JhcGgnOiBuID0gbmV3IEdyYXBoKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOiBuID0gbmV3IEdyb3VwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnam95c3RpY2snOiBuID0gbmV3IEpveXN0aWNrKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAna25vYic6IG4gPSBuZXcgS25vYihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xpc3QnOiBuID0gbmV3IExpc3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdudW1lcmljJzogY2FzZSAnbnVtYmVyJzogbiA9IG5ldyBOdW1lcmljKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2xpZGUnOiBuID0gbmV3IFNsaWRlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGV4dElucHV0JzogY2FzZSAnc3RyaW5nJzogbiA9IG5ldyBUZXh0SW5wdXQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6IGNhc2UgJ3RleHQnOiBuID0gbmV3IFRpdGxlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzogbiA9IG5ldyBTZWxlY3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdiaXRtYXAnOiBuID0gbmV3IEJpdG1hcChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdG9yJzogbiA9IG5ldyBTZWxlY3RvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzogY2FzZSAnc3BhY2UnOiBuID0gbmV3IEVtcHR5KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaXRlbSc6IG4gPSBuZXcgSXRlbShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyaWQnOiBuID0gbmV3IEdyaWQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwYWQyZCc6IGNhc2UgJ3BhZCc6IG4gPSBuZXcgUGFkMkQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0cmVlbGlzdCc6IG4gPSBuZXcgVHJlZUxpc3Qobyk7IGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggbiAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGlmKCByZWYgKSBuLnNldFJlZmVyZW5jeSggYVswXSwgYVsxXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gbjtcclxuXHJcbiAgICAgICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGF1dG9UeXBlID0gZnVuY3Rpb24gKCB2LCBvICkge1xyXG5cclxuICAgIGxldCB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIGlmKCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkgdHlwZSA9ICdib29sJyBcclxuICAgIGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgaWYoIHYuc3Vic3RyaW5nKDAsMSkgPT09ICcjJyApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3N0cmluZycgXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ251bWJlcicgKXsgXHJcblxyXG4gICAgICAgIGlmKCBvLmN0eXBlICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ2FycmF5JyAmJiB2IGluc3RhbmNlb2YgQXJyYXkgKXtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB2WzBdID09PSAnbnVtYmVyJyApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgaWYoIHR5cGVvZiB2WzBdID09PSAnc3RyaW5nJyApIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcblxyXG4gICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHlwZVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBhZGQgfSBmcm9tIFwiLi9hZGQuanNcIjtcclxuaW1wb3J0IHsgVjIgfSBmcm9tIFwiLi9WMi5qc1wiO1xyXG5cclxuLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIEd1aSB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICB0aGlzLmlzR3VpID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBcImd1aVwiO1xyXG5cclxuICAgIC8vIGZvciAzZFxyXG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xyXG4gICAgdGhpcy5zY3JlZW4gPSBudWxsO1xyXG4gICAgdGhpcy5wbGFuZSA9IG8ucGxhbmUgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjb2xvclxyXG4gICAgaWYgKG8uY29uZmlnKSBvLmNvbG9ycyA9IG8uY29uZmlnO1xyXG4gICAgaWYgKG8uY29sb3JzKSB0aGlzLnNldENvbmZpZyhvLmNvbG9ycyk7XHJcbiAgICBlbHNlIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcblxyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMuY3NzID0gVG9vbHMuY2xvbmVDc3MoKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG4gICAgdGhpcy50bXBBZGQgPSBudWxsO1xyXG4gICAgLy90aGlzLnRtcEggPSAwXHJcblxyXG4gICAgdGhpcy5pc0NhbnZhcyA9IG8uaXNDYW52YXMgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIE1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIC8vIG9wdGlvbiB0byBkZWZpbmUgd2hldGhlciB0aGUgZXZlbnQgbGlzdGVuZXJzIHNob3VsZCBiZSBhZGRlZCBvciBub3RcclxuICAgIFJvb3RzLmFkZERPTUV2ZW50TGlzdGVuZXJzID0gby5oYXNPd25Qcm9wZXJ0eShcImFkZERPTUV2ZW50TGlzdGVuZXJzXCIpXHJcbiAgICAgID8gby5hZGRET01FdmVudExpc3RlbmVyc1xyXG4gICAgICA6IHRydWU7XHJcblxyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG5cclxuICAgIHRoaXMuZm9yY2VIZWlnaHQgPSBvLm1heEhlaWdodCB8fCAwO1xyXG4gICAgdGhpcy5sb2NrSGVpZ2h0ID0gby5sb2NrSGVpZ2h0IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNJdGVtTW9kZSA9IG8uaXRlbU1vZGUgIT09IHVuZGVmaW5lZCA/IG8uaXRlbU1vZGUgOiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmNuID0gXCJcIjtcclxuXHJcbiAgICAvLyBzaXplIGRlZmluZVxyXG4gICAgdGhpcy5zaXplID0gVG9vbHMuc2l6ZTtcclxuICAgIGlmIChvLnAgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnAgPSBvLnA7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS53ID0gby53O1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUuaCA9IG8uaDtcclxuICAgIGlmIChvLnMgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnMgPSBvLnM7XHJcblxyXG4gICAgdGhpcy5zaXplLmggPSB0aGlzLnNpemUuaCA8IDExID8gMTEgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICAvLyBsb2NhbCBtb3VzZSBhbmQgem9uZVxyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG4gICAgdGhpcy56b25lID0geyB4OiAwLCB5OiAwLCB3OiB0aGlzLnNpemUudywgaDogMCB9O1xyXG5cclxuICAgIC8vIHZpcnR1YWwgbW91c2VcclxuICAgIHRoaXMubW91c2UgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmggPSAwO1xyXG4gICAgLy90aGlzLnByZXZZID0gLTE7XHJcbiAgICB0aGlzLnN3ID0gMDtcclxuXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICAvLyBib3R0b20gYW5kIGNsb3NlIGhlaWdodFxyXG4gICAgdGhpcy5pc1dpdGhDbG9zZSA9IG8uY2xvc2UgIT09IHVuZGVmaW5lZCA/IG8uY2xvc2UgOiB0cnVlO1xyXG4gICAgdGhpcy5iaCA9ICF0aGlzLmlzV2l0aENsb3NlID8gMCA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG8uYXV0b1Jlc2l6ZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG8uYXV0b1Jlc2l6ZTtcclxuXHJcbiAgICAvLyBkZWZhdWx0IHBvc2l0aW9uXHJcbiAgICB0aGlzLmlzQ2VudGVyID0gby5jZW50ZXIgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmNzc0d1aSA9XHJcbiAgICAgIG8uY3NzICE9PSB1bmRlZmluZWQgPyBvLmNzcyA6IHRoaXMuaXNDZW50ZXIgPyBcIlwiIDogXCJyaWdodDoxMHB4O1wiO1xyXG5cclxuICAgIHRoaXMuaXNPcGVuID0gby5vcGVuICE9PSB1bmRlZmluZWQgPyBvLm9wZW4gOiB0cnVlO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmRlY2FsID0gMDtcclxuICAgIHRoaXMucmF0aW8gPSAxO1xyXG4gICAgdGhpcy5veSA9IDA7XHJcblxyXG4gICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIHRoaXMuY29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiIHdpZHRoOjBweDsgaGVpZ2h0OmF1dG87IHRvcDowcHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmNvbnRlbnQgK1xyXG4gICAgICAgIFwiOyBcIiArXHJcbiAgICAgICAgdGhpcy5jc3NHdWlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyB0aGlzLmNzcy5idXR0b24gKyAnd2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyQ29udGVudCk7XHJcblxyXG4gICAgLy90aGlzLmlubmVyID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyAnKVxyXG4gICAgdGhpcy51c2VGbGV4ID0gdHJ1ZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/IFwiZGlzcGxheTpmbGV4OyBmbGV4LWZsb3c6IHJvdyB3cmFwO1wiIDogXCJcIjsgLy8nIGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnN0YXJ0OyBhbGlnbi1pdGVtczpzdGFydDtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYWxpZ24taXRlbXM6IGNlbnRlcjsnO1xyXG4gICAgdGhpcy5pbm5lciA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwid2lkdGg6MTAwJTsgbGVmdDowOyBcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuaW5uZXJDb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXIpO1xyXG5cclxuICAgIC8vIHNjcm9sbFxyXG4gICAgdGhpcy5zY3JvbGxCRyA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwicmlnaHQ6MDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSAxKSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7IGRpc3BsYXk6bm9uZTsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYmFja2dyb3VuZCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxCRyk7XHJcblxyXG4gICAgdGhpcy5zY3JvbGwgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJ1dHRvbiArXHJcbiAgICAgICAgXCI7IHJpZ2h0OjJweDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSA0KSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLnNjcm9sbEJHLmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsKTtcclxuXHJcbiAgICAvLyBib3R0b20gYnV0dG9uXHJcbiAgICB0aGlzLmJvdHRvbVRleHQgPSBvLmJvdHRvbVRleHQgfHwgW1wib3BlblwiLCBcImNsb3NlXCJdO1xyXG5cclxuICAgIGxldCByID0gY2MucmFkaXVzO1xyXG4gICAgdGhpcy5ib3R0b20gPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dCArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6YXV0bzsgYm90dG9tOjA7IGxlZnQ6MDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGhlaWdodDpcIiArXHJcbiAgICAgICAgdGhpcy5iaCArXHJcbiAgICAgICAgXCJweDsgbGluZS1oZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmJoIC0gNSkgK1xyXG4gICAgICAgIFwicHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTsgLy8gYm9yZGVyLXRvcDoxcHggc29saWQgJytUb29scy5jb2xvcnMuc3Ryb2tlKyc7Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5ib3R0b20pO1xyXG4gICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIC8vXHJcblxyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnBhcmVudCAhPT0gdW5kZWZpbmVkID8gby5wYXJlbnQgOiBudWxsO1xyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnRhcmdldCAhPT0gdW5kZWZpbmVkID8gby50YXJnZXQgOiB0aGlzLnBhcmVudDtcclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgPT09IG51bGwgJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5wYXJlbnQgPSBkb2N1bWVudC5ib2R5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcyAmJiB0aGlzLnBhcmVudCA9PT0gbnVsbCkgdGhpcy5pc0NhbnZhc09ubHkgPSB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XHJcbiAgICAgIG8udHJhbnNpdGlvbiA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGVpZ2h0IHRyYW5zaXRpb25cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9XHJcbiAgICAgIG8udHJhbnNpdGlvbiAhPT0gdW5kZWZpbmVkID8gby50cmFuc2l0aW9uIDogVG9vbHMudHJhbnNpdGlvbjtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24pIHNldFRpbWVvdXQodGhpcy5hZGRUcmFuc2l0aW9uLmJpbmQodGhpcyksIDEwMDApO1xyXG5cclxuICAgIHRoaXMuc2V0V2lkdGgoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5tYWtlQ2FudmFzKCk7XHJcblxyXG4gICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlRG93bih4LCB5KSB7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcmRvd25cIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VNb3ZlKCkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJtb3ZlXCIsXHJcbiAgICAgIGNsaWVudFg6IC0xLFxyXG4gICAgICBjbGllbnRZOiAtMSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcCh4LCB5KSB7XHJcbiAgICAvKlxyXG5cclxuICAgICAgICBjbGllbnRYLGNsaWVudFkgYXJlIG5vIHVzZWQgd2hlbiBpc0NhbnZhcz09dHJ1ZVxyXG4gICAgICAgICovXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcnVwXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0VG9wKHQsIGgpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS50b3AgPSB0ICsgXCJweFwiO1xyXG4gICAgaWYgKGggIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JjZUhlaWdodCA9IGg7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFkZFRyYW5zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmJvdHRvbS5zdHlsZS50cmFuc2l0aW9uID0gXCJ0b3AgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgLy90aGlzLmJvdHRvbS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBSb290cy5yZXNpemUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uYWRkVHJhbnNpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkRyYXcoKSB7fVxyXG5cclxuICBtYWtlQ2FudmFzKCkge1xyXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXHJcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFxyXG4gICAgICBcImNhbnZhc1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLnpvbmUudztcclxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyggdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCApXHJcbiAgfVxyXG5cclxuICBkcmF3KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5jYW52YXMgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuem9uZS53O1xyXG4gICAgbGV0IGggPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG4gICAgUm9vdHMudG9DYW52YXModGhpcywgdywgaCwgZm9yY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vXHJcblxyXG4gIGdldERvbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBub01vdXNlKCkge1xyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICB9XHJcblxyXG4gIHNldE1vdXNlKHV2LCBmbGlwID0gdHJ1ZSkge1xyXG4gICAgaWYgKGZsaXApXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgLSBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICAvL3RoaXMubW91c2Uuc2V0KCBtLngsIG0ueSApO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJzZXRNb3VzZSBcIit1di54K1wiIFwiK3V2LnkpXHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcobykge1xyXG4gICAgLy8gcmVzZXQgdG8gZGVmYXVsdCB0ZXh0XHJcbiAgICBUb29scy5zZXRUZXh0KCk7XHJcbiAgICB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29sb3JzKG8pIHtcclxuICAgIGZvciAobGV0IGMgaW4gbykge1xyXG4gICAgICBpZiAodGhpcy5jb2xvcnNbY10pIHRoaXMuY29sb3JzW2NdID0gb1tjXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdykge1xyXG4gICAgVG9vbHMuc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KTtcclxuICB9XHJcblxyXG4gIGhpZGUoYikge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSBiID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheSh2ID0gZmFsc2UpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gdiA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIjtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKGYpIHtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBmIHx8IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNUWUxFU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW9kZShuKSB7XHJcbiAgICBsZXQgbmVlZENoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgaWYgKG4gIT09IHRoaXMuY24pIHtcclxuICAgICAgdGhpcy5jbiA9IG47XHJcblxyXG4gICAgICBzd2l0Y2ggKG4pIHtcclxuICAgICAgICBjYXNlIFwiZGVmXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ3Njcm9sbERlZic6IHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zY3JvbGw7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxPdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJucy1yZXNpemVcIik7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbERvd25cIjpcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdib3R0b21EZWYnOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImJvdHRvbU92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcInBvaW50ZXJcIik7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9jYXNlICdib3R0b21Eb3duJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNlbGVjdDsgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSAnIzAwMCc7IGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuZWVkQ2hhbmdlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmVlZENoYW5nZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFRBUkdFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2xlYXJUYXJnZXQoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50ID09PSAtMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHRoaXMucHJvdG8ucykge1xyXG4gICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuXHJcbiAgICAvLy9jb25zb2xlLmxvZyh0aGlzLmlzRG93bikvL2lmKHRoaXMuaXNEb3duKVJvb3RzLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSb290cy5jdXJzb3IoKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgWk9ORSBURVNUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0ZXN0Wm9uZShlKSB7XHJcbiAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICBpZiAobC54ID09PSAtMSAmJiBsLnkgPT09IC0xKSByZXR1cm4gXCJcIjtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IFwiXCI7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLmlzU2Nyb2xsID8gdGhpcy56b25lLncgLSB0aGlzLnNpemUucyA6IHRoaXMuem9uZS53O1xyXG5cclxuICAgIGlmIChsLnkgPiB0aGlzLnpvbmUuaCAtIHRoaXMuYmggJiYgbC55IDwgdGhpcy56b25lLmgpIG5hbWUgPSBcImJvdHRvbVwiO1xyXG4gICAgZWxzZSBuYW1lID0gbC54ID4gcyA/IFwic2Nyb2xsXCIgOiBcImNvbnRlbnRcIjtcclxuXHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgLy9pZiggdGhpcy5jbGVhbm5pbmcgKSByZXR1cm5cclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwiR3VpLmhhbmRsZUV2ZW50XCIpXHJcbiAgICAvL2NvbnNvbGUubG9nKGUpO1xyXG4gICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IHByb3RvQ2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcIm1vdXNldXBcIiAmJiB0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmICF0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzRG93biAmJiB0aGlzLmlzTmV3VGFyZ2V0KSB7XHJcbiAgICAgIFJvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuO1xyXG5cclxuICAgIHN3aXRjaCAobmFtZSkge1xyXG4gICAgICBjYXNlIFwiY29udGVudFwiOlxyXG4gICAgICAgIGUuY2xpZW50WSA9IHRoaXMuaXNTY3JvbGwgPyBlLmNsaWVudFkgKyB0aGlzLmRlY2FsIDogZS5jbGllbnRZO1xyXG5cclxuICAgICAgICBpZiAoUm9vdHMuaXNNb2JpbGUgJiYgdHlwZSA9PT0gXCJtb3VzZWRvd25cIikgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByb3RvKSBwcm90b0NoYW5nZSA9IHRoaXMucHJvdG8uaGFuZGxlRXZlbnQoZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIiAmJiAhcHJvdG9DaGFuZ2UgJiYgdGhpcy5pc1Njcm9sbClcclxuICAgICAgICAgIGNoYW5nZSA9IHRoaXMub25XaGVlbChlKTtcclxuXHJcbiAgICAgICAgaWYgKCFSb290cy5sb2NrKSB7XHJcbiAgICAgICAgICB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJib3R0b21PdmVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRoaXMuaXNPcGVuID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICAgICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICAgICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgICAgICAgIC8vdGhpcy5zZXRIZWlnaHQoKTtcclxuICAgICAgICAgIHRoaXMuY2FsYygpO1xyXG4gICAgICAgICAgdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwic2Nyb2xsXCI6XHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJzY3JvbGxPdmVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJzY3JvbGxEb3duXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIpIGNoYW5nZSA9IHRoaXMub25XaGVlbChlKTtcclxuICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMudXBkYXRlKGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy5zaCAqIDAuNSk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmIChwcm90b0NoYW5nZSkgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXl1cFwiKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmIChjaGFuZ2UpIHRoaXMuZHJhdygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV4dChlLCBjaGFuZ2UpIHtcclxuICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCh0aGlzLnVpcywgZSk7XHJcblxyXG4gICAgaWYgKG5leHQgIT09IHRoaXMuY3VycmVudCkge1xyXG4gICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLnByb3RvID0gdGhpcy51aXNbdGhpcy5jdXJyZW50XTtcclxuICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uV2hlZWwoZSkge1xyXG4gICAgdGhpcy5veSArPSAyMCAqIGUuZGVsdGE7XHJcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLm95KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHJlc2V0KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5pc1Jlc2V0KSByZXR1cm47XHJcblxyXG4gICAgLy90aGlzLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgIC8vUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgbGV0IHIgPSB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICBsZXQgcjIgPSB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcblxyXG4gICAgaWYgKHIgfHwgcjIpIHRoaXMuZHJhdyh0cnVlKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG5cclxuICAgIC8vUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQUREIE5PREVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGFkZCgpIHtcclxuICAgIC8vaWYodGhpcy5jbGVhbm5pbmcpIHRoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICBsZXQgYSA9IGFyZ3VtZW50cztcclxuICAgIGxldCBvbnRvcCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0eXBlb2YgYVsxXSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICBhWzFdLmlzVUkgPSB0cnVlO1xyXG4gICAgICBhWzFdLm1haW4gPSB0aGlzO1xyXG5cclxuICAgICAgb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYVsxXSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBpZiAoYVsyXSA9PT0gdW5kZWZpbmVkKSBbXS5wdXNoLmNhbGwoYSwgeyBpc1VJOiB0cnVlLCBtYWluOiB0aGlzIH0pO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgIGFbMl0ubWFpbiA9IHRoaXM7XHJcbiAgICAgICAgLy9vbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgICAgb250b3AgPSBhWzJdLm9udG9wID8gYVsyXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHUgPSBhZGQuYXBwbHkodGhpcywgYSk7XHJcblxyXG4gICAgaWYgKHUgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBpZiAob250b3ApIHRoaXMudWlzLnVuc2hpZnQodSk7XHJcbiAgICBlbHNlIHRoaXMudWlzLnB1c2godSk7XHJcblxyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgdGhpcy5pc0VtcHR5ID0gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHU7XHJcbiAgfVxyXG5cclxuICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgcmVtb3ZlKG4pIHtcclxuICAgIGlmIChuLmRpc3Bvc2UpIG4uZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2FsbCBhZnRlciB1aXMgY2xlYXJcclxuXHJcbiAgY2xlYXJPbmUobikge1xyXG4gICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZihuKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIHtcclxuICAgICAgLy90aGlzLmNhbGMoIC0gKHRoaXMudWlzWyBpZCBdLmggKyAxICkgKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZCh0aGlzLnVpc1tpZF0uY1swXSk7XHJcbiAgICAgIHRoaXMudWlzLnNwbGljZShpZCwgMSk7XHJcbiAgICAgIHRoaXMuY2FsYygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gY2xlYXIgYWxsIGd1aVxyXG5cclxuICBlbXB0eSgpIHtcclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSB0cnVlXHJcblxyXG4gICAgLy90aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsXHJcbiAgICAgIGl0ZW07XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpdGVtID0gdGhpcy51aXMucG9wKCk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQoaXRlbS5jWzBdKTtcclxuICAgICAgaXRlbS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyKCkge1xyXG4gICAgdGhpcy5lbXB0eSgpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIyKCkge1xyXG4gICAgc2V0VGltZW91dCh0aGlzLmVtcHR5LmJpbmQodGhpcyksIDApO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5jb250ZW50KTtcclxuICAgIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElURU1TIFNQRUNJQUxcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHJlc2V0SXRlbSgpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5zZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbShuYW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIG5hbWUgPSBuYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZSgwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAodGhpcy51aXNbaV0udmFsdWUgPT09IG5hbWUpIHtcclxuICAgICAgICB0aGlzLnVpc1tpXS5zZWxlY3RlZCh0cnVlKTtcclxuICAgICAgICBpZiAodGhpcy5pc1Njcm9sbClcclxuICAgICAgICAgIHRoaXMudXBkYXRlKGkgKiAodGhpcy51aXNbaV0uaCArIHRoaXMubWFyZ2luKSAqIHRoaXMucmF0aW8pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTQ1JPTExcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHVwU2Nyb2xsKGIpIHtcclxuICAgIHRoaXMuc3cgPSBiID8gdGhpcy5zaXplLnMgOiAwO1xyXG4gICAgdGhpcy5veSA9IGIgPyB0aGlzLm95IDogMDtcclxuICAgIHRoaXMuc2Nyb2xsQkcuc3R5bGUuZGlzcGxheSA9IGIgPyBcImJsb2NrXCIgOiBcIm5vbmVcIjtcclxuXHJcbiAgICBpZiAoYikge1xyXG4gICAgICB0aGlzLnRvdGFsID0gdGhpcy5oO1xyXG5cclxuICAgICAgdGhpcy5tYXhWaWV3ID0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLnJhdGlvID0gdGhpcy5tYXhWaWV3IC8gdGhpcy50b3RhbDtcclxuICAgICAgdGhpcy5zaCA9IHRoaXMubWF4VmlldyAqIHRoaXMucmF0aW87XHJcblxyXG4gICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhWaWV3IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgIHRoaXMub3kgPSBUb29scy5jbGFtcCh0aGlzLm95LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICAgIHRoaXMuc2Nyb2xsQkcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhWaWV3ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLnNjcm9sbC5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLm95KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSh5KSB7XHJcbiAgICB5ID0gVG9vbHMuY2xhbXAoeSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgdGhpcy5kZWNhbCA9IE1hdGguZmxvb3IoeSAvIHRoaXMucmF0aW8pO1xyXG4gICAgdGhpcy5pbm5lci5zdHlsZS50b3AgPSAtdGhpcy5kZWNhbCArIFwicHhcIjtcclxuICAgIHRoaXMuc2Nyb2xsLnN0eWxlLnRvcCA9IE1hdGguZmxvb3IoeSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLm95ID0geTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0laRSBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpcygpIHtcclxuICAgIHJldHVybiBSb290cy5jYWxjVWlzKHRoaXMudWlzLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55KTtcclxuICB9XHJcblxyXG4gIGNhbGMoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG4gICAgdGhpcy50bXAgPSBzZXRUaW1lb3V0KHRoaXMuc2V0SGVpZ2h0LmJpbmQodGhpcyksIDEwKTtcclxuICB9XHJcblxyXG4gIHNldEhlaWdodCgpIHtcclxuICAgIGlmICh0aGlzLnRtcCkgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuXHJcbiAgICB0aGlzLnpvbmUuaCA9IHRoaXMuYmg7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHRoaXMuaCA9IHRoaXMuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbGV0IGhoaCA9IHRoaXMuZm9yY2VIZWlnaHRcclxuICAgICAgICA/IHRoaXMuZm9yY2VIZWlnaHQgKyB0aGlzLnpvbmUueVxyXG4gICAgICAgIDogd2luZG93LmlubmVySGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5tYXhIZWlnaHQgPSBoaGggLSB0aGlzLnpvbmUueSAtIHRoaXMuYmg7XHJcblxyXG4gICAgICBsZXQgZGlmZiA9IHRoaXMuaCAtIHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgaWYgKGRpZmYgPiAxKSB7XHJcbiAgICAgICAgdGhpcy5pc1Njcm9sbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLmJoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cFNjcm9sbCh0aGlzLmlzU2Nyb2xsKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCAtIHRoaXMuYmggKyBcInB4XCI7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggKyBcInB4XCI7XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS50b3AgPSB0aGlzLnpvbmUuaCAtIHRoaXMuYmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9yY2VIZWlnaHQgJiYgdGhpcy5sb2NrSGVpZ2h0KVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLmRyYXcodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNldFdpZHRoKHcpIHtcclxuICAgIGlmICh3KSB0aGlzLnpvbmUudyA9IHc7XHJcblxyXG4gICAgdGhpcy56b25lLncgPSBNYXRoLmZsb29yKHRoaXMuem9uZS53KTtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS53aWR0aCA9IHRoaXMuem9uZS53ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDZW50ZXIpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5tYXJnaW5MZWZ0ID0gLU1hdGguZmxvb3IodGhpcy56b25lLncgKiAwLjUpICsgXCJweFwiO1xyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW1XaWR0aCh3KSB7XHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdGhpcy51aXNbaV0uc2V0U2l6ZSh3KTtcclxuICAgICAgdGhpcy51aXNbaV0uclNpemUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztDQUFBO0NBQ0E7Q0FDQTtBQUNBO0FBQ1ksT0FBQyxRQUFRLEdBQUcsUUFBUTtBQUNoQztDQUNBO0FBQ0E7Q0FDQSxNQUFNLENBQUMsR0FBRztDQUNWLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDUjtDQUNBLEVBQUUsR0FBRyxFQUFFLElBQUk7QUFDWDtDQUNBLEVBQUUsRUFBRSxFQUFFLElBQUk7Q0FDVixFQUFFLElBQUksRUFBRSxL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LENBQUM7QUFDekM7Q0FDQTtDQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFO0NBQ3RCLFFBQVEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ3RCLFFBQVEsT0FBTyxLQUFLLENBQUM7Q0FDckIsT0FBTztBQUNQO0NBQ0EsTUFBTSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7Q0FDOUIsTUFBTSxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztDQUMxQixLQUFLO0FBQ0w7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDL0M7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUM5QyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDN0M7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFO0NBQ3ZCLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRTtDQUM3QixRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxD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QUFDO0NBQzdEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sR0FBRztDQUMxQyxRQUFRLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztDQUMxQixRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUc7Q0FDdEMsVUFBVSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUM7Q0FDakUsU0FBUztDQUNULFFBQVEsT0FBTyxRQUFRLENBQUM7Q0FDeEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7Q0FDOUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0NBQzNDLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzlCO0NBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzNCO0NBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDekI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDL0UsYUFBYSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7Q0FDekIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDekQsUUFBUSxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3hDLFFBQVEsT0FBTyxDQUFDLENBQUM7Q0FDakIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDekI7Q0FDQSxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzVFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDMUI7Q0FDQSxRQUFRLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pIO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7Q0FDdEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3JDLFFBQVEsT0FBTyxDQUFDLENBQUM7Q0FDakIsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwRCxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakM7Q0FDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RELFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztDQUNsQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQ2xFLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQ2pKLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFFLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0NBQ3ZCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7Q0FDM0QsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztDQUNqRSxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0NBQ2pFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNuQixTQUFTO0NBQ1QsUUFBUSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMzQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0M7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxQyxhQUFhO0NBQ2IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzNELFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzFCLFlBQVksT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztDQUN6RyxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksWUFBWSxFQUFFLFdBQVcsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHO0FBQzlEO0NBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hEO0NBQ0EsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRztDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksT0FBTyxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ2hDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFHO0NBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0NBQ3BKLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ25DLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvRixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckg7Q0FDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzdJLFFB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LENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN6SDtDQUNBO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDdEUsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7Q0FDQTtDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0NBQzFFLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzFFO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzSDtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDNUg7Q0FDQTtBQUNBO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDdEYsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDcEcsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0Y7Q0FDQSxZQUFZLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQy9CO0NBQ0EsU0FBUyxNQUFNO0NBQ2Y7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDNUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7Q0FDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLHdCQUF3QixFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNySSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FB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QUFJLENBQUMsSUFBSSxDQUFDLE1BQU07Q0FDNUIsVUFBVSxLQUFLLENBQUMsTUFBTTtDQUN0QixLQUFLLENBQUM7QUFDTjtDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUMzQztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzNCO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDakQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN4QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDMUQsU0FBUyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hCO0NBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0NBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2pEO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztBQUN2RDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztDQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7Q0FDbEMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO0FBQ3hDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7Q0FDcEMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0NBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztDQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFD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dkQ7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEUsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLE9BQU8sR0FBRztDQUNaLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEQ7Q0FDQSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO0NBQzlCLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN6RCxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM5QyxLQUFLLE1BQU07Q0FDWCxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM5QyxXQUFXLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoRCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkM7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ2xCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDbEIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztDQUN6QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDMUIsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUNaO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLFFBQVEsR0FBRztDQUNiLElBQUksSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNsQyxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3hCLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNkLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTztBQUNoQztDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEI7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUNyQixNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ2pDLEtBQUssTUFBTTtDQUNYLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZDO0NBQ0E7Q0FDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDbkMsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Q0FDN0MsS0FBSztDQUNMLEdBQUc7QUFDSDtDQUNBLEVBQUUsS0FBSyxHQUFHO0NBQ1YsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPO0NBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDcEQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUN2RCxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRTtDQUNuQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3pCO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztDQUNuQixJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7Q0FDL0IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztDQUNoRSxXQUFXLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUNoQyxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUN2RCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7Q0FDdEQsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pFO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNWO0NBQ0EsSUFBSSxRQUFRLElBQUksQ0FBQyxTQUFTO0NBQzFCLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2QsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDaEIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDakIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7Q0FDbEIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7Q0FDbkIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxPQUFPLENBQUM7Q0FDcEIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7Q0FDckIsUUFBUSxNQUFNO0NBQ2QsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQ2xELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzNDLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtD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QUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbkQsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDO0NBQ0EsU0FBUztBQUNUO0FBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtDQUNyRCxZQUFZLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRTtDQUNwRSxTQUFTO0NBQ1Q7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLEdBQUc7QUFDWjtDQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFFO0NBQ3hEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLENB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QUN2QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQ3JCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSTtDQUNsRDtDQUNBLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFDO0NBQzVELFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQjtDQUNBO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7Q0FDckUsU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRDtDQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0NBQy9DLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2hEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDcFBPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFLO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUM7Q0FDakMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUk7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBSztDQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDMUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFFO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFLO0NBQ2hDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsR0FBRTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRTtBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSTtDQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0NBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3BDO0NBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTTtDQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxTQUFRO0NBQ3JELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0NBQ3pCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFFO0FBQ3hCO0NBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFDO0NBQ3hCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQ3RCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0FBQ2xJO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFFO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0NBQ3pELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUMzRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUM1RjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNuQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztBQUMvQztDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07Q0FDNUIsUUFBUSxJQUFJLE1BQUs7QUFDakI7Q0FDQSxRQUFRLFFBQVEsSUFBSTtDQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDOUQsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDNUssZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDOUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNqRSxnQkFBZ0IsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVE7Q0FDL0ssZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0NBQ2pEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxPQUFPLENBQUM7Q0FDN0QsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztDQUMxRSxhQUFhLE9BQU8sVUFBVSxDQUFDO0FBQy9CO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN6QixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDOUIsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9EO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ2hDO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDekMsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEU7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNyQyxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvQztDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbkMsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztDQUM1QyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNyQyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLFVBQVUsR0FBRztDQUNsQztDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDckQ7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7Q0FDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN4RCxhQUFhLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztDQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3hELGFBQWE7Q0FDYjtDQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQztDQUNBLFlBQVksT0FBTyxJQUFJLENBQUM7Q0FDeEI7Q0FDQSxTQUFTO0NBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkIsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQ2xELFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QyxRQUFRLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNsRztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlEO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtDQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07Q0FDaEMsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO0NBQ2pKLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDekQ7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ2pPTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0FBQ25DO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUN0QjtDQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUM3QyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDO0FBQ0E7QUFDQTtDQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDO0NBQ2xDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzVDO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekI7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUM1QixLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUMzQixLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUN4QjtDQUNBLEtBQUssSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDekI7Q0FDQTtBQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFFO0NBQ3ZNO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN0QztDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFFO0NBQ3BDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLFNBQVE7QUFDM0M7Q0FDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSTtDQUNwQixLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBUztDQUMzQixLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7Q0FDaEMsU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFFO0NBQzlFLGNBQWMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUU7Q0FDekUsY0FBYyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFLO0NBQ2xDLE1BQU07QUFDTjtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0NBQ3ZCLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0NBQ3hCLEtBQUssSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFLO0FBQzFCO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztBQUNwQztDQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFFO0NBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RDO0NBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUM7Q0FDakIsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDakI7Q0FDQSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDaEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUNoQztDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQzNDO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHO0FBQ3JCO0NBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztDQUNwQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUMxQztDQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7Q0FDQSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sT0FBTztDQUN4QyxXQUFXLE9BQU8sT0FBTztBQUN6QjtDQUNBLEdBQUcsTUFBTTtBQUNUO0NBQ0EsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxPQUFPO0NBQzFDLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sT0FBTztBQUMzQztDQUNBLEdBQUc7QUFDSDtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDekIsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsQjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0E7Q0FDQSxFQUFFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkQ7QUFDQTtDQUNBO0NBQ0EsRUFBRSxHQUFHLElBQUksS0FBSyxPQUFPLENBQUM7Q0FDdEIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDbEMsY0FBYyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDM0IsU0FBUyxPQUFPLElBQUksQ0FBQztDQUNyQixHQUFHO0FBQ0g7QUFDQTtDQUNBLEVBQUUsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQ3hCO0NBQ0EsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztDQUN0QixHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSTtDQUN2QixHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDdkIsR0FBRztDQUNILEVBQUU7QUFDRjtDQUNBLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0EsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3REO0NBQ0EsS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDekQ7Q0FDQSxLQUFLLElBQUksSUFBSSxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ25EO0NBQ0EsS0FBSyxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDM0I7Q0FDQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3hCLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNwRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUNoRixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUNqQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDcEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzdCO0FBQ0E7Q0FDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0NBQzlDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRTtBQUMzQztDQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3ZCO0NBQ0EsT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Q0FDMUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0NBQzlCLFFBQVE7QUFDUjtDQUNBLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRztBQUMzQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUc7QUFDaEM7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDNUMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDckMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FO0NBQ0EsU0FBUyxNQUFNO0FBQ2Y7Q0FDQSxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDaEMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hDO0NBQ0EsU0FBUyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzlDLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNuQztDQUNBLFNBQVMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDakMsU0FBUyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3JDO0NBQ0EsU0FBUyxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDL0QsU0FBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztDQUNoRCxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUU7Q0FDN0IsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ2xDLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3BDLFNBQVMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7Q0FDQSxTQUFTLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRztDQUN4QixPQUFPLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDdkMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQ3hDLGVBQWUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Q0FDbkQ7Q0FDQSxPQUFPLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0NBQ0EsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQ3hELE9BQU8sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMvQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5QixPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN2QyxPQUFPO0FBQ1A7Q0FDQSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7Q0FDcEQ7Q0FDQSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUM1QyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNFLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNqQztDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQ7Q0FDQSxTQUFTO0NBQ1QsS0FBSztDQUNMLElBQUk7Q0FDSixHQUFHO0FBQ0g7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQTtBQUNBO0NBQ0EsQ0FBQyxTQUFTLENBQUMsR0FBRztBQUNkO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztDQUNqRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtDQUNsQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDbEQsVUFBVSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDL0M7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLElBQUksQ0FBQyxHQUFHO0FBQ1Q7Q0FDQSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNmO0NBQ0EsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM5QztDQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCO0NBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7Q0FDdEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQ1Y7Q0FDQSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNoQjtDQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0NBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7Q0FDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDO0NBQ3RDO0NBQ0EsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0I7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNmO0NBQ0EsS0FBSyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEU7Q0FDQSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztDQUN4QjtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDaEQ7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDeEMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuRCxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyRDtDQUNBLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPO0FBQ3BCO0NBQ0EsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3hELEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDdkUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztDQUMzRSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdDO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDZjtDQUNBLEVBQUUsSUFBSSxDQUFDLFlBQVksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1RCxhQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdELGFBQWEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUM3QixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3BCO0NBQ0EsS0FBSyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3RDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxNQUFNLEVBQUU7QUFDMUM7Q0FDQSxTQUFTLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztDQUM1QixTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTTtDQUMxQixTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQzlDO0NBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEM7Q0FDQSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUN2QixNQUFNO0NBQ04sS0FBSyxPQUFPLElBQUksQ0FBQztBQUNqQjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0NBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUN0QyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDOUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ3pCLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFdBQVcsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRTtDQUNqQixFQUFFLElBQUksQ0FBQyxHQUFHLE1BQUs7QUFDZjtDQUNBLEtBQWMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTztDQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUNuQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtDQUNBLEtBQUssSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzFDO0NBQ0EsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN0QjtDQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDM0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzVCLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDN0MsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN0QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDN0MsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDO0NBQ0EsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEM7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEU7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1QztDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FB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RSxDQUFDO0NBQzFDLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMxRSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xDLFlBQVksQ0FBQyxFQUFFLENBQUM7QUFDaEI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLEtBQUssQ0FBQyxJQUFJLEdBQUU7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztDQUNsRSxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLENB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QUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0M7Q0FDQSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDdEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNyQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUN0RixjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQzdEO0NBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUg7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7Q0FDckMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQztDQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDO0NBQzlDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUk7Q0FDOUMsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztDQUNyQyxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQzNDLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FB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QyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDOUcsYUFBYSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ2pDLGFBQWE7QUFDYjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRTtDQUNyQztBQUNBO0NBQ0EsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyQztDQUNBLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBQztDQUM1QyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFHO0NBQzFCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRTtB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QUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLDRDQUE0QyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUM7Q0FDNUgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQzVLO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFJO0NBQzFEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFBQztBQUMxSTtDQUNBLFFBQWdCLElBQUksQ0FBQyxFQUFFO0NBQ3ZCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBTztBQUNoQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUU7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJ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WUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0NBQzNELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtBQUNuQztDQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztDQUNuRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87QUFDcEU7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87Q0FDL0QsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztDQUNwQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyx5QkFBd0I7QUFDdEU7Q0FDQSxTQUFTO0NBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDM0I7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFFO0FBQ25EO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQzNCO0NBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMs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RyxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Q0FDOUMsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7QUFDcEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzlCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzQztDQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUM1RSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUU7Q0FDQSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdkU7Q0FDQSxhQUFhO0FBQ2I7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzdCO0FBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDcEQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0NBQ2xFLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRTtDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUM1QjtDQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM3RCxTQUFTLE1BQU07Q0FDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVELFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDeEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUMzRixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFB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RyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7Q0FDakQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxPQUFPLENBQUM7Q0FDN0QsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztDQUMxRSxhQUFhLE9BQU8sTUFBTSxDQUFDO0FBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFFO0NBQ3RCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7Q0FDMUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFLO0NBQzdCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFJO0NBQ3hCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUU7Q0FDM0IsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZELFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RDtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDdEMsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDNUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzVDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0NBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztDQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUMvQixTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHO0NBQzlCO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUNyRDtDQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztDQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0NBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDeEQsYUFBYTtDQUNiO0NBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztDQUN4QjtDQUNBLFNBQVM7Q0FDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3pELFFBQVEsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQzVDLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQzFDO0FBQ0E7Q0FDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsWUFBWSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQzVDLFlBQVksSUFBSSxHQUFHLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxLQUFLLENBQUM7Q0FDckQsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNyRCxZQUFZLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQzFCLFNBQVM7QUFDVDtDQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRztBQUMzQztDQUNBLFlBQVksQ0FBQyxHQUFHLFVBQVUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7Q0FDMUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQy9DLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUMvQyxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDaEQsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ2hELFlBQVksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQzlEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVEO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDcEMsUUFBUSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNyRTtDQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztDQUNqQyxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDakM7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDcEMsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDckY7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7Q0FDQSxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ25DLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNwQyxZQUFZLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqSTtDQUNBLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO0NBQ25LLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDekQ7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ2xRTyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUM7QUFDaEM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFLO0FBQ2hDO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDakMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0NBQ3JDO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUN6RCxRQUFRLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUM1QztBQUNBO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztBQUN0QztDQUNBO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEdBQUU7Q0FDbkMsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztDQUN2QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksTUFBSztDQUMzQyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxNQUFLO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFRO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFNO0NBQzVELFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxXQUFVO0FBQ3pFO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0E7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FB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QUcsSUFBSSxDQUFDO0NBQ3JELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztDQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2xEO0NBQ0EsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDcEQsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDZDQUE2QyxDQUFDLENBQUM7Q0FDdkcsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDbEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDN0MsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Q0FDbkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7Q0FDbkMsWUFBWSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJ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QUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDeEQsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDeEQsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtDQUNBLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzVCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJ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QUFHLE1BQUs7Q0FDdEMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSTtDQUNoRCxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFJO0NBQ2xELFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUk7Q0FDM0MsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBQztDQUMzQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0NBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUU7Q0FDNUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSTtDQUN6QyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFJO0FBQ3pDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUU7Q0FDbkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztBQUN4QjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxLQUFJO0FBQ3RDO0NBQ0EsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFNBQVMs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LElBQUksUUFBUSxJQUFJO0NBQ2hCLE1BQU0sS0FBSyxDQUFDO0NBQ1o7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUM3QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQ3hELFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1o7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUNqQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUN0QyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzVELFFBQVEsTUFBTTtDQUNkLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7Q0FDYixJQUFJLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUQ7Q0FDQSxJQUFJLElBQUksT0FBTztDQUNmLE1BQU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUU7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztDQUMzQztBQUNBO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDdEQsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM1RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDakU7Q0FDQSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUN4QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLEtBQUssR0FBRztDQUNWLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xCO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDOUIsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEI7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDckIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJ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Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLGlEQUFpRCxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdEo7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7QUFDM0I7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzdDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0NBQ2hEO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDO0FBQ2pEO0FBQ0E7Q0FDQSxRQUFRLElB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LENBQUMsS0FBSyxHQUFFO0NBQzVMLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7Q0FDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDdkw7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBQztBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7Q0FDakQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sTUFBTSxDQUFDO0NBQzlELFFBQVEsT0FBTyxHQUFHO0FBQ2xCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJ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SSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEw7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0I7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzlDO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxD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LElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Q0FDbEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2RDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNuRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztDQUNBO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3JFO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxF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QUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFFO0NBQzFELFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDekU7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQy9CO0NBQ0EsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0NBQ2xCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNsQjtDQUNBLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0NBQ3ZELFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3ZEO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUNqQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsUUFBUSxJQUFJO0NBQ3BCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDMUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7Q0FDM0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUM7Q0FDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7Q0FDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7Q0FDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDOUQ7Q0FDQSxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztDQUNoRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRTtDQUNwRTtDQUNBLFlBQVksTUFBTTtDQUNsQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHO0FBQy9CO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3REO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFNO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUN4RSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRztBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDdkcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFFO0FBQ3BIO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMxQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBOztDQ3JSQTtBQUlBO0NBQ08sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0NBQ3BDLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Q0FDckI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0NBQ3RCLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQztBQUNoQztDQUNBLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ1gsRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDO0FBQzdDO0NBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxJQUFJ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R0FBRyxJQUFJLENBQUMsQ0FBQztDQUN4QyxFQUFFLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztDQUNyQixFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDOUM7Q0FDQSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaO0NBQ0E7Q0FDQSxFQUFFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0NBQ2xELEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDMUIsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNsRSxHQUFHLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Q0FDcEMsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzNELEdBQUc7Q0FDSCxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzVDO0NBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDL0MsR0FBRyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlCLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtDQUMzQixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDNUMsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUNwQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNwRCxJQUFJLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztDQUNyQixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUMvQyxLQUFLLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0IsS0FBSyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDakQsS0FBSyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMxQyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0NBQzdDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztDQUNoQixLQUFLO0NBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDeEMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQ3BDLElBQUksTUFBTTtD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O0NBQ0EsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM1QixFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzNCLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDN0IsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEM7Q0FDQTtDQUNBLEVBQUUsR0FBRyxDQUFDLFdBQVcsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDM0M7Q0FDQTtDQUNBLEVBQUUsTUFBTSxRQUFRO0NBQ2hCLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztDQUNyRSxFQUFFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUM7Q0FDM0QsRUFBRSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztDQUMxRSxFQUFFLE1BQU0sT0FBTztDQUNmLEdBQUcsSUFBSSxDQUFDLFdBQVc7Q0FDbkIsR0FBRyxNQUFNO0NBQ1QsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDO0NBQ3pCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQSxFQUFFLElBQUksVUFBVSxHQUFHLEtB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QUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDZjtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxV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QUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFO0NBQ1gsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUI7Q0FDQSxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQztDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDN0MsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7Q0FDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7Q0FDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztDQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNoRCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDekIsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0NBQ1os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QUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM1RSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzdDLEdBQUc7QUFDSDtDQUNBLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRTtDQUNsQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0NBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNoQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMxQixLQUFLO0NBQ0wsR0FBRztDQUNIOzs7Ozs7Ozs7Ozs7OzsifQ== diff --git a/build/uil.min.js b/build/uil.min.js index cc88dcc..b77d4fd 100644 --- a/build/uil.min.js +++ b/build/uil.min.js @@ -8826,781 +8826,785 @@ */ class Gui { - constructor(o = {}) { - this.isGui = true; + constructor(o = {}) { + this.isGui = true; - this.name = "gui"; + this.name = "gui"; - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors); - else this.colors = Tools.defineColor(o); + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); - //this.cleanning = false + //this.cleanning = false - // style - this.css = Tools.cloneCss(); + // style + this.css = Tools.cloneCss(); - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") - ? o.addDOMEventListeners - : true; + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; - this.callback = o.callback === undefined ? null : o.callback; + this.callback = o.callback === undefined ? null : o.callback; - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - this.cn = ""; + this.cn = ""; - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; - this.size.h = this.size.h < 11 ? 11 : this.size.h; + this.size.h = this.size.h < 11 ? 11 : this.size.h; - // local mouse and zone - this.local = new V2().neg(); - this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; - // virtual mouse - this.mouse = new V2().neg(); + // virtual mouse + this.mouse = new V2().neg(); - this.h = 0; - //this.prevY = -1; - this.sw = 0; + this.h = 0; + //this.prevY = -1; + this.sw = 0; - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; - this.autoResize = o.autoResize === undefined ? true : o.autoResize; + this.autoResize = o.autoResize === undefined ? true : o.autoResize; - // default position - this.isCenter = o.center || false; - this.cssGui = - o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; - this.isNewTarget = false; + this.isNewTarget = false; - let cc = this.colors; - - this.content = Tools.dom( - "div", - this.css.basic + - " width:0px; height:auto; top:0px; background:" + - cc.content + - "; " + - this.cssGui - ); - - this.innerContent = Tools.dom( - "div", - this.css.basic + - "width:100%; top:0; left:0; height:auto; overflow:hidden;" - ); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); + let cc = this.colors; - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom( - "div", - this.css.basic + flexible + "width:100%; left:0; " - ); - this.innerContent.appendChild(this.inner); - - // scroll - this.scrollBG = Tools.dom( - "div", - this.css.basic + - "right:0; top:0; width:" + - (this.size.s - 1) + - "px; height:10px; display:none; background:" + - cc.background + - ";" - ); - this.content.appendChild(this.scrollBG); + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); - this.scroll = Tools.dom( - "div", - this.css.basic + - "background:" + - cc.button + - "; right:2px; top:0; width:" + - (this.size.s - 4) + - "px; height:10px;" - ); - this.scrollBG.appendChild(this.scroll); + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); - let r = cc.radius; - this.bottom = Tools.dom( - "div", - this.css.txt + - "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + - r + - "px; border-bottom-left-radius:" + - r + - "px; justify-content:center; height:" + - this.bh + - "px; line-height:" + - (this.bh - 5) + - "px; color:" + - cc.text + - ";" - ); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - this.bottom.style.background = cc.background; + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); - // + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } - if (this.parent !== null) this.parent.appendChild(this.content); + if (this.parent !== null) this.parent.appendChild(this.content); - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } - // height transition - this.transition = - o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - this.setWidth(); + this.setWidth(); - if (this.isCanvas) this.makeCanvas(); + if (this.isCanvas) this.makeCanvas(); - Roots.add(this); - } + Roots.add(this); + } - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN, - }); - } + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + }); + } - triggerMouseUp(x, y) { - /* + triggerMouseUp(x, y) { + /* clientX,clientY are no used when isCanvas==true */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } - Roots.needReZone = true; - } + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = - "height " + this.transition + "s ease-out"; - this.content.style.transition = - "height " + this.transition + "s ease-out"; - this.bottom.style.transition = "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } + Roots.needReZone = true; + } - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = + "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } - // ---------------------- - // CANVAS - // ---------------------- + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } - onDraw() {} + // ---------------------- + // CANVAS + // ---------------------- - makeCanvas() { - this.canvas = document.createElementNS( - "http://www.w3.org/1999/xhtml", - "canvas" - ); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + onDraw() {} - //console.log( this.canvas.width, this.canvas.height ) - } + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - draw(force) { - if (this.canvas === null) return; + //console.log( this.canvas.width, this.canvas.height ) + } - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } + draw(force) { + if (this.canvas === null) return; - ////// + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } - getDom() { - return this.content; - } + ////// - noMouse() { - this.mouse.neg(); - } + getDom() { + return this.content; + } - setMouse(uv, flip = true) { - if (flip) - this.mouse.set( - Math.round(uv.x * this.canvas.width), - this.canvas.height - Math.round(uv.y * this.canvas.height) - ); - else - this.mouse.set( - Math.round(uv.x * this.canvas.width), - Math.round(uv.y * this.canvas.height) - ); - //this.mouse.set( m.x, m.y ); + noMouse() { + this.mouse.neg(); + } - //console.log("setMouse "+uv.x+" "+uv.y) - } + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } + console.log("setMouse " + uv.x + " " + uv.y); + } - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } - onChange(f) { - this.callback = f || null; - return this; - } + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } - // ---------------------- - // STYLES - // ---------------------- + onChange(f) { + this.callback = f || null; + return this; + } - mode(n) { - let needChange = false; - let cc = this.colors; + // ---------------------- + // STYLES + // ---------------------- - if (n !== this.cn) { - this.cn = n; - - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } + mode(n) { + let needChange = false; + let cc = this.colors; + + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } - needChange = true; - } + needChange = true; + } - return needChange; - } + return needChange; + } - // ---------------------- - // TARGET - // ---------------------- + // ---------------------- + // TARGET + // ---------------------- - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } - this.proto = null; - this.current = -1; + this.proto = null; + this.current = -1; - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - Roots.cursor(); - return true; - } + Roots.cursor(); + return true; + } - // ---------------------- - // ZONE TEST - // ---------------------- + // ---------------------- + // ZONE TEST + // ---------------------- - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; - this.isReset = false; + this.isReset = false; - let name = ""; + let name = ""; - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; - else name = l.x > s ? "scroll" : "content"; + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; - return name; - } + return name; + } - // ---------------------- - // EVENTS - // ---------------------- + // ---------------------- + // EVENTS + // ---------------------- - handleEvent(e) { - //if( this.cleanning ) return + handleEvent(e) { + //if( this.cleanning ) return - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; - let change = false; - let protoChange = false; + let change = false; + let protoChange = false; - let name = this.testZone(e); + let name = this.testZone(e); - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } - if (!name) return; + if (!name) return; - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - if (Roots.isMobile && type === "mousedown") this.getNext(e, change); + if (Roots.isMobile && type === "mousedown") + this.getNext(e, change); - if (this.proto) protoChange = this.proto.handleEvent(e); + if (this.proto) protoChange = this.proto.handleEvent(e); - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) - change = this.onWheel(e); + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); - if (!Roots.lock) { - this.getNext(e, change); - } + if (!Roots.lock) { + this.getNext(e, change); + } - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) + this.update(e.clientY - this.zone.y - this.sh * 0.5); - break; - } + break; + } - if (this.isDown) change = true; - if (protoChange) change = true; + if (this.isDown) change = true; + if (protoChange) change = true; - if (type === "keyup") change = true; - if (type === "keydown") change = true; + if (type === "keyup") change = true; + if (type === "keydown") change = true; - if (change) this.draw(); - } + if (change) this.draw(); + } - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); - if (next !== this.current) { - this.clearTarget(); - this.current = next; - this.isNewTarget = true; - } + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } - // ---------------------- - // RESET - // ---------------------- + // ---------------------- + // RESET + // ---------------------- - reset(force) { - if (this.isReset) return; + reset(force) { + if (this.isReset) return; - //this.resetItem(); + //this.resetItem(); - this.mouse.neg(); - this.isDown = false; + this.mouse.neg(); + this.isDown = false; - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); - if (r || r2) this.draw(true); + if (r || r2) this.draw(true); - this.isReset = true; + this.isReset = true; - //Roots.lock = false; - } + //Roots.lock = false; + } - // ---------------------- - // ADD NODE - // ---------------------- + // ---------------------- + // ADD NODE + // ---------------------- - add() { - //if(this.cleanning) this.cleanning = false + add() { + //if(this.cleanning) this.cleanning = false - let a = arguments; - let ontop = false; + let a = arguments; + let ontop = false; - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); - else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } - let u = add.apply(this, a); + let u = add.apply(this, a); - if (u === null) return; + if (u === null) return; - if (ontop) this.uis.unshift(u); - else this.uis.push(u); + if (ontop) this.uis.unshift(u); + else this.uis.push(u); - this.calc(); + this.calc(); - this.isEmpty = false; + this.isEmpty = false; - return u; - } + return u; + } - // remove one node + // remove one node - remove(n) { - if (n.dispose) n.dispose(); - } + remove(n) { + if (n.dispose) n.dispose(); + } - // call after uis clear + // call after uis clear - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } - // clear all gui + // clear all gui - empty() { - //this.cleanning = true + empty() { + //this.cleanning = true - //this.close(); + //this.close(); - let i = this.uis.length, - item; + let i = this.uis.length, + item; - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } - this.uis = []; - this.isEmpty = true; - this.calc(); - } + this.uis = []; + this.isEmpty = true; + this.calc(); + } - clear() { - this.empty(); - } + clear() { + this.empty(); + } - clear2() { - setTimeout(this.empty.bind(this), 0); - } + clear2() { + setTimeout(this.empty.bind(this), 0); + } - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } - // ---------------------- - // ITEMS SPECIAL - // ---------------------- + // ---------------------- + // ITEMS SPECIAL + // ---------------------- - resetItem() { - if (!this.isItemMode) return; + resetItem() { + if (!this.isItemMode) return; - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } - setItem(name) { - if (!this.isItemMode) return; + setItem(name) { + if (!this.isItemMode) return; - name = name || ""; - this.resetItem(); + name = name || ""; + this.resetItem(); - if (!name) { - this.update(0); - return; - } + if (!name) { + this.update(0); + return; + } - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) - this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } - // ---------------------- - // SCROLL - // ---------------------- + // ---------------------- + // SCROLL + // ---------------------- - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; - if (b) { - this.total = this.h; + if (b) { + this.total = this.h; - this.maxView = this.maxHeight; + this.maxView = this.maxHeight; - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; - this.range = this.maxView - this.sh; + this.range = this.maxView - this.sh; - this.oy = Tools.clamp(this.oy, 0, this.range); + this.oy = Tools.clamp(this.oy, 0, this.range); - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } - update(y) { - y = Tools.clamp(y, 0, this.range); + update(y) { + y = Tools.clamp(y, 0, this.range); - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } - // ---------------------- - // RESIZE FUNCTION - // ---------------------- + // ---------------------- + // RESIZE FUNCTION + // ---------------------- - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } - setHeight() { - if (this.tmp) clearTimeout(this.tmp); + setHeight() { + if (this.tmp) clearTimeout(this.tmp); - this.zone.h = this.bh; - this.isScroll = false; + this.zone.h = this.bh; + this.isScroll = false; - if (this.isOpen) { - this.h = this.calcUis(); + if (this.isOpen) { + this.h = this.calcUis(); - let hhh = this.forceHeight - ? this.forceHeight + this.zone.y - : window.innerHeight; + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; - this.maxHeight = hhh - this.zone.y - this.bh; + this.maxHeight = hhh - this.zone.y - this.bh; - let diff = this.h - this.maxHeight; + let diff = this.h - this.maxHeight; - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } - this.upScroll(this.isScroll); + this.upScroll(this.isScroll); - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; - if (this.forceHeight && this.lockHeight) - this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } - rezone() { - Roots.needReZone = true; - } + rezone() { + Roots.needReZone = true; + } - setWidth(w) { - if (w) this.zone.w = w; + setWidth(w) { + if (w) this.zone.w = w; - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) - this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = + -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } } exports.Files = Files; @@ -9612,4 +9616,3 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gXCIuLi9jb3JlL1Byb3RvLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4uL2NvcmUvVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi4vY29yZS9Sb290cy5qc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cdGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG5cdFx0Ly8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG5cdFx0Ly8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuXHRcdC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG5cdFx0Ly8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG5cdFx0by5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuXHRcdG8ubmFtZSA9IG8ubmFtZSB8fCBcIlRyZWVMaXN0XCI7XHJcblxyXG5cdFx0c3VwZXIobyk7XHJcblx0XHR0aGlzLmVuYWJsZUhvdmVyID0gby5lbmFibGVIb3ZlciAhPT0gZmFsc2U7XHJcblxyXG5cdFx0Ly8gRGF0b3MgJiBlc3RhZG9cclxuXHRcdHRoaXMudHJlZSA9IG8udHJlZSB8fCB7fTtcclxuXHRcdHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KG8udmFsdWUpID8gby52YWx1ZS5zbGljZSgpIDogW107XHJcblx0XHR0aGlzLmZvY3VzZWQgPSAhIW8uZm9jdXNlZDtcclxuXHRcdHRoaXMuZm9jdXNQYXRoID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcblx0XHR0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSBcIm51bWJlclwiID8gby5mb2N1c0xldmVsIDogLTE7XHJcblxyXG5cdFx0dGhpcy50YWJJbmRleCA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuXHRcdHRoaXMuaXRlbUluZGV4ID0gby5pdGVtSW5kZXggPz8gbnVsbDtcclxuXHJcblx0XHQvLyBDYWxsYmFja1xyXG5cdFx0dGhpcy5jaGFuZ2VDYiA9XHJcblx0XHRcdHR5cGVvZiBvLm9uQ2hhbmdlID09PSBcImZ1bmN0aW9uXCIgPyBvLm9uQ2hhbmdlIDogKCkgPT4ge307XHJcblxyXG5cdFx0Ly8gTGF5b3V0IGludGVybm8gLyBwdWJsaWNhY2nDs24gZGUgYWx0dXJhXHJcblx0XHR0aGlzLmxpbmVIID0gdGhpcy5oOyAvLyBhbHRvIGRlIFVOQSBmaWxhXHJcblx0XHR0aGlzLmxldmVsR2FwID0gdGhpcy5jb2xvcnMuc3kgfHwgMjsgLy8gc2VwYXJhY2nDs24gdmVydGljYWwgZW50cmUgbml2ZWxlc1xyXG5cdFx0dGhpcy5sZWFmTWF4ID0gMDsgLy8gc2UgY2FsY3VsYSBlbiByU2l6ZSgpXHJcblxyXG5cdFx0Ly8gTW9kZWxvIHZpc3VhbFxyXG5cdFx0dGhpcy5sZXZlbHMgPSBbXTsgLy8gW3t0eXBlOidtYXAnfCdsaXN0JywgaXRlbXM6W3trZXksbGFiZWwsem9uZX1dLCB6b25lOnt4LHksdyxofX0uLi5dXHJcblx0XHR0aGlzLml0ZW1zRG9tID0gW107IC8vIGVzcGVqbyBET00gcG9yIG5pdmVsXHJcblx0XHR0aGlzLmhvdmVyID0geyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG5cclxuXHRcdC8vIPCflLggTlVFVk86IHJlY29yZGFyIGxhIMO6bHRpbWEgaG9qYSBzZWxlY2Npb25hZGEgKHBlcnNpc3RlbnRlKVxyXG5cdFx0dGhpcy5sYXN0TGVhZiA9IHsgcGFyZW50UGF0aDogW10sIGtleTogbnVsbCB9OyAvLyBwYXJlbnRQYXRoIGVzIGxhIHJ1dGEgaGFzdGEgZWwgbWFwYSBwYWRyZVxyXG5cclxuXHRcdC8vIENvbnRlbmVkb3IgaW50ZXJubyAoYWJzb2x1dG8pXHJcblx0XHR0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuXHRcdFx0XCJkaXZcIixcclxuXHRcdFx0dGhpcy5jc3MuYmFzaWMgKyBcImxlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlO1wiXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHRcdHRoaXMuaW5pdCgpO1xyXG5cclxuXHRcdC8vIFNpIGVsIHZhbG9yIGluaWNpYWwgeWEgYXB1bnRhIGEgdW5hIGhvamEgdsOhbGlkYSwgcmVjb3JkYXIgZXNhIGhvamFcclxuXHRcdHRoaXMuX21heWJlVXBkYXRlTGFzdExlYWZGcm9tVmFsdWUoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gSGVscGVycyBkZSB0aXBvID09PT09PT1cclxuXHRzdGF0aWMgaXNNYXAobm9kZSkge1xyXG5cdFx0cmV0dXJuIG5vZGUgJiYgdHlwZW9mIG5vZGUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7XHJcblx0fVxyXG5cdHN0YXRpYyBpc0xpc3Qobm9kZSkge1xyXG5cdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFJlY29ycmlkbyBkZSBkYXRvcyA9PT09PT09XHJcblx0Z2V0Tm9kZUF0UGF0aChwYXRoKSB7XHJcblx0XHRsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBwYXRoW2ldKSlcclxuXHRcdFx0XHRcdHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcblx0XHRcdFx0bm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcblx0XHRcdH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcblx0XHRcdFx0Ly8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG5cdFx0XHRcdGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcblx0fVxyXG5cclxuXHQvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG5cdGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG5cdFx0bGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuXHRcdGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG5cdFx0d2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcblx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuXHRcdFx0aWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcblx0XHRcdGNvbnN0IGswID0ga2V5c1swXTtcclxuXHRcdFx0cGF0aC5wdXNoKGswKTtcclxuXHRcdFx0bm9kZSA9IG5vZGVbazBdO1xyXG5cdFx0fVxyXG5cdFx0Ly8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuXHRcdHJldHVybiBwYXRoO1xyXG5cdH1cclxuXHJcblx0Ly8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG5cdGdldEFjdGl2ZVBhdGgoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG5cdGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcblx0XHRpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09IFwib2JqZWN0XCIpIHJldHVybiAwO1xyXG5cdFx0bGV0IG0gPSAwO1xyXG5cdFx0Zm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XHJcblx0XHRcdG0gPSBNYXRoLm1heChtLCB0aGlzLmNvbXB1dGVMZWFmTWF4KG5vZGVba10pKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBDb25zdHJ1Y2Npw7NuIGRlIG5pdmVsZXMgKG1vZGVsbyBsw7NnaWNvKSA9PT09PT09XHJcblx0YnVpbGRMZXZlbHMoKSB7XHJcblx0XHR0aGlzLmxldmVscy5sZW5ndGggPSAwO1xyXG5cdFx0Y29uc3QgYWN0aXZlUGF0aCA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpO1xyXG5cclxuXHRcdGxldCBub2RlID0gdGhpcy50cmVlO1xyXG5cdFx0bGV0IGxldmVsID0gMDtcclxuXHJcblx0XHR3aGlsZSAobm9kZSkge1xyXG5cdFx0XHRpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBOaXZlbCBpbnRlcm1lZGlvOiBjbGF2ZXMgZGVsIG1hcGEgKGhvcml6b250YWwpXHJcblx0XHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG5cdFx0XHRcdGlmICgha2V5cy5sZW5ndGgpIGJyZWFrO1xyXG5cdFx0XHRcdHRoaXMubGV2ZWxzLnB1c2goe1xyXG5cdFx0XHRcdFx0dHlwZTogXCJtYXBcIixcclxuXHRcdFx0XHRcdGl0ZW1zOiBrZXlzLm1hcCgoaykgPT4gKHtcclxuXHRcdFx0XHRcdFx0a2V5OiBrLFxyXG5cdFx0XHRcdFx0XHRsYWJlbDogayxcclxuXHRcdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0XHR9KSksXHJcblx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IHRoaXMubGluZUggfSxcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0Y29uc3QgbmV4dEtleSA9IGFjdGl2ZVBhdGhbbGV2ZWxdO1xyXG5cdFx0XHRcdGlmICghbmV4dEtleSB8fCAhbm9kZS5oYXNPd25Qcm9wZXJ0eShuZXh0S2V5KSkgYnJlYWs7XHJcblx0XHRcdFx0bm9kZSA9IG5vZGVbbmV4dEtleV07XHJcblx0XHRcdH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcblx0XHRcdFx0Ly8gTml2ZWwgaG9qYTogbGlzdGEgdmVydGljYWxcclxuXHRcdFx0XHRjb25zdCBpdGVtcyA9IG5vZGUubWFwKChsYWJlbCkgPT4gKHtcclxuXHRcdFx0XHRcdGtleTogbGFiZWwsXHJcblx0XHRcdFx0XHRsYWJlbCxcclxuXHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCB9LFxyXG5cdFx0XHRcdH0pKTtcclxuXHRcdFx0XHRjb25zdCBoTGlzdCA9IE1hdGgubWF4KGl0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcblx0XHRcdFx0dGhpcy5sZXZlbHMucHVzaCh7XHJcblx0XHRcdFx0XHR0eXBlOiBcImxpc3RcIixcclxuXHRcdFx0XHRcdGl0ZW1zLFxyXG5cdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiBoTGlzdCB9LFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldmVsKys7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuXHRsYXlvdXRMZXZlbHMoKSB7XHJcblx0XHRjb25zdCBjb250ZW50WCA9ICh0aGlzLnNhIHx8IDEwMCkgKyA4OyAvLyBjb2x1bW5hIGRlIGxhYmVsICsgcGFkZGluZ1xyXG5cdFx0Y29uc3QgcGFkUmlnaHQgPSA4O1xyXG5cdFx0Y29uc3QgdyA9IHRoaXMuem9uZS53IC0gY29udGVudFggLSBwYWRSaWdodDtcclxuXHJcblx0XHRsZXQgeSA9IDA7XHJcblxyXG5cdFx0Ly8gQWp1c3RhciBpdGVtc0RvbSBhIGNhbnRpZGFkIGRlIG5pdmVsZXNcclxuXHRcdHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aClcclxuXHRcdFx0dGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuXHRcdGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSlcclxuXHRcdFx0XHRpZiAoZWwgJiYgZWwucGFyZW50Tm9kZSkgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XHJcblx0XHR9XHJcblx0XHR0aGlzLml0ZW1zRG9tLmxlbmd0aCA9IHRoaXMubGV2ZWxzLmxlbmd0aDtcclxuXHJcblx0XHRmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcblx0XHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0XHRpZiAobHZsLnR5cGUgPT09IFwibWFwXCIpIHtcclxuXHRcdFx0XHRjb25zdCBuID0gTWF0aC5tYXgoMSwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcblx0XHRcdFx0Y29uc3QgY2VsbFcgPSBNYXRoLmZsb29yKHcgLyBuKTtcclxuXHRcdFx0XHRsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IHRoaXMubGluZUggfTtcclxuXHRcdFx0XHRsZXQgeCA9IGNvbnRlbnRYO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdCA9IGx2bC5pdGVtc1tpXTtcclxuXHRcdFx0XHRcdGl0LnpvbmUgPSB7IHgsIHksIHc6IGNlbGxXLCBoOiB0aGlzLmxpbmVIIH07XHJcblx0XHRcdFx0XHRjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcblx0XHRcdFx0XHR0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCBcIm1hcFwiKTtcclxuXHRcdFx0XHRcdHggKz0gY2VsbFc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBjZWxkYXNcclxuXHRcdFx0XHR0aGlzLl9wcnVuZVJvdyhMLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuXHRcdFx0XHR5ICs9IHRoaXMubGluZUggKyB0aGlzLmxldmVsR2FwO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIGxpc3RhL2hvamE6IHJlc2VydmFyIGggc2Vnw7puIGxlYWZNYXhcclxuXHRcdFx0XHRjb25zdCBuID0gbHZsLml0ZW1zLmxlbmd0aDtcclxuXHRcdFx0XHRjb25zdCBoTGlzdCA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCkgKiB0aGlzLmxpbmVIO1xyXG5cdFx0XHRcdGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogaExpc3QgfTtcclxuXHJcblx0XHRcdFx0Y29uc3Qgcm93cyA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGlzUmVhbCA9IGkgPCBuO1xyXG5cdFx0XHRcdFx0Y29uc3QgaXQgPSBpc1JlYWxcclxuXHRcdFx0XHRcdFx0PyBsdmwuaXRlbXNbaV1cclxuXHRcdFx0XHRcdFx0OiB7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6IG51bGwsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCB9LFxyXG5cdFx0XHRcdFx0XHQgIH07XHJcblx0XHRcdFx0XHRpdC56b25lID0ge1xyXG5cdFx0XHRcdFx0XHR4OiBjb250ZW50WCxcclxuXHRcdFx0XHRcdFx0eTogeSArIGkgKiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHR3LFxyXG5cdFx0XHRcdFx0XHRoOiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuXHRcdFx0XHRcdHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsIFwibGlzdFwiLCBpc1JlYWwpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgZmlsYXNcclxuXHRcdFx0XHR0aGlzLl9wcnVuZVJvdyhMLCByb3dzKTtcclxuXHRcdFx0XHR5ICs9IGhMaXN0O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQWp1c3RlcyBkZSBhbHRvIGludGVybm8gZGVsIGNvbnRlbmVkb3IgdmlzdWFsXHJcblx0XHRjb25zdCB0b3RhbEggPSB5O1xyXG5cdFx0dGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjtcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuXHRcdHRoaXMuc1syXS5oZWlnaHQgPSB0b3RhbEggKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gUHVibGljYXIgYWx0byB0b3RhbCBhbCBHVUkgKHN1bWFyw6EgdS5oKVxyXG5cdFx0dGhpcy5fcHVibGlzaEhlaWdodCgpO1xyXG5cdH1cclxuXHJcblx0Ly8gRWxpbWluYSBub2RvcyBET00gc29icmFudGVzIGVuIGxhIGZpbGEgTCBhIHBhcnRpciBkZWwgw61uZGljZSBrZWVwXHJcblx0X3BydW5lUm93KEwsIGtlZXApIHtcclxuXHRcdGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcblx0XHRpZiAoIXJvdykgcmV0dXJuO1xyXG5cdFx0Zm9yIChsZXQgaiA9IGtlZXA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0Y29uc3QgZWwgPSByb3dbal07XHJcblx0XHRcdGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuXHRcdH1cclxuXHRcdHJvdy5sZW5ndGggPSBrZWVwO1xyXG5cdH1cclxuXHJcblx0ZW5zdXJlSXRlbURvbShMLCBpKSB7XHJcblx0XHRjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG5cdFx0d2hpbGUgKHJvdy5sZW5ndGggPD0gaSkgcm93LnB1c2gobnVsbCk7XHJcblx0XHRpZiAoIXJvd1tpXSkge1xyXG5cdFx0XHRjb25zdCBkaXYgPSB0aGlzLmRvbShcclxuXHRcdFx0XHRcImRpdlwiLFxyXG5cdFx0XHRcdFRvb2xzLmNzcy50eHQgKyBcInBvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lO1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG5cdFx0XHRyb3dbaV0gPSBkaXY7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcm93W2ldO1xyXG5cdH1cclxuXHJcblx0cGFpbnRJdGVtRG9tKGRpdiwgTCwgaSwgaXQsIGtpbmQsIGlzUmVhbCA9IHRydWUpIHtcclxuXHRcdGNvbnN0IHMgPSBkaXYuc3R5bGU7XHJcblx0XHRjb25zdCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuXHRcdC8vIFBvc2ljacOzblxyXG5cdFx0cy5sZWZ0ID0gaXQuem9uZS54ICsgXCJweFwiO1xyXG5cdFx0cy50b3AgPSBpdC56b25lLnkgKyBcInB4XCI7XHJcblx0XHRzLndpZHRoID0gaXQuem9uZS53ICsgXCJweFwiO1xyXG5cdFx0cy5oZWlnaHQgPSBpdC56b25lLmggLSAyICsgXCJweFwiO1xyXG5cclxuXHRcdC8vIFRleHRvXHJcblx0XHRkaXYudGV4dENvbnRlbnQgPSBpc1JlYWwgPyBpdC5sYWJlbCA6IFwiXCI7XHJcblxyXG5cdFx0Ly8gRXN0YWRvc1xyXG5cdFx0Y29uc3Qgc2VsZWN0ZWQgPVxyXG5cdFx0XHRpc1JlYWwgJiYgdGhpcy52YWx1ZVtMXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWVbTF0gPT09IGl0LmtleTtcclxuXHRcdGNvbnN0IGluRm9jdXNMdmwgPSB0aGlzLmZvY3VzZWQgJiYgdGhpcy5mb2N1c0xldmVsID09PSBMO1xyXG5cdFx0Y29uc3QgZm9jdXNNYXRjaCA9IGlzUmVhbCAmJiBpbkZvY3VzTHZsICYmIHRoaXMuZm9jdXNQYXRoW0xdID09PSBpdC5rZXk7XHJcblx0XHRjb25zdCBpc0hvdmVyID1cclxuXHRcdFx0dGhpcy5lbmFibGVIb3ZlciAmJlxyXG5cdFx0XHRpc1JlYWwgJiZcclxuXHRcdFx0dGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJlxyXG5cdFx0XHR0aGlzLmhvdmVyLmluZGV4ID09PSBpO1xyXG5cclxuXHRcdC8vIPCflLggTlVFVk86IMK/ZXN0YSBmaWxhIGVzIGxhIMO6bHRpbWEgaG9qYSBzZWxlY2Npb25hZGE/XHJcblx0XHRsZXQgaXNMYXN0TGVhZiA9IGZhbHNlO1xyXG5cdFx0aWYgKGlzUmVhbCAmJiBraW5kID09PSBcImxpc3RcIiAmJiB0aGlzLmxhc3RMZWFmLmtleSAhPSBudWxsKSB7XHJcblx0XHRcdC8vIExhIGhvamEgdmlzaWJsZSBjb3JyZXNwb25kZSBzaSBlbCBwYWRyZSBkZSBlc3RhIGxpc3RhIGNvaW5jaWRlIGNvbiBwYXJlbnRQYXRoIGd1YXJkYWRvXHJcblx0XHRcdC8vIEVsIHBhZHJlIGFjdHVhbCBlcyB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpIGN1YW5kbyBsYSBsaXN0YSBlc3TDoSBkZXNwbGVnYWRhIHBvciB2YWx1ZS9mb2N1c1xyXG5cdFx0XHRjb25zdCBwYXJlbnROb3cgPSB0aGlzLmdldEFjdGl2ZVBhdGgoKS5zbGljZSgwLCBMKTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMuX3BhdGhzRXF1YWwocGFyZW50Tm93LCB0aGlzLmxhc3RMZWFmLnBhcmVudFBhdGgpICYmXHJcblx0XHRcdFx0aXQua2V5ID09PSB0aGlzLmxhc3RMZWFmLmtleVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRpc0xhc3RMZWFmID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEVzdGlsb3MgYmFzZVxyXG5cdFx0cy5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuXHRcdHMuY29sb3IgPSBjYy50ZXh0O1xyXG5cdFx0cy5ib3JkZXIgPSBcIjFweCBzb2xpZCBcIiArIGNjLmJvcmRlcjtcclxuXHRcdHMudGV4dEFsaWduID0ga2luZCA9PT0gXCJtYXBcIiA/IFwiY2VudGVyXCIgOiBcImxlZnRcIjtcclxuXHJcblx0XHQvLyBQcmlvcmlkYWQgdmlzdWFsOlxyXG5cdFx0Ly8gMSkgc2VsZWNjaW9uYWRvIChhenVsKVxyXG5cdFx0Ly8gMikgw7psdGltYSBob2phIChudWV2byBjb2xvcilcclxuXHRcdC8vIDMpIGZvY29cclxuXHRcdC8vIDQpIGhvdmVyXHJcblx0XHRpZiAoc2VsZWN0ZWQpIHtcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuXHRcdH0gZWxzZSBpZiAoaXNMYXN0TGVhZikge1xyXG5cdFx0XHQvLyBjb2xvciBkaXN0aW50aXZvIHBhcmEgXCLDumx0aW1hIGhvamFcIiAoYW1hcmlsbG8gc3VhdmUpXHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IFwicmdiYSgyNTUsIDIwMCwgMCwgMC4yNSlcIjtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHQ7XHJcblx0XHR9IGVsc2UgaWYgKGZvY3VzTWF0Y2gpIHtcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuXHRcdH0gZWxzZSBpZiAoaXNIb3Zlcikge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmlsYXMgZGUgcGFkZGluZyBpbnZpc2libGVzIGVuIGhvamFcclxuXHRcdHMub3BhY2l0eSA9IGlzUmVhbCA/IFwiMVwiIDogXCIwXCI7XHJcblx0fVxyXG5cclxuXHRfcGF0aHNFcXVhbChhLCBiKSB7XHJcblx0XHRpZiAoIWEgfHwgIWIgfHwgYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gQ2ljbG8gZGUgdmlkYSA9PT09PT09XHJcblx0clNpemUoKSB7XHJcblx0XHR0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcblx0XHR0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcblx0XHR0aGlzLmxheW91dExldmVscygpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlKCkge1xyXG5cdFx0dGhpcy5idWlsZExldmVscygpO1xyXG5cdFx0dGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gSW50ZXJhY2Npw7NuID09PT09PT1cclxuXHRfdG9Mb2NhbChlKSB7XHJcblx0XHRjb25zdCBteCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cdFx0Y29uc3QgbXkgPSBlLmNsaWVudFkgLSB0aGlzLnpvbmUueTtcclxuXHRcdHJldHVybiB7IHg6IG14LCB5OiBteSB9O1xyXG5cdH1cclxuXHJcblx0X2hpdFRlc3QobXgsIG15KSB7XHJcblx0XHRmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcblx0XHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0XHRjb25zdCB6ID0gbHZsLnpvbmU7IC8vIHggeSB3IHlhIGluY2x1eWVuIGNvbnRlbnRYXHJcblxyXG5cdFx0XHRpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAobHZsLnR5cGUgPT09IFwibWFwXCIpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXR6ID0gbHZsLml0ZW1zW2ldLnpvbmU7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdG14ID49IGl0ei54ICYmXHJcblx0XHRcdFx0XHRcdG15ID49IGl0ei55ICYmXHJcblx0XHRcdFx0XHRcdG14IDw9IGl0ei54ICsgaXR6LncgJiZcclxuXHRcdFx0XHRcdFx0bXkgPD0gaXR6LnkgKyBpdHouaFxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IEwsIGksIHJlYWw6IHRydWUgfTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29uc3QgblJvd3MgPSBNYXRoLm1heChsdmwuaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNSZWFsID0gaSA8IGx2bC5pdGVtcy5sZW5ndGg7XHJcblx0XHRcdFx0XHRjb25zdCBpdHogPSBpc1JlYWxcclxuXHRcdFx0XHRcdFx0PyBsdmwuaXRlbXNbaV0uem9uZVxyXG5cdFx0XHRcdFx0XHQ6IHtcclxuXHRcdFx0XHRcdFx0XHRcdHg6IHoueCxcclxuXHRcdFx0XHRcdFx0XHRcdHk6IHoueSArIGkgKiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHRcdFx0dzogei53LFxyXG5cdFx0XHRcdFx0XHRcdFx0aDogdGhpcy5saW5lSCxcclxuXHRcdFx0XHRcdFx0ICB9O1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRteCA+PSBpdHoueCAmJlxyXG5cdFx0XHRcdFx0XHRteSA+PSBpdHoueSAmJlxyXG5cdFx0XHRcdFx0XHRteCA8PSBpdHoueCArIGl0ei53ICYmXHJcblx0XHRcdFx0XHRcdG15IDw9IGl0ei55ICsgaXR6LmhcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4geyBMLCBpLCByZWFsOiBpc1JlYWwgfTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB7IEw6IC0xLCBpOiAtMSwgcmVhbDogZmFsc2UgfTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUV2ZW50KGUpIHtcclxuXHRcdGlmICh0aGlzLmxvY2spIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRpZiAoZS50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XHJcblx0XHRcdC8vIFNpIGVsIGhvdmVyIGVzdMOhIGRlc2FjdGl2YWRvLCBubyBoYXkgdHJhYmFqbyBxdWUgaGFjZXIuXHJcblx0XHRcdGlmICghdGhpcy5lbmFibGVIb3ZlcikgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0Y29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG5cdFx0XHRjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcblxyXG5cdFx0XHQvLyBudWV2byBob3ZlciBjYWxjdWxhZG9cclxuXHRcdFx0Y29uc3QgbmV3SG92ZXIgPVxyXG5cdFx0XHRcdGh0LkwgIT09IC0xICYmIGh0LnJlYWxcclxuXHRcdFx0XHRcdD8geyBsZXZlbDogaHQuTCwgaW5kZXg6IGh0LmkgfVxyXG5cdFx0XHRcdFx0OiB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblx0XHRcdC8vIHNvbG8gcmVwaW50YXIgc2kgY2FtYmlhIHJlYWxtZW50ZSBlbCBob3ZlclxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0bmV3SG92ZXIubGV2ZWwgPT09IHRoaXMuaG92ZXIubGV2ZWwgJiZcclxuXHRcdFx0XHRuZXdIb3Zlci5pbmRleCA9PT0gdGhpcy5ob3Zlci5pbmRleFxyXG5cdFx0XHQpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR0aGlzLmhvdmVyID0gbmV3SG92ZXI7XHJcblx0XHRcdHRoaXMudXBkYXRlKCk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuXHRcdFx0Y29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG5cdFx0XHRjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcblx0XHRcdGlmIChodC5MICE9PSAtMSAmJiBodC5yZWFsKSB7XHJcblx0XHRcdFx0dGhpcy5fc2VsZWN0QXQoaHQuTCwgaHQuaSk7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7IC8vIHNvbG8gdHJ1ZSBzaSByZWFsbWVudGUgc2Ugc2VsZWNjaW9uw7MgYWxnb1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gU2VsZWNjacOzbiArIGF1dG9jb21wbGV0YWRvICsgbm90aWZpY2FjacOzblxyXG5cdF9zZWxlY3RBdChMLCBpKSB7XHJcblx0XHRjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuXHRcdGNvbnN0IGNob3NlbiA9IGx2bC5pdGVtc1tpXTtcclxuXHRcdGlmICghY2hvc2VuIHx8ICFjaG9zZW4ua2V5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgYmFzZSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgTCk7XHJcblx0XHRiYXNlW0xdID0gY2hvc2VuLmtleTtcclxuXHJcblx0XHRjb25zdCBuZXdQYXRoID0gdGhpcy5hdXRvQ29tcGxldGVUb0xlYWYoYmFzZSk7XHJcblxyXG5cdFx0Ly8g8J+UuCBTaSBlbCB1c3VhcmlvIHNlbGVjY2lvbmEgZXhwbMOtY2l0YW1lbnRlIGVuIGVsIG5pdmVsIGhvamEsIHJlY29yZGFybG9cclxuXHRcdGlmIChsdmwudHlwZSA9PT0gXCJsaXN0XCIpIHtcclxuXHRcdFx0dGhpcy5sYXN0TGVhZi5wYXJlbnRQYXRoID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTsgLy8gcGFkcmUgZGUgbGEgbGlzdGEgYWN0dWFsXHJcblx0XHRcdHRoaXMubGFzdExlYWYua2V5ID0gY2hvc2VuLmtleTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHJcblx0XHQvLyBzaSBlc3TDoSByZWZlcmVuY2lhZG8sIHByb3BhZ2EgYSBvYmpldG8gZXh0ZXJub1xyXG5cdFx0dGhpcy5zZW5kKG5ld1BhdGgpO1xyXG5cdFx0dGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IEFQSSBww7pibGljYSA9PT09PT09XHJcblx0c2V0VmFsdWUocGF0aCkge1xyXG5cdFx0dGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoLnNsaWNlKCkgOiBbXTtcclxuXHRcdC8vIFNpIGRlc2RlIGFmdWVyYSBub3Mgc2V0ZWFuIHVuYSBob2phIHbDoWxpZGEsIHRhbWJpw6luIGxhIHJlY29yZGFtb3NcclxuXHRcdHRoaXMuX21heWJlVXBkYXRlTGFzdExlYWZGcm9tVmFsdWUoKTtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRzZXRUcmVlKHRyZWUpIHtcclxuXHRcdHRoaXMudHJlZSA9IHRyZWUgfHwge307XHJcblx0XHR0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0c2V0Rm9jdXMoeyBmb2N1c2VkLCBmb2N1c1BhdGgsIGZvY3VzTGV2ZWwgfSkge1xyXG5cdFx0aWYgKHR5cGVvZiBmb2N1c2VkID09PSBcImJvb2xlYW5cIikgdGhpcy5mb2N1c2VkID0gZm9jdXNlZDtcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KGZvY3VzUGF0aCkpIHRoaXMuZm9jdXNQYXRoID0gZm9jdXNQYXRoLnNsaWNlKCk7XHJcblx0XHRpZiAodHlwZW9mIGZvY3VzTGV2ZWwgPT09IFwibnVtYmVyXCIpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0X21heWJlVXBkYXRlTGFzdExlYWZGcm9tVmFsdWUoKSB7XHJcblx0XHQvLyBTaSB2YWx1ZSBhcHVudGEgYSBwYWRyZStob2phICjigKYsW2xlYWZdKSB5IGVzIHbDoWxpZGEsIHJlY29yZGFyIGVzYSBob2phXHJcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgfHwgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy52YWx1ZS5sZW5ndGggLSAxKTtcclxuXHRcdGNvbnN0IGxlYWYgPSB0aGlzLnZhbHVlW3RoaXMudmFsdWUubGVuZ3RoIC0gMV07XHJcblx0XHRjb25zdCBpbmZvID0gdGhpcy5nZXROb2RlQXRQYXRoKHBhcmVudCk7XHJcblx0XHRpZiAoaW5mbyAmJiBBcnJheS5pc0FycmF5KGluZm8ubm9kZSkgJiYgaW5mby5ub2RlLmluY2x1ZGVzKGxlYWYpKSB7XHJcblx0XHRcdHRoaXMubGFzdExlYWYgPSB7IHBhcmVudFBhdGg6IHBhcmVudCwga2V5OiBsZWFmIH07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFB1YmxpY2FjacOzbiBkZSBhbHR1cmEgPT09PT09PVxyXG5cdF9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCkge1xyXG5cdFx0bGV0IGMgPSAwO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxldmVscy5sZW5ndGg7IGkrKylcclxuXHRcdFx0aWYgKHRoaXMubGV2ZWxzW2ldLnR5cGUgPT09IFwibWFwXCIpIGMrKztcclxuXHRcdHJldHVybiBjO1xyXG5cdH1cclxuXHJcblx0X2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkge1xyXG5cdFx0Y29uc3QgbGFzdCA9IHRoaXMubGV2ZWxzW3RoaXMubGV2ZWxzLmxlbmd0aCAtIDFdO1xyXG5cdFx0cmV0dXJuIGxhc3QgJiYgbGFzdC50eXBlID09PSBcImxpc3RcIiA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuXHR9XHJcblxyXG5cdF9wdWJsaXNoSGVpZ2h0KCkge1xyXG5cdFx0Y29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcblx0XHRjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuXHRcdGNvbnN0IGxlYWZIID0gbGVhZkxlbiAqIHRoaXMubGluZUg7XHJcblx0XHRjb25zdCBpbnRlckggPSBpbnRlciAqICh0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcCk7XHJcblx0XHRjb25zdCB0b3RhbEggPSBpbnRlciA/IGludGVySCArIHRoaXMubGV2ZWxHYXAgKyBsZWFmSCA6IGxlYWZIO1xyXG5cclxuXHRcdC8vIE5vcm1hbGl6YW1vcyBhIHB4IGVudGVyb3MgcGFyYSBldml0YXIgaml0dGVyIHBvciByZWRvbmRlb1xyXG5cdFx0Y29uc3QgbmV3SCA9IE1hdGguZmxvb3IodG90YWxIKTtcclxuXHJcblx0XHQvLyBBY3R1YWxpemFtb3MgbcOpdHJpY2FzIGxvY2FsZXMgc2llbXByZVxyXG5cdFx0dGhpcy5oID0gbmV3SDtcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcblx0XHR0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuXHRcdC8vIFNvbG8gYXZpc2Ftb3MgYWwgR1VJIHNpIGxhIGFsdHVyYSBjYW1iacOzXHJcblx0XHRpZiAobmV3SCAhPT0gdGhpcy5fbGFzdFB1Ymxpc2hlZEgpIHtcclxuXHRcdFx0dGhpcy5fbGFzdFB1Ymxpc2hlZEggPSBuZXdIO1xyXG5cdFx0XHRSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuXHRcdFx0aWYgKHRoaXMuaXNVSSAmJiB0aGlzLm1haW4pIHRoaXMubWFpbi5jYWxjKCk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBCb29sIH0gZnJvbSAnLi4vcHJvdG8vQm9vbC5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL3Byb3RvL0J1dHRvbi5qcyc7XHJcbmltcG9ydCB7IENpcmN1bGFyIH0gZnJvbSAnLi4vcHJvdG8vQ2lyY3VsYXIuanMnO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL3Byb3RvL0NvbG9yLmpzJztcclxuaW1wb3J0IHsgRnBzIH0gZnJvbSAnLi4vcHJvdG8vRnBzLmpzJztcclxuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9wcm90by9HcmFwaC5qcyc7XHJcbmltcG9ydCB7IEdyb3VwICB9IGZyb20gJy4uL3Byb3RvL0dyb3VwLmpzJztcclxuaW1wb3J0IHsgSm95c3RpY2sgfSBmcm9tICcuLi9wcm90by9Kb3lzdGljay5qcyc7XHJcbmltcG9ydCB7IEtub2IgfSBmcm9tICcuLi9wcm90by9Lbm9iLmpzJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uL3Byb3RvL0xpc3QuanMnO1xyXG5pbXBvcnQgeyBOdW1lcmljIH0gZnJvbSAnLi4vcHJvdG8vTnVtZXJpYy5qcyc7XHJcbmltcG9ydCB7IFNsaWRlIH0gZnJvbSAnLi4vcHJvdG8vU2xpZGUuanMnO1xyXG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9wcm90by9UZXh0SW5wdXQuanMnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL3Byb3RvL1RpdGxlLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0LmpzJztcclxuaW1wb3J0IHsgQml0bWFwIH0gZnJvbSAnLi4vcHJvdG8vQml0bWFwLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICcuLi9wcm90by9TZWxlY3Rvci5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi4vcHJvdG8vRW1wdHkuanMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vcHJvdG8vSXRlbS5qcyc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi9wcm90by9HcmlkLmpzJztcclxuaW1wb3J0IHsgUGFkMkQgfSBmcm9tICcuLi9wcm90by9QYWQyRC5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFRyZWVMaXN0IH0gZnJvbSAnLi4vcHJvdG8vVHJlZUxpc3QuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndHJlZWxpc3QnOiBuID0gbmV3IFRyZWVMaXN0KG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7RUFBQTtFQUNBO0VBQ0E7QUFDQTtBQUNZLFFBQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7RUFDQTtBQUNBO0VBQ0EsTUFBTSxDQUFDLEdBQUc7RUFDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7RUFDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7RUFDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0VBQ1YsRUFBRSxJQUFJLEVB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UUFBUSxDQUFDO0FBQ3pDO0VBQ0E7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtFQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztFQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0VBQ3JCLE9BQU87QUFDUDtFQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0VBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7RUFDMUIsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtFQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7RUFDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUNqQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ2pDLE9BQU87QUFDUDtFQUNBO0FBQ0E7RUFDQSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztFQUMzRCxJQUFJLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztFQUM5QixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0VBQ3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNO0VBQ3ZCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQztFQUNmLE1BQU0sQ0FBQztFQUNQLE1BQU0sQ0FBQztFQUNQLE1BQU0sQ0FBQyxDQUFDO0FBQ1I7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQjtFQUNBLE1BQU0sSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFO0VBQzFCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ3RCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ3RCLE9BQU8sTUFBTTtFQUNiLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7RUFDdEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztFQUN0QixPQUFPO0FBQ1A7RUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0VBQzdCLFFBQVEsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNqQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRTtFQUNoQyxVQUFVLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztFQUN6QixVQUFVLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQzNCLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDbkIsU0FBUztFQUNULFFBQVEsTUFBTTtFQUNkLE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztFQUNwQyxHQUFHO0FBQ0g7RUFDQSxFQUFFLFVBQVUsRUFBRSxZQUFZO0VBQzFCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTztFQUN0QixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDbkIsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ2pCLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDaEIsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDZixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLEtBQUssS0FBSztFQUM3QztBQUNBO0VBQ0EsSUFBTyxJQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0VBQ3ZCLE1BQU0sQ0FBQyxDQUFDO0VBQ1IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osTUFBTSxFQUFFLENBQUM7RUFDVCxNQUFNLENBQUMsQ0FBQyxDQUNFO0FBQ1Y7RUFDQSxJQUFJLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNuQjtFQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNoQixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDakIsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNWO0VBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNDO0VBQ0EsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztFQUNuQjtBQUNBO0VBQ0EsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekI7RUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFO0VBQ3hCLFFBQVEsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QztFQUNBLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDL0IsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDdEI7QUFDQTtFQUNBLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0IsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNwQyxhQUFhLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7RUFDQSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QjtFQUNBLFFBQVEsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRTtFQUMxQixVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4QjtFQUNBLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNqQixTQUFTO0VBQ1QsT0FBTyxNQUFNO0VBQ2IsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2Y7RUFDQSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUNqQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QjtFQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sTUFBTSxDQUFDO0VBQ2xCLEdBQUc7QUFDSDtFQUNBLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUNoQyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDdkI7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDaEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0VBQzNELEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxRQUFRLEVBQUUsVUFBVSxLQUFLLEVBQUU7RUFDN0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPO0FBQ3hDO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU07RUFDdkIsTUFBTSxDQUFDLENBQUM7QUFDUjtFQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNoQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xCLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQixNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7RUFDL0IsS0FBSztBQUNMO0VBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztFQUN6QixHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLElBQUksSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDekQ7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDbkIsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RDtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUNsQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdkI7RUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0VBQ2hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0VBQ3pCO0VBQ0EsSUFBSSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUM7QUFDbEM7RUFDQTtFQUNBO0VBQ0E7RUFDQSxHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtFQUN4QixJQUFJLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxPQUFPO0VBQy9CLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDL0M7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzlEO0VBQ0E7RUFDQSxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsTUFBTSxFQUFFLFVBQVUsSUFBSSxFQUFFO0VBQzFCLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDO0VBQ2hDLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLFNBQVMsRUFBRTtFQUM5QixNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDeEMsTUFBTSxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztFQUN6QixLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtFQUN0QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztBQUNoRTtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFO0VBQ3JDLE1BQU0sWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztFQUM5QixNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQ3ZCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRSxPQUFPO0FBQ25DO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJO0VBQ2QsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxZQUFZO0VBQ3pDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDekIsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7RUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxHQUFHLElBQUksQ0FBQztBQUN4RTtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDdEQ7RUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDekI7RUFDQSxJQUFJLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xFO0VBQ0EsSUFBSSxJQUFJLEdBQUc7RUFDWCxNQUFNLGlEQUFpRDtFQUN2RCxNQUFNLENBQUM7RUFDUCxNQUFNLFlBQVk7RUFDbEIsTUFBTSxDQUFDO0VBQ1AsTUFBTSxvRkFBb0Y7RUFDMUYsTUFBTSxVQUFVO0VBQ2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDL0I7RUFDQSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsWUFBWTtFQUM3QixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFDO0VBQ0EsTUFBTSxJQUFJLFNBQVMsRUFBRTtFQUNyQixRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUMzQixRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUM1QixPQUFPLE1BQU07RUFDYixRQUFRLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDbEMsT0FBTztFQUNQLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0VBQ0EsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDakIsS0FBSyxDQUFDO0FBQ047RUFDQSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsbUNBQW1DLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUU7RUFDQSxJQUFJLEdBQUcsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7RUFDMUIsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLFNBQVMsRUFBRSxZQUFZO0VBQ3pCLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtFQUNoQztFQUNBO0VBQ0E7QUFDQTtFQUNBLE1BQU0sQ0FBQyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0VBQ3RELE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0VBQ2xDO0FBQ0E7RUFDQSxNQUFNLENBQUMsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUNwRDtBQUNBO0VBQ0EsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDL0MsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDL0MsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxzQkFBc0IsQ0FBQztFQUMxRCxJQUFJLElBQUksR0FBRztFQUNYLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUztFQUM1QixNQUFNLHVGQUF1RjtFQUM3RixNQUFNLElBQUksQ0FBQztFQUNYLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTztFQUMvQixNQUFNLEdBQUcsR0FBRyxjQUFjLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcscUJBQXFCLENBQUMsQ0FBQztFQUN6RSxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsY0FBYyxDQUFDO0FBQ3ZEO0VBQ0EsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0VBQzNELElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUNoQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDcEM7RUFDQSxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQ3RCLEdBQUc7QUFDSDtFQUNBLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0VBQzVCLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRSxPQUFPO0VBQ3ZDLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7RUFDdkIsR0FBRztBQUNIO0VBQ0EsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUU7RUFDekIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU07RUFDeEIsTUFBTSxDQUFDLEdBQUcsQ0FBQztFQUNYLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNO0VBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDVixLQUFLO0VBQ0wsSUFBSSxPQUFPLENBQUMsQ0FBQztFQUNiLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRTtFQUM5QixJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDeEM7RUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztBQUNuQjtFQUNBLElBQUksSUFBSSxJQUFJLEVBQUU7RUFDZCxNQUFNLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7RUFDQSxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUU7RUFDM0IsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztFQUN0QixRQUFRLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0VBQ3hCLFFBQVEsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQzVDLE9BQU8sTUFBTTtFQUNiLFFBQVEsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLFdBQVcsRUFBRTtFQUN6QixVQUFVLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUNyRSxlQUFlLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUNsRCxTQUFTO0VBQ1QsT0FBTztBQUNQO0VBQ0EsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ2hCLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQzNCLFFBQVEsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7RUFDMUIsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzlCLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2RCxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckQsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RCO0VBQ0EsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ2xCLE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM3QjtFQUNBLElBQUksT0FBTyxFQUFFLENBQUM7RUFDZCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsRUFBRSxZQUFZO0VBQ3pCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTztBQUMxQjtFQUNBLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztFQUNoQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUNyQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQ3RCLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUMxQixJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2pELElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2pDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO0VBQ3JCLEdBQUc7QUFDSDtFQUNBLEVBQUUsWUFBWSxFQUFFLFlBQVk7RUFDNUIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztFQUN4RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0VBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBQ3RELEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyxFQUFFLFVBQVUsSUFBSSxFQUFFO0VBQzdCLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztFQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztFQUN4QyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztFQUNuQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7RUFDckMsR0FBRztBQUNIO0VBQ0EsRUFBRSxVQUFVLEVBQUUsWUFBWTtFQUMxQixJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsT0FBTztFQUNsQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DO0VBQ0EsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3hCO0VBQ0E7RUFDQSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDcEQsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0VBQ3ZEO0VBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7RUFDQSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDeEMsR0FBRztBQUNIO0VBQ0EsRUFBRSxRQUFRLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFO0VBQ3JDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztFQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3RCO0VBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0VBQ3ZELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztFQUN2RDtFQUNBLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUNoQztFQUNBLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ2xCLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0VBQ3hCLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxPQUFPO0FBQ2xDO0VBQ0EsSUFBTyxJQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQzFCLE1BQWdCLENBQUMsQ0FBQyxTQUFTO0FBQzNCO0VBQ0E7QUFDQTtFQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDekI7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtFQUNwQjtFQUNBLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ3JCLE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUM1QixLQUFLO0FBQ0w7RUFDQSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO0VBQ3hCO0FBQ0E7RUFDQSxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNyQjtFQUNBO0FBQ0E7RUFDQTtFQUNBLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtFQUN6QixRQUFRO0VBQ1IsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRTtFQUMzQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0VBQzdDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxHQUFHO0VBQzNCLFVBQVUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxHQUFHO0VBQzNCLFVBQVUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDO0VBQ3pCLFVBQVUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxHQUFHO0VBQzNCLFVBQVU7RUFDVixVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztFQUN6QyxTQUFTLE1BQU07RUFDZixVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztFQUN4QyxTQUFTO0VBQ1QsT0FBTyxNQUFNO0VBQ2IsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7RUFDdkMsT0FBTztFQUNQLEtBQUs7RUFDTCxHQUFHO0FBQ0g7RUFDQSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRTtFQUN0QixJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsT0FBTztBQUNsQztFQUNBLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkQsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3JDO0VBQ0EsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO0VBQzlDLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDOUU7RUFDQSxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNyQjtFQUNBO0VBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksRUFBRSxZQUFZO0VBQ3BCO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ2hELElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDL0I7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDakQsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLEVBQUUsWUFBWTtFQUN0QjtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7RUFDN0IsSUFBSSxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7RUFDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ2hCO0VBQ0EsTUFBTSxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ2hELE1BQU0sSUFBSSxVQUFVLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQztFQUN6QyxLQUFLO0VBQ0wsSUFBSSxPQUFPLFdBQVcsQ0FBQztFQUN2QixHQUFHO0FBQ0g7RUFDQSxFQUFFLFlBQVksRUFBRSxVQUFVLEtBQUssRUFBRTtFQUNqQyxJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3RDLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDakQsR0FBRztBQUNIO0VBQ0EsRUFBRSxTQUFTLEVBQUUsVUFBVSxLQUFLLEVBQUU7RUFDOUIsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztFQUNBLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDaEM7RUFDQSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtFQUNuQixNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ3RCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ2YsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztFQUNoQixHQUFHO0VBQ0gsQ0FBQyxDQUFDO0FBQ0Y7RUFDTyxNQUFNLEtBQUssR0FBRyxDQUFDOztFQzEwQnRCO0VBQ0E7RUFDQTtBQUdBO0VBQ0EsTUFBTSxDQUFDLEdBQUc7QUFDVjtFQUNBLElBQUksVUFBVSxFQUFFLEdBQUc7QUFDbkI7RUFDQSxJQUFJLElBQUksRUFBRSxRQUFRLENBQUMsc0JBQXNCLEVBQUU7QUFDM0M7RUFDQSxJQUFJLFNBQVMsRUFBRSxJQUFJO0VBQ25CLElBQUksVUFBVSxFQUFFLElBQUk7RUFDcEIsSUFBSSxVQUFVLEVBQUUsSUFBSTtFQUNwQixJQUFJLFFBQVEsRUFBRSxJQUFJO0VBQ2xCLElBQUksSUFBSSxFQUFFLElBQUk7RUFDZCxJQUFJLEtBQUssRUFBRSxJQUFJO0FBQ2Y7RUFDQSxJQUFJLEtBQUssRUFBRSw0QkFBNEI7RUFDdkMsSUFBSSxLQUFLLEVBQUUsOEJBQThCO0VBQ3pDLElBQUksS0FBSyxFQUFFLDhCQUE4QjtBQUN6QztFQUNBLElBQUksUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDO0VBQ2xJLElBQUksVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUU7RUFDNUosSUFBSSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRTtBQUNwRztFQUNBLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO0VBQ2YsSUFBSSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRztFQUN2QixJQUFJLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDbkI7RUFDQSxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7RUFDeEIsSUFBSSxLQUFLLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFO0FBQ3hCO0VBQ0EsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTTtBQUM5QjtFQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUM5QixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDOUIsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDckQ7RUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDekM7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxNQUFNO0FBQ3pDO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFFO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLFVBQVUsR0FBRyxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsR0FBRTtFQUNoRixRQUFRLElBQUksVUFBVSxHQUFHLE1BQUs7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFJO0VBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07RUFDOUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM5QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVM7RUFDOUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBSztBQUN0QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO0VBQ3BCLFlBQVksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSTtFQUMvQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtFQUMxQyxnQkFBZ0IsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEdBQUU7RUFDMUQsZ0JBQWdCLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFFO0VBQzVELGFBQWE7RUFDYixZQUFZLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRTtFQUN4RCxZQUFZLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRTtFQUN6RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRTtFQUN0QixZQUFZLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07RUFDbkMsWUFBWSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7RUFDdkQsWUFBWSxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7RUFDeEQsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7RUFDdEIsWUFBWSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0VBQ25DLFlBQVksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUU7RUFDdEQsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTTtBQUN4QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO0VBQ3BCLFlBQVksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSTtFQUMvQixZQUFZLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFFO0VBQ3ZELFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFdBQVU7RUFDMUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsWUFBVztBQUN6RDtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQ3REO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRTtFQUM3QixZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQztFQUNoRCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0VBQ3pCLFlBQVksSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxLQUFJO0VBQ2hFLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLEdBQUU7QUFDOUM7RUFDQSxRQUFRLE9BQU8sS0FBSztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxFQUFFO0FBQ1o7RUFDQSxRQUFRLEVBQUUsRUFBRSxDQUFDO0VBQ2IsUUFBUSxFQUFFLEVBQUUsQ0FBQztFQUNiLFFBQVEsTUFBTSxDQUFDLENBQUM7QUFDaEI7RUFDQSxRQUFRLFFBQVEsR0FBRyxDQUFDO0VBQ3BCO0FBQ0E7RUFDQSxRQUFRLE9BQU8sQ0FBQyxNQUFNO0VBQ3RCLFFBQVEsVUFBVSxFQUFFLHFCQUFxQjtFQUN6QyxRQUFRLGNBQWMsRUFBRSxvQkFBb0I7QUFDNUM7RUFDQSxRQUFRLEtBQUssR0FBRyxNQUFNO0VBQ3RCLFFBQVEsUUFBUSxHQUFHLE1BQU07RUFDekIsUUFBUSxJQUFJLEdBQUcsTUFBTTtFQUNyQixRQUFRLFFBQVEsR0FBRyxNQUFNO0VBQ3pCLFFBQVEsVUFBVSxHQUFHLE1BQU07RUFDM0I7RUFDQSxRQUFRLElBQUksQ0FBQyxpQkFBaUI7RUFDOUIsUUFBUSxPQUFPLENBQUMsaUJBQWlCO0FBQ2pDO0VBQ0E7RUFDQSxRQUFRLE1BQU0sR0FBRyxTQUFTO0VBQzFCLFFBQVEsVUFBVSxHQUFHLENBQUM7QUFDdEI7RUFDQSxRQUFRLE9BQU8sR0FBRyxNQUFNO0VBQ3hCLFFBQVEsTUFBTSxHQUFHLE1BQU07RUFDdkI7QUFDQTtFQUNBLFFBQVEsTUFBTSxHQUFHLFNBQVM7RUFDMUIsUUFBUSxPQUFPLEdBQUcsU0FBUztFQUMzQixRQUFRLElBQUksR0FBRyxTQUFTO0VBQ3hCLFFBQVEsTUFBTSxHQUFHLFNBQVM7RUFDMUIsUUFBUSxNQUFNLEVBQUUsU0FBUztFQUN6QjtFQUNBO0VBQ0EsUUFBUSxVQUFVLEVBQUUscUJBQXFCO0VBQ3pDO0VBQ0EsUUFBUSxVQUFVLEVBQUUsUUFBUTtFQUM1QixRQUFRLFVBQVUsRUFBRSxNQUFNO0VBQzFCLFFBQVEsUUFBUSxDQUFDLEVBQUU7QUFDbkI7RUFDQSxRQUFRLE9BQU8sQ0FBQyx1QkFBdUI7RUFDdkMsUUFBUSxNQUFNLEVBQUUsdUJBQXVCO0VBQ3ZDLFFBQVEsU0FBUyxFQUFFLFNBQVM7QUFDNUI7RUFDQTtFQUNBLFFBQVEsSUFBSSxFQUFFLGVBQWU7QUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxHQUFHLEdBQUc7QUFDVjtFQUNBLFFBQVEsS0FBSyxFQUFFLHVHQUF1RyxHQUFHLHNIQUFzSDtFQUMvTyxRQUFRLE1BQU0sQ0FBQyw4RUFBOEU7RUFDN0YsUUFBUSxNQUFNLENBQUMsdUdBQXVHO0VBQ3RILEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksRUFBRTtBQUNWO0VBQ0EsUUFBUSxFQUFFLENBQUMsbURBQW1EO0VBQzlELFFBQVEsRUFBRSxDQUFDLG1EQUFtRDtBQUM5RDtFQUNBLFFBQVEsS0FBSyxDQUFDLDJOQUEyTjtFQUN6TyxRQUFRLEtBQUssQ0FBQyx1QkFBdUI7QUFDckM7RUFDQSxRQUFRLFNBQVMsQ0FBQyx1QkFBdUI7RUFDekMsUUFBUSxPQUFPLENBQUMsdUJBQXVCO0FBQ3ZDO0VBQ0EsUUFBUSxLQUFLLENBQUMsZ0ZBQWdGO0VBQzlGLFFBQVEsSUFBSSxDQUFDLG9IQUFvSDtFQUNqSSxRQUFRLE9BQU8sQ0FBQyx3SkFBd0o7RUFDeEssUUFBUSxZQUFZLENBQUMsNEZBQTRGO0VBQ2pILFFBQVEsU0FBUyxDQUFDLHVHQUF1RztFQUN6SCxRQUFRLE9BQU8sQ0FBQyxrSkFBa0o7RUFDbEssUUFBUSxLQUFLLENBQUMsZ2RBQWdkO0VBQzlkLFFBQVEsR0FBRyxDQUFDLG9QQUFvUDtFQUNoUSxRQUFRLFNBQVMsQ0FBQyw4RkFBOEY7RUFDaEgsUUFBUSxHQUFHLENBQUMsNkVBQTZFO0VBQ3pGLFFBQVEsUUFBUSxDQUFDLDZFQUE2RTtFQUM5RixRQUFRLE9BQU8sQ0FBQyxnREFBZ0Q7RUFDaEUsUUFBUSxNQUFNLENBQUMscUVBQXFFO0VBQ3BGLFFBQVEsSUFBSSxDQUFDLDJCQUEyQjtFQUN4QyxRQUFRLE1BQU0sQ0FBQyxzREFBc0Q7RUFDckUsUUFBUSxJQUFJLENBQUMsbUZBQW1GO0VBQ2hHLFFBQVEsSUFBSSxDQUFDLDZGQUE2RjtFQUMxRyxRQUFRLE1BQU0sQ0FBQyx5RkFBeUY7QUFDeEc7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHO0VBQ2QsUUFBUSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUNoQyxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxVQUFVO0FBQ3hCO0VBQ0EsUUFBUSxPQUFPLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFDekM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsR0FBRyxXQUFXLElBQUksRUFBRTtBQUNoQztFQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7RUFDN0IsWUFBWSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEQsU0FBUztBQUNUO0VBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzdCO0VBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsR0FBRTtBQUNqRjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUMxRDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMxQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsV0FBVTtFQUNyRCxRQUFRLElBQUksSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLFNBQVE7RUFDbkQsUUFBUSxJQUFJLE1BQU0sS0FBSyxTQUFTLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxXQUFVO0VBQ3pELFFBQVEsSUFBSSxNQUFNLEtBQUssU0FBUyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsV0FBVTtFQUN6RCxRQUFRLElBQUksS0FBSyxLQUFLLFNBQVMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUk7QUFDakQ7RUFDQSxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFJLENBQUM7RUFDckUsYUFBYSxJQUFJLElBQUksS0FBSTtFQUN6QjtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsZUFBZSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyw2SEFBNkgsQ0FBQztFQUNyUSxRQUFRLElBQUksTUFBTSxLQUFLLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ3JGO0VBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxxQ0FBcUMsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztFQUM5RixRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDBEQUF5RDtBQUMxRjtFQUNBLEtBQUs7QUFDTDtBQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFFBQVEsRUFBRSxZQUFZO0FBQzFCO0VBQ0E7RUFDQSxRQUFRLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDbkM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sRUFBRSxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7QUFDakQ7RUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztFQUNoRSxhQUFhLElBQUksR0FBRyxLQUFLLFNBQVMsR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0VBQzFILGFBQWEsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDM0U7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sRUFBRSxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDaEM7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFO0VBQzNCLFlBQVksSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDNUUsaUJBQWlCLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3ZDLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN6QjtFQUNBLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7RUFDM0IsWUFBWSxJQUFJLEdBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDekQsWUFBWSxJQUFJLEdBQUcsS0FBSyxNQUFNLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUNyRixpQkFBaUIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQ3pELFNBQVM7RUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsRUFBRTtBQUM1QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEtBQUssU0FBUyxHQUFHLE9BQU8sR0FBRyxDQUFDO0VBQzFDLGFBQWEsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDNUQsYUFBYSxJQUFJLEVBQUUsWUFBWSxLQUFLLEVBQUU7RUFDdEMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDbkYsWUFBWSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ3ZHLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksR0FBRyxHQUFHLFdBQVcsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRztBQUMvQztFQUNBLFFBQVEsSUFBSSxHQUFHLElBQUksSUFBSSxLQUFLLENBQUM7QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDcEY7RUFDQSxZQUFZLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRTtBQUMvQjtFQUNBLGdCQUFnQixHQUFHLEdBQUcsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0VBQ2pFLGdCQUFnQixDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsQztFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxhQUFhLE1BQU07RUFDbkI7RUFDQSxnQkFBZ0IsSUFBSSxHQUFHLEtBQUssU0FBUyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7RUFDekYsZ0JBQWdCLENBQUMsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDdEQ7RUFDQSxhQUFhO0VBQ2I7RUFDQSxTQUFTLE1BQU07QUFDZjtFQUNBLFlBQVksSUFBSSxHQUFHLEtBQUssU0FBUyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDcEYsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3BGO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDMUM7RUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxPQUFPLEdBQUcsQ0FBQztFQUMxQyxhQUFhLE9BQU8sR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDOUM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLGFBQWEsR0FBRyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUNoRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQzFELFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDdEIsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztFQUMvRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLEdBQUcsVUFBVSxHQUFHLEVBQUU7QUFDM0I7RUFDQSxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDdkIsUUFBUSxPQUFPLEdBQUcsQ0FBQyxVQUFVLEVBQUU7RUFDL0IsWUFBWSxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO0VBQ3ZFLFlBQVksR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDOUMsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLEdBQUcsV0FBVyxHQUFHLEdBQUc7QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNyQyxRQUFRLElBQUksQ0FBQyxFQUFFO0VBQ2YsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztFQUN6QixZQUFZLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDdEIsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQzlCLGdCQUFnQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2hFLGFBQWE7RUFDYixTQUFTO0VBQ1QsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxFQUFFO0VBQ2YsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztFQUN6QixZQUFZLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDdEIsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzdDLGFBQWE7RUFDYixTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksZ0JBQWdCLEVBQUUsWUFBWTtBQUNsQztFQUNBLFFBQVEsS0FBSyxRQUFRLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxLQUFLLElBQUksR0FBRyxPQUFPO0FBQ25FO0VBQ0EsUUFBUSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDM0M7RUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUM7RUFDcEksUUFBUSxDQUFDLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQztFQUNuSCxRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNqRTtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRztBQUN0QztFQUNBLFlBQVksQ0FBQyxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUM7RUFDekU7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLENBQUMsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDO0FBQzNFO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxjQUFjLEVBQUUsWUFBWTtBQUNoQztFQUNBLFFBQVEsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQztFQUNsRTtFQUNBLFFBQVEsS0FBSyxTQUFTLEtBQUssSUFBSSxHQUFHO0VBQ2xDO0VBQ0EsWUFBWSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQ3JHLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUM7RUFDbkQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFNBQVMsR0FBRyxXQUFXLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDcEM7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN2QztFQUNBO0VBQ0EsUUFBUSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDckQsUUFBUSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0VBQzVCLFlBQVksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVELFNBQVM7RUFDVCxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CO0VBQ0E7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDaEMsWUFBWSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUNoRCxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2pGLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQzdDLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLGFBQWEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUNsQztFQUNBLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLEdBQUcsQ0FBQztFQUM3RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEdBQUc7RUFDMUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7RUFDMUIsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHO0VBQ3RDLFVBQVUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDO0VBQ2pFLFNBQVM7RUFDVCxRQUFRLE9BQU8sUUFBUSxDQUFDO0VBQ3hCLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0VBQzlCLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUMzQyxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM5QjtFQUNBLFFBQVEsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxQjtFQUNBLFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUMzQjtFQUNBLFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0VBQ2pCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0VBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0VBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0VBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0VBQ2pCLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0VBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7RUFDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztFQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtFQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0VBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7RUFDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztFQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDbkIsU0FB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LENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztFQUNwSixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JIO0VBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM3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Q0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekg7RUFDQTtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0VBQ0E7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztFQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0VBQ0E7QUFDQTtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdGO0VBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMvQjtFQUNBLFNBQVMsTUFBTTtFQUNmO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzVGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0VBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckksWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9GLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BJO0VBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztFQUMvQixTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxhQUFhLEVBQUUsWUFBWTtBQUMvQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0VBQ2hKLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN2QyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDM0IsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQ3hCLFFBQVcsSUFBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0VBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztFQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztFQUN2QjtFQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7RUFDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7RUFDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0VBQ0EsWUFBWSxFQUFFLEdBQUc7RUFDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7RUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMs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TSxHQUFHLEtBQUssQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7RUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcs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Q0FBQztFQUN0RSxPQUFPO0VBQ1AsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ3RCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQzdFLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0VBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7RUFDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEMsT0FBTztFQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDdkIsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN6QyxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxHQUFHO0VBQ1QsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNyQztFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7RUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQzVEO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0VBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7RUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3ZDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7RUFDaEMsS0FBSyxNQUFNO0VBQ1gsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDekMsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0VBQzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDMUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUN0QyxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDMUI7RUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDcEQsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7RUFDOUIsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDMUIsT0FBTztFQUNQLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFO0VBQ1YsTUFBTSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUk7RUFDMUIsVUFBVSxJQUFJLENBQUMsTUFBTTtFQUNyQixVQUFVLElBQUksQ0FBQyxJQUFJO0VBQ25CLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO0VBQ3pC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RyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFHO0VBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07RUFDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07RUFDNUI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7RUFDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0VBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtB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QyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ25ELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztFQUNBLFNBQVM7QUFDVDtBQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUN0QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7RUFDckQsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUU7RUFDcEUsU0FBUztFQUNUO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUN4RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDaEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0VBQ3hCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUc7RUFDeEI7RUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDcEIsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztFQUNsRCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0FBQ3ZDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7RUFDM0IsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7RUFDN0IsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUU7RUFDM0YsaUJBQWlCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFDO0VBQ25ELFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFFO0VBQ25ELFlBQVksSUFBSSxDQUFDLElBQUksR0FBRTtFQUN2QixTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7QUFDbEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztFQUN0QyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSTtFQUMxQixLQUFLLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7QUFDL0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsTUFBSztFQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUU7QUFDckM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtFQUM3QixZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFDO0VBQ2xDLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUU7RUFDNUQsU0FBUyxNQUFNO0VBQ2YsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUMxQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sRUFBRTtBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQUs7QUFDekM7RUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7RUFDQSxZQUFZLENBQUMsR0FBRyxFQUFDO0VBQ2pCLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQUs7RUFDM0U7RUFDQSxZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRTtFQUMxQixnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztFQUN4QyxhQUFhLE1BQU07RUFDbkIsZ0JBQWdCLENBQUMsR0FBRyxFQUFDO0VBQ3JCLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztFQUM3QixhQUFhO0FBQ2I7RUFDQTtFQUNBLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRTtBQUNqQztFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxDQUFDO0FBQ2hCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ25CO0VBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzNCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7RUFDeEMsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBQztBQUNwQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNqQztFQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUI7RUFDQSxZQUFZLFFBQVEsQ0FBQztBQUNyQjtFQUNBLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLO0VBQ2hGLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLO0VBQ3JGLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLO0VBQ2xGLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLO0FBQ3RGO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsWUFBWSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLE1BQU07QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBQztFQUNyQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7RUFDckIsUUFBUSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDM0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUc7QUFDeEI7RUFDQSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsT0FBTTtBQUN0QztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksWUFBWSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUU7RUFDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7RUFDeEQsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQ2xDO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQztFQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUNyQztFQUNBLFFBQVEsT0FBTyxJQUFJO0FBQ25CO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQ3hCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN6QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRTtFQUMvQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUM7QUFDdkM7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtFQUNyQixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7RUFDbEQ7RUFDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztFQUM1RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7RUFDQTtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0VBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7RUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtFQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7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LElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0VBQ0EsUUFBUSxRQUFRLElBQUk7RUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RDtFQUNBLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtFQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0VBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RDtFQUNBLFlBQVksTUFBTTtFQUNsQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztFQUNqRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0VBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7RUFDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7RUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDckMsWUFBWSxJQUFJLENBQUMs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QUssQ0FBQztBQUNuQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7RUFDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7RUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztFQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM1QztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7RUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENB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QUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQ25EO0VBQ0EsT0FBTyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtFQUNBLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkMsT0FBTztBQUNQO0VBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3BEO0VBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDakM7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0VBQ0EsU0FBUztFQUNULEtBQUs7RUFDTCxJQUFJO0VBQ0osR0FBRztBQUNIO0VBQ0EsRUFBRTtBQUNGO0VBQ0E7QUFDQTtFQUNBLENBQUMsU0FBUyxDQUFDLEdBQUc7QUFDZDtFQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7RUFDakUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDbEMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN0QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2xELFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9DO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxJQUFJLENBQUMsR0FBRztBQUNUO0VBQ0EsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDZjtFQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0VBQ3RDO0VBQ0EsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0VBQ0EsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEI7RUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM5QztFQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCO0VBQ0EsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDbkI7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztFQUN0QztFQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDZjtFQUNBLEtBQUssSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hFO0VBQ0EsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDeEI7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0VBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQ3hDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDN0U7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDbkQsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckQ7RUFDQSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTztBQUNwQjtFQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUN4RCxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQ3ZFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7RUFDM0UsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QztFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2Y7RUFDQSxFQUFFLElBQUksQ0FBQyxZQUFZLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUQsYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RCxhQUFhLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7RUFDN0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNwQjtFQUNBLEtBQUssSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUN0QyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxFQUFFO0FBQzFDO0VBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7RUFDNUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU07RUFDMUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUM5QztFQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0VBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDdkIsTUFBTTtFQUNOLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNoQjtFQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDdEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQzlDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUN6QixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxXQUFXLENBQUMsR0FBRztBQUNoQjtFQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7RUFDakIsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFLO0FBQ2Y7RUFDQSxLQUFjLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU87RUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDbkMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7RUFDQSxLQUFLLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMxQztFQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7RUFDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztFQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUM7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0VBQ0E7RUFDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtFQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7RUFDQTtBQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7RUFDNUQ7RUFDQTtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtFQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0VBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0VBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtFQUNwQztFQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztFQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0VBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtFQUNBLEVBQUU7QUFDRjtBQUNBO0VBQ0E7O0VDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQztBQUMvQjtFQUNB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Q0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7RUFDQTtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztFQUM5QjtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztFQUN0RSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtFQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QztFQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDL0IsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkM7RUFDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDdkQ7RUFDQSxZQUFZLElBQUksQ0FBQyxN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LEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0VBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0VBQ25DO0VBQ0EsS0FBSztFQUNMO0VBQ0E7O0VDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7RUFDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0VBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztFQUNBLFFBQVEsSUFBSSxDQUFD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RyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0VBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtFQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0VBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7RUFDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQztFQUM5QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFJO0VBQzlDLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7RUFDckMsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUMzQyxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQztFQUNoRixpQkFBaUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztFQUMzRCxTQUFTO0VBQ1QsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFdBQVcsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQ0FBaUM7RUFDcEUsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUc7RUFDOUIsUUFBUSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUk7RUFDckMsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2xCLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQW9CO0VBQ2pHLGlCQUFpQixDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFPO0VBQ3RFLFlBQVksQ0FBQyxHQUFFO0VBQ2YsU0FBUztFQUNULFFBQVEsT0FBTyxDQUFDO0VBQ2hCLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEM7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ25GLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDcEgsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEc7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxT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QUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyw0Q0FBNEMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDO0VBQzVILFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyx3REFBd0QsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUM1SztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSTtFQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw2QkFBNkIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLEVBQUM7QUFDMUk7RUFDQSxRQUFnQixJQUFJLENBQUMsRUFBRTtFQUN2QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQU87QUFDaEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFFO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcs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SUFBSSxFQUFFLEVBQUUsQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7RUFDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztFQUN6QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFJO0FBQzVEO0VBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztFQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7RUFDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzNCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxPQUFPLElBQUk7RUFDbkIsWUFBWSxLQUFLLENBQUM7RUFDbEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDbEMsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3hFLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNsRSxpQkFBaUIsTUFBTTtFQUN2QixvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3JFO0VBQ0Esb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNyRSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDaEUsaUJBQWlCO0VBQ2pCO0VBQ0EsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxDQUFDO0VBQ2xCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQ2xDLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN6RSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDM0UsaUJBQWlCLE1BQU07RUFDdkIsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN0RTtFQUNBLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDeEUsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNwRSxpQkFBaUI7RUFDakIsWUFBWSxNQUFNO0FBR2xCO0VBQ0EsU0FBUztFQUNULEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxXQUFXLENBQUMsRUFBRTtFQUNsQixRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0VBQ3pELFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU87RUFDdkMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbkY7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFlBQVksQ0FBQyxFQUFFO0FBQ25CO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxHQUFHLE9BQU87RUFDNUMsUUFBUSxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0VBQ3ZDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDNUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVCLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUNoRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7RUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7RUFDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7RUFDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDM0QsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0VBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtFQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0VBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM3QjtBQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztFQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7RUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7RUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsU0FBUyxNQUFNO0VBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFD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USxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztFQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDL0IsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztFQUM5QjtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDckQ7RUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN4RCxhQUFhLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztFQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3hELGFBQWE7RUFDYjtFQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMvQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3pCLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQztFQUNBLFlBQVksT0FBTyxJQUFJLENBQUM7RUFDeEI7RUFDQSxTQUFTO0VBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUN6RCxRQUFRLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUM1QyxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUMxQztBQUNBO0VBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZCLFlBQVksS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUM1QyxZQUFZLElBQUksR0FBRyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssS0FBSyxDQUFDO0VBQ3JELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDckQsWUFBWSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUMxQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUc7QUFDM0M7RUFDQSxZQUFZLENBQUMsR0FBRyxVQUFVLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO0VBQzFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUMvQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDL0MsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQ2hELFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUNoRCxZQUFZLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUM5RDtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1RDtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3BDLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDckU7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDakMsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0VBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztFQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3JGO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0VBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7RUFDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztFQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3pEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztFQUNyQztBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0VBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7RUFDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtFQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFD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RTtBQUNBO0VBQ0EsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0FBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7RUFDQSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDMUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDNUM7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztFQUNsRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUN2QjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUN4RCxhQUFhLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ3hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDakQsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtFQUMxQixZQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQzdCLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQy9DLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNqRCxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7RUFDckQsU0FBUyxNQUFNO0VBQ2YsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0VBQ2xELFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztFQUN0RCxTQUFTO0VBQ1QsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUNwQztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0VBQ3JCLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ3hELFNBQVMsTUFBTTtFQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ3hELFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0I7RUFDQSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdB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Q0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7RUFDM0M7QUFDQTtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0VBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDeEIsR0FBRztBQUNIO0VBQ0EsRUFBRSxLQUFLLEdBQUc7RUFDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7RUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDcEM7RUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNsQixHQUFHO0VBQ0g7O0VDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUss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QVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0VBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQztFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0VBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7RUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7RUFDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0VBQy9CO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztFQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztFQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7RUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxH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USxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7RUFDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtB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QUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztFQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7RUFDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDL0xBO0FBRUE7RUFDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtFQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNuQjtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztFQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVB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LE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDdEM7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztFQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtFQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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UUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0VBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7RUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzlGO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0VBQ0E7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7RUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0VBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtFQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0VBQ0EsS0FBSztFQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7RUFDbkI7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QUM7QUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7RUFDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkc7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNwSDtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDMUI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTs7RUNyUkE7QUFJQTtFQUNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztFQUNwQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0VBQ3JCO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUN0QixFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUM7QUFDaEM7RUFDQSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNYLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQztBQUM3QztFQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzNCLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM3RCxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7RUFDN0IsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3pFLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekU7RUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7RUFDckMsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0VBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRO0VBQ2YsR0FBRyxPQUFPLENBQUMsQ0FBQyxRQUFRLEtBQUssVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDNUQ7RUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3RCLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDdEMsRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNuQjtFQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFH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LENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQzVDLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDcEMsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDcEQsSUFBSSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7RUFDckIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDL0MsS0FBSyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ2pELEtBQUssTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDMUMsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztFQUM3QyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7RUFDaEIsS0FBSztFQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQ3hDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUNwQyxJQUFJLE1B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QUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2Y7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3ZFO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7RUFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTTtFQUNmLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxhQUFhLENBQUM7QUFDdkU7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDdkQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNsQixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztFQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDbkIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUNuQixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUM3QjtFQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN6QjtFQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRztFQUM1QixNQUFNLEtBQUs7RUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztFQUNwQixRQUFRLCtDQUErQztFQUN2RCxRQUFRLEVBQUUsQ0FBQyxPQUFPO0VBQ2xCLFFBQVEsSUFBSTtFQUNaLFFBQVEsSUFBSSxDQUFDLE1BQU07RUFDbkIsS0FBSyxDQUFDO0FBQ047RUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLEdBQUc7RUFDakMsTUFBTSxLQUFLO0VBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7RUFDcEIsUUFBUSwwREFBMEQ7RUFDbEUsS0FBSyxDQUFDO0VBQ047RUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUN4QixJQUFJLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsb0NBQW9DLEdBQUcsRUFBRSxDQUFDO0VBQzVFLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRztFQUMxQixNQUFNLEtBQUs7RUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxzQkFBc0I7RUFDeEQsS0FBSyxDQUFDO0VBQ04sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRztFQUM3QixNQUFNLEtBQUs7RUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztFQUNwQixRQUFRLHdCQUF3QjtFQUNoQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN6QixRQUFRLDRDQUE0QztFQUNwRCxRQUFRLEVBQUUsQ0FBQyxVQUFVO0VBQ3JCLFFBQVEsR0FBRztFQUNYLEtBQUssQ0FBQztFQUNOLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVDO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHO0VBQzNCLE1BQU0sS0FBSztFQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO0VBQ3BCLFFBQVEsYUFBYTtFQUNyQixRQUFRLEVBQUUsQ0FBQyxNQUFNO0VBQ2pCLFFBQVEsNEJBQTRCO0VBQ3BDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3pCLFFBQVEsa0JBQWtCO0VBQzFCLEtBQUssQ0FBQztFQUNOLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN4RDtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztFQUN0QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUc7RUFDM0IsTUFBTSxLQUFLO0VBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUc7RUFDbEIsUUFBUSxxRUFBcUU7RUFDN0UsUUFBUSxDQUFDO0VBQ1QsUUFBUSxnQ0FBZ0M7RUFDeEMsUUFBUSxDQUFDO0VBQ1QsUUFBUSxxQ0FBcUM7RUFDN0MsUUFBUSxJQUFJLENBQUMsRUFBRTtFQUNmLFFBQVEsa0JBQWtCO0VBQzFCLFNBQVMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDckIsUUFBUSxZQUFZO0VBQ3BCLFFBQVEsRUFBRSxDQUFDLElBQUk7RUFDZixRQUFRLEdBQUc7RUFDWCxLQUFLLENBQUM7RUFDTixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNO0VBQ3pDLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7RUFDMUIsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7QUFDakQ7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQzNELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDbEU7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0VBQ2hELE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0VBQ2xDLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEU7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN4RTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7RUFDNUIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdB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QVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZEO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtFQUNYLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0VBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEM7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0VBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0VBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDaEQsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3pCLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtFQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDakQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0QsR0FBRztBQUNIO0VBQ0EsRUFBRSxJQUFJLEdBQUc7RUFDVCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUN6RCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsR0FBRztFQUNkLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElB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QUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDNUUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUM3QyxHQUFHO0FBQ0g7RUFDQSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUU7RUFDbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztFQUM1QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDaEIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDMUIsS0FBSztFQUNMLEdBQUc7RUFDSDs7Ozs7Ozs7Ozs7Ozs7In0= diff --git a/build/uil.module.js b/build/uil.module.js index eeb943a..34efc05 100644 --- a/build/uil.module.js +++ b/build/uil.module.js @@ -8820,782 +8820,785 @@ const autoType = function ( v, o ) { */ class Gui { - constructor(o = {}) { - this.isGui = true; + constructor(o = {}) { + this.isGui = true; - this.name = "gui"; + this.name = "gui"; - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors); - else this.colors = Tools.defineColor(o); + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); - //this.cleanning = false + //this.cleanning = false - // style - this.css = Tools.cloneCss(); + // style + this.css = Tools.cloneCss(); - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") - ? o.addDOMEventListeners - : true; + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; - this.callback = o.callback === undefined ? null : o.callback; + this.callback = o.callback === undefined ? null : o.callback; - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - this.cn = ""; + this.cn = ""; - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; - this.size.h = this.size.h < 11 ? 11 : this.size.h; + this.size.h = this.size.h < 11 ? 11 : this.size.h; - // local mouse and zone - this.local = new V2().neg(); - this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; - // virtual mouse - this.mouse = new V2().neg(); + // virtual mouse + this.mouse = new V2().neg(); - this.h = 0; - //this.prevY = -1; - this.sw = 0; + this.h = 0; + //this.prevY = -1; + this.sw = 0; - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; - this.autoResize = o.autoResize === undefined ? true : o.autoResize; + this.autoResize = o.autoResize === undefined ? true : o.autoResize; - // default position - this.isCenter = o.center || false; - this.cssGui = - o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; - this.isNewTarget = false; + this.isNewTarget = false; - let cc = this.colors; - - this.content = Tools.dom( - "div", - this.css.basic + - " width:0px; height:auto; top:0px; background:" + - cc.content + - "; " + - this.cssGui - ); - - this.innerContent = Tools.dom( - "div", - this.css.basic + - "width:100%; top:0; left:0; height:auto; overflow:hidden;" - ); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); + let cc = this.colors; - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom( - "div", - this.css.basic + flexible + "width:100%; left:0; " - ); - this.innerContent.appendChild(this.inner); - - // scroll - this.scrollBG = Tools.dom( - "div", - this.css.basic + - "right:0; top:0; width:" + - (this.size.s - 1) + - "px; height:10px; display:none; background:" + - cc.background + - ";" - ); - this.content.appendChild(this.scrollBG); + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); - this.scroll = Tools.dom( - "div", - this.css.basic + - "background:" + - cc.button + - "; right:2px; top:0; width:" + - (this.size.s - 4) + - "px; height:10px;" - ); - this.scrollBG.appendChild(this.scroll); + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); - let r = cc.radius; - this.bottom = Tools.dom( - "div", - this.css.txt + - "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + - r + - "px; border-bottom-left-radius:" + - r + - "px; justify-content:center; height:" + - this.bh + - "px; line-height:" + - (this.bh - 5) + - "px; color:" + - cc.text + - ";" - ); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - this.bottom.style.background = cc.background; + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); - // + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } - if (this.parent !== null) this.parent.appendChild(this.content); + if (this.parent !== null) this.parent.appendChild(this.content); - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } - // height transition - this.transition = - o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - this.setWidth(); + this.setWidth(); - if (this.isCanvas) this.makeCanvas(); + if (this.isCanvas) this.makeCanvas(); - Roots.add(this); - } + Roots.add(this); + } - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN, - }); - } + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + }); + } - triggerMouseUp(x, y) { - /* + triggerMouseUp(x, y) { + /* clientX,clientY are no used when isCanvas==true */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } - Roots.needReZone = true; - } + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = - "height " + this.transition + "s ease-out"; - this.content.style.transition = - "height " + this.transition + "s ease-out"; - this.bottom.style.transition = "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } + Roots.needReZone = true; + } - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = + "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } - // ---------------------- - // CANVAS - // ---------------------- + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } - onDraw() {} + // ---------------------- + // CANVAS + // ---------------------- - makeCanvas() { - this.canvas = document.createElementNS( - "http://www.w3.org/1999/xhtml", - "canvas" - ); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + onDraw() {} - //console.log( this.canvas.width, this.canvas.height ) - } + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - draw(force) { - if (this.canvas === null) return; + //console.log( this.canvas.width, this.canvas.height ) + } - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } + draw(force) { + if (this.canvas === null) return; - ////// + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } - getDom() { - return this.content; - } + ////// - noMouse() { - this.mouse.neg(); - } + getDom() { + return this.content; + } - setMouse(uv, flip = true) { - if (flip) - this.mouse.set( - Math.round(uv.x * this.canvas.width), - this.canvas.height - Math.round(uv.y * this.canvas.height) - ); - else - this.mouse.set( - Math.round(uv.x * this.canvas.width), - Math.round(uv.y * this.canvas.height) - ); - //this.mouse.set( m.x, m.y ); + noMouse() { + this.mouse.neg(); + } - //console.log("setMouse "+uv.x+" "+uv.y) - } + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } + console.log("setMouse " + uv.x + " " + uv.y); + } - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } - onChange(f) { - this.callback = f || null; - return this; - } + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } - // ---------------------- - // STYLES - // ---------------------- + onChange(f) { + this.callback = f || null; + return this; + } - mode(n) { - let needChange = false; - let cc = this.colors; + // ---------------------- + // STYLES + // ---------------------- - if (n !== this.cn) { - this.cn = n; - - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } + mode(n) { + let needChange = false; + let cc = this.colors; + + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } - needChange = true; - } + needChange = true; + } - return needChange; - } + return needChange; + } - // ---------------------- - // TARGET - // ---------------------- + // ---------------------- + // TARGET + // ---------------------- - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } - this.proto = null; - this.current = -1; + this.proto = null; + this.current = -1; - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - Roots.cursor(); - return true; - } + Roots.cursor(); + return true; + } - // ---------------------- - // ZONE TEST - // ---------------------- + // ---------------------- + // ZONE TEST + // ---------------------- - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; - this.isReset = false; + this.isReset = false; - let name = ""; + let name = ""; - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; - else name = l.x > s ? "scroll" : "content"; + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; - return name; - } + return name; + } - // ---------------------- - // EVENTS - // ---------------------- + // ---------------------- + // EVENTS + // ---------------------- - handleEvent(e) { - //if( this.cleanning ) return + handleEvent(e) { + //if( this.cleanning ) return - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; - let change = false; - let protoChange = false; + let change = false; + let protoChange = false; - let name = this.testZone(e); + let name = this.testZone(e); - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } - if (!name) return; + if (!name) return; - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - if (Roots.isMobile && type === "mousedown") this.getNext(e, change); + if (Roots.isMobile && type === "mousedown") + this.getNext(e, change); - if (this.proto) protoChange = this.proto.handleEvent(e); + if (this.proto) protoChange = this.proto.handleEvent(e); - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) - change = this.onWheel(e); + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); - if (!Roots.lock) { - this.getNext(e, change); - } + if (!Roots.lock) { + this.getNext(e, change); + } - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) + this.update(e.clientY - this.zone.y - this.sh * 0.5); - break; - } + break; + } - if (this.isDown) change = true; - if (protoChange) change = true; + if (this.isDown) change = true; + if (protoChange) change = true; - if (type === "keyup") change = true; - if (type === "keydown") change = true; + if (type === "keyup") change = true; + if (type === "keydown") change = true; - if (change) this.draw(); - } + if (change) this.draw(); + } - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); - if (next !== this.current) { - this.clearTarget(); - this.current = next; - this.isNewTarget = true; - } + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } - // ---------------------- - // RESET - // ---------------------- + // ---------------------- + // RESET + // ---------------------- - reset(force) { - if (this.isReset) return; + reset(force) { + if (this.isReset) return; - //this.resetItem(); + //this.resetItem(); - this.mouse.neg(); - this.isDown = false; + this.mouse.neg(); + this.isDown = false; - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); - if (r || r2) this.draw(true); + if (r || r2) this.draw(true); - this.isReset = true; + this.isReset = true; - //Roots.lock = false; - } + //Roots.lock = false; + } - // ---------------------- - // ADD NODE - // ---------------------- + // ---------------------- + // ADD NODE + // ---------------------- - add() { - //if(this.cleanning) this.cleanning = false + add() { + //if(this.cleanning) this.cleanning = false - let a = arguments; - let ontop = false; + let a = arguments; + let ontop = false; - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); - else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } - let u = add.apply(this, a); + let u = add.apply(this, a); - if (u === null) return; + if (u === null) return; - if (ontop) this.uis.unshift(u); - else this.uis.push(u); + if (ontop) this.uis.unshift(u); + else this.uis.push(u); - this.calc(); + this.calc(); - this.isEmpty = false; + this.isEmpty = false; - return u; - } + return u; + } - // remove one node + // remove one node - remove(n) { - if (n.dispose) n.dispose(); - } + remove(n) { + if (n.dispose) n.dispose(); + } - // call after uis clear + // call after uis clear - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } - // clear all gui + // clear all gui - empty() { - //this.cleanning = true + empty() { + //this.cleanning = true - //this.close(); + //this.close(); - let i = this.uis.length, - item; + let i = this.uis.length, + item; - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } - this.uis = []; - this.isEmpty = true; - this.calc(); - } + this.uis = []; + this.isEmpty = true; + this.calc(); + } - clear() { - this.empty(); - } + clear() { + this.empty(); + } - clear2() { - setTimeout(this.empty.bind(this), 0); - } + clear2() { + setTimeout(this.empty.bind(this), 0); + } - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } - // ---------------------- - // ITEMS SPECIAL - // ---------------------- + // ---------------------- + // ITEMS SPECIAL + // ---------------------- - resetItem() { - if (!this.isItemMode) return; + resetItem() { + if (!this.isItemMode) return; - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } - setItem(name) { - if (!this.isItemMode) return; + setItem(name) { + if (!this.isItemMode) return; - name = name || ""; - this.resetItem(); + name = name || ""; + this.resetItem(); - if (!name) { - this.update(0); - return; - } + if (!name) { + this.update(0); + return; + } - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) - this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } - // ---------------------- - // SCROLL - // ---------------------- + // ---------------------- + // SCROLL + // ---------------------- - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; - if (b) { - this.total = this.h; + if (b) { + this.total = this.h; - this.maxView = this.maxHeight; + this.maxView = this.maxHeight; - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; - this.range = this.maxView - this.sh; + this.range = this.maxView - this.sh; - this.oy = Tools.clamp(this.oy, 0, this.range); + this.oy = Tools.clamp(this.oy, 0, this.range); - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } - update(y) { - y = Tools.clamp(y, 0, this.range); + update(y) { + y = Tools.clamp(y, 0, this.range); - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } - // ---------------------- - // RESIZE FUNCTION - // ---------------------- + // ---------------------- + // RESIZE FUNCTION + // ---------------------- - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } - setHeight() { - if (this.tmp) clearTimeout(this.tmp); + setHeight() { + if (this.tmp) clearTimeout(this.tmp); - this.zone.h = this.bh; - this.isScroll = false; + this.zone.h = this.bh; + this.isScroll = false; - if (this.isOpen) { - this.h = this.calcUis(); + if (this.isOpen) { + this.h = this.calcUis(); - let hhh = this.forceHeight - ? this.forceHeight + this.zone.y - : window.innerHeight; + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; - this.maxHeight = hhh - this.zone.y - this.bh; + this.maxHeight = hhh - this.zone.y - this.bh; - let diff = this.h - this.maxHeight; + let diff = this.h - this.maxHeight; - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } - this.upScroll(this.isScroll); + this.upScroll(this.isScroll); - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; - if (this.forceHeight && this.lockHeight) - this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } - rezone() { - Roots.needReZone = true; - } + rezone() { + Roots.needReZone = true; + } - setWidth(w) { - if (w) this.zone.w = w; + setWidth(w) { + if (w) this.zone.w = w; - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) - this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = + -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } } export { Files, Gui, REVISION, Tools, add }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9pZiggUi5JRC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gUi5JRC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgIFIuSUQuaGFuZGxlRXZlbnQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5jbGVhck9sZElEKCk7XHJcbiAgICBpZiAobGVhdmUpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElEXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kSUQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICBuZXh0ID0gLTEsXHJcbiAgICAgIHUsXHJcbiAgICAgIHgsXHJcbiAgICAgIHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuXHJcbiAgICAgIGlmICh1LmlzQ2FudmFzT25seSkge1xyXG4gICAgICAgIHggPSB1Lm1vdXNlLng7XHJcbiAgICAgICAgeSA9IHUubW91c2UueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChSLm9uWm9uZSh1LCB4LCB5KSkge1xyXG4gICAgICAgIG5leHQgPSBpO1xyXG5cclxuICAgICAgICBpZiAobmV4dCAhPT0gUi5jdXJyZW50KSB7XHJcbiAgICAgICAgICBSLmNsZWFyT2xkSUQoKTtcclxuICAgICAgICAgIFIuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICBSLklEID0gdTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCA9PT0gLTEpIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFyT2xkSUQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5JRCkgcmV0dXJuO1xyXG4gICAgUi5jdXJyZW50ID0gLTE7XHJcbiAgICBSLklELnJlc2V0KCk7XHJcbiAgICBSLklEID0gbnVsbDtcclxuICAgIFIuY3Vyc29yKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgR1VJIC8gR1JPVVAgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXM6ICh1aXMsIHpvbmUsIHB5LCBncm91cCA9IGZhbHNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdjYWxjX3VpcycpXHJcblxyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoLFxyXG4gICAgICB1LFxyXG4gICAgICBweCA9IDAsXHJcbiAgICAgIG4gPSAwLFxyXG4gICAgICB0dyxcclxuICAgICAgbSxcclxuICAgICAgZGl2O1xyXG5cclxuICAgIGxldCBoZWlnaHQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IHVpc1tuXTtcclxuICAgICAgbisrO1xyXG5cclxuICAgICAgaWYgKCFncm91cCAmJiB1LmlzR3JvdXApIHUuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbSA9IHUubWFyZ2luO1xyXG4gICAgICAvL2RpdiA9IHUubWFyZ2luRGl2XHJcblxyXG4gICAgICB1LnpvbmUudyA9IHUudztcclxuICAgICAgdS56b25lLmggPSB1LmggKyBtO1xyXG5cclxuICAgICAgaWYgKCF1LmF1dG9XaWR0aCkge1xyXG4gICAgICAgIGlmIChweCA9PT0gMCkgaGVpZ2h0ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgcHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTsgLy8gKyB1Lm10b3BcclxuICAgICAgICAvL2lmKGRpdikgdS56b25lLnkgKz0gbSAqIDAuNVxyXG5cclxuICAgICAgICB0dyA9IFIuZ2V0V2lkdGgodSk7XHJcbiAgICAgICAgaWYgKHR3KSB1LnpvbmUudyA9IHUudyA9IHR3O1xyXG4gICAgICAgIGVsc2UgaWYgKHUuZncpIHUuem9uZS53ID0gdS53ID0gdS5mdztcclxuXHJcbiAgICAgICAgcHggKz0gdS56b25lLnc7XHJcblxyXG4gICAgICAgIGlmIChweCA+PSB6b25lLncpIHtcclxuICAgICAgICAgIHB5ICs9IHUuaCArIG07XHJcbiAgICAgICAgICAvL2lmKGRpdikgcHkgKz0gbSAqIDAuNVxyXG4gICAgICAgICAgcHggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBweCA9IDA7XHJcblxyXG4gICAgICAgIHUuem9uZS54ID0gem9uZS54ICsgdS5keDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5O1xyXG4gICAgICAgIHB5ICs9IHUuaCArIG07XHJcblxyXG4gICAgICAgIGhlaWdodCArPSB1LmggKyBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9LFxyXG5cclxuICBmaW5kVGFyZ2V0OiBmdW5jdGlvbiAodWlzLCBlKSB7XHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoUi5vblpvbmUodWlzW2ldLCBlLmNsaWVudFgsIGUuY2xpZW50WSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBaT05FXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmaW5kWm9uZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICBpZiAoIVIubmVlZFJlWm9uZSAmJiAhZm9yY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgaSA9IFIudWkubGVuZ3RoLFxyXG4gICAgICB1O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcbiAgICAgIFIuZ2V0Wm9uZSh1KTtcclxuICAgICAgaWYgKHUuaXNHdWkpIHUuY2FsY1VpcygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIubmVlZFJlWm9uZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG9uWm9uZTogZnVuY3Rpb24gKG8sIHgsIHkpIHtcclxuICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHogPSBvLnpvbmU7XHJcbiAgICBsZXQgbXggPSB4IC0gei54OyAvLyAtIG8uZHg7XHJcbiAgICBsZXQgbXkgPSB5IC0gei55O1xyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICYmIG8uZ3JvdXAubWFyZ2luRGl2ICkgbXkgKz0gby5ncm91cC5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgIT09IG51bGwgKSBteCAtPSBvLmR4XHJcblxyXG4gICAgbGV0IG92ZXIgPSBteCA+PSAwICYmIG15ID49IDAgJiYgbXggPD0gei53ICYmIG15IDw9IHouaDtcclxuXHJcbiAgICAvL2lmKCBvLm1hcmdpbkRpdiApIG15IC09IG8ubWFyZ2luICogMC41XHJcblxyXG4gICAgaWYgKG92ZXIpIG8ubG9jYWwuc2V0KG14LCBteSk7XHJcbiAgICBlbHNlIG8ubG9jYWwubmVnKCk7XHJcblxyXG4gICAgcmV0dXJuIG92ZXI7XHJcbiAgfSxcclxuXHJcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAvL3JldHVybiBvLmdldERvbSgpLm9mZnNldFdpZHRoXHJcbiAgICByZXR1cm4gby5nZXREb20oKS5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAvL2xldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIC8vcmV0dXJuIChyLndpZHRoKVxyXG4gICAgLy9yZXR1cm4gTWF0aC5mbG9vcihyLndpZHRoKVxyXG4gIH0sXHJcblxyXG4gIGdldFpvbmU6IGZ1bmN0aW9uIChvKSB7XHJcbiAgICBpZiAoby5pc0NhbnZhc09ubHkpIHJldHVybjtcclxuICAgIGxldCByID0gby5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAvL2lmKCAhci53aWR0aCApIHJldHVyblxyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5mbG9vcihyLmxlZnQpLCB5Ok1hdGguZmxvb3Ioci50b3ApLCB3Ok1hdGguZmxvb3Ioci53aWR0aCksIGg6TWF0aC5mbG9vcihyLmhlaWdodCkgfTtcclxuICAgIC8vby56b25lID0geyB4Ok1hdGgucm91bmQoci5sZWZ0KSwgeTpNYXRoLnJvdW5kKHIudG9wKSwgdzpNYXRoLnJvdW5kKHIud2lkdGgpLCBoOk1hdGgucm91bmQoci5oZWlnaHQpIH07XHJcbiAgICBvLnpvbmUgPSB7IHg6IHIubGVmdCwgeTogci50b3AsIHc6IHIud2lkdGgsIGg6IHIuaGVpZ2h0IH07XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhvLm5hbWUsIG8uem9uZSlcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDVVJTT1JcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGN1cnNvcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIG5hbWUgPSBuYW1lID8gbmFtZSA6IFwiYXV0b1wiO1xyXG4gICAgaWYgKG5hbWUgIT09IFIub2xkQ3Vyc29yKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gbmFtZTtcclxuICAgICAgUi5vbGRDdXJzb3IgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9DYW52YXM6IGZ1bmN0aW9uIChvLCB3LCBoLCBmb3JjZSkge1xyXG4gICAgaWYgKCFSLnhtbHNlcmlhbGl6ZXIpIFIueG1sc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7XHJcblxyXG4gICAgLy8gcHJldmVudCBleGVzaXZlIHJlZHJhd1xyXG5cclxuICAgIGlmIChmb3JjZSAmJiBSLnRtcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KFIudG1wVGltZSk7XHJcbiAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudG1wVGltZSAhPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLmxvY2spXHJcbiAgICAgIFIudG1wVGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFIudG1wVGltZSA9IG51bGw7XHJcbiAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAvLy9cclxuXHJcbiAgICBsZXQgaXNOZXdTaXplID0gZmFsc2U7XHJcbiAgICBpZiAodyAhPT0gby5jYW52YXMud2lkdGggfHwgaCAhPT0gby5jYW52YXMuaGVpZ2h0KSBpc05ld1NpemUgPSB0cnVlO1xyXG5cclxuICAgIGlmIChSLnRtcEltYWdlID09PSBudWxsKSBSLnRtcEltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGltZyA9IFIudG1wSW1hZ2U7IC8vbmV3IEltYWdlKCk7XHJcblxyXG4gICAgbGV0IGh0bWxTdHJpbmcgPSBSLnhtbHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoby5jb250ZW50KTtcclxuXHJcbiAgICBsZXQgc3ZnID1cclxuICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJyArXHJcbiAgICAgIHcgK1xyXG4gICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgIGggK1xyXG4gICAgICAnXCI+PGZvcmVpZ25PYmplY3Qgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTsgbGVmdDowO1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nICtcclxuICAgICAgaHRtbFN0cmluZyArXHJcbiAgICAgIFwiPC9mb3JlaWduT2JqZWN0Pjwvc3ZnPlwiO1xyXG5cclxuICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGxldCBjdHggPSBvLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgICBpZiAoaXNOZXdTaXplKSB7XHJcbiAgICAgICAgby5jYW52YXMud2lkdGggPSB3O1xyXG4gICAgICAgIG8uY2FudmFzLmhlaWdodCA9IGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgfVxyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMsIDAsIDApO1xyXG5cclxuICAgICAgby5vbkRyYXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaW1nLnNyYyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyBlbmNvZGVVUklDb21wb25lbnQoc3ZnKTtcclxuICAgIC8vaW1nLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcrIHdpbmRvdy5idG9hKCBzdmcgKTtcclxuICAgIGltZy5jcm9zc09yaWdpbiA9IFwiXCI7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldEhpZGRlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHtcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyAnXHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHQgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgdGV4dC1zaGFkb3c6bm9uZTsnXHJcbiAgICAgIC8vY3NzICs9ICdsZWZ0OjEwcHg7IHRvcDphdXRvOyBib3JkZXI6bm9uZTsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwOycgKyBoaWRlO1xyXG5cclxuICAgICAgUi5oaWRkZW5JbXB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgIC8vUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTozMHB4OycgKyAoUi5kZWJ1Z0lucHV0ID8gJycgOiAndHJhbnNmb3JtOnNjYWxlKDApOycpO1xyXG5cclxuICAgICAgUi5oaWRkZW5TaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgIC8vUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgJ2JvdHRvbTo2MHB4Oyc7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuSW1wdXQpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIuaGlkZGVuU2l6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoaWRlID0gUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwib3BhY2l0eTowOyB6SW5kZXg6MDtcIjtcclxuICAgIGxldCBjc3MgPVxyXG4gICAgICBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgXCJwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyBsZWZ0OjEwcHg7IHRvcDphdXRvOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7XCIgK1xyXG4gICAgICBoaWRlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgY3NzICsgXCJib3R0b206MTBweDtcIiArIChSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJ0cmFuc2Zvcm06c2NhbGUoMCk7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5zdHlsZS5jc3NUZXh0ID0gY3NzICsgXCJib3R0b206NDBweDtcIjtcclxuXHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLndpZHRoID0gUi5pbnB1dC5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuICAgIFIuaGlkZGVuSW1wdXQudmFsdWUgPSBSLnN0cjtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gUi5zdHI7XHJcblxyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJIaWRkZW46IGZ1bmN0aW9uIChwKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgUi5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGNsaWNrUG9zOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgbGV0IGkgPSBSLnN0ci5sZW5ndGgsXHJcbiAgICAgIGwgPSAwLFxyXG4gICAgICBuID0gMDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgbCArPSBSLnRleHRXaWR0aChSLnN0cltuXSk7XHJcbiAgICAgIGlmIChsID49IHgpIGJyZWFrO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9LFxyXG5cclxuICB1cElucHV0OiBmdW5jdGlvbiAoeCwgZG93bikge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRvd24pIHtcclxuICAgICAgbGV0IGlkID0gUi5jbGlja1Bvcyh4KTtcclxuXHJcbiAgICAgIFIubW92ZVggPSBpZDtcclxuXHJcbiAgICAgIGlmIChSLnN0YXJ0WCA9PT0gLTEpIHtcclxuICAgICAgICBSLnN0YXJ0WCA9IGlkO1xyXG4gICAgICAgIFIuY3Vyc29ySWQgPSBpZDtcclxuICAgICAgICBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIuc3RhcnRYXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaXNTZWxlY3Rpb24gPSBSLm1vdmVYICE9PSBSLnN0YXJ0WDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoUi5zdGFydFggPiBSLm1vdmVYKSBSLmlucHV0UmFuZ2UgPSBbUi5tb3ZlWCwgUi5zdGFydFhdO1xyXG4gICAgICAgICAgZWxzZSBSLmlucHV0UmFuZ2UgPSBbUi5zdGFydFgsIFIubW92ZVhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuc3RhcnRYICE9PSAtMSkge1xyXG4gICAgICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgICAgIFIuc3RhcnRYID0gLTE7XHJcblxyXG4gICAgICAgIHVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cCkgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXA7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIucGFyZW50KSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gWzAsIFIuc3RyLmxlbmd0aF07XHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuY3Vyc29ySWQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5jdXJzb3JJZCkpO1xyXG4gICAgdmFyIGUgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoMCwgUi5pbnB1dFJhbmdlWzBdKSk7XHJcbiAgICB2YXIgcyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZyhSLmlucHV0UmFuZ2VbMF0sIFIuaW5wdXRSYW5nZVsxXSkpO1xyXG5cclxuICAgIFIucGFyZW50LnNlbGVjdChjLCBlLCBzLCBSLmhpZGRlblNpemVyLmlubmVySFRNTCk7XHJcbiAgfSxcclxuXHJcbiAgdGV4dFdpZHRoOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgaWYgKFIuaGlkZGVuU2l6ZXIgPT09IG51bGwpIHJldHVybiAwO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiBSLmhpZGRlblNpemVyLmNsaWVudFdpZHRoO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySW5wdXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKCFSLmZpcnN0SW1wdXQpIFIucGFyZW50LnZhbGlkYXRlKHRydWUpO1xyXG5cclxuICAgIFIuY2xlYXJIaWRkZW4oKTtcclxuICAgIFIucGFyZW50LnVuc2VsZWN0KCk7XHJcblxyXG4gICAgLy9SLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFjaztcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuYm9yZGVyO1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHQ7XHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICBSLmlucHV0ID0gbnVsbDtcclxuICAgIFIucGFyZW50ID0gbnVsbDtcclxuICAgIChSLnN0ciA9IFwiXCIpLCAoUi5maXJzdEltcHV0ID0gdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgc2V0SW5wdXQ6IGZ1bmN0aW9uIChJbnB1dCwgcGFyZW50KSB7XHJcbiAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSLmlucHV0ID0gSW5wdXQ7XHJcbiAgICBSLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICBSLmlucHV0LnN0eWxlLmJhY2tncm91bmQgPSBSLnBhcmVudC5jb2xvcnMuYmFja29mZjtcclxuICAgIFIuaW5wdXQuc3R5bGUuYm9yZGVyQ29sb3IgPSBSLnBhcmVudC5jb2xvcnMuc2VsZWN0O1xyXG4gICAgLy9SLmlucHV0LnN0eWxlLmNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnRleHRTZWxlY3Q7XHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgUi5zZXRIaWRkZW4oKTtcclxuICB9LFxyXG5cclxuICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleUNvZGUgPSBlLndoaWNoLFxyXG4gICAgICBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCBrZXlDb2RlIClcclxuXHJcbiAgICBSLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoUi5oYXNGb2N1cykge1xyXG4gICAgICAvLyBoYWNrIHRvIGZpeCB0b3VjaCBldmVudCBidWcgaW4gaU9TIFNhZmFyaVxyXG4gICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIFIucGFyZW50LmlzRWRpdCA9IHRydWU7XHJcblxyXG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBDdHJsL0NtZCtBIHNlbGVjdGlvblxyXG4gICAgLy9pZiAoIGtleUNvZGUgPT09IDY1ICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5ICkpIHtcclxuICAgIC8vUi5zZWxlY3RUZXh0KCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vcmV0dXJuIHNlbGYucmVuZGVyKCk7XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy9lbnRlclxyXG5cclxuICAgICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgICAvL30gZWxzZSBpZigga2V5Q29kZSA9PT0gOSApeyAvL3RhYiBrZXlcclxuXHJcbiAgICAgIC8vIFIuaW5wdXQudGV4dENvbnRlbnQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLmlucHV0LmlzTnVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDQ3ICYmIGUua2V5Q29kZSA8IDU4KSB8fFxyXG4gICAgICAgICAgKGUua2V5Q29kZSA+IDk1ICYmIGUua2V5Q29kZSA8IDEwNikgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTkwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDExMCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSA4IHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDEwOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAga2V5dXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaGlkZGVuSW1wdXQudmFsdWU7XHJcblxyXG4gICAgaWYgKFIucGFyZW50LmFsbEVxdWFsKSBSLnBhcmVudC5zYW1lU3RyKFIuc3RyKTsgLy8gbnVtZXJpYyBzYW3DuWUgdmFsdWVcclxuICAgIGVsc2UgUi5pbnB1dC50ZXh0Q29udGVudCA9IFIuc3RyO1xyXG5cclxuICAgIFIuY3Vyc29ySWQgPSBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgUi5pbnB1dFJhbmdlID0gW1IuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQsIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kXTtcclxuXHJcbiAgICBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIC8vaWYoIFIucGFyZW50LmFsbHdheSApXHJcbiAgICBSLnBhcmVudC52YWxpZGF0ZSgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICAgTElTVEVOSU5HXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qXHJcbiAgICAvLyBlc3RhIGVyYSBsYSBmdW5jaW9uIG9yaWdpbmFsXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmKCBSLmlzTG9vcCApIHJlcXVlc3RBbmltYXRpb25GcmFtZSggUi5sb29wICk7XHJcbiAgICAgICAgUi51cGRhdGUoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAqL1xyXG5cclxuICBsb29wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAoUi5pc0xvb3ApIHJlcXVlc3RBbmltYXRpb25GcmFtZShSLmxvb3ApO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IFIudXBkYXRlKCk7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBhIHZhbHVlIGdlbmVyYXRlZCBleHRlcm5hbGx5LCB0aGUgR1VJIG5lZWRzIHRvIGJlIHJlZHJhd25cclxuICAgIGlmIChSLnVpWzBdICYmIFIubmVlZHNVcGRhdGUpIFIudWlbMF0uZHJhdygpO1xyXG4gIH0sXHJcblxyXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgbGV0IGkgPSBSLmxpc3RlbnMubGVuZ3RoO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIC8vY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgaGFzIGNoYW5nZWRcclxuICAgICAgbGV0IGhhc0NoYW5nZWQgPSBSLmxpc3RlbnNbaV0ubGlzdGVuaW5nKCk7XHJcbiAgICAgIGlmIChoYXNDaGFuZ2VkKSBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmVlZHNVcGRhdGU7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIFIubGlzdGVucy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgaWYgKFIubGlzdGVucy5sZW5ndGggPT09IDApIFIuaXNMb29wID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgYWRkTGlzdGVuOiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICAgIGxldCBpZCA9IFIubGlzdGVucy5pbmRleE9mKHByb3RvKTtcclxuXHJcbiAgICBpZiAoaWQgIT09IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgUi5saXN0ZW5zLnB1c2gocHJvdG8pO1xyXG5cclxuICAgIGlmICghUi5pc0xvb3ApIHtcclxuICAgICAgUi5pc0xvb3AgPSB0cnVlO1xyXG4gICAgICBSLmxvb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJvb3RzID0gUjtcclxuIiwiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuXHJcbmNvbnN0IFQgPSB7XHJcblxyXG4gICAgdHJhbnNpdGlvbjogMC4yLFxyXG5cclxuICAgIGZyYWc6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHJcbiAgICBjb2xvclJpbmc6IG51bGwsXHJcbiAgICBqb3lzdGlja18wOiBudWxsLFxyXG4gICAgam95c3RpY2tfMTogbnVsbCxcclxuICAgIGNpcmN1bGFyOiBudWxsLFxyXG4gICAga25vYjogbnVsbCxcclxuICAgIHBhZDJkOiBudWxsLFxyXG5cclxuICAgIHN2Z25zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICBsaW5rczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICBodG1sczogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcblxyXG4gICAgRE9NX1NJWkU6IFsgJ2hlaWdodCcsICd3aWR0aCcsICd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnLCAnbWFyZ2luLWxlZnQnLCAnbWFyZ2luLXJpZ2h0JywgJ21hcmdpbi10b3AnLCAnbWFyZ2luLWJvdHRvbSddLFxyXG4gICAgU1ZHX1RZUEVfRDogWyAncGF0dGVybicsICdkZWZzJywgJ3RyYW5zZm9ybScsICdzdG9wJywgJ2FuaW1hdGUnLCAncmFkaWFsR3JhZGllbnQnLCAnbGluZWFyR3JhZGllbnQnLCAnYW5pbWF0ZU1vdGlvbicsICd1c2UnLCAnZmlsdGVyJywgJ2ZlQ29sb3JNYXRyaXgnIF0sXHJcbiAgICBTVkdfVFlQRV9HOiBbICdzdmcnLCAncmVjdCcsICdjaXJjbGUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3RleHQnLCAnZycsICdsaW5lJywgJ2ZvcmVpZ25PYmplY3QnIF0sXHJcblxyXG4gICAgUEk6IE1hdGguUEksXHJcbiAgICBUd29QSTogTWF0aC5QSSoyLFxyXG4gICAgcGk5MDogTWF0aC5QSSAqIDAuNSxcclxuICAgIHBpNjA6IE1hdGguUEkvMyxcclxuICAgIFxyXG4gICAgdG9yYWQ6IE1hdGguUEkgLyAxODAsXHJcbiAgICB0b2RlZzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICBjbGFtcDogKCB2LCBtaW4sIG1heCApID0+IHtcclxuXHJcbiAgICAgICAgdiA9IHYgPCBtaW4gPyBtaW4gOiB2O1xyXG4gICAgICAgIHYgPSB2ID4gbWF4ID8gbWF4IDogdjtcclxuICAgICAgICByZXR1cm4gdjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGl2aWQ6ICggdiApID0+ICggdiowLjUgPT09IE1hdGguZmxvb3IodiowLjUpICksXHJcblxyXG4gICAgc2l6ZTogeyAgdzogMjQwLCBoOiAyMCwgcDogMzAsIHM6IDggfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENPTE9SXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lQ29sb3I6ICggbywgY2MgPSBULmNvbG9ycyApID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yID0geyAuLi5jYyB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0Q2hhbmdlID0gWydmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFNoYWRvdycsICdmb250U2l6ZScgXVxyXG4gICAgICAgIGxldCBjaGFuZ2VUZXh0ID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udCApIG8uZm9udEZhbWlseSA9IG8uZm9udFxyXG4gICAgICAgIGlmKCBvLnNoYWRvdyApIG8uZm9udFNoYWRvdyA9IG8uc2hhZG93XHJcbiAgICAgICAgaWYoIG8ud2VpZ2h0ICkgby5mb250V2VpZ2h0ID0gby53ZWlnaHRcclxuXHJcbiAgICAgICAgaWYoIG8uZm9udENvbG9yICkgby50ZXh0ID0gby5mb250Q29sb3JcclxuICAgICAgICBpZiggby5jb2xvciApIG8udGV4dCA9IG8uY29sb3JcclxuXHJcbiAgICAgICAgaWYoIG8udGV4dCApe1xyXG4gICAgICAgICAgICBjb2xvci50ZXh0ID0gby50ZXh0XHJcbiAgICAgICAgICAgIGlmKCAhby5mb250Q29sb3IgJiYgIW8uY29sb3IgKXsgXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZSA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjI1IClcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlb2ZmID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuNSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3IudGV4dE92ZXIgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjI1IClcclxuICAgICAgICAgICAgY29sb3IudGV4dFNlbGVjdCA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuNSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5idXR0b24gKXtcclxuICAgICAgICAgICAgY29sb3IuYnV0dG9uID0gby5idXR0b25cclxuICAgICAgICAgICAgY29sb3IuYm9yZGVyID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjEgKVxyXG4gICAgICAgICAgICBjb2xvci5vdmVyb2ZmID0gVC5Db2xvckx1bWEoIG8uYnV0dG9uLCAwLjIgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnNlbGVjdCA9IG8uc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXIgPSBULkNvbG9yTHVtYSggby5zZWxlY3QsIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uaXRlbUJnICkgby5iYWNrID0gby5pdGVtQmdcclxuXHJcbiAgICAgICAgaWYoIG8uYmFjayApe1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrID0gby5iYWNrXHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2tvZmYgPSBULkNvbG9yTHVtYSggby5iYWNrLCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRTZWxlY3QgKSBjb2xvci50ZXh0U2VsZWN0ID0gby5mb250U2VsZWN0XHJcbiAgICAgICAgaWYoIG8uZ3JvdXBCb3JkZXIgKSBjb2xvci5nYm9yZGVyID0gby5ncm91cEJvcmRlclxyXG5cclxuICAgICAgICAvL2lmKCBvLnRyYW5zcGFyZW50ICkgby5iZyA9ICdub25lJ1xyXG4gICAgICAgIC8vaWYoIG8uYmcgKSBjb2xvci5iYWNrZ3JvdW5kID0gY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnXHJcbiAgICAgICAgaWYoIG8uYmdPdmVyICkgY29sb3IuYmFja2dyb3VuZE92ZXIgPSBvLmJnT3ZlclxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIGNvbG9yICl7XHJcbiAgICAgICAgICAgIGlmKG9bbV0hPT11bmRlZmluZWQpIGNvbG9yW21dID0gb1ttXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCB0ZXh0Q2hhbmdlLmluZGV4T2YobSkgIT09IC0xICkgY2hhbmdlVGV4dCA9IHRydWUgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2hhbmdlVGV4dCApIFQuZGVmaW5lVGV4dCggY29sb3IgKVxyXG5cclxuICAgICAgICByZXR1cm4gY29sb3JcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbG9yczoge1xyXG5cclxuICAgICAgICBzeDogNCwvLzRcclxuICAgICAgICBzeTogMiwvLzJcclxuICAgICAgICByYWRpdXM6MixcclxuXHJcbiAgICAgICAgc2hvd092ZXIgOiAxLFxyXG4gICAgICAgIC8vZ3JvdXBPdmVyIDogMSxcclxuXHJcbiAgICAgICAgY29udGVudDonbm9uZScsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoNTAsNTAsNTAsMC4xNSknLFxyXG4gICAgICAgIGJhY2tncm91bmRPdmVyOiAncmdiYSg1MCw1MCw1MCwwLjMpJyxcclxuXHJcbiAgICAgICAgdGl0bGUgOiAnI0NDQycsXHJcbiAgICAgICAgdGl0bGVvZmYgOiAnI0JCQicsXHJcbiAgICAgICAgdGV4dCA6ICcjREREJyxcclxuICAgICAgICB0ZXh0T3ZlciA6ICcjRUVFJyxcclxuICAgICAgICB0ZXh0U2VsZWN0IDogJyNGRkYnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIGJhY2s6J3JnYmEoMCwwLDAsMC4yKScsXHJcbiAgICAgICAgYmFja29mZjoncmdiYSgwLDAsMCwwLjMpJyxcclxuXHJcbiAgICAgICAgLy8gaW5wdXQgYW5kIGJ1dHRvbiBib3JkZXJcclxuICAgICAgICBib3JkZXIgOiAnIzRjNGM0YycsXHJcbiAgICAgICAgYm9yZGVyU2l6ZSA6IDEsXHJcblxyXG4gICAgICAgIGdib3JkZXIgOiAnbm9uZScsXHJcbiAgICAgICAgZ3JvdXBzIDogJ25vbmUnLFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBidXR0b24gOiAnIzNjM2MzYycsXHJcbiAgICAgICAgb3Zlcm9mZiA6ICcjNWM1YzVjJyxcclxuICAgICAgICBvdmVyIDogJyMwMjQ2OTknLFxyXG4gICAgICAgIHNlbGVjdCA6ICcjMzA4QUZGJyxcclxuICAgICAgICBhY3Rpb246ICcjRkYzMzAwJyxcclxuICAgICAgICBcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6ICdUYWhvbWEnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdDb25zb2xhcywgbW9ub3NwYWNlJyxcclxuICAgICAgICAvL2ZvbnRGYW1pbHk6IFwiJ1JvYm90byBNb25vJywgJ1NvdXJjZSBDb2RlIFBybycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcclxuICAgICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcclxuICAgICAgICBmb250U2hhZG93OiAnbm9uZScsLy8nIzAwMCcsXHJcbiAgICAgICAgZm9udFNpemU6MTIsXHJcblxyXG4gICAgICAgIGpveU92ZXI6J3JnYmEoNDgsMTM4LDI1NSwwLjI1KScsXHJcbiAgICAgICAgam95T3V0OiAncmdiYSgxMDAsMTAwLDEwMCwwLjUpJyxcclxuICAgICAgICBqb3lTZWxlY3Q6ICcjMzA4QUZGJyxcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlkZTogJ3JnYmEoMCwwLDAsMCknLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3R5bGUgY3NzXHJcblxyXG4gICAgY3NzIDoge1xyXG5cclxuICAgICAgICBiYXNpYzogJ3Bvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lOyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IG1hcmdpbjowOyBwYWRkaW5nOjA7IG92ZXJmbG93OmhpZGRlbjsgJyArICctby11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgLWtodG1sLXVzZXItc2VsZWN0Om5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOycsXHJcbiAgICAgICAgYnV0dG9uOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7JyxcclxuICAgICAgICBtaWRkbGU6J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7J1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdmcgcGF0aFxyXG5cclxuICAgIHN2Z3M6IHtcclxuXHJcbiAgICAgICAgZzE6J00gNiA0IEwgMCA0IDAgNiA2IDYgNiA0IE0gNiAwIEwgMCAwIDAgMiA2IDIgNiAwIFonLFxyXG4gICAgICAgIGcyOidNIDYgMCBMIDQgMCA0IDYgNiA2IDYgMCBNIDIgMCBMIDAgMCAwIDYgMiA2IDIgMCBaJyxcclxuXHJcbiAgICAgICAgZ3JvdXA6J00gNyA3IEwgNyA4IDggOCA4IDcgNyA3IE0gNSA3IEwgNSA4IDYgOCA2IDcgNSA3IE0gMyA3IEwgMyA4IDQgOCA0IDcgMyA3IE0gNyA1IEwgNyA2IDggNiA4IDUgNyA1IE0gNiA2IEwgNiA1IDUgNSA1IDYgNiA2IE0gNyAzIEwgNyA0IDggNCA4IDMgNyAzIE0gNiA0IEwgNiAzIDUgMyA1IDQgNiA0IE0gMyA1IEwgMyA2IDQgNiA0IDUgMyA1IE0gMyAzIEwgMyA0IDQgNCA0IDMgMyAzIFonLFxyXG4gICAgICAgIGFycm93OidNIDMgOCBMIDggNSAzIDIgMyA4IFonLFxyXG5cclxuICAgICAgICBhcnJvd0Rvd246J00gNSA4IEwgOCAzIDIgMyA1IDggWicsXHJcbiAgICAgICAgYXJyb3dVcDonTSA1IDIgTCAyIDcgOCA3IDUgMiBaJyxcclxuXHJcbiAgICAgICAgc29saWQ6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgWicsXHJcbiAgICAgICAgYm9keTonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBNIDUgNCBMIDQgNSA0IDEwIDkgMTAgMTAgOSAxMCA0IDUgNCBaJyxcclxuICAgICAgICB2ZWhpY2xlOidNIDEzIDYgTCAxMSAxIDMgMSAxIDYgMSAxMyAzIDEzIDMgMTEgMTEgMTEgMTEgMTMgMTMgMTMgMTMgNiBNIDIuNCA2IEwgNCAyIDEwIDIgMTEuNiA2IDIuNCA2IE0gMTIgOCBMIDEyIDEwIDEwIDEwIDEwIDggMTIgOCBNIDQgOCBMIDQgMTAgMiAxMCAyIDggNCA4IFonLFxyXG4gICAgICAgIGFydGljdWxhdGlvbjonTSAxMyA5IEwgMTIgOSA5IDIgOSAxIDUgMSA1IDIgMiA5IDEgOSAxIDEzIDUgMTMgNSA5IDQgOSA2IDUgOCA1IDEwIDkgOSA5IDkgMTMgMTMgMTMgMTMgOSBaJyxcclxuICAgICAgICBjaGFyYWN0ZXI6J00gMTMgNCBMIDEyIDMgOSA0IDUgNCAyIDMgMSA0IDUgNiA1IDggNCAxMyA2IDEzIDcgOSA4IDEzIDEwIDEzIDkgOCA5IDYgMTMgNCBNIDYgMSBMIDYgMyA4IDMgOCAxIDYgMSBaJyxcclxuICAgICAgICB0ZXJyYWluOidNIDEzIDggTCAxMiA3IFEgOS4wNiAtMy42NyA1Ljk1IDQuODUgNC4wNCAzLjI3IDIgNyBMIDEgOCA3IDEzIDEzIDggTSAzIDggUSAzLjc4IDUuNDIwIDUuNCA2LjYgNS4yMCA3LjI1IDUgOCBMIDcgOCBRIDguMzkgLTAuMTYgMTEgOCBMIDcgMTEgMyA4IFonLFxyXG4gICAgICAgIGpvaW50OidNIDcuNyA3LjcgUSA4IDcuNDUgOCA3IDggNi42IDcuNyA2LjMgNy40NSA2IDcgNiA2LjYgNiA2LjMgNi4zIDYgNi42IDYgNyA2IDcuNDUgNi4zIDcuNyA2LjYgOCA3IDggNy40NSA4IDcuNyA3LjcgTSAzLjM1IDguNjUgTCAxIDExIDMgMTMgNS4zNSAxMC42NSBRIDYuMSAxMSA3IDExIDguMjggMTEgOS4yNSAxMC4yNSBMIDcuOCA4LjggUSA3LjQ1IDkgNyA5IDYuMTUgOSA1LjU1IDguNCA1IDcuODUgNSA3IDUgNi41NCA1LjE1IDYuMTUgTCAzLjcgNC43IFEgMyA1LjcxMiAzIDcgMyA3LjkgMy4zNSA4LjY1IE0gMTAuMjUgOS4yNSBRIDExIDguMjggMTEgNyAxMSA2LjEgMTAuNjUgNS4zNSBMIDEzIDMgMTEgMSA4LjY1IDMuMzUgUSA3LjkgMyA3IDMgNS43IDMgNC43IDMuNyBMIDYuMTUgNS4xNSBRIDYuNTQgNSA3IDUgNy44NSA1IDguNCA1LjU1IDkgNi4xNSA5IDcgOSA3LjQ1IDguOCA3LjggTCAxMC4yNSA5LjI1IFonLFxyXG4gICAgICAgIHJheTonTSA5IDExIEwgNSAxMSA1IDEyIDkgMTIgOSAxMSBNIDEyIDUgTCAxMSA1IDExIDkgMTIgOSAxMiA1IE0gMTEuNSAxMCBRIDEwLjkgMTAgMTAuNDUgMTAuNDUgMTAgMTAuOSAxMCAxMS41IDEwIDEyLjIgMTAuNDUgMTIuNTUgMTAuOSAxMyAxMS41IDEzIDEyLjIgMTMgMTIuNTUgMTIuNTUgMTMgMTIuMiAxMyAxMS41IDEzIDEwLjkgMTIuNTUgMTAuNDUgMTIuMiAxMCAxMS41IDEwIE0gOSAxMCBMIDEwIDkgMiAxIDEgMiA5IDEwIFonLFxyXG4gICAgICAgIGNvbGxpc2lvbjonTSAxMSAxMiBMIDEzIDEwIDEwIDcgMTMgNCAxMSAyIDcuNSA1LjUgOSA3IDcuNSA4LjUgMTEgMTIgTSAzIDIgTCAxIDQgNCA3IDEgMTAgMyAxMiA4IDcgMyAyIFonLFxyXG4gICAgICAgIG1hcDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICBtYXRlcmlhbDonTSAxMyAxIEwgMSAxIDEgMTMgMTMgMTMgMTMgMSBNIDEyIDIgTCAxMiA3IDcgNyA3IDEyIDIgMTIgMiA3IDcgNyA3IDIgMTIgMiBaJyxcclxuICAgICAgICB0ZXh0dXJlOidNIDEzIDQgTCAxMyAxIDEgMSAxIDQgNSA0IDUgMTMgOSAxMyA5IDQgMTMgNCBaJyxcclxuICAgICAgICBvYmplY3Q6J00gMTAgMSBMIDcgNCA0IDEgMSAxIDEgMTMgNCAxMyA0IDUgNyA4IDEwIDUgMTAgMTMgMTMgMTMgMTMgMSAxMCAxIFonLFxyXG4gICAgICAgIG5vbmU6J00gOSA1IEwgNSA1IDUgOSA5IDkgOSA1IFonLFxyXG4gICAgICAgIGN1cnNvcjonTSA0IDcgTCAxIDEwIDEgMTIgMiAxMyA0IDEzIDcgMTAgOSAxNCAxNCAwIDAgNSA0IDcgWicsXHJcbiAgICAgICAgbG9hZDonTSAxMyA4IEwgMTEuNSA2LjUgOSA5IDkgMyA1IDMgNSA5IDIuNSA2LjUgMSA4IDcgMTQgMTMgOCBNIDkgMiBMIDkgMCA1IDAgNSAyIDkgMiBaJyxcclxuICAgICAgICBzYXZlOidNIDkgMTIgTCA1IDEyIDUgMTQgOSAxNCA5IDEyIE0gMTEuNSA3LjUgTCAxMyA2IDcgMCAxIDYgMi41IDcuNSA1IDUgNSAxMSA5IDExIDkgNSAxMS41IDcuNSBaJyxcclxuICAgICAgICBleHRlcm46J00gMTQgMTQgTCAxNCAwIDAgMCAwIDE0IDE0IDE0IE0gMTIgNiBMIDEyIDEyIDIgMTIgMiA2IDEyIDYgTSAxMiAyIEwgMTIgNCAyIDQgMiAyIDEyIDIgWicsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZXpvbmUgKCkge1xyXG4gICAgICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJbXB1dDogZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJvb3RzLmlucHV0ID8gdHJ1ZSA6IGZhbHNlXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdHlsZSA6IGZ1bmN0aW9uICggZGF0YSApe1xyXG5cclxuICAgICAgICBmb3IgKCB2YXIgbyBpbiBkYXRhICl7XHJcbiAgICAgICAgICAgIGlmKCBULmNvbG9yc1tvXSApIFQuY29sb3JzW29dID0gZGF0YVtvXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gY3VzdG9tIHRleHRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVUZXh0OiBmdW5jdGlvbiggbyApe1xyXG5cclxuICAgICAgICBULnNldFRleHQoIG8uZm9udFNpemUsIG8udGV4dCwgby5mb250RmFtaWx5LCBvLmZvbnRTaGFkb3csIG8uZm9udFdlaWdodCApXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiggc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdywgd2VpZ2h0ICl7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IFQuY29sb3JzO1xyXG5cclxuICAgICAgICBpZiggZm9udCA9PT0gdW5kZWZpbmVkICkgZm9udCA9IGNjLmZvbnRGYW1pbHlcclxuICAgICAgICBpZiggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IGNjLmZvbnRTaXplXHJcbiAgICAgICAgaWYoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgc2hhZG93ID0gY2MuZm9udFNoYWRvd1xyXG4gICAgICAgIGlmKCB3ZWlnaHQgPT09IHVuZGVmaW5lZCApIHdlaWdodCA9IGNjLmZvbnRXZWlnaHRcclxuICAgICAgICBpZiggY29sb3IgPT09IHVuZGVmaW5lZCApIGNvbG9yID0gY2MudGV4dFxyXG5cclxuICAgICAgICBpZiggaXNOYU4oc2l6ZSkgKXsgaWYoIHNpemUuc2VhcmNoKCdlbScpPT09LTEgKSBzaXplICs9ICdweCd9XHJcbiAgICAgICAgZWxzZSBzaXplICs9ICdweCdcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy9sZXQgYWxpZ24gPSAnZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6bGVmdDsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmxlZnQ7J1xyXG5cclxuICAgICAgICBULmNzcy50eHQgPSBULmNzcy5iYXNpYyArIFQuY3NzLm1pZGRsZSArICcgZm9udC1mYW1pbHk6JysgZm9udCArJzsgZm9udC13ZWlnaHQ6Jyt3ZWlnaHQrJzsgZm9udC1zaXplOicrc2l6ZSsnOyBjb2xvcjonK2NjLnRleHQrJzsgcGFkZGluZzowcHggOHB4OyBsZWZ0OjA7IHRvcDoycHg7IGhlaWdodDoxNnB4OyB3aWR0aDoxMDBweDsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyc7XHJcbiAgICAgICAgaWYoIHNoYWRvdyAhPT0gJ25vbmUnICkgVC5jc3MudHh0ICs9ICcgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICcrc2hhZG93Kyc7JztcclxuXHJcbiAgICAgICAgVC5jc3MudHh0c2VsZWN0ID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgYm9yZGVyOjFweCBkYXNoZWQgJyArIGNjLmJvcmRlciArICc7JztcclxuICAgICAgICBULmNzcy5pdGVtID0gVC5jc3MudHh0ICsgJ3BhZGRpbmc6MHB4IDRweDsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MXB4OyAnXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy8gbm90ZVxyXG5cclxuICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQ1NTL2Nzc19mbGV4aWJsZV9ib3hfbGF5b3V0L2FsaWduaW5nX2l0ZW1zX2luX2FfZmxleF9jb250YWluZXJcclxuXHJcbiAgICAvKmNsb25lQ29sb3I6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jb2xvcnMgKTtcclxuICAgICAgICByZXR1cm4gY2M7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIC8vIGludGVybiBmdW5jdGlvblxyXG5cclxuICAgIGNsb25lQ3NzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGNjID0gT2JqZWN0LmFzc2lnbih7fSwgVC5jc3MgKTtcclxuICAgICAgICByZXR1cm4geyAuLi5ULmNzcyB9O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICggbyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG8uY2xvbmVOb2RlKCB0cnVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdmc6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gLTEgKSBkb20uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBpZiggaWQyICE9PSB1bmRlZmluZWQgKSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLmNoaWxkTm9kZXNbIGlkMiB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcbiAgICAgICAgZWxzZSBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q3NzOiBmdW5jdGlvbiggZG9tLCBjc3MgKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgciBpbiBjc3MgKXtcclxuICAgICAgICAgICAgaWYoIFQuRE9NX1NJWkUuaW5kZXhPZihyKSAhPT0gLTEgKSBkb20uc3R5bGVbcl0gPSBjc3Nbcl0gKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIGRvbS5zdHlsZVtyXSA9IGNzc1tyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCBnLCBvICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGF0dCBpbiBvICl7XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICd0eHQnICkgZy50ZXh0Q29udGVudCA9IG9bIGF0dCBdO1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAnbGluaycgKSBnLnNldEF0dHJpYnV0ZU5TKCBULmxpbmtzLCAneGxpbms6aHJlZicsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgICAgIGVsc2UgZy5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgYXR0LCBvWyBhdHQgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiggZG9tLCBpZCApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207IC8vIHJvb3RcclxuICAgICAgICBlbHNlIGlmKCAhaXNOYU4oIGlkICkgKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIF07IC8vIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgZWxzZSBpZiggaWQgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDIpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdO1xyXG4gICAgICAgICAgICBpZihpZC5sZW5ndGggPT09IDMpIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWRbMF0gXS5jaGlsZE5vZGVzWyBpZFsxXSBdLmNoaWxkTm9kZXNbIGlkWzJdIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZG9tIDogZnVuY3Rpb24gKCB0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCApIHtcclxuXHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2Rpdic7XHJcblxyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0QuaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICl7IC8vIGlzIHN2ZyBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0nc3ZnJyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG5cclxuICAgICAgICAgIC8qICB9IGVsc2UgaWYgKCB0eXBlID09PSAndXNlJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICd1c2UnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuKi9cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3ZnIGlmIG5vdCBkZWZcclxuICAgICAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3N2ZycgKTtcclxuICAgICAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZG9tLCB0eXBlLCBvYmosIGlkICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGlzIGh0bWwgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICk7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tID0gZG9tLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjc3MgKSBkb20uc3R5bGUuY3NzVGV4dCA9IGNzczsgXHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTtcclxuICAgICAgICBlbHNlIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgfHwgMCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXR0cmlidXRlcyA6IGZ1bmN0aW9uKCBkb20sIHR5cGUsIG8sIGlkICl7XHJcblxyXG4gICAgICAgIGxldCBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCB0eXBlICk7XHJcbiAgICAgICAgVC5zZXQoIGcsIG8gKTtcclxuICAgICAgICBULmdldCggZG9tLCBpZCApLmFwcGVuZENoaWxkKCBnICk7XHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApIGcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICByZXR1cm4gZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyIDogZnVuY3Rpb24oIGRvbSApe1xyXG5cclxuICAgICAgICBULnB1cmdlKCBkb20gKTtcclxuICAgICAgICB3aGlsZSAoZG9tLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCBkb20uZmlyc3RDaGlsZC5maXJzdENoaWxkICkgVC5jbGVhciggZG9tLmZpcnN0Q2hpbGQgKTtcclxuICAgICAgICAgICAgZG9tLnJlbW92ZUNoaWxkKCBkb20uZmlyc3RDaGlsZCApOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwdXJnZSA6IGZ1bmN0aW9uICggZG9tICkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGRvbS5hdHRyaWJ1dGVzLCBpLCBuO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgICAgIG4gPSBhW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbVtuXSA9PT0gJ2Z1bmN0aW9uJykgZG9tW25dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgICAgIFQucHVyZ2UoIGRvbS5jaGlsZE5vZGVzW2ldICk7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgRWZmZWN0cyBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZFNWR0dsb3dFZmZlY3Q6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTEdsb3cnKSAhPT0gbnVsbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IFQuaW5pdFVJTEVmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlciA9IFQuYWRkQXR0cmlidXRlcyggc3ZnRmlsdGVyLCAnZmlsdGVyJywgeyBpZDogJ1VJTEdsb3cnLCB4OiAnLTIwJScsIHk6ICctMjAlJywgd2lkdGg6ICcxNDAlJywgaGVpZ2h0OiAnMTQwJScgfSApO1xyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVHYXVzc2lhbkJsdXInLCB7IGluOiAnU291cmNlR3JhcGhpYycsIHN0ZERldmlhdGlvbjogJzMnLCByZXN1bHQ6ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgbGV0IGZlTWVyZ2UgPSBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlTWVyZ2UnLCB7ICB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPD0gMzsgaSsrICkge1xyXG5cclxuICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmZU1lcmdlLCAnZmVNZXJnZU5vZGUnLCB7IGluOiAnU291cmNlR3JhcGhpYycgfSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVJTEVmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2Z0ZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMU1ZHRWZmZWN0cycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggc3ZnRmlsdGVyID09PSBudWxsICkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3ZnRmlsdGVyID0gVC5kb20oICdzdmcnLCB1bmRlZmluZWQgLCB7IGlkOiAnVUlMU1ZHRWZmZWN0cycsIHdpZHRoOiAnMCcsIGhlaWdodDogJzAnIH0gKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggc3ZnRmlsdGVyICk7XHJcbiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdGaWx0ZXI7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIENvbG9yIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgQ29sb3JMdW1hIDogZnVuY3Rpb24gKCBoZXgsIGwgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIGhleC5zdWJzdHJpbmcoMCwgMykgPT09ICdyZ2JhJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgaWYoIGhleCA9PT0gJ24nICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBoZXggc3RyaW5nXHJcbiAgICAgICAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XHJcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPCA2KSB7XHJcbiAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsID0gbCB8fCAwO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XHJcbiAgICAgICAgbGV0IHJnYiA9IFwiI1wiLCBjLCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSoyLDIpLCAxNik7XHJcbiAgICAgICAgICAgIGMgPSBNYXRoLnJvdW5kKE1hdGgubWluKE1hdGgubWF4KDAsIGMgKyAoYyAqIGwpKSwgMjU1KSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICByZ2IgKz0gKFwiMDBcIitjKS5zdWJzdHIoYy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJnYjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmREZWVwSW52ZXI6IGZ1bmN0aW9uICggYyApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiAoY1swXSAqIDAuMyArIGNbMV0gKiAuNTkgKyBjWzJdICogLjExKSA8PSAwLjY7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGxlcnBDb2xvcjogZnVuY3Rpb24oIGMxLCBjMiwgZmFjdG9yICkge1xyXG4gICAgICAgIGxldCBuZXdDb2xvciA9IHt9O1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IDM7IGkrKyApIHtcclxuICAgICAgICAgIG5ld0NvbG9yW2ldID0gYzFbIGkgXSArICggYzJbIGkgXSAtIGMxWyBpIF0gKSAqIGZhY3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBoZXhUb0h0bWw6IGZ1bmN0aW9uICggdiApIHsgXHJcbiAgICAgICAgdiA9IHYgPT09IHVuZGVmaW5lZCA/IDB4MDAwMDAwIDogdjtcclxuICAgICAgICByZXR1cm4gXCIjXCIgKyAoXCIwMDAwMDBcIiArIHYudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sVG9IZXg6IGZ1bmN0aW9uICggdiApIHsgXHJcblxyXG4gICAgICAgIHJldHVybiB2LnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIiNcIiwgXCIweFwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUyNTU6IGZ1bmN0aW9uIChjLCBpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSAvIDI1NTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHUxNjogZnVuY3Rpb24gKCBjLCBpICkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDEpLCAxNikgLyAxNTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVucGFjazogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgaWYgKGMubGVuZ3RoID09IDcpIHJldHVybiBbIFQudTI1NShjLCAxKSwgVC51MjU1KGMsIDMpLCBULnUyNTUoYywgNSkgXTtcclxuICAgICAgICBlbHNlIGlmIChjLmxlbmd0aCA9PSA0KSByZXR1cm4gWyBULnUxNihjLDEpLCBULnUxNihjLDIpLCBULnUxNihjLDMpIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwMjU1OiBmdW5jdGlvbiAoIGMgKSB7XHJcbiAgICAgICAgbGV0IGggPSBNYXRoLnJvdW5kKCAoIGMgKiAyNTUgKSApLnRvU3RyaW5nKCAxNiApO1xyXG4gICAgICAgIGlmICggaC5sZW5ndGggPCAyICkgaCA9ICcwJyArIGg7XHJcbiAgICAgICAgcmV0dXJuIGg7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhY2s6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucDI1NSggY1sgMCBdICkgKyBULnAyNTUoIGNbIDEgXSApICsgVC5wMjU1KCBjWyAyIF0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxSZ2I6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIHJldHVybiAncmdiKCcgKyBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpICsgJywnKyBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpICsgJyknO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcGFkOiBmdW5jdGlvbiggbiApe1xyXG4gICAgICAgIGlmKG4ubGVuZ3RoID09IDEpbiA9ICcwJyArIG47XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSGV4IDogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJvdW5kKGNbMF0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgZyA9IE1hdGgucm91bmQoY1sxXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBiID0gTWF0aC5yb3VuZChjWzJdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgcmV0dXJuICcjJyArIFQucGFkKHIpICsgVC5wYWQoZykgKyBULnBhZChiKTtcclxuXHJcbiAgICAgICAvLyByZXR1cm4gJyMnICsgKCAnMDAwMDAwJyArICggKCBjWzBdICogMjU1ICkgPDwgMTYgXiAoIGNbMV0gKiAyNTUgKSA8PCA4IF4gKCBjWzJdICogMjU1ICkgPDwgMCApLnRvU3RyaW5nKCAxNiApICkuc2xpY2UoIC0gNiApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHVlVG9SZ2I6IGZ1bmN0aW9uKCBwLCBxLCB0ICl7XHJcblxyXG4gICAgICAgIGlmICggdCA8IDAgKSB0ICs9IDE7XHJcbiAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTtcclxuICAgICAgICBpZiAoIHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hzbDogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgciA9IGNbMF0sIGcgPSBjWzFdLCBiID0gY1syXSwgbWluID0gTWF0aC5taW4ociwgZywgYiksIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLCBkZWx0YSA9IG1heCAtIG1pbiwgaCA9IDAsIHMgPSAwLCBsID0gKG1pbiArIG1heCkgLyAyO1xyXG4gICAgICAgIGlmIChsID4gMCAmJiBsIDwgMSkgcyA9IGRlbHRhIC8gKGwgPCAwLjUgPyAoMiAqIGwpIDogKDIgLSAyICogbCkpO1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSByICYmIG1heCAhPSBnKSBoICs9IChnIC0gYikgLyBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBnICYmIG1heCAhPSBiKSBoICs9ICgyICsgKGIgLSByKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaWYgKG1heCA9PSBiICYmIG1heCAhPSByKSBoICs9ICg0ICsgKHIgLSBnKSAvIGRlbHRhKTtcclxuICAgICAgICAgICAgaCAvPSA2O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWyBoLCBzLCBsIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBoc2xUb1JnYjogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICBsZXQgcCwgcSwgaCA9IGNbMF0sIHMgPSBjWzFdLCBsID0gY1syXTtcclxuXHJcbiAgICAgICAgaWYgKCBzID09PSAwICkgcmV0dXJuIFsgbCwgbCwgbCBdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gKCBsICogcyApO1xyXG4gICAgICAgICAgICBwID0gbCAqIDIgLSBxO1xyXG4gICAgICAgICAgICByZXR1cm4gWyBULmh1ZVRvUmdiKHAsIHEsIGggKyAwLjMzMzMzKSwgVC5odWVUb1JnYihwLCBxLCBoKSwgVC5odWVUb1JnYihwLCBxLCBoIC0gMC4zMzMzMykgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBNT0RFTFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VHcmFkaWFudDogZnVuY3Rpb24gKCB0eXBlLCBzZXR0aW5ncywgcGFyZW50LCBjb2xvcnMgKSB7XHJcblxyXG4gICAgICAgIFQuZG9tKCB0eXBlLCBudWxsLCBzZXR0aW5ncywgcGFyZW50LCAwICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gcGFyZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBjO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgYyA9IGNvbG9yc1tpXTtcclxuICAgICAgICAgICAgLy9ULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgc3R5bGU6J3N0b3AtY29sb3I6JytjWzFdKyc7IHN0b3Atb3BhY2l0eTonK2NbMl0rJzsnIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuICAgICAgICAgICAgVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsICdzdG9wLWNvbG9yJzpjWzFdLCAgJ3N0b3Atb3BhY2l0eSc6Y1syXSB9LCBwYXJlbnQsIFswLG5dICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qbWFrZUdyYXBoOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIC8vVC5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6MTA4LCBoZWlnaHQ6MTA4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjIgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMVxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgLy9ULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQuZ3JhcGggPSBzdmc7XHJcblxyXG4gICAgfSwqL1xyXG5cclxuICAgIG1ha2VQYWQ6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3dyA9IDI1NlxyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrd3crJyAnK3d3LCB3aWR0aDp3dywgaGVpZ2h0Ond3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgbGV0IHcgPSAyMDA7IFxyXG4gICAgICAgIGxldCBkID0gKHd3LXcpKjAuNSwgbSA9IDIwO1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkLCB5OiBkLCAgd2lkdGg6IHcsIGhlaWdodDogdywgZmlsbDpULmNvbG9ycy5iYWNrIH0sIHN2ZyApOyAvLyAwXHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQrbSowLjUsIHk6IGQrbSowLjUsIHdpZHRoOiB3IC0gbSAsIGhlaWdodDogdyAtIG0sIGZpbGw6VC5jb2xvcnMuYnV0dG9uIH0sIHN2ZyApOyAvLyAxXHJcbiAgICAgICAgLy8gUG9pbnRlclxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogZCsobSowLjUpLCB5MTogd3cgKjAuNSwgeDI6IGQrKHctbSowLjUpLCB5Mjogd3cgKiAwLjUsIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gMlxyXG4gICAgICAgIFRvb2xzLmRvbSggJ2xpbmUnLCAnJywgeyB4MTogd3cgKiAwLjUsIHgyOiB3dyAqIDAuNSwgeTE6IGQrKG0qMC41KSwgeTI6IGQrKHctbSowLjUpLCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDNcclxuICAgICAgICBUb29scy5kb20oICdjaXJjbGUnLCAnJywgeyBjeDogd3cgKiAwLjUsIGN5OiB3dyAqIDAuNSwgcjo1LCBzdHJva2U6IFQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOiA1LCBmaWxsOidub25lJyB9LCBzdmcgKTsgLy8gNFxyXG4gICAgICAgIFQucGFkMmQgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlS25vYjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzKzcsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6NyAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmtub2IgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ2lyY3VsYXI6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSA0MDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjEwLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NywgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuY2lyY3VsYXIgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlSm95c3RpY2s6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIC8vKycgYmFja2dyb3VuZDojZjAwOydcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjgsIGNjYztcclxuICAgICAgICBsZXQgcmFkaXVzID0gTWF0aC5mbG9vcigody0zMCkqMC41KTtcclxuICAgICAgICBsZXQgaW5uZXJSYWRpdXMgPSBNYXRoLmZsb29yKHJhZGl1cyowLjYpO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBpZiggbW9kZWwgPT09IDAgKXtcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIGJhY2tncm91bmRcclxuICAgICAgICAgICAgY2NjID0gWyBbNDAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzgwLCAncmdiKDAsMCwwKScsIDBdLCBbOTAsICdyZ2IoNTAsNTAsNTApJywgMC40XSwgWzEwMCwgJ3JnYig1MCw1MCw1MCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2MCwgJ3JnYigwLDAsMCknLCAwLjVdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkUycsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFkaWFuIHN0aWNrXHJcbiAgICAgICAgICAgIGxldCBjYzAgPSBbJ3JnYig0MCw0MCw0MCknLCAncmdiKDQ4LDQ4LDQ4KScsICdyZ2IoMzAsMzAsMzApJ107XHJcbiAgICAgICAgICAgIGxldCBjYzEgPSBbJ3JnYigxLDkwLDE5NyknLCAncmdiKDMsOTUsMjA3KScsICdyZ2IoMCw2NSwxNjcpJ107XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MwWzBdLCAxXSwgWzYwLCBjYzBbMV0sIDFdLCBbODAsIGNjMFsxXSwgMV0sIFsxMDAsIGNjMFsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBjY2MgPSBbIFszMCwgY2MxWzBdLCAxXSwgWzYwLCBjYzFbMV0sIDFdLCBbODAsIGNjMVsxXSwgMV0sIFsxMDAsIGNjMVsyXSwgMV0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRJbjInLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhcGhcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDondXJsKCNncmFkKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQrNSwgY3k6NjQrMTAsIHI6aW5uZXJSYWRpdXMrMTAsIGZpbGw6J3VybCgjZ3JhZFMpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J3VybCgjZ3JhZEluKScgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzAgPSBzdmc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAvLyBncmFkaWFuIHNoYWRvd1xyXG4gICAgICAgICAgICBjY2MgPSBbIFs2OSwgJ3JnYigwLDAsMCknLCAwXSxbNzAsICdyZ2IoMCwwLDApJywgMC4zXSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFgnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2JhKDEwMCwxMDAsMTAwLDAuMjUpJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cysxNCwgZmlsbDondXJsKCNncmFkWCknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiKDEwMCwxMDAsMTAwKScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMSA9IHN2ZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNvbG9yUmluZzogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDI1NjtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAzMDsvL3N0cm9rZVxyXG4gICAgICAgIGxldCByID0oIHctcyApKjAuNTtcclxuICAgICAgICBsZXQgbWlkID0gdyowLjU7XHJcbiAgICAgICAgbGV0IG4gPSAyNCwgbnVkZ2UgPSA4IC8gciAvIG4gKiBNYXRoLlBJLCBhMSA9IDAsIGQxO1xyXG4gICAgICAgIGxldCBhbSwgdGFuLCBkMiwgYTIsIGFyLCBpLCBqLCBwYXRoLCBjY2M7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gbjsgKytpKSB7XHJcblxyXG4gICAgICAgICAgICBkMiA9IGkgLyBuO1xyXG4gICAgICAgICAgICBhMiA9IGQyICogVC5Ud29QSTtcclxuICAgICAgICAgICAgYW0gPSAoYTEgKyBhMikgKiAwLjU7XHJcbiAgICAgICAgICAgIHRhbiA9IDEgLyBNYXRoLmNvcygoYTIgLSBhMSkgKiAwLjUpO1xyXG5cclxuICAgICAgICAgICAgYXIgPSBbXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMSksIC1NYXRoLmNvcyhhMSksIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYW0pICogdGFuLCAtTWF0aC5jb3MoYW0pICogdGFuLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGEyKSwgLU1hdGguY29zKGEyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29sb3JbMV0gPSBULnJnYlRvSGV4KCBULmhzbFRvUmdiKFtkMiwgMSwgMC41XSkgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGogPSA2O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgICAgICAgIGFyW2pdID0gKChhcltqXSpyKSttaWQpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcgTScgKyBhclswXSArICcgJyArIGFyWzFdICsgJyBRJyArIGFyWzJdICsgJyAnICsgYXJbM10gKyAnICcgKyBhcls0XSArICcgJyArIGFyWzVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNjYyA9IFsgWzAsY29sb3JbMF0sMV0sIFsxMDAsY29sb3JbMV0sMV0gXTtcclxuICAgICAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHJytpLCB4MTphclswXSwgeTE6YXJbMV0sIHgyOmFyWzRdLCB5Mjphcls1XSwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOnBhdGgsICdzdHJva2Utd2lkdGgnOnMsIHN0cm9rZTondXJsKCNHJytpKycpJywgJ3N0cm9rZS1saW5lY2FwJzpcImJ1dHRcIiB9LCBzdmcsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGExID0gYTIgLSBudWRnZTsgXHJcbiAgICAgICAgICAgIGNvbG9yWzBdID0gY29sb3JbMV07XHJcbiAgICAgICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnIgPSAoMTI4IC0gcyApICsgMjtcclxuICAgICAgICBsZXQgYncgPSA2MDtcclxuXHJcbiAgICAgICAgbGV0IHR3ID0gODQuOTA7XHJcblxyXG4gICAgICAgIC8vIGJsYWNrIC8gd2hpdGVcclxuICAgICAgICBjY2MgPSBbIFswLCAnI0ZGRkZGRicsIDFdLCBbNTAsICcjRkZGRkZGJywgMF0sIFs1MCwgJyMwMDAwMDAnLCAwXSwgWzEwMCwgJyMwMDAwMDAnLCAxXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDAnLCB4MTowLCB5MTptaWQtdHcsIHgyOjAsIHkyOm1pZCt0dywgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyM3ZjdmN2YnLCAxXSwgWzUwLCAnIzdmN2Y3ZicsIDAuNV0sIFsxMDAsICcjN2Y3ZjdmJywgMF0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wxJywgeDE6bWlkLTQ5LjA1LCB5MTowLCB4MjptaWQrOTgsIHkyOjAsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAnMTI4cHggMTI4cHgnLCAndHJhbnNmb3JtJzoncm90YXRlKDApJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDoncmVkJyAgfSwgc3ZnLCAyICk7Ly8gMiwwXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wxKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMSknICB9LCBzdmcsIDIgKTsvLzIsMVxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMCknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDApJyAgfSwgc3ZnLCAyICk7Ly8yLDJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOidNIDI1NS43NSAxMzYuNSBRIDI1NiAxMzIuMyAyNTYgMTI4IDI1NiAxMjMuNyAyNTUuNzUgMTE5LjUgTCAyNDEgMTI4IDI1NS43NSAxMzYuNSBaJywgIGZpbGw6J25vbmUnLCdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcgIH0sIHN2ZywgMiApOy8vMiwzXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCsxMTMsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzozLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcsIDIgKTsvLzIuM1xyXG5cclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjEyOCwgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjIsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vM1xyXG5cclxuICAgICAgICBULmNvbG9yUmluZyA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGljb246IGZ1bmN0aW9uICggdHlwZSwgY29sb3IsIHcgKXtcclxuXHJcbiAgICAgICAgdyA9IHcgfHwgNDA7XHJcbiAgICAgICAgLy9jb2xvciA9IGNvbG9yIHx8ICcjREVERURFJztcclxuICAgICAgICBsZXQgdmlld0JveCA9ICcwIDAgMjU2IDI1Nic7XHJcbiAgICAgICAgLy9sZXQgdmlld0JveCA9ICcwIDAgJysgdyArJyAnKyB3O1xyXG4gICAgICAgIGxldCB0ID0gW1wiPHN2ZyB4bWxucz0nXCIrVC5zdmducytcIicgdmVyc2lvbj0nMS4xJyB4bWxuczp4bGluaz0nXCIrVC5odG1scytcIicgc3R5bGU9J3BvaW50ZXItZXZlbnRzOm5vbmU7JyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSd4TWluWU1heCBtZWV0JyB4PScwcHgnIHk9JzBweCcgd2lkdGg9J1wiK3crXCJweCcgaGVpZ2h0PSdcIit3K1wicHgnIHZpZXdCb3g9J1wiK3ZpZXdCb3grXCInPjxnPlwiXTtcclxuICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xvZ28nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvRmlsbF9kK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkb25hdGUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2RvbmF0ZStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbmVvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19uZW8rXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BoeSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX3BoeStcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uZmlnJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fY29uZmlnK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdnaXRodWInOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX2dpdGh1YitcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAyNi4xMjUgMTcgTCAyMCAyMi45NSAxNC4wNSAxNyBNIDIwIDkuOTUgTCAyMCAyMi45NScvPjxwYXRoIHN0cm9rZT0nXCIrY29sb3I7XHJcbiAgICAgICAgICAgIHRbMV0rPVwiJyBzdHJva2Utd2lkdGg9JzIuNScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDMyLjYgMjMgTCAzMi42IDI1LjUgUSAzMi42IDI4LjUgMjkuNiAyOC41IEwgMTAuNiAyOC41IFEgNy42IDI4LjUgNy42IDI1LjUgTCA3LjYgMjMnLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRbMl0gPSBcIjwvZz48L3N2Zz5cIjtcclxuICAgICAgICByZXR1cm4gdC5qb2luKFwiXFxuXCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbG9nb0ZpbGxfZDpgXHJcbiAgICBNIDE3MSAxNTAuNzUgTCAxNzEgMzMuMjUgMTU1LjUgMzMuMjUgMTU1LjUgMTUwLjc1IFEgMTU1LjUgMTYyLjIgMTQ3LjQ1IDE3MC4yIDEzOS40NSAxNzguMjUgMTI4IDE3OC4yNSAxMTYuNiAxNzguMjUgMTA4LjU1IDE3MC4yIDEwMC41IDE2Mi4yIDEwMC41IDE1MC43NSBcclxuICAgIEwgMTAwLjUgMzMuMjUgODUgMzMuMjUgODUgMTUwLjc1IFEgODUgMTY4LjY1IDk3LjU1IDE4MS4xNSAxMTAuMTUgMTkzLjc1IDEyOCAxOTMuNzUgMTQ1LjkgMTkzLjc1IDE1OC40IDE4MS4xNSAxNzEgMTY4LjY1IDE3MSAxNTAuNzUgXHJcbiAgICBNIDIwMCAzMy4yNSBMIDE4NCAzMy4yNSAxODQgMTUwLjggUSAxODQgMTc0LjEgMTY3LjYgMTkwLjQgMTUxLjMgMjA2LjggMTI4IDIwNi44IDEwNC43NSAyMDYuOCA4OC4zIDE5MC40IDcyIDE3NC4xIDcyIDE1MC44IEwgNzIgMzMuMjUgNTYgMzMuMjUgNTYgMTUwLjc1IFxyXG4gICAgUSA1NiAxODAuNTUgNzcuMDUgMjAxLjYgOTguMiAyMjIuNzUgMTI4IDIyMi43NSAxNTcuOCAyMjIuNzUgMTc4LjkgMjAxLjYgMjAwIDE4MC41NSAyMDAgMTUwLjc1IEwgMjAwIDMzLjI1IFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19naXRodWI6YFxyXG4gICAgTSAxODAuNSA3MCBRIDE4Ni4zIDgyLjQgMTgxLjU1IDk2LjU1IDE5Ni41IDExMS41IDE4OS43IDE0MC42NSAxODMuNjUgMTY4LjM1IDE0NiAxNzIuNyAxNTIuNSAxNzguNyAxNTIuNTUgMTg1LjkgTCAxNTIuNTUgMjE4LjE1IFEgMTUyLjg0IDIyNC41NiAxNTkuMTUgMjIzLjMgXHJcbiAgICAxNTkuMjEgMjIzLjMgMTU5LjI1IDIyMy4zIDE4MS4xNCAyMTYuMjUgMTk4LjcgMTk4LjcgMjI4IDE2OS40IDIyOCAxMjggMjI4IDg2LjYgMTk4LjcgNTcuMyAxNjkuNCAyOCAxMjggMjggODYuNiAyOCA1Ny4zIDU3LjMgMjggODYuNiAyOCAxMjggMjggMTY5LjQgNTcuMyAxOTguNyA3NC44NSBcclxuICAgIDIxNi4yNSA5Ni43NSAyMjMuMyA5Ni43OCAyMjMuMyA5Ni44IDIyMy4zIDEwMy4xNiAyMjQuNTQgMTAzLjQ1IDIxOC4xNSBMIDEwMy40NSAyMDAgUSA4Mi45NyAyMDMuMSA3NS4xIDE5Ni4zNSA2OS44NSAxOTEuNjUgNjguNCAxODUuNDUgNjQuMjcgMTc3LjA1NSA1OS40IDE3NC4xNSA0OS4yMCBcclxuICAgIDE2Ni44NyA2MC44IDE2Ny44IDY5Ljg1IDE2OS42MSA3NS43IDE4MCA4MS4xMyAxODguMDkgOTAgMTg4LjU1IDk4LjE4IDE4OC44NiAxMDMuNDUgMTg1LjkgMTAzLjQ5IDE3OC42NyAxMTAgMTcyLjcgNzIuMzMgMTY4LjMzIDY2LjMgMTQwLjY1IDU5LjQ4IDExMS40OSA3NC40NSA5Ni41NSA2OS43IFxyXG4gICAgODIuNDEgNzUuNSA3MCA4NC44NyA2OC43NCAxMDMuMTUgODAgMTE1LjEyNSA3Ni42MzUgMTI4IDc2Ljg1IDE0MC44NSA3Ni42NSAxNTIuODUgODAgMTcxLjEgNjguNzUgMTgwLjUgNzAgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX25lbzpgXHJcbiAgICBNIDIxOSA1MiBMIDIwNiA1MiAyMDYgMTY2IFEgMjA2IDE4My40IDE5My43NSAxOTUuNjUgMTgxLjQgMjA4IDE2NCAyMDggMTQ2LjYgMjA4IDEzNC4zNSAxOTUuNjUgMTIyIDE4My40IDEyMiAxNjYgTCAxMjIgOTAgUSAxMjIgNzcuNiAxMTMuMTUgNjguODUgMTA0LjQgNjAgOTIgNjAgNzkuNTUgXHJcbiAgICA2MCA3MC43NSA2OC44NSA2MiA3Ny42IDYyIDkwIEwgNjIgMjA0IDc1IDIwNCA3NSA5MCBRIDc1IDgzIDc5Ljk1IDc4IDg0Ljk1IDczIDkyIDczIDk5IDczIDEwNCA3OCAxMDkgODMgMTA5IDkwIEwgMTA5IDE2NiBRIDEwOSAxODguOCAxMjUuMTUgMjA0Ljg1IDE0MS4yIDIyMSAxNjQgMjIxIFxyXG4gICAgMTg2Ljc1IDIyMSAyMDIuOTUgMjA0Ljg1IDIxOSAxODguOCAyMTkgMTY2IEwgMjE5IDUyIE0gMTk0IDUyIEwgMTgxIDUyIDE4MSAxNjYgUSAxODEgMTczIDE3Ni4wNSAxNzggMTcxLjA1IDE4MyAxNjQgMTgzIDE1NyAxODMgMTUyIDE3OCAxNDcgMTczIDE0NyAxNjYgTCAxNDcgOTAgUSAxNDcgXHJcbiAgICA2Ny4yIDEzMC44NSA1MS4xNSAxMTQuOCAzNSA5MiAzNSA2OS4yNSAzNSA1My4wNSA1MS4xNSAzNyA2Ny4yIDM3IDkwIEwgMzcgMjA0IDUwIDIwNCA1MCA5MCBRIDUwIDcyLjYgNjIuMjUgNjAuMzUgNzQuNiA0OCA5MiA0OCAxMDkuNCA0OCAxMjEuNjUgNjAuMzUgMTM0IDcyLjYgMTM0IDkwIEwgXHJcbiAgICAxMzQgMTY2IFEgMTM0IDE3OC40IDE0Mi44NSAxODcuMTUgMTUxLjYgMTk2IDE2NCAxOTYgMTc2LjQ1IDE5NiAxODUuMjUgMTg3LjE1IDE5NCAxNzguNCAxOTQgMTY2IEwgMTk0IDUyIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19waHk6YFxyXG4gICAgTSAxMDMuNTUgMzcuOTUgTCAxMjcuOTUgMzcuOTUgUSAxNjIuMzUgMzcuOTUgMTg2LjUgNTUgMjEwLjkgNzIuMzUgMjEwLjkgOTYuNSAyMTAuOSAxMjAuNjUgMTg2LjUgMTM3LjcgMTYyLjM1IDE1NSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDIzNy45NSBNIDEyNy45NSAxNTUgXHJcbiAgICBRIDkzLjU1IDE1NSA2OS4xNSAxMzcuNyA0NSAxMjAuNjUgNDUgOTYuNSA0NSA3Mi4zNSA2OS4xNSA1NSA3MC45IDUzLjggNzIuODUgNTIuODUgTSAxMjcuOTUgMTU1IEwgMTI3Ljk1IDM3Ljk1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fY29uZmlnOmBcclxuICAgIE0gMjA0LjM1IDUxLjY1IEwgMTczLjI1IDgyLjc1IFEgMTkyIDEwMS41IDE5MiAxMjggTCAyMzYgMTI4IE0gMTkyIDEyOCBRIDE5MiAxNTQuNTUgMTczLjI1IDE3My4yNSBMIDIwNC40IDIwNC40IE0gNTEuNjUgNTEuNjUgTCA4Mi43NSA4Mi43NSBRIDEwMS41IDY0IDEyOCA2NCBcclxuICAgIEwgMTI4IDIwIE0gNTEuNiAyMDQuNCBMIDgyLjc1IDE3My4yNSBRIDY0IDE1NC41NSA2NCAxMjggTCAyMCAxMjggTSAxMjggMjM2IEwgMTI4IDE5MiBRIDEwMS41IDE5MiA4Mi43NSAxNzMuMjUgTSA2NCAxMjggUSA2NCAxMDEuNSA4Mi43NSA4Mi43NSBNIDE3My4yNSAxNzMuMjUgXHJcbiAgICBRIDE1NC41NSAxOTIgMTI4IDE5MiBNIDEyOCA2NCBRIDE1NC41NSA2NCAxNzMuMjUgODIuNzVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19kb25hdGU6YFxyXG4gICAgTSAxNzEuMyA4MC4zIFEgMTc5LjUgNjIuMTUgMTcxLjMgNDUuOCAxNjQuMSAzMi41IDE0MS4zNSAzMC4xIEwgOTQuMzUgMzAuMSBRIDg5LjM1IDMwLjQgODguMyAzNS4xNSBMIDcwLjUgMTQ4LjA1IFEgNzAuMiAxNTIuNSA3My43IDE1Mi42IEwgMTAwLjk1IDE1Mi42IDEwNyAxMTEuNiBRIDEwOC43NSBcclxuICAgIDEwNi41NSAxMTIuNiAxMDYuNDUgMTMwLjQ1IDEwOC4wNSAxNDUuMyAxMDMuOSAxNjMuMzUgOTguNzUgMTcxLjMgODAuMyBNIDE3OS44IDcxLjUgUSAxNzguNiA3OS43NSAxNzQuOSA4Ny44NSAxNjguNDUgMTAyLjkgMTUxLjkgMTA5LjE1IDE0MC42NSAxMTMuOTUgMTE3LjU1IDExMyAxMTMuMTUgXHJcbiAgICAxMTIuNzUgMTExIDExNy40NSBMIDEwMi43IDE2OS45NSBRIDEwMi40NSAxNzMuOCAxMDUuNSAxNzMuODUgTCAxMjguOTUgMTczLjg1IFEgMTMyLjIgMTc0LjIgMTMzLjM1IDE2OS42NSBMIDEzOC4zIDEzOS45NSBRIDEzOS43NSAxMzUuNiAxNDMuMSAxMzUuNSAxNDYuNiAxMzUuNzUgMTUwLjYgMTM1LjY1IFxyXG4gICAgMTU0LjU1IDEzNS41IDE1Ny4zNSAxMzUuMSAxNjAuMTUgMTM0LjcgMTY2Ljc1IDEzMi4zNSAxODEuMzUgMTI3LjQgMTg3LjkgMTExLjIgMTk0LjI1IDk1Ljc1IDE4OS41IDgxLjk1IDE4Ni43NSA3NC44NSAxNzkuOCA3MS41IE0gMTAzLjUgMjA5LjkgUSAxMDMuNSAyMDIuODUgOTkuNyAxOTguODUgOTUuOTUgXHJcbiAgICAxOTQuNzUgODkuNCAxOTQuNzUgODIuOCAxOTQuNzUgNzkuMDUgMTk4Ljg1IDc1LjMgMjAyLjkgNzUuMyAyMDkuOSA3NS4zIDIxNi44NSA3OS4wNSAyMjAuOTUgODIuOCAyMjUuMDUgODkuNCAyMjUuMDUgOTUuOTUgMjI1LjA1IDk5LjcgMjIxIDEwMy41IDIxNi45NSAxMDMuNSAyMDkuOSBNIDk1LjQ1IDIwNS41IFxyXG4gICAgUSA5NS45NSAyMDcuMyA5NS45NSAyMDkuOSA5NS45NSAyMTIuNjUgOTUuNDUgMjE0LjM1IDk0Ljk1IDIxNiA5NCAyMTcuMyA5My4xIDIxOC40NSA5MS45IDIxOSA5MC43IDIxOS41NSA4OS40IDIxOS41NSA4OC4xNSAyMTkuNTUgODYuOTUgMjE5LjA1IDg1Ljc1IDIxOC41NSA4NC44IDIxNy4zIDgzLjkgMjE2LjE1IFxyXG4gICAgODMuNCAyMTQuMzUgODIuODUgMjEyLjYgODIuODUgMjA5LjkgODIuODUgMjA3LjMgODMuNCAyMDUuNDUgODMuOTUgMjAzLjU1IDg0Ljg1IDIwMi40NSA4NS45IDIwMS4yIDg2Ljk1IDIwMC43NSA4OC4wNSAyMDAuMjUgODkuNCAyMDAuMjUgOTAuNyAyMDAuMjUgOTEuODUgMjAwLjggOTMuMDUgMjAxLjMgOTQgMjAyLjUgXHJcbiAgICA5NC45IDIwMy42NSA5NS40NSAyMDUuNSBNIDE1My4zIDE5NS4zNSBMIDE0NS4zIDE5NS4zNSAxMzUuNSAyMjQuNDUgMTQyLjggMjI0LjQ1IDE0NC42IDIxOC41IDE1My43NSAyMTguNSAxNTUuNiAyMjQuNDUgMTYzLjEgMjI0LjQ1IDE1My4zIDE5NS4zNSBNIDE1Mi4xNSAyMTMuMjUgTCAxNDYuMjUgMjEzLjI1IFxyXG4gICAgMTQ5LjIgMjAzLjY1IDE1Mi4xNSAyMTMuMjUgTSAxMTYuNzUgMTk1LjM1IEwgMTA3LjggMTk1LjM1IDEwNy44IDIyNC40NSAxMTQuNSAyMjQuNDUgMTE0LjUgMjA0LjIgMTI1LjcgMjI0LjQ1IDEzMi43NSAyMjQuNDUgMTMyLjc1IDE5NS4zNSAxMjYuMDUgMTk1LjM1IDEyNi4wNSAyMTIuMDUgMTE2Ljc1IDE5NS4zNSBNIFxyXG4gICAgNjYuNSAxOTcuNjUgUSA2NC4xNSAxOTYuMTUgNjEuNDUgMTk1Ljc1IDU4LjggMTk1LjM1IDU1Ljc1IDE5NS4zNSBMIDQ2LjcgMTk1LjM1IDQ2LjcgMjI0LjQ1IDU1LjggMjI0LjQ1IFEgNTguOCAyMjQuNDUgNjEuNSAyMjQuMDUgNjQuMTUgMjIzLjYgNjYuNCAyMjIuMTUgNjkuMTUgMjIwLjQ1IDcwLjkgMjE3LjIgXHJcbiAgICA3Mi43IDIxNCA3Mi43IDIwOS45NSA3Mi43IDIwNS43IDcxIDIwMi42IDY5LjM1IDE5OS41IDY2LjUgMTk3LjY1IE0gNjQuMiAyMDUgUSA2NS4yIDIwNyA2NS4yIDIwOS45IDY1LjIgMjEyLjc1IDY0LjI1IDIxNC43NSA2My4zIDIxNi43NSA2MS41IDIxNy44NSA2MCAyMTguODUgNTguMyAyMTguOSA1Ni42IDIxOSBcclxuICAgIDU0LjE1IDIxOSBMIDU0IDIxOSA1NCAyMDAuOCA1NC4xNSAyMDAuOCBRIDU2LjQgMjAwLjggNTguMDUgMjAwLjkgNTkuNyAyMDAuOTUgNjEuMTUgMjAxLjc1IDYzLjIgMjAyLjk1IDY0LjIgMjA1IE0gMjEwLjIgMTk1LjM1IEwgMTkwLjUgMTk1LjM1IDE5MC41IDIyNC40NSAyMTAuMiAyMjQuNDUgMjEwLjIgMjE4LjkgXHJcbiAgICAxOTcuNzUgMjE4LjkgMTk3Ljc1IDIxMS41NSAyMDkuMiAyMTEuNTUgMjA5LjIgMjA2IDE5Ny43NSAyMDYgMTk3Ljc1IDIwMC45IDIxMC4yIDIwMC45IDIxMC4yIDE5NS4zNSBNIDE4Ny41IDE5NS4zNSBMIDE2MyAxOTUuMzUgMTYzIDIwMC45IDE3MS42IDIwMC45IDE3MS42IDIyNC40NSAxNzguOSAyMjQuNDUgMTc4LjkgXHJcbiAgICAyMDAuOSAxODcuNSAyMDAuOSAxODcuNSAxOTUuMzUgWlxyXG4gICAgYCxcclxuXHJcbn1cclxuXHJcblQuc2V0VGV4dCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gVDsiLCIvLy9odHRwczovL3dpY2cuZ2l0aHViLmlvL2ZpbGUtc3lzdGVtLWFjY2Vzcy8jYXBpLWZpbGVzeXN0ZW1maWxlaGFuZGxlLWdldGZpbGVcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXMge1xyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGSUxFIFRZUEVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXV0b1R5cGVzKCB0eXBlICkge1xyXG5cclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHN3aXRjaCggdHlwZSApe1xyXG4gICAgICAgICAgICBjYXNlICdzdmcnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnd2F2JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL3dhdic6ICcud2F2J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXAzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2F1ZGlvL21wZWcnOiAnLm1wMyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wNCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICd2aWRlby9tcDQnOiAnLm1wNCd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jpbic6IGNhc2UgJ2hleCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdCaW5hcnkgRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6IFsnLmJpbicsICcuaGV4J10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ1RleHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy50eHQnLCAnLnRleHQnXSwgJ3RleHQvaHRtbCc6IFsnLmh0bWwnLCAnLmh0bSddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKU09OIEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogWycuanNvbiddIH0gfSwgXS8vdGV4dC9wbGFpblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnanMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9qYXZhc2NyaXB0JzogWycuanMnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ltYWdlcycsIGFjY2VwdDogeyAnaW1hZ2UvKic6IFsnLnBuZycsICcuZ2lmJywgJy5qcGVnJywgJy5qcGcnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSWNvbnMnLCBhY2NlcHQ6IHsgJ2ltYWdlL3gtaWNvJzogWycuaWNvJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsdXQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnTHV0JywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycuY3ViZScsICcuM2RsJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgTE9BRFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgbG9hZCggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciA9IEZpbGVzLnNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICBcdGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjogdHlwZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIC8vc3RhcnRJbjonLi9hc3NldHMnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciggb3B0aW9ucyApXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGVbMF0uZ2V0RmlsZSgpXHJcbiAgICAgICAgICAgIC8vbGV0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKVxyXG5cclxuICAgICAgICAgICAgaWYoICFmaWxlICkgcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUuc3Vic3RyaW5nKCBmbmFtZS5sYXN0SW5kZXhPZignLicpKzEsIGZuYW1lLmxlbmd0aCApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IFsgJ3BuZycsICdqcGcnLCAnanBlZycsICdtcDQnLCAnd2VibScsICdvZ2cnLCAnbXAzJyBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhQnVmID0gWyAnc2VhJywgJ3onLCAnaGV4JywgJ2J2aCcsICdCVkgnLCAnZ2xiJywgJ2dsdGYnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiggZGF0YVVybC5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNEYXRhVVJMKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSBpZiggZGF0YUJ1Zi5pbmRleE9mKCBmdHlwZSApICE9PSAtMSApIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgcmVhZGVyLnJlYWRBc1RleHQoIGZpbGUgKVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGUudGFyZ2V0LnJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggaW1nLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggSlNPTi5wYXJzZSggY29udGVudCApLCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggY29udGVudCwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKVxyXG4gICAgICAgICAgICBpZiggby5hbHdheXMgJiYgby5jYWxsYmFjayApIG8uY2FsbGJhY2soIG51bGwgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHRzdGF0aWMgc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgIGlucHV0Lm11bHRpcGxlID0gb3B0aW9ucy5tdWx0aXBsZTtcclxuICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy50eXBlc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZS5hY2NlcHQpXHJcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaW5zdCkgPT4gT2JqZWN0LmtleXMoaW5zdCkuZmxhdE1hcCgoa2V5KSA9PiBpbnN0W2tleV0pKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbnB1dC5maWxlc10ubWFwKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWxlOiBhc3luYyAoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgU0FWRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBzYXZlKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGxldCB1c2VQb2x5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyID0gRmlsZXMuc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICAgICAgdXNlUG9seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdWdnZXN0ZWROYW1lOiBvLm5hbWUgfHwgJ2hlbGxvJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG8uZGF0YSB8fCAnJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmluYWxUeXBlID0gT2JqZWN0LmtleXMoIG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0IClbMF1cclxuICAgICAgICAgICAgb3B0aW9ucy5zdWdnZXN0ZWROYW1lICs9IG9wdGlvbnMudHlwZXNbMF0uYWNjZXB0W29wdGlvbnMuZmluYWxUeXBlXVswXVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBoYW5kbGVcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciggb3B0aW9ucyApO1xyXG5cclxuICAgICAgICAgICAgaWYoIHVzZVBvbHkgKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0gdG8gd3JpdGUgdG9cclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6IG9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gd3JpdGUgb3VyIGZpbGVcclxuICAgICAgICAgICAgYXdhaXQgZmlsZS53cml0ZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBmaWxlIGFuZCB3cml0ZSB0aGUgY29udGVudHMgdG8gZGlzay5cclxuICAgICAgICAgICAgYXdhaXQgZmlsZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5zdWdnZXN0ZWROYW1lIHx8IFwibXktZmlsZS50eHRcIlxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTpvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuICAgICAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCggYmxvYiApXHJcblxyXG4gICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwgMTAwMCApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBGT0xERVIgbm90IHBvc3NpYmxlIGluIHBvbHlcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Rm9sZGVyKCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW107XHJcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgaGFuZGxlLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZW50cnkuZ2V0RmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIFxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBWMiB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCB4ID0gMCwgeSA9IDAgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0ICggeCwgeSApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54IC89IHYueDtcclxuXHRcdHRoaXMueSAvPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHYueDtcclxuXHRcdHRoaXMueSAqPSB2Lnk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtdWx0aXBseVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gc2NhbGFyO1xyXG5cdFx0dGhpcy55ICo9IHNjYWxhcjtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGRpdmlkZVNjYWxhciAoIHNjYWxhciApIHtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlbmd0aCAoKSB7XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICk7XHJcblxyXG5cdH1cclxuXHJcblx0YW5nbGUgKCkge1xyXG5cclxuXHRcdC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG5cdFx0dmFyIGFuZ2xlID0gTWF0aC5hdGFuMiggdGhpcy55LCB0aGlzLnggKTtcclxuXHJcblx0XHRpZiAoIGFuZ2xlIDwgMCApIGFuZ2xlICs9IDIgKiBNYXRoLlBJO1xyXG5cclxuXHRcdHJldHVybiBhbmdsZTtcclxuXHJcblx0fVxyXG5cclxuXHRhZGRTY2FsYXIgKCBzICkge1xyXG5cclxuXHRcdHRoaXMueCArPSBzO1xyXG5cdFx0dGhpcy55ICs9IHM7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWdhdGUgKCkge1xyXG5cclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZyAoKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gLTE7XHJcblx0XHR0aGlzLnkgPSAtMTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGlzWmVybyAoKSB7XHJcblxyXG5cdFx0cmV0dXJuICggdGhpcy54ID09PSAwICYmIHRoaXMueSA9PT0gMCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNvcHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRlcXVhbHMgKCB2ICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRuZWFyRXF1YWxzICggdiwgbiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueC50b0ZpeGVkKG4pID09PSB0aGlzLngudG9GaXhlZChuKSApICYmICggdi55LnRvRml4ZWQobikgPT09IHRoaXMueS50b0ZpeGVkKG4pICkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZXJwICggdiwgYWxwaGEgKSB7XHJcblxyXG5cdFx0aWYoIHYgPT09IG51bGwgKXtcclxuXHRcdFx0dGhpcy54IC09IHRoaXMueCAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSAtPSB0aGlzLnkgKiBhbHBoYTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgLy8gZGlzYWJsZSBtb3VzZSBjb250cm9sZVxyXG4gICAgdGhpcy5sb2NrID0gby5sb2NrIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGZvciBidXR0b25cclxuICAgIHRoaXMubmV2ZXJsb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBzaW1wbGUgc3BhY2VcclxuICAgIHRoaXMuaXNTcGFjZSA9IG8uaXNTcGFjZSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBpcyBvbiBndWkgb3IgZ3JvdXBcclxuICAgIHRoaXMubWFpbiA9IG8ubWFpbiB8fCBudWxsO1xyXG4gICAgdGhpcy5pc1VJID0gby5pc1VJIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cCA9IG8uZ3JvdXAgfHwgbnVsbDtcclxuXHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy50b3AgPSAwO1xyXG4gICAgdGhpcy55dG9wID0gMDtcclxuXHJcbiAgICB0aGlzLmR4ID0gby5keCB8fCAwO1xyXG5cclxuICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgPyBvLnNlbGVjdGFibGUgOiBmYWxzZTtcclxuICAgIHRoaXMudW5zZWxlY3RhYmxlID1cclxuICAgICAgby51bnNlbGVjdCAhPT0gdW5kZWZpbmVkID8gby51bnNlbGVjdCA6IHRoaXMuaXNTZWxlY3RhYmxlO1xyXG5cclxuICAgIHRoaXMub250b3AgPSBvLm9udG9wID8gby5vbnRvcCA6IGZhbHNlOyAvLyAnYmVmb3JlYmVnaW4nICdhZnRlcmJlZ2luJyAnYmVmb3JlZW5kJyAnYWZ0ZXJlbmQnXHJcblxyXG4gICAgdGhpcy5jc3MgPSB0aGlzLm1haW4gPyB0aGlzLm1haW4uY3NzIDogVG9vbHMuY3NzO1xyXG5cclxuICAgIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3IoXHJcbiAgICAgIG8sXHJcbiAgICAgIHRoaXMubWFpblxyXG4gICAgICAgID8gdGhpcy5ncm91cFxyXG4gICAgICAgICAgPyB0aGlzLmdyb3VwLmNvbG9yc1xyXG4gICAgICAgICAgOiB0aGlzLm1haW4uY29sb3JzXHJcbiAgICAgICAgOiBUb29scy5jb2xvcnNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vdmVyRWZmZWN0ID0gdGhpcy5jb2xvcnMuc2hvd092ZXI7XHJcblxyXG4gICAgdGhpcy5zdmdzID0gVG9vbHMuc3ZncztcclxuXHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAsIGQ6IDAgfTtcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHBlcmNlbnQgb2YgdGl0bGVcclxuICAgIHRoaXMucCA9IG8ucCAhPT0gdW5kZWZpbmVkID8gby5wIDogVG9vbHMuc2l6ZS5wO1xyXG5cclxuICAgIHRoaXMudyA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLncgOiBUb29scy5zaXplLnc7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMudyA9IG8udztcclxuXHJcbiAgICB0aGlzLmggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS5oIDogVG9vbHMuc2l6ZS5oO1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmggPSBvLmg7XHJcbiAgICBpZiAoIXRoaXMuaXNTcGFjZSkgdGhpcy5oID0gdGhpcy5oIDwgMTEgPyAxMSA6IHRoaXMuaDtcclxuICAgIGVsc2UgdGhpcy5sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZWNhbGUgZm9yIGNhbnZhcyBvbmx5XHJcbiAgICB0aGlzLmZ3ID0gby5mdyB8fCAwO1xyXG5cclxuICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvIHx8IHRydWU7IC8vIGF1dG8gd2lkdGggb3IgZmxleFxyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy9mYWxzZS8vIG9wZW4gc3RhdHVcclxuXHJcbiAgICAvLyByYWRpdXMgZm9yIHRvb2xib3hcclxuICAgIHRoaXMucmFkaXVzID0gby5yYWRpdXMgfHwgdGhpcy5jb2xvcnMucmFkaXVzO1xyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IG8udHJhbnNpdGlvbiB8fCBUb29scy50cmFuc2l0aW9uO1xyXG5cclxuICAgIC8vIG9ubHkgZm9yIG51bWJlclxyXG4gICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ub05lZyA9IG8ubm9OZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmFsbEVxdWFsID0gby5hbGxFcXVhbCB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IG1vc3Qgc2ltcGxlXHJcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgZWRpdCBzbGlkZSB0ZXh0XHJcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG5vIHRpdGxlXHJcbiAgICB0aGlzLnNpbXBsZSA9IG8uc2ltcGxlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNhID0gMDtcclxuXHJcbiAgICAvLyBkZWZpbmUgb2JqIHNpemVcclxuICAgIHRoaXMuc2V0U2l6ZSh0aGlzLncpO1xyXG5cclxuICAgIC8vIHRpdGxlIHNpemVcclxuICAgIGlmIChvLnNhICE9PSB1bmRlZmluZWQpIHRoaXMuc2EgPSBvLnNhO1xyXG4gICAgaWYgKG8uc2IgIT09IHVuZGVmaW5lZCkgdGhpcy5zYiA9IG8uc2I7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG5cclxuICAgIC8vIGxhc3QgbnVtYmVyIHNpemUgZm9yIHNsaWRlXHJcbiAgICB0aGlzLnNjID0gby5zYyA9PT0gdW5kZWZpbmVkID8gNDcgOiBvLnNjO1xyXG5cclxuICAgIC8vIGZvciBsaXN0ZW5pbmcgb2JqZWN0XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5uYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHQ7XHJcbiAgICB0aGlzLnRhcmdldCA9IG8udGFyZ2V0IHx8IG51bGw7XHJcblxyXG4gICAgLy8gY2FsbGJhY2tcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBvLm9wZW5DYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8ub3BlbkNhbGxiYWNrO1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gby5jbG9zZUNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jbG9zZUNhbGxiYWNrO1xyXG5cclxuICAgIC8vIGlmIG5vIGNhbGxiYWNrIHRha2Ugb25lIGZyb20gZ3JvdXAgb3IgZ3VpXHJcbiAgICBpZiAodGhpcy5jYWxsYmFjayA9PT0gbnVsbCAmJiB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmNhbGxiYWNrICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5jYWxsYmFjayA6IHRoaXMubWFpbi5jYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbGVtZW50c1xyXG4gICAgdGhpcy5jID0gW107XHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMucyA9IFtdO1xyXG5cclxuICAgIHRoaXMudXNlRmxleCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi51c2VGbGV4IDogZmFsc2U7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXhcclxuICAgICAgPyBcImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgZmxleDogMSAxMDAlO1wiXHJcbiAgICAgIDogXCJmbG9hdDpsZWZ0O1wiO1xyXG5cclxuICAgIHRoaXMuY1swXSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwicG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMHB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc1swXSA9IHRoaXMuY1swXS5zdHlsZTtcclxuXHJcbiAgICAvLyBib3R0b20gbWFyZ2luXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tdG9wID0gMDtcclxuICAgIGxldCBtYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJICYmIHRoaXMubWFyZ2luKSB7XHJcbiAgICAgIHRoaXMuc1swXS5ib3hTaXppbmcgPSBcImNvbnRlbnQtYm94XCI7XHJcbiAgICAgIGlmIChtYXJnaW5EaXYpIHtcclxuICAgICAgICB0aGlzLm10b3AgPSB0aGlzLm1hcmdpbiAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuc1swXS5ib3JkZXJUb3AgPSAnJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnQnXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgJHt0aGlzLm10b3B9cHggc29saWQgdHJhbnNwYXJlbnRgKVxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJUb3AgPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tYXJnaW4gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aXRoIHRpdGxlXHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuY1sxXSA9IFRvb2xzLmRvbShcImRpdlwiLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUpO1xyXG4gICAgICB0aGlzLnNbMV0gPSB0aGlzLmNbMV0uc3R5bGU7XHJcbiAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMubmFtZTtcclxuICAgICAgdGhpcy5zWzFdLmNvbG9yID0gdGhpcy5sb2NrID8gdGhpcy5jb2xvcnMudGl0bGVvZmYgOiB0aGlzLmNvbG9ycy50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5wb3MpIHtcclxuICAgICAgdGhpcy5zWzBdLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICBmb3IgKGxldCBwIGluIG8ucG9zKSB7XHJcbiAgICAgICAgdGhpcy5zWzBdW3BdID0gby5wb3NbcF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb25vID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoby5jc3MpIHRoaXMuc1swXS5jc3NUZXh0ID0gby5jc3M7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gbWFrZSB0aGUgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMueXRvcCA9IHRoaXMudG9wICsgdGhpcy5tdG9wO1xyXG5cclxuICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLnpvbmUudyA9IHRoaXMudztcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMuczsgLy8gc3R5bGUgY2FjaGVcclxuICAgIGxldCBjID0gdGhpcy5jOyAvLyBkaXYgY2FjaFxyXG5cclxuICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkpIHNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCAmJiB0aGlzLnVzZUZsZXgpIHtcclxuICAgICAgc1swXS5mbGV4ID0gXCIxIDAgYXV0b1wiO1xyXG4gICAgICBzWzBdLm1pbldpZHRoID0gdGhpcy5taW53ICsgXCJweFwiO1xyXG4gICAgICBzWzBdLnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSBzWzBdLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9pZiggdGhpcy5hdXRvSGVpZ2h0ICkgc1swXS50cmFuc2l0aW9uID0gJ2hlaWdodCAwLjAxcyBlYXNlLW91dCc7XHJcbiAgICBpZiAoY1sxXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXV0b1dpZHRoKSB7XHJcbiAgICAgIHNbMV0gPSBjWzFdLnN0eWxlO1xyXG4gICAgICBzWzFdLnRvcCA9IDEgKyBcInB4XCI7XHJcbiAgICAgIHNbMV0uaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZnJhZyA9IFRvb2xzLmZyYWc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDEsIGxuZyA9IGMubGVuZ3RoOyBpICE9PSBsbmc7IGkrKykge1xyXG4gICAgICBpZiAoY1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjW2ldKTtcclxuICAgICAgICBzW2ldID0gY1tpXS5zdHlsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcCA9XHJcbiAgICAgIHRoaXMudGFyZ2V0ICE9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnRhcmdldFxyXG4gICAgICAgIDogdGhpcy5pc1VJXHJcbiAgICAgICAgPyB0aGlzLm1haW4uaW5uZXJcclxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKHRoaXMub250b3ApIHBwLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY1swXSk7XHJcbiAgICBlbHNlIHBwLmFwcGVuZENoaWxkKGNbMF0pO1xyXG5cclxuICAgIGNbMF0uYXBwZW5kQ2hpbGQoZnJhZyk7XHJcblxyXG4gICAgdGhpcy5yU2l6ZSgpO1xyXG5cclxuICAgIC8vICEgc29sbyBwcm90b1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmJhc2VIICYmIHRoaXMudHJhbnNpdGlvbiAmJiB0aGlzLmlzVUkpIHtcclxuICAgICAgdGhpcy5jWzBdLnN0eWxlLnRyYW5zaXRpb24gPSBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBUb29sc1xyXG5cclxuICBkb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpIHtcclxuICAgIHJldHVybiBUb29scy5kb20odHlwZSwgY3NzLCBvYmosIGRvbSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpIHtcclxuICAgIFRvb2xzLnNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKTtcclxuICB9XHJcblxyXG4gIHNldENzcyhkb20sIGNzcykge1xyXG4gICAgVG9vbHMuc2V0Q3NzKGRvbSwgY3NzKTtcclxuICB9XHJcblxyXG4gIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvclJpbmcoKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNvbG9yUmluZykgVG9vbHMubWFrZUNvbG9yUmluZygpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNvbG9yUmluZyk7XHJcbiAgfVxyXG5cclxuICBnZXRKb3lzdGljayhtb2RlbCkge1xyXG4gICAgaWYgKCFUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKSBUb29scy5tYWtlSm95c3RpY2sobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2lyY3VsYXIobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMuY2lyY3VsYXIpIFRvb2xzLm1ha2VDaXJjdWxhcihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY2lyY3VsYXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S25vYihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5rbm9iKSBUb29scy5tYWtlS25vYihtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMua25vYik7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQyZChtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5wYWQyZCkgVG9vbHMubWFrZVBhZChtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMucGFkMmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnJvbSBSb290c1xyXG5cclxuICBjdXJzb3IobmFtZSkge1xyXG4gICAgUm9vdHMuY3Vyc29yKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIHVwZGF0ZSgpIHt9XHJcblxyXG4gIHJlc2V0KCkge31cclxuXHJcbiAgLy8vLy8vLy8vXHJcblxyXG4gIGNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIHVpb3V0KCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIHVpb3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lKHMpIHtcclxuICAgIGlmICh0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gcztcclxuICB9XHJcblxyXG4gIGxpc3RlbigpIHtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBSb290cy5hZGRMaXN0ZW4odGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGxpc3RlbmluZygpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzU2VuZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0KSByZXR1cm47XHJcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSB0aGlzLnNldFZhbHVlKHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0pO1xyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2KSB7XHJcbiAgICBjb25zdCBvbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNOdW1iZXIpIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHYpO1xyXG4gICAgLy9lbHNlIGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEgKSB2ID0gdlswXTtcclxuICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChvbGQgIT09IHRoaXMudmFsdWUpIHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIGV2ZXJ5IGNoYW5nZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25DaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGYgfHwgbnVsbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBvbmx5IG9uIGVuZFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25GaW5pc2hDaGFuZ2UoZikge1xyXG4gICAgaWYgKHRoaXMuaXNTcGFjZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGV2ZW50IG9uIG9wZW4gY2xvc2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uT3BlbihmKSB7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoZikge1xyXG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBzZW5kIGJhY2sgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIHRoaXMuaXNTZW5kID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHRoaXMuY2FsbGJhY2sodiwgdGhpcy5vYmplY3RLZXkpO1xyXG4gICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbmRFbmQodikge1xyXG4gICAgdiA9IHYgfHwgdGhpcy52YWx1ZTtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdi5sZW5ndGggPT09IDEpIHYgPSB2WzBdO1xyXG5cclxuICAgIGlmICh0aGlzLmVuZENhbGxiYWNrKSB0aGlzLmVuZENhbGxiYWNrKHYpO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2xlYXIgbm9kZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTGlzdGVuKSBSb290cy5yZW1vdmVMaXN0ZW4odGhpcyk7XHJcblxyXG4gICAgVG9vbHMuY2xlYXIodGhpcy5jWzBdKTtcclxuXHJcbiAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IG51bGwpIHRoaXMuZ3JvdXAuY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgdGhpcy50YXJnZXQucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHRoaXMubWFpbi5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVUkpIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmMgPSBudWxsO1xyXG4gICAgdGhpcy5zID0gbnVsbDtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7fVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gY2hhbmdlIHNpemVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldFdpZHRoKCkge1xyXG4gICAgbGV0IG53ID0gUm9vdHMuZ2V0V2lkdGgodGhpcyk7XHJcbiAgICBpZiAobncpIHRoaXMudyA9IG53O1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShzeCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudyA9IHN4O1xyXG5cclxuICAgIGlmICh0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwcCA9IHRoaXMudyAqICh0aGlzLnAgLyAxMDApO1xyXG4gICAgICAvL3RoaXMuc2EgPSBNYXRoLmZsb29yKCBwcCArIDEwIClcclxuICAgICAgLy90aGlzLnNiID0gTWF0aC5mbG9vciggdGhpcy53IC0gcHAgLSAyMCApXHJcbiAgICAgIHRoaXMuc2EgPSBNYXRoLmZsb29yKHBwICsgOCk7XHJcbiAgICAgIHRoaXMuc2IgPSBNYXRoLmZsb29yKHRoaXMudyAtIHBwIC0gMTYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgdGhpcy5zWzBdLndpZHRoID0gdGhpcy53ICsgXCJweFwiO1xyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkgdGhpcy5zWzFdLndpZHRoID0gdGhpcy5zYSArIFwicHhcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBmb3IgbnVtZXJpYyB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0VHlwZU51bWJlcihvKSB7XHJcbiAgICB0aGlzLmlzTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gMDtcclxuICAgIGlmIChvLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvLnZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gby52YWx1ZSAqIDE7XHJcbiAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLUluZmluaXR5IDogby5taW47XHJcbiAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IG8ubWF4O1xyXG4gICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgIGxldCBzO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5wcmVjaXNpb24pIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcyA9IDAuMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHMgPSAwLjAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcyA9IDAuMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcyA9IDAuMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA1OlxyXG4gICAgICAgIHMgPSAwLjAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcyA9IDAuMDAwMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcCA9IG8uc3RlcCA9PT0gdW5kZWZpbmVkID8gcyA6IG8uc3RlcDtcclxuICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBudW1WYWx1ZShuKSB7XHJcbiAgICBpZiAodGhpcy5ub05lZykgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgTWF0aC5taW4odGhpcy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCBuKSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTIERFRkFVTFRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICh0aGlzLm5ldmVybG9jaykgUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzW2UudHlwZV0pXHJcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUudHlwZSwgXCJ0aGlzIHR5cGUgb2YgZXZlbnQgbm8gZXhpc3RlICFcIik7XHJcblxyXG4gICAgLy8gVE9ETyAhISEhXHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSB6LmQgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIHJldHVybiB0aGlzW2UudHlwZV0oZSk7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXlkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5dXAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG9iamVjdCByZWZlcmVuY3lcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFJlZmVyZW5jeShvYmosIGtleSkge1xyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gb2JqO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBrZXk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KHYgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zWzBdLnZpc2liaWxpdHkgPSB2ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHJlc2l6ZSBoZWlnaHRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub3BlbkNhbGxiYWNrKSB0aGlzLm9wZW5DYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrKSB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG5lZWRab25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgSU5QVVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdCgpIHt9XHJcblxyXG4gIHVuc2VsZWN0KCkge31cclxuXHJcbiAgc2V0SW5wdXQoSW5wdXQpIHtcclxuICAgIFJvb3RzLnNldElucHV0KElucHV0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHVwSW5wdXQoeCwgZG93bikge1xyXG4gICAgcmV0dXJuIFJvb3RzLnVwSW5wdXQoeCwgZG93bik7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gc3BlY2lhbCBpdGVtXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3RlZChiKSB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29sIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLm9uTmFtZSApIG8ub25uYW1lID0gby5vbk5hbWVcclxuICAgICAgICBpZiggby5vbm5hbWUgKSB0aGlzLm9uTmFtZSA9IG8ub25uYW1lXHJcblxyXG4gICAgICAgIHRoaXMuaW5oID0gby5pbmggfHwgTWF0aC5mbG9vciggdGhpcy5oKjAuOCApXHJcbiAgICAgICAgdGhpcy5pbncgPSBvLmludyB8fCAzNlxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgbGV0IHQgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLSgodGhpcy5pbmgtMikqMC41KTtcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdiYWNrZ3JvdW5kOicrIGNjLmlucHV0QmcgKyc7IGhlaWdodDonKyh0aGlzLmluaC0yKSsncHg7IHdpZHRoOicrdGhpcy5pbncrJ3B4OyB0b3A6Jyt0KydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXI6MnB4IHNvbGlkICcrIGNjLmJhY2sgKVxyXG4gICAgICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2hlaWdodDonKyh0aGlzLmluaC02KSsncHg7IHdpZHRoOjE2cHg7IHRvcDonKyh0KzIpKydweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOicrIGNjLmJ1dHRvbisnOycgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucCA9IDBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAtMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRydWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlICggb3ZlciApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnMsIG4sIHYgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCBvdmVyICkgbiA9IHYgPyA0IDogM1xyXG4gICAgICAgIGVsc2UgbiA9IHYgPyAyIDogMVxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlbCAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uY29sb3IgPSBjYy50ZXh0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMl0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsvLyBvZmYgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IGJyZWFrOy8vIG9uIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsvLyBvZmYgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRTZWxlY3Q7IGJyZWFrOy8vIG9uIG91dFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzWzNdLm1hcmdpbkxlZnQgPSB2ID8gJzE3cHgnIDogJzJweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHYgPyB0aGlzLm9uTmFtZSA6IHRoaXMubmFtZVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoKVxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCB3ID0gKHRoaXMudyAtIDEwICkgLSB0aGlzLmlud1xyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgICAgIHNbM10ubGVmdCA9IHcgKyAncHgnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgICsgJ3B4J1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8udmFsdWVzICkgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG5cclxuICAgICAgICBpZiggIW8udmFsdWVzICYmICFvLnZhbHVlICkgdGhpcy50eHQgPSAnJ1xyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ub25OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgYnV0dG9uIHdpZHRoXHJcbiAgICAgICAgdGhpcy5idyA9IG8uZm9yY2VXaWR0aCB8fCAwXHJcbiAgICAgICAgaWYoby5idykgdGhpcy5idyA9IG8uYndcclxuICAgICAgICB0aGlzLnNwYWNlID0gby5zcGFjZSB8fCAzXHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzID0gMFxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuICAgICAgICB0aGlzLnN0YXQgPSBbXVxyXG5cclxuICAgICAgICBsZXQgc2VsLCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHNlbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tpXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b25cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0W2ldID0gc2VsID8gMzoxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQ9PT0nJyApIHRoaXMucCA9IDAgXHJcblxyXG4gICAgICAgIGlmKCAoIW8udmFsdWUgJiYgIW8udmFsdWVzKSB8fCB0aGlzLnAgPT09IDAgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25PZmYoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub24gPSAhdGhpcy5vbjtcclxuICAgICAgICB0aGlzLmxhYmVsKCB0aGlzLm9uID8gdGhpcy5vbk5hbWUgOiB0aGlzLnZhbHVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSB0aGlzLnZhbHVlc1t0aGlzLnJlc10gJiYgdGhpcy51bnNlbGVjdGFibGUgKSB0aGlzLnZhbHVlID0gJydcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm9uTmFtZSAhPT0gbnVsbCApIHRoaXMub25PZmYoKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICBcdHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuICAgICAgICAgICAgciA9IHRoaXMubW9kZSggbiwgaSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICAvL2lmKCF0aGlzLnMpIHJldHVybiBmYWxzZVxyXG4gXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSBpZCsyXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLmNvbG9yID0gY2MudGV4dDsgc1tpXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIG4gPSBuIHx8IDI7XHJcbiAgICAgICAgdGhpcy5jW25dLnRleHRDb250ZW50ID0gc3RyaW5nXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZhbHVlcyggbiwgc3RyaW5nICl7XHJcbiAgICAgICAgdGhpcy5jW24rMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl0gPSBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSA9IDAsIG4gPSAyICkge1xyXG5cclxuICAgICAgICAvL2lmKHkpIHRoaXMuc1tuXS5tYXJnaW4gPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5zW25dLnBhZGRpbmcgPSAoIHkgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5jW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4IC8vdGhpcy5zcGFjZTtcclxuICAgICAgICAvL2xldCBzaXplID0gTWF0aC5mbG9vciggKCB3LShkYyooaS0xKSkgKSAvIGkgKTtcclxuICAgICAgICBsZXQgc2l6ZSA9ICggdy0oc3gqKGktMSkpICkgLyBpIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5idyApeyBcclxuICAgICAgICAgICAgc2l6ZSA9IHRoaXMuYncgPCBzaXplID8gdGhpcy5idyA6IHNpemVcclxuICAgICAgICAgICAgLy9kID0gTWF0aC5mbG9vcigodGhpcy53LSggKHNpemUgKiBpKSArIChkYyAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgICAgIGQgPSAoKHRoaXMudy0oIChzaXplICogaSkgKyAoc3ggKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICBcdC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIGQgKyAoIHNpemUgKiBpICkgKyAoIGRjICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCBkICsgKCBzaXplICogaSApICsgKCBzeCAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICBcdHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIHNbaSsyXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbaSsyXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2lyY3VsYXIgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwXHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZVxyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5taW53ID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy50d29QaSA9IFRvb2xzLlR3b1BJXHJcbiAgICAgICAgdGhpcy5waTkwID0gVG9vbHMucGk5MFxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMFxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwXHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMFxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMFxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0IClcclxuXHJcbiAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDaXJjdWxhcigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgbGV0IGNvbG9yXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dE92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2NpcmN1bGFyJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvdmVyJylcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSBvZmYuYW5nbGUoKSAtIHRoaXMucGk5MDtcclxuICAgICAgICB0aGlzLnIgPSAoKCh0aGlzLnIldGhpcy50d29QaSkrdGhpcy50d29QaSkldGhpcy50d29QaSk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBsZXQgZGlmID0gdGhpcy5yIC0gdGhpcy5vbGRyO1xyXG4gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLmFicyhkaWYpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkaWYgPiA2ICkgdGhpcy5yID0gMDtcclxuICAgICAgICAgICAgaWYoIGRpZiA8IC02ICkgdGhpcy5yID0gdGhpcy50d29QaTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy50d29QaTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnIgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSB+fiAoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2NpcmN1bGFyJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSA0MDtcclxuICAgICAgICBsZXQgZCA9IDI0O1xyXG4gICAgICAgIGxldCBhID0gdGhpcy5wZXJjZW50ICogdGhpcy50d29QaSAtIDAuMDAxO1xyXG4gICAgICAgIGxldCB4MiA9IChyICsgciAqIE1hdGguc2luKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IHkyID0gKHIgLSByICogTWF0aC5jb3MoYSkpICsgZDtcclxuICAgICAgICBsZXQgYmlnID0gYSA+IE1hdGguUEkgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gXCJNIFwiICsgKHIrZCkgKyBcIixcIiArIGQgKyBcIiBBIFwiICsgciArIFwiLFwiICsgciArIFwiIDAgXCIgKyBiaWcgKyBcIiAxIFwiICsgeDIgKyBcIixcIiArIHkyO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAoIHRoaXMudmFsdWUgLSB0aGlzLm1pbiApIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKTtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbG9yIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG5cdCAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG5cdCAgICB0aGlzLmN0eXBlID0gby5jdHlwZSB8fCAnaGV4JztcclxuXHJcblx0ICAgIHRoaXMud2ZpeGUgPSAyNTY7XHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblx0ICAgIGlmKG8uY3cgIT0gdW5kZWZpbmVkICkgdGhpcy5jdyA9IG8uY3c7XHJcblxyXG5cclxuXHJcblx0ICAgIC8vIGNvbG9yIHVwIG9yIGRvd25cclxuXHQgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuXHQgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuXHQgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5kZWNhbCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLnBwID0gbmV3IFYyKCk7XHJcblxyXG5cdCAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHQgICAvLyB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsnICsgJ2JvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7JyApXHJcblxyXG5cdCAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIGAke3RoaXMuY3NzLnR4dH0gJHt0aGlzLmNzcy5taWRkbGV9IHRvcDoxcHg7IGhlaWdodDoke3RoaXMuaC0yfXB4OyBib3JkZXItcmFkaXVzOiR7dGhpcy5yYWRpdXN9cHg7IHRleHQtc2hhZG93Om5vbmU7IGJvcmRlcjoke2NjLmJvcmRlclNpemV9cHggc29saWQgJHtjYy5ib3JkZXJ9O2AgKVxyXG5cdCAgICAvL3RoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0ICAgIC8vdGhpcy5zWzJdLnRleHRTaGFkb3cgPSAnbm9uZSdcclxuXHJcblx0ICAgIC8qaWYoIHRoaXMudXAgKXtcclxuXHQgICAgICAgIHRoaXMuc1syXS50b3AgPSAnYXV0byc7XHJcblx0ICAgICAgICB0aGlzLnNbMl0uYm90dG9tID0gJzJweCc7XHJcblx0ICAgIH0qL1xyXG5cclxuXHQgICAgLy90aGlzLmNbMF0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0ICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuXHQgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRDb2xvclJpbmcoKVxyXG5cdCAgICB0aGlzLmNbM10uc3R5bGUudmlzaWJpbGl0eSAgPSAnaGlkZGVuJ1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBudWxsXHJcblx0ICAgIHRoaXMudmFsdWUgPSAnI2ZmZmZmZidcclxuXHQgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG5cdCAgICAgICAgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggby52YWx1ZSApXHJcblx0ICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblx0ICAgIH1cclxuXHJcblx0ICAgIHRoaXMuYmNvbG9yID0gbnVsbFxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcblx0ICAgIHRoaXMuZmlzdERvd24gPSBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy5ub3RleHQgPSBvLm5vdGV4dCB8fCBmYWxzZVxyXG5cclxuXHQgICAgdGhpcy50ciA9IDk4XHJcblx0ICAgIHRoaXMudHNsID0gTWF0aC5zcXJ0KDMpICogdGhpcy50clxyXG5cclxuXHQgICAgdGhpcy5odWUgPSAwXHJcblx0ICAgIHRoaXMuZCA9IDI1NlxyXG5cclxuXHQgICAgdGhpcy5pbml0KClcclxuXHJcblx0ICAgIHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG5cclxuXHQgICAgaWYoIG8ub3BlbiAhPT0gdW5kZWZpbmVkICkgdGhpcy5vcGVuKClcclxuXHJcblx0fVxyXG5cclxuXHR0ZXN0Wm9uZSAoIG14LCBteSApIHtcclxuXHJcblx0XHRsZXQgbCA9IHRoaXMubG9jYWxcclxuXHRcdGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcblx0XHRpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG5cclxuXHRcdFx0aWYoIGwueSA+IHRoaXMud2ZpeGUgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdFx0ICAgIGVsc2UgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0aWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnXHJcblx0ICAgIFx0ZWxzZSBpZiggdGhpcy5pc09wZW4gKSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH1cclxuXHJcbiAgICB9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdG1vdXNldXAgKCBlICkge1xyXG5cclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHQgICAgdGhpcy5kID0gMjU2O1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG5cclxuXHRcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblxyXG5cdFx0Ly9pZiggIW5hbWUgKSByZXR1cm47XHJcblx0XHRpZihuYW1lID09PSAndGl0bGUnKXtcclxuXHRcdFx0aWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpO1xyXG5cdCAgICAgICAgZWxzZSB0aGlzLmNsb3NlKCk7XHJcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0aWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0XHRcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5maXN0RG93biA9IHRydWVcclxuXHRcdFx0dGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG5cdCAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cdCAgICBsZXQgb2ZmLCBkLCBodWUsIHNhdCwgbHVtLCByYWQsIHgsIHksIHJyLCBUID0gVG9vbHM7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG5cdCAgICBpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHQgICAgXHRvZmYgPSB0aGlzLm9mZnNldDtcclxuXHRcdCAgICBvZmYueCA9IGUuY2xpZW50WCAtICggdGhpcy56b25lLnggKyB0aGlzLmRlY2FsLnggKyB0aGlzLm1pZCApO1xyXG5cdFx0ICAgIG9mZi55ID0gZS5jbGllbnRZIC0gKCB0aGlzLnpvbmUueSArIHRoaXMuZGVjYWwueSArIHRoaXMubWlkICkgLSB0aGlzLnl0b3A7XHJcblx0XHRcdGQgPSBvZmYubGVuZ3RoKCkgKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRyciA9IG9mZi5hbmdsZSgpO1xyXG5cdFx0XHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHJcblx0ICAgIFx0aWYgKCBkIDwgMTI4ICkgdGhpcy5jdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG5cdCAgICBcdGVsc2UgaWYoICF0aGlzLmlzRG93biApIHRoaXMuY3Vyc29yKClcclxuXHJcblx0ICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcblxyXG5cdFx0XHQgICAgaWYoIHRoaXMuZmlzdERvd24gKXtcclxuXHRcdFx0ICAgIFx0dGhpcy5kID0gZDtcclxuXHRcdFx0ICAgIFx0dGhpcy5maXN0RG93biA9IGZhbHNlO1xyXG5cdFx0XHQgICAgfVxyXG5cclxuXHRcdFx0ICAgIGlmICggdGhpcy5kIDwgMTI4ICkge1xyXG5cclxuXHRcdFx0XHQgICAgaWYgKCB0aGlzLmQgPiB0aGlzLnRyICkgeyAvLyBvdXRzaWRlIGh1ZVxyXG5cclxuXHRcdFx0XHQgICAgICAgIGh1ZSA9ICggcnIgKyBULnBpOTAgKSAvIFQuVHdvUEk7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLmh1ZSA9IChodWUgKyAxKSAlIDE7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbKGh1ZSArIDEpICUgMSwgdGhpcy5oc2xbMV0sIHRoaXMuaHNsWzJdXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9IGVsc2UgeyAvLyB0cmlhbmdsZVxyXG5cclxuXHRcdFx0XHQgICAgXHR4ID0gb2ZmLnggKiB0aGlzLnJhdGlvO1xyXG5cdFx0XHRcdCAgICBcdHkgPSBvZmYueSAqIHRoaXMucmF0aW87XHJcblxyXG5cdFx0XHRcdCAgICBcdGxldCByciA9ICh0aGlzLmh1ZSAqIFQuVHdvUEkpICsgVC5QSTtcclxuXHRcdFx0XHQgICAgXHRpZihyciA8IDApIHJyICs9IDIgKiBULlBJO1xyXG5cclxuXHRcdFx0XHQgICAgXHRyYWQgPSBNYXRoLmF0YW4yKC15LCB4KTtcclxuXHRcdFx0XHQgICAgXHRpZihyYWQgPCAwKSByYWQgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICBcdGxldCByYWQwID0gKCByYWQgKyBULnBpOTAgKyBULlR3b1BJICsgcnIgKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHQgICAgXHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCksXHJcblx0XHRcdFx0ICAgIFx0YSAgICA9IDAuNSAqIHRoaXMudHIsXHJcblx0XHRcdFx0ICAgIFx0YiAgICA9IE1hdGgudGFuKHJhZDEpICogYSxcclxuXHRcdFx0XHQgICAgXHRyICAgID0gTWF0aC5zcXJ0KHgqeCArIHkqeSksXHJcblx0XHRcdFx0ICAgIFx0bWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cclxuXHRcdFx0XHQgICAgXHRpZiggciA+IG1heFIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGR4ID0gTWF0aC50YW4ocmFkMSkgKiByO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByYWQyID0gTWF0aC5hdGFuKGR4IC8gbWF4Uik7XHJcblx0XHRcdFx0XHRcdFx0aWYocmFkMiA+IFQucGk2MCkgIHJhZDIgPSBULnBpNjA7XHJcblx0XHRcdFx0XHRcdCAgICBlbHNlIGlmKCByYWQyIDwgLVQucGk2MCApIHJhZDIgPSAtVC5waTYwO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRyYWQgKz0gcmFkMiAtIHJhZDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJhZDAgPSAocmFkICsgVC5waTkwICArIFQuVHdvUEkgKyBycikgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0XHRcdFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApO1xyXG5cdFx0XHRcdFx0XHRcdGIgPSBNYXRoLnRhbihyYWQxKSAqIGE7XHJcblx0XHRcdFx0XHRcdFx0ciA9IG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bHVtID0gKChNYXRoLnNpbihyYWQwKSAqIHIpIC8gdGhpcy50c2wpICsgMC41O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRsZXQgdyA9IDEgLSAoTWF0aC5hYnMobHVtIC0gMC41KSAqIDIpO1xyXG5cdFx0XHRcdFx0XHRzYXQgPSAoKChNYXRoLmNvcyhyYWQwKSAqIHIpICsgKHRoaXMudHIgLyAyKSkgLyAoMS41ICogdGhpcy50cikpIC8gdztcclxuXHRcdFx0XHRcdFx0c2F0ID0gVC5jbGFtcCggc2F0LCAwLCAxICk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woW3RoaXMuaHNsWzBdLCBzYXQsIGx1bV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c2V0SGVpZ2h0ICgpIHtcclxuXHJcblx0XHR0aGlzLmggPSB0aGlzLmlzT3BlbiA/IHRoaXMud2ZpeGUgKyB0aGlzLmJhc2VIICsgNSA6IHRoaXMuYmFzZUhcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaFxyXG5cclxuXHR9XHJcblxyXG5cdHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG5cdFx0aWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcblx0ICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdG9wZW4gKCkge1xyXG5cclxuXHRcdHN1cGVyLm9wZW4oKTtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgLT0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdGNsb3NlICgpIHtcclxuXHJcblx0XHRzdXBlci5jbG9zZSgpO1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy53Zml4ZSArIDU7XHJcblxyXG5cdFx0bGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSAgPSAnaGlkZGVuJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdub25lJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG5cdH1cclxuXHJcblx0dXBkYXRlICggdXAgKSB7XHJcblxyXG5cdCAgICBsZXQgY2MgPSBUb29scy5yZ2JUb0hleCggVG9vbHMuaHNsVG9SZ2IoWyB0aGlzLmhzbFswXSwgMSwgMC41IF0pICk7XHJcblxyXG5cdCAgICB0aGlzLm1vdmVNYXJrZXJzKCk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnZhbHVlID0gdGhpcy5iY29sb3I7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLCAyLCAwICk7XHJcblxyXG5cdCAgICB0aGlzLnNbMl0uYmFja2dyb3VuZCA9IHRoaXMuYmNvbG9yO1xyXG5cdCAgICBpZighdGhpcy5ub3RleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IFRvb2xzLmh0bWxUb0hleCggdGhpcy5iY29sb3IgKTtcclxuXHJcblx0ICAgIHRoaXMuaW52ZXJ0ID0gVG9vbHMuZmluZERlZXBJbnZlciggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy5zWzJdLmNvbG9yID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblxyXG5cdCAgICBpZighdXApIHJldHVybjtcclxuXHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnYXJyYXknICkgdGhpcy5zZW5kKCB0aGlzLnJnYiApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ3JnYicgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxSZ2IoIHRoaXMucmdiICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdoZXgnICkgdGhpcy5zZW5kKCBUb29scy5odG1sVG9IZXgoIHRoaXMudmFsdWUgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2h0bWwnICkgdGhpcy5zZW5kKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKCB2ICl7XHJcblxyXG5cdFx0aWYoIHYgaW5zdGFuY2VvZiBBcnJheSApIHRoaXMudmFsdWUgPSBUb29scy5yZ2JUb0hleCggdiApO1xyXG4gICAgICAgIGVsc2UgaWYoIWlzTmFOKHYpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCB2ICk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuXHJcblx0XHR0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldENvbG9yICggY29sb3IgKSB7XHJcblxyXG5cdCAgICBsZXQgdW5wYWNrID0gVG9vbHMudW5wYWNrKGNvbG9yKTtcclxuXHQgICAgaWYgKHRoaXMuYmNvbG9yICE9PSBjb2xvciAmJiB1bnBhY2spIHtcclxuXHJcblx0ICAgICAgICB0aGlzLmJjb2xvciA9IGNvbG9yXHJcblx0ICAgICAgICB0aGlzLnJnYiA9IHVucGFja1xyXG5cdCAgICAgICAgdGhpcy5oc2wgPSBUb29scy5yZ2JUb0hzbCggdGhpcy5yZ2IgKVxyXG5cclxuXHQgICAgICAgIHRoaXMuaHVlID0gdGhpcy5oc2xbMF07XHJcblxyXG5cdCAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHQgICAgfVxyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRzZXRIU0wgKCBoc2wgKSB7XHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IGhzbDtcclxuXHQgICAgdGhpcy5yZ2IgPSBUb29scy5oc2xUb1JnYiggaHNsICk7XHJcblx0ICAgIHRoaXMuYmNvbG9yID0gVG9vbHMucmdiVG9IZXgoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG1vdmVNYXJrZXJzICgpIHtcclxuXHJcblx0XHRsZXQgcCA9IHRoaXMucHBcclxuXHRcdGxldCBUID0gVG9vbHNcclxuXHJcblx0ICAgIGxldCBjMSA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cdCAgICBsZXQgYSA9IHRoaXMuaHNsWzBdICogVC5Ud29QSTtcclxuXHQgICAgbGV0IHRoaXJkID0gKDIvMykgKiBULlBJO1xyXG5cdCAgICBsZXQgciA9IHRoaXMudHI7XHJcblx0ICAgIGxldCBoID0gdGhpcy5oc2xbMF07XHJcblx0ICAgIGxldCBzID0gdGhpcy5oc2xbMV07XHJcblx0ICAgIGxldCBsID0gdGhpcy5oc2xbMl07XHJcblxyXG5cdCAgICBsZXQgYW5nbGUgPSAoIGEgLSBULnBpOTAgKSAqIFQudG9kZWc7XHJcblxyXG5cdCAgICBoID0gLSBhICsgVC5waTkwO1xyXG5cclxuXHRcdGxldCBoeCA9IE1hdGguY29zKGgpICogcjtcclxuXHRcdGxldCBoeSA9IC1NYXRoLnNpbihoKSAqIHI7XHJcblx0XHRsZXQgc3ggPSBNYXRoLmNvcyhoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCBzeSA9IC1NYXRoLnNpbihoIC0gdGhpcmQpICogcjtcclxuXHRcdGxldCB2eCA9IE1hdGguY29zKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ5ID0gLU1hdGguc2luKGggKyB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IG14ID0gKHN4ICsgdngpIC8gMiwgbXkgPSAoc3kgKyB2eSkgLyAyO1xyXG5cdFx0YSAgPSAoMSAtIDIgKiBNYXRoLmFicyhsIC0gLjUpKSAqIHM7XHJcblx0XHRsZXQgeCA9IHN4ICsgKHZ4IC0gc3gpICogbCArIChoeCAtIG14KSAqIGE7XHJcblx0XHRsZXQgeSA9IHN5ICsgKHZ5IC0gc3kpICogbCArIChoeSAtIG15KSAqIGE7XHJcblxyXG5cdCAgICBwLnNldCggeCwgeSApLmFkZFNjYWxhcigxMjgpO1xyXG5cclxuXHQgICAgLy9sZXQgZmYgPSAoMS1sKSoyNTU7XHJcblx0ICAgIC8vIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKCcrZmYrJywnK2ZmKycsJytmZisnKScsIDMgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd0cmFuc2Zvcm0nLCAncm90YXRlKCcrYW5nbGUrJyApJywgMiApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgcC54LCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHAueSwgMyApO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAyLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsdGhpcy5iY29sb3IsIDMgKTtcclxuXHJcblx0fVxyXG5cclxuXHRyU2l6ZSAoKSB7XHJcblxyXG5cdCAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblx0ICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG5cdCAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcblx0ICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHQgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2IpXHJcblxyXG5cdCAgICB0aGlzLmN3ID0gdGhpcy5zYiA+IDI1NiA/IDI1NiA6IHRoaXMuc2I7XHJcblxyXG5cclxuXHJcblx0ICAgIHRoaXMuclNpemVDb2xvciggdGhpcy5jdyApO1xyXG5cclxuXHQgICAgdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICAvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIFxyXG5cdH1cclxuXHJcblx0clNpemVDb2xvciAoIHcgKSB7XHJcblxyXG5cclxuXHRcdGlmKCB3ID09PSB0aGlzLndmaXhlICkgcmV0dXJuO1xyXG5cclxuXHJcblxyXG5cdFx0dGhpcy53Zml4ZSA9IHc7XHJcblxyXG5cclxuXHJcblx0XHRsZXQgcyA9IHRoaXMucztcclxuXHJcblx0XHQvL3RoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgdGhpcy5kZWNhbC55ID0gdGhpcy5zaWRlID09PSAndXAnID8gMiA6IHRoaXMuYmFzZUggKyAyXHJcblx0ICAgIHRoaXMubWlkID0gTWF0aC5mbG9vciggdGhpcy53Zml4ZSAqIDAuNSApXHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJysgdGhpcy53Zml4ZSArICcgJysgdGhpcy53Zml4ZSApXHJcblx0ICAgIHNbM10ud2lkdGggPSB0aGlzLndmaXhlICsgJ3B4J1xyXG5cdCAgICBzWzNdLmhlaWdodCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcbiAgICBcdC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgc1szXS50b3AgPSB0aGlzLmRlY2FsLnkgKyAncHgnXHJcblxyXG5cdCAgICB0aGlzLnJhdGlvID0gMjU2IC8gdGhpcy53Zml4ZVxyXG5cdCAgICB0aGlzLnNxdWFyZSA9IDEgLyAoNjAqKHRoaXMud2ZpeGUvMjU2KSlcclxuXHQgICAgdGhpcy5zZXRIZWlnaHQoKVxyXG5cclxuXHR9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRnBzIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91bmQgPSBNYXRoLnJvdW5kO1xyXG5cclxuICAgICAgICAvL3RoaXMuYXV0b0hlaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5ocGx1cyA9IG8uaHBsdXMgfHwgNTA7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gby5yZXMgfHwgNDA7XHJcbiAgICAgICAgdGhpcy5sID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAwO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbSA9IG8uY3VzdG9tIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmFtZXMgPSBvLm5hbWVzIHx8IFsnRlBTJywgJ01TJ107XHJcbiAgICAgICAgbGV0IGNjID0gby5jYyB8fCBbJzIyMCwyMjAsMjIwJywgJzI1NSwyNTUsMCddO1xyXG5cclxuICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMTAwLCAxMDAgXTtcclxuICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRpbmcgPSBvLmFkZGluZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IG8ucmFuZ2UgfHwgWyAxNjUsIDEwMCwgMTAwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBvLmFscGhhIHx8IDAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHREaXNwbGF5ID0gW107XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmN1c3RvbSl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdyA9IFJvb3RzLmdldFRpbWUoKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7Ly90aGlzLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSAwOy8vdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tbSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTWVtID0gKCBzZWxmLnBlcmZvcm1hbmNlICYmIHNlbGYucGVyZm9ybWFuY2UubWVtb3J5ICkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgIC8vIHRoaXMuZGl2aWQgPSBbIDEwMCwgMjAwLCAxIF07XHJcbiAgICAgICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNNZW0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2goJ01FTScpO1xyXG4gICAgICAgICAgICAgICAgY2MucHVzaCgnMCwyNTUsMjU1Jyk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnR4dCA9IG8ubmFtZSB8fCAnRnBzJ1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgY29uc3QgY2NjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0O1xyXG4gICAgICAgIC8vdGhpcy5jWzFdLmlubmVySFRNTCA9ICcmIzE2MDsnICsgdGhpcy50eHRcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICBsZXQgcGFuZWxDc3MgPSAnZGlzcGxheTpub25lOyBsZWZ0OjEwcHg7IHRvcDonKyB0aGlzLmggKyAncHg7IGhlaWdodDonKyh0aGlzLmhwbHVzIC0gOCkrJ3B4OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsgYm9yZGVyOjFweCBzb2xpZCAnKyBjY2MuYm9yZGVyICsnOyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApIHBhbmVsQ3NzICs9ICdib3JkZXItcmFkaXVzOicgKyB0aGlzLnJhZGl1cysncHg7JzsgXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgcGFuZWxDc3MgLCB7fSApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnK3RoaXMucmVzKycgNTAnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnICk7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgyNTUsMjU1LDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonI0ZGMCcsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAvL3RoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgwLDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTonIzBGRicsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBhcnJvd1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2NjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG4gICAgICAgIC8vdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyBsZWZ0OjRweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuYXJyb3csIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICAvLyByZXN1bHQgdGVzdFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjEwcHg7IHRvcDonKyh0aGlzLmgrMikgKydweDsgZGlzcGxheTpub25lOyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsnICk7XHJcblxyXG4gICAgICAgIC8vIGJvdHRvbSBsaW5lXHJcbiAgICAgICAgaWYoIG8uYm90dG9tTGluZSApIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm90dG9tOjBweDsgaGVpZ2h0OjFweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOycpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICAvL3NbMV0ubWFyZ2luTGVmdCA9ICcxMHB4JztcclxuICAgICAgICBzWzFdLmxpbmVIZWlnaHQgPSB0aGlzLmgtNDtcclxuICAgICAgICBzWzFdLmNvbG9yID0gY2NjLnRleHQ7XHJcbiAgICAgICAgLy9zWzFdLnBhZGRpbmdMZWZ0ID0gJzE4cHgnO1xyXG4gICAgICAgIC8vc1sxXS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSAgc1swXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnO1xyXG4gICAgICAgIGlmKCB0aGlzLmNvbG9ycy5nYm9yZGVyIT09J25vbmUnKSBzWzBdLmJvcmRlciA9ICcxcHggc29saWQgJyArIGNjYy5nYm9yZGVyO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcblxyXG4gICAgICAgIGZvciggaj0wOyBqPHRoaXMubmFtZXMubGVuZ3RoOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBiYXNlID0gW107XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5yZXMrMTtcclxuICAgICAgICAgICAgd2hpbGUoIGktLSApIGJhc2UucHVzaCg1MCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlW2pdID0gKCAxIC8gdGhpcy5yYW5nZVtqXSApICogNDk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBiYXNlICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7XHJcbiAgICAgICAgICAgLy8gIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsMC41KScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dERpc3BsYXkucHVzaCggXCI8c3BhbiBzdHlsZT0nY29sb3I6cmdiKFwiK2NjW2pdK1wiKSc+IFwiICsgdGhpcy5uYW1lc1tqXSArXCIgXCIpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogPSB0aGlzLm5hbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLCcrdGhpcy5hbHBoYSsnKScsICdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZToncmdiYSgnK2NjW2pdKycsMSknLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5zaG93KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTaG93ICkgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKm1vZGU6IGZ1bmN0aW9uICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gJyNGRkYnO1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNUO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1RET1dOO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSwqL1xyXG5cclxuICAgIHRpY2sgKCB2ICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHY7XHJcbiAgICAgICAgaWYoICF0aGlzLmlzU2hvdyApIHJldHVybjtcclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICggcG9pbnQgKSB7XHJcblxyXG4gICAgICAgIGxldCBwID0gJyc7XHJcbiAgICAgICAgcCArPSAnTSAnICsgKC0xKSArICcgJyArIDUwO1xyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMucmVzICsgMTsgaSArKyApIHsgcCArPSAnIEwgJyArIGkgKyAnICcgKyBwb2ludFtpXTsgfVxyXG4gICAgICAgIHAgKz0gJyBMICcgKyAodGhpcy5yZXMgKyAxKSArICcgJyArIDUwO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cFRleHQgKCB2YWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB2ID0gdmFsIHx8IHRoaXMudmFsdWVzLCB0ID0gJyc7XHJcbiAgICAgICAgZm9yKCBsZXQgaj0wLCBsbmcgPXRoaXMubmFtZXMubGVuZ3RoOyBqPGxuZzsgaisrICkgdCArPSB0aGlzLnRleHREaXNwbGF5W2pdICsgKHZbal0pLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSB0O1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0dyYXBoICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuY1syXTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMubmFtZXMubGVuZ3RoLCB2LCBvbGQgPSAwLCBuID0gMDtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5hZGRpbmcgKSB2ID0gKHRoaXMudmFsdWVzW25dK29sZCkgKiB0aGlzLnJhbmdlW25dO1xyXG4gICAgICAgICAgICBlbHNlICB2ID0gKHRoaXMudmFsdWVzW25dICogdGhpcy5yYW5nZVtuXSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzW25dLnB1c2goIDUwIC0gdiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2Zyggc3ZnLCAnZCcsIHRoaXMubWFrZVBhdGgoIHRoaXMucG9pbnRzW25dICksIGkrMSApO1xyXG4gICAgICAgICAgICBvbGQgKz0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuaHBsdXMgKyB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIHRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHRoaXMuaHBsdXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7IFxyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5hZGRMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggLXRoaXMuaHBsdXMgKTt9XHJcbiAgICAgICAgZWxzZSBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIC10aGlzLmhwbHVzICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMucmVtb3ZlTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1s0XS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vLy8gQVVUTyBGUFMgLy8vLy8vXHJcblxyXG4gICAgYmVnaW4gKCkge1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5kICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIHRoaXMubXMgPSB0aW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzICsrO1xyXG5cclxuICAgICAgICBpZiAoIHRpbWUgPiB0aGlzLnByZXZUaW1lICsgMTAwMCApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gdGhpcy5yb3VuZCggKCB0aGlzLmZyYW1lcyAqIDEwMDAgKSAvICggdGltZSAtIHRoaXMucHJldlRpbWUgKSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5pc01lbSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemUgPSBwZXJmb3JtYW5jZS5tZW1vcnkudXNlZEpTSGVhcFNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhcFNpemVMaW1pdCA9IHBlcmZvcm1hbmNlLm1lbW9yeS5qc0hlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW0gPSB0aGlzLnJvdW5kKCBoZWFwU2l6ZSAqIDAuMDAwMDAwOTU0ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1tID0gaGVhcFNpemUgLyBoZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gWyB0aGlzLmZwcywgdGhpcy5tcyAsIHRoaXMubW0gXTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCggWyB0aGlzLmZwcywgdGhpcy5tcywgdGhpcy5tZW0gXSApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuaW5nICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5lbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzBdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IDEwICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBzWzRdLndpZHRoID0gKHctMjApICsgJ3B4JztcclxuICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmFwaCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgIFx0dGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiBbMCwwLDBdO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IG8ucHJlY2lzaW9uIDogMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuICAgICAgICB0aGlzLm5lZyA9IG8ubmVnIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmUgPSBvLmxpbmUgIT09IHVuZGVmaW5lZCA/ICBvLmxpbmUgOiB0cnVlO1xyXG5cclxuICAgICAgICAvL2lmKHRoaXMubmVnKXRoaXMubXVsdGlwbGljYXRvcio9MjtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG9XaWR0aCAhPT0gdW5kZWZpbmVkID8gby5hdXRvV2lkdGggOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IDEyOCArIDEwO1xyXG4gICAgICAgIHRoaXMucmggPSB0aGlzLmggLSAxMDtcclxuICAgICAgICB0aGlzLnRvcCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5hdXRvV2lkdGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jWzFdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5naCA9IHRoaXMucmggLSAyODtcclxuICAgICAgICB0aGlzLmd3ID0gdGhpcy53IC0gMjg7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdGV4dC1hbGlnbjoganVzdGlmeTsgY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGNvbHVtID0gJ2NvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IGNvbHVtbjonK3RoaXMubG5nKyc7IGJyZWFrLWluc2lkZTogY29sdW1uOyB0b3A6J1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2Rpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjBweCAwcHg7IHRvcDonKyh0aGlzLmgtMjApKydweDsgbGVmdDoxNHB4OyB3aWR0aDonK3RoaXMuZ3crJ3B4OyAgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgICAgXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmRvbSggJ3N2ZycsIHRoaXMuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt0aGlzLncrJyAnK3RoaXMucmgsIHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggc3ZnLCB7IHdpZHRoOnRoaXMudywgaGVpZ2h0OnRoaXMucmgsIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6dGhpcy5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J2J1dHQnIH0sIHN2ZyApO1xyXG4gICAgICAgIHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOnRoaXMuZ3crOCwgaGVpZ2h0OnRoaXMuZ2grOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxICwgZmlsbDonbm9uZSd9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdyA9ICgodGhpcy5ndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZyk7XHJcbiAgICAgICAgbGV0IHQgPSBbXTtcclxuICAgICAgICB0aGlzLmNNb2RlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMudiA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgXHR0W2ldID0gWyAxNCArIChpKnRoaXMuaXcpICsgKGkqNCksIHRoaXMuaXcgXTtcclxuICAgICAgICBcdHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXTtcclxuICAgICAgICBcdHRoaXMuY01vZGVbaV0gPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52W2ldID0gKCgxKyh0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSkqMC41KTtcclxuICAgICAgICBcdGVsc2UgdGhpcy52W2ldID0gdGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuXHJcbiAgICAgICAgXHR0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OnRbaV1bMF0sIHk6MTQsIHdpZHRoOnRbaV1bMV0sIGhlaWdodDoxLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsICdmaWxsLW9wYWNpdHknOjAuMyB9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHQ7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gc3ZnO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudylcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUudG9wID0gMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmhlaWdodCA9IDIwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0ubGluZUhlaWdodCA9ICgyMC01KSsncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggZmFsc2UgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZykgdGhpcy52W2ldID0gKDEgKyB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikgKiAwLjU7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52W2ldID0gdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlVG9IdG1sKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCBuPTAsIHIgPSAnPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtcIj48dHI+J1xyXG4gICAgICAgIGxldCB3ID0gMTAwIC8gdGhpcy5sbmdcclxuICAgICAgICBsZXQgc3R5bGUgPSAnd2lkdGg6JysgdyArJyU7Jy8vJyB0ZXh0LWFsaWduOmNlbnRlcjsnXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYobj09PXRoaXMubG5nLTEpIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD48L3RyPjwvdGFibGU+J1xyXG4gICAgICAgICAgICBlbHNlIHIgKz0gJzx0ZCBzdHlsZT0nK3N0eWxlKyc+JyArIHRoaXMudmFsdWVbbl0gKyAnPC90ZD4nXHJcbiAgICAgICAgICAgIG4rK1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gclxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpbmUgKSB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMCApO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdoZWlnaHQnLCB0aGlzLnZbaV0qdGhpcy5naCwgaSsyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5JywgMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKSwgaSsyICk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudmFsdWVbaV0gPSAoICgodGhpcy52W2ldKjIpLTEpICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZVtpXSA9ICggKHRoaXMudltpXSAqIHRoaXMubXVsdGlwbGljYXRvcikgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wO1xyXG4gICAgICAgIFxyXG5cdCAgICBpZiggbC55PnRoaXMudG9wICYmIGwueTx0aGlzLmgtMjAgKXtcclxuXHQgICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHQgICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIG5hbWUgKSB7XHJcblxyXG4gICAgXHRpZiggbiA9PT0gdGhpcy5jTW9kZVtuYW1lXSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBhO1xyXG5cclxuICAgICAgICBzd2l0Y2gobil7XHJcbiAgICAgICAgICAgIGNhc2UgMDogYT0wLjM7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IGE9MC42OyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiBhPTE7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgYSwgbmFtZSArIDIgKTtcclxuICAgICAgICB0aGlzLmNNb2RlW25hbWVdID0gbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jTW9kZVtpXSAhPT0gMCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbC1vcGFjaXR5JywgMC4zLCBpICsgMiApO1xyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSByZXR1cm4gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgXHR0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgXHRsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgXHRpZiggbmFtZSA9PT0gJycgKXtcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICB9IGVsc2UgeyBcclxuXHJcbiAgICAgICAgICAgIG51cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAyIDogMSwgbmFtZSApO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNEb3duKXtcclxuICAgICAgICAgICAgXHR0aGlzLnZbbmFtZV0gPSB0aGlzLmNsYW1wKCAxIC0gKCggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgLSAxMCApIC8gdGhpcy5naCkgLCAwLCAxICk7XHJcbiAgICAgICAgICAgIFx0dGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICBcdHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgXHRsZXQgcCA9IFwiXCIsIGgsIHcsIHduLCB3bSwgb3csIG9oXHJcbiAgICBcdC8vbGV0IGcgPSB0aGlzLml3KjAuNVxyXG5cclxuICAgIFx0Zm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgXHRcdGggPSAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpXHJcbiAgICBcdFx0dyA9ICgxNCArIChpKnRoaXMuaXcpICsgKGkqNCkpXHJcblxyXG4gICAgXHRcdHdtID0gdyArIHRoaXMuaXcqMC41XHJcbiAgICBcdFx0d24gPSB3ICsgdGhpcy5pd1xyXG5cclxuICAgIFx0XHRpZiggaSA9PT0gMCApIHArPSdNICcrdysnICcrIGggKyAnIFQgJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRlbHNlIHAgKz0gJyBDICcgKyBvdyArJyAnKyBvaCArICcsJyArIHcgKycgJysgaCArICcsJyArIHdtICsnICcrIGhcclxuICAgIFx0XHRpZiggaSA9PT0gdGhpcy5sbmctMSApIHArPScgVCAnICsgd24gKycgJysgaFxyXG5cclxuICAgIFx0XHRvdyA9IHduXHJcbiAgICBcdFx0b2ggPSBoIFxyXG5cclxuICAgIFx0fVxyXG5cclxuICAgIFx0cmV0dXJuIHBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcblxyXG4gICAgICAgIGxldCBndyA9IHRoaXMudyAtIDI4XHJcbiAgICAgICAgbGV0IGl3ID0gKChndy0oNCoodGhpcy5sbmctMSkpKS90aGlzLmxuZylcclxuICAgICAgICBsZXQgdCA9IFtdXHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSBndyArICdweCdcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0W2ldID0gWyAxNCArIChpKml3KSArIChpKjQpLCBpdyBdXHJcbiAgICAgICAgICAgIHRbaV1bMl0gPSB0W2ldWzBdICsgdFtpXVsxXVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdFxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG5cdCAgICBvLmlzU3BhY2UgPSB0cnVlXHJcbiAgICAgICAgby5tYXJnaW4gPSAwXHJcbiAgICAgICAgaWYoIW8uaCkgby5oID0gMTBcclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuL0VtcHR5LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuQUREID0gby5hZGQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy51aXMgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGxcclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuZGVjYWwgPSBvLmdyb3VwID8gOCA6IDBcclxuICAgICAgICAvL3RoaXMuZGQgPSBvLmdyb3VwID8gby5ncm91cC5kZWNhbCArIDggOiAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmhcclxuXHJcbiAgICAgICAgdGhpcy5zcGFjZVkgPSBuZXcgRW1wdHkoe2g6dGhpcy5tYXJnaW59KTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTNcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLnVzZUZsZXggPSB0cnVlIFxyXG4gICAgICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/ICdkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7JyA6ICcnXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICBvdmVyZmxvdzpoaWRkZW47IHRvcDonKyh0aGlzLmgpKydweCcpXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgbGV0IGJoID0gdGhpcy5tdG9wID09PSAwID8gdGhpcy5tYXJnaW4gOiB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgaGVpZ2h0OicrKGJoKzEpKydweDsgdG9wOicrKCh0aGlzLmgtMSkpKydweDsgYmFja2dyb3VuZDpub25lOycpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHRoaXMuY1sxXS5uYW1lID0gJ2dyb3VwJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCRyggby5iZyApXHJcblxyXG4gICAgICAgIGlmKCBvLm9wZW4gKSB0aGlzLm9wZW4oKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRCRyAoIGJnICkge1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICBpZiggYmcgIT09IHVuZGVmaW5lZCApIGNjLmdyb3VwcyA9IGJnXHJcbiAgICAgICAgaWYoY2MuZ3JvdXBzID09PSAnbm9uZScpIGNjLmdyb3VwcyA9IGNjLmJhY2tncm91bmRcclxuICAgICAgICAgICAgY2MuYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgc1sxXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcbiAgICAgICAgc1syXS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldEJHKCAnbm9uZScgKTtcclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5zZXRCRyggdGhpcy5jb2xvcnMuYmFja2dyb3VuZCApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luICkgbmFtZSA9ICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIG5hbWUgPSAnY29udGVudCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRhcmdldCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPT09IC0xICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLnByb3RvLnMgKXtcclxuICAgICAgICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGhhbmRsZUV2ZW50ICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvdG9DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdjb250ZW50JzpcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICAgICAgICAgIGlmKCBSb290cy5pc01vYmlsZSAmJiB0eXBlID09PSAnbW91c2Vkb3duJyApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnByb3RvICl7IFxyXG4gICAgICAgICAgICAgICAgLy9lLmNsaWVudFkgLT0gdGhpcy5tYXJnaW5cclxuICAgICAgICAgICAgICAgIHByb3RvQ2hhbmdlID0gdGhpcy5wcm90by5oYW5kbGVFdmVudCggZSApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCAhUm9vdHMubG9jayApIHRoaXMuZ2V0TmV4dCggZSwgY2hhbmdlIClcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuaXNPcGVuID8gJ24tcmVzaXplJzoncy1yZXNpemUnICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdtb3VzZWRvd24nICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiggcHJvdG9DaGFuZ2UgKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXROZXh0ICggZSwgY2hhbmdlICkge1xyXG5cclxuICAgICAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQoIHRoaXMudWlzLCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSB0aGlzLmN1cnJlbnQgKXtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IC0xICl7IFxyXG4gICAgICAgICAgICB0aGlzLnByb3RvICA9IHRoaXMudWlzWyB0aGlzLmN1cnJlbnQgXTtcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBcclxuXHJcbiAgICBhZGQoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMV0gPT09ICdvYmplY3QnICl7IFxyXG4gICAgICAgICAgICBhWzFdLmlzVUkgPSB0aGlzLmlzVUlcclxuICAgICAgICAgICAgYVsxXS50YXJnZXQgPSB0aGlzLmNbMl1cclxuICAgICAgICAgICAgYVsxXS5tYWluID0gdGhpcy5tYWluXHJcbiAgICAgICAgICAgIGFbMV0uZ3JvdXAgPSB0aGlzXHJcbiAgICAgICAgfSBlbHNlIGlmKCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJyApe1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKCBhLCB7IGlzVUk6dHJ1ZSwgdGFyZ2V0OnRoaXMuY1syXSwgbWFpbjp0aGlzLm1haW4gfSk7XHJcbiAgICAgICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFbMl0udGFyZ2V0ID0gdGhpcy5jWzJdO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5tYWluID0gdGhpcy5tYWluO1xyXG4gICAgICAgICAgICAgICAgYVsyXS5ncm91cCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB1ID0gdGhpcy5BREQuYXBwbHkoIHRoaXMsIGEgKVxyXG5cclxuICAgICAgICBpZiggdS5pc0dyb3VwICl7IFxyXG4gICAgICAgICAgICAvL28uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICB1LmR4ID0gOFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3UuZHggKz0gNFxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kZWNhbClcclxuICAgICAgICAvL3Uuem9uZS5kIC09IDhcclxuICAgICAgICBSb290cy5mb3JjZVpvbmUgPSB0cnVlXHJcbiAgICAgICAgLy91Lm1hcmdpbiArPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB1Lm1hcmdpbiApXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVab25lID0gdHJ1ZVxyXG5cclxuICAgICAgICAvL1Jvb3RzLnJlc2l6ZSgpXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coUm9vdHMubmVlZFJlc2l6ZSlcclxuXHJcbiAgICAgICAgdGhpcy51aXMucHVzaCggdSApXHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlXHJcblxyXG4gICAgICAgIHJldHVybiB1O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgICByZW1vdmUgKCBuICkge1xyXG5cclxuICAgICAgICBpZiggbi5kaXNwb3NlICkgbi5kaXNwb3NlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFsbCBpbmVyIFxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG5cclxuICAgICAgICB0aGlzLmVtcHR5KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHkgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLCBpdGVtO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnVpcy5wb3AoKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIGl0ZW0uY1swXSApXHJcbiAgICAgICAgICAgIGl0ZW0uY2xlYXIoIHRydWUgKVxyXG5cclxuICAgICAgICAgICAgLy90aGlzLnVpc1tpXS5jbGVhcigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIG9uZSBlbGVtZW50XHJcblxyXG4gICAgY2xlYXJPbmUgKCBuICkgeyBcclxuXHJcbiAgICAgICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZiggbiApO1xyXG5cclxuICAgICAgICBpZiAoIGlkICE9PSAtMSApIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjKCAtICggdGhpcy51aXNbIGlkIF0uaCArIHRoaXMubWFyZ2luICkgKVxyXG4gICAgICAgICAgICB0aGlzLmNbMl0ucmVtb3ZlQ2hpbGQoIHRoaXMudWlzWyBpZCBdLmNbMF0gKVxyXG4gICAgICAgICAgICB0aGlzLnVpcy5zcGxpY2UoIGlkLCAxIClcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLnVpcy5sZW5ndGggPT09IDAgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBvcGVuICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyIClcclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vc1syXS50b3AgPSAodGhpcy5oLTEpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwcy8vJyMwZjAnXHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKXtcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlckxlZnQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyUmlnaHQgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcblxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJUb3AgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyQm90dG9tID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgcmdiYSgwLDAsMCwwKSdcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICAgICAgLy9Sb290cy5pc0xlYXZlID0gdHJ1ZVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpXHJcblxyXG4gICAgICAgIC8vbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcxIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIC8vc1sxXS5oZWlnaHQgPSAodGhpcy5oLTIpICsgJ3B4J1xyXG4gICAgICAgIC8vc1syXS50b3AgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gJ25vbmUnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpIHNbMV0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGNVaXMgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuIHx8IHRoaXMuaXNFbXB0eSApIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuICAgICAgICAvL2Vsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggdGhpcy51aXMsIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICkgKyB0aGlzLmJhc2VIO1xyXG4gICAgICAgIGVsc2UgdGhpcy5oID0gUm9vdHMuY2FsY1VpcyggWy4uLnRoaXMudWlzLCB0aGlzLnNwYWNlWSBdLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCArIHRoaXMubWFyZ2luLCB0cnVlICkgKyB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9KCB0aGlzLmggLSB0aGlzLmJhc2VIICkrICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0IClcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYygpXHJcbiAgICAgICAgZWxzZSB0aGlzLmNhbGNVaXMoKVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgdGhpcy5zWzJdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRTaXplKCB0aGlzLncgKVxyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5yU2l6ZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgdGhpcy53ID0gdGhpcy53IC0gdGhpcy5kZWNhbFxyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAoIHRoaXMuc2EgKyB0aGlzLnNiIC0gNiApICsgJ3B4J1xyXG5cclxuICAgICAgICBzWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1sxXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG4gICAgICAgIHNbMl0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4vKlxyXG4gICAgdWlvdXQoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxvY2sgKSByZXR1cm47XHJcbiAgICAgICAgaWYoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgICAgIC8vaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHJcbiAgICB9XHJcbiovXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpveXN0aWNrIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuam95VHlwZSA9ICdhbmFsb2dpcXVlJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKCk7XHJcbiAgICAgICAgdGhpcy50bXAgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgdGhpcy5oYXZlVGV4dCA9IG8udGV4dCAhPT0gdW5kZWZpbmVkID8gby50ZXh0IDogdHJ1ZSBcclxuXHJcbiAgICAgICAgLy90aGlzLnJhZGl1cyA9IHRoaXMudyAqIDAuNTtcclxuICAgICAgICAvL3RoaXMuZGlzdGFuY2UgPSB0aGlzLnJhZGl1cyowLjI1O1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAodGhpcy5kaWFtKjAuNSkqMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArICh0aGlzLmhhdmVUZXh0ID8gMTAgOiAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLmhhdmVUZXh0ID8gdGhpcy52YWx1ZSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEpveXN0aWNrKCB0aGlzLm1vZGVsICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKTtcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgwKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IDEyOC90aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4pJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAnIzAwMCcsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4xKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAnbm9uZScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vZGVsPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCAndXJsKCNncmFkSW4yKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYmEoMCwwLDAsMCknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdmVyLCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjMpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lTZWxlY3QsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmpveU92ZXIsIDQgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdFxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkSW50ZXJ2YWwgKCl7XHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHJldHVybjtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7IHRoaXMudXBkYXRlKCk7IH0uYmluZCh0aGlzKSwgMTAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcEludGVydmFsICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCA9PT0gbnVsbCApIHJldHVybjtcclxuICAgICAgICBjbGVhckludGVydmFsKCB0aGlzLmludGVydmFsICk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgdGhpcy5tb2RlKCAyICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcC54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy90aGlzLnRtcC55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy50bXAueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICB0aGlzLnRtcC55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnRtcC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgaWYgKCBkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgKSB7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy50bXAueCwgdGhpcy50bXAueSk7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnggPSBNYXRoLnNpbiggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMudG1wLnkgPSBNYXRoLmNvcyggYW5nbGUgKSAqIHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcy5jb3B5KCB0aGlzLnRtcCApLmRpdmlkZVNjYWxhciggdGhpcy5kaXN0YW5jZSApLm5lZ2F0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKHY9PT11bmRlZmluZWQpIHY9WzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggdlswXSB8fCAwLCB2WzFdICB8fCAwICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGlmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLmxlcnAoIG51bGwsIDAuMyApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnggPSBNYXRoLmFicyggdGhpcy5wb3MueCApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueSA9IE1hdGguYWJzKCB0aGlzLnBvcy55ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uaXNDYW52YXMgKSB0aGlzLm1haW4uZHJhdygpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICAvL2xldCB4ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIC8vbGV0IHkgPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnkgKiB0aGlzLmRpc3RhbmNlICk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwgPT09IDApe1xyXG5cclxuICAgICAgICAgICAgbGV0IHN4ID0geCArICgodGhpcy5wb3MueCkqNSkgKyA1O1xyXG4gICAgICAgICAgICBsZXQgc3kgPSB5ICsgKCh0aGlzLnBvcy55KSo1KSArIDEwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4Jywgc3gqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBzeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHkqdGhpcy5yYXRpbywgNCApO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gICggdGhpcy5wb3MueCAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAgKCB0aGlzLnBvcy55ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaGF2ZVRleHQpIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyICgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS25vYiBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMubVBJID0gTWF0aC5QSSAqIDAuODtcclxuICAgICAgICB0aGlzLnRvRGVnID0gMTgwIC8gTWF0aC5QSTtcclxuICAgICAgICB0aGlzLmNpclJhbmdlID0gdGhpcy5tUEkgKiAyO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRLbm9iKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VHcmFkKCksIDMgKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnICsgdGhpcy5kaWFtICsgJyAnICsgdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIFRvb2xzLmRvbSggJ3BhdGgnLCAnJywgeyBkOiAnJywgc3Ryb2tlOmNjLnRleHQsICdzdHJva2Utd2lkdGgnOiAyLCBmaWxsOiAnbm9uZScsICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcgfSwgdGhpcy5jWzNdICk7IC8vNFxyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDIpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBUb29scy5hZGRTVkdHbG93RWZmZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3R5bGUnLCAnZmlsdGVyOiB1cmwoXCIjVUlMR2xvd1wiKTsnLCA0ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICkge1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDI1NSwwLDAsMC4yKScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLnNlbGVjdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCdyZ2JhKDAsMCwwLDAuNiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0T3ZlciwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ2tub2InO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWVcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsXHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAgICAgICAvL29mZi54ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgLy9vZmYueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIG9mZi54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIG9mZi55ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSAtIE1hdGguYXRhbjIoIG9mZi54LCBvZmYueSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICkgdGhpcy5yID0gTWF0aC5hYnModGhpcy5yIC0gdGhpcy5vbGRyKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA+IHRoaXMubVBJID8gdGhpcy5tUEkgOiB0aGlzLnI7XHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yIDwgLXRoaXMubVBJID8gLXRoaXMubVBJIDogdGhpcy5yO1xyXG5cclxuICAgICAgICBsZXQgc3RlcHMgPSAxIC8gdGhpcy5jaXJSYW5nZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSAodGhpcy5yICsgdGhpcy5tUEkpICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gTWF0aC5mbG9vciggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAna25vYicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VHcmFkICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAnJywgc3RlcCwgcmFuZ2UsIGEsIHgsIHksIHgyLCB5MiwgciA9IDY0O1xyXG4gICAgICAgIGxldCBzdGFydGFuZ2xlID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlbmRhbmdsZSA9IE1hdGguUEkgLSB0aGlzLm1QSTtcclxuICAgICAgICAvL2xldCBzdGVwID0gdGhpcy5zdGVwPjUgPyB0aGlzLnN0ZXAgOiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLnN0ZXA+NSl7XHJcbiAgICAgICAgICAgIHJhbmdlID0gIHRoaXMucmFuZ2UgLyB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcmFuZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcCA9ICgoIHN0YXJ0YW5nbGUgLSBlbmRhbmdsZSApIC8gcikqMjtcclxuICAgICAgICAgICAgcmFuZ2UgPSByKjAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8PSByYW5nZTsgKytpICkge1xyXG5cclxuICAgICAgICAgICAgYSA9IHN0YXJ0YW5nbGUgLSAoIHN0ZXAgKiBpICk7XHJcbiAgICAgICAgICAgIHggPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHkgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDIwICk7XHJcbiAgICAgICAgICAgIHgyID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICB5MiA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgZCArPSAnTScgKyB4ICsgJyAnICsgeSArICcgTCcgKyB4MiArICcgJyt5MiArICcgJztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICBsZXQgc2EgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVhID0gKCAoIHRoaXMucGVyY2VudCAqIHRoaXMuY2lyUmFuZ2UgKSAtICggdGhpcy5tUEkgKSApO1xyXG5cclxuICAgICAgICBsZXQgc2luID0gTWF0aC5zaW4oIGVhICk7XHJcbiAgICAgICAgbGV0IGNvcyA9IE1hdGguY29zKCBlYSApO1xyXG5cclxuICAgICAgICBsZXQgeDEgPSAoIDI1ICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTEgPSAtKCAyNSAqIGNvcyApICsgNjQ7XHJcbiAgICAgICAgbGV0IHgyID0gKCAyMCAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkyID0gLSggMjAgKiBjb3MgKSArIDY0O1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArJyAnICsgeTEgKyAnIEwgJyArIHgyICsnICcgKyB5MiwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgeDEgPSAzNiAqIE1hdGguc2luKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MSA9IDM2ICogTWF0aC5jb3MoIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHgyID0gMzYgKiBzaW4gKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkyID0gLTM2ICogY29zICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCBiaWcgPSBlYSA8PSBNYXRoLlBJIC0gdGhpcy5tUEkgPyAwIDogMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKyAnLCcgKyB5MSArICcgQSAnICsgMzYgKyAnLCcgKyAzNiArICcgMSAnICsgYmlnICsgJyAxICcgKyB4MiArICcsJyArIHkyLCA0ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCB0aGlzLmNvbG9ycy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCB0aGlzLmNvbG9ycy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgNCApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gbm90IHdvcmtcclxuICAgICAgICB0aGlzLmhpZGVDdXJyZW50ID0gZmFsc2VcclxuXHJcbiAgICAgICAgLy8gaW1hZ2VzXHJcbiAgICAgICAgdGhpcy5wYXRoID0gby5wYXRoIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gby5mb3JtYXQgfHwgJyc7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaXNXaXRoSW1hZ2UgPSB0aGlzLnBhdGggIT09ICcnID8gdHJ1ZTpmYWxzZTtcclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgdGhpcy50bXBVcmwgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tID0gby5tICE9PSB1bmRlZmluZWQgPyBvLm0gOiA1XHJcblxyXG5cclxuICAgICAgICBsZXQgYWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuXHJcbiAgICAgICAgLy8gc2Nyb2xsIHNpemVcclxuICAgICAgICBsZXQgc3MgPSBvLnNjcm9sbFNpemUgfHwgMTBcclxuICAgICAgICB0aGlzLnNzID0gc3MrMVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gMDtcclxuICAgICAgICB0aGlzLnRNb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0T25seSA9IG8ubGlzdE9ubHkgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnN0YXRpY1RvcCA9IG8uc3RhdGljVG9wIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gdGhpcy5saXN0T25seVxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCAhPT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gby5zZWxlY3RcclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlICE9PSB1bmRlZmluZWQgKSB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZVxyXG5cclxuICAgICAgICBpZiggdGhpcy50eHQgPT09ICcnICkgdGhpcy5wID0gMDtcclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDowOyBkaXNwbGF5Om5vbmU7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnK3RoaXMubSsncHg7IG1hcmdpbi1ib3R0b206MHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsganVzdGlmeS1jb250ZW50OicrYWxpZ24rJzsgdGV4dC1hbGlnbjonK2FsaWduKyc7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjayA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6MHB4OyB3aWR0aDonK3NzKydweDsgYmFja2dyb3VuZDonK2NjLmJhY2srJzsgZGlzcGxheTpub25lOycpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OicrKChzcy0oc3MqMC4yNSkpKjAuNSkrJ3B4OyB3aWR0aDonKyhzcyowLjI1KSsncHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7IGRpc3BsYXk6bm9uZTsgJyk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMucmVmT2JqZWN0ID0gbnVsbFxyXG5cclxuICAgICAgICBpZiggby5saXN0ICl7XHJcbiAgICAgICAgICAgIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gby5saXN0XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby5saXN0IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMubGlzdC5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudG1wSWQgPSAwXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IG8uaXRlbUhlaWdodCB8fCB0aGlzLmgvLyh0aGlzLmgtMyk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGZ1bGwgbGlzdCBcclxuICAgICAgICB0aGlzLmZ1bGwgPSBvLmZ1bGwgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSAwO1xyXG4gICAgICAgIHRoaXMud3cgPSB0aGlzLnNiO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gbGlzdCB1cCBvciBkb3duXHJcbiAgICAgICAgdGhpcy5zaWRlID0gby5zaWRlIHx8ICdkb3duJztcclxuICAgICAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50b3AgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUuYm90dG9tID0gdGhpcy5oLTIgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuYm90dG9tID0gJzFweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3R0b20gPSBmbHRvcCArICdweCc7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOm5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5saXN0SW4ubmFtZSA9ICdsaXN0JztcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMubGlzdEluICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyQmFjayApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlciApO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCFpc05hTihvLnZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgby52YWx1ZSBdO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gby5vcGVuIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VIID0gNTtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1s0XS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCsncHgnXHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5taW5pQ2FudmFzID0gby5taW5pQ2FudmFzIHx8IGZhbHNlIFxyXG4gICAgICAgIHRoaXMuY2FudmFzQmcgPSBvLmNhbnZhc0JnIHx8ICdyZ2JhKDAsMCwwLDApJ1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTaXplID0gby5pbWFnZVNpemUgfHwgWzIwLDIwXTtcclxuXHJcbiAgICAgICAgLy8gZHJhZ291dCBmdW5jdGlvblxyXG4gICAgICAgIHRoaXMuZHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ291dCA9IG8uZHJhZ291dCB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuZHJhZ3N0YXJ0ID0gby5kcmFnc3RhcnQgfHwgbnVsbFxyXG4gICAgICAgIHRoaXMuZHJhZ2VuZCA9IG8uZHJhZ2VuZCB8fCBudWxsXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL3RoaXMuY1swXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNGRjAwMDAnXHJcbiAgICAgICAgLy8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCB0cnVlIClcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCArPSB0aGlzLm10b3BcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1hZ2UgbGlzdFxyXG5cclxuICAgIHByZWxvYWRJbWFnZSAoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxpc3QubGVuZ3RoOyBpKysgKSB0aGlzLnRtcFVybC5wdXNoKCB0aGlzLmxpc3RbaV0gKTtcclxuICAgICAgICB0aGlzLmxvYWRPbmUoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBuZXh0SW1nICgpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jID09PSBudWxsKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50bXBVcmwuc2hpZnQoKTtcclxuICAgICAgICBpZiggdGhpcy50bXBVcmwubGVuZ3RoID09PSAwICl7IFxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZXMoKTtcclxuICAgICAgICAgICAgLyp0aGlzLnNldExpc3QoIHRoaXMubGlzdCApO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbigpOyovXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMubG9hZE9uZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsb2FkT25lKCl7XHJcblxyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50bXBVcmxbMF07XHJcbiAgICAgICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDonK3NlbGYuaW1hZ2VTaXplWzBdKydweDsgaGVpZ2h0Oicrc2VsZi5pbWFnZVNpemVbMV0rJ3B4JztcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhdGggKyBuYW1lICsgdGhpcy5mb3JtYXQgKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzJdID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVszXSA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHNlbGYudG1wSW1hZ2VbbmFtZV0gPSBpbWc7XHJcbiAgICAgICAgICAgIHNlbGYubmV4dEltZygpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCAmJiB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdGhpcy5oIC0gdGhpcy5iYXNlSCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUgrMiApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMuc2Nyb2xsICYmICggbC54ID4gKHRoaXMuc2ErdGhpcy5zYi10aGlzLnNzKSkgKSByZXR1cm4gJ3Njcm9sbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0SXRlbXMgKCB5ICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zXHJcblxyXG4gICAgICAgIC8qaWYodGhpcy5oaWRlQ3VycmVudCl7XHJcbiAgICAgICAgICAgIC8vaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCwgaXRlbSwgYSwgYjtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGEgPSBpdGVtLnBvc3kgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGIgPSBpdGVtLnBvc3kgKyB0aGlzLml0ZW1IZWlnaHQgKyAxICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBpZiggeSA+PSBhICYmIHkgPD0gYiApeyBcclxuICAgICAgICAgICAgICAgIG5hbWUgPSAnaXRlbScgKyBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVJdGVtICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudC5zZWxlY3QgJiYgbW9kZT09PTApIG1vZGUgPSAyXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgwKVxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGxcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1zKClcclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDIpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50LnNlbGVjdCA9IHRydWVcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SXRlbXMoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUFjdGl2ZSgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmhpZGVDdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgLy9pZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXRoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuICAgICAgICB0aGlzLnJlc2V0SGlkZSgpXHJcbiAgICAgICAgLy90aGlzLml0ZW1zW3RoaXMudG1wSWRdLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0SGlkZSgpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKGk9PT10aGlzLnRtcElkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0KydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqKGktMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zW2ldLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDsqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDIpXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgaWYoIHRoaXMuY3VycmVudCApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHRoaXMuY3VycmVudC5pZCBdXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudG1wSWQgPSB0aGlzLmN1cnJlbnQuaWRcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc2VuZCggdGhpcy5yZWZPYmplY3QgIT09IG51bGwgPyB0aGlzLnJlZk9iamVjdFsgdGhpcy5saXN0W3RoaXMuY3VycmVudC5pZF1dIDogdGhpcy52YWx1ZSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKCB0aGlzLnZhbHVlIClcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUb3BJdGVtKClcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gbnVwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG4gICAgICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdzLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMSk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0aGlzLnpvbmUueSt0aGlzLmJhc2VILTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSggKCBlLmNsaWVudFkgLSB0b3AgICkgLSAoIHRoaXMuc2gqMC41ICkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmKHRoaXMuaXNEb3duKSB0aGlzLmxpc3Rtb3ZlKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmFtZSAhPT0gdGhpcy5wcmV2TmFtZSApIG51cCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSByZXR1cm4gZmFsc2U7IFxyXG4gICAgICAgIHRoaXMucHkgKz0gZS5kZWx0YSoxMDtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnB5KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0aGlzIGlzIHJlc2V0JylcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlU2Nyb2xsICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMuc01vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zY3JvbGxlci5zdHlsZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgcy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlVGl0bGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy50TW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRNb2RlID0gbW9kZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJMaXN0ICgpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKCB0aGlzLmxpc3RJbi5jaGlsZHJlbi5sZW5ndGggKSB0aGlzLmxpc3RJbi5yZW1vdmVDaGlsZCggdGhpcy5saXN0SW4ubGFzdENoaWxkICk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRMaXN0ICggbGlzdCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmhpZGVDdXJyZW50PyB0aGlzLmxlbmd0aC0xIDogdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gdGhpcy5mdWxsID8gbG5nIDogNTtcclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSBsbmcgPCB0aGlzLm1heEl0ZW0gPyBsbmcgOiB0aGlzLm1heEl0ZW07XHJcblxyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhJdGVtICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLm1heCA9IGxuZyAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIHRoaXMucmF0aW8gPSB0aGlzLm1heEhlaWdodCAvIHRoaXMubWF4O1xyXG4gICAgICAgIHRoaXMuc2ggPSB0aGlzLm1heEhlaWdodCAqIHRoaXMucmF0aW87XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKXsgXHJcbiAgICAgICAgICAgIHRoaXMud3cgPSB0aGlzLnNiIC0gdGhpcy5zcztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eCA9IHRoaXMudG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbSwgbjsvLywgbCA9IHRoaXMuc2I7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSB0aGlzLmxpc3RbaV07XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJysodGhpcy5tKzEpKydweDsgd2lkdGg6Jyt0aGlzLnd3KydweDsgaGVpZ2h0OicrdGhpcy5pdGVtSGVpZ2h0KydweDsgbGluZS1oZWlnaHQ6JysodGhpcy5pdGVtSGVpZ2h0LTIpKydweDsgY29sb3I6Jyt0aGlzLmNvbG9ycy50ZXh0Kyc7IGJhY2tncm91bmQ6Jyt0aGlzLmNvbG9ycy5iYWNrKyc7JyApO1xyXG4gICAgICAgICAgICBpdGVtLm5hbWUgPSAnaXRlbScrIGlcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgaXRlbS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSppO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RJbi5hcHBlbmRDaGlsZCggaXRlbSApO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goIGl0ZW0gKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuID09PSB0aGlzLnZhbHVlICkgdGhpcy5jdXJyZW50ID0gaXRlbVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2Vbbl0gKTtcclxuICAgICAgICAgICAgaWYoICF0aGlzLmlzV2l0aEltYWdlICkgaXRlbS50ZXh0Q29udGVudCA9IG47XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICAgICAgICAgICAgYy5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5tYXJnaW5MZWZ0ID0gKHRoaXMuaW1hZ2VTaXplWzBdKzgpKydweCdcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLypsZXQgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcblxyXG4gICAgICAgICAgICAgICAgYy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICBjLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmNhbnZhc0JnXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOnJlbGF0aXZlOyBwb2ludGVyLWV2ZW50czpub25lOyBkaXNwbGF5OmlubGluZS1ibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6NXB4OyB0b3A6MnB4J1xyXG4gICAgICAgICAgICAgICAvLyBjLnN0eWxlLmNzc1RleHQgPScgZmxleC1zaHJpbms6IDA7J1xyXG5cclxuICAgICAgICAgICAgICAgIGMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmZsZXg7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsnXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUuZmxvYXQgPSAncmlnaHQnXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKCBjIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcEltYWdlW25dID0gY1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuZHJhZ291dCApe1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1nID0gdGhpcy50bXBJbWFnZVtuXVxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGl0ZW0uZHJhZ2dhYmxlID0gXCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuZHJhZ3N0YXJ0IHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMuZHJhZyB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oKXsgUm9vdHMuZmFrZVVwKCk7IH0gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIGVuZCcpKi8gfS5iaW5kKHRoaXMpIClcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oKXtjb25zb2xlLmxvZygnZHJvcCcpfSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdGFibGUgKSB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3SW1hZ2UoIG5hbWUsIGltYWdlLCB4LHksdyxoICl7XHJcblxyXG4gICAgICAgIHRoaXMudG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pO1xyXG4gICAgICAgIHRoaXMudG1wQ3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2VbbmFtZV0uc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcblxyXG4gICAgICAgIC8qbGV0IGMgPSB0aGlzLnRtcEltYWdlW25hbWVdXHJcbiAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgdywgaCwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZEltYWdlcyAoKXtcclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8bG5nOyBpKysgKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVt0aGlzLmxpc3RbaV1dICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIGlmKCFpc05hTih2YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIHZhbHVlIF07XHJcbiAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXBJZCA9IHZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3BJdGVtICgpe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0aWNUb3AgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzV2l0aEltYWdlICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5wcmVMb2FkQ29tcGxldGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF07XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVsyXSwgdGhpcy5pbWFnZVNpemVbM10sIDAsMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uYXBwZW5kQ2hpbGQoIHRoaXMuY2FudmFzIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAgKTtcclxuXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tIExJU1RcclxuXHJcbiAgICB1cGRhdGUgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB5ID0geSA8IDAgPyAwIDogeTtcclxuICAgICAgICB5ID0geSA+IHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlIDogeTtcclxuXHJcbiAgICAgICAgdGhpcy50b3BMaXN0ID0gLU1hdGguZmxvb3IoIHkgLyB0aGlzLnJhdGlvICk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdEluLnN0eWxlLnRvcCA9IHRoaXMudG9wTGlzdCsncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUudG9wID0gTWF0aC5mbG9vciggeSApICArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMucHkgPSB5O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuICAgICAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoIGZpcnN0ICkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCAwIClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJhc2VIICsgNTtcclxuICAgICAgICBpZiggIXRoaXMuc2Nyb2xsICl7XHJcbiAgICAgICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUggKyA1ICsgdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApeyBcclxuICAgICAgICAgICAgdGhpcy56b25lLnkgLT0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICBpZighZmlyc3QpIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoIC10ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tXHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5saXN0SW4uY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB0aGlzLnd3ICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgaWYoc1syXT09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IGQgKydweCc7XHJcblxyXG4gICAgICAgIHNbM10ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSBkICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gZCArIHcgLSAxNSArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMud3cgPSB3O1xyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICkgdGhpcy53dyA9IHctdGhpcy5zcztcclxuICAgICAgICBpZih0aGlzLmlzT3BlbikgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswXVxyXG4gICAgICAgIHRoaXMubXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pbnZtdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmlzU2luZ2xlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuaXNBbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc1ZlY3RvciA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmlzQW5nbGUgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0FuZ2xlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLm11bHR5ID0gVG9vbHMudG9yYWRcclxuICAgICAgICAgICAgdGhpcy5pbnZtdWx0eSA9IFRvb2xzLnRvZGVnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRHJhZyA9IG8uZHJhZyB8fCBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGlmKCAhaXNOYU4oby52YWx1ZSkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbby52YWx1ZV1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IG8udmFsdWUueFxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IG8udmFsdWUueVxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IG8udmFsdWUuelxyXG4gICAgICAgICAgICAgICAgaWYoIG8udmFsdWUudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IG8udmFsdWUud1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NpbmdsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVjdG9yID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gYmdcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyB0b3A6NHB4OyB3aWR0aDowcHg7IGhlaWdodDonICsgKHRoaXMuaC04KSArICdweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0FuZ2xlICkgdGhpcy52YWx1ZVtpXSA9ICh0aGlzLnZhbHVlW2ldICogMTgwIC8gTWF0aC5QSSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JylcclxuICAgICAgICAgICAgaWYoby5jZW50ZXIpIHRoaXMuY1syK2ldLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uaXNOdW0gPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IDMgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmN1cnNvcklkID0gNCArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1sgdGhpcy5jdXJzb3JJZCBdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBpZiggbmFtZSAhPT0gJycgKXsgXHJcbiAgICAgICAgICAgIFx0dGhpcy5jdXJyZW50ID0gbmFtZVxyXG4gICAgICAgICAgICBcdHRoaXMucHJldiA9IHsgeDplLmNsaWVudFgsIHk6ZS5jbGllbnRZLCBkOjAsIHY6IHRoaXMuaXNTaW5nbGUgPyBwYXJzZUZsb2F0KHRoaXMudmFsdWUpIDogcGFyc2VGbG9hdCggdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gKSB9XHJcbiAgICAgICAgICAgIFx0dGhpcy5zZXRJbnB1dCggdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICBsZXQgeCA9IDBcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICcnICkgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgIFx0aWYoIXRoaXMuaXNEcmFnKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRHJhZyApe1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICl7XHJcblxyXG4gICAgICAgICAgICBcdHRoaXMucHJldi5kICs9ICggZS5jbGllbnRYIC0gdGhpcy5wcmV2LnggKSAtICggZS5jbGllbnRZIC0gdGhpcy5wcmV2LnkgKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuID0gdGhpcy5wcmV2LnYgKyAoIHRoaXMucHJldi5kICogdGhpcy5zdGVwKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdID0gdGhpcy5udW1WYWx1ZShuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgdGhpcy5jdXJyZW50IF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW3RoaXMuY3VycmVudF1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueCA9IGUuY2xpZW50WFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnkgPSBlLmNsaWVudFlcclxuXHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlXHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54IC0zXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHggLT0gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXVxyXG4gICAgICAgIFx0cmV0dXJuIHRoaXMudXBJbnB1dCggeCwgdGhpcy5pc0Rvd24gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gdi54XHJcbiAgICAgICAgICAgIGlmKCB2LnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSB2LnlcclxuICAgICAgICAgICAgaWYoIHYueiAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsyXSA9IHYuelxyXG4gICAgICAgICAgICBpZiggdi53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gdi53XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNTaW5nbGUgPyBbdl0gOiB2ICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2FtZVN0ciAoIHN0ciApe1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBzdHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSB0aGlzLm51bVZhbHVlKCB0aGlzLnZhbHVlW2ldICogdGhpcy5pbnZtdWx0eSApXHJcbiAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZW5kICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0uZnJvbUFycmF5KCB2IClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXSA9IHZcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdiwgdGhpcy5vYmplY3RLZXkgKVxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5jdXJyZW50ICE9PSAtMSA/IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF0gKyA1IDogMFxyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAnMXB4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ubGVmdCA9ICggZCArIGMgKSArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLmxlZnQgPSAgKCBkICsgZSApICArICdweCdcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gIHcgICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgaWYoIXMpIHJldHVyblxyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXS5pbm5lckhUTUwgPSAnJ1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5jdXJzb3JJZF0ud2lkdGggPSAwICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBsZXQgYXIgPSBbXVxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgXHRpZighaXNOYU4oIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApKXsgXHJcbiAgICAgICAgICAgICAgICBsZXQgbnggPSB0aGlzLm51bVZhbHVlKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IG54XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gbnhcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm90IG51bWJlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIFx0YXJbaV0gPSB0aGlzLnZhbHVlW2ldICogdGhpcy5tdWx0eVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVyblxyXG4gICAgICAgIHRoaXMuc2VuZCggdGhpcy5pc1NpbmdsZSA/IGFyWzBdIDogYXIgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG4gICAgICAgIGxldCBzeCA9IHRoaXMuY29sb3JzLnN4XHJcbiAgICAgICAgbGV0IHNzID0gc3ggKiAodGhpcy5sbmctMSlcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLnNiLXNzKSAvIHRoaXMubG5nLy8oKCB0aGlzLnNiICsgc3ggKSAvIHRoaXMubG5nICktc3hcclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgLy90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggdGhpcy5zYSArICggdyAqIGkgKSsoIDUgKiBpICkpLCB3IF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCBzeCAqIGkgKSksIHcgXVxyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV1cclxuICAgICAgICAgICAgc1sgMyArIGkgXS5sZWZ0ID0gdGhpcy50bXBbaV1bMF0gKyAncHgnXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZWFzZSh4LCBtaW4sIG1heCwgcG93ZXIpIHtcclxuICBsZXQgbiA9IG1pbiArIE1hdGgucG93KCh4IC0gbWluKSAvIChtYXggLSBtaW4pLCBwb3dlcikgKiAobWF4IC0gbWluKTtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNsaWRlIGV4dGVuZHMgUHJvdG8ge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgc3VwZXIobyk7XHJcblxyXG4gICAgaWYgKG8uZWFzaW5nIDw9IDApIHRocm93IFwiRWFzaW5nIG11c3QgYmUgPiAwXCI7XHJcbiAgICB0aGlzLmVhc2luZyA9IG8uZWFzaW5nIHx8IDE7XHJcblxyXG4gICAgdGhpcy5zZXRUeXBlTnVtYmVyKG8pO1xyXG5cclxuICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICBpZiAoby5tb2RlICE9PSB1bmRlZmluZWQpIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgLy90aGlzLmRlZmF1bHRCb3JkZXJDb2xvciA9IHRoaXMuY29sb3JzLmhpZGU7XHJcblxyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNEZWcgPSBvLmlzRGVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzJdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgICAgXCJib3JkZXI6bm9uZTsgYmFja2dyb3VuZDpub25lOyB3aWR0aDo0N3B4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIFwiIHRvcDowOyBoZWlnaHQ6XCIgKyB0aGlzLmggKyBcInB4O1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrICtcclxuICAgICAgICBcIjsgdG9wOjJweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gNCkgK1xyXG4gICAgICAgIFwicHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwibGVmdDo0cHg7IHRvcDo1cHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDEwKSArXHJcbiAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzJdLmlzTnVtID0gdHJ1ZTtcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9ICh0aGlzLmgtNCkgKyAncHgnO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9ICh0aGlzLmgtOCkgKyAncHgnO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUubGluZUhlaWdodCA9IHRoaXMuaCAtIDEwICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSB7XHJcbiAgICAgIGxldCByMSA9IDQsXHJcbiAgICAgICAgaDEgPSA0LFxyXG4gICAgICAgIGgyID0gOCxcclxuICAgICAgICB3dyA9IHRoaXMuaCAtIDYsXHJcbiAgICAgICAgcmEgPSAxNjtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAyKSB7XHJcbiAgICAgICAgcjEgPSAwO1xyXG4gICAgICAgIGgxID0gMjtcclxuICAgICAgICBoMiA9IDQ7XHJcbiAgICAgICAgcmEgPSAyO1xyXG4gICAgICAgIHd3ID0gKHRoaXMuaCAtIDYpICogMC41O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMykgdGhpcy5jWzVdLnN0eWxlLnZpc2libGUgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmhlaWdodCA9IGgyICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5ib3JkZXJSYWRpdXMgPSByMSAqIDAuNSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmhlaWdodCA9IGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUudG9wID0gdGhpcy5oICogMC41IC0gaDEgKiAwLjUgKyBcInB4XCI7XHJcblxyXG4gICAgICAvL3RoaXMuY1s2XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYm9yZGVyLXJhZGl1czonK3JhKydweDsgbWFyZ2luLWxlZnQ6JysoLXd3KjAuNSkrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgbGVmdDo0cHg7IHRvcDoycHg7IGhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB3aWR0aDonK3d3KydweDsnICk7XHJcbiAgICAgIHRoaXMuY1s2XSA9IHRoaXMuZG9tKFxyXG4gICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzOlwiICtcclxuICAgICAgICAgIHJhICtcclxuICAgICAgICAgIFwicHg7IG1hcmdpbi1sZWZ0OlwiICtcclxuICAgICAgICAgIC13dyAqIDAuNSArXHJcbiAgICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgICAgXCI7IGxlZnQ6NHB4OyB0b3A6M3B4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICAgKHRoaXMuaCAtIDYpICtcclxuICAgICAgICAgIFwicHg7IHdpZHRoOlwiICtcclxuICAgICAgICAgIHd3ICtcclxuICAgICAgICAgIFwicHg7XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIHRlc3Rab25lKGUpIHtcclxuICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgIGlmIChsLnggPT09IC0xICYmIGwueSA9PT0gLTEpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGlmIChsLnggPj0gdGhpcy50eGwpIHJldHVybiBcInRleHRcIjtcclxuICAgIGVsc2UgaWYgKGwueCA+PSB0aGlzLnNhKSByZXR1cm4gXCJzY3JvbGxcIjtcclxuICAgIGVsc2UgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vdXNldXAoZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmUoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyppZiggbmFtZSA9PT0gJ3RleHQnICl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSwgZnVuY3Rpb24oKXsgdGhpcy52YWxpZGF0ZSgpIH0uYmluZCh0aGlzKSApO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5tb2RlKDEpO1xyXG4gICAgICB0aGlzLmN1cnNvcihcInctcmVzaXplXCIpO1xyXG4gICAgICAvL30gZWxzZSBpZihuYW1lID09PSAndGV4dCcpe1xyXG4gICAgICAvL3RoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICBsZXQgbk5vcm1hbGl6ZWQgPSAoZS5jbGllbnRYIC0gKHRoaXMuem9uZS54ICsgdGhpcy5zYSkgLSAzKSAvIHRoaXMud3c7XHJcblxyXG4gICAgICAvLyBsbyBtYXBlbyBhbCByYW5nbyAwIC4uLiAxXHJcbiAgICAgIG5Ob3JtYWxpemVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbk5vcm1hbGl6ZWQpKTtcclxuXHJcbiAgICAgIC8vIGFwbGljbyBlYXNpbmdcclxuICAgICAgbGV0IG5FYXNlZCA9IE1hdGgucG93KG5Ob3JtYWxpemVkLCB0aGlzLmVhc2luZyk7IC8vIGVhc2luZ1xyXG5cclxuICAgICAgbGV0IG5OZXcgPSBuRWFzZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcbiAgICAgIGxldCBuTmV3U2xpZGVyID0gbk5vcm1hbGl6ZWQgKiB0aGlzLnJhbmdlICsgdGhpcy5taW47XHJcblxyXG4gICAgICB0aGlzLnNsaWRlclZhbHVlID0gdGhpcy5udW1WYWx1ZShuTmV3U2xpZGVyKTtcclxuXHJcbiAgICAgIGxldCBkZWx0YSA9IG5OZXcgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgIGxldCBzdGVwcztcclxuICAgICAgaWYgKGRlbHRhID49IHRoaXMuc3RlcCB8fCBkZWx0YSA8PSB0aGlzLnN0ZXApIHtcclxuICAgICAgICBzdGVwcyA9IE1hdGguZmxvb3IoZGVsdGEgLyB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMub2xkICsgc3RlcHMgKiB0aGlzLnN0ZXApO1xyXG4gICAgICAgIC8vIHZhbHVlIHdpdGhvdXQgZWFzaW5nIGFwcGxpZWRcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJuLCBub3JtYWxpemVkLCB2YWx1ZVwiLCBuTmV3LCBuTm9ybWFsaXplZCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIG51cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51cDtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG5cclxuICAgICAgaWYgKHYgPiB0aGlzLm1heCkge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgfSBlbHNlIGlmICh2IDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWUodik7XHJcbiAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvL2tleWRvd246IGZ1bmN0aW9uICggZSApIHsgcmV0dXJuIHRydWU7IH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICBpZiAoIWlzTmFOKG4pKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKG4pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0gZWxzZSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgLy90aGlzLmNsZWFySW5wdXQoKTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGUoMCk7XHJcbiAgfVxyXG5cclxuICBtb2RlKG1vZGUpIHtcclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgIC8vIHNbMl0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHQ7IC8vY2MuYnV0dG9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIHNjcm9sbCBvdmVyXHJcbiAgICAgICAgLy9zWzJdLmJvcmRlciA9ICcxcHggZGFzaGVkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG4gICAgICAgIHNbNV0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgLy9jYy5vdmVyb2ZmO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVwKSB7XHJcbiAgICBsZXQgbm9ybWFsaXplZCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICBsZXQgdW5lYXNlZCA9XHJcbiAgICAgIHRoaXMuZWFzaW5nID09IDEgPyBub3JtYWxpemVkIDogTWF0aC5wb3cobm9ybWFsaXplZCwgMSAvIHRoaXMuZWFzaW5nKTtcclxuXHJcbiAgICBsZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiB1bmVhc2VkKTtcclxuICAgIC8vbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsICE9PSAzKSB0aGlzLnNbNV0ud2lkdGggPSB3dyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLnNbNl0pIHRoaXMuc1s2XS5sZWZ0ID0gdGhpcy5zYSArIHd3ICsgMyArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG5cclxuICAgIGlmICh1cCkgdGhpcy5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnNiIC0gdGhpcy5zYztcclxuICAgIHRoaXMud3cgPSB3IC0gNjtcclxuXHJcbiAgICBsZXQgdHggPSB0aGlzLnNjO1xyXG4gICAgaWYgKHRoaXMuaXNVSSB8fCAhdGhpcy5zaW1wbGUpIHR4ID0gdGhpcy5zYyArIDEwO1xyXG4gICAgdGhpcy50eGwgPSB0aGlzLncgLSB0eCArIDI7XHJcblxyXG4gICAgLy9sZXQgdHkgPSBNYXRoLmZsb29yKHRoaXMuaCAqIDAuNSkgLSA4O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgIHNbMl0ud2lkdGggPSB0aGlzLnNjIC0gNiArIFwicHhcIjtcclxuICAgIHNbMl0ubGVmdCA9IHRoaXMudHhsICsgNCArIFwicHhcIjtcclxuICAgIC8vc1syXS50b3AgPSB0eSArICdweCc7XHJcbiAgICBzWzNdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1szXS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzRdLmxlZnQgPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gICAgc1s0XS53aWR0aCA9IHcgKyBcInB4XCI7XHJcbiAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgMyArIFwicHhcIjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG8udmFsdWUgOiAnJztcclxuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyID0gby5wbGFjZUhvbGRlciB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gby5lZGl0ICE9PSB1bmRlZmluZWQgPyBvLmVkaXQgOiB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBjb2xvcjonICsgY2MudGV4dCArICc7IGJhY2tncm91bmQ6JyArIGNjLmJhY2sgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICAvLyBmYWtlXHJcbiAgICAgICAgdGhpcy5jWzVdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicgKyAodGhpcy5oLTIpICsgJ3B4OyBib3JkZXI6bm9uZTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6JytjYy5ib3JkZXIrJzsnICk7XHJcbiAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09ICcnICkgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID49IHRoaXMuc2EgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICAvL2xldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICAvL2lmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKXsgcmV0dXJuO31cclxuXHJcbiAgICAgICAgLy9pZiggbC54ID49IHRoaXMuc2EgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIC8vZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IDA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGV4dCcgKSB0aGlzLmN1cnNvcigndGV4dCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cElucHV0KCB4IC0gdGhpcy5zYSAtMywgdGhpcy5pc0Rvd24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYSArIDU7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICcxcHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICggZCArIGUgKSArICdweCc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gIHcgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBpZighcykgcmV0dXJuO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgMCAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSAndCdcclxuICAgICAgICBzWzRdLndpZHRoID0gMCArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZTsgXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmKHRoaXMudmFsdWUgIT09ICcnKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICBlbHNlIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFJFWklTRVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzVdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzVdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OnJpZ2h0OyB3aWR0aDo2MHB4OyBsaW5lLWhlaWdodDonKyAodGhpcy5oLTgpICsgJ3B4OyBjb2xvcjonICsgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5oID09PSAzMSApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS50b3AgPSA4ICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IDggKyAncHgnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzWzFdLmp1c3RpZnlDb250ZW50ID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgLy9zWzFdLnRleHRBbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIHNbMV0uZm9udFdlaWdodCA9IG8uZm9udFdlaWdodCB8fCAnYm9sZCc7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgdGhpcy50eHQuc3Vic3RyaW5nKDEpLnJlcGxhY2UoXCItXCIsIFwiIFwiKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBwcmVmaXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0KCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dDIoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuICAgICAgICB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnOyAvLy0gNTAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5sZWZ0ID0gdGhpcy53ICsgJ3B4JzsvLy0gKCA1MCArIDI2ICkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvciggYyApIHtcclxuICAgICAgICB0aGlzLnNbMV0uY29sb3IgPSBjXHJcbiAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vbkFjdGlmID0gby5vbkFjdGlmIHx8IGZ1bmN0aW9uKCl7fVxyXG5cclxuICAgICAgICAvL2xldCBwcmVmaXggPSBvLnByZWZpeCB8fCAnJztcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JysgY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdjdXJzb3InIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuICAgICAgICB0aGlzLmlzQWN0aWYgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJ1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTEgKSB0aGlzLmlzQWN0aWYgPSBmYWxzZTs7XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTMgKXsgXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNBY3RpZiApeyB0aGlzLmlzQWN0aWYgPSB0cnVlOyBuPTQ7IHRoaXMub25BY3RpZiggdGhpcyApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgdGhpcy5pc0FjdGlmID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0yICYmIHRoaXMuaXNBY3RpZiApIG4gPSA0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCdcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEZpbGVzIH0gZnJvbSAnLi4vY29yZS9GaWxlcy5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEJpdG1hcCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5yZWZUZXh0dXJlID0gby50ZXh0dXJlIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2hlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgYmFja2dyb3VuZDonICsgY2MuaW5wdXRCZyArICc7IGJvcmRlckNvbG9yOicgKyBjYy5pbnB1dEJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnbG9hZCcgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInO1xyXG4gICAgICAgIHJldHVybiAnMCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICAvL3RoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIEZpbGVzLmxvYWQoIHsgY2FsbGJhY2s6dGhpcy5jaGFuZ2VCaXRtYXAuYmluZCh0aGlzKSB9IClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1sgbmFtZS0yIF07XHJcbiAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZUJpdG1hcCggaW1nLCBmbmFtZSApe1xyXG5cclxuICAgICAgICBpZiggaW1nICl7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gaW1nXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoIGZuYW1lIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggJ251bGwnIClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFwcGx5ICggdiApIHtcclxuXHJcbiAgICAgICAgdiA9IHYgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmKCB2ICE9PSB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmltZyAhPT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCApIHRoaXMub2JqZWN0TGlua1sgdGhpcy52YWwgXSA9IHZcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmNhbGxiYWNrICkgdGhpcy5jYWxsYmFjayggdGhpcy52YWx1ZSwgdGhpcy5pbWcsIHRoaXMubmFtZSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKCAzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0ICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhazsgLy8gZG93blxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrOyAvLyBhY3RpZlxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKHRoaXMuc2ErOCkgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCIvL2ltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RvciBleHRlbmRzIEJ1dHRvbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkICkgby5zZWxlY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMucCA9IDEwMDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50eHQ7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLml0eXBlID0gby5pdHlwZSB8fCAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLml0eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5zdmdzWyB0aGlzLml0eXBlIF07XHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktNztcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLmdyYXBoLCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zWzFdLm1hcmdpbkxlZnQgPSAyMCArICdweCc7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIC8vdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCBuYW1lICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4ucmVzZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQoIHRydWUgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW91dCAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1aW92ZXIgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSg0KTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgyKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICgpIHtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLypyU2l6ZSAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICB9Ki9cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbjtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLnMsIGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnN0YXR1cyA9IDE7IHNbMV0uY29sb3IgPSBjYy50ZXh0OyBzWzBdLmJhY2tncm91bmQgPSAnbm9uZSc7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnN0YXR1cyA9IDI7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2MuYmFjazsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc3RhdHVzID0gMzsgc1sxXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbMF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc3RhdHVzID0gNDsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgLy8gcmV0dXJuIHRoaXMubW9kZSggMSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCAoIGIgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJ1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIC8qdGhpcy52YWx1ZXMgPSBvLnZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiggby52YWx1ZXMgKXtcclxuICAgICAgICAgICAgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZyApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbIG8udmFsdWVzIF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby52YWx1ZXNcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLnZhbHVlcy5wdXNoKCBnIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgbnVsbDtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zcGFjZXMgPSBvLnNwYWNlcyB8fCBbIGNjLnN4LCBjYy5zeSBdXHJcbiAgICAgICAgdGhpcy5ic2l6ZSA9IG8uYnNpemUgfHwgWyA5MCwgdGhpcy5oIF07XHJcblxyXG4gICAgICAgIHRoaXMuYnNpemVNYXggPSB0aGlzLmJzaXplWzBdXHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkID0gWyAyLCBNYXRoLnJvdW5kKCB0aGlzLmxuZyAqIDAuNSApIF07XHJcblxyXG4gICAgICAgIHRoaXMuaCA9ICggdGhpcy5ncmlkWzFdICogdGhpcy5ic2l6ZVsxXSApICsgKCB0aGlzLmdyaWRbMV0gKiB0aGlzLnNwYWNlc1sxXSApIC8vKyA0IC0gKHRoaXMubXRvcCoyKSAvLysgKHRoaXMuc3BhY2VzWzFdIC0gdGhpcy5tdG9wKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgdG9wOicrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsgaGVpZ2h0OmF1dG87IGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsgYm9yZGVyOm5vbmU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3RhYmxlJywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXSkrJ3B4OyBib3JkZXI6bm9uZTsnICk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkLCB0ZCwgdHIsIHNlbDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107IFxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0ciA9IHRoaXMuY1syXS5pbnNlcnRSb3coKTtcclxuICAgICAgICAgICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcbiAgICAgICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZCA9IHRyLmluc2VydENlbGwoKTtcclxuICAgICAgICAgICAgICAgIHRkLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAncG9zaXRpb246c3RhdGljOyB0b3A6MXB4OyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6JysodGhpcy5ic2l6ZVsxXS0yKSsncHg7IGJvcmRlcjonK2NjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbnMucHVzaChiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdC5wdXNoKDEpXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnIClcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246c3RhdGljOyB3aWR0aDonK3RoaXMuYnNpemVbMF0rJ3B4OyBoZWlnaHQ6Jyt0aGlzLmJzaXplWzFdKydweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6YXV0bzsgcmlnaHQ6YXV0bzsgYmFja2dyb3VuZDpub25lOydcclxuICAgICAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCggYiApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGo9PT0wKSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OnJpZ2h0Oyc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6bGVmdDsnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXIgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgIGwueSArPSB0aGlzLm10b3BcclxuICAgICAgICBcclxuICAgICAgICBsZXQgdHggPSB0aGlzLnRtcFg7XHJcbiAgICAgICAgbGV0IHR5ID0gdGhpcy50bXBZO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAtMTtcclxuICAgICAgICBsZXQgYyA9IC0xO1xyXG4gICAgICAgIGxldCBsaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWRbMF07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgIFx0aWYoIGwueCA+IHR4W2ldWzBdICYmIGwueCA8IHR4W2ldWzFdICkgYyA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gdGhpcy5ncmlkWzFdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHR5W2ldWzBdICYmIGwueSA8IHR5W2ldWzFdICkgbGluZSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjIT09LTEgJiYgbGluZSE9PS0xKXtcclxuICAgICAgICAgICAgaWQgPSBjICsgKGxpbmUqMik7XHJcbiAgICAgICAgICAgIGlmKGlkPnRoaXMubG5nLTEpIGlkID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXMgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgdGhpcy5yZXMgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHR1cCA9IHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZSggbiwgaSApICkgciA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuYnV0dG9uc1xyXG4gICAgICAgIGxldCBpID0gaWRcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnRleHRDb250ZW50ID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5LCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uc3R5bGUucGFkZGluZyA9ICggeSB8fCAwICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RXICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHZ3ID0gdGhpcy5zcGFjZXNbMF0qMyArIHRoaXMuYnNpemVNYXgqMiwgcnogPSBmYWxzZTtcclxuICAgICAgICBpZiggdncgPiB0aGlzLncgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSAoIHRoaXMudy0odGhpcy5zcGFjZXNbMF0qMykgKSAqIDAuNTtcclxuICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmJzaXplWzBdICE9PSB0aGlzLmJzaXplTWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9IHRoaXMuYnNpemVNYXg7XHJcbiAgICAgICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhcnogKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5idXR0b25zLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuYnV0dG9uc1tpXS5zdHlsZS53aWR0aCA9IHRoaXMuYnNpemVbMF0gKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGVzdFcoKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQ7XHJcblxyXG4gICAgICAgIHRoaXMudG1wWCA9IFtdO1xyXG4gICAgICAgIHRoaXMudG1wWSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBpZihqPT09MCl7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSAtICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQtdGhpcy5ic2l6ZVswXSwgbWlkIF0gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApICsgKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZCwgbWlkK3RoaXMuYnNpemVbMF0gXSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWlkID0gdGhpcy5zcGFjZXNbMV07XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudG1wWS5wdXNoKCBbIG1pZCwgbWlkICsgdGhpcy5ic2l6ZVsxXSBdICk7XHJcbiAgICAgICAgICAgIG1pZCArPSB0aGlzLmJzaXplWzFdICsgdGhpcy5zcGFjZXNbMV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWQyRCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICAvL3RoaXMubWFyZ2luID0gMTU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoMCwwKTtcclxuICAgICAgICB0aGlzLm1heFBvcyA9IDkwXHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5taW4gPSBvLm1pbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBvLm1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG8ubWF4ID09PSB1bmRlZmluZWQgPyAxIDogby5tYXg7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSAodGhpcy5tYXggLSB0aGlzLm1pbikqMC41OyAgXHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJhbmdlKVxyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gMiA6IG8ucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICAvKnRoaXMuYm91bmRzID0ge307XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDEgPSBvLngxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngyID0gby54MiB8fCAxO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkxID0gby55MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MiA9IG8ueTIgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5sZXJwWCA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyICk7XHJcbiAgICAgICAgdGhpcy5sZXJwWSA9IHRoaXMubGVycCggdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICwgdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyICk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApO1xyXG4gICAgICAgIHRoaXMuYWxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIsIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiApOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAoIEFycmF5LmlzQXJyYXkoIG8udmFsdWUgKSAmJiBvLnZhbHVlLmxlbmd0aCA9PSAyICkgPyBvLnZhbHVlIDogWyAwLCAwIF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKyAncHgnO1xyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy50b3AgLT0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblxyXG4gICAgICAgIC8vIFZhbHVlXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrICggdGhpcy5oIC0gMjAgKSArICdweDsgd2lkdGg6MTAwJTsgY29sb3I6JyArIGNjLnRleHQgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBQYWRcclxuXHJcbiAgICAgICAgbGV0IHBhZCA9IHRoaXMuZ2V0UGFkMmQoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYnV0dG9uLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMiApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBwYWQsIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSBwYWRcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnNldFZhbHVlKClcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRlc3Rab25lICggZSApIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcblxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAncGFkJztcclxuXHJcbiAgICAgICAgLyppZiggKCBsLnggPj0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueCA8PSB0aGlzLncgLSB0aGlzLm1hcmdpbiApICYmICggbC55ID49IHRoaXMudG9wICsgdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA8PSB0aGlzLnRvcCArIHRoaXMudyAtIHRoaXMubWFyZ2luICkgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGFkJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICBcclxuICAgICAgICAvL3JldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLnRlc3Rab25lKGUpID09PSAncGFkJyApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB4ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApXHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIClcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgbGV0IHIgPSAyNTYgLyB0aGlzLmRpYW1cclxuXHJcbiAgICAgICAgeCA9IC0oeCpyKVxyXG4gICAgICAgIHkgPSAtKHkqcilcclxuXHJcbiAgICAgICAgeCA9IFRvb2xzLmNsYW1wKCB4LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuICAgICAgICB5ID0gVG9vbHMuY2xhbXAoIHksIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG5cclxuICAgICAgICAvL2xldCB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcbiAgICAgICAgLy9sZXQgeSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3A7XHJcblxyXG4gICAgICAgIC8qaWYoIHggPCB0aGlzLm1hcmdpbiApIHggPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeCA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeCA9IHRoaXMudyAtIHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5IDwgdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLncgLSB0aGlzLm1hcmdpbjsqL1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHgseSlcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3MoIFsgeCAsIHkgXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2ssIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJhY2tvZmYsIDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLm92ZXJvZmYsIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRTZWxlY3QsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRygpIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID09IDEgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTEnLCB0aGlzLnBvcy55LCAyICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MicsIHRoaXMucG9zLnksIDIgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MScsIHRoaXMucG9zLngsIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gyJywgdGhpcy5wb3MueCwgMyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHRoaXMucG9zLngsIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB0aGlzLnBvcy55LCA0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFBvcyAoIHAgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIHAgPT09IHVuZGVmaW5lZCApIHAgPSBbIHRoaXMudyAvIDIsIHRoaXMudyAvIDIgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCBwWzBdKzEyOCAsIHBbMV0rMTI4ICk7XHJcblxyXG4gICAgICAgIGxldCByID0gMS90aGlzLm1heFBvc1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gKChwWzBdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICgocFsxXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYsIHVwID0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgIGlmKCB2ID09PSB1bmRlZmluZWQgKSB2ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLyppZiAoIHZbMF0gPCB0aGlzLmJvdW5kcy54MSApIHZbMF0gPSB0aGlzLmJvdW5kcy54MTtcclxuICAgICAgICBpZiAoIHZbMF0gPiB0aGlzLmJvdW5kcy54MiApIHZbMF0gPSB0aGlzLmJvdW5kcy54MjtcclxuICAgICAgICBpZiAoIHZbMV0gPCB0aGlzLmJvdW5kcy55MSApIHZbMV0gPSB0aGlzLmJvdW5kcy55MTtcclxuICAgICAgICBpZiAoIHZbMV0gPiB0aGlzLmJvdW5kcy55MiApIHZbMV0gPSB0aGlzLmJvdW5kcy55MjsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlWzBdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMF0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlsxXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggKCh0aGlzLnZhbHVlWzBdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggICwgKCh0aGlzLnZhbHVlWzFdL3RoaXMucmFuZ2UpKnRoaXMubWF4UG9zKSsxMjggKVxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucG9zKVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggdXAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLypsZXJwKCBzMSwgczIsIGQxLCBkMiwgYyA9IHRydWUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gKCBkMiAtIGQxICkgLyAoIHMyIC0gczEgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGMgPyAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgICByZXR1cm4gKCAoIHYgPCBzMSA/IHMxIDogdiA+IHMyID8gczIgOiB2ICkgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfSA6ICggdiApID0+IHsgXHJcbiAgICAgICAgICByZXR1cm4gKCB2IC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ki9cclxuXHJcbn0iLCIvLyBwcm90by9UcmVlTGlzdC5qc1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gXCIuLi9jb3JlL1Byb3RvLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4uL2NvcmUvVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi4vY29yZS9Sb290cy5qc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0IGV4dGVuZHMgUHJvdG8ge1xyXG5cdGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG5cdFx0Ly8gQVBJIHDDumJsaWNhIGVzcGVyYWRhOlxyXG5cdFx0Ly8gby50cmVlIChvYmovYXJyYXkpLCBvLnZhbHVlIChhcnJheSlcclxuXHRcdC8vIG8uZm9jdXNlZCAoYm9vbCksIG8uZm9jdXNQYXRoIChhcnJheSksIG8uZm9jdXNMZXZlbCAobnVtYmVyKVxyXG5cdFx0Ly8gby50YWJJbmRleCwgby5pdGVtSW5kZXgsIG8ub25DaGFuZ2UgKGZuKVxyXG5cdFx0by5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuXHRcdG8ubmFtZSA9IG8ubmFtZSB8fCBcIlRyZWVMaXN0XCI7XHJcblxyXG5cdFx0c3VwZXIobyk7XHJcblx0XHR0aGlzLmVuYWJsZUhvdmVyID0gby5lbmFibGVIb3ZlciAhPT0gZmFsc2U7XHJcblxyXG5cdFx0Ly8gRGF0b3MgJiBlc3RhZG9cclxuXHRcdHRoaXMudHJlZSA9IG8udHJlZSB8fCB7fTtcclxuXHRcdHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KG8udmFsdWUpID8gby52YWx1ZS5zbGljZSgpIDogW107XHJcblx0XHR0aGlzLmZvY3VzZWQgPSAhIW8uZm9jdXNlZDtcclxuXHRcdHRoaXMuZm9jdXNQYXRoID0gQXJyYXkuaXNBcnJheShvLmZvY3VzUGF0aCkgPyBvLmZvY3VzUGF0aC5zbGljZSgpIDogW107XHJcblx0XHR0aGlzLmZvY3VzTGV2ZWwgPSB0eXBlb2Ygby5mb2N1c0xldmVsID09PSBcIm51bWJlclwiID8gby5mb2N1c0xldmVsIDogLTE7XHJcblxyXG5cdFx0dGhpcy50YWJJbmRleCA9IG8udGFiSW5kZXggPz8gbnVsbDtcclxuXHRcdHRoaXMuaXRlbUluZGV4ID0gby5pdGVtSW5kZXggPz8gbnVsbDtcclxuXHJcblx0XHQvLyBDYWxsYmFja1xyXG5cdFx0dGhpcy5jaGFuZ2VDYiA9XHJcblx0XHRcdHR5cGVvZiBvLm9uQ2hhbmdlID09PSBcImZ1bmN0aW9uXCIgPyBvLm9uQ2hhbmdlIDogKCkgPT4ge307XHJcblxyXG5cdFx0Ly8gTGF5b3V0IGludGVybm8gLyBwdWJsaWNhY2nDs24gZGUgYWx0dXJhXHJcblx0XHR0aGlzLmxpbmVIID0gdGhpcy5oOyAvLyBhbHRvIGRlIFVOQSBmaWxhXHJcblx0XHR0aGlzLmxldmVsR2FwID0gdGhpcy5jb2xvcnMuc3kgfHwgMjsgLy8gc2VwYXJhY2nDs24gdmVydGljYWwgZW50cmUgbml2ZWxlc1xyXG5cdFx0dGhpcy5sZWFmTWF4ID0gMDsgLy8gc2UgY2FsY3VsYSBlbiByU2l6ZSgpXHJcblxyXG5cdFx0Ly8gTW9kZWxvIHZpc3VhbFxyXG5cdFx0dGhpcy5sZXZlbHMgPSBbXTsgLy8gW3t0eXBlOidtYXAnfCdsaXN0JywgaXRlbXM6W3trZXksbGFiZWwsem9uZX1dLCB6b25lOnt4LHksdyxofX0uLi5dXHJcblx0XHR0aGlzLml0ZW1zRG9tID0gW107IC8vIGVzcGVqbyBET00gcG9yIG5pdmVsXHJcblx0XHR0aGlzLmhvdmVyID0geyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG5cclxuXHRcdC8vIPCflLggTlVFVk86IHJlY29yZGFyIGxhIMO6bHRpbWEgaG9qYSBzZWxlY2Npb25hZGEgKHBlcnNpc3RlbnRlKVxyXG5cdFx0dGhpcy5sYXN0TGVhZiA9IHsgcGFyZW50UGF0aDogW10sIGtleTogbnVsbCB9OyAvLyBwYXJlbnRQYXRoIGVzIGxhIHJ1dGEgaGFzdGEgZWwgbWFwYSBwYWRyZVxyXG5cclxuXHRcdC8vIENvbnRlbmVkb3IgaW50ZXJubyAoYWJzb2x1dG8pXHJcblx0XHR0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuXHRcdFx0XCJkaXZcIixcclxuXHRcdFx0dGhpcy5jc3MuYmFzaWMgKyBcImxlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlO1wiXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHRcdHRoaXMuaW5pdCgpO1xyXG5cclxuXHRcdC8vIFNpIGVsIHZhbG9yIGluaWNpYWwgeWEgYXB1bnRhIGEgdW5hIGhvamEgdsOhbGlkYSwgcmVjb3JkYXIgZXNhIGhvamFcclxuXHRcdHRoaXMuX21heWJlVXBkYXRlTGFzdExlYWZGcm9tVmFsdWUoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gSGVscGVycyBkZSB0aXBvID09PT09PT1cclxuXHRzdGF0aWMgaXNNYXAobm9kZSkge1xyXG5cdFx0cmV0dXJuIG5vZGUgJiYgdHlwZW9mIG5vZGUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkobm9kZSk7XHJcblx0fVxyXG5cdHN0YXRpYyBpc0xpc3Qobm9kZSkge1xyXG5cdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkobm9kZSk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFJlY29ycmlkbyBkZSBkYXRvcyA9PT09PT09XHJcblx0Z2V0Tm9kZUF0UGF0aChwYXRoKSB7XHJcblx0XHRsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBwYXRoW2ldKSlcclxuXHRcdFx0XHRcdHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcblx0XHRcdFx0bm9kZSA9IG5vZGVbcGF0aFtpXV07XHJcblx0XHRcdH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcblx0XHRcdFx0Ly8gTGxlZ2Ftb3MgYSB1bmEgbGlzdGE6IHlhIG5vIGhheSBtw6FzIGNsYXZlcyB2w6FsaWRhc1xyXG5cdFx0XHRcdGlmIChpIDwgcGF0aC5sZW5ndGgpIHJldHVybiB7IG5vZGUsIGRlcHRoOiBpIH07XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgbm9kZSwgZGVwdGg6IHBhdGgubGVuZ3RoIH07XHJcblx0fVxyXG5cclxuXHQvLyBBdXRvY29tcGxldGFyOiBiYWphIHBvciBwcmltZXJhcyBjbGF2ZXMgZGUgY2FkYSBtYXBhIGhhc3RhIGFsY2FuemFyIHVuYSBsaXN0YVxyXG5cdGF1dG9Db21wbGV0ZVRvTGVhZihiYXNlUGF0aCkge1xyXG5cdFx0bGV0IHsgbm9kZSB9ID0gdGhpcy5nZXROb2RlQXRQYXRoKGJhc2VQYXRoKTtcclxuXHRcdGNvbnN0IHBhdGggPSBiYXNlUGF0aC5zbGljZSgpO1xyXG5cdFx0d2hpbGUgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcblx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuXHRcdFx0aWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcblx0XHRcdGNvbnN0IGswID0ga2V5c1swXTtcclxuXHRcdFx0cGF0aC5wdXNoKGswKTtcclxuXHRcdFx0bm9kZSA9IG5vZGVbazBdO1xyXG5cdFx0fVxyXG5cdFx0Ly8gU2kgdGVybWluYSBlbiBsaXN0YSwgTk8gYWdyZWdhIHVuIMOtdGVtIGZpbmFsIGRlIGxhIGhvamFcclxuXHRcdHJldHVybiBwYXRoO1xyXG5cdH1cclxuXHJcblx0Ly8gUnV0YSBhY3RpdmEgKGZvY3VzUGF0aCBzaSBmb2N1c2VkLCBzaW5vIHZhbHVlKVxyXG5cdGdldEFjdGl2ZVBhdGgoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5mb2N1c2VkID8gdGhpcy5mb2N1c1BhdGggOiB0aGlzLnZhbHVlO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBUYW1hw7FvIGRlIGhvamEgbcOheGltbyAocGFyYSBsYXlvdXQgZXN0YWJsZSkgPT09PT09PVxyXG5cdGNvbXB1dGVMZWFmTWF4KG5vZGUgPSB0aGlzLnRyZWUpIHtcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gbm9kZS5sZW5ndGg7XHJcblx0XHRpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09IFwib2JqZWN0XCIpIHJldHVybiAwO1xyXG5cdFx0bGV0IG0gPSAwO1xyXG5cdFx0Zm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XHJcblx0XHRcdG0gPSBNYXRoLm1heChtLCB0aGlzLmNvbXB1dGVMZWFmTWF4KG5vZGVba10pKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBDb25zdHJ1Y2Npw7NuIGRlIG5pdmVsZXMgKG1vZGVsbyBsw7NnaWNvKSA9PT09PT09XHJcblx0YnVpbGRMZXZlbHMoKSB7XHJcblx0XHR0aGlzLmxldmVscy5sZW5ndGggPSAwO1xyXG5cdFx0Y29uc3QgYWN0aXZlUGF0aCA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpO1xyXG5cclxuXHRcdGxldCBub2RlID0gdGhpcy50cmVlO1xyXG5cdFx0bGV0IGxldmVsID0gMDtcclxuXHJcblx0XHR3aGlsZSAobm9kZSkge1xyXG5cdFx0XHRpZiAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBOaXZlbCBpbnRlcm1lZGlvOiBjbGF2ZXMgZGVsIG1hcGEgKGhvcml6b250YWwpXHJcblx0XHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG5cdFx0XHRcdGlmICgha2V5cy5sZW5ndGgpIGJyZWFrO1xyXG5cdFx0XHRcdHRoaXMubGV2ZWxzLnB1c2goe1xyXG5cdFx0XHRcdFx0dHlwZTogXCJtYXBcIixcclxuXHRcdFx0XHRcdGl0ZW1zOiBrZXlzLm1hcCgoaykgPT4gKHtcclxuXHRcdFx0XHRcdFx0a2V5OiBrLFxyXG5cdFx0XHRcdFx0XHRsYWJlbDogayxcclxuXHRcdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0XHR9KSksXHJcblx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IHRoaXMubGluZUggfSxcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0Y29uc3QgbmV4dEtleSA9IGFjdGl2ZVBhdGhbbGV2ZWxdO1xyXG5cdFx0XHRcdGlmICghbmV4dEtleSB8fCAhbm9kZS5oYXNPd25Qcm9wZXJ0eShuZXh0S2V5KSkgYnJlYWs7XHJcblx0XHRcdFx0bm9kZSA9IG5vZGVbbmV4dEtleV07XHJcblx0XHRcdH0gZWxzZSBpZiAoVHJlZUxpc3QuaXNMaXN0KG5vZGUpKSB7XHJcblx0XHRcdFx0Ly8gTml2ZWwgaG9qYTogbGlzdGEgdmVydGljYWxcclxuXHRcdFx0XHRjb25zdCBpdGVtcyA9IG5vZGUubWFwKChsYWJlbCkgPT4gKHtcclxuXHRcdFx0XHRcdGtleTogbGFiZWwsXHJcblx0XHRcdFx0XHRsYWJlbCxcclxuXHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCB9LFxyXG5cdFx0XHRcdH0pKTtcclxuXHRcdFx0XHRjb25zdCBoTGlzdCA9IE1hdGgubWF4KGl0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcblx0XHRcdFx0dGhpcy5sZXZlbHMucHVzaCh7XHJcblx0XHRcdFx0XHR0eXBlOiBcImxpc3RcIixcclxuXHRcdFx0XHRcdGl0ZW1zLFxyXG5cdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiBoTGlzdCB9LFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldmVsKys7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IExheW91dCAoem9uYXMgJiBET00pID09PT09PT1cclxuXHRsYXlvdXRMZXZlbHMoKSB7XHJcblx0XHRjb25zdCBjb250ZW50WCA9ICh0aGlzLnNhIHx8IDEwMCkgKyA4OyAvLyBjb2x1bW5hIGRlIGxhYmVsICsgcGFkZGluZ1xyXG5cdFx0Y29uc3QgcGFkUmlnaHQgPSA4O1xyXG5cdFx0Y29uc3QgdyA9IHRoaXMuem9uZS53IC0gY29udGVudFggLSBwYWRSaWdodDtcclxuXHJcblx0XHRsZXQgeSA9IDA7XHJcblxyXG5cdFx0Ly8gQWp1c3RhciBpdGVtc0RvbSBhIGNhbnRpZGFkIGRlIG5pdmVsZXNcclxuXHRcdHdoaWxlICh0aGlzLml0ZW1zRG9tLmxlbmd0aCA8IHRoaXMubGV2ZWxzLmxlbmd0aClcclxuXHRcdFx0dGhpcy5pdGVtc0RvbS5wdXNoKFtdKTtcclxuXHRcdGZvciAobGV0IEwgPSB0aGlzLmxldmVscy5sZW5ndGg7IEwgPCB0aGlzLml0ZW1zRG9tLmxlbmd0aDsgTCsrKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZWwgb2YgdGhpcy5pdGVtc0RvbVtMXSlcclxuXHRcdFx0XHRpZiAoZWwgJiYgZWwucGFyZW50Tm9kZSkgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XHJcblx0XHR9XHJcblx0XHR0aGlzLml0ZW1zRG9tLmxlbmd0aCA9IHRoaXMubGV2ZWxzLmxlbmd0aDtcclxuXHJcblx0XHRmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcblx0XHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0XHRpZiAobHZsLnR5cGUgPT09IFwibWFwXCIpIHtcclxuXHRcdFx0XHRjb25zdCBuID0gTWF0aC5tYXgoMSwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcblx0XHRcdFx0Y29uc3QgY2VsbFcgPSBNYXRoLmZsb29yKHcgLyBuKTtcclxuXHRcdFx0XHRsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IHRoaXMubGluZUggfTtcclxuXHRcdFx0XHRsZXQgeCA9IGNvbnRlbnRYO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdCA9IGx2bC5pdGVtc1tpXTtcclxuXHRcdFx0XHRcdGl0LnpvbmUgPSB7IHgsIHksIHc6IGNlbGxXLCBoOiB0aGlzLmxpbmVIIH07XHJcblx0XHRcdFx0XHRjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcblx0XHRcdFx0XHR0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCBcIm1hcFwiKTtcclxuXHRcdFx0XHRcdHggKz0gY2VsbFc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBjZWxkYXNcclxuXHRcdFx0XHR0aGlzLl9wcnVuZVJvdyhMLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuXHRcdFx0XHR5ICs9IHRoaXMubGluZUggKyB0aGlzLmxldmVsR2FwO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIGxpc3RhL2hvamE6IHJlc2VydmFyIGggc2Vnw7puIGxlYWZNYXhcclxuXHRcdFx0XHRjb25zdCBuID0gbHZsLml0ZW1zLmxlbmd0aDtcclxuXHRcdFx0XHRjb25zdCBoTGlzdCA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCkgKiB0aGlzLmxpbmVIO1xyXG5cdFx0XHRcdGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogaExpc3QgfTtcclxuXHJcblx0XHRcdFx0Y29uc3Qgcm93cyA9IE1hdGgubWF4KG4sIHRoaXMubGVhZk1heCk7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGlzUmVhbCA9IGkgPCBuO1xyXG5cdFx0XHRcdFx0Y29uc3QgaXQgPSBpc1JlYWxcclxuXHRcdFx0XHRcdFx0PyBsdmwuaXRlbXNbaV1cclxuXHRcdFx0XHRcdFx0OiB7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6IG51bGwsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCB9LFxyXG5cdFx0XHRcdFx0XHQgIH07XHJcblx0XHRcdFx0XHRpdC56b25lID0ge1xyXG5cdFx0XHRcdFx0XHR4OiBjb250ZW50WCxcclxuXHRcdFx0XHRcdFx0eTogeSArIGkgKiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHR3LFxyXG5cdFx0XHRcdFx0XHRoOiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuXHRcdFx0XHRcdHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsIFwibGlzdFwiLCBpc1JlYWwpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgZmlsYXNcclxuXHRcdFx0XHR0aGlzLl9wcnVuZVJvdyhMLCByb3dzKTtcclxuXHRcdFx0XHR5ICs9IGhMaXN0O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQWp1c3RlcyBkZSBhbHRvIGludGVybm8gZGVsIGNvbnRlbmVkb3IgdmlzdWFsXHJcblx0XHRjb25zdCB0b3RhbEggPSB5O1xyXG5cdFx0dGhpcy56b25lLmggPSB0b3RhbEggKyB0aGlzLm1hcmdpbjtcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLnpvbmUuaCArIFwicHhcIjtcclxuXHRcdHRoaXMuc1syXS5oZWlnaHQgPSB0b3RhbEggKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gUHVibGljYXIgYWx0byB0b3RhbCBhbCBHVUkgKHN1bWFyw6EgdS5oKVxyXG5cdFx0dGhpcy5fcHVibGlzaEhlaWdodCgpO1xyXG5cdH1cclxuXHJcblx0Ly8gRWxpbWluYSBub2RvcyBET00gc29icmFudGVzIGVuIGxhIGZpbGEgTCBhIHBhcnRpciBkZWwgw61uZGljZSBrZWVwXHJcblx0X3BydW5lUm93KEwsIGtlZXApIHtcclxuXHRcdGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcblx0XHRpZiAoIXJvdykgcmV0dXJuO1xyXG5cdFx0Zm9yIChsZXQgaiA9IGtlZXA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0Y29uc3QgZWwgPSByb3dbal07XHJcblx0XHRcdGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuXHRcdH1cclxuXHRcdHJvdy5sZW5ndGggPSBrZWVwO1xyXG5cdH1cclxuXHJcblx0ZW5zdXJlSXRlbURvbShMLCBpKSB7XHJcblx0XHRjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG5cdFx0d2hpbGUgKHJvdy5sZW5ndGggPD0gaSkgcm93LnB1c2gobnVsbCk7XHJcblx0XHRpZiAoIXJvd1tpXSkge1xyXG5cdFx0XHRjb25zdCBkaXYgPSB0aGlzLmRvbShcclxuXHRcdFx0XHRcImRpdlwiLFxyXG5cdFx0XHRcdFRvb2xzLmNzcy50eHQgKyBcInBvc2l0aW9uOmFic29sdXRlOyBwb2ludGVyLWV2ZW50czpub25lO1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdHRoaXMuY1syXS5hcHBlbmRDaGlsZChkaXYpO1xyXG5cdFx0XHRyb3dbaV0gPSBkaXY7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcm93W2ldO1xyXG5cdH1cclxuXHJcblx0cGFpbnRJdGVtRG9tKGRpdiwgTCwgaSwgaXQsIGtpbmQsIGlzUmVhbCA9IHRydWUpIHtcclxuXHRcdGNvbnN0IHMgPSBkaXYuc3R5bGU7XHJcblx0XHRjb25zdCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuXHRcdC8vIFBvc2ljacOzblxyXG5cdFx0cy5sZWZ0ID0gaXQuem9uZS54ICsgXCJweFwiO1xyXG5cdFx0cy50b3AgPSBpdC56b25lLnkgKyBcInB4XCI7XHJcblx0XHRzLndpZHRoID0gaXQuem9uZS53ICsgXCJweFwiO1xyXG5cdFx0cy5oZWlnaHQgPSBpdC56b25lLmggLSAyICsgXCJweFwiO1xyXG5cclxuXHRcdC8vIFRleHRvXHJcblx0XHRkaXYudGV4dENvbnRlbnQgPSBpc1JlYWwgPyBpdC5sYWJlbCA6IFwiXCI7XHJcblxyXG5cdFx0Ly8gRXN0YWRvc1xyXG5cdFx0Y29uc3Qgc2VsZWN0ZWQgPVxyXG5cdFx0XHRpc1JlYWwgJiYgdGhpcy52YWx1ZVtMXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWVbTF0gPT09IGl0LmtleTtcclxuXHRcdGNvbnN0IGluRm9jdXNMdmwgPSB0aGlzLmZvY3VzZWQgJiYgdGhpcy5mb2N1c0xldmVsID09PSBMO1xyXG5cdFx0Y29uc3QgZm9jdXNNYXRjaCA9IGlzUmVhbCAmJiBpbkZvY3VzTHZsICYmIHRoaXMuZm9jdXNQYXRoW0xdID09PSBpdC5rZXk7XHJcblx0XHRjb25zdCBpc0hvdmVyID1cclxuXHRcdFx0dGhpcy5lbmFibGVIb3ZlciAmJlxyXG5cdFx0XHRpc1JlYWwgJiZcclxuXHRcdFx0dGhpcy5ob3Zlci5sZXZlbCA9PT0gTCAmJlxyXG5cdFx0XHR0aGlzLmhvdmVyLmluZGV4ID09PSBpO1xyXG5cclxuXHRcdC8vIPCflLggTlVFVk86IMK/ZXN0YSBmaWxhIGVzIGxhIMO6bHRpbWEgaG9qYSBzZWxlY2Npb25hZGE/XHJcblx0XHRsZXQgaXNMYXN0TGVhZiA9IGZhbHNlO1xyXG5cdFx0aWYgKGlzUmVhbCAmJiBraW5kID09PSBcImxpc3RcIiAmJiB0aGlzLmxhc3RMZWFmLmtleSAhPSBudWxsKSB7XHJcblx0XHRcdC8vIExhIGhvamEgdmlzaWJsZSBjb3JyZXNwb25kZSBzaSBlbCBwYWRyZSBkZSBlc3RhIGxpc3RhIGNvaW5jaWRlIGNvbiBwYXJlbnRQYXRoIGd1YXJkYWRvXHJcblx0XHRcdC8vIEVsIHBhZHJlIGFjdHVhbCBlcyB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpIGN1YW5kbyBsYSBsaXN0YSBlc3TDoSBkZXNwbGVnYWRhIHBvciB2YWx1ZS9mb2N1c1xyXG5cdFx0XHRjb25zdCBwYXJlbnROb3cgPSB0aGlzLmdldEFjdGl2ZVBhdGgoKS5zbGljZSgwLCBMKTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMuX3BhdGhzRXF1YWwocGFyZW50Tm93LCB0aGlzLmxhc3RMZWFmLnBhcmVudFBhdGgpICYmXHJcblx0XHRcdFx0aXQua2V5ID09PSB0aGlzLmxhc3RMZWFmLmtleVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRpc0xhc3RMZWFmID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEVzdGlsb3MgYmFzZVxyXG5cdFx0cy5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuXHRcdHMuY29sb3IgPSBjYy50ZXh0O1xyXG5cdFx0cy5ib3JkZXIgPSBcIjFweCBzb2xpZCBcIiArIGNjLmJvcmRlcjtcclxuXHRcdHMudGV4dEFsaWduID0ga2luZCA9PT0gXCJtYXBcIiA/IFwiY2VudGVyXCIgOiBcImxlZnRcIjtcclxuXHJcblx0XHQvLyBQcmlvcmlkYWQgdmlzdWFsOlxyXG5cdFx0Ly8gMSkgc2VsZWNjaW9uYWRvIChhenVsKVxyXG5cdFx0Ly8gMikgw7psdGltYSBob2phIChudWV2byBjb2xvcilcclxuXHRcdC8vIDMpIGZvY29cclxuXHRcdC8vIDQpIGhvdmVyXHJcblx0XHRpZiAoc2VsZWN0ZWQpIHtcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuXHRcdH0gZWxzZSBpZiAoaXNMYXN0TGVhZikge1xyXG5cdFx0XHQvLyBjb2xvciBkaXN0aW50aXZvIHBhcmEgXCLDumx0aW1hIGhvamFcIiAoYW1hcmlsbG8gc3VhdmUpXHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IFwicmdiYSgyNTUsIDIwMCwgMCwgMC4yNSlcIjtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHQ7XHJcblx0XHR9IGVsc2UgaWYgKGZvY3VzTWF0Y2gpIHtcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuXHRcdH0gZWxzZSBpZiAoaXNIb3Zlcikge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmO1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmlsYXMgZGUgcGFkZGluZyBpbnZpc2libGVzIGVuIGhvamFcclxuXHRcdHMub3BhY2l0eSA9IGlzUmVhbCA/IFwiMVwiIDogXCIwXCI7XHJcblx0fVxyXG5cclxuXHRfcGF0aHNFcXVhbChhLCBiKSB7XHJcblx0XHRpZiAoIWEgfHwgIWIgfHwgYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gQ2ljbG8gZGUgdmlkYSA9PT09PT09XHJcblx0clNpemUoKSB7XHJcblx0XHR0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcblx0XHR0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcblx0XHR0aGlzLmxheW91dExldmVscygpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlKCkge1xyXG5cdFx0dGhpcy5idWlsZExldmVscygpO1xyXG5cdFx0dGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gSW50ZXJhY2Npw7NuID09PT09PT1cclxuXHRfdG9Mb2NhbChlKSB7XHJcblx0XHRjb25zdCBteCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG5cdFx0Y29uc3QgbXkgPSBlLmNsaWVudFkgLSB0aGlzLnpvbmUueTtcclxuXHRcdHJldHVybiB7IHg6IG14LCB5OiBteSB9O1xyXG5cdH1cclxuXHJcblx0X2hpdFRlc3QobXgsIG15KSB7XHJcblx0XHRmb3IgKGxldCBMID0gMDsgTCA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCsrKSB7XHJcblx0XHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0XHRjb25zdCB6ID0gbHZsLnpvbmU7IC8vIHggeSB3IHlhIGluY2x1eWVuIGNvbnRlbnRYXHJcblxyXG5cdFx0XHRpZiAobXggPCB6LnggfHwgbXkgPCB6LnkgfHwgbXggPiB6LnggKyB6LncgfHwgbXkgPiB6LnkgKyB6LmgpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAobHZsLnR5cGUgPT09IFwibWFwXCIpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXR6ID0gbHZsLml0ZW1zW2ldLnpvbmU7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdG14ID49IGl0ei54ICYmXHJcblx0XHRcdFx0XHRcdG15ID49IGl0ei55ICYmXHJcblx0XHRcdFx0XHRcdG14IDw9IGl0ei54ICsgaXR6LncgJiZcclxuXHRcdFx0XHRcdFx0bXkgPD0gaXR6LnkgKyBpdHouaFxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IEwsIGksIHJlYWw6IHRydWUgfTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29uc3QgblJvd3MgPSBNYXRoLm1heChsdmwuaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNSZWFsID0gaSA8IGx2bC5pdGVtcy5sZW5ndGg7XHJcblx0XHRcdFx0XHRjb25zdCBpdHogPSBpc1JlYWxcclxuXHRcdFx0XHRcdFx0PyBsdmwuaXRlbXNbaV0uem9uZVxyXG5cdFx0XHRcdFx0XHQ6IHtcclxuXHRcdFx0XHRcdFx0XHRcdHg6IHoueCxcclxuXHRcdFx0XHRcdFx0XHRcdHk6IHoueSArIGkgKiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHRcdFx0dzogei53LFxyXG5cdFx0XHRcdFx0XHRcdFx0aDogdGhpcy5saW5lSCxcclxuXHRcdFx0XHRcdFx0ICB9O1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRteCA+PSBpdHoueCAmJlxyXG5cdFx0XHRcdFx0XHRteSA+PSBpdHoueSAmJlxyXG5cdFx0XHRcdFx0XHRteCA8PSBpdHoueCArIGl0ei53ICYmXHJcblx0XHRcdFx0XHRcdG15IDw9IGl0ei55ICsgaXR6LmhcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4geyBMLCBpLCByZWFsOiBpc1JlYWwgfTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB7IEw6IC0xLCBpOiAtMSwgcmVhbDogZmFsc2UgfTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUV2ZW50KGUpIHtcclxuXHRcdGlmICh0aGlzLmxvY2spIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRpZiAoZS50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XHJcblx0XHRcdC8vIFNpIGVsIGhvdmVyIGVzdMOhIGRlc2FjdGl2YWRvLCBubyBoYXkgdHJhYmFqbyBxdWUgaGFjZXIuXHJcblx0XHRcdGlmICghdGhpcy5lbmFibGVIb3ZlcikgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0Y29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG5cdFx0XHRjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcblxyXG5cdFx0XHQvLyBudWV2byBob3ZlciBjYWxjdWxhZG9cclxuXHRcdFx0Y29uc3QgbmV3SG92ZXIgPVxyXG5cdFx0XHRcdGh0LkwgIT09IC0xICYmIGh0LnJlYWxcclxuXHRcdFx0XHRcdD8geyBsZXZlbDogaHQuTCwgaW5kZXg6IGh0LmkgfVxyXG5cdFx0XHRcdFx0OiB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblx0XHRcdC8vIHNvbG8gcmVwaW50YXIgc2kgY2FtYmlhIHJlYWxtZW50ZSBlbCBob3ZlclxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0bmV3SG92ZXIubGV2ZWwgPT09IHRoaXMuaG92ZXIubGV2ZWwgJiZcclxuXHRcdFx0XHRuZXdIb3Zlci5pbmRleCA9PT0gdGhpcy5ob3Zlci5pbmRleFxyXG5cdFx0XHQpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR0aGlzLmhvdmVyID0gbmV3SG92ZXI7XHJcblx0XHRcdHRoaXMudXBkYXRlKCk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIHtcclxuXHRcdFx0Y29uc3QgeyB4LCB5IH0gPSB0aGlzLl90b0xvY2FsKGUpO1xyXG5cdFx0XHRjb25zdCBodCA9IHRoaXMuX2hpdFRlc3QoeCwgeSk7XHJcblx0XHRcdGlmIChodC5MICE9PSAtMSAmJiBodC5yZWFsKSB7XHJcblx0XHRcdFx0dGhpcy5fc2VsZWN0QXQoaHQuTCwgaHQuaSk7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7IC8vIHNvbG8gdHJ1ZSBzaSByZWFsbWVudGUgc2Ugc2VsZWNjaW9uw7MgYWxnb1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gU2VsZWNjacOzbiArIGF1dG9jb21wbGV0YWRvICsgbm90aWZpY2FjacOzblxyXG5cdF9zZWxlY3RBdChMLCBpKSB7XHJcblx0XHRjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuXHRcdGNvbnN0IGNob3NlbiA9IGx2bC5pdGVtc1tpXTtcclxuXHRcdGlmICghY2hvc2VuIHx8ICFjaG9zZW4ua2V5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgYmFzZSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgTCk7XHJcblx0XHRiYXNlW0xdID0gY2hvc2VuLmtleTtcclxuXHJcblx0XHRjb25zdCBuZXdQYXRoID0gdGhpcy5hdXRvQ29tcGxldGVUb0xlYWYoYmFzZSk7XHJcblxyXG5cdFx0Ly8g8J+UuCBTaSBlbCB1c3VhcmlvIHNlbGVjY2lvbmEgZXhwbMOtY2l0YW1lbnRlIGVuIGVsIG5pdmVsIGhvamEsIHJlY29yZGFybG9cclxuXHRcdGlmIChsdmwudHlwZSA9PT0gXCJsaXN0XCIpIHtcclxuXHRcdFx0dGhpcy5sYXN0TGVhZi5wYXJlbnRQYXRoID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTsgLy8gcGFkcmUgZGUgbGEgbGlzdGEgYWN0dWFsXHJcblx0XHRcdHRoaXMubGFzdExlYWYua2V5ID0gY2hvc2VuLmtleTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnZhbHVlID0gbmV3UGF0aC5zbGljZSgpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHJcblx0XHQvLyBzaSBlc3TDoSByZWZlcmVuY2lhZG8sIHByb3BhZ2EgYSBvYmpldG8gZXh0ZXJub1xyXG5cdFx0dGhpcy5zZW5kKG5ld1BhdGgpO1xyXG5cdFx0dGhpcy5jaGFuZ2VDYih0aGlzLnRhYkluZGV4LCB0aGlzLml0ZW1JbmRleCwgbmV3UGF0aCk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IEFQSSBww7pibGljYSA9PT09PT09XHJcblx0c2V0VmFsdWUocGF0aCkge1xyXG5cdFx0dGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoLnNsaWNlKCkgOiBbXTtcclxuXHRcdC8vIFNpIGRlc2RlIGFmdWVyYSBub3Mgc2V0ZWFuIHVuYSBob2phIHbDoWxpZGEsIHRhbWJpw6luIGxhIHJlY29yZGFtb3NcclxuXHRcdHRoaXMuX21heWJlVXBkYXRlTGFzdExlYWZGcm9tVmFsdWUoKTtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRzZXRUcmVlKHRyZWUpIHtcclxuXHRcdHRoaXMudHJlZSA9IHRyZWUgfHwge307XHJcblx0XHR0aGlzLmxlYWZNYXggPSB0aGlzLmNvbXB1dGVMZWFmTWF4KHRoaXMudHJlZSk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0c2V0Rm9jdXMoeyBmb2N1c2VkLCBmb2N1c1BhdGgsIGZvY3VzTGV2ZWwgfSkge1xyXG5cdFx0aWYgKHR5cGVvZiBmb2N1c2VkID09PSBcImJvb2xlYW5cIikgdGhpcy5mb2N1c2VkID0gZm9jdXNlZDtcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KGZvY3VzUGF0aCkpIHRoaXMuZm9jdXNQYXRoID0gZm9jdXNQYXRoLnNsaWNlKCk7XHJcblx0XHRpZiAodHlwZW9mIGZvY3VzTGV2ZWwgPT09IFwibnVtYmVyXCIpIHRoaXMuZm9jdXNMZXZlbCA9IGZvY3VzTGV2ZWw7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0X21heWJlVXBkYXRlTGFzdExlYWZGcm9tVmFsdWUoKSB7XHJcblx0XHQvLyBTaSB2YWx1ZSBhcHVudGEgYSBwYWRyZStob2phICjigKYsW2xlYWZdKSB5IGVzIHbDoWxpZGEsIHJlY29yZGFyIGVzYSBob2phXHJcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgfHwgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy52YWx1ZS5sZW5ndGggLSAxKTtcclxuXHRcdGNvbnN0IGxlYWYgPSB0aGlzLnZhbHVlW3RoaXMudmFsdWUubGVuZ3RoIC0gMV07XHJcblx0XHRjb25zdCBpbmZvID0gdGhpcy5nZXROb2RlQXRQYXRoKHBhcmVudCk7XHJcblx0XHRpZiAoaW5mbyAmJiBBcnJheS5pc0FycmF5KGluZm8ubm9kZSkgJiYgaW5mby5ub2RlLmluY2x1ZGVzKGxlYWYpKSB7XHJcblx0XHRcdHRoaXMubGFzdExlYWYgPSB7IHBhcmVudFBhdGg6IHBhcmVudCwga2V5OiBsZWFmIH07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFB1YmxpY2FjacOzbiBkZSBhbHR1cmEgPT09PT09PVxyXG5cdF9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCkge1xyXG5cdFx0bGV0IGMgPSAwO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxldmVscy5sZW5ndGg7IGkrKylcclxuXHRcdFx0aWYgKHRoaXMubGV2ZWxzW2ldLnR5cGUgPT09IFwibWFwXCIpIGMrKztcclxuXHRcdHJldHVybiBjO1xyXG5cdH1cclxuXHJcblx0X2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkge1xyXG5cdFx0Y29uc3QgbGFzdCA9IHRoaXMubGV2ZWxzW3RoaXMubGV2ZWxzLmxlbmd0aCAtIDFdO1xyXG5cdFx0cmV0dXJuIGxhc3QgJiYgbGFzdC50eXBlID09PSBcImxpc3RcIiA/IGxhc3QuaXRlbXMubGVuZ3RoIDogMDtcclxuXHR9XHJcblxyXG5cdF9wdWJsaXNoSGVpZ2h0KCkge1xyXG5cdFx0Y29uc3QgaW50ZXIgPSB0aGlzLl9jb3VudFZpc2libGVJbnRlcm1lZGlhdGVzKCk7XHJcblx0XHRjb25zdCBsZWFmTGVuID0gTWF0aC5tYXgodGhpcy5sZWFmTWF4LCB0aGlzLl9nZXRDdXJyZW50TGVhZkxlbmd0aCgpKTtcclxuXHRcdGNvbnN0IGxlYWZIID0gbGVhZkxlbiAqIHRoaXMubGluZUg7XHJcblx0XHRjb25zdCBpbnRlckggPSBpbnRlciAqICh0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcCk7XHJcblx0XHRjb25zdCB0b3RhbEggPSBpbnRlciA/IGludGVySCArIHRoaXMubGV2ZWxHYXAgKyBsZWFmSCA6IGxlYWZIO1xyXG5cclxuXHRcdC8vIE5vcm1hbGl6YW1vcyBhIHB4IGVudGVyb3MgcGFyYSBldml0YXIgaml0dGVyIHBvciByZWRvbmRlb1xyXG5cdFx0Y29uc3QgbmV3SCA9IE1hdGguZmxvb3IodG90YWxIKTtcclxuXHJcblx0XHQvLyBBY3R1YWxpemFtb3MgbcOpdHJpY2FzIGxvY2FsZXMgc2llbXByZVxyXG5cdFx0dGhpcy5oID0gbmV3SDtcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5tYXJnaW47XHJcblx0XHR0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgXCJweFwiO1xyXG5cclxuXHRcdC8vIFNvbG8gYXZpc2Ftb3MgYWwgR1VJIHNpIGxhIGFsdHVyYSBjYW1iacOzXHJcblx0XHRpZiAobmV3SCAhPT0gdGhpcy5fbGFzdFB1Ymxpc2hlZEgpIHtcclxuXHRcdFx0dGhpcy5fbGFzdFB1Ymxpc2hlZEggPSBuZXdIO1xyXG5cdFx0XHRSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuXHRcdFx0aWYgKHRoaXMuaXNVSSAmJiB0aGlzLm1haW4pIHRoaXMubWFpbi5jYWxjKCk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBCb29sIH0gZnJvbSAnLi4vcHJvdG8vQm9vbC5qcyc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL3Byb3RvL0J1dHRvbi5qcyc7XHJcbmltcG9ydCB7IENpcmN1bGFyIH0gZnJvbSAnLi4vcHJvdG8vQ2lyY3VsYXIuanMnO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL3Byb3RvL0NvbG9yLmpzJztcclxuaW1wb3J0IHsgRnBzIH0gZnJvbSAnLi4vcHJvdG8vRnBzLmpzJztcclxuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9wcm90by9HcmFwaC5qcyc7XHJcbmltcG9ydCB7IEdyb3VwICB9IGZyb20gJy4uL3Byb3RvL0dyb3VwLmpzJztcclxuaW1wb3J0IHsgSm95c3RpY2sgfSBmcm9tICcuLi9wcm90by9Kb3lzdGljay5qcyc7XHJcbmltcG9ydCB7IEtub2IgfSBmcm9tICcuLi9wcm90by9Lbm9iLmpzJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uL3Byb3RvL0xpc3QuanMnO1xyXG5pbXBvcnQgeyBOdW1lcmljIH0gZnJvbSAnLi4vcHJvdG8vTnVtZXJpYy5qcyc7XHJcbmltcG9ydCB7IFNsaWRlIH0gZnJvbSAnLi4vcHJvdG8vU2xpZGUuanMnO1xyXG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9wcm90by9UZXh0SW5wdXQuanMnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL3Byb3RvL1RpdGxlLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0LmpzJztcclxuaW1wb3J0IHsgQml0bWFwIH0gZnJvbSAnLi4vcHJvdG8vQml0bWFwLmpzJztcclxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICcuLi9wcm90by9TZWxlY3Rvci5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi4vcHJvdG8vRW1wdHkuanMnO1xyXG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vcHJvdG8vSXRlbS5qcyc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi9wcm90by9HcmlkLmpzJztcclxuaW1wb3J0IHsgUGFkMkQgfSBmcm9tICcuLi9wcm90by9QYWQyRC5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFRyZWVMaXN0IH0gZnJvbSAnLi4vcHJvdG8vVHJlZUxpc3QuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7IFxyXG5cclxuICAgICAgICBsZXQgdHlwZSwgbywgcmVmID0gZmFsc2UsIG4gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIGFbMF0gPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICAgICAgdHlwZSA9IGFbMF07XHJcbiAgICAgICAgICAgIG8gPSBhWzFdIHx8IHt9O1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYVswXSA9PT0gJ29iamVjdCcgKXsgLy8gbGlrZSBkYXQgZ3VpXHJcblxyXG4gICAgICAgICAgICByZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggYVsyXSA9PT0gdW5kZWZpbmVkICkgW10ucHVzaC5jYWxsKGEsIHt9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0eXBlID0gYVsyXS50eXBlID8gYVsyXS50eXBlIDogYXV0b1R5cGUoIGFbMF1bYVsxXV0sIGFbMl0gKTtcclxuXHJcbiAgICAgICAgICAgIG8gPSBhWzJdO1xyXG4gICAgICAgICAgICBvLm5hbWUgPSBhWzFdO1xyXG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpKSBvLm5hbWUgPSBvLmRpc3BsYXlOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09ICdsaXN0JyAmJiAhby5saXN0ICl7IG8ubGlzdCA9IGFbMF1bYVsxXV07IH1cclxuICAgICAgICAgICAgZWxzZSBvLnZhbHVlID0gYVswXVthWzFdXTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdncm91cCcgKXsgXHJcbiAgICAgICAgICAgIG8uYWRkID0gYWRkO1xyXG4gICAgICAgICAgICAvL28uZHggPSA4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOiBjYXNlICdib29sZWFuJzogbiA9IG5ldyBCb29sKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYnV0dG9uJzogbiA9IG5ldyBCdXR0b24obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjaXJjdWxhcic6IG4gPSBuZXcgQ2lyY3VsYXIobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6IG4gPSBuZXcgQ29sb3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmcHMnOiBuID0gbmV3IEZwcyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyYXBoJzogbiA9IG5ldyBHcmFwaChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzogbiA9IG5ldyBHcm91cChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pveXN0aWNrJzogbiA9IG5ldyBKb3lzdGljayhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tub2InOiBuID0gbmV3IEtub2Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdsaXN0JzogbiA9IG5ldyBMaXN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6IGNhc2UgJ251bWJlcic6IG4gPSBuZXcgTnVtZXJpYyhvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlJzogbiA9IG5ldyBTbGlkZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHRJbnB1dCc6IGNhc2UgJ3N0cmluZyc6IG4gPSBuZXcgVGV4dElucHV0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOiBjYXNlICd0ZXh0JzogbiA9IG5ldyBUaXRsZShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6IG4gPSBuZXcgU2VsZWN0KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYml0bWFwJzogbiA9IG5ldyBCaXRtYXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6IG4gPSBuZXcgU2VsZWN0b3Iobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6IGNhc2UgJ3NwYWNlJzogbiA9IG5ldyBFbXB0eShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOiBuID0gbmV3IEl0ZW0obyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmlkJzogbiA9IG5ldyBHcmlkKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGFkMmQnOiBjYXNlICdwYWQnOiBuID0gbmV3IFBhZDJEKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndHJlZWxpc3QnOiBuID0gbmV3IFRyZWVMaXN0KG8pOyBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIG4gIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBpZiggcmVmICkgbi5zZXRSZWZlcmVuY3koIGFbMF0sIGFbMV0gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcblxyXG4gICAgICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhdXRvVHlwZSA9IGZ1bmN0aW9uICggdiwgbyApIHtcclxuXHJcbiAgICBsZXQgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICBpZiggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHR5cGUgPSAnYm9vbCcgXHJcbiAgICBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgIGlmKCB2LnN1YnN0cmluZygwLDEpID09PSAnIycgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzdHJpbmcnIFxyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdudW1iZXInICl7IFxyXG5cclxuICAgICAgICBpZiggby5jdHlwZSApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdhcnJheScgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICl7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdlswXSA9PT0gJ251bWJlcicgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdlswXSA9PT0gJ3N0cmluZycgKSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG5cclxuICAgICAgICBpZiggdi54ICE9PSB1bmRlZmluZWQgKSB0eXBlID0gJ251bWJlcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgYWRkIH0gZnJvbSBcIi4vYWRkLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBHdWkge1xyXG4gIGNvbnN0cnVjdG9yKG8gPSB7fSkge1xyXG4gICAgdGhpcy5pc0d1aSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gXCJndWlcIjtcclxuXHJcbiAgICAvLyBmb3IgM2RcclxuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgIHRoaXMuc2NyZWVuID0gbnVsbDtcclxuICAgIHRoaXMucGxhbmUgPSBvLnBsYW5lIHx8IG51bGw7XHJcblxyXG4gICAgLy8gY29sb3JcclxuICAgIGlmIChvLmNvbmZpZykgby5jb2xvcnMgPSBvLmNvbmZpZztcclxuICAgIGlmIChvLmNvbG9ycykgdGhpcy5zZXRDb25maWcoby5jb2xvcnMpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG5cclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLmNzcyA9IFRvb2xzLmNsb25lQ3NzKCk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgIHRoaXMudG1wQWRkID0gbnVsbDtcclxuICAgIC8vdGhpcy50bXBIID0gMFxyXG5cclxuICAgIHRoaXMuaXNDYW52YXMgPSBvLmlzQ2FudmFzIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICAvLyBvcHRpb24gdG8gZGVmaW5lIHdoZXRoZXIgdGhlIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgYWRkZWQgb3Igbm90XHJcbiAgICBSb290cy5hZGRET01FdmVudExpc3RlbmVycyA9IG8uaGFzT3duUHJvcGVydHkoXCJhZGRET01FdmVudExpc3RlbmVyc1wiKVxyXG4gICAgICA/IG8uYWRkRE9NRXZlbnRMaXN0ZW5lcnNcclxuICAgICAgOiB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FsbGJhY2sgPSBvLmNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5jYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmZvcmNlSGVpZ2h0ID0gby5tYXhIZWlnaHQgfHwgMDtcclxuICAgIHRoaXMubG9ja0hlaWdodCA9IG8ubG9ja0hlaWdodCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzSXRlbU1vZGUgPSBvLml0ZW1Nb2RlICE9PSB1bmRlZmluZWQgPyBvLml0ZW1Nb2RlIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbiA9IFwiXCI7XHJcblxyXG4gICAgLy8gc2l6ZSBkZWZpbmVcclxuICAgIHRoaXMuc2l6ZSA9IFRvb2xzLnNpemU7XHJcbiAgICBpZiAoby5wICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5wID0gby5wO1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUudyA9IG8udztcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLmggPSBvLmg7XHJcbiAgICBpZiAoby5zICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5zID0gby5zO1xyXG5cclxuICAgIHRoaXMuc2l6ZS5oID0gdGhpcy5zaXplLmggPCAxMSA/IDExIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgLy8gbG9jYWwgbW91c2UgYW5kIHpvbmVcclxuICAgIHRoaXMubG9jYWwgPSBuZXcgVjIoKS5uZWcoKTtcclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogdGhpcy5zaXplLncsIGg6IDAgfTtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIG1vdXNlXHJcbiAgICB0aGlzLm1vdXNlID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5oID0gMDtcclxuICAgIC8vdGhpcy5wcmV2WSA9IC0xO1xyXG4gICAgdGhpcy5zdyA9IDA7XHJcblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgLy8gYm90dG9tIGFuZCBjbG9zZSBoZWlnaHRcclxuICAgIHRoaXMuaXNXaXRoQ2xvc2UgPSBvLmNsb3NlICE9PSB1bmRlZmluZWQgPyBvLmNsb3NlIDogdHJ1ZTtcclxuICAgIHRoaXMuYmggPSAhdGhpcy5pc1dpdGhDbG9zZSA/IDAgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvLmF1dG9SZXNpemUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvLmF1dG9SZXNpemU7XHJcblxyXG4gICAgLy8gZGVmYXVsdCBwb3NpdGlvblxyXG4gICAgdGhpcy5pc0NlbnRlciA9IG8uY2VudGVyIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5jc3NHdWkgPVxyXG4gICAgICBvLmNzcyAhPT0gdW5kZWZpbmVkID8gby5jc3MgOiB0aGlzLmlzQ2VudGVyID8gXCJcIiA6IFwicmlnaHQ6MTBweDtcIjtcclxuXHJcbiAgICB0aGlzLmlzT3BlbiA9IG8ub3BlbiAhPT0gdW5kZWZpbmVkID8gby5vcGVuIDogdHJ1ZTtcclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWNhbCA9IDA7XHJcbiAgICB0aGlzLnJhdGlvID0gMTtcclxuICAgIHRoaXMub3kgPSAwO1xyXG5cclxuICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIiB3aWR0aDowcHg7IGhlaWdodDphdXRvOyB0b3A6MHB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5jb250ZW50ICtcclxuICAgICAgICBcIjsgXCIgK1xyXG4gICAgICAgIHRoaXMuY3NzR3VpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgdGhpcy5jc3MuYnV0dG9uICsgJ3dpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lckNvbnRlbnQpO1xyXG5cclxuICAgIC8vdGhpcy5pbm5lciA9IFRvb2xzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgJylcclxuICAgIHRoaXMudXNlRmxleCA9IHRydWU7XHJcbiAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyBcImRpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDtcIiA6IFwiXCI7IC8vJyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzdGFydDsgYWxpZ24taXRlbXM6c3RhcnQ7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7JztcclxuICAgIHRoaXMuaW5uZXIgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcIndpZHRoOjEwMCU7IGxlZnQ6MDsgXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcclxuXHJcbiAgICAvLyBzY3JvbGxcclxuICAgIHRoaXMuc2Nyb2xsQkcgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcInJpZ2h0OjA7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gMSkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4OyBkaXNwbGF5Om5vbmU7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2tncm91bmQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsQkcpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5idXR0b24gK1xyXG4gICAgICAgIFwiOyByaWdodDoycHg7IHRvcDowOyB3aWR0aDpcIiArXHJcbiAgICAgICAgKHRoaXMuc2l6ZS5zIC0gNCkgK1xyXG4gICAgICAgIFwicHg7IGhlaWdodDoxMHB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY3JvbGxCRy5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbCk7XHJcblxyXG4gICAgLy8gYm90dG9tIGJ1dHRvblxyXG4gICAgdGhpcy5ib3R0b21UZXh0ID0gby5ib3R0b21UZXh0IHx8IFtcIm9wZW5cIiwgXCJjbG9zZVwiXTtcclxuXHJcbiAgICBsZXQgciA9IGNjLnJhZGl1cztcclxuICAgIHRoaXMuYm90dG9tID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHQgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOmF1dG87IGJvdHRvbTowOyBsZWZ0OjA7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOlwiICtcclxuICAgICAgICByICtcclxuICAgICAgICBcInB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgIHRoaXMuYmggK1xyXG4gICAgICAgIFwicHg7IGxpbmUtaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5iaCAtIDUpICtcclxuICAgICAgICBcInB4OyBjb2xvcjpcIiArXHJcbiAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7IC8vIGJvcmRlci10b3A6MXB4IHNvbGlkICcrVG9vbHMuY29sb3JzLnN0cm9rZSsnOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuYm90dG9tKTtcclxuICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gby5wYXJlbnQgIT09IHVuZGVmaW5lZCA/IG8ucGFyZW50IDogbnVsbDtcclxuICAgIHRoaXMucGFyZW50ID0gby50YXJnZXQgIT09IHVuZGVmaW5lZCA/IG8udGFyZ2V0IDogdGhpcy5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMucGFyZW50ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMgJiYgdGhpcy5wYXJlbnQgPT09IG51bGwpIHRoaXMuaXNDYW52YXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICBvLnRyYW5zaXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhlaWdodCB0cmFuc2l0aW9uXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPVxyXG4gICAgICBvLnRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCA/IG8udHJhbnNpdGlvbiA6IFRvb2xzLnRyYW5zaXRpb247XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uKSBzZXRUaW1lb3V0KHRoaXMuYWRkVHJhbnNpdGlvbi5iaW5kKHRoaXMpLCAxMDAwKTtcclxuXHJcbiAgICB0aGlzLnNldFdpZHRoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDYW52YXMpIHRoaXMubWFrZUNhbnZhcygpO1xyXG5cclxuICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZURvd24oeCwgeSkge1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZSgpIHtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlVXAoeCwgeSkge1xyXG4gICAgLypcclxuXHJcbiAgICAgICAgY2xpZW50WCxjbGllbnRZIGFyZSBubyB1c2VkIHdoZW4gaXNDYW52YXM9PXRydWVcclxuICAgICAgICAqL1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRvcCh0LCBoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudG9wID0gdCArIFwicHhcIjtcclxuICAgIGlmIChoICE9PSB1bmRlZmluZWQpIHRoaXMuZm9yY2VIZWlnaHQgPSBoO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbiAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5ib3R0b20uc3R5bGUudHJhbnNpdGlvbiA9IFwidG9wIFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIC8vdGhpcy5ib3R0b20uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgUm9vdHMucmVzaXplLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHRoaXMudWlzW2ldLmFkZFRyYW5zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENBTlZBU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25EcmF3KCkge31cclxuXHJcbiAgbWFrZUNhbnZhcygpIHtcclxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxyXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuICAgICAgXCJjYW52YXNcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy56b25lLnc7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgKVxyXG4gIH1cclxuXHJcbiAgZHJhdyhmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHcgPSB0aGlzLnpvbmUudztcclxuICAgIGxldCBoID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuICAgIFJvb3RzLnRvQ2FudmFzKHRoaXMsIHcsIGgsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8vLy8vL1xyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgbm9Nb3VzZSgpIHtcclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZSh1diwgZmxpcCA9IHRydWUpIHtcclxuICAgIGlmIChmbGlwKVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm1vdXNlLnNldChcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnggKiB0aGlzLmNhbnZhcy53aWR0aCksXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di55ICogdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgLy90aGlzLm1vdXNlLnNldCggbS54LCBtLnkgKTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0TW91c2UgXCIrdXYueCtcIiBcIit1di55KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNZLE1BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsTUFBTSxDQUFDLEdBQUc7QUFDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7QUFDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7QUFDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0FBQ1YsRUFBRSxJQUFJLEVBQUUs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USxDQUFDO0FBQ3pDO0FBQ0E7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtBQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDMUIsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtBQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7QUFDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMs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QUs7QUFDTDtBQUNBLElBQUksR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUMzQjtBQUNBLFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0FBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0FBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtBQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkIsU0FBUztB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QUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUNwSixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JIO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3SSxR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QyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekg7QUFDQTtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0FBQ0E7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0FBQ0E7QUFDQTtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdGO0FBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMvQjtBQUNBLFNBQVMsTUFBTTtBQUNmO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzVGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0FBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckksWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQy9GLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BJO0FBQ0EsWUFBWSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMvQixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxhQUFhLEVBQUUsWUFBWTtBQUMvQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0FBQ2hKLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN2QyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0IsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3hCLFFBQVcsSUFBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0FBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN2QjtBQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7QUFDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsWUFBWSxFQUFFLEdBQUc7QUFDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7QUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FB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QUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FB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QztBQUN0RSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3RCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzdFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0FBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsT0FBTztBQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN6QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxHQUFHO0FBQ1QsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNyQztBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7QUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQzVEO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7QUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDaEMsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDekMsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDMUI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEQsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDOUIsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFO0FBQ1YsTUFBTSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUk7QUFDMUIsVUFBVSxJQUFJLENBQUMsTUFBTTtBQUNyQixVQUFVLElBQUksQ0FBQyxJQUFJO0FBQ25CLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO0FBQ3pCLFVB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QUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFHO0FBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0FBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUss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QUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDckQsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUU7QUFDcEUsU0FBUztBQUNUO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUN4RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxD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QUFDdkM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUNyQixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUk7QUFDbEQ7QUFDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztBQUM1RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7QUFDQTtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0FBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7QUFD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QUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0FBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RDtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0FBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RDtBQUNBLFlBQVksTUFBTTtBQUNsQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0FBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7QUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckMsWUFBWSxJQUFJLENBQUMsS0FB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Q0FBQztBQUNuQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7QUFDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztBQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7QUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMs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LElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ25EO0FBQ0EsT0FBTyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsT0FBTztBQUNQO0FBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakM7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTCxJQUFJO0FBQ0osR0FBRztBQUNIO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLENBQUMsU0FBUyxDQUFDLEdBQUc7QUFDZDtBQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDakUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUN0QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2xELFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9DO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsR0FBRztBQUNUO0FBQ0EsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDZjtBQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQ3RDO0FBQ0EsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0FBQ0EsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEI7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM5QztBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCO0FBQ0EsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDbkI7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztBQUN0QztBQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDZjtBQUNBLEtBQUssSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hFO0FBQ0EsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDeEI7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3hDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDN0U7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkQsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckQ7QUFDQSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTztBQUNwQjtBQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RCxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3ZFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7QUFDM0UsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QztBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2Y7QUFDQSxFQUFFLElBQUksQ0FBQyxZQUFZLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RCxhQUFhLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDN0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNwQjtBQUNBLEtBQUssSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxFQUFFO0FBQzFDO0FBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7QUFDNUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU07QUFDMUIsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUM5QztBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdkIsTUFBTTtBQUNOLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNoQjtBQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN6QixLQUFLLE9BQU8sSUFBSSxDQUFDO0FBQ2pCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxXQUFXLENBQUMsR0FBRztBQUNoQjtBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7QUFDakIsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFLO0FBQ2Y7QUFDQSxLQUFjLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU87QUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDbkMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7QUFDQSxLQUFLLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMxQztBQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7QUFDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztBQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUM7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0FBQ0E7QUFDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtBQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7QUFDNUQ7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0FBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtBQUNwQztBQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0FBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQztBQUMvQjtBQUNBLElB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QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQTtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM5QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztBQUN0RSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QztBQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0IsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkM7QUFDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkQ7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFN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QUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ25DO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDeEUsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUNqRDtBQUNBLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDL0IsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDL0MsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxTQUFRO0FBQ3pELGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcseURBQXlELEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVMO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNqRDtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUN0SixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbEY7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMvSCxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoSjtBQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEQsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0FBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQztBQUM5QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFJO0FBQzlDLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckMsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQztBQUNoRixpQkFBaUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUMzRCxTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFdBQVcsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQ0FBaUM7QUFDcEUsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUc7QUFDOUIsUUFBUSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUk7QUFDckMsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2xCLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQW9CO0FBQ2pHLGlCQUFpQixDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFPO0FBQ3RFLFlBQVksQ0FBQyxHQUFFO0FBQ2YsU0FBUztBQUNULFFBQVEsT0FBTyxDQUFDO0FBQ2hCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEM7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25GLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEgsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEc7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekI7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsU0FBUyxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3JCLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUN2RCxVQUFVO0FBQ1YsTUFBTTtBQUNOO0FBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDckI7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ1g7QUFDQSxRQUFRLE9BQU8sQ0FBQztBQUNoQixZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNO0FBQ2pDLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU07QUFDakMsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUMvQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQzlELFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0I7QUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsS0FBSyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDckI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN6QixRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDbEIsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3JDLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ3JFLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQzNCLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3REO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxLQUFLLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztBQUNyQjtBQUNBLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQztBQUNBLEtBQUssSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ3RCO0FBQ0EsWUFBWSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9CO0FBQ0E7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3pEO0FBQ0EsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0IsYUFBYSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzlHLGFBQWEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNqQyxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0EsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUU7QUFDckM7QUFDQTtBQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckM7QUFDQSxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUM7QUFDNUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBRztBQUMxQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7QUFDdEI7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUM7QUFDekQsV0FBVyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ3hFLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUM7QUFDbEQ7QUFDQSxNQUFNLEVBQUUsR0FBRyxHQUFFO0FBQ2IsTUFBTSxFQUFFLEdBQUcsRUFBQztBQUNaO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsS0FBSyxPQUFPLENBQUM7QUFDYjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDNUIsUUFBUSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUM7QUFDakQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQ2xCO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxLQUFJO0FBQzlCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztBQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFFO0FBQzlDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ3ZDO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNsVE8sTUFBTSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLEtBQUssQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFJO0FBQ3JCLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFDO0FBQ3BCLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0FBQ3pCLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtBQUNsQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkI7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUMzQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUk7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtBQUNyQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQUM7QUFDcEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0FBQzVDO0FBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0FBQzNCLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxvQ0FBb0MsR0FBRyxHQUFFO0FBQy9FO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyw0Q0FBNEMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDO0FBQzVILFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyx3REFBd0QsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUM1SztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSTtBQUMxRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw2QkFBNkIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLEVBQUM7QUFDMUk7QUFDQSxRQUFnQixJQUFJLENBQUMsRUFBRTtBQUN2QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQU87QUFDaEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFFO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFB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SSxFQUFFLEVBQUUsQ0FBQztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFJO0FBQzVEO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFB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QUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNoRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7QUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7QUFDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7QUFDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDM0QsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtBQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0FBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7QUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7QUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsU0FBUyxNQUFNO0FBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFB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QUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7QUFDekQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDakYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUs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QUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0IsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztBQUM5QjtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDckQ7QUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7QUFDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN4RCxhQUFhLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztBQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hELGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQztBQUNBLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEI7QUFDQSxTQUFTO0FBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6RCxRQUFRLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUM1QyxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMxQztBQUNBO0FBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFlBQVksS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUM1QyxZQUFZLElBQUksR0FBRyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssS0FBSyxDQUFDO0FBQ3JELFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckQsWUFBWSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUMxQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUc7QUFDM0M7QUFDQSxZQUFZLENBQUMsR0FBRyxVQUFVLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQzFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUMvQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDL0MsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ2hELFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNoRCxZQUFZLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUM5RDtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1RDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDckU7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDakMsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JGO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7QUFDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztBQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3pEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUNyQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0FBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7QUFDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdB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SUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3hELFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3hELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0I7QUFDQSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcs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QyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDM0M7QUFDQTtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0FBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLEdBQUc7QUFDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7QUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEM7QUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsQixHQUFHO0FBQ0g7O0FDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFB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QUFDVDtBQUNBLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7QUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0FBQy9CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztBQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztBQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7QUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFH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QUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7QUFDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUss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SUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztBQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDL0xBO0FBRUE7QUFDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtBQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztBQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUs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QU0sQ0FBQyxNQUFNLENBQUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztBQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtBQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxX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USxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzlGO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0FBQ0E7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFD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QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkc7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNwSDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDMUI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyUkE7QUFJQTtBQUNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN0QixFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUM7QUFDaEM7QUFDQSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNYLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQztBQUM3QztBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzNCLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RCxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDN0IsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pFLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekU7QUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDckMsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRO0FBQ2YsR0FBRyxPQUFPLENBQUMsQ0FBQyxRQUFRLEtBQUssVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDNUQ7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNuQjtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLEVB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QUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEMsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEQsSUFBSSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDckIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0MsS0FBSyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pELEtBQUssTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUMsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3QyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDaEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNwQyxJQUFJLE1BQU07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R0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsSUFBSSxJQUFJLENBQUMs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QUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNO0FBQ3pDLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDbEU7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ2hELE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQ2xDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEU7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN4RTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDNUIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcs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Q0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZEO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtBQUNYLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEM7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0FBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEdBQUc7QUFDVCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsR0FBRztBQUNkLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUks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 diff --git a/examples/uil_vr_test.html b/examples/uil_vr_test.html index 25aa0b4..d621251 100644 --- a/examples/uil_vr_test.html +++ b/examples/uil_vr_test.html @@ -270,19 +270,19 @@ function onMouseUp( e ){ - //console.log("onMouseUp()") + console.log("onMouseUp()") ui.triggerMouseUp(); } function onMouseDown( e ){ - //console.log("onMouseDown()") + console.log("onMouseDown()") ui.triggerMouseDown(); } function onMouseMove( e ) { - //console.log("onMouseMove()") + console.log("onMouseMove()") ui.triggerMouseMove(); raytest( e ); } diff --git a/src/core/Gui.js b/src/core/Gui.js index 2d3227f..102e37e 100644 --- a/src/core/Gui.js +++ b/src/core/Gui.js @@ -8,780 +8,784 @@ import { V2 } from "./V2.js"; */ export class Gui { - constructor(o = {}) { - this.isGui = true; + constructor(o = {}) { + this.isGui = true; - this.name = "gui"; + this.name = "gui"; - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors); - else this.colors = Tools.defineColor(o); + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); - //this.cleanning = false - - // style - this.css = Tools.cloneCss(); - - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 - - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; - - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") - ? o.addDOMEventListeners - : true; - - this.callback = o.callback === undefined ? null : o.callback; - - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; - - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - - this.cn = ""; - - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; - - this.size.h = this.size.h < 11 ? 11 : this.size.h; - - // local mouse and zone - this.local = new V2().neg(); - this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; - - // virtual mouse - this.mouse = new V2().neg(); - - this.h = 0; - //this.prevY = -1; - this.sw = 0; - - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); - - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; - - this.autoResize = o.autoResize === undefined ? true : o.autoResize; - - // default position - this.isCenter = o.center || false; - this.cssGui = - o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; - - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; - - this.isNewTarget = false; - - let cc = this.colors; - - this.content = Tools.dom( - "div", - this.css.basic + - " width:0px; height:auto; top:0px; background:" + - cc.content + - "; " + - this.cssGui - ); - - this.innerContent = Tools.dom( - "div", - this.css.basic + - "width:100%; top:0; left:0; height:auto; overflow:hidden;" - ); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); - - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom( - "div", - this.css.basic + flexible + "width:100%; left:0; " - ); - this.innerContent.appendChild(this.inner); - - // scroll - this.scrollBG = Tools.dom( - "div", - this.css.basic + - "right:0; top:0; width:" + - (this.size.s - 1) + - "px; height:10px; display:none; background:" + - cc.background + - ";" - ); - this.content.appendChild(this.scrollBG); - - this.scroll = Tools.dom( - "div", - this.css.basic + - "background:" + - cc.button + - "; right:2px; top:0; width:" + - (this.size.s - 4) + - "px; height:10px;" - ); - this.scrollBG.appendChild(this.scroll); - - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; - - let r = cc.radius; - this.bottom = Tools.dom( - "div", - this.css.txt + - "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + - r + - "px; border-bottom-left-radius:" + - r + - "px; justify-content:center; height:" + - this.bh + - "px; line-height:" + - (this.bh - 5) + - "px; color:" + - cc.text + - ";" - ); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - this.bottom.style.background = cc.background; - - // - - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; - - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } - - if (this.parent !== null) this.parent.appendChild(this.content); - - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } - - // height transition - this.transition = - o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - - this.setWidth(); - - if (this.isCanvas) this.makeCanvas(); - - Roots.add(this); - } - - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseUp(x, y) { - /* + //this.cleanning = false + + // style + this.css = Tools.cloneCss(); + + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 + + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; + + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; + + this.callback = o.callback === undefined ? null : o.callback; + + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; + + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + + this.cn = ""; + + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; + + this.size.h = this.size.h < 11 ? 11 : this.size.h; + + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + + // virtual mouse + this.mouse = new V2().neg(); + + this.h = 0; + //this.prevY = -1; + this.sw = 0; + + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); + + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; + + this.autoResize = o.autoResize === undefined ? true : o.autoResize; + + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; + + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; + + this.isNewTarget = false; + + let cc = this.colors; + + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); + + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); + + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); + + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); + + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); + + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; + + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } + + if (this.parent !== null) this.parent.appendChild(this.content); + + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } + + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + + this.setWidth(); + + if (this.isCanvas) this.makeCanvas(); + + Roots.add(this); + } + + triggerMouseDown(x, y) { + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseMove() { + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseUp(x, y) { + /* clientX,clientY are no used when isCanvas==true */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); - - Roots.needReZone = true; - } - - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = - "height " + this.transition + "s ease-out"; - this.content.style.transition = - "height " + this.transition + "s ease-out"; - this.bottom.style.transition = "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } - - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } - - // ---------------------- - // CANVAS - // ---------------------- - - onDraw() {} - - makeCanvas() { - this.canvas = document.createElementNS( - "http://www.w3.org/1999/xhtml", - "canvas" - ); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - - //console.log( this.canvas.width, this.canvas.height ) - } - - draw(force) { - if (this.canvas === null) return; - - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } - - ////// - - getDom() { - return this.content; - } - - noMouse() { - this.mouse.neg(); - } - - setMouse(uv, flip = true) { - if (flip) - this.mouse.set( - Math.round(uv.x * this.canvas.width), - this.canvas.height - Math.round(uv.y * this.canvas.height) - ); - else - this.mouse.set( - Math.round(uv.x * this.canvas.width), - Math.round(uv.y * this.canvas.height) - ); - //this.mouse.set( m.x, m.y ); - - //console.log("setMouse "+uv.x+" "+uv.y) - } - - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } - - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } - - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } - - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } - - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } - - onChange(f) { - this.callback = f || null; - return this; - } - - // ---------------------- - // STYLES - // ---------------------- - - mode(n) { - let needChange = false; - let cc = this.colors; - - if (n !== this.cn) { - this.cn = n; - - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } - - needChange = true; - } - - return needChange; - } - - // ---------------------- - // TARGET - // ---------------------- - - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } - - this.proto = null; - this.current = -1; - - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - - Roots.cursor(); - return true; - } - - // ---------------------- - // ZONE TEST - // ---------------------- - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - - this.isReset = false; - - let name = ""; - - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; - else name = l.x > s ? "scroll" : "content"; - - return name; - } - - // ---------------------- - // EVENTS - // ---------------------- - - handleEvent(e) { - //if( this.cleanning ) return - - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; - - let change = false; - let protoChange = false; - - let name = this.testZone(e); - - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); + + Roots.needReZone = true; + } + + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = + "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } + + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } + + // ---------------------- + // CANVAS + // ---------------------- + + onDraw() {} + + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + + //console.log( this.canvas.width, this.canvas.height ) + } + + draw(force) { + if (this.canvas === null) return; + + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } + + ////// + + getDom() { + return this.content; + } + + noMouse() { + this.mouse.neg(); + } + + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); + + console.log("setMouse " + uv.x + " " + uv.y); + } + + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } + + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } + + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } + + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } + + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } + + onChange(f) { + this.callback = f || null; + return this; + } + + // ---------------------- + // STYLES + // ---------------------- + + mode(n) { + let needChange = false; + let cc = this.colors; + + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } + + needChange = true; + } + + return needChange; + } + + // ---------------------- + // TARGET + // ---------------------- + + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + + this.proto = null; + this.current = -1; + + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + + Roots.cursor(); + return true; + } + + // ---------------------- + // ZONE TEST + // ---------------------- + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + this.isReset = false; + + let name = ""; + + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; + + return name; + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent(e) { + //if( this.cleanning ) return + + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; + + let change = false; + let protoChange = false; + + let name = this.testZone(e); + + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; + + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } + if (!name) return; + + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + + if (Roots.isMobile && type === "mousedown") + this.getNext(e, change); - if (!name) return; + if (this.proto) protoChange = this.proto.handleEvent(e); - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); - if (Roots.isMobile && type === "mousedown") this.getNext(e, change); + if (!Roots.lock) { + this.getNext(e, change); + } - if (this.proto) protoChange = this.proto.handleEvent(e); + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) - change = this.onWheel(e); + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) + this.update(e.clientY - this.zone.y - this.sh * 0.5); - if (!Roots.lock) { - this.getNext(e, change); - } + break; + } - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } + if (this.isDown) change = true; + if (protoChange) change = true; - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); + if (type === "keyup") change = true; + if (type === "keydown") change = true; - break; - } + if (change) this.draw(); + } - if (this.isDown) change = true; - if (protoChange) change = true; + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); - if (type === "keyup") change = true; - if (type === "keydown") change = true; + if (next !== this.current) { + this.clearTarget(); + this.current = next; + change = true; + this.isNewTarget = true; + } - if (change) this.draw(); - } + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } - if (next !== this.current) { - this.clearTarget(); - this.current = next; - change = true; - this.isNewTarget = true; - } + // ---------------------- + // RESET + // ---------------------- - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } + reset(force) { + if (this.isReset) return; - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } + //this.resetItem(); - // ---------------------- - // RESET - // ---------------------- + this.mouse.neg(); + this.isDown = false; - reset(force) { - if (this.isReset) return; + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); - //this.resetItem(); + if (r || r2) this.draw(true); - this.mouse.neg(); - this.isDown = false; + this.isReset = true; - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); + //Roots.lock = false; + } - if (r || r2) this.draw(true); + // ---------------------- + // ADD NODE + // ---------------------- - this.isReset = true; + add() { + //if(this.cleanning) this.cleanning = false - //Roots.lock = false; - } + let a = arguments; + let ontop = false; - // ---------------------- - // ADD NODE - // ---------------------- + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; - add() { - //if(this.cleanning) this.cleanning = false + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } + + let u = add.apply(this, a); + + if (u === null) return; - let a = arguments; - let ontop = false; + if (ontop) this.uis.unshift(u); + else this.uis.push(u); - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; + this.calc(); - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); - else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } - - let u = add.apply(this, a); - - if (u === null) return; + this.isEmpty = false; - if (ontop) this.uis.unshift(u); - else this.uis.push(u); + return u; + } - this.calc(); + // remove one node - this.isEmpty = false; + remove(n) { + if (n.dispose) n.dispose(); + } - return u; - } + // call after uis clear - // remove one node + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } - remove(n) { - if (n.dispose) n.dispose(); - } + // clear all gui - // call after uis clear + empty() { + //this.cleanning = true - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } + //this.close(); - // clear all gui + let i = this.uis.length, + item; - empty() { - //this.cleanning = true + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } - //this.close(); + this.uis = []; + this.isEmpty = true; + this.calc(); + } - let i = this.uis.length, - item; + clear() { + this.empty(); + } - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } + clear2() { + setTimeout(this.empty.bind(this), 0); + } - this.uis = []; - this.isEmpty = true; - this.calc(); - } + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } - clear() { - this.empty(); - } + // ---------------------- + // ITEMS SPECIAL + // ---------------------- - clear2() { - setTimeout(this.empty.bind(this), 0); - } + resetItem() { + if (!this.isItemMode) return; - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } - // ---------------------- - // ITEMS SPECIAL - // ---------------------- + setItem(name) { + if (!this.isItemMode) return; - resetItem() { - if (!this.isItemMode) return; + name = name || ""; + this.resetItem(); - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } + if (!name) { + this.update(0); + return; + } - setItem(name) { - if (!this.isItemMode) return; + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } - name = name || ""; - this.resetItem(); + // ---------------------- + // SCROLL + // ---------------------- - if (!name) { - this.update(0); - return; - } + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) - this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } + if (b) { + this.total = this.h; - // ---------------------- - // SCROLL - // ---------------------- + this.maxView = this.maxHeight; + + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; + + this.range = this.maxView - this.sh; + + this.oy = Tools.clamp(this.oy, 0, this.range); + + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } + + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } + + update(y) { + y = Tools.clamp(y, 0, this.range); - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } + + // ---------------------- + // RESIZE FUNCTION + // ---------------------- + + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } + + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } + + setHeight() { + if (this.tmp) clearTimeout(this.tmp); + + this.zone.h = this.bh; + this.isScroll = false; + + if (this.isOpen) { + this.h = this.calcUis(); + + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; + + this.maxHeight = hhh - this.zone.y - this.bh; + + let diff = this.h - this.maxHeight; - if (b) { - this.total = this.h; + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + + this.upScroll(this.isScroll); + + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + + rezone() { + Roots.needReZone = true; + } + + setWidth(w) { + if (w) this.zone.w = w; + + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = + -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } - this.maxView = this.maxHeight; - - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; - - this.range = this.maxView - this.sh; - - this.oy = Tools.clamp(this.oy, 0, this.range); - - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } - - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } - - update(y) { - y = Tools.clamp(y, 0, this.range); - - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } - - // ---------------------- - // RESIZE FUNCTION - // ---------------------- - - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } - - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } - - setHeight() { - if (this.tmp) clearTimeout(this.tmp); - - this.zone.h = this.bh; - this.isScroll = false; - - if (this.isOpen) { - this.h = this.calcUis(); - - let hhh = this.forceHeight - ? this.forceHeight + this.zone.y - : window.innerHeight; - - this.maxHeight = hhh - this.zone.y - this.bh; - - let diff = this.h - this.maxHeight; - - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } - - this.upScroll(this.isScroll); - - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; - - if (this.forceHeight && this.lockHeight) - this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } - - rezone() { - Roots.needReZone = true; - } - - setWidth(w) { - if (w) this.zone.w = w; - - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) - this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } - - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } } From f87b2133279189d764470e6376308bc74f527385 Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Sat, 13 Sep 2025 11:57:43 -0300 Subject: [PATCH 14/17] arreglos varios --- build/uil.js | 1266 +++++++++++++------------ build/uil.min.js | 1266 +++++++++++++------------ build/uil.module.js | 1266 +++++++++++++------------ examples/uil_pointer_events.html | 303 ++++++ examples/uil_treelist.html | 4 +- examples/uil_vr_test.html | 20 +- index.html | 11 + src/core/Gui.js | 1477 +++++++++++++++--------------- src/core/Roots.js | 4 + 9 files changed, 3057 insertions(+), 2560 deletions(-) create mode 100644 examples/uil_pointer_events.html diff --git a/build/uil.js b/build/uil.js index d3f718b..b80fdb5 100644 --- a/build/uil.js +++ b/build/uil.js @@ -299,6 +299,10 @@ if (R.ID.isCanvasOnly) { e.clientX = R.ID.mouse.x; e.clientY = R.ID.mouse.y; + } else if (R.ID.isCanvas) { + // NUEVO: si es canvas con parent, usar mouse virtual + offset del GUI + e.clientX = R.ID.zone.x + R.ID.mouse.x; + e.clientY = R.ID.zone.y + R.ID.mouse.y; } //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 @@ -8826,785 +8830,826 @@ */ class Gui { - constructor(o = {}) { - this.isGui = true; + constructor(o = {}) { + this.isGui = true; - this.name = "gui"; + this.name = "gui"; - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors); - else this.colors = Tools.defineColor(o); + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); - //this.cleanning = false + //this.cleanning = false - // style - this.css = Tools.cloneCss(); + // style + this.css = Tools.cloneCss(); - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") - ? o.addDOMEventListeners - : true; + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; - this.callback = o.callback === undefined ? null : o.callback; + this.callback = o.callback === undefined ? null : o.callback; - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - this.cn = ""; + this.cn = ""; - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; - this.size.h = this.size.h < 11 ? 11 : this.size.h; + this.size.h = this.size.h < 11 ? 11 : this.size.h; - // local mouse and zone - this.local = new V2().neg(); - this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; - // virtual mouse - this.mouse = new V2().neg(); + // virtual mouse + this.mouse = new V2().neg(); - this.h = 0; - //this.prevY = -1; - this.sw = 0; + this.h = 0; + //this.prevY = -1; + this.sw = 0; - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; - this.autoResize = o.autoResize === undefined ? true : o.autoResize; + this.autoResize = o.autoResize === undefined ? true : o.autoResize; - // default position - this.isCenter = o.center || false; - this.cssGui = - o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; - this.isNewTarget = false; + this.isNewTarget = false; - let cc = this.colors; + let cc = this.colors; - this.content = Tools.dom( - "div", - this.css.basic + - " width:0px; height:auto; top:0px; background:" + - cc.content + - "; " + - this.cssGui - ); + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); - this.innerContent = Tools.dom( - "div", - this.css.basic + - "width:100%; top:0; left:0; height:auto; overflow:hidden;" - ); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom( - "div", - this.css.basic + flexible + "width:100%; left:0; " - ); - this.innerContent.appendChild(this.inner); + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); - // scroll - this.scrollBG = Tools.dom( - "div", - this.css.basic + - "right:0; top:0; width:" + - (this.size.s - 1) + - "px; height:10px; display:none; background:" + - cc.background + - ";" - ); - this.content.appendChild(this.scrollBG); + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); - this.scroll = Tools.dom( - "div", - this.css.basic + - "background:" + - cc.button + - "; right:2px; top:0; width:" + - (this.size.s - 4) + - "px; height:10px;" - ); - this.scrollBG.appendChild(this.scroll); + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; - let r = cc.radius; - this.bottom = Tools.dom( - "div", - this.css.txt + - "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + - r + - "px; border-bottom-left-radius:" + - r + - "px; justify-content:center; height:" + - this.bh + - "px; line-height:" + - (this.bh - 5) + - "px; color:" + - cc.text + - ";" - ); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - this.bottom.style.background = cc.background; - - // - - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; - - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; - if (this.parent !== null) this.parent.appendChild(this.content); + // - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } - // height transition - this.transition = - o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + if (this.parent !== null) this.parent.appendChild(this.content); - this.setWidth(); + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - if (this.isCanvas) this.makeCanvas(); + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } - Roots.add(this); - } + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } + this.setWidth(); - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN, - }); - } + if (this.isCanvas) this.makeCanvas(); - triggerMouseUp(x, y) { - /* - - clientX,clientY are no used when isCanvas==true - */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } + Roots.add(this); + } - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); + triggerMouseDown(x, y) { + console.warn("Gui.triggerMouseDown is deprecated, use triggerMouseDownUV instead"); + /* + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + });*/ + } - Roots.needReZone = true; - } + triggerMouseMove() { + console.warn("Gui.triggerMouseMove is deprecated, use triggerMouseMoveUV instead"); + /* + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + });*/ + } - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = - "height " + this.transition + "s ease-out"; - this.content.style.transition = - "height " + this.transition + "s ease-out"; - this.bottom.style.transition = - "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } + triggerMouseUp(x, y) { + + console.warn("Gui.triggerMouseUp is deprecated, use triggerMouseUpUV instead"); + /* + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + });*/ + } - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } + // Gui.js + triggerMouseDownUV(u, v, { flipY = true } = {}) { + // u, v en [0,1] relativos al rect del GUI + const x = this.zone.x + Math.round(u * this.zone.w); + const y = this.zone.y + Math.round((flipY ? 1 - v : v) * this.zone.h); + Roots.handleEvent({ + type: "pointerdown", + clientX: isNaN(x) ? null : x, + clientY: isNaN(y) ? null : y, + delta: 0, + key: null, + keyCode: NaN, + }); + } - // ---------------------- - // CANVAS - // ---------------------- + triggerMouseUpUV(u, v, { flipY = true } = {}) { + const x = this.zone.x + Math.round(u * this.zone.w); + const y = this.zone.y + Math.round((flipY ? 1 - v : v) * this.zone.h); + + Roots.handleEvent({ + type: "pointerup", + clientX: isNaN(x) ? null : x, + clientY: isNaN(y) ? null : y, + delta: 0, + key: null, + keyCode: NaN, + }); + } - onDraw() {} + triggerMouseMoveUV(u, v, { flipY = true } = {}) { + const x = this.zone.x + Math.round(u * this.zone.w); + const y = this.zone.y + Math.round((flipY ? 1 - v : v) * this.zone.h); + Roots.handleEvent({ + type: "pointermove", + clientX: isNaN(x) ? null : x, + clientY: isNaN(y) ? null : y, + delta: 0, + key: null, + keyCode: NaN, + }); + } - makeCanvas() { - this.canvas = document.createElementNS( - "http://www.w3.org/1999/xhtml", - "canvas" - ); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); - //console.log( this.canvas.width, this.canvas.height ) - } + Roots.needReZone = true; + } - draw(force) { - if (this.canvas === null) return; + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } - ////// + // ---------------------- + // CANVAS + // ---------------------- - getDom() { - return this.content; - } + onDraw() {} - noMouse() { - this.mouse.neg(); - } + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - setMouse(uv, flip = true) { - if (flip) - this.mouse.set( - Math.round(uv.x * this.canvas.width), - this.canvas.height - Math.round(uv.y * this.canvas.height) - ); - else - this.mouse.set( - Math.round(uv.x * this.canvas.width), - Math.round(uv.y * this.canvas.height) - ); - //this.mouse.set( m.x, m.y ); + //console.log( this.canvas.width, this.canvas.height ) + } - console.log("setMouse " + uv.x + " " + uv.y); - } + draw(force) { + if (this.canvas === null) return; - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } + ////// - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } + getDom() { + return this.content; + } - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } + noMouse() { + this.mouse.neg(); + } - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); - onChange(f) { - this.callback = f || null; - return this; - } + //console.log("setMouse " + uv.x + " " + uv.y); + } - // ---------------------- - // STYLES - // ---------------------- + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } - mode(n) { - let needChange = false; - let cc = this.colors; - - if (n !== this.cn) { - this.cn = n; - - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } - needChange = true; - } + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } - return needChange; - } + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } - // ---------------------- - // TARGET - // ---------------------- + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } + onChange(f) { + this.callback = f || null; + return this; + } - this.proto = null; - this.current = -1; + // ---------------------- + // STYLES + // ---------------------- - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + mode(n) { + let needChange = false; + let cc = this.colors; - Roots.cursor(); - return true; - } + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } - // ---------------------- - // ZONE TEST - // ---------------------- + needChange = true; + } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; + return needChange; + } - this.isReset = false; + // ---------------------- + // TARGET + // ---------------------- - let name = ""; + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + this.proto = null; + this.current = -1; - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; - else name = l.x > s ? "scroll" : "content"; + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - return name; - } + Roots.cursor(); + return true; + } - // ---------------------- - // EVENTS - // ---------------------- + // ---------------------- + // ZONE TEST + // ---------------------- - handleEvent(e) { - //if( this.cleanning ) return + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; + this.isReset = false; - let change = false; - let protoChange = false; + let name = ""; - let name = this.testZone(e); + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } + return name; + } - if (!name) return; + // ---------------------- + // EVENTS + // ---------------------- - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + handleEvent(e) { + //if( this.cleanning ) return - if (Roots.isMobile && type === "mousedown") - this.getNext(e, change); + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; - if (this.proto) protoChange = this.proto.handleEvent(e); + let change = false; + let protoChange = false; - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) - change = this.onWheel(e); + let name = this.testZone(e); - if (!Roots.lock) { - this.getNext(e, change); - } + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) - this.update(e.clientY - this.zone.y - this.sh * 0.5); + if (!name) return; - break; - } + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - if (this.isDown) change = true; - if (protoChange) change = true; + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); - if (type === "keyup") change = true; - if (type === "keydown") change = true; + if (this.proto) protoChange = this.proto.handleEvent(e); - if (change) this.draw(); - } + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); + if (!Roots.lock) { + this.getNext(e, change); + } - if (next !== this.current) { - this.clearTarget(); - this.current = next; - this.isNewTarget = true; - } + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } + break; + } - // ---------------------- - // RESET - // ---------------------- + if (this.isDown) change = true; + if (protoChange) change = true; - reset(force) { - if (this.isReset) return; + if (type === "keyup") change = true; + if (type === "keydown") change = true; - //this.resetItem(); + if (change) this.draw(); + } - this.mouse.neg(); - this.isDown = false; + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } - if (r || r2) this.draw(true); + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } - this.isReset = true; + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } - //Roots.lock = false; - } + // ---------------------- + // RESET + // ---------------------- - // ---------------------- - // ADD NODE - // ---------------------- + reset(force) { + if (this.isReset) return; - add() { - //if(this.cleanning) this.cleanning = false + //this.resetItem(); - let a = arguments; - let ontop = false; + this.mouse.neg(); + this.isDown = false; - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); - else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } + if (r || r2) this.draw(true); - let u = add.apply(this, a); + this.isReset = true; - if (u === null) return; + //Roots.lock = false; + } - if (ontop) this.uis.unshift(u); - else this.uis.push(u); + // ---------------------- + // ADD NODE + // ---------------------- - this.calc(); + add() { + //if(this.cleanning) this.cleanning = false - this.isEmpty = false; + let a = arguments; + let ontop = false; - return u; - } + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; - // remove one node + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } - remove(n) { - if (n.dispose) n.dispose(); - } + let u = add.apply(this, a); - // call after uis clear + if (u === null) return; - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } + if (ontop) this.uis.unshift(u); + else this.uis.push(u); - // clear all gui + this.calc(); - empty() { - //this.cleanning = true + this.isEmpty = false; - //this.close(); + return u; + } - let i = this.uis.length, - item; + // remove one node - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } + remove(n) { + if (n.dispose) n.dispose(); + } - this.uis = []; - this.isEmpty = true; - this.calc(); - } + // call after uis clear - clear() { - this.empty(); - } + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } - clear2() { - setTimeout(this.empty.bind(this), 0); - } + // clear all gui - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } + empty() { + //this.cleanning = true - // ---------------------- - // ITEMS SPECIAL - // ---------------------- + //this.close(); - resetItem() { - if (!this.isItemMode) return; + let i = this.uis.length, + item; - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } - setItem(name) { - if (!this.isItemMode) return; + this.uis = []; + this.isEmpty = true; + this.calc(); + } - name = name || ""; - this.resetItem(); + clear() { + this.empty(); + } - if (!name) { - this.update(0); - return; - } + clear2() { + setTimeout(this.empty.bind(this), 0); + } - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) - this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } - // ---------------------- - // SCROLL - // ---------------------- + // ---------------------- + // ITEMS SPECIAL + // ---------------------- - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; + resetItem() { + if (!this.isItemMode) return; - if (b) { - this.total = this.h; + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } - this.maxView = this.maxHeight; + setItem(name) { + if (!this.isItemMode) return; - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; + name = name || ""; + this.resetItem(); - this.range = this.maxView - this.sh; + if (!name) { + this.update(0); + return; + } - this.oy = Tools.clamp(this.oy, 0, this.range); + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } + // ---------------------- + // SCROLL + // ---------------------- - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; - update(y) { - y = Tools.clamp(y, 0, this.range); + if (b) { + this.total = this.h; - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } + this.maxView = this.maxHeight; - // ---------------------- - // RESIZE FUNCTION - // ---------------------- + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } + this.range = this.maxView - this.sh; - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } + this.oy = Tools.clamp(this.oy, 0, this.range); - setHeight() { - if (this.tmp) clearTimeout(this.tmp); + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } - this.zone.h = this.bh; - this.isScroll = false; + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } - if (this.isOpen) { - this.h = this.calcUis(); + update(y) { + y = Tools.clamp(y, 0, this.range); - let hhh = this.forceHeight - ? this.forceHeight + this.zone.y - : window.innerHeight; + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } - this.maxHeight = hhh - this.zone.y - this.bh; + // ---------------------- + // RESIZE FUNCTION + // ---------------------- - let diff = this.h - this.maxHeight; + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } - this.upScroll(this.isScroll); + setHeight() { + if (this.tmp) clearTimeout(this.tmp); - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; + this.zone.h = this.bh; + this.isScroll = false; - if (this.forceHeight && this.lockHeight) - this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } + if (this.isOpen) { + this.h = this.calcUis(); - rezone() { - Roots.needReZone = true; - } + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; - setWidth(w) { - if (w) this.zone.w = w; + this.maxHeight = hhh - this.zone.y - this.bh; - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) - this.content.style.marginLeft = - -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } + let diff = this.h - this.maxHeight; - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + + this.upScroll(this.isScroll); + + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + + rezone() { + Roots.needReZone = true; + } + + setWidth(w) { + if (w) this.zone.w = w; + + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } } exports.Files = Files; @@ -9616,3 +9661,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvcHJvdG8vVHJlZUxpc3QuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9IGVsc2UgaWYgKFIuSUQuaXNDYW52YXMpIHtcclxuICAgICAgICAvLyBOVUVWTzogc2kgZXMgY2FudmFzIGNvbiBwYXJlbnQsIHVzYXIgbW91c2UgdmlydHVhbCArIG9mZnNldCBkZWwgR1VJXHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC56b25lLnggKyBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC56b25lLnkgKyBSLklELm1vdXNlLnk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vaWYoIFIuSUQubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IFIuSUQubWFyZ2luICogMC41XHJcblxyXG4gICAgICBSLklELmhhbmRsZUV2ZW50KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmlzTW9iaWxlICYmIGUudHlwZSA9PT0gXCJtb3VzZXVwXCIpIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgaWYgKGxlYXZlKSBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJRFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZmluZElEOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgbmV4dCA9IC0xLFxyXG4gICAgICB1LFxyXG4gICAgICB4LFxyXG4gICAgICB5O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcblxyXG4gICAgICBpZiAodS5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICB4ID0gdS5tb3VzZS54O1xyXG4gICAgICAgIHkgPSB1Lm1vdXNlLnk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgeCA9IGUuY2xpZW50WDtcclxuICAgICAgICB5ID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoUi5vblpvbmUodSwgeCwgeSkpIHtcclxuICAgICAgICBuZXh0ID0gaTtcclxuXHJcbiAgICAgICAgaWYgKG5leHQgIT09IFIuY3VycmVudCkge1xyXG4gICAgICAgICAgUi5jbGVhck9sZElEKCk7XHJcbiAgICAgICAgICBSLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgUi5JRCA9IHU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgPT09IC0xKSBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBjbGVhck9sZElEOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuSUQpIHJldHVybjtcclxuICAgIFIuY3VycmVudCA9IC0xO1xyXG4gICAgUi5JRC5yZXNldCgpO1xyXG4gICAgUi5JRCA9IG51bGw7XHJcbiAgICBSLmN1cnNvcigpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEdVSSAvIEdST1VQIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzOiAodWlzLCB6b25lLCBweSwgZ3JvdXAgPSBmYWxzZSkgPT4ge1xyXG4gICAgLy9jb25zb2xlLmxvZygnY2FsY191aXMnKVxyXG5cclxuICAgIGxldCBpID0gdWlzLmxlbmd0aCxcclxuICAgICAgdSxcclxuICAgICAgcHggPSAwLFxyXG4gICAgICBuID0gMCxcclxuICAgICAgdHcsXHJcbiAgICAgIG0sXHJcbiAgICAgIGRpdjtcclxuXHJcbiAgICBsZXQgaGVpZ2h0ID0gMDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSB1aXNbbl07XHJcbiAgICAgIG4rKztcclxuXHJcbiAgICAgIGlmICghZ3JvdXAgJiYgdS5pc0dyb3VwKSB1LmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIG0gPSB1Lm1hcmdpbjtcclxuICAgICAgLy9kaXYgPSB1Lm1hcmdpbkRpdlxyXG5cclxuICAgICAgdS56b25lLncgPSB1Lnc7XHJcbiAgICAgIHUuem9uZS5oID0gdS5oICsgbTtcclxuXHJcbiAgICAgIGlmICghdS5hdXRvV2lkdGgpIHtcclxuICAgICAgICBpZiAocHggPT09IDApIGhlaWdodCArPSB1LmggKyBtO1xyXG5cclxuICAgICAgICB1LnpvbmUueCA9IHpvbmUueCArIHB4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7IC8vICsgdS5tdG9wXHJcbiAgICAgICAgLy9pZihkaXYpIHUuem9uZS55ICs9IG0gKiAwLjVcclxuXHJcbiAgICAgICAgdHcgPSBSLmdldFdpZHRoKHUpO1xyXG4gICAgICAgIGlmICh0dykgdS56b25lLncgPSB1LncgPSB0dztcclxuICAgICAgICBlbHNlIGlmICh1LmZ3KSB1LnpvbmUudyA9IHUudyA9IHUuZnc7XHJcblxyXG4gICAgICAgIHB4ICs9IHUuem9uZS53O1xyXG5cclxuICAgICAgICBpZiAocHggPj0gem9uZS53KSB7XHJcbiAgICAgICAgICBweSArPSB1LmggKyBtO1xyXG4gICAgICAgICAgLy9pZihkaXYpIHB5ICs9IG0gKiAwLjVcclxuICAgICAgICAgIHB4ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHggPSAwO1xyXG5cclxuICAgICAgICB1LnpvbmUueCA9IHpvbmUueCArIHUuZHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTtcclxuICAgICAgICBweSArPSB1LmggKyBtO1xyXG5cclxuICAgICAgICBoZWlnaHQgKz0gdS5oICsgbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoZWlnaHQ7XHJcbiAgfSxcclxuXHJcbiAgZmluZFRhcmdldDogZnVuY3Rpb24gKHVpcywgZSkge1xyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKFIub25ab25lKHVpc1tpXSwgZS5jbGllbnRYLCBlLmNsaWVudFkpKSByZXR1cm4gaTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gLTE7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgWk9ORVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZmluZFpvbmU6IGZ1bmN0aW9uIChmb3JjZSkge1xyXG4gICAgaWYgKCFSLm5lZWRSZVpvbmUgJiYgIWZvcmNlKSByZXR1cm47XHJcblxyXG4gICAgdmFyIGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBSLmdldFpvbmUodSk7XHJcbiAgICAgIGlmICh1LmlzR3VpKSB1LmNhbGNVaXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBvblpvbmU6IGZ1bmN0aW9uIChvLCB4LCB5KSB7XHJcbiAgICBpZiAoeCA9PT0gdW5kZWZpbmVkIHx8IHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCB6ID0gby56b25lO1xyXG4gICAgbGV0IG14ID0geCAtIHoueDsgLy8gLSBvLmR4O1xyXG4gICAgbGV0IG15ID0geSAtIHoueTtcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAmJiBvLmdyb3VwLm1hcmdpbkRpdiApIG15ICs9IG8uZ3JvdXAubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICE9PSBudWxsICkgbXggLT0gby5keFxyXG5cclxuICAgIGxldCBvdmVyID0gbXggPj0gMCAmJiBteSA+PSAwICYmIG14IDw9IHoudyAmJiBteSA8PSB6Lmg7XHJcblxyXG4gICAgLy9pZiggby5tYXJnaW5EaXYgKSBteSAtPSBvLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIGlmIChvdmVyKSBvLmxvY2FsLnNldChteCwgbXkpO1xyXG4gICAgZWxzZSBvLmxvY2FsLm5lZygpO1xyXG5cclxuICAgIHJldHVybiBvdmVyO1xyXG4gIH0sXHJcblxyXG4gIGdldFdpZHRoOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy9yZXR1cm4gby5nZXREb20oKS5vZmZzZXRXaWR0aFxyXG4gICAgcmV0dXJuIG8uZ2V0RG9tKCkuY2xpZW50V2lkdGg7XHJcblxyXG4gICAgLy9sZXQgciA9IG8uZ2V0RG9tKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAvL3JldHVybiAoci53aWR0aClcclxuICAgIC8vcmV0dXJuIE1hdGguZmxvb3Ioci53aWR0aClcclxuICB9LFxyXG5cclxuICBnZXRab25lOiBmdW5jdGlvbiAobykge1xyXG4gICAgaWYgKG8uaXNDYW52YXNPbmx5KSByZXR1cm47XHJcbiAgICBsZXQgciA9IG8uZ2V0RG9tKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgLy9pZiggIXIud2lkdGggKSByZXR1cm5cclxuICAgIC8vby56b25lID0geyB4Ok1hdGguZmxvb3Ioci5sZWZ0KSwgeTpNYXRoLmZsb29yKHIudG9wKSwgdzpNYXRoLmZsb29yKHIud2lkdGgpLCBoOk1hdGguZmxvb3Ioci5oZWlnaHQpIH07XHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLnJvdW5kKHIubGVmdCksIHk6TWF0aC5yb3VuZChyLnRvcCksIHc6TWF0aC5yb3VuZChyLndpZHRoKSwgaDpNYXRoLnJvdW5kKHIuaGVpZ2h0KSB9O1xyXG4gICAgby56b25lID0geyB4OiByLmxlZnQsIHk6IHIudG9wLCB3OiByLndpZHRoLCBoOiByLmhlaWdodCB9O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coby5uYW1lLCBvLnpvbmUpXHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ1VSU09SXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjdXJzb3I6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICBuYW1lID0gbmFtZSA/IG5hbWUgOiBcImF1dG9cIjtcclxuICAgIGlmIChuYW1lICE9PSBSLm9sZEN1cnNvcikge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9IG5hbWU7XHJcbiAgICAgIFIub2xkQ3Vyc29yID0gbmFtZTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRvQ2FudmFzOiBmdW5jdGlvbiAobywgdywgaCwgZm9yY2UpIHtcclxuICAgIGlmICghUi54bWxzZXJpYWxpemVyKSBSLnhtbHNlcmlhbGl6ZXIgPSBuZXcgWE1MU2VyaWFsaXplcigpO1xyXG5cclxuICAgIC8vIHByZXZlbnQgZXhlc2l2ZSByZWRyYXdcclxuXHJcbiAgICBpZiAoZm9yY2UgJiYgUi50bXBUaW1lICE9PSBudWxsKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dChSLnRtcFRpbWUpO1xyXG4gICAgICBSLnRtcFRpbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLnRtcFRpbWUgIT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBpZiAoUi5sb2NrKVxyXG4gICAgICBSLnRtcFRpbWUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBSLnRtcFRpbWUgPSBudWxsO1xyXG4gICAgICB9LCAxMCk7XHJcblxyXG4gICAgLy8vXHJcblxyXG4gICAgbGV0IGlzTmV3U2l6ZSA9IGZhbHNlO1xyXG4gICAgaWYgKHcgIT09IG8uY2FudmFzLndpZHRoIHx8IGggIT09IG8uY2FudmFzLmhlaWdodCkgaXNOZXdTaXplID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoUi50bXBJbWFnZSA9PT0gbnVsbCkgUi50bXBJbWFnZSA9IG5ldyBJbWFnZSgpO1xyXG5cclxuICAgIGxldCBpbWcgPSBSLnRtcEltYWdlOyAvL25ldyBJbWFnZSgpO1xyXG5cclxuICAgIGxldCBodG1sU3RyaW5nID0gUi54bWxzZXJpYWxpemVyLnNlcmlhbGl6ZVRvU3RyaW5nKG8uY29udGVudCk7XHJcblxyXG4gICAgbGV0IHN2ZyA9XHJcbiAgICAgICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIicgK1xyXG4gICAgICB3ICtcclxuICAgICAgJ1wiIGhlaWdodD1cIicgK1xyXG4gICAgICBoICtcclxuICAgICAgJ1wiPjxmb3JlaWduT2JqZWN0IHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmU7IGxlZnQ6MDtcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCI+JyArXHJcbiAgICAgIGh0bWxTdHJpbmcgK1xyXG4gICAgICBcIjwvZm9yZWlnbk9iamVjdD48L3N2Zz5cIjtcclxuXHJcbiAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBsZXQgY3R4ID0gby5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG5cclxuICAgICAgaWYgKGlzTmV3U2l6ZSkge1xyXG4gICAgICAgIG8uY2FudmFzLndpZHRoID0gdztcclxuICAgICAgICBvLmNhbnZhcy5oZWlnaHQgPSBoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgIH1cclxuICAgICAgY3R4LmRyYXdJbWFnZSh0aGlzLCAwLCAwKTtcclxuXHJcbiAgICAgIG8ub25EcmF3KCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGltZy5zcmMgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHN2Zyk7XHJcbiAgICAvL2ltZy5zcmMgPSAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwnKyB3aW5kb3cuYnRvYSggc3ZnICk7XHJcbiAgICBpbWcuY3Jvc3NPcmlnaW4gPSBcIlwiO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElOUFVUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRIaWRkZW46IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSB7XHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHRzZWxlY3QgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgJ1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IHRleHQtc2hhZG93Om5vbmU7J1xyXG4gICAgICAvL2NzcyArPSAnbGVmdDoxMHB4OyB0b3A6YXV0bzsgYm9yZGVyOm5vbmU7IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDsnICsgaGlkZTtcclxuXHJcbiAgICAgIFIuaGlkZGVuSW1wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgIFIuaGlkZGVuSW1wdXQudHlwZSA9IFwidGV4dFwiO1xyXG4gICAgICAvL1IuaGlkZGVuSW1wdXQuc3R5bGUuY3NzVGV4dCA9IGNzcyArICdib3R0b206MzBweDsnICsgKFIuZGVidWdJbnB1dCA/ICcnIDogJ3RyYW5zZm9ybTpzY2FsZSgwKTsnKTtcclxuXHJcbiAgICAgIFIuaGlkZGVuU2l6ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAvL1IuaGlkZGVuU2l6ZXIuc3R5bGUuY3NzVGV4dCA9IGNzcyArICdib3R0b206NjBweDsnO1xyXG5cclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChSLmhpZGRlbkltcHV0KTtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChSLmhpZGRlblNpemVyKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaGlkZSA9IFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcIm9wYWNpdHk6MDsgekluZGV4OjA7XCI7XHJcbiAgICBsZXQgY3NzID1cclxuICAgICAgUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgIFwicGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgbGVmdDoxMHB4OyB0b3A6YXV0bzsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwO1wiICtcclxuICAgICAgaGlkZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUuY3NzVGV4dCA9XHJcbiAgICAgIGNzcyArIFwiYm90dG9tOjEwcHg7XCIgKyAoUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwidHJhbnNmb3JtOnNjYWxlKDApO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuc3R5bGUuY3NzVGV4dCA9IGNzcyArIFwiYm90dG9tOjQwcHg7XCI7XHJcblxyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS53aWR0aCA9IFIuaW5wdXQuY2xpZW50V2lkdGggKyBcInB4XCI7XHJcbiAgICBSLmhpZGRlbkltcHV0LnZhbHVlID0gUi5zdHI7XHJcbiAgICBSLmhpZGRlblNpemVyLmlubmVySFRNTCA9IFIuc3RyO1xyXG5cclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySGlkZGVuOiBmdW5jdGlvbiAocCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHJldHVybjtcclxuICAgIFIuaGFzRm9jdXMgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBjbGlja1BvczogZnVuY3Rpb24gKHgpIHtcclxuICAgIGxldCBpID0gUi5zdHIubGVuZ3RoLFxyXG4gICAgICBsID0gMCxcclxuICAgICAgbiA9IDA7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGwgKz0gUi50ZXh0V2lkdGgoUi5zdHJbbl0pO1xyXG4gICAgICBpZiAobCA+PSB4KSBicmVhaztcclxuICAgICAgbisrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG47XHJcbiAgfSxcclxuXHJcbiAgdXBJbnB1dDogZnVuY3Rpb24gKHgsIGRvd24pIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCB1cCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChkb3duKSB7XHJcbiAgICAgIGxldCBpZCA9IFIuY2xpY2tQb3MoeCk7XHJcblxyXG4gICAgICBSLm1vdmVYID0gaWQ7XHJcblxyXG4gICAgICBpZiAoUi5zdGFydFggPT09IC0xKSB7XHJcbiAgICAgICAgUi5zdGFydFggPSBpZDtcclxuICAgICAgICBSLmN1cnNvcklkID0gaWQ7XHJcbiAgICAgICAgUi5pbnB1dFJhbmdlID0gW1Iuc3RhcnRYLCBSLnN0YXJ0WF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGlzU2VsZWN0aW9uID0gUi5tb3ZlWCAhPT0gUi5zdGFydFg7XHJcblxyXG4gICAgICAgIGlmIChpc1NlbGVjdGlvbikge1xyXG4gICAgICAgICAgaWYgKFIuc3RhcnRYID4gUi5tb3ZlWCkgUi5pbnB1dFJhbmdlID0gW1IubW92ZVgsIFIuc3RhcnRYXTtcclxuICAgICAgICAgIGVsc2UgUi5pbnB1dFJhbmdlID0gW1Iuc3RhcnRYLCBSLm1vdmVYXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHVwID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLnN0YXJ0WCAhPT0gLTEpIHtcclxuICAgICAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgICAgICBSLnN0YXJ0WCA9IC0xO1xyXG5cclxuICAgICAgICB1cCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodXApIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIHVwO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdEFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLnBhcmVudCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuICAgIFIuaW5wdXRSYW5nZSA9IFswLCBSLnN0ci5sZW5ndGhdO1xyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLmN1cnNvcklkID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5zZWxlY3RQYXJlbnQoKTtcclxuICB9LFxyXG5cclxuICBzZWxlY3RQYXJlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBjID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKDAsIFIuY3Vyc29ySWQpKTtcclxuICAgIHZhciBlID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKDAsIFIuaW5wdXRSYW5nZVswXSkpO1xyXG4gICAgdmFyIHMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoUi5pbnB1dFJhbmdlWzBdLCBSLmlucHV0UmFuZ2VbMV0pKTtcclxuXHJcbiAgICBSLnBhcmVudC5zZWxlY3QoYywgZSwgcywgUi5oaWRkZW5TaXplci5pbm5lckhUTUwpO1xyXG4gIH0sXHJcblxyXG4gIHRleHRXaWR0aDogZnVuY3Rpb24gKHRleHQpIHtcclxuICAgIGlmIChSLmhpZGRlblNpemVyID09PSBudWxsKSByZXR1cm4gMDtcclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyAvZywgXCImbmJzcDtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLmlubmVySFRNTCA9IHRleHQ7XHJcbiAgICByZXR1cm4gUi5oaWRkZW5TaXplci5jbGllbnRXaWR0aDtcclxuICB9LFxyXG5cclxuICBjbGVhcklucHV0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICghUi5maXJzdEltcHV0KSBSLnBhcmVudC52YWxpZGF0ZSh0cnVlKTtcclxuXHJcbiAgICBSLmNsZWFySGlkZGVuKCk7XHJcbiAgICBSLnBhcmVudC51bnNlbGVjdCgpO1xyXG5cclxuICAgIC8vUi5pbnB1dC5zdHlsZS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5iYWNrZ3JvdW5kID0gUi5wYXJlbnQuY29sb3JzLmJhY2s7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJvcmRlckNvbG9yID0gUi5wYXJlbnQuY29sb3JzLmJvcmRlcjtcclxuICAgIC8vUi5pbnB1dC5zdHlsZS5jb2xvciA9IFIucGFyZW50LmNvbG9ycy50ZXh0O1xyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgUi5pbnB1dCA9IG51bGw7XHJcbiAgICBSLnBhcmVudCA9IG51bGw7XHJcbiAgICAoUi5zdHIgPSBcIlwiKSwgKFIuZmlyc3RJbXB1dCA9IHRydWUpO1xyXG4gIH0sXHJcblxyXG4gIHNldElucHV0OiBmdW5jdGlvbiAoSW5wdXQsIHBhcmVudCkge1xyXG4gICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUi5pbnB1dCA9IElucHV0O1xyXG4gICAgUi5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG4gICAgUi5pbnB1dC5zdHlsZS5iYWNrZ3JvdW5kID0gUi5wYXJlbnQuY29sb3JzLmJhY2tvZmY7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJvcmRlckNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnNlbGVjdDtcclxuICAgIC8vUi5pbnB1dC5zdHlsZS5jb2xvciA9IFIucGFyZW50LmNvbG9ycy50ZXh0U2VsZWN0O1xyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG5cclxuICAgIFIuc2V0SGlkZGVuKCk7XHJcbiAgfSxcclxuXHJcbiAga2V5ZG93bjogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBrZXlDb2RlID0gZS53aGljaCxcclxuICAgICAgaXNTaGlmdCA9IGUuc2hpZnRLZXk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZygga2V5Q29kZSApXHJcblxyXG4gICAgUi5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKFIuaGFzRm9jdXMpIHtcclxuICAgICAgLy8gaGFjayB0byBmaXggdG91Y2ggZXZlbnQgYnVnIGluIGlPUyBTYWZhcmlcclxuICAgICAgd2luZG93LmZvY3VzKCk7XHJcbiAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSB0cnVlO1xyXG5cclxuICAgIC8vIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAvLyBhZGQgc3VwcG9ydCBmb3IgQ3RybC9DbWQrQSBzZWxlY3Rpb25cclxuICAgIC8vaWYgKCBrZXlDb2RlID09PSA2NSAmJiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSApKSB7XHJcbiAgICAvL1Iuc2VsZWN0VGV4dCgpO1xyXG4gICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAvL3JldHVybiBzZWxmLnJlbmRlcigpO1xyXG4gICAgLy99XHJcblxyXG4gICAgaWYgKGtleUNvZGUgPT09IDEzKSB7XHJcbiAgICAgIC8vZW50ZXJcclxuXHJcbiAgICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgICAgLy99IGVsc2UgaWYoIGtleUNvZGUgPT09IDkgKXsgLy90YWIga2V5XHJcblxyXG4gICAgICAvLyBSLmlucHV0LnRleHRDb250ZW50ID0gJyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5pbnB1dC5pc051bSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIChlLmtleUNvZGUgPiA0NyAmJiBlLmtleUNvZGUgPCA1OCkgfHxcclxuICAgICAgICAgIChlLmtleUNvZGUgPiA5NSAmJiBlLmtleUNvZGUgPCAxMDYpIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDE5MCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxMTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gOCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxMDlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIGtleXVwOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmhpZGRlbkltcHV0LnZhbHVlO1xyXG5cclxuICAgIGlmIChSLnBhcmVudC5hbGxFcXVhbCkgUi5wYXJlbnQuc2FtZVN0cihSLnN0cik7IC8vIG51bWVyaWMgc2Ftw7llIHZhbHVlXHJcbiAgICBlbHNlIFIuaW5wdXQudGV4dENvbnRlbnQgPSBSLnN0cjtcclxuXHJcbiAgICBSLmN1cnNvcklkID0gUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydDtcclxuICAgIFIuaW5wdXRSYW5nZSA9IFtSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0LCBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZF07XHJcblxyXG4gICAgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICAvL2lmKCBSLnBhcmVudC5hbGx3YXkgKVxyXG4gICAgUi5wYXJlbnQudmFsaWRhdGUoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy9cclxuICAvLyAgIExJU1RFTklOR1xyXG4gIC8vXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvKlxyXG4gICAgLy8gZXN0YSBlcmEgbGEgZnVuY2lvbiBvcmlnaW5hbFxyXG4gICAgbG9vcDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiggUi5pc0xvb3AgKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIFIubG9vcCApO1xyXG4gICAgICAgIFIudXBkYXRlKCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgKi9cclxuXHJcbiAgbG9vcDogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKFIuaXNMb29wKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUi5sb29wKTtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBSLnVwZGF0ZSgpO1xyXG4gICAgLy8gaWYgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gYSB2YWx1ZSBnZW5lcmF0ZWQgZXh0ZXJuYWxseSwgdGhlIEdVSSBuZWVkcyB0byBiZSByZWRyYXduXHJcbiAgICBpZiAoUi51aVswXSAmJiBSLm5lZWRzVXBkYXRlKSBSLnVpWzBdLmRyYXcoKTtcclxuICB9LFxyXG5cclxuICB1cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGxldCBpID0gUi5saXN0ZW5zLmxlbmd0aDtcclxuICAgIGxldCBuZWVkc1VwZGF0ZSA9IGZhbHNlO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAvL2NoZWNrIGlmIHRoZSB2YWx1ZSBvZiB0aGUgb2JqZWN0IGhhcyBjaGFuZ2VkXHJcbiAgICAgIGxldCBoYXNDaGFuZ2VkID0gUi5saXN0ZW5zW2ldLmxpc3RlbmluZygpO1xyXG4gICAgICBpZiAoaGFzQ2hhbmdlZCkgbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5lZWRzVXBkYXRlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUxpc3RlbjogZnVuY3Rpb24gKHByb3RvKSB7XHJcbiAgICBsZXQgaWQgPSBSLmxpc3RlbnMuaW5kZXhPZihwcm90byk7XHJcbiAgICBpZiAoaWQgIT09IC0xKSBSLmxpc3RlbnMuc3BsaWNlKGlkLCAxKTtcclxuICAgIGlmIChSLmxpc3RlbnMubGVuZ3RoID09PSAwKSBSLmlzTG9vcCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGFkZExpc3RlbjogZnVuY3Rpb24gKHByb3RvKSB7XHJcbiAgICBsZXQgaWQgPSBSLmxpc3RlbnMuaW5kZXhPZihwcm90byk7XHJcblxyXG4gICAgaWYgKGlkICE9PSAtMSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFIubGlzdGVucy5wdXNoKHByb3RvKTtcclxuXHJcbiAgICBpZiAoIVIuaXNMb29wKSB7XHJcbiAgICAgIFIuaXNMb29wID0gdHJ1ZTtcclxuICAgICAgUi5sb29wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfSxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBSb290cyA9IFI7XHJcbiIsIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcblxyXG5jb25zdCBUID0ge1xyXG5cclxuICAgIHRyYW5zaXRpb246IDAuMixcclxuXHJcbiAgICBmcmFnOiBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXHJcblxyXG4gICAgY29sb3JSaW5nOiBudWxsLFxyXG4gICAgam95c3RpY2tfMDogbnVsbCxcclxuICAgIGpveXN0aWNrXzE6IG51bGwsXHJcbiAgICBjaXJjdWxhcjogbnVsbCxcclxuICAgIGtub2I6IG51bGwsXHJcbiAgICBwYWQyZDogbnVsbCxcclxuXHJcbiAgICBzdmduczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxyXG4gICAgbGlua3M6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxyXG4gICAgaHRtbHM6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFxyXG5cclxuICAgIERPTV9TSVpFOiBbICdoZWlnaHQnLCAnd2lkdGgnLCAndG9wJywgJ2xlZnQnLCAnYm90dG9tJywgJ3JpZ2h0JywgJ21hcmdpbi1sZWZ0JywgJ21hcmdpbi1yaWdodCcsICdtYXJnaW4tdG9wJywgJ21hcmdpbi1ib3R0b20nXSxcclxuICAgIFNWR19UWVBFX0Q6IFsgJ3BhdHRlcm4nLCAnZGVmcycsICd0cmFuc2Zvcm0nLCAnc3RvcCcsICdhbmltYXRlJywgJ3JhZGlhbEdyYWRpZW50JywgJ2xpbmVhckdyYWRpZW50JywgJ2FuaW1hdGVNb3Rpb24nLCAndXNlJywgJ2ZpbHRlcicsICdmZUNvbG9yTWF0cml4JyBdLFxyXG4gICAgU1ZHX1RZUEVfRzogWyAnc3ZnJywgJ3JlY3QnLCAnY2lyY2xlJywgJ3BhdGgnLCAncG9seWdvbicsICd0ZXh0JywgJ2cnLCAnbGluZScsICdmb3JlaWduT2JqZWN0JyBdLFxyXG5cclxuICAgIFBJOiBNYXRoLlBJLFxyXG4gICAgVHdvUEk6IE1hdGguUEkqMixcclxuICAgIHBpOTA6IE1hdGguUEkgKiAwLjUsXHJcbiAgICBwaTYwOiBNYXRoLlBJLzMsXHJcbiAgICBcclxuICAgIHRvcmFkOiBNYXRoLlBJIC8gMTgwLFxyXG4gICAgdG9kZWc6IDE4MCAvIE1hdGguUEksXHJcblxyXG4gICAgY2xhbXA6ICggdiwgbWluLCBtYXggKSA9PiB7XHJcblxyXG4gICAgICAgIHYgPSB2IDwgbWluID8gbWluIDogdjtcclxuICAgICAgICB2ID0gdiA+IG1heCA/IG1heCA6IHY7XHJcbiAgICAgICAgcmV0dXJuIHY7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpc0RpdmlkOiAoIHYgKSA9PiAoIHYqMC41ID09PSBNYXRoLmZsb29yKHYqMC41KSApLFxyXG5cclxuICAgIHNpemU6IHsgIHc6IDI0MCwgaDogMjAsIHA6IDMwLCBzOiA4IH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBDT0xPUlxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZUNvbG9yOiAoIG8sIGNjID0gVC5jb2xvcnMgKSA9PiB7XHJcblxyXG4gICAgICAgIGxldCBjb2xvciA9IHsgLi4uY2MgfVxyXG5cclxuICAgICAgICBsZXQgdGV4dENoYW5nZSA9IFsnZm9udEZhbWlseScsICdmb250V2VpZ2h0JywgJ2ZvbnRTaGFkb3cnLCAnZm9udFNpemUnIF1cclxuICAgICAgICBsZXQgY2hhbmdlVGV4dCA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnQgKSBvLmZvbnRGYW1pbHkgPSBvLmZvbnRcclxuICAgICAgICBpZiggby5zaGFkb3cgKSBvLmZvbnRTaGFkb3cgPSBvLnNoYWRvd1xyXG4gICAgICAgIGlmKCBvLndlaWdodCApIG8uZm9udFdlaWdodCA9IG8ud2VpZ2h0XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRDb2xvciApIG8udGV4dCA9IG8uZm9udENvbG9yXHJcbiAgICAgICAgaWYoIG8uY29sb3IgKSBvLnRleHQgPSBvLmNvbG9yXHJcblxyXG4gICAgICAgIGlmKCBvLnRleHQgKXtcclxuICAgICAgICAgICAgY29sb3IudGV4dCA9IG8udGV4dFxyXG4gICAgICAgICAgICBpZiggIW8uZm9udENvbG9yICYmICFvLmNvbG9yICl7IFxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGUgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC4yNSApXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZW9mZiA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjUgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHRPdmVyID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC4yNSApXHJcbiAgICAgICAgICAgIGNvbG9yLnRleHRTZWxlY3QgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uYnV0dG9uICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJ1dHRvbiA9IG8uYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbG9yLmJvcmRlciA9IFQuQ29sb3JMdW1hKCBvLmJ1dHRvbiwgMC4xIClcclxuICAgICAgICAgICAgY29sb3Iub3Zlcm9mZiA9IFQuQ29sb3JMdW1hKCBvLmJ1dHRvbiwgMC4yIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCApe1xyXG4gICAgICAgICAgICBjb2xvci5zZWxlY3QgPSBvLnNlbGVjdFxyXG4gICAgICAgICAgICBjb2xvci5vdmVyID0gVC5Db2xvckx1bWEoIG8uc2VsZWN0LCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLml0ZW1CZyApIG8uYmFjayA9IG8uaXRlbUJnXHJcblxyXG4gICAgICAgIGlmKCBvLmJhY2sgKXtcclxuICAgICAgICAgICAgY29sb3IuYmFjayA9IG8uYmFja1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrb2ZmID0gVC5Db2xvckx1bWEoIG8uYmFjaywgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5mb250U2VsZWN0ICkgY29sb3IudGV4dFNlbGVjdCA9IG8uZm9udFNlbGVjdFxyXG4gICAgICAgIGlmKCBvLmdyb3VwQm9yZGVyICkgY29sb3IuZ2JvcmRlciA9IG8uZ3JvdXBCb3JkZXJcclxuXHJcbiAgICAgICAgLy9pZiggby50cmFuc3BhcmVudCApIG8uYmcgPSAnbm9uZSdcclxuICAgICAgICAvL2lmKCBvLmJnICkgY29sb3IuYmFja2dyb3VuZCA9IGNvbG9yLmJhY2tncm91bmRPdmVyID0gby5iZ1xyXG4gICAgICAgIGlmKCBvLmJnT3ZlciApIGNvbG9yLmJhY2tncm91bmRPdmVyID0gby5iZ092ZXJcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBjb2xvciApe1xyXG4gICAgICAgICAgICBpZihvW21dIT09dW5kZWZpbmVkKSBjb2xvclttXSA9IG9bbV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gbyApe1xyXG4gICAgICAgICAgICBpZiggdGV4dENoYW5nZS5pbmRleE9mKG0pICE9PSAtMSApIGNoYW5nZVRleHQgPSB0cnVlIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNoYW5nZVRleHQgKSBULmRlZmluZVRleHQoIGNvbG9yIClcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbG9yXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjb2xvcnM6IHtcclxuXHJcbiAgICAgICAgc3g6IDQsLy80XHJcbiAgICAgICAgc3k6IDIsLy8yXHJcbiAgICAgICAgcmFkaXVzOjIsXHJcblxyXG4gICAgICAgIHNob3dPdmVyIDogMSxcclxuICAgICAgICAvL2dyb3VwT3ZlciA6IDEsXHJcblxyXG4gICAgICAgIGNvbnRlbnQ6J25vbmUnLFxyXG4gICAgICAgIGJhY2tncm91bmQ6ICdyZ2JhKDUwLDUwLDUwLDAuMTUpJyxcclxuICAgICAgICBiYWNrZ3JvdW5kT3ZlcjogJ3JnYmEoNTAsNTAsNTAsMC4zKScsXHJcblxyXG4gICAgICAgIHRpdGxlIDogJyNDQ0MnLFxyXG4gICAgICAgIHRpdGxlb2ZmIDogJyNCQkInLFxyXG4gICAgICAgIHRleHQgOiAnI0RERCcsXHJcbiAgICAgICAgdGV4dE92ZXIgOiAnI0VFRScsXHJcbiAgICAgICAgdGV4dFNlbGVjdCA6ICcjRkZGJyxcclxuICAgICAgICBcclxuICAgICAgICBiYWNrOidyZ2JhKDAsMCwwLDAuMiknLFxyXG4gICAgICAgIGJhY2tvZmY6J3JnYmEoMCwwLDAsMC4zKScsXHJcblxyXG4gICAgICAgIC8vIGlucHV0IGFuZCBidXR0b24gYm9yZGVyXHJcbiAgICAgICAgYm9yZGVyIDogJyM0YzRjNGMnLFxyXG4gICAgICAgIGJvcmRlclNpemUgOiAxLFxyXG5cclxuICAgICAgICBnYm9yZGVyIDogJ25vbmUnLFxyXG4gICAgICAgIGdyb3VwcyA6ICdub25lJyxcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgYnV0dG9uIDogJyMzYzNjM2MnLFxyXG4gICAgICAgIG92ZXJvZmYgOiAnIzVjNWM1YycsXHJcbiAgICAgICAgb3ZlciA6ICcjMDI0Njk5JyxcclxuICAgICAgICBzZWxlY3QgOiAnIzMwOEFGRicsXHJcbiAgICAgICAgYWN0aW9uOiAnI0ZGMzMwMCcsXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9mb250RmFtaWx5OiAnVGFob21hJyxcclxuICAgICAgICBmb250RmFtaWx5OiAnQ29uc29sYXMsIG1vbm9zcGFjZScsXHJcbiAgICAgICAgLy9mb250RmFtaWx5OiBcIidSb2JvdG8gTW9ubycsICdTb3VyY2UgQ29kZSBQcm8nLCBNZW5sbywgQ291cmllciwgbW9ub3NwYWNlXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogJ25vcm1hbCcsXHJcbiAgICAgICAgZm9udFNoYWRvdzogJ25vbmUnLC8vJyMwMDAnLFxyXG4gICAgICAgIGZvbnRTaXplOjEyLFxyXG5cclxuICAgICAgICBqb3lPdmVyOidyZ2JhKDQ4LDEzOCwyNTUsMC4yNSknLFxyXG4gICAgICAgIGpveU91dDogJ3JnYmEoMTAwLDEwMCwxMDAsMC41KScsXHJcbiAgICAgICAgam95U2VsZWN0OiAnIzMwOEFGRicsXHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIGhpZGU6ICdyZ2JhKDAsMCwwLDApJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN0eWxlIGNzc1xyXG5cclxuICAgIGNzcyA6IHtcclxuXHJcbiAgICAgICAgYmFzaWM6ICdwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsgYm94LXNpemluZzpib3JkZXItYm94OyBtYXJnaW46MDsgcGFkZGluZzowOyBvdmVyZmxvdzpoaWRkZW47ICcgKyAnLW8tdXNlci1zZWxlY3Q6bm9uZTsgLW1zLXVzZXItc2VsZWN0Om5vbmU7IC1raHRtbC11c2VyLXNlbGVjdDpub25lOyAtd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7IC1tb3otdXNlci1zZWxlY3Q6bm9uZTsnLFxyXG4gICAgICAgIGJ1dHRvbjonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOycsXHJcbiAgICAgICAgbWlkZGxlOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmxlZnQ7IHRleHQtYWxpZ246bGVmdDsgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOydcclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3ZnIHBhdGhcclxuXHJcbiAgICBzdmdzOiB7XHJcblxyXG4gICAgICAgIGcxOidNIDYgNCBMIDAgNCAwIDYgNiA2IDYgNCBNIDYgMCBMIDAgMCAwIDIgNiAyIDYgMCBaJyxcclxuICAgICAgICBnMjonTSA2IDAgTCA0IDAgNCA2IDYgNiA2IDAgTSAyIDAgTCAwIDAgMCA2IDIgNiAyIDAgWicsXHJcblxyXG4gICAgICAgIGdyb3VwOidNIDcgNyBMIDcgOCA4IDggOCA3IDcgNyBNIDUgNyBMIDUgOCA2IDggNiA3IDUgNyBNIDMgNyBMIDMgOCA0IDggNCA3IDMgNyBNIDcgNSBMIDcgNiA4IDYgOCA1IDcgNSBNIDYgNiBMIDYgNSA1IDUgNSA2IDYgNiBNIDcgMyBMIDcgNCA4IDQgOCAzIDcgMyBNIDYgNCBMIDYgMyA1IDMgNSA0IDYgNCBNIDMgNSBMIDMgNiA0IDYgNCA1IDMgNSBNIDMgMyBMIDMgNCA0IDQgNCAzIDMgMyBaJyxcclxuICAgICAgICBhcnJvdzonTSAzIDggTCA4IDUgMyAyIDMgOCBaJyxcclxuXHJcbiAgICAgICAgYXJyb3dEb3duOidNIDUgOCBMIDggMyAyIDMgNSA4IFonLFxyXG4gICAgICAgIGFycm93VXA6J00gNSAyIEwgMiA3IDggNyA1IDIgWicsXHJcblxyXG4gICAgICAgIHNvbGlkOidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIFonLFxyXG4gICAgICAgIGJvZHk6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgTSA1IDQgTCA0IDUgNCAxMCA5IDEwIDEwIDkgMTAgNCA1IDQgWicsXHJcbiAgICAgICAgdmVoaWNsZTonTSAxMyA2IEwgMTEgMSAzIDEgMSA2IDEgMTMgMyAxMyAzIDExIDExIDExIDExIDEzIDEzIDEzIDEzIDYgTSAyLjQgNiBMIDQgMiAxMCAyIDExLjYgNiAyLjQgNiBNIDEyIDggTCAxMiAxMCAxMCAxMCAxMCA4IDEyIDggTSA0IDggTCA0IDEwIDIgMTAgMiA4IDQgOCBaJyxcclxuICAgICAgICBhcnRpY3VsYXRpb246J00gMTMgOSBMIDEyIDkgOSAyIDkgMSA1IDEgNSAyIDIgOSAxIDkgMSAxMyA1IDEzIDUgOSA0IDkgNiA1IDggNSAxMCA5IDkgOSA5IDEzIDEzIDEzIDEzIDkgWicsXHJcbiAgICAgICAgY2hhcmFjdGVyOidNIDEzIDQgTCAxMiAzIDkgNCA1IDQgMiAzIDEgNCA1IDYgNSA4IDQgMTMgNiAxMyA3IDkgOCAxMyAxMCAxMyA5IDggOSA2IDEzIDQgTSA2IDEgTCA2IDMgOCAzIDggMSA2IDEgWicsXHJcbiAgICAgICAgdGVycmFpbjonTSAxMyA4IEwgMTIgNyBRIDkuMDYgLTMuNjcgNS45NSA0Ljg1IDQuMDQgMy4yNyAyIDcgTCAxIDggNyAxMyAxMyA4IE0gMyA4IFEgMy43OCA1LjQyMCA1LjQgNi42IDUuMjAgNy4yNSA1IDggTCA3IDggUSA4LjM5IC0wLjE2IDExIDggTCA3IDExIDMgOCBaJyxcclxuICAgICAgICBqb2ludDonTSA3LjcgNy43IFEgOCA3LjQ1IDggNyA4IDYuNiA3LjcgNi4zIDcuNDUgNiA3IDYgNi42IDYgNi4zIDYuMyA2IDYuNiA2IDcgNiA3LjQ1IDYuMyA3LjcgNi42IDggNyA4IDcuNDUgOCA3LjcgNy43IE0gMy4zNSA4LjY1IEwgMSAxMSAzIDEzIDUuMzUgMTAuNjUgUSA2LjEgMTEgNyAxMSA4LjI4IDExIDkuMjUgMTAuMjUgTCA3LjggOC44IFEgNy40NSA5IDcgOSA2LjE1IDkgNS41NSA4LjQgNSA3Ljg1IDUgNyA1IDYuNTQgNS4xNSA2LjE1IEwgMy43IDQuNyBRIDMgNS43MTIgMyA3IDMgNy45IDMuMzUgOC42NSBNIDEwLjI1IDkuMjUgUSAxMSA4LjI4IDExIDcgMTEgNi4xIDEwLjY1IDUuMzUgTCAxMyAzIDExIDEgOC42NSAzLjM1IFEgNy45IDMgNyAzIDUuNyAzIDQuNyAzLjcgTCA2LjE1IDUuMTUgUSA2LjU0IDUgNyA1IDcuODUgNSA4LjQgNS41NSA5IDYuMTUgOSA3IDkgNy40NSA4LjggNy44IEwgMTAuMjUgOS4yNSBaJyxcclxuICAgICAgICByYXk6J00gOSAxMSBMIDUgMTEgNSAxMiA5IDEyIDkgMTEgTSAxMiA1IEwgMTEgNSAxMSA5IDEyIDkgMTIgNSBNIDExLjUgMTAgUSAxMC45IDEwIDEwLjQ1IDEwLjQ1IDEwIDEwLjkgMTAgMTEuNSAxMCAxMi4yIDEwLjQ1IDEyLjU1IDEwLjkgMTMgMTEuNSAxMyAxMi4yIDEzIDEyLjU1IDEyLjU1IDEzIDEyLjIgMTMgMTEuNSAxMyAxMC45IDEyLjU1IDEwLjQ1IDEyLjIgMTAgMTEuNSAxMCBNIDkgMTAgTCAxMCA5IDIgMSAxIDIgOSAxMCBaJyxcclxuICAgICAgICBjb2xsaXNpb246J00gMTEgMTIgTCAxMyAxMCAxMCA3IDEzIDQgMTEgMiA3LjUgNS41IDkgNyA3LjUgOC41IDExIDEyIE0gMyAyIEwgMSA0IDQgNyAxIDEwIDMgMTIgOCA3IDMgMiBaJyxcclxuICAgICAgICBtYXA6J00gMTMgMSBMIDEgMSAxIDEzIDEzIDEzIDEzIDEgTSAxMiAyIEwgMTIgNyA3IDcgNyAxMiAyIDEyIDIgNyA3IDcgNyAyIDEyIDIgWicsXHJcbiAgICAgICAgbWF0ZXJpYWw6J00gMTMgMSBMIDEgMSAxIDEzIDEzIDEzIDEzIDEgTSAxMiAyIEwgMTIgNyA3IDcgNyAxMiAyIDEyIDIgNyA3IDcgNyAyIDEyIDIgWicsXHJcbiAgICAgICAgdGV4dHVyZTonTSAxMyA0IEwgMTMgMSAxIDEgMSA0IDUgNCA1IDEzIDkgMTMgOSA0IDEzIDQgWicsXHJcbiAgICAgICAgb2JqZWN0OidNIDEwIDEgTCA3IDQgNCAxIDEgMSAxIDEzIDQgMTMgNCA1IDcgOCAxMCA1IDEwIDEzIDEzIDEzIDEzIDEgMTAgMSBaJyxcclxuICAgICAgICBub25lOidNIDkgNSBMIDUgNSA1IDkgOSA5IDkgNSBaJyxcclxuICAgICAgICBjdXJzb3I6J00gNCA3IEwgMSAxMCAxIDEyIDIgMTMgNCAxMyA3IDEwIDkgMTQgMTQgMCAwIDUgNCA3IFonLFxyXG4gICAgICAgIGxvYWQ6J00gMTMgOCBMIDExLjUgNi41IDkgOSA5IDMgNSAzIDUgOSAyLjUgNi41IDEgOCA3IDE0IDEzIDggTSA5IDIgTCA5IDAgNSAwIDUgMiA5IDIgWicsXHJcbiAgICAgICAgc2F2ZTonTSA5IDEyIEwgNSAxMiA1IDE0IDkgMTQgOSAxMiBNIDExLjUgNy41IEwgMTMgNiA3IDAgMSA2IDIuNSA3LjUgNSA1IDUgMTEgOSAxMSA5IDUgMTEuNSA3LjUgWicsXHJcbiAgICAgICAgZXh0ZXJuOidNIDE0IDE0IEwgMTQgMCAwIDAgMCAxNCAxNCAxNCBNIDEyIDYgTCAxMiAxMiAyIDEyIDIgNiAxMiA2IE0gMTIgMiBMIDEyIDQgMiA0IDIgMiAxMiAyIFonLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcmV6b25lICgpIHtcclxuICAgICAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0SW1wdXQ6IGZ1bmN0aW9uKCl7XHJcblxyXG4gICAgICAgIHJldHVybiBSb290cy5pbnB1dCA/IHRydWUgOiBmYWxzZVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0U3R5bGUgOiBmdW5jdGlvbiAoIGRhdGEgKXtcclxuXHJcbiAgICAgICAgZm9yICggdmFyIG8gaW4gZGF0YSApe1xyXG4gICAgICAgICAgICBpZiggVC5jb2xvcnNbb10gKSBULmNvbG9yc1tvXSA9IGRhdGFbb107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULnNldFRleHQoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIGN1c3RvbSB0ZXh0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lVGV4dDogZnVuY3Rpb24oIG8gKXtcclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCBvLmZvbnRTaXplLCBvLnRleHQsIG8uZm9udEZhbWlseSwgby5mb250U2hhZG93LCBvLmZvbnRXZWlnaHQgKVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0VGV4dDogZnVuY3Rpb24oIHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3csIHdlaWdodCApe1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBULmNvbG9ycztcclxuXHJcbiAgICAgICAgaWYoIGZvbnQgPT09IHVuZGVmaW5lZCApIGZvbnQgPSBjYy5mb250RmFtaWx5XHJcbiAgICAgICAgaWYoIHNpemUgPT09IHVuZGVmaW5lZCApIHNpemUgPSBjYy5mb250U2l6ZVxyXG4gICAgICAgIGlmKCBzaGFkb3cgPT09IHVuZGVmaW5lZCApIHNoYWRvdyA9IGNjLmZvbnRTaGFkb3dcclxuICAgICAgICBpZiggd2VpZ2h0ID09PSB1bmRlZmluZWQgKSB3ZWlnaHQgPSBjYy5mb250V2VpZ2h0XHJcbiAgICAgICAgaWYoIGNvbG9yID09PSB1bmRlZmluZWQgKSBjb2xvciA9IGNjLnRleHRcclxuXHJcbiAgICAgICAgaWYoIGlzTmFOKHNpemUpICl7IGlmKCBzaXplLnNlYXJjaCgnZW0nKT09PS0xICkgc2l6ZSArPSAncHgnfVxyXG4gICAgICAgIGVsc2Ugc2l6ZSArPSAncHgnXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vbGV0IGFsaWduID0gJ2Rpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmxlZnQ7IGFsaWduLWl0ZW1zOmNlbnRlcjsgdGV4dC1hbGlnbjpsZWZ0OydcclxuXHJcbiAgICAgICAgVC5jc3MudHh0ID0gVC5jc3MuYmFzaWMgKyBULmNzcy5taWRkbGUgKyAnIGZvbnQtZmFtaWx5OicrIGZvbnQgKyc7IGZvbnQtd2VpZ2h0Oicrd2VpZ2h0Kyc7IGZvbnQtc2l6ZTonK3NpemUrJzsgY29sb3I6JytjYy50ZXh0Kyc7IHBhZGRpbmc6MHB4IDhweDsgbGVmdDowOyB0b3A6MnB4OyBoZWlnaHQ6MTZweDsgd2lkdGg6MTAwcHg7IG92ZXJmbG93OmhpZGRlbjsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsnO1xyXG4gICAgICAgIGlmKCBzaGFkb3cgIT09ICdub25lJyApIFQuY3NzLnR4dCArPSAnIHRleHQtc2hhZG93OiAxcHggMXB4IDFweCAnK3NoYWRvdysnOyc7XHJcblxyXG4gICAgICAgIFQuY3NzLnR4dHNlbGVjdCA9IFQuY3NzLnR4dCArICdwYWRkaW5nOjBweCA0cHg7IGJvcmRlcjoxcHggZGFzaGVkICcgKyBjYy5ib3JkZXIgKyAnOyc7XHJcbiAgICAgICAgVC5jc3MuaXRlbSA9IFQuY3NzLnR4dCArICdwYWRkaW5nOjBweCA0cHg7IHBvc2l0aW9uOnJlbGF0aXZlOyBtYXJnaW4tYm90dG9tOjFweDsgJ1xyXG5cclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8vIG5vdGVcclxuXHJcbiAgICAvL2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0NTUy9jc3NfZmxleGlibGVfYm94X2xheW91dC9hbGlnbmluZ19pdGVtc19pbl9hX2ZsZXhfY29udGFpbmVyXHJcblxyXG4gICAgLypjbG9uZUNvbG9yOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IE9iamVjdC5hc3NpZ24oe30sIFQuY29sb3JzICk7XHJcbiAgICAgICAgcmV0dXJuIGNjO1xyXG5cclxuICAgIH0sKi9cclxuXHJcbiAgICAvLyBpbnRlcm4gZnVuY3Rpb25cclxuXHJcbiAgICBjbG9uZUNzczogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAvL2xldCBjYyA9IE9iamVjdC5hc3NpZ24oe30sIFQuY3NzICk7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4uVC5jc3MgfTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoIG8gKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBvLmNsb25lTm9kZSggdHJ1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0U3ZnOiBmdW5jdGlvbiggZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMiApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IC0xICkgZG9tLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG4gICAgICAgIGVsc2UgaWYoIGlkMiAhPT0gdW5kZWZpbmVkICkgZG9tLmNoaWxkTm9kZXNbIGlkIHx8IDAgXS5jaGlsZE5vZGVzWyBpZDIgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG4gICAgICAgIGVsc2UgZG9tLmNoaWxkTm9kZXNbIGlkIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldENzczogZnVuY3Rpb24oIGRvbSwgY3NzICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IHIgaW4gY3NzICl7XHJcbiAgICAgICAgICAgIGlmKCBULkRPTV9TSVpFLmluZGV4T2YocikgIT09IC0xICkgZG9tLnN0eWxlW3JdID0gY3NzW3JdICsgJ3B4JztcclxuICAgICAgICAgICAgZWxzZSBkb20uc3R5bGVbcl0gPSBjc3Nbcl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbiggZywgbyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCBhdHQgaW4gbyApe1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAndHh0JyApIGcudGV4dENvbnRlbnQgPSBvWyBhdHQgXTtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ2xpbmsnICkgZy5zZXRBdHRyaWJ1dGVOUyggVC5saW5rcywgJ3hsaW5rOmhyZWYnLCBvWyBhdHQgXSApO1xyXG4gICAgICAgICAgICBlbHNlIGcuc2V0QXR0cmlidXRlTlMoIG51bGwsIGF0dCwgb1sgYXR0IF0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oIGRvbSwgaWQgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tOyAvLyByb290XHJcbiAgICAgICAgZWxzZSBpZiggIWlzTmFOKCBpZCApICkgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCBdOyAvLyBmaXJzdCBjaGlsZFxyXG4gICAgICAgIGVsc2UgaWYoIGlkIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgaWYoaWQubGVuZ3RoID09PSAyKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkWzBdIF0uY2hpbGROb2Rlc1sgaWRbMV0gXTtcclxuICAgICAgICAgICAgaWYoaWQubGVuZ3RoID09PSAzKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkWzBdIF0uY2hpbGROb2Rlc1sgaWRbMV0gXS5jaGlsZE5vZGVzWyBpZFsyXSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGRvbSA6IGZ1bmN0aW9uICggdHlwZSwgY3NzLCBvYmosIGRvbSwgaWQgKSB7XHJcblxyXG4gICAgICAgIHR5cGUgPSB0eXBlIHx8ICdkaXYnO1xyXG5cclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9ELmluZGV4T2YodHlwZSkgIT09IC0xIHx8IFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApeyAvLyBpcyBzdmcgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09J3N2ZycgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICdzdmcnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuXHJcbiAgICAgICAgICAvKiAgfSBlbHNlIGlmICggdHlwZSA9PT0gJ3VzZScgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAndXNlJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcbiovXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjcmVhdGUgbmV3IHN2ZyBpZiBub3QgZGVmXHJcbiAgICAgICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICdzdmcnICk7XHJcbiAgICAgICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGRvbSwgdHlwZSwgb2JqLCBpZCApO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9IGVsc2UgeyAvLyBpcyBodG1sIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApO1xyXG4gICAgICAgICAgICBlbHNlIGRvbSA9IGRvbS5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICkgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY3NzICkgZG9tLnN0eWxlLmNzc1RleHQgPSBjc3M7IFxyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207XHJcbiAgICAgICAgZWxzZSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIHx8IDAgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGFkZEF0dHJpYnV0ZXMgOiBmdW5jdGlvbiggZG9tLCB0eXBlLCBvLCBpZCApe1xyXG5cclxuICAgICAgICBsZXQgZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgdHlwZSApO1xyXG4gICAgICAgIFQuc2V0KCBnLCBvICk7XHJcbiAgICAgICAgVC5nZXQoIGRvbSwgaWQgKS5hcHBlbmRDaGlsZCggZyApO1xyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKSBnLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XHJcbiAgICAgICAgcmV0dXJuIGc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhciA6IGZ1bmN0aW9uKCBkb20gKXtcclxuXHJcbiAgICAgICAgVC5wdXJnZSggZG9tICk7XHJcbiAgICAgICAgd2hpbGUgKGRvbS5maXJzdENoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmICggZG9tLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCApIFQuY2xlYXIoIGRvbS5maXJzdENoaWxkICk7XHJcbiAgICAgICAgICAgIGRvbS5yZW1vdmVDaGlsZCggZG9tLmZpcnN0Q2hpbGQgKTsgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcHVyZ2UgOiBmdW5jdGlvbiAoIGRvbSApIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBkb20uYXR0cmlidXRlcywgaSwgbjtcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgICAgICBuID0gYVtpXS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkb21bbl0gPT09ICdmdW5jdGlvbicpIGRvbVtuXSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYSA9IGRvbS5jaGlsZE5vZGVzO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgICAgICBULnB1cmdlKCBkb20uY2hpbGROb2Rlc1tpXSApOyBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIEVmZmVjdHMgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRTVkdHbG93RWZmZWN0OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmICggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxHbG93JykgIT09IG51bGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzdmdGaWx0ZXIgPSBULmluaXRVSUxFZmZlY3RzKCk7XHJcblxyXG4gICAgICAgIGxldCBmaWx0ZXIgPSBULmFkZEF0dHJpYnV0ZXMoIHN2Z0ZpbHRlciwgJ2ZpbHRlcicsIHsgaWQ6ICdVSUxHbG93JywgeDogJy0yMCUnLCB5OiAnLTIwJScsIHdpZHRoOiAnMTQwJScsIGhlaWdodDogJzE0MCUnIH0gKTtcclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlR2F1c3NpYW5CbHVyJywgeyBpbjogJ1NvdXJjZUdyYXBoaWMnLCBzdGREZXZpYXRpb246ICczJywgcmVzdWx0OiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIGxldCBmZU1lcmdlID0gVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZU1lcmdlJywgeyAgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDw9IDM7IGkrKyApIHtcclxuXHJcbiAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmVNZXJnZSwgJ2ZlTWVyZ2VOb2RlJywgeyBpbjogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmVNZXJnZSwgJ2ZlTWVyZ2VOb2RlJywgeyBpbjogJ1NvdXJjZUdyYXBoaWMnIH0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGluaXRVSUxFZmZlY3RzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzdmdGaWx0ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTFNWR0VmZmVjdHMnKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIHN2Z0ZpbHRlciA9PT0gbnVsbCApIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHN2Z0ZpbHRlciA9IFQuZG9tKCAnc3ZnJywgdW5kZWZpbmVkICwgeyBpZDogJ1VJTFNWR0VmZmVjdHMnLCB3aWR0aDogJzAnLCBoZWlnaHQ6ICcwJyB9ICk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoIHN2Z0ZpbHRlciApO1xyXG4gXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3ZnRmlsdGVyO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBDb2xvciBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIENvbG9yTHVtYSA6IGZ1bmN0aW9uICggaGV4LCBsICkge1xyXG5cclxuICAgICAgICAvL2lmKCBoZXguc3Vic3RyaW5nKDAsIDMpID09PSAncmdiYScgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIGlmKCBoZXggPT09ICduJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgLy8gdmFsaWRhdGUgaGV4IHN0cmluZ1xyXG4gICAgICAgIGhleCA9IFN0cmluZyhoZXgpLnJlcGxhY2UoL1teMC05YS1mXS9naSwgJycpO1xyXG4gICAgICAgIGlmIChoZXgubGVuZ3RoIDwgNikge1xyXG4gICAgICAgICAgICBoZXggPSBoZXhbMF0raGV4WzBdK2hleFsxXStoZXhbMV0raGV4WzJdK2hleFsyXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbCA9IGwgfHwgMDtcclxuXHJcbiAgICAgICAgLy8gY29udmVydCB0byBkZWNpbWFsIGFuZCBjaGFuZ2UgbHVtaW5vc2l0eVxyXG4gICAgICAgIGxldCByZ2IgPSBcIiNcIiwgYywgaTtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGMgPSBwYXJzZUludChoZXguc3Vic3RyKGkqMiwyKSwgMTYpO1xyXG4gICAgICAgICAgICBjID0gTWF0aC5yb3VuZChNYXRoLm1pbihNYXRoLm1heCgwLCBjICsgKGMgKiBsKSksIDI1NSkpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICAgICAgcmdiICs9IChcIjAwXCIrYykuc3Vic3RyKGMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZ2I7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBmaW5kRGVlcEludmVyOiBmdW5jdGlvbiAoIGMgKSB7IFxyXG5cclxuICAgICAgICByZXR1cm4gKGNbMF0gKiAwLjMgKyBjWzFdICogLjU5ICsgY1syXSAqIC4xMSkgPD0gMC42O1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBsZXJwQ29sb3I6IGZ1bmN0aW9uKCBjMSwgYzIsIGZhY3RvciApIHtcclxuICAgICAgICBsZXQgbmV3Q29sb3IgPSB7fTtcclxuICAgICAgICBmb3IgKCBsZXQgaSA9IDA7IGkgPCAzOyBpKysgKSB7XHJcbiAgICAgICAgICBuZXdDb2xvcltpXSA9IGMxWyBpIF0gKyAoIGMyWyBpIF0gLSBjMVsgaSBdICkgKiBmYWN0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXdDb2xvcjtcclxuICAgIH0sXHJcblxyXG4gICAgaGV4VG9IdG1sOiBmdW5jdGlvbiAoIHYgKSB7IFxyXG4gICAgICAgIHYgPSB2ID09PSB1bmRlZmluZWQgPyAweDAwMDAwMCA6IHY7XHJcbiAgICAgICAgcmV0dXJuIFwiI1wiICsgKFwiMDAwMDAwXCIgKyB2LnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFRvSGV4OiBmdW5jdGlvbiAoIHYgKSB7IFxyXG5cclxuICAgICAgICByZXR1cm4gdi50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoXCIjXCIsIFwiMHhcIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICB1MjU1OiBmdW5jdGlvbiAoYywgaSkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDIpLCAxNikgLyAyNTU7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICB1MTY6IGZ1bmN0aW9uICggYywgaSApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAxKSwgMTYpIC8gMTU7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICB1bnBhY2s6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIGlmIChjLmxlbmd0aCA9PSA3KSByZXR1cm4gWyBULnUyNTUoYywgMSksIFQudTI1NShjLCAzKSwgVC51MjU1KGMsIDUpIF07XHJcbiAgICAgICAgZWxzZSBpZiAoYy5sZW5ndGggPT0gNCkgcmV0dXJuIFsgVC51MTYoYywxKSwgVC51MTYoYywyKSwgVC51MTYoYywzKSBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcDI1NTogZnVuY3Rpb24gKCBjICkge1xyXG4gICAgICAgIGxldCBoID0gTWF0aC5yb3VuZCggKCBjICogMjU1ICkgKS50b1N0cmluZyggMTYgKTtcclxuICAgICAgICBpZiAoIGgubGVuZ3RoIDwgMiApIGggPSAnMCcgKyBoO1xyXG4gICAgICAgIHJldHVybiBoO1xyXG4gICAgfSxcclxuXHJcbiAgICBwYWNrOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiAnIycgKyBULnAyNTUoIGNbIDAgXSApICsgVC5wMjU1KCBjWyAxIF0gKSArIFQucDI1NSggY1sgMiBdICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sUmdiOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICByZXR1cm4gJ3JnYignICsgTWF0aC5yb3VuZChjWzBdICogMjU1KSArICcsJysgTWF0aC5yb3VuZChjWzFdICogMjU1KSArICcsJysgTWF0aC5yb3VuZChjWzJdICogMjU1KSArICcpJztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHBhZDogZnVuY3Rpb24oIG4gKXtcclxuICAgICAgICBpZihuLmxlbmd0aCA9PSAxKW4gPSAnMCcgKyBuO1xyXG4gICAgICAgIHJldHVybiBuO1xyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hleCA6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIGxldCByID0gTWF0aC5yb3VuZChjWzBdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGcgPSBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgYiA9IE1hdGgucm91bmQoY1syXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIHJldHVybiAnIycgKyBULnBhZChyKSArIFQucGFkKGcpICsgVC5wYWQoYik7XHJcblxyXG4gICAgICAgLy8gcmV0dXJuICcjJyArICggJzAwMDAwMCcgKyAoICggY1swXSAqIDI1NSApIDw8IDE2IF4gKCBjWzFdICogMjU1ICkgPDwgOCBeICggY1syXSAqIDI1NSApIDw8IDAgKS50b1N0cmluZyggMTYgKSApLnNsaWNlKCAtIDYgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh1ZVRvUmdiOiBmdW5jdGlvbiggcCwgcSwgdCApe1xyXG5cclxuICAgICAgICBpZiAoIHQgPCAwICkgdCArPSAxO1xyXG4gICAgICAgIGlmICggdCA+IDEgKSB0IC09IDE7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDYgKSByZXR1cm4gcCArICggcSAtIHAgKSAqIDYgKiB0O1xyXG4gICAgICAgIGlmICggdCA8IDEgLyAyICkgcmV0dXJuIHE7XHJcbiAgICAgICAgaWYgKCB0IDwgMiAvIDMgKSByZXR1cm4gcCArICggcSAtIHAgKSAqIDYgKiAoIDIgLyAzIC0gdCApO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9Ic2w6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBjWzBdLCBnID0gY1sxXSwgYiA9IGNbMl0sIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLCBtYXggPSBNYXRoLm1heChyLCBnLCBiKSwgZGVsdGEgPSBtYXggLSBtaW4sIGggPSAwLCBzID0gMCwgbCA9IChtaW4gKyBtYXgpIC8gMjtcclxuICAgICAgICBpZiAobCA+IDAgJiYgbCA8IDEpIHMgPSBkZWx0YSAvIChsIDwgMC41ID8gKDIgKiBsKSA6ICgyIC0gMiAqIGwpKTtcclxuICAgICAgICBpZiAoZGVsdGEgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChtYXggPT0gciAmJiBtYXggIT0gZykgaCArPSAoZyAtIGIpIC8gZGVsdGE7XHJcbiAgICAgICAgICAgIGlmIChtYXggPT0gZyAmJiBtYXggIT0gYikgaCArPSAoMiArIChiIC0gcikgLyBkZWx0YSk7XHJcbiAgICAgICAgICAgIGlmIChtYXggPT0gYiAmJiBtYXggIT0gcikgaCArPSAoNCArIChyIC0gZykgLyBkZWx0YSk7XHJcbiAgICAgICAgICAgIGggLz0gNjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFsgaCwgcywgbCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHNsVG9SZ2I6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgbGV0IHAsIHEsIGggPSBjWzBdLCBzID0gY1sxXSwgbCA9IGNbMl07XHJcblxyXG4gICAgICAgIGlmICggcyA9PT0gMCApIHJldHVybiBbIGwsIGwsIGwgXTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcSA9IGwgPD0gMC41ID8gbCAqIChzICsgMSkgOiBsICsgcyAtICggbCAqIHMgKTtcclxuICAgICAgICAgICAgcCA9IGwgKiAyIC0gcTtcclxuICAgICAgICAgICAgcmV0dXJuIFsgVC5odWVUb1JnYihwLCBxLCBoICsgMC4zMzMzMyksIFQuaHVlVG9SZ2IocCwgcSwgaCksIFQuaHVlVG9SZ2IocCwgcSwgaCAtIDAuMzMzMzMpIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgTU9ERUxcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtYWtlR3JhZGlhbnQ6IGZ1bmN0aW9uICggdHlwZSwgc2V0dGluZ3MsIHBhcmVudCwgY29sb3JzICkge1xyXG5cclxuICAgICAgICBULmRvbSggdHlwZSwgbnVsbCwgc2V0dGluZ3MsIHBhcmVudCwgMCApO1xyXG5cclxuICAgICAgICBsZXQgbiA9IHBhcmVudC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSwgYztcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCBjb2xvcnMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIGMgPSBjb2xvcnNbaV07XHJcbiAgICAgICAgICAgIC8vVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsIHN0eWxlOidzdG9wLWNvbG9yOicrY1sxXSsnOyBzdG9wLW9wYWNpdHk6JytjWzJdKyc7JyB9LCBwYXJlbnQsIFswLG5dICk7XHJcbiAgICAgICAgICAgIFQuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCAnc3RvcC1jb2xvcic6Y1sxXSwgICdzdG9wLW9wYWNpdHknOmNbMl0gfSwgcGFyZW50LCBbMCxuXSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKm1ha2VHcmFwaDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOididXR0JyB9LCBzdmcgKTsvLzBcclxuICAgICAgICAvL1QuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOjEwOCwgaGVpZ2h0OjEwOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzFcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cys3LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjcgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMlxyXG4gICAgICAgIC8vVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmdyYXBoID0gc3ZnO1xyXG5cclxuICAgIH0sKi9cclxuXHJcbiAgICBtYWtlUGFkOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgd3cgPSAyNTZcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3d3KycgJyt3dywgd2lkdGg6d3csIGhlaWdodDp3dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIGxldCB3ID0gMjAwOyBcclxuICAgICAgICBsZXQgZCA9ICh3dy13KSowLjUsIG0gPSAyMDtcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCwgeTogZCwgIHdpZHRoOiB3LCBoZWlnaHQ6IHcsIGZpbGw6VC5jb2xvcnMuYmFjayB9LCBzdmcgKTsgLy8gMFxyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkK20qMC41LCB5OiBkK20qMC41LCB3aWR0aDogdyAtIG0gLCBoZWlnaHQ6IHcgLSBtLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiB9LCBzdmcgKTsgLy8gMVxyXG4gICAgICAgIC8vIFBvaW50ZXJcclxuICAgICAgICBUb29scy5kb20oICdsaW5lJywgJycsIHsgeDE6IGQrKG0qMC41KSwgeTE6IHd3ICowLjUsIHgyOiBkKyh3LW0qMC41KSwgeTI6IHd3ICogMC41LCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDJcclxuICAgICAgICBUb29scy5kb20oICdsaW5lJywgJycsIHsgeDE6IHd3ICogMC41LCB4Mjogd3cgKiAwLjUsIHkxOiBkKyhtKjAuNSksIHkyOiBkKyh3LW0qMC41KSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAzXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6IHd3ICogMC41LCBjeTogd3cgKiAwLjUsIHI6NSwgc3Ryb2tlOiBULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzogNSwgZmlsbDonbm9uZScgfSwgc3ZnICk7IC8vIDRcclxuICAgICAgICBULnBhZDJkID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUtub2I6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cys3LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjcgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5rbm9iID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNpcmN1bGFyOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gNDA7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzoxMCwgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjcsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOididXR0JyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmNpcmN1bGFyID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUpveXN0aWNrOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICAvLysnIGJhY2tncm91bmQ6I2YwMDsnXHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4LCBjY2M7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IE1hdGguZmxvb3IoKHctMzApKjAuNSk7XHJcbiAgICAgICAgbGV0IGlubmVyUmFkaXVzID0gTWF0aC5mbG9vcihyYWRpdXMqMC42KTtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgaWYoIG1vZGVsID09PSAwICl7XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAgICAgLy8gZ3JhZGlhbiBiYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzQwLCAncmdiKDAsMCwwKScsIDAuM10sIFs4MCwgJ3JnYigwLDAsMCknLCAwXSwgWzkwLCAncmdiKDUwLDUwLDUwKScsIDAuNF0sIFsxMDAsICdyZ2IoNTAsNTAsNTApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWQnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhZGlhbiBzaGFkb3dcclxuICAgICAgICAgICAgY2NjID0gWyBbNjAsICdyZ2IoMCwwLDApJywgMC41XSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFMnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhZGlhbiBzdGlja1xyXG4gICAgICAgICAgICBsZXQgY2MwID0gWydyZ2IoNDAsNDAsNDApJywgJ3JnYig0OCw0OCw0OCknLCAncmdiKDMwLDMwLDMwKSddO1xyXG4gICAgICAgICAgICBsZXQgY2MxID0gWydyZ2IoMSw5MCwxOTcpJywgJ3JnYigzLDk1LDIwNyknLCAncmdiKDAsNjUsMTY3KSddO1xyXG5cclxuICAgICAgICAgICAgY2NjID0gWyBbMzAsIGNjMFswXSwgMV0sIFs2MCwgY2MwWzFdLCAxXSwgWzgwLCBjYzBbMV0sIDFdLCBbMTAwLCBjYzBbMl0sIDFdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkSW4nLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgY2NjID0gWyBbMzAsIGNjMVswXSwgMV0sIFs2MCwgY2MxWzFdLCAxXSwgWzgwLCBjYzFbMV0sIDFdLCBbMTAwLCBjYzFbMl0sIDFdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkSW4yJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYXBoXHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J3VybCgjZ3JhZCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0KzUsIGN5OjY0KzEwLCByOmlubmVyUmFkaXVzKzEwLCBmaWxsOid1cmwoI2dyYWRTKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOid1cmwoI2dyYWRJbiknIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18wID0gc3ZnO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgLy8gZ3JhZGlhbiBzaGFkb3dcclxuICAgICAgICAgICAgY2NjID0gWyBbNjksICdyZ2IoMCwwLDApJywgMF0sWzcwLCAncmdiKDAsMCwwKScsIDAuM10sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRYJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiYSgxMDAsMTAwLDEwMCwwLjI1KScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMrMTQsIGZpbGw6J3VybCgjZ3JhZFgpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYigxMDAsMTAwLDEwMCknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzEgPSBzdmc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDb2xvclJpbmc6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAyNTY7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGxldCBzID0gMzA7Ly9zdHJva2VcclxuICAgICAgICBsZXQgciA9KCB3LXMgKSowLjU7XHJcbiAgICAgICAgbGV0IG1pZCA9IHcqMC41O1xyXG4gICAgICAgIGxldCBuID0gMjQsIG51ZGdlID0gOCAvIHIgLyBuICogTWF0aC5QSSwgYTEgPSAwLCBkMTtcclxuICAgICAgICBsZXQgYW0sIHRhbiwgZDIsIGEyLCBhciwgaSwgaiwgcGF0aCwgY2NjO1xyXG4gICAgICAgIGxldCBjb2xvciA9IFtdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciAoIGkgPSAwOyBpIDw9IG47ICsraSkge1xyXG5cclxuICAgICAgICAgICAgZDIgPSBpIC8gbjtcclxuICAgICAgICAgICAgYTIgPSBkMiAqIFQuVHdvUEk7XHJcbiAgICAgICAgICAgIGFtID0gKGExICsgYTIpICogMC41O1xyXG4gICAgICAgICAgICB0YW4gPSAxIC8gTWF0aC5jb3MoKGEyIC0gYTEpICogMC41KTtcclxuXHJcbiAgICAgICAgICAgIGFyID0gW1xyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTEpLCAtTWF0aC5jb3MoYTEpLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGFtKSAqIHRhbiwgLU1hdGguY29zKGFtKSAqIHRhbiwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMiksIC1NYXRoLmNvcyhhMilcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbG9yWzFdID0gVC5yZ2JUb0hleCggVC5oc2xUb1JnYihbZDIsIDEsIDAuNV0pICk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBqID0gNjtcclxuICAgICAgICAgICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgICAgICAgICBhcltqXSA9ICgoYXJbal0qcikrbWlkKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHBhdGggPSAnIE0nICsgYXJbMF0gKyAnICcgKyBhclsxXSArICcgUScgKyBhclsyXSArICcgJyArIGFyWzNdICsgJyAnICsgYXJbNF0gKyAnICcgKyBhcls1XTtcclxuXHJcbiAgICAgICAgICAgICAgICBjY2MgPSBbIFswLGNvbG9yWzBdLDFdLCBbMTAwLGNvbG9yWzFdLDFdIF07XHJcbiAgICAgICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonRycraSwgeDE6YXJbMF0sIHkxOmFyWzFdLCB4Mjphcls0XSwgeTI6YXJbNV0sIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDpwYXRoLCAnc3Ryb2tlLXdpZHRoJzpzLCBzdHJva2U6J3VybCgjRycraSsnKScsICdzdHJva2UtbGluZWNhcCc6XCJidXR0XCIgfSwgc3ZnLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhMSA9IGEyIC0gbnVkZ2U7IFxyXG4gICAgICAgICAgICBjb2xvclswXSA9IGNvbG9yWzFdO1xyXG4gICAgICAgICAgICBkMSA9IGQyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGJyID0gKDEyOCAtIHMgKSArIDI7XHJcbiAgICAgICAgbGV0IGJ3ID0gNjA7XHJcblxyXG4gICAgICAgIGxldCB0dyA9IDg0LjkwO1xyXG5cclxuICAgICAgICAvLyBibGFjayAvIHdoaXRlXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyNGRkZGRkYnLCAxXSwgWzUwLCAnI0ZGRkZGRicsIDBdLCBbNTAsICcjMDAwMDAwJywgMF0sIFsxMDAsICcjMDAwMDAwJywgMV0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wwJywgeDE6MCwgeTE6bWlkLXR3LCB4MjowLCB5MjptaWQrdHcsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjN2Y3ZjdmJywgMV0sIFs1MCwgJyM3ZjdmN2YnLCAwLjVdLCBbMTAwLCAnIzdmN2Y3ZicsIDBdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMScsIHgxOm1pZC00OS4wNSwgeTE6MCwgeDI6bWlkKzk4LCB5MjowLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7ICd0cmFuc2Zvcm0tb3JpZ2luJzogJzEyOHB4IDEyOHB4JywgJ3RyYW5zZm9ybSc6J3JvdGF0ZSgwKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3JlZCcgIH0sIHN2ZywgMiApOy8vIDIsMFxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMSknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDEpJyAgfSwgc3ZnLCAyICk7Ly8yLDFcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDApJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wwKScgIH0sIHN2ZywgMiApOy8vMiwyXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonTSAyNTUuNzUgMTM2LjUgUSAyNTYgMTMyLjMgMjU2IDEyOCAyNTYgMTIzLjcgMjU1Ljc1IDExOS41IEwgMjQxIDEyOCAyNTUuNzUgMTM2LjUgWicsICBmaWxsOidub25lJywnc3Ryb2tlLXdpZHRoJzoyLCBzdHJva2U6JyMwMDAnICB9LCBzdmcsIDIgKTsvLzIsM1xyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDoxMjgrMTEzLCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Mywgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnLCAyICk7Ly8yLjNcclxuXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDoxMjgsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzoyLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzNcclxuXHJcbiAgICAgICAgVC5jb2xvclJpbmcgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpY29uOiBmdW5jdGlvbiAoIHR5cGUsIGNvbG9yLCB3ICl7XHJcblxyXG4gICAgICAgIHcgPSB3IHx8IDQwO1xyXG4gICAgICAgIC8vY29sb3IgPSBjb2xvciB8fCAnI0RFREVERSc7XHJcbiAgICAgICAgbGV0IHZpZXdCb3ggPSAnMCAwIDI1NiAyNTYnO1xyXG4gICAgICAgIC8vbGV0IHZpZXdCb3ggPSAnMCAwICcrIHcgKycgJysgdztcclxuICAgICAgICBsZXQgdCA9IFtcIjxzdmcgeG1sbnM9J1wiK1Quc3ZnbnMrXCInIHZlcnNpb249JzEuMScgeG1sbnM6eGxpbms9J1wiK1QuaHRtbHMrXCInIHN0eWxlPSdwb2ludGVyLWV2ZW50czpub25lOycgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pbllNYXggbWVldCcgeD0nMHB4JyB5PScwcHgnIHdpZHRoPSdcIit3K1wicHgnIGhlaWdodD0nXCIrdytcInB4JyB2aWV3Qm94PSdcIit2aWV3Qm94K1wiJz48Zz5cIl07XHJcbiAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICBjYXNlICdsb2dvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb0ZpbGxfZCtcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZG9uYXRlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19kb25hdGUrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ25lbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fbmVvK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwaHknOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19waHkrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbmZpZyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX2NvbmZpZytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ2l0aHViJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19naXRodWIrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NhdmUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMjYuMTI1IDE3IEwgMjAgMjIuOTUgMTQuMDUgMTcgTSAyMCA5Ljk1IEwgMjAgMjIuOTUnLz48cGF0aCBzdHJva2U9J1wiK2NvbG9yO1xyXG4gICAgICAgICAgICB0WzFdKz1cIicgc3Ryb2tlLXdpZHRoPScyLjUnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAzMi42IDIzIEwgMzIuNiAyNS41IFEgMzIuNiAyOC41IDI5LjYgMjguNSBMIDEwLjYgMjguNSBRIDcuNiAyOC41IDcuNiAyNS41IEwgNy42IDIzJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0WzJdID0gXCI8L2c+PC9zdmc+XCI7XHJcbiAgICAgICAgcmV0dXJuIHQuam9pbihcIlxcblwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGxvZ29GaWxsX2Q6YFxyXG4gICAgTSAxNzEgMTUwLjc1IEwgMTcxIDMzLjI1IDE1NS41IDMzLjI1IDE1NS41IDE1MC43NSBRIDE1NS41IDE2Mi4yIDE0Ny40NSAxNzAuMiAxMzkuNDUgMTc4LjI1IDEyOCAxNzguMjUgMTE2LjYgMTc4LjI1IDEwOC41NSAxNzAuMiAxMDAuNSAxNjIuMiAxMDAuNSAxNTAuNzUgXHJcbiAgICBMIDEwMC41IDMzLjI1IDg1IDMzLjI1IDg1IDE1MC43NSBRIDg1IDE2OC42NSA5Ny41NSAxODEuMTUgMTEwLjE1IDE5My43NSAxMjggMTkzLjc1IDE0NS45IDE5My43NSAxNTguNCAxODEuMTUgMTcxIDE2OC42NSAxNzEgMTUwLjc1IFxyXG4gICAgTSAyMDAgMzMuMjUgTCAxODQgMzMuMjUgMTg0IDE1MC44IFEgMTg0IDE3NC4xIDE2Ny42IDE5MC40IDE1MS4zIDIwNi44IDEyOCAyMDYuOCAxMDQuNzUgMjA2LjggODguMyAxOTAuNCA3MiAxNzQuMSA3MiAxNTAuOCBMIDcyIDMzLjI1IDU2IDMzLjI1IDU2IDE1MC43NSBcclxuICAgIFEgNTYgMTgwLjU1IDc3LjA1IDIwMS42IDk4LjIgMjIyLjc1IDEyOCAyMjIuNzUgMTU3LjggMjIyLjc1IDE3OC45IDIwMS42IDIwMCAxODAuNTUgMjAwIDE1MC43NSBMIDIwMCAzMy4yNSBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fZ2l0aHViOmBcclxuICAgIE0gMTgwLjUgNzAgUSAxODYuMyA4Mi40IDE4MS41NSA5Ni41NSAxOTYuNSAxMTEuNSAxODkuNyAxNDAuNjUgMTgzLjY1IDE2OC4zNSAxNDYgMTcyLjcgMTUyLjUgMTc4LjcgMTUyLjU1IDE4NS45IEwgMTUyLjU1IDIxOC4xNSBRIDE1Mi44NCAyMjQuNTYgMTU5LjE1IDIyMy4zIFxyXG4gICAgMTU5LjIxIDIyMy4zIDE1OS4yNSAyMjMuMyAxODEuMTQgMjE2LjI1IDE5OC43IDE5OC43IDIyOCAxNjkuNCAyMjggMTI4IDIyOCA4Ni42IDE5OC43IDU3LjMgMTY5LjQgMjggMTI4IDI4IDg2LjYgMjggNTcuMyA1Ny4zIDI4IDg2LjYgMjggMTI4IDI4IDE2OS40IDU3LjMgMTk4LjcgNzQuODUgXHJcbiAgICAyMTYuMjUgOTYuNzUgMjIzLjMgOTYuNzggMjIzLjMgOTYuOCAyMjMuMyAxMDMuMTYgMjI0LjU0IDEwMy40NSAyMTguMTUgTCAxMDMuNDUgMjAwIFEgODIuOTcgMjAzLjEgNzUuMSAxOTYuMzUgNjkuODUgMTkxLjY1IDY4LjQgMTg1LjQ1IDY0LjI3IDE3Ny4wNTUgNTkuNCAxNzQuMTUgNDkuMjAgXHJcbiAgICAxNjYuODcgNjAuOCAxNjcuOCA2OS44NSAxNjkuNjEgNzUuNyAxODAgODEuMTMgMTg4LjA5IDkwIDE4OC41NSA5OC4xOCAxODguODYgMTAzLjQ1IDE4NS45IDEwMy40OSAxNzguNjcgMTEwIDE3Mi43IDcyLjMzIDE2OC4zMyA2Ni4zIDE0MC42NSA1OS40OCAxMTEuNDkgNzQuNDUgOTYuNTUgNjkuNyBcclxuICAgIDgyLjQxIDc1LjUgNzAgODQuODcgNjguNzQgMTAzLjE1IDgwIDExNS4xMjUgNzYuNjM1IDEyOCA3Ni44NSAxNDAuODUgNzYuNjUgMTUyLjg1IDgwIDE3MS4xIDY4Ljc1IDE4MC41IDcwIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19uZW86YFxyXG4gICAgTSAyMTkgNTIgTCAyMDYgNTIgMjA2IDE2NiBRIDIwNiAxODMuNCAxOTMuNzUgMTk1LjY1IDE4MS40IDIwOCAxNjQgMjA4IDE0Ni42IDIwOCAxMzQuMzUgMTk1LjY1IDEyMiAxODMuNCAxMjIgMTY2IEwgMTIyIDkwIFEgMTIyIDc3LjYgMTEzLjE1IDY4Ljg1IDEwNC40IDYwIDkyIDYwIDc5LjU1IFxyXG4gICAgNjAgNzAuNzUgNjguODUgNjIgNzcuNiA2MiA5MCBMIDYyIDIwNCA3NSAyMDQgNzUgOTAgUSA3NSA4MyA3OS45NSA3OCA4NC45NSA3MyA5MiA3MyA5OSA3MyAxMDQgNzggMTA5IDgzIDEwOSA5MCBMIDEwOSAxNjYgUSAxMDkgMTg4LjggMTI1LjE1IDIwNC44NSAxNDEuMiAyMjEgMTY0IDIyMSBcclxuICAgIDE4Ni43NSAyMjEgMjAyLjk1IDIwNC44NSAyMTkgMTg4LjggMjE5IDE2NiBMIDIxOSA1MiBNIDE5NCA1MiBMIDE4MSA1MiAxODEgMTY2IFEgMTgxIDE3MyAxNzYuMDUgMTc4IDE3MS4wNSAxODMgMTY0IDE4MyAxNTcgMTgzIDE1MiAxNzggMTQ3IDE3MyAxNDcgMTY2IEwgMTQ3IDkwIFEgMTQ3IFxyXG4gICAgNjcuMiAxMzAuODUgNTEuMTUgMTE0LjggMzUgOTIgMzUgNjkuMjUgMzUgNTMuMDUgNTEuMTUgMzcgNjcuMiAzNyA5MCBMIDM3IDIwNCA1MCAyMDQgNTAgOTAgUSA1MCA3Mi42IDYyLjI1IDYwLjM1IDc0LjYgNDggOTIgNDggMTA5LjQgNDggMTIxLjY1IDYwLjM1IDEzNCA3Mi42IDEzNCA5MCBMIFxyXG4gICAgMTM0IDE2NiBRIDEzNCAxNzguNCAxNDIuODUgMTg3LjE1IDE1MS42IDE5NiAxNjQgMTk2IDE3Ni40NSAxOTYgMTg1LjI1IDE4Ny4xNSAxOTQgMTc4LjQgMTk0IDE2NiBMIDE5NCA1MiBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fcGh5OmBcclxuICAgIE0gMTAzLjU1IDM3Ljk1IEwgMTI3Ljk1IDM3Ljk1IFEgMTYyLjM1IDM3Ljk1IDE4Ni41IDU1IDIxMC45IDcyLjM1IDIxMC45IDk2LjUgMjEwLjkgMTIwLjY1IDE4Ni41IDEzNy43IDE2Mi4zNSAxNTUgMTI3Ljk1IDE1NSBMIDEyNy45NSAyMzcuOTUgTSAxMjcuOTUgMTU1IFxyXG4gICAgUSA5My41NSAxNTUgNjkuMTUgMTM3LjcgNDUgMTIwLjY1IDQ1IDk2LjUgNDUgNzIuMzUgNjkuMTUgNTUgNzAuOSA1My44IDcyLjg1IDUyLjg1IE0gMTI3Ljk1IDE1NSBMIDEyNy45NSAzNy45NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2NvbmZpZzpgXHJcbiAgICBNIDIwNC4zNSA1MS42NSBMIDE3My4yNSA4Mi43NSBRIDE5MiAxMDEuNSAxOTIgMTI4IEwgMjM2IDEyOCBNIDE5MiAxMjggUSAxOTIgMTU0LjU1IDE3My4yNSAxNzMuMjUgTCAyMDQuNCAyMDQuNCBNIDUxLjY1IDUxLjY1IEwgODIuNzUgODIuNzUgUSAxMDEuNSA2NCAxMjggNjQgXHJcbiAgICBMIDEyOCAyMCBNIDUxLjYgMjA0LjQgTCA4Mi43NSAxNzMuMjUgUSA2NCAxNTQuNTUgNjQgMTI4IEwgMjAgMTI4IE0gMTI4IDIzNiBMIDEyOCAxOTIgUSAxMDEuNSAxOTIgODIuNzUgMTczLjI1IE0gNjQgMTI4IFEgNjQgMTAxLjUgODIuNzUgODIuNzUgTSAxNzMuMjUgMTczLjI1IFxyXG4gICAgUSAxNTQuNTUgMTkyIDEyOCAxOTIgTSAxMjggNjQgUSAxNTQuNTUgNjQgMTczLjI1IDgyLjc1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fZG9uYXRlOmBcclxuICAgIE0gMTcxLjMgODAuMyBRIDE3OS41IDYyLjE1IDE3MS4zIDQ1LjggMTY0LjEgMzIuNSAxNDEuMzUgMzAuMSBMIDk0LjM1IDMwLjEgUSA4OS4zNSAzMC40IDg4LjMgMzUuMTUgTCA3MC41IDE0OC4wNSBRIDcwLjIgMTUyLjUgNzMuNyAxNTIuNiBMIDEwMC45NSAxNTIuNiAxMDcgMTExLjYgUSAxMDguNzUgXHJcbiAgICAxMDYuNTUgMTEyLjYgMTA2LjQ1IDEzMC40NSAxMDguMDUgMTQ1LjMgMTAzLjkgMTYzLjM1IDk4Ljc1IDE3MS4zIDgwLjMgTSAxNzkuOCA3MS41IFEgMTc4LjYgNzkuNzUgMTc0LjkgODcuODUgMTY4LjQ1IDEwMi45IDE1MS45IDEwOS4xNSAxNDAuNjUgMTEzLjk1IDExNy41NSAxMTMgMTEzLjE1IFxyXG4gICAgMTEyLjc1IDExMSAxMTcuNDUgTCAxMDIuNyAxNjkuOTUgUSAxMDIuNDUgMTczLjggMTA1LjUgMTczLjg1IEwgMTI4Ljk1IDE3My44NSBRIDEzMi4yIDE3NC4yIDEzMy4zNSAxNjkuNjUgTCAxMzguMyAxMzkuOTUgUSAxMzkuNzUgMTM1LjYgMTQzLjEgMTM1LjUgMTQ2LjYgMTM1Ljc1IDE1MC42IDEzNS42NSBcclxuICAgIDE1NC41NSAxMzUuNSAxNTcuMzUgMTM1LjEgMTYwLjE1IDEzNC43IDE2Ni43NSAxMzIuMzUgMTgxLjM1IDEyNy40IDE4Ny45IDExMS4yIDE5NC4yNSA5NS43NSAxODkuNSA4MS45NSAxODYuNzUgNzQuODUgMTc5LjggNzEuNSBNIDEwMy41IDIwOS45IFEgMTAzLjUgMjAyLjg1IDk5LjcgMTk4Ljg1IDk1Ljk1IFxyXG4gICAgMTk0Ljc1IDg5LjQgMTk0Ljc1IDgyLjggMTk0Ljc1IDc5LjA1IDE5OC44NSA3NS4zIDIwMi45IDc1LjMgMjA5LjkgNzUuMyAyMTYuODUgNzkuMDUgMjIwLjk1IDgyLjggMjI1LjA1IDg5LjQgMjI1LjA1IDk1Ljk1IDIyNS4wNSA5OS43IDIyMSAxMDMuNSAyMTYuOTUgMTAzLjUgMjA5LjkgTSA5NS40NSAyMDUuNSBcclxuICAgIFEgOTUuOTUgMjA3LjMgOTUuOTUgMjA5LjkgOTUuOTUgMjEyLjY1IDk1LjQ1IDIxNC4zNSA5NC45NSAyMTYgOTQgMjE3LjMgOTMuMSAyMTguNDUgOTEuOSAyMTkgOTAuNyAyMTkuNTUgODkuNCAyMTkuNTUgODguMTUgMjE5LjU1IDg2Ljk1IDIxOS4wNSA4NS43NSAyMTguNTUgODQuOCAyMTcuMyA4My45IDIxNi4xNSBcclxuICAgIDgzLjQgMjE0LjM1IDgyLjg1IDIxMi42IDgyLjg1IDIwOS45IDgyLjg1IDIwNy4zIDgzLjQgMjA1LjQ1IDgzLjk1IDIwMy41NSA4NC44NSAyMDIuNDUgODUuOSAyMDEuMiA4Ni45NSAyMDAuNzUgODguMDUgMjAwLjI1IDg5LjQgMjAwLjI1IDkwLjcgMjAwLjI1IDkxLjg1IDIwMC44IDkzLjA1IDIwMS4zIDk0IDIwMi41IFxyXG4gICAgOTQuOSAyMDMuNjUgOTUuNDUgMjA1LjUgTSAxNTMuMyAxOTUuMzUgTCAxNDUuMyAxOTUuMzUgMTM1LjUgMjI0LjQ1IDE0Mi44IDIyNC40NSAxNDQuNiAyMTguNSAxNTMuNzUgMjE4LjUgMTU1LjYgMjI0LjQ1IDE2My4xIDIyNC40NSAxNTMuMyAxOTUuMzUgTSAxNTIuMTUgMjEzLjI1IEwgMTQ2LjI1IDIxMy4yNSBcclxuICAgIDE0OS4yIDIwMy42NSAxNTIuMTUgMjEzLjI1IE0gMTE2Ljc1IDE5NS4zNSBMIDEwNy44IDE5NS4zNSAxMDcuOCAyMjQuNDUgMTE0LjUgMjI0LjQ1IDExNC41IDIwNC4yIDEyNS43IDIyNC40NSAxMzIuNzUgMjI0LjQ1IDEzMi43NSAxOTUuMzUgMTI2LjA1IDE5NS4zNSAxMjYuMDUgMjEyLjA1IDExNi43NSAxOTUuMzUgTSBcclxuICAgIDY2LjUgMTk3LjY1IFEgNjQuMTUgMTk2LjE1IDYxLjQ1IDE5NS43NSA1OC44IDE5NS4zNSA1NS43NSAxOTUuMzUgTCA0Ni43IDE5NS4zNSA0Ni43IDIyNC40NSA1NS44IDIyNC40NSBRIDU4LjggMjI0LjQ1IDYxLjUgMjI0LjA1IDY0LjE1IDIyMy42IDY2LjQgMjIyLjE1IDY5LjE1IDIyMC40NSA3MC45IDIxNy4yIFxyXG4gICAgNzIuNyAyMTQgNzIuNyAyMDkuOTUgNzIuNyAyMDUuNyA3MSAyMDIuNiA2OS4zNSAxOTkuNSA2Ni41IDE5Ny42NSBNIDY0LjIgMjA1IFEgNjUuMiAyMDcgNjUuMiAyMDkuOSA2NS4yIDIxMi43NSA2NC4yNSAyMTQuNzUgNjMuMyAyMTYuNzUgNjEuNSAyMTcuODUgNjAgMjE4Ljg1IDU4LjMgMjE4LjkgNTYuNiAyMTkgXHJcbiAgICA1NC4xNSAyMTkgTCA1NCAyMTkgNTQgMjAwLjggNTQuMTUgMjAwLjggUSA1Ni40IDIwMC44IDU4LjA1IDIwMC45IDU5LjcgMjAwLjk1IDYxLjE1IDIwMS43NSA2My4yIDIwMi45NSA2NC4yIDIwNSBNIDIxMC4yIDE5NS4zNSBMIDE5MC41IDE5NS4zNSAxOTAuNSAyMjQuNDUgMjEwLjIgMjI0LjQ1IDIxMC4yIDIxOC45IFxyXG4gICAgMTk3Ljc1IDIxOC45IDE5Ny43NSAyMTEuNTUgMjA5LjIgMjExLjU1IDIwOS4yIDIwNiAxOTcuNzUgMjA2IDE5Ny43NSAyMDAuOSAyMTAuMiAyMDAuOSAyMTAuMiAxOTUuMzUgTSAxODcuNSAxOTUuMzUgTCAxNjMgMTk1LjM1IDE2MyAyMDAuOSAxNzEuNiAyMDAuOSAxNzEuNiAyMjQuNDUgMTc4LjkgMjI0LjQ1IDE3OC45IFxyXG4gICAgMjAwLjkgMTg3LjUgMjAwLjkgMTg3LjUgMTk1LjM1IFpcclxuICAgIGAsXHJcblxyXG59XHJcblxyXG5ULnNldFRleHQoKTtcclxuXHJcbmV4cG9ydCBjb25zdCBUb29scyA9IFQ7IiwiLy8vaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9maWxlLXN5c3RlbS1hY2Nlc3MvI2FwaS1maWxlc3lzdGVtZmlsZWhhbmRsZS1nZXRmaWxlXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEZpbGVzIHtcclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgRklMRSBUWVBFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGF1dG9UeXBlcyggdHlwZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHQgPSBbXVxyXG5cclxuICAgICAgICBzd2l0Y2goIHR5cGUgKXtcclxuICAgICAgICAgICAgY2FzZSAnc3ZnJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2ltYWdlL3N2Zyt4bWwnOiAnLnN2Zyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3dhdic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdhdWRpby93YXYnOiAnLndhdid9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wMyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdhdWRpby9tcGVnJzogJy5tcDMnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAndmlkZW8vbXA0JzogJy5tcDQnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdiaW4nOiBjYXNlICdoZXgnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnQmluYXJ5IEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOiBbJy5iaW4nLCAnLmhleCddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGV4dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdUZXh0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycudHh0JywgJy50ZXh0J10sICd0ZXh0L2h0bWwnOiBbJy5odG1sJywgJy5odG0nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pzb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSlNPTiBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vanNvbic6IFsnLmpzb24nXSB9IH0sIF0vL3RleHQvcGxhaW5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0phdmFTY3JpcHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvamF2YXNjcmlwdCc6IFsnLmpzJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJbWFnZXMnLCBhY2NlcHQ6IHsgJ2ltYWdlLyonOiBbJy5wbmcnLCAnLmdpZicsICcuanBlZycsICcuanBnJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpY29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ljb25zJywgYWNjZXB0OiB7ICdpbWFnZS94LWljbyc6IFsnLmljbyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbHV0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0x1dCcsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLmN1YmUnLCAnLjNkbCddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIExPQURcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c3RhdGljIGFzeW5jIGxvYWQoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgPSBGaWxlcy5zaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuXHJcbiAgICAgICAgXHRsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVBY2NlcHRBbGxPcHRpb246IHR5cGUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAvL3N0YXJ0SW46Jy4vYXNzZXRzJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcblxyXG4gICAgICAgICAgICAvLyBjcmVhdGUgYSBuZXcgaGFuZGxlXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIoIG9wdGlvbnMgKVxyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlWzBdLmdldEZpbGUoKVxyXG4gICAgICAgICAgICAvL2xldCBjb250ZW50ID0gYXdhaXQgZmlsZS50ZXh0KClcclxuXHJcbiAgICAgICAgICAgIGlmKCAhZmlsZSApIHJldHVybiBudWxsXHJcblxyXG4gICAgICAgICAgICBsZXQgZm5hbWUgPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgICAgIGxldCBmdHlwZSA9IGZuYW1lLnN1YnN0cmluZyggZm5hbWUubGFzdEluZGV4T2YoJy4nKSsxLCBmbmFtZS5sZW5ndGggKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFVcmwgPSBbICdwbmcnLCAnanBnJywgJ2pwZWcnLCAnbXA0JywgJ3dlYm0nLCAnb2dnJywgJ21wMycgXTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YUJ1ZiA9IFsgJ3NlYScsICd6JywgJ2hleCcsICdidmgnLCAnQlZIJywgJ2dsYicsICdnbHRmJyBdO1xyXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRhdGFVcmwuaW5kZXhPZiggZnR5cGUgKSAhPT0gLTEgKSByZWFkZXIucmVhZEFzRGF0YVVSTCggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgaWYoIGRhdGFCdWYuaW5kZXhPZiggZnR5cGUgKSAhPT0gLTEgKSByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIHJlYWRlci5yZWFkQXNUZXh0KCBmaWxlIClcclxuXHJcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBlLnRhcmdldC5yZXN1bHRcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1nID0gbmV3IEltYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggby5jYWxsYmFjayApIG8uY2FsbGJhY2soIGltZywgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWcuc3JjID0gY29udGVudFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2pzb24nOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiggby5jYWxsYmFjayApIG8uY2FsbGJhY2soIEpTT04ucGFyc2UoIGNvbnRlbnQgKSwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiggby5jYWxsYmFjayApIG8uY2FsbGJhY2soIGNvbnRlbnQsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSlcclxuICAgICAgICAgICAgaWYoIG8uYWx3YXlzICYmIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBudWxsIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblx0c3RhdGljIHNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgICAgICAgaW5wdXQudHlwZSA9IFwiZmlsZVwiO1xyXG4gICAgICAgICAgICBpbnB1dC5tdWx0aXBsZSA9IG9wdGlvbnMubXVsdGlwbGU7XHJcbiAgICAgICAgICAgIGlucHV0LmFjY2VwdCA9IG9wdGlvbnMudHlwZXNcclxuICAgICAgICAgICAgICAgIC5tYXAoKHR5cGUpID0+IHR5cGUuYWNjZXB0KVxyXG4gICAgICAgICAgICAgICAgLmZsYXRNYXAoKGluc3QpID0+IE9iamVjdC5rZXlzKGluc3QpLmZsYXRNYXAoKGtleSkgPT4gaW5zdFtrZXldKSlcclxuICAgICAgICAgICAgICAgIC5qb2luKFwiLFwiKTtcclxuXHJcbiAgICAgICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShcclxuICAgICAgICAgICAgICAgICAgICBbLi4uaW5wdXQuZmlsZXNdLm1hcCgoZmlsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RmlsZTogYXN5bmMgKCkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlucHV0LmNsaWNrKCk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIFNBVkVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgc2F2ZSggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBsZXQgdXNlUG9seSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciA9IEZpbGVzLnNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgICAgIHVzZVBvbHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuXHJcbiAgICAgICAgICAgIGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGVkTmFtZTogby5uYW1lIHx8ICdoZWxsbycsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBvLmRhdGEgfHwgJydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG4gICAgICAgICAgICBvcHRpb25zLmZpbmFsVHlwZSA9IE9iamVjdC5rZXlzKCBvcHRpb25zLnR5cGVzWzBdLmFjY2VwdCApWzBdXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc3VnZ2VzdGVkTmFtZSArPSBvcHRpb25zLnR5cGVzWzBdLmFjY2VwdFtvcHRpb25zLmZpbmFsVHlwZV1bMF1cclxuXHJcblxyXG4gICAgICAgICAgICAvLyBjcmVhdGUgYSBuZXcgaGFuZGxlXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIoIG9wdGlvbnMgKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB1c2VQb2x5ICkgcmV0dXJuXHJcblxyXG4gICAgICAgICAgICAvLyBjcmVhdGUgYSBGaWxlU3lzdGVtV3JpdGFibGVGaWxlU3RyZWFtIHRvIHdyaXRlIHRvXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGUuY3JlYXRlV3JpdGFibGUoKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOiBvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIHdyaXRlIG91ciBmaWxlXHJcbiAgICAgICAgICAgIGF3YWl0IGZpbGUud3JpdGUoYmxvYik7XHJcblxyXG4gICAgICAgICAgICAvLyBjbG9zZSB0aGUgZmlsZSBhbmQgd3JpdGUgdGhlIGNvbnRlbnRzIHRvIGRpc2suXHJcbiAgICAgICAgICAgIGF3YWl0IGZpbGUuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuc3VnZ2VzdGVkTmFtZSB8fCBcIm15LWZpbGUudHh0XCJcclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6b3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcbiAgICAgICAgICAgIGEuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoIGJsb2IgKVxyXG5cclxuICAgICAgICAgICAgYS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiBVUkwucmV2b2tlT2JqZWN0VVJMKGEuaHJlZiksIDEwMDAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBhLmNsaWNrKClcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgRk9MREVSIG5vdCBwb3NzaWJsZSBpbiBwb2x5XHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIGdldEZvbGRlcigpIHtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgIFxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd0RpcmVjdG9yeVBpY2tlcigpO1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGVudHJ5IG9mIGhhbmRsZS52YWx1ZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGVudHJ5LmdldEZpbGUoKTtcclxuICAgICAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGZpbGVzKVxyXG4gICAgICAgICAgICByZXR1cm4gZmlsZXM7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICBcclxuXHJcbn0iLCJleHBvcnQgY2xhc3MgVjIge1xyXG5cclxuXHRjb25zdHJ1Y3RvciggeCA9IDAsIHkgPSAwICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cclxuXHR9XHJcblxyXG5cdHNldCAoIHgsIHkgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRkaXZpZGUgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCAvPSB2Lng7XHJcblx0XHR0aGlzLnkgLz0gdi55O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bXVsdGlwbHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSB2Lng7XHJcblx0XHR0aGlzLnkgKj0gdi55O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bXVsdGlwbHlTY2FsYXIgKCBzY2FsYXIgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHNjYWxhcjtcclxuXHRcdHRoaXMueSAqPSBzY2FsYXI7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRkaXZpZGVTY2FsYXIgKCBzY2FsYXIgKSB7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoIDEgLyBzY2FsYXIgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZW5ndGggKCkge1xyXG5cclxuXHRcdHJldHVybiBNYXRoLnNxcnQoIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGFuZ2xlICgpIHtcclxuXHJcblx0XHQvLyBjb21wdXRlcyB0aGUgYW5nbGUgaW4gcmFkaWFucyB3aXRoIHJlc3BlY3QgdG8gdGhlIHBvc2l0aXZlIHgtYXhpc1xyXG5cclxuXHRcdHZhciBhbmdsZSA9IE1hdGguYXRhbjIoIHRoaXMueSwgdGhpcy54ICk7XHJcblxyXG5cdFx0aWYgKCBhbmdsZSA8IDAgKSBhbmdsZSArPSAyICogTWF0aC5QSTtcclxuXHJcblx0XHRyZXR1cm4gYW5nbGU7XHJcblxyXG5cdH1cclxuXHJcblx0YWRkU2NhbGFyICggcyApIHtcclxuXHJcblx0XHR0aGlzLnggKz0gcztcclxuXHRcdHRoaXMueSArPSBzO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnYXRlICgpIHtcclxuXHJcblx0XHR0aGlzLnggKj0gLTE7XHJcblx0XHR0aGlzLnkgKj0gLTE7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWcgKCkge1xyXG5cclxuXHRcdHRoaXMueCA9IC0xO1xyXG5cdFx0dGhpcy55ID0gLTE7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRpc1plcm8gKCkge1xyXG5cclxuXHRcdHJldHVybiAoIHRoaXMueCA9PT0gMCAmJiB0aGlzLnkgPT09IDAgKTtcclxuXHJcblx0fVxyXG5cclxuXHRjb3B5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggPSB2Lng7XHJcblx0XHR0aGlzLnkgPSB2Lnk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZXF1YWxzICggdiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueCA9PT0gdGhpcy54ICkgJiYgKCB2LnkgPT09IHRoaXMueSApICk7XHJcblxyXG5cdH1cclxuXHJcblx0bmVhckVxdWFscyAoIHYsIG4gKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LngudG9GaXhlZChuKSA9PT0gdGhpcy54LnRvRml4ZWQobikgKSAmJiAoIHYueS50b0ZpeGVkKG4pID09PSB0aGlzLnkudG9GaXhlZChuKSApICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVycCAoIHYsIGFscGhhICkge1xyXG5cclxuXHRcdGlmKCB2ID09PSBudWxsICl7XHJcblx0XHRcdHRoaXMueCAtPSB0aGlzLnggKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgLT0gdGhpcy55ICogYWxwaGE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnggKz0gKCB2LnggLSB0aGlzLnggKSAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSArPSAoIHYueSAtIHRoaXMueSApICogYWxwaGE7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgVjIgfSBmcm9tIFwiLi9WMi5qc1wiO1xyXG5cclxuLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIFByb3RvIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIC8vIGRpc2FibGUgbW91c2UgY29udHJvbGVcclxuICAgIHRoaXMubG9jayA9IG8ubG9jayB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBmb3IgYnV0dG9uXHJcbiAgICB0aGlzLm5ldmVybG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgc2ltcGxlIHNwYWNlXHJcbiAgICB0aGlzLmlzU3BhY2UgPSBvLmlzU3BhY2UgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gaWYgaXMgb24gZ3VpIG9yIGdyb3VwXHJcbiAgICB0aGlzLm1haW4gPSBvLm1haW4gfHwgbnVsbDtcclxuICAgIHRoaXMuaXNVSSA9IG8uaXNVSSB8fCBmYWxzZTtcclxuICAgIHRoaXMuZ3JvdXAgPSBvLmdyb3VwIHx8IG51bGw7XHJcblxyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudG9wID0gMDtcclxuICAgIHRoaXMueXRvcCA9IDA7XHJcblxyXG4gICAgdGhpcy5keCA9IG8uZHggfHwgMDtcclxuXHJcbiAgICB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZSAhPT0gdW5kZWZpbmVkID8gby5zZWxlY3RhYmxlIDogZmFsc2U7XHJcbiAgICB0aGlzLnVuc2VsZWN0YWJsZSA9XHJcbiAgICAgIG8udW5zZWxlY3QgIT09IHVuZGVmaW5lZCA/IG8udW5zZWxlY3QgOiB0aGlzLmlzU2VsZWN0YWJsZTtcclxuXHJcbiAgICB0aGlzLm9udG9wID0gby5vbnRvcCA/IG8ub250b3AgOiBmYWxzZTsgLy8gJ2JlZm9yZWJlZ2luJyAnYWZ0ZXJiZWdpbicgJ2JlZm9yZWVuZCcgJ2FmdGVyZW5kJ1xyXG5cclxuICAgIHRoaXMuY3NzID0gdGhpcy5tYWluID8gdGhpcy5tYWluLmNzcyA6IFRvb2xzLmNzcztcclxuXHJcbiAgICB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKFxyXG4gICAgICBvLFxyXG4gICAgICB0aGlzLm1haW5cclxuICAgICAgICA/IHRoaXMuZ3JvdXBcclxuICAgICAgICAgID8gdGhpcy5ncm91cC5jb2xvcnNcclxuICAgICAgICAgIDogdGhpcy5tYWluLmNvbG9yc1xyXG4gICAgICAgIDogVG9vbHMuY29sb3JzXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMub3ZlckVmZmVjdCA9IHRoaXMuY29sb3JzLnNob3dPdmVyO1xyXG5cclxuICAgIHRoaXMuc3ZncyA9IFRvb2xzLnN2Z3M7XHJcblxyXG4gICAgdGhpcy56b25lID0geyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwLCBkOiAwIH07XHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBwZXJjZW50IG9mIHRpdGxlXHJcbiAgICB0aGlzLnAgPSBvLnAgIT09IHVuZGVmaW5lZCA/IG8ucCA6IFRvb2xzLnNpemUucDtcclxuXHJcbiAgICB0aGlzLncgPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS53IDogVG9vbHMuc2l6ZS53O1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLncgPSBvLnc7XHJcblxyXG4gICAgdGhpcy5oID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUuaCA6IFRvb2xzLnNpemUuaDtcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5oID0gby5oO1xyXG4gICAgaWYgKCF0aGlzLmlzU3BhY2UpIHRoaXMuaCA9IHRoaXMuaCA8IDExID8gMTEgOiB0aGlzLmg7XHJcbiAgICBlbHNlIHRoaXMubG9jayA9IHRydWU7XHJcblxyXG4gICAgLy8gZGVjYWxlIGZvciBjYW52YXMgb25seVxyXG4gICAgdGhpcy5mdyA9IG8uZncgfHwgMDtcclxuXHJcbiAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0byB8fCB0cnVlOyAvLyBhdXRvIHdpZHRoIG9yIGZsZXhcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7IC8vZmFsc2UvLyBvcGVuIHN0YXR1XHJcblxyXG4gICAgLy8gcmFkaXVzIGZvciB0b29sYm94XHJcbiAgICB0aGlzLnJhZGl1cyA9IG8ucmFkaXVzIHx8IHRoaXMuY29sb3JzLnJhZGl1cztcclxuXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPSBvLnRyYW5zaXRpb24gfHwgVG9vbHMudHJhbnNpdGlvbjtcclxuXHJcbiAgICAvLyBvbmx5IGZvciBudW1iZXJcclxuICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuICAgIHRoaXMubm9OZWcgPSBvLm5vTmVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5hbGxFcXVhbCA9IG8uYWxsRXF1YWwgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBtb3N0IHNpbXBsZVxyXG4gICAgdGhpcy5tb25vID0gZmFsc2U7XHJcblxyXG4gICAgLy8gc3RvcCBsaXN0ZW5pbmcgZm9yIGVkaXQgc2xpZGUgdGV4dFxyXG4gICAgdGhpcy5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBubyB0aXRsZVxyXG4gICAgdGhpcy5zaW1wbGUgPSBvLnNpbXBsZSB8fCBmYWxzZTtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYSA9IDA7XHJcblxyXG4gICAgLy8gZGVmaW5lIG9iaiBzaXplXHJcbiAgICB0aGlzLnNldFNpemUodGhpcy53KTtcclxuXHJcbiAgICAvLyB0aXRsZSBzaXplXHJcbiAgICBpZiAoby5zYSAhPT0gdW5kZWZpbmVkKSB0aGlzLnNhID0gby5zYTtcclxuICAgIGlmIChvLnNiICE9PSB1bmRlZmluZWQpIHRoaXMuc2IgPSBvLnNiO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuXHJcbiAgICAvLyBsYXN0IG51bWJlciBzaXplIGZvciBzbGlkZVxyXG4gICAgdGhpcy5zYyA9IG8uc2MgPT09IHVuZGVmaW5lZCA/IDQ3IDogby5zYztcclxuXHJcbiAgICAvLyBmb3IgbGlzdGVuaW5nIG9iamVjdFxyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gbnVsbDtcclxuICAgIHRoaXMuaXNTZW5kID0gZmFsc2U7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy50eHQgPSBvLm5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMubmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0O1xyXG4gICAgdGhpcy50YXJnZXQgPSBvLnRhcmdldCB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNhbGxiYWNrXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gby5vcGVuQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLm9wZW5DYWxsYmFjaztcclxuICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9IG8uY2xvc2VDYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2xvc2VDYWxsYmFjaztcclxuXHJcbiAgICAvLyBpZiBubyBjYWxsYmFjayB0YWtlIG9uZSBmcm9tIGdyb3VwIG9yIGd1aVxyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2sgPT09IG51bGwgJiYgdGhpcy5pc1VJICYmIHRoaXMubWFpbi5jYWxsYmFjayAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmNhbGxiYWNrID0gdGhpcy5ncm91cCA/IHRoaXMuZ3JvdXAuY2FsbGJhY2sgOiB0aGlzLm1haW4uY2FsbGJhY2s7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZWxlbWVudHNcclxuICAgIHRoaXMuYyA9IFtdO1xyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLnMgPSBbXTtcclxuXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4udXNlRmxleCA6IGZhbHNlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4XHJcbiAgICAgID8gXCJkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGFsaWduLWl0ZW1zOmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7IGZsZXg6IDEgMTAwJTtcIlxyXG4gICAgICA6IFwiZmxvYXQ6bGVmdDtcIjtcclxuXHJcbiAgICB0aGlzLmNbMF0gPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcInBvc2l0aW9uOnJlbGF0aXZlOyBoZWlnaHQ6MjBweDtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnNbMF0gPSB0aGlzLmNbMF0uc3R5bGU7XHJcblxyXG4gICAgLy8gYm90dG9tIG1hcmdpblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubXRvcCA9IDA7XHJcbiAgICBsZXQgbWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSAmJiB0aGlzLm1hcmdpbikge1xyXG4gICAgICB0aGlzLnNbMF0uYm94U2l6aW5nID0gXCJjb250ZW50LWJveFwiO1xyXG4gICAgICBpZiAobWFyZ2luRGl2KSB7XHJcbiAgICAgICAgdGhpcy5tdG9wID0gdGhpcy5tYXJnaW4gKiAwLjU7XHJcbiAgICAgICAgLy90aGlzLnNbMF0uYm9yZGVyVG9wID0gJyR7dGhpcy5tdG9wfXB4IHNvbGlkIHRyYW5zcGFyZW50J1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coYCR7dGhpcy5tdG9wfXB4IHNvbGlkIHRyYW5zcGFyZW50YClcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyVG9wID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubWFyZ2luICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gd2l0aCB0aXRsZVxyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLmNbMV0gPSBUb29scy5kb20oXCJkaXZcIiwgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlKTtcclxuICAgICAgdGhpcy5zWzFdID0gdGhpcy5jWzFdLnN0eWxlO1xyXG4gICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLm5hbWU7XHJcbiAgICAgIHRoaXMuc1sxXS5jb2xvciA9IHRoaXMubG9jayA/IHRoaXMuY29sb3JzLnRpdGxlb2ZmIDogdGhpcy5jb2xvcnMudGl0bGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG8ucG9zKSB7XHJcbiAgICAgIHRoaXMuc1swXS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgZm9yIChsZXQgcCBpbiBvLnBvcykge1xyXG4gICAgICAgIHRoaXMuc1swXVtwXSA9IG8ucG9zW3BdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubW9ubyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG8uY3NzKSB0aGlzLnNbMF0uY3NzVGV4dCA9IG8uY3NzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG1ha2UgdGhlIG5vZGVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXQoKSB7XHJcbiAgICB0aGlzLnl0b3AgPSB0aGlzLnRvcCArIHRoaXMubXRvcDtcclxuXHJcbiAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMubWFyZ2luO1xyXG4gICAgdGhpcy56b25lLncgPSB0aGlzLnc7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7IC8vIHN0eWxlIGNhY2hlXHJcbiAgICBsZXQgYyA9IHRoaXMuYzsgLy8gZGl2IGNhY2hcclxuXHJcbiAgICBzWzBdLmhlaWdodCA9IHRoaXMuaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJKSBzWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGggJiYgdGhpcy51c2VGbGV4KSB7XHJcbiAgICAgIHNbMF0uZmxleCA9IFwiMSAwIGF1dG9cIjtcclxuICAgICAgc1swXS5taW5XaWR0aCA9IHRoaXMubWludyArIFwicHhcIjtcclxuICAgICAgc1swXS50ZXh0QWxpZ24gPSBcImNlbnRlclwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgc1swXS53aWR0aCA9IFwiMTAwJVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vaWYoIHRoaXMuYXV0b0hlaWdodCApIHNbMF0udHJhbnNpdGlvbiA9ICdoZWlnaHQgMC4wMXMgZWFzZS1vdXQnO1xyXG4gICAgaWYgKGNbMV0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmF1dG9XaWR0aCkge1xyXG4gICAgICBzWzFdID0gY1sxXS5zdHlsZTtcclxuICAgICAgc1sxXS50b3AgPSAxICsgXCJweFwiO1xyXG4gICAgICBzWzFdLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZyYWcgPSBUb29scy5mcmFnO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAxLCBsbmcgPSBjLmxlbmd0aDsgaSAhPT0gbG5nOyBpKyspIHtcclxuICAgICAgaWYgKGNbaV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoY1tpXSk7XHJcbiAgICAgICAgc1tpXSA9IGNbaV0uc3R5bGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHAgPVxyXG4gICAgICB0aGlzLnRhcmdldCAhPT0gbnVsbFxyXG4gICAgICAgID8gdGhpcy50YXJnZXRcclxuICAgICAgICA6IHRoaXMuaXNVSVxyXG4gICAgICAgID8gdGhpcy5tYWluLmlubmVyXHJcbiAgICAgICAgOiBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICh0aGlzLm9udG9wKSBwcC5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJhZnRlcmJlZ2luXCIsIGNbMF0pO1xyXG4gICAgZWxzZSBwcC5hcHBlbmRDaGlsZChjWzBdKTtcclxuXHJcbiAgICBjWzBdLmFwcGVuZENoaWxkKGZyYWcpO1xyXG5cclxuICAgIHRoaXMuclNpemUoKTtcclxuXHJcbiAgICAvLyAhIHNvbG8gcHJvdG9cclxuICAgIGlmICghdGhpcy5pc1VJKSB7XHJcbiAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZFRyYW5zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5iYXNlSCAmJiB0aGlzLnRyYW5zaXRpb24gJiYgdGhpcy5pc1VJKSB7XHJcbiAgICAgIHRoaXMuY1swXS5zdHlsZS50cmFuc2l0aW9uID0gXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGZyb20gVG9vbHNcclxuXHJcbiAgZG9tKHR5cGUsIGNzcywgb2JqLCBkb20sIGlkKSB7XHJcbiAgICByZXR1cm4gVG9vbHMuZG9tKHR5cGUsIGNzcywgb2JqLCBkb20sIGlkKTtcclxuICB9XHJcblxyXG4gIHNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKSB7XHJcbiAgICBUb29scy5zZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMik7XHJcbiAgfVxyXG5cclxuICBzZXRDc3MoZG9tLCBjc3MpIHtcclxuICAgIFRvb2xzLnNldENzcyhkb20sIGNzcyk7XHJcbiAgfVxyXG5cclxuICBjbGFtcCh2YWx1ZSwgbWluLCBtYXgpIHtcclxuICAgIHJldHVybiBUb29scy5jbGFtcCh2YWx1ZSwgbWluLCBtYXgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sb3JSaW5nKCkge1xyXG4gICAgaWYgKCFUb29scy5jb2xvclJpbmcpIFRvb2xzLm1ha2VDb2xvclJpbmcoKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jb2xvclJpbmcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Sm95c3RpY2sobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSkgVG9vbHMubWFrZUpveXN0aWNrKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKTtcclxuICB9XHJcblxyXG4gIGdldENpcmN1bGFyKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNpcmN1bGFyKSBUb29scy5tYWtlQ2lyY3VsYXIobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNpcmN1bGFyKTtcclxuICB9XHJcblxyXG4gIGdldEtub2IobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMua25vYikgVG9vbHMubWFrZUtub2IobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmtub2IpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFkMmQobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMucGFkMmQpIFRvb2xzLm1ha2VQYWQobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLnBhZDJkKTtcclxuICB9XHJcblxyXG4gIC8vIGZyb20gUm9vdHNcclxuXHJcbiAgY3Vyc29yKG5hbWUpIHtcclxuICAgIFJvb3RzLmN1cnNvcihuYW1lKTtcclxuICB9XHJcblxyXG4gIC8vLy8vLy8vL1xyXG5cclxuICB1cGRhdGUoKSB7fVxyXG5cclxuICByZXNldCgpIHt9XHJcblxyXG4gIC8vLy8vLy8vL1xyXG5cclxuICBjb250ZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIGdldERvbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICB1aW91dCgpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcbiAgfVxyXG5cclxuICB1aW92ZXIoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuICB9XHJcblxyXG4gIHJlbmFtZShzKSB7XHJcbiAgICBpZiAodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHM7XHJcbiAgfVxyXG5cclxuICBsaXN0ZW4oKSB7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gUm9vdHMuYWRkTGlzdGVuKHRoaXMpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBsaXN0ZW5pbmcoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc1NlbmQpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzRWRpdCkgcmV0dXJuO1xyXG4gICAgLy8gY2hlY2sgaWYgdmFsdWUgaGFzIGNoYW5nZWRcclxuICAgIGxldCBoYXNDaGFuZ2VkID0gdGhpcy5zZXRWYWx1ZSh0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldKTtcclxuICAgIHJldHVybiBoYXNDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWUodikge1xyXG4gICAgY29uc3Qgb2xkID0gdGhpcy52YWx1ZTtcclxuICAgIGlmICh0aGlzLmlzTnVtYmVyKSB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh2KTtcclxuICAgIC8vZWxzZSBpZiggdiBpbnN0YW5jZW9mIEFycmF5ICYmIHYubGVuZ3RoID09PSAxICkgdiA9IHZbMF07XHJcbiAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICAgIGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICBpZiAob2xkICE9PSB0aGlzLnZhbHVlKSB7XHJcbiAgICAgIGhhc0NoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoYXNDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBldmVyeSBjaGFuZ2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uQ2hhbmdlKGYpIHtcclxuICAgIGlmICh0aGlzLmlzU3BhY2UpIHJldHVybjtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBmIHx8IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgb25seSBvbiBlbmRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRmluaXNoQ2hhbmdlKGYpIHtcclxuICAgIGlmICh0aGlzLmlzU3BhY2UpIHJldHVybjtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBldmVudCBvbiBvcGVuIGNsb3NlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbk9wZW4oZikge1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBvbkNsb3NlKGYpIHtcclxuICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgc2VuZCBiYWNrIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZW5kKHYpIHtcclxuICAgIHYgPSB2IHx8IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHYubGVuZ3RoID09PSAxKSB2ID0gdlswXTtcclxuXHJcbiAgICB0aGlzLmlzU2VuZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrKSB0aGlzLmNhbGxiYWNrKHYsIHRoaXMub2JqZWN0S2V5KTtcclxuICAgIHRoaXMuaXNTZW5kID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZW5kRW5kKHYpIHtcclxuICAgIHYgPSB2IHx8IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHYubGVuZ3RoID09PSAxKSB2ID0gdlswXTtcclxuXHJcbiAgICBpZiAodGhpcy5lbmRDYWxsYmFjaykgdGhpcy5lbmRDYWxsYmFjayh2KTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGNsZWFyIG5vZGVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICBpZiAodGhpcy5pc0xpc3RlbikgUm9vdHMucmVtb3ZlTGlzdGVuKHRoaXMpO1xyXG5cclxuICAgIFRvb2xzLmNsZWFyKHRoaXMuY1swXSk7XHJcblxyXG4gICAgaWYgKHRoaXMudGFyZ2V0ICE9PSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLmdyb3VwICE9PSBudWxsKSB0aGlzLmdyb3VwLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIHRoaXMudGFyZ2V0LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSB0aGlzLm1haW4uY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pc1VJKSBSb290cy5yZW1vdmUodGhpcyk7XHJcblxyXG4gICAgdGhpcy5jID0gbnVsbDtcclxuICAgIHRoaXMucyA9IG51bGw7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNsZWFyKCkge31cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGNoYW5nZSBzaXplXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBnZXRXaWR0aCgpIHtcclxuICAgIGxldCBudyA9IFJvb3RzLmdldFdpZHRoKHRoaXMpO1xyXG4gICAgaWYgKG53KSB0aGlzLncgPSBudztcclxuICB9XHJcblxyXG4gIHNldFNpemUoc3gpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLncgPSBzeDtcclxuXHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgcHAgPSB0aGlzLncgKiAodGhpcy5wIC8gMTAwKTtcclxuICAgICAgLy90aGlzLnNhID0gTWF0aC5mbG9vciggcHAgKyAxMCApXHJcbiAgICAgIC8vdGhpcy5zYiA9IE1hdGguZmxvb3IoIHRoaXMudyAtIHBwIC0gMjAgKVxyXG4gICAgICB0aGlzLnNhID0gTWF0aC5mbG9vcihwcCArIDgpO1xyXG4gICAgICB0aGlzLnNiID0gTWF0aC5mbG9vcih0aGlzLncgLSBwcCAtIDE2KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHRoaXMuc1swXS53aWR0aCA9IHRoaXMudyArIFwicHhcIjtcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZm9yIG51bWVyaWMgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFR5cGVOdW1iZXIobykge1xyXG4gICAgdGhpcy5pc051bWJlciA9IHRydWU7XHJcblxyXG4gICAgdGhpcy52YWx1ZSA9IDA7XHJcbiAgICBpZiAoby52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygby52YWx1ZSA9PT0gXCJzdHJpbmdcIikgdGhpcy52YWx1ZSA9IG8udmFsdWUgKiAxO1xyXG4gICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWluID0gby5taW4gPT09IHVuZGVmaW5lZCA/IC1JbmZpbml0eSA6IG8ubWluO1xyXG4gICAgdGhpcy5tYXggPSBvLm1heCA9PT0gdW5kZWZpbmVkID8gSW5maW5pdHkgOiBvLm1heDtcclxuICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IDIgOiBvLnByZWNpc2lvbjtcclxuXHJcbiAgICBsZXQgcztcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMucHJlY2lzaW9uKSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBzID0gMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHMgPSAwLjE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBzID0gMC4wMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIHMgPSAwLjAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIHMgPSAwLjAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNTpcclxuICAgICAgICBzID0gMC4wMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA2OlxyXG4gICAgICAgIHMgPSAwLjAwMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0ZXAgPSBvLnN0ZXAgPT09IHVuZGVmaW5lZCA/IHMgOiBvLnN0ZXA7XHJcbiAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXggLSB0aGlzLm1pbjtcclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgbnVtVmFsdWUobikge1xyXG4gICAgaWYgKHRoaXMubm9OZWcpIG4gPSBNYXRoLmFicyhuKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIE1hdGgubWluKHRoaXMubWF4LCBNYXRoLm1heCh0aGlzLm1pbiwgbikpLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICogMVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UUyBERUZBVUxUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5uZXZlcmxvY2spIFJvb3RzLmxvY2sgPSBmYWxzZTtcclxuICAgIGlmICghdGhpc1tlLnR5cGVdKVxyXG4gICAgICByZXR1cm4gY29uc29sZS5lcnJvcihlLnR5cGUsIFwidGhpcyB0eXBlIG9mIGV2ZW50IG5vIGV4aXN0ZSAhXCIpO1xyXG5cclxuICAgIC8vIFRPRE8gISEhIVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgei5kIC09IHRoaXMubWFyZ2luICogMC41XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5ncm91cC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICByZXR1cm4gdGhpc1tlLnR5cGVdKGUpO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBtb3VzZXVwKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5ZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleXVwKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBvYmplY3QgcmVmZXJlbmN5XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRSZWZlcmVuY3kob2JqLCBrZXkpIHtcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG9iajtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0ga2V5O1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheSh2ID0gZmFsc2UpIHtcclxuICAgIHRoaXMuc1swXS52aXNpYmlsaXR5ID0gdiA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyByZXNpemUgaGVpZ2h0XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvcGVuKCkge1xyXG4gICAgaWYgKHRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9wZW5DYWxsYmFjaykgdGhpcy5vcGVuQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuY2xvc2VDYWxsYmFjaykgdGhpcy5jbG9zZUNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBuZWVkWm9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIElOUFVUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3QoKSB7fVxyXG5cclxuICB1bnNlbGVjdCgpIHt9XHJcblxyXG4gIHNldElucHV0KElucHV0KSB7XHJcbiAgICBSb290cy5zZXRJbnB1dChJbnB1dCwgdGhpcyk7XHJcbiAgfVxyXG5cclxuICB1cElucHV0KHgsIGRvd24pIHtcclxuICAgIHJldHVybiBSb290cy51cElucHV0KHgsIGRvd24pO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHNwZWNpYWwgaXRlbVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0ZWQoYikge1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQm9vbCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby5vbk5hbWUgKSBvLm9ubmFtZSA9IG8ub25OYW1lXHJcbiAgICAgICAgaWYoIG8ub25uYW1lICkgdGhpcy5vbk5hbWUgPSBvLm9ubmFtZVxyXG5cclxuICAgICAgICB0aGlzLmluaCA9IG8uaW5oIHx8IE1hdGguZmxvb3IoIHRoaXMuaCowLjggKVxyXG4gICAgICAgIHRoaXMuaW53ID0gby5pbncgfHwgMzZcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIGxldCB0ID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0oKHRoaXMuaW5oLTIpKjAuNSk7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYmFja2dyb3VuZDonKyBjYy5pbnB1dEJnICsnOyBoZWlnaHQ6JysodGhpcy5pbmgtMikrJ3B4OyB3aWR0aDonK3RoaXMuaW53KydweDsgdG9wOicrdCsncHg7IGJvcmRlci1yYWRpdXM6MTBweDsgYm9yZGVyOjJweCBzb2xpZCAnKyBjYy5iYWNrIClcclxuICAgICAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdoZWlnaHQ6JysodGhpcy5pbmgtNikrJ3B4OyB3aWR0aDoxNnB4OyB0b3A6JysodCsyKSsncHg7IGJvcmRlci1yYWRpdXM6MTBweDsgYmFja2dyb3VuZDonKyBjYy5idXR0b24rJzsnIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnAgPSAwXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gLTFcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICF0aGlzLnZhbHVlXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0cnVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZSAoIG92ZXIgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zLCBuLCB2ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBpZiggb3ZlciApIG4gPSB2ID8gNCA6IDNcclxuICAgICAgICBlbHNlIG4gPSB2ID8gMiA6IDFcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZWwgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmNvbG9yID0gY2MudGV4dDsgc1syXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB2ID8gdGhpcy5vbk5hbWUgOiB0aGlzLm5hbWVcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7Ly8gb2ZmIG91dFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyBicmVhazsvLyBvbiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7Ly8gb2ZmIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0U2VsZWN0OyBicmVhazsvLyBvbiBvdXRcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgc1szXS5tYXJnaW5MZWZ0ID0gdiA/ICcxN3B4JyA6ICcycHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB2ID8gdGhpcy5vbk5hbWUgOiB0aGlzLm5hbWVcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKClcclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLncgLSAxMCApIC0gdGhpcy5pbndcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB3ICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzNdLmxlZnQgPSB3ICsgJ3B4J1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnXHJcbiAgICAgICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICArICdweCdcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCdXR0b24gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuXHJcbiAgICAgICAgaWYoICFvLnZhbHVlcyAmJiAhby52YWx1ZSApIHRoaXMudHh0ID0gJydcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLm9uTmFtZSB8fCBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLm9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGJ1dHRvbiB3aWR0aFxyXG4gICAgICAgIHRoaXMuYncgPSBvLmZvcmNlV2lkdGggfHwgMFxyXG4gICAgICAgIGlmKG8uYncpIHRoaXMuYncgPSBvLmJ3XHJcbiAgICAgICAgdGhpcy5zcGFjZSA9IG8uc3BhY2UgfHwgM1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuICAgICAgICB0aGlzLnJlcyA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW11cclxuXHJcbiAgICAgICAgbGV0IHNlbCwgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBzZWwgPSBmYWxzZVxyXG4gICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbaV0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbaV07XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpXSA9IHNlbCA/IDM6MTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMudHh0PT09JycgKSB0aGlzLnAgPSAwIFxyXG5cclxuICAgICAgICBpZiggKCFvLnZhbHVlICYmICFvLnZhbHVlcykgfHwgdGhpcy5wID09PSAwICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9ICcnXHJcbiAgICAgICAgfSBcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9uT2ZmKCkge1xyXG5cclxuICAgICAgICB0aGlzLm9uID0gIXRoaXMub247XHJcbiAgICAgICAgdGhpcy5sYWJlbCggdGhpcy5vbiA/IHRoaXMub25OYW1lIDogdGhpcy52YWx1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICBcdGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gLTFcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdICYmIHRoaXMudW5zZWxlY3RhYmxlICkgdGhpcy52YWx1ZSA9ICcnXHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICBpZiggdGhpcy5vbk5hbWUgIT09IG51bGwgKSB0aGlzLm9uT2ZmKClcclxuICAgICAgICAgICAgdGhpcy5zZW5kKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgXHRyZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMucmVzID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIHRoaXMucmVzIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFx0dXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1vZGUoIG4sIGkgKSApIHIgPSB0cnVlXHJcbiAgICAgICAgICAgIHIgPSB0aGlzLm1vZGUoIG4sIGkgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgLy9pZighdGhpcy5zKSByZXR1cm4gZmFsc2VcclxuIFxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gaWQrMlxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICBuID0gbiB8fCAyO1xyXG4gICAgICAgIHRoaXMuY1tuXS50ZXh0Q29udGVudCA9IHN0cmluZ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2hWYWx1ZXMoIG4sIHN0cmluZyApe1xyXG4gICAgICAgIHRoaXMuY1tuKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dID0gc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHkgPSAwLCBuID0gMiApIHtcclxuXHJcbiAgICAgICAgLy9pZih5KSB0aGlzLnNbbl0ubWFyZ2luID0gKCB5ICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuc1tuXS5wYWRkaW5nID0gKCB5ICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuY1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgc3ggPSB0aGlzLmNvbG9ycy5zeCAvL3RoaXMuc3BhY2U7XHJcbiAgICAgICAgLy9sZXQgc2l6ZSA9IE1hdGguZmxvb3IoICggdy0oZGMqKGktMSkpICkgLyBpICk7XHJcbiAgICAgICAgbGV0IHNpemUgPSAoIHctKHN4KihpLTEpKSApIC8gaSBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYncgKXsgXHJcbiAgICAgICAgICAgIHNpemUgPSB0aGlzLmJ3IDwgc2l6ZSA/IHRoaXMuYncgOiBzaXplXHJcbiAgICAgICAgICAgIC8vZCA9IE1hdGguZmxvb3IoKHRoaXMudy0oIChzaXplICogaSkgKyAoZGMgKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgICAgICBkID0gKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKHN4ICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgXHQvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCBkICsgKCBzaXplICogaSApICsgKCBkYyAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggZCArICggc2l6ZSAqIGkgKSArICggc3ggKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgXHR0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV07XHJcblxyXG4gICAgICAgICAgICBzW2krMl0ubGVmdCA9IHRoaXMudG1wW2ldWzBdICsgJ3B4J1xyXG4gICAgICAgICAgICBzW2krMl0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENpcmN1bGFyIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMFxyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGVcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubWludyA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudHdvUGkgPSBUb29scy5Ud29QSVxyXG4gICAgICAgIHRoaXMucGk5MCA9IFRvb2xzLnBpOTBcclxuXHJcbiAgICAgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKVxyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTBcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMFxyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDBcclxuICAgICAgICB0aGlzLmNtb2RlID0gMFxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApXHJcblxyXG4gICAgICAgIC8vIHN2Z1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Q2lyY3VsYXIoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIGxldCBjb2xvclxyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHRPdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBcclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdjaXJjdWxhcic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygnb3ZlcicpXHJcblxyXG4gICAgICAgIGxldCBvZmYgPSB0aGlzLm9mZnNldDtcclxuICAgICAgICBvZmYueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICBvZmYueSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gb2ZmLmFuZ2xlKCkgLSB0aGlzLnBpOTA7XHJcbiAgICAgICAgdGhpcy5yID0gKCgodGhpcy5yJXRoaXMudHdvUGkpK3RoaXMudHdvUGkpJXRoaXMudHdvUGkpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgbGV0IGRpZiA9IHRoaXMuciAtIHRoaXMub2xkcjtcclxuICAgICAgICAgICAgdGhpcy5yID0gTWF0aC5hYnMoZGlmKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgICAgICBpZiggZGlmID4gNiApIHRoaXMuciA9IDA7XHJcbiAgICAgICAgICAgIGlmKCBkaWYgPCAtNiApIHRoaXMuciA9IHRoaXMudHdvUGk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHN0ZXBzID0gMSAvIHRoaXMudHdvUGk7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5yICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gfn4gKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdjaXJjdWxhcicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gNDA7XHJcbiAgICAgICAgbGV0IGQgPSAyNDtcclxuICAgICAgICBsZXQgYSA9IHRoaXMucGVyY2VudCAqIHRoaXMudHdvUGkgLSAwLjAwMTtcclxuICAgICAgICBsZXQgeDIgPSAociArIHIgKiBNYXRoLnNpbihhKSkgKyBkO1xyXG4gICAgICAgIGxldCB5MiA9IChyIC0gciAqIE1hdGguY29zKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IGJpZyA9IGEgPiBNYXRoLlBJID8gMSA6IDA7XHJcbiAgICAgICAgcmV0dXJuIFwiTSBcIiArIChyK2QpICsgXCIsXCIgKyBkICsgXCIgQSBcIiArIHIgKyBcIixcIiArIHIgKyBcIiAwIFwiICsgYmlnICsgXCIgMSBcIiArIHgyICsgXCIsXCIgKyB5MjtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKCB0aGlzLnZhbHVlIC0gdGhpcy5taW4gKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxICk7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xvciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuXHQgICAgLy90aGlzLmF1dG9IZWlnaHQgPSB0cnVlO1xyXG5cclxuXHQgICAgdGhpcy5jdHlwZSA9IG8uY3R5cGUgfHwgJ2hleCc7XHJcblxyXG5cdCAgICB0aGlzLndmaXhlID0gMjU2O1xyXG5cclxuXHQgICAgdGhpcy5jdyA9IHRoaXMuc2IgPiAyNTYgPyAyNTYgOiB0aGlzLnNiO1xyXG5cdCAgICBpZihvLmN3ICE9IHVuZGVmaW5lZCApIHRoaXMuY3cgPSBvLmN3O1xyXG5cclxuXHJcblxyXG5cdCAgICAvLyBjb2xvciB1cCBvciBkb3duXHJcblx0ICAgIHRoaXMuc2lkZSA9IG8uc2lkZSB8fCAnZG93bic7XHJcblx0ICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcblx0ICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMuZGVjYWwgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5wcCA9IG5ldyBWMigpO1xyXG5cclxuXHQgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblx0ICAgLy8gdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7JyArICdib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OyB0ZXh0LXNoYWRvdzpub25lOyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOycgKVxyXG5cclxuXHQgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCBgJHt0aGlzLmNzcy50eHR9ICR7dGhpcy5jc3MubWlkZGxlfSB0b3A6MXB4OyBoZWlnaHQ6JHt0aGlzLmgtMn1weDsgYm9yZGVyLXJhZGl1czoke3RoaXMucmFkaXVzfXB4OyB0ZXh0LXNoYWRvdzpub25lOyBib3JkZXI6JHtjYy5ib3JkZXJTaXplfXB4IHNvbGlkICR7Y2MuYm9yZGVyfTtgIClcclxuXHQgICAgLy90aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG5cdCAgICAvL3RoaXMuc1syXS50ZXh0U2hhZG93ID0gJ25vbmUnXHJcblxyXG5cdCAgICAvKmlmKCB0aGlzLnVwICl7XHJcblx0ICAgICAgICB0aGlzLnNbMl0udG9wID0gJ2F1dG8nO1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLmJvdHRvbSA9ICcycHgnO1xyXG5cdCAgICB9Ki9cclxuXHJcblx0ICAgIC8vdGhpcy5jWzBdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG5cdCAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcblx0ICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Q29sb3JSaW5nKClcclxuXHQgICAgdGhpcy5jWzNdLnN0eWxlLnZpc2liaWxpdHkgID0gJ2hpZGRlbidcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gbnVsbFxyXG5cdCAgICB0aGlzLnZhbHVlID0gJyNmZmZmZmYnXHJcblx0ICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuXHQgICAgICAgIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKSB0aGlzLnZhbHVlID0gVG9vbHMucmdiVG9IZXgoIG8udmFsdWUgKVxyXG5cdCAgICAgICAgZWxzZSBpZighaXNOYU4oby52YWx1ZSkpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIG8udmFsdWUgKVxyXG5cdCAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cdCAgICB9XHJcblxyXG5cdCAgICB0aGlzLmJjb2xvciA9IG51bGxcclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG5cdCAgICB0aGlzLmZpc3REb3duID0gZmFsc2VcclxuXHJcblx0ICAgIHRoaXMubm90ZXh0ID0gby5ub3RleHQgfHwgZmFsc2VcclxuXHJcblx0ICAgIHRoaXMudHIgPSA5OFxyXG5cdCAgICB0aGlzLnRzbCA9IE1hdGguc3FydCgzKSAqIHRoaXMudHJcclxuXHJcblx0ICAgIHRoaXMuaHVlID0gMFxyXG5cdCAgICB0aGlzLmQgPSAyNTZcclxuXHJcblx0ICAgIHRoaXMuaW5pdCgpXHJcblxyXG5cdCAgICB0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuXHJcblx0ICAgIGlmKCBvLm9wZW4gIT09IHVuZGVmaW5lZCApIHRoaXMub3BlbigpXHJcblxyXG5cdH1cclxuXHJcblx0dGVzdFpvbmUgKCBteCwgbXkgKSB7XHJcblxyXG5cdFx0bGV0IGwgPSB0aGlzLmxvY2FsXHJcblx0XHRpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG5cdFx0aWYoIHRoaXMudXAgJiYgdGhpcy5pc09wZW4gKXtcclxuXHJcblx0XHRcdGlmKCBsLnkgPiB0aGlzLndmaXhlICkgcmV0dXJuICd0aXRsZSdcclxuXHRcdCAgICBlbHNlIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdGlmKCBsLnkgPCB0aGlzLmJhc2VIKzIgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdCAgICBcdGVsc2UgaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9XHJcblxyXG4gICAgfVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRtb3VzZXVwICggZSApIHtcclxuXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblx0ICAgIHRoaXMuZCA9IDI1NjtcclxuXHJcblx0fVxyXG5cclxuXHRtb3VzZWRvd24gKCBlICkge1xyXG5cclxuXHJcblx0XHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cclxuXHRcdC8vaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cdFx0aWYobmFtZSA9PT0gJ3RpdGxlJyl7XHJcblx0XHRcdGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKTtcclxuXHQgICAgICAgIGVsc2UgdGhpcy5jbG9zZSgpO1xyXG5cdCAgICAgICAgcmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdFx0XHR0aGlzLmlzRG93biA9IHRydWU7XHJcblx0XHRcdHRoaXMuZmlzdERvd24gPSB0cnVlXHJcblx0XHRcdHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuXHQgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHQgICAgbGV0IG9mZiwgZCwgaHVlLCBzYXQsIGx1bSwgcmFkLCB4LCB5LCByciwgVCA9IFRvb2xzO1xyXG5cclxuXHQgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG5cclxuXHQgICAgaWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0ICAgIFx0b2ZmID0gdGhpcy5vZmZzZXQ7XHJcblx0XHQgICAgb2ZmLnggPSBlLmNsaWVudFggLSAoIHRoaXMuem9uZS54ICsgdGhpcy5kZWNhbC54ICsgdGhpcy5taWQgKTtcclxuXHRcdCAgICBvZmYueSA9IGUuY2xpZW50WSAtICggdGhpcy56b25lLnkgKyB0aGlzLmRlY2FsLnkgKyB0aGlzLm1pZCApIC0gdGhpcy55dG9wO1xyXG5cdFx0XHRkID0gb2ZmLmxlbmd0aCgpICogdGhpcy5yYXRpbztcclxuXHRcdFx0cnIgPSBvZmYuYW5nbGUoKTtcclxuXHRcdFx0aWYocnIgPCAwKSByciArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblxyXG5cdCAgICBcdGlmICggZCA8IDEyOCApIHRoaXMuY3Vyc29yKCdjcm9zc2hhaXInKTtcclxuXHQgICAgXHRlbHNlIGlmKCAhdGhpcy5pc0Rvd24gKSB0aGlzLmN1cnNvcigpXHJcblxyXG5cdCAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG5cclxuXHRcdFx0ICAgIGlmKCB0aGlzLmZpc3REb3duICl7XHJcblx0XHRcdCAgICBcdHRoaXMuZCA9IGQ7XHJcblx0XHRcdCAgICBcdHRoaXMuZmlzdERvd24gPSBmYWxzZTtcclxuXHRcdFx0ICAgIH1cclxuXHJcblx0XHRcdCAgICBpZiAoIHRoaXMuZCA8IDEyOCApIHtcclxuXHJcblx0XHRcdFx0ICAgIGlmICggdGhpcy5kID4gdGhpcy50ciApIHsgLy8gb3V0c2lkZSBodWVcclxuXHJcblx0XHRcdFx0ICAgICAgICBodWUgPSAoIHJyICsgVC5waTkwICkgLyBULlR3b1BJO1xyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5odWUgPSAoaHVlICsgMSkgJSAxO1xyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woWyhodWUgKyAxKSAlIDEsIHRoaXMuaHNsWzFdLCB0aGlzLmhzbFsyXV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfSBlbHNlIHsgLy8gdHJpYW5nbGVcclxuXHJcblx0XHRcdFx0ICAgIFx0eCA9IG9mZi54ICogdGhpcy5yYXRpbztcclxuXHRcdFx0XHQgICAgXHR5ID0gb2ZmLnkgKiB0aGlzLnJhdGlvO1xyXG5cclxuXHRcdFx0XHQgICAgXHRsZXQgcnIgPSAodGhpcy5odWUgKiBULlR3b1BJKSArIFQuUEk7XHJcblx0XHRcdFx0ICAgIFx0aWYocnIgPCAwKSByciArPSAyICogVC5QSTtcclxuXHJcblx0XHRcdFx0ICAgIFx0cmFkID0gTWF0aC5hdGFuMigteSwgeCk7XHJcblx0XHRcdFx0ICAgIFx0aWYocmFkIDwgMCkgcmFkICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHQgICAgXHRsZXQgcmFkMCA9ICggcmFkICsgVC5waTkwICsgVC5Ud29QSSArIHJyICkgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0ICAgIFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApLFxyXG5cdFx0XHRcdCAgICBcdGEgICAgPSAwLjUgKiB0aGlzLnRyLFxyXG5cdFx0XHRcdCAgICBcdGIgICAgPSBNYXRoLnRhbihyYWQxKSAqIGEsXHJcblx0XHRcdFx0ICAgIFx0ciAgICA9IE1hdGguc3FydCh4KnggKyB5KnkpLFxyXG5cdFx0XHRcdCAgICBcdG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHJcblx0XHRcdFx0ICAgIFx0aWYoIHIgPiBtYXhSICkge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBkeCA9IE1hdGgudGFuKHJhZDEpICogcjtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcmFkMiA9IE1hdGguYXRhbihkeCAvIG1heFIpO1xyXG5cdFx0XHRcdFx0XHRcdGlmKHJhZDIgPiBULnBpNjApICByYWQyID0gVC5waTYwO1xyXG5cdFx0XHRcdFx0XHQgICAgZWxzZSBpZiggcmFkMiA8IC1ULnBpNjAgKSByYWQyID0gLVQucGk2MDtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0cmFkICs9IHJhZDIgLSByYWQxO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRyYWQwID0gKHJhZCArIFQucGk5MCAgKyBULlR3b1BJICsgcnIpICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdFx0XHRcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKTtcclxuXHRcdFx0XHRcdFx0XHRiID0gTWF0aC50YW4ocmFkMSkgKiBhO1xyXG5cdFx0XHRcdFx0XHRcdHIgPSBtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGx1bSA9ICgoTWF0aC5zaW4ocmFkMCkgKiByKSAvIHRoaXMudHNsKSArIDAuNTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0bGV0IHcgPSAxIC0gKE1hdGguYWJzKGx1bSAtIDAuNSkgKiAyKTtcclxuXHRcdFx0XHRcdFx0c2F0ID0gKCgoTWF0aC5jb3MocmFkMCkgKiByKSArICh0aGlzLnRyIC8gMikpIC8gKDEuNSAqIHRoaXMudHIpKSAvIHc7XHJcblx0XHRcdFx0XHRcdHNhdCA9IFQuY2xhbXAoIHNhdCwgMCwgMSApO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFt0aGlzLmhzbFswXSwgc2F0LCBsdW1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHNldEhlaWdodCAoKSB7XHJcblxyXG5cdFx0dGhpcy5oID0gdGhpcy5pc09wZW4gPyB0aGlzLndmaXhlICsgdGhpcy5iYXNlSCArIDUgOiB0aGlzLmJhc2VIXHJcblx0XHR0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cdFx0dGhpcy56b25lLmggPSB0aGlzLmhcclxuXHJcblx0fVxyXG5cclxuXHRwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuXHRcdGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG5cdCAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcblx0fVxyXG5cclxuXHRvcGVuICgpIHtcclxuXHJcblx0XHRzdXBlci5vcGVuKCk7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0XHRpZiggdGhpcy51cCApIHRoaXMuem9uZS55IC09IHRoaXMud2ZpeGUgKyA1O1xyXG5cclxuXHRcdGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcblx0fVxyXG5cclxuXHRjbG9zZSAoKSB7XHJcblxyXG5cdFx0c3VwZXIuY2xvc2UoKTtcclxuXHJcblx0XHRpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMud2ZpeGUgKyA1O1xyXG5cclxuXHRcdGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgID0gJ2hpZGRlbic7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCAtdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdHVwZGF0ZSAoIHVwICkge1xyXG5cclxuXHQgICAgbGV0IGNjID0gVG9vbHMucmdiVG9IZXgoIFRvb2xzLmhzbFRvUmdiKFsgdGhpcy5oc2xbMF0sIDEsIDAuNSBdKSApO1xyXG5cclxuXHQgICAgdGhpcy5tb3ZlTWFya2VycygpO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy52YWx1ZSA9IHRoaXMuYmNvbG9yO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYywgMiwgMCApO1xyXG5cclxuXHQgICAgdGhpcy5zWzJdLmJhY2tncm91bmQgPSB0aGlzLmJjb2xvcjtcclxuXHQgICAgaWYoIXRoaXMubm90ZXh0KSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBUb29scy5odG1sVG9IZXgoIHRoaXMuYmNvbG9yICk7XHJcblxyXG5cdCAgICB0aGlzLmludmVydCA9IFRvb2xzLmZpbmREZWVwSW52ZXIoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMuc1syXS5jb2xvciA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cclxuXHQgICAgaWYoIXVwKSByZXR1cm47XHJcblxyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2FycmF5JyApIHRoaXMuc2VuZCggdGhpcy5yZ2IgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdyZ2InICkgdGhpcy5zZW5kKCBUb29scy5odG1sUmdiKCB0aGlzLnJnYiApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaGV4JyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFRvSGV4KCB0aGlzLnZhbHVlICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdodG1sJyApIHRoaXMuc2VuZCgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldFZhbHVlICggdiApe1xyXG5cclxuXHRcdGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgKSB0aGlzLnZhbHVlID0gVG9vbHMucmdiVG9IZXgoIHYgKTtcclxuICAgICAgICBlbHNlIGlmKCFpc05hTih2KSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggdiApO1xyXG4gICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcblxyXG5cdFx0dGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRDb2xvciAoIGNvbG9yICkge1xyXG5cclxuXHQgICAgbGV0IHVucGFjayA9IFRvb2xzLnVucGFjayhjb2xvcik7XHJcblx0ICAgIGlmICh0aGlzLmJjb2xvciAhPT0gY29sb3IgJiYgdW5wYWNrKSB7XHJcblxyXG5cdCAgICAgICAgdGhpcy5iY29sb3IgPSBjb2xvclxyXG5cdCAgICAgICAgdGhpcy5yZ2IgPSB1bnBhY2tcclxuXHQgICAgICAgIHRoaXMuaHNsID0gVG9vbHMucmdiVG9Ic2woIHRoaXMucmdiIClcclxuXHJcblx0ICAgICAgICB0aGlzLmh1ZSA9IHRoaXMuaHNsWzBdO1xyXG5cclxuXHQgICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblx0ICAgIH1cclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0SFNMICggaHNsICkge1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBoc2w7XHJcblx0ICAgIHRoaXMucmdiID0gVG9vbHMuaHNsVG9SZ2IoIGhzbCApO1xyXG5cdCAgICB0aGlzLmJjb2xvciA9IFRvb2xzLnJnYlRvSGV4KCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtb3ZlTWFya2VycyAoKSB7XHJcblxyXG5cdFx0bGV0IHAgPSB0aGlzLnBwXHJcblx0XHRsZXQgVCA9IFRvb2xzXHJcblxyXG5cdCAgICBsZXQgYzEgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHQgICAgbGV0IGEgPSB0aGlzLmhzbFswXSAqIFQuVHdvUEk7XHJcblx0ICAgIGxldCB0aGlyZCA9ICgyLzMpICogVC5QSTtcclxuXHQgICAgbGV0IHIgPSB0aGlzLnRyO1xyXG5cdCAgICBsZXQgaCA9IHRoaXMuaHNsWzBdO1xyXG5cdCAgICBsZXQgcyA9IHRoaXMuaHNsWzFdO1xyXG5cdCAgICBsZXQgbCA9IHRoaXMuaHNsWzJdO1xyXG5cclxuXHQgICAgbGV0IGFuZ2xlID0gKCBhIC0gVC5waTkwICkgKiBULnRvZGVnO1xyXG5cclxuXHQgICAgaCA9IC0gYSArIFQucGk5MDtcclxuXHJcblx0XHRsZXQgaHggPSBNYXRoLmNvcyhoKSAqIHI7XHJcblx0XHRsZXQgaHkgPSAtTWF0aC5zaW4oaCkgKiByO1xyXG5cdFx0bGV0IHN4ID0gTWF0aC5jb3MoaCAtIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgc3kgPSAtTWF0aC5zaW4oaCAtIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnggPSBNYXRoLmNvcyhoICsgdGhpcmQpICogcjtcclxuXHRcdGxldCB2eSA9IC1NYXRoLnNpbihoICsgdGhpcmQpICogcjtcclxuXHRcdGxldCBteCA9IChzeCArIHZ4KSAvIDIsIG15ID0gKHN5ICsgdnkpIC8gMjtcclxuXHRcdGEgID0gKDEgLSAyICogTWF0aC5hYnMobCAtIC41KSkgKiBzO1xyXG5cdFx0bGV0IHggPSBzeCArICh2eCAtIHN4KSAqIGwgKyAoaHggLSBteCkgKiBhO1xyXG5cdFx0bGV0IHkgPSBzeSArICh2eSAtIHN5KSAqIGwgKyAoaHkgLSBteSkgKiBhO1xyXG5cclxuXHQgICAgcC5zZXQoIHgsIHkgKS5hZGRTY2FsYXIoMTI4KTtcclxuXHJcblx0ICAgIC8vbGV0IGZmID0gKDEtbCkqMjU1O1xyXG5cdCAgICAvLyB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYignK2ZmKycsJytmZisnLCcrZmYrJyknLCAzICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndHJhbnNmb3JtJywgJ3JvdGF0ZSgnK2FuZ2xlKycgKScsIDIgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHAueCwgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBwLnksIDMgKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMiwgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLHRoaXMuYmNvbG9yLCAzICk7XHJcblxyXG5cdH1cclxuXHJcblx0clNpemUgKCkge1xyXG5cclxuXHQgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cdCAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuXHQgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG5cdCAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblx0ICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG5cclxuXHQgICAgLy9jb25zb2xlLmxvZyh0aGlzLnNiKVxyXG5cclxuXHQgICAgdGhpcy5jdyA9IHRoaXMuc2IgPiAyNTYgPyAyNTYgOiB0aGlzLnNiO1xyXG5cclxuXHJcblxyXG5cdCAgICB0aGlzLnJTaXplQ29sb3IoIHRoaXMuY3cgKTtcclxuXHJcblx0ICAgIHRoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgLy9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBcclxuXHR9XHJcblxyXG5cdHJTaXplQ29sb3IgKCB3ICkge1xyXG5cclxuXHJcblx0XHRpZiggdyA9PT0gdGhpcy53Zml4ZSApIHJldHVybjtcclxuXHJcblxyXG5cclxuXHRcdHRoaXMud2ZpeGUgPSB3O1xyXG5cclxuXHJcblxyXG5cdFx0bGV0IHMgPSB0aGlzLnM7XHJcblxyXG5cdFx0Ly90aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIHRoaXMuZGVjYWwueSA9IHRoaXMuc2lkZSA9PT0gJ3VwJyA/IDIgOiB0aGlzLmJhc2VIICsgMlxyXG5cdCAgICB0aGlzLm1pZCA9IE1hdGguZmxvb3IoIHRoaXMud2ZpeGUgKiAwLjUgKVxyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrIHRoaXMud2ZpeGUgKyAnICcrIHRoaXMud2ZpeGUgKVxyXG5cdCAgICBzWzNdLndpZHRoID0gdGhpcy53Zml4ZSArICdweCdcclxuXHQgICAgc1szXS5oZWlnaHQgPSB0aGlzLndmaXhlICsgJ3B4J1xyXG4gICAgXHQvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIHNbM10udG9wID0gdGhpcy5kZWNhbC55ICsgJ3B4J1xyXG5cclxuXHQgICAgdGhpcy5yYXRpbyA9IDI1NiAvIHRoaXMud2ZpeGVcclxuXHQgICAgdGhpcy5zcXVhcmUgPSAxIC8gKDYwKih0aGlzLndmaXhlLzI1NikpXHJcblx0ICAgIHRoaXMuc2V0SGVpZ2h0KClcclxuXHJcblx0fVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZwcyBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLnJvdW5kID0gTWF0aC5yb3VuZDtcclxuXHJcbiAgICAgICAgLy90aGlzLmF1dG9IZWlnaHQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG4gICAgICAgIHRoaXMuaHBsdXMgPSBvLmhwbHVzIHx8IDUwO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IG8ucmVzIHx8IDQwO1xyXG4gICAgICAgIHRoaXMubCA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMDtcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5jdXN0b20gPSBvLmN1c3RvbSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm5hbWVzID0gby5uYW1lcyB8fCBbJ0ZQUycsICdNUyddO1xyXG4gICAgICAgIGxldCBjYyA9IG8uY2MgfHwgWycyMjAsMjIwLDIyMCcsICcyNTUsMjU1LDAnXTtcclxuXHJcbiAgICAgICAvLyB0aGlzLmRpdmlkID0gWyAxMDAsIDEwMCwgMTAwIF07XHJcbiAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWRkaW5nID0gby5hZGRpbmcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSBvLnJhbmdlIHx8IFsgMTY1LCAxMDAsIDEwMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFscGhhID0gby5hbHBoYSB8fCAwLjI1O1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucG9pbnRzID0gW107XHJcbiAgICAgICAgdGhpcy50ZXh0RGlzcGxheSA9IFtdO1xyXG5cclxuICAgICAgICBpZighdGhpcy5jdXN0b20pe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5ub3cgPSBSb290cy5nZXRUaW1lKClcclxuICAgICAgICAgICAgdGhpcy5zdGFydFRpbWUgPSAwOy8vdGhpcy5ub3coKVxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gMDsvL3RoaXMuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lcyA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1zID0gMDtcclxuICAgICAgICAgICAgdGhpcy5mcHMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1lbSA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubW0gPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc01lbSA9ICggc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm1lbW9yeSApID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAvLyB0aGlzLmRpdmlkID0gWyAxMDAsIDIwMCwgMSBdO1xyXG4gICAgICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzTWVtICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5uYW1lcy5wdXNoKCdNRU0nKTtcclxuICAgICAgICAgICAgICAgIGNjLnB1c2goJzAsMjU1LDI1NScpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy50eHQgPSBvLm5hbWUgfHwgJ0ZwcydcclxuXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGNvbnN0IGNjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dDtcclxuICAgICAgICAvL3RoaXMuY1sxXS5pbm5lckhUTUwgPSAnJiMxNjA7JyArIHRoaXMudHh0XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgbGV0IHBhbmVsQ3NzID0gJ2Rpc3BsYXk6bm9uZTsgbGVmdDoxMHB4OyB0b3A6JysgdGhpcy5oICsgJ3B4OyBoZWlnaHQ6JysodGhpcy5ocGx1cyAtIDgpKydweDsgYm94LXNpemluZzpib3JkZXItYm94OyBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7IGJvcmRlcjoxcHggc29saWQgJysgY2NjLmJvcmRlciArJzsnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSBwYW5lbENzcyArPSAnYm9yZGVyLXJhZGl1czonICsgdGhpcy5yYWRpdXMrJ3B4Oyc7IFxyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArIHBhbmVsQ3NzICwge30gKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgndmlld0JveCcsICcwIDAgJyt0aGlzLnJlcysnIDUwJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgncHJlc2VydmVBc3BlY3RSYXRpbycsICdub25lJyApO1xyXG5cclxuXHJcbiAgICAgICAgLy90aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoMjU1LDI1NSwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6JyNGRjAnLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgLy90aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoMCwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6JyMwRkYnLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gYXJyb3dcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuICAgICAgICAvL3RoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxMHB4OyBoZWlnaHQ6MTBweDsgbGVmdDo0cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmFycm93LCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgLy8gcmVzdWx0IHRlc3RcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxMHB4OyB0b3A6JysodGhpcy5oKzIpICsncHg7IGRpc3BsYXk6bm9uZTsgd2lkdGg6MTAwJTsgdGV4dC1hbGlnbjpjZW50ZXI7JyApO1xyXG5cclxuICAgICAgICAvLyBib3R0b20gbGluZVxyXG4gICAgICAgIGlmKCBvLmJvdHRvbUxpbmUgKSB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGJvdHRvbTowcHg7IGhlaWdodDoxcHg7IGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsnKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1Nob3cgPSBmYWxzZTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgLy9zWzFdLm1hcmdpbkxlZnQgPSAnMTBweCc7XHJcbiAgICAgICAgc1sxXS5saW5lSGVpZ2h0ID0gdGhpcy5oLTQ7XHJcbiAgICAgICAgc1sxXS5jb2xvciA9IGNjYy50ZXh0O1xyXG4gICAgICAgIC8vc1sxXS5wYWRkaW5nTGVmdCA9ICcxOHB4JztcclxuICAgICAgICAvL3NbMV0uZm9udFdlaWdodCA9ICdib2xkJztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgIHNbMF0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4JztcclxuICAgICAgICBpZiggdGhpcy5jb2xvcnMuZ2JvcmRlciE9PSdub25lJykgc1swXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyBjY2MuZ2JvcmRlcjtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGogPSAwO1xyXG5cclxuICAgICAgICBmb3IoIGo9MDsgajx0aGlzLm5hbWVzLmxlbmd0aDsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmFzZSA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgaSA9IHRoaXMucmVzKzE7XHJcbiAgICAgICAgICAgIHdoaWxlKCBpLS0gKSBiYXNlLnB1c2goNTApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yYW5nZVtqXSA9ICggMSAvIHRoaXMucmFuZ2Vbal0gKSAqIDQ5O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5wb2ludHMucHVzaCggYmFzZSApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKDApO1xyXG4gICAgICAgICAgIC8vICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLDAuNSknLCAnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3JnYmEoJytjY1tqXSsnLDEpJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICB0aGlzLnRleHREaXNwbGF5LnB1c2goIFwiPHNwYW4gc3R5bGU9J2NvbG9yOnJnYihcIitjY1tqXStcIiknPiBcIiArIHRoaXMubmFtZXNbal0gK1wiIFwiKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBqID0gdGhpcy5uYW1lcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywnK3RoaXMuYWxwaGErJyknLCAnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3JnYmEoJytjY1tqXSsnLDEpJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICAvL2lmKCB0aGlzLmlzU2hvdyApIHRoaXMuc2hvdygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2hvdyApIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICBlbHNlIHRoaXMub3BlbigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgLyptb2RlOiBmdW5jdGlvbiAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9ICcjRkZGJztcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNURE9XTjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0sKi9cclxuXHJcbiAgICB0aWNrICggdiApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB2O1xyXG4gICAgICAgIGlmKCAhdGhpcy5pc1Nob3cgKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoIHBvaW50ICkge1xyXG5cclxuICAgICAgICBsZXQgcCA9ICcnO1xyXG4gICAgICAgIHAgKz0gJ00gJyArICgtMSkgKyAnICcgKyA1MDtcclxuICAgICAgICBmb3IgKCBsZXQgaSA9IDA7IGkgPCB0aGlzLnJlcyArIDE7IGkgKysgKSB7IHAgKz0gJyBMICcgKyBpICsgJyAnICsgcG9pbnRbaV07IH1cclxuICAgICAgICBwICs9ICcgTCAnICsgKHRoaXMucmVzICsgMSkgKyAnICcgKyA1MDtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBUZXh0ICggdmFsICkge1xyXG5cclxuICAgICAgICBsZXQgdiA9IHZhbCB8fCB0aGlzLnZhbHVlcywgdCA9ICcnO1xyXG4gICAgICAgIGZvciggbGV0IGo9MCwgbG5nID10aGlzLm5hbWVzLmxlbmd0aDsgajxsbmc7IGorKyApIHQgKz0gdGhpcy50ZXh0RGlzcGxheVtqXSArICh2W2pdKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSArICc8L3NwYW4+JztcclxuICAgICAgICB0aGlzLmNbNF0uaW5uZXJIVE1MID0gdDtcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdHcmFwaCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLm5hbWVzLmxlbmd0aCwgdiwgb2xkID0gMCwgbiA9IDA7XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYWRkaW5nICkgdiA9ICh0aGlzLnZhbHVlc1tuXStvbGQpICogdGhpcy5yYW5nZVtuXTtcclxuICAgICAgICAgICAgZWxzZSAgdiA9ICh0aGlzLnZhbHVlc1tuXSAqIHRoaXMucmFuZ2Vbbl0pO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50c1tuXS5zaGlmdCgpO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50c1tuXS5wdXNoKCA1MCAtIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHN2ZywgJ2QnLCB0aGlzLm1ha2VQYXRoKCB0aGlzLnBvaW50c1tuXSApLCBpKzEgKTtcclxuICAgICAgICAgICAgb2xkICs9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICBuKys7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmhwbHVzICsgdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCB0aGlzLmhwbHVzICk7fVxyXG4gICAgICAgIGVsc2UgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0aGlzLmhwbHVzICk7XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKydweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snOyBcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgdGhpcy5pc1Nob3cgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMuYWRkTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIC10aGlzLmhwbHVzICk7fVxyXG4gICAgICAgIGVsc2UgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCAtdGhpcy5ocGx1cyApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKydweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy5pc1Nob3cgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLnJlbW92ZUxpc3RlbiggdGhpcyApO1xyXG5cclxuICAgICAgICB0aGlzLmNbNF0uaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLy8vIEFVVE8gRlBTIC8vLy8vL1xyXG5cclxuICAgIGJlZ2luICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGVuZCAoKSB7XHJcblxyXG4gICAgICAgIGxldCB0aW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICB0aGlzLm1zID0gdGltZSAtIHRoaXMuc3RhcnRUaW1lO1xyXG5cclxuICAgICAgICB0aGlzLmZyYW1lcyArKztcclxuXHJcbiAgICAgICAgaWYgKCB0aW1lID4gdGhpcy5wcmV2VGltZSArIDEwMDAgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IHRoaXMucm91bmQoICggdGhpcy5mcmFtZXMgKiAxMDAwICkgLyAoIHRpbWUgLSB0aGlzLnByZXZUaW1lICkgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSB0aW1lO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lcyA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMuaXNNZW0gKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGhlYXBTaXplID0gcGVyZm9ybWFuY2UubWVtb3J5LnVzZWRKU0hlYXBTaXplO1xyXG4gICAgICAgICAgICAgICAgbGV0IGhlYXBTaXplTGltaXQgPSBwZXJmb3JtYW5jZS5tZW1vcnkuanNIZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubWVtID0gdGhpcy5yb3VuZCggaGVhcFNpemUgKiAwLjAwMDAwMDk1NCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tbSA9IGhlYXBTaXplIC8gaGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFsgdGhpcy5mcHMsIHRoaXMubXMgLCB0aGlzLm1tIF07XHJcblxyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoIFsgdGhpcy5mcHMsIHRoaXMubXMsIHRoaXMubWVtIF0gKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRpbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxpc3RlbmluZyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSB0aGlzLnN0YXJ0VGltZSA9IHRoaXMuZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMudztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKCB0aGlzLnNhICsgdGhpcy5zYiAtIDYgKSArICdweCdcclxuXHJcbiAgICAgICAgc1swXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMV0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzJdLmxlZnQgPSAxMCArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9ICh3LTIwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICh3LTIwKSArICdweCc7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcbiAgICBcclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgR3JhcGggZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICBcdHRoaXMudmFsdWUgPSBvLnZhbHVlICE9PSB1bmRlZmluZWQgPyBvLnZhbHVlIDogWzAsMCwwXTtcclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uICE9PSB1bmRlZmluZWQgPyBvLnByZWNpc2lvbiA6IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcbiAgICAgICAgdGhpcy5uZWcgPSBvLm5lZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5saW5lID0gby5saW5lICE9PSB1bmRlZmluZWQgPyAgby5saW5lIDogdHJ1ZTtcclxuXHJcbiAgICAgICAgLy9pZih0aGlzLm5lZyl0aGlzLm11bHRpcGxpY2F0b3IqPTI7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvV2lkdGggIT09IHVuZGVmaW5lZCA/IG8uYXV0b1dpZHRoIDogdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCAxMjggKyAxMDtcclxuICAgICAgICB0aGlzLnJoID0gdGhpcy5oIC0gMTA7XHJcbiAgICAgICAgdGhpcy50b3AgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuYXV0b1dpZHRoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvL3RoaXMuY1sxXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmZjAwMDAnO1xyXG4gICAgICAgICAgICAvL3RoaXMuY1sxXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2ggPSB0aGlzLnJoIC0gMjg7XHJcbiAgICAgICAgdGhpcy5ndyA9IHRoaXMudyAtIDI4O1xyXG5cclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRleHQtYWxpZ246IGp1c3RpZnk7IGNvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICAvL2xldCBjb2x1bSA9ICdjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyBjb2x1bW46Jyt0aGlzLmxuZysnOyBicmVhay1pbnNpZGU6IGNvbHVtbjsgdG9wOidcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdkaXNwbGF5OmJsb2NrOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZzowcHggMHB4OyB0b3A6JysodGhpcy5oLTIwKSsncHg7IGxlZnQ6MTRweDsgd2lkdGg6Jyt0aGlzLmd3KydweDsgIGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5kb20oICdzdmcnLCB0aGlzLmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdGhpcy53KycgJyt0aGlzLnJoLCB3aWR0aDp0aGlzLncsIGhlaWdodDp0aGlzLnJoLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHN2ZywgeyB3aWR0aDp0aGlzLncsIGhlaWdodDp0aGlzLnJoLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOnRoaXMuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOididXR0JyB9LCBzdmcgKTtcclxuICAgICAgICB0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDp0aGlzLmd3KzgsIGhlaWdodDp0aGlzLmdoKzgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSAsIGZpbGw6J25vbmUnfSwgc3ZnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXcgPSAoKHRoaXMuZ3ctKDQqKHRoaXMubG5nLTEpKSkvdGhpcy5sbmcpO1xyXG4gICAgICAgIGxldCB0ID0gW107XHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnYgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgIFx0dFtpXSA9IFsgMTQgKyAoaSp0aGlzLml3KSArIChpKjQpLCB0aGlzLml3IF07XHJcbiAgICAgICAgXHR0W2ldWzJdID0gdFtpXVswXSArIHRbaV1bMV07XHJcbiAgICAgICAgXHR0aGlzLmNNb2RlW2ldID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudltpXSA9ICgoMSsodGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikpKjAuNSk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMudltpXSA9IHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcblxyXG4gICAgICAgIFx0dGhpcy5kb20oICdyZWN0JywgJycsIHsgeDp0W2ldWzBdLCB5OjE0LCB3aWR0aDp0W2ldWzFdLCBoZWlnaHQ6MSwgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCAnZmlsbC1vcGFjaXR5JzowLjMgfSwgc3ZnICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0O1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHN2ZztcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLncpXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLnRvcCA9IDAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5oZWlnaHQgPSAyMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLmxpbmVIZWlnaHQgPSAoMjAtNSkrJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIGZhbHNlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5uZWcpIHRoaXMudltpXSA9ICgxICsgdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpICogMC41O1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudltpXSA9IHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWx1ZVRvSHRtbCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgbj0wLCByID0gJzx0YWJsZSBzdHlsZT1cIndpZHRoOjEwMCU7XCI+PHRyPidcclxuICAgICAgICBsZXQgdyA9IDEwMCAvIHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHN0eWxlID0gJ3dpZHRoOicrIHcgKyclOycvLycgdGV4dC1hbGlnbjpjZW50ZXI7J1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKG49PT10aGlzLmxuZy0xKSByICs9ICc8dGQgc3R5bGU9JytzdHlsZSsnPicgKyB0aGlzLnZhbHVlW25dICsgJzwvdGQ+PC90cj48L3RhYmxlPidcclxuICAgICAgICAgICAgZWxzZSByICs9ICc8dGQgc3R5bGU9JytzdHlsZSsnPicgKyB0aGlzLnZhbHVlW25dICsgJzwvdGQ+J1xyXG4gICAgICAgICAgICBuKytcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saW5lICkgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDAgKTtcclxuXHJcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnaGVpZ2h0JywgdGhpcy52W2ldKnRoaXMuZ2gsIGkrMiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneScsIDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naCksIGkrMiApO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZhbHVlW2ldID0gKCAoKHRoaXMudltpXSoyKS0xKSAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWVbaV0gPSAoICh0aGlzLnZbaV0gKiB0aGlzLm11bHRpcGxpY2F0b3IpICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcDtcclxuICAgICAgICBcclxuXHQgICAgaWYoIGwueT50aGlzLnRvcCAmJiBsLnk8dGhpcy5oLTIwICl7XHJcblx0ICAgICAgICB3aGlsZSggaS0tICl7XHJcblx0ICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGk7XHJcblx0ICAgICAgICB9XHJcblx0ICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBuYW1lICkge1xyXG5cclxuICAgIFx0aWYoIG4gPT09IHRoaXMuY01vZGVbbmFtZV0gKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgYTtcclxuXHJcbiAgICAgICAgc3dpdGNoKG4pe1xyXG4gICAgICAgICAgICBjYXNlIDA6IGE9MC4zOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiBhPTAuNjsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogYT0xOyBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwtb3BhY2l0eScsIGEsIG5hbWUgKyAyICk7XHJcbiAgICAgICAgdGhpcy5jTW9kZVtuYW1lXSA9IG47XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgIFx0bGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIC8vdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY01vZGVbaV0gIT09IDAgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwtb3BhY2l0eScsIDAuMywgaSArIDIgKTtcclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgcmV0dXJuIHRoaXMucmVzZXQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgIFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgIFx0bGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIFx0aWYoIG5hbWUgPT09ICcnICl7XHJcblxyXG4gICAgICAgICAgICBudXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHsgXHJcblxyXG4gICAgICAgICAgICBudXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMiA6IDEsIG5hbWUgKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgICAgICBpZih0aGlzLmlzRG93bil7XHJcbiAgICAgICAgICAgIFx0dGhpcy52W25hbWVdID0gdGhpcy5jbGFtcCggMSAtICgoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIC0gMTAgKSAvIHRoaXMuZ2gpICwgMCwgMSApO1xyXG4gICAgICAgICAgICBcdHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgXHR0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgIFx0bGV0IHAgPSBcIlwiLCBoLCB3LCB3biwgd20sIG93LCBvaFxyXG4gICAgXHQvL2xldCBnID0gdGhpcy5pdyowLjVcclxuXHJcbiAgICBcdGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgIFx0XHRoID0gMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKVxyXG4gICAgXHRcdHcgPSAoMTQgKyAoaSp0aGlzLml3KSArIChpKjQpKVxyXG5cclxuICAgIFx0XHR3bSA9IHcgKyB0aGlzLml3KjAuNVxyXG4gICAgXHRcdHduID0gdyArIHRoaXMuaXdcclxuXHJcbiAgICBcdFx0aWYoIGkgPT09IDAgKSBwKz0nTSAnK3crJyAnKyBoICsgJyBUICcgKyB3bSArJyAnKyBoXHJcbiAgICBcdFx0ZWxzZSBwICs9ICcgQyAnICsgb3cgKycgJysgb2ggKyAnLCcgKyB3ICsnICcrIGggKyAnLCcgKyB3bSArJyAnKyBoXHJcbiAgICBcdFx0aWYoIGkgPT09IHRoaXMubG5nLTEgKSBwKz0nIFQgJyArIHduICsnICcrIGhcclxuXHJcbiAgICBcdFx0b3cgPSB3blxyXG4gICAgXHRcdG9oID0gaCBcclxuXHJcbiAgICBcdH1cclxuXHJcbiAgICBcdHJldHVybiBwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgc1sxXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG5cclxuICAgICAgICBsZXQgZ3cgPSB0aGlzLncgLSAyOFxyXG4gICAgICAgIGxldCBpdyA9ICgoZ3ctKDQqKHRoaXMubG5nLTEpKSkvdGhpcy5sbmcpXHJcbiAgICAgICAgbGV0IHQgPSBbXVxyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gZ3cgKyAncHgnXHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdFtpXSA9IFsgMTQgKyAoaSppdykgKyAoaSo0KSwgaXcgXVxyXG4gICAgICAgICAgICB0W2ldWzJdID0gdFtpXVswXSArIHRbaV1bMV1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHRcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFbXB0eSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuXHQgICAgby5pc1NwYWNlID0gdHJ1ZVxyXG4gICAgICAgIG8ubWFyZ2luID0gMFxyXG4gICAgICAgIGlmKCFvLmgpIG8uaCA9IDEwXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG4gICAgXHJcbn1cclxuIiwiXHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi9FbXB0eS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgR3JvdXAgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0dyb3VwID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLkFERCA9IG8uYWRkO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9IZWlnaHQgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMudWlzID0gW11cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmRlY2FsID0gby5ncm91cCA/IDggOiAwXHJcbiAgICAgICAgLy90aGlzLmRkID0gby5ncm91cCA/IG8uZ3JvdXAuZGVjYWwgKyA4IDogMFxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIID0gdGhpcy5oXHJcblxyXG4gICAgICAgIHRoaXMuc3BhY2VZID0gbmV3IEVtcHR5KHtoOnRoaXMubWFyZ2lufSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy51c2VGbGV4ID0gdHJ1ZSBcclxuICAgICAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyAnZGlzcGxheTpmbGV4OyBmbGV4LWZsb3c6IHJvdyB3cmFwOycgOiAnJ1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyAgb3ZlcmZsb3c6aGlkZGVuOyB0b3A6JysodGhpcy5oKSsncHgnKVxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIGxldCBiaCA9IHRoaXMubXRvcCA9PT0gMCA/IHRoaXMubWFyZ2luIDogdGhpcy5tdG9wXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7IGhlaWdodDonKyhiaCsxKSsncHg7IHRvcDonKygodGhpcy5oLTEpKSsncHg7IGJhY2tncm91bmQ6bm9uZTsnKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICB0aGlzLmNbMV0ubmFtZSA9ICdncm91cCdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0QkcoIG8uYmcgKVxyXG5cclxuICAgICAgICBpZiggby5vcGVuICkgdGhpcy5vcGVuKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0QkcgKCBiZyApIHtcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgaWYoIGJnICE9PSB1bmRlZmluZWQgKSBjYy5ncm91cHMgPSBiZ1xyXG4gICAgICAgIGlmKGNjLmdyb3VwcyA9PT0gJ25vbmUnKSBjYy5ncm91cHMgPSBjYy5iYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgIGNjLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgc1swXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgIHNbMV0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwc1xyXG4gICAgICAgIHNbMl0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwc1xyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLypsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRCRyggJ25vbmUnICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy51aXNbaV0uc2V0QkcoIHRoaXMuY29sb3JzLmJhY2tncm91bmQgKTtcclxuICAgICAgICB9Ki9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUggKyB0aGlzLm1hcmdpbiApIG5hbWUgPSAndGl0bGUnO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSBuYW1lID0gJ2NvbnRlbnQnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhuYW1lKVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJUYXJnZXQgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ID09PSAtMSApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5wcm90by5zICl7XHJcbiAgICAgICAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBoYW5kbGVFdmVudCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHByb3RvQ2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHN3aXRjaCggbmFtZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnY29udGVudCc6XHJcblxyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKClcclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcblxyXG4gICAgICAgICAgICBpZiggUm9vdHMuaXNNb2JpbGUgJiYgdHlwZSA9PT0gJ21vdXNlZG93bicgKSB0aGlzLmdldE5leHQoIGUsIGNoYW5nZSApXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5wcm90byApeyBcclxuICAgICAgICAgICAgICAgIC8vZS5jbGllbnRZIC09IHRoaXMubWFyZ2luXHJcbiAgICAgICAgICAgICAgICBwcm90b0NoYW5nZSA9IHRoaXMucHJvdG8uaGFuZGxlRXZlbnQoIGUgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggIVJvb3RzLmxvY2sgKSB0aGlzLmdldE5leHQoIGUsIGNoYW5nZSApXHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOlxyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmlzT3BlbiA/ICduLXJlc2l6ZSc6J3MtcmVzaXplJyApO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbW91c2Vkb3duJyApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgaWYoIHByb3RvQ2hhbmdlICkgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TmV4dCAoIGUsIGNoYW5nZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KCB0aGlzLnVpcywgZSApO1xyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gdGhpcy5jdXJyZW50ICl7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSAtMSApeyBcclxuICAgICAgICAgICAgdGhpcy5wcm90byAgPSB0aGlzLnVpc1sgdGhpcy5jdXJyZW50IF07XHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgXHJcblxyXG4gICAgYWRkKCkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGFyZ3VtZW50cztcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzFdID09PSAnb2JqZWN0JyApeyBcclxuICAgICAgICAgICAgYVsxXS5pc1VJID0gdGhpcy5pc1VJXHJcbiAgICAgICAgICAgIGFbMV0udGFyZ2V0ID0gdGhpcy5jWzJdXHJcbiAgICAgICAgICAgIGFbMV0ubWFpbiA9IHRoaXMubWFpblxyXG4gICAgICAgICAgICBhWzFdLmdyb3VwID0gdGhpc1xyXG4gICAgICAgIH0gZWxzZSBpZiggdHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gJ3N0cmluZycgKXtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbCggYSwgeyBpc1VJOnRydWUsIHRhcmdldDp0aGlzLmNbMl0sIG1haW46dGhpcy5tYWluIH0pO1xyXG4gICAgICAgICAgICBlbHNleyBcclxuICAgICAgICAgICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBhWzJdLnRhcmdldCA9IHRoaXMuY1syXTtcclxuICAgICAgICAgICAgICAgIGFbMl0ubWFpbiA9IHRoaXMubWFpbjtcclxuICAgICAgICAgICAgICAgIGFbMl0uZ3JvdXAgPSB0aGlzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdSA9IHRoaXMuQURELmFwcGx5KCB0aGlzLCBhIClcclxuXHJcbiAgICAgICAgaWYoIHUuaXNHcm91cCApeyBcclxuICAgICAgICAgICAgLy9vLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgdS5keCA9IDhcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy91LmR4ICs9IDRcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuZGVjYWwpXHJcbiAgICAgICAgLy91LnpvbmUuZCAtPSA4XHJcbiAgICAgICAgUm9vdHMuZm9yY2Vab25lID0gdHJ1ZVxyXG4gICAgICAgIC8vdS5tYXJnaW4gKz0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyggdS5tYXJnaW4gKVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlWm9uZSA9IHRydWVcclxuXHJcbiAgICAgICAgLy9Sb290cy5yZXNpemUoKVxyXG4gICAgICAgICAvL2NvbnNvbGUubG9nKFJvb3RzLm5lZWRSZXNpemUpXHJcblxyXG4gICAgICAgIHRoaXMudWlzLnB1c2goIHUgKVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZVxyXG5cclxuICAgICAgICByZXR1cm4gdTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gICAgcmVtb3ZlICggbiApIHtcclxuXHJcbiAgICAgICAgaWYoIG4uZGlzcG9zZSApIG4uZGlzcG9zZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBjbGVhciBhbGwgaW5lciBcclxuXHJcbiAgICBkaXNwb3NlKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyKClcclxuICAgICAgICBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoKVxyXG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhcigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5lbXB0eSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGVtcHR5ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCwgaXRlbTtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpdGVtID0gdGhpcy51aXMucG9wKClcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnJlbW92ZUNoaWxkKCBpdGVtLmNbMF0gKVxyXG4gICAgICAgICAgICBpdGVtLmNsZWFyKCB0cnVlIClcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy51aXNbaV0uY2xlYXIoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBjbGVhciBvbmUgZWxlbWVudFxyXG5cclxuICAgIGNsZWFyT25lICggbiApIHsgXHJcblxyXG4gICAgICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2YoIG4gKTtcclxuXHJcbiAgICAgICAgaWYgKCBpZCAhPT0gLTEgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsYyggLSAoIHRoaXMudWlzWyBpZCBdLmggKyB0aGlzLm1hcmdpbiApIClcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnJlbW92ZUNoaWxkKCB0aGlzLnVpc1sgaWQgXS5jWzBdIClcclxuICAgICAgICAgICAgdGhpcy51aXMuc3BsaWNlKCBpZCwgMSApXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy51aXMubGVuZ3RoID09PSAwICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgXHJcblxyXG4gICAgb3BlbiAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApXHJcbiAgICAgICAgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgICAgICAvL2xldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvL3NbMl0udG9wID0gKHRoaXMuaC0xKSArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5ncm91cHMvLycjMGYwJ1xyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cyl7XHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BSaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJMZWZ0ID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlclJpZ2h0ID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG5cclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyVG9wID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlckJvdHRvbSA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkIHJnYmEoMCwwLDAsMCknXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgICAgIC8vUm9vdHMuaXNMZWF2ZSA9IHRydWVcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKVxyXG5cclxuICAgICAgICAvL2xldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMSApXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICBzWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICAvL3NbMV0uaGVpZ2h0ID0gKHRoaXMuaC0yKSArICdweCdcclxuICAgICAgICAvL3NbMl0udG9wID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlciA9ICdub25lJ1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9ICdub25lJ1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKSBzWzFdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjVWlzICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiB8fCB0aGlzLmlzRW1wdHkgKSB0aGlzLmggPSB0aGlzLmJhc2VIXHJcbiAgICAgICAgLy9lbHNlIHRoaXMuaCA9IFJvb3RzLmNhbGNVaXMoIHRoaXMudWlzLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCApICsgdGhpcy5iYXNlSDtcclxuICAgICAgICBlbHNlIHRoaXMuaCA9IFJvb3RzLmNhbGNVaXMoIFsuLi50aGlzLnVpcywgdGhpcy5zcGFjZVkgXSwgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKyB0aGlzLm1hcmdpbiwgdHJ1ZSApICsgdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuc1syXS5oZWlnaHQgPSggdGhpcy5oIC0gdGhpcy5iYXNlSCApKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApXHJcbiAgICAgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0IClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsYyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSByZXR1cm5cclxuICAgICAgICBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoKVxyXG4gICAgICAgIGVsc2UgdGhpcy5jYWxjVWlzKClcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuc1syXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0U2l6ZSggdGhpcy53IClcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uclNpemUoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIHRoaXMudyA9IHRoaXMudyAtIHRoaXMuZGVjYWxcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKCB0aGlzLnNhICsgdGhpcy5zYiAtIDYgKSArICdweCdcclxuXHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMV0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuICAgICAgICBzWzJdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuLypcclxuICAgIHVpb3V0KCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5sb2NrICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgICAgICBpZih0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdmVyKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5sb2NrICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgICAgICAvL2lmKCB0aGlzLmlzT3BlbiApIHJldHVybjtcclxuICAgICAgICBpZih0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcblxyXG4gICAgfVxyXG4qL1xyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBKb3lzdGljayBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gWzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLmpveVR5cGUgPSAnYW5hbG9naXF1ZSc7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigpO1xyXG4gICAgICAgIHRoaXMudG1wID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG4gICAgICAgIHRoaXMuaGF2ZVRleHQgPSBvLnRleHQgIT09IHVuZGVmaW5lZCA/IG8udGV4dCA6IHRydWUgXHJcblxyXG4gICAgICAgIC8vdGhpcy5yYWRpdXMgPSB0aGlzLncgKiAwLjU7XHJcbiAgICAgICAgLy90aGlzLmRpc3RhbmNlID0gdGhpcy5yYWRpdXMqMC4yNTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlID0gKHRoaXMuZGlhbSowLjUpKjAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAodGhpcy5oYXZlVGV4dCA/IDEwIDogMCk7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0ICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy5oYXZlVGV4dCA/IHRoaXMudmFsdWUgOiAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRKb3lzdGljayggdGhpcy5tb2RlbCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtICk7XHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoMClcclxuXHJcblxyXG4gICAgICAgIHRoaXMucmF0aW8gPSAxMjgvdGhpcy53O1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoZmFsc2UpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5tb2RlbD09PTApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgJ3VybCgjZ3JhZEluKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJyMwMDAnLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMSknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgJ25vbmUnLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5tb2RlbD09PTApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgJ3VybCgjZ3JhZEluMiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2JhKDAsMCwwLDApJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3ZlciwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4zKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95U2VsZWN0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5qb3lPdmVyLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXRcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZEludGVydmFsICgpe1xyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICkgdGhpcy5zdG9wSW50ZXJ2YWwoKTtcclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCBmdW5jdGlvbigpeyB0aGlzLnVwZGF0ZSgpOyB9LmJpbmQodGhpcyksIDEwICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0b3BJbnRlcnZhbCAoKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgPT09IG51bGwgKSByZXR1cm47XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbCggdGhpcy5pbnRlcnZhbCApO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHRoaXMubW9kZSggMiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXAueCA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIC8vdGhpcy50bXAueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMudG1wLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgdGhpcy50bXAueSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKTtcclxuXHJcbiAgICAgICAgbGV0IGRpc3RhbmNlID0gdGhpcy50bXAubGVuZ3RoKCk7XHJcblxyXG4gICAgICAgIGlmICggZGlzdGFuY2UgPiB0aGlzLmRpc3RhbmNlICkge1xyXG4gICAgICAgICAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKHRoaXMudG1wLngsIHRoaXMudG1wLnkpO1xyXG4gICAgICAgICAgICB0aGlzLnRtcC54ID0gTWF0aC5zaW4oIGFuZ2xlICkgKiB0aGlzLmRpc3RhbmNlO1xyXG4gICAgICAgICAgICB0aGlzLnRtcC55ID0gTWF0aC5jb3MoIGFuZ2xlICkgKiB0aGlzLmRpc3RhbmNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wb3MuY29weSggdGhpcy50bXAgKS5kaXZpZGVTY2FsYXIoIHRoaXMuZGlzdGFuY2UgKS5uZWdhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZih2PT09dW5kZWZpbmVkKSB2PVswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHZbMF0gfHwgMCwgdlsxXSAgfHwgMCApO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICBpZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy5sZXJwKCBudWxsLCAwLjMgKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy54ID0gTWF0aC5hYnMoIHRoaXMucG9zLnggKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueDtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnkgPSBNYXRoLmFicyggdGhpcy5wb3MueSApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy55O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmlzQ2FudmFzICkgdGhpcy5tYWluLmRyYXcoKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgdGhpcy5zdG9wSW50ZXJ2YWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgeCA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICAvL2xldCB5ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy55ICogdGhpcy5kaXN0YW5jZSApO1xyXG5cclxuICAgICAgICBsZXQgeCA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy55ICogdGhpcy5kaXN0YW5jZSApO1xyXG5cclxuICAgICAgICBpZih0aGlzLm1vZGVsID09PSAwKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBzeCA9IHggKyAoKHRoaXMucG9zLngpKjUpICsgNTtcclxuICAgICAgICAgICAgbGV0IHN5ID0geSArICgodGhpcy5wb3MueSkqNSkgKyAxMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHN4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5Jywgc3kqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB5KnRoaXMucmF0aW8sIDQgKTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9ICAoIHRoaXMucG9zLnggKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gICggdGhpcy5wb3MueSAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLmhhdmVUZXh0KSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhciAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zdG9wSW50ZXJ2YWwoKTtcclxuICAgICAgICBzdXBlci5jbGVhcigpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEtub2IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLm1QSSA9IE1hdGguUEkgKiAwLjg7XHJcbiAgICAgICAgdGhpcy50b0RlZyA9IDE4MCAvIE1hdGguUEk7XHJcbiAgICAgICAgdGhpcy5jaXJSYW5nZSA9IHRoaXMubVBJICogMjtcclxuXHJcbiAgICAgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0S25vYigpO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlR3JhZCgpLCAzIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyArIHRoaXMuZGlhbSArICcgJyArIHRoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBUb29scy5kb20oICdwYXRoJywgJycsIHsgZDogJycsIHN0cm9rZTpjYy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzogMiwgZmlsbDogJ25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOiAncm91bmQnIH0sIHRoaXMuY1szXSApOyAvLzRcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5tb2RlbCA9PSAyKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgVG9vbHMuYWRkU1ZHR2xvd0VmZmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0eWxlJywgJ2ZpbHRlcjogdXJsKFwiI1VJTEdsb3dcIik7JywgNCApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuciA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApIHtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDApO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywncmdiYSgyNTUsMCwwLDAuMiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5zZWxlY3QsIDApO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywncmdiYSgwLDAsMCwwLjYpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dE92ZXIsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdrbm9iJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlXHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbFxyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBvZmYgPSB0aGlzLm9mZnNldDtcclxuXHJcbiAgICAgICAgLy9vZmYueCA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIC8vb2ZmLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICBvZmYueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICBvZmYueSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gLSBNYXRoLmF0YW4yKCBvZmYueCwgb2ZmLnkgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApIHRoaXMuciA9IE1hdGguYWJzKHRoaXMuciAtIHRoaXMub2xkcikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPiB0aGlzLm1QSSA/IHRoaXMubVBJIDogdGhpcy5yO1xyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA8IC10aGlzLm1QSSA/IC10aGlzLm1QSSA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgbGV0IHN0ZXBzID0gMSAvIHRoaXMuY2lyUmFuZ2U7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gKHRoaXMuciArIHRoaXMubVBJKSAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IE1hdGguZmxvb3IoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2tub2InICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlR3JhZCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBkID0gJycsIHN0ZXAsIHJhbmdlLCBhLCB4LCB5LCB4MiwgeTIsIHIgPSA2NDtcclxuICAgICAgICBsZXQgc3RhcnRhbmdsZSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZW5kYW5nbGUgPSBNYXRoLlBJIC0gdGhpcy5tUEk7XHJcbiAgICAgICAgLy9sZXQgc3RlcCA9IHRoaXMuc3RlcD41ID8gdGhpcy5zdGVwIDogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5zdGVwPjUpe1xyXG4gICAgICAgICAgICByYW5nZSA9ICB0aGlzLnJhbmdlIC8gdGhpcy5zdGVwO1xyXG4gICAgICAgICAgICBzdGVwID0gKCBzdGFydGFuZ2xlIC0gZW5kYW5nbGUgKSAvIHJhbmdlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoKCBzdGFydGFuZ2xlIC0gZW5kYW5nbGUgKSAvIHIpKjI7XHJcbiAgICAgICAgICAgIHJhbmdlID0gciowLjU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKCBsZXQgaSA9IDA7IGkgPD0gcmFuZ2U7ICsraSApIHtcclxuXHJcbiAgICAgICAgICAgIGEgPSBzdGFydGFuZ2xlIC0gKCBzdGVwICogaSApO1xyXG4gICAgICAgICAgICB4ID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyMCApO1xyXG4gICAgICAgICAgICB5ID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyMCApO1xyXG4gICAgICAgICAgICB4MiA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgeTIgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIGQgKz0gJ00nICsgeCArICcgJyArIHkgKyAnIEwnICsgeDIgKyAnICcreTIgKyAnICc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgbGV0IHNhID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlYSA9ICggKCB0aGlzLnBlcmNlbnQgKiB0aGlzLmNpclJhbmdlICkgLSAoIHRoaXMubVBJICkgKTtcclxuXHJcbiAgICAgICAgbGV0IHNpbiA9IE1hdGguc2luKCBlYSApO1xyXG4gICAgICAgIGxldCBjb3MgPSBNYXRoLmNvcyggZWEgKTtcclxuXHJcbiAgICAgICAgbGV0IHgxID0gKCAyNSAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkxID0gLSggMjUgKiBjb3MgKSArIDY0O1xyXG4gICAgICAgIGxldCB4MiA9ICggMjAgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MiA9IC0oIDIwICogY29zICkgKyA2NDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKycgJyArIHkxICsgJyBMICcgKyB4MiArJyAnICsgeTIsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHgxID0gMzYgKiBNYXRoLnNpbiggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTEgPSAzNiAqIE1hdGguY29zKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB4MiA9IDM2ICogc2luICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MiA9IC0zNiAqIGNvcyArIDY0O1xyXG4gICAgICAgICAgICBsZXQgYmlnID0gZWEgPD0gTWF0aC5QSSAtIHRoaXMubVBJID8gMCA6IDE7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsgJywnICsgeTEgKyAnIEEgJyArIDM2ICsgJywnICsgMzYgKyAnIDEgJyArIGJpZyArICcgMSAnICsgeDIgKyAnLCcgKyB5MiwgNCApO1xyXG5cclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggdGhpcy5jb2xvcnMudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggdGhpcy5jb2xvcnMudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDQgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICAvLyBUT0RPIG5vdCB3b3JrXHJcbiAgICAgICAgdGhpcy5oaWRlQ3VycmVudCA9IGZhbHNlXHJcblxyXG4gICAgICAgIC8vIGltYWdlc1xyXG4gICAgICAgIHRoaXMucGF0aCA9IG8ucGF0aCB8fCAnJztcclxuICAgICAgICB0aGlzLmZvcm1hdCA9IG8uZm9ybWF0IHx8ICcnO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmlzV2l0aEltYWdlID0gdGhpcy5wYXRoICE9PSAnJyA/IHRydWU6ZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIHRoaXMudG1wVXJsID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubSA9IG8ubSAhPT0gdW5kZWZpbmVkID8gby5tIDogNVxyXG5cclxuXHJcbiAgICAgICAgbGV0IGFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcblxyXG4gICAgICAgIC8vIHNjcm9sbCBzaXplXHJcbiAgICAgICAgbGV0IHNzID0gby5zY3JvbGxTaXplIHx8IDEwXHJcbiAgICAgICAgdGhpcy5zcyA9IHNzKzFcclxuXHJcbiAgICAgICAgdGhpcy5zTW9kZSA9IDA7XHJcbiAgICAgICAgdGhpcy50TW9kZSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdE9ubHkgPSBvLmxpc3RPbmx5IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zdGF0aWNUb3AgPSBvLnN0YXRpY1RvcCB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0YWJsZSA9IHRoaXMubGlzdE9ubHlcclxuICAgICAgICBpZiggby5zZWxlY3QgIT09IHVuZGVmaW5lZCApIG8uc2VsZWN0YWJsZSA9IG8uc2VsZWN0XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudHh0ID09PSAnJyApIHRoaXMucCA9IDA7XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MDsgZGlzcGxheTpub25lOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJyt0aGlzLm0rJ3B4OyBtYXJnaW4tYm90dG9tOjBweDsgcG9zaXRpb246YWJzb2x1dGU7IGp1c3RpZnktY29udGVudDonK2FsaWduKyc7IHRleHQtYWxpZ246JythbGlnbisnOyBsaW5lLWhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zY3JvbGxlckJhY2sgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OjBweDsgd2lkdGg6JytzcysncHg7IGJhY2tncm91bmQ6JytjYy5iYWNrKyc7IGRpc3BsYXk6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLnNjcm9sbGVyID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDonKygoc3MtKHNzKjAuMjUpKSowLjUpKydweDsgd2lkdGg6Jysoc3MqMC4yNSkrJ3B4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOyBkaXNwbGF5Om5vbmU7ICcpO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gW11cclxuICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG51bGxcclxuXHJcbiAgICAgICAgaWYoIG8ubGlzdCApe1xyXG4gICAgICAgICAgICBpZiggby5saXN0IGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLmxpc3QucHVzaCggZyApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnRtcElkID0gMFxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLml0ZW1IZWlnaHQgPSBvLml0ZW1IZWlnaHQgfHwgdGhpcy5oLy8odGhpcy5oLTMpO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBmdWxsIGxpc3QgXHJcbiAgICAgICAgdGhpcy5mdWxsID0gby5mdWxsIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnB5ID0gMDtcclxuICAgICAgICB0aGlzLnd3ID0gdGhpcy5zYjtcclxuICAgICAgICB0aGlzLnNjcm9sbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIGxpc3QgdXAgb3IgZG93blxyXG4gICAgICAgIHRoaXMuc2lkZSA9IG8uc2lkZSB8fCAnZG93bic7XHJcbiAgICAgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudG9wID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmJvdHRvbSA9IHRoaXMuaC0yICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmJvdHRvbSA9ICcxcHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbNF0uc3R5bGUuYm90dG9tID0gZmx0b3AgKyAncHgnO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCArICdweCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxpc3RJbiA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnbGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgYmFja2dyb3VuZDpub25lOycpO1xyXG4gICAgICAgIHRoaXMubGlzdEluLm5hbWUgPSAnbGlzdCc7XHJcblxyXG4gICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLmxpc3RJbiApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlckJhY2sgKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXIgKTtcclxuXHJcbiAgICAgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICBpZighaXNOYU4oby52YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIG8udmFsdWUgXTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IG8ub3BlbiB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGlzdE9ubHkgKXtcclxuICAgICAgICAgICAgdGhpcy5iYXNlSCA9IDU7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbNF0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUgrJ3B4J1xyXG4gICAgICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHRoaXMubWluaUNhbnZhcyA9IG8ubWluaUNhbnZhcyB8fCBmYWxzZSBcclxuICAgICAgICB0aGlzLmNhbnZhc0JnID0gby5jYW52YXNCZyB8fCAncmdiYSgwLDAsMCwwKSdcclxuICAgICAgICB0aGlzLmltYWdlU2l6ZSA9IG8uaW1hZ2VTaXplIHx8IFsyMCwyMF07XHJcblxyXG4gICAgICAgIC8vIGRyYWdvdXQgZnVuY3Rpb25cclxuICAgICAgICB0aGlzLmRyYWcgPSBvLmRyYWcgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLmRyYWdvdXQgPSBvLmRyYWdvdXQgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLmRyYWdzdGFydCA9IG8uZHJhZ3N0YXJ0IHx8IG51bGxcclxuICAgICAgICB0aGlzLmRyYWdlbmQgPSBvLmRyYWdlbmQgfHwgbnVsbFxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMF0uc3R5bGUuYmFja2dyb3VuZCA9ICcjRkYwMDAwJ1xyXG4gICAgICAgIC8vL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRMaXN0KCB0aGlzLmxpc3QgKTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICBpZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbiggdHJ1ZSApXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggKz0gdGhpcy5tdG9wXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGltYWdlIGxpc3RcclxuXHJcbiAgICBwcmVsb2FkSW1hZ2UgKCkge1xyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5saXN0Lmxlbmd0aDsgaSsrICkgdGhpcy50bXBVcmwucHVzaCggdGhpcy5saXN0W2ldICk7XHJcbiAgICAgICAgdGhpcy5sb2FkT25lKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbmV4dEltZyAoKSB7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuYyA9PT0gbnVsbCkgcmV0dXJuXHJcblxyXG4gICAgICAgIHRoaXMudG1wVXJsLnNoaWZ0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMudG1wVXJsLmxlbmd0aCA9PT0gMCApeyBcclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYWRkSW1hZ2VzKCk7XHJcbiAgICAgICAgICAgIC8qdGhpcy5zZXRMaXN0KCB0aGlzLmxpc3QgKTtcclxuICAgICAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oKTsqL1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB0aGlzLmxvYWRPbmUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbG9hZE9uZSgpe1xyXG5cclxuICAgICAgICBsZXQgc2VsZiA9IHRoaXNcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudG1wVXJsWzBdO1xyXG4gICAgICAgIGxldCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuICAgICAgICBpbWcuc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6JytzZWxmLmltYWdlU2l6ZVswXSsncHg7IGhlaWdodDonK3NlbGYuaW1hZ2VTaXplWzFdKydweCc7XHJcbiAgICAgICAgaW1nLnNldEF0dHJpYnV0ZSgnc3JjJywgdGhpcy5wYXRoICsgbmFtZSArIHRoaXMuZm9ybWF0ICk7XHJcblxyXG4gICAgICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVsyXSA9IGltZy53aWR0aDtcclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbM10gPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgICAgICBzZWxmLnRtcEltYWdlW25hbWVdID0gaW1nO1xyXG4gICAgICAgICAgICBzZWxmLm5leHRJbWcoKTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgJiYgdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHRoaXMuaCAtIHRoaXMuYmFzZUggKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnNjcm9sbCAmJiAoIGwueCA+ICh0aGlzLnNhK3RoaXMuc2ItdGhpcy5zcykpICkgcmV0dXJuICdzY3JvbGwnO1xyXG4gICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIKzIgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnNjcm9sbCAmJiAoIGwueCA+ICh0aGlzLnNhK3RoaXMuc2ItdGhpcy5zcykpICkgcmV0dXJuICdzY3JvbGwnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdEl0ZW1zICggeSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy5pdGVtc1xyXG5cclxuICAgICAgICAvKmlmKHRoaXMuaGlkZUN1cnJlbnQpe1xyXG4gICAgICAgICAgICAvL2l0ZW1zID0gWy4uLnRoaXMuaXRlbXNdXHJcbiAgICAgICAgICAgIGl0ZW1zID0gdGhpcy5pdGVtcy5zbGljZSh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICB9Ki9cclxuXHJcbiAgICAgICAgbGV0IGkgPSBpdGVtcy5sZW5ndGgsIGl0ZW0sIGEsIGI7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBhID0gaXRlbS5wb3N5ICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBiID0gaXRlbS5wb3N5ICsgdGhpcy5pdGVtSGVpZ2h0ICsgMSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgaWYoIHkgPj0gYSAmJiB5IDw9IGIgKXsgXHJcbiAgICAgICAgICAgICAgICBuYW1lID0gJ2l0ZW0nICsgaTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMClcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDEpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlSXRlbSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQuc2VsZWN0ICYmIG1vZGU9PT0wKSBtb2RlID0gMlxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1blNlbGVjdGVkKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMClcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIHRoaXMucmVzZXRJdGVtcygpXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgyKVxyXG4gICAgICAgIHRoaXMuY3VycmVudC5zZWxlY3QgPSB0cnVlXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldEl0ZW1zKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGhpZGVBY3RpdmUoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5oaWRlQ3VycmVudCApIHJldHVyblxyXG4gICAgICAgIC8vaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl0aGlzLnRtcElkID0gdGhpcy5jdXJyZW50LmlkXHJcbiAgICAgICAgdGhpcy5yZXNldEhpZGUoKVxyXG4gICAgICAgIC8vdGhpcy5pdGVtc1t0aGlzLnRtcElkXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByZXNldEhpZGUoKSB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihpPT09dGhpcy50bXBJZCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gLTE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmhlaWdodCA9IHRoaXMuaXRlbUhlaWdodCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKihpLTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vdGhpcy5pdGVtc1tpXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvKnRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7Ki9cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgyKVxyXG4gICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyB0aGlzLmN1cnJlbnQuaWQgXVxyXG4gICAgICAgICAgICAgICAgLy90aGlzLnRtcElkID0gdGhpcy5jdXJyZW50LmlkXHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3RhYmxlICkgdGhpcy5zZWxlY3RlZCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy90aGlzLnNlbmQoIHRoaXMucmVmT2JqZWN0ICE9PSBudWxsID8gdGhpcy5yZWZPYmplY3RbIHRoaXMubGlzdFt0aGlzLmN1cnJlbnQuaWRdXSA6IHRoaXMudmFsdWUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZCggdGhpcy52YWx1ZSApXHJcblxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpXHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIG51cDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuICAgICAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDEpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncy1yZXNpemUnKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDEpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgyKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy51cGRhdGUoICggZS5jbGllbnRZIC0gdG9wICApIC0gKCB0aGlzLnNoKjAuNSApICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdG9wID0gdGhpcy56b25lLnkrdGhpcy5iYXNlSC0yO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGUoICggZS5jbGllbnRZIC0gdG9wICApIC0gKCB0aGlzLnNoKjAuNSApICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9pZih0aGlzLmlzRG93bikgdGhpcy5saXN0bW92ZShlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5hbWUgIT09IHRoaXMucHJldk5hbWUgKSBudXAgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSBuYW1lO1xyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgcmV0dXJuIGZhbHNlOyBcclxuICAgICAgICB0aGlzLnB5ICs9IGUuZGVsdGEqMTA7XHJcbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5weSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygndGhpcyBpcyByZXNldCcpXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZVNjcm9sbCAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnNNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc2Nyb2xsZXIuc3R5bGU7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHMuYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHMuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHMuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zTW9kZSA9IG1vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kZVRpdGxlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMudE1vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50TW9kZSA9IG1vZGU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyTGlzdCAoKSB7XHJcblxyXG4gICAgICAgIHdoaWxlICggdGhpcy5saXN0SW4uY2hpbGRyZW4ubGVuZ3RoICkgdGhpcy5saXN0SW4ucmVtb3ZlQ2hpbGQoIHRoaXMubGlzdEluLmxhc3RDaGlsZCApO1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGlzdCAoIGxpc3QgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJMaXN0KCk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IGxpc3Q7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG5cclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5oaWRlQ3VycmVudD8gdGhpcy5sZW5ndGgtMSA6IHRoaXMubGVuZ3RoXHJcblxyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IHRoaXMuZnVsbCA/IGxuZyA6IDU7XHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gbG5nIDwgdGhpcy5tYXhJdGVtID8gbG5nIDogdGhpcy5tYXhJdGVtO1xyXG5cclxuICAgICAgICB0aGlzLm1heEhlaWdodCA9IHRoaXMubWF4SXRlbSAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIFxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5tYXggPSBsbmcgKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICB0aGlzLnJhdGlvID0gdGhpcy5tYXhIZWlnaHQgLyB0aGlzLm1heDtcclxuICAgICAgICB0aGlzLnNoID0gdGhpcy5tYXhIZWlnaHQgKiB0aGlzLnJhdGlvO1xyXG4gICAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heEhlaWdodCAtIHRoaXMuc2g7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArICdweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICl7IFxyXG4gICAgICAgICAgICB0aGlzLnd3ID0gdGhpcy5zYiAtIHRoaXMuc3M7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgdGhpcy50bXBDdHggPSB0aGlzLnRtcENhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFN0eWxlID0gdGhpcy5jYW52YXNCZ1xyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGl0ZW0sIG47Ly8sIGwgPSB0aGlzLnNiO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBuID0gdGhpcy5saXN0W2ldO1xyXG4gICAgICAgICAgICBpdGVtID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrKHRoaXMubSsxKSsncHg7IHdpZHRoOicrdGhpcy53dysncHg7IGhlaWdodDonK3RoaXMuaXRlbUhlaWdodCsncHg7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaXRlbUhlaWdodC0yKSsncHg7IGNvbG9yOicrdGhpcy5jb2xvcnMudGV4dCsnOyBiYWNrZ3JvdW5kOicrdGhpcy5jb2xvcnMuYmFjaysnOycgKTtcclxuICAgICAgICAgICAgaXRlbS5uYW1lID0gJ2l0ZW0nKyBpXHJcbiAgICAgICAgICAgIGl0ZW0uaWQgPSBpO1xyXG4gICAgICAgICAgICBpdGVtLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGl0ZW0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqaTtcclxuICAgICAgICAgICAgdGhpcy5saXN0SW4uYXBwZW5kQ2hpbGQoIGl0ZW0gKTtcclxuICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKCBpdGVtICk7XHJcblxyXG4gICAgICAgICAgICBpZiggbiA9PT0gdGhpcy52YWx1ZSApIHRoaXMuY3VycmVudCA9IGl0ZW1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW25dICk7XHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0udGV4dENvbnRlbnQgPSBuO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjID0gbmV3IEltYWdlKClcclxuICAgICAgICAgICAgICAgIGMuc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUubWFyZ2luTGVmdCA9ICh0aGlzLmltYWdlU2l6ZVswXSs4KSsncHgnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8qbGV0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG5cclxuICAgICAgICAgICAgICAgIGMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgYy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gdGhpcy5jYW52YXNCZ1xyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSkqL1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjpyZWxhdGl2ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsgZGlzcGxheTppbmxpbmUtYmxvY2s7IGZsb2F0OmxlZnQ7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXJpZ2h0OjVweDsgdG9wOjJweCdcclxuICAgICAgICAgICAgICAgLy8gYy5zdHlsZS5jc3NUZXh0ID0nIGZsZXgtc2hyaW5rOiAwOydcclxuXHJcbiAgICAgICAgICAgICAgICBjLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAnZGlzcGxheTpmbGV4OyBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OyBmbGV4LXdyYXA6IHdyYXA7J1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLmZsb2F0ID0gJ3JpZ2h0J1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hcHBlbmRDaGlsZCggYyApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBJbWFnZVtuXSA9IGNcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmRyYWdvdXQgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmltZyA9IHRoaXMudG1wSW1hZ2Vbbl1cclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmRyYWdnYWJsZSA9IFwidHJ1ZVwiXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnc3RhcnQnLCB0aGlzLmRyYWdzdGFydCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWcnLCB0aGlzLmRyYWcgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIGZ1bmN0aW9uKCl7IFJvb3RzLmZha2VVcCgpOyB9ICk7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCB0aGlzLmRyYWdlbmQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBlbmQnKSovIH0uYmluZCh0aGlzKSApXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIGZ1bmN0aW9uKCl7Y29uc29sZS5sb2coJ2Ryb3AnKX0pXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3RhYmxlICkgdGhpcy5zZWxlY3RlZCgpXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0ltYWdlKCBuYW1lLCBpbWFnZSwgeCx5LHcsaCApe1xyXG5cclxuICAgICAgICB0aGlzLnRtcEN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKTtcclxuICAgICAgICB0aGlzLnRtcEN0eC5kcmF3SW1hZ2UoaW1hZ2UsIHgsIHksIHcsIGgsIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuICAgICAgICB0aGlzLnRtcEltYWdlW25hbWVdLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG5cclxuICAgICAgICAvKmxldCBjID0gdGhpcy50bXBJbWFnZVtuYW1lXVxyXG4gICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIHgsIHksIHcsIGgsIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSkqL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhZGRJbWFnZXMgKCl7XHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMubGlzdC5sZW5ndGg7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPGxuZzsgaSsrICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2VbdGhpcy5saXN0W2ldXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICBpZighaXNOYU4odmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyB2YWx1ZSBdO1xyXG4gICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wSWQgPSB2YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VG9wSXRlbSAoKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdGljVG9wICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1dpdGhJbWFnZSApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMucHJlTG9hZENvbXBsZXRlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50ZXh0QWxpZ24gPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLmFwcGVuZENoaWxkKCB0aGlzLmNhbnZhcyApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgaW1nID0gdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMl0sIHRoaXMuaW1hZ2VTaXplWzNdLCAwLDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSApO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50ZXh0QWxpZ24gPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLmFwcGVuZENoaWxkKCB0aGlzLmNhbnZhcyApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwICk7XHJcblxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyAtLS0tLSBMSVNUXHJcblxyXG4gICAgdXBkYXRlICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLnNjcm9sbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgeSA9IHkgPCAwID8gMCA6IHk7XHJcbiAgICAgICAgeSA9IHkgPiB0aGlzLnJhbmdlID8gdGhpcy5yYW5nZSA6IHk7XHJcblxyXG4gICAgICAgIHRoaXMudG9wTGlzdCA9IC1NYXRoLmZsb29yKCB5IC8gdGhpcy5yYXRpbyApO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RJbi5zdHlsZS50b3AgPSB0aGlzLnRvcExpc3QrJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLnRvcCA9IE1hdGguZmxvb3IoIHkgKSAgKyAncHgnO1xyXG5cclxuICAgICAgICB0aGlzLnB5ID0geTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcbiAgICAgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCBmaXJzdCApIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggMCApXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iYXNlSCArIDU7XHJcbiAgICAgICAgaWYoICF0aGlzLnNjcm9sbCApe1xyXG4gICAgICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIICsgNSArIHRoaXMubWF4O1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXsgXHJcbiAgICAgICAgICAgIHRoaXMuem9uZS55IC09IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgaWYoIWZpcnN0KSB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KCAtdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMubGlzdEluLmNoaWxkcmVuW2ldLnN0eWxlLndpZHRoID0gdGhpcy53dyArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGlmKHNbMl09PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzJdLmxlZnQgPSBkICsncHgnO1xyXG5cclxuICAgICAgICBzWzNdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gZCArICdweCc7XHJcblxyXG4gICAgICAgIHNbNF0ubGVmdCA9IGQgKyB3IC0gMTUgKyAncHgnO1xyXG5cclxuICAgICAgICB0aGlzLnd3ID0gdztcclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApIHRoaXMud3cgPSB3LXRoaXMuc3M7XHJcbiAgICAgICAgaWYodGhpcy5pc09wZW4pIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgTnVtZXJpYyBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMF1cclxuICAgICAgICB0aGlzLm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaW52bXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pc1NpbmdsZSA9IHRydWVcclxuICAgICAgICB0aGlzLmlzQW5nbGUgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMuaXNWZWN0b3IgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5pc0FuZ2xlICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNBbmdsZSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5tdWx0eSA9IFRvb2xzLnRvcmFkXHJcbiAgICAgICAgICAgIHRoaXMuaW52bXVsdHkgPSBUb29scy50b2RlZ1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc0RyYWcgPSBvLmRyYWcgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICBpZiggIWlzTmFOKG8udmFsdWUpICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW28udmFsdWVdXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTaW5nbGUgPSBmYWxzZVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW11cclxuICAgICAgICAgICAgICAgIGlmKCBvLnZhbHVlLnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSBvLnZhbHVlLnhcclxuICAgICAgICAgICAgICAgIGlmKCBvLnZhbHVlLnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSBvLnZhbHVlLnlcclxuICAgICAgICAgICAgICAgIGlmKCBvLnZhbHVlLnogIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMl0gPSBvLnZhbHVlLnpcclxuICAgICAgICAgICAgICAgIGlmKCBvLnZhbHVlLncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSBvLnZhbHVlLndcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTaW5nbGUgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZlY3RvciA9IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIGJnXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICcgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgdG9wOjRweDsgd2lkdGg6MHB4OyBoZWlnaHQ6JyArICh0aGlzLmgtOCkgKyAncHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXVxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNBbmdsZSApIHRoaXMudmFsdWVbaV0gPSAodGhpcy52YWx1ZVtpXSAqIDE4MCAvIE1hdGguUEkpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uIClcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgY29sb3I6JyArIGNjLnRleHQgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5iYWNrICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycpXHJcbiAgICAgICAgICAgIGlmKG8uY2VudGVyKSB0aGlzLmNbMitpXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLmlzTnVtID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMFxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuc2VsZWN0SWQgPSAzICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jdXJzb3JJZCA9IDQgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbIHRoaXMuY3Vyc29ySWQgXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgaWYoIG5hbWUgIT09ICcnICl7IFxyXG4gICAgICAgICAgICBcdHRoaXMuY3VycmVudCA9IG5hbWVcclxuICAgICAgICAgICAgXHR0aGlzLnByZXYgPSB7IHg6ZS5jbGllbnRYLCB5OmUuY2xpZW50WSwgZDowLCB2OiB0aGlzLmlzU2luZ2xlID8gcGFyc2VGbG9hdCh0aGlzLnZhbHVlKSA6IHBhcnNlRmxvYXQoIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdICkgfVxyXG4gICAgICAgICAgICBcdHRoaXMuc2V0SW5wdXQoIHRoaXMuY1sgMyArIHRoaXMuY3VycmVudCBdIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IHggPSAwXHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnJyApIHRoaXMuY3Vyc29yKClcclxuICAgICAgICBlbHNleyBcclxuICAgICAgICBcdGlmKCF0aGlzLmlzRHJhZykgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICBcdGVsc2UgdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0RyYWcgKXtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApe1xyXG5cclxuICAgICAgICAgICAgXHR0aGlzLnByZXYuZCArPSAoIGUuY2xpZW50WCAtIHRoaXMucHJldi54ICkgLSAoIGUuY2xpZW50WSAtIHRoaXMucHJldi55IClcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgbiA9IHRoaXMucHJldi52ICsgKCB0aGlzLnByZXYuZCAqIHRoaXMuc3RlcClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSA9IHRoaXMubnVtVmFsdWUobilcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIHRoaXMuY3VycmVudCBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVt0aGlzLmN1cnJlbnRdXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZSgpXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnggPSBlLmNsaWVudFhcclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi55ID0gZS5jbGllbnRZXHJcblxyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZVxyXG4gICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmlzRG93biApIHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueCAtM1xyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSB4IC09IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF1cclxuICAgICAgICBcdHJldHVybiB0aGlzLnVwSW5wdXQoIHgsIHRoaXMuaXNEb3duIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IHYueFxyXG4gICAgICAgICAgICBpZiggdi55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gdi55XHJcbiAgICAgICAgICAgIGlmKCB2LnogIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMl0gPSB2LnpcclxuICAgICAgICAgICAgaWYoIHYudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IHYud1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzU2luZ2xlID8gW3ZdIDogdiAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNhbWVTdHIgKCBzdHIgKXtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gc3RyXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gdGhpcy5udW1WYWx1ZSggdGhpcy52YWx1ZVtpXSAqIHRoaXMuaW52bXVsdHkgKVxyXG4gICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VuZCAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSB0cnVlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9iamVjdExpbmsgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdLmZyb21BcnJheSggdiApXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0gPSB2XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5jYWxsYmFjayApIHRoaXMuY2FsbGJhY2soIHYsIHRoaXMub2JqZWN0S2V5IClcclxuICAgICAgICB0aGlzLmlzU2VuZCA9IGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgZCA9IHRoaXMuY3VycmVudCAhPT0gLTEgPyB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdICsgNSA6IDBcclxuICAgICAgICBzW3RoaXMuY3Vyc29ySWRdLndpZHRoID0gJzFweCdcclxuICAgICAgICBzW3RoaXMuY3Vyc29ySWRdLmxlZnQgPSAoIGQgKyBjICkgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9ICB3ICArICdweCdcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm5cclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0uaW5uZXJIVE1MID0gJydcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gMCArICdweCdcclxuICAgICAgICBzW3RoaXMuY3Vyc29ySWRdLndpZHRoID0gMCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGFyID0gW11cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZVxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgIFx0aWYoIWlzTmFOKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKSl7IFxyXG4gICAgICAgICAgICAgICAgbGV0IG54ID0gdGhpcy5udW1WYWx1ZSggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBueFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IG54XHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIG5vdCBudW1iZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICBcdGFyW2ldID0gdGhpcy52YWx1ZVtpXSAqIHRoaXMubXVsdHlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnNlbmQoIHRoaXMuaXNTaW5nbGUgPyBhclswXSA6IGFyIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBSRVpJU0VcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuICAgICAgICBsZXQgc3ggPSB0aGlzLmNvbG9ycy5zeFxyXG4gICAgICAgIGxldCBzcyA9IHN4ICogKHRoaXMubG5nLTEpXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy5zYi1zcykgLyB0aGlzLmxuZy8vKCggdGhpcy5zYiArIHN4ICkgLyB0aGlzLmxuZyApLXN4XHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCA1ICogaSApKSwgdyBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCB0aGlzLnNhICsgKCB3ICogaSApKyggc3ggKiBpICkpLCB3IF1cclxuICAgICAgICAgICAgdGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ubGVmdCA9IHRoaXMudG1wW2ldWzBdICsgJ3B4J1xyXG4gICAgICAgICAgICBzWyAzICsgaSBdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gXCIuLi9jb3JlL1Byb3RvLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4uL2NvcmUvVG9vbHMuanNcIjtcclxuXHJcbmZ1bmN0aW9uIGVhc2UoeCwgbWluLCBtYXgsIHBvd2VyKSB7XHJcbiAgbGV0IG4gPSBtaW4gKyBNYXRoLnBvdygoeCAtIG1pbikgLyAobWF4IC0gbWluKSwgcG93ZXIpICogKG1heCAtIG1pbik7XHJcbiAgcmV0dXJuIG47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTbGlkZSBleHRlbmRzIFByb3RvIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHN1cGVyKG8pO1xyXG5cclxuICAgIGlmIChvLmVhc2luZyA8PSAwKSB0aHJvdyBcIkVhc2luZyBtdXN0IGJlID4gMFwiO1xyXG4gICAgdGhpcy5lYXNpbmcgPSBvLmVhc2luZyB8fCAxO1xyXG5cclxuICAgIHRoaXMuc2V0VHlwZU51bWJlcihvKTtcclxuXHJcbiAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgaWYgKG8ubW9kZSAhPT0gdW5kZWZpbmVkKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgIC8vdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IgPSB0aGlzLmNvbG9ycy5oaWRlO1xyXG5cclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzT3ZlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzRGVnID0gby5pc0RlZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICAgIFwiYm9yZGVyOm5vbmU7IGJhY2tncm91bmQ6bm9uZTsgd2lkdGg6NDdweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbM10gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBcIiB0b3A6MDsgaGVpZ2h0OlwiICsgdGhpcy5oICsgXCJweDtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYmFjayArXHJcbiAgICAgICAgXCI7IHRvcDoycHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDQpICtcclxuICAgICAgICBcInB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jWzVdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImxlZnQ6NHB4OyB0b3A6NXB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSAxMCkgK1xyXG4gICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1syXS5pc051bSA9IHRydWU7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5oZWlnaHQgPSAodGhpcy5oLTQpICsgJ3B4JztcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmxpbmVIZWlnaHQgPSAodGhpcy5oLTgpICsgJ3B4JztcclxuICAgIHRoaXMuY1syXS5zdHlsZS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmxpbmVIZWlnaHQgPSB0aGlzLmggLSAxMCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkge1xyXG4gICAgICBsZXQgcjEgPSA0LFxyXG4gICAgICAgIGgxID0gNCxcclxuICAgICAgICBoMiA9IDgsXHJcbiAgICAgICAgd3cgPSB0aGlzLmggLSA2LFxyXG4gICAgICAgIHJhID0gMTY7XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMikge1xyXG4gICAgICAgIHIxID0gMDtcclxuICAgICAgICBoMSA9IDI7XHJcbiAgICAgICAgaDIgPSA0O1xyXG4gICAgICAgIHJhID0gMjtcclxuICAgICAgICB3dyA9ICh0aGlzLmggLSA2KSAqIDAuNTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDMpIHRoaXMuY1s1XS5zdHlsZS52aXNpYmxlID0gXCJub25lXCI7XHJcblxyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuYm9yZGVyUmFkaXVzID0gcjEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5oZWlnaHQgPSBoMiArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9IHRoaXMuaCAqIDAuNSAtIGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuYm9yZGVyUmFkaXVzID0gcjEgKiAwLjUgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5oZWlnaHQgPSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLnRvcCA9IHRoaXMuaCAqIDAuNSAtIGgxICogMC41ICsgXCJweFwiO1xyXG5cclxuICAgICAgLy90aGlzLmNbNl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JvcmRlci1yYWRpdXM6JytyYSsncHg7IG1hcmdpbi1sZWZ0OicrKC13dyowLjUpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGxlZnQ6NHB4OyB0b3A6MnB4OyBoZWlnaHQ6JysodGhpcy5oLTQpKydweDsgd2lkdGg6Jyt3dysncHg7JyApO1xyXG4gICAgICB0aGlzLmNbNl0gPSB0aGlzLmRvbShcclxuICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICAgIFwiYm9yZGVyLXJhZGl1czpcIiArXHJcbiAgICAgICAgICByYSArXHJcbiAgICAgICAgICBcInB4OyBtYXJnaW4tbGVmdDpcIiArXHJcbiAgICAgICAgICAtd3cgKiAwLjUgK1xyXG4gICAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICAgIFwiOyBsZWZ0OjRweDsgdG9wOjNweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAgICh0aGlzLmggLSA2KSArXHJcbiAgICAgICAgICBcInB4OyB3aWR0aDpcIiArXHJcbiAgICAgICAgICB3dyArXHJcbiAgICAgICAgICBcInB4O1wiXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG5cclxuICB0ZXN0Wm9uZShlKSB7XHJcbiAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICBpZiAobC54ID09PSAtMSAmJiBsLnkgPT09IC0xKSByZXR1cm4gXCJcIjtcclxuXHJcbiAgICBpZiAobC54ID49IHRoaXMudHhsKSByZXR1cm4gXCJ0ZXh0XCI7XHJcbiAgICBlbHNlIGlmIChsLnggPj0gdGhpcy5zYSkgcmV0dXJuIFwic2Nyb2xsXCI7XHJcbiAgICBlbHNlIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb3VzZXVwKGUpIHtcclxuICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIHRoaXMubW91c2Vtb3ZlKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qaWYoIG5hbWUgPT09ICd0ZXh0JyApe1xyXG4gICAgICAgICAgICB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0sIGZ1bmN0aW9uKCl7IHRoaXMudmFsaWRhdGUoKSB9LmJpbmQodGhpcykgKTtcclxuICAgICAgICB9Ki9cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICBsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMubW9kZSgxKTtcclxuICAgICAgdGhpcy5jdXJzb3IoXCJ3LXJlc2l6ZVwiKTtcclxuICAgICAgLy99IGVsc2UgaWYobmFtZSA9PT0gJ3RleHQnKXtcclxuICAgICAgLy90aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHtcclxuICAgICAgbGV0IG5Ob3JtYWxpemVkID0gKGUuY2xpZW50WCAtICh0aGlzLnpvbmUueCArIHRoaXMuc2EpIC0gMykgLyB0aGlzLnd3O1xyXG5cclxuICAgICAgLy8gbG8gbWFwZW8gYWwgcmFuZ28gMCAuLi4gMVxyXG4gICAgICBuTm9ybWFsaXplZCA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIG5Ob3JtYWxpemVkKSk7XHJcblxyXG4gICAgICAvLyBhcGxpY28gZWFzaW5nXHJcbiAgICAgIGxldCBuRWFzZWQgPSBNYXRoLnBvdyhuTm9ybWFsaXplZCwgdGhpcy5lYXNpbmcpOyAvLyBlYXNpbmdcclxuXHJcbiAgICAgIGxldCBuTmV3ID0gbkVhc2VkICogdGhpcy5yYW5nZSArIHRoaXMubWluO1xyXG4gICAgICBsZXQgbk5ld1NsaWRlciA9IG5Ob3JtYWxpemVkICogdGhpcy5yYW5nZSArIHRoaXMubWluO1xyXG5cclxuICAgICAgdGhpcy5zbGlkZXJWYWx1ZSA9IHRoaXMubnVtVmFsdWUobk5ld1NsaWRlcik7XHJcblxyXG4gICAgICBsZXQgZGVsdGEgPSBuTmV3IC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICBsZXQgc3RlcHM7XHJcbiAgICAgIGlmIChkZWx0YSA+PSB0aGlzLnN0ZXAgfHwgZGVsdGEgPD0gdGhpcy5zdGVwKSB7XHJcbiAgICAgICAgc3RlcHMgPSBNYXRoLmZsb29yKGRlbHRhIC8gdGhpcy5zdGVwKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLm9sZCArIHN0ZXBzICogdGhpcy5zdGVwKTtcclxuICAgICAgICAvLyB2YWx1ZSB3aXRob3V0IGVhc2luZyBhcHBsaWVkXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgICAvL2NvbnNvbGUubG9nKFwibiwgbm9ybWFsaXplZCwgdmFsdWVcIiwgbk5ldywgbk5vcm1hbGl6ZWQsIHRoaXMudmFsdWUpO1xyXG4gICAgICBudXAgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudXA7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuXHJcbiAgICAgIGlmICh2ID4gdGhpcy5tYXgpIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgIH0gZWxzZSBpZiAodiA8IHRoaXMubWluKSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNldFZhbHVlKHYpO1xyXG4gICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy9rZXlkb3duOiBmdW5jdGlvbiAoIGUgKSB7IHJldHVybiB0cnVlOyB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHZhbGlkYXRlKCkge1xyXG4gICAgbGV0IG4gPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgaWYgKCFpc05hTihuKSkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZShuKTtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICB9IGVsc2UgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIC8vdGhpcy5jbGVhcklucHV0KCk7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5tb2RlKDApO1xyXG4gIH1cclxuXHJcbiAgbW9kZShtb2RlKSB7XHJcbiAgICBsZXQgcyA9IHRoaXMucztcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAvLyBzWzJdLmJvcmRlciA9ICcxcHggc29saWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuICAgICAgICBzWzVdLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0OyAvL2NjLmJ1dHRvbjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOiAvLyBzY3JvbGwgb3ZlclxyXG4gICAgICAgIC8vc1syXS5ib3JkZXIgPSAnMXB4IGRhc2hlZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuICAgICAgICBzWzVdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IC8vY2Mub3Zlcm9mZjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZSh1cCkge1xyXG4gICAgbGV0IG5vcm1hbGl6ZWQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgbGV0IHVuZWFzZWQgPVxyXG4gICAgICB0aGlzLmVhc2luZyA9PSAxID8gbm9ybWFsaXplZCA6IE1hdGgucG93KG5vcm1hbGl6ZWQsIDEgLyB0aGlzLmVhc2luZyk7XHJcblxyXG4gICAgbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogdW5lYXNlZCk7XHJcbiAgICAvL2xldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqICgodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2UpKTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gMykgdGhpcy5zWzVdLndpZHRoID0gd3cgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5zWzZdKSB0aGlzLnNbNl0ubGVmdCA9IHRoaXMuc2EgKyB3dyArIDMgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuXHJcbiAgICBpZiAodXApIHRoaXMuc2VuZCgpO1xyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy5zYiAtIHRoaXMuc2M7XHJcbiAgICB0aGlzLnd3ID0gdyAtIDY7XHJcblxyXG4gICAgbGV0IHR4ID0gdGhpcy5zYztcclxuICAgIGlmICh0aGlzLmlzVUkgfHwgIXRoaXMuc2ltcGxlKSB0eCA9IHRoaXMuc2MgKyAxMDtcclxuICAgIHRoaXMudHhsID0gdGhpcy53IC0gdHggKyAyO1xyXG5cclxuICAgIC8vbGV0IHR5ID0gTWF0aC5mbG9vcih0aGlzLmggKiAwLjUpIC0gODtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICBzWzJdLndpZHRoID0gdGhpcy5zYyAtIDYgKyBcInB4XCI7XHJcbiAgICBzWzJdLmxlZnQgPSB0aGlzLnR4bCArIDQgKyBcInB4XCI7XHJcbiAgICAvL3NbMl0udG9wID0gdHkgKyAncHgnO1xyXG4gICAgc1szXS5sZWZ0ID0gdGhpcy5zYSArIFwicHhcIjtcclxuICAgIHNbM10ud2lkdGggPSB3ICsgXCJweFwiO1xyXG4gICAgc1s0XS5sZWZ0ID0gdGhpcy5zYSArIFwicHhcIjtcclxuICAgIHNbNF0ud2lkdGggPSB3ICsgXCJweFwiO1xyXG4gICAgc1s1XS5sZWZ0ID0gdGhpcy5zYSArIDMgKyBcInB4XCI7XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUZXh0SW5wdXQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlICE9PSB1bmRlZmluZWQgPyBvLnZhbHVlIDogJyc7XHJcbiAgICAgICAgdGhpcy5wbGFjZUhvbGRlciA9IG8ucGxhY2VIb2xkZXIgfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZSA9IG8uZWRpdCAhPT0gdW5kZWZpbmVkID8gby5lZGl0IDogdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gdGV4dFxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonICsgKHRoaXMuaC0yKSArICdweDsgY29sb3I6JyArIGNjLnRleHQgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5iYWNrICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgLy8gZmFrZVxyXG4gICAgICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonICsgKHRoaXMuaC0yKSArICdweDsgYm9yZGVyOm5vbmU7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOicrY2MuYm9yZGVyKyc7JyApO1xyXG4gICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSAnJyApIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIFxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+PSB0aGlzLnNhICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggbmFtZSA9PT0gJ3RleHQnICkgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgLy9pZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICl7IHJldHVybjt9XHJcblxyXG4gICAgICAgIC8vaWYoIGwueCA+PSB0aGlzLnNhICkgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICAvL2Vsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RleHQnICkgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICBlbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBJbnB1dCggeCAtIHRoaXMuc2EgLTMsIHRoaXMuaXNEb3duICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2EgKyA1O1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAnMXB4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAoIGQgKyBlICkgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAgKCBkICsgZSApICArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICB3ICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgaWYoIXMpIHJldHVybjtcclxuICAgICAgICBzWzNdLndpZHRoID0gIDAgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gJ3QnXHJcbiAgICAgICAgc1s0XS53aWR0aCA9IDAgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWU7IFxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgICAgICBpZih0aGlzLnZhbHVlICE9PSAnJykgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgZWxzZSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBSRVpJU0VcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s1XS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1s1XS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBUaXRsZSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICBsZXQgcHJlZml4ID0gby5wcmVmaXggfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpyaWdodDsgd2lkdGg6NjBweDsgbGluZS1oZWlnaHQ6JysgKHRoaXMuaC04KSArICdweDsgY29sb3I6JyArIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaCA9PT0gMzEgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0udG9wID0gOCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSA4ICsgJ3B4JztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc1sxXS5qdXN0aWZ5Q29udGVudCA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIC8vc1sxXS50ZXh0QWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICBzWzFdLmZvbnRXZWlnaHQgPSBvLmZvbnRXZWlnaHQgfHwgJ2JvbGQnO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQuc3Vic3RyaW5nKDAsMSkudG9VcHBlckNhc2UoKSArIHRoaXMudHh0LnN1YnN0cmluZygxKS5yZXBsYWNlKFwiLVwiLCBcIiBcIik7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gcHJlZml4O1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQyKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcbiAgICAgICAgdGhpcy5zWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4JzsgLy8tIDUwICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0ubGVmdCA9IHRoaXMudyArICdweCc7Ly8tICggNTAgKyAyNiApICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q29sb3IoIGMgKSB7XHJcbiAgICAgICAgdGhpcy5zWzFdLmNvbG9yID0gY1xyXG4gICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMub25BY3RpZiA9IG8ub25BY3RpZiB8fCBmdW5jdGlvbigpe31cclxuXHJcbiAgICAgICAgLy9sZXQgcHJlZml4ID0gby5wcmVmaXggfHwgJyc7XHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICcgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrIGNjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuICAgICAgICAvL3RoaXMuY1syXS5zdHlsZS5jb2xvciA9IHRoaXMuZm9udENvbG9yO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IGJhY2tncm91bmQ6JyArIGNjLmlucHV0QmcgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuaW5wdXRCb3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnY3Vyc29yJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcbiAgICAgICAgdGhpcy5pc0FjdGlmID0gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3ZlcidcclxuICAgICAgICByZXR1cm4gJzAnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcbiAgICBcclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgLy90aGlzLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgLy90aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbIG5hbWUtMiBdO1xyXG4gICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhcHBseSAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8ICcnO1xyXG5cclxuICAgICAgICBpZiggdiAhPT0gdGhpcy52YWx1ZSApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSggMyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0xICkgdGhpcy5pc0FjdGlmID0gZmFsc2U7O1xyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0zICl7IFxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzQWN0aWYgKXsgdGhpcy5pc0FjdGlmID0gdHJ1ZTsgbj00OyB0aGlzLm9uQWN0aWYoIHRoaXMgKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7IHRoaXMuaXNBY3RpZiA9IGZhbHNlOyB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MiAmJiB0aGlzLmlzQWN0aWYgKSBuID0gNDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gYWN0aWZcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICh0aGlzLnNhKzgpICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBGaWxlcyB9IGZyb20gJy4uL2NvcmUvRmlsZXMuanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBCaXRtYXAgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMucmVmVGV4dHVyZSA9IG8udGV4dHVyZSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcblxyXG5cclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICcgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IGJhY2tncm91bmQ6JyArIGNjLmlucHV0QmcgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuaW5wdXRCb3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2xvYWQnIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJztcclxuICAgICAgICByZXR1cm4gJzAnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcbiAgICBcclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgLy90aGlzLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBGaWxlcy5sb2FkKCB7IGNhbGxiYWNrOnRoaXMuY2hhbmdlQml0bWFwLmJpbmQodGhpcykgfSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy90aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbIG5hbWUtMiBdO1xyXG4gICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBjaGFuZ2VCaXRtYXAoIGltZywgZm5hbWUgKXtcclxuXHJcbiAgICAgICAgaWYoIGltZyApe1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IGltZ1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCBmbmFtZSApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoICdudWxsJyApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhcHBseSAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8ICcnO1xyXG5cclxuICAgICAgICBpZiggdiAhPT0gdGhpcy52YWx1ZSApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pbWcgIT09IG51bGwgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLm9iamVjdExpbmsgIT09IG51bGwgKSB0aGlzLm9iamVjdExpbmtbIHRoaXMudmFsIF0gPSB2XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5jYWxsYmFjayApIHRoaXMuY2FsbGJhY2soIHRoaXMudmFsdWUsIHRoaXMuaW1nLCB0aGlzLm5hbWUgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSggMyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhazsgLy8gYWN0aWZcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICh0aGlzLnNhKzgpICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG59IiwiLy9pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0b3IgZXh0ZW5kcyBCdXR0b24ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgPT09IHVuZGVmaW5lZCApIG8uc2VsZWN0YWJsZSA9IHRydWVcclxuICAgICAgICBzdXBlciggbyApO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLnAgPSAxMDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudHh0O1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5pdHlwZSA9IG8uaXR5cGUgfHwgJ25vbmUnO1xyXG4gICAgICAgIHRoaXMudmFsID0gdGhpcy5pdHlwZTtcclxuXHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IHRoaXMuc3Znc1sgdGhpcy5pdHlwZSBdO1xyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTc7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5ncmFwaCwgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc1sxXS5tYXJnaW5MZWZ0ID0gMjAgKyAncHgnO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG5cclxuICAgICAgICAvL3VwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgbmFtZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkKCB0cnVlICk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdXQgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdmVyICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoNCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMik7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8qclNpemUgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgfSovXHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdHVzICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IG47XHJcbiAgICAgICAgICAgIGxldCBzID0gdGhpcy5zLCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zdGF0dXMgPSAxOyBzWzFdLmNvbG9yID0gY2MudGV4dDsgc1swXS5iYWNrZ3JvdW5kID0gJ25vbmUnOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zdGF0dXMgPSAyOyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnN0YXR1cyA9IDM7IHNbMV0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzWzBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnN0YXR1cyA9IDQ7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgIC8vIHJldHVybiB0aGlzLm1vZGUoIDEgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQgKCBiICl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcydcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnXHJcblxyXG5leHBvcnQgY2xhc3MgR3JpZCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICAvKnRoaXMudmFsdWVzID0gby52YWx1ZXMgfHwgW107XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF07Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIG8udmFsdWVzICl7XHJcbiAgICAgICAgICAgIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBTdHJpbmcgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gWyBvLnZhbHVlcyBdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8udmFsdWVzXHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy52YWx1ZXMucHVzaCggZyApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoO1xyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IG51bGw7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3BhY2VzID0gby5zcGFjZXMgfHwgWyBjYy5zeCwgY2Muc3kgXVxyXG4gICAgICAgIHRoaXMuYnNpemUgPSBvLmJzaXplIHx8IFsgOTAsIHRoaXMuaCBdO1xyXG5cclxuICAgICAgICB0aGlzLmJzaXplTWF4ID0gdGhpcy5ic2l6ZVswXVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ3JpZCA9IFsgMiwgTWF0aC5yb3VuZCggdGhpcy5sbmcgKiAwLjUgKSBdO1xyXG5cclxuICAgICAgICB0aGlzLmggPSAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuYnNpemVbMV0gKSArICggdGhpcy5ncmlkWzFdICogdGhpcy5zcGFjZXNbMV0gKSAvLysgNCAtICh0aGlzLm10b3AqMikgLy8rICh0aGlzLnNwYWNlc1sxXSAtIHRoaXMubXRvcCk7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICd0YWJsZScsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IHRvcDonKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7IGhlaWdodDphdXRvOyBib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7IGJvcmRlcjpub25lOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICd0YWJsZScsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0pKydweDsgYm9yZGVyOm5vbmU7JyApO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZCwgdGQsIHRyLCBzZWw7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IFtdOyBcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFggPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFkgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdHIgPSB0aGlzLmNbMl0uaW5zZXJ0Um93KCk7XHJcbiAgICAgICAgICAgIHRyLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG4gICAgICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGQgPSB0ci5pbnNlcnRDZWxsKCk7XHJcbiAgICAgICAgICAgICAgICB0ZC5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3Bvc2l0aW9uOnN0YXRpYzsgdG9wOjFweDsgd2lkdGg6Jyt0aGlzLmJzaXplWzBdKydweDsgaGVpZ2h0OicrKHRoaXMuYnNpemVbMV0tMikrJ3B4OyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBsZWZ0OmF1dG87IHJpZ2h0OmF1dG87IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JztcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b247XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgIGIuaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoIGIgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25zLnB1c2goYilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXQucHVzaCgxKVxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApXHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOnN0YXRpYzsgd2lkdGg6Jyt0aGlzLmJzaXplWzBdKydweDsgaGVpZ2h0OicrdGhpcy5ic2l6ZVsxXSsncHg7IHRleHQtYWxpZ246Y2VudGVyOyBsZWZ0OmF1dG87IHJpZ2h0OmF1dG87IGJhY2tncm91bmQ6bm9uZTsnXHJcbiAgICAgICAgICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoIGIgKVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZihqPT09MCkgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpyaWdodDsnO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OmxlZnQ7JztcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBuKys7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xO1xyXG5cclxuICAgICAgICBsLnkgKz0gdGhpcy5tdG9wXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IHR4ID0gdGhpcy50bXBYO1xyXG4gICAgICAgIGxldCB0eSA9IHRoaXMudG1wWTtcclxuXHJcbiAgICAgICAgbGV0IGlkID0gLTE7XHJcbiAgICAgICAgbGV0IGMgPSAtMTtcclxuICAgICAgICBsZXQgbGluZSA9IC0xO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5ncmlkWzBdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICBcdGlmKCBsLnggPiB0eFtpXVswXSAmJiBsLnggPCB0eFtpXVsxXSApIGMgPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaSA9IHRoaXMuZ3JpZFsxXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0eVtpXVswXSAmJiBsLnkgPCB0eVtpXVsxXSApIGxpbmUgPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoYyE9PS0xICYmIGxpbmUhPT0tMSl7XHJcbiAgICAgICAgICAgIGlkID0gYyArIChsaW5lKjIpO1xyXG4gICAgICAgICAgICBpZihpZD50aGlzLmxuZy0xKSBpZCA9IC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgdGhpcy5zZW5kKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIHRoaXMucmVzIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFx0dXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGUoIG4sIGkgKSApIHIgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLmJ1dHRvbnNcclxuICAgICAgICBsZXQgaSA9IGlkXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS50ZXh0Q29udGVudCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSwgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnN0eWxlLnBhZGRpbmcgPSAoIHkgfHwgMCApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0VyAoKSB7XHJcblxyXG4gICAgICAgIGxldCB2dyA9IHRoaXMuc3BhY2VzWzBdKjMgKyB0aGlzLmJzaXplTWF4KjIsIHJ6ID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHZ3ID4gdGhpcy53ICkge1xyXG4gICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gKCB0aGlzLnctKHRoaXMuc3BhY2VzWzBdKjMpICkgKiAwLjU7XHJcbiAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggdGhpcy5ic2l6ZVswXSAhPT0gdGhpcy5ic2l6ZU1heCApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSB0aGlzLmJzaXplTWF4O1xyXG4gICAgICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIXJ6ICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuYnV0dG9ucy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmJ1dHRvbnNbaV0uc3R5bGUud2lkdGggPSB0aGlzLmJzaXplWzBdICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnRlc3RXKCk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkO1xyXG5cclxuICAgICAgICB0aGlzLnRtcFggPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFkgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgaWYoaj09PTApe1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgLSAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLXRoaXMuYnNpemVbMF0sIG1pZCBdICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSArICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQsIG1pZCt0aGlzLmJzaXplWzBdIF0gKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1pZCA9IHRoaXMuc3BhY2VzWzFdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRtcFkucHVzaCggWyBtaWQsIG1pZCArIHRoaXMuYnNpemVbMV0gXSApO1xyXG4gICAgICAgICAgICBtaWQgKz0gdGhpcy5ic2l6ZVsxXSArIHRoaXMuc3BhY2VzWzFdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFkMkQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgLy90aGlzLm1hcmdpbiA9IDE1O1xyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKDAsMCk7XHJcbiAgICAgICAgdGhpcy5tYXhQb3MgPSA5MFxyXG5cclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMubWluID0gby5taW4gPT09IHVuZGVmaW5lZCA/IC0xIDogby5taW47XHJcbiAgICAgICAgdGhpcy5tYXggPSBvLm1heCA9PT0gdW5kZWZpbmVkID8gMSA6IG8ubWF4O1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gKHRoaXMubWF4IC0gdGhpcy5taW4pKjAuNTsgIFxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5yYW5nZSlcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIFxyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IDIgOiBvLnByZWNpc2lvbjtcclxuXHJcbiAgICAgICAgLyp0aGlzLmJvdW5kcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngxID0gby54MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MiA9IG8ueDIgfHwgMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MSA9IG8ueTEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTIgPSBvLnkyIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMubGVycFggPSB0aGlzLmxlcnAoIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiAsIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiApO1xyXG4gICAgICAgIHRoaXMubGVycFkgPSB0aGlzLmxlcnAoIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiAsIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiApO1xyXG5cclxuICAgICAgICB0aGlzLmFsZXJwWCA9IHRoaXMubGVycCggdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyLCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gKTtcclxuICAgICAgICB0aGlzLmFsZXJwWSA9IHRoaXMubGVycCggdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyLCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gKTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gKCBBcnJheS5pc0FycmF5KCBvLnZhbHVlICkgJiYgby52YWx1ZS5sZW5ndGggPT0gMiApID8gby52YWx1ZSA6IFsgMCwgMCBdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsgJ3B4JztcclxuXHJcbiAgICAgICAgLy8gVGl0bGVcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMudG9wIC09IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cclxuICAgICAgICAvLyBWYWx1ZVxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyAoIHRoaXMuaCAtIDIwICkgKyAncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicgKyBjYy50ZXh0ICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gUGFkXHJcblxyXG4gICAgICAgIGxldCBwYWQgPSB0aGlzLmdldFBhZDJkKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDIgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggcGFkLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gcGFkXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSgpXHJcblxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG5cclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ3BhZCc7XHJcblxyXG4gICAgICAgIC8qaWYoICggbC54ID49IHRoaXMubWFyZ2luICkgJiYgKCBsLnggPD0gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA+PSB0aGlzLnRvcCArIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPD0gdGhpcy50b3AgKyB0aGlzLncgLSB0aGlzLm1hcmdpbiApICkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BhZCc7XHJcbiAgICAgICAgfSovXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9yZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy50ZXN0Wm9uZShlKSA9PT0gJ3BhZCcgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgeCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKVxyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGxldCByID0gMjU2IC8gdGhpcy5kaWFtXHJcblxyXG4gICAgICAgIHggPSAtKHgqcilcclxuICAgICAgICB5ID0gLSh5KnIpXHJcblxyXG4gICAgICAgIHggPSBUb29scy5jbGFtcCggeCwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcbiAgICAgICAgeSA9IFRvb2xzLmNsYW1wKCB5LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuXHJcbiAgICAgICAgLy9sZXQgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG4gICAgICAgIC8vbGV0IHkgPSBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wO1xyXG5cclxuICAgICAgICAvKmlmKCB4IDwgdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHggPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHggPSB0aGlzLncgLSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA8IHRoaXMubWFyZ2luICkgeSA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47Ki9cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh4LHkpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zKCBbIHggLCB5IF0gKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5iYWNrLCAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5iYWNrb2ZmLCAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5vdmVyb2ZmLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0U2VsZWN0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICAvL2lmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcoKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA9PSAxICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kxJywgdGhpcy5wb3MueSwgMiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTInLCB0aGlzLnBvcy55LCAyICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDEnLCB0aGlzLnBvcy54LCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MicsIHRoaXMucG9zLngsIDMgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB0aGlzLnBvcy54LCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgdGhpcy5wb3MueSwgNCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRQb3MgKCBwICkge1xyXG5cclxuICAgICAgICAvL2lmKCBwID09PSB1bmRlZmluZWQgKSBwID0gWyB0aGlzLncgLyAyLCB0aGlzLncgLyAyIF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggcFswXSsxMjggLCBwWzFdKzEyOCApO1xyXG5cclxuICAgICAgICBsZXQgciA9IDEvdGhpcy5tYXhQb3NcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9ICgocFswXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAoKHBbMV0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2LCB1cCA9IGZhbHNlICkge1xyXG5cclxuICAgICAgICBpZiggdiA9PT0gdW5kZWZpbmVkICkgdiA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8qaWYgKCB2WzBdIDwgdGhpcy5ib3VuZHMueDEgKSB2WzBdID0gdGhpcy5ib3VuZHMueDE7XHJcbiAgICAgICAgaWYgKCB2WzBdID4gdGhpcy5ib3VuZHMueDIgKSB2WzBdID0gdGhpcy5ib3VuZHMueDI7XHJcbiAgICAgICAgaWYgKCB2WzFdIDwgdGhpcy5ib3VuZHMueTEgKSB2WzFdID0gdGhpcy5ib3VuZHMueTE7XHJcbiAgICAgICAgaWYgKCB2WzFdID4gdGhpcy5ib3VuZHMueTIgKSB2WzFdID0gdGhpcy5ib3VuZHMueTI7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzBdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMV0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoICgodGhpcy52YWx1ZVswXS90aGlzLnJhbmdlKSp0aGlzLm1heFBvcykrMTI4ICAsICgodGhpcy52YWx1ZVsxXS90aGlzLnJhbmdlKSp0aGlzLm1heFBvcykrMTI4IClcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnBvcylcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHVwICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qbGVycCggczEsIHMyLCBkMSwgZDIsIGMgPSB0cnVlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9ICggZDIgLSBkMSApIC8gKCBzMiAtIHMxICk7XHJcblxyXG4gICAgICAgIHJldHVybiBjID8gKCB2ICkgPT4geyBcclxuICAgICAgICAgICAgcmV0dXJuICggKCB2IDwgczEgPyBzMSA6IHYgPiBzMiA/IHMyIDogdiApIC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH0gOiAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgcmV0dXJuICggdiAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9XHJcblxyXG4gICAgfSovXHJcblxyXG59IiwiLy8gcHJvdG8vVHJlZUxpc3QuanNcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4uL2NvcmUvUm9vdHMuanNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUcmVlTGlzdCBleHRlbmRzIFByb3RvIHtcclxuXHRjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuXHRcdC8vIEFQSSBww7pibGljYSBlc3BlcmFkYTpcclxuXHRcdC8vIG8udHJlZSAob2JqL2FycmF5KSwgby52YWx1ZSAoYXJyYXkpXHJcblx0XHQvLyBvLmZvY3VzZWQgKGJvb2wpLCBvLmZvY3VzUGF0aCAoYXJyYXkpLCBvLmZvY3VzTGV2ZWwgKG51bWJlcilcclxuXHRcdC8vIG8udGFiSW5kZXgsIG8uaXRlbUluZGV4LCBvLm9uQ2hhbmdlIChmbilcclxuXHRcdG8uc2VsZWN0YWJsZSA9IHRydWU7XHJcblx0XHRvLm5hbWUgPSBvLm5hbWUgfHwgXCJUcmVlTGlzdFwiO1xyXG5cclxuXHRcdHN1cGVyKG8pO1xyXG5cdFx0dGhpcy5lbmFibGVIb3ZlciA9IG8uZW5hYmxlSG92ZXIgIT09IGZhbHNlO1xyXG5cclxuXHRcdC8vIERhdG9zICYgZXN0YWRvXHJcblx0XHR0aGlzLnRyZWUgPSBvLnRyZWUgfHwge307XHJcblx0XHR0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheShvLnZhbHVlKSA/IG8udmFsdWUuc2xpY2UoKSA6IFtdO1xyXG5cdFx0dGhpcy5mb2N1c2VkID0gISFvLmZvY3VzZWQ7XHJcblx0XHR0aGlzLmZvY3VzUGF0aCA9IEFycmF5LmlzQXJyYXkoby5mb2N1c1BhdGgpID8gby5mb2N1c1BhdGguc2xpY2UoKSA6IFtdO1xyXG5cdFx0dGhpcy5mb2N1c0xldmVsID0gdHlwZW9mIG8uZm9jdXNMZXZlbCA9PT0gXCJudW1iZXJcIiA/IG8uZm9jdXNMZXZlbCA6IC0xO1xyXG5cclxuXHRcdHRoaXMudGFiSW5kZXggPSBvLnRhYkluZGV4ID8/IG51bGw7XHJcblx0XHR0aGlzLml0ZW1JbmRleCA9IG8uaXRlbUluZGV4ID8/IG51bGw7XHJcblxyXG5cdFx0Ly8gQ2FsbGJhY2tcclxuXHRcdHRoaXMuY2hhbmdlQ2IgPVxyXG5cdFx0XHR0eXBlb2Ygby5vbkNoYW5nZSA9PT0gXCJmdW5jdGlvblwiID8gby5vbkNoYW5nZSA6ICgpID0+IHt9O1xyXG5cclxuXHRcdC8vIExheW91dCBpbnRlcm5vIC8gcHVibGljYWNpw7NuIGRlIGFsdHVyYVxyXG5cdFx0dGhpcy5saW5lSCA9IHRoaXMuaDsgLy8gYWx0byBkZSBVTkEgZmlsYVxyXG5cdFx0dGhpcy5sZXZlbEdhcCA9IHRoaXMuY29sb3JzLnN5IHx8IDI7IC8vIHNlcGFyYWNpw7NuIHZlcnRpY2FsIGVudHJlIG5pdmVsZXNcclxuXHRcdHRoaXMubGVhZk1heCA9IDA7IC8vIHNlIGNhbGN1bGEgZW4gclNpemUoKVxyXG5cclxuXHRcdC8vIE1vZGVsbyB2aXN1YWxcclxuXHRcdHRoaXMubGV2ZWxzID0gW107IC8vIFt7dHlwZTonbWFwJ3wnbGlzdCcsIGl0ZW1zOlt7a2V5LGxhYmVsLHpvbmV9XSwgem9uZTp7eCx5LHcsaH19Li4uXVxyXG5cdFx0dGhpcy5pdGVtc0RvbSA9IFtdOyAvLyBlc3Blam8gRE9NIHBvciBuaXZlbFxyXG5cdFx0dGhpcy5ob3ZlciA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcblx0XHQvLyDwn5S4IE5VRVZPOiByZWNvcmRhciBsYSDDumx0aW1hIGhvamEgc2VsZWNjaW9uYWRhIChwZXJzaXN0ZW50ZSlcclxuXHRcdHRoaXMubGFzdExlYWYgPSB7IHBhcmVudFBhdGg6IFtdLCBrZXk6IG51bGwgfTsgLy8gcGFyZW50UGF0aCBlcyBsYSBydXRhIGhhc3RhIGVsIG1hcGEgcGFkcmVcclxuXHJcblx0XHQvLyBDb250ZW5lZG9yIGludGVybm8gKGFic29sdXRvKVxyXG5cdFx0dGhpcy5jWzJdID0gdGhpcy5kb20oXHJcblx0XHRcdFwiZGl2XCIsXHJcblx0XHRcdHRoaXMuY3NzLmJhc2ljICsgXCJsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBoZWlnaHQ6MTAwJTtcIlxyXG5cdFx0KTtcclxuXHRcdHRoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHJcblx0XHQvLyBTaSBlbCB2YWxvciBpbmljaWFsIHlhIGFwdW50YSBhIHVuYSBob2phIHbDoWxpZGEsIHJlY29yZGFyIGVzYSBob2phXHJcblx0XHR0aGlzLl9tYXliZVVwZGF0ZUxhc3RMZWFmRnJvbVZhbHVlKCk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IEhlbHBlcnMgZGUgdGlwbyA9PT09PT09XHJcblx0c3RhdGljIGlzTWFwKG5vZGUpIHtcclxuXHRcdHJldHVybiBub2RlICYmIHR5cGVvZiBub2RlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG5vZGUpO1xyXG5cdH1cclxuXHRzdGF0aWMgaXNMaXN0KG5vZGUpIHtcclxuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KG5vZGUpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBSZWNvcnJpZG8gZGUgZGF0b3MgPT09PT09PVxyXG5cdGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG5cdFx0bGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcblx0XHRcdFx0aWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpXHJcblx0XHRcdFx0XHRyZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG5cdFx0XHRcdG5vZGUgPSBub2RlW3BhdGhbaV1dO1xyXG5cdFx0XHR9IGVsc2UgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkge1xyXG5cdFx0XHRcdC8vIExsZWdhbW9zIGEgdW5hIGxpc3RhOiB5YSBubyBoYXkgbcOhcyBjbGF2ZXMgdsOhbGlkYXNcclxuXHRcdFx0XHRpZiAoaSA8IHBhdGgubGVuZ3RoKSByZXR1cm4geyBub2RlLCBkZXB0aDogaSB9O1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB7IG5vZGUsIGRlcHRoOiBwYXRoLmxlbmd0aCB9O1xyXG5cdH1cclxuXHJcblx0Ly8gQXV0b2NvbXBsZXRhcjogYmFqYSBwb3IgcHJpbWVyYXMgY2xhdmVzIGRlIGNhZGEgbWFwYSBoYXN0YSBhbGNhbnphciB1bmEgbGlzdGFcclxuXHRhdXRvQ29tcGxldGVUb0xlYWYoYmFzZVBhdGgpIHtcclxuXHRcdGxldCB7IG5vZGUgfSA9IHRoaXMuZ2V0Tm9kZUF0UGF0aChiYXNlUGF0aCk7XHJcblx0XHRjb25zdCBwYXRoID0gYmFzZVBhdGguc2xpY2UoKTtcclxuXHRcdHdoaWxlIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcblx0XHRcdGlmICgha2V5cy5sZW5ndGgpIGJyZWFrO1xyXG5cdFx0XHRjb25zdCBrMCA9IGtleXNbMF07XHJcblx0XHRcdHBhdGgucHVzaChrMCk7XHJcblx0XHRcdG5vZGUgPSBub2RlW2swXTtcclxuXHRcdH1cclxuXHRcdC8vIFNpIHRlcm1pbmEgZW4gbGlzdGEsIE5PIGFncmVnYSB1biDDrXRlbSBmaW5hbCBkZSBsYSBob2phXHJcblx0XHRyZXR1cm4gcGF0aDtcclxuXHR9XHJcblxyXG5cdC8vIFJ1dGEgYWN0aXZhIChmb2N1c1BhdGggc2kgZm9jdXNlZCwgc2lubyB2YWx1ZSlcclxuXHRnZXRBY3RpdmVQYXRoKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZm9jdXNlZCA/IHRoaXMuZm9jdXNQYXRoIDogdGhpcy52YWx1ZTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gVGFtYcOxbyBkZSBob2phIG3DoXhpbW8gKHBhcmEgbGF5b3V0IGVzdGFibGUpID09PT09PT1cclxuXHRjb21wdXRlTGVhZk1heChub2RlID0gdGhpcy50cmVlKSB7XHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheShub2RlKSkgcmV0dXJuIG5vZGUubGVuZ3RoO1xyXG5cdFx0aWYgKCFub2RlIHx8IHR5cGVvZiBub2RlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gMDtcclxuXHRcdGxldCBtID0gMDtcclxuXHRcdGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG5cdFx0XHRtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PVxyXG5cdGJ1aWxkTGV2ZWxzKCkge1xyXG5cdFx0dGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuXHRcdGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcblx0XHRsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuXHRcdGxldCBsZXZlbCA9IDA7XHJcblxyXG5cdFx0d2hpbGUgKG5vZGUpIHtcclxuXHRcdFx0aWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcblx0XHRcdFx0Ly8gTml2ZWwgaW50ZXJtZWRpbzogY2xhdmVzIGRlbCBtYXBhIChob3Jpem9udGFsKVxyXG5cdFx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuXHRcdFx0XHRpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuXHRcdFx0XHR0aGlzLmxldmVscy5wdXNoKHtcclxuXHRcdFx0XHRcdHR5cGU6IFwibWFwXCIsXHJcblx0XHRcdFx0XHRpdGVtczoga2V5cy5tYXAoKGspID0+ICh7XHJcblx0XHRcdFx0XHRcdGtleTogayxcclxuXHRcdFx0XHRcdFx0bGFiZWw6IGssXHJcblx0XHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCB9LFxyXG5cdFx0XHRcdFx0fSkpLFxyXG5cdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiB0aGlzLmxpbmVIIH0sXHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IG5leHRLZXkgPSBhY3RpdmVQYXRoW2xldmVsXTtcclxuXHRcdFx0XHRpZiAoIW5leHRLZXkgfHwgIW5vZGUuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIGJyZWFrO1xyXG5cdFx0XHRcdG5vZGUgPSBub2RlW25leHRLZXldO1xyXG5cdFx0XHR9IGVsc2UgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkge1xyXG5cdFx0XHRcdC8vIE5pdmVsIGhvamE6IGxpc3RhIHZlcnRpY2FsXHJcblx0XHRcdFx0Y29uc3QgaXRlbXMgPSBub2RlLm1hcCgobGFiZWwpID0+ICh7XHJcblx0XHRcdFx0XHRrZXk6IGxhYmVsLFxyXG5cdFx0XHRcdFx0bGFiZWwsXHJcblx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAgfSxcclxuXHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0Y29uc3QgaExpc3QgPSBNYXRoLm1heChpdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCkgKiB0aGlzLmxpbmVIO1xyXG5cdFx0XHRcdHRoaXMubGV2ZWxzLnB1c2goe1xyXG5cdFx0XHRcdFx0dHlwZTogXCJsaXN0XCIsXHJcblx0XHRcdFx0XHRpdGVtcyxcclxuXHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogaExpc3QgfSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0XHRsZXZlbCsrO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBMYXlvdXQgKHpvbmFzICYgRE9NKSA9PT09PT09XHJcblx0bGF5b3V0TGV2ZWxzKCkge1xyXG5cdFx0Y29uc3QgY29udGVudFggPSAodGhpcy5zYSB8fCAxMDApICsgODsgLy8gY29sdW1uYSBkZSBsYWJlbCArIHBhZGRpbmdcclxuXHRcdGNvbnN0IHBhZFJpZ2h0ID0gODtcclxuXHRcdGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIGNvbnRlbnRYIC0gcGFkUmlnaHQ7XHJcblxyXG5cdFx0bGV0IHkgPSAwO1xyXG5cclxuXHRcdC8vIEFqdXN0YXIgaXRlbXNEb20gYSBjYW50aWRhZCBkZSBuaXZlbGVzXHJcblx0XHR3aGlsZSAodGhpcy5pdGVtc0RvbS5sZW5ndGggPCB0aGlzLmxldmVscy5sZW5ndGgpXHJcblx0XHRcdHRoaXMuaXRlbXNEb20ucHVzaChbXSk7XHJcblx0XHRmb3IgKGxldCBMID0gdGhpcy5sZXZlbHMubGVuZ3RoOyBMIDwgdGhpcy5pdGVtc0RvbS5sZW5ndGg7IEwrKykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHRoaXMuaXRlbXNEb21bTF0pXHJcblx0XHRcdFx0aWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5pdGVtc0RvbS5sZW5ndGggPSB0aGlzLmxldmVscy5sZW5ndGg7XHJcblxyXG5cdFx0Zm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG5cdFx0XHRjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuXHRcdFx0aWYgKGx2bC50eXBlID09PSBcIm1hcFwiKSB7XHJcblx0XHRcdFx0Y29uc3QgbiA9IE1hdGgubWF4KDEsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG5cdFx0XHRcdGNvbnN0IGNlbGxXID0gTWF0aC5mbG9vcih3IC8gbik7XHJcblx0XHRcdFx0bHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiB0aGlzLmxpbmVIIH07XHJcblx0XHRcdFx0bGV0IHggPSBjb250ZW50WDtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcblx0XHRcdFx0XHRpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5saW5lSCB9O1xyXG5cdFx0XHRcdFx0Y29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG5cdFx0XHRcdFx0dGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgXCJtYXBcIik7XHJcblx0XHRcdFx0XHR4ICs9IGNlbGxXO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgY2VsZGFzXHJcblx0XHRcdFx0dGhpcy5fcHJ1bmVSb3coTCwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcblx0XHRcdFx0eSArPSB0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcDtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBsaXN0YS9ob2phOiByZXNlcnZhciBoIHNlZ8O6biBsZWFmTWF4XHJcblx0XHRcdFx0Y29uc3QgbiA9IGx2bC5pdGVtcy5sZW5ndGg7XHJcblx0XHRcdFx0Y29uc3QgaExpc3QgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuXHRcdFx0XHRsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IGhMaXN0IH07XHJcblxyXG5cdFx0XHRcdGNvbnN0IHJvd3MgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpc1JlYWwgPSBpIDwgbjtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ID0gaXNSZWFsXHJcblx0XHRcdFx0XHRcdD8gbHZsLml0ZW1zW2ldXHJcblx0XHRcdFx0XHRcdDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OiBudWxsLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAgfSxcclxuXHRcdFx0XHRcdFx0ICB9O1xyXG5cdFx0XHRcdFx0aXQuem9uZSA9IHtcclxuXHRcdFx0XHRcdFx0eDogY29udGVudFgsXHJcblx0XHRcdFx0XHRcdHk6IHkgKyBpICogdGhpcy5saW5lSCxcclxuXHRcdFx0XHRcdFx0dyxcclxuXHRcdFx0XHRcdFx0aDogdGhpcy5saW5lSCxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcblx0XHRcdFx0XHR0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCBcImxpc3RcIiwgaXNSZWFsKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGZpbGFzXHJcblx0XHRcdFx0dGhpcy5fcHJ1bmVSb3coTCwgcm93cyk7XHJcblx0XHRcdFx0eSArPSBoTGlzdDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFqdXN0ZXMgZGUgYWx0byBpbnRlcm5vIGRlbCBjb250ZW5lZG9yIHZpc3VhbFxyXG5cdFx0Y29uc3QgdG90YWxIID0geTtcclxuXHRcdHRoaXMuem9uZS5oID0gdG90YWxIICsgdGhpcy5tYXJnaW47XHJcblx0XHR0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy56b25lLmggKyBcInB4XCI7XHJcblx0XHR0aGlzLnNbMl0uaGVpZ2h0ID0gdG90YWxIICsgXCJweFwiO1xyXG5cclxuXHRcdC8vIFB1YmxpY2FyIGFsdG8gdG90YWwgYWwgR1VJIChzdW1hcsOhIHUuaClcclxuXHRcdHRoaXMuX3B1Ymxpc2hIZWlnaHQoKTtcclxuXHR9XHJcblxyXG5cdC8vIEVsaW1pbmEgbm9kb3MgRE9NIHNvYnJhbnRlcyBlbiBsYSBmaWxhIEwgYSBwYXJ0aXIgZGVsIMOtbmRpY2Uga2VlcFxyXG5cdF9wcnVuZVJvdyhMLCBrZWVwKSB7XHJcblx0XHRjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG5cdFx0aWYgKCFyb3cpIHJldHVybjtcclxuXHRcdGZvciAobGV0IGogPSBrZWVwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdGNvbnN0IGVsID0gcm93W2pdO1xyXG5cdFx0XHRpZiAoZWwgJiYgZWwucGFyZW50Tm9kZSkgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XHJcblx0XHR9XHJcblx0XHRyb3cubGVuZ3RoID0ga2VlcDtcclxuXHR9XHJcblxyXG5cdGVuc3VyZUl0ZW1Eb20oTCwgaSkge1xyXG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuXHRcdHdoaWxlIChyb3cubGVuZ3RoIDw9IGkpIHJvdy5wdXNoKG51bGwpO1xyXG5cdFx0aWYgKCFyb3dbaV0pIHtcclxuXHRcdFx0Y29uc3QgZGl2ID0gdGhpcy5kb20oXHJcblx0XHRcdFx0XCJkaXZcIixcclxuXHRcdFx0XHRUb29scy5jc3MudHh0ICsgXCJwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTtcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHR0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoZGl2KTtcclxuXHRcdFx0cm93W2ldID0gZGl2O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJvd1tpXTtcclxuXHR9XHJcblxyXG5cdHBhaW50SXRlbURvbShkaXYsIEwsIGksIGl0LCBraW5kLCBpc1JlYWwgPSB0cnVlKSB7XHJcblx0XHRjb25zdCBzID0gZGl2LnN0eWxlO1xyXG5cdFx0Y29uc3QgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcblx0XHQvLyBQb3NpY2nDs25cclxuXHRcdHMubGVmdCA9IGl0LnpvbmUueCArIFwicHhcIjtcclxuXHRcdHMudG9wID0gaXQuem9uZS55ICsgXCJweFwiO1xyXG5cdFx0cy53aWR0aCA9IGl0LnpvbmUudyArIFwicHhcIjtcclxuXHRcdHMuaGVpZ2h0ID0gaXQuem9uZS5oIC0gMiArIFwicHhcIjtcclxuXHJcblx0XHQvLyBUZXh0b1xyXG5cdFx0ZGl2LnRleHRDb250ZW50ID0gaXNSZWFsID8gaXQubGFiZWwgOiBcIlwiO1xyXG5cclxuXHRcdC8vIEVzdGFkb3NcclxuXHRcdGNvbnN0IHNlbGVjdGVkID1cclxuXHRcdFx0aXNSZWFsICYmIHRoaXMudmFsdWVbTF0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLnZhbHVlW0xdID09PSBpdC5rZXk7XHJcblx0XHRjb25zdCBpbkZvY3VzTHZsID0gdGhpcy5mb2N1c2VkICYmIHRoaXMuZm9jdXNMZXZlbCA9PT0gTDtcclxuXHRcdGNvbnN0IGZvY3VzTWF0Y2ggPSBpc1JlYWwgJiYgaW5Gb2N1c0x2bCAmJiB0aGlzLmZvY3VzUGF0aFtMXSA9PT0gaXQua2V5O1xyXG5cdFx0Y29uc3QgaXNIb3ZlciA9XHJcblx0XHRcdHRoaXMuZW5hYmxlSG92ZXIgJiZcclxuXHRcdFx0aXNSZWFsICYmXHJcblx0XHRcdHRoaXMuaG92ZXIubGV2ZWwgPT09IEwgJiZcclxuXHRcdFx0dGhpcy5ob3Zlci5pbmRleCA9PT0gaTtcclxuXHJcblx0XHQvLyDwn5S4IE5VRVZPOiDCv2VzdGEgZmlsYSBlcyBsYSDDumx0aW1hIGhvamEgc2VsZWNjaW9uYWRhP1xyXG5cdFx0bGV0IGlzTGFzdExlYWYgPSBmYWxzZTtcclxuXHRcdGlmIChpc1JlYWwgJiYga2luZCA9PT0gXCJsaXN0XCIgJiYgdGhpcy5sYXN0TGVhZi5rZXkgIT0gbnVsbCkge1xyXG5cdFx0XHQvLyBMYSBob2phIHZpc2libGUgY29ycmVzcG9uZGUgc2kgZWwgcGFkcmUgZGUgZXN0YSBsaXN0YSBjb2luY2lkZSBjb24gcGFyZW50UGF0aCBndWFyZGFkb1xyXG5cdFx0XHQvLyBFbCBwYWRyZSBhY3R1YWwgZXMgdGhpcy52YWx1ZS5zbGljZSgwLCBMKSBjdWFuZG8gbGEgbGlzdGEgZXN0w6EgZGVzcGxlZ2FkYSBwb3IgdmFsdWUvZm9jdXNcclxuXHRcdFx0Y29uc3QgcGFyZW50Tm93ID0gdGhpcy5nZXRBY3RpdmVQYXRoKCkuc2xpY2UoMCwgTCk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLl9wYXRoc0VxdWFsKHBhcmVudE5vdywgdGhpcy5sYXN0TGVhZi5wYXJlbnRQYXRoKSAmJlxyXG5cdFx0XHRcdGl0LmtleSA9PT0gdGhpcy5sYXN0TGVhZi5rZXlcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0aXNMYXN0TGVhZiA9IHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBFc3RpbG9zIGJhc2VcclxuXHRcdHMuYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcblx0XHRzLmNvbG9yID0gY2MudGV4dDtcclxuXHRcdHMuYm9yZGVyID0gXCIxcHggc29saWQgXCIgKyBjYy5ib3JkZXI7XHJcblx0XHRzLnRleHRBbGlnbiA9IGtpbmQgPT09IFwibWFwXCIgPyBcImNlbnRlclwiIDogXCJsZWZ0XCI7XHJcblxyXG5cdFx0Ly8gUHJpb3JpZGFkIHZpc3VhbDpcclxuXHRcdC8vIDEpIHNlbGVjY2lvbmFkbyAoYXp1bClcclxuXHRcdC8vIDIpIMO6bHRpbWEgaG9qYSAobnVldm8gY29sb3IpXHJcblx0XHQvLyAzKSBmb2NvXHJcblx0XHQvLyA0KSBob3ZlclxyXG5cdFx0aWYgKHNlbGVjdGVkKSB7XHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcblx0XHR9IGVsc2UgaWYgKGlzTGFzdExlYWYpIHtcclxuXHRcdFx0Ly8gY29sb3IgZGlzdGludGl2byBwYXJhIFwiw7psdGltYSBob2phXCIgKGFtYXJpbGxvIHN1YXZlKVxyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBcInJnYmEoMjU1LCAyMDAsIDAsIDAuMjUpXCI7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0O1xyXG5cdFx0fSBlbHNlIGlmIChmb2N1c01hdGNoKSB7XHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcblx0XHR9IGVsc2UgaWYgKGlzSG92ZXIpIHtcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEZpbGFzIGRlIHBhZGRpbmcgaW52aXNpYmxlcyBlbiBob2phXHJcblx0XHRzLm9wYWNpdHkgPSBpc1JlYWwgPyBcIjFcIiA6IFwiMFwiO1xyXG5cdH1cclxuXHJcblx0X3BhdGhzRXF1YWwoYSwgYikge1xyXG5cdFx0aWYgKCFhIHx8ICFiIHx8IGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IENpY2xvIGRlIHZpZGEgPT09PT09PVxyXG5cdHJTaXplKCkge1xyXG5cdFx0dGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG5cdFx0dGhpcy5idWlsZExldmVscygpO1xyXG5cdFx0dGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZSgpIHtcclxuXHRcdHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuXHRcdHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IEludGVyYWNjacOzbiA9PT09PT09XHJcblx0X3RvTG9jYWwoZSkge1xyXG5cdFx0Y29uc3QgbXggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuXHRcdGNvbnN0IG15ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnk7XHJcblx0XHRyZXR1cm4geyB4OiBteCwgeTogbXkgfTtcclxuXHR9XHJcblxyXG5cdF9oaXRUZXN0KG14LCBteSkge1xyXG5cdFx0Zm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG5cdFx0XHRjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuXHRcdFx0Y29uc3QgeiA9IGx2bC56b25lOyAvLyB4IHkgdyB5YSBpbmNsdXllbiBjb250ZW50WFxyXG5cclxuXHRcdFx0aWYgKG14IDwgei54IHx8IG15IDwgei55IHx8IG14ID4gei54ICsgei53IHx8IG15ID4gei55ICsgei5oKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKGx2bC50eXBlID09PSBcIm1hcFwiKSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0eiA9IGx2bC5pdGVtc1tpXS56b25lO1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRteCA+PSBpdHoueCAmJlxyXG5cdFx0XHRcdFx0XHRteSA+PSBpdHoueSAmJlxyXG5cdFx0XHRcdFx0XHRteCA8PSBpdHoueCArIGl0ei53ICYmXHJcblx0XHRcdFx0XHRcdG15IDw9IGl0ei55ICsgaXR6LmhcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4geyBMLCBpLCByZWFsOiB0cnVlIH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbnN0IG5Sb3dzID0gTWF0aC5tYXgobHZsLml0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGlzUmVhbCA9IGkgPCBsdmwuaXRlbXMubGVuZ3RoO1xyXG5cdFx0XHRcdFx0Y29uc3QgaXR6ID0gaXNSZWFsXHJcblx0XHRcdFx0XHRcdD8gbHZsLml0ZW1zW2ldLnpvbmVcclxuXHRcdFx0XHRcdFx0OiB7XHJcblx0XHRcdFx0XHRcdFx0XHR4OiB6LngsXHJcblx0XHRcdFx0XHRcdFx0XHR5OiB6LnkgKyBpICogdGhpcy5saW5lSCxcclxuXHRcdFx0XHRcdFx0XHRcdHc6IHoudyxcclxuXHRcdFx0XHRcdFx0XHRcdGg6IHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdCAgfTtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0bXggPj0gaXR6LnggJiZcclxuXHRcdFx0XHRcdFx0bXkgPj0gaXR6LnkgJiZcclxuXHRcdFx0XHRcdFx0bXggPD0gaXR6LnggKyBpdHoudyAmJlxyXG5cdFx0XHRcdFx0XHRteSA8PSBpdHoueSArIGl0ei5oXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcblx0fVxyXG5cclxuXHRoYW5kbGVFdmVudChlKSB7XHJcblx0XHRpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0aWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xyXG5cdFx0XHQvLyBTaSBlbCBob3ZlciBlc3TDoSBkZXNhY3RpdmFkbywgbm8gaGF5IHRyYWJham8gcXVlIGhhY2VyLlxyXG5cdFx0XHRpZiAoIXRoaXMuZW5hYmxlSG92ZXIpIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fdG9Mb2NhbChlKTtcclxuXHRcdFx0Y29uc3QgaHQgPSB0aGlzLl9oaXRUZXN0KHgsIHkpO1xyXG5cclxuXHRcdFx0Ly8gbnVldm8gaG92ZXIgY2FsY3VsYWRvXHJcblx0XHRcdGNvbnN0IG5ld0hvdmVyID1cclxuXHRcdFx0XHRodC5MICE9PSAtMSAmJiBodC5yZWFsXHJcblx0XHRcdFx0XHQ/IHsgbGV2ZWw6IGh0LkwsIGluZGV4OiBodC5pIH1cclxuXHRcdFx0XHRcdDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG5cdFx0XHQvLyBzb2xvIHJlcGludGFyIHNpIGNhbWJpYSByZWFsbWVudGUgZWwgaG92ZXJcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdG5ld0hvdmVyLmxldmVsID09PSB0aGlzLmhvdmVyLmxldmVsICYmXHJcblx0XHRcdFx0bmV3SG92ZXIuaW5kZXggPT09IHRoaXMuaG92ZXIuaW5kZXhcclxuXHRcdFx0KVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0dGhpcy5ob3ZlciA9IG5ld0hvdmVyO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcblx0XHRcdGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fdG9Mb2NhbChlKTtcclxuXHRcdFx0Y29uc3QgaHQgPSB0aGlzLl9oaXRUZXN0KHgsIHkpO1xyXG5cdFx0XHRpZiAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkge1xyXG5cdFx0XHRcdHRoaXMuX3NlbGVjdEF0KGh0LkwsIGh0LmkpO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlOyAvLyBzb2xvIHRydWUgc2kgcmVhbG1lbnRlIHNlIHNlbGVjY2lvbsOzIGFsZ29cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGUudHlwZSA9PT0gXCJtb3VzZXVwXCIpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIFNlbGVjY2nDs24gKyBhdXRvY29tcGxldGFkbyArIG5vdGlmaWNhY2nDs25cclxuXHRfc2VsZWN0QXQoTCwgaSkge1xyXG5cdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRjb25zdCBjaG9zZW4gPSBsdmwuaXRlbXNbaV07XHJcblx0XHRpZiAoIWNob3NlbiB8fCAhY2hvc2VuLmtleSkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IGJhc2UgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpO1xyXG5cdFx0YmFzZVtMXSA9IGNob3Nlbi5rZXk7XHJcblxyXG5cdFx0Y29uc3QgbmV3UGF0aCA9IHRoaXMuYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2UpO1xyXG5cclxuXHRcdC8vIPCflLggU2kgZWwgdXN1YXJpbyBzZWxlY2Npb25hIGV4cGzDrWNpdGFtZW50ZSBlbiBlbCBuaXZlbCBob2phLCByZWNvcmRhcmxvXHJcblx0XHRpZiAobHZsLnR5cGUgPT09IFwibGlzdFwiKSB7XHJcblx0XHRcdHRoaXMubGFzdExlYWYucGFyZW50UGF0aCA9IHRoaXMudmFsdWUuc2xpY2UoMCwgTCk7IC8vIHBhZHJlIGRlIGxhIGxpc3RhIGFjdHVhbFxyXG5cdFx0XHR0aGlzLmxhc3RMZWFmLmtleSA9IGNob3Nlbi5rZXk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy52YWx1ZSA9IG5ld1BhdGguc2xpY2UoKTtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdFx0Ly8gc2kgZXN0w6EgcmVmZXJlbmNpYWRvLCBwcm9wYWdhIGEgb2JqZXRvIGV4dGVybm9cclxuXHRcdHRoaXMuc2VuZChuZXdQYXRoKTtcclxuXHRcdHRoaXMuY2hhbmdlQ2IodGhpcy50YWJJbmRleCwgdGhpcy5pdGVtSW5kZXgsIG5ld1BhdGgpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBBUEkgcMO6YmxpY2EgPT09PT09PVxyXG5cdHNldFZhbHVlKHBhdGgpIHtcclxuXHRcdHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5zbGljZSgpIDogW107XHJcblx0XHQvLyBTaSBkZXNkZSBhZnVlcmEgbm9zIHNldGVhbiB1bmEgaG9qYSB2w6FsaWRhLCB0YW1iacOpbiBsYSByZWNvcmRhbW9zXHJcblx0XHR0aGlzLl9tYXliZVVwZGF0ZUxhc3RMZWFmRnJvbVZhbHVlKCk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0c2V0VHJlZSh0cmVlKSB7XHJcblx0XHR0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG5cdFx0dGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuXHRcdGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gXCJib29sZWFuXCIpIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheShmb2N1c1BhdGgpKSB0aGlzLmZvY3VzUGF0aCA9IGZvY3VzUGF0aC5zbGljZSgpO1xyXG5cdFx0aWYgKHR5cGVvZiBmb2N1c0xldmVsID09PSBcIm51bWJlclwiKSB0aGlzLmZvY3VzTGV2ZWwgPSBmb2N1c0xldmVsO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdF9tYXliZVVwZGF0ZUxhc3RMZWFmRnJvbVZhbHVlKCkge1xyXG5cdFx0Ly8gU2kgdmFsdWUgYXB1bnRhIGEgcGFkcmUraG9qYSAo4oCmLFtsZWFmXSkgeSBlcyB2w6FsaWRhLCByZWNvcmRhciBlc2EgaG9qYVxyXG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpIHx8IHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMudmFsdWUubGVuZ3RoIC0gMSk7XHJcblx0XHRjb25zdCBsZWFmID0gdGhpcy52YWx1ZVt0aGlzLnZhbHVlLmxlbmd0aCAtIDFdO1xyXG5cdFx0Y29uc3QgaW5mbyA9IHRoaXMuZ2V0Tm9kZUF0UGF0aChwYXJlbnQpO1xyXG5cdFx0aWYgKGluZm8gJiYgQXJyYXkuaXNBcnJheShpbmZvLm5vZGUpICYmIGluZm8ubm9kZS5pbmNsdWRlcyhsZWFmKSkge1xyXG5cdFx0XHR0aGlzLmxhc3RMZWFmID0geyBwYXJlbnRQYXRoOiBwYXJlbnQsIGtleTogbGVhZiB9O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBQdWJsaWNhY2nDs24gZGUgYWx0dXJhID09PT09PT1cclxuXHRfY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpIHtcclxuXHRcdGxldCBjID0gMDtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBpKyspXHJcblx0XHRcdGlmICh0aGlzLmxldmVsc1tpXS50eXBlID09PSBcIm1hcFwiKSBjKys7XHJcblx0XHRyZXR1cm4gYztcclxuXHR9XHJcblxyXG5cdF9nZXRDdXJyZW50TGVhZkxlbmd0aCgpIHtcclxuXHRcdGNvbnN0IGxhc3QgPSB0aGlzLmxldmVsc1t0aGlzLmxldmVscy5sZW5ndGggLSAxXTtcclxuXHRcdHJldHVybiBsYXN0ICYmIGxhc3QudHlwZSA9PT0gXCJsaXN0XCIgPyBsYXN0Lml0ZW1zLmxlbmd0aCA6IDA7XHJcblx0fVxyXG5cclxuXHRfcHVibGlzaEhlaWdodCgpIHtcclxuXHRcdGNvbnN0IGludGVyID0gdGhpcy5fY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpO1xyXG5cdFx0Y29uc3QgbGVhZkxlbiA9IE1hdGgubWF4KHRoaXMubGVhZk1heCwgdGhpcy5fZ2V0Q3VycmVudExlYWZMZW5ndGgoKSk7XHJcblx0XHRjb25zdCBsZWFmSCA9IGxlYWZMZW4gKiB0aGlzLmxpbmVIO1xyXG5cdFx0Y29uc3QgaW50ZXJIID0gaW50ZXIgKiAodGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXApO1xyXG5cdFx0Y29uc3QgdG90YWxIID0gaW50ZXIgPyBpbnRlckggKyB0aGlzLmxldmVsR2FwICsgbGVhZkggOiBsZWFmSDtcclxuXHJcblx0XHQvLyBOb3JtYWxpemFtb3MgYSBweCBlbnRlcm9zIHBhcmEgZXZpdGFyIGppdHRlciBwb3IgcmVkb25kZW9cclxuXHRcdGNvbnN0IG5ld0ggPSBNYXRoLmZsb29yKHRvdGFsSCk7XHJcblxyXG5cdFx0Ly8gQWN0dWFsaXphbW9zIG3DqXRyaWNhcyBsb2NhbGVzIHNpZW1wcmVcclxuXHRcdHRoaXMuaCA9IG5ld0g7XHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMubWFyZ2luO1xyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArIFwicHhcIjtcclxuXHJcblx0XHQvLyBTb2xvIGF2aXNhbW9zIGFsIEdVSSBzaSBsYSBhbHR1cmEgY2FtYmnDs1xyXG5cdFx0aWYgKG5ld0ggIT09IHRoaXMuX2xhc3RQdWJsaXNoZWRIKSB7XHJcblx0XHRcdHRoaXMuX2xhc3RQdWJsaXNoZWRIID0gbmV3SDtcclxuXHRcdFx0Um9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcblx0XHRcdGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYWluKSB0aGlzLm1haW4uY2FsYygpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIGNvbnNvbGUud2FybihcIkd1aS50cmlnZ2VyTW91c2VEb3duIGlzIGRlcHJlY2F0ZWQsIHVzZSB0cmlnZ2VyTW91c2VEb3duVVYgaW5zdGVhZFwiKTtcclxuICAgIC8qXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcmRvd25cIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7Ki9cclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJHdWkudHJpZ2dlck1vdXNlTW92ZSBpcyBkZXByZWNhdGVkLCB1c2UgdHJpZ2dlck1vdXNlTW92ZVVWIGluc3RlYWRcIik7XHJcbiAgICAvKlxyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJtb3ZlXCIsXHJcbiAgICAgIGNsaWVudFg6IC0xLFxyXG4gICAgICBjbGllbnRZOiAtMSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7Ki9cclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuXHJcbiAgICBjb25zb2xlLndhcm4oXCJHdWkudHJpZ2dlck1vdXNlVXAgaXMgZGVwcmVjYXRlZCwgdXNlIHRyaWdnZXJNb3VzZVVwVVYgaW5zdGVhZFwiKTtcclxuICAgIC8qXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcnVwXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pOyovXHJcbiAgfVxyXG5cclxuICAvLyBHdWkuanNcclxuICB0cmlnZ2VyTW91c2VEb3duVVYodSwgdiwgeyBmbGlwWSA9IHRydWUgfSA9IHt9KSB7XHJcbiAgICAvLyB1LCB2IGVuIFswLDFdIHJlbGF0aXZvcyBhbCByZWN0IGRlbCBHVUlcclxuICAgIGNvbnN0IHggPSB0aGlzLnpvbmUueCArIE1hdGgucm91bmQodSAqIHRoaXMuem9uZS53KTtcclxuICAgIGNvbnN0IHkgPSB0aGlzLnpvbmUueSArIE1hdGgucm91bmQoKGZsaXBZID8gMSAtIHYgOiB2KSAqIHRoaXMuem9uZS5oKTtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiBpc05hTih4KSA/IG51bGwgOiB4LFxyXG4gICAgICBjbGllbnRZOiBpc05hTih5KSA/IG51bGwgOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwVVYodSwgdiwgeyBmbGlwWSA9IHRydWUgfSA9IHt9KSB7XHJcbiAgICBjb25zdCB4ID0gdGhpcy56b25lLnggKyBNYXRoLnJvdW5kKHUgKiB0aGlzLnpvbmUudyk7XHJcbiAgICBjb25zdCB5ID0gdGhpcy56b25lLnkgKyBNYXRoLnJvdW5kKChmbGlwWSA/IDEgLSB2IDogdikgKiB0aGlzLnpvbmUuaCk7XHJcbiAgICBcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogaXNOYU4oeCkgPyBudWxsIDogeCxcclxuICAgICAgY2xpZW50WTogaXNOYU4oeSkgPyBudWxsIDogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VNb3ZlVVYodSwgdiwgeyBmbGlwWSA9IHRydWUgfSA9IHt9KSB7XHJcbiAgICBjb25zdCB4ID0gdGhpcy56b25lLnggKyBNYXRoLnJvdW5kKHUgKiB0aGlzLnpvbmUudyk7XHJcbiAgICBjb25zdCB5ID0gdGhpcy56b25lLnkgKyBNYXRoLnJvdW5kKChmbGlwWSA/IDEgLSB2IDogdikgKiB0aGlzLnpvbmUuaCk7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogaXNOYU4oeCkgPyBudWxsIDogeCxcclxuICAgICAgY2xpZW50WTogaXNOYU4oeSkgPyBudWxsIDogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiICsgdXYueCArIFwiIFwiICsgdXYueSk7XHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcobykge1xyXG4gICAgLy8gcmVzZXQgdG8gZGVmYXVsdCB0ZXh0XHJcbiAgICBUb29scy5zZXRUZXh0KCk7XHJcbiAgICB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29sb3JzKG8pIHtcclxuICAgIGZvciAobGV0IGMgaW4gbykge1xyXG4gICAgICBpZiAodGhpcy5jb2xvcnNbY10pIHRoaXMuY29sb3JzW2NdID0gb1tjXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdykge1xyXG4gICAgVG9vbHMuc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KTtcclxuICB9XHJcblxyXG4gIGhpZGUoYikge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSBiID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheSh2ID0gZmFsc2UpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gdiA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIjtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKGYpIHtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBmIHx8IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNUWUxFU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW9kZShuKSB7XHJcbiAgICBsZXQgbmVlZENoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgaWYgKG4gIT09IHRoaXMuY24pIHtcclxuICAgICAgdGhpcy5jbiA9IG47XHJcblxyXG4gICAgICBzd2l0Y2ggKG4pIHtcclxuICAgICAgICBjYXNlIFwiZGVmXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ3Njcm9sbERlZic6IHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zY3JvbGw7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxPdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJucy1yZXNpemVcIik7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbERvd25cIjpcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdib3R0b21EZWYnOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImJvdHRvbU92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcInBvaW50ZXJcIik7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9jYXNlICdib3R0b21Eb3duJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNlbGVjdDsgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSAnIzAwMCc7IGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuZWVkQ2hhbmdlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmVlZENoYW5nZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFRBUkdFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2xlYXJUYXJnZXQoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50ID09PSAtMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHRoaXMucHJvdG8ucykge1xyXG4gICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuXHJcbiAgICAvLy9jb25zb2xlLmxvZyh0aGlzLmlzRG93bikvL2lmKHRoaXMuaXNEb3duKVJvb3RzLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSb290cy5jdXJzb3IoKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgWk9ORSBURVNUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0ZXN0Wm9uZShlKSB7XHJcbiAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICBpZiAobC54ID09PSAtMSAmJiBsLnkgPT09IC0xKSByZXR1cm4gXCJcIjtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IFwiXCI7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLmlzU2Nyb2xsID8gdGhpcy56b25lLncgLSB0aGlzLnNpemUucyA6IHRoaXMuem9uZS53O1xyXG5cclxuICAgIGlmIChsLnkgPiB0aGlzLnpvbmUuaCAtIHRoaXMuYmggJiYgbC55IDwgdGhpcy56b25lLmgpIG5hbWUgPSBcImJvdHRvbVwiO1xyXG4gICAgZWxzZSBuYW1lID0gbC54ID4gcyA/IFwic2Nyb2xsXCIgOiBcImNvbnRlbnRcIjtcclxuXHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgLy9pZiggdGhpcy5jbGVhbm5pbmcgKSByZXR1cm5cclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwiR3VpLmhhbmRsZUV2ZW50XCIpXHJcbiAgICAvL2NvbnNvbGUubG9nKGUpO1xyXG4gICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IHByb3RvQ2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcIm1vdXNldXBcIiAmJiB0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmICF0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzRG93biAmJiB0aGlzLmlzTmV3VGFyZ2V0KSB7XHJcbiAgICAgIFJvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuO1xyXG5cclxuICAgIHN3aXRjaCAobmFtZSkge1xyXG4gICAgICBjYXNlIFwiY29udGVudFwiOlxyXG4gICAgICAgIGUuY2xpZW50WSA9IHRoaXMuaXNTY3JvbGwgPyBlLmNsaWVudFkgKyB0aGlzLmRlY2FsIDogZS5jbGllbnRZO1xyXG5cclxuICAgICAgICBpZiAoUm9vdHMuaXNNb2JpbGUgJiYgdHlwZSA9PT0gXCJtb3VzZWRvd25cIikgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByb3RvKSBwcm90b0NoYW5nZSA9IHRoaXMucHJvdG8uaGFuZGxlRXZlbnQoZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIiAmJiAhcHJvdG9DaGFuZ2UgJiYgdGhpcy5pc1Njcm9sbClcclxuICAgICAgICAgIGNoYW5nZSA9IHRoaXMub25XaGVlbChlKTtcclxuXHJcbiAgICAgICAgaWYgKCFSb290cy5sb2NrKSB7XHJcbiAgICAgICAgICB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJib3R0b21PdmVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRoaXMuaXNPcGVuID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICAgICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICAgICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgICAgICAgIC8vdGhpcy5zZXRIZWlnaHQoKTtcclxuICAgICAgICAgIHRoaXMuY2FsYygpO1xyXG4gICAgICAgICAgdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwic2Nyb2xsXCI6XHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJzY3JvbGxPdmVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJzY3JvbGxEb3duXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIpIGNoYW5nZSA9IHRoaXMub25XaGVlbChlKTtcclxuICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMudXBkYXRlKGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy5zaCAqIDAuNSk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmIChwcm90b0NoYW5nZSkgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXl1cFwiKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmIChjaGFuZ2UpIHRoaXMuZHJhdygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV4dChlLCBjaGFuZ2UpIHtcclxuICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCh0aGlzLnVpcywgZSk7XHJcblxyXG4gICAgaWYgKG5leHQgIT09IHRoaXMuY3VycmVudCkge1xyXG4gICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLnByb3RvID0gdGhpcy51aXNbdGhpcy5jdXJyZW50XTtcclxuICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uV2hlZWwoZSkge1xyXG4gICAgdGhpcy5veSArPSAyMCAqIGUuZGVsdGE7XHJcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLm95KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHJlc2V0KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5pc1Jlc2V0KSByZXR1cm47XHJcblxyXG4gICAgLy90aGlzLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgIC8vUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgbGV0IHIgPSB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICBsZXQgcjIgPSB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcblxyXG4gICAgaWYgKHIgfHwgcjIpIHRoaXMuZHJhdyh0cnVlKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG5cclxuICAgIC8vUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQUREIE5PREVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGFkZCgpIHtcclxuICAgIC8vaWYodGhpcy5jbGVhbm5pbmcpIHRoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICBsZXQgYSA9IGFyZ3VtZW50cztcclxuICAgIGxldCBvbnRvcCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0eXBlb2YgYVsxXSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICBhWzFdLmlzVUkgPSB0cnVlO1xyXG4gICAgICBhWzFdLm1haW4gPSB0aGlzO1xyXG5cclxuICAgICAgb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYVsxXSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBpZiAoYVsyXSA9PT0gdW5kZWZpbmVkKSBbXS5wdXNoLmNhbGwoYSwgeyBpc1VJOiB0cnVlLCBtYWluOiB0aGlzIH0pO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgIGFbMl0ubWFpbiA9IHRoaXM7XHJcbiAgICAgICAgLy9vbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgICAgb250b3AgPSBhWzJdLm9udG9wID8gYVsyXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHUgPSBhZGQuYXBwbHkodGhpcywgYSk7XHJcblxyXG4gICAgaWYgKHUgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBpZiAob250b3ApIHRoaXMudWlzLnVuc2hpZnQodSk7XHJcbiAgICBlbHNlIHRoaXMudWlzLnB1c2godSk7XHJcblxyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgdGhpcy5pc0VtcHR5ID0gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHU7XHJcbiAgfVxyXG5cclxuICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgcmVtb3ZlKG4pIHtcclxuICAgIGlmIChuLmRpc3Bvc2UpIG4uZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2FsbCBhZnRlciB1aXMgY2xlYXJcclxuXHJcbiAgY2xlYXJPbmUobikge1xyXG4gICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZihuKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIHtcclxuICAgICAgLy90aGlzLmNhbGMoIC0gKHRoaXMudWlzWyBpZCBdLmggKyAxICkgKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZCh0aGlzLnVpc1tpZF0uY1swXSk7XHJcbiAgICAgIHRoaXMudWlzLnNwbGljZShpZCwgMSk7XHJcbiAgICAgIHRoaXMuY2FsYygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gY2xlYXIgYWxsIGd1aVxyXG5cclxuICBlbXB0eSgpIHtcclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSB0cnVlXHJcblxyXG4gICAgLy90aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsXHJcbiAgICAgIGl0ZW07XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpdGVtID0gdGhpcy51aXMucG9wKCk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQoaXRlbS5jWzBdKTtcclxuICAgICAgaXRlbS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyKCkge1xyXG4gICAgdGhpcy5lbXB0eSgpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIyKCkge1xyXG4gICAgc2V0VGltZW91dCh0aGlzLmVtcHR5LmJpbmQodGhpcyksIDApO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5jb250ZW50KTtcclxuICAgIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElURU1TIFNQRUNJQUxcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHJlc2V0SXRlbSgpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5zZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbShuYW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIG5hbWUgPSBuYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZSgwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAodGhpcy51aXNbaV0udmFsdWUgPT09IG5hbWUpIHtcclxuICAgICAgICB0aGlzLnVpc1tpXS5zZWxlY3RlZCh0cnVlKTtcclxuICAgICAgICBpZiAodGhpcy5pc1Njcm9sbClcclxuICAgICAgICAgIHRoaXMudXBkYXRlKGkgKiAodGhpcy51aXNbaV0uaCArIHRoaXMubWFyZ2luKSAqIHRoaXMucmF0aW8pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTQ1JPTExcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHVwU2Nyb2xsKGIpIHtcclxuICAgIHRoaXMuc3cgPSBiID8gdGhpcy5zaXplLnMgOiAwO1xyXG4gICAgdGhpcy5veSA9IGIgPyB0aGlzLm95IDogMDtcclxuICAgIHRoaXMuc2Nyb2xsQkcuc3R5bGUuZGlzcGxheSA9IGIgPyBcImJsb2NrXCIgOiBcIm5vbmVcIjtcclxuXHJcbiAgICBpZiAoYikge1xyXG4gICAgICB0aGlzLnRvdGFsID0gdGhpcy5oO1xyXG5cclxuICAgICAgdGhpcy5tYXhWaWV3ID0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLnJhdGlvID0gdGhpcy5tYXhWaWV3IC8gdGhpcy50b3RhbDtcclxuICAgICAgdGhpcy5zaCA9IHRoaXMubWF4VmlldyAqIHRoaXMucmF0aW87XHJcblxyXG4gICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhWaWV3IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgIHRoaXMub3kgPSBUb29scy5jbGFtcCh0aGlzLm95LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICAgIHRoaXMuc2Nyb2xsQkcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhWaWV3ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLnNjcm9sbC5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLm95KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSh5KSB7XHJcbiAgICB5ID0gVG9vbHMuY2xhbXAoeSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgdGhpcy5kZWNhbCA9IE1hdGguZmxvb3IoeSAvIHRoaXMucmF0aW8pO1xyXG4gICAgdGhpcy5pbm5lci5zdHlsZS50b3AgPSAtdGhpcy5kZWNhbCArIFwicHhcIjtcclxuICAgIHRoaXMuc2Nyb2xsLnN0eWxlLnRvcCA9IE1hdGguZmxvb3IoeSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLm95ID0geTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0laRSBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpcygpIHtcclxuICAgIHJldHVybiBSb290cy5jYWxjVWlzKHRoaXMudWlzLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55KTtcclxuICB9XHJcblxyXG4gIGNhbGMoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG4gICAgdGhpcy50bXAgPSBzZXRUaW1lb3V0KHRoaXMuc2V0SGVpZ2h0LmJpbmQodGhpcyksIDEwKTtcclxuICB9XHJcblxyXG4gIHNldEhlaWdodCgpIHtcclxuICAgIGlmICh0aGlzLnRtcCkgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuXHJcbiAgICB0aGlzLnpvbmUuaCA9IHRoaXMuYmg7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHRoaXMuaCA9IHRoaXMuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbGV0IGhoaCA9IHRoaXMuZm9yY2VIZWlnaHRcclxuICAgICAgICA/IHRoaXMuZm9yY2VIZWlnaHQgKyB0aGlzLnpvbmUueVxyXG4gICAgICAgIDogd2luZG93LmlubmVySGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5tYXhIZWlnaHQgPSBoaGggLSB0aGlzLnpvbmUueSAtIHRoaXMuYmg7XHJcblxyXG4gICAgICBsZXQgZGlmZiA9IHRoaXMuaCAtIHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgaWYgKGRpZmYgPiAxKSB7XHJcbiAgICAgICAgdGhpcy5pc1Njcm9sbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLmJoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cFNjcm9sbCh0aGlzLmlzU2Nyb2xsKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCAtIHRoaXMuYmggKyBcInB4XCI7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggKyBcInB4XCI7XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS50b3AgPSB0aGlzLnpvbmUuaCAtIHRoaXMuYmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9yY2VIZWlnaHQgJiYgdGhpcy5sb2NrSGVpZ2h0KVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLmRyYXcodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNldFdpZHRoKHcpIHtcclxuICAgIGlmICh3KSB0aGlzLnpvbmUudyA9IHc7XHJcblxyXG4gICAgdGhpcy56b25lLncgPSBNYXRoLmZsb29yKHRoaXMuem9uZS53KTtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS53aWR0aCA9IHRoaXMuem9uZS53ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDZW50ZXIpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5tYXJnaW5MZWZ0ID0gLU1hdGguZmxvb3IodGhpcy56b25lLncgKiAwLjUpICsgXCJweFwiO1xyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW1XaWR0aCh3KSB7XHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdGhpcy51aXNbaV0uc2V0U2l6ZSh3KTtcclxuICAgICAgdGhpcy51aXNbaV0uclNpemUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztDQUFBO0NBQ0E7Q0FDQTtBQUNBO0FBQ1ksT0FBQyxRQUFRLEdBQUcsUUFBUTtBQUNoQztDQUNBO0FBQ0E7Q0FDQSxNQUFNLENBQUMsR0FBRztDQUNWLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDUjtDQUNBLEVBQUUsR0FBRyxFQUFFLElBQUk7QUFDWDtDQUNBLEVBQUUsRUFBRSxFQUFFLElBQUk7Q0FDVixFQUFFLElBQUksRUFBRSxLQUFLO0NBQ2IsRUFBRSxLQUFLLEVBQUUsS0FBSztDQUNk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QUFDO0NBQ25ELElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqRCxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztDQUNyQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLFlBQVksRUFBRSxZQUFZO0NBQzVCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Q0FDeEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRTtDQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztDQUN0RCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFNBQVMsRUFBRSxVQUFVLElBQUksRUFBRTtDQUM3QixJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7Q0FDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUs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QztDQUNqQixLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztDQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0NBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Q0FDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7Q0FDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztDQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0NBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7Q0FDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ25CLFNBQVM7Q0FDVCxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQztDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFDLGFBQWE7Q0FDYixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Q0FDM0QsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDMUIsWUFBWSxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO0NBQ3pHLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxZQUFZLEVBQUUsV0FBVyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUc7QUFDOUQ7Q0FDQSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQ7Q0FDQSxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUI7Q0FDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9HO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLEVBQUUsV0FBVyxLQUFLLEdBQUc7QUFDaEM7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUc7Q0FDcEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxvQkFBb0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Q0FDcEosUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDcEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNySDtDQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDN0ksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM5SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ25JLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLEtBQUssR0FBRztBQUNqQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FB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QUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsZUFBZSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzVILFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pIO0NBQ0E7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtDQUNBO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7Q0FDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtDQUNBO0FBQ0E7Q0FDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtDQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7Q0FDQSxTQUFTLE1BQU07Q0FDZjtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtDQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxD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QUFFLENBQUMsRUFBRSxDQUFDO0NBQ25HLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLG9GQUFvRixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQy9LO0FBQ0E7Q0FDQSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUc7Q0FDQSxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQzFCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtBQUNyQztDQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FD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O0FBQ0Y7Q0FDQSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDZCxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ2YsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0NBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtDQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7Q0FDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElB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QUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7Q0FDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0NBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztDQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztDQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Q0FDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztDQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ25DO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7Q0FDakUsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztDQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFlBQVksS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUM7Q0FDN0UsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDO0FBQ2hGO0NBQ0E7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7Q0FDNUUsTUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDNUUsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCO0NBQ0E7Q0FDQSxJ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QUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hDLE9BQU87Q0FDUCxNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3ZCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7Q0FDekMsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksR0FBRztDQUNULElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDckM7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztDQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0NBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUM1RDtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtDQUN6QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0NBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0NBQ2hDLEtBQUssTUFBTTtDQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0NBQ3pDLEtBQUs7QUFDTDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtDQUM5QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQ3hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDdEMsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzFCO0NBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0NBQzlCLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMv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LElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Q0FDbEQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNyQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDM0MsR0FBRztBQUNIO0NBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0NBQ2QsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDcEMsSUFBSTtDQUNKLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztDQUMzRSxNQUFNO0NBQ04sR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7Q0FDakIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTztDQUMxQixJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztDQUMzQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUNyQixNQUFNLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGdDQUFnQyxDQUFDLENBQUM7QUFDckU7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NB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QUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7Q0FDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFLO0NBQ3JDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBRztDQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0NBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0NBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0NBQzVCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0NBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFH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LENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTTtDQUN0RSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUk7Q0FDbkUsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNuRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7Q0FDQSxTQUFTO0FBQ1Q7QUFDQTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0NBQ3JELFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFFO0NBQ3BFLFNBQVM7Q0FDVDtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssR0FBRztBQUNaO0NBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUs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QUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakM7Q0FDQSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzlCO0NBQ0EsWUFBWSxRQUFRLENBQUM7QUFDckI7Q0FDQSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztDQUNoRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSztDQUNyRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSztDQUNsRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztBQUN0RjtDQUNBLGFBQWE7QUFDYjtDQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxNQUFNO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUM7Q0FDckIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0NBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHO0FBQ3hCO0NBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNuQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE9BQU07QUFDdEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFlBQVksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0NBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0NBQ3hELEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNsQztDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUM7Q0FDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDckM7Q0FDQSxRQUFRLE9BQU8sSUFBSTtBQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDekIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUU7Q0FDL0I7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7Q0FDckIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0NBQ2xEO0NBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7Q0FDNUQsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0NBQ0E7Q0FDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztDQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0NBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJ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QUFXLEdBQUU7QUFDdEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7Q0FDekQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQzNFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQzVGO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ25CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRTtBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtD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QUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVB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QUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xHO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0NBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtDQUNoQyxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Q0FDakosWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN6RDtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDak9PLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBO0FBQ0E7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDbkM7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3RCO0NBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQzdDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0M7QUFDQTtBQUNBO0NBQ0E7Q0FDQSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7Q0FDbEMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDNUM7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QjtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0NBQzVCLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0NBQzNCLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3hCO0NBQ0EsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUN6QjtDQUNBO0FBQ0E7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUU7Q0FDdk07QUFDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3RDO0NBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7Q0FDcEMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksU0FBUTtBQUMzQztDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFJO0NBQ3BCLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFTO0NBQzNCLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtDQUNoQyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUU7Q0FDOUUsY0FBYyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRTtDQUN6RSxjQUFjLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE1BQUs7Q0FDbEMsTUFBTTtBQUNOO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7Q0FDdkIsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDeEIsS0FBSyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQUs7QUFDMUI7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFLO0FBQ3BDO0NBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUU7Q0FDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7QUFDdEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBQztDQUNqQixLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBRztBQUNqQjtDQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRTtBQUNoQjtDQUNBLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQ2hDO0NBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDM0M7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUc7QUFDckI7Q0FDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0NBQ3BCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQzFDO0NBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtDQUNBLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxPQUFPO0NBQ3hDLFdBQVcsT0FBTyxPQUFPO0FBQ3pCO0NBQ0EsR0FBRyxNQUFNO0FBQ1Q7Q0FDQSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLE9BQU87Q0FDMUMsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxPQUFPO0FBQzNDO0NBQ0EsR0FBRztBQUNIO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNmO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztDQUN6QixLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xCO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7QUFDQTtDQUNBLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuRDtBQUNBO0NBQ0E7Q0FDQSxFQUFFLEdBQUcsSUFBSSxLQUFLLE9BQU8sQ0FBQztDQUN0QixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNsQyxjQUFjLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMzQixTQUFTLE9BQU8sSUFBSSxDQUFDO0NBQ3JCLEdBQUc7QUFDSDtBQUNBO0NBQ0EsRUFBRSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDeEI7Q0FDQSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3RCLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFJO0NBQ3ZCLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN2QixHQUFHO0NBQ0gsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7Q0FDQSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdEQ7Q0FDQSxLQUFLLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN6RDtDQUNBLEtBQUssSUFBSSxJQUFJLEtBQUssT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkQ7Q0FDQSxLQUFLLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUMzQjtDQUNBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3BFLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ2hGLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ2pDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNwQixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDN0I7QUFDQTtDQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7Q0FDOUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQzNDO0NBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDdkI7Q0FDQSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtDQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDOUIsUUFBUTtBQUNSO0NBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7Q0FDQSxTQUFTLE1BQU07QUFDZjtDQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMs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RyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQzVDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDM0UsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2pDO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtDQUNBLFNBQVM7Q0FDVCxLQUFLO0NBQ0wsSUFBSTtDQUNKLEdBQUc7QUFDSDtDQUNBLEVBQUU7QUFDRjtDQUNBO0FBQ0E7Q0FDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0NBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0NBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtDQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7Q0FDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0NBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztDQUN0QztDQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtDQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0NBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7Q0FDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7Q0FDdEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FB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SUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0EsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7Q0FDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0NBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztDQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztDQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7Q0FDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztDQUNBO0NBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVDO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtDQUNBO0NBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7Q0FDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0NBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7Q0FDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0NBQzVEO0NBQ0E7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0NBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0NBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7Q0FDQTtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0NBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7Q0FDcEM7Q0FDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztDQUNB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Q0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ2xFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0NBQ2xELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0NBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDL0Q7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0NBQzdLO0FBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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QyxDQUFDLENBQUM7Q0FDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Q0FDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtDQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0NBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7Q0FDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7Q0FDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7Q0FDcEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0NBQ25FLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzNEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztDQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztDQUNuQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztDQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7Q0FDakM7Q0FDQSxLQUFLO0FBQ0w7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3BDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxHQUFHLENBQUMsR0FBRztBQUNYO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3hDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDdkI7Q0FDQSxRQUFRLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHO0FBQzNDO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDdkY7Q0FDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0NBQ2pDLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxZQUFZLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRztBQUM5QjtDQUNBLGdCQUFnQixJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztDQUNqRSxnQkFBZ0IsSUFBSSxhQUFhLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7QUFDdkU7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztDQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDO0FBQ25EO0NBQ0EsYUFBYTtBQUNiO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RDtDQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUN2RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztDQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztDQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztDQUNuQztDQUNBLEtBQUs7Q0FDTDtDQUNBOztDQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0NBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztDQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQ7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0NBQ3hFLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNqQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0NBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDakQ7Q0FDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0NBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0NBQy9DLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtDQUN6RCxhQUFhO0NBQ2I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0NBQ0E7QUFDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlEQUF5RCxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM1TDtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQ7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Q0FDdEosUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0gsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEo7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztDQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7Q0FDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtDQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0NBQzFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUM7Q0FDOUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSTtDQUM5QyxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxL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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFDO0NBQzVDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNwQztDQUNBLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUc7Q0FDMUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RCO0NBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0NBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztDQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0NBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtDQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtDQUNBLE1BQU07QUFDTjtDQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcs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QUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztBQUM1QztDQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtDQUMzQixRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsb0NBQW9DLEdBQUcsR0FBRTtBQUMvRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsNENBQTRDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQztDQUM1SCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDNUs7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUk7Q0FDMUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHNC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QyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0NBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0NBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtBQUN2QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDN0M7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBOztDQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztDQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7Q0FDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0NBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87Q0FDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxD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QUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0NBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0NBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQzNELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztDQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztDQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtDQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtDQUNBLGFBQWE7QUFDYjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDN0I7QUFDQTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Q0FDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0NBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdELFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUQsU0FBUztBQUNUO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7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STtDQUMxQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7Q0FDN0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUk7Q0FDeEIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRTtDQUMzQixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztDQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztDQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7Q0FDOUI7Q0FDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQ3JEO0NBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0NBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7Q0FDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN4RCxhQUFhO0NBQ2I7Q0FDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7Q0FDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0NBQ3hCO0NBQ0EsU0FBUztDQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDekQsUUFBUSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDNUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDMUM7QUFDQTtDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixZQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDNUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLEtBQUssQ0FBQztDQUNyRCxTQUFTLE1BQU07Q0FDZixZQUFZLElBQUksR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3JELFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7Q0FDMUIsU0FBUztBQUNUO0NBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHO0FBQzNDO0NBQ0EsWUFBWSxDQUFDLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUNoRCxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDaEQsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDOUQ7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztDQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNyRjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtDQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0NBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Q0FDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN6RDtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztDQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7Q0FDckM7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0NBQ0E7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtDQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0NBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7Q0FDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07Q0FDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxD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QUFDLENBQUM7Q0FDakQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUMvQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzlDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDOUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztDQUN2RCxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztDQUMvRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwRDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7Q0FDdkMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUN4QyxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQy9CLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHO0FBQzlCO0NBQ0EsWUFBWSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFDO0NBQzdELFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUM7Q0FDcEQsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQztDQUNyRCxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDO0NBQ3pELFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVE7Q0FDakQsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0NBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7Q0FDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7Q0FDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUN4QixZ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LElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztDQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0NBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0I7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDNUQsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVDO0NBQ0EsS0FB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LENBQUMsR0FBRztBQUMxQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDdEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0NBQ3ZFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBSztDQUN0QyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFJO0NBQ2hELFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUk7Q0FDbEQsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSTtDQUMzQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0NBQzNDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDdEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU07Q0FDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRTtDQUM1QyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFJO0NBQ3pDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUk7QUFDekM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRTtDQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLEtBQUk7QUFDdEM7Q0FDQSxRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDbEIsU0FBUyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQ2xELGdCQUFnQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQ3RFLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEdBQUcsR0FBRTtDQUNoRCxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0NBQ2xDLGFBQWEsTUFBTTtDQUNuQixnQkFBZ0IsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0NBQzNELGFBQWE7QUFDYjtDQUNBLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7Q0FDM0MsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU07Q0FDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRTtBQUMvQztDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0NBQ3JCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFFO0NBQy9CLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0NBQ2xDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBRztDQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0NBQ3RCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUc7QUFDeEI7Q0FDQSxRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDbEI7Q0FDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFFO0NBQ2xFLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0NBQzVELFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0NBQ25ELFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FB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LENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzNCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDL0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BEO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0NBQzFCLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQztDQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0NBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztDQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7Q0FDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7Q0FDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7Q0FDaEMsT0FBTztBQUNQO0NBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7Q0FDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFF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QUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDNUQsUUFBUSxNQUFNO0NBQ2QsS0FBSztDQUNMLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtDQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtDQUNBLElBQUksSUFBSSxPQUFPO0NBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtDQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0NBQzNDO0FBQ0E7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztDQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtDQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ3hCLEdBQUc7QUFDSDtDQUNBLEVBQUUsS0FBSyxHQUFHO0NBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtDQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0NBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3BDO0NBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztD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USxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQzlCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDeEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7Q0FDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMs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QUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RELFNBQVM7QUFDVDtDQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0NBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0NBQzVELFNBQVM7QUFDVDtDQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDdEMsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0NBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0NBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7Q0FDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ3ZCLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0NBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFFO0FBQ3JDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7Q0FDN0IsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQztDQUNsQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0NBQzVELFNBQVMsTUFBTTtDQUNmLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMzQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sRUFBRSxDQUFDO0FBQ2xCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFB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QUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUM3RCxhQUFhLE1BQU07Q0FDbkIsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDOUQsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUM3RCxhQUFhO0FBQ2I7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztDQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsRDtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0NBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztDQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztDQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0NBQ0E7QUFDQTtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM5RjtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztDQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0NBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0NBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztDQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0NBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtDQUNBLEtBQUs7Q0FDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0NBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztDQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0NBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hDLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7Q0FDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtDQUN6RTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7Q0FDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7Q0FDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0NBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7Q0FDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ2pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxRQUFRLElBQUk7Q0FDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztDQUMzRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBQztDQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztDQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztDQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUM5RDtDQUNBLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0NBQ2hELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0NBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0NBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0NBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0NBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFFO0NBQ3BFO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7O0NDclJBO0FBSUE7Q0FDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7Q0FDcEMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtDQUNyQjtDQUNBO0NB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QUM7QUFDNUM7Q0FDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUMvQyxHQUFHLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDOUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0NBQzNCLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUM1QyxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ3BDLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ3BELElBQUksSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0NBQ3JCLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQy9DLEtBQUssTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QixLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNqRCxLQUFLLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzFDLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUs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QyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDaEMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNmO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQjtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUNqQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJ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QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZEO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtDQUNYLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0NBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEM7Q0FDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7Q0FDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0NBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0NBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDaEQsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3pCLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtDQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDakQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNoQixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsT0FBTyxHQUFHO0NBQ1osSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0QsR0FBRztBQUNIO0NBQ0EsRUFBRSxJQUFJLEdBQUc7Q0FDVCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN6RCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFNBQVMsR0FBRztDQUNkLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFD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QU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUM3QyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUU7Q0FDbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztDQUM1QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDaEIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDMUIsS0FBSztDQUNMLEdBQUc7Q0FDSDs7Ozs7Ozs7Ozs7Ozs7In0= diff --git a/build/uil.min.js b/build/uil.min.js index b77d4fd..5014eca 100644 --- a/build/uil.min.js +++ b/build/uil.min.js @@ -299,6 +299,10 @@ if (R.ID.isCanvasOnly) { e.clientX = R.ID.mouse.x; e.clientY = R.ID.mouse.y; + } else if (R.ID.isCanvas) { + // NUEVO: si es canvas con parent, usar mouse virtual + offset del GUI + e.clientX = R.ID.zone.x + R.ID.mouse.x; + e.clientY = R.ID.zone.y + R.ID.mouse.y; } //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 @@ -8826,785 +8830,826 @@ */ class Gui { - constructor(o = {}) { - this.isGui = true; + constructor(o = {}) { + this.isGui = true; - this.name = "gui"; + this.name = "gui"; - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors); - else this.colors = Tools.defineColor(o); + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); - //this.cleanning = false + //this.cleanning = false - // style - this.css = Tools.cloneCss(); + // style + this.css = Tools.cloneCss(); - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") - ? o.addDOMEventListeners - : true; + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; - this.callback = o.callback === undefined ? null : o.callback; + this.callback = o.callback === undefined ? null : o.callback; - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - this.cn = ""; + this.cn = ""; - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; - this.size.h = this.size.h < 11 ? 11 : this.size.h; + this.size.h = this.size.h < 11 ? 11 : this.size.h; - // local mouse and zone - this.local = new V2().neg(); - this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; - // virtual mouse - this.mouse = new V2().neg(); + // virtual mouse + this.mouse = new V2().neg(); - this.h = 0; - //this.prevY = -1; - this.sw = 0; + this.h = 0; + //this.prevY = -1; + this.sw = 0; - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; - this.autoResize = o.autoResize === undefined ? true : o.autoResize; + this.autoResize = o.autoResize === undefined ? true : o.autoResize; - // default position - this.isCenter = o.center || false; - this.cssGui = - o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; - this.isNewTarget = false; + this.isNewTarget = false; - let cc = this.colors; + let cc = this.colors; - this.content = Tools.dom( - "div", - this.css.basic + - " width:0px; height:auto; top:0px; background:" + - cc.content + - "; " + - this.cssGui - ); + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); - this.innerContent = Tools.dom( - "div", - this.css.basic + - "width:100%; top:0; left:0; height:auto; overflow:hidden;" - ); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom( - "div", - this.css.basic + flexible + "width:100%; left:0; " - ); - this.innerContent.appendChild(this.inner); + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); - // scroll - this.scrollBG = Tools.dom( - "div", - this.css.basic + - "right:0; top:0; width:" + - (this.size.s - 1) + - "px; height:10px; display:none; background:" + - cc.background + - ";" - ); - this.content.appendChild(this.scrollBG); + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); - this.scroll = Tools.dom( - "div", - this.css.basic + - "background:" + - cc.button + - "; right:2px; top:0; width:" + - (this.size.s - 4) + - "px; height:10px;" - ); - this.scrollBG.appendChild(this.scroll); + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; - let r = cc.radius; - this.bottom = Tools.dom( - "div", - this.css.txt + - "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + - r + - "px; border-bottom-left-radius:" + - r + - "px; justify-content:center; height:" + - this.bh + - "px; line-height:" + - (this.bh - 5) + - "px; color:" + - cc.text + - ";" - ); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - this.bottom.style.background = cc.background; - - // - - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; - - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; - if (this.parent !== null) this.parent.appendChild(this.content); + // - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } - // height transition - this.transition = - o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + if (this.parent !== null) this.parent.appendChild(this.content); - this.setWidth(); + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - if (this.isCanvas) this.makeCanvas(); + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } - Roots.add(this); - } + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } + this.setWidth(); - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN, - }); - } + if (this.isCanvas) this.makeCanvas(); - triggerMouseUp(x, y) { - /* - - clientX,clientY are no used when isCanvas==true - */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } + Roots.add(this); + } - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); + triggerMouseDown(x, y) { + console.warn("Gui.triggerMouseDown is deprecated, use triggerMouseDownUV instead"); + /* + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + });*/ + } - Roots.needReZone = true; - } + triggerMouseMove() { + console.warn("Gui.triggerMouseMove is deprecated, use triggerMouseMoveUV instead"); + /* + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + });*/ + } - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = - "height " + this.transition + "s ease-out"; - this.content.style.transition = - "height " + this.transition + "s ease-out"; - this.bottom.style.transition = - "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } + triggerMouseUp(x, y) { + + console.warn("Gui.triggerMouseUp is deprecated, use triggerMouseUpUV instead"); + /* + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + });*/ + } - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } + // Gui.js + triggerMouseDownUV(u, v, { flipY = true } = {}) { + // u, v en [0,1] relativos al rect del GUI + const x = this.zone.x + Math.round(u * this.zone.w); + const y = this.zone.y + Math.round((flipY ? 1 - v : v) * this.zone.h); + Roots.handleEvent({ + type: "pointerdown", + clientX: isNaN(x) ? null : x, + clientY: isNaN(y) ? null : y, + delta: 0, + key: null, + keyCode: NaN, + }); + } - // ---------------------- - // CANVAS - // ---------------------- + triggerMouseUpUV(u, v, { flipY = true } = {}) { + const x = this.zone.x + Math.round(u * this.zone.w); + const y = this.zone.y + Math.round((flipY ? 1 - v : v) * this.zone.h); + + Roots.handleEvent({ + type: "pointerup", + clientX: isNaN(x) ? null : x, + clientY: isNaN(y) ? null : y, + delta: 0, + key: null, + keyCode: NaN, + }); + } - onDraw() {} + triggerMouseMoveUV(u, v, { flipY = true } = {}) { + const x = this.zone.x + Math.round(u * this.zone.w); + const y = this.zone.y + Math.round((flipY ? 1 - v : v) * this.zone.h); + Roots.handleEvent({ + type: "pointermove", + clientX: isNaN(x) ? null : x, + clientY: isNaN(y) ? null : y, + delta: 0, + key: null, + keyCode: NaN, + }); + } - makeCanvas() { - this.canvas = document.createElementNS( - "http://www.w3.org/1999/xhtml", - "canvas" - ); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); - //console.log( this.canvas.width, this.canvas.height ) - } + Roots.needReZone = true; + } - draw(force) { - if (this.canvas === null) return; + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } - ////// + // ---------------------- + // CANVAS + // ---------------------- - getDom() { - return this.content; - } + onDraw() {} - noMouse() { - this.mouse.neg(); - } + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - setMouse(uv, flip = true) { - if (flip) - this.mouse.set( - Math.round(uv.x * this.canvas.width), - this.canvas.height - Math.round(uv.y * this.canvas.height) - ); - else - this.mouse.set( - Math.round(uv.x * this.canvas.width), - Math.round(uv.y * this.canvas.height) - ); - //this.mouse.set( m.x, m.y ); + //console.log( this.canvas.width, this.canvas.height ) + } - console.log("setMouse " + uv.x + " " + uv.y); - } + draw(force) { + if (this.canvas === null) return; - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } + ////// - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } + getDom() { + return this.content; + } - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } + noMouse() { + this.mouse.neg(); + } - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); - onChange(f) { - this.callback = f || null; - return this; - } + //console.log("setMouse " + uv.x + " " + uv.y); + } - // ---------------------- - // STYLES - // ---------------------- + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } - mode(n) { - let needChange = false; - let cc = this.colors; - - if (n !== this.cn) { - this.cn = n; - - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } - needChange = true; - } + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } - return needChange; - } + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } - // ---------------------- - // TARGET - // ---------------------- + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } + onChange(f) { + this.callback = f || null; + return this; + } - this.proto = null; - this.current = -1; + // ---------------------- + // STYLES + // ---------------------- - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + mode(n) { + let needChange = false; + let cc = this.colors; - Roots.cursor(); - return true; - } + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } - // ---------------------- - // ZONE TEST - // ---------------------- + needChange = true; + } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; + return needChange; + } - this.isReset = false; + // ---------------------- + // TARGET + // ---------------------- - let name = ""; + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + this.proto = null; + this.current = -1; - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; - else name = l.x > s ? "scroll" : "content"; + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - return name; - } + Roots.cursor(); + return true; + } - // ---------------------- - // EVENTS - // ---------------------- + // ---------------------- + // ZONE TEST + // ---------------------- - handleEvent(e) { - //if( this.cleanning ) return + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; + this.isReset = false; - let change = false; - let protoChange = false; + let name = ""; - let name = this.testZone(e); + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } + return name; + } - if (!name) return; + // ---------------------- + // EVENTS + // ---------------------- - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + handleEvent(e) { + //if( this.cleanning ) return - if (Roots.isMobile && type === "mousedown") - this.getNext(e, change); + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; - if (this.proto) protoChange = this.proto.handleEvent(e); + let change = false; + let protoChange = false; - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) - change = this.onWheel(e); + let name = this.testZone(e); - if (!Roots.lock) { - this.getNext(e, change); - } + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) - this.update(e.clientY - this.zone.y - this.sh * 0.5); + if (!name) return; - break; - } + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - if (this.isDown) change = true; - if (protoChange) change = true; + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); - if (type === "keyup") change = true; - if (type === "keydown") change = true; + if (this.proto) protoChange = this.proto.handleEvent(e); - if (change) this.draw(); - } + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); + if (!Roots.lock) { + this.getNext(e, change); + } - if (next !== this.current) { - this.clearTarget(); - this.current = next; - this.isNewTarget = true; - } + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } + break; + } - // ---------------------- - // RESET - // ---------------------- + if (this.isDown) change = true; + if (protoChange) change = true; - reset(force) { - if (this.isReset) return; + if (type === "keyup") change = true; + if (type === "keydown") change = true; - //this.resetItem(); + if (change) this.draw(); + } - this.mouse.neg(); - this.isDown = false; + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } - if (r || r2) this.draw(true); + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } - this.isReset = true; + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } - //Roots.lock = false; - } + // ---------------------- + // RESET + // ---------------------- - // ---------------------- - // ADD NODE - // ---------------------- + reset(force) { + if (this.isReset) return; - add() { - //if(this.cleanning) this.cleanning = false + //this.resetItem(); - let a = arguments; - let ontop = false; + this.mouse.neg(); + this.isDown = false; - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); - else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } + if (r || r2) this.draw(true); - let u = add.apply(this, a); + this.isReset = true; - if (u === null) return; + //Roots.lock = false; + } - if (ontop) this.uis.unshift(u); - else this.uis.push(u); + // ---------------------- + // ADD NODE + // ---------------------- - this.calc(); + add() { + //if(this.cleanning) this.cleanning = false - this.isEmpty = false; + let a = arguments; + let ontop = false; - return u; - } + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; - // remove one node + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } - remove(n) { - if (n.dispose) n.dispose(); - } + let u = add.apply(this, a); - // call after uis clear + if (u === null) return; - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } + if (ontop) this.uis.unshift(u); + else this.uis.push(u); - // clear all gui + this.calc(); - empty() { - //this.cleanning = true + this.isEmpty = false; - //this.close(); + return u; + } - let i = this.uis.length, - item; + // remove one node - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } + remove(n) { + if (n.dispose) n.dispose(); + } - this.uis = []; - this.isEmpty = true; - this.calc(); - } + // call after uis clear - clear() { - this.empty(); - } + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } - clear2() { - setTimeout(this.empty.bind(this), 0); - } + // clear all gui - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } + empty() { + //this.cleanning = true - // ---------------------- - // ITEMS SPECIAL - // ---------------------- + //this.close(); - resetItem() { - if (!this.isItemMode) return; + let i = this.uis.length, + item; - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } - setItem(name) { - if (!this.isItemMode) return; + this.uis = []; + this.isEmpty = true; + this.calc(); + } - name = name || ""; - this.resetItem(); + clear() { + this.empty(); + } - if (!name) { - this.update(0); - return; - } + clear2() { + setTimeout(this.empty.bind(this), 0); + } - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) - this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } - // ---------------------- - // SCROLL - // ---------------------- + // ---------------------- + // ITEMS SPECIAL + // ---------------------- - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; + resetItem() { + if (!this.isItemMode) return; - if (b) { - this.total = this.h; + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } - this.maxView = this.maxHeight; + setItem(name) { + if (!this.isItemMode) return; - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; + name = name || ""; + this.resetItem(); - this.range = this.maxView - this.sh; + if (!name) { + this.update(0); + return; + } - this.oy = Tools.clamp(this.oy, 0, this.range); + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } + // ---------------------- + // SCROLL + // ---------------------- - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; - update(y) { - y = Tools.clamp(y, 0, this.range); + if (b) { + this.total = this.h; - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } + this.maxView = this.maxHeight; - // ---------------------- - // RESIZE FUNCTION - // ---------------------- + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } + this.range = this.maxView - this.sh; - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } + this.oy = Tools.clamp(this.oy, 0, this.range); - setHeight() { - if (this.tmp) clearTimeout(this.tmp); + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } - this.zone.h = this.bh; - this.isScroll = false; + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } - if (this.isOpen) { - this.h = this.calcUis(); + update(y) { + y = Tools.clamp(y, 0, this.range); - let hhh = this.forceHeight - ? this.forceHeight + this.zone.y - : window.innerHeight; + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } - this.maxHeight = hhh - this.zone.y - this.bh; + // ---------------------- + // RESIZE FUNCTION + // ---------------------- - let diff = this.h - this.maxHeight; + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } - this.upScroll(this.isScroll); + setHeight() { + if (this.tmp) clearTimeout(this.tmp); - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; + this.zone.h = this.bh; + this.isScroll = false; - if (this.forceHeight && this.lockHeight) - this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } + if (this.isOpen) { + this.h = this.calcUis(); - rezone() { - Roots.needReZone = true; - } + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; - setWidth(w) { - if (w) this.zone.w = w; + this.maxHeight = hhh - this.zone.y - this.bh; - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) - this.content.style.marginLeft = - -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } + let diff = this.h - this.maxHeight; - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + + this.upScroll(this.isScroll); + + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + + rezone() { + Roots.needReZone = true; + } + + setWidth(w) { + if (w) this.zone.w = w; + + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } } exports.Files = Files; @@ -9616,3 +9661,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfSBlbHNlIGlmIChSLklELmlzQ2FudmFzKSB7XHJcbiAgICAgICAgLy8gTlVFVk86IHNpIGVzIGNhbnZhcyBjb24gcGFyZW50LCB1c2FyIG1vdXNlIHZpcnR1YWwgKyBvZmZzZXQgZGVsIEdVSVxyXG4gICAgICAgIGUuY2xpZW50WCA9IFIuSUQuem9uZS54ICsgUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQuem9uZS55ICsgUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gXCIuLi9jb3JlL1Jvb3RzLmpzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcblx0Y29uc3RydWN0b3IobyA9IHt9KSB7XHJcblx0XHQvLyBBUEkgcMO6YmxpY2EgZXNwZXJhZGE6XHJcblx0XHQvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KVxyXG5cdFx0Ly8gby5mb2N1c2VkIChib29sKSwgby5mb2N1c1BhdGggKGFycmF5KSwgby5mb2N1c0xldmVsIChudW1iZXIpXHJcblx0XHQvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcblx0XHRvLnNlbGVjdGFibGUgPSB0cnVlO1xyXG5cdFx0by5uYW1lID0gby5uYW1lIHx8IFwiVHJlZUxpc3RcIjtcclxuXHJcblx0XHRzdXBlcihvKTtcclxuXHRcdHRoaXMuZW5hYmxlSG92ZXIgPSBvLmVuYWJsZUhvdmVyICE9PSBmYWxzZTtcclxuXHJcblx0XHQvLyBEYXRvcyAmIGVzdGFkb1xyXG5cdFx0dGhpcy50cmVlID0gby50cmVlIHx8IHt9O1xyXG5cdFx0dGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNlZCA9ICEhby5mb2N1c2VkO1xyXG5cdFx0dGhpcy5mb2N1c1BhdGggPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09IFwibnVtYmVyXCIgPyBvLmZvY3VzTGV2ZWwgOiAtMTtcclxuXHJcblx0XHR0aGlzLnRhYkluZGV4ID0gby50YWJJbmRleCA/PyBudWxsO1xyXG5cdFx0dGhpcy5pdGVtSW5kZXggPSBvLml0ZW1JbmRleCA/PyBudWxsO1xyXG5cclxuXHRcdC8vIENhbGxiYWNrXHJcblx0XHR0aGlzLmNoYW5nZUNiID1cclxuXHRcdFx0dHlwZW9mIG8ub25DaGFuZ2UgPT09IFwiZnVuY3Rpb25cIiA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcblx0XHQvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuXHRcdHRoaXMubGluZUggPSB0aGlzLmg7IC8vIGFsdG8gZGUgVU5BIGZpbGFcclxuXHRcdHRoaXMubGV2ZWxHYXAgPSB0aGlzLmNvbG9ycy5zeSB8fCAyOyAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcblx0XHR0aGlzLmxlYWZNYXggPSAwOyAvLyBzZSBjYWxjdWxhIGVuIHJTaXplKClcclxuXHJcblx0XHQvLyBNb2RlbG8gdmlzdWFsXHJcblx0XHR0aGlzLmxldmVscyA9IFtdOyAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuXHRcdHRoaXMuaXRlbXNEb20gPSBbXTsgLy8gZXNwZWpvIERPTSBwb3Igbml2ZWxcclxuXHRcdHRoaXMuaG92ZXIgPSB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogcmVjb3JkYXIgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYSAocGVyc2lzdGVudGUpXHJcblx0XHR0aGlzLmxhc3RMZWFmID0geyBwYXJlbnRQYXRoOiBbXSwga2V5OiBudWxsIH07IC8vIHBhcmVudFBhdGggZXMgbGEgcnV0YSBoYXN0YSBlbCBtYXBhIHBhZHJlXHJcblxyXG5cdFx0Ly8gQ29udGVuZWRvciBpbnRlcm5vIChhYnNvbHV0bylcclxuXHRcdHRoaXMuY1syXSA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcImRpdlwiLFxyXG5cdFx0XHR0aGlzLmNzcy5iYXNpYyArIFwibGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7XCJcclxuXHRcdCk7XHJcblx0XHR0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG5cdFx0dGhpcy5pbml0KCk7XHJcblxyXG5cdFx0Ly8gU2kgZWwgdmFsb3IgaW5pY2lhbCB5YSBhcHVudGEgYSB1bmEgaG9qYSB2w6FsaWRhLCByZWNvcmRhciBlc2EgaG9qYVxyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG5cdHN0YXRpYyBpc01hcChub2RlKSB7XHJcblx0XHRyZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblx0c3RhdGljIGlzTGlzdChub2RlKSB7XHJcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUmVjb3JyaWRvIGRlIGRhdG9zID09PT09PT1cclxuXHRnZXROb2RlQXRQYXRoKHBhdGgpIHtcclxuXHRcdGxldCBub2RlID0gdGhpcy50cmVlO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIHBhdGhbaV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuXHRcdFx0XHRub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBMbGVnYW1vcyBhIHVuYSBsaXN0YTogeWEgbm8gaGF5IG3DoXMgY2xhdmVzIHbDoWxpZGFzXHJcblx0XHRcdFx0aWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuXHR9XHJcblxyXG5cdC8vIEF1dG9jb21wbGV0YXI6IGJhamEgcG9yIHByaW1lcmFzIGNsYXZlcyBkZSBjYWRhIG1hcGEgaGFzdGEgYWxjYW56YXIgdW5hIGxpc3RhXHJcblx0YXV0b0NvbXBsZXRlVG9MZWFmKGJhc2VQYXRoKSB7XHJcblx0XHRsZXQgeyBub2RlIH0gPSB0aGlzLmdldE5vZGVBdFBhdGgoYmFzZVBhdGgpO1xyXG5cdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLnNsaWNlKCk7XHJcblx0XHR3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG5cdFx0XHRpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuXHRcdFx0Y29uc3QgazAgPSBrZXlzWzBdO1xyXG5cdFx0XHRwYXRoLnB1c2goazApO1xyXG5cdFx0XHRub2RlID0gbm9kZVtrMF07XHJcblx0XHR9XHJcblx0XHQvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2EgdW4gw610ZW0gZmluYWwgZGUgbGEgaG9qYVxyXG5cdFx0cmV0dXJuIHBhdGg7XHJcblx0fVxyXG5cclxuXHQvLyBSdXRhIGFjdGl2YSAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpbm8gdmFsdWUpXHJcblx0Z2V0QWN0aXZlUGF0aCgpIHtcclxuXHRcdHJldHVybiB0aGlzLmZvY3VzZWQgPyB0aGlzLmZvY3VzUGF0aCA6IHRoaXMudmFsdWU7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFRhbWHDsW8gZGUgaG9qYSBtw6F4aW1vIChwYXJhIGxheW91dCBlc3RhYmxlKSA9PT09PT09XHJcblx0Y29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBub2RlLmxlbmd0aDtcclxuXHRcdGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIDA7XHJcblx0XHRsZXQgbSA9IDA7XHJcblx0XHRmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcclxuXHRcdFx0bSA9IE1hdGgubWF4KG0sIHRoaXMuY29tcHV0ZUxlYWZNYXgobm9kZVtrXSkpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG07XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IENvbnN0cnVjY2nDs24gZGUgbml2ZWxlcyAobW9kZWxvIGzDs2dpY28pID09PT09PT1cclxuXHRidWlsZExldmVscygpIHtcclxuXHRcdHRoaXMubGV2ZWxzLmxlbmd0aCA9IDA7XHJcblx0XHRjb25zdCBhY3RpdmVQYXRoID0gdGhpcy5nZXRBY3RpdmVQYXRoKCk7XHJcblxyXG5cdFx0bGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcblx0XHRsZXQgbGV2ZWwgPSAwO1xyXG5cclxuXHRcdHdoaWxlIChub2RlKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdC8vIE5pdmVsIGludGVybWVkaW86IGNsYXZlcyBkZWwgbWFwYSAoaG9yaXpvbnRhbClcclxuXHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcblx0XHRcdFx0aWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcblx0XHRcdFx0dGhpcy5sZXZlbHMucHVzaCh7XHJcblx0XHRcdFx0XHR0eXBlOiBcIm1hcFwiLFxyXG5cdFx0XHRcdFx0aXRlbXM6IGtleXMubWFwKChrKSA9PiAoe1xyXG5cdFx0XHRcdFx0XHRrZXk6IGssXHJcblx0XHRcdFx0XHRcdGxhYmVsOiBrLFxyXG5cdFx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAgfSxcclxuXHRcdFx0XHRcdH0pKSxcclxuXHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogdGhpcy5saW5lSCB9LFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcblx0XHRcdFx0aWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuXHRcdFx0XHRub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAoKGxhYmVsKSA9PiAoe1xyXG5cdFx0XHRcdFx0a2V5OiBsYWJlbCxcclxuXHRcdFx0XHRcdGxhYmVsLFxyXG5cdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuXHRcdFx0XHR0aGlzLmxldmVscy5wdXNoKHtcclxuXHRcdFx0XHRcdHR5cGU6IFwibGlzdFwiLFxyXG5cdFx0XHRcdFx0aXRlbXMsXHJcblx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IGhMaXN0IH0sXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV2ZWwrKztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gTGF5b3V0ICh6b25hcyAmIERPTSkgPT09PT09PVxyXG5cdGxheW91dExldmVscygpIHtcclxuXHRcdGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7IC8vIGNvbHVtbmEgZGUgbGFiZWwgKyBwYWRkaW5nXHJcblx0XHRjb25zdCBwYWRSaWdodCA9IDg7XHJcblx0XHRjb25zdCB3ID0gdGhpcy56b25lLncgLSBjb250ZW50WCAtIHBhZFJpZ2h0O1xyXG5cclxuXHRcdGxldCB5ID0gMDtcclxuXHJcblx0XHQvLyBBanVzdGFyIGl0ZW1zRG9tIGEgY2FudGlkYWQgZGUgbml2ZWxlc1xyXG5cdFx0d2hpbGUgKHRoaXMuaXRlbXNEb20ubGVuZ3RoIDwgdGhpcy5sZXZlbHMubGVuZ3RoKVxyXG5cdFx0XHR0aGlzLml0ZW1zRG9tLnB1c2goW10pO1xyXG5cdFx0Zm9yIChsZXQgTCA9IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCA8IHRoaXMuaXRlbXNEb20ubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiB0aGlzLml0ZW1zRG9tW0xdKVxyXG5cdFx0XHRcdGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuXHRcdFx0XHRjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cdFx0XHRcdGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG5cdFx0XHRcdGxldCB4ID0gY29udGVudFg7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0XHRcdFx0aXQuem9uZSA9IHsgeCwgeSwgdzogY2VsbFcsIGg6IHRoaXMubGluZUggfTtcclxuXHRcdFx0XHRcdGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuXHRcdFx0XHRcdHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsIFwibWFwXCIpO1xyXG5cdFx0XHRcdFx0eCArPSBjZWxsVztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG5cdFx0XHRcdHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG5cdFx0XHRcdGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcblx0XHRcdFx0bHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuXHRcdFx0XHRjb25zdCByb3dzID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNSZWFsID0gaSA8IG47XHJcblx0XHRcdFx0XHRjb25zdCBpdCA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXVxyXG5cdFx0XHRcdFx0XHQ6IHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTogbnVsbCxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0XHRcdCAgfTtcclxuXHRcdFx0XHRcdGl0LnpvbmUgPSB7XHJcblx0XHRcdFx0XHRcdHg6IGNvbnRlbnRYLFxyXG5cdFx0XHRcdFx0XHR5OiB5ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdHcsXHJcblx0XHRcdFx0XHRcdGg6IHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Y29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG5cdFx0XHRcdFx0dGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgXCJsaXN0XCIsIGlzUmVhbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBmaWxhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIHJvd3MpO1xyXG5cdFx0XHRcdHkgKz0gaExpc3Q7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBBanVzdGVzIGRlIGFsdG8gaW50ZXJubyBkZWwgY29udGVuZWRvciB2aXN1YWxcclxuXHRcdGNvbnN0IHRvdGFsSCA9IHk7XHJcblx0XHR0aGlzLnpvbmUuaCA9IHRvdGFsSCArIHRoaXMubWFyZ2luO1xyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG5cdFx0dGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArIFwicHhcIjtcclxuXHJcblx0XHQvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcblx0XHR0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcblx0fVxyXG5cclxuXHQvLyBFbGltaW5hIG5vZG9zIERPTSBzb2JyYW50ZXMgZW4gbGEgZmlsYSBMIGEgcGFydGlyIGRlbCDDrW5kaWNlIGtlZXBcclxuXHRfcHJ1bmVSb3coTCwga2VlcCkge1xyXG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuXHRcdGlmICghcm93KSByZXR1cm47XHJcblx0XHRmb3IgKGxldCBqID0ga2VlcDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRjb25zdCBlbCA9IHJvd1tqXTtcclxuXHRcdFx0aWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG5cdFx0fVxyXG5cdFx0cm93Lmxlbmd0aCA9IGtlZXA7XHJcblx0fVxyXG5cclxuXHRlbnN1cmVJdGVtRG9tKEwsIGkpIHtcclxuXHRcdGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcblx0XHR3aGlsZSAocm93Lmxlbmd0aCA8PSBpKSByb3cucHVzaChudWxsKTtcclxuXHRcdGlmICghcm93W2ldKSB7XHJcblx0XHRcdGNvbnN0IGRpdiA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcdFwiZGl2XCIsXHJcblx0XHRcdFx0VG9vbHMuY3NzLnR4dCArIFwicG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7XCJcclxuXHRcdFx0KTtcclxuXHRcdFx0dGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcblx0XHRcdHJvd1tpXSA9IGRpdjtcclxuXHRcdH1cclxuXHRcdHJldHVybiByb3dbaV07XHJcblx0fVxyXG5cclxuXHRwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG5cdFx0Y29uc3QgcyA9IGRpdi5zdHlsZTtcclxuXHRcdGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG5cdFx0Ly8gUG9zaWNpw7NuXHJcblx0XHRzLmxlZnQgPSBpdC56b25lLnggKyBcInB4XCI7XHJcblx0XHRzLnRvcCA9IGl0LnpvbmUueSArIFwicHhcIjtcclxuXHRcdHMud2lkdGggPSBpdC56b25lLncgKyBcInB4XCI7XHJcblx0XHRzLmhlaWdodCA9IGl0LnpvbmUuaCAtIDIgKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gVGV4dG9cclxuXHRcdGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogXCJcIjtcclxuXHJcblx0XHQvLyBFc3RhZG9zXHJcblx0XHRjb25zdCBzZWxlY3RlZCA9XHJcblx0XHRcdGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG5cdFx0Y29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiB0aGlzLmZvY3VzTGV2ZWwgPT09IEw7XHJcblx0XHRjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgdGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleTtcclxuXHRcdGNvbnN0IGlzSG92ZXIgPVxyXG5cdFx0XHR0aGlzLmVuYWJsZUhvdmVyICYmXHJcblx0XHRcdGlzUmVhbCAmJlxyXG5cdFx0XHR0aGlzLmhvdmVyLmxldmVsID09PSBMICYmXHJcblx0XHRcdHRoaXMuaG92ZXIuaW5kZXggPT09IGk7XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogwr9lc3RhIGZpbGEgZXMgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYT9cclxuXHRcdGxldCBpc0xhc3RMZWFmID0gZmFsc2U7XHJcblx0XHRpZiAoaXNSZWFsICYmIGtpbmQgPT09IFwibGlzdFwiICYmIHRoaXMubGFzdExlYWYua2V5ICE9IG51bGwpIHtcclxuXHRcdFx0Ly8gTGEgaG9qYSB2aXNpYmxlIGNvcnJlc3BvbmRlIHNpIGVsIHBhZHJlIGRlIGVzdGEgbGlzdGEgY29pbmNpZGUgY29uIHBhcmVudFBhdGggZ3VhcmRhZG9cclxuXHRcdFx0Ly8gRWwgcGFkcmUgYWN0dWFsIGVzIHRoaXMudmFsdWUuc2xpY2UoMCwgTCkgY3VhbmRvIGxhIGxpc3RhIGVzdMOhIGRlc3BsZWdhZGEgcG9yIHZhbHVlL2ZvY3VzXHJcblx0XHRcdGNvbnN0IHBhcmVudE5vdyA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpLnNsaWNlKDAsIEwpO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5fcGF0aHNFcXVhbChwYXJlbnROb3csIHRoaXMubGFzdExlYWYucGFyZW50UGF0aCkgJiZcclxuXHRcdFx0XHRpdC5rZXkgPT09IHRoaXMubGFzdExlYWYua2V5XHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGlzTGFzdExlYWYgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRXN0aWxvcyBiYXNlXHJcblx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG5cdFx0cy5jb2xvciA9IGNjLnRleHQ7XHJcblx0XHRzLmJvcmRlciA9IFwiMXB4IHNvbGlkIFwiICsgY2MuYm9yZGVyO1xyXG5cdFx0cy50ZXh0QWxpZ24gPSBraW5kID09PSBcIm1hcFwiID8gXCJjZW50ZXJcIiA6IFwibGVmdFwiO1xyXG5cclxuXHRcdC8vIFByaW9yaWRhZCB2aXN1YWw6XHJcblx0XHQvLyAxKSBzZWxlY2Npb25hZG8gKGF6dWwpXHJcblx0XHQvLyAyKSDDumx0aW1hIGhvamEgKG51ZXZvIGNvbG9yKVxyXG5cdFx0Ly8gMykgZm9jb1xyXG5cdFx0Ly8gNCkgaG92ZXJcclxuXHRcdGlmIChzZWxlY3RlZCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG5cdFx0fSBlbHNlIGlmIChpc0xhc3RMZWFmKSB7XHJcblx0XHRcdC8vIGNvbG9yIGRpc3RpbnRpdm8gcGFyYSBcIsO6bHRpbWEgaG9qYVwiIChhbWFyaWxsbyBzdWF2ZSlcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gXCJyZ2JhKDI1NSwgMjAwLCAwLCAwLjI1KVwiO1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dDtcclxuXHRcdH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG5cdFx0fSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG5cdFx0cy5vcGFjaXR5ID0gaXNSZWFsID8gXCIxXCIgOiBcIjBcIjtcclxuXHR9XHJcblxyXG5cdF9wYXRoc0VxdWFsKGEsIGIpIHtcclxuXHRcdGlmICghYSB8fCAhYiB8fCBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuXHRyU2l6ZSgpIHtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuXHRcdHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGUoKSB7XHJcblx0XHR0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcblx0XHR0aGlzLmxheW91dExldmVscygpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG5cdF90b0xvY2FsKGUpIHtcclxuXHRcdGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblx0XHRjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG5cdFx0cmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcblx0fVxyXG5cclxuXHRfaGl0VGVzdChteCwgbXkpIHtcclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGNvbnN0IHogPSBsdmwuem9uZTsgLy8geCB5IHcgeWEgaW5jbHV5ZW4gY29udGVudFhcclxuXHJcblx0XHRcdGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0bXggPj0gaXR6LnggJiZcclxuXHRcdFx0XHRcdFx0bXkgPj0gaXR6LnkgJiZcclxuXHRcdFx0XHRcdFx0bXggPD0gaXR6LnggKyBpdHoudyAmJlxyXG5cdFx0XHRcdFx0XHRteSA8PSBpdHoueSArIGl0ei5oXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuXHRcdFx0XHRcdGNvbnN0IGl0eiA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXS56b25lXHJcblx0XHRcdFx0XHRcdDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0eDogei54LFxyXG5cdFx0XHRcdFx0XHRcdFx0eTogei55ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdFx0XHR3OiB6LncsXHJcblx0XHRcdFx0XHRcdFx0XHRoOiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHQgIH07XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdG14ID49IGl0ei54ICYmXHJcblx0XHRcdFx0XHRcdG15ID49IGl0ei55ICYmXHJcblx0XHRcdFx0XHRcdG14IDw9IGl0ei54ICsgaXR6LncgJiZcclxuXHRcdFx0XHRcdFx0bXkgPD0gaXR6LnkgKyBpdHouaFxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IEwsIGksIHJlYWw6IGlzUmVhbCB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgTDogLTEsIGk6IC0xLCByZWFsOiBmYWxzZSB9O1xyXG5cdH1cclxuXHJcblx0aGFuZGxlRXZlbnQoZSkge1xyXG5cdFx0aWYgKHRoaXMubG9jaykgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcclxuXHRcdFx0Ly8gU2kgZWwgaG92ZXIgZXN0w6EgZGVzYWN0aXZhZG8sIG5vIGhheSB0cmFiYWpvIHF1ZSBoYWNlci5cclxuXHRcdFx0aWYgKCF0aGlzLmVuYWJsZUhvdmVyKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHJcblx0XHRcdC8vIG51ZXZvIGhvdmVyIGNhbGN1bGFkb1xyXG5cdFx0XHRjb25zdCBuZXdIb3ZlciA9XHJcblx0XHRcdFx0aHQuTCAhPT0gLTEgJiYgaHQucmVhbFxyXG5cdFx0XHRcdFx0PyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9XHJcblx0XHRcdFx0XHQ6IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHRcdFx0Ly8gc29sbyByZXBpbnRhciBzaSBjYW1iaWEgcmVhbG1lbnRlIGVsIGhvdmVyXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRuZXdIb3Zlci5sZXZlbCA9PT0gdGhpcy5ob3Zlci5sZXZlbCAmJlxyXG5cdFx0XHRcdG5ld0hvdmVyLmluZGV4ID09PSB0aGlzLmhvdmVyLmluZGV4XHJcblx0XHRcdClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdHRoaXMuaG92ZXIgPSBuZXdIb3ZlcjtcclxuXHRcdFx0dGhpcy51cGRhdGUoKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHRcdFx0aWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuXHRcdFx0XHR0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLy8gc29sbyB0cnVlIHNpIHJlYWxtZW50ZSBzZSBzZWxlY2Npb27DsyBhbGdvXHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcblx0X3NlbGVjdEF0KEwsIGkpIHtcclxuXHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0Y29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0aWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuXHRcdGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuXHRcdGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcblx0XHQvLyDwn5S4IFNpIGVsIHVzdWFyaW8gc2VsZWNjaW9uYSBleHBsw61jaXRhbWVudGUgZW4gZWwgbml2ZWwgaG9qYSwgcmVjb3JkYXJsb1xyXG5cdFx0aWYgKGx2bC50eXBlID09PSBcImxpc3RcIikge1xyXG5cdFx0XHR0aGlzLmxhc3RMZWFmLnBhcmVudFBhdGggPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpOyAvLyBwYWRyZSBkZSBsYSBsaXN0YSBhY3R1YWxcclxuXHRcdFx0dGhpcy5sYXN0TGVhZi5rZXkgPSBjaG9zZW4ua2V5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMudmFsdWUgPSBuZXdQYXRoLnNsaWNlKCk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHRcdC8vIHNpIGVzdMOhIHJlZmVyZW5jaWFkbywgcHJvcGFnYSBhIG9iamV0byBleHRlcm5vXHJcblx0XHR0aGlzLnNlbmQobmV3UGF0aCk7XHJcblx0XHR0aGlzLmNoYW5nZUNiKHRoaXMudGFiSW5kZXgsIHRoaXMuaXRlbUluZGV4LCBuZXdQYXRoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gQVBJIHDDumJsaWNhID09PT09PT1cclxuXHRzZXRWYWx1ZShwYXRoKSB7XHJcblx0XHR0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguc2xpY2UoKSA6IFtdO1xyXG5cdFx0Ly8gU2kgZGVzZGUgYWZ1ZXJhIG5vcyBzZXRlYW4gdW5hIGhvamEgdsOhbGlkYSwgdGFtYmnDqW4gbGEgcmVjb3JkYW1vc1xyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdHNldFRyZWUodHJlZSkge1xyXG5cdFx0dGhpcy50cmVlID0gdHJlZSB8fCB7fTtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRzZXRGb2N1cyh7IGZvY3VzZWQsIGZvY3VzUGF0aCwgZm9jdXNMZXZlbCB9KSB7XHJcblx0XHRpZiAodHlwZW9mIGZvY3VzZWQgPT09IFwiYm9vbGVhblwiKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuXHRcdGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gXCJudW1iZXJcIikgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRfbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpIHtcclxuXHRcdC8vIFNpIHZhbHVlIGFwdW50YSBhIHBhZHJlK2hvamEgKOKApixbbGVhZl0pIHkgZXMgdsOhbGlkYSwgcmVjb3JkYXIgZXNhIGhvamFcclxuXHRcdGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLnZhbHVlLmxlbmd0aCAtIDEpO1xyXG5cdFx0Y29uc3QgbGVhZiA9IHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdGNvbnN0IGluZm8gPSB0aGlzLmdldE5vZGVBdFBhdGgocGFyZW50KTtcclxuXHRcdGlmIChpbmZvICYmIEFycmF5LmlzQXJyYXkoaW5mby5ub2RlKSAmJiBpbmZvLm5vZGUuaW5jbHVkZXMobGVhZikpIHtcclxuXHRcdFx0dGhpcy5sYXN0TGVhZiA9IHsgcGFyZW50UGF0aDogcGFyZW50LCBrZXk6IGxlYWYgfTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUHVibGljYWNpw7NuIGRlIGFsdHVyYSA9PT09PT09XHJcblx0X2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKSB7XHJcblx0XHRsZXQgYyA9IDA7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgaSsrKVxyXG5cdFx0XHRpZiAodGhpcy5sZXZlbHNbaV0udHlwZSA9PT0gXCJtYXBcIikgYysrO1xyXG5cdFx0cmV0dXJuIGM7XHJcblx0fVxyXG5cclxuXHRfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcblx0XHRjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcblx0XHRyZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09IFwibGlzdFwiID8gbGFzdC5pdGVtcy5sZW5ndGggOiAwO1xyXG5cdH1cclxuXHJcblx0X3B1Ymxpc2hIZWlnaHQoKSB7XHJcblx0XHRjb25zdCBpbnRlciA9IHRoaXMuX2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKTtcclxuXHRcdGNvbnN0IGxlYWZMZW4gPSBNYXRoLm1heCh0aGlzLmxlYWZNYXgsIHRoaXMuX2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkpO1xyXG5cdFx0Y29uc3QgbGVhZkggPSBsZWFmTGVuICogdGhpcy5saW5lSDtcclxuXHRcdGNvbnN0IGludGVySCA9IGludGVyICogKHRoaXMubGluZUggKyB0aGlzLmxldmVsR2FwKTtcclxuXHRcdGNvbnN0IHRvdGFsSCA9IGludGVyID8gaW50ZXJIICsgdGhpcy5sZXZlbEdhcCArIGxlYWZIIDogbGVhZkg7XHJcblxyXG5cdFx0Ly8gTm9ybWFsaXphbW9zIGEgcHggZW50ZXJvcyBwYXJhIGV2aXRhciBqaXR0ZXIgcG9yIHJlZG9uZGVvXHJcblx0XHRjb25zdCBuZXdIID0gTWF0aC5mbG9vcih0b3RhbEgpO1xyXG5cclxuXHRcdC8vIEFjdHVhbGl6YW1vcyBtw6l0cmljYXMgbG9jYWxlcyBzaWVtcHJlXHJcblx0XHR0aGlzLmggPSBuZXdIO1xyXG5cdFx0dGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gU29sbyBhdmlzYW1vcyBhbCBHVUkgc2kgbGEgYWx0dXJhIGNhbWJpw7NcclxuXHRcdGlmIChuZXdIICE9PSB0aGlzLl9sYXN0UHVibGlzaGVkSCkge1xyXG5cdFx0XHR0aGlzLl9sYXN0UHVibGlzaGVkSCA9IG5ld0g7XHJcblx0XHRcdFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG5cdFx0XHRpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiXHJcbmltcG9ydCB7IEJvb2wgfSBmcm9tICcuLi9wcm90by9Cb29sLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vcHJvdG8vQnV0dG9uLmpzJztcclxuaW1wb3J0IHsgQ2lyY3VsYXIgfSBmcm9tICcuLi9wcm90by9DaXJjdWxhci5qcyc7XHJcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnLi4vcHJvdG8vQ29sb3IuanMnO1xyXG5pbXBvcnQgeyBGcHMgfSBmcm9tICcuLi9wcm90by9GcHMuanMnO1xyXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL3Byb3RvL0dyYXBoLmpzJztcclxuaW1wb3J0IHsgR3JvdXAgIH0gZnJvbSAnLi4vcHJvdG8vR3JvdXAuanMnO1xyXG5pbXBvcnQgeyBKb3lzdGljayB9IGZyb20gJy4uL3Byb3RvL0pveXN0aWNrLmpzJztcclxuaW1wb3J0IHsgS25vYiB9IGZyb20gJy4uL3Byb3RvL0tub2IuanMnO1xyXG5pbXBvcnQgeyBMaXN0IH0gZnJvbSAnLi4vcHJvdG8vTGlzdC5qcyc7XHJcbmltcG9ydCB7IE51bWVyaWMgfSBmcm9tICcuLi9wcm90by9OdW1lcmljLmpzJztcclxuaW1wb3J0IHsgU2xpZGUgfSBmcm9tICcuLi9wcm90by9TbGlkZS5qcyc7XHJcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gJy4uL3Byb3RvL1RleHRJbnB1dC5qcyc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vcHJvdG8vVGl0bGUuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuLi9wcm90by9TZWxlY3QuanMnO1xyXG5pbXBvcnQgeyBCaXRtYXAgfSBmcm9tICcuLi9wcm90by9CaXRtYXAuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdG9yLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuLi9wcm90by9FbXB0eS5qcyc7XHJcbmltcG9ydCB7IEl0ZW0gfSBmcm9tICcuLi9wcm90by9JdGVtLmpzJztcclxuaW1wb3J0IHsgR3JpZCB9IGZyb20gJy4uL3Byb3RvL0dyaWQuanMnO1xyXG5pbXBvcnQgeyBQYWQyRCB9IGZyb20gJy4uL3Byb3RvL1BhZDJELmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgVHJlZUxpc3QgfSBmcm9tICcuLi9wcm90by9UcmVlTGlzdC5qcyc7XHJcblxyXG5leHBvcnQgY29uc3QgYWRkID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGFyZ3VtZW50czsgXHJcblxyXG4gICAgICAgIGxldCB0eXBlLCBvLCByZWYgPSBmYWxzZSwgbiA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVswXSA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgICAgICB0eXBlID0gYVswXTtcclxuICAgICAgICAgICAgbyA9IGFbMV0gfHwge307XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBhWzBdID09PSAnb2JqZWN0JyApeyAvLyBsaWtlIGRhdCBndWlcclxuXHJcbiAgICAgICAgICAgIHJlZiA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoYSwge30pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzJdLnR5cGUgPyBhWzJdLnR5cGUgOiBhdXRvVHlwZSggYVswXVthWzFdXSwgYVsyXSApO1xyXG5cclxuICAgICAgICAgICAgbyA9IGFbMl07XHJcbiAgICAgICAgICAgIG8ubmFtZSA9IGFbMV07XHJcbiAgICAgICAgICAgIGlmIChvLmhhc093blByb3BlcnR5KFwiZGlzcGxheU5hbWVcIikpIG8ubmFtZSA9IG8uZGlzcGxheU5hbWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ2xpc3QnICYmICFvLmxpc3QgKXsgby5saXN0ID0gYVswXVthWzFdXTsgfVxyXG4gICAgICAgICAgICBlbHNlIG8udmFsdWUgPSBhWzBdW2FbMV1dO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2dyb3VwJyApeyBcclxuICAgICAgICAgICAgby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIC8vby5keCA9IDhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCggbmFtZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnYm9vbCc6IGNhc2UgJ2Jvb2xlYW4nOiBuID0gbmV3IEJvb2wobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdidXR0b24nOiBuID0gbmV3IEJ1dHRvbihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NpcmN1bGFyJzogbiA9IG5ldyBDaXJjdWxhcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzogbiA9IG5ldyBDb2xvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Zwcyc6IG4gPSBuZXcgRnBzKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JhcGgnOiBuID0gbmV3IEdyYXBoKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOiBuID0gbmV3IEdyb3VwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnam95c3RpY2snOiBuID0gbmV3IEpveXN0aWNrKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAna25vYic6IG4gPSBuZXcgS25vYihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xpc3QnOiBuID0gbmV3IExpc3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdudW1lcmljJzogY2FzZSAnbnVtYmVyJzogbiA9IG5ldyBOdW1lcmljKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2xpZGUnOiBuID0gbmV3IFNsaWRlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGV4dElucHV0JzogY2FzZSAnc3RyaW5nJzogbiA9IG5ldyBUZXh0SW5wdXQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6IGNhc2UgJ3RleHQnOiBuID0gbmV3IFRpdGxlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzogbiA9IG5ldyBTZWxlY3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdiaXRtYXAnOiBuID0gbmV3IEJpdG1hcChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdG9yJzogbiA9IG5ldyBTZWxlY3RvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzogY2FzZSAnc3BhY2UnOiBuID0gbmV3IEVtcHR5KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaXRlbSc6IG4gPSBuZXcgSXRlbShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyaWQnOiBuID0gbmV3IEdyaWQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwYWQyZCc6IGNhc2UgJ3BhZCc6IG4gPSBuZXcgUGFkMkQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0cmVlbGlzdCc6IG4gPSBuZXcgVHJlZUxpc3Qobyk7IGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggbiAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGlmKCByZWYgKSBuLnNldFJlZmVyZW5jeSggYVswXSwgYVsxXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gbjtcclxuXHJcbiAgICAgICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGF1dG9UeXBlID0gZnVuY3Rpb24gKCB2LCBvICkge1xyXG5cclxuICAgIGxldCB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIGlmKCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkgdHlwZSA9ICdib29sJyBcclxuICAgIGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgaWYoIHYuc3Vic3RyaW5nKDAsMSkgPT09ICcjJyApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3N0cmluZycgXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ251bWJlcicgKXsgXHJcblxyXG4gICAgICAgIGlmKCBvLmN0eXBlICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ2FycmF5JyAmJiB2IGluc3RhbmNlb2YgQXJyYXkgKXtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB2WzBdID09PSAnbnVtYmVyJyApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgaWYoIHR5cGVvZiB2WzBdID09PSAnc3RyaW5nJyApIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcblxyXG4gICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHlwZVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBhZGQgfSBmcm9tIFwiLi9hZGQuanNcIjtcclxuaW1wb3J0IHsgVjIgfSBmcm9tIFwiLi9WMi5qc1wiO1xyXG5cclxuLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIEd1aSB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICB0aGlzLmlzR3VpID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBcImd1aVwiO1xyXG5cclxuICAgIC8vIGZvciAzZFxyXG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xyXG4gICAgdGhpcy5zY3JlZW4gPSBudWxsO1xyXG4gICAgdGhpcy5wbGFuZSA9IG8ucGxhbmUgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjb2xvclxyXG4gICAgaWYgKG8uY29uZmlnKSBvLmNvbG9ycyA9IG8uY29uZmlnO1xyXG4gICAgaWYgKG8uY29sb3JzKSB0aGlzLnNldENvbmZpZyhvLmNvbG9ycyk7XHJcbiAgICBlbHNlIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcblxyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMuY3NzID0gVG9vbHMuY2xvbmVDc3MoKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG4gICAgdGhpcy50bXBBZGQgPSBudWxsO1xyXG4gICAgLy90aGlzLnRtcEggPSAwXHJcblxyXG4gICAgdGhpcy5pc0NhbnZhcyA9IG8uaXNDYW52YXMgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIE1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIC8vIG9wdGlvbiB0byBkZWZpbmUgd2hldGhlciB0aGUgZXZlbnQgbGlzdGVuZXJzIHNob3VsZCBiZSBhZGRlZCBvciBub3RcclxuICAgIFJvb3RzLmFkZERPTUV2ZW50TGlzdGVuZXJzID0gby5oYXNPd25Qcm9wZXJ0eShcImFkZERPTUV2ZW50TGlzdGVuZXJzXCIpXHJcbiAgICAgID8gby5hZGRET01FdmVudExpc3RlbmVyc1xyXG4gICAgICA6IHRydWU7XHJcblxyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG5cclxuICAgIHRoaXMuZm9yY2VIZWlnaHQgPSBvLm1heEhlaWdodCB8fCAwO1xyXG4gICAgdGhpcy5sb2NrSGVpZ2h0ID0gby5sb2NrSGVpZ2h0IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNJdGVtTW9kZSA9IG8uaXRlbU1vZGUgIT09IHVuZGVmaW5lZCA/IG8uaXRlbU1vZGUgOiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmNuID0gXCJcIjtcclxuXHJcbiAgICAvLyBzaXplIGRlZmluZVxyXG4gICAgdGhpcy5zaXplID0gVG9vbHMuc2l6ZTtcclxuICAgIGlmIChvLnAgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnAgPSBvLnA7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS53ID0gby53O1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUuaCA9IG8uaDtcclxuICAgIGlmIChvLnMgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnMgPSBvLnM7XHJcblxyXG4gICAgdGhpcy5zaXplLmggPSB0aGlzLnNpemUuaCA8IDExID8gMTEgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICAvLyBsb2NhbCBtb3VzZSBhbmQgem9uZVxyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG4gICAgdGhpcy56b25lID0geyB4OiAwLCB5OiAwLCB3OiB0aGlzLnNpemUudywgaDogMCB9O1xyXG5cclxuICAgIC8vIHZpcnR1YWwgbW91c2VcclxuICAgIHRoaXMubW91c2UgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmggPSAwO1xyXG4gICAgLy90aGlzLnByZXZZID0gLTE7XHJcbiAgICB0aGlzLnN3ID0gMDtcclxuXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICAvLyBib3R0b20gYW5kIGNsb3NlIGhlaWdodFxyXG4gICAgdGhpcy5pc1dpdGhDbG9zZSA9IG8uY2xvc2UgIT09IHVuZGVmaW5lZCA/IG8uY2xvc2UgOiB0cnVlO1xyXG4gICAgdGhpcy5iaCA9ICF0aGlzLmlzV2l0aENsb3NlID8gMCA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG8uYXV0b1Jlc2l6ZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG8uYXV0b1Jlc2l6ZTtcclxuXHJcbiAgICAvLyBkZWZhdWx0IHBvc2l0aW9uXHJcbiAgICB0aGlzLmlzQ2VudGVyID0gby5jZW50ZXIgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmNzc0d1aSA9XHJcbiAgICAgIG8uY3NzICE9PSB1bmRlZmluZWQgPyBvLmNzcyA6IHRoaXMuaXNDZW50ZXIgPyBcIlwiIDogXCJyaWdodDoxMHB4O1wiO1xyXG5cclxuICAgIHRoaXMuaXNPcGVuID0gby5vcGVuICE9PSB1bmRlZmluZWQgPyBvLm9wZW4gOiB0cnVlO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmRlY2FsID0gMDtcclxuICAgIHRoaXMucmF0aW8gPSAxO1xyXG4gICAgdGhpcy5veSA9IDA7XHJcblxyXG4gICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIHRoaXMuY29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiIHdpZHRoOjBweDsgaGVpZ2h0OmF1dG87IHRvcDowcHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmNvbnRlbnQgK1xyXG4gICAgICAgIFwiOyBcIiArXHJcbiAgICAgICAgdGhpcy5jc3NHdWlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyB0aGlzLmNzcy5idXR0b24gKyAnd2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyQ29udGVudCk7XHJcblxyXG4gICAgLy90aGlzLmlubmVyID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyAnKVxyXG4gICAgdGhpcy51c2VGbGV4ID0gdHJ1ZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/IFwiZGlzcGxheTpmbGV4OyBmbGV4LWZsb3c6IHJvdyB3cmFwO1wiIDogXCJcIjsgLy8nIGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnN0YXJ0OyBhbGlnbi1pdGVtczpzdGFydDtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYWxpZ24taXRlbXM6IGNlbnRlcjsnO1xyXG4gICAgdGhpcy5pbm5lciA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwid2lkdGg6MTAwJTsgbGVmdDowOyBcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuaW5uZXJDb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXIpO1xyXG5cclxuICAgIC8vIHNjcm9sbFxyXG4gICAgdGhpcy5zY3JvbGxCRyA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwicmlnaHQ6MDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSAxKSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7IGRpc3BsYXk6bm9uZTsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYmFja2dyb3VuZCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxCRyk7XHJcblxyXG4gICAgdGhpcy5zY3JvbGwgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJ1dHRvbiArXHJcbiAgICAgICAgXCI7IHJpZ2h0OjJweDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSA0KSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLnNjcm9sbEJHLmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsKTtcclxuXHJcbiAgICAvLyBib3R0b20gYnV0dG9uXHJcbiAgICB0aGlzLmJvdHRvbVRleHQgPSBvLmJvdHRvbVRleHQgfHwgW1wib3BlblwiLCBcImNsb3NlXCJdO1xyXG5cclxuICAgIGxldCByID0gY2MucmFkaXVzO1xyXG4gICAgdGhpcy5ib3R0b20gPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dCArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6YXV0bzsgYm90dG9tOjA7IGxlZnQ6MDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGhlaWdodDpcIiArXHJcbiAgICAgICAgdGhpcy5iaCArXHJcbiAgICAgICAgXCJweDsgbGluZS1oZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmJoIC0gNSkgK1xyXG4gICAgICAgIFwicHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTsgLy8gYm9yZGVyLXRvcDoxcHggc29saWQgJytUb29scy5jb2xvcnMuc3Ryb2tlKyc7Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5ib3R0b20pO1xyXG4gICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIC8vXHJcblxyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnBhcmVudCAhPT0gdW5kZWZpbmVkID8gby5wYXJlbnQgOiBudWxsO1xyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnRhcmdldCAhPT0gdW5kZWZpbmVkID8gby50YXJnZXQgOiB0aGlzLnBhcmVudDtcclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgPT09IG51bGwgJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5wYXJlbnQgPSBkb2N1bWVudC5ib2R5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcyAmJiB0aGlzLnBhcmVudCA9PT0gbnVsbCkgdGhpcy5pc0NhbnZhc09ubHkgPSB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XHJcbiAgICAgIG8udHJhbnNpdGlvbiA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGVpZ2h0IHRyYW5zaXRpb25cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9XHJcbiAgICAgIG8udHJhbnNpdGlvbiAhPT0gdW5kZWZpbmVkID8gby50cmFuc2l0aW9uIDogVG9vbHMudHJhbnNpdGlvbjtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24pIHNldFRpbWVvdXQodGhpcy5hZGRUcmFuc2l0aW9uLmJpbmQodGhpcyksIDEwMDApO1xyXG5cclxuICAgIHRoaXMuc2V0V2lkdGgoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5tYWtlQ2FudmFzKCk7XHJcblxyXG4gICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlRG93bih4LCB5KSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJHdWkudHJpZ2dlck1vdXNlRG93biBpcyBkZXByZWNhdGVkLCB1c2UgdHJpZ2dlck1vdXNlRG93blVWIGluc3RlYWRcIik7XHJcbiAgICAvKlxyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pOyovXHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VNb3ZlKCkge1xyXG4gICAgY29uc29sZS53YXJuKFwiR3VpLnRyaWdnZXJNb3VzZU1vdmUgaXMgZGVwcmVjYXRlZCwgdXNlIHRyaWdnZXJNb3VzZU1vdmVVViBpbnN0ZWFkXCIpO1xyXG4gICAgLypcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pOyovXHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcCh4LCB5KSB7XHJcblxyXG4gICAgY29uc29sZS53YXJuKFwiR3VpLnRyaWdnZXJNb3VzZVVwIGlzIGRlcHJlY2F0ZWQsIHVzZSB0cmlnZ2VyTW91c2VVcFVWIGluc3RlYWRcIik7XHJcbiAgICAvKlxyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTsqL1xyXG4gIH1cclxuXHJcbiAgLy8gR3VpLmpzXHJcbiAgdHJpZ2dlck1vdXNlRG93blVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgLy8gdSwgdiBlbiBbMCwxXSByZWxhdGl2b3MgYWwgcmVjdCBkZWwgR1VJXHJcbiAgICBjb25zdCB4ID0gdGhpcy56b25lLnggKyBNYXRoLnJvdW5kKHUgKiB0aGlzLnpvbmUudyk7XHJcbiAgICBjb25zdCB5ID0gdGhpcy56b25lLnkgKyBNYXRoLnJvdW5kKChmbGlwWSA/IDEgLSB2IDogdikgKiB0aGlzLnpvbmUuaCk7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcmRvd25cIixcclxuICAgICAgY2xpZW50WDogaXNOYU4oeCkgPyBudWxsIDogeCxcclxuICAgICAgY2xpZW50WTogaXNOYU4oeSkgPyBudWxsIDogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcFVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgY29uc3QgeCA9IHRoaXMuem9uZS54ICsgTWF0aC5yb3VuZCh1ICogdGhpcy56b25lLncpO1xyXG4gICAgY29uc3QgeSA9IHRoaXMuem9uZS55ICsgTWF0aC5yb3VuZCgoZmxpcFkgPyAxIC0gdiA6IHYpICogdGhpcy56b25lLmgpO1xyXG4gICAgXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcnVwXCIsXHJcbiAgICAgIGNsaWVudFg6IGlzTmFOKHgpID8gbnVsbCA6IHgsXHJcbiAgICAgIGNsaWVudFk6IGlzTmFOKHkpID8gbnVsbCA6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZVVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgY29uc3QgeCA9IHRoaXMuem9uZS54ICsgTWF0aC5yb3VuZCh1ICogdGhpcy56b25lLncpO1xyXG4gICAgY29uc3QgeSA9IHRoaXMuem9uZS55ICsgTWF0aC5yb3VuZCgoZmxpcFkgPyAxIC0gdiA6IHYpICogdGhpcy56b25lLmgpO1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJtb3ZlXCIsXHJcbiAgICAgIGNsaWVudFg6IGlzTmFOKHgpID8gbnVsbCA6IHgsXHJcbiAgICAgIGNsaWVudFk6IGlzTmFOKHkpID8gbnVsbCA6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0VG9wKHQsIGgpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS50b3AgPSB0ICsgXCJweFwiO1xyXG4gICAgaWYgKGggIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JjZUhlaWdodCA9IGg7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFkZFRyYW5zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmJvdHRvbS5zdHlsZS50cmFuc2l0aW9uID0gXCJ0b3AgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgLy90aGlzLmJvdHRvbS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBSb290cy5yZXNpemUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uYWRkVHJhbnNpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkRyYXcoKSB7fVxyXG5cclxuICBtYWtlQ2FudmFzKCkge1xyXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXHJcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFxyXG4gICAgICBcImNhbnZhc1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLnpvbmUudztcclxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyggdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCApXHJcbiAgfVxyXG5cclxuICBkcmF3KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5jYW52YXMgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuem9uZS53O1xyXG4gICAgbGV0IGggPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG4gICAgUm9vdHMudG9DYW52YXModGhpcywgdywgaCwgZm9yY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vXHJcblxyXG4gIGdldERvbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBub01vdXNlKCkge1xyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICB9XHJcblxyXG4gIHNldE1vdXNlKHV2LCBmbGlwID0gdHJ1ZSkge1xyXG4gICAgaWYgKGZsaXApXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgLSBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICAvL3RoaXMubW91c2Uuc2V0KCBtLngsIG0ueSApO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJzZXRNb3VzZSBcIiArIHV2LnggKyBcIiBcIiArIHV2LnkpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7RUFBQTtFQUNBO0VBQ0E7QUFDQTtBQUNZLFFBQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7RUFDQTtBQUNBO0VBQ0EsTUFBTSxDQUFDLEdBQUc7RUFDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7RUFDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7RUFDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0VBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSztFQUNiLEVBQUUsS0FBSyxFQUFFLEtBQUs7RUFDZCxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDYjtFQUNBLEVBQUUsVUFBVSxFQUFFLElBQUk7RUFDbEIsRUFBRSxVQUFVLEVBQUUsS0FBSztFQUNuQixFQUFFLFNBQVMsRUFBRSxLQUFLO0VBQ2xCLEVBQUUsWUFBWSxFQUFFLEtBQUs7RUFDckIsRUFBRSxPQUFPLEVBQUUsS0FBSztFQUNoQixFQUFFLG9CQUFvQixFQUFFLElBQUk7QUFDNUI7RUFDQSxFQUFFLFFBQVEsRUFBRSxDQUFDO0VBQ2IsRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUNiO0VBQ0E7RUFDQSxFQUFFLFdBQVcsRUFBRSxDQUFDLGFBQWEsQ0FBQztFQUM5QixFQUFFLFlBQVksRUFBRSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDO0VBQzNELEVBQUUsUUFBUSxFQUFFLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUM7QUFDM0Q7RUFDQSxFQUFFLGFBQWEsRUFBRSxJQUFJO0VBQ3JCLEVBQUUsT0FBTyxFQUFFLElBQUk7RUFDZixFQUFFLFFBQVEsRUFBRSxJQUFJO0FBQ2hCO0VBQ0EsRUFBRSxTQUFTLEVBQUUsTUFBTTtBQUNuQjtFQUNBLEVBQUUsS0FBSyxFQUFFLElBQUk7RUFDYixFQUFFLE1BQU0sRUFBRSxJQUFJO0VBQ2QsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQjtFQUNBLEVBQUUsV0FBVyxFQUFFLElBQUk7RUFDbkIsRUFBRSxXQUFXLEVBQUUsSUFBSTtFQUNuQixFQUFFLFFBQVEsRUFBRSxLQUFLO0VBQ2pCLEVBQUUsVUFBVSxFQUFFLEtBQUs7RUFDbkIsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLEVBQUUsUUFBUSxFQUFFLENBQUM7RUFDYixFQUFFLEdBQUcsRUFBRSxFQUFFO0VBQ1QsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNSLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztFQUNaLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNYO0VBQ0EsRUFBRSxVQUFVLEVBQUUsS0FBSztBQUNuQjtFQUNBLEVBQUUsTUFBTSxFQUFFLEtBQUs7RUFDZixFQUFFLE9BQU8sRUFBRSxFQUFFO0FBQ2I7RUFDQSxFQUFFLENBQUMsRUFBRTtFQUNMLElBQUksSUFBSSxFQUFFLElBQUk7RUFDZCxJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLElBQUksT0FBTyxFQUFFLEdBQUc7RUFDaEIsSUFBSSxHQUFHLEVBQUUsSUFBSTtFQUNiLElBQUksS0FBSyxFQUFFLENBQUM7RUFDWixHQUFHO0FBQ0g7RUFDQSxFQUFFLFFBQVEsRUFBRSxLQUFLO0FBQ2pCO0VBQ0EsRUFBRSxHQUFHLEVBQUUsSUFBSTtFQUNYLEVBQUUsV0FBVyxFQUFFLEtBQUs7QUFDcEI7RUFDQSxFQUFFLE9BQU8sRUFBRSxZQUFZO0VBQ3ZCLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRztFQUNuRCxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7RUFDOUMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ2pCLEdBQUc7QUFDSDtFQUNBLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0VBQ3BCO0VBQ0EsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqQixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakI7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztFQUN4QyxHQUFHO0FBQ0g7RUFDQSxFQUFFLFVBQVUsRUFBRSxZQUFZO0VBQzFCLElBQUksSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztFQUNoQyxJQUFJO0VBQ0osTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztFQUN6QixNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0VBQ3ZCLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7RUFDeEIsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztFQUN0QixNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0VBQ3RCLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7RUFDNUIsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0VBQy9CO0VBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQztFQUNsQixTQUFTLE9BQU8sS0FBSyxDQUFDO0VBQ3RCLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0VBQ3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQ2xCLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN4QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUN4QixLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0VBQzNCLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO0VBQ3ZCLEtBQUs7RUFDTCxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsVUFBVSxFQUFFLFlBQVk7RUFDMUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTztBQUMvQjtFQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUM1QjtFQUNBLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7RUFDaEMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN4QjtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7RUFDckIsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQzNELEtBQUssTUFBTTtFQUNYLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0VBQ3JDLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztFQUNwRSxJQUFJLElBQUksQ0FBQyxDQUFDLG9CQUFvQixFQUFFO0VBQ2hDLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUMvQyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDOUM7QUFDQTtFQUNBLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUM3QyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDN0MsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDO0VBQ0EsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztFQUNoRCxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0VBQzlDLEtBQUs7RUFDTCxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2RDtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7RUFDMUIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQSxFQUFFLFlBQVksRUFBRSxZQUFZO0VBQzVCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTztBQUNoQztFQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUM1QjtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7RUFDckIsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzFDLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsb0JBQW9CLEVBQUU7RUFDaEMsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ2xELE1BQU0sR0FBRyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNqRDtBQUNBO0VBQ0EsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ2hELE1BQU0sR0FBRyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNoRCxNQUFNLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUM7RUFDQSxNQUFNLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDNUMsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzFDLEtBQUs7RUFDTCxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25EO0VBQ0EsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztFQUMzQixHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sRUFBRSxZQUFZO0VBQ3RCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNO0VBQ3ZCLE1BQU0sQ0FBQyxDQUFDO0FBQ1I7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7RUFDaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQixNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDL0QsS0FBSztBQUNMO0VBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUN4QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0VBQ3pCLEdBQUc7QUFDSDtFQUNBLEVBQUUsR0FBRyxFQUFFLFlBQVk7RUFDbkIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQzdCLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0VBQ25CLEdBQUc7QUFDSDtFQUNBLEVBQUUsRUFBRSxFQUFFLFlBQVk7RUFDbEIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0VBQzVCO0VBQ0EsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLE1BQU0sRUFBRSxZQUFZO0VBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0VBQzVDLEdBQUc7QUFDSDtFQUNBLEVBQUUsV0FBVyxFQUFFLFVBQVUsS0FBSyxFQUFFO0VBQ2hDO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3pFO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2pDO0VBQ0EsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QjtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQixJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN0QjtFQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ25ELElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9DO0VBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3BFLFNBQVMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDckI7RUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDbEM7RUFDQSxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUM7RUFDdkUsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDO0FBQ3ZFO0VBQ0EsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQztFQUNuQixNQUFNLENBQUMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0VBQ3pCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN4RDtFQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztFQUMzRCxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7RUFDdkQsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO0VBQ3RDLE1BQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO0VBQ3JCO0VBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztFQUMxQixRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNuQixPQUFPO0VBQ1AsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztFQUMzQixLQUFLO0FBQ0w7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtFQUNoQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQzNCLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ3pDO0VBQ0E7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtFQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztFQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0VBQ3JCLE9BQU87QUFDUDtFQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0VBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7RUFDMUIsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtFQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7RUFDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUNqQyxRQUFRLENBQUMsQ0FBQyxPQUFP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QUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDekQsU0FBUztFQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxHQUFHLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxFQUFFO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsT0FBTyxHQUFHLENBQUM7RUFDMUMsYUFBYSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUM1RCxhQUFhLElBQUksRUFBRSxZQUFZLEtBQUssRUFBRTtFQUN0QyxZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUNuRixZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDdkcsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxHQUFHLEdBQUcsV0FBVyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLEdBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFB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TUFBTSxDQUFDLENBQUM7RUFDN0MsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksYUFBYSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ2xDO0VBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDO0VBQzdEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sR0FBRztFQUMxQyxRQUFRLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztFQUMxQixRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUc7RUFDdEMsVUFBVSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUM7RUFDakUsU0FBUztFQUNULFFBQVEsT0FBTyxRQUFRLENBQUM7RUFDeEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7RUFDOUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQzNDLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzlCO0VBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFCO0VBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzNCO0VBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDL0UsYUFBYSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlFO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7RUFDekIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDekQsUUFBUSxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3hDLFFBQVEsT0FBTyxDQUFDLENBQUM7RUFDakIsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDekI7RUFDQSxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzVFO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDMUI7RUFDQSxRQUFRLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pIO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7RUFDdEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3JDLFFBQVEsT0FBTyxDQUFDLENBQUM7RUFDakIsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwRCxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakM7RUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RELFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztFQUNsQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0VBQ2xFLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0VBQ2pKLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFFLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0VBQ3ZCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7RUFDM0QsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztFQUNqRSxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0VBQ2pFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNuQixTQUFTO0VBQ1QsUUFBUSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMzQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0M7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxQyxhQUFhO0VBQ2IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0VBQzNELFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLFlBQVksT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztFQUN6RyxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksWUFBWSxFQUFFLFdBQVcsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHO0FBQzlEO0VBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hEO0VBQ0EsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCO0VBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRztFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksT0FBTyxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ2hDO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFHO0VBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0VBQ3BKLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25DLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvRixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckg7RUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzdJLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDOUksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNuSSxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3RCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxLQUFLLEdBQUc7QUFDakM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFH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RyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUM1SCxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN6SDtFQUNBO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDdEUsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7RUFDQTtFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0VBQzFFLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzFFO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzSDtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDNUg7RUFDQTtBQUNBO0VBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDdEYsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEcsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0Y7RUFDQSxZQUFZLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQy9CO0VBQ0EsU0FBUyxNQUFNO0VBQ2Y7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDNUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7RUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVB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QUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNuRyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM5SSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM5SSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxvRkFBb0YsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMvSztBQUNBO0VBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFHO0VBQ0EsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUMxQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDckM7RUFDQSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFD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QUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDckQ7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVc7RUFDbkMsTUFBTSxDQUFDO0VBQ1AsTUFBTSxJQUFJLENBQUMsSUFBSTtFQUNmLFVBQVUsSUFBSSxDQUFDLEtBQUs7RUFDcEIsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07RUFDN0IsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07RUFDNUIsVUFBVSxLQUFLLENBQUMsTUFBTTtFQUN0QixLQUFLLENBQUM7QUFDTjtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUMzQztFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzNCO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDakQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0VBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEM7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN4QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDMUQsU0FBUyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0VBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2pEO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztBQUN2RDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztFQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7RUFDbEMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO0FBQ3hDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7RUFDcEMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0VBQzNC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QUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNoQyxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN2RCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDdEQsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pFO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNWO0VBQ0EsSUFBSSxRQUFRLElBQUksQ0FBQyxTQUFTO0VBQzFCLE1BQU0sS0FBSyxDQUFDO0VBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2QsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWixRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDaEIsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDakIsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWixRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDbEIsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWixRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7RUFDbkIsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWixRQUFRLENBQUMsR0FBRyxPQUFPLENBQUM7RUFDcEIsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWixRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7RUFDckIsUUFBUSxNQUFNO0VBQ2QsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQ2xELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDckMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzNDLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNkLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BDLElBQUk7RUFDSixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7RUFDM0UsTUFBTTtFQUNOLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ2pCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU87RUFDMUIsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7RUFDM0MsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDckIsTUFBTSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ3JFO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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QVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0VBQ2xCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBSztFQUNyQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3REO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUc7RUFDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtFQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRTtFQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFFO0FBQzlCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtFQUM1QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtFQUM5QixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzlELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxhQUFhLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLDJDQUEyQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUU7RUFDdk0sWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQ0FBcUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRTtFQUNwSyxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQztFQUN0QixZQUFZLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3JFLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFFO0VBQzFOLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFLO0VBQ2hDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEdBQUU7RUFDM0IsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFDO0VBQzlCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtFQUNoQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRTtFQUNyQixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRTtBQUMxQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLE1BQUs7RUFDMUIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDM0Q7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUM7RUFDaEMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQzdCO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDekI7RUFDQSxZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDbEM7RUFDQSxnQkFBZ0IsUUFBUSxDQUFDO0FBQ3pCO0VBQ0Esb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07RUFDckYsb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07RUFDM0Ysb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU07RUFDMUYsb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07QUFDdkY7RUFDQSxpQkFBaUI7QUFDakI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDakU7RUFDQSxhQUFhLE1BQU07QUFDbkI7RUFDQSxnQkFBZ0IsUUFBUSxDQUFDO0FBQ3pCO0VBQ0Esb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtFQUNoSCxvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNO0VBQy9HLG9CQUFvQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU07RUFDOUcsb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTTtBQUNwSDtFQUNBLGlCQUFpQjtBQUNqQjtFQUNBLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBSztFQUNwRCxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDbkU7RUFDQSxhQUFhO0FBQ2I7RUFDQSxZQUFZLE1BQU0sR0FBRyxLQUFJO0FBQ3pCO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLE1BQU07QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDbkIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztFQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUc7RUFDekMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzlCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSTtFQUNoQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUk7RUFDaEMsU0FBUyxNQUFNO0VBQ2YsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSTtFQUN0QyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxLQUFJO0VBQ3hDLFNBQVM7RUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQzNJTyxNQUFNLE1BQU0sU0FBUyxLQUFLLENBQUM7QUFDbEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztFQUN4QixRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBSztBQUN4RDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFHO0VBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUU7QUFDakQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDdkM7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxFQUFDO0VBQ25DLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUU7RUFDL0IsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBQztBQUNqQztFQUNBLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQzNFO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7RUFDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7RUFDN0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUM7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFNO0VBQ3JDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0VBQ3JCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFFO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNsQztFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0M7RUFDQSxZQUFZLEdBQUcsR0FBRyxNQUFLO0VBQ3ZCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsS0FBSTtBQUMvRTtFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRTtFQUNsTSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMs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QUFFLENBQUM7RUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3pCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFFO0VBQy9CO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQztBQUN2QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0VBQ3JCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSTtFQUNsRDtFQUNBLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFDO0VBQzVELFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQjtFQUNBO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7RUFDckUsU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRDtFQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQy9DLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2hEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDcFBPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFLO0VBQ3pDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUM7RUFDakMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUk7QUFDdEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBSztFQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUM7RUFDMUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFFO0FBQy9CO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFLO0VBQ2hDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSTtBQUM5QjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsR0FBRTtBQUM5QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRTtBQUNuQztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSTtFQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0VBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3BDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTTtFQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxTQUFRO0VBQ3JELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0VBQ3pCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFFO0FBQ3hCO0VBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFDO0VBQ3hCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0VBQ3RCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0FBQ2xJO0VBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFFO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0VBQ3pELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtFQUMzRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUM1RjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtFQUNuQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztBQUMvQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9B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LENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztFQUMxRSxhQUFhLE9BQU8sVUFBVSxDQUFDO0FBQy9CO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7RUFDdkIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztFQUN6QixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7RUFDOUIsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9EO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ2hDO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDekMsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEU7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNyQyxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvQztFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDbkMsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuQztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztFQUM1QyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztFQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDL0IsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLFVBQVUsR0FBRztFQUNsQztFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDckQ7RUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN4RCxhQUFhLE1BQU0sS0FB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QUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hDO0VBQ0EsU0FBUyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzlDLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNuQztFQUNBLFNBQVMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDakMsU0FBUyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ3JDO0VBQ0EsU0FBUyxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDL0QsU0FBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztFQUNoRCxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUU7RUFDN0IsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ2xDLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BDLFNBQVMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRztFQUN4QixPQUFPLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ25DLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDdkMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQ3hDLGVBQWUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDbkQ7RUFDQSxPQUFPLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3hELE9BQU8sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMvQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM5QixPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2QyxPQUFPO0FBQ1A7RUFDQSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDcEQ7RUFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUM1QyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzNFLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNqQztFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQ7RUFDQSxTQUFTO0VBQ1QsS0FBSztFQUNMLElBQUk7RUFDSixHQUFHO0FBQ0g7RUFDQSxFQUFFO0FBQ0Y7RUFDQTtBQUNBO0VBQ0EsQ0FBQyxTQUFTLENBQUMsR0FBRztBQUNkO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztFQUNqRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtFQUNsQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDbEQs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LEtBQUssT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3hELEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDdkUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztFQUMzRSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdDO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDZjtFQUNBLEVBQUUsSUFBSSxDQUFDLFlBQVksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxhQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdELGFBQWEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDNUI7RUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUM3QixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3BCO0VBQ0EsS0FBSyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3RDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxNQUFNLEVBQUU7QUFDMUM7RUFDQSxTQUFTLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztFQUM1QixTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTTtFQUMxQixTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQzlDO0VBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEM7RUFDQSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUN2QixNQUFNO0VBQ04sS0FBSyxPQUFPLElBQUksQ0FBQztBQUNqQjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0VBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN0QyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDOUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ3pCLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFdBQVcsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRTtFQUNqQixFQUFFLElBQUksQ0FBQyxHQUFHLE1BQUs7QUFDZjtFQUNBLEtBQWMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTztFQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNuQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBLEtBQUssSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzFDO0VBQ0EsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN0QjtFQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzVCLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDN0MsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN0QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDN0MsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDO0VBQ0EsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEM7RUFDQTtFQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEU7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QztFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUUsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckQ7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQ1Y7RUFDQTtFQUNBLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25CO0VBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BCO0VBQ0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ2pDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNoQztFQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNoQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQztFQUM1RDtFQUNBO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPO0FBQ2hDO0FBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pCO0VBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUM7RUFDM0QsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUU7QUFDOUM7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7RUFDOUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtFQUNuQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQ3BDO0VBQ0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbkM7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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDdkU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNsRSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztFQUNsRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztFQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQy9EO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyx3REFBd0QsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztFQUM3SztBQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsb0NBQW9DLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFD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QUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0VBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0VBQ3BDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0VBQ3BDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDM0I7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDbkQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztFQUNuRSxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUMzRDtFQUNBLFFBQVEs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QztBQUNyQztFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNyRSxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7RUFDbEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFEO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztFQUN4RSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzlCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDakMsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQzlCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMs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QUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4RCxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0M7RUFDQSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDdEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN0RixjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQzdEO0VBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUg7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3JCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEI7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7RUFDckMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQztFQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDO0VBQzlDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUk7RUFDOUMsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdB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QUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ2hFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEM7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRTtFQUM1QixRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQztFQUNqRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDbEI7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUk7QUFDOUI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0VBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUU7RUFDOUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDdkM7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBQztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQ2xUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsS0FBSyxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUk7RUFDckIsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUM7RUFDcEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7RUFDekIsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0VBQ2xCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQjtFQUNBLEtBQUs7RUFDTDtFQUNBOztFQ1RPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSTtBQUM5QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0VBQ3JCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUM7RUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDekIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7QUFDM0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBQztFQUNwQztBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7QUFDNUM7RUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzlCO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7RUFDM0IsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLG9DQUFvQyxHQUFHLEdBQUU7QUFDL0U7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLDRDQUE0QyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUM7RUFDNUgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQzVLO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFJO0VBQzFEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FB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LENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZEO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0VBQzFDLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztBQUNsRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQzVCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztFQUM3QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0VBQ3pDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUk7QUFDNUQ7RUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtB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QUMsQ0FBQztFQUM1RSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUU7RUFDQSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdkU7RUFDQSxhQUFhO0FBQ2I7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzdCO0FBQ0E7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDcEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0VBQ2xFLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRTtFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUM1QjtFQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVELFNBQVM7QUFDVDtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDeEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxD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LEtBQUk7RUFDMUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQzdCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFJO0VBQ3hCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUU7RUFDM0IsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RDtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDdEMsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDaEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7RUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDNUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzVDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMvQixTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHO0VBQzlCO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNyRDtFQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztFQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYTtFQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztFQUN4QjtFQUNBLFNBQVM7RUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3pELFFBQVEsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQzVDLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQzFDO0FBQ0E7RUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkIsWUFBWSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQzVDLFlBQVksSUFBSSxHQUFHLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxLQUFLLENBQUM7RUFDckQsU0FBUyxNQUFNO0VBQ2YsWUFBWSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNyRCxZQUFZLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQzFCLFNBQVM7QUFDVDtFQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRztBQUMzQztFQUNBLFlBQVksQ0FBQyxHQUFHLFVBQVUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDMUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQy9DLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUMvQyxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDaEQsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQ2hELFlBQVksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQzlEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVEO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDcEMsUUFBUSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNyRTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDakM7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEMsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0VBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDckY7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7RUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25DLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNwQyxZQUFZLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqSTtFQUNBLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO0VBQ25LLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDekQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM3QjtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQ2xRTyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUM7QUFDaEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFLO0FBQ2hDO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7RUFDakMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0VBQ3JDO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUN6RCxRQUFRLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUM1QztBQUNBO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztBQUN0QztFQUNBO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEdBQUU7RUFDbkMsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksTUFBSztFQUMzQyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxNQUFLO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFRO0VBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFNO0VBQzVELFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxXQUFVO0FBQ3pFO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdB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QUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUNsRSxhQUFhO0VBQ2IsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDM0I7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsRUFBQztBQUNoRDtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNwQixRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUMxQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQzVCO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7RUFDckMsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUNyQjtFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztFQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7RUFDekMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3pDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3JELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2xEO0VBQ0EsU0FBUyxNQUFNO0VBQ2YsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDcEQsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDZDQUE2QyxDQUFDLENBQUM7RUFDdkcsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDbEM7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQ3pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDN0MsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFB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QUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7RUFDckIsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDeEQsU0FBUyxNQUFNO0VBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDeEQsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwQztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtFQUNBLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFDO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMs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RUFBRSxDQUFDLEdBQUc7QUFDMUI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0VBQ3RCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztFQUN2RSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQUs7RUFDdEMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSTtFQUNoRCxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFJO0VBQ2xELFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUk7RUFDM0MsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBQztFQUMzQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0VBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNO0VBQ3JCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUU7RUFDNUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSTtFQUN6QyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENB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QVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQzVELFFBQVEsTUFBTTtFQUNkLEtBQUs7RUFDTCxHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7RUFDYixJQUFJLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUQ7RUFDQSxJQUFJLElBQUksT0FBTztFQUNmLE1BQU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUU7RUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztFQUMzQztBQUNBO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDdEQsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM1RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDakU7RUFDQSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUN4QixHQUFHO0FBQ0g7RUFDQSxFQUFFLEtBQUssR0FBRztFQUNWLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xCO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDOUIsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEI7RUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDckIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNyRCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9CO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuQjtFQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDcEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNwQztFQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENB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LFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNyQixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUM5QixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0VBQ3ZDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEw7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0I7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzlDO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzlCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEdBQUc7RUFDZDtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Y7RUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQjtFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDNUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtFQUM1QztFQUNBLFlBQVksUUFBUSxDQUFDO0FBQ3JCO0VBQ0EsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxNQUFNO0VBQy9GLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07RUFDcEcsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtFQUN4RyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO0FBQ3BHO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsWUFBWSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0VBQ3RCO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekM7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUNuQztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekM7RUFDQSxLQUFLO0FBQ0w7QUFDQTtFQUNBOztFQ3BITyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUM7QUFDaEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRTtFQUN0QixZQUFZLElBQUksQ0FBQyxDQUFDLE1BQU0sWUFBWSxLQUFLLEVBQUU7RUFDM0MsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07RUFDdEMsYUFBYSxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sWUFBWSxNQUFNLEVBQUU7RUFDbkQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDM0MsYUFBYSxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sWUFBWSxNQUFNLEVBQUU7RUFDbkQsZ0JBQWdCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE9BQU07RUFDekMsZ0JBQWdCLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDcEUsYUFBYTtFQUNiLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUN0QztBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFLO0VBQ2pELFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFFO0VBQ2xELFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvQztFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQztBQUNyQztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDdEIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztFQUN2QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDeEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFFO0FBQ3JGO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDbkM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDdEo7RUFDQSxRQUFXLElBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUk7QUFDdkM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFDO0VBQ3JCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0VBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFJO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztFQUMxQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN2QjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0M7RUFDQSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ3ZDLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsc0JBQXNCLENBQUM7RUFDdEQsWUFBWSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRDtFQUNBLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDO0VBQ3JDLGdCQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxzQkFBc0IsQ0FBQztBQUMxRDtFQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDcEM7RUFDQSxvQkFBb0IsR0FBRyxHQUFHLEtBQUssQ0FBQztFQUNoQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3hGO0VBQ0Esb0JBQW9CLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDO0VBQ3hELG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLHlDQUF5QyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQ3RRLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0VBQ3JFLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2xFLG9CQUFvQixDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDakQsb0JBQW9CLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEM7RUFDQSxvQkFBb0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO0VBQ3hDLG9CQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDckM7RUFDQSxpQkFBaUIsTUFBTTtBQUN2QjtFQUNBLG9CQUFvQixDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsRUFBRSxLQUFLLEdBQUU7RUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsaUVBQWdFO0VBQ3pMLG9CQUFvQixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRTtBQUN2QztFQUNBLGlCQUFpQjtBQUNqQjtFQUNBLGdCQUFnQixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksY0FBYyxDQUFDO0VBQzVELHFCQUFxQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUM7RUFDdEQ7RUFDQSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7QUFDcEI7RUFDQSxhQUFhO0VBQ2IsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxPQUFNO0FBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDakQ7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUk7RUFDeEI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDM0IsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ25CLFFBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNwQixTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNwQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztFQUM1RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMvQixZQUFZLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLFlBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3RDLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxFQUFFLENBQUM7QUFDbEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEtBQUs7QUFDdkM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztFQUMzQixRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtFQUM3QixZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFDO0VBQzlD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TUFBTSxHQUFFO0VBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzNCO0VBQ0EsS0FBSztBQUNMO0FBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUc7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUM3QztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDO0VBQzdELFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQzNDO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDO0VBQ2hFLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRztFQUMxQixZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDO0VBQ2hFLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQztFQUN0QixTQUFTLE1BQU07RUFDZixZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxHQUFH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Q0FBQztFQUMvQixRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDL0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUU7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7RUFDbEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNuRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztFQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3JFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDOUY7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUM7RUFDQTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztFQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7RUFDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsU0FBUztBQUNUO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsd0JBQXdCLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzNJLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUU7QUFDakM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUM5QyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtFQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNoRDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ3JFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDdEY7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBRztBQUN2QjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtFQUNuQixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUU7QUFDdkI7RUFDQSxLQUFLO0VBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztFQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDakQ7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxPQUFPLENBQUM7RUFDN0QsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztFQUMxRSxhQUFhLE9BQU8sS0FBSyxDQUFDO0FBQzFCO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFDMUM7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQy9CLFlBQVksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNoQyxZQUFZLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQyxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFFO0VBQzFELFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDekU7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQy9CO0VBQ0EsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0VBQ2xCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNsQjtFQUNBLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0VBQ3ZELFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3ZEO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUNqQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtFQUNBLFFBQVEsUUFBUSxJQUFJO0VBQ3BCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDMUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7RUFDM0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUM7RUFDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7RUFDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7RUFDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDOUQ7RUFDQSxZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztFQUNoRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztFQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztFQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztFQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztFQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRTtFQUNwRTtFQUNBLFlBQVksTUFBTTtFQUNsQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHO0FBQy9CO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3REO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFNO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztFQUN4RSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRztBQUMvQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDdkcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFFO0FBQ3BIO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMxQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBOztFQ3JSQTtBQUlBO0VBQ08sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0VBQ3BDLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7RUFDckI7RUFD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TSxDQUFDO0FBQzVDO0VBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDL0MsR0FBRyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtFQUMzQixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDNUMsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNwQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNwRCxJQUFJLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztFQUNyQixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUMvQyxLQUFLLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsS0FBSyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDakQsS0FBSyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUMxQyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxF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LENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN4QjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsUUFBUSxJQUFJO0FBQ3BCO0VBQ0EsWUFBWSxLQUFLLE1BQU0sQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDaEUsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ3BELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUN4RCxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDbEQsWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQzlDLFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNsRCxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDbEQsWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ3hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNoRCxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDaEQsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENB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LENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZjtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMs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QUUsT0FBTztBQUNyQztFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDeEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDOUQsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0VBQ3RDLEdBQUc7QUFDSDtFQUNBO0FBQ0E7RUFDQSxFQUFFLE1BQU0sR0FBRztFQUNYLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3JCLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFO0VBQzVCLElBQUksSUFBSSxJQUFJO0VBQ1osTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7RUFDcEIsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDNUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7RUFDbEUsT0FBTyxDQUFDO0VBQ1I7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztFQUNwQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUM1QyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMs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QUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkQsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDOUU7RUFDQSxRQUFRLE1BQU07RUFDZCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ25DLElBQUksSUFBSSxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQztFQUNBLElBQUksSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDeEMsSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQztFQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzVCLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7RUFDckIsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7RUFDL0IsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDekIsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUUxQixNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0VBQzlCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUU7RUFDckIsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENB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LElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ2xFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNuRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6RDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVO0VBQzNDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0VBQzFELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdkMsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLEdBQUc7RUFDWCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0VBQzVCLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNkLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2xELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUTtFQUNyQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzVFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDN0MsR0FBRztBQUNIO0VBQ0EsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFO0VBQ2xCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7RUFDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ2hCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzFCLEtBQUs7RUFDTCxHQUFHO0VBQ0g7Ozs7Ozs7Ozs7Ozs7OyJ9 diff --git a/build/uil.module.js b/build/uil.module.js index 34efc05..e92b45c 100644 --- a/build/uil.module.js +++ b/build/uil.module.js @@ -293,6 +293,10 @@ const R = { if (R.ID.isCanvasOnly) { e.clientX = R.ID.mouse.x; e.clientY = R.ID.mouse.y; + } else if (R.ID.isCanvas) { + // NUEVO: si es canvas con parent, usar mouse virtual + offset del GUI + e.clientX = R.ID.zone.x + R.ID.mouse.x; + e.clientY = R.ID.zone.y + R.ID.mouse.y; } //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 @@ -8820,785 +8824,827 @@ const autoType = function ( v, o ) { */ class Gui { - constructor(o = {}) { - this.isGui = true; + constructor(o = {}) { + this.isGui = true; - this.name = "gui"; + this.name = "gui"; - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors); - else this.colors = Tools.defineColor(o); + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); - //this.cleanning = false + //this.cleanning = false - // style - this.css = Tools.cloneCss(); + // style + this.css = Tools.cloneCss(); - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") - ? o.addDOMEventListeners - : true; + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; - this.callback = o.callback === undefined ? null : o.callback; + this.callback = o.callback === undefined ? null : o.callback; - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - this.cn = ""; + this.cn = ""; - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; - this.size.h = this.size.h < 11 ? 11 : this.size.h; + this.size.h = this.size.h < 11 ? 11 : this.size.h; - // local mouse and zone - this.local = new V2().neg(); - this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; - // virtual mouse - this.mouse = new V2().neg(); + // virtual mouse + this.mouse = new V2().neg(); - this.h = 0; - //this.prevY = -1; - this.sw = 0; + this.h = 0; + //this.prevY = -1; + this.sw = 0; - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; - this.autoResize = o.autoResize === undefined ? true : o.autoResize; + this.autoResize = o.autoResize === undefined ? true : o.autoResize; - // default position - this.isCenter = o.center || false; - this.cssGui = - o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; - this.isNewTarget = false; + this.isNewTarget = false; - let cc = this.colors; + let cc = this.colors; - this.content = Tools.dom( - "div", - this.css.basic + - " width:0px; height:auto; top:0px; background:" + - cc.content + - "; " + - this.cssGui - ); + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); - this.innerContent = Tools.dom( - "div", - this.css.basic + - "width:100%; top:0; left:0; height:auto; overflow:hidden;" - ); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom( - "div", - this.css.basic + flexible + "width:100%; left:0; " - ); - this.innerContent.appendChild(this.inner); + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); - // scroll - this.scrollBG = Tools.dom( - "div", - this.css.basic + - "right:0; top:0; width:" + - (this.size.s - 1) + - "px; height:10px; display:none; background:" + - cc.background + - ";" - ); - this.content.appendChild(this.scrollBG); + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); - this.scroll = Tools.dom( - "div", - this.css.basic + - "background:" + - cc.button + - "; right:2px; top:0; width:" + - (this.size.s - 4) + - "px; height:10px;" - ); - this.scrollBG.appendChild(this.scroll); + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; - let r = cc.radius; - this.bottom = Tools.dom( - "div", - this.css.txt + - "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + - r + - "px; border-bottom-left-radius:" + - r + - "px; justify-content:center; height:" + - this.bh + - "px; line-height:" + - (this.bh - 5) + - "px; color:" + - cc.text + - ";" - ); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - this.bottom.style.background = cc.background; - - // - - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; - - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; - if (this.parent !== null) this.parent.appendChild(this.content); + // - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } - // height transition - this.transition = - o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + if (this.parent !== null) this.parent.appendChild(this.content); - this.setWidth(); + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - if (this.isCanvas) this.makeCanvas(); + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } - Roots.add(this); - } + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } + this.setWidth(); - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN, - }); - } + if (this.isCanvas) this.makeCanvas(); - triggerMouseUp(x, y) { - /* - - clientX,clientY are no used when isCanvas==true - */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } + Roots.add(this); + } - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); + triggerMouseDown(x, y) { + console.warn("Gui.triggerMouseDown is deprecated, use triggerMouseDownUV instead"); + /* + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + });*/ + } - Roots.needReZone = true; - } + triggerMouseMove() { + console.warn("Gui.triggerMouseMove is deprecated, use triggerMouseMoveUV instead"); + /* + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + });*/ + } - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = - "height " + this.transition + "s ease-out"; - this.content.style.transition = - "height " + this.transition + "s ease-out"; - this.bottom.style.transition = - "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } + triggerMouseUp(x, y) { + + console.warn("Gui.triggerMouseUp is deprecated, use triggerMouseUpUV instead"); + /* + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + });*/ + } - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } + // Gui.js + triggerMouseDownUV(u, v, { flipY = true } = {}) { + // u, v en [0,1] relativos al rect del GUI + const x = this.zone.x + Math.round(u * this.zone.w); + const y = this.zone.y + Math.round((flipY ? 1 - v : v) * this.zone.h); + Roots.handleEvent({ + type: "pointerdown", + clientX: isNaN(x) ? null : x, + clientY: isNaN(y) ? null : y, + delta: 0, + key: null, + keyCode: NaN, + }); + } - // ---------------------- - // CANVAS - // ---------------------- + triggerMouseUpUV(u, v, { flipY = true } = {}) { + const x = this.zone.x + Math.round(u * this.zone.w); + const y = this.zone.y + Math.round((flipY ? 1 - v : v) * this.zone.h); + + Roots.handleEvent({ + type: "pointerup", + clientX: isNaN(x) ? null : x, + clientY: isNaN(y) ? null : y, + delta: 0, + key: null, + keyCode: NaN, + }); + } - onDraw() {} + triggerMouseMoveUV(u, v, { flipY = true } = {}) { + const x = this.zone.x + Math.round(u * this.zone.w); + const y = this.zone.y + Math.round((flipY ? 1 - v : v) * this.zone.h); + Roots.handleEvent({ + type: "pointermove", + clientX: isNaN(x) ? null : x, + clientY: isNaN(y) ? null : y, + delta: 0, + key: null, + keyCode: NaN, + }); + } - makeCanvas() { - this.canvas = document.createElementNS( - "http://www.w3.org/1999/xhtml", - "canvas" - ); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); - //console.log( this.canvas.width, this.canvas.height ) - } + Roots.needReZone = true; + } - draw(force) { - if (this.canvas === null) return; + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } - ////// + // ---------------------- + // CANVAS + // ---------------------- - getDom() { - return this.content; - } + onDraw() {} - noMouse() { - this.mouse.neg(); - } + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - setMouse(uv, flip = true) { - if (flip) - this.mouse.set( - Math.round(uv.x * this.canvas.width), - this.canvas.height - Math.round(uv.y * this.canvas.height) - ); - else - this.mouse.set( - Math.round(uv.x * this.canvas.width), - Math.round(uv.y * this.canvas.height) - ); - //this.mouse.set( m.x, m.y ); + //console.log( this.canvas.width, this.canvas.height ) + } - console.log("setMouse " + uv.x + " " + uv.y); - } + draw(force) { + if (this.canvas === null) return; - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } + ////// - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } + getDom() { + return this.content; + } - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } + noMouse() { + this.mouse.neg(); + } - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); - onChange(f) { - this.callback = f || null; - return this; - } + //console.log("setMouse " + uv.x + " " + uv.y); + } - // ---------------------- - // STYLES - // ---------------------- + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } - mode(n) { - let needChange = false; - let cc = this.colors; - - if (n !== this.cn) { - this.cn = n; - - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } - needChange = true; - } + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } - return needChange; - } + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } - // ---------------------- - // TARGET - // ---------------------- + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } + onChange(f) { + this.callback = f || null; + return this; + } - this.proto = null; - this.current = -1; + // ---------------------- + // STYLES + // ---------------------- - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + mode(n) { + let needChange = false; + let cc = this.colors; - Roots.cursor(); - return true; - } + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } - // ---------------------- - // ZONE TEST - // ---------------------- + needChange = true; + } - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; + return needChange; + } - this.isReset = false; + // ---------------------- + // TARGET + // ---------------------- - let name = ""; + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + this.proto = null; + this.current = -1; - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; - else name = l.x > s ? "scroll" : "content"; + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - return name; - } + Roots.cursor(); + return true; + } - // ---------------------- - // EVENTS - // ---------------------- + // ---------------------- + // ZONE TEST + // ---------------------- - handleEvent(e) { - //if( this.cleanning ) return + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; + this.isReset = false; - let change = false; - let protoChange = false; + let name = ""; - let name = this.testZone(e); + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } + return name; + } - if (!name) return; + // ---------------------- + // EVENTS + // ---------------------- - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; + handleEvent(e) { + //if( this.cleanning ) return - if (Roots.isMobile && type === "mousedown") - this.getNext(e, change); + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; - if (this.proto) protoChange = this.proto.handleEvent(e); + let change = false; + let protoChange = false; - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) - change = this.onWheel(e); + let name = this.testZone(e); - if (!Roots.lock) { - this.getNext(e, change); - } + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) - this.update(e.clientY - this.zone.y - this.sh * 0.5); + if (!name) return; - break; - } + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - if (this.isDown) change = true; - if (protoChange) change = true; + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); - if (type === "keyup") change = true; - if (type === "keydown") change = true; + if (this.proto) protoChange = this.proto.handleEvent(e); - if (change) this.draw(); - } + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); + if (!Roots.lock) { + this.getNext(e, change); + } - if (next !== this.current) { - this.clearTarget(); - this.current = next; - this.isNewTarget = true; - } + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } + break; + } - // ---------------------- - // RESET - // ---------------------- + if (this.isDown) change = true; + if (protoChange) change = true; - reset(force) { - if (this.isReset) return; + if (type === "keyup") change = true; + if (type === "keydown") change = true; - //this.resetItem(); + if (change) this.draw(); + } - this.mouse.neg(); - this.isDown = false; + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); + if (next !== this.current) { + this.clearTarget(); + this.current = next; + this.isNewTarget = true; + } - if (r || r2) this.draw(true); + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } - this.isReset = true; + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } - //Roots.lock = false; - } + // ---------------------- + // RESET + // ---------------------- - // ---------------------- - // ADD NODE - // ---------------------- + reset(force) { + if (this.isReset) return; - add() { - //if(this.cleanning) this.cleanning = false + //this.resetItem(); - let a = arguments; - let ontop = false; + this.mouse.neg(); + this.isDown = false; - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); - else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } + if (r || r2) this.draw(true); - let u = add.apply(this, a); + this.isReset = true; - if (u === null) return; + //Roots.lock = false; + } - if (ontop) this.uis.unshift(u); - else this.uis.push(u); + // ---------------------- + // ADD NODE + // ---------------------- - this.calc(); + add() { + //if(this.cleanning) this.cleanning = false - this.isEmpty = false; + let a = arguments; + let ontop = false; - return u; - } + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; - // remove one node + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } - remove(n) { - if (n.dispose) n.dispose(); - } + let u = add.apply(this, a); - // call after uis clear + if (u === null) return; - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } + if (ontop) this.uis.unshift(u); + else this.uis.push(u); - // clear all gui + this.calc(); - empty() { - //this.cleanning = true + this.isEmpty = false; - //this.close(); + return u; + } - let i = this.uis.length, - item; + // remove one node - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } + remove(n) { + if (n.dispose) n.dispose(); + } - this.uis = []; - this.isEmpty = true; - this.calc(); - } + // call after uis clear - clear() { - this.empty(); - } + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } - clear2() { - setTimeout(this.empty.bind(this), 0); - } + // clear all gui - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } + empty() { + //this.cleanning = true - // ---------------------- - // ITEMS SPECIAL - // ---------------------- + //this.close(); - resetItem() { - if (!this.isItemMode) return; + let i = this.uis.length, + item; - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } - setItem(name) { - if (!this.isItemMode) return; + this.uis = []; + this.isEmpty = true; + this.calc(); + } - name = name || ""; - this.resetItem(); + clear() { + this.empty(); + } - if (!name) { - this.update(0); - return; - } + clear2() { + setTimeout(this.empty.bind(this), 0); + } - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) - this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } - // ---------------------- - // SCROLL - // ---------------------- + // ---------------------- + // ITEMS SPECIAL + // ---------------------- - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; + resetItem() { + if (!this.isItemMode) return; - if (b) { - this.total = this.h; + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } - this.maxView = this.maxHeight; + setItem(name) { + if (!this.isItemMode) return; - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; + name = name || ""; + this.resetItem(); - this.range = this.maxView - this.sh; + if (!name) { + this.update(0); + return; + } - this.oy = Tools.clamp(this.oy, 0, this.range); + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } + // ---------------------- + // SCROLL + // ---------------------- - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; - update(y) { - y = Tools.clamp(y, 0, this.range); + if (b) { + this.total = this.h; - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } + this.maxView = this.maxHeight; - // ---------------------- - // RESIZE FUNCTION - // ---------------------- + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } + this.range = this.maxView - this.sh; - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } + this.oy = Tools.clamp(this.oy, 0, this.range); - setHeight() { - if (this.tmp) clearTimeout(this.tmp); + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } - this.zone.h = this.bh; - this.isScroll = false; + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } - if (this.isOpen) { - this.h = this.calcUis(); + update(y) { + y = Tools.clamp(y, 0, this.range); - let hhh = this.forceHeight - ? this.forceHeight + this.zone.y - : window.innerHeight; + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } - this.maxHeight = hhh - this.zone.y - this.bh; + // ---------------------- + // RESIZE FUNCTION + // ---------------------- - let diff = this.h - this.maxHeight; + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } - this.upScroll(this.isScroll); + setHeight() { + if (this.tmp) clearTimeout(this.tmp); - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; + this.zone.h = this.bh; + this.isScroll = false; - if (this.forceHeight && this.lockHeight) - this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } + if (this.isOpen) { + this.h = this.calcUis(); - rezone() { - Roots.needReZone = true; - } + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; - setWidth(w) { - if (w) this.zone.w = w; + this.maxHeight = hhh - this.zone.y - this.bh; - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) - this.content.style.marginLeft = - -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } + let diff = this.h - this.maxHeight; - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + + this.upScroll(this.isScroll); + + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + + rezone() { + Roots.needReZone = true; + } + + setWidth(w) { + if (w) this.zone.w = w; + + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } } export { Files, Gui, REVISION, Tools, add }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfSBlbHNlIGlmIChSLklELmlzQ2FudmFzKSB7XHJcbiAgICAgICAgLy8gTlVFVk86IHNpIGVzIGNhbnZhcyBjb24gcGFyZW50LCB1c2FyIG1vdXNlIHZpcnR1YWwgKyBvZmZzZXQgZGVsIEdVSVxyXG4gICAgICAgIGUuY2xpZW50WCA9IFIuSUQuem9uZS54ICsgUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQuem9uZS55ICsgUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gXCIuLi9jb3JlL1Jvb3RzLmpzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcblx0Y29uc3RydWN0b3IobyA9IHt9KSB7XHJcblx0XHQvLyBBUEkgcMO6YmxpY2EgZXNwZXJhZGE6XHJcblx0XHQvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KVxyXG5cdFx0Ly8gby5mb2N1c2VkIChib29sKSwgby5mb2N1c1BhdGggKGFycmF5KSwgby5mb2N1c0xldmVsIChudW1iZXIpXHJcblx0XHQvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcblx0XHRvLnNlbGVjdGFibGUgPSB0cnVlO1xyXG5cdFx0by5uYW1lID0gby5uYW1lIHx8IFwiVHJlZUxpc3RcIjtcclxuXHJcblx0XHRzdXBlcihvKTtcclxuXHRcdHRoaXMuZW5hYmxlSG92ZXIgPSBvLmVuYWJsZUhvdmVyICE9PSBmYWxzZTtcclxuXHJcblx0XHQvLyBEYXRvcyAmIGVzdGFkb1xyXG5cdFx0dGhpcy50cmVlID0gby50cmVlIHx8IHt9O1xyXG5cdFx0dGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNlZCA9ICEhby5mb2N1c2VkO1xyXG5cdFx0dGhpcy5mb2N1c1BhdGggPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09IFwibnVtYmVyXCIgPyBvLmZvY3VzTGV2ZWwgOiAtMTtcclxuXHJcblx0XHR0aGlzLnRhYkluZGV4ID0gby50YWJJbmRleCA/PyBudWxsO1xyXG5cdFx0dGhpcy5pdGVtSW5kZXggPSBvLml0ZW1JbmRleCA/PyBudWxsO1xyXG5cclxuXHRcdC8vIENhbGxiYWNrXHJcblx0XHR0aGlzLmNoYW5nZUNiID1cclxuXHRcdFx0dHlwZW9mIG8ub25DaGFuZ2UgPT09IFwiZnVuY3Rpb25cIiA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcblx0XHQvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuXHRcdHRoaXMubGluZUggPSB0aGlzLmg7IC8vIGFsdG8gZGUgVU5BIGZpbGFcclxuXHRcdHRoaXMubGV2ZWxHYXAgPSB0aGlzLmNvbG9ycy5zeSB8fCAyOyAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcblx0XHR0aGlzLmxlYWZNYXggPSAwOyAvLyBzZSBjYWxjdWxhIGVuIHJTaXplKClcclxuXHJcblx0XHQvLyBNb2RlbG8gdmlzdWFsXHJcblx0XHR0aGlzLmxldmVscyA9IFtdOyAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuXHRcdHRoaXMuaXRlbXNEb20gPSBbXTsgLy8gZXNwZWpvIERPTSBwb3Igbml2ZWxcclxuXHRcdHRoaXMuaG92ZXIgPSB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogcmVjb3JkYXIgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYSAocGVyc2lzdGVudGUpXHJcblx0XHR0aGlzLmxhc3RMZWFmID0geyBwYXJlbnRQYXRoOiBbXSwga2V5OiBudWxsIH07IC8vIHBhcmVudFBhdGggZXMgbGEgcnV0YSBoYXN0YSBlbCBtYXBhIHBhZHJlXHJcblxyXG5cdFx0Ly8gQ29udGVuZWRvciBpbnRlcm5vIChhYnNvbHV0bylcclxuXHRcdHRoaXMuY1syXSA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcImRpdlwiLFxyXG5cdFx0XHR0aGlzLmNzcy5iYXNpYyArIFwibGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7XCJcclxuXHRcdCk7XHJcblx0XHR0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG5cdFx0dGhpcy5pbml0KCk7XHJcblxyXG5cdFx0Ly8gU2kgZWwgdmFsb3IgaW5pY2lhbCB5YSBhcHVudGEgYSB1bmEgaG9qYSB2w6FsaWRhLCByZWNvcmRhciBlc2EgaG9qYVxyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG5cdHN0YXRpYyBpc01hcChub2RlKSB7XHJcblx0XHRyZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblx0c3RhdGljIGlzTGlzdChub2RlKSB7XHJcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUmVjb3JyaWRvIGRlIGRhdG9zID09PT09PT1cclxuXHRnZXROb2RlQXRQYXRoKHBhdGgpIHtcclxuXHRcdGxldCBub2RlID0gdGhpcy50cmVlO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIHBhdGhbaV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuXHRcdFx0XHRub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBMbGVnYW1vcyBhIHVuYSBsaXN0YTogeWEgbm8gaGF5IG3DoXMgY2xhdmVzIHbDoWxpZGFzXHJcblx0XHRcdFx0aWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuXHR9XHJcblxyXG5cdC8vIEF1dG9jb21wbGV0YXI6IGJhamEgcG9yIHByaW1lcmFzIGNsYXZlcyBkZSBjYWRhIG1hcGEgaGFzdGEgYWxjYW56YXIgdW5hIGxpc3RhXHJcblx0YXV0b0NvbXBsZXRlVG9MZWFmKGJhc2VQYXRoKSB7XHJcblx0XHRsZXQgeyBub2RlIH0gPSB0aGlzLmdldE5vZGVBdFBhdGgoYmFzZVBhdGgpO1xyXG5cdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLnNsaWNlKCk7XHJcblx0XHR3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG5cdFx0XHRpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuXHRcdFx0Y29uc3QgazAgPSBrZXlzWzBdO1xyXG5cdFx0XHRwYXRoLnB1c2goazApO1xyXG5cdFx0XHRub2RlID0gbm9kZVtrMF07XHJcblx0XHR9XHJcblx0XHQvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2EgdW4gw610ZW0gZmluYWwgZGUgbGEgaG9qYVxyXG5cdFx0cmV0dXJuIHBhdGg7XHJcblx0fVxyXG5cclxuXHQvLyBSdXRhIGFjdGl2YSAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpbm8gdmFsdWUpXHJcblx0Z2V0QWN0aXZlUGF0aCgpIHtcclxuXHRcdHJldHVybiB0aGlzLmZvY3VzZWQgPyB0aGlzLmZvY3VzUGF0aCA6IHRoaXMudmFsdWU7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFRhbWHDsW8gZGUgaG9qYSBtw6F4aW1vIChwYXJhIGxheW91dCBlc3RhYmxlKSA9PT09PT09XHJcblx0Y29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBub2RlLmxlbmd0aDtcclxuXHRcdGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIDA7XHJcblx0XHRsZXQgbSA9IDA7XHJcblx0XHRmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcclxuXHRcdFx0bSA9IE1hdGgubWF4KG0sIHRoaXMuY29tcHV0ZUxlYWZNYXgobm9kZVtrXSkpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG07XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IENvbnN0cnVjY2nDs24gZGUgbml2ZWxlcyAobW9kZWxvIGzDs2dpY28pID09PT09PT1cclxuXHRidWlsZExldmVscygpIHtcclxuXHRcdHRoaXMubGV2ZWxzLmxlbmd0aCA9IDA7XHJcblx0XHRjb25zdCBhY3RpdmVQYXRoID0gdGhpcy5nZXRBY3RpdmVQYXRoKCk7XHJcblxyXG5cdFx0bGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcblx0XHRsZXQgbGV2ZWwgPSAwO1xyXG5cclxuXHRcdHdoaWxlIChub2RlKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdC8vIE5pdmVsIGludGVybWVkaW86IGNsYXZlcyBkZWwgbWFwYSAoaG9yaXpvbnRhbClcclxuXHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcblx0XHRcdFx0aWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcblx0XHRcdFx0dGhpcy5sZXZlbHMucHVzaCh7XHJcblx0XHRcdFx0XHR0eXBlOiBcIm1hcFwiLFxyXG5cdFx0XHRcdFx0aXRlbXM6IGtleXMubWFwKChrKSA9PiAoe1xyXG5cdFx0XHRcdFx0XHRrZXk6IGssXHJcblx0XHRcdFx0XHRcdGxhYmVsOiBrLFxyXG5cdFx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAgfSxcclxuXHRcdFx0XHRcdH0pKSxcclxuXHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogdGhpcy5saW5lSCB9LFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcblx0XHRcdFx0aWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuXHRcdFx0XHRub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAoKGxhYmVsKSA9PiAoe1xyXG5cdFx0XHRcdFx0a2V5OiBsYWJlbCxcclxuXHRcdFx0XHRcdGxhYmVsLFxyXG5cdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuXHRcdFx0XHR0aGlzLmxldmVscy5wdXNoKHtcclxuXHRcdFx0XHRcdHR5cGU6IFwibGlzdFwiLFxyXG5cdFx0XHRcdFx0aXRlbXMsXHJcblx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IGhMaXN0IH0sXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV2ZWwrKztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gTGF5b3V0ICh6b25hcyAmIERPTSkgPT09PT09PVxyXG5cdGxheW91dExldmVscygpIHtcclxuXHRcdGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7IC8vIGNvbHVtbmEgZGUgbGFiZWwgKyBwYWRkaW5nXHJcblx0XHRjb25zdCBwYWRSaWdodCA9IDg7XHJcblx0XHRjb25zdCB3ID0gdGhpcy56b25lLncgLSBjb250ZW50WCAtIHBhZFJpZ2h0O1xyXG5cclxuXHRcdGxldCB5ID0gMDtcclxuXHJcblx0XHQvLyBBanVzdGFyIGl0ZW1zRG9tIGEgY2FudGlkYWQgZGUgbml2ZWxlc1xyXG5cdFx0d2hpbGUgKHRoaXMuaXRlbXNEb20ubGVuZ3RoIDwgdGhpcy5sZXZlbHMubGVuZ3RoKVxyXG5cdFx0XHR0aGlzLml0ZW1zRG9tLnB1c2goW10pO1xyXG5cdFx0Zm9yIChsZXQgTCA9IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCA8IHRoaXMuaXRlbXNEb20ubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiB0aGlzLml0ZW1zRG9tW0xdKVxyXG5cdFx0XHRcdGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuXHRcdFx0XHRjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cdFx0XHRcdGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG5cdFx0XHRcdGxldCB4ID0gY29udGVudFg7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0XHRcdFx0aXQuem9uZSA9IHsgeCwgeSwgdzogY2VsbFcsIGg6IHRoaXMubGluZUggfTtcclxuXHRcdFx0XHRcdGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuXHRcdFx0XHRcdHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsIFwibWFwXCIpO1xyXG5cdFx0XHRcdFx0eCArPSBjZWxsVztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG5cdFx0XHRcdHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG5cdFx0XHRcdGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcblx0XHRcdFx0bHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuXHRcdFx0XHRjb25zdCByb3dzID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNSZWFsID0gaSA8IG47XHJcblx0XHRcdFx0XHRjb25zdCBpdCA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXVxyXG5cdFx0XHRcdFx0XHQ6IHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTogbnVsbCxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0XHRcdCAgfTtcclxuXHRcdFx0XHRcdGl0LnpvbmUgPSB7XHJcblx0XHRcdFx0XHRcdHg6IGNvbnRlbnRYLFxyXG5cdFx0XHRcdFx0XHR5OiB5ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdHcsXHJcblx0XHRcdFx0XHRcdGg6IHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Y29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG5cdFx0XHRcdFx0dGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgXCJsaXN0XCIsIGlzUmVhbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBmaWxhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIHJvd3MpO1xyXG5cdFx0XHRcdHkgKz0gaExpc3Q7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBBanVzdGVzIGRlIGFsdG8gaW50ZXJubyBkZWwgY29udGVuZWRvciB2aXN1YWxcclxuXHRcdGNvbnN0IHRvdGFsSCA9IHk7XHJcblx0XHR0aGlzLnpvbmUuaCA9IHRvdGFsSCArIHRoaXMubWFyZ2luO1xyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG5cdFx0dGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArIFwicHhcIjtcclxuXHJcblx0XHQvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcblx0XHR0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcblx0fVxyXG5cclxuXHQvLyBFbGltaW5hIG5vZG9zIERPTSBzb2JyYW50ZXMgZW4gbGEgZmlsYSBMIGEgcGFydGlyIGRlbCDDrW5kaWNlIGtlZXBcclxuXHRfcHJ1bmVSb3coTCwga2VlcCkge1xyXG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuXHRcdGlmICghcm93KSByZXR1cm47XHJcblx0XHRmb3IgKGxldCBqID0ga2VlcDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRjb25zdCBlbCA9IHJvd1tqXTtcclxuXHRcdFx0aWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG5cdFx0fVxyXG5cdFx0cm93Lmxlbmd0aCA9IGtlZXA7XHJcblx0fVxyXG5cclxuXHRlbnN1cmVJdGVtRG9tKEwsIGkpIHtcclxuXHRcdGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcblx0XHR3aGlsZSAocm93Lmxlbmd0aCA8PSBpKSByb3cucHVzaChudWxsKTtcclxuXHRcdGlmICghcm93W2ldKSB7XHJcblx0XHRcdGNvbnN0IGRpdiA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcdFwiZGl2XCIsXHJcblx0XHRcdFx0VG9vbHMuY3NzLnR4dCArIFwicG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7XCJcclxuXHRcdFx0KTtcclxuXHRcdFx0dGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcblx0XHRcdHJvd1tpXSA9IGRpdjtcclxuXHRcdH1cclxuXHRcdHJldHVybiByb3dbaV07XHJcblx0fVxyXG5cclxuXHRwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG5cdFx0Y29uc3QgcyA9IGRpdi5zdHlsZTtcclxuXHRcdGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG5cdFx0Ly8gUG9zaWNpw7NuXHJcblx0XHRzLmxlZnQgPSBpdC56b25lLnggKyBcInB4XCI7XHJcblx0XHRzLnRvcCA9IGl0LnpvbmUueSArIFwicHhcIjtcclxuXHRcdHMud2lkdGggPSBpdC56b25lLncgKyBcInB4XCI7XHJcblx0XHRzLmhlaWdodCA9IGl0LnpvbmUuaCAtIDIgKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gVGV4dG9cclxuXHRcdGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogXCJcIjtcclxuXHJcblx0XHQvLyBFc3RhZG9zXHJcblx0XHRjb25zdCBzZWxlY3RlZCA9XHJcblx0XHRcdGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG5cdFx0Y29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiB0aGlzLmZvY3VzTGV2ZWwgPT09IEw7XHJcblx0XHRjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgdGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleTtcclxuXHRcdGNvbnN0IGlzSG92ZXIgPVxyXG5cdFx0XHR0aGlzLmVuYWJsZUhvdmVyICYmXHJcblx0XHRcdGlzUmVhbCAmJlxyXG5cdFx0XHR0aGlzLmhvdmVyLmxldmVsID09PSBMICYmXHJcblx0XHRcdHRoaXMuaG92ZXIuaW5kZXggPT09IGk7XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogwr9lc3RhIGZpbGEgZXMgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYT9cclxuXHRcdGxldCBpc0xhc3RMZWFmID0gZmFsc2U7XHJcblx0XHRpZiAoaXNSZWFsICYmIGtpbmQgPT09IFwibGlzdFwiICYmIHRoaXMubGFzdExlYWYua2V5ICE9IG51bGwpIHtcclxuXHRcdFx0Ly8gTGEgaG9qYSB2aXNpYmxlIGNvcnJlc3BvbmRlIHNpIGVsIHBhZHJlIGRlIGVzdGEgbGlzdGEgY29pbmNpZGUgY29uIHBhcmVudFBhdGggZ3VhcmRhZG9cclxuXHRcdFx0Ly8gRWwgcGFkcmUgYWN0dWFsIGVzIHRoaXMudmFsdWUuc2xpY2UoMCwgTCkgY3VhbmRvIGxhIGxpc3RhIGVzdMOhIGRlc3BsZWdhZGEgcG9yIHZhbHVlL2ZvY3VzXHJcblx0XHRcdGNvbnN0IHBhcmVudE5vdyA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpLnNsaWNlKDAsIEwpO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5fcGF0aHNFcXVhbChwYXJlbnROb3csIHRoaXMubGFzdExlYWYucGFyZW50UGF0aCkgJiZcclxuXHRcdFx0XHRpdC5rZXkgPT09IHRoaXMubGFzdExlYWYua2V5XHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGlzTGFzdExlYWYgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRXN0aWxvcyBiYXNlXHJcblx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG5cdFx0cy5jb2xvciA9IGNjLnRleHQ7XHJcblx0XHRzLmJvcmRlciA9IFwiMXB4IHNvbGlkIFwiICsgY2MuYm9yZGVyO1xyXG5cdFx0cy50ZXh0QWxpZ24gPSBraW5kID09PSBcIm1hcFwiID8gXCJjZW50ZXJcIiA6IFwibGVmdFwiO1xyXG5cclxuXHRcdC8vIFByaW9yaWRhZCB2aXN1YWw6XHJcblx0XHQvLyAxKSBzZWxlY2Npb25hZG8gKGF6dWwpXHJcblx0XHQvLyAyKSDDumx0aW1hIGhvamEgKG51ZXZvIGNvbG9yKVxyXG5cdFx0Ly8gMykgZm9jb1xyXG5cdFx0Ly8gNCkgaG92ZXJcclxuXHRcdGlmIChzZWxlY3RlZCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG5cdFx0fSBlbHNlIGlmIChpc0xhc3RMZWFmKSB7XHJcblx0XHRcdC8vIGNvbG9yIGRpc3RpbnRpdm8gcGFyYSBcIsO6bHRpbWEgaG9qYVwiIChhbWFyaWxsbyBzdWF2ZSlcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gXCJyZ2JhKDI1NSwgMjAwLCAwLCAwLjI1KVwiO1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dDtcclxuXHRcdH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG5cdFx0fSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG5cdFx0cy5vcGFjaXR5ID0gaXNSZWFsID8gXCIxXCIgOiBcIjBcIjtcclxuXHR9XHJcblxyXG5cdF9wYXRoc0VxdWFsKGEsIGIpIHtcclxuXHRcdGlmICghYSB8fCAhYiB8fCBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuXHRyU2l6ZSgpIHtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuXHRcdHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGUoKSB7XHJcblx0XHR0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcblx0XHR0aGlzLmxheW91dExldmVscygpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG5cdF90b0xvY2FsKGUpIHtcclxuXHRcdGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblx0XHRjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG5cdFx0cmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcblx0fVxyXG5cclxuXHRfaGl0VGVzdChteCwgbXkpIHtcclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGNvbnN0IHogPSBsdmwuem9uZTsgLy8geCB5IHcgeWEgaW5jbHV5ZW4gY29udGVudFhcclxuXHJcblx0XHRcdGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0bXggPj0gaXR6LnggJiZcclxuXHRcdFx0XHRcdFx0bXkgPj0gaXR6LnkgJiZcclxuXHRcdFx0XHRcdFx0bXggPD0gaXR6LnggKyBpdHoudyAmJlxyXG5cdFx0XHRcdFx0XHRteSA8PSBpdHoueSArIGl0ei5oXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuXHRcdFx0XHRcdGNvbnN0IGl0eiA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXS56b25lXHJcblx0XHRcdFx0XHRcdDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0eDogei54LFxyXG5cdFx0XHRcdFx0XHRcdFx0eTogei55ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdFx0XHR3OiB6LncsXHJcblx0XHRcdFx0XHRcdFx0XHRoOiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHQgIH07XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdG14ID49IGl0ei54ICYmXHJcblx0XHRcdFx0XHRcdG15ID49IGl0ei55ICYmXHJcblx0XHRcdFx0XHRcdG14IDw9IGl0ei54ICsgaXR6LncgJiZcclxuXHRcdFx0XHRcdFx0bXkgPD0gaXR6LnkgKyBpdHouaFxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IEwsIGksIHJlYWw6IGlzUmVhbCB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgTDogLTEsIGk6IC0xLCByZWFsOiBmYWxzZSB9O1xyXG5cdH1cclxuXHJcblx0aGFuZGxlRXZlbnQoZSkge1xyXG5cdFx0aWYgKHRoaXMubG9jaykgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcclxuXHRcdFx0Ly8gU2kgZWwgaG92ZXIgZXN0w6EgZGVzYWN0aXZhZG8sIG5vIGhheSB0cmFiYWpvIHF1ZSBoYWNlci5cclxuXHRcdFx0aWYgKCF0aGlzLmVuYWJsZUhvdmVyKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHJcblx0XHRcdC8vIG51ZXZvIGhvdmVyIGNhbGN1bGFkb1xyXG5cdFx0XHRjb25zdCBuZXdIb3ZlciA9XHJcblx0XHRcdFx0aHQuTCAhPT0gLTEgJiYgaHQucmVhbFxyXG5cdFx0XHRcdFx0PyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9XHJcblx0XHRcdFx0XHQ6IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHRcdFx0Ly8gc29sbyByZXBpbnRhciBzaSBjYW1iaWEgcmVhbG1lbnRlIGVsIGhvdmVyXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRuZXdIb3Zlci5sZXZlbCA9PT0gdGhpcy5ob3Zlci5sZXZlbCAmJlxyXG5cdFx0XHRcdG5ld0hvdmVyLmluZGV4ID09PSB0aGlzLmhvdmVyLmluZGV4XHJcblx0XHRcdClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdHRoaXMuaG92ZXIgPSBuZXdIb3ZlcjtcclxuXHRcdFx0dGhpcy51cGRhdGUoKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHRcdFx0aWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuXHRcdFx0XHR0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLy8gc29sbyB0cnVlIHNpIHJlYWxtZW50ZSBzZSBzZWxlY2Npb27DsyBhbGdvXHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcblx0X3NlbGVjdEF0KEwsIGkpIHtcclxuXHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0Y29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0aWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuXHRcdGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuXHRcdGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcblx0XHQvLyDwn5S4IFNpIGVsIHVzdWFyaW8gc2VsZWNjaW9uYSBleHBsw61jaXRhbWVudGUgZW4gZWwgbml2ZWwgaG9qYSwgcmVjb3JkYXJsb1xyXG5cdFx0aWYgKGx2bC50eXBlID09PSBcImxpc3RcIikge1xyXG5cdFx0XHR0aGlzLmxhc3RMZWFmLnBhcmVudFBhdGggPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpOyAvLyBwYWRyZSBkZSBsYSBsaXN0YSBhY3R1YWxcclxuXHRcdFx0dGhpcy5sYXN0TGVhZi5rZXkgPSBjaG9zZW4ua2V5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMudmFsdWUgPSBuZXdQYXRoLnNsaWNlKCk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHRcdC8vIHNpIGVzdMOhIHJlZmVyZW5jaWFkbywgcHJvcGFnYSBhIG9iamV0byBleHRlcm5vXHJcblx0XHR0aGlzLnNlbmQobmV3UGF0aCk7XHJcblx0XHR0aGlzLmNoYW5nZUNiKHRoaXMudGFiSW5kZXgsIHRoaXMuaXRlbUluZGV4LCBuZXdQYXRoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gQVBJIHDDumJsaWNhID09PT09PT1cclxuXHRzZXRWYWx1ZShwYXRoKSB7XHJcblx0XHR0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguc2xpY2UoKSA6IFtdO1xyXG5cdFx0Ly8gU2kgZGVzZGUgYWZ1ZXJhIG5vcyBzZXRlYW4gdW5hIGhvamEgdsOhbGlkYSwgdGFtYmnDqW4gbGEgcmVjb3JkYW1vc1xyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdHNldFRyZWUodHJlZSkge1xyXG5cdFx0dGhpcy50cmVlID0gdHJlZSB8fCB7fTtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRzZXRGb2N1cyh7IGZvY3VzZWQsIGZvY3VzUGF0aCwgZm9jdXNMZXZlbCB9KSB7XHJcblx0XHRpZiAodHlwZW9mIGZvY3VzZWQgPT09IFwiYm9vbGVhblwiKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuXHRcdGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gXCJudW1iZXJcIikgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRfbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpIHtcclxuXHRcdC8vIFNpIHZhbHVlIGFwdW50YSBhIHBhZHJlK2hvamEgKOKApixbbGVhZl0pIHkgZXMgdsOhbGlkYSwgcmVjb3JkYXIgZXNhIGhvamFcclxuXHRcdGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLnZhbHVlLmxlbmd0aCAtIDEpO1xyXG5cdFx0Y29uc3QgbGVhZiA9IHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdGNvbnN0IGluZm8gPSB0aGlzLmdldE5vZGVBdFBhdGgocGFyZW50KTtcclxuXHRcdGlmIChpbmZvICYmIEFycmF5LmlzQXJyYXkoaW5mby5ub2RlKSAmJiBpbmZvLm5vZGUuaW5jbHVkZXMobGVhZikpIHtcclxuXHRcdFx0dGhpcy5sYXN0TGVhZiA9IHsgcGFyZW50UGF0aDogcGFyZW50LCBrZXk6IGxlYWYgfTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUHVibGljYWNpw7NuIGRlIGFsdHVyYSA9PT09PT09XHJcblx0X2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKSB7XHJcblx0XHRsZXQgYyA9IDA7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgaSsrKVxyXG5cdFx0XHRpZiAodGhpcy5sZXZlbHNbaV0udHlwZSA9PT0gXCJtYXBcIikgYysrO1xyXG5cdFx0cmV0dXJuIGM7XHJcblx0fVxyXG5cclxuXHRfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcblx0XHRjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcblx0XHRyZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09IFwibGlzdFwiID8gbGFzdC5pdGVtcy5sZW5ndGggOiAwO1xyXG5cdH1cclxuXHJcblx0X3B1Ymxpc2hIZWlnaHQoKSB7XHJcblx0XHRjb25zdCBpbnRlciA9IHRoaXMuX2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKTtcclxuXHRcdGNvbnN0IGxlYWZMZW4gPSBNYXRoLm1heCh0aGlzLmxlYWZNYXgsIHRoaXMuX2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkpO1xyXG5cdFx0Y29uc3QgbGVhZkggPSBsZWFmTGVuICogdGhpcy5saW5lSDtcclxuXHRcdGNvbnN0IGludGVySCA9IGludGVyICogKHRoaXMubGluZUggKyB0aGlzLmxldmVsR2FwKTtcclxuXHRcdGNvbnN0IHRvdGFsSCA9IGludGVyID8gaW50ZXJIICsgdGhpcy5sZXZlbEdhcCArIGxlYWZIIDogbGVhZkg7XHJcblxyXG5cdFx0Ly8gTm9ybWFsaXphbW9zIGEgcHggZW50ZXJvcyBwYXJhIGV2aXRhciBqaXR0ZXIgcG9yIHJlZG9uZGVvXHJcblx0XHRjb25zdCBuZXdIID0gTWF0aC5mbG9vcih0b3RhbEgpO1xyXG5cclxuXHRcdC8vIEFjdHVhbGl6YW1vcyBtw6l0cmljYXMgbG9jYWxlcyBzaWVtcHJlXHJcblx0XHR0aGlzLmggPSBuZXdIO1xyXG5cdFx0dGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gU29sbyBhdmlzYW1vcyBhbCBHVUkgc2kgbGEgYWx0dXJhIGNhbWJpw7NcclxuXHRcdGlmIChuZXdIICE9PSB0aGlzLl9sYXN0UHVibGlzaGVkSCkge1xyXG5cdFx0XHR0aGlzLl9sYXN0UHVibGlzaGVkSCA9IG5ld0g7XHJcblx0XHRcdFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG5cdFx0XHRpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiXHJcbmltcG9ydCB7IEJvb2wgfSBmcm9tICcuLi9wcm90by9Cb29sLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vcHJvdG8vQnV0dG9uLmpzJztcclxuaW1wb3J0IHsgQ2lyY3VsYXIgfSBmcm9tICcuLi9wcm90by9DaXJjdWxhci5qcyc7XHJcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnLi4vcHJvdG8vQ29sb3IuanMnO1xyXG5pbXBvcnQgeyBGcHMgfSBmcm9tICcuLi9wcm90by9GcHMuanMnO1xyXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL3Byb3RvL0dyYXBoLmpzJztcclxuaW1wb3J0IHsgR3JvdXAgIH0gZnJvbSAnLi4vcHJvdG8vR3JvdXAuanMnO1xyXG5pbXBvcnQgeyBKb3lzdGljayB9IGZyb20gJy4uL3Byb3RvL0pveXN0aWNrLmpzJztcclxuaW1wb3J0IHsgS25vYiB9IGZyb20gJy4uL3Byb3RvL0tub2IuanMnO1xyXG5pbXBvcnQgeyBMaXN0IH0gZnJvbSAnLi4vcHJvdG8vTGlzdC5qcyc7XHJcbmltcG9ydCB7IE51bWVyaWMgfSBmcm9tICcuLi9wcm90by9OdW1lcmljLmpzJztcclxuaW1wb3J0IHsgU2xpZGUgfSBmcm9tICcuLi9wcm90by9TbGlkZS5qcyc7XHJcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gJy4uL3Byb3RvL1RleHRJbnB1dC5qcyc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vcHJvdG8vVGl0bGUuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuLi9wcm90by9TZWxlY3QuanMnO1xyXG5pbXBvcnQgeyBCaXRtYXAgfSBmcm9tICcuLi9wcm90by9CaXRtYXAuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdG9yLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuLi9wcm90by9FbXB0eS5qcyc7XHJcbmltcG9ydCB7IEl0ZW0gfSBmcm9tICcuLi9wcm90by9JdGVtLmpzJztcclxuaW1wb3J0IHsgR3JpZCB9IGZyb20gJy4uL3Byb3RvL0dyaWQuanMnO1xyXG5pbXBvcnQgeyBQYWQyRCB9IGZyb20gJy4uL3Byb3RvL1BhZDJELmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgVHJlZUxpc3QgfSBmcm9tICcuLi9wcm90by9UcmVlTGlzdC5qcyc7XHJcblxyXG5leHBvcnQgY29uc3QgYWRkID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGFyZ3VtZW50czsgXHJcblxyXG4gICAgICAgIGxldCB0eXBlLCBvLCByZWYgPSBmYWxzZSwgbiA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVswXSA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgICAgICB0eXBlID0gYVswXTtcclxuICAgICAgICAgICAgbyA9IGFbMV0gfHwge307XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBhWzBdID09PSAnb2JqZWN0JyApeyAvLyBsaWtlIGRhdCBndWlcclxuXHJcbiAgICAgICAgICAgIHJlZiA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoYSwge30pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzJdLnR5cGUgPyBhWzJdLnR5cGUgOiBhdXRvVHlwZSggYVswXVthWzFdXSwgYVsyXSApO1xyXG5cclxuICAgICAgICAgICAgbyA9IGFbMl07XHJcbiAgICAgICAgICAgIG8ubmFtZSA9IGFbMV07XHJcbiAgICAgICAgICAgIGlmIChvLmhhc093blByb3BlcnR5KFwiZGlzcGxheU5hbWVcIikpIG8ubmFtZSA9IG8uZGlzcGxheU5hbWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ2xpc3QnICYmICFvLmxpc3QgKXsgby5saXN0ID0gYVswXVthWzFdXTsgfVxyXG4gICAgICAgICAgICBlbHNlIG8udmFsdWUgPSBhWzBdW2FbMV1dO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2dyb3VwJyApeyBcclxuICAgICAgICAgICAgby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIC8vby5keCA9IDhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCggbmFtZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnYm9vbCc6IGNhc2UgJ2Jvb2xlYW4nOiBuID0gbmV3IEJvb2wobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdidXR0b24nOiBuID0gbmV3IEJ1dHRvbihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NpcmN1bGFyJzogbiA9IG5ldyBDaXJjdWxhcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzogbiA9IG5ldyBDb2xvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Zwcyc6IG4gPSBuZXcgRnBzKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JhcGgnOiBuID0gbmV3IEdyYXBoKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOiBuID0gbmV3IEdyb3VwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnam95c3RpY2snOiBuID0gbmV3IEpveXN0aWNrKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAna25vYic6IG4gPSBuZXcgS25vYihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xpc3QnOiBuID0gbmV3IExpc3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdudW1lcmljJzogY2FzZSAnbnVtYmVyJzogbiA9IG5ldyBOdW1lcmljKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2xpZGUnOiBuID0gbmV3IFNsaWRlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGV4dElucHV0JzogY2FzZSAnc3RyaW5nJzogbiA9IG5ldyBUZXh0SW5wdXQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6IGNhc2UgJ3RleHQnOiBuID0gbmV3IFRpdGxlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzogbiA9IG5ldyBTZWxlY3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdiaXRtYXAnOiBuID0gbmV3IEJpdG1hcChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdG9yJzogbiA9IG5ldyBTZWxlY3RvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzogY2FzZSAnc3BhY2UnOiBuID0gbmV3IEVtcHR5KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaXRlbSc6IG4gPSBuZXcgSXRlbShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyaWQnOiBuID0gbmV3IEdyaWQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwYWQyZCc6IGNhc2UgJ3BhZCc6IG4gPSBuZXcgUGFkMkQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0cmVlbGlzdCc6IG4gPSBuZXcgVHJlZUxpc3Qobyk7IGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggbiAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGlmKCByZWYgKSBuLnNldFJlZmVyZW5jeSggYVswXSwgYVsxXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gbjtcclxuXHJcbiAgICAgICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGF1dG9UeXBlID0gZnVuY3Rpb24gKCB2LCBvICkge1xyXG5cclxuICAgIGxldCB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIGlmKCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkgdHlwZSA9ICdib29sJyBcclxuICAgIGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgaWYoIHYuc3Vic3RyaW5nKDAsMSkgPT09ICcjJyApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3N0cmluZycgXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ251bWJlcicgKXsgXHJcblxyXG4gICAgICAgIGlmKCBvLmN0eXBlICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ2FycmF5JyAmJiB2IGluc3RhbmNlb2YgQXJyYXkgKXtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB2WzBdID09PSAnbnVtYmVyJyApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgaWYoIHR5cGVvZiB2WzBdID09PSAnc3RyaW5nJyApIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcblxyXG4gICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHlwZVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBhZGQgfSBmcm9tIFwiLi9hZGQuanNcIjtcclxuaW1wb3J0IHsgVjIgfSBmcm9tIFwiLi9WMi5qc1wiO1xyXG5cclxuLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIEd1aSB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICB0aGlzLmlzR3VpID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBcImd1aVwiO1xyXG5cclxuICAgIC8vIGZvciAzZFxyXG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xyXG4gICAgdGhpcy5zY3JlZW4gPSBudWxsO1xyXG4gICAgdGhpcy5wbGFuZSA9IG8ucGxhbmUgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjb2xvclxyXG4gICAgaWYgKG8uY29uZmlnKSBvLmNvbG9ycyA9IG8uY29uZmlnO1xyXG4gICAgaWYgKG8uY29sb3JzKSB0aGlzLnNldENvbmZpZyhvLmNvbG9ycyk7XHJcbiAgICBlbHNlIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcblxyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMuY3NzID0gVG9vbHMuY2xvbmVDc3MoKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG4gICAgdGhpcy50bXBBZGQgPSBudWxsO1xyXG4gICAgLy90aGlzLnRtcEggPSAwXHJcblxyXG4gICAgdGhpcy5pc0NhbnZhcyA9IG8uaXNDYW52YXMgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIE1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIC8vIG9wdGlvbiB0byBkZWZpbmUgd2hldGhlciB0aGUgZXZlbnQgbGlzdGVuZXJzIHNob3VsZCBiZSBhZGRlZCBvciBub3RcclxuICAgIFJvb3RzLmFkZERPTUV2ZW50TGlzdGVuZXJzID0gby5oYXNPd25Qcm9wZXJ0eShcImFkZERPTUV2ZW50TGlzdGVuZXJzXCIpXHJcbiAgICAgID8gby5hZGRET01FdmVudExpc3RlbmVyc1xyXG4gICAgICA6IHRydWU7XHJcblxyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG5cclxuICAgIHRoaXMuZm9yY2VIZWlnaHQgPSBvLm1heEhlaWdodCB8fCAwO1xyXG4gICAgdGhpcy5sb2NrSGVpZ2h0ID0gby5sb2NrSGVpZ2h0IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNJdGVtTW9kZSA9IG8uaXRlbU1vZGUgIT09IHVuZGVmaW5lZCA/IG8uaXRlbU1vZGUgOiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmNuID0gXCJcIjtcclxuXHJcbiAgICAvLyBzaXplIGRlZmluZVxyXG4gICAgdGhpcy5zaXplID0gVG9vbHMuc2l6ZTtcclxuICAgIGlmIChvLnAgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnAgPSBvLnA7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS53ID0gby53O1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUuaCA9IG8uaDtcclxuICAgIGlmIChvLnMgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnMgPSBvLnM7XHJcblxyXG4gICAgdGhpcy5zaXplLmggPSB0aGlzLnNpemUuaCA8IDExID8gMTEgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICAvLyBsb2NhbCBtb3VzZSBhbmQgem9uZVxyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG4gICAgdGhpcy56b25lID0geyB4OiAwLCB5OiAwLCB3OiB0aGlzLnNpemUudywgaDogMCB9O1xyXG5cclxuICAgIC8vIHZpcnR1YWwgbW91c2VcclxuICAgIHRoaXMubW91c2UgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmggPSAwO1xyXG4gICAgLy90aGlzLnByZXZZID0gLTE7XHJcbiAgICB0aGlzLnN3ID0gMDtcclxuXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICAvLyBib3R0b20gYW5kIGNsb3NlIGhlaWdodFxyXG4gICAgdGhpcy5pc1dpdGhDbG9zZSA9IG8uY2xvc2UgIT09IHVuZGVmaW5lZCA/IG8uY2xvc2UgOiB0cnVlO1xyXG4gICAgdGhpcy5iaCA9ICF0aGlzLmlzV2l0aENsb3NlID8gMCA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG8uYXV0b1Jlc2l6ZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG8uYXV0b1Jlc2l6ZTtcclxuXHJcbiAgICAvLyBkZWZhdWx0IHBvc2l0aW9uXHJcbiAgICB0aGlzLmlzQ2VudGVyID0gby5jZW50ZXIgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmNzc0d1aSA9XHJcbiAgICAgIG8uY3NzICE9PSB1bmRlZmluZWQgPyBvLmNzcyA6IHRoaXMuaXNDZW50ZXIgPyBcIlwiIDogXCJyaWdodDoxMHB4O1wiO1xyXG5cclxuICAgIHRoaXMuaXNPcGVuID0gby5vcGVuICE9PSB1bmRlZmluZWQgPyBvLm9wZW4gOiB0cnVlO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmRlY2FsID0gMDtcclxuICAgIHRoaXMucmF0aW8gPSAxO1xyXG4gICAgdGhpcy5veSA9IDA7XHJcblxyXG4gICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIHRoaXMuY29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiIHdpZHRoOjBweDsgaGVpZ2h0OmF1dG87IHRvcDowcHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmNvbnRlbnQgK1xyXG4gICAgICAgIFwiOyBcIiArXHJcbiAgICAgICAgdGhpcy5jc3NHdWlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyB0aGlzLmNzcy5idXR0b24gKyAnd2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyQ29udGVudCk7XHJcblxyXG4gICAgLy90aGlzLmlubmVyID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyAnKVxyXG4gICAgdGhpcy51c2VGbGV4ID0gdHJ1ZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/IFwiZGlzcGxheTpmbGV4OyBmbGV4LWZsb3c6IHJvdyB3cmFwO1wiIDogXCJcIjsgLy8nIGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnN0YXJ0OyBhbGlnbi1pdGVtczpzdGFydDtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYWxpZ24taXRlbXM6IGNlbnRlcjsnO1xyXG4gICAgdGhpcy5pbm5lciA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwid2lkdGg6MTAwJTsgbGVmdDowOyBcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuaW5uZXJDb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXIpO1xyXG5cclxuICAgIC8vIHNjcm9sbFxyXG4gICAgdGhpcy5zY3JvbGxCRyA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwicmlnaHQ6MDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSAxKSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7IGRpc3BsYXk6bm9uZTsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYmFja2dyb3VuZCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxCRyk7XHJcblxyXG4gICAgdGhpcy5zY3JvbGwgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJ1dHRvbiArXHJcbiAgICAgICAgXCI7IHJpZ2h0OjJweDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSA0KSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLnNjcm9sbEJHLmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsKTtcclxuXHJcbiAgICAvLyBib3R0b20gYnV0dG9uXHJcbiAgICB0aGlzLmJvdHRvbVRleHQgPSBvLmJvdHRvbVRleHQgfHwgW1wib3BlblwiLCBcImNsb3NlXCJdO1xyXG5cclxuICAgIGxldCByID0gY2MucmFkaXVzO1xyXG4gICAgdGhpcy5ib3R0b20gPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dCArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6YXV0bzsgYm90dG9tOjA7IGxlZnQ6MDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGhlaWdodDpcIiArXHJcbiAgICAgICAgdGhpcy5iaCArXHJcbiAgICAgICAgXCJweDsgbGluZS1oZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmJoIC0gNSkgK1xyXG4gICAgICAgIFwicHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTsgLy8gYm9yZGVyLXRvcDoxcHggc29saWQgJytUb29scy5jb2xvcnMuc3Ryb2tlKyc7Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5ib3R0b20pO1xyXG4gICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIC8vXHJcblxyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnBhcmVudCAhPT0gdW5kZWZpbmVkID8gby5wYXJlbnQgOiBudWxsO1xyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnRhcmdldCAhPT0gdW5kZWZpbmVkID8gby50YXJnZXQgOiB0aGlzLnBhcmVudDtcclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgPT09IG51bGwgJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5wYXJlbnQgPSBkb2N1bWVudC5ib2R5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcyAmJiB0aGlzLnBhcmVudCA9PT0gbnVsbCkgdGhpcy5pc0NhbnZhc09ubHkgPSB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XHJcbiAgICAgIG8udHJhbnNpdGlvbiA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGVpZ2h0IHRyYW5zaXRpb25cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9XHJcbiAgICAgIG8udHJhbnNpdGlvbiAhPT0gdW5kZWZpbmVkID8gby50cmFuc2l0aW9uIDogVG9vbHMudHJhbnNpdGlvbjtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24pIHNldFRpbWVvdXQodGhpcy5hZGRUcmFuc2l0aW9uLmJpbmQodGhpcyksIDEwMDApO1xyXG5cclxuICAgIHRoaXMuc2V0V2lkdGgoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5tYWtlQ2FudmFzKCk7XHJcblxyXG4gICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlRG93bih4LCB5KSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJHdWkudHJpZ2dlck1vdXNlRG93biBpcyBkZXByZWNhdGVkLCB1c2UgdHJpZ2dlck1vdXNlRG93blVWIGluc3RlYWRcIik7XHJcbiAgICAvKlxyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pOyovXHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VNb3ZlKCkge1xyXG4gICAgY29uc29sZS53YXJuKFwiR3VpLnRyaWdnZXJNb3VzZU1vdmUgaXMgZGVwcmVjYXRlZCwgdXNlIHRyaWdnZXJNb3VzZU1vdmVVViBpbnN0ZWFkXCIpO1xyXG4gICAgLypcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pOyovXHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcCh4LCB5KSB7XHJcblxyXG4gICAgY29uc29sZS53YXJuKFwiR3VpLnRyaWdnZXJNb3VzZVVwIGlzIGRlcHJlY2F0ZWQsIHVzZSB0cmlnZ2VyTW91c2VVcFVWIGluc3RlYWRcIik7XHJcbiAgICAvKlxyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTsqL1xyXG4gIH1cclxuXHJcbiAgLy8gR3VpLmpzXHJcbiAgdHJpZ2dlck1vdXNlRG93blVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgLy8gdSwgdiBlbiBbMCwxXSByZWxhdGl2b3MgYWwgcmVjdCBkZWwgR1VJXHJcbiAgICBjb25zdCB4ID0gdGhpcy56b25lLnggKyBNYXRoLnJvdW5kKHUgKiB0aGlzLnpvbmUudyk7XHJcbiAgICBjb25zdCB5ID0gdGhpcy56b25lLnkgKyBNYXRoLnJvdW5kKChmbGlwWSA/IDEgLSB2IDogdikgKiB0aGlzLnpvbmUuaCk7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcmRvd25cIixcclxuICAgICAgY2xpZW50WDogaXNOYU4oeCkgPyBudWxsIDogeCxcclxuICAgICAgY2xpZW50WTogaXNOYU4oeSkgPyBudWxsIDogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcFVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgY29uc3QgeCA9IHRoaXMuem9uZS54ICsgTWF0aC5yb3VuZCh1ICogdGhpcy56b25lLncpO1xyXG4gICAgY29uc3QgeSA9IHRoaXMuem9uZS55ICsgTWF0aC5yb3VuZCgoZmxpcFkgPyAxIC0gdiA6IHYpICogdGhpcy56b25lLmgpO1xyXG4gICAgXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcnVwXCIsXHJcbiAgICAgIGNsaWVudFg6IGlzTmFOKHgpID8gbnVsbCA6IHgsXHJcbiAgICAgIGNsaWVudFk6IGlzTmFOKHkpID8gbnVsbCA6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZVVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgY29uc3QgeCA9IHRoaXMuem9uZS54ICsgTWF0aC5yb3VuZCh1ICogdGhpcy56b25lLncpO1xyXG4gICAgY29uc3QgeSA9IHRoaXMuem9uZS55ICsgTWF0aC5yb3VuZCgoZmxpcFkgPyAxIC0gdiA6IHYpICogdGhpcy56b25lLmgpO1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJtb3ZlXCIsXHJcbiAgICAgIGNsaWVudFg6IGlzTmFOKHgpID8gbnVsbCA6IHgsXHJcbiAgICAgIGNsaWVudFk6IGlzTmFOKHkpID8gbnVsbCA6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0VG9wKHQsIGgpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS50b3AgPSB0ICsgXCJweFwiO1xyXG4gICAgaWYgKGggIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JjZUhlaWdodCA9IGg7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFkZFRyYW5zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmJvdHRvbS5zdHlsZS50cmFuc2l0aW9uID0gXCJ0b3AgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgLy90aGlzLmJvdHRvbS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBSb290cy5yZXNpemUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uYWRkVHJhbnNpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkRyYXcoKSB7fVxyXG5cclxuICBtYWtlQ2FudmFzKCkge1xyXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXHJcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFxyXG4gICAgICBcImNhbnZhc1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLnpvbmUudztcclxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyggdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCApXHJcbiAgfVxyXG5cclxuICBkcmF3KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5jYW52YXMgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuem9uZS53O1xyXG4gICAgbGV0IGggPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG4gICAgUm9vdHMudG9DYW52YXModGhpcywgdywgaCwgZm9yY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vXHJcblxyXG4gIGdldERvbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBub01vdXNlKCkge1xyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICB9XHJcblxyXG4gIHNldE1vdXNlKHV2LCBmbGlwID0gdHJ1ZSkge1xyXG4gICAgaWYgKGZsaXApXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgLSBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICAvL3RoaXMubW91c2Uuc2V0KCBtLngsIG0ueSApO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJzZXRNb3VzZSBcIiArIHV2LnggKyBcIiBcIiArIHV2LnkpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNZLE1BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsTUFBTSxDQUFDLEdBQUc7QUFDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7QUFDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7QUFDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0FBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSztBQUNiLEVBQUUsS0FBSyxFQUFFLEtBQUs7QUFD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SUFBSSxHQUFHLEdBQUcsRUFBRTtBQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDMUIsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtBQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7QUFDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNqQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdB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Q0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDekQsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxHQUFHLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxFQUFFO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsT0FBTyxHQUFHLENBQUM7QUFDMUMsYUFBYSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUM1RCxhQUFhLElBQUksRUFBRSxZQUFZLEtBQUssRUFBRTtBQUN0QyxZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNuRixZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdkcsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxHQUFHLEdBQUcsV0FBVyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLEdBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtB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TSxDQUFDLENBQUM7QUFDN0MsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksYUFBYSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ2xDO0FBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDO0FBQzdEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sR0FBRztBQUMxQyxRQUFRLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMxQixRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUc7QUFDdEMsVUFBVSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUM7QUFDakUsU0FBUztBQUNULFFBQVEsT0FBTyxRQUFRLENBQUM7QUFDeEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDOUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzlCO0FBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFCO0FBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzNCO0FBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDekI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0UsYUFBYSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDekIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDekQsUUFBUSxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDekI7QUFDQSxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzVFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDMUI7QUFDQSxRQUFRLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pIO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDdEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakIsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRCxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakM7QUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUNsQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ2xFLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2pKLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDM0QsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUNqRSxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQixTQUFTO0FBQ1QsUUFBUSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMzQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0M7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQyxhQUFhO0FBQ2IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQzNELFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFlBQVksT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUN6RyxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksWUFBWSxFQUFFLFdBQVcsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHO0FBQzlEO0FBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hEO0FBQ0EsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRztBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFHO0FBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0FBQ3BKLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25DLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMvRixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckg7QUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdJLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuSSxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3RCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxLQUFLLEdBQUc7QUFDakM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdB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QUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM1SCxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN6SDtBQUNBO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEUsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7QUFDQTtBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzFFLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzFFO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzSDtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDNUg7QUFDQTtBQUNBO0FBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdEYsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEcsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0Y7QUFDQSxZQUFZLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQy9CO0FBQ0EsU0FBUyxNQUFNO0FBQ2Y7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDNUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7QUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUs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RUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuRyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5SSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5SSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxvRkFBb0YsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvSztBQUNBO0FBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFHO0FBQ0EsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDckM7QUFDQSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FB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LEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDckQ7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVc7QUFDbkMsTUFBTSxDQUFDO0FBQ1AsTUFBTSxJQUFJLENBQUMsSUFBSTtBQUNmLFVBQVUsSUFBSSxDQUFDLEtBQUs7QUFDcEIsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDN0IsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07QUFDNUIsVUFBVSxLQUFLLENBQUMsTUFBTTtBQUN0QixLQUFLLENBQUM7QUFDTjtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUMzQztBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEM7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUQsU0FBUyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2pEO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztBQUN2RDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDbEMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO0FBQ3hDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDcEMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzNCLElB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LEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNoQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN2RCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDdEQsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pFO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNWO0FBQ0EsSUFBSSxRQUFRLElBQUksQ0FBQyxTQUFTO0FBQzFCLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbEIsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDcEIsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDckIsUUFBUSxNQUFNO0FBQ2QsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2xELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNDLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNkLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLElBQUk7QUFDSixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7QUFDM0UsTUFBTTtBQUNOLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFO0FBQ2pCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU87QUFDMUIsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDM0MsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDckIsTUFBTSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztB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RUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBSztBQUNyQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3REO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUc7QUFDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRTtBQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFFO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtBQUM5QixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FB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LEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQzNFO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7QUFDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7QUFDN0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFNO0FBQ3JDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFFO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNsQztBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0M7QUFDQSxZQUFZLEdBQUcsR0FBRyxNQUFLO0FBQ3ZCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsS0FBSTtBQUMvRTtBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRTtBQUNsTSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FB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LENBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFFO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQztBQUN2QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ3JCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSTtBQUNsRDtBQUNBLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFDO0FBQzVELFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQjtBQUNBO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDckUsU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRDtBQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFB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V0FBVyxHQUFFO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQ3pELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtBQUMzRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUM1RjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07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QUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztBQUMxRSxhQUFhLE9BQU8sVUFBVSxDQUFDO0FBQy9CO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdkIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUIsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ2hDO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekMsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEU7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQyxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvQztBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDbkMsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuQztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUM1QyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0IsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLFVBQVUsR0FBRztBQUNsQztBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDckQ7QUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7QUFDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN4RCxhQUFhLE1BQU0sS0FBSyxD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LENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hDO0FBQ0EsU0FBUyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlDLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNuQztBQUNBLFNBQVMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakMsU0FBUyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JDO0FBQ0EsU0FBUyxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDL0QsU0FBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNoRCxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUU7QUFDN0IsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFNBQVMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRztBQUN4QixPQUFPLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdkMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3hDLGVBQWUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbkQ7QUFDQSxPQUFPLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3hELE9BQU8sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDcEQ7QUFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNFLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQ7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUk7QUFDSixHQUFHO0FBQ0g7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxTQUFTLENBQUMsR0FBRztBQUNkO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNqRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbEQsVUFB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QUssT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hELEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDdkUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztBQUMzRSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdDO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDZjtBQUNBLEVBQUUsSUFBSSxDQUFDLFlBQVksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxhQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELGFBQWEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDNUI7QUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUM3QixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3BCO0FBQ0EsS0FBSyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxNQUFNLEVBQUU7QUFDMUM7QUFDQSxTQUFTLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUM1QixTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTTtBQUMxQixTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQzlDO0FBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEM7QUFDQSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN2QixNQUFNO0FBQ04sS0FBSyxPQUFPLElBQUksQ0FBQztBQUNqQjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0FBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0QyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3pCLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFdBQVcsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRTtBQUNqQixFQUFFLElBQUksQ0FBQyxHQUFHLE1BQUs7QUFDZjtBQUNBLEtBQWMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTztBQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNuQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBLEtBQUssSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzFDO0FBQ0EsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN0QjtBQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEU7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QztBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUUsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckQ7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQ1Y7QUFDQTtBQUNBLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25CO0FBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNoQztBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNoQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM1RDtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUM7QUFDM0QsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUU7QUFDOUM7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDOUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtBQUNuQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ3BDO0FBQ0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbkM7QUFD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LENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDdkU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsRSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNsRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyx3REFBd0QsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUM3SztBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsb0NBQW9DLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENB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LElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDbkQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNuRSxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMzRDtBQUNBLFFBQVEsSUFB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QUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNyRSxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7QUFDbEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUN4RSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDakMsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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SUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4RCxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0M7QUFDQSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0RixjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQzdEO0FBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUg7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDckMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDO0FBQzlDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUk7QUFDOUMsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcs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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2hFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEM7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRTtBQUM1QixRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQztBQUNqRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDbEI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUk7QUFDOUI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUU7QUFDOUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDdkM7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ2xUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsS0FBSyxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUk7QUFDckIsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUM7QUFDcEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDekIsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ1RPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSTtBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDekIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7QUFDM0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBQztBQUNwQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7QUFDNUM7QUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7QUFDM0IsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLG9DQUFvQyxHQUFHLEdBQUU7QUFDL0U7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLDRDQUE0QyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUM7QUFDNUgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQzVLO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQzFEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxz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QUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQzFDLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztBQUNsRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzVCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUM3QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUk7QUFDNUQ7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUss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Q0FBQztBQUM1RSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUU7QUFDQSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdkU7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0E7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDcEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRTtBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUM1QjtBQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RCxTQUFTLE1BQU07QUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVELFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFD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QUk7QUFDMUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQzdCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFJO0FBQ3hCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUU7QUFDM0IsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RDtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDdEMsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDaEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7QUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNyRDtBQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztBQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QjtBQUNBLFNBQVM7QUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3pELFFBQVEsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzVDLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzFDO0FBQ0E7QUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkIsWUFBWSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVDLFlBQVksSUFBSSxHQUFHLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxLQUFLLENBQUM7QUFDckQsU0FBUyxNQUFNO0FBQ2YsWUFBWSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyRCxZQUFZLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzFCLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRztBQUMzQztBQUNBLFlBQVksQ0FBQyxHQUFHLFVBQVUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDMUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQy9DLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUMvQyxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDaEQsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ2hELFlBQVksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQzlEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVEO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDcEMsUUFBUSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNyRTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDakM7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEMsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckY7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7QUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ25DLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNwQyxZQUFZLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqSTtBQUNBLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO0FBQ25LLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDekQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ2xRTyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUM7QUFDaEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFLO0FBQ2hDO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDakMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUN6RCxRQUFRLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUM1QztBQUNBO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztBQUN0QztBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEdBQUU7QUFDbkMsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksTUFBSztBQUMzQyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxNQUFLO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFRO0FBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQzVELFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxXQUFVO0FBQ3pFO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcs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QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDekMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3pDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2xEO0FBQ0EsU0FBUyxNQUFNO0FBQ2YsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDcEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDZDQUE2QyxDQUFDLENBQUM7QUFDdkcsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDN0MsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJ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LElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDckIsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEQsU0FBUyxNQUFNO0FBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtBQUNBLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FB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RSxDQUFDLEdBQUc7QUFDMUI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztBQUN2RSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQUs7QUFDdEMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNoRCxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFJO0FBQ2xELFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUk7QUFDM0MsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBQztBQUMzQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUU7QUFDNUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSTtBQUN6QyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMs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R0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQzVELFFBQVEsTUFBTTtBQUNkLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7QUFDYixJQUFJLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUQ7QUFDQSxJQUFJLElBQUksT0FBTztBQUNmLE1BQU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUU7QUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUMzQztBQUNBO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEQsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM1RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDakU7QUFDQSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4QixHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssR0FBRztBQUNWLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xCO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEI7QUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDckIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNyRCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuQjtBQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwQztBQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7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QVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3ZDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEw7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzlDO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEdBQUc7QUFDZDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Y7QUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQjtBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QztBQUNBLFlBQVksUUFBUSxDQUFDO0FBQ3JCO0FBQ0EsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxNQUFNO0FBQy9GLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07QUFDcEcsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUN4RyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO0FBQ3BHO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsWUFBWSxN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Q0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM1RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQixZQUFZLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFlBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxFQUFFLENBQUM7QUFDbEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEtBQUs7QUFDdkM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUMzQixRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUM3QixZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFDO0FBQzlDLFlB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TSxHQUFFO0FBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUc7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUM3QztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDO0FBQzdELFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQzNDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQ2hFLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRztBQUMxQixZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDO0FBQ2hFLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QixTQUFTLE1BQU07QUFDZixZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxHQUFHO0FB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QztBQUMvQixRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUU7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDbEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNuRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDOUY7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUM7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsd0JBQXdCLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNJLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUU7QUFDakM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUM5QyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNoRDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ3JFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDdEY7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBRztBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUU7QUFDdkI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxPQUFPLENBQUM7QUFDN0QsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztBQUMxRSxhQUFhLE9BQU8sS0FBSyxDQUFDO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFDMUM7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQy9CLFlBQVksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoQyxZQUFZLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFFO0FBQzFELFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDekU7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQy9CO0FBQ0EsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNsQjtBQUNBLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3ZELFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNqQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBLFFBQVEsUUFBUSxJQUFJO0FBQ3BCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDMUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7QUFDM0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUM7QUFDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7QUFDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7QUFDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDOUQ7QUFDQSxZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztBQUNoRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztBQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztBQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztBQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztBQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRTtBQUNwRTtBQUNBLFlBQVksTUFBTTtBQUNsQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHO0FBQy9CO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3REO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFNO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRztBQUMvQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFFO0FBQ3BIO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JSQTtBQUlBO0FBQ08sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0FBQ3BDLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDckI7QUFDQTtB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QUFDO0FBQzVDO0FBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0MsR0FBRyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtBQUMzQixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUMsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwRCxJQUFJLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNyQixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQyxLQUFLLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsS0FBSyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakQsS0FBSyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFF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QUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsUUFBUSxJQUFJO0FBQ3BCO0FBQ0EsWUFBWSxLQUFLLE1BQU0sQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDaEUsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3BELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN4RCxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDbEQsWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQzlDLFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNsRCxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDbEQsWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNoRCxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDaEQsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMs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QUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZjtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFB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T0FBTztBQUNyQztBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUQsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFO0FBQzVCLElBQUksSUFBSSxJQUFJO0FBQ1osTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDcEIsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDNUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDbEUsT0FBTyxDQUFDO0FBQ1I7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNwQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FB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LElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDOUU7QUFDQSxRQUFRLE1BQU07QUFDZCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ25DLElBQUksSUFBSSxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQztBQUNBLElBQUksSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDeEMsSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQztBQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7QUFDckIsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDL0IsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDekIsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUUxQixNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzlCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDckIsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMs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QUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2xFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNuRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6RDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVO0FBQzNDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzFELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLEdBQUc7QUFDWCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNkLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2xELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUTtBQUNyQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFO0FBQ2xCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ2hCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzFCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7Ozs7In0= diff --git a/examples/uil_pointer_events.html b/examples/uil_pointer_events.html new file mode 100644 index 0000000..cb16faa --- /dev/null +++ b/examples/uil_pointer_events.html @@ -0,0 +1,303 @@ + + + + UIL – TreeList demo + + + + + + +
    +
    mouse pad
    +
    + + + + diff --git a/examples/uil_treelist.html b/examples/uil_treelist.html index ec46c5e..e5a73c0 100644 --- a/examples/uil_treelist.html +++ b/examples/uil_treelist.html @@ -54,7 +54,7 @@ path: ['Animales','Aves'] // estado inicial que debe seguir el TreeList }; - const ui = new UIL.Gui({ w: 128*3, open: true, isCanvas: true, addDOMEventListeners: true ,parent:document.body}); + const ui = new UIL.Gui({ w: 128*3, open: true, isCanvas: true, addDOMEventListeners: true ,parent:null}); let gPart=ui.add("group",{name:"Particles",bg:"#444466"}) @@ -90,6 +90,8 @@ console.log("onDraw",e); }; + + document.body.appendChild(ui.canvas); function log(msg){ document.getElementById('log').textContent = msg; } g.open(); diff --git a/examples/uil_vr_test.html b/examples/uil_vr_test.html index d621251..4d56bb7 100644 --- a/examples/uil_vr_test.html +++ b/examples/uil_vr_test.html @@ -271,19 +271,19 @@ function onMouseUp( e ){ console.log("onMouseUp()") - ui.triggerMouseUp(); + ui.triggerMouseUpUV(); } function onMouseDown( e ){ console.log("onMouseDown()") - ui.triggerMouseDown(); + ui.triggerMouseDownUV(); } function onMouseMove( e ) { console.log("onMouseMove()") - ui.triggerMouseMove(); + ui.triggerMouseMoveUV(); raytest( e ); } @@ -316,17 +316,15 @@ window.faceAction1=function(){ ui.setMouse({x:0.75,y:0.76}); - ui.triggerMouseMove(); - ui.triggerMouseDown(); - ui.triggerMouseUp(); - - + ui.triggerMouseMoveUV(); + ui.triggerMouseDownUV(); + ui.triggerMouseUpUV(); setTimeout(()=>{ ui.setMouse({x:0.4,y:0.93}); - ui.triggerMouseMove(); - ui.triggerMouseDown(); - ui.triggerMouseUp(); + ui.triggerMouseMoveUV(); + ui.triggerMouseDownUV(); + ui.triggerMouseUpUV(); },200) } diff --git a/index.html b/index.html index 41dfd25..4162040 100644 --- a/index.html +++ b/index.html @@ -11,12 +11,23 @@
  • vr_test
  • +
  • uil_lumicles
  • + uil_to_canvas +
  • +
  • + uil_to_canvas2 +
  • +
  • uil_treelist
  • +
  • + uil_pointer_events +
  • + \ No newline at end of file diff --git a/src/core/Gui.js b/src/core/Gui.js index 102e37e..c0285ab 100644 --- a/src/core/Gui.js +++ b/src/core/Gui.js @@ -8,784 +8,825 @@ import { V2 } from "./V2.js"; */ export class Gui { - constructor(o = {}) { - this.isGui = true; + constructor(o = {}) { + this.isGui = true; - this.name = "gui"; + this.name = "gui"; - // for 3d - this.canvas = null; - this.screen = null; - this.plane = o.plane || null; + // for 3d + this.canvas = null; + this.screen = null; + this.plane = o.plane || null; - // color - if (o.config) o.colors = o.config; - if (o.colors) this.setConfig(o.colors); - else this.colors = Tools.defineColor(o); + // color + if (o.config) o.colors = o.config; + if (o.colors) this.setConfig(o.colors); + else this.colors = Tools.defineColor(o); - //this.cleanning = false - - // style - this.css = Tools.cloneCss(); - - this.isReset = true; - this.tmpAdd = null; - //this.tmpH = 0 - - this.isCanvas = o.isCanvas || false; - this.isCanvasOnly = false; - - // Modified by Fedemarino - // option to define whether the event listeners should be added or not - Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") - ? o.addDOMEventListeners - : true; - - this.callback = o.callback === undefined ? null : o.callback; - - this.forceHeight = o.maxHeight || 0; - this.lockHeight = o.lockHeight || false; - - this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; - - this.cn = ""; - - // size define - this.size = Tools.size; - if (o.p !== undefined) this.size.p = o.p; - if (o.w !== undefined) this.size.w = o.w; - if (o.h !== undefined) this.size.h = o.h; - if (o.s !== undefined) this.size.s = o.s; - - this.size.h = this.size.h < 11 ? 11 : this.size.h; - - // local mouse and zone - this.local = new V2().neg(); - this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; - - // virtual mouse - this.mouse = new V2().neg(); - - this.h = 0; - //this.prevY = -1; - this.sw = 0; - - this.margin = this.colors.sy; - this.marginDiv = Tools.isDivid(this.margin); - - // bottom and close height - this.isWithClose = o.close !== undefined ? o.close : true; - this.bh = !this.isWithClose ? 0 : this.size.h; - - this.autoResize = o.autoResize === undefined ? true : o.autoResize; - - // default position - this.isCenter = o.center || false; - this.cssGui = - o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; - - this.isOpen = o.open !== undefined ? o.open : true; - this.isDown = false; - this.isScroll = false; - - this.uis = []; - this.current = -1; - this.proto = null; - this.isEmpty = true; - this.decal = 0; - this.ratio = 1; - this.oy = 0; - - this.isNewTarget = false; - - let cc = this.colors; - - this.content = Tools.dom( - "div", - this.css.basic + - " width:0px; height:auto; top:0px; background:" + - cc.content + - "; " + - this.cssGui - ); - - this.innerContent = Tools.dom( - "div", - this.css.basic + - "width:100%; top:0; left:0; height:auto; overflow:hidden;" - ); - //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); - this.content.appendChild(this.innerContent); - - //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') - this.useFlex = true; - let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; - this.inner = Tools.dom( - "div", - this.css.basic + flexible + "width:100%; left:0; " - ); - this.innerContent.appendChild(this.inner); - - // scroll - this.scrollBG = Tools.dom( - "div", - this.css.basic + - "right:0; top:0; width:" + - (this.size.s - 1) + - "px; height:10px; display:none; background:" + - cc.background + - ";" - ); - this.content.appendChild(this.scrollBG); - - this.scroll = Tools.dom( - "div", - this.css.basic + - "background:" + - cc.button + - "; right:2px; top:0; width:" + - (this.size.s - 4) + - "px; height:10px;" - ); - this.scrollBG.appendChild(this.scroll); - - // bottom button - this.bottomText = o.bottomText || ["open", "close"]; - - let r = cc.radius; - this.bottom = Tools.dom( - "div", - this.css.txt + - "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + - r + - "px; border-bottom-left-radius:" + - r + - "px; justify-content:center; height:" + - this.bh + - "px; line-height:" + - (this.bh - 5) + - "px; color:" + - cc.text + - ";" - ); // border-top:1px solid '+Tools.colors.stroke+';'); - this.content.appendChild(this.bottom); - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - this.bottom.style.background = cc.background; - - // - - this.parent = o.parent !== undefined ? o.parent : null; - this.parent = o.target !== undefined ? o.target : this.parent; - - if (this.parent === null && !this.isCanvas) { - this.parent = document.body; - } - - if (this.parent !== null) this.parent.appendChild(this.content); - - if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; - - if (!this.isCanvasOnly) { - this.content.style.pointerEvents = "auto"; - } else { - this.content.style.left = "0px"; - this.content.style.right = "auto"; - o.transition = 0; - } - - // height transition - this.transition = - o.transition !== undefined ? o.transition : Tools.transition; - if (this.transition) setTimeout(this.addTransition.bind(this), 1000); - - this.setWidth(); - - if (this.isCanvas) this.makeCanvas(); - - Roots.add(this); - } - - triggerMouseDown(x, y) { - Roots.handleEvent({ - type: "pointerdown", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseMove() { - Roots.handleEvent({ - type: "pointermove", - clientX: -1, - clientY: -1, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - triggerMouseUp(x, y) { - /* - - clientX,clientY are no used when isCanvas==true - */ - Roots.handleEvent({ - type: "pointerup", - clientX: x, - clientY: y, - delta: 0, - key: null, - keyCode: NaN, - }); - } - - setTop(t, h) { - this.content.style.top = t + "px"; - if (h !== undefined) this.forceHeight = h; - this.calc(); - - Roots.needReZone = true; - } - - addTransition() { - if (this.transition && !this.isCanvas) { - this.innerContent.style.transition = - "height " + this.transition + "s ease-out"; - this.content.style.transition = - "height " + this.transition + "s ease-out"; - this.bottom.style.transition = - "top " + this.transition + "s ease-out"; - //this.bottom.addEventListener("transitionend", Roots.resize, true); - } - - let i = this.uis.length; - while (i--) this.uis[i].addTransition(); - } - - // ---------------------- - // CANVAS - // ---------------------- - - onDraw() {} - - makeCanvas() { - this.canvas = document.createElementNS( - "http://www.w3.org/1999/xhtml", - "canvas" - ); - this.canvas.width = this.zone.w; - this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; - - //console.log( this.canvas.width, this.canvas.height ) - } - - draw(force) { - if (this.canvas === null) return; - - let w = this.zone.w; - let h = this.forceHeight ? this.forceHeight : this.zone.h; - Roots.toCanvas(this, w, h, force); - } - - ////// - - getDom() { - return this.content; - } - - noMouse() { - this.mouse.neg(); - } - - setMouse(uv, flip = true) { - if (flip) - this.mouse.set( - Math.round(uv.x * this.canvas.width), - this.canvas.height - Math.round(uv.y * this.canvas.height) - ); - else - this.mouse.set( - Math.round(uv.x * this.canvas.width), - Math.round(uv.y * this.canvas.height) - ); - //this.mouse.set( m.x, m.y ); - - console.log("setMouse " + uv.x + " " + uv.y); - } - - setConfig(o) { - // reset to default text - Tools.setText(); - this.colors = Tools.defineColor(o); - } - - setColors(o) { - for (let c in o) { - if (this.colors[c]) this.colors[c] = o[c]; - } - } - - setText(size, color, font, shadow) { - Tools.setText(size, color, font, shadow); - } - - hide(b) { - this.content.style.visibility = b ? "hidden" : "visible"; - } - - display(v = false) { - this.content.style.visibility = v ? "visible" : "hidden"; - } - - onChange(f) { - this.callback = f || null; - return this; - } - - // ---------------------- - // STYLES - // ---------------------- - - mode(n) { - let needChange = false; - let cc = this.colors; - - if (n !== this.cn) { - this.cn = n; - - switch (n) { - case "def": - Roots.cursor(); - this.scroll.style.background = cc.button; - this.bottom.style.background = cc.background; - this.bottom.style.color = cc.text; - break; - - //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; - case "scrollOver": - Roots.cursor("ns-resize"); - this.scroll.style.background = cc.select; - break; - case "scrollDown": - this.scroll.style.background = cc.select; - break; - - //case 'bottomDef': this.bottom.style.background = this.colors.background; break; - case "bottomOver": - Roots.cursor("pointer"); - this.bottom.style.background = cc.backgroundOver; - this.bottom.style.color = cc.textOver; - break; - //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; - } - - needChange = true; - } - - return needChange; - } - - // ---------------------- - // TARGET - // ---------------------- - - clearTarget() { - if (this.current === -1) return false; - if (this.proto.s) { - // if no s target is delete !! - this.proto.uiout(); - this.proto.reset(); - } - - this.proto = null; - this.current = -1; - - ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); - - Roots.cursor(); - return true; - } - - // ---------------------- - // ZONE TEST - // ---------------------- - - testZone(e) { - let l = this.local; - if (l.x === -1 && l.y === -1) return ""; - - this.isReset = false; - - let name = ""; - - let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; - - if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; - else name = l.x > s ? "scroll" : "content"; - - return name; - } - - // ---------------------- - // EVENTS - // ---------------------- - - handleEvent(e) { - //if( this.cleanning ) return - - //console.log("Gui.handleEvent") - //console.log(e); - let type = e.type; - - let change = false; - let protoChange = false; - - let name = this.testZone(e); - - if (type === "mouseup" && this.isDown) this.isDown = false; - if (type === "mousedown" && !this.isDown) this.isDown = true; - - if (this.isDown && this.isNewTarget) { - Roots.clearInput(); - this.isNewTarget = false; - } + //this.cleanning = false + + // style + this.css = Tools.cloneCss(); + + this.isReset = true; + this.tmpAdd = null; + //this.tmpH = 0 + + this.isCanvas = o.isCanvas || false; + this.isCanvasOnly = false; + + // Modified by Fedemarino + // option to define whether the event listeners should be added or not + Roots.addDOMEventListeners = o.hasOwnProperty("addDOMEventListeners") + ? o.addDOMEventListeners + : true; + + this.callback = o.callback === undefined ? null : o.callback; + + this.forceHeight = o.maxHeight || 0; + this.lockHeight = o.lockHeight || false; + + this.isItemMode = o.itemMode !== undefined ? o.itemMode : false; + + this.cn = ""; + + // size define + this.size = Tools.size; + if (o.p !== undefined) this.size.p = o.p; + if (o.w !== undefined) this.size.w = o.w; + if (o.h !== undefined) this.size.h = o.h; + if (o.s !== undefined) this.size.s = o.s; + + this.size.h = this.size.h < 11 ? 11 : this.size.h; + + // local mouse and zone + this.local = new V2().neg(); + this.zone = { x: 0, y: 0, w: this.size.w, h: 0 }; + + // virtual mouse + this.mouse = new V2().neg(); + + this.h = 0; + //this.prevY = -1; + this.sw = 0; + + this.margin = this.colors.sy; + this.marginDiv = Tools.isDivid(this.margin); + + // bottom and close height + this.isWithClose = o.close !== undefined ? o.close : true; + this.bh = !this.isWithClose ? 0 : this.size.h; + + this.autoResize = o.autoResize === undefined ? true : o.autoResize; + + // default position + this.isCenter = o.center || false; + this.cssGui = + o.css !== undefined ? o.css : this.isCenter ? "" : "right:10px;"; + + this.isOpen = o.open !== undefined ? o.open : true; + this.isDown = false; + this.isScroll = false; + + this.uis = []; + this.current = -1; + this.proto = null; + this.isEmpty = true; + this.decal = 0; + this.ratio = 1; + this.oy = 0; + + this.isNewTarget = false; + + let cc = this.colors; + + this.content = Tools.dom( + "div", + this.css.basic + + " width:0px; height:auto; top:0px; background:" + + cc.content + + "; " + + this.cssGui + ); + + this.innerContent = Tools.dom( + "div", + this.css.basic + + "width:100%; top:0; left:0; height:auto; overflow:hidden;" + ); + //this.innerContent = Tools.dom( 'div', this.css.basic + this.css.button + 'width:100%; top:0; left:0; height:auto; overflow:hidden;'); + this.content.appendChild(this.innerContent); + + //this.inner = Tools.dom( 'div', this.css.basic + 'width:100%; left:0; ') + this.useFlex = true; + let flexible = this.useFlex ? "display:flex; flex-flow: row wrap;" : ""; //' display:flex; justify-content:start; align-items:start;flex-direction: column; justify-content: center; align-items: center;'; + this.inner = Tools.dom( + "div", + this.css.basic + flexible + "width:100%; left:0; " + ); + this.innerContent.appendChild(this.inner); + + // scroll + this.scrollBG = Tools.dom( + "div", + this.css.basic + + "right:0; top:0; width:" + + (this.size.s - 1) + + "px; height:10px; display:none; background:" + + cc.background + + ";" + ); + this.content.appendChild(this.scrollBG); + + this.scroll = Tools.dom( + "div", + this.css.basic + + "background:" + + cc.button + + "; right:2px; top:0; width:" + + (this.size.s - 4) + + "px; height:10px;" + ); + this.scrollBG.appendChild(this.scroll); + + // bottom button + this.bottomText = o.bottomText || ["open", "close"]; + + let r = cc.radius; + this.bottom = Tools.dom( + "div", + this.css.txt + + "width:100%; top:auto; bottom:0; left:0; border-bottom-right-radius:" + + r + + "px; border-bottom-left-radius:" + + r + + "px; justify-content:center; height:" + + this.bh + + "px; line-height:" + + (this.bh - 5) + + "px; color:" + + cc.text + + ";" + ); // border-top:1px solid '+Tools.colors.stroke+';'); + this.content.appendChild(this.bottom); + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + this.bottom.style.background = cc.background; + + // + + this.parent = o.parent !== undefined ? o.parent : null; + this.parent = o.target !== undefined ? o.target : this.parent; + + if (this.parent === null && !this.isCanvas) { + this.parent = document.body; + } + + if (this.parent !== null) this.parent.appendChild(this.content); + + if (this.isCanvas && this.parent === null) this.isCanvasOnly = true; + + if (!this.isCanvasOnly) { + this.content.style.pointerEvents = "auto"; + } else { + this.content.style.left = "0px"; + this.content.style.right = "auto"; + o.transition = 0; + } + + // height transition + this.transition = + o.transition !== undefined ? o.transition : Tools.transition; + if (this.transition) setTimeout(this.addTransition.bind(this), 1000); + + this.setWidth(); + + if (this.isCanvas) this.makeCanvas(); + + Roots.add(this); + } + + triggerMouseDown(x, y) { + console.warn("Gui.triggerMouseDown is deprecated, use triggerMouseDownUV instead"); + /* + Roots.handleEvent({ + type: "pointerdown", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + });*/ + } + + triggerMouseMove() { + console.warn("Gui.triggerMouseMove is deprecated, use triggerMouseMoveUV instead"); + /* + Roots.handleEvent({ + type: "pointermove", + clientX: -1, + clientY: -1, + delta: 0, + key: null, + keyCode: NaN, + });*/ + } + + triggerMouseUp(x, y) { + + console.warn("Gui.triggerMouseUp is deprecated, use triggerMouseUpUV instead"); + /* + Roots.handleEvent({ + type: "pointerup", + clientX: x, + clientY: y, + delta: 0, + key: null, + keyCode: NaN, + });*/ + } + + // Gui.js + triggerMouseDownUV(u, v, { flipY = true } = {}) { + // u, v en [0,1] relativos al rect del GUI + const x = this.zone.x + Math.round(u * this.zone.w); + const y = this.zone.y + Math.round((flipY ? 1 - v : v) * this.zone.h); + Roots.handleEvent({ + type: "pointerdown", + clientX: isNaN(x) ? null : x, + clientY: isNaN(y) ? null : y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseUpUV(u, v, { flipY = true } = {}) { + const x = this.zone.x + Math.round(u * this.zone.w); + const y = this.zone.y + Math.round((flipY ? 1 - v : v) * this.zone.h); + + Roots.handleEvent({ + type: "pointerup", + clientX: isNaN(x) ? null : x, + clientY: isNaN(y) ? null : y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + triggerMouseMoveUV(u, v, { flipY = true } = {}) { + const x = this.zone.x + Math.round(u * this.zone.w); + const y = this.zone.y + Math.round((flipY ? 1 - v : v) * this.zone.h); + Roots.handleEvent({ + type: "pointermove", + clientX: isNaN(x) ? null : x, + clientY: isNaN(y) ? null : y, + delta: 0, + key: null, + keyCode: NaN, + }); + } + + setTop(t, h) { + this.content.style.top = t + "px"; + if (h !== undefined) this.forceHeight = h; + this.calc(); + + Roots.needReZone = true; + } + + addTransition() { + if (this.transition && !this.isCanvas) { + this.innerContent.style.transition = + "height " + this.transition + "s ease-out"; + this.content.style.transition = + "height " + this.transition + "s ease-out"; + this.bottom.style.transition = "top " + this.transition + "s ease-out"; + //this.bottom.addEventListener("transitionend", Roots.resize, true); + } + + let i = this.uis.length; + while (i--) this.uis[i].addTransition(); + } + + // ---------------------- + // CANVAS + // ---------------------- + + onDraw() {} + + makeCanvas() { + this.canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); + this.canvas.width = this.zone.w; + this.canvas.height = this.forceHeight ? this.forceHeight : this.zone.h; + + //console.log( this.canvas.width, this.canvas.height ) + } + + draw(force) { + if (this.canvas === null) return; + + let w = this.zone.w; + let h = this.forceHeight ? this.forceHeight : this.zone.h; + Roots.toCanvas(this, w, h, force); + } + + ////// + + getDom() { + return this.content; + } + + noMouse() { + this.mouse.neg(); + } + + setMouse(uv, flip = true) { + if (flip) + this.mouse.set( + Math.round(uv.x * this.canvas.width), + this.canvas.height - Math.round(uv.y * this.canvas.height) + ); + else + this.mouse.set( + Math.round(uv.x * this.canvas.width), + Math.round(uv.y * this.canvas.height) + ); + //this.mouse.set( m.x, m.y ); + + //console.log("setMouse " + uv.x + " " + uv.y); + } + + setConfig(o) { + // reset to default text + Tools.setText(); + this.colors = Tools.defineColor(o); + } + + setColors(o) { + for (let c in o) { + if (this.colors[c]) this.colors[c] = o[c]; + } + } + + setText(size, color, font, shadow) { + Tools.setText(size, color, font, shadow); + } + + hide(b) { + this.content.style.visibility = b ? "hidden" : "visible"; + } + + display(v = false) { + this.content.style.visibility = v ? "visible" : "hidden"; + } + + onChange(f) { + this.callback = f || null; + return this; + } + + // ---------------------- + // STYLES + // ---------------------- + + mode(n) { + let needChange = false; + let cc = this.colors; + + if (n !== this.cn) { + this.cn = n; + + switch (n) { + case "def": + Roots.cursor(); + this.scroll.style.background = cc.button; + this.bottom.style.background = cc.background; + this.bottom.style.color = cc.text; + break; + + //case 'scrollDef': this.scroll.style.background = this.colors.scroll; break; + case "scrollOver": + Roots.cursor("ns-resize"); + this.scroll.style.background = cc.select; + break; + case "scrollDown": + this.scroll.style.background = cc.select; + break; + + //case 'bottomDef': this.bottom.style.background = this.colors.background; break; + case "bottomOver": + Roots.cursor("pointer"); + this.bottom.style.background = cc.backgroundOver; + this.bottom.style.color = cc.textOver; + break; + //case 'bottomDown': this.bottom.style.background = this.colors.select; this.bottom.style.color = '#000'; break; + } + + needChange = true; + } + + return needChange; + } + + // ---------------------- + // TARGET + // ---------------------- + + clearTarget() { + if (this.current === -1) return false; + if (this.proto.s) { + // if no s target is delete !! + this.proto.uiout(); + this.proto.reset(); + } + + this.proto = null; + this.current = -1; + + ///console.log(this.isDown)//if(this.isDown)Roots.clearInput(); + + Roots.cursor(); + return true; + } + + // ---------------------- + // ZONE TEST + // ---------------------- + + testZone(e) { + let l = this.local; + if (l.x === -1 && l.y === -1) return ""; + + this.isReset = false; + + let name = ""; + + let s = this.isScroll ? this.zone.w - this.size.s : this.zone.w; + + if (l.y > this.zone.h - this.bh && l.y < this.zone.h) name = "bottom"; + else name = l.x > s ? "scroll" : "content"; + + return name; + } + + // ---------------------- + // EVENTS + // ---------------------- + + handleEvent(e) { + //if( this.cleanning ) return + + //console.log("Gui.handleEvent") + //console.log(e); + let type = e.type; + + let change = false; + let protoChange = false; + + let name = this.testZone(e); + + if (type === "mouseup" && this.isDown) this.isDown = false; + if (type === "mousedown" && !this.isDown) this.isDown = true; - if (!name) return; - - switch (name) { - case "content": - e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - - if (Roots.isMobile && type === "mousedown") - this.getNext(e, change); + if (this.isDown && this.isNewTarget) { + Roots.clearInput(); + this.isNewTarget = false; + } - if (this.proto) protoChange = this.proto.handleEvent(e); + if (!name) return; - if (type === "mousemove") change = this.mode("def"); - if (type === "wheel" && !protoChange && this.isScroll) - change = this.onWheel(e); + switch (name) { + case "content": + e.clientY = this.isScroll ? e.clientY + this.decal : e.clientY; - if (!Roots.lock) { - this.getNext(e, change); - } + if (Roots.isMobile && type === "mousedown") this.getNext(e, change); - break; - case "bottom": - this.clearTarget(); - if (type === "mousemove") change = this.mode("bottomOver"); - if (type === "mousedown") { - this.isOpen = this.isOpen ? false : true; - this.bottom.textContent = this.isOpen - ? this.bottomText[1] - : this.bottomText[0]; - //this.setHeight(); - this.calc(); - this.mode("def"); - change = true; - } + if (this.proto) protoChange = this.proto.handleEvent(e); - break; - case "scroll": - this.clearTarget(); - if (type === "mousemove") change = this.mode("scrollOver"); - if (type === "mousedown") change = this.mode("scrollDown"); - if (type === "wheel") change = this.onWheel(e); - if (this.isDown) - this.update(e.clientY - this.zone.y - this.sh * 0.5); + if (type === "mousemove") change = this.mode("def"); + if (type === "wheel" && !protoChange && this.isScroll) + change = this.onWheel(e); - break; - } + if (!Roots.lock) { + this.getNext(e, change); + } - if (this.isDown) change = true; - if (protoChange) change = true; + break; + case "bottom": + this.clearTarget(); + if (type === "mousemove") change = this.mode("bottomOver"); + if (type === "mousedown") { + this.isOpen = this.isOpen ? false : true; + this.bottom.textContent = this.isOpen + ? this.bottomText[1] + : this.bottomText[0]; + //this.setHeight(); + this.calc(); + this.mode("def"); + change = true; + } - if (type === "keyup") change = true; - if (type === "keydown") change = true; + break; + case "scroll": + this.clearTarget(); + if (type === "mousemove") change = this.mode("scrollOver"); + if (type === "mousedown") change = this.mode("scrollDown"); + if (type === "wheel") change = this.onWheel(e); + if (this.isDown) this.update(e.clientY - this.zone.y - this.sh * 0.5); - if (change) this.draw(); - } + break; + } - getNext(e, change) { - let next = Roots.findTarget(this.uis, e); + if (this.isDown) change = true; + if (protoChange) change = true; - if (next !== this.current) { - this.clearTarget(); - this.current = next; - change = true; - this.isNewTarget = true; - } + if (type === "keyup") change = true; + if (type === "keydown") change = true; - if (next !== -1) { - this.proto = this.uis[this.current]; - this.proto.uiover(); - } - } + if (change) this.draw(); + } - onWheel(e) { - this.oy += 20 * e.delta; - this.update(this.oy); - return true; - } + getNext(e, change) { + let next = Roots.findTarget(this.uis, e); - // ---------------------- - // RESET - // ---------------------- + if (next !== this.current) { + this.clearTarget(); + this.current = next; + change = true; + this.isNewTarget = true; + } - reset(force) { - if (this.isReset) return; + if (next !== -1) { + this.proto = this.uis[this.current]; + this.proto.uiover(); + } + } - //this.resetItem(); + onWheel(e) { + this.oy += 20 * e.delta; + this.update(this.oy); + return true; + } - this.mouse.neg(); - this.isDown = false; + // ---------------------- + // RESET + // ---------------------- - //Roots.clearInput(); - let r = this.mode("def"); - let r2 = this.clearTarget(); + reset(force) { + if (this.isReset) return; - if (r || r2) this.draw(true); + //this.resetItem(); - this.isReset = true; + this.mouse.neg(); + this.isDown = false; - //Roots.lock = false; - } + //Roots.clearInput(); + let r = this.mode("def"); + let r2 = this.clearTarget(); - // ---------------------- - // ADD NODE - // ---------------------- + if (r || r2) this.draw(true); - add() { - //if(this.cleanning) this.cleanning = false + this.isReset = true; - let a = arguments; - let ontop = false; + //Roots.lock = false; + } - if (typeof a[1] === "object") { - a[1].isUI = true; - a[1].main = this; + // ---------------------- + // ADD NODE + // ---------------------- - ontop = a[1].ontop ? a[1].ontop : false; - } else if (typeof a[1] === "string") { - if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); - else { - a[2].isUI = true; - a[2].main = this; - //ontop = a[1].ontop ? a[1].ontop : false; - ontop = a[2].ontop ? a[2].ontop : false; - } - } - - let u = add.apply(this, a); - - if (u === null) return; + add() { + //if(this.cleanning) this.cleanning = false - if (ontop) this.uis.unshift(u); - else this.uis.push(u); + let a = arguments; + let ontop = false; - this.calc(); + if (typeof a[1] === "object") { + a[1].isUI = true; + a[1].main = this; - this.isEmpty = false; + ontop = a[1].ontop ? a[1].ontop : false; + } else if (typeof a[1] === "string") { + if (a[2] === undefined) [].push.call(a, { isUI: true, main: this }); + else { + a[2].isUI = true; + a[2].main = this; + //ontop = a[1].ontop ? a[1].ontop : false; + ontop = a[2].ontop ? a[2].ontop : false; + } + } + + let u = add.apply(this, a); + + if (u === null) return; - return u; - } + if (ontop) this.uis.unshift(u); + else this.uis.push(u); - // remove one node + this.calc(); - remove(n) { - if (n.dispose) n.dispose(); - } + this.isEmpty = false; - // call after uis clear + return u; + } - clearOne(n) { - let id = this.uis.indexOf(n); - if (id !== -1) { - //this.calc( - (this.uis[ id ].h + 1 ) ); - this.inner.removeChild(this.uis[id].c[0]); - this.uis.splice(id, 1); - this.calc(); - } - } + // remove one node - // clear all gui + remove(n) { + if (n.dispose) n.dispose(); + } - empty() { - //this.cleanning = true + // call after uis clear - //this.close(); + clearOne(n) { + let id = this.uis.indexOf(n); + if (id !== -1) { + //this.calc( - (this.uis[ id ].h + 1 ) ); + this.inner.removeChild(this.uis[id].c[0]); + this.uis.splice(id, 1); + this.calc(); + } + } - let i = this.uis.length, - item; + // clear all gui - while (i--) { - item = this.uis.pop(); - this.inner.removeChild(item.c[0]); - item.dispose(); - } + empty() { + //this.cleanning = true - this.uis = []; - this.isEmpty = true; - this.calc(); - } + //this.close(); - clear() { - this.empty(); - } + let i = this.uis.length, + item; - clear2() { - setTimeout(this.empty.bind(this), 0); - } + while (i--) { + item = this.uis.pop(); + this.inner.removeChild(item.c[0]); + item.dispose(); + } - dispose() { - this.clear(); - if (this.parent !== null) this.parent.removeChild(this.content); - Roots.remove(this); - } + this.uis = []; + this.isEmpty = true; + this.calc(); + } - // ---------------------- - // ITEMS SPECIAL - // ---------------------- + clear() { + this.empty(); + } - resetItem() { - if (!this.isItemMode) return; + clear2() { + setTimeout(this.empty.bind(this), 0); + } - let i = this.uis.length; - while (i--) this.uis[i].selected(); - } + dispose() { + this.clear(); + if (this.parent !== null) this.parent.removeChild(this.content); + Roots.remove(this); + } - setItem(name) { - if (!this.isItemMode) return; + // ---------------------- + // ITEMS SPECIAL + // ---------------------- - name = name || ""; - this.resetItem(); + resetItem() { + if (!this.isItemMode) return; - if (!name) { - this.update(0); - return; - } + let i = this.uis.length; + while (i--) this.uis[i].selected(); + } - let i = this.uis.length; - while (i--) { - if (this.uis[i].value === name) { - this.uis[i].selected(true); - if (this.isScroll) - this.update(i * (this.uis[i].h + this.margin) * this.ratio); - } - } - } + setItem(name) { + if (!this.isItemMode) return; - // ---------------------- - // SCROLL - // ---------------------- + name = name || ""; + this.resetItem(); - upScroll(b) { - this.sw = b ? this.size.s : 0; - this.oy = b ? this.oy : 0; - this.scrollBG.style.display = b ? "block" : "none"; + if (!name) { + this.update(0); + return; + } - if (b) { - this.total = this.h; + let i = this.uis.length; + while (i--) { + if (this.uis[i].value === name) { + this.uis[i].selected(true); + if (this.isScroll) + this.update(i * (this.uis[i].h + this.margin) * this.ratio); + } + } + } - this.maxView = this.maxHeight; - - this.ratio = this.maxView / this.total; - this.sh = this.maxView * this.ratio; - - this.range = this.maxView - this.sh; - - this.oy = Tools.clamp(this.oy, 0, this.range); - - this.scrollBG.style.height = this.maxView + "px"; - this.scroll.style.height = this.sh + "px"; - } - - this.setItemWidth(this.zone.w - this.sw); - this.update(this.oy); - } - - update(y) { - y = Tools.clamp(y, 0, this.range); + // ---------------------- + // SCROLL + // ---------------------- - this.decal = Math.floor(y / this.ratio); - this.inner.style.top = -this.decal + "px"; - this.scroll.style.top = Math.floor(y) + "px"; - this.oy = y; - } - - // ---------------------- - // RESIZE FUNCTION - // ---------------------- - - calcUis() { - return Roots.calcUis(this.uis, this.zone, this.zone.y); - } - - calc() { - clearTimeout(this.tmp); - this.tmp = setTimeout(this.setHeight.bind(this), 10); - } - - setHeight() { - if (this.tmp) clearTimeout(this.tmp); - - this.zone.h = this.bh; - this.isScroll = false; - - if (this.isOpen) { - this.h = this.calcUis(); - - let hhh = this.forceHeight - ? this.forceHeight + this.zone.y - : window.innerHeight; - - this.maxHeight = hhh - this.zone.y - this.bh; - - let diff = this.h - this.maxHeight; + upScroll(b) { + this.sw = b ? this.size.s : 0; + this.oy = b ? this.oy : 0; + this.scrollBG.style.display = b ? "block" : "none"; - if (diff > 1) { - this.isScroll = true; - this.zone.h = this.maxHeight + this.bh; - } else { - this.zone.h = this.h + this.bh; - } - } - - this.upScroll(this.isScroll); - - this.innerContent.style.height = this.zone.h - this.bh + "px"; - this.content.style.height = this.zone.h + "px"; - this.bottom.style.top = this.zone.h - this.bh + "px"; - - if (this.forceHeight && this.lockHeight) - this.content.style.height = this.forceHeight + "px"; - if (this.isCanvas) this.draw(true); - } - - rezone() { - Roots.needReZone = true; - } - - setWidth(w) { - if (w) this.zone.w = w; - - this.zone.w = Math.floor(this.zone.w); - this.content.style.width = this.zone.w + "px"; - if (this.isCenter) - this.content.style.marginLeft = - -Math.floor(this.zone.w * 0.5) + "px"; - this.setItemWidth(this.zone.w - this.sw); - } + if (b) { + this.total = this.h; - setItemWidth(w) { - let i = this.uis.length; - while (i--) { - this.uis[i].setSize(w); - this.uis[i].rSize(); - } - } + this.maxView = this.maxHeight; + + this.ratio = this.maxView / this.total; + this.sh = this.maxView * this.ratio; + + this.range = this.maxView - this.sh; + + this.oy = Tools.clamp(this.oy, 0, this.range); + + this.scrollBG.style.height = this.maxView + "px"; + this.scroll.style.height = this.sh + "px"; + } + + this.setItemWidth(this.zone.w - this.sw); + this.update(this.oy); + } + + update(y) { + y = Tools.clamp(y, 0, this.range); + + this.decal = Math.floor(y / this.ratio); + this.inner.style.top = -this.decal + "px"; + this.scroll.style.top = Math.floor(y) + "px"; + this.oy = y; + } + + // ---------------------- + // RESIZE FUNCTION + // ---------------------- + + calcUis() { + return Roots.calcUis(this.uis, this.zone, this.zone.y); + } + + calc() { + clearTimeout(this.tmp); + this.tmp = setTimeout(this.setHeight.bind(this), 10); + } + + setHeight() { + if (this.tmp) clearTimeout(this.tmp); + + this.zone.h = this.bh; + this.isScroll = false; + + if (this.isOpen) { + this.h = this.calcUis(); + + let hhh = this.forceHeight + ? this.forceHeight + this.zone.y + : window.innerHeight; + + this.maxHeight = hhh - this.zone.y - this.bh; + + let diff = this.h - this.maxHeight; + + if (diff > 1) { + this.isScroll = true; + this.zone.h = this.maxHeight + this.bh; + } else { + this.zone.h = this.h + this.bh; + } + } + + this.upScroll(this.isScroll); + + this.innerContent.style.height = this.zone.h - this.bh + "px"; + this.content.style.height = this.zone.h + "px"; + this.bottom.style.top = this.zone.h - this.bh + "px"; + + if (this.forceHeight && this.lockHeight) + this.content.style.height = this.forceHeight + "px"; + if (this.isCanvas) this.draw(true); + } + + rezone() { + Roots.needReZone = true; + } + + setWidth(w) { + if (w) this.zone.w = w; + + this.zone.w = Math.floor(this.zone.w); + this.content.style.width = this.zone.w + "px"; + if (this.isCenter) + this.content.style.marginLeft = -Math.floor(this.zone.w * 0.5) + "px"; + this.setItemWidth(this.zone.w - this.sw); + } + + setItemWidth(w) { + let i = this.uis.length; + while (i--) { + this.uis[i].setSize(w); + this.uis[i].rSize(); + } + } } diff --git a/src/core/Roots.js b/src/core/Roots.js index d4601f5..830748b 100644 --- a/src/core/Roots.js +++ b/src/core/Roots.js @@ -293,6 +293,10 @@ const R = { if (R.ID.isCanvasOnly) { e.clientX = R.ID.mouse.x; e.clientY = R.ID.mouse.y; + } else if (R.ID.isCanvas) { + // NUEVO: si es canvas con parent, usar mouse virtual + offset del GUI + e.clientX = R.ID.zone.x + R.ID.mouse.x; + e.clientY = R.ID.zone.y + R.ID.mouse.y; } //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 From 445192928ca3b04e9342aab7a6197ff95c7509e0 Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Wed, 17 Sep 2025 19:29:00 -0300 Subject: [PATCH 15/17] cambios de texto --- TODO.txt | 0 examples/uil_to_canvas2.html | 162 ----------------------------------- examples/uil_treelist.html | 7 +- index.html | 27 ++++-- 4 files changed, 23 insertions(+), 173 deletions(-) create mode 100644 TODO.txt delete mode 100644 examples/uil_to_canvas2.html diff --git a/TODO.txt b/TODO.txt new file mode 100644 index 0000000..e69de29 diff --git a/examples/uil_to_canvas2.html b/examples/uil_to_canvas2.html deleted file mode 100644 index 3d8227c..0000000 --- a/examples/uil_to_canvas2.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - -Uil to Canvas - - - - - - - - - -
    -
    -
    - - - \ No newline at end of file diff --git a/examples/uil_treelist.html b/examples/uil_treelist.html index e5a73c0..f991286 100644 --- a/examples/uil_treelist.html +++ b/examples/uil_treelist.html @@ -54,7 +54,7 @@ path: ['Animales','Aves'] // estado inicial que debe seguir el TreeList }; - const ui = new UIL.Gui({ w: 128*3, open: true, isCanvas: true, addDOMEventListeners: true ,parent:null}); + const ui = new UIL.Gui({ w: 128*3, open: true, isCanvas: true, addDOMEventListeners: true ,parent:document.body}); let gPart=ui.add("group",{name:"Particles",bg:"#444466"}) @@ -91,7 +91,7 @@ }; - document.body.appendChild(ui.canvas); + //document.body.appendChild(ui.canvas); function log(msg){ document.getElementById('log').textContent = msg; } g.open(); @@ -100,11 +100,12 @@ } // create button on the DOM + /* const button = document.createElement('button'); button.textContent = 'Set State to Colores/Fríos'; button.onclick = onClickSetState1; document.body.appendChild(button); - +*/ diff --git a/index.html b/index.html index 4162040..d3b0862 100644 --- a/index.html +++ b/index.html @@ -2,30 +2,41 @@ Page Title + +
  • - examples + UIL examples
  • - vr_test + VR test
  • - uil_lumicles + Menu lumicles
  • uil_to_canvas
  • +
  • - uil_to_canvas2 -
  • -
  • - uil_treelist + Componente treelist
  • - uil_pointer_events + Prueba pointer events
  • From cc65919ed34b5430b82105008e54cdbb21c56611 Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Wed, 17 Sep 2025 19:33:37 -0300 Subject: [PATCH 16/17] fix --- examples/uil_treelist.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/uil_treelist.html b/examples/uil_treelist.html index f991286..2674a54 100644 --- a/examples/uil_treelist.html +++ b/examples/uil_treelist.html @@ -91,7 +91,7 @@ }; - //document.body.appendChild(ui.canvas); + document.body.appendChild(ui.canvas); function log(msg){ document.getElementById('log').textContent = msg; } g.open(); From 509c8739b7e470e3bd75a0a82e495e69fe50d6f3 Mon Sep 17 00:00:00 2001 From: Federico Marino Date: Wed, 17 Sep 2025 20:10:13 -0300 Subject: [PATCH 17/17] arregle caso de isCanvas=true y parent!=null --- build/uil.js | 13 +++++++++---- build/uil.min.js | 13 +++++++++---- build/uil.module.js | 13 +++++++++---- examples/uil_treelist.html | 2 +- src/core/Roots.js | 11 ++++++++--- 5 files changed, 36 insertions(+), 16 deletions(-) diff --git a/build/uil.js b/build/uil.js index b80fdb5..4c13ac3 100644 --- a/build/uil.js +++ b/build/uil.js @@ -300,9 +300,14 @@ e.clientX = R.ID.mouse.x; e.clientY = R.ID.mouse.y; } else if (R.ID.isCanvas) { - // NUEVO: si es canvas con parent, usar mouse virtual + offset del GUI - e.clientX = R.ID.zone.x + R.ID.mouse.x; - e.clientY = R.ID.zone.y + R.ID.mouse.y; + // Solo usar mouse virtual si el evento es "programático" (coords -1) + // y además el mouse virtual ya fue seteado (>=0). + const wantsVirtual = (e.clientX === -1 || e.clientY === -1); + const hasMouse = (R.ID.mouse.x >= 0 && R.ID.mouse.y >= 0); + if (wantsVirtual && hasMouse) { + e.clientX = R.ID.zone.x + R.ID.mouse.x; + e.clientY = R.ID.zone.y + R.ID.mouse.y; + } } //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 @@ -9661,4 +9666,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvcHJvdG8vVHJlZUxpc3QuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9IGVsc2UgaWYgKFIuSUQuaXNDYW52YXMpIHtcclxuICAgICAgICAvLyBOVUVWTzogc2kgZXMgY2FudmFzIGNvbiBwYXJlbnQsIHVzYXIgbW91c2UgdmlydHVhbCArIG9mZnNldCBkZWwgR1VJXHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC56b25lLnggKyBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC56b25lLnkgKyBSLklELm1vdXNlLnk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vaWYoIFIuSUQubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IFIuSUQubWFyZ2luICogMC41XHJcblxyXG4gICAgICBSLklELmhhbmRsZUV2ZW50KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmlzTW9iaWxlICYmIGUudHlwZSA9PT0gXCJtb3VzZXVwXCIpIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgaWYgKGxlYXZlKSBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJRFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZmluZElEOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgbmV4dCA9IC0xLFxyXG4gICAgICB1LFxyXG4gICAgICB4LFxyXG4gICAgICB5O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcblxyXG4gICAgICBpZiAodS5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICB4ID0gdS5tb3VzZS54O1xyXG4gICAgICAgIHkgPSB1Lm1vdXNlLnk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgeCA9IGUuY2xpZW50WDtcclxuICAgICAgICB5ID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoUi5vblpvbmUodSwgeCwgeSkpIHtcclxuICAgICAgICBuZXh0ID0gaTtcclxuXHJcbiAgICAgICAgaWYgKG5leHQgIT09IFIuY3VycmVudCkge1xyXG4gICAgICAgICAgUi5jbGVhck9sZElEKCk7XHJcbiAgICAgICAgICBSLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgUi5JRCA9IHU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgPT09IC0xKSBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBjbGVhck9sZElEOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuSUQpIHJldHVybjtcclxuICAgIFIuY3VycmVudCA9IC0xO1xyXG4gICAgUi5JRC5yZXNldCgpO1xyXG4gICAgUi5JRCA9IG51bGw7XHJcbiAgICBSLmN1cnNvcigpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEdVSSAvIEdST1VQIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzOiAodWlzLCB6b25lLCBweSwgZ3JvdXAgPSBmYWxzZSkgPT4ge1xyXG4gICAgLy9jb25zb2xlLmxvZygnY2FsY191aXMnKVxyXG5cclxuICAgIGxldCBpID0gdWlzLmxlbmd0aCxcclxuICAgICAgdSxcclxuICAgICAgcHggPSAwLFxyXG4gICAgICBuID0gMCxcclxuICAgICAgdHcsXHJcbiAgICAgIG0sXHJcbiAgICAgIGRpdjtcclxuXHJcbiAgICBsZXQgaGVpZ2h0ID0gMDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSB1aXNbbl07XHJcbiAgICAgIG4rKztcclxuXHJcbiAgICAgIGlmICghZ3JvdXAgJiYgdS5pc0dyb3VwKSB1LmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIG0gPSB1Lm1hcmdpbjtcclxuICAgICAgLy9kaXYgPSB1Lm1hcmdpbkRpdlxyXG5cclxuICAgICAgdS56b25lLncgPSB1Lnc7XHJcbiAgICAgIHUuem9uZS5oID0gdS5oICsgbTtcclxuXHJcbiAgICAgIGlmICghdS5hdXRvV2lkdGgpIHtcclxuICAgICAgICBpZiAocHggPT09IDApIGhlaWdodCArPSB1LmggKyBtO1xyXG5cclxuICAgICAgICB1LnpvbmUueCA9IHpvbmUueCArIHB4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7IC8vICsgdS5tdG9wXHJcbiAgICAgICAgLy9pZihkaXYpIHUuem9uZS55ICs9IG0gKiAwLjVcclxuXHJcbiAgICAgICAgdHcgPSBSLmdldFdpZHRoKHUpO1xyXG4gICAgICAgIGlmICh0dykgdS56b25lLncgPSB1LncgPSB0dztcclxuICAgICAgICBlbHNlIGlmICh1LmZ3KSB1LnpvbmUudyA9IHUudyA9IHUuZnc7XHJcblxyXG4gICAgICAgIHB4ICs9IHUuem9uZS53O1xyXG5cclxuICAgICAgICBpZiAocHggPj0gem9uZS53KSB7XHJcbiAgICAgICAgICBweSArPSB1LmggKyBtO1xyXG4gICAgICAgICAgLy9pZihkaXYpIHB5ICs9IG0gKiAwLjVcclxuICAgICAgICAgIHB4ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHggPSAwO1xyXG5cclxuICAgICAgICB1LnpvbmUueCA9IHpvbmUueCArIHUuZHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTtcclxuICAgICAgICBweSArPSB1LmggKyBtO1xyXG5cclxuICAgICAgICBoZWlnaHQgKz0gdS5oICsgbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoZWlnaHQ7XHJcbiAgfSxcclxuXHJcbiAgZmluZFRhcmdldDogZnVuY3Rpb24gKHVpcywgZSkge1xyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKFIub25ab25lKHVpc1tpXSwgZS5jbGllbnRYLCBlLmNsaWVudFkpKSByZXR1cm4gaTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gLTE7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgWk9ORVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZmluZFpvbmU6IGZ1bmN0aW9uIChmb3JjZSkge1xyXG4gICAgaWYgKCFSLm5lZWRSZVpvbmUgJiYgIWZvcmNlKSByZXR1cm47XHJcblxyXG4gICAgdmFyIGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBSLmdldFpvbmUodSk7XHJcbiAgICAgIGlmICh1LmlzR3VpKSB1LmNhbGNVaXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBvblpvbmU6IGZ1bmN0aW9uIChvLCB4LCB5KSB7XHJcbiAgICBpZiAoeCA9PT0gdW5kZWZpbmVkIHx8IHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCB6ID0gby56b25lO1xyXG4gICAgbGV0IG14ID0geCAtIHoueDsgLy8gLSBvLmR4O1xyXG4gICAgbGV0IG15ID0geSAtIHoueTtcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAmJiBvLmdyb3VwLm1hcmdpbkRpdiApIG15ICs9IG8uZ3JvdXAubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICE9PSBudWxsICkgbXggLT0gby5keFxyXG5cclxuICAgIGxldCBvdmVyID0gbXggPj0gMCAmJiBteSA+PSAwICYmIG14IDw9IHoudyAmJiBteSA8PSB6Lmg7XHJcblxyXG4gICAgLy9pZiggby5tYXJnaW5EaXYgKSBteSAtPSBvLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIGlmIChvdmVyKSBvLmxvY2FsLnNldChteCwgbXkpO1xyXG4gICAgZWxzZSBvLmxvY2FsLm5lZygpO1xyXG5cclxuICAgIHJldHVybiBvdmVyO1xyXG4gIH0sXHJcblxyXG4gIGdldFdpZHRoOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy9yZXR1cm4gby5nZXREb20oKS5vZmZzZXRXaWR0aFxyXG4gICAgcmV0dXJuIG8uZ2V0RG9tKCkuY2xpZW50V2lkdGg7XHJcblxyXG4gICAgLy9sZXQgciA9IG8uZ2V0RG9tKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAvL3JldHVybiAoci53aWR0aClcclxuICAgIC8vcmV0dXJuIE1hdGguZmxvb3Ioci53aWR0aClcclxuICB9LFxyXG5cclxuICBnZXRab25lOiBmdW5jdGlvbiAobykge1xyXG4gICAgaWYgKG8uaXNDYW52YXNPbmx5KSByZXR1cm47XHJcbiAgICBsZXQgciA9IG8uZ2V0RG9tKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgLy9pZiggIXIud2lkdGggKSByZXR1cm5cclxuICAgIC8vby56b25lID0geyB4Ok1hdGguZmxvb3Ioci5sZWZ0KSwgeTpNYXRoLmZsb29yKHIudG9wKSwgdzpNYXRoLmZsb29yKHIud2lkdGgpLCBoOk1hdGguZmxvb3Ioci5oZWlnaHQpIH07XHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLnJvdW5kKHIubGVmdCksIHk6TWF0aC5yb3VuZChyLnRvcCksIHc6TWF0aC5yb3VuZChyLndpZHRoKSwgaDpNYXRoLnJvdW5kKHIuaGVpZ2h0KSB9O1xyXG4gICAgby56b25lID0geyB4OiByLmxlZnQsIHk6IHIudG9wLCB3OiByLndpZHRoLCBoOiByLmhlaWdodCB9O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coby5uYW1lLCBvLnpvbmUpXHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ1VSU09SXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjdXJzb3I6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICBuYW1lID0gbmFtZSA/IG5hbWUgOiBcImF1dG9cIjtcclxuICAgIGlmIChuYW1lICE9PSBSLm9sZEN1cnNvcikge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9IG5hbWU7XHJcbiAgICAgIFIub2xkQ3Vyc29yID0gbmFtZTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRvQ2FudmFzOiBmdW5jdGlvbiAobywgdywgaCwgZm9yY2UpIHtcclxuICAgIGlmICghUi54bWxzZXJpYWxpemVyKSBSLnhtbHNlcmlhbGl6ZXIgPSBuZXcgWE1MU2VyaWFsaXplcigpO1xyXG5cclxuICAgIC8vIHByZXZlbnQgZXhlc2l2ZSByZWRyYXdcclxuXHJcbiAgICBpZiAoZm9yY2UgJiYgUi50bXBUaW1lICE9PSBudWxsKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dChSLnRtcFRpbWUpO1xyXG4gICAgICBSLnRtcFRpbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLnRtcFRpbWUgIT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBpZiAoUi5sb2NrKVxyXG4gICAgICBSLnRtcFRpbWUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBSLnRtcFRpbWUgPSBudWxsO1xyXG4gICAgICB9LCAxMCk7XHJcblxyXG4gICAgLy8vXHJcblxyXG4gICAgbGV0IGlzTmV3U2l6ZSA9IGZhbHNlO1xyXG4gICAgaWYgKHcgIT09IG8uY2FudmFzLndpZHRoIHx8IGggIT09IG8uY2FudmFzLmhlaWdodCkgaXNOZXdTaXplID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoUi50bXBJbWFnZSA9PT0gbnVsbCkgUi50bXBJbWFnZSA9IG5ldyBJbWFnZSgpO1xyXG5cclxuICAgIGxldCBpbWcgPSBSLnRtcEltYWdlOyAvL25ldyBJbWFnZSgpO1xyXG5cclxuICAgIGxldCBodG1sU3RyaW5nID0gUi54bWxzZXJpYWxpemVyLnNlcmlhbGl6ZVRvU3RyaW5nKG8uY29udGVudCk7XHJcblxyXG4gICAgbGV0IHN2ZyA9XHJcbiAgICAgICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIicgK1xyXG4gICAgICB3ICtcclxuICAgICAgJ1wiIGhlaWdodD1cIicgK1xyXG4gICAgICBoICtcclxuICAgICAgJ1wiPjxmb3JlaWduT2JqZWN0IHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmU7IGxlZnQ6MDtcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCI+JyArXHJcbiAgICAgIGh0bWxTdHJpbmcgK1xyXG4gICAgICBcIjwvZm9yZWlnbk9iamVjdD48L3N2Zz5cIjtcclxuXHJcbiAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBsZXQgY3R4ID0gby5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG5cclxuICAgICAgaWYgKGlzTmV3U2l6ZSkge1xyXG4gICAgICAgIG8uY2FudmFzLndpZHRoID0gdztcclxuICAgICAgICBvLmNhbnZhcy5oZWlnaHQgPSBoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgIH1cclxuICAgICAgY3R4LmRyYXdJbWFnZSh0aGlzLCAwLCAwKTtcclxuXHJcbiAgICAgIG8ub25EcmF3KCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGltZy5zcmMgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHN2Zyk7XHJcbiAgICAvL2ltZy5zcmMgPSAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwnKyB3aW5kb3cuYnRvYSggc3ZnICk7XHJcbiAgICBpbWcuY3Jvc3NPcmlnaW4gPSBcIlwiO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElOUFVUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRIaWRkZW46IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSB7XHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHRzZWxlY3QgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgJ1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IHRleHQtc2hhZG93Om5vbmU7J1xyXG4gICAgICAvL2NzcyArPSAnbGVmdDoxMHB4OyB0b3A6YXV0bzsgYm9yZGVyOm5vbmU7IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDsnICsgaGlkZTtcclxuXHJcbiAgICAgIFIuaGlkZGVuSW1wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgIFIuaGlkZGVuSW1wdXQudHlwZSA9IFwidGV4dFwiO1xyXG4gICAgICAvL1IuaGlkZGVuSW1wdXQuc3R5bGUuY3NzVGV4dCA9IGNzcyArICdib3R0b206MzBweDsnICsgKFIuZGVidWdJbnB1dCA/ICcnIDogJ3RyYW5zZm9ybTpzY2FsZSgwKTsnKTtcclxuXHJcbiAgICAgIFIuaGlkZGVuU2l6ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAvL1IuaGlkZGVuU2l6ZXIuc3R5bGUuY3NzVGV4dCA9IGNzcyArICdib3R0b206NjBweDsnO1xyXG5cclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChSLmhpZGRlbkltcHV0KTtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChSLmhpZGRlblNpemVyKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaGlkZSA9IFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcIm9wYWNpdHk6MDsgekluZGV4OjA7XCI7XHJcbiAgICBsZXQgY3NzID1cclxuICAgICAgUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgIFwicGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgbGVmdDoxMHB4OyB0b3A6YXV0bzsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwO1wiICtcclxuICAgICAgaGlkZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUuY3NzVGV4dCA9XHJcbiAgICAgIGNzcyArIFwiYm90dG9tOjEwcHg7XCIgKyAoUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwidHJhbnNmb3JtOnNjYWxlKDApO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuc3R5bGUuY3NzVGV4dCA9IGNzcyArIFwiYm90dG9tOjQwcHg7XCI7XHJcblxyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS53aWR0aCA9IFIuaW5wdXQuY2xpZW50V2lkdGggKyBcInB4XCI7XHJcbiAgICBSLmhpZGRlbkltcHV0LnZhbHVlID0gUi5zdHI7XHJcbiAgICBSLmhpZGRlblNpemVyLmlubmVySFRNTCA9IFIuc3RyO1xyXG5cclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySGlkZGVuOiBmdW5jdGlvbiAocCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHJldHVybjtcclxuICAgIFIuaGFzRm9jdXMgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBjbGlja1BvczogZnVuY3Rpb24gKHgpIHtcclxuICAgIGxldCBpID0gUi5zdHIubGVuZ3RoLFxyXG4gICAgICBsID0gMCxcclxuICAgICAgbiA9IDA7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGwgKz0gUi50ZXh0V2lkdGgoUi5zdHJbbl0pO1xyXG4gICAgICBpZiAobCA+PSB4KSBicmVhaztcclxuICAgICAgbisrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG47XHJcbiAgfSxcclxuXHJcbiAgdXBJbnB1dDogZnVuY3Rpb24gKHgsIGRvd24pIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCB1cCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChkb3duKSB7XHJcbiAgICAgIGxldCBpZCA9IFIuY2xpY2tQb3MoeCk7XHJcblxyXG4gICAgICBSLm1vdmVYID0gaWQ7XHJcblxyXG4gICAgICBpZiAoUi5zdGFydFggPT09IC0xKSB7XHJcbiAgICAgICAgUi5zdGFydFggPSBpZDtcclxuICAgICAgICBSLmN1cnNvcklkID0gaWQ7XHJcbiAgICAgICAgUi5pbnB1dFJhbmdlID0gW1Iuc3RhcnRYLCBSLnN0YXJ0WF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGlzU2VsZWN0aW9uID0gUi5tb3ZlWCAhPT0gUi5zdGFydFg7XHJcblxyXG4gICAgICAgIGlmIChpc1NlbGVjdGlvbikge1xyXG4gICAgICAgICAgaWYgKFIuc3RhcnRYID4gUi5tb3ZlWCkgUi5pbnB1dFJhbmdlID0gW1IubW92ZVgsIFIuc3RhcnRYXTtcclxuICAgICAgICAgIGVsc2UgUi5pbnB1dFJhbmdlID0gW1Iuc3RhcnRYLCBSLm1vdmVYXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHVwID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLnN0YXJ0WCAhPT0gLTEpIHtcclxuICAgICAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgICAgICBSLnN0YXJ0WCA9IC0xO1xyXG5cclxuICAgICAgICB1cCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodXApIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIHVwO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdEFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLnBhcmVudCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuICAgIFIuaW5wdXRSYW5nZSA9IFswLCBSLnN0ci5sZW5ndGhdO1xyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLmN1cnNvcklkID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5zZWxlY3RQYXJlbnQoKTtcclxuICB9LFxyXG5cclxuICBzZWxlY3RQYXJlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBjID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKDAsIFIuY3Vyc29ySWQpKTtcclxuICAgIHZhciBlID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKDAsIFIuaW5wdXRSYW5nZVswXSkpO1xyXG4gICAgdmFyIHMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoUi5pbnB1dFJhbmdlWzBdLCBSLmlucHV0UmFuZ2VbMV0pKTtcclxuXHJcbiAgICBSLnBhcmVudC5zZWxlY3QoYywgZSwgcywgUi5oaWRkZW5TaXplci5pbm5lckhUTUwpO1xyXG4gIH0sXHJcblxyXG4gIHRleHRXaWR0aDogZnVuY3Rpb24gKHRleHQpIHtcclxuICAgIGlmIChSLmhpZGRlblNpemVyID09PSBudWxsKSByZXR1cm4gMDtcclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyAvZywgXCImbmJzcDtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLmlubmVySFRNTCA9IHRleHQ7XHJcbiAgICByZXR1cm4gUi5oaWRkZW5TaXplci5jbGllbnRXaWR0aDtcclxuICB9LFxyXG5cclxuICBjbGVhcklucHV0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICghUi5maXJzdEltcHV0KSBSLnBhcmVudC52YWxpZGF0ZSh0cnVlKTtcclxuXHJcbiAgICBSLmNsZWFySGlkZGVuKCk7XHJcbiAgICBSLnBhcmVudC51bnNlbGVjdCgpO1xyXG5cclxuICAgIC8vUi5pbnB1dC5zdHlsZS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5iYWNrZ3JvdW5kID0gUi5wYXJlbnQuY29sb3JzLmJhY2s7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJvcmRlckNvbG9yID0gUi5wYXJlbnQuY29sb3JzLmJvcmRlcjtcclxuICAgIC8vUi5pbnB1dC5zdHlsZS5jb2xvciA9IFIucGFyZW50LmNvbG9ycy50ZXh0O1xyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgUi5pbnB1dCA9IG51bGw7XHJcbiAgICBSLnBhcmVudCA9IG51bGw7XHJcbiAgICAoUi5zdHIgPSBcIlwiKSwgKFIuZmlyc3RJbXB1dCA9IHRydWUpO1xyXG4gIH0sXHJcblxyXG4gIHNldElucHV0OiBmdW5jdGlvbiAoSW5wdXQsIHBhcmVudCkge1xyXG4gICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUi5pbnB1dCA9IElucHV0O1xyXG4gICAgUi5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG4gICAgUi5pbnB1dC5zdHlsZS5iYWNrZ3JvdW5kID0gUi5wYXJlbnQuY29sb3JzLmJhY2tvZmY7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJvcmRlckNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnNlbGVjdDtcclxuICAgIC8vUi5pbnB1dC5zdHlsZS5jb2xvciA9IFIucGFyZW50LmNvbG9ycy50ZXh0U2VsZWN0O1xyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG5cclxuICAgIFIuc2V0SGlkZGVuKCk7XHJcbiAgfSxcclxuXHJcbiAga2V5ZG93bjogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBrZXlDb2RlID0gZS53aGljaCxcclxuICAgICAgaXNTaGlmdCA9IGUuc2hpZnRLZXk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZygga2V5Q29kZSApXHJcblxyXG4gICAgUi5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKFIuaGFzRm9jdXMpIHtcclxuICAgICAgLy8gaGFjayB0byBmaXggdG91Y2ggZXZlbnQgYnVnIGluIGlPUyBTYWZhcmlcclxuICAgICAgd2luZG93LmZvY3VzKCk7XHJcbiAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSB0cnVlO1xyXG5cclxuICAgIC8vIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAvLyBhZGQgc3VwcG9ydCBmb3IgQ3RybC9DbWQrQSBzZWxlY3Rpb25cclxuICAgIC8vaWYgKCBrZXlDb2RlID09PSA2NSAmJiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSApKSB7XHJcbiAgICAvL1Iuc2VsZWN0VGV4dCgpO1xyXG4gICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAvL3JldHVybiBzZWxmLnJlbmRlcigpO1xyXG4gICAgLy99XHJcblxyXG4gICAgaWYgKGtleUNvZGUgPT09IDEzKSB7XHJcbiAgICAgIC8vZW50ZXJcclxuXHJcbiAgICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgICAgLy99IGVsc2UgaWYoIGtleUNvZGUgPT09IDkgKXsgLy90YWIga2V5XHJcblxyXG4gICAgICAvLyBSLmlucHV0LnRleHRDb250ZW50ID0gJyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5pbnB1dC5pc051bSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIChlLmtleUNvZGUgPiA0NyAmJiBlLmtleUNvZGUgPCA1OCkgfHxcclxuICAgICAgICAgIChlLmtleUNvZGUgPiA5NSAmJiBlLmtleUNvZGUgPCAxMDYpIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDE5MCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxMTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gOCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxMDlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIGtleXVwOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmhpZGRlbkltcHV0LnZhbHVlO1xyXG5cclxuICAgIGlmIChSLnBhcmVudC5hbGxFcXVhbCkgUi5wYXJlbnQuc2FtZVN0cihSLnN0cik7IC8vIG51bWVyaWMgc2Ftw7llIHZhbHVlXHJcbiAgICBlbHNlIFIuaW5wdXQudGV4dENvbnRlbnQgPSBSLnN0cjtcclxuXHJcbiAgICBSLmN1cnNvcklkID0gUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydDtcclxuICAgIFIuaW5wdXRSYW5nZSA9IFtSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0LCBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZF07XHJcblxyXG4gICAgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICAvL2lmKCBSLnBhcmVudC5hbGx3YXkgKVxyXG4gICAgUi5wYXJlbnQudmFsaWRhdGUoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy9cclxuICAvLyAgIExJU1RFTklOR1xyXG4gIC8vXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvKlxyXG4gICAgLy8gZXN0YSBlcmEgbGEgZnVuY2lvbiBvcmlnaW5hbFxyXG4gICAgbG9vcDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiggUi5pc0xvb3AgKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIFIubG9vcCApO1xyXG4gICAgICAgIFIudXBkYXRlKCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgKi9cclxuXHJcbiAgbG9vcDogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKFIuaXNMb29wKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUi5sb29wKTtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBSLnVwZGF0ZSgpO1xyXG4gICAgLy8gaWYgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gYSB2YWx1ZSBnZW5lcmF0ZWQgZXh0ZXJuYWxseSwgdGhlIEdVSSBuZWVkcyB0byBiZSByZWRyYXduXHJcbiAgICBpZiAoUi51aVswXSAmJiBSLm5lZWRzVXBkYXRlKSBSLnVpWzBdLmRyYXcoKTtcclxuICB9LFxyXG5cclxuICB1cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGxldCBpID0gUi5saXN0ZW5zLmxlbmd0aDtcclxuICAgIGxldCBuZWVkc1VwZGF0ZSA9IGZhbHNlO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAvL2NoZWNrIGlmIHRoZSB2YWx1ZSBvZiB0aGUgb2JqZWN0IGhhcyBjaGFuZ2VkXHJcbiAgICAgIGxldCBoYXNDaGFuZ2VkID0gUi5saXN0ZW5zW2ldLmxpc3RlbmluZygpO1xyXG4gICAgICBpZiAoaGFzQ2hhbmdlZCkgbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5lZWRzVXBkYXRlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUxpc3RlbjogZnVuY3Rpb24gKHByb3RvKSB7XHJcbiAgICBsZXQgaWQgPSBSLmxpc3RlbnMuaW5kZXhPZihwcm90byk7XHJcbiAgICBpZiAoaWQgIT09IC0xKSBSLmxpc3RlbnMuc3BsaWNlKGlkLCAxKTtcclxuICAgIGlmIChSLmxpc3RlbnMubGVuZ3RoID09PSAwKSBSLmlzTG9vcCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGFkZExpc3RlbjogZnVuY3Rpb24gKHByb3RvKSB7XHJcbiAgICBsZXQgaWQgPSBSLmxpc3RlbnMuaW5kZXhPZihwcm90byk7XHJcblxyXG4gICAgaWYgKGlkICE9PSAtMSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFIubGlzdGVucy5wdXNoKHByb3RvKTtcclxuXHJcbiAgICBpZiAoIVIuaXNMb29wKSB7XHJcbiAgICAgIFIuaXNMb29wID0gdHJ1ZTtcclxuICAgICAgUi5sb29wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfSxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBSb290cyA9IFI7XHJcbiIsIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcblxyXG5jb25zdCBUID0ge1xyXG5cclxuICAgIHRyYW5zaXRpb246IDAuMixcclxuXHJcbiAgICBmcmFnOiBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXHJcblxyXG4gICAgY29sb3JSaW5nOiBudWxsLFxyXG4gICAgam95c3RpY2tfMDogbnVsbCxcclxuICAgIGpveXN0aWNrXzE6IG51bGwsXHJcbiAgICBjaXJjdWxhcjogbnVsbCxcclxuICAgIGtub2I6IG51bGwsXHJcbiAgICBwYWQyZDogbnVsbCxcclxuXHJcbiAgICBzdmduczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxyXG4gICAgbGlua3M6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxyXG4gICAgaHRtbHM6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFxyXG5cclxuICAgIERPTV9TSVpFOiBbICdoZWlnaHQnLCAnd2lkdGgnLCAndG9wJywgJ2xlZnQnLCAnYm90dG9tJywgJ3JpZ2h0JywgJ21hcmdpbi1sZWZ0JywgJ21hcmdpbi1yaWdodCcsICdtYXJnaW4tdG9wJywgJ21hcmdpbi1ib3R0b20nXSxcclxuICAgIFNWR19UWVBFX0Q6IFsgJ3BhdHRlcm4nLCAnZGVmcycsICd0cmFuc2Zvcm0nLCAnc3RvcCcsICdhbmltYXRlJywgJ3JhZGlhbEdyYWRpZW50JywgJ2xpbmVhckdyYWRpZW50JywgJ2FuaW1hdGVNb3Rpb24nLCAndXNlJywgJ2ZpbHRlcicsICdmZUNvbG9yTWF0cml4JyBdLFxyXG4gICAgU1ZHX1RZUEVfRzogWyAnc3ZnJywgJ3JlY3QnLCAnY2lyY2xlJywgJ3BhdGgnLCAncG9seWdvbicsICd0ZXh0JywgJ2cnLCAnbGluZScsICdmb3JlaWduT2JqZWN0JyBdLFxyXG5cclxuICAgIFBJOiBNYXRoLlBJLFxyXG4gICAgVHdvUEk6IE1hdGguUEkqMixcclxuICAgIHBpOTA6IE1hdGguUEkgKiAwLjUsXHJcbiAgICBwaTYwOiBNYXRoLlBJLzMsXHJcbiAgICBcclxuICAgIHRvcmFkOiBNYXRoLlBJIC8gMTgwLFxyXG4gICAgdG9kZWc6IDE4MCAvIE1hdGguUEksXHJcblxyXG4gICAgY2xhbXA6ICggdiwgbWluLCBtYXggKSA9PiB7XHJcblxyXG4gICAgICAgIHYgPSB2IDwgbWluID8gbWluIDogdjtcclxuICAgICAgICB2ID0gdiA+IG1heCA/IG1heCA6IHY7XHJcbiAgICAgICAgcmV0dXJuIHY7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpc0RpdmlkOiAoIHYgKSA9PiAoIHYqMC41ID09PSBNYXRoLmZsb29yKHYqMC41KSApLFxyXG5cclxuICAgIHNpemU6IHsgIHc6IDI0MCwgaDogMjAsIHA6IDMwLCBzOiA4IH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBDT0xPUlxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZUNvbG9yOiAoIG8sIGNjID0gVC5jb2xvcnMgKSA9PiB7XHJcblxyXG4gICAgICAgIGxldCBjb2xvciA9IHsgLi4uY2MgfVxyXG5cclxuICAgICAgICBsZXQgdGV4dENoYW5nZSA9IFsnZm9udEZhbWlseScsICdmb250V2VpZ2h0JywgJ2ZvbnRTaGFkb3cnLCAnZm9udFNpemUnIF1cclxuICAgICAgICBsZXQgY2hhbmdlVGV4dCA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnQgKSBvLmZvbnRGYW1pbHkgPSBvLmZvbnRcclxuICAgICAgICBpZiggby5zaGFkb3cgKSBvLmZvbnRTaGFkb3cgPSBvLnNoYWRvd1xyXG4gICAgICAgIGlmKCBvLndlaWdodCApIG8uZm9udFdlaWdodCA9IG8ud2VpZ2h0XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRDb2xvciApIG8udGV4dCA9IG8uZm9udENvbG9yXHJcbiAgICAgICAgaWYoIG8uY29sb3IgKSBvLnRleHQgPSBvLmNvbG9yXHJcblxyXG4gICAgICAgIGlmKCBvLnRleHQgKXtcclxuICAgICAgICAgICAgY29sb3IudGV4dCA9IG8udGV4dFxyXG4gICAgICAgICAgICBpZiggIW8uZm9udENvbG9yICYmICFvLmNvbG9yICl7IFxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGUgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC4yNSApXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZW9mZiA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjUgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHRPdmVyID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC4yNSApXHJcbiAgICAgICAgICAgIGNvbG9yLnRleHRTZWxlY3QgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uYnV0dG9uICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJ1dHRvbiA9IG8uYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbG9yLmJvcmRlciA9IFQuQ29sb3JMdW1hKCBvLmJ1dHRvbiwgMC4xIClcclxuICAgICAgICAgICAgY29sb3Iub3Zlcm9mZiA9IFQuQ29sb3JMdW1hKCBvLmJ1dHRvbiwgMC4yIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCApe1xyXG4gICAgICAgICAgICBjb2xvci5zZWxlY3QgPSBvLnNlbGVjdFxyXG4gICAgICAgICAgICBjb2xvci5vdmVyID0gVC5Db2xvckx1bWEoIG8uc2VsZWN0LCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLml0ZW1CZyApIG8uYmFjayA9IG8uaXRlbUJnXHJcblxyXG4gICAgICAgIGlmKCBvLmJhY2sgKXtcclxuICAgICAgICAgICAgY29sb3IuYmFjayA9IG8uYmFja1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrb2ZmID0gVC5Db2xvckx1bWEoIG8uYmFjaywgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5mb250U2VsZWN0ICkgY29sb3IudGV4dFNlbGVjdCA9IG8uZm9udFNlbGVjdFxyXG4gICAgICAgIGlmKCBvLmdyb3VwQm9yZGVyICkgY29sb3IuZ2JvcmRlciA9IG8uZ3JvdXBCb3JkZXJcclxuXHJcbiAgICAgICAgLy9pZiggby50cmFuc3BhcmVudCApIG8uYmcgPSAnbm9uZSdcclxuICAgICAgICAvL2lmKCBvLmJnICkgY29sb3IuYmFja2dyb3VuZCA9IGNvbG9yLmJhY2tncm91bmRPdmVyID0gby5iZ1xyXG4gICAgICAgIGlmKCBvLmJnT3ZlciApIGNvbG9yLmJhY2tncm91bmRPdmVyID0gby5iZ092ZXJcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBjb2xvciApe1xyXG4gICAgICAgICAgICBpZihvW21dIT09dW5kZWZpbmVkKSBjb2xvclttXSA9IG9bbV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gbyApe1xyXG4gICAgICAgICAgICBpZiggdGV4dENoYW5nZS5pbmRleE9mKG0pICE9PSAtMSApIGNoYW5nZVRleHQgPSB0cnVlIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNoYW5nZVRleHQgKSBULmRlZmluZVRleHQoIGNvbG9yIClcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbG9yXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjb2xvcnM6IHtcclxuXHJcbiAgICAgICAgc3g6IDQsLy80XHJcbiAgICAgICAgc3k6IDIsLy8yXHJcbiAgICAgICAgcmFkaXVzOjIsXHJcblxyXG4gICAgICAgIHNob3dPdmVyIDogMSxcclxuICAgICAgICAvL2dyb3VwT3ZlciA6IDEsXHJcblxyXG4gICAgICAgIGNvbnRlbnQ6J25vbmUnLFxyXG4gICAgICAgIGJhY2tncm91bmQ6ICdyZ2JhKDUwLDUwLDUwLDAuMTUpJyxcclxuICAgICAgICBiYWNrZ3JvdW5kT3ZlcjogJ3JnYmEoNTAsNTAsNTAsMC4zKScsXHJcblxyXG4gICAgICAgIHRpdGxlIDogJyNDQ0MnLFxyXG4gICAgICAgIHRpdGxlb2ZmIDogJyNCQkInLFxyXG4gICAgICAgIHRleHQgOiAnI0RERCcsXHJcbiAgICAgICAgdGV4dE92ZXIgOiAnI0VFRScsXHJcbiAgICAgICAgdGV4dFNlbGVjdCA6ICcjRkZGJyxcclxuICAgICAgICBcclxuICAgICAgICBiYWNrOidyZ2JhKDAsMCwwLDAuMiknLFxyXG4gICAgICAgIGJhY2tvZmY6J3JnYmEoMCwwLDAsMC4zKScsXHJcblxyXG4gICAgICAgIC8vIGlucHV0IGFuZCBidXR0b24gYm9yZGVyXHJcbiAgICAgICAgYm9yZGVyIDogJyM0YzRjNGMnLFxyXG4gICAgICAgIGJvcmRlclNpemUgOiAxLFxyXG5cclxuICAgICAgICBnYm9yZGVyIDogJ25vbmUnLFxyXG4gICAgICAgIGdyb3VwcyA6ICdub25lJyxcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgYnV0dG9uIDogJyMzYzNjM2MnLFxyXG4gICAgICAgIG92ZXJvZmYgOiAnIzVjNWM1YycsXHJcbiAgICAgICAgb3ZlciA6ICcjMDI0Njk5JyxcclxuICAgICAgICBzZWxlY3QgOiAnIzMwOEFGRicsXHJcbiAgICAgICAgYWN0aW9uOiAnI0ZGMzMwMCcsXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9mb250RmFtaWx5OiAnVGFob21hJyxcclxuICAgICAgICBmb250RmFtaWx5OiAnQ29uc29sYXMsIG1vbm9zcGFjZScsXHJcbiAgICAgICAgLy9mb250RmFtaWx5OiBcIidSb2JvdG8gTW9ubycsICdTb3VyY2UgQ29kZSBQcm8nLCBNZW5sbywgQ291cmllciwgbW9ub3NwYWNlXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogJ25vcm1hbCcsXHJcbiAgICAgICAgZm9udFNoYWRvdzogJ25vbmUnLC8vJyMwMDAnLFxyXG4gICAgICAgIGZvbnRTaXplOjEyLFxyXG5cclxuICAgICAgICBqb3lPdmVyOidyZ2JhKDQ4LDEzOCwyNTUsMC4yNSknLFxyXG4gICAgICAgIGpveU91dDogJ3JnYmEoMTAwLDEwMCwxMDAsMC41KScsXHJcbiAgICAgICAgam95U2VsZWN0OiAnIzMwOEFGRicsXHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIGhpZGU6ICdyZ2JhKDAsMCwwLDApJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN0eWxlIGNzc1xyXG5cclxuICAgIGNzcyA6IHtcclxuXHJcbiAgICAgICAgYmFzaWM6ICdwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsgYm94LXNpemluZzpib3JkZXItYm94OyBtYXJnaW46MDsgcGFkZGluZzowOyBvdmVyZmxvdzpoaWRkZW47ICcgKyAnLW8tdXNlci1zZWxlY3Q6bm9uZTsgLW1zLXVzZXItc2VsZWN0Om5vbmU7IC1raHRtbC11c2VyLXNlbGVjdDpub25lOyAtd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7IC1tb3otdXNlci1zZWxlY3Q6bm9uZTsnLFxyXG4gICAgICAgIGJ1dHRvbjonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOycsXHJcbiAgICAgICAgbWlkZGxlOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmxlZnQ7IHRleHQtYWxpZ246bGVmdDsgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOydcclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3ZnIHBhdGhcclxuXHJcbiAgICBzdmdzOiB7XHJcblxyXG4gICAgICAgIGcxOidNIDYgNCBMIDAgNCAwIDYgNiA2IDYgNCBNIDYgMCBMIDAgMCAwIDIgNiAyIDYgMCBaJyxcclxuICAgICAgICBnMjonTSA2IDAgTCA0IDAgNCA2IDYgNiA2IDAgTSAyIDAgTCAwIDAgMCA2IDIgNiAyIDAgWicsXHJcblxyXG4gICAgICAgIGdyb3VwOidNIDcgNyBMIDcgOCA4IDggOCA3IDcgNyBNIDUgNyBMIDUgOCA2IDggNiA3IDUgNyBNIDMgNyBMIDMgOCA0IDggNCA3IDMgNyBNIDcgNSBMIDcgNiA4IDYgOCA1IDcgNSBNIDYgNiBMIDYgNSA1IDUgNSA2IDYgNiBNIDcgMyBMIDcgNCA4IDQgOCAzIDcgMyBNIDYgNCBMIDYgMyA1IDMgNSA0IDYgNCBNIDMgNSBMIDMgNiA0IDYgNCA1IDMgNSBNIDMgMyBMIDMgNCA0IDQgNCAzIDMgMyBaJyxcclxuICAgICAgICBhcnJvdzonTSAzIDggTCA4IDUgMyAyIDMgOCBaJyxcclxuXHJcbiAgICAgICAgYXJyb3dEb3duOidNIDUgOCBMIDggMyAyIDMgNSA4IFonLFxyXG4gICAgICAgIGFycm93VXA6J00gNSAyIEwgMiA3IDggNyA1IDIgWicsXHJcblxyXG4gICAgICAgIHNvbGlkOidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIFonLFxyXG4gICAgICAgIGJvZHk6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgTSA1IDQgTCA0IDUgNCAxMCA5IDEwIDEwIDkgMTAgNCA1IDQgWicsXHJcbiAgICAgICAgdmVoaWNsZTonTSAxMyA2IEwgMTEgMSAzIDEgMSA2IDEgMTMgMyAxMyAzIDExIDExIDExIDExIDEzIDEzIDEzIDEzIDYgTSAyLjQgNiBMIDQgMiAxMCAyIDExLjYgNiAyLjQgNiBNIDEyIDggTCAxMiAxMCAxMCAxMCAxMCA4IDEyIDggTSA0IDggTCA0IDEwIDIgMTAgMiA4IDQgOCBaJyxcclxuICAgICAgICBhcnRpY3VsYXRpb246J00gMTMgOSBMIDEyIDkgOSAyIDkgMSA1IDEgNSAyIDIgOSAxIDkgMSAxMyA1IDEzIDUgOSA0IDkgNiA1IDggNSAxMCA5IDkgOSA5IDEzIDEzIDEzIDEzIDkgWicsXHJcbiAgICAgICAgY2hhcmFjdGVyOidNIDEzIDQgTCAxMiAzIDkgNCA1IDQgMiAzIDEgNCA1IDYgNSA4IDQgMTMgNiAxMyA3IDkgOCAxMyAxMCAxMyA5IDggOSA2IDEzIDQgTSA2IDEgTCA2IDMgOCAzIDggMSA2IDEgWicsXHJcbiAgICAgICAgdGVycmFpbjonTSAxMyA4IEwgMTIgNyBRIDkuMDYgLTMuNjcgNS45NSA0Ljg1IDQuMDQgMy4yNyAyIDcgTCAxIDggNyAxMyAxMyA4IE0gMyA4IFEgMy43OCA1LjQyMCA1LjQgNi42IDUuMjAgNy4yNSA1IDggTCA3IDggUSA4LjM5IC0wLjE2IDExIDggTCA3IDExIDMgOCBaJyxcclxuICAgICAgICBqb2ludDonTSA3LjcgNy43IFEgOCA3LjQ1IDggNyA4IDYuNiA3LjcgNi4zIDcuNDUgNiA3IDYgNi42IDYgNi4zIDYuMyA2IDYuNiA2IDcgNiA3LjQ1IDYuMyA3LjcgNi42IDggNyA4IDcuNDUgOCA3LjcgNy43IE0gMy4zNSA4LjY1IEwgMSAxMSAzIDEzIDUuMzUgMTAuNjUgUSA2LjEgMTEgNyAxMSA4LjI4IDExIDkuMjUgMTAuMjUgTCA3LjggOC44IFEgNy40NSA5IDcgOSA2LjE1IDkgNS41NSA4LjQgNSA3Ljg1IDUgNyA1IDYuNTQgNS4xNSA2LjE1IEwgMy43IDQuNyBRIDMgNS43MTIgMyA3IDMgNy45IDMuMzUgOC42NSBNIDEwLjI1IDkuMjUgUSAxMSA4LjI4IDExIDcgMTEgNi4xIDEwLjY1IDUuMzUgTCAxMyAzIDExIDEgOC42NSAzLjM1IFEgNy45IDMgNyAzIDUuNyAzIDQuNyAzLjcgTCA2LjE1IDUuMTUgUSA2LjU0IDUgNyA1IDcuODUgNSA4LjQgNS41NSA5IDYuMTUgOSA3IDkgNy40NSA4LjggNy44IEwgMTAuMjUgOS4yNSBaJyxcclxuICAgICAgICByYXk6J00gOSAxMSBMIDUgMTEgNSAxMiA5IDEyIDkgMTEgTSAxMiA1IEwgMTEgNSAxMSA5IDEyIDkgMTIgNSBNIDExLjUgMTAgUSAxMC45IDEwIDEwLjQ1IDEwLjQ1IDEwIDEwLjkgMTAgMTEuNSAxMCAxMi4yIDEwLjQ1IDEyLjU1IDEwLjkgMTMgMTEuNSAxMyAxMi4yIDEzIDEyLjU1IDEyLjU1IDEzIDEyLjIgMTMgMTEuNSAxMyAxMC45IDEyLjU1IDEwLjQ1IDEyLjIgMTAgMTEuNSAxMCBNIDkgMTAgTCAxMCA5IDIgMSAxIDIgOSAxMCBaJyxcclxuICAgICAgICBjb2xsaXNpb246J00gMTEgMTIgTCAxMyAxMCAxMCA3IDEzIDQgMTEgMiA3LjUgNS41IDkgNyA3LjUgOC41IDExIDEyIE0gMyAyIEwgMSA0IDQgNyAxIDEwIDMgMTIgOCA3IDMgMiBaJyxcclxuICAgICAgICBtYXA6J00gMTMgMSBMIDEgMSAxIDEzIDEzIDEzIDEzIDEgTSAxMiAyIEwgMTIgNyA3IDcgNyAxMiAyIDEyIDIgNyA3IDcgNyAyIDEyIDIgWicsXHJcbiAgICAgICAgbWF0ZXJpYWw6J00gMTMgMSBMIDEgMSAxIDEzIDEzIDEzIDEzIDEgTSAxMiAyIEwgMTIgNyA3IDcgNyAxMiAyIDEyIDIgNyA3IDcgNyAyIDEyIDIgWicsXHJcbiAgICAgICAgdGV4dHVyZTonTSAxMyA0IEwgMTMgMSAxIDEgMSA0IDUgNCA1IDEzIDkgMTMgOSA0IDEzIDQgWicsXHJcbiAgICAgICAgb2JqZWN0OidNIDEwIDEgTCA3IDQgNCAxIDEgMSAxIDEzIDQgMTMgNCA1IDcgOCAxMCA1IDEwIDEzIDEzIDEzIDEzIDEgMTAgMSBaJyxcclxuICAgICAgICBub25lOidNIDkgNSBMIDUgNSA1IDkgOSA5IDkgNSBaJyxcclxuICAgICAgICBjdXJzb3I6J00gNCA3IEwgMSAxMCAxIDEyIDIgMTMgNCAxMyA3IDEwIDkgMTQgMTQgMCAwIDUgNCA3IFonLFxyXG4gICAgICAgIGxvYWQ6J00gMTMgOCBMIDExLjUgNi41IDkgOSA5IDMgNSAzIDUgOSAyLjUgNi41IDEgOCA3IDE0IDEzIDggTSA5IDIgTCA5IDAgNSAwIDUgMiA5IDIgWicsXHJcbiAgICAgICAgc2F2ZTonTSA5IDEyIEwgNSAxMiA1IDE0IDkgMTQgOSAxMiBNIDExLjUgNy41IEwgMTMgNiA3IDAgMSA2IDIuNSA3LjUgNSA1IDUgMTEgOSAxMSA5IDUgMTEuNSA3LjUgWicsXHJcbiAgICAgICAgZXh0ZXJuOidNIDE0IDE0IEwgMTQgMCAwIDAgMCAxNCAxNCAxNCBNIDEyIDYgTCAxMiAxMiAyIDEyIDIgNiAxMiA2IE0gMTIgMiBMIDEyIDQgMiA0IDIgMiAxMiAyIFonLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcmV6b25lICgpIHtcclxuICAgICAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0SW1wdXQ6IGZ1bmN0aW9uKCl7XHJcblxyXG4gICAgICAgIHJldHVybiBSb290cy5pbnB1dCA/IHRydWUgOiBmYWxzZVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0U3R5bGUgOiBmdW5jdGlvbiAoIGRhdGEgKXtcclxuXHJcbiAgICAgICAgZm9yICggdmFyIG8gaW4gZGF0YSApe1xyXG4gICAgICAgICAgICBpZiggVC5jb2xvcnNbb10gKSBULmNvbG9yc1tvXSA9IGRhdGFbb107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULnNldFRleHQoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIGN1c3RvbSB0ZXh0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lVGV4dDogZnVuY3Rpb24oIG8gKXtcclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCBvLmZvbnRTaXplLCBvLnRleHQsIG8uZm9udEZhbWlseSwgby5mb250U2hhZG93LCBvLmZvbnRXZWlnaHQgKVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0VGV4dDogZnVuY3Rpb24oIHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3csIHdlaWdodCApe1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBULmNvbG9ycztcclxuXHJcbiAgICAgICAgaWYoIGZvbnQgPT09IHVuZGVmaW5lZCApIGZvbnQgPSBjYy5mb250RmFtaWx5XHJcbiAgICAgICAgaWYoIHNpemUgPT09IHVuZGVmaW5lZCApIHNpemUgPSBjYy5mb250U2l6ZVxyXG4gICAgICAgIGlmKCBzaGFkb3cgPT09IHVuZGVmaW5lZCApIHNoYWRvdyA9IGNjLmZvbnRTaGFkb3dcclxuICAgICAgICBpZiggd2VpZ2h0ID09PSB1bmRlZmluZWQgKSB3ZWlnaHQgPSBjYy5mb250V2VpZ2h0XHJcbiAgICAgICAgaWYoIGNvbG9yID09PSB1bmRlZmluZWQgKSBjb2xvciA9IGNjLnRleHRcclxuXHJcbiAgICAgICAgaWYoIGlzTmFOKHNpemUpICl7IGlmKCBzaXplLnNlYXJjaCgnZW0nKT09PS0xICkgc2l6ZSArPSAncHgnfVxyXG4gICAgICAgIGVsc2Ugc2l6ZSArPSAncHgnXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vbGV0IGFsaWduID0gJ2Rpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmxlZnQ7IGFsaWduLWl0ZW1zOmNlbnRlcjsgdGV4dC1hbGlnbjpsZWZ0OydcclxuXHJcbiAgICAgICAgVC5jc3MudHh0ID0gVC5jc3MuYmFzaWMgKyBULmNzcy5taWRkbGUgKyAnIGZvbnQtZmFtaWx5OicrIGZvbnQgKyc7IGZvbnQtd2VpZ2h0Oicrd2VpZ2h0Kyc7IGZvbnQtc2l6ZTonK3NpemUrJzsgY29sb3I6JytjYy50ZXh0Kyc7IHBhZGRpbmc6MHB4IDhweDsgbGVmdDowOyB0b3A6MnB4OyBoZWlnaHQ6MTZweDsgd2lkdGg6MTAwcHg7IG92ZXJmbG93OmhpZGRlbjsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsnO1xyXG4gICAgICAgIGlmKCBzaGFkb3cgIT09ICdub25lJyApIFQuY3NzLnR4dCArPSAnIHRleHQtc2hhZG93OiAxcHggMXB4IDFweCAnK3NoYWRvdysnOyc7XHJcblxyXG4gICAgICAgIFQuY3NzLnR4dHNlbGVjdCA9IFQuY3NzLnR4dCArICdwYWRkaW5nOjBweCA0cHg7IGJvcmRlcjoxcHggZGFzaGVkICcgKyBjYy5ib3JkZXIgKyAnOyc7XHJcbiAgICAgICAgVC5jc3MuaXRlbSA9IFQuY3NzLnR4dCArICdwYWRkaW5nOjBweCA0cHg7IHBvc2l0aW9uOnJlbGF0aXZlOyBtYXJnaW4tYm90dG9tOjFweDsgJ1xyXG5cclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8vIG5vdGVcclxuXHJcbiAgICAvL2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0NTUy9jc3NfZmxleGlibGVfYm94X2xheW91dC9hbGlnbmluZ19pdGVtc19pbl9hX2ZsZXhfY29udGFpbmVyXHJcblxyXG4gICAgLypjbG9uZUNvbG9yOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IE9iamVjdC5hc3NpZ24oe30sIFQuY29sb3JzICk7XHJcbiAgICAgICAgcmV0dXJuIGNjO1xyXG5cclxuICAgIH0sKi9cclxuXHJcbiAgICAvLyBpbnRlcm4gZnVuY3Rpb25cclxuXHJcbiAgICBjbG9uZUNzczogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAvL2xldCBjYyA9IE9iamVjdC5hc3NpZ24oe30sIFQuY3NzICk7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4uVC5jc3MgfTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoIG8gKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBvLmNsb25lTm9kZSggdHJ1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0U3ZnOiBmdW5jdGlvbiggZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMiApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IC0xICkgZG9tLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG4gICAgICAgIGVsc2UgaWYoIGlkMiAhPT0gdW5kZWZpbmVkICkgZG9tLmNoaWxkTm9kZXNbIGlkIHx8IDAgXS5jaGlsZE5vZGVzWyBpZDIgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG4gICAgICAgIGVsc2UgZG9tLmNoaWxkTm9kZXNbIGlkIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldENzczogZnVuY3Rpb24oIGRvbSwgY3NzICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IHIgaW4gY3NzICl7XHJcbiAgICAgICAgICAgIGlmKCBULkRPTV9TSVpFLmluZGV4T2YocikgIT09IC0xICkgZG9tLnN0eWxlW3JdID0gY3NzW3JdICsgJ3B4JztcclxuICAgICAgICAgICAgZWxzZSBkb20uc3R5bGVbcl0gPSBjc3Nbcl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbiggZywgbyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCBhdHQgaW4gbyApe1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAndHh0JyApIGcudGV4dENvbnRlbnQgPSBvWyBhdHQgXTtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ2xpbmsnICkgZy5zZXRBdHRyaWJ1dGVOUyggVC5saW5rcywgJ3hsaW5rOmhyZWYnLCBvWyBhdHQgXSApO1xyXG4gICAgICAgICAgICBlbHNlIGcuc2V0QXR0cmlidXRlTlMoIG51bGwsIGF0dCwgb1sgYXR0IF0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oIGRvbSwgaWQgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tOyAvLyByb290XHJcbiAgICAgICAgZWxzZSBpZiggIWlzTmFOKCBpZCApICkgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCBdOyAvLyBmaXJzdCBjaGlsZFxyXG4gICAgICAgIGVsc2UgaWYoIGlkIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgaWYoaWQubGVuZ3RoID09PSAyKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkWzBdIF0uY2hpbGROb2Rlc1sgaWRbMV0gXTtcclxuICAgICAgICAgICAgaWYoaWQubGVuZ3RoID09PSAzKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkWzBdIF0uY2hpbGROb2Rlc1sgaWRbMV0gXS5jaGlsZE5vZGVzWyBpZFsyXSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGRvbSA6IGZ1bmN0aW9uICggdHlwZSwgY3NzLCBvYmosIGRvbSwgaWQgKSB7XHJcblxyXG4gICAgICAgIHR5cGUgPSB0eXBlIHx8ICdkaXYnO1xyXG5cclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9ELmluZGV4T2YodHlwZSkgIT09IC0xIHx8IFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApeyAvLyBpcyBzdmcgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09J3N2ZycgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICdzdmcnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuXHJcbiAgICAgICAgICAvKiAgfSBlbHNlIGlmICggdHlwZSA9PT0gJ3VzZScgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAndXNlJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcbiovXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjcmVhdGUgbmV3IHN2ZyBpZiBub3QgZGVmXHJcbiAgICAgICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICdzdmcnICk7XHJcbiAgICAgICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGRvbSwgdHlwZSwgb2JqLCBpZCApO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9IGVsc2UgeyAvLyBpcyBodG1sIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApO1xyXG4gICAgICAgICAgICBlbHNlIGRvbSA9IGRvbS5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICkgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY3NzICkgZG9tLnN0eWxlLmNzc1RleHQgPSBjc3M7IFxyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207XHJcbiAgICAgICAgZWxzZSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIHx8IDAgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGFkZEF0dHJpYnV0ZXMgOiBmdW5jdGlvbiggZG9tLCB0eXBlLCBvLCBpZCApe1xyXG5cclxuICAgICAgICBsZXQgZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgdHlwZSApO1xyXG4gICAgICAgIFQuc2V0KCBnLCBvICk7XHJcbiAgICAgICAgVC5nZXQoIGRvbSwgaWQgKS5hcHBlbmRDaGlsZCggZyApO1xyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKSBnLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XHJcbiAgICAgICAgcmV0dXJuIGc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhciA6IGZ1bmN0aW9uKCBkb20gKXtcclxuXHJcbiAgICAgICAgVC5wdXJnZSggZG9tICk7XHJcbiAgICAgICAgd2hpbGUgKGRvbS5maXJzdENoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmICggZG9tLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCApIFQuY2xlYXIoIGRvbS5maXJzdENoaWxkICk7XHJcbiAgICAgICAgICAgIGRvbS5yZW1vdmVDaGlsZCggZG9tLmZpcnN0Q2hpbGQgKTsgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcHVyZ2UgOiBmdW5jdGlvbiAoIGRvbSApIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBkb20uYXR0cmlidXRlcywgaSwgbjtcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgICAgICBuID0gYVtpXS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkb21bbl0gPT09ICdmdW5jdGlvbicpIGRvbVtuXSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYSA9IGRvbS5jaGlsZE5vZGVzO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgICAgICBULnB1cmdlKCBkb20uY2hpbGROb2Rlc1tpXSApOyBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIEVmZmVjdHMgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRTVkdHbG93RWZmZWN0OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmICggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxHbG93JykgIT09IG51bGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzdmdGaWx0ZXIgPSBULmluaXRVSUxFZmZlY3RzKCk7XHJcblxyXG4gICAgICAgIGxldCBmaWx0ZXIgPSBULmFkZEF0dHJpYnV0ZXMoIHN2Z0ZpbHRlciwgJ2ZpbHRlcicsIHsgaWQ6ICdVSUxHbG93JywgeDogJy0yMCUnLCB5OiAnLTIwJScsIHdpZHRoOiAnMTQwJScsIGhlaWdodDogJzE0MCUnIH0gKTtcclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlR2F1c3NpYW5CbHVyJywgeyBpbjogJ1NvdXJjZUdyYXBoaWMnLCBzdGREZXZpYXRpb246ICczJywgcmVzdWx0OiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIGxldCBmZU1lcmdlID0gVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZU1lcmdlJywgeyAgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDw9IDM7IGkrKyApIHtcclxuXHJcbiAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmVNZXJnZSwgJ2ZlTWVyZ2VOb2RlJywgeyBpbjogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmVNZXJnZSwgJ2ZlTWVyZ2VOb2RlJywgeyBpbjogJ1NvdXJjZUdyYXBoaWMnIH0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGluaXRVSUxFZmZlY3RzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzdmdGaWx0ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTFNWR0VmZmVjdHMnKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIHN2Z0ZpbHRlciA9PT0gbnVsbCApIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHN2Z0ZpbHRlciA9IFQuZG9tKCAnc3ZnJywgdW5kZWZpbmVkICwgeyBpZDogJ1VJTFNWR0VmZmVjdHMnLCB3aWR0aDogJzAnLCBoZWlnaHQ6ICcwJyB9ICk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoIHN2Z0ZpbHRlciApO1xyXG4gXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3ZnRmlsdGVyO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBDb2xvciBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIENvbG9yTHVtYSA6IGZ1bmN0aW9uICggaGV4LCBsICkge1xyXG5cclxuICAgICAgICAvL2lmKCBoZXguc3Vic3RyaW5nKDAsIDMpID09PSAncmdiYScgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIGlmKCBoZXggPT09ICduJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgLy8gdmFsaWRhdGUgaGV4IHN0cmluZ1xyXG4gICAgICAgIGhleCA9IFN0cmluZyhoZXgpLnJlcGxhY2UoL1teMC05YS1mXS9naSwgJycpO1xyXG4gICAgICAgIGlmIChoZXgubGVuZ3RoIDwgNikge1xyXG4gICAgICAgICAgICBoZXggPSBoZXhbMF0raGV4WzBdK2hleFsxXStoZXhbMV0raGV4WzJdK2hleFsyXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbCA9IGwgfHwgMDtcclxuXHJcbiAgICAgICAgLy8gY29udmVydCB0byBkZWNpbWFsIGFuZCBjaGFuZ2UgbHVtaW5vc2l0eVxyXG4gICAgICAgIGxldCByZ2IgPSBcIiNcIiwgYywgaTtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGMgPSBwYXJzZUludChoZXguc3Vic3RyKGkqMiwyKSwgMTYpO1xyXG4gICAgICAgICAgICBjID0gTWF0aC5yb3VuZChNYXRoLm1pbihNYXRoLm1heCgwLCBjICsgKGMgKiBsKSksIDI1NSkpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICAgICAgcmdiICs9IChcIjAwXCIrYykuc3Vic3RyKGMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZ2I7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBmaW5kRGVlcEludmVyOiBmdW5jdGlvbiAoIGMgKSB7IFxyXG5cclxuICAgICAgICByZXR1cm4gKGNbMF0gKiAwLjMgKyBjWzFdICogLjU5ICsgY1syXSAqIC4xMSkgPD0gMC42O1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBsZXJwQ29sb3I6IGZ1bmN0aW9uKCBjMSwgYzIsIGZhY3RvciApIHtcclxuICAgICAgICBsZXQgbmV3Q29sb3IgPSB7fTtcclxuICAgICAgICBmb3IgKCBsZXQgaSA9IDA7IGkgPCAzOyBpKysgKSB7XHJcbiAgICAgICAgICBuZXdDb2xvcltpXSA9IGMxWyBpIF0gKyAoIGMyWyBpIF0gLSBjMVsgaSBdICkgKiBmYWN0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXdDb2xvcjtcclxuICAgIH0sXHJcblxyXG4gICAgaGV4VG9IdG1sOiBmdW5jdGlvbiAoIHYgKSB7IFxyXG4gICAgICAgIHYgPSB2ID09PSB1bmRlZmluZWQgPyAweDAwMDAwMCA6IHY7XHJcbiAgICAgICAgcmV0dXJuIFwiI1wiICsgKFwiMDAwMDAwXCIgKyB2LnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFRvSGV4OiBmdW5jdGlvbiAoIHYgKSB7IFxyXG5cclxuICAgICAgICByZXR1cm4gdi50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoXCIjXCIsIFwiMHhcIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICB1MjU1OiBmdW5jdGlvbiAoYywgaSkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDIpLCAxNikgLyAyNTU7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICB1MTY6IGZ1bmN0aW9uICggYywgaSApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAxKSwgMTYpIC8gMTU7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICB1bnBhY2s6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIGlmIChjLmxlbmd0aCA9PSA3KSByZXR1cm4gWyBULnUyNTUoYywgMSksIFQudTI1NShjLCAzKSwgVC51MjU1KGMsIDUpIF07XHJcbiAgICAgICAgZWxzZSBpZiAoYy5sZW5ndGggPT0gNCkgcmV0dXJuIFsgVC51MTYoYywxKSwgVC51MTYoYywyKSwgVC51MTYoYywzKSBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcDI1NTogZnVuY3Rpb24gKCBjICkge1xyXG4gICAgICAgIGxldCBoID0gTWF0aC5yb3VuZCggKCBjICogMjU1ICkgKS50b1N0cmluZyggMTYgKTtcclxuICAgICAgICBpZiAoIGgubGVuZ3RoIDwgMiApIGggPSAnMCcgKyBoO1xyXG4gICAgICAgIHJldHVybiBoO1xyXG4gICAgfSxcclxuXHJcbiAgICBwYWNrOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiAnIycgKyBULnAyNTUoIGNbIDAgXSApICsgVC5wMjU1KCBjWyAxIF0gKSArIFQucDI1NSggY1sgMiBdICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sUmdiOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICByZXR1cm4gJ3JnYignICsgTWF0aC5yb3VuZChjWzBdICogMjU1KSArICcsJysgTWF0aC5yb3VuZChjWzFdICogMjU1KSArICcsJysgTWF0aC5yb3VuZChjWzJdICogMjU1KSArICcpJztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHBhZDogZnVuY3Rpb24oIG4gKXtcclxuICAgICAgICBpZihuLmxlbmd0aCA9PSAxKW4gPSAnMCcgKyBuO1xyXG4gICAgICAgIHJldHVybiBuO1xyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hleCA6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIGxldCByID0gTWF0aC5yb3VuZChjWzBdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGcgPSBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgYiA9IE1hdGgucm91bmQoY1syXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIHJldHVybiAnIycgKyBULnBhZChyKSArIFQucGFkKGcpICsgVC5wYWQoYik7XHJcblxyXG4gICAgICAgLy8gcmV0dXJuICcjJyArICggJzAwMDAwMCcgKyAoICggY1swXSAqIDI1NSApIDw8IDE2IF4gKCBjWzFdICogMjU1ICkgPDwgOCBeICggY1syXSAqIDI1NSApIDw8IDAgKS50b1N0cmluZyggMTYgKSApLnNsaWNlKCAtIDYgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh1ZVRvUmdiOiBmdW5jdGlvbiggcCwgcSwgdCApe1xyXG5cclxuICAgICAgICBpZiAoIHQgPCAwICkgdCArPSAxO1xyXG4gICAgICAgIGlmICggdCA+IDEgKSB0IC09IDE7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDYgKSByZXR1cm4gcCArICggcSAtIHAgKSAqIDYgKiB0O1xyXG4gICAgICAgIGlmICggdCA8IDEgLyAyICkgcmV0dXJuIHE7XHJcbiAgICAgICAgaWYgKCB0IDwgMiAvIDMgKSByZXR1cm4gcCArICggcSAtIHAgKSAqIDYgKiAoIDIgLyAzIC0gdCApO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9Ic2w6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBjWzBdLCBnID0gY1sxXSwgYiA9IGNbMl0sIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLCBtYXggPSBNYXRoLm1heChyLCBnLCBiKSwgZGVsdGEgPSBtYXggLSBtaW4sIGggPSAwLCBzID0gMCwgbCA9IChtaW4gKyBtYXgpIC8gMjtcclxuICAgICAgICBpZiAobCA+IDAgJiYgbCA8IDEpIHMgPSBkZWx0YSAvIChsIDwgMC41ID8gKDIgKiBsKSA6ICgyIC0gMiAqIGwpKTtcclxuICAgICAgICBpZiAoZGVsdGEgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChtYXggPT0gciAmJiBtYXggIT0gZykgaCArPSAoZyAtIGIpIC8gZGVsdGE7XHJcbiAgICAgICAgICAgIGlmIChtYXggPT0gZyAmJiBtYXggIT0gYikgaCArPSAoMiArIChiIC0gcikgLyBkZWx0YSk7XHJcbiAgICAgICAgICAgIGlmIChtYXggPT0gYiAmJiBtYXggIT0gcikgaCArPSAoNCArIChyIC0gZykgLyBkZWx0YSk7XHJcbiAgICAgICAgICAgIGggLz0gNjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFsgaCwgcywgbCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHNsVG9SZ2I6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgbGV0IHAsIHEsIGggPSBjWzBdLCBzID0gY1sxXSwgbCA9IGNbMl07XHJcblxyXG4gICAgICAgIGlmICggcyA9PT0gMCApIHJldHVybiBbIGwsIGwsIGwgXTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcSA9IGwgPD0gMC41ID8gbCAqIChzICsgMSkgOiBsICsgcyAtICggbCAqIHMgKTtcclxuICAgICAgICAgICAgcCA9IGwgKiAyIC0gcTtcclxuICAgICAgICAgICAgcmV0dXJuIFsgVC5odWVUb1JnYihwLCBxLCBoICsgMC4zMzMzMyksIFQuaHVlVG9SZ2IocCwgcSwgaCksIFQuaHVlVG9SZ2IocCwgcSwgaCAtIDAuMzMzMzMpIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgTU9ERUxcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtYWtlR3JhZGlhbnQ6IGZ1bmN0aW9uICggdHlwZSwgc2V0dGluZ3MsIHBhcmVudCwgY29sb3JzICkge1xyXG5cclxuICAgICAgICBULmRvbSggdHlwZSwgbnVsbCwgc2V0dGluZ3MsIHBhcmVudCwgMCApO1xyXG5cclxuICAgICAgICBsZXQgbiA9IHBhcmVudC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSwgYztcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCBjb2xvcnMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIGMgPSBjb2xvcnNbaV07XHJcbiAgICAgICAgICAgIC8vVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsIHN0eWxlOidzdG9wLWNvbG9yOicrY1sxXSsnOyBzdG9wLW9wYWNpdHk6JytjWzJdKyc7JyB9LCBwYXJlbnQsIFswLG5dICk7XHJcbiAgICAgICAgICAgIFQuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCAnc3RvcC1jb2xvcic6Y1sxXSwgICdzdG9wLW9wYWNpdHknOmNbMl0gfSwgcGFyZW50LCBbMCxuXSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKm1ha2VHcmFwaDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOididXR0JyB9LCBzdmcgKTsvLzBcclxuICAgICAgICAvL1QuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOjEwOCwgaGVpZ2h0OjEwOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzFcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cys3LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjcgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMlxyXG4gICAgICAgIC8vVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmdyYXBoID0gc3ZnO1xyXG5cclxuICAgIH0sKi9cclxuXHJcbiAgICBtYWtlUGFkOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgd3cgPSAyNTZcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3d3KycgJyt3dywgd2lkdGg6d3csIGhlaWdodDp3dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIGxldCB3ID0gMjAwOyBcclxuICAgICAgICBsZXQgZCA9ICh3dy13KSowLjUsIG0gPSAyMDtcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCwgeTogZCwgIHdpZHRoOiB3LCBoZWlnaHQ6IHcsIGZpbGw6VC5jb2xvcnMuYmFjayB9LCBzdmcgKTsgLy8gMFxyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkK20qMC41LCB5OiBkK20qMC41LCB3aWR0aDogdyAtIG0gLCBoZWlnaHQ6IHcgLSBtLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiB9LCBzdmcgKTsgLy8gMVxyXG4gICAgICAgIC8vIFBvaW50ZXJcclxuICAgICAgICBUb29scy5kb20oICdsaW5lJywgJycsIHsgeDE6IGQrKG0qMC41KSwgeTE6IHd3ICowLjUsIHgyOiBkKyh3LW0qMC41KSwgeTI6IHd3ICogMC41LCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDJcclxuICAgICAgICBUb29scy5kb20oICdsaW5lJywgJycsIHsgeDE6IHd3ICogMC41LCB4Mjogd3cgKiAwLjUsIHkxOiBkKyhtKjAuNSksIHkyOiBkKyh3LW0qMC41KSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAzXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6IHd3ICogMC41LCBjeTogd3cgKiAwLjUsIHI6NSwgc3Ryb2tlOiBULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzogNSwgZmlsbDonbm9uZScgfSwgc3ZnICk7IC8vIDRcclxuICAgICAgICBULnBhZDJkID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUtub2I6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cys3LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjcgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5rbm9iID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNpcmN1bGFyOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gNDA7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzoxMCwgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjcsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOididXR0JyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmNpcmN1bGFyID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUpveXN0aWNrOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICAvLysnIGJhY2tncm91bmQ6I2YwMDsnXHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4LCBjY2M7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IE1hdGguZmxvb3IoKHctMzApKjAuNSk7XHJcbiAgICAgICAgbGV0IGlubmVyUmFkaXVzID0gTWF0aC5mbG9vcihyYWRpdXMqMC42KTtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgaWYoIG1vZGVsID09PSAwICl7XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAgICAgLy8gZ3JhZGlhbiBiYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzQwLCAncmdiKDAsMCwwKScsIDAuM10sIFs4MCwgJ3JnYigwLDAsMCknLCAwXSwgWzkwLCAncmdiKDUwLDUwLDUwKScsIDAuNF0sIFsxMDAsICdyZ2IoNTAsNTAsNTApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWQnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhZGlhbiBzaGFkb3dcclxuICAgICAgICAgICAgY2NjID0gWyBbNjAsICdyZ2IoMCwwLDApJywgMC41XSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFMnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhZGlhbiBzdGlja1xyXG4gICAgICAgICAgICBsZXQgY2MwID0gWydyZ2IoNDAsNDAsNDApJywgJ3JnYig0OCw0OCw0OCknLCAncmdiKDMwLDMwLDMwKSddO1xyXG4gICAgICAgICAgICBsZXQgY2MxID0gWydyZ2IoMSw5MCwxOTcpJywgJ3JnYigzLDk1LDIwNyknLCAncmdiKDAsNjUsMTY3KSddO1xyXG5cclxuICAgICAgICAgICAgY2NjID0gWyBbMzAsIGNjMFswXSwgMV0sIFs2MCwgY2MwWzFdLCAxXSwgWzgwLCBjYzBbMV0sIDFdLCBbMTAwLCBjYzBbMl0sIDFdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkSW4nLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgY2NjID0gWyBbMzAsIGNjMVswXSwgMV0sIFs2MCwgY2MxWzFdLCAxXSwgWzgwLCBjYzFbMV0sIDFdLCBbMTAwLCBjYzFbMl0sIDFdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkSW4yJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYXBoXHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J3VybCgjZ3JhZCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0KzUsIGN5OjY0KzEwLCByOmlubmVyUmFkaXVzKzEwLCBmaWxsOid1cmwoI2dyYWRTKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOid1cmwoI2dyYWRJbiknIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18wID0gc3ZnO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgLy8gZ3JhZGlhbiBzaGFkb3dcclxuICAgICAgICAgICAgY2NjID0gWyBbNjksICdyZ2IoMCwwLDApJywgMF0sWzcwLCAncmdiKDAsMCwwKScsIDAuM10sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRYJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiYSgxMDAsMTAwLDEwMCwwLjI1KScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMrMTQsIGZpbGw6J3VybCgjZ3JhZFgpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYigxMDAsMTAwLDEwMCknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzEgPSBzdmc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDb2xvclJpbmc6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAyNTY7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGxldCBzID0gMzA7Ly9zdHJva2VcclxuICAgICAgICBsZXQgciA9KCB3LXMgKSowLjU7XHJcbiAgICAgICAgbGV0IG1pZCA9IHcqMC41O1xyXG4gICAgICAgIGxldCBuID0gMjQsIG51ZGdlID0gOCAvIHIgLyBuICogTWF0aC5QSSwgYTEgPSAwLCBkMTtcclxuICAgICAgICBsZXQgYW0sIHRhbiwgZDIsIGEyLCBhciwgaSwgaiwgcGF0aCwgY2NjO1xyXG4gICAgICAgIGxldCBjb2xvciA9IFtdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciAoIGkgPSAwOyBpIDw9IG47ICsraSkge1xyXG5cclxuICAgICAgICAgICAgZDIgPSBpIC8gbjtcclxuICAgICAgICAgICAgYTIgPSBkMiAqIFQuVHdvUEk7XHJcbiAgICAgICAgICAgIGFtID0gKGExICsgYTIpICogMC41O1xyXG4gICAgICAgICAgICB0YW4gPSAxIC8gTWF0aC5jb3MoKGEyIC0gYTEpICogMC41KTtcclxuXHJcbiAgICAgICAgICAgIGFyID0gW1xyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTEpLCAtTWF0aC5jb3MoYTEpLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGFtKSAqIHRhbiwgLU1hdGguY29zKGFtKSAqIHRhbiwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMiksIC1NYXRoLmNvcyhhMilcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbG9yWzFdID0gVC5yZ2JUb0hleCggVC5oc2xUb1JnYihbZDIsIDEsIDAuNV0pICk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBqID0gNjtcclxuICAgICAgICAgICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgICAgICAgICBhcltqXSA9ICgoYXJbal0qcikrbWlkKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHBhdGggPSAnIE0nICsgYXJbMF0gKyAnICcgKyBhclsxXSArICcgUScgKyBhclsyXSArICcgJyArIGFyWzNdICsgJyAnICsgYXJbNF0gKyAnICcgKyBhcls1XTtcclxuXHJcbiAgICAgICAgICAgICAgICBjY2MgPSBbIFswLGNvbG9yWzBdLDFdLCBbMTAwLGNvbG9yWzFdLDFdIF07XHJcbiAgICAgICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonRycraSwgeDE6YXJbMF0sIHkxOmFyWzFdLCB4Mjphcls0XSwgeTI6YXJbNV0sIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDpwYXRoLCAnc3Ryb2tlLXdpZHRoJzpzLCBzdHJva2U6J3VybCgjRycraSsnKScsICdzdHJva2UtbGluZWNhcCc6XCJidXR0XCIgfSwgc3ZnLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhMSA9IGEyIC0gbnVkZ2U7IFxyXG4gICAgICAgICAgICBjb2xvclswXSA9IGNvbG9yWzFdO1xyXG4gICAgICAgICAgICBkMSA9IGQyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGJyID0gKDEyOCAtIHMgKSArIDI7XHJcbiAgICAgICAgbGV0IGJ3ID0gNjA7XHJcblxyXG4gICAgICAgIGxldCB0dyA9IDg0LjkwO1xyXG5cclxuICAgICAgICAvLyBibGFjayAvIHdoaXRlXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyNGRkZGRkYnLCAxXSwgWzUwLCAnI0ZGRkZGRicsIDBdLCBbNTAsICcjMDAwMDAwJywgMF0sIFsxMDAsICcjMDAwMDAwJywgMV0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wwJywgeDE6MCwgeTE6bWlkLXR3LCB4MjowLCB5MjptaWQrdHcsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjN2Y3ZjdmJywgMV0sIFs1MCwgJyM3ZjdmN2YnLCAwLjVdLCBbMTAwLCAnIzdmN2Y3ZicsIDBdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMScsIHgxOm1pZC00OS4wNSwgeTE6MCwgeDI6bWlkKzk4LCB5MjowLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7ICd0cmFuc2Zvcm0tb3JpZ2luJzogJzEyOHB4IDEyOHB4JywgJ3RyYW5zZm9ybSc6J3JvdGF0ZSgwKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3JlZCcgIH0sIHN2ZywgMiApOy8vIDIsMFxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMSknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDEpJyAgfSwgc3ZnLCAyICk7Ly8yLDFcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDApJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wwKScgIH0sIHN2ZywgMiApOy8vMiwyXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonTSAyNTUuNzUgMTM2LjUgUSAyNTYgMTMyLjMgMjU2IDEyOCAyNTYgMTIzLjcgMjU1Ljc1IDExOS41IEwgMjQxIDEyOCAyNTUuNzUgMTM2LjUgWicsICBmaWxsOidub25lJywnc3Ryb2tlLXdpZHRoJzoyLCBzdHJva2U6JyMwMDAnICB9LCBzdmcsIDIgKTsvLzIsM1xyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDoxMjgrMTEzLCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Mywgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnLCAyICk7Ly8yLjNcclxuXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDoxMjgsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzoyLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzNcclxuXHJcbiAgICAgICAgVC5jb2xvclJpbmcgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpY29uOiBmdW5jdGlvbiAoIHR5cGUsIGNvbG9yLCB3ICl7XHJcblxyXG4gICAgICAgIHcgPSB3IHx8IDQwO1xyXG4gICAgICAgIC8vY29sb3IgPSBjb2xvciB8fCAnI0RFREVERSc7XHJcbiAgICAgICAgbGV0IHZpZXdCb3ggPSAnMCAwIDI1NiAyNTYnO1xyXG4gICAgICAgIC8vbGV0IHZpZXdCb3ggPSAnMCAwICcrIHcgKycgJysgdztcclxuICAgICAgICBsZXQgdCA9IFtcIjxzdmcgeG1sbnM9J1wiK1Quc3ZnbnMrXCInIHZlcnNpb249JzEuMScgeG1sbnM6eGxpbms9J1wiK1QuaHRtbHMrXCInIHN0eWxlPSdwb2ludGVyLWV2ZW50czpub25lOycgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pbllNYXggbWVldCcgeD0nMHB4JyB5PScwcHgnIHdpZHRoPSdcIit3K1wicHgnIGhlaWdodD0nXCIrdytcInB4JyB2aWV3Qm94PSdcIit2aWV3Qm94K1wiJz48Zz5cIl07XHJcbiAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICBjYXNlICdsb2dvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb0ZpbGxfZCtcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZG9uYXRlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19kb25hdGUrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ25lbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fbmVvK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwaHknOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19waHkrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbmZpZyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX2NvbmZpZytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ2l0aHViJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19naXRodWIrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NhdmUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMjYuMTI1IDE3IEwgMjAgMjIuOTUgMTQuMDUgMTcgTSAyMCA5Ljk1IEwgMjAgMjIuOTUnLz48cGF0aCBzdHJva2U9J1wiK2NvbG9yO1xyXG4gICAgICAgICAgICB0WzFdKz1cIicgc3Ryb2tlLXdpZHRoPScyLjUnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAzMi42IDIzIEwgMzIuNiAyNS41IFEgMzIuNiAyOC41IDI5LjYgMjguNSBMIDEwLjYgMjguNSBRIDcuNiAyOC41IDcuNiAyNS41IEwgNy42IDIzJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0WzJdID0gXCI8L2c+PC9zdmc+XCI7XHJcbiAgICAgICAgcmV0dXJuIHQuam9pbihcIlxcblwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGxvZ29GaWxsX2Q6YFxyXG4gICAgTSAxNzEgMTUwLjc1IEwgMTcxIDMzLjI1IDE1NS41IDMzLjI1IDE1NS41IDE1MC43NSBRIDE1NS41IDE2Mi4yIDE0Ny40NSAxNzAuMiAxMzkuNDUgMTc4LjI1IDEyOCAxNzguMjUgMTE2LjYgMTc4LjI1IDEwOC41NSAxNzAuMiAxMDAuNSAxNjIuMiAxMDAuNSAxNTAuNzUgXHJcbiAgICBMIDEwMC41IDMzLjI1IDg1IDMzLjI1IDg1IDE1MC43NSBRIDg1IDE2OC42NSA5Ny41NSAxODEuMTUgMTEwLjE1IDE5My43NSAxMjggMTkzLjc1IDE0NS45IDE5My43NSAxNTguNCAxODEuMTUgMTcxIDE2OC42NSAxNzEgMTUwLjc1IFxyXG4gICAgTSAyMDAgMzMuMjUgTCAxODQgMzMuMjUgMTg0IDE1MC44IFEgMTg0IDE3NC4xIDE2Ny42IDE5MC40IDE1MS4zIDIwNi44IDEyOCAyMDYuOCAxMDQuNzUgMjA2LjggODguMyAxOTAuNCA3MiAxNzQuMSA3MiAxNTAuOCBMIDcyIDMzLjI1IDU2IDMzLjI1IDU2IDE1MC43NSBcclxuICAgIFEgNTYgMTgwLjU1IDc3LjA1IDIwMS42IDk4LjIgMjIyLjc1IDEyOCAyMjIuNzUgMTU3LjggMjIyLjc1IDE3OC45IDIwMS42IDIwMCAxODAuNTUgMjAwIDE1MC43NSBMIDIwMCAzMy4yNSBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fZ2l0aHViOmBcclxuICAgIE0gMTgwLjUgNzAgUSAxODYuMyA4Mi40IDE4MS41NSA5Ni41NSAxOTYuNSAxMTEuNSAxODkuNyAxNDAuNjUgMTgzLjY1IDE2OC4zNSAxNDYgMTcyLjcgMTUyLjUgMTc4LjcgMTUyLjU1IDE4NS45IEwgMTUyLjU1IDIxOC4xNSBRIDE1Mi44NCAyMjQuNTYgMTU5LjE1IDIyMy4zIFxyXG4gICAgMTU5LjIxIDIyMy4zIDE1OS4yNSAyMjMuMyAxODEuMTQgMjE2LjI1IDE5OC43IDE5OC43IDIyOCAxNjkuNCAyMjggMTI4IDIyOCA4Ni42IDE5OC43IDU3LjMgMTY5LjQgMjggMTI4IDI4IDg2LjYgMjggNTcuMyA1Ny4zIDI4IDg2LjYgMjggMTI4IDI4IDE2OS40IDU3LjMgMTk4LjcgNzQuODUgXHJcbiAgICAyMTYuMjUgOTYuNzUgMjIzLjMgOTYuNzggMjIzLjMgOTYuOCAyMjMuMyAxMDMuMTYgMjI0LjU0IDEwMy40NSAyMTguMTUgTCAxMDMuNDUgMjAwIFEgODIuOTcgMjAzLjEgNzUuMSAxOTYuMzUgNjkuODUgMTkxLjY1IDY4LjQgMTg1LjQ1IDY0LjI3IDE3Ny4wNTUgNTkuNCAxNzQuMTUgNDkuMjAgXHJcbiAgICAxNjYuODcgNjAuOCAxNjcuOCA2OS44NSAxNjkuNjEgNzUuNyAxODAgODEuMTMgMTg4LjA5IDkwIDE4OC41NSA5OC4xOCAxODguODYgMTAzLjQ1IDE4NS45IDEwMy40OSAxNzguNjcgMTEwIDE3Mi43IDcyLjMzIDE2OC4zMyA2Ni4zIDE0MC42NSA1OS40OCAxMTEuNDkgNzQuNDUgOTYuNTUgNjkuNyBcclxuICAgIDgyLjQxIDc1LjUgNzAgODQuODcgNjguNzQgMTAzLjE1IDgwIDExNS4xMjUgNzYuNjM1IDEyOCA3Ni44NSAxNDAuODUgNzYuNjUgMTUyLjg1IDgwIDE3MS4xIDY4Ljc1IDE4MC41IDcwIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19uZW86YFxyXG4gICAgTSAyMTkgNTIgTCAyMDYgNTIgMjA2IDE2NiBRIDIwNiAxODMuNCAxOTMuNzUgMTk1LjY1IDE4MS40IDIwOCAxNjQgMjA4IDE0Ni42IDIwOCAxMzQuMzUgMTk1LjY1IDEyMiAxODMuNCAxMjIgMTY2IEwgMTIyIDkwIFEgMTIyIDc3LjYgMTEzLjE1IDY4Ljg1IDEwNC40IDYwIDkyIDYwIDc5LjU1IFxyXG4gICAgNjAgNzAuNzUgNjguODUgNjIgNzcuNiA2MiA5MCBMIDYyIDIwNCA3NSAyMDQgNzUgOTAgUSA3NSA4MyA3OS45NSA3OCA4NC45NSA3MyA5MiA3MyA5OSA3MyAxMDQgNzggMTA5IDgzIDEwOSA5MCBMIDEwOSAxNjYgUSAxMDkgMTg4LjggMTI1LjE1IDIwNC44NSAxNDEuMiAyMjEgMTY0IDIyMSBcclxuICAgIDE4Ni43NSAyMjEgMjAyLjk1IDIwNC44NSAyMTkgMTg4LjggMjE5IDE2NiBMIDIxOSA1MiBNIDE5NCA1MiBMIDE4MSA1MiAxODEgMTY2IFEgMTgxIDE3MyAxNzYuMDUgMTc4IDE3MS4wNSAxODMgMTY0IDE4MyAxNTcgMTgzIDE1MiAxNzggMTQ3IDE3MyAxNDcgMTY2IEwgMTQ3IDkwIFEgMTQ3IFxyXG4gICAgNjcuMiAxMzAuODUgNTEuMTUgMTE0LjggMzUgOTIgMzUgNjkuMjUgMzUgNTMuMDUgNTEuMTUgMzcgNjcuMiAzNyA5MCBMIDM3IDIwNCA1MCAyMDQgNTAgOTAgUSA1MCA3Mi42IDYyLjI1IDYwLjM1IDc0LjYgNDggOTIgNDggMTA5LjQgNDggMTIxLjY1IDYwLjM1IDEzNCA3Mi42IDEzNCA5MCBMIFxyXG4gICAgMTM0IDE2NiBRIDEzNCAxNzguNCAxNDIuODUgMTg3LjE1IDE1MS42IDE5NiAxNjQgMTk2IDE3Ni40NSAxOTYgMTg1LjI1IDE4Ny4xNSAxOTQgMTc4LjQgMTk0IDE2NiBMIDE5NCA1MiBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fcGh5OmBcclxuICAgIE0gMTAzLjU1IDM3Ljk1IEwgMTI3Ljk1IDM3Ljk1IFEgMTYyLjM1IDM3Ljk1IDE4Ni41IDU1IDIxMC45IDcyLjM1IDIxMC45IDk2LjUgMjEwLjkgMTIwLjY1IDE4Ni41IDEzNy43IDE2Mi4zNSAxNTUgMTI3Ljk1IDE1NSBMIDEyNy45NSAyMzcuOTUgTSAxMjcuOTUgMTU1IFxyXG4gICAgUSA5My41NSAxNTUgNjkuMTUgMTM3LjcgNDUgMTIwLjY1IDQ1IDk2LjUgNDUgNzIuMzUgNjkuMTUgNTUgNzAuOSA1My44IDcyLjg1IDUyLjg1IE0gMTI3Ljk1IDE1NSBMIDEyNy45NSAzNy45NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2NvbmZpZzpgXHJcbiAgICBNIDIwNC4zNSA1MS42NSBMIDE3My4yNSA4Mi43NSBRIDE5MiAxMDEuNSAxOTIgMTI4IEwgMjM2IDEyOCBNIDE5MiAxMjggUSAxOTIgMTU0LjU1IDE3My4yNSAxNzMuMjUgTCAyMDQuNCAyMDQuNCBNIDUxLjY1IDUxLjY1IEwgODIuNzUgODIuNzUgUSAxMDEuNSA2NCAxMjggNjQgXHJcbiAgICBMIDEyOCAyMCBNIDUxLjYgMjA0LjQgTCA4Mi43NSAxNzMuMjUgUSA2NCAxNTQuNTUgNjQgMTI4IEwgMjAgMTI4IE0gMTI4IDIzNiBMIDEyOCAxOTIgUSAxMDEuNSAxOTIgODIuNzUgMTczLjI1IE0gNjQgMTI4IFEgNjQgMTAxLjUgODIuNzUgODIuNzUgTSAxNzMuMjUgMTczLjI1IFxyXG4gICAgUSAxNTQuNTUgMTkyIDEyOCAxOTIgTSAxMjggNjQgUSAxNTQuNTUgNjQgMTczLjI1IDgyLjc1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fZG9uYXRlOmBcclxuICAgIE0gMTcxLjMgODAuMyBRIDE3OS41IDYyLjE1IDE3MS4zIDQ1LjggMTY0LjEgMzIuNSAxNDEuMzUgMzAuMSBMIDk0LjM1IDMwLjEgUSA4OS4zNSAzMC40IDg4LjMgMzUuMTUgTCA3MC41IDE0OC4wNSBRIDcwLjIgMTUyLjUgNzMuNyAxNTIuNiBMIDEwMC45NSAxNTIuNiAxMDcgMTExLjYgUSAxMDguNzUgXHJcbiAgICAxMDYuNTUgMTEyLjYgMTA2LjQ1IDEzMC40NSAxMDguMDUgMTQ1LjMgMTAzLjkgMTYzLjM1IDk4Ljc1IDE3MS4zIDgwLjMgTSAxNzkuOCA3MS41IFEgMTc4LjYgNzkuNzUgMTc0LjkgODcuODUgMTY4LjQ1IDEwMi45IDE1MS45IDEwOS4xNSAxNDAuNjUgMTEzLjk1IDExNy41NSAxMTMgMTEzLjE1IFxyXG4gICAgMTEyLjc1IDExMSAxMTcuNDUgTCAxMDIuNyAxNjkuOTUgUSAxMDIuNDUgMTczLjggMTA1LjUgMTczLjg1IEwgMTI4Ljk1IDE3My44NSBRIDEzMi4yIDE3NC4yIDEzMy4zNSAxNjkuNjUgTCAxMzguMyAxMzkuOTUgUSAxMzkuNzUgMTM1LjYgMTQzLjEgMTM1LjUgMTQ2LjYgMTM1Ljc1IDE1MC42IDEzNS42NSBcclxuICAgIDE1NC41NSAxMzUuNSAxNTcuMzUgMTM1LjEgMTYwLjE1IDEzNC43IDE2Ni43NSAxMzIuMzUgMTgxLjM1IDEyNy40IDE4Ny45IDExMS4yIDE5NC4yNSA5NS43NSAxODkuNSA4MS45NSAxODYuNzUgNzQuODUgMTc5LjggNzEuNSBNIDEwMy41IDIwOS45IFEgMTAzLjUgMjAyLjg1IDk5LjcgMTk4Ljg1IDk1Ljk1IFxyXG4gICAgMTk0Ljc1IDg5LjQgMTk0Ljc1IDgyLjggMTk0Ljc1IDc5LjA1IDE5OC44NSA3NS4zIDIwMi45IDc1LjMgMjA5LjkgNzUuMyAyMTYuODUgNzkuMDUgMjIwLjk1IDgyLjggMjI1LjA1IDg5LjQgMjI1LjA1IDk1Ljk1IDIyNS4wNSA5OS43IDIyMSAxMDMuNSAyMTYuOTUgMTAzLjUgMjA5LjkgTSA5NS40NSAyMDUuNSBcclxuICAgIFEgOTUuOTUgMjA3LjMgOTUuOTUgMjA5LjkgOTUuOTUgMjEyLjY1IDk1LjQ1IDIxNC4zNSA5NC45NSAyMTYgOTQgMjE3LjMgOTMuMSAyMTguNDUgOTEuOSAyMTkgOTAuNyAyMTkuNTUgODkuNCAyMTkuNTUgODguMTUgMjE5LjU1IDg2Ljk1IDIxOS4wNSA4NS43NSAyMTguNTUgODQuOCAyMTcuMyA4My45IDIxNi4xNSBcclxuICAgIDgzLjQgMjE0LjM1IDgyLjg1IDIxMi42IDgyLjg1IDIwOS45IDgyLjg1IDIwNy4zIDgzLjQgMjA1LjQ1IDgzLjk1IDIwMy41NSA4NC44NSAyMDIuNDUgODUuOSAyMDEuMiA4Ni45NSAyMDAuNzUgODguMDUgMjAwLjI1IDg5LjQgMjAwLjI1IDkwLjcgMjAwLjI1IDkxLjg1IDIwMC44IDkzLjA1IDIwMS4zIDk0IDIwMi41IFxyXG4gICAgOTQuOSAyMDMuNjUgOTUuNDUgMjA1LjUgTSAxNTMuMyAxOTUuMzUgTCAxNDUuMyAxOTUuMzUgMTM1LjUgMjI0LjQ1IDE0Mi44IDIyNC40NSAxNDQuNiAyMTguNSAxNTMuNzUgMjE4LjUgMTU1LjYgMjI0LjQ1IDE2My4xIDIyNC40NSAxNTMuMyAxOTUuMzUgTSAxNTIuMTUgMjEzLjI1IEwgMTQ2LjI1IDIxMy4yNSBcclxuICAgIDE0OS4yIDIwMy42NSAxNTIuMTUgMjEzLjI1IE0gMTE2Ljc1IDE5NS4zNSBMIDEwNy44IDE5NS4zNSAxMDcuOCAyMjQuNDUgMTE0LjUgMjI0LjQ1IDExNC41IDIwNC4yIDEyNS43IDIyNC40NSAxMzIuNzUgMjI0LjQ1IDEzMi43NSAxOTUuMzUgMTI2LjA1IDE5NS4zNSAxMjYuMDUgMjEyLjA1IDExNi43NSAxOTUuMzUgTSBcclxuICAgIDY2LjUgMTk3LjY1IFEgNjQuMTUgMTk2LjE1IDYxLjQ1IDE5NS43NSA1OC44IDE5NS4zNSA1NS43NSAxOTUuMzUgTCA0Ni43IDE5NS4zNSA0Ni43IDIyNC40NSA1NS44IDIyNC40NSBRIDU4LjggMjI0LjQ1IDYxLjUgMjI0LjA1IDY0LjE1IDIyMy42IDY2LjQgMjIyLjE1IDY5LjE1IDIyMC40NSA3MC45IDIxNy4yIFxyXG4gICAgNzIuNyAyMTQgNzIuNyAyMDkuOTUgNzIuNyAyMDUuNyA3MSAyMDIuNiA2OS4zNSAxOTkuNSA2Ni41IDE5Ny42NSBNIDY0LjIgMjA1IFEgNjUuMiAyMDcgNjUuMiAyMDkuOSA2NS4yIDIxMi43NSA2NC4yNSAyMTQuNzUgNjMuMyAyMTYuNzUgNjEuNSAyMTcuODUgNjAgMjE4Ljg1IDU4LjMgMjE4LjkgNTYuNiAyMTkgXHJcbiAgICA1NC4xNSAyMTkgTCA1NCAyMTkgNTQgMjAwLjggNTQuMTUgMjAwLjggUSA1Ni40IDIwMC44IDU4LjA1IDIwMC45IDU5LjcgMjAwLjk1IDYxLjE1IDIwMS43NSA2My4yIDIwMi45NSA2NC4yIDIwNSBNIDIxMC4yIDE5NS4zNSBMIDE5MC41IDE5NS4zNSAxOTAuNSAyMjQuNDUgMjEwLjIgMjI0LjQ1IDIxMC4yIDIxOC45IFxyXG4gICAgMTk3Ljc1IDIxOC45IDE5Ny43NSAyMTEuNTUgMjA5LjIgMjExLjU1IDIwOS4yIDIwNiAxOTcuNzUgMjA2IDE5Ny43NSAyMDAuOSAyMTAuMiAyMDAuOSAyMTAuMiAxOTUuMzUgTSAxODcuNSAxOTUuMzUgTCAxNjMgMTk1LjM1IDE2MyAyMDAuOSAxNzEuNiAyMDAuOSAxNzEuNiAyMjQuNDUgMTc4LjkgMjI0LjQ1IDE3OC45IFxyXG4gICAgMjAwLjkgMTg3LjUgMjAwLjkgMTg3LjUgMTk1LjM1IFpcclxuICAgIGAsXHJcblxyXG59XHJcblxyXG5ULnNldFRleHQoKTtcclxuXHJcbmV4cG9ydCBjb25zdCBUb29scyA9IFQ7IiwiLy8vaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9maWxlLXN5c3RlbS1hY2Nlc3MvI2FwaS1maWxlc3lzdGVtZmlsZWhhbmRsZS1nZXRmaWxlXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEZpbGVzIHtcclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgRklMRSBUWVBFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGF1dG9UeXBlcyggdHlwZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHQgPSBbXVxyXG5cclxuICAgICAgICBzd2l0Y2goIHR5cGUgKXtcclxuICAgICAgICAgICAgY2FzZSAnc3ZnJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2ltYWdlL3N2Zyt4bWwnOiAnLnN2Zyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3dhdic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdhdWRpby93YXYnOiAnLndhdid9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wMyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdhdWRpby9tcGVnJzogJy5tcDMnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAndmlkZW8vbXA0JzogJy5tcDQnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdiaW4nOiBjYXNlICdoZXgnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnQmluYXJ5IEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOiBbJy5iaW4nLCAnLmhleCddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGV4dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdUZXh0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycudHh0JywgJy50ZXh0J10sICd0ZXh0L2h0bWwnOiBbJy5odG1sJywgJy5odG0nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pzb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSlNPTiBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vanNvbic6IFsnLmpzb24nXSB9IH0sIF0vL3RleHQvcGxhaW5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0phdmFTY3JpcHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvamF2YXNjcmlwdCc6IFsnLmpzJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJbWFnZXMnLCBhY2NlcHQ6IHsgJ2ltYWdlLyonOiBbJy5wbmcnLCAnLmdpZicsICcuanBlZycsICcuanBnJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpY29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ljb25zJywgYWNjZXB0OiB7ICdpbWFnZS94LWljbyc6IFsnLmljbyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbHV0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0x1dCcsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLmN1YmUnLCAnLjNkbCddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIExPQURcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c3RhdGljIGFzeW5jIGxvYWQoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgPSBGaWxlcy5zaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuXHJcbiAgICAgICAgXHRsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVBY2NlcHRBbGxPcHRpb246IHR5cGUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAvL3N0YXJ0SW46Jy4vYXNzZXRzJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcblxyXG4gICAgICAgICAgICAvLyBjcmVhdGUgYSBuZXcgaGFuZGxlXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIoIG9wdGlvbnMgKVxyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlWzBdLmdldEZpbGUoKVxyXG4gICAgICAgICAgICAvL2xldCBjb250ZW50ID0gYXdhaXQgZmlsZS50ZXh0KClcclxuXHJcbiAgICAgICAgICAgIGlmKCAhZmlsZSApIHJldHVybiBudWxsXHJcblxyXG4gICAgICAgICAgICBsZXQgZm5hbWUgPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgICAgIGxldCBmdHlwZSA9IGZuYW1lLnN1YnN0cmluZyggZm5hbWUubGFzdEluZGV4T2YoJy4nKSsxLCBmbmFtZS5sZW5ndGggKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFVcmwgPSBbICdwbmcnLCAnanBnJywgJ2pwZWcnLCAnbXA0JywgJ3dlYm0nLCAnb2dnJywgJ21wMycgXTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YUJ1ZiA9IFsgJ3NlYScsICd6JywgJ2hleCcsICdidmgnLCAnQlZIJywgJ2dsYicsICdnbHRmJyBdO1xyXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRhdGFVcmwuaW5kZXhPZiggZnR5cGUgKSAhPT0gLTEgKSByZWFkZXIucmVhZEFzRGF0YVVSTCggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgaWYoIGRhdGFCdWYuaW5kZXhPZiggZnR5cGUgKSAhPT0gLTEgKSByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIHJlYWRlci5yZWFkQXNUZXh0KCBmaWxlIClcclxuXHJcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBlLnRhcmdldC5yZXN1bHRcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1nID0gbmV3IEltYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggby5jYWxsYmFjayApIG8uY2FsbGJhY2soIGltZywgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWcuc3JjID0gY29udGVudFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2pzb24nOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiggby5jYWxsYmFjayApIG8uY2FsbGJhY2soIEpTT04ucGFyc2UoIGNvbnRlbnQgKSwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiggby5jYWxsYmFjayApIG8uY2FsbGJhY2soIGNvbnRlbnQsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSlcclxuICAgICAgICAgICAgaWYoIG8uYWx3YXlzICYmIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBudWxsIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblx0c3RhdGljIHNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgICAgICAgaW5wdXQudHlwZSA9IFwiZmlsZVwiO1xyXG4gICAgICAgICAgICBpbnB1dC5tdWx0aXBsZSA9IG9wdGlvbnMubXVsdGlwbGU7XHJcbiAgICAgICAgICAgIGlucHV0LmFjY2VwdCA9IG9wdGlvbnMudHlwZXNcclxuICAgICAgICAgICAgICAgIC5tYXAoKHR5cGUpID0+IHR5cGUuYWNjZXB0KVxyXG4gICAgICAgICAgICAgICAgLmZsYXRNYXAoKGluc3QpID0+IE9iamVjdC5rZXlzKGluc3QpLmZsYXRNYXAoKGtleSkgPT4gaW5zdFtrZXldKSlcclxuICAgICAgICAgICAgICAgIC5qb2luKFwiLFwiKTtcclxuXHJcbiAgICAgICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShcclxuICAgICAgICAgICAgICAgICAgICBbLi4uaW5wdXQuZmlsZXNdLm1hcCgoZmlsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RmlsZTogYXN5bmMgKCkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlucHV0LmNsaWNrKCk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIFNBVkVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgc2F2ZSggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBsZXQgdXNlUG9seSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciA9IEZpbGVzLnNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgICAgIHVzZVBvbHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuXHJcbiAgICAgICAgICAgIGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGVkTmFtZTogby5uYW1lIHx8ICdoZWxsbycsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBvLmRhdGEgfHwgJydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG4gICAgICAgICAgICBvcHRpb25zLmZpbmFsVHlwZSA9IE9iamVjdC5rZXlzKCBvcHRpb25zLnR5cGVzWzBdLmFjY2VwdCApWzBdXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc3VnZ2VzdGVkTmFtZSArPSBvcHRpb25zLnR5cGVzWzBdLmFjY2VwdFtvcHRpb25zLmZpbmFsVHlwZV1bMF1cclxuXHJcblxyXG4gICAgICAgICAgICAvLyBjcmVhdGUgYSBuZXcgaGFuZGxlXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIoIG9wdGlvbnMgKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB1c2VQb2x5ICkgcmV0dXJuXHJcblxyXG4gICAgICAgICAgICAvLyBjcmVhdGUgYSBGaWxlU3lzdGVtV3JpdGFibGVGaWxlU3RyZWFtIHRvIHdyaXRlIHRvXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGUuY3JlYXRlV3JpdGFibGUoKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOiBvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIHdyaXRlIG91ciBmaWxlXHJcbiAgICAgICAgICAgIGF3YWl0IGZpbGUud3JpdGUoYmxvYik7XHJcblxyXG4gICAgICAgICAgICAvLyBjbG9zZSB0aGUgZmlsZSBhbmQgd3JpdGUgdGhlIGNvbnRlbnRzIHRvIGRpc2suXHJcbiAgICAgICAgICAgIGF3YWl0IGZpbGUuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuc3VnZ2VzdGVkTmFtZSB8fCBcIm15LWZpbGUudHh0XCJcclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6b3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcbiAgICAgICAgICAgIGEuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoIGJsb2IgKVxyXG5cclxuICAgICAgICAgICAgYS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiBVUkwucmV2b2tlT2JqZWN0VVJMKGEuaHJlZiksIDEwMDAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBhLmNsaWNrKClcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgRk9MREVSIG5vdCBwb3NzaWJsZSBpbiBwb2x5XHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIGdldEZvbGRlcigpIHtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgIFxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd0RpcmVjdG9yeVBpY2tlcigpO1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGVudHJ5IG9mIGhhbmRsZS52YWx1ZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGVudHJ5LmdldEZpbGUoKTtcclxuICAgICAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGZpbGVzKVxyXG4gICAgICAgICAgICByZXR1cm4gZmlsZXM7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICBcclxuXHJcbn0iLCJleHBvcnQgY2xhc3MgVjIge1xyXG5cclxuXHRjb25zdHJ1Y3RvciggeCA9IDAsIHkgPSAwICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cclxuXHR9XHJcblxyXG5cdHNldCAoIHgsIHkgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRkaXZpZGUgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCAvPSB2Lng7XHJcblx0XHR0aGlzLnkgLz0gdi55O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bXVsdGlwbHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSB2Lng7XHJcblx0XHR0aGlzLnkgKj0gdi55O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bXVsdGlwbHlTY2FsYXIgKCBzY2FsYXIgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHNjYWxhcjtcclxuXHRcdHRoaXMueSAqPSBzY2FsYXI7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRkaXZpZGVTY2FsYXIgKCBzY2FsYXIgKSB7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoIDEgLyBzY2FsYXIgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZW5ndGggKCkge1xyXG5cclxuXHRcdHJldHVybiBNYXRoLnNxcnQoIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGFuZ2xlICgpIHtcclxuXHJcblx0XHQvLyBjb21wdXRlcyB0aGUgYW5nbGUgaW4gcmFkaWFucyB3aXRoIHJlc3BlY3QgdG8gdGhlIHBvc2l0aXZlIHgtYXhpc1xyXG5cclxuXHRcdHZhciBhbmdsZSA9IE1hdGguYXRhbjIoIHRoaXMueSwgdGhpcy54ICk7XHJcblxyXG5cdFx0aWYgKCBhbmdsZSA8IDAgKSBhbmdsZSArPSAyICogTWF0aC5QSTtcclxuXHJcblx0XHRyZXR1cm4gYW5nbGU7XHJcblxyXG5cdH1cclxuXHJcblx0YWRkU2NhbGFyICggcyApIHtcclxuXHJcblx0XHR0aGlzLnggKz0gcztcclxuXHRcdHRoaXMueSArPSBzO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnYXRlICgpIHtcclxuXHJcblx0XHR0aGlzLnggKj0gLTE7XHJcblx0XHR0aGlzLnkgKj0gLTE7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWcgKCkge1xyXG5cclxuXHRcdHRoaXMueCA9IC0xO1xyXG5cdFx0dGhpcy55ID0gLTE7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRpc1plcm8gKCkge1xyXG5cclxuXHRcdHJldHVybiAoIHRoaXMueCA9PT0gMCAmJiB0aGlzLnkgPT09IDAgKTtcclxuXHJcblx0fVxyXG5cclxuXHRjb3B5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggPSB2Lng7XHJcblx0XHR0aGlzLnkgPSB2Lnk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZXF1YWxzICggdiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueCA9PT0gdGhpcy54ICkgJiYgKCB2LnkgPT09IHRoaXMueSApICk7XHJcblxyXG5cdH1cclxuXHJcblx0bmVhckVxdWFscyAoIHYsIG4gKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LngudG9GaXhlZChuKSA9PT0gdGhpcy54LnRvRml4ZWQobikgKSAmJiAoIHYueS50b0ZpeGVkKG4pID09PSB0aGlzLnkudG9GaXhlZChuKSApICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVycCAoIHYsIGFscGhhICkge1xyXG5cclxuXHRcdGlmKCB2ID09PSBudWxsICl7XHJcblx0XHRcdHRoaXMueCAtPSB0aGlzLnggKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgLT0gdGhpcy55ICogYWxwaGE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnggKz0gKCB2LnggLSB0aGlzLnggKSAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSArPSAoIHYueSAtIHRoaXMueSApICogYWxwaGE7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgVjIgfSBmcm9tIFwiLi9WMi5qc1wiO1xyXG5cclxuLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIFByb3RvIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIC8vIGRpc2FibGUgbW91c2UgY29udHJvbGVcclxuICAgIHRoaXMubG9jayA9IG8ubG9jayB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBmb3IgYnV0dG9uXHJcbiAgICB0aGlzLm5ldmVybG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgc2ltcGxlIHNwYWNlXHJcbiAgICB0aGlzLmlzU3BhY2UgPSBvLmlzU3BhY2UgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gaWYgaXMgb24gZ3VpIG9yIGdyb3VwXHJcbiAgICB0aGlzLm1haW4gPSBvLm1haW4gfHwgbnVsbDtcclxuICAgIHRoaXMuaXNVSSA9IG8uaXNVSSB8fCBmYWxzZTtcclxuICAgIHRoaXMuZ3JvdXAgPSBvLmdyb3VwIHx8IG51bGw7XHJcblxyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudG9wID0gMDtcclxuICAgIHRoaXMueXRvcCA9IDA7XHJcblxyXG4gICAgdGhpcy5keCA9IG8uZHggfHwgMDtcclxuXHJcbiAgICB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZSAhPT0gdW5kZWZpbmVkID8gby5zZWxlY3RhYmxlIDogZmFsc2U7XHJcbiAgICB0aGlzLnVuc2VsZWN0YWJsZSA9XHJcbiAgICAgIG8udW5zZWxlY3QgIT09IHVuZGVmaW5lZCA/IG8udW5zZWxlY3QgOiB0aGlzLmlzU2VsZWN0YWJsZTtcclxuXHJcbiAgICB0aGlzLm9udG9wID0gby5vbnRvcCA/IG8ub250b3AgOiBmYWxzZTsgLy8gJ2JlZm9yZWJlZ2luJyAnYWZ0ZXJiZWdpbicgJ2JlZm9yZWVuZCcgJ2FmdGVyZW5kJ1xyXG5cclxuICAgIHRoaXMuY3NzID0gdGhpcy5tYWluID8gdGhpcy5tYWluLmNzcyA6IFRvb2xzLmNzcztcclxuXHJcbiAgICB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKFxyXG4gICAgICBvLFxyXG4gICAgICB0aGlzLm1haW5cclxuICAgICAgICA/IHRoaXMuZ3JvdXBcclxuICAgICAgICAgID8gdGhpcy5ncm91cC5jb2xvcnNcclxuICAgICAgICAgIDogdGhpcy5tYWluLmNvbG9yc1xyXG4gICAgICAgIDogVG9vbHMuY29sb3JzXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMub3ZlckVmZmVjdCA9IHRoaXMuY29sb3JzLnNob3dPdmVyO1xyXG5cclxuICAgIHRoaXMuc3ZncyA9IFRvb2xzLnN2Z3M7XHJcblxyXG4gICAgdGhpcy56b25lID0geyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwLCBkOiAwIH07XHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBwZXJjZW50IG9mIHRpdGxlXHJcbiAgICB0aGlzLnAgPSBvLnAgIT09IHVuZGVmaW5lZCA/IG8ucCA6IFRvb2xzLnNpemUucDtcclxuXHJcbiAgICB0aGlzLncgPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS53IDogVG9vbHMuc2l6ZS53O1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLncgPSBvLnc7XHJcblxyXG4gICAgdGhpcy5oID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUuaCA6IFRvb2xzLnNpemUuaDtcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5oID0gby5oO1xyXG4gICAgaWYgKCF0aGlzLmlzU3BhY2UpIHRoaXMuaCA9IHRoaXMuaCA8IDExID8gMTEgOiB0aGlzLmg7XHJcbiAgICBlbHNlIHRoaXMubG9jayA9IHRydWU7XHJcblxyXG4gICAgLy8gZGVjYWxlIGZvciBjYW52YXMgb25seVxyXG4gICAgdGhpcy5mdyA9IG8uZncgfHwgMDtcclxuXHJcbiAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0byB8fCB0cnVlOyAvLyBhdXRvIHdpZHRoIG9yIGZsZXhcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7IC8vZmFsc2UvLyBvcGVuIHN0YXR1XHJcblxyXG4gICAgLy8gcmFkaXVzIGZvciB0b29sYm94XHJcbiAgICB0aGlzLnJhZGl1cyA9IG8ucmFkaXVzIHx8IHRoaXMuY29sb3JzLnJhZGl1cztcclxuXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPSBvLnRyYW5zaXRpb24gfHwgVG9vbHMudHJhbnNpdGlvbjtcclxuXHJcbiAgICAvLyBvbmx5IGZvciBudW1iZXJcclxuICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuICAgIHRoaXMubm9OZWcgPSBvLm5vTmVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5hbGxFcXVhbCA9IG8uYWxsRXF1YWwgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBtb3N0IHNpbXBsZVxyXG4gICAgdGhpcy5tb25vID0gZmFsc2U7XHJcblxyXG4gICAgLy8gc3RvcCBsaXN0ZW5pbmcgZm9yIGVkaXQgc2xpZGUgdGV4dFxyXG4gICAgdGhpcy5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBubyB0aXRsZVxyXG4gICAgdGhpcy5zaW1wbGUgPSBvLnNpbXBsZSB8fCBmYWxzZTtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYSA9IDA7XHJcblxyXG4gICAgLy8gZGVmaW5lIG9iaiBzaXplXHJcbiAgICB0aGlzLnNldFNpemUodGhpcy53KTtcclxuXHJcbiAgICAvLyB0aXRsZSBzaXplXHJcbiAgICBpZiAoby5zYSAhPT0gdW5kZWZpbmVkKSB0aGlzLnNhID0gby5zYTtcclxuICAgIGlmIChvLnNiICE9PSB1bmRlZmluZWQpIHRoaXMuc2IgPSBvLnNiO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuXHJcbiAgICAvLyBsYXN0IG51bWJlciBzaXplIGZvciBzbGlkZVxyXG4gICAgdGhpcy5zYyA9IG8uc2MgPT09IHVuZGVmaW5lZCA/IDQ3IDogby5zYztcclxuXHJcbiAgICAvLyBmb3IgbGlzdGVuaW5nIG9iamVjdFxyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gbnVsbDtcclxuICAgIHRoaXMuaXNTZW5kID0gZmFsc2U7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy50eHQgPSBvLm5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMubmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0O1xyXG4gICAgdGhpcy50YXJnZXQgPSBvLnRhcmdldCB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNhbGxiYWNrXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gby5vcGVuQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLm9wZW5DYWxsYmFjaztcclxuICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9IG8uY2xvc2VDYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2xvc2VDYWxsYmFjaztcclxuXHJcbiAgICAvLyBpZiBubyBjYWxsYmFjayB0YWtlIG9uZSBmcm9tIGdyb3VwIG9yIGd1aVxyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2sgPT09IG51bGwgJiYgdGhpcy5pc1VJICYmIHRoaXMubWFpbi5jYWxsYmFjayAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmNhbGxiYWNrID0gdGhpcy5ncm91cCA/IHRoaXMuZ3JvdXAuY2FsbGJhY2sgOiB0aGlzLm1haW4uY2FsbGJhY2s7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZWxlbWVudHNcclxuICAgIHRoaXMuYyA9IFtdO1xyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLnMgPSBbXTtcclxuXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4udXNlRmxleCA6IGZhbHNlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4XHJcbiAgICAgID8gXCJkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGFsaWduLWl0ZW1zOmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7IGZsZXg6IDEgMTAwJTtcIlxyXG4gICAgICA6IFwiZmxvYXQ6bGVmdDtcIjtcclxuXHJcbiAgICB0aGlzLmNbMF0gPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcInBvc2l0aW9uOnJlbGF0aXZlOyBoZWlnaHQ6MjBweDtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnNbMF0gPSB0aGlzLmNbMF0uc3R5bGU7XHJcblxyXG4gICAgLy8gYm90dG9tIG1hcmdpblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubXRvcCA9IDA7XHJcbiAgICBsZXQgbWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSAmJiB0aGlzLm1hcmdpbikge1xyXG4gICAgICB0aGlzLnNbMF0uYm94U2l6aW5nID0gXCJjb250ZW50LWJveFwiO1xyXG4gICAgICBpZiAobWFyZ2luRGl2KSB7XHJcbiAgICAgICAgdGhpcy5tdG9wID0gdGhpcy5tYXJnaW4gKiAwLjU7XHJcbiAgICAgICAgLy90aGlzLnNbMF0uYm9yZGVyVG9wID0gJyR7dGhpcy5tdG9wfXB4IHNvbGlkIHRyYW5zcGFyZW50J1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coYCR7dGhpcy5tdG9wfXB4IHNvbGlkIHRyYW5zcGFyZW50YClcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyVG9wID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubWFyZ2luICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gd2l0aCB0aXRsZVxyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLmNbMV0gPSBUb29scy5kb20oXCJkaXZcIiwgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlKTtcclxuICAgICAgdGhpcy5zWzFdID0gdGhpcy5jWzFdLnN0eWxlO1xyXG4gICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLm5hbWU7XHJcbiAgICAgIHRoaXMuc1sxXS5jb2xvciA9IHRoaXMubG9jayA/IHRoaXMuY29sb3JzLnRpdGxlb2ZmIDogdGhpcy5jb2xvcnMudGl0bGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG8ucG9zKSB7XHJcbiAgICAgIHRoaXMuc1swXS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgZm9yIChsZXQgcCBpbiBvLnBvcykge1xyXG4gICAgICAgIHRoaXMuc1swXVtwXSA9IG8ucG9zW3BdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubW9ubyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG8uY3NzKSB0aGlzLnNbMF0uY3NzVGV4dCA9IG8uY3NzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG1ha2UgdGhlIG5vZGVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXQoKSB7XHJcbiAgICB0aGlzLnl0b3AgPSB0aGlzLnRvcCArIHRoaXMubXRvcDtcclxuXHJcbiAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMubWFyZ2luO1xyXG4gICAgdGhpcy56b25lLncgPSB0aGlzLnc7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7IC8vIHN0eWxlIGNhY2hlXHJcbiAgICBsZXQgYyA9IHRoaXMuYzsgLy8gZGl2IGNhY2hcclxuXHJcbiAgICBzWzBdLmhlaWdodCA9IHRoaXMuaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJKSBzWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGggJiYgdGhpcy51c2VGbGV4KSB7XHJcbiAgICAgIHNbMF0uZmxleCA9IFwiMSAwIGF1dG9cIjtcclxuICAgICAgc1swXS5taW5XaWR0aCA9IHRoaXMubWludyArIFwicHhcIjtcclxuICAgICAgc1swXS50ZXh0QWxpZ24gPSBcImNlbnRlclwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgc1swXS53aWR0aCA9IFwiMTAwJVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vaWYoIHRoaXMuYXV0b0hlaWdodCApIHNbMF0udHJhbnNpdGlvbiA9ICdoZWlnaHQgMC4wMXMgZWFzZS1vdXQnO1xyXG4gICAgaWYgKGNbMV0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmF1dG9XaWR0aCkge1xyXG4gICAgICBzWzFdID0gY1sxXS5zdHlsZTtcclxuICAgICAgc1sxXS50b3AgPSAxICsgXCJweFwiO1xyXG4gICAgICBzWzFdLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZyYWcgPSBUb29scy5mcmFnO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAxLCBsbmcgPSBjLmxlbmd0aDsgaSAhPT0gbG5nOyBpKyspIHtcclxuICAgICAgaWYgKGNbaV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoY1tpXSk7XHJcbiAgICAgICAgc1tpXSA9IGNbaV0uc3R5bGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHAgPVxyXG4gICAgICB0aGlzLnRhcmdldCAhPT0gbnVsbFxyXG4gICAgICAgID8gdGhpcy50YXJnZXRcclxuICAgICAgICA6IHRoaXMuaXNVSVxyXG4gICAgICAgID8gdGhpcy5tYWluLmlubmVyXHJcbiAgICAgICAgOiBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICh0aGlzLm9udG9wKSBwcC5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJhZnRlcmJlZ2luXCIsIGNbMF0pO1xyXG4gICAgZWxzZSBwcC5hcHBlbmRDaGlsZChjWzBdKTtcclxuXHJcbiAgICBjWzBdLmFwcGVuZENoaWxkKGZyYWcpO1xyXG5cclxuICAgIHRoaXMuclNpemUoKTtcclxuXHJcbiAgICAvLyAhIHNvbG8gcHJvdG9cclxuICAgIGlmICghdGhpcy5pc1VJKSB7XHJcbiAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZFRyYW5zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5iYXNlSCAmJiB0aGlzLnRyYW5zaXRpb24gJiYgdGhpcy5pc1VJKSB7XHJcbiAgICAgIHRoaXMuY1swXS5zdHlsZS50cmFuc2l0aW9uID0gXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGZyb20gVG9vbHNcclxuXHJcbiAgZG9tKHR5cGUsIGNzcywgb2JqLCBkb20sIGlkKSB7XHJcbiAgICByZXR1cm4gVG9vbHMuZG9tKHR5cGUsIGNzcywgb2JqLCBkb20sIGlkKTtcclxuICB9XHJcblxyXG4gIHNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKSB7XHJcbiAgICBUb29scy5zZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMik7XHJcbiAgfVxyXG5cclxuICBzZXRDc3MoZG9tLCBjc3MpIHtcclxuICAgIFRvb2xzLnNldENzcyhkb20sIGNzcyk7XHJcbiAgfVxyXG5cclxuICBjbGFtcCh2YWx1ZSwgbWluLCBtYXgpIHtcclxuICAgIHJldHVybiBUb29scy5jbGFtcCh2YWx1ZSwgbWluLCBtYXgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sb3JSaW5nKCkge1xyXG4gICAgaWYgKCFUb29scy5jb2xvclJpbmcpIFRvb2xzLm1ha2VDb2xvclJpbmcoKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jb2xvclJpbmcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Sm95c3RpY2sobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSkgVG9vbHMubWFrZUpveXN0aWNrKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKTtcclxuICB9XHJcblxyXG4gIGdldENpcmN1bGFyKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNpcmN1bGFyKSBUb29scy5tYWtlQ2lyY3VsYXIobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNpcmN1bGFyKTtcclxuICB9XHJcblxyXG4gIGdldEtub2IobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMua25vYikgVG9vbHMubWFrZUtub2IobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmtub2IpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFkMmQobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMucGFkMmQpIFRvb2xzLm1ha2VQYWQobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLnBhZDJkKTtcclxuICB9XHJcblxyXG4gIC8vIGZyb20gUm9vdHNcclxuXHJcbiAgY3Vyc29yKG5hbWUpIHtcclxuICAgIFJvb3RzLmN1cnNvcihuYW1lKTtcclxuICB9XHJcblxyXG4gIC8vLy8vLy8vL1xyXG5cclxuICB1cGRhdGUoKSB7fVxyXG5cclxuICByZXNldCgpIHt9XHJcblxyXG4gIC8vLy8vLy8vL1xyXG5cclxuICBjb250ZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIGdldERvbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICB1aW91dCgpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcbiAgfVxyXG5cclxuICB1aW92ZXIoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuICB9XHJcblxyXG4gIHJlbmFtZShzKSB7XHJcbiAgICBpZiAodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHM7XHJcbiAgfVxyXG5cclxuICBsaXN0ZW4oKSB7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gUm9vdHMuYWRkTGlzdGVuKHRoaXMpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBsaXN0ZW5pbmcoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc1NlbmQpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzRWRpdCkgcmV0dXJuO1xyXG4gICAgLy8gY2hlY2sgaWYgdmFsdWUgaGFzIGNoYW5nZWRcclxuICAgIGxldCBoYXNDaGFuZ2VkID0gdGhpcy5zZXRWYWx1ZSh0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldKTtcclxuICAgIHJldHVybiBoYXNDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWUodikge1xyXG4gICAgY29uc3Qgb2xkID0gdGhpcy52YWx1ZTtcclxuICAgIGlmICh0aGlzLmlzTnVtYmVyKSB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh2KTtcclxuICAgIC8vZWxzZSBpZiggdiBpbnN0YW5jZW9mIEFycmF5ICYmIHYubGVuZ3RoID09PSAxICkgdiA9IHZbMF07XHJcbiAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICAgIGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICBpZiAob2xkICE9PSB0aGlzLnZhbHVlKSB7XHJcbiAgICAgIGhhc0NoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoYXNDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBldmVyeSBjaGFuZ2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uQ2hhbmdlKGYpIHtcclxuICAgIGlmICh0aGlzLmlzU3BhY2UpIHJldHVybjtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBmIHx8IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgb25seSBvbiBlbmRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRmluaXNoQ2hhbmdlKGYpIHtcclxuICAgIGlmICh0aGlzLmlzU3BhY2UpIHJldHVybjtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBldmVudCBvbiBvcGVuIGNsb3NlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbk9wZW4oZikge1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBvbkNsb3NlKGYpIHtcclxuICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgc2VuZCBiYWNrIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZW5kKHYpIHtcclxuICAgIHYgPSB2IHx8IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHYubGVuZ3RoID09PSAxKSB2ID0gdlswXTtcclxuXHJcbiAgICB0aGlzLmlzU2VuZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrKSB0aGlzLmNhbGxiYWNrKHYsIHRoaXMub2JqZWN0S2V5KTtcclxuICAgIHRoaXMuaXNTZW5kID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZW5kRW5kKHYpIHtcclxuICAgIHYgPSB2IHx8IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHYubGVuZ3RoID09PSAxKSB2ID0gdlswXTtcclxuXHJcbiAgICBpZiAodGhpcy5lbmRDYWxsYmFjaykgdGhpcy5lbmRDYWxsYmFjayh2KTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGNsZWFyIG5vZGVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICBpZiAodGhpcy5pc0xpc3RlbikgUm9vdHMucmVtb3ZlTGlzdGVuKHRoaXMpO1xyXG5cclxuICAgIFRvb2xzLmNsZWFyKHRoaXMuY1swXSk7XHJcblxyXG4gICAgaWYgKHRoaXMudGFyZ2V0ICE9PSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLmdyb3VwICE9PSBudWxsKSB0aGlzLmdyb3VwLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIHRoaXMudGFyZ2V0LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSB0aGlzLm1haW4uY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pc1VJKSBSb290cy5yZW1vdmUodGhpcyk7XHJcblxyXG4gICAgdGhpcy5jID0gbnVsbDtcclxuICAgIHRoaXMucyA9IG51bGw7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNsZWFyKCkge31cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGNoYW5nZSBzaXplXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBnZXRXaWR0aCgpIHtcclxuICAgIGxldCBudyA9IFJvb3RzLmdldFdpZHRoKHRoaXMpO1xyXG4gICAgaWYgKG53KSB0aGlzLncgPSBudztcclxuICB9XHJcblxyXG4gIHNldFNpemUoc3gpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLncgPSBzeDtcclxuXHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgcHAgPSB0aGlzLncgKiAodGhpcy5wIC8gMTAwKTtcclxuICAgICAgLy90aGlzLnNhID0gTWF0aC5mbG9vciggcHAgKyAxMCApXHJcbiAgICAgIC8vdGhpcy5zYiA9IE1hdGguZmxvb3IoIHRoaXMudyAtIHBwIC0gMjAgKVxyXG4gICAgICB0aGlzLnNhID0gTWF0aC5mbG9vcihwcCArIDgpO1xyXG4gICAgICB0aGlzLnNiID0gTWF0aC5mbG9vcih0aGlzLncgLSBwcCAtIDE2KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHRoaXMuc1swXS53aWR0aCA9IHRoaXMudyArIFwicHhcIjtcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZm9yIG51bWVyaWMgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFR5cGVOdW1iZXIobykge1xyXG4gICAgdGhpcy5pc051bWJlciA9IHRydWU7XHJcblxyXG4gICAgdGhpcy52YWx1ZSA9IDA7XHJcbiAgICBpZiAoby52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygby52YWx1ZSA9PT0gXCJzdHJpbmdcIikgdGhpcy52YWx1ZSA9IG8udmFsdWUgKiAxO1xyXG4gICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWluID0gby5taW4gPT09IHVuZGVmaW5lZCA/IC1JbmZpbml0eSA6IG8ubWluO1xyXG4gICAgdGhpcy5tYXggPSBvLm1heCA9PT0gdW5kZWZpbmVkID8gSW5maW5pdHkgOiBvLm1heDtcclxuICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IDIgOiBvLnByZWNpc2lvbjtcclxuXHJcbiAgICBsZXQgcztcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMucHJlY2lzaW9uKSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBzID0gMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHMgPSAwLjE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBzID0gMC4wMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIHMgPSAwLjAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIHMgPSAwLjAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNTpcclxuICAgICAgICBzID0gMC4wMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA2OlxyXG4gICAgICAgIHMgPSAwLjAwMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0ZXAgPSBvLnN0ZXAgPT09IHVuZGVmaW5lZCA/IHMgOiBvLnN0ZXA7XHJcbiAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXggLSB0aGlzLm1pbjtcclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgbnVtVmFsdWUobikge1xyXG4gICAgaWYgKHRoaXMubm9OZWcpIG4gPSBNYXRoLmFicyhuKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIE1hdGgubWluKHRoaXMubWF4LCBNYXRoLm1heCh0aGlzLm1pbiwgbikpLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICogMVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UUyBERUZBVUxUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5uZXZlcmxvY2spIFJvb3RzLmxvY2sgPSBmYWxzZTtcclxuICAgIGlmICghdGhpc1tlLnR5cGVdKVxyXG4gICAgICByZXR1cm4gY29uc29sZS5lcnJvcihlLnR5cGUsIFwidGhpcyB0eXBlIG9mIGV2ZW50IG5vIGV4aXN0ZSAhXCIpO1xyXG5cclxuICAgIC8vIFRPRE8gISEhIVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgei5kIC09IHRoaXMubWFyZ2luICogMC41XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5ncm91cC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICByZXR1cm4gdGhpc1tlLnR5cGVdKGUpO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBtb3VzZXVwKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5ZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleXVwKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBvYmplY3QgcmVmZXJlbmN5XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRSZWZlcmVuY3kob2JqLCBrZXkpIHtcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG9iajtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0ga2V5O1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheSh2ID0gZmFsc2UpIHtcclxuICAgIHRoaXMuc1swXS52aXNpYmlsaXR5ID0gdiA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyByZXNpemUgaGVpZ2h0XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvcGVuKCkge1xyXG4gICAgaWYgKHRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9wZW5DYWxsYmFjaykgdGhpcy5vcGVuQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuY2xvc2VDYWxsYmFjaykgdGhpcy5jbG9zZUNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBuZWVkWm9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIElOUFVUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3QoKSB7fVxyXG5cclxuICB1bnNlbGVjdCgpIHt9XHJcblxyXG4gIHNldElucHV0KElucHV0KSB7XHJcbiAgICBSb290cy5zZXRJbnB1dChJbnB1dCwgdGhpcyk7XHJcbiAgfVxyXG5cclxuICB1cElucHV0KHgsIGRvd24pIHtcclxuICAgIHJldHVybiBSb290cy51cElucHV0KHgsIGRvd24pO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHNwZWNpYWwgaXRlbVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0ZWQoYikge1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQm9vbCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby5vbk5hbWUgKSBvLm9ubmFtZSA9IG8ub25OYW1lXHJcbiAgICAgICAgaWYoIG8ub25uYW1lICkgdGhpcy5vbk5hbWUgPSBvLm9ubmFtZVxyXG5cclxuICAgICAgICB0aGlzLmluaCA9IG8uaW5oIHx8IE1hdGguZmxvb3IoIHRoaXMuaCowLjggKVxyXG4gICAgICAgIHRoaXMuaW53ID0gby5pbncgfHwgMzZcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIGxldCB0ID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0oKHRoaXMuaW5oLTIpKjAuNSk7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYmFja2dyb3VuZDonKyBjYy5pbnB1dEJnICsnOyBoZWlnaHQ6JysodGhpcy5pbmgtMikrJ3B4OyB3aWR0aDonK3RoaXMuaW53KydweDsgdG9wOicrdCsncHg7IGJvcmRlci1yYWRpdXM6MTBweDsgYm9yZGVyOjJweCBzb2xpZCAnKyBjYy5iYWNrIClcclxuICAgICAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdoZWlnaHQ6JysodGhpcy5pbmgtNikrJ3B4OyB3aWR0aDoxNnB4OyB0b3A6JysodCsyKSsncHg7IGJvcmRlci1yYWRpdXM6MTBweDsgYmFja2dyb3VuZDonKyBjYy5idXR0b24rJzsnIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnAgPSAwXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gLTFcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICF0aGlzLnZhbHVlXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0cnVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZSAoIG92ZXIgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zLCBuLCB2ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBpZiggb3ZlciApIG4gPSB2ID8gNCA6IDNcclxuICAgICAgICBlbHNlIG4gPSB2ID8gMiA6IDFcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZWwgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmNvbG9yID0gY2MudGV4dDsgc1syXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB2ID8gdGhpcy5vbk5hbWUgOiB0aGlzLm5hbWVcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7Ly8gb2ZmIG91dFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyBicmVhazsvLyBvbiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7Ly8gb2ZmIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0U2VsZWN0OyBicmVhazsvLyBvbiBvdXRcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgc1szXS5tYXJnaW5MZWZ0ID0gdiA/ICcxN3B4JyA6ICcycHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB2ID8gdGhpcy5vbk5hbWUgOiB0aGlzLm5hbWVcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKClcclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLncgLSAxMCApIC0gdGhpcy5pbndcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB3ICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzNdLmxlZnQgPSB3ICsgJ3B4J1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnXHJcbiAgICAgICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICArICdweCdcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCdXR0b24gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuXHJcbiAgICAgICAgaWYoICFvLnZhbHVlcyAmJiAhby52YWx1ZSApIHRoaXMudHh0ID0gJydcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLm9uTmFtZSB8fCBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLm9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGJ1dHRvbiB3aWR0aFxyXG4gICAgICAgIHRoaXMuYncgPSBvLmZvcmNlV2lkdGggfHwgMFxyXG4gICAgICAgIGlmKG8uYncpIHRoaXMuYncgPSBvLmJ3XHJcbiAgICAgICAgdGhpcy5zcGFjZSA9IG8uc3BhY2UgfHwgM1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuICAgICAgICB0aGlzLnJlcyA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW11cclxuXHJcbiAgICAgICAgbGV0IHNlbCwgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBzZWwgPSBmYWxzZVxyXG4gICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbaV0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbaV07XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpXSA9IHNlbCA/IDM6MTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMudHh0PT09JycgKSB0aGlzLnAgPSAwIFxyXG5cclxuICAgICAgICBpZiggKCFvLnZhbHVlICYmICFvLnZhbHVlcykgfHwgdGhpcy5wID09PSAwICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9ICcnXHJcbiAgICAgICAgfSBcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9uT2ZmKCkge1xyXG5cclxuICAgICAgICB0aGlzLm9uID0gIXRoaXMub247XHJcbiAgICAgICAgdGhpcy5sYWJlbCggdGhpcy5vbiA/IHRoaXMub25OYW1lIDogdGhpcy52YWx1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICBcdGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gLTFcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdICYmIHRoaXMudW5zZWxlY3RhYmxlICkgdGhpcy52YWx1ZSA9ICcnXHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICBpZiggdGhpcy5vbk5hbWUgIT09IG51bGwgKSB0aGlzLm9uT2ZmKClcclxuICAgICAgICAgICAgdGhpcy5zZW5kKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgXHRyZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMucmVzID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIHRoaXMucmVzIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFx0dXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1vZGUoIG4sIGkgKSApIHIgPSB0cnVlXHJcbiAgICAgICAgICAgIHIgPSB0aGlzLm1vZGUoIG4sIGkgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgLy9pZighdGhpcy5zKSByZXR1cm4gZmFsc2VcclxuIFxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gaWQrMlxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICBuID0gbiB8fCAyO1xyXG4gICAgICAgIHRoaXMuY1tuXS50ZXh0Q29udGVudCA9IHN0cmluZ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2hWYWx1ZXMoIG4sIHN0cmluZyApe1xyXG4gICAgICAgIHRoaXMuY1tuKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dID0gc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHkgPSAwLCBuID0gMiApIHtcclxuXHJcbiAgICAgICAgLy9pZih5KSB0aGlzLnNbbl0ubWFyZ2luID0gKCB5ICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuc1tuXS5wYWRkaW5nID0gKCB5ICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuY1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgc3ggPSB0aGlzLmNvbG9ycy5zeCAvL3RoaXMuc3BhY2U7XHJcbiAgICAgICAgLy9sZXQgc2l6ZSA9IE1hdGguZmxvb3IoICggdy0oZGMqKGktMSkpICkgLyBpICk7XHJcbiAgICAgICAgbGV0IHNpemUgPSAoIHctKHN4KihpLTEpKSApIC8gaSBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYncgKXsgXHJcbiAgICAgICAgICAgIHNpemUgPSB0aGlzLmJ3IDwgc2l6ZSA/IHRoaXMuYncgOiBzaXplXHJcbiAgICAgICAgICAgIC8vZCA9IE1hdGguZmxvb3IoKHRoaXMudy0oIChzaXplICogaSkgKyAoZGMgKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgICAgICBkID0gKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKHN4ICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgXHQvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCBkICsgKCBzaXplICogaSApICsgKCBkYyAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggZCArICggc2l6ZSAqIGkgKSArICggc3ggKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgXHR0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV07XHJcblxyXG4gICAgICAgICAgICBzW2krMl0ubGVmdCA9IHRoaXMudG1wW2ldWzBdICsgJ3B4J1xyXG4gICAgICAgICAgICBzW2krMl0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENpcmN1bGFyIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMFxyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGVcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubWludyA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudHdvUGkgPSBUb29scy5Ud29QSVxyXG4gICAgICAgIHRoaXMucGk5MCA9IFRvb2xzLnBpOTBcclxuXHJcbiAgICAgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKVxyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTBcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMFxyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDBcclxuICAgICAgICB0aGlzLmNtb2RlID0gMFxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApXHJcblxyXG4gICAgICAgIC8vIHN2Z1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Q2lyY3VsYXIoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIGxldCBjb2xvclxyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHRPdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBcclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdjaXJjdWxhcic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygnb3ZlcicpXHJcblxyXG4gICAgICAgIGxldCBvZmYgPSB0aGlzLm9mZnNldDtcclxuICAgICAgICBvZmYueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICBvZmYueSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gb2ZmLmFuZ2xlKCkgLSB0aGlzLnBpOTA7XHJcbiAgICAgICAgdGhpcy5yID0gKCgodGhpcy5yJXRoaXMudHdvUGkpK3RoaXMudHdvUGkpJXRoaXMudHdvUGkpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgbGV0IGRpZiA9IHRoaXMuciAtIHRoaXMub2xkcjtcclxuICAgICAgICAgICAgdGhpcy5yID0gTWF0aC5hYnMoZGlmKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgICAgICBpZiggZGlmID4gNiApIHRoaXMuciA9IDA7XHJcbiAgICAgICAgICAgIGlmKCBkaWYgPCAtNiApIHRoaXMuciA9IHRoaXMudHdvUGk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHN0ZXBzID0gMSAvIHRoaXMudHdvUGk7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5yICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gfn4gKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdjaXJjdWxhcicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gNDA7XHJcbiAgICAgICAgbGV0IGQgPSAyNDtcclxuICAgICAgICBsZXQgYSA9IHRoaXMucGVyY2VudCAqIHRoaXMudHdvUGkgLSAwLjAwMTtcclxuICAgICAgICBsZXQgeDIgPSAociArIHIgKiBNYXRoLnNpbihhKSkgKyBkO1xyXG4gICAgICAgIGxldCB5MiA9IChyIC0gciAqIE1hdGguY29zKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IGJpZyA9IGEgPiBNYXRoLlBJID8gMSA6IDA7XHJcbiAgICAgICAgcmV0dXJuIFwiTSBcIiArIChyK2QpICsgXCIsXCIgKyBkICsgXCIgQSBcIiArIHIgKyBcIixcIiArIHIgKyBcIiAwIFwiICsgYmlnICsgXCIgMSBcIiArIHgyICsgXCIsXCIgKyB5MjtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKCB0aGlzLnZhbHVlIC0gdGhpcy5taW4gKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxICk7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xvciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuXHQgICAgLy90aGlzLmF1dG9IZWlnaHQgPSB0cnVlO1xyXG5cclxuXHQgICAgdGhpcy5jdHlwZSA9IG8uY3R5cGUgfHwgJ2hleCc7XHJcblxyXG5cdCAgICB0aGlzLndmaXhlID0gMjU2O1xyXG5cclxuXHQgICAgdGhpcy5jdyA9IHRoaXMuc2IgPiAyNTYgPyAyNTYgOiB0aGlzLnNiO1xyXG5cdCAgICBpZihvLmN3ICE9IHVuZGVmaW5lZCApIHRoaXMuY3cgPSBvLmN3O1xyXG5cclxuXHJcblxyXG5cdCAgICAvLyBjb2xvciB1cCBvciBkb3duXHJcblx0ICAgIHRoaXMuc2lkZSA9IG8uc2lkZSB8fCAnZG93bic7XHJcblx0ICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcblx0ICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMuZGVjYWwgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5wcCA9IG5ldyBWMigpO1xyXG5cclxuXHQgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblx0ICAgLy8gdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7JyArICdib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OyB0ZXh0LXNoYWRvdzpub25lOyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOycgKVxyXG5cclxuXHQgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCBgJHt0aGlzLmNzcy50eHR9ICR7dGhpcy5jc3MubWlkZGxlfSB0b3A6MXB4OyBoZWlnaHQ6JHt0aGlzLmgtMn1weDsgYm9yZGVyLXJhZGl1czoke3RoaXMucmFkaXVzfXB4OyB0ZXh0LXNoYWRvdzpub25lOyBib3JkZXI6JHtjYy5ib3JkZXJTaXplfXB4IHNvbGlkICR7Y2MuYm9yZGVyfTtgIClcclxuXHQgICAgLy90aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG5cdCAgICAvL3RoaXMuc1syXS50ZXh0U2hhZG93ID0gJ25vbmUnXHJcblxyXG5cdCAgICAvKmlmKCB0aGlzLnVwICl7XHJcblx0ICAgICAgICB0aGlzLnNbMl0udG9wID0gJ2F1dG8nO1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLmJvdHRvbSA9ICcycHgnO1xyXG5cdCAgICB9Ki9cclxuXHJcblx0ICAgIC8vdGhpcy5jWzBdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG5cdCAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcblx0ICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Q29sb3JSaW5nKClcclxuXHQgICAgdGhpcy5jWzNdLnN0eWxlLnZpc2liaWxpdHkgID0gJ2hpZGRlbidcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gbnVsbFxyXG5cdCAgICB0aGlzLnZhbHVlID0gJyNmZmZmZmYnXHJcblx0ICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuXHQgICAgICAgIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKSB0aGlzLnZhbHVlID0gVG9vbHMucmdiVG9IZXgoIG8udmFsdWUgKVxyXG5cdCAgICAgICAgZWxzZSBpZighaXNOYU4oby52YWx1ZSkpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIG8udmFsdWUgKVxyXG5cdCAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cdCAgICB9XHJcblxyXG5cdCAgICB0aGlzLmJjb2xvciA9IG51bGxcclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG5cdCAgICB0aGlzLmZpc3REb3duID0gZmFsc2VcclxuXHJcblx0ICAgIHRoaXMubm90ZXh0ID0gby5ub3RleHQgfHwgZmFsc2VcclxuXHJcblx0ICAgIHRoaXMudHIgPSA5OFxyXG5cdCAgICB0aGlzLnRzbCA9IE1hdGguc3FydCgzKSAqIHRoaXMudHJcclxuXHJcblx0ICAgIHRoaXMuaHVlID0gMFxyXG5cdCAgICB0aGlzLmQgPSAyNTZcclxuXHJcblx0ICAgIHRoaXMuaW5pdCgpXHJcblxyXG5cdCAgICB0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuXHJcblx0ICAgIGlmKCBvLm9wZW4gIT09IHVuZGVmaW5lZCApIHRoaXMub3BlbigpXHJcblxyXG5cdH1cclxuXHJcblx0dGVzdFpvbmUgKCBteCwgbXkgKSB7XHJcblxyXG5cdFx0bGV0IGwgPSB0aGlzLmxvY2FsXHJcblx0XHRpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG5cdFx0aWYoIHRoaXMudXAgJiYgdGhpcy5pc09wZW4gKXtcclxuXHJcblx0XHRcdGlmKCBsLnkgPiB0aGlzLndmaXhlICkgcmV0dXJuICd0aXRsZSdcclxuXHRcdCAgICBlbHNlIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdGlmKCBsLnkgPCB0aGlzLmJhc2VIKzIgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdCAgICBcdGVsc2UgaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9XHJcblxyXG4gICAgfVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRtb3VzZXVwICggZSApIHtcclxuXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblx0ICAgIHRoaXMuZCA9IDI1NjtcclxuXHJcblx0fVxyXG5cclxuXHRtb3VzZWRvd24gKCBlICkge1xyXG5cclxuXHJcblx0XHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cclxuXHRcdC8vaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cdFx0aWYobmFtZSA9PT0gJ3RpdGxlJyl7XHJcblx0XHRcdGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKTtcclxuXHQgICAgICAgIGVsc2UgdGhpcy5jbG9zZSgpO1xyXG5cdCAgICAgICAgcmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdFx0XHR0aGlzLmlzRG93biA9IHRydWU7XHJcblx0XHRcdHRoaXMuZmlzdERvd24gPSB0cnVlXHJcblx0XHRcdHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuXHQgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHQgICAgbGV0IG9mZiwgZCwgaHVlLCBzYXQsIGx1bSwgcmFkLCB4LCB5LCByciwgVCA9IFRvb2xzO1xyXG5cclxuXHQgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG5cclxuXHQgICAgaWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0ICAgIFx0b2ZmID0gdGhpcy5vZmZzZXQ7XHJcblx0XHQgICAgb2ZmLnggPSBlLmNsaWVudFggLSAoIHRoaXMuem9uZS54ICsgdGhpcy5kZWNhbC54ICsgdGhpcy5taWQgKTtcclxuXHRcdCAgICBvZmYueSA9IGUuY2xpZW50WSAtICggdGhpcy56b25lLnkgKyB0aGlzLmRlY2FsLnkgKyB0aGlzLm1pZCApIC0gdGhpcy55dG9wO1xyXG5cdFx0XHRkID0gb2ZmLmxlbmd0aCgpICogdGhpcy5yYXRpbztcclxuXHRcdFx0cnIgPSBvZmYuYW5nbGUoKTtcclxuXHRcdFx0aWYocnIgPCAwKSByciArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblxyXG5cdCAgICBcdGlmICggZCA8IDEyOCApIHRoaXMuY3Vyc29yKCdjcm9zc2hhaXInKTtcclxuXHQgICAgXHRlbHNlIGlmKCAhdGhpcy5pc0Rvd24gKSB0aGlzLmN1cnNvcigpXHJcblxyXG5cdCAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG5cclxuXHRcdFx0ICAgIGlmKCB0aGlzLmZpc3REb3duICl7XHJcblx0XHRcdCAgICBcdHRoaXMuZCA9IGQ7XHJcblx0XHRcdCAgICBcdHRoaXMuZmlzdERvd24gPSBmYWxzZTtcclxuXHRcdFx0ICAgIH1cclxuXHJcblx0XHRcdCAgICBpZiAoIHRoaXMuZCA8IDEyOCApIHtcclxuXHJcblx0XHRcdFx0ICAgIGlmICggdGhpcy5kID4gdGhpcy50ciApIHsgLy8gb3V0c2lkZSBodWVcclxuXHJcblx0XHRcdFx0ICAgICAgICBodWUgPSAoIHJyICsgVC5waTkwICkgLyBULlR3b1BJO1xyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5odWUgPSAoaHVlICsgMSkgJSAxO1xyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woWyhodWUgKyAxKSAlIDEsIHRoaXMuaHNsWzFdLCB0aGlzLmhzbFsyXV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfSBlbHNlIHsgLy8gdHJpYW5nbGVcclxuXHJcblx0XHRcdFx0ICAgIFx0eCA9IG9mZi54ICogdGhpcy5yYXRpbztcclxuXHRcdFx0XHQgICAgXHR5ID0gb2ZmLnkgKiB0aGlzLnJhdGlvO1xyXG5cclxuXHRcdFx0XHQgICAgXHRsZXQgcnIgPSAodGhpcy5odWUgKiBULlR3b1BJKSArIFQuUEk7XHJcblx0XHRcdFx0ICAgIFx0aWYocnIgPCAwKSByciArPSAyICogVC5QSTtcclxuXHJcblx0XHRcdFx0ICAgIFx0cmFkID0gTWF0aC5hdGFuMigteSwgeCk7XHJcblx0XHRcdFx0ICAgIFx0aWYocmFkIDwgMCkgcmFkICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHQgICAgXHRsZXQgcmFkMCA9ICggcmFkICsgVC5waTkwICsgVC5Ud29QSSArIHJyICkgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0ICAgIFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApLFxyXG5cdFx0XHRcdCAgICBcdGEgICAgPSAwLjUgKiB0aGlzLnRyLFxyXG5cdFx0XHRcdCAgICBcdGIgICAgPSBNYXRoLnRhbihyYWQxKSAqIGEsXHJcblx0XHRcdFx0ICAgIFx0ciAgICA9IE1hdGguc3FydCh4KnggKyB5KnkpLFxyXG5cdFx0XHRcdCAgICBcdG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHJcblx0XHRcdFx0ICAgIFx0aWYoIHIgPiBtYXhSICkge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBkeCA9IE1hdGgudGFuKHJhZDEpICogcjtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcmFkMiA9IE1hdGguYXRhbihkeCAvIG1heFIpO1xyXG5cdFx0XHRcdFx0XHRcdGlmKHJhZDIgPiBULnBpNjApICByYWQyID0gVC5waTYwO1xyXG5cdFx0XHRcdFx0XHQgICAgZWxzZSBpZiggcmFkMiA8IC1ULnBpNjAgKSByYWQyID0gLVQucGk2MDtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0cmFkICs9IHJhZDIgLSByYWQxO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRyYWQwID0gKHJhZCArIFQucGk5MCAgKyBULlR3b1BJICsgcnIpICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdFx0XHRcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKTtcclxuXHRcdFx0XHRcdFx0XHRiID0gTWF0aC50YW4ocmFkMSkgKiBhO1xyXG5cdFx0XHRcdFx0XHRcdHIgPSBtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGx1bSA9ICgoTWF0aC5zaW4ocmFkMCkgKiByKSAvIHRoaXMudHNsKSArIDAuNTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0bGV0IHcgPSAxIC0gKE1hdGguYWJzKGx1bSAtIDAuNSkgKiAyKTtcclxuXHRcdFx0XHRcdFx0c2F0ID0gKCgoTWF0aC5jb3MocmFkMCkgKiByKSArICh0aGlzLnRyIC8gMikpIC8gKDEuNSAqIHRoaXMudHIpKSAvIHc7XHJcblx0XHRcdFx0XHRcdHNhdCA9IFQuY2xhbXAoIHNhdCwgMCwgMSApO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFt0aGlzLmhzbFswXSwgc2F0LCBsdW1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHNldEhlaWdodCAoKSB7XHJcblxyXG5cdFx0dGhpcy5oID0gdGhpcy5pc09wZW4gPyB0aGlzLndmaXhlICsgdGhpcy5iYXNlSCArIDUgOiB0aGlzLmJhc2VIXHJcblx0XHR0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cdFx0dGhpcy56b25lLmggPSB0aGlzLmhcclxuXHJcblx0fVxyXG5cclxuXHRwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuXHRcdGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG5cdCAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcblx0fVxyXG5cclxuXHRvcGVuICgpIHtcclxuXHJcblx0XHRzdXBlci5vcGVuKCk7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0XHRpZiggdGhpcy51cCApIHRoaXMuem9uZS55IC09IHRoaXMud2ZpeGUgKyA1O1xyXG5cclxuXHRcdGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcblx0fVxyXG5cclxuXHRjbG9zZSAoKSB7XHJcblxyXG5cdFx0c3VwZXIuY2xvc2UoKTtcclxuXHJcblx0XHRpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMud2ZpeGUgKyA1O1xyXG5cclxuXHRcdGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgID0gJ2hpZGRlbic7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCAtdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdHVwZGF0ZSAoIHVwICkge1xyXG5cclxuXHQgICAgbGV0IGNjID0gVG9vbHMucmdiVG9IZXgoIFRvb2xzLmhzbFRvUmdiKFsgdGhpcy5oc2xbMF0sIDEsIDAuNSBdKSApO1xyXG5cclxuXHQgICAgdGhpcy5tb3ZlTWFya2VycygpO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy52YWx1ZSA9IHRoaXMuYmNvbG9yO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYywgMiwgMCApO1xyXG5cclxuXHQgICAgdGhpcy5zWzJdLmJhY2tncm91bmQgPSB0aGlzLmJjb2xvcjtcclxuXHQgICAgaWYoIXRoaXMubm90ZXh0KSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBUb29scy5odG1sVG9IZXgoIHRoaXMuYmNvbG9yICk7XHJcblxyXG5cdCAgICB0aGlzLmludmVydCA9IFRvb2xzLmZpbmREZWVwSW52ZXIoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMuc1syXS5jb2xvciA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cclxuXHQgICAgaWYoIXVwKSByZXR1cm47XHJcblxyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2FycmF5JyApIHRoaXMuc2VuZCggdGhpcy5yZ2IgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdyZ2InICkgdGhpcy5zZW5kKCBUb29scy5odG1sUmdiKCB0aGlzLnJnYiApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaGV4JyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFRvSGV4KCB0aGlzLnZhbHVlICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdodG1sJyApIHRoaXMuc2VuZCgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldFZhbHVlICggdiApe1xyXG5cclxuXHRcdGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgKSB0aGlzLnZhbHVlID0gVG9vbHMucmdiVG9IZXgoIHYgKTtcclxuICAgICAgICBlbHNlIGlmKCFpc05hTih2KSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggdiApO1xyXG4gICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcblxyXG5cdFx0dGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRDb2xvciAoIGNvbG9yICkge1xyXG5cclxuXHQgICAgbGV0IHVucGFjayA9IFRvb2xzLnVucGFjayhjb2xvcik7XHJcblx0ICAgIGlmICh0aGlzLmJjb2xvciAhPT0gY29sb3IgJiYgdW5wYWNrKSB7XHJcblxyXG5cdCAgICAgICAgdGhpcy5iY29sb3IgPSBjb2xvclxyXG5cdCAgICAgICAgdGhpcy5yZ2IgPSB1bnBhY2tcclxuXHQgICAgICAgIHRoaXMuaHNsID0gVG9vbHMucmdiVG9Ic2woIHRoaXMucmdiIClcclxuXHJcblx0ICAgICAgICB0aGlzLmh1ZSA9IHRoaXMuaHNsWzBdO1xyXG5cclxuXHQgICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblx0ICAgIH1cclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0SFNMICggaHNsICkge1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBoc2w7XHJcblx0ICAgIHRoaXMucmdiID0gVG9vbHMuaHNsVG9SZ2IoIGhzbCApO1xyXG5cdCAgICB0aGlzLmJjb2xvciA9IFRvb2xzLnJnYlRvSGV4KCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtb3ZlTWFya2VycyAoKSB7XHJcblxyXG5cdFx0bGV0IHAgPSB0aGlzLnBwXHJcblx0XHRsZXQgVCA9IFRvb2xzXHJcblxyXG5cdCAgICBsZXQgYzEgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHQgICAgbGV0IGEgPSB0aGlzLmhzbFswXSAqIFQuVHdvUEk7XHJcblx0ICAgIGxldCB0aGlyZCA9ICgyLzMpICogVC5QSTtcclxuXHQgICAgbGV0IHIgPSB0aGlzLnRyO1xyXG5cdCAgICBsZXQgaCA9IHRoaXMuaHNsWzBdO1xyXG5cdCAgICBsZXQgcyA9IHRoaXMuaHNsWzFdO1xyXG5cdCAgICBsZXQgbCA9IHRoaXMuaHNsWzJdO1xyXG5cclxuXHQgICAgbGV0IGFuZ2xlID0gKCBhIC0gVC5waTkwICkgKiBULnRvZGVnO1xyXG5cclxuXHQgICAgaCA9IC0gYSArIFQucGk5MDtcclxuXHJcblx0XHRsZXQgaHggPSBNYXRoLmNvcyhoKSAqIHI7XHJcblx0XHRsZXQgaHkgPSAtTWF0aC5zaW4oaCkgKiByO1xyXG5cdFx0bGV0IHN4ID0gTWF0aC5jb3MoaCAtIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgc3kgPSAtTWF0aC5zaW4oaCAtIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnggPSBNYXRoLmNvcyhoICsgdGhpcmQpICogcjtcclxuXHRcdGxldCB2eSA9IC1NYXRoLnNpbihoICsgdGhpcmQpICogcjtcclxuXHRcdGxldCBteCA9IChzeCArIHZ4KSAvIDIsIG15ID0gKHN5ICsgdnkpIC8gMjtcclxuXHRcdGEgID0gKDEgLSAyICogTWF0aC5hYnMobCAtIC41KSkgKiBzO1xyXG5cdFx0bGV0IHggPSBzeCArICh2eCAtIHN4KSAqIGwgKyAoaHggLSBteCkgKiBhO1xyXG5cdFx0bGV0IHkgPSBzeSArICh2eSAtIHN5KSAqIGwgKyAoaHkgLSBteSkgKiBhO1xyXG5cclxuXHQgICAgcC5zZXQoIHgsIHkgKS5hZGRTY2FsYXIoMTI4KTtcclxuXHJcblx0ICAgIC8vbGV0IGZmID0gKDEtbCkqMjU1O1xyXG5cdCAgICAvLyB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYignK2ZmKycsJytmZisnLCcrZmYrJyknLCAzICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndHJhbnNmb3JtJywgJ3JvdGF0ZSgnK2FuZ2xlKycgKScsIDIgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHAueCwgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBwLnksIDMgKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMiwgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLHRoaXMuYmNvbG9yLCAzICk7XHJcblxyXG5cdH1cclxuXHJcblx0clNpemUgKCkge1xyXG5cclxuXHQgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cdCAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuXHQgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG5cdCAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblx0ICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG5cclxuXHQgICAgLy9jb25zb2xlLmxvZyh0aGlzLnNiKVxyXG5cclxuXHQgICAgdGhpcy5jdyA9IHRoaXMuc2IgPiAyNTYgPyAyNTYgOiB0aGlzLnNiO1xyXG5cclxuXHJcblxyXG5cdCAgICB0aGlzLnJTaXplQ29sb3IoIHRoaXMuY3cgKTtcclxuXHJcblx0ICAgIHRoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgLy9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBcclxuXHR9XHJcblxyXG5cdHJTaXplQ29sb3IgKCB3ICkge1xyXG5cclxuXHJcblx0XHRpZiggdyA9PT0gdGhpcy53Zml4ZSApIHJldHVybjtcclxuXHJcblxyXG5cclxuXHRcdHRoaXMud2ZpeGUgPSB3O1xyXG5cclxuXHJcblxyXG5cdFx0bGV0IHMgPSB0aGlzLnM7XHJcblxyXG5cdFx0Ly90aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIHRoaXMuZGVjYWwueSA9IHRoaXMuc2lkZSA9PT0gJ3VwJyA/IDIgOiB0aGlzLmJhc2VIICsgMlxyXG5cdCAgICB0aGlzLm1pZCA9IE1hdGguZmxvb3IoIHRoaXMud2ZpeGUgKiAwLjUgKVxyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrIHRoaXMud2ZpeGUgKyAnICcrIHRoaXMud2ZpeGUgKVxyXG5cdCAgICBzWzNdLndpZHRoID0gdGhpcy53Zml4ZSArICdweCdcclxuXHQgICAgc1szXS5oZWlnaHQgPSB0aGlzLndmaXhlICsgJ3B4J1xyXG4gICAgXHQvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIHNbM10udG9wID0gdGhpcy5kZWNhbC55ICsgJ3B4J1xyXG5cclxuXHQgICAgdGhpcy5yYXRpbyA9IDI1NiAvIHRoaXMud2ZpeGVcclxuXHQgICAgdGhpcy5zcXVhcmUgPSAxIC8gKDYwKih0aGlzLndmaXhlLzI1NikpXHJcblx0ICAgIHRoaXMuc2V0SGVpZ2h0KClcclxuXHJcblx0fVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZwcyBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLnJvdW5kID0gTWF0aC5yb3VuZDtcclxuXHJcbiAgICAgICAgLy90aGlzLmF1dG9IZWlnaHQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG4gICAgICAgIHRoaXMuaHBsdXMgPSBvLmhwbHVzIHx8IDUwO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IG8ucmVzIHx8IDQwO1xyXG4gICAgICAgIHRoaXMubCA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMDtcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5jdXN0b20gPSBvLmN1c3RvbSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm5hbWVzID0gby5uYW1lcyB8fCBbJ0ZQUycsICdNUyddO1xyXG4gICAgICAgIGxldCBjYyA9IG8uY2MgfHwgWycyMjAsMjIwLDIyMCcsICcyNTUsMjU1LDAnXTtcclxuXHJcbiAgICAgICAvLyB0aGlzLmRpdmlkID0gWyAxMDAsIDEwMCwgMTAwIF07XHJcbiAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWRkaW5nID0gby5hZGRpbmcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSBvLnJhbmdlIHx8IFsgMTY1LCAxMDAsIDEwMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFscGhhID0gby5hbHBoYSB8fCAwLjI1O1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucG9pbnRzID0gW107XHJcbiAgICAgICAgdGhpcy50ZXh0RGlzcGxheSA9IFtdO1xyXG5cclxuICAgICAgICBpZighdGhpcy5jdXN0b20pe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5ub3cgPSBSb290cy5nZXRUaW1lKClcclxuICAgICAgICAgICAgdGhpcy5zdGFydFRpbWUgPSAwOy8vdGhpcy5ub3coKVxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gMDsvL3RoaXMuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lcyA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1zID0gMDtcclxuICAgICAgICAgICAgdGhpcy5mcHMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1lbSA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubW0gPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc01lbSA9ICggc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm1lbW9yeSApID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAvLyB0aGlzLmRpdmlkID0gWyAxMDAsIDIwMCwgMSBdO1xyXG4gICAgICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzTWVtICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5uYW1lcy5wdXNoKCdNRU0nKTtcclxuICAgICAgICAgICAgICAgIGNjLnB1c2goJzAsMjU1LDI1NScpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy50eHQgPSBvLm5hbWUgfHwgJ0ZwcydcclxuXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGNvbnN0IGNjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dDtcclxuICAgICAgICAvL3RoaXMuY1sxXS5pbm5lckhUTUwgPSAnJiMxNjA7JyArIHRoaXMudHh0XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgbGV0IHBhbmVsQ3NzID0gJ2Rpc3BsYXk6bm9uZTsgbGVmdDoxMHB4OyB0b3A6JysgdGhpcy5oICsgJ3B4OyBoZWlnaHQ6JysodGhpcy5ocGx1cyAtIDgpKydweDsgYm94LXNpemluZzpib3JkZXItYm94OyBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7IGJvcmRlcjoxcHggc29saWQgJysgY2NjLmJvcmRlciArJzsnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSBwYW5lbENzcyArPSAnYm9yZGVyLXJhZGl1czonICsgdGhpcy5yYWRpdXMrJ3B4Oyc7IFxyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArIHBhbmVsQ3NzICwge30gKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgndmlld0JveCcsICcwIDAgJyt0aGlzLnJlcysnIDUwJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgncHJlc2VydmVBc3BlY3RSYXRpbycsICdub25lJyApO1xyXG5cclxuXHJcbiAgICAgICAgLy90aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoMjU1LDI1NSwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6JyNGRjAnLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgLy90aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoMCwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6JyMwRkYnLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gYXJyb3dcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuICAgICAgICAvL3RoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxMHB4OyBoZWlnaHQ6MTBweDsgbGVmdDo0cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmFycm93LCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgLy8gcmVzdWx0IHRlc3RcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxMHB4OyB0b3A6JysodGhpcy5oKzIpICsncHg7IGRpc3BsYXk6bm9uZTsgd2lkdGg6MTAwJTsgdGV4dC1hbGlnbjpjZW50ZXI7JyApO1xyXG5cclxuICAgICAgICAvLyBib3R0b20gbGluZVxyXG4gICAgICAgIGlmKCBvLmJvdHRvbUxpbmUgKSB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGJvdHRvbTowcHg7IGhlaWdodDoxcHg7IGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsnKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1Nob3cgPSBmYWxzZTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgLy9zWzFdLm1hcmdpbkxlZnQgPSAnMTBweCc7XHJcbiAgICAgICAgc1sxXS5saW5lSGVpZ2h0ID0gdGhpcy5oLTQ7XHJcbiAgICAgICAgc1sxXS5jb2xvciA9IGNjYy50ZXh0O1xyXG4gICAgICAgIC8vc1sxXS5wYWRkaW5nTGVmdCA9ICcxOHB4JztcclxuICAgICAgICAvL3NbMV0uZm9udFdlaWdodCA9ICdib2xkJztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgIHNbMF0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4JztcclxuICAgICAgICBpZiggdGhpcy5jb2xvcnMuZ2JvcmRlciE9PSdub25lJykgc1swXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyBjY2MuZ2JvcmRlcjtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGogPSAwO1xyXG5cclxuICAgICAgICBmb3IoIGo9MDsgajx0aGlzLm5hbWVzLmxlbmd0aDsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmFzZSA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgaSA9IHRoaXMucmVzKzE7XHJcbiAgICAgICAgICAgIHdoaWxlKCBpLS0gKSBiYXNlLnB1c2goNTApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yYW5nZVtqXSA9ICggMSAvIHRoaXMucmFuZ2Vbal0gKSAqIDQ5O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5wb2ludHMucHVzaCggYmFzZSApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKDApO1xyXG4gICAgICAgICAgIC8vICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLDAuNSknLCAnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3JnYmEoJytjY1tqXSsnLDEpJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICB0aGlzLnRleHREaXNwbGF5LnB1c2goIFwiPHNwYW4gc3R5bGU9J2NvbG9yOnJnYihcIitjY1tqXStcIiknPiBcIiArIHRoaXMubmFtZXNbal0gK1wiIFwiKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBqID0gdGhpcy5uYW1lcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywnK3RoaXMuYWxwaGErJyknLCAnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3JnYmEoJytjY1tqXSsnLDEpJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICAvL2lmKCB0aGlzLmlzU2hvdyApIHRoaXMuc2hvdygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2hvdyApIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICBlbHNlIHRoaXMub3BlbigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgLyptb2RlOiBmdW5jdGlvbiAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9ICcjRkZGJztcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNURE9XTjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0sKi9cclxuXHJcbiAgICB0aWNrICggdiApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB2O1xyXG4gICAgICAgIGlmKCAhdGhpcy5pc1Nob3cgKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoIHBvaW50ICkge1xyXG5cclxuICAgICAgICBsZXQgcCA9ICcnO1xyXG4gICAgICAgIHAgKz0gJ00gJyArICgtMSkgKyAnICcgKyA1MDtcclxuICAgICAgICBmb3IgKCBsZXQgaSA9IDA7IGkgPCB0aGlzLnJlcyArIDE7IGkgKysgKSB7IHAgKz0gJyBMICcgKyBpICsgJyAnICsgcG9pbnRbaV07IH1cclxuICAgICAgICBwICs9ICcgTCAnICsgKHRoaXMucmVzICsgMSkgKyAnICcgKyA1MDtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBUZXh0ICggdmFsICkge1xyXG5cclxuICAgICAgICBsZXQgdiA9IHZhbCB8fCB0aGlzLnZhbHVlcywgdCA9ICcnO1xyXG4gICAgICAgIGZvciggbGV0IGo9MCwgbG5nID10aGlzLm5hbWVzLmxlbmd0aDsgajxsbmc7IGorKyApIHQgKz0gdGhpcy50ZXh0RGlzcGxheVtqXSArICh2W2pdKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSArICc8L3NwYW4+JztcclxuICAgICAgICB0aGlzLmNbNF0uaW5uZXJIVE1MID0gdDtcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdHcmFwaCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLm5hbWVzLmxlbmd0aCwgdiwgb2xkID0gMCwgbiA9IDA7XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYWRkaW5nICkgdiA9ICh0aGlzLnZhbHVlc1tuXStvbGQpICogdGhpcy5yYW5nZVtuXTtcclxuICAgICAgICAgICAgZWxzZSAgdiA9ICh0aGlzLnZhbHVlc1tuXSAqIHRoaXMucmFuZ2Vbbl0pO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50c1tuXS5zaGlmdCgpO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50c1tuXS5wdXNoKCA1MCAtIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHN2ZywgJ2QnLCB0aGlzLm1ha2VQYXRoKCB0aGlzLnBvaW50c1tuXSApLCBpKzEgKTtcclxuICAgICAgICAgICAgb2xkICs9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICBuKys7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmhwbHVzICsgdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCB0aGlzLmhwbHVzICk7fVxyXG4gICAgICAgIGVsc2UgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0aGlzLmhwbHVzICk7XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKydweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snOyBcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgdGhpcy5pc1Nob3cgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMuYWRkTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIC10aGlzLmhwbHVzICk7fVxyXG4gICAgICAgIGVsc2UgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCAtdGhpcy5ocGx1cyApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKydweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy5pc1Nob3cgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLnJlbW92ZUxpc3RlbiggdGhpcyApO1xyXG5cclxuICAgICAgICB0aGlzLmNbNF0uaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLy8vIEFVVE8gRlBTIC8vLy8vL1xyXG5cclxuICAgIGJlZ2luICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGVuZCAoKSB7XHJcblxyXG4gICAgICAgIGxldCB0aW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICB0aGlzLm1zID0gdGltZSAtIHRoaXMuc3RhcnRUaW1lO1xyXG5cclxuICAgICAgICB0aGlzLmZyYW1lcyArKztcclxuXHJcbiAgICAgICAgaWYgKCB0aW1lID4gdGhpcy5wcmV2VGltZSArIDEwMDAgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IHRoaXMucm91bmQoICggdGhpcy5mcmFtZXMgKiAxMDAwICkgLyAoIHRpbWUgLSB0aGlzLnByZXZUaW1lICkgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSB0aW1lO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lcyA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMuaXNNZW0gKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGhlYXBTaXplID0gcGVyZm9ybWFuY2UubWVtb3J5LnVzZWRKU0hlYXBTaXplO1xyXG4gICAgICAgICAgICAgICAgbGV0IGhlYXBTaXplTGltaXQgPSBwZXJmb3JtYW5jZS5tZW1vcnkuanNIZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubWVtID0gdGhpcy5yb3VuZCggaGVhcFNpemUgKiAwLjAwMDAwMDk1NCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tbSA9IGhlYXBTaXplIC8gaGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFsgdGhpcy5mcHMsIHRoaXMubXMgLCB0aGlzLm1tIF07XHJcblxyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoIFsgdGhpcy5mcHMsIHRoaXMubXMsIHRoaXMubWVtIF0gKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRpbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxpc3RlbmluZyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSB0aGlzLnN0YXJ0VGltZSA9IHRoaXMuZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMudztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKCB0aGlzLnNhICsgdGhpcy5zYiAtIDYgKSArICdweCdcclxuXHJcbiAgICAgICAgc1swXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMV0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzJdLmxlZnQgPSAxMCArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9ICh3LTIwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICh3LTIwKSArICdweCc7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcbiAgICBcclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgR3JhcGggZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICBcdHRoaXMudmFsdWUgPSBvLnZhbHVlICE9PSB1bmRlZmluZWQgPyBvLnZhbHVlIDogWzAsMCwwXTtcclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uICE9PSB1bmRlZmluZWQgPyBvLnByZWNpc2lvbiA6IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcbiAgICAgICAgdGhpcy5uZWcgPSBvLm5lZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5saW5lID0gby5saW5lICE9PSB1bmRlZmluZWQgPyAgby5saW5lIDogdHJ1ZTtcclxuXHJcbiAgICAgICAgLy9pZih0aGlzLm5lZyl0aGlzLm11bHRpcGxpY2F0b3IqPTI7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvV2lkdGggIT09IHVuZGVmaW5lZCA/IG8uYXV0b1dpZHRoIDogdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCAxMjggKyAxMDtcclxuICAgICAgICB0aGlzLnJoID0gdGhpcy5oIC0gMTA7XHJcbiAgICAgICAgdGhpcy50b3AgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuYXV0b1dpZHRoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvL3RoaXMuY1sxXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmZjAwMDAnO1xyXG4gICAgICAgICAgICAvL3RoaXMuY1sxXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2ggPSB0aGlzLnJoIC0gMjg7XHJcbiAgICAgICAgdGhpcy5ndyA9IHRoaXMudyAtIDI4O1xyXG5cclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRleHQtYWxpZ246IGp1c3RpZnk7IGNvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICAvL2xldCBjb2x1bSA9ICdjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyBjb2x1bW46Jyt0aGlzLmxuZysnOyBicmVhay1pbnNpZGU6IGNvbHVtbjsgdG9wOidcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdkaXNwbGF5OmJsb2NrOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZzowcHggMHB4OyB0b3A6JysodGhpcy5oLTIwKSsncHg7IGxlZnQ6MTRweDsgd2lkdGg6Jyt0aGlzLmd3KydweDsgIGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5kb20oICdzdmcnLCB0aGlzLmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdGhpcy53KycgJyt0aGlzLnJoLCB3aWR0aDp0aGlzLncsIGhlaWdodDp0aGlzLnJoLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHN2ZywgeyB3aWR0aDp0aGlzLncsIGhlaWdodDp0aGlzLnJoLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOnRoaXMuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOididXR0JyB9LCBzdmcgKTtcclxuICAgICAgICB0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDp0aGlzLmd3KzgsIGhlaWdodDp0aGlzLmdoKzgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSAsIGZpbGw6J25vbmUnfSwgc3ZnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXcgPSAoKHRoaXMuZ3ctKDQqKHRoaXMubG5nLTEpKSkvdGhpcy5sbmcpO1xyXG4gICAgICAgIGxldCB0ID0gW107XHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnYgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgIFx0dFtpXSA9IFsgMTQgKyAoaSp0aGlzLml3KSArIChpKjQpLCB0aGlzLml3IF07XHJcbiAgICAgICAgXHR0W2ldWzJdID0gdFtpXVswXSArIHRbaV1bMV07XHJcbiAgICAgICAgXHR0aGlzLmNNb2RlW2ldID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudltpXSA9ICgoMSsodGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikpKjAuNSk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMudltpXSA9IHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcblxyXG4gICAgICAgIFx0dGhpcy5kb20oICdyZWN0JywgJycsIHsgeDp0W2ldWzBdLCB5OjE0LCB3aWR0aDp0W2ldWzFdLCBoZWlnaHQ6MSwgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCAnZmlsbC1vcGFjaXR5JzowLjMgfSwgc3ZnICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0O1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHN2ZztcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLncpXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLnRvcCA9IDAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5oZWlnaHQgPSAyMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLmxpbmVIZWlnaHQgPSAoMjAtNSkrJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIGZhbHNlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5uZWcpIHRoaXMudltpXSA9ICgxICsgdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpICogMC41O1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudltpXSA9IHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWx1ZVRvSHRtbCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgbj0wLCByID0gJzx0YWJsZSBzdHlsZT1cIndpZHRoOjEwMCU7XCI+PHRyPidcclxuICAgICAgICBsZXQgdyA9IDEwMCAvIHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHN0eWxlID0gJ3dpZHRoOicrIHcgKyclOycvLycgdGV4dC1hbGlnbjpjZW50ZXI7J1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKG49PT10aGlzLmxuZy0xKSByICs9ICc8dGQgc3R5bGU9JytzdHlsZSsnPicgKyB0aGlzLnZhbHVlW25dICsgJzwvdGQ+PC90cj48L3RhYmxlPidcclxuICAgICAgICAgICAgZWxzZSByICs9ICc8dGQgc3R5bGU9JytzdHlsZSsnPicgKyB0aGlzLnZhbHVlW25dICsgJzwvdGQ+J1xyXG4gICAgICAgICAgICBuKytcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saW5lICkgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDAgKTtcclxuXHJcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnaGVpZ2h0JywgdGhpcy52W2ldKnRoaXMuZ2gsIGkrMiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneScsIDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naCksIGkrMiApO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZhbHVlW2ldID0gKCAoKHRoaXMudltpXSoyKS0xKSAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWVbaV0gPSAoICh0aGlzLnZbaV0gKiB0aGlzLm11bHRpcGxpY2F0b3IpICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcDtcclxuICAgICAgICBcclxuXHQgICAgaWYoIGwueT50aGlzLnRvcCAmJiBsLnk8dGhpcy5oLTIwICl7XHJcblx0ICAgICAgICB3aGlsZSggaS0tICl7XHJcblx0ICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGk7XHJcblx0ICAgICAgICB9XHJcblx0ICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBuYW1lICkge1xyXG5cclxuICAgIFx0aWYoIG4gPT09IHRoaXMuY01vZGVbbmFtZV0gKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgYTtcclxuXHJcbiAgICAgICAgc3dpdGNoKG4pe1xyXG4gICAgICAgICAgICBjYXNlIDA6IGE9MC4zOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiBhPTAuNjsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogYT0xOyBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwtb3BhY2l0eScsIGEsIG5hbWUgKyAyICk7XHJcbiAgICAgICAgdGhpcy5jTW9kZVtuYW1lXSA9IG47XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgIFx0bGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIC8vdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY01vZGVbaV0gIT09IDAgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwtb3BhY2l0eScsIDAuMywgaSArIDIgKTtcclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgcmV0dXJuIHRoaXMucmVzZXQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgIFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgIFx0bGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIFx0aWYoIG5hbWUgPT09ICcnICl7XHJcblxyXG4gICAgICAgICAgICBudXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHsgXHJcblxyXG4gICAgICAgICAgICBudXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMiA6IDEsIG5hbWUgKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgICAgICBpZih0aGlzLmlzRG93bil7XHJcbiAgICAgICAgICAgIFx0dGhpcy52W25hbWVdID0gdGhpcy5jbGFtcCggMSAtICgoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIC0gMTAgKSAvIHRoaXMuZ2gpICwgMCwgMSApO1xyXG4gICAgICAgICAgICBcdHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgXHR0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgIFx0bGV0IHAgPSBcIlwiLCBoLCB3LCB3biwgd20sIG93LCBvaFxyXG4gICAgXHQvL2xldCBnID0gdGhpcy5pdyowLjVcclxuXHJcbiAgICBcdGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgIFx0XHRoID0gMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKVxyXG4gICAgXHRcdHcgPSAoMTQgKyAoaSp0aGlzLml3KSArIChpKjQpKVxyXG5cclxuICAgIFx0XHR3bSA9IHcgKyB0aGlzLml3KjAuNVxyXG4gICAgXHRcdHduID0gdyArIHRoaXMuaXdcclxuXHJcbiAgICBcdFx0aWYoIGkgPT09IDAgKSBwKz0nTSAnK3crJyAnKyBoICsgJyBUICcgKyB3bSArJyAnKyBoXHJcbiAgICBcdFx0ZWxzZSBwICs9ICcgQyAnICsgb3cgKycgJysgb2ggKyAnLCcgKyB3ICsnICcrIGggKyAnLCcgKyB3bSArJyAnKyBoXHJcbiAgICBcdFx0aWYoIGkgPT09IHRoaXMubG5nLTEgKSBwKz0nIFQgJyArIHduICsnICcrIGhcclxuXHJcbiAgICBcdFx0b3cgPSB3blxyXG4gICAgXHRcdG9oID0gaCBcclxuXHJcbiAgICBcdH1cclxuXHJcbiAgICBcdHJldHVybiBwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgc1sxXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG5cclxuICAgICAgICBsZXQgZ3cgPSB0aGlzLncgLSAyOFxyXG4gICAgICAgIGxldCBpdyA9ICgoZ3ctKDQqKHRoaXMubG5nLTEpKSkvdGhpcy5sbmcpXHJcbiAgICAgICAgbGV0IHQgPSBbXVxyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gZ3cgKyAncHgnXHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdFtpXSA9IFsgMTQgKyAoaSppdykgKyAoaSo0KSwgaXcgXVxyXG4gICAgICAgICAgICB0W2ldWzJdID0gdFtpXVswXSArIHRbaV1bMV1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHRcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFbXB0eSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuXHQgICAgby5pc1NwYWNlID0gdHJ1ZVxyXG4gICAgICAgIG8ubWFyZ2luID0gMFxyXG4gICAgICAgIGlmKCFvLmgpIG8uaCA9IDEwXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG4gICAgXHJcbn1cclxuIiwiXHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi9FbXB0eS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgR3JvdXAgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0dyb3VwID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLkFERCA9IG8uYWRkO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9IZWlnaHQgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMudWlzID0gW11cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmRlY2FsID0gby5ncm91cCA/IDggOiAwXHJcbiAgICAgICAgLy90aGlzLmRkID0gby5ncm91cCA/IG8uZ3JvdXAuZGVjYWwgKyA4IDogMFxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIID0gdGhpcy5oXHJcblxyXG4gICAgICAgIHRoaXMuc3BhY2VZID0gbmV3IEVtcHR5KHtoOnRoaXMubWFyZ2lufSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy51c2VGbGV4ID0gdHJ1ZSBcclxuICAgICAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyAnZGlzcGxheTpmbGV4OyBmbGV4LWZsb3c6IHJvdyB3cmFwOycgOiAnJ1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyAgb3ZlcmZsb3c6aGlkZGVuOyB0b3A6JysodGhpcy5oKSsncHgnKVxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIGxldCBiaCA9IHRoaXMubXRvcCA9PT0gMCA/IHRoaXMubWFyZ2luIDogdGhpcy5tdG9wXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7IGhlaWdodDonKyhiaCsxKSsncHg7IHRvcDonKygodGhpcy5oLTEpKSsncHg7IGJhY2tncm91bmQ6bm9uZTsnKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICB0aGlzLmNbMV0ubmFtZSA9ICdncm91cCdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0QkcoIG8uYmcgKVxyXG5cclxuICAgICAgICBpZiggby5vcGVuICkgdGhpcy5vcGVuKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0QkcgKCBiZyApIHtcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgaWYoIGJnICE9PSB1bmRlZmluZWQgKSBjYy5ncm91cHMgPSBiZ1xyXG4gICAgICAgIGlmKGNjLmdyb3VwcyA9PT0gJ25vbmUnKSBjYy5ncm91cHMgPSBjYy5iYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgIGNjLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgc1swXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgIHNbMV0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwc1xyXG4gICAgICAgIHNbMl0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwc1xyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLypsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRCRyggJ25vbmUnICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy51aXNbaV0uc2V0QkcoIHRoaXMuY29sb3JzLmJhY2tncm91bmQgKTtcclxuICAgICAgICB9Ki9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUggKyB0aGlzLm1hcmdpbiApIG5hbWUgPSAndGl0bGUnO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSBuYW1lID0gJ2NvbnRlbnQnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhuYW1lKVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJUYXJnZXQgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ID09PSAtMSApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5wcm90by5zICl7XHJcbiAgICAgICAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBoYW5kbGVFdmVudCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHByb3RvQ2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHN3aXRjaCggbmFtZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnY29udGVudCc6XHJcblxyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKClcclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcblxyXG4gICAgICAgICAgICBpZiggUm9vdHMuaXNNb2JpbGUgJiYgdHlwZSA9PT0gJ21vdXNlZG93bicgKSB0aGlzLmdldE5leHQoIGUsIGNoYW5nZSApXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5wcm90byApeyBcclxuICAgICAgICAgICAgICAgIC8vZS5jbGllbnRZIC09IHRoaXMubWFyZ2luXHJcbiAgICAgICAgICAgICAgICBwcm90b0NoYW5nZSA9IHRoaXMucHJvdG8uaGFuZGxlRXZlbnQoIGUgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggIVJvb3RzLmxvY2sgKSB0aGlzLmdldE5leHQoIGUsIGNoYW5nZSApXHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOlxyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmlzT3BlbiA/ICduLXJlc2l6ZSc6J3MtcmVzaXplJyApO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbW91c2Vkb3duJyApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgaWYoIHByb3RvQ2hhbmdlICkgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TmV4dCAoIGUsIGNoYW5nZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KCB0aGlzLnVpcywgZSApO1xyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gdGhpcy5jdXJyZW50ICl7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSAtMSApeyBcclxuICAgICAgICAgICAgdGhpcy5wcm90byAgPSB0aGlzLnVpc1sgdGhpcy5jdXJyZW50IF07XHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgXHJcblxyXG4gICAgYWRkKCkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGFyZ3VtZW50cztcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzFdID09PSAnb2JqZWN0JyApeyBcclxuICAgICAgICAgICAgYVsxXS5pc1VJID0gdGhpcy5pc1VJXHJcbiAgICAgICAgICAgIGFbMV0udGFyZ2V0ID0gdGhpcy5jWzJdXHJcbiAgICAgICAgICAgIGFbMV0ubWFpbiA9IHRoaXMubWFpblxyXG4gICAgICAgICAgICBhWzFdLmdyb3VwID0gdGhpc1xyXG4gICAgICAgIH0gZWxzZSBpZiggdHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gJ3N0cmluZycgKXtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbCggYSwgeyBpc1VJOnRydWUsIHRhcmdldDp0aGlzLmNbMl0sIG1haW46dGhpcy5tYWluIH0pO1xyXG4gICAgICAgICAgICBlbHNleyBcclxuICAgICAgICAgICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBhWzJdLnRhcmdldCA9IHRoaXMuY1syXTtcclxuICAgICAgICAgICAgICAgIGFbMl0ubWFpbiA9IHRoaXMubWFpbjtcclxuICAgICAgICAgICAgICAgIGFbMl0uZ3JvdXAgPSB0aGlzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdSA9IHRoaXMuQURELmFwcGx5KCB0aGlzLCBhIClcclxuXHJcbiAgICAgICAgaWYoIHUuaXNHcm91cCApeyBcclxuICAgICAgICAgICAgLy9vLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgdS5keCA9IDhcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy91LmR4ICs9IDRcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuZGVjYWwpXHJcbiAgICAgICAgLy91LnpvbmUuZCAtPSA4XHJcbiAgICAgICAgUm9vdHMuZm9yY2Vab25lID0gdHJ1ZVxyXG4gICAgICAgIC8vdS5tYXJnaW4gKz0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyggdS5tYXJnaW4gKVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlWm9uZSA9IHRydWVcclxuXHJcbiAgICAgICAgLy9Sb290cy5yZXNpemUoKVxyXG4gICAgICAgICAvL2NvbnNvbGUubG9nKFJvb3RzLm5lZWRSZXNpemUpXHJcblxyXG4gICAgICAgIHRoaXMudWlzLnB1c2goIHUgKVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZVxyXG5cclxuICAgICAgICByZXR1cm4gdTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gICAgcmVtb3ZlICggbiApIHtcclxuXHJcbiAgICAgICAgaWYoIG4uZGlzcG9zZSApIG4uZGlzcG9zZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBjbGVhciBhbGwgaW5lciBcclxuXHJcbiAgICBkaXNwb3NlKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyKClcclxuICAgICAgICBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoKVxyXG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhcigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5lbXB0eSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGVtcHR5ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCwgaXRlbTtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpdGVtID0gdGhpcy51aXMucG9wKClcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnJlbW92ZUNoaWxkKCBpdGVtLmNbMF0gKVxyXG4gICAgICAgICAgICBpdGVtLmNsZWFyKCB0cnVlIClcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy51aXNbaV0uY2xlYXIoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBjbGVhciBvbmUgZWxlbWVudFxyXG5cclxuICAgIGNsZWFyT25lICggbiApIHsgXHJcblxyXG4gICAgICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2YoIG4gKTtcclxuXHJcbiAgICAgICAgaWYgKCBpZCAhPT0gLTEgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsYyggLSAoIHRoaXMudWlzWyBpZCBdLmggKyB0aGlzLm1hcmdpbiApIClcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnJlbW92ZUNoaWxkKCB0aGlzLnVpc1sgaWQgXS5jWzBdIClcclxuICAgICAgICAgICAgdGhpcy51aXMuc3BsaWNlKCBpZCwgMSApXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy51aXMubGVuZ3RoID09PSAwICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgXHJcblxyXG4gICAgb3BlbiAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApXHJcbiAgICAgICAgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgICAgICAvL2xldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvL3NbMl0udG9wID0gKHRoaXMuaC0xKSArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5ncm91cHMvLycjMGYwJ1xyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cyl7XHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BSaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJMZWZ0ID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlclJpZ2h0ID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG5cclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyVG9wID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlckJvdHRvbSA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkIHJnYmEoMCwwLDAsMCknXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgICAgIC8vUm9vdHMuaXNMZWF2ZSA9IHRydWVcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKVxyXG5cclxuICAgICAgICAvL2xldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMSApXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICBzWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICAvL3NbMV0uaGVpZ2h0ID0gKHRoaXMuaC0yKSArICdweCdcclxuICAgICAgICAvL3NbMl0udG9wID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlciA9ICdub25lJ1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9ICdub25lJ1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKSBzWzFdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjVWlzICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiB8fCB0aGlzLmlzRW1wdHkgKSB0aGlzLmggPSB0aGlzLmJhc2VIXHJcbiAgICAgICAgLy9lbHNlIHRoaXMuaCA9IFJvb3RzLmNhbGNVaXMoIHRoaXMudWlzLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCApICsgdGhpcy5iYXNlSDtcclxuICAgICAgICBlbHNlIHRoaXMuaCA9IFJvb3RzLmNhbGNVaXMoIFsuLi50aGlzLnVpcywgdGhpcy5zcGFjZVkgXSwgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKyB0aGlzLm1hcmdpbiwgdHJ1ZSApICsgdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuc1syXS5oZWlnaHQgPSggdGhpcy5oIC0gdGhpcy5iYXNlSCApKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApXHJcbiAgICAgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0IClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsYyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSByZXR1cm5cclxuICAgICAgICBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoKVxyXG4gICAgICAgIGVsc2UgdGhpcy5jYWxjVWlzKClcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuc1syXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0U2l6ZSggdGhpcy53IClcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uclNpemUoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIHRoaXMudyA9IHRoaXMudyAtIHRoaXMuZGVjYWxcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKCB0aGlzLnNhICsgdGhpcy5zYiAtIDYgKSArICdweCdcclxuXHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMV0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuICAgICAgICBzWzJdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuLypcclxuICAgIHVpb3V0KCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5sb2NrICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgICAgICBpZih0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdmVyKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5sb2NrICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgICAgICAvL2lmKCB0aGlzLmlzT3BlbiApIHJldHVybjtcclxuICAgICAgICBpZih0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcblxyXG4gICAgfVxyXG4qL1xyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBKb3lzdGljayBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gWzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLmpveVR5cGUgPSAnYW5hbG9naXF1ZSc7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigpO1xyXG4gICAgICAgIHRoaXMudG1wID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG4gICAgICAgIHRoaXMuaGF2ZVRleHQgPSBvLnRleHQgIT09IHVuZGVmaW5lZCA/IG8udGV4dCA6IHRydWUgXHJcblxyXG4gICAgICAgIC8vdGhpcy5yYWRpdXMgPSB0aGlzLncgKiAwLjU7XHJcbiAgICAgICAgLy90aGlzLmRpc3RhbmNlID0gdGhpcy5yYWRpdXMqMC4yNTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlID0gKHRoaXMuZGlhbSowLjUpKjAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAodGhpcy5oYXZlVGV4dCA/IDEwIDogMCk7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0ICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy5oYXZlVGV4dCA/IHRoaXMudmFsdWUgOiAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRKb3lzdGljayggdGhpcy5tb2RlbCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtICk7XHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoMClcclxuXHJcblxyXG4gICAgICAgIHRoaXMucmF0aW8gPSAxMjgvdGhpcy53O1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoZmFsc2UpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5tb2RlbD09PTApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgJ3VybCgjZ3JhZEluKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJyMwMDAnLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMSknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgJ25vbmUnLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5tb2RlbD09PTApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgJ3VybCgjZ3JhZEluMiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2JhKDAsMCwwLDApJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3ZlciwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4zKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95U2VsZWN0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5qb3lPdmVyLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXRcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZEludGVydmFsICgpe1xyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICkgdGhpcy5zdG9wSW50ZXJ2YWwoKTtcclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCBmdW5jdGlvbigpeyB0aGlzLnVwZGF0ZSgpOyB9LmJpbmQodGhpcyksIDEwICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0b3BJbnRlcnZhbCAoKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgPT09IG51bGwgKSByZXR1cm47XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbCggdGhpcy5pbnRlcnZhbCApO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHRoaXMubW9kZSggMiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXAueCA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIC8vdGhpcy50bXAueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMudG1wLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgdGhpcy50bXAueSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKTtcclxuXHJcbiAgICAgICAgbGV0IGRpc3RhbmNlID0gdGhpcy50bXAubGVuZ3RoKCk7XHJcblxyXG4gICAgICAgIGlmICggZGlzdGFuY2UgPiB0aGlzLmRpc3RhbmNlICkge1xyXG4gICAgICAgICAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKHRoaXMudG1wLngsIHRoaXMudG1wLnkpO1xyXG4gICAgICAgICAgICB0aGlzLnRtcC54ID0gTWF0aC5zaW4oIGFuZ2xlICkgKiB0aGlzLmRpc3RhbmNlO1xyXG4gICAgICAgICAgICB0aGlzLnRtcC55ID0gTWF0aC5jb3MoIGFuZ2xlICkgKiB0aGlzLmRpc3RhbmNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wb3MuY29weSggdGhpcy50bXAgKS5kaXZpZGVTY2FsYXIoIHRoaXMuZGlzdGFuY2UgKS5uZWdhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZih2PT09dW5kZWZpbmVkKSB2PVswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHZbMF0gfHwgMCwgdlsxXSAgfHwgMCApO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICBpZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy5sZXJwKCBudWxsLCAwLjMgKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy54ID0gTWF0aC5hYnMoIHRoaXMucG9zLnggKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueDtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnkgPSBNYXRoLmFicyggdGhpcy5wb3MueSApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy55O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmlzQ2FudmFzICkgdGhpcy5tYWluLmRyYXcoKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgdGhpcy5zdG9wSW50ZXJ2YWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgeCA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICAvL2xldCB5ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy55ICogdGhpcy5kaXN0YW5jZSApO1xyXG5cclxuICAgICAgICBsZXQgeCA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy55ICogdGhpcy5kaXN0YW5jZSApO1xyXG5cclxuICAgICAgICBpZih0aGlzLm1vZGVsID09PSAwKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBzeCA9IHggKyAoKHRoaXMucG9zLngpKjUpICsgNTtcclxuICAgICAgICAgICAgbGV0IHN5ID0geSArICgodGhpcy5wb3MueSkqNSkgKyAxMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHN4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5Jywgc3kqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB5KnRoaXMucmF0aW8sIDQgKTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9ICAoIHRoaXMucG9zLnggKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gICggdGhpcy5wb3MueSAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLmhhdmVUZXh0KSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhciAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zdG9wSW50ZXJ2YWwoKTtcclxuICAgICAgICBzdXBlci5jbGVhcigpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEtub2IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLm1QSSA9IE1hdGguUEkgKiAwLjg7XHJcbiAgICAgICAgdGhpcy50b0RlZyA9IDE4MCAvIE1hdGguUEk7XHJcbiAgICAgICAgdGhpcy5jaXJSYW5nZSA9IHRoaXMubVBJICogMjtcclxuXHJcbiAgICAgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0S25vYigpO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlR3JhZCgpLCAzIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyArIHRoaXMuZGlhbSArICcgJyArIHRoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBUb29scy5kb20oICdwYXRoJywgJycsIHsgZDogJycsIHN0cm9rZTpjYy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzogMiwgZmlsbDogJ25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOiAncm91bmQnIH0sIHRoaXMuY1szXSApOyAvLzRcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5tb2RlbCA9PSAyKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgVG9vbHMuYWRkU1ZHR2xvd0VmZmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0eWxlJywgJ2ZpbHRlcjogdXJsKFwiI1VJTEdsb3dcIik7JywgNCApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuciA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApIHtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDApO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywncmdiYSgyNTUsMCwwLDAuMiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5zZWxlY3QsIDApO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywncmdiYSgwLDAsMCwwLjYpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dE92ZXIsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdrbm9iJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlXHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbFxyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBvZmYgPSB0aGlzLm9mZnNldDtcclxuXHJcbiAgICAgICAgLy9vZmYueCA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIC8vb2ZmLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICBvZmYueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICBvZmYueSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gLSBNYXRoLmF0YW4yKCBvZmYueCwgb2ZmLnkgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApIHRoaXMuciA9IE1hdGguYWJzKHRoaXMuciAtIHRoaXMub2xkcikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPiB0aGlzLm1QSSA/IHRoaXMubVBJIDogdGhpcy5yO1xyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA8IC10aGlzLm1QSSA/IC10aGlzLm1QSSA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgbGV0IHN0ZXBzID0gMSAvIHRoaXMuY2lyUmFuZ2U7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gKHRoaXMuciArIHRoaXMubVBJKSAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IE1hdGguZmxvb3IoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2tub2InICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlR3JhZCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBkID0gJycsIHN0ZXAsIHJhbmdlLCBhLCB4LCB5LCB4MiwgeTIsIHIgPSA2NDtcclxuICAgICAgICBsZXQgc3RhcnRhbmdsZSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZW5kYW5nbGUgPSBNYXRoLlBJIC0gdGhpcy5tUEk7XHJcbiAgICAgICAgLy9sZXQgc3RlcCA9IHRoaXMuc3RlcD41ID8gdGhpcy5zdGVwIDogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5zdGVwPjUpe1xyXG4gICAgICAgICAgICByYW5nZSA9ICB0aGlzLnJhbmdlIC8gdGhpcy5zdGVwO1xyXG4gICAgICAgICAgICBzdGVwID0gKCBzdGFydGFuZ2xlIC0gZW5kYW5nbGUgKSAvIHJhbmdlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoKCBzdGFydGFuZ2xlIC0gZW5kYW5nbGUgKSAvIHIpKjI7XHJcbiAgICAgICAgICAgIHJhbmdlID0gciowLjU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKCBsZXQgaSA9IDA7IGkgPD0gcmFuZ2U7ICsraSApIHtcclxuXHJcbiAgICAgICAgICAgIGEgPSBzdGFydGFuZ2xlIC0gKCBzdGVwICogaSApO1xyXG4gICAgICAgICAgICB4ID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyMCApO1xyXG4gICAgICAgICAgICB5ID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyMCApO1xyXG4gICAgICAgICAgICB4MiA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgeTIgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIGQgKz0gJ00nICsgeCArICcgJyArIHkgKyAnIEwnICsgeDIgKyAnICcreTIgKyAnICc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgbGV0IHNhID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlYSA9ICggKCB0aGlzLnBlcmNlbnQgKiB0aGlzLmNpclJhbmdlICkgLSAoIHRoaXMubVBJICkgKTtcclxuXHJcbiAgICAgICAgbGV0IHNpbiA9IE1hdGguc2luKCBlYSApO1xyXG4gICAgICAgIGxldCBjb3MgPSBNYXRoLmNvcyggZWEgKTtcclxuXHJcbiAgICAgICAgbGV0IHgxID0gKCAyNSAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkxID0gLSggMjUgKiBjb3MgKSArIDY0O1xyXG4gICAgICAgIGxldCB4MiA9ICggMjAgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MiA9IC0oIDIwICogY29zICkgKyA2NDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKycgJyArIHkxICsgJyBMICcgKyB4MiArJyAnICsgeTIsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHgxID0gMzYgKiBNYXRoLnNpbiggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTEgPSAzNiAqIE1hdGguY29zKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB4MiA9IDM2ICogc2luICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MiA9IC0zNiAqIGNvcyArIDY0O1xyXG4gICAgICAgICAgICBsZXQgYmlnID0gZWEgPD0gTWF0aC5QSSAtIHRoaXMubVBJID8gMCA6IDE7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsgJywnICsgeTEgKyAnIEEgJyArIDM2ICsgJywnICsgMzYgKyAnIDEgJyArIGJpZyArICcgMSAnICsgeDIgKyAnLCcgKyB5MiwgNCApO1xyXG5cclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggdGhpcy5jb2xvcnMudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggdGhpcy5jb2xvcnMudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDQgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICAvLyBUT0RPIG5vdCB3b3JrXHJcbiAgICAgICAgdGhpcy5oaWRlQ3VycmVudCA9IGZhbHNlXHJcblxyXG4gICAgICAgIC8vIGltYWdlc1xyXG4gICAgICAgIHRoaXMucGF0aCA9IG8ucGF0aCB8fCAnJztcclxuICAgICAgICB0aGlzLmZvcm1hdCA9IG8uZm9ybWF0IHx8ICcnO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmlzV2l0aEltYWdlID0gdGhpcy5wYXRoICE9PSAnJyA/IHRydWU6ZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIHRoaXMudG1wVXJsID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubSA9IG8ubSAhPT0gdW5kZWZpbmVkID8gby5tIDogNVxyXG5cclxuXHJcbiAgICAgICAgbGV0IGFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcblxyXG4gICAgICAgIC8vIHNjcm9sbCBzaXplXHJcbiAgICAgICAgbGV0IHNzID0gby5zY3JvbGxTaXplIHx8IDEwXHJcbiAgICAgICAgdGhpcy5zcyA9IHNzKzFcclxuXHJcbiAgICAgICAgdGhpcy5zTW9kZSA9IDA7XHJcbiAgICAgICAgdGhpcy50TW9kZSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdE9ubHkgPSBvLmxpc3RPbmx5IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zdGF0aWNUb3AgPSBvLnN0YXRpY1RvcCB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0YWJsZSA9IHRoaXMubGlzdE9ubHlcclxuICAgICAgICBpZiggby5zZWxlY3QgIT09IHVuZGVmaW5lZCApIG8uc2VsZWN0YWJsZSA9IG8uc2VsZWN0XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudHh0ID09PSAnJyApIHRoaXMucCA9IDA7XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MDsgZGlzcGxheTpub25lOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJyt0aGlzLm0rJ3B4OyBtYXJnaW4tYm90dG9tOjBweDsgcG9zaXRpb246YWJzb2x1dGU7IGp1c3RpZnktY29udGVudDonK2FsaWduKyc7IHRleHQtYWxpZ246JythbGlnbisnOyBsaW5lLWhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zY3JvbGxlckJhY2sgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OjBweDsgd2lkdGg6JytzcysncHg7IGJhY2tncm91bmQ6JytjYy5iYWNrKyc7IGRpc3BsYXk6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLnNjcm9sbGVyID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDonKygoc3MtKHNzKjAuMjUpKSowLjUpKydweDsgd2lkdGg6Jysoc3MqMC4yNSkrJ3B4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOyBkaXNwbGF5Om5vbmU7ICcpO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gW11cclxuICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG51bGxcclxuXHJcbiAgICAgICAgaWYoIG8ubGlzdCApe1xyXG4gICAgICAgICAgICBpZiggby5saXN0IGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLmxpc3QucHVzaCggZyApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnRtcElkID0gMFxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLml0ZW1IZWlnaHQgPSBvLml0ZW1IZWlnaHQgfHwgdGhpcy5oLy8odGhpcy5oLTMpO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBmdWxsIGxpc3QgXHJcbiAgICAgICAgdGhpcy5mdWxsID0gby5mdWxsIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnB5ID0gMDtcclxuICAgICAgICB0aGlzLnd3ID0gdGhpcy5zYjtcclxuICAgICAgICB0aGlzLnNjcm9sbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIGxpc3QgdXAgb3IgZG93blxyXG4gICAgICAgIHRoaXMuc2lkZSA9IG8uc2lkZSB8fCAnZG93bic7XHJcbiAgICAgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudG9wID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmJvdHRvbSA9IHRoaXMuaC0yICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmJvdHRvbSA9ICcxcHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbNF0uc3R5bGUuYm90dG9tID0gZmx0b3AgKyAncHgnO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCArICdweCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxpc3RJbiA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnbGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgYmFja2dyb3VuZDpub25lOycpO1xyXG4gICAgICAgIHRoaXMubGlzdEluLm5hbWUgPSAnbGlzdCc7XHJcblxyXG4gICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLmxpc3RJbiApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlckJhY2sgKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXIgKTtcclxuXHJcbiAgICAgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICBpZighaXNOYU4oby52YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIG8udmFsdWUgXTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IG8ub3BlbiB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGlzdE9ubHkgKXtcclxuICAgICAgICAgICAgdGhpcy5iYXNlSCA9IDU7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbNF0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUgrJ3B4J1xyXG4gICAgICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHRoaXMubWluaUNhbnZhcyA9IG8ubWluaUNhbnZhcyB8fCBmYWxzZSBcclxuICAgICAgICB0aGlzLmNhbnZhc0JnID0gby5jYW52YXNCZyB8fCAncmdiYSgwLDAsMCwwKSdcclxuICAgICAgICB0aGlzLmltYWdlU2l6ZSA9IG8uaW1hZ2VTaXplIHx8IFsyMCwyMF07XHJcblxyXG4gICAgICAgIC8vIGRyYWdvdXQgZnVuY3Rpb25cclxuICAgICAgICB0aGlzLmRyYWcgPSBvLmRyYWcgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLmRyYWdvdXQgPSBvLmRyYWdvdXQgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLmRyYWdzdGFydCA9IG8uZHJhZ3N0YXJ0IHx8IG51bGxcclxuICAgICAgICB0aGlzLmRyYWdlbmQgPSBvLmRyYWdlbmQgfHwgbnVsbFxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMF0uc3R5bGUuYmFja2dyb3VuZCA9ICcjRkYwMDAwJ1xyXG4gICAgICAgIC8vL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRMaXN0KCB0aGlzLmxpc3QgKTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICBpZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbiggdHJ1ZSApXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggKz0gdGhpcy5tdG9wXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGltYWdlIGxpc3RcclxuXHJcbiAgICBwcmVsb2FkSW1hZ2UgKCkge1xyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5saXN0Lmxlbmd0aDsgaSsrICkgdGhpcy50bXBVcmwucHVzaCggdGhpcy5saXN0W2ldICk7XHJcbiAgICAgICAgdGhpcy5sb2FkT25lKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbmV4dEltZyAoKSB7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuYyA9PT0gbnVsbCkgcmV0dXJuXHJcblxyXG4gICAgICAgIHRoaXMudG1wVXJsLnNoaWZ0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMudG1wVXJsLmxlbmd0aCA9PT0gMCApeyBcclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYWRkSW1hZ2VzKCk7XHJcbiAgICAgICAgICAgIC8qdGhpcy5zZXRMaXN0KCB0aGlzLmxpc3QgKTtcclxuICAgICAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oKTsqL1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB0aGlzLmxvYWRPbmUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbG9hZE9uZSgpe1xyXG5cclxuICAgICAgICBsZXQgc2VsZiA9IHRoaXNcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudG1wVXJsWzBdO1xyXG4gICAgICAgIGxldCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuICAgICAgICBpbWcuc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6JytzZWxmLmltYWdlU2l6ZVswXSsncHg7IGhlaWdodDonK3NlbGYuaW1hZ2VTaXplWzFdKydweCc7XHJcbiAgICAgICAgaW1nLnNldEF0dHJpYnV0ZSgnc3JjJywgdGhpcy5wYXRoICsgbmFtZSArIHRoaXMuZm9ybWF0ICk7XHJcblxyXG4gICAgICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVsyXSA9IGltZy53aWR0aDtcclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbM10gPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgICAgICBzZWxmLnRtcEltYWdlW25hbWVdID0gaW1nO1xyXG4gICAgICAgICAgICBzZWxmLm5leHRJbWcoKTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgJiYgdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHRoaXMuaCAtIHRoaXMuYmFzZUggKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnNjcm9sbCAmJiAoIGwueCA+ICh0aGlzLnNhK3RoaXMuc2ItdGhpcy5zcykpICkgcmV0dXJuICdzY3JvbGwnO1xyXG4gICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIKzIgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnNjcm9sbCAmJiAoIGwueCA+ICh0aGlzLnNhK3RoaXMuc2ItdGhpcy5zcykpICkgcmV0dXJuICdzY3JvbGwnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdEl0ZW1zICggeSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy5pdGVtc1xyXG5cclxuICAgICAgICAvKmlmKHRoaXMuaGlkZUN1cnJlbnQpe1xyXG4gICAgICAgICAgICAvL2l0ZW1zID0gWy4uLnRoaXMuaXRlbXNdXHJcbiAgICAgICAgICAgIGl0ZW1zID0gdGhpcy5pdGVtcy5zbGljZSh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICB9Ki9cclxuXHJcbiAgICAgICAgbGV0IGkgPSBpdGVtcy5sZW5ndGgsIGl0ZW0sIGEsIGI7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBhID0gaXRlbS5wb3N5ICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBiID0gaXRlbS5wb3N5ICsgdGhpcy5pdGVtSGVpZ2h0ICsgMSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgaWYoIHkgPj0gYSAmJiB5IDw9IGIgKXsgXHJcbiAgICAgICAgICAgICAgICBuYW1lID0gJ2l0ZW0nICsgaTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMClcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDEpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlSXRlbSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQuc2VsZWN0ICYmIG1vZGU9PT0wKSBtb2RlID0gMlxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1blNlbGVjdGVkKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMClcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIHRoaXMucmVzZXRJdGVtcygpXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgyKVxyXG4gICAgICAgIHRoaXMuY3VycmVudC5zZWxlY3QgPSB0cnVlXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldEl0ZW1zKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGhpZGVBY3RpdmUoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5oaWRlQ3VycmVudCApIHJldHVyblxyXG4gICAgICAgIC8vaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl0aGlzLnRtcElkID0gdGhpcy5jdXJyZW50LmlkXHJcbiAgICAgICAgdGhpcy5yZXNldEhpZGUoKVxyXG4gICAgICAgIC8vdGhpcy5pdGVtc1t0aGlzLnRtcElkXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByZXNldEhpZGUoKSB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihpPT09dGhpcy50bXBJZCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gLTE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmhlaWdodCA9IHRoaXMuaXRlbUhlaWdodCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKihpLTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vdGhpcy5pdGVtc1tpXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvKnRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7Ki9cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgyKVxyXG4gICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyB0aGlzLmN1cnJlbnQuaWQgXVxyXG4gICAgICAgICAgICAgICAgLy90aGlzLnRtcElkID0gdGhpcy5jdXJyZW50LmlkXHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3RhYmxlICkgdGhpcy5zZWxlY3RlZCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy90aGlzLnNlbmQoIHRoaXMucmVmT2JqZWN0ICE9PSBudWxsID8gdGhpcy5yZWZPYmplY3RbIHRoaXMubGlzdFt0aGlzLmN1cnJlbnQuaWRdXSA6IHRoaXMudmFsdWUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZCggdGhpcy52YWx1ZSApXHJcblxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpXHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIG51cDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuICAgICAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDEpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncy1yZXNpemUnKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDEpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgyKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy51cGRhdGUoICggZS5jbGllbnRZIC0gdG9wICApIC0gKCB0aGlzLnNoKjAuNSApICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdG9wID0gdGhpcy56b25lLnkrdGhpcy5iYXNlSC0yO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGUoICggZS5jbGllbnRZIC0gdG9wICApIC0gKCB0aGlzLnNoKjAuNSApICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9pZih0aGlzLmlzRG93bikgdGhpcy5saXN0bW92ZShlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5hbWUgIT09IHRoaXMucHJldk5hbWUgKSBudXAgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSBuYW1lO1xyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgcmV0dXJuIGZhbHNlOyBcclxuICAgICAgICB0aGlzLnB5ICs9IGUuZGVsdGEqMTA7XHJcbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5weSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygndGhpcyBpcyByZXNldCcpXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZVNjcm9sbCAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnNNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc2Nyb2xsZXIuc3R5bGU7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHMuYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHMuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHMuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zTW9kZSA9IG1vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kZVRpdGxlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMudE1vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50TW9kZSA9IG1vZGU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyTGlzdCAoKSB7XHJcblxyXG4gICAgICAgIHdoaWxlICggdGhpcy5saXN0SW4uY2hpbGRyZW4ubGVuZ3RoICkgdGhpcy5saXN0SW4ucmVtb3ZlQ2hpbGQoIHRoaXMubGlzdEluLmxhc3RDaGlsZCApO1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGlzdCAoIGxpc3QgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJMaXN0KCk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IGxpc3Q7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG5cclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5oaWRlQ3VycmVudD8gdGhpcy5sZW5ndGgtMSA6IHRoaXMubGVuZ3RoXHJcblxyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IHRoaXMuZnVsbCA/IGxuZyA6IDU7XHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gbG5nIDwgdGhpcy5tYXhJdGVtID8gbG5nIDogdGhpcy5tYXhJdGVtO1xyXG5cclxuICAgICAgICB0aGlzLm1heEhlaWdodCA9IHRoaXMubWF4SXRlbSAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIFxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5tYXggPSBsbmcgKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICB0aGlzLnJhdGlvID0gdGhpcy5tYXhIZWlnaHQgLyB0aGlzLm1heDtcclxuICAgICAgICB0aGlzLnNoID0gdGhpcy5tYXhIZWlnaHQgKiB0aGlzLnJhdGlvO1xyXG4gICAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heEhlaWdodCAtIHRoaXMuc2g7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArICdweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICl7IFxyXG4gICAgICAgICAgICB0aGlzLnd3ID0gdGhpcy5zYiAtIHRoaXMuc3M7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgdGhpcy50bXBDdHggPSB0aGlzLnRtcENhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFN0eWxlID0gdGhpcy5jYW52YXNCZ1xyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGl0ZW0sIG47Ly8sIGwgPSB0aGlzLnNiO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBuID0gdGhpcy5saXN0W2ldO1xyXG4gICAgICAgICAgICBpdGVtID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrKHRoaXMubSsxKSsncHg7IHdpZHRoOicrdGhpcy53dysncHg7IGhlaWdodDonK3RoaXMuaXRlbUhlaWdodCsncHg7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaXRlbUhlaWdodC0yKSsncHg7IGNvbG9yOicrdGhpcy5jb2xvcnMudGV4dCsnOyBiYWNrZ3JvdW5kOicrdGhpcy5jb2xvcnMuYmFjaysnOycgKTtcclxuICAgICAgICAgICAgaXRlbS5uYW1lID0gJ2l0ZW0nKyBpXHJcbiAgICAgICAgICAgIGl0ZW0uaWQgPSBpO1xyXG4gICAgICAgICAgICBpdGVtLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGl0ZW0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqaTtcclxuICAgICAgICAgICAgdGhpcy5saXN0SW4uYXBwZW5kQ2hpbGQoIGl0ZW0gKTtcclxuICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKCBpdGVtICk7XHJcblxyXG4gICAgICAgICAgICBpZiggbiA9PT0gdGhpcy52YWx1ZSApIHRoaXMuY3VycmVudCA9IGl0ZW1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW25dICk7XHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0udGV4dENvbnRlbnQgPSBuO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjID0gbmV3IEltYWdlKClcclxuICAgICAgICAgICAgICAgIGMuc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUubWFyZ2luTGVmdCA9ICh0aGlzLmltYWdlU2l6ZVswXSs4KSsncHgnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8qbGV0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG5cclxuICAgICAgICAgICAgICAgIGMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgYy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gdGhpcy5jYW52YXNCZ1xyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSkqL1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjpyZWxhdGl2ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsgZGlzcGxheTppbmxpbmUtYmxvY2s7IGZsb2F0OmxlZnQ7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXJpZ2h0OjVweDsgdG9wOjJweCdcclxuICAgICAgICAgICAgICAgLy8gYy5zdHlsZS5jc3NUZXh0ID0nIGZsZXgtc2hyaW5rOiAwOydcclxuXHJcbiAgICAgICAgICAgICAgICBjLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAnZGlzcGxheTpmbGV4OyBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OyBmbGV4LXdyYXA6IHdyYXA7J1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLmZsb2F0ID0gJ3JpZ2h0J1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hcHBlbmRDaGlsZCggYyApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBJbWFnZVtuXSA9IGNcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmRyYWdvdXQgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmltZyA9IHRoaXMudG1wSW1hZ2Vbbl1cclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmRyYWdnYWJsZSA9IFwidHJ1ZVwiXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnc3RhcnQnLCB0aGlzLmRyYWdzdGFydCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWcnLCB0aGlzLmRyYWcgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIGZ1bmN0aW9uKCl7IFJvb3RzLmZha2VVcCgpOyB9ICk7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCB0aGlzLmRyYWdlbmQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBlbmQnKSovIH0uYmluZCh0aGlzKSApXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIGZ1bmN0aW9uKCl7Y29uc29sZS5sb2coJ2Ryb3AnKX0pXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3RhYmxlICkgdGhpcy5zZWxlY3RlZCgpXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0ltYWdlKCBuYW1lLCBpbWFnZSwgeCx5LHcsaCApe1xyXG5cclxuICAgICAgICB0aGlzLnRtcEN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKTtcclxuICAgICAgICB0aGlzLnRtcEN0eC5kcmF3SW1hZ2UoaW1hZ2UsIHgsIHksIHcsIGgsIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuICAgICAgICB0aGlzLnRtcEltYWdlW25hbWVdLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG5cclxuICAgICAgICAvKmxldCBjID0gdGhpcy50bXBJbWFnZVtuYW1lXVxyXG4gICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIHgsIHksIHcsIGgsIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSkqL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhZGRJbWFnZXMgKCl7XHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMubGlzdC5sZW5ndGg7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPGxuZzsgaSsrICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2VbdGhpcy5saXN0W2ldXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICBpZighaXNOYU4odmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyB2YWx1ZSBdO1xyXG4gICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wSWQgPSB2YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VG9wSXRlbSAoKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdGljVG9wICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1dpdGhJbWFnZSApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMucHJlTG9hZENvbXBsZXRlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50ZXh0QWxpZ24gPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLmFwcGVuZENoaWxkKCB0aGlzLmNhbnZhcyApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgaW1nID0gdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMl0sIHRoaXMuaW1hZ2VTaXplWzNdLCAwLDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSApO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50ZXh0QWxpZ24gPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLmFwcGVuZENoaWxkKCB0aGlzLmNhbnZhcyApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwICk7XHJcblxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyAtLS0tLSBMSVNUXHJcblxyXG4gICAgdXBkYXRlICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLnNjcm9sbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgeSA9IHkgPCAwID8gMCA6IHk7XHJcbiAgICAgICAgeSA9IHkgPiB0aGlzLnJhbmdlID8gdGhpcy5yYW5nZSA6IHk7XHJcblxyXG4gICAgICAgIHRoaXMudG9wTGlzdCA9IC1NYXRoLmZsb29yKCB5IC8gdGhpcy5yYXRpbyApO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RJbi5zdHlsZS50b3AgPSB0aGlzLnRvcExpc3QrJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLnRvcCA9IE1hdGguZmxvb3IoIHkgKSAgKyAncHgnO1xyXG5cclxuICAgICAgICB0aGlzLnB5ID0geTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcbiAgICAgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCBmaXJzdCApIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggMCApXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iYXNlSCArIDU7XHJcbiAgICAgICAgaWYoICF0aGlzLnNjcm9sbCApe1xyXG4gICAgICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIICsgNSArIHRoaXMubWF4O1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXsgXHJcbiAgICAgICAgICAgIHRoaXMuem9uZS55IC09IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgaWYoIWZpcnN0KSB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KCAtdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMubGlzdEluLmNoaWxkcmVuW2ldLnN0eWxlLndpZHRoID0gdGhpcy53dyArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGlmKHNbMl09PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzJdLmxlZnQgPSBkICsncHgnO1xyXG5cclxuICAgICAgICBzWzNdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gZCArICdweCc7XHJcblxyXG4gICAgICAgIHNbNF0ubGVmdCA9IGQgKyB3IC0gMTUgKyAncHgnO1xyXG5cclxuICAgICAgICB0aGlzLnd3ID0gdztcclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApIHRoaXMud3cgPSB3LXRoaXMuc3M7XHJcbiAgICAgICAgaWYodGhpcy5pc09wZW4pIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgTnVtZXJpYyBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMF1cclxuICAgICAgICB0aGlzLm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaW52bXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pc1NpbmdsZSA9IHRydWVcclxuICAgICAgICB0aGlzLmlzQW5nbGUgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMuaXNWZWN0b3IgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5pc0FuZ2xlICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNBbmdsZSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5tdWx0eSA9IFRvb2xzLnRvcmFkXHJcbiAgICAgICAgICAgIHRoaXMuaW52bXVsdHkgPSBUb29scy50b2RlZ1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc0RyYWcgPSBvLmRyYWcgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICBpZiggIWlzTmFOKG8udmFsdWUpICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW28udmFsdWVdXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTaW5nbGUgPSBmYWxzZVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW11cclxuICAgICAgICAgICAgICAgIGlmKCBvLnZhbHVlLnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSBvLnZhbHVlLnhcclxuICAgICAgICAgICAgICAgIGlmKCBvLnZhbHVlLnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSBvLnZhbHVlLnlcclxuICAgICAgICAgICAgICAgIGlmKCBvLnZhbHVlLnogIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMl0gPSBvLnZhbHVlLnpcclxuICAgICAgICAgICAgICAgIGlmKCBvLnZhbHVlLncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSBvLnZhbHVlLndcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTaW5nbGUgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZlY3RvciA9IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIGJnXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICcgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgdG9wOjRweDsgd2lkdGg6MHB4OyBoZWlnaHQ6JyArICh0aGlzLmgtOCkgKyAncHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXVxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNBbmdsZSApIHRoaXMudmFsdWVbaV0gPSAodGhpcy52YWx1ZVtpXSAqIDE4MCAvIE1hdGguUEkpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uIClcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgY29sb3I6JyArIGNjLnRleHQgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5iYWNrICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycpXHJcbiAgICAgICAgICAgIGlmKG8uY2VudGVyKSB0aGlzLmNbMitpXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLmlzTnVtID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMFxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuc2VsZWN0SWQgPSAzICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jdXJzb3JJZCA9IDQgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbIHRoaXMuY3Vyc29ySWQgXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgaWYoIG5hbWUgIT09ICcnICl7IFxyXG4gICAgICAgICAgICBcdHRoaXMuY3VycmVudCA9IG5hbWVcclxuICAgICAgICAgICAgXHR0aGlzLnByZXYgPSB7IHg6ZS5jbGllbnRYLCB5OmUuY2xpZW50WSwgZDowLCB2OiB0aGlzLmlzU2luZ2xlID8gcGFyc2VGbG9hdCh0aGlzLnZhbHVlKSA6IHBhcnNlRmxvYXQoIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdICkgfVxyXG4gICAgICAgICAgICBcdHRoaXMuc2V0SW5wdXQoIHRoaXMuY1sgMyArIHRoaXMuY3VycmVudCBdIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IHggPSAwXHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnJyApIHRoaXMuY3Vyc29yKClcclxuICAgICAgICBlbHNleyBcclxuICAgICAgICBcdGlmKCF0aGlzLmlzRHJhZykgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICBcdGVsc2UgdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0RyYWcgKXtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApe1xyXG5cclxuICAgICAgICAgICAgXHR0aGlzLnByZXYuZCArPSAoIGUuY2xpZW50WCAtIHRoaXMucHJldi54ICkgLSAoIGUuY2xpZW50WSAtIHRoaXMucHJldi55IClcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgbiA9IHRoaXMucHJldi52ICsgKCB0aGlzLnByZXYuZCAqIHRoaXMuc3RlcClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSA9IHRoaXMubnVtVmFsdWUobilcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIHRoaXMuY3VycmVudCBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVt0aGlzLmN1cnJlbnRdXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZSgpXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnggPSBlLmNsaWVudFhcclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi55ID0gZS5jbGllbnRZXHJcblxyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZVxyXG4gICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmlzRG93biApIHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueCAtM1xyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSB4IC09IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF1cclxuICAgICAgICBcdHJldHVybiB0aGlzLnVwSW5wdXQoIHgsIHRoaXMuaXNEb3duIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IHYueFxyXG4gICAgICAgICAgICBpZiggdi55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gdi55XHJcbiAgICAgICAgICAgIGlmKCB2LnogIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMl0gPSB2LnpcclxuICAgICAgICAgICAgaWYoIHYudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IHYud1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzU2luZ2xlID8gW3ZdIDogdiAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNhbWVTdHIgKCBzdHIgKXtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gc3RyXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gdGhpcy5udW1WYWx1ZSggdGhpcy52YWx1ZVtpXSAqIHRoaXMuaW52bXVsdHkgKVxyXG4gICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VuZCAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSB0cnVlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9iamVjdExpbmsgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdLmZyb21BcnJheSggdiApXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0gPSB2XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5jYWxsYmFjayApIHRoaXMuY2FsbGJhY2soIHYsIHRoaXMub2JqZWN0S2V5IClcclxuICAgICAgICB0aGlzLmlzU2VuZCA9IGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgZCA9IHRoaXMuY3VycmVudCAhPT0gLTEgPyB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdICsgNSA6IDBcclxuICAgICAgICBzW3RoaXMuY3Vyc29ySWRdLndpZHRoID0gJzFweCdcclxuICAgICAgICBzW3RoaXMuY3Vyc29ySWRdLmxlZnQgPSAoIGQgKyBjICkgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9ICB3ICArICdweCdcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm5cclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0uaW5uZXJIVE1MID0gJydcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gMCArICdweCdcclxuICAgICAgICBzW3RoaXMuY3Vyc29ySWRdLndpZHRoID0gMCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGFyID0gW11cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZVxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgIFx0aWYoIWlzTmFOKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKSl7IFxyXG4gICAgICAgICAgICAgICAgbGV0IG54ID0gdGhpcy5udW1WYWx1ZSggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBueFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IG54XHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIG5vdCBudW1iZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICBcdGFyW2ldID0gdGhpcy52YWx1ZVtpXSAqIHRoaXMubXVsdHlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnNlbmQoIHRoaXMuaXNTaW5nbGUgPyBhclswXSA6IGFyIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBSRVpJU0VcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuICAgICAgICBsZXQgc3ggPSB0aGlzLmNvbG9ycy5zeFxyXG4gICAgICAgIGxldCBzcyA9IHN4ICogKHRoaXMubG5nLTEpXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy5zYi1zcykgLyB0aGlzLmxuZy8vKCggdGhpcy5zYiArIHN4ICkgLyB0aGlzLmxuZyApLXN4XHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCA1ICogaSApKSwgdyBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCB0aGlzLnNhICsgKCB3ICogaSApKyggc3ggKiBpICkpLCB3IF1cclxuICAgICAgICAgICAgdGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ubGVmdCA9IHRoaXMudG1wW2ldWzBdICsgJ3B4J1xyXG4gICAgICAgICAgICBzWyAzICsgaSBdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gXCIuLi9jb3JlL1Byb3RvLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4uL2NvcmUvVG9vbHMuanNcIjtcclxuXHJcbmZ1bmN0aW9uIGVhc2UoeCwgbWluLCBtYXgsIHBvd2VyKSB7XHJcbiAgbGV0IG4gPSBtaW4gKyBNYXRoLnBvdygoeCAtIG1pbikgLyAobWF4IC0gbWluKSwgcG93ZXIpICogKG1heCAtIG1pbik7XHJcbiAgcmV0dXJuIG47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTbGlkZSBleHRlbmRzIFByb3RvIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHN1cGVyKG8pO1xyXG5cclxuICAgIGlmIChvLmVhc2luZyA8PSAwKSB0aHJvdyBcIkVhc2luZyBtdXN0IGJlID4gMFwiO1xyXG4gICAgdGhpcy5lYXNpbmcgPSBvLmVhc2luZyB8fCAxO1xyXG5cclxuICAgIHRoaXMuc2V0VHlwZU51bWJlcihvKTtcclxuXHJcbiAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgaWYgKG8ubW9kZSAhPT0gdW5kZWZpbmVkKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgIC8vdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IgPSB0aGlzLmNvbG9ycy5oaWRlO1xyXG5cclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzT3ZlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzRGVnID0gby5pc0RlZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICAgIFwiYm9yZGVyOm5vbmU7IGJhY2tncm91bmQ6bm9uZTsgd2lkdGg6NDdweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbM10gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBcIiB0b3A6MDsgaGVpZ2h0OlwiICsgdGhpcy5oICsgXCJweDtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYmFjayArXHJcbiAgICAgICAgXCI7IHRvcDoycHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDQpICtcclxuICAgICAgICBcInB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jWzVdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImxlZnQ6NHB4OyB0b3A6NXB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSAxMCkgK1xyXG4gICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1syXS5pc051bSA9IHRydWU7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5oZWlnaHQgPSAodGhpcy5oLTQpICsgJ3B4JztcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmxpbmVIZWlnaHQgPSAodGhpcy5oLTgpICsgJ3B4JztcclxuICAgIHRoaXMuY1syXS5zdHlsZS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmxpbmVIZWlnaHQgPSB0aGlzLmggLSAxMCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkge1xyXG4gICAgICBsZXQgcjEgPSA0LFxyXG4gICAgICAgIGgxID0gNCxcclxuICAgICAgICBoMiA9IDgsXHJcbiAgICAgICAgd3cgPSB0aGlzLmggLSA2LFxyXG4gICAgICAgIHJhID0gMTY7XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMikge1xyXG4gICAgICAgIHIxID0gMDtcclxuICAgICAgICBoMSA9IDI7XHJcbiAgICAgICAgaDIgPSA0O1xyXG4gICAgICAgIHJhID0gMjtcclxuICAgICAgICB3dyA9ICh0aGlzLmggLSA2KSAqIDAuNTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDMpIHRoaXMuY1s1XS5zdHlsZS52aXNpYmxlID0gXCJub25lXCI7XHJcblxyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuYm9yZGVyUmFkaXVzID0gcjEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5oZWlnaHQgPSBoMiArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9IHRoaXMuaCAqIDAuNSAtIGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuYm9yZGVyUmFkaXVzID0gcjEgKiAwLjUgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5oZWlnaHQgPSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLnRvcCA9IHRoaXMuaCAqIDAuNSAtIGgxICogMC41ICsgXCJweFwiO1xyXG5cclxuICAgICAgLy90aGlzLmNbNl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JvcmRlci1yYWRpdXM6JytyYSsncHg7IG1hcmdpbi1sZWZ0OicrKC13dyowLjUpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGxlZnQ6NHB4OyB0b3A6MnB4OyBoZWlnaHQ6JysodGhpcy5oLTQpKydweDsgd2lkdGg6Jyt3dysncHg7JyApO1xyXG4gICAgICB0aGlzLmNbNl0gPSB0aGlzLmRvbShcclxuICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICAgIFwiYm9yZGVyLXJhZGl1czpcIiArXHJcbiAgICAgICAgICByYSArXHJcbiAgICAgICAgICBcInB4OyBtYXJnaW4tbGVmdDpcIiArXHJcbiAgICAgICAgICAtd3cgKiAwLjUgK1xyXG4gICAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICAgIFwiOyBsZWZ0OjRweDsgdG9wOjNweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAgICh0aGlzLmggLSA2KSArXHJcbiAgICAgICAgICBcInB4OyB3aWR0aDpcIiArXHJcbiAgICAgICAgICB3dyArXHJcbiAgICAgICAgICBcInB4O1wiXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG5cclxuICB0ZXN0Wm9uZShlKSB7XHJcbiAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICBpZiAobC54ID09PSAtMSAmJiBsLnkgPT09IC0xKSByZXR1cm4gXCJcIjtcclxuXHJcbiAgICBpZiAobC54ID49IHRoaXMudHhsKSByZXR1cm4gXCJ0ZXh0XCI7XHJcbiAgICBlbHNlIGlmIChsLnggPj0gdGhpcy5zYSkgcmV0dXJuIFwic2Nyb2xsXCI7XHJcbiAgICBlbHNlIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb3VzZXVwKGUpIHtcclxuICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIHRoaXMubW91c2Vtb3ZlKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qaWYoIG5hbWUgPT09ICd0ZXh0JyApe1xyXG4gICAgICAgICAgICB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0sIGZ1bmN0aW9uKCl7IHRoaXMudmFsaWRhdGUoKSB9LmJpbmQodGhpcykgKTtcclxuICAgICAgICB9Ki9cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICBsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMubW9kZSgxKTtcclxuICAgICAgdGhpcy5jdXJzb3IoXCJ3LXJlc2l6ZVwiKTtcclxuICAgICAgLy99IGVsc2UgaWYobmFtZSA9PT0gJ3RleHQnKXtcclxuICAgICAgLy90aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHtcclxuICAgICAgbGV0IG5Ob3JtYWxpemVkID0gKGUuY2xpZW50WCAtICh0aGlzLnpvbmUueCArIHRoaXMuc2EpIC0gMykgLyB0aGlzLnd3O1xyXG5cclxuICAgICAgLy8gbG8gbWFwZW8gYWwgcmFuZ28gMCAuLi4gMVxyXG4gICAgICBuTm9ybWFsaXplZCA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIG5Ob3JtYWxpemVkKSk7XHJcblxyXG4gICAgICAvLyBhcGxpY28gZWFzaW5nXHJcbiAgICAgIGxldCBuRWFzZWQgPSBNYXRoLnBvdyhuTm9ybWFsaXplZCwgdGhpcy5lYXNpbmcpOyAvLyBlYXNpbmdcclxuXHJcbiAgICAgIGxldCBuTmV3ID0gbkVhc2VkICogdGhpcy5yYW5nZSArIHRoaXMubWluO1xyXG4gICAgICBsZXQgbk5ld1NsaWRlciA9IG5Ob3JtYWxpemVkICogdGhpcy5yYW5nZSArIHRoaXMubWluO1xyXG5cclxuICAgICAgdGhpcy5zbGlkZXJWYWx1ZSA9IHRoaXMubnVtVmFsdWUobk5ld1NsaWRlcik7XHJcblxyXG4gICAgICBsZXQgZGVsdGEgPSBuTmV3IC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICBsZXQgc3RlcHM7XHJcbiAgICAgIGlmIChkZWx0YSA+PSB0aGlzLnN0ZXAgfHwgZGVsdGEgPD0gdGhpcy5zdGVwKSB7XHJcbiAgICAgICAgc3RlcHMgPSBNYXRoLmZsb29yKGRlbHRhIC8gdGhpcy5zdGVwKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLm9sZCArIHN0ZXBzICogdGhpcy5zdGVwKTtcclxuICAgICAgICAvLyB2YWx1ZSB3aXRob3V0IGVhc2luZyBhcHBsaWVkXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgICAvL2NvbnNvbGUubG9nKFwibiwgbm9ybWFsaXplZCwgdmFsdWVcIiwgbk5ldywgbk5vcm1hbGl6ZWQsIHRoaXMudmFsdWUpO1xyXG4gICAgICBudXAgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudXA7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuXHJcbiAgICAgIGlmICh2ID4gdGhpcy5tYXgpIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgIH0gZWxzZSBpZiAodiA8IHRoaXMubWluKSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNldFZhbHVlKHYpO1xyXG4gICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy9rZXlkb3duOiBmdW5jdGlvbiAoIGUgKSB7IHJldHVybiB0cnVlOyB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHZhbGlkYXRlKCkge1xyXG4gICAgbGV0IG4gPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgaWYgKCFpc05hTihuKSkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZShuKTtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICB9IGVsc2UgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIC8vdGhpcy5jbGVhcklucHV0KCk7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5tb2RlKDApO1xyXG4gIH1cclxuXHJcbiAgbW9kZShtb2RlKSB7XHJcbiAgICBsZXQgcyA9IHRoaXMucztcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAvLyBzWzJdLmJvcmRlciA9ICcxcHggc29saWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuICAgICAgICBzWzVdLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0OyAvL2NjLmJ1dHRvbjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOiAvLyBzY3JvbGwgb3ZlclxyXG4gICAgICAgIC8vc1syXS5ib3JkZXIgPSAnMXB4IGRhc2hlZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuICAgICAgICBzWzVdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IC8vY2Mub3Zlcm9mZjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZSh1cCkge1xyXG4gICAgbGV0IG5vcm1hbGl6ZWQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgbGV0IHVuZWFzZWQgPVxyXG4gICAgICB0aGlzLmVhc2luZyA9PSAxID8gbm9ybWFsaXplZCA6IE1hdGgucG93KG5vcm1hbGl6ZWQsIDEgLyB0aGlzLmVhc2luZyk7XHJcblxyXG4gICAgbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogdW5lYXNlZCk7XHJcbiAgICAvL2xldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqICgodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2UpKTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gMykgdGhpcy5zWzVdLndpZHRoID0gd3cgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5zWzZdKSB0aGlzLnNbNl0ubGVmdCA9IHRoaXMuc2EgKyB3dyArIDMgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuXHJcbiAgICBpZiAodXApIHRoaXMuc2VuZCgpO1xyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy5zYiAtIHRoaXMuc2M7XHJcbiAgICB0aGlzLnd3ID0gdyAtIDY7XHJcblxyXG4gICAgbGV0IHR4ID0gdGhpcy5zYztcclxuICAgIGlmICh0aGlzLmlzVUkgfHwgIXRoaXMuc2ltcGxlKSB0eCA9IHRoaXMuc2MgKyAxMDtcclxuICAgIHRoaXMudHhsID0gdGhpcy53IC0gdHggKyAyO1xyXG5cclxuICAgIC8vbGV0IHR5ID0gTWF0aC5mbG9vcih0aGlzLmggKiAwLjUpIC0gODtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICBzWzJdLndpZHRoID0gdGhpcy5zYyAtIDYgKyBcInB4XCI7XHJcbiAgICBzWzJdLmxlZnQgPSB0aGlzLnR4bCArIDQgKyBcInB4XCI7XHJcbiAgICAvL3NbMl0udG9wID0gdHkgKyAncHgnO1xyXG4gICAgc1szXS5sZWZ0ID0gdGhpcy5zYSArIFwicHhcIjtcclxuICAgIHNbM10ud2lkdGggPSB3ICsgXCJweFwiO1xyXG4gICAgc1s0XS5sZWZ0ID0gdGhpcy5zYSArIFwicHhcIjtcclxuICAgIHNbNF0ud2lkdGggPSB3ICsgXCJweFwiO1xyXG4gICAgc1s1XS5sZWZ0ID0gdGhpcy5zYSArIDMgKyBcInB4XCI7XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUZXh0SW5wdXQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlICE9PSB1bmRlZmluZWQgPyBvLnZhbHVlIDogJyc7XHJcbiAgICAgICAgdGhpcy5wbGFjZUhvbGRlciA9IG8ucGxhY2VIb2xkZXIgfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZSA9IG8uZWRpdCAhPT0gdW5kZWZpbmVkID8gby5lZGl0IDogdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gdGV4dFxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonICsgKHRoaXMuaC0yKSArICdweDsgY29sb3I6JyArIGNjLnRleHQgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5iYWNrICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgLy8gZmFrZVxyXG4gICAgICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonICsgKHRoaXMuaC0yKSArICdweDsgYm9yZGVyOm5vbmU7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOicrY2MuYm9yZGVyKyc7JyApO1xyXG4gICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSAnJyApIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIFxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+PSB0aGlzLnNhICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggbmFtZSA9PT0gJ3RleHQnICkgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgLy9pZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICl7IHJldHVybjt9XHJcblxyXG4gICAgICAgIC8vaWYoIGwueCA+PSB0aGlzLnNhICkgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICAvL2Vsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RleHQnICkgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICBlbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBJbnB1dCggeCAtIHRoaXMuc2EgLTMsIHRoaXMuaXNEb3duICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2EgKyA1O1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAnMXB4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAoIGQgKyBlICkgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAgKCBkICsgZSApICArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICB3ICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgaWYoIXMpIHJldHVybjtcclxuICAgICAgICBzWzNdLndpZHRoID0gIDAgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gJ3QnXHJcbiAgICAgICAgc1s0XS53aWR0aCA9IDAgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWU7IFxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgICAgICBpZih0aGlzLnZhbHVlICE9PSAnJykgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgZWxzZSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBSRVpJU0VcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s1XS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1s1XS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBUaXRsZSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICBsZXQgcHJlZml4ID0gby5wcmVmaXggfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpyaWdodDsgd2lkdGg6NjBweDsgbGluZS1oZWlnaHQ6JysgKHRoaXMuaC04KSArICdweDsgY29sb3I6JyArIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaCA9PT0gMzEgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0udG9wID0gOCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSA4ICsgJ3B4JztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc1sxXS5qdXN0aWZ5Q29udGVudCA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIC8vc1sxXS50ZXh0QWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICBzWzFdLmZvbnRXZWlnaHQgPSBvLmZvbnRXZWlnaHQgfHwgJ2JvbGQnO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQuc3Vic3RyaW5nKDAsMSkudG9VcHBlckNhc2UoKSArIHRoaXMudHh0LnN1YnN0cmluZygxKS5yZXBsYWNlKFwiLVwiLCBcIiBcIik7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gcHJlZml4O1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQyKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcbiAgICAgICAgdGhpcy5zWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4JzsgLy8tIDUwICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0ubGVmdCA9IHRoaXMudyArICdweCc7Ly8tICggNTAgKyAyNiApICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q29sb3IoIGMgKSB7XHJcbiAgICAgICAgdGhpcy5zWzFdLmNvbG9yID0gY1xyXG4gICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMub25BY3RpZiA9IG8ub25BY3RpZiB8fCBmdW5jdGlvbigpe31cclxuXHJcbiAgICAgICAgLy9sZXQgcHJlZml4ID0gby5wcmVmaXggfHwgJyc7XHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICcgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrIGNjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuICAgICAgICAvL3RoaXMuY1syXS5zdHlsZS5jb2xvciA9IHRoaXMuZm9udENvbG9yO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IGJhY2tncm91bmQ6JyArIGNjLmlucHV0QmcgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuaW5wdXRCb3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnY3Vyc29yJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcbiAgICAgICAgdGhpcy5pc0FjdGlmID0gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3ZlcidcclxuICAgICAgICByZXR1cm4gJzAnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcbiAgICBcclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgLy90aGlzLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgLy90aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbIG5hbWUtMiBdO1xyXG4gICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhcHBseSAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8ICcnO1xyXG5cclxuICAgICAgICBpZiggdiAhPT0gdGhpcy52YWx1ZSApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSggMyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0xICkgdGhpcy5pc0FjdGlmID0gZmFsc2U7O1xyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0zICl7IFxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzQWN0aWYgKXsgdGhpcy5pc0FjdGlmID0gdHJ1ZTsgbj00OyB0aGlzLm9uQWN0aWYoIHRoaXMgKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7IHRoaXMuaXNBY3RpZiA9IGZhbHNlOyB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MiAmJiB0aGlzLmlzQWN0aWYgKSBuID0gNDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gYWN0aWZcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICh0aGlzLnNhKzgpICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBGaWxlcyB9IGZyb20gJy4uL2NvcmUvRmlsZXMuanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBCaXRtYXAgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMucmVmVGV4dHVyZSA9IG8udGV4dHVyZSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcblxyXG5cclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICcgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IGJhY2tncm91bmQ6JyArIGNjLmlucHV0QmcgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuaW5wdXRCb3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2xvYWQnIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJztcclxuICAgICAgICByZXR1cm4gJzAnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcbiAgICBcclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgLy90aGlzLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBGaWxlcy5sb2FkKCB7IGNhbGxiYWNrOnRoaXMuY2hhbmdlQml0bWFwLmJpbmQodGhpcykgfSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy90aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbIG5hbWUtMiBdO1xyXG4gICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBjaGFuZ2VCaXRtYXAoIGltZywgZm5hbWUgKXtcclxuXHJcbiAgICAgICAgaWYoIGltZyApe1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IGltZ1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCBmbmFtZSApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoICdudWxsJyApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhcHBseSAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8ICcnO1xyXG5cclxuICAgICAgICBpZiggdiAhPT0gdGhpcy52YWx1ZSApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pbWcgIT09IG51bGwgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLm9iamVjdExpbmsgIT09IG51bGwgKSB0aGlzLm9iamVjdExpbmtbIHRoaXMudmFsIF0gPSB2XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5jYWxsYmFjayApIHRoaXMuY2FsbGJhY2soIHRoaXMudmFsdWUsIHRoaXMuaW1nLCB0aGlzLm5hbWUgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSggMyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhazsgLy8gYWN0aWZcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICh0aGlzLnNhKzgpICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG59IiwiLy9pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0b3IgZXh0ZW5kcyBCdXR0b24ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgPT09IHVuZGVmaW5lZCApIG8uc2VsZWN0YWJsZSA9IHRydWVcclxuICAgICAgICBzdXBlciggbyApO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLnAgPSAxMDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudHh0O1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5pdHlwZSA9IG8uaXR5cGUgfHwgJ25vbmUnO1xyXG4gICAgICAgIHRoaXMudmFsID0gdGhpcy5pdHlwZTtcclxuXHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IHRoaXMuc3Znc1sgdGhpcy5pdHlwZSBdO1xyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTc7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5ncmFwaCwgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc1sxXS5tYXJnaW5MZWZ0ID0gMjAgKyAncHgnO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG5cclxuICAgICAgICAvL3VwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgbmFtZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkKCB0cnVlICk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdXQgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdmVyICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoNCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMik7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8qclNpemUgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgfSovXHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdHVzICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IG47XHJcbiAgICAgICAgICAgIGxldCBzID0gdGhpcy5zLCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zdGF0dXMgPSAxOyBzWzFdLmNvbG9yID0gY2MudGV4dDsgc1swXS5iYWNrZ3JvdW5kID0gJ25vbmUnOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zdGF0dXMgPSAyOyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnN0YXR1cyA9IDM7IHNbMV0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzWzBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnN0YXR1cyA9IDQ7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgIC8vIHJldHVybiB0aGlzLm1vZGUoIDEgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQgKCBiICl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcydcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnXHJcblxyXG5leHBvcnQgY2xhc3MgR3JpZCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICAvKnRoaXMudmFsdWVzID0gby52YWx1ZXMgfHwgW107XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF07Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIG8udmFsdWVzICl7XHJcbiAgICAgICAgICAgIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBTdHJpbmcgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gWyBvLnZhbHVlcyBdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8udmFsdWVzXHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy52YWx1ZXMucHVzaCggZyApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoO1xyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IG51bGw7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3BhY2VzID0gby5zcGFjZXMgfHwgWyBjYy5zeCwgY2Muc3kgXVxyXG4gICAgICAgIHRoaXMuYnNpemUgPSBvLmJzaXplIHx8IFsgOTAsIHRoaXMuaCBdO1xyXG5cclxuICAgICAgICB0aGlzLmJzaXplTWF4ID0gdGhpcy5ic2l6ZVswXVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ3JpZCA9IFsgMiwgTWF0aC5yb3VuZCggdGhpcy5sbmcgKiAwLjUgKSBdO1xyXG5cclxuICAgICAgICB0aGlzLmggPSAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuYnNpemVbMV0gKSArICggdGhpcy5ncmlkWzFdICogdGhpcy5zcGFjZXNbMV0gKSAvLysgNCAtICh0aGlzLm10b3AqMikgLy8rICh0aGlzLnNwYWNlc1sxXSAtIHRoaXMubXRvcCk7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICd0YWJsZScsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IHRvcDonKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7IGhlaWdodDphdXRvOyBib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7IGJvcmRlcjpub25lOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICd0YWJsZScsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0pKydweDsgYm9yZGVyOm5vbmU7JyApO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZCwgdGQsIHRyLCBzZWw7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IFtdOyBcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFggPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFkgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdHIgPSB0aGlzLmNbMl0uaW5zZXJ0Um93KCk7XHJcbiAgICAgICAgICAgIHRyLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG4gICAgICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGQgPSB0ci5pbnNlcnRDZWxsKCk7XHJcbiAgICAgICAgICAgICAgICB0ZC5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3Bvc2l0aW9uOnN0YXRpYzsgdG9wOjFweDsgd2lkdGg6Jyt0aGlzLmJzaXplWzBdKydweDsgaGVpZ2h0OicrKHRoaXMuYnNpemVbMV0tMikrJ3B4OyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBsZWZ0OmF1dG87IHJpZ2h0OmF1dG87IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JztcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b247XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgIGIuaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoIGIgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25zLnB1c2goYilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXQucHVzaCgxKVxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApXHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOnN0YXRpYzsgd2lkdGg6Jyt0aGlzLmJzaXplWzBdKydweDsgaGVpZ2h0OicrdGhpcy5ic2l6ZVsxXSsncHg7IHRleHQtYWxpZ246Y2VudGVyOyBsZWZ0OmF1dG87IHJpZ2h0OmF1dG87IGJhY2tncm91bmQ6bm9uZTsnXHJcbiAgICAgICAgICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoIGIgKVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZihqPT09MCkgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpyaWdodDsnO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OmxlZnQ7JztcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBuKys7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xO1xyXG5cclxuICAgICAgICBsLnkgKz0gdGhpcy5tdG9wXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IHR4ID0gdGhpcy50bXBYO1xyXG4gICAgICAgIGxldCB0eSA9IHRoaXMudG1wWTtcclxuXHJcbiAgICAgICAgbGV0IGlkID0gLTE7XHJcbiAgICAgICAgbGV0IGMgPSAtMTtcclxuICAgICAgICBsZXQgbGluZSA9IC0xO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5ncmlkWzBdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICBcdGlmKCBsLnggPiB0eFtpXVswXSAmJiBsLnggPCB0eFtpXVsxXSApIGMgPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaSA9IHRoaXMuZ3JpZFsxXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0eVtpXVswXSAmJiBsLnkgPCB0eVtpXVsxXSApIGxpbmUgPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoYyE9PS0xICYmIGxpbmUhPT0tMSl7XHJcbiAgICAgICAgICAgIGlkID0gYyArIChsaW5lKjIpO1xyXG4gICAgICAgICAgICBpZihpZD50aGlzLmxuZy0xKSBpZCA9IC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgdGhpcy5zZW5kKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIHRoaXMucmVzIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFx0dXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGUoIG4sIGkgKSApIHIgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLmJ1dHRvbnNcclxuICAgICAgICBsZXQgaSA9IGlkXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS50ZXh0Q29udGVudCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSwgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnN0eWxlLnBhZGRpbmcgPSAoIHkgfHwgMCApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0VyAoKSB7XHJcblxyXG4gICAgICAgIGxldCB2dyA9IHRoaXMuc3BhY2VzWzBdKjMgKyB0aGlzLmJzaXplTWF4KjIsIHJ6ID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHZ3ID4gdGhpcy53ICkge1xyXG4gICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gKCB0aGlzLnctKHRoaXMuc3BhY2VzWzBdKjMpICkgKiAwLjU7XHJcbiAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggdGhpcy5ic2l6ZVswXSAhPT0gdGhpcy5ic2l6ZU1heCApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSB0aGlzLmJzaXplTWF4O1xyXG4gICAgICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIXJ6ICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuYnV0dG9ucy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmJ1dHRvbnNbaV0uc3R5bGUud2lkdGggPSB0aGlzLmJzaXplWzBdICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnRlc3RXKCk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkO1xyXG5cclxuICAgICAgICB0aGlzLnRtcFggPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFkgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgaWYoaj09PTApe1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgLSAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLXRoaXMuYnNpemVbMF0sIG1pZCBdICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSArICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQsIG1pZCt0aGlzLmJzaXplWzBdIF0gKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1pZCA9IHRoaXMuc3BhY2VzWzFdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRtcFkucHVzaCggWyBtaWQsIG1pZCArIHRoaXMuYnNpemVbMV0gXSApO1xyXG4gICAgICAgICAgICBtaWQgKz0gdGhpcy5ic2l6ZVsxXSArIHRoaXMuc3BhY2VzWzFdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFkMkQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgLy90aGlzLm1hcmdpbiA9IDE1O1xyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKDAsMCk7XHJcbiAgICAgICAgdGhpcy5tYXhQb3MgPSA5MFxyXG5cclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMubWluID0gby5taW4gPT09IHVuZGVmaW5lZCA/IC0xIDogby5taW47XHJcbiAgICAgICAgdGhpcy5tYXggPSBvLm1heCA9PT0gdW5kZWZpbmVkID8gMSA6IG8ubWF4O1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gKHRoaXMubWF4IC0gdGhpcy5taW4pKjAuNTsgIFxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5yYW5nZSlcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIFxyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IDIgOiBvLnByZWNpc2lvbjtcclxuXHJcbiAgICAgICAgLyp0aGlzLmJvdW5kcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngxID0gby54MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MiA9IG8ueDIgfHwgMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MSA9IG8ueTEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTIgPSBvLnkyIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMubGVycFggPSB0aGlzLmxlcnAoIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiAsIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiApO1xyXG4gICAgICAgIHRoaXMubGVycFkgPSB0aGlzLmxlcnAoIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiAsIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiApO1xyXG5cclxuICAgICAgICB0aGlzLmFsZXJwWCA9IHRoaXMubGVycCggdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyLCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gKTtcclxuICAgICAgICB0aGlzLmFsZXJwWSA9IHRoaXMubGVycCggdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyLCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gKTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gKCBBcnJheS5pc0FycmF5KCBvLnZhbHVlICkgJiYgby52YWx1ZS5sZW5ndGggPT0gMiApID8gby52YWx1ZSA6IFsgMCwgMCBdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsgJ3B4JztcclxuXHJcbiAgICAgICAgLy8gVGl0bGVcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMudG9wIC09IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cclxuICAgICAgICAvLyBWYWx1ZVxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyAoIHRoaXMuaCAtIDIwICkgKyAncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicgKyBjYy50ZXh0ICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gUGFkXHJcblxyXG4gICAgICAgIGxldCBwYWQgPSB0aGlzLmdldFBhZDJkKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDIgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggcGFkLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gcGFkXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSgpXHJcblxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG5cclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ3BhZCc7XHJcblxyXG4gICAgICAgIC8qaWYoICggbC54ID49IHRoaXMubWFyZ2luICkgJiYgKCBsLnggPD0gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA+PSB0aGlzLnRvcCArIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPD0gdGhpcy50b3AgKyB0aGlzLncgLSB0aGlzLm1hcmdpbiApICkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BhZCc7XHJcbiAgICAgICAgfSovXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9yZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy50ZXN0Wm9uZShlKSA9PT0gJ3BhZCcgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgeCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKVxyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGxldCByID0gMjU2IC8gdGhpcy5kaWFtXHJcblxyXG4gICAgICAgIHggPSAtKHgqcilcclxuICAgICAgICB5ID0gLSh5KnIpXHJcblxyXG4gICAgICAgIHggPSBUb29scy5jbGFtcCggeCwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcbiAgICAgICAgeSA9IFRvb2xzLmNsYW1wKCB5LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuXHJcbiAgICAgICAgLy9sZXQgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG4gICAgICAgIC8vbGV0IHkgPSBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wO1xyXG5cclxuICAgICAgICAvKmlmKCB4IDwgdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHggPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHggPSB0aGlzLncgLSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA8IHRoaXMubWFyZ2luICkgeSA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47Ki9cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh4LHkpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zKCBbIHggLCB5IF0gKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5iYWNrLCAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5iYWNrb2ZmLCAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5vdmVyb2ZmLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0U2VsZWN0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICAvL2lmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcoKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA9PSAxICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kxJywgdGhpcy5wb3MueSwgMiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTInLCB0aGlzLnBvcy55LCAyICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDEnLCB0aGlzLnBvcy54LCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MicsIHRoaXMucG9zLngsIDMgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB0aGlzLnBvcy54LCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgdGhpcy5wb3MueSwgNCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRQb3MgKCBwICkge1xyXG5cclxuICAgICAgICAvL2lmKCBwID09PSB1bmRlZmluZWQgKSBwID0gWyB0aGlzLncgLyAyLCB0aGlzLncgLyAyIF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggcFswXSsxMjggLCBwWzFdKzEyOCApO1xyXG5cclxuICAgICAgICBsZXQgciA9IDEvdGhpcy5tYXhQb3NcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9ICgocFswXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAoKHBbMV0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2LCB1cCA9IGZhbHNlICkge1xyXG5cclxuICAgICAgICBpZiggdiA9PT0gdW5kZWZpbmVkICkgdiA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8qaWYgKCB2WzBdIDwgdGhpcy5ib3VuZHMueDEgKSB2WzBdID0gdGhpcy5ib3VuZHMueDE7XHJcbiAgICAgICAgaWYgKCB2WzBdID4gdGhpcy5ib3VuZHMueDIgKSB2WzBdID0gdGhpcy5ib3VuZHMueDI7XHJcbiAgICAgICAgaWYgKCB2WzFdIDwgdGhpcy5ib3VuZHMueTEgKSB2WzFdID0gdGhpcy5ib3VuZHMueTE7XHJcbiAgICAgICAgaWYgKCB2WzFdID4gdGhpcy5ib3VuZHMueTIgKSB2WzFdID0gdGhpcy5ib3VuZHMueTI7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzBdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMV0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoICgodGhpcy52YWx1ZVswXS90aGlzLnJhbmdlKSp0aGlzLm1heFBvcykrMTI4ICAsICgodGhpcy52YWx1ZVsxXS90aGlzLnJhbmdlKSp0aGlzLm1heFBvcykrMTI4IClcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnBvcylcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHVwICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qbGVycCggczEsIHMyLCBkMSwgZDIsIGMgPSB0cnVlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9ICggZDIgLSBkMSApIC8gKCBzMiAtIHMxICk7XHJcblxyXG4gICAgICAgIHJldHVybiBjID8gKCB2ICkgPT4geyBcclxuICAgICAgICAgICAgcmV0dXJuICggKCB2IDwgczEgPyBzMSA6IHYgPiBzMiA/IHMyIDogdiApIC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH0gOiAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgcmV0dXJuICggdiAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9XHJcblxyXG4gICAgfSovXHJcblxyXG59IiwiLy8gcHJvdG8vVHJlZUxpc3QuanNcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4uL2NvcmUvUm9vdHMuanNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUcmVlTGlzdCBleHRlbmRzIFByb3RvIHtcclxuXHRjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuXHRcdC8vIEFQSSBww7pibGljYSBlc3BlcmFkYTpcclxuXHRcdC8vIG8udHJlZSAob2JqL2FycmF5KSwgby52YWx1ZSAoYXJyYXkpXHJcblx0XHQvLyBvLmZvY3VzZWQgKGJvb2wpLCBvLmZvY3VzUGF0aCAoYXJyYXkpLCBvLmZvY3VzTGV2ZWwgKG51bWJlcilcclxuXHRcdC8vIG8udGFiSW5kZXgsIG8uaXRlbUluZGV4LCBvLm9uQ2hhbmdlIChmbilcclxuXHRcdG8uc2VsZWN0YWJsZSA9IHRydWU7XHJcblx0XHRvLm5hbWUgPSBvLm5hbWUgfHwgXCJUcmVlTGlzdFwiO1xyXG5cclxuXHRcdHN1cGVyKG8pO1xyXG5cdFx0dGhpcy5lbmFibGVIb3ZlciA9IG8uZW5hYmxlSG92ZXIgIT09IGZhbHNlO1xyXG5cclxuXHRcdC8vIERhdG9zICYgZXN0YWRvXHJcblx0XHR0aGlzLnRyZWUgPSBvLnRyZWUgfHwge307XHJcblx0XHR0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheShvLnZhbHVlKSA/IG8udmFsdWUuc2xpY2UoKSA6IFtdO1xyXG5cdFx0dGhpcy5mb2N1c2VkID0gISFvLmZvY3VzZWQ7XHJcblx0XHR0aGlzLmZvY3VzUGF0aCA9IEFycmF5LmlzQXJyYXkoby5mb2N1c1BhdGgpID8gby5mb2N1c1BhdGguc2xpY2UoKSA6IFtdO1xyXG5cdFx0dGhpcy5mb2N1c0xldmVsID0gdHlwZW9mIG8uZm9jdXNMZXZlbCA9PT0gXCJudW1iZXJcIiA/IG8uZm9jdXNMZXZlbCA6IC0xO1xyXG5cclxuXHRcdHRoaXMudGFiSW5kZXggPSBvLnRhYkluZGV4ID8/IG51bGw7XHJcblx0XHR0aGlzLml0ZW1JbmRleCA9IG8uaXRlbUluZGV4ID8/IG51bGw7XHJcblxyXG5cdFx0Ly8gQ2FsbGJhY2tcclxuXHRcdHRoaXMuY2hhbmdlQ2IgPVxyXG5cdFx0XHR0eXBlb2Ygby5vbkNoYW5nZSA9PT0gXCJmdW5jdGlvblwiID8gby5vbkNoYW5nZSA6ICgpID0+IHt9O1xyXG5cclxuXHRcdC8vIExheW91dCBpbnRlcm5vIC8gcHVibGljYWNpw7NuIGRlIGFsdHVyYVxyXG5cdFx0dGhpcy5saW5lSCA9IHRoaXMuaDsgLy8gYWx0byBkZSBVTkEgZmlsYVxyXG5cdFx0dGhpcy5sZXZlbEdhcCA9IHRoaXMuY29sb3JzLnN5IHx8IDI7IC8vIHNlcGFyYWNpw7NuIHZlcnRpY2FsIGVudHJlIG5pdmVsZXNcclxuXHRcdHRoaXMubGVhZk1heCA9IDA7IC8vIHNlIGNhbGN1bGEgZW4gclNpemUoKVxyXG5cclxuXHRcdC8vIE1vZGVsbyB2aXN1YWxcclxuXHRcdHRoaXMubGV2ZWxzID0gW107IC8vIFt7dHlwZTonbWFwJ3wnbGlzdCcsIGl0ZW1zOlt7a2V5LGxhYmVsLHpvbmV9XSwgem9uZTp7eCx5LHcsaH19Li4uXVxyXG5cdFx0dGhpcy5pdGVtc0RvbSA9IFtdOyAvLyBlc3Blam8gRE9NIHBvciBuaXZlbFxyXG5cdFx0dGhpcy5ob3ZlciA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcblx0XHQvLyDwn5S4IE5VRVZPOiByZWNvcmRhciBsYSDDumx0aW1hIGhvamEgc2VsZWNjaW9uYWRhIChwZXJzaXN0ZW50ZSlcclxuXHRcdHRoaXMubGFzdExlYWYgPSB7IHBhcmVudFBhdGg6IFtdLCBrZXk6IG51bGwgfTsgLy8gcGFyZW50UGF0aCBlcyBsYSBydXRhIGhhc3RhIGVsIG1hcGEgcGFkcmVcclxuXHJcblx0XHQvLyBDb250ZW5lZG9yIGludGVybm8gKGFic29sdXRvKVxyXG5cdFx0dGhpcy5jWzJdID0gdGhpcy5kb20oXHJcblx0XHRcdFwiZGl2XCIsXHJcblx0XHRcdHRoaXMuY3NzLmJhc2ljICsgXCJsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBoZWlnaHQ6MTAwJTtcIlxyXG5cdFx0KTtcclxuXHRcdHRoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHJcblx0XHQvLyBTaSBlbCB2YWxvciBpbmljaWFsIHlhIGFwdW50YSBhIHVuYSBob2phIHbDoWxpZGEsIHJlY29yZGFyIGVzYSBob2phXHJcblx0XHR0aGlzLl9tYXliZVVwZGF0ZUxhc3RMZWFmRnJvbVZhbHVlKCk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IEhlbHBlcnMgZGUgdGlwbyA9PT09PT09XHJcblx0c3RhdGljIGlzTWFwKG5vZGUpIHtcclxuXHRcdHJldHVybiBub2RlICYmIHR5cGVvZiBub2RlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG5vZGUpO1xyXG5cdH1cclxuXHRzdGF0aWMgaXNMaXN0KG5vZGUpIHtcclxuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KG5vZGUpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBSZWNvcnJpZG8gZGUgZGF0b3MgPT09PT09PVxyXG5cdGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG5cdFx0bGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcblx0XHRcdFx0aWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpXHJcblx0XHRcdFx0XHRyZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG5cdFx0XHRcdG5vZGUgPSBub2RlW3BhdGhbaV1dO1xyXG5cdFx0XHR9IGVsc2UgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkge1xyXG5cdFx0XHRcdC8vIExsZWdhbW9zIGEgdW5hIGxpc3RhOiB5YSBubyBoYXkgbcOhcyBjbGF2ZXMgdsOhbGlkYXNcclxuXHRcdFx0XHRpZiAoaSA8IHBhdGgubGVuZ3RoKSByZXR1cm4geyBub2RlLCBkZXB0aDogaSB9O1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB7IG5vZGUsIGRlcHRoOiBwYXRoLmxlbmd0aCB9O1xyXG5cdH1cclxuXHJcblx0Ly8gQXV0b2NvbXBsZXRhcjogYmFqYSBwb3IgcHJpbWVyYXMgY2xhdmVzIGRlIGNhZGEgbWFwYSBoYXN0YSBhbGNhbnphciB1bmEgbGlzdGFcclxuXHRhdXRvQ29tcGxldGVUb0xlYWYoYmFzZVBhdGgpIHtcclxuXHRcdGxldCB7IG5vZGUgfSA9IHRoaXMuZ2V0Tm9kZUF0UGF0aChiYXNlUGF0aCk7XHJcblx0XHRjb25zdCBwYXRoID0gYmFzZVBhdGguc2xpY2UoKTtcclxuXHRcdHdoaWxlIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcblx0XHRcdGlmICgha2V5cy5sZW5ndGgpIGJyZWFrO1xyXG5cdFx0XHRjb25zdCBrMCA9IGtleXNbMF07XHJcblx0XHRcdHBhdGgucHVzaChrMCk7XHJcblx0XHRcdG5vZGUgPSBub2RlW2swXTtcclxuXHRcdH1cclxuXHRcdC8vIFNpIHRlcm1pbmEgZW4gbGlzdGEsIE5PIGFncmVnYSB1biDDrXRlbSBmaW5hbCBkZSBsYSBob2phXHJcblx0XHRyZXR1cm4gcGF0aDtcclxuXHR9XHJcblxyXG5cdC8vIFJ1dGEgYWN0aXZhIChmb2N1c1BhdGggc2kgZm9jdXNlZCwgc2lubyB2YWx1ZSlcclxuXHRnZXRBY3RpdmVQYXRoKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZm9jdXNlZCA/IHRoaXMuZm9jdXNQYXRoIDogdGhpcy52YWx1ZTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gVGFtYcOxbyBkZSBob2phIG3DoXhpbW8gKHBhcmEgbGF5b3V0IGVzdGFibGUpID09PT09PT1cclxuXHRjb21wdXRlTGVhZk1heChub2RlID0gdGhpcy50cmVlKSB7XHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheShub2RlKSkgcmV0dXJuIG5vZGUubGVuZ3RoO1xyXG5cdFx0aWYgKCFub2RlIHx8IHR5cGVvZiBub2RlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gMDtcclxuXHRcdGxldCBtID0gMDtcclxuXHRcdGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG5cdFx0XHRtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PVxyXG5cdGJ1aWxkTGV2ZWxzKCkge1xyXG5cdFx0dGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuXHRcdGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcblx0XHRsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuXHRcdGxldCBsZXZlbCA9IDA7XHJcblxyXG5cdFx0d2hpbGUgKG5vZGUpIHtcclxuXHRcdFx0aWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcblx0XHRcdFx0Ly8gTml2ZWwgaW50ZXJtZWRpbzogY2xhdmVzIGRlbCBtYXBhIChob3Jpem9udGFsKVxyXG5cdFx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuXHRcdFx0XHRpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuXHRcdFx0XHR0aGlzLmxldmVscy5wdXNoKHtcclxuXHRcdFx0XHRcdHR5cGU6IFwibWFwXCIsXHJcblx0XHRcdFx0XHRpdGVtczoga2V5cy5tYXAoKGspID0+ICh7XHJcblx0XHRcdFx0XHRcdGtleTogayxcclxuXHRcdFx0XHRcdFx0bGFiZWw6IGssXHJcblx0XHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCB9LFxyXG5cdFx0XHRcdFx0fSkpLFxyXG5cdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiB0aGlzLmxpbmVIIH0sXHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IG5leHRLZXkgPSBhY3RpdmVQYXRoW2xldmVsXTtcclxuXHRcdFx0XHRpZiAoIW5leHRLZXkgfHwgIW5vZGUuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIGJyZWFrO1xyXG5cdFx0XHRcdG5vZGUgPSBub2RlW25leHRLZXldO1xyXG5cdFx0XHR9IGVsc2UgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkge1xyXG5cdFx0XHRcdC8vIE5pdmVsIGhvamE6IGxpc3RhIHZlcnRpY2FsXHJcblx0XHRcdFx0Y29uc3QgaXRlbXMgPSBub2RlLm1hcCgobGFiZWwpID0+ICh7XHJcblx0XHRcdFx0XHRrZXk6IGxhYmVsLFxyXG5cdFx0XHRcdFx0bGFiZWwsXHJcblx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAgfSxcclxuXHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0Y29uc3QgaExpc3QgPSBNYXRoLm1heChpdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCkgKiB0aGlzLmxpbmVIO1xyXG5cdFx0XHRcdHRoaXMubGV2ZWxzLnB1c2goe1xyXG5cdFx0XHRcdFx0dHlwZTogXCJsaXN0XCIsXHJcblx0XHRcdFx0XHRpdGVtcyxcclxuXHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogaExpc3QgfSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0XHRsZXZlbCsrO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBMYXlvdXQgKHpvbmFzICYgRE9NKSA9PT09PT09XHJcblx0bGF5b3V0TGV2ZWxzKCkge1xyXG5cdFx0Y29uc3QgY29udGVudFggPSAodGhpcy5zYSB8fCAxMDApICsgODsgLy8gY29sdW1uYSBkZSBsYWJlbCArIHBhZGRpbmdcclxuXHRcdGNvbnN0IHBhZFJpZ2h0ID0gODtcclxuXHRcdGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIGNvbnRlbnRYIC0gcGFkUmlnaHQ7XHJcblxyXG5cdFx0bGV0IHkgPSAwO1xyXG5cclxuXHRcdC8vIEFqdXN0YXIgaXRlbXNEb20gYSBjYW50aWRhZCBkZSBuaXZlbGVzXHJcblx0XHR3aGlsZSAodGhpcy5pdGVtc0RvbS5sZW5ndGggPCB0aGlzLmxldmVscy5sZW5ndGgpXHJcblx0XHRcdHRoaXMuaXRlbXNEb20ucHVzaChbXSk7XHJcblx0XHRmb3IgKGxldCBMID0gdGhpcy5sZXZlbHMubGVuZ3RoOyBMIDwgdGhpcy5pdGVtc0RvbS5sZW5ndGg7IEwrKykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHRoaXMuaXRlbXNEb21bTF0pXHJcblx0XHRcdFx0aWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5pdGVtc0RvbS5sZW5ndGggPSB0aGlzLmxldmVscy5sZW5ndGg7XHJcblxyXG5cdFx0Zm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG5cdFx0XHRjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuXHRcdFx0aWYgKGx2bC50eXBlID09PSBcIm1hcFwiKSB7XHJcblx0XHRcdFx0Y29uc3QgbiA9IE1hdGgubWF4KDEsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG5cdFx0XHRcdGNvbnN0IGNlbGxXID0gTWF0aC5mbG9vcih3IC8gbik7XHJcblx0XHRcdFx0bHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiB0aGlzLmxpbmVIIH07XHJcblx0XHRcdFx0bGV0IHggPSBjb250ZW50WDtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcblx0XHRcdFx0XHRpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5saW5lSCB9O1xyXG5cdFx0XHRcdFx0Y29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG5cdFx0XHRcdFx0dGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgXCJtYXBcIik7XHJcblx0XHRcdFx0XHR4ICs9IGNlbGxXO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgY2VsZGFzXHJcblx0XHRcdFx0dGhpcy5fcHJ1bmVSb3coTCwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcblx0XHRcdFx0eSArPSB0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcDtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBsaXN0YS9ob2phOiByZXNlcnZhciBoIHNlZ8O6biBsZWFmTWF4XHJcblx0XHRcdFx0Y29uc3QgbiA9IGx2bC5pdGVtcy5sZW5ndGg7XHJcblx0XHRcdFx0Y29uc3QgaExpc3QgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuXHRcdFx0XHRsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IGhMaXN0IH07XHJcblxyXG5cdFx0XHRcdGNvbnN0IHJvd3MgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpc1JlYWwgPSBpIDwgbjtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ID0gaXNSZWFsXHJcblx0XHRcdFx0XHRcdD8gbHZsLml0ZW1zW2ldXHJcblx0XHRcdFx0XHRcdDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OiBudWxsLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAgfSxcclxuXHRcdFx0XHRcdFx0ICB9O1xyXG5cdFx0XHRcdFx0aXQuem9uZSA9IHtcclxuXHRcdFx0XHRcdFx0eDogY29udGVudFgsXHJcblx0XHRcdFx0XHRcdHk6IHkgKyBpICogdGhpcy5saW5lSCxcclxuXHRcdFx0XHRcdFx0dyxcclxuXHRcdFx0XHRcdFx0aDogdGhpcy5saW5lSCxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcblx0XHRcdFx0XHR0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCBcImxpc3RcIiwgaXNSZWFsKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGZpbGFzXHJcblx0XHRcdFx0dGhpcy5fcHJ1bmVSb3coTCwgcm93cyk7XHJcblx0XHRcdFx0eSArPSBoTGlzdDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFqdXN0ZXMgZGUgYWx0byBpbnRlcm5vIGRlbCBjb250ZW5lZG9yIHZpc3VhbFxyXG5cdFx0Y29uc3QgdG90YWxIID0geTtcclxuXHRcdHRoaXMuem9uZS5oID0gdG90YWxIICsgdGhpcy5tYXJnaW47XHJcblx0XHR0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy56b25lLmggKyBcInB4XCI7XHJcblx0XHR0aGlzLnNbMl0uaGVpZ2h0ID0gdG90YWxIICsgXCJweFwiO1xyXG5cclxuXHRcdC8vIFB1YmxpY2FyIGFsdG8gdG90YWwgYWwgR1VJIChzdW1hcsOhIHUuaClcclxuXHRcdHRoaXMuX3B1Ymxpc2hIZWlnaHQoKTtcclxuXHR9XHJcblxyXG5cdC8vIEVsaW1pbmEgbm9kb3MgRE9NIHNvYnJhbnRlcyBlbiBsYSBmaWxhIEwgYSBwYXJ0aXIgZGVsIMOtbmRpY2Uga2VlcFxyXG5cdF9wcnVuZVJvdyhMLCBrZWVwKSB7XHJcblx0XHRjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG5cdFx0aWYgKCFyb3cpIHJldHVybjtcclxuXHRcdGZvciAobGV0IGogPSBrZWVwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdGNvbnN0IGVsID0gcm93W2pdO1xyXG5cdFx0XHRpZiAoZWwgJiYgZWwucGFyZW50Tm9kZSkgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XHJcblx0XHR9XHJcblx0XHRyb3cubGVuZ3RoID0ga2VlcDtcclxuXHR9XHJcblxyXG5cdGVuc3VyZUl0ZW1Eb20oTCwgaSkge1xyXG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuXHRcdHdoaWxlIChyb3cubGVuZ3RoIDw9IGkpIHJvdy5wdXNoKG51bGwpO1xyXG5cdFx0aWYgKCFyb3dbaV0pIHtcclxuXHRcdFx0Y29uc3QgZGl2ID0gdGhpcy5kb20oXHJcblx0XHRcdFx0XCJkaXZcIixcclxuXHRcdFx0XHRUb29scy5jc3MudHh0ICsgXCJwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTtcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHR0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoZGl2KTtcclxuXHRcdFx0cm93W2ldID0gZGl2O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJvd1tpXTtcclxuXHR9XHJcblxyXG5cdHBhaW50SXRlbURvbShkaXYsIEwsIGksIGl0LCBraW5kLCBpc1JlYWwgPSB0cnVlKSB7XHJcblx0XHRjb25zdCBzID0gZGl2LnN0eWxlO1xyXG5cdFx0Y29uc3QgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcblx0XHQvLyBQb3NpY2nDs25cclxuXHRcdHMubGVmdCA9IGl0LnpvbmUueCArIFwicHhcIjtcclxuXHRcdHMudG9wID0gaXQuem9uZS55ICsgXCJweFwiO1xyXG5cdFx0cy53aWR0aCA9IGl0LnpvbmUudyArIFwicHhcIjtcclxuXHRcdHMuaGVpZ2h0ID0gaXQuem9uZS5oIC0gMiArIFwicHhcIjtcclxuXHJcblx0XHQvLyBUZXh0b1xyXG5cdFx0ZGl2LnRleHRDb250ZW50ID0gaXNSZWFsID8gaXQubGFiZWwgOiBcIlwiO1xyXG5cclxuXHRcdC8vIEVzdGFkb3NcclxuXHRcdGNvbnN0IHNlbGVjdGVkID1cclxuXHRcdFx0aXNSZWFsICYmIHRoaXMudmFsdWVbTF0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLnZhbHVlW0xdID09PSBpdC5rZXk7XHJcblx0XHRjb25zdCBpbkZvY3VzTHZsID0gdGhpcy5mb2N1c2VkICYmIHRoaXMuZm9jdXNMZXZlbCA9PT0gTDtcclxuXHRcdGNvbnN0IGZvY3VzTWF0Y2ggPSBpc1JlYWwgJiYgaW5Gb2N1c0x2bCAmJiB0aGlzLmZvY3VzUGF0aFtMXSA9PT0gaXQua2V5O1xyXG5cdFx0Y29uc3QgaXNIb3ZlciA9XHJcblx0XHRcdHRoaXMuZW5hYmxlSG92ZXIgJiZcclxuXHRcdFx0aXNSZWFsICYmXHJcblx0XHRcdHRoaXMuaG92ZXIubGV2ZWwgPT09IEwgJiZcclxuXHRcdFx0dGhpcy5ob3Zlci5pbmRleCA9PT0gaTtcclxuXHJcblx0XHQvLyDwn5S4IE5VRVZPOiDCv2VzdGEgZmlsYSBlcyBsYSDDumx0aW1hIGhvamEgc2VsZWNjaW9uYWRhP1xyXG5cdFx0bGV0IGlzTGFzdExlYWYgPSBmYWxzZTtcclxuXHRcdGlmIChpc1JlYWwgJiYga2luZCA9PT0gXCJsaXN0XCIgJiYgdGhpcy5sYXN0TGVhZi5rZXkgIT0gbnVsbCkge1xyXG5cdFx0XHQvLyBMYSBob2phIHZpc2libGUgY29ycmVzcG9uZGUgc2kgZWwgcGFkcmUgZGUgZXN0YSBsaXN0YSBjb2luY2lkZSBjb24gcGFyZW50UGF0aCBndWFyZGFkb1xyXG5cdFx0XHQvLyBFbCBwYWRyZSBhY3R1YWwgZXMgdGhpcy52YWx1ZS5zbGljZSgwLCBMKSBjdWFuZG8gbGEgbGlzdGEgZXN0w6EgZGVzcGxlZ2FkYSBwb3IgdmFsdWUvZm9jdXNcclxuXHRcdFx0Y29uc3QgcGFyZW50Tm93ID0gdGhpcy5nZXRBY3RpdmVQYXRoKCkuc2xpY2UoMCwgTCk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLl9wYXRoc0VxdWFsKHBhcmVudE5vdywgdGhpcy5sYXN0TGVhZi5wYXJlbnRQYXRoKSAmJlxyXG5cdFx0XHRcdGl0LmtleSA9PT0gdGhpcy5sYXN0TGVhZi5rZXlcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0aXNMYXN0TGVhZiA9IHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBFc3RpbG9zIGJhc2VcclxuXHRcdHMuYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcblx0XHRzLmNvbG9yID0gY2MudGV4dDtcclxuXHRcdHMuYm9yZGVyID0gXCIxcHggc29saWQgXCIgKyBjYy5ib3JkZXI7XHJcblx0XHRzLnRleHRBbGlnbiA9IGtpbmQgPT09IFwibWFwXCIgPyBcImNlbnRlclwiIDogXCJsZWZ0XCI7XHJcblxyXG5cdFx0Ly8gUHJpb3JpZGFkIHZpc3VhbDpcclxuXHRcdC8vIDEpIHNlbGVjY2lvbmFkbyAoYXp1bClcclxuXHRcdC8vIDIpIMO6bHRpbWEgaG9qYSAobnVldm8gY29sb3IpXHJcblx0XHQvLyAzKSBmb2NvXHJcblx0XHQvLyA0KSBob3ZlclxyXG5cdFx0aWYgKHNlbGVjdGVkKSB7XHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcblx0XHR9IGVsc2UgaWYgKGlzTGFzdExlYWYpIHtcclxuXHRcdFx0Ly8gY29sb3IgZGlzdGludGl2byBwYXJhIFwiw7psdGltYSBob2phXCIgKGFtYXJpbGxvIHN1YXZlKVxyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBcInJnYmEoMjU1LCAyMDAsIDAsIDAuMjUpXCI7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0O1xyXG5cdFx0fSBlbHNlIGlmIChmb2N1c01hdGNoKSB7XHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcblx0XHR9IGVsc2UgaWYgKGlzSG92ZXIpIHtcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEZpbGFzIGRlIHBhZGRpbmcgaW52aXNpYmxlcyBlbiBob2phXHJcblx0XHRzLm9wYWNpdHkgPSBpc1JlYWwgPyBcIjFcIiA6IFwiMFwiO1xyXG5cdH1cclxuXHJcblx0X3BhdGhzRXF1YWwoYSwgYikge1xyXG5cdFx0aWYgKCFhIHx8ICFiIHx8IGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IENpY2xvIGRlIHZpZGEgPT09PT09PVxyXG5cdHJTaXplKCkge1xyXG5cdFx0dGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG5cdFx0dGhpcy5idWlsZExldmVscygpO1xyXG5cdFx0dGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZSgpIHtcclxuXHRcdHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuXHRcdHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IEludGVyYWNjacOzbiA9PT09PT09XHJcblx0X3RvTG9jYWwoZSkge1xyXG5cdFx0Y29uc3QgbXggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuXHRcdGNvbnN0IG15ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnk7XHJcblx0XHRyZXR1cm4geyB4OiBteCwgeTogbXkgfTtcclxuXHR9XHJcblxyXG5cdF9oaXRUZXN0KG14LCBteSkge1xyXG5cdFx0Zm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG5cdFx0XHRjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuXHRcdFx0Y29uc3QgeiA9IGx2bC56b25lOyAvLyB4IHkgdyB5YSBpbmNsdXllbiBjb250ZW50WFxyXG5cclxuXHRcdFx0aWYgKG14IDwgei54IHx8IG15IDwgei55IHx8IG14ID4gei54ICsgei53IHx8IG15ID4gei55ICsgei5oKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKGx2bC50eXBlID09PSBcIm1hcFwiKSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0eiA9IGx2bC5pdGVtc1tpXS56b25lO1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRteCA+PSBpdHoueCAmJlxyXG5cdFx0XHRcdFx0XHRteSA+PSBpdHoueSAmJlxyXG5cdFx0XHRcdFx0XHRteCA8PSBpdHoueCArIGl0ei53ICYmXHJcblx0XHRcdFx0XHRcdG15IDw9IGl0ei55ICsgaXR6LmhcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4geyBMLCBpLCByZWFsOiB0cnVlIH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbnN0IG5Sb3dzID0gTWF0aC5tYXgobHZsLml0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGlzUmVhbCA9IGkgPCBsdmwuaXRlbXMubGVuZ3RoO1xyXG5cdFx0XHRcdFx0Y29uc3QgaXR6ID0gaXNSZWFsXHJcblx0XHRcdFx0XHRcdD8gbHZsLml0ZW1zW2ldLnpvbmVcclxuXHRcdFx0XHRcdFx0OiB7XHJcblx0XHRcdFx0XHRcdFx0XHR4OiB6LngsXHJcblx0XHRcdFx0XHRcdFx0XHR5OiB6LnkgKyBpICogdGhpcy5saW5lSCxcclxuXHRcdFx0XHRcdFx0XHRcdHc6IHoudyxcclxuXHRcdFx0XHRcdFx0XHRcdGg6IHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdCAgfTtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0bXggPj0gaXR6LnggJiZcclxuXHRcdFx0XHRcdFx0bXkgPj0gaXR6LnkgJiZcclxuXHRcdFx0XHRcdFx0bXggPD0gaXR6LnggKyBpdHoudyAmJlxyXG5cdFx0XHRcdFx0XHRteSA8PSBpdHoueSArIGl0ei5oXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcblx0fVxyXG5cclxuXHRoYW5kbGVFdmVudChlKSB7XHJcblx0XHRpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0aWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xyXG5cdFx0XHQvLyBTaSBlbCBob3ZlciBlc3TDoSBkZXNhY3RpdmFkbywgbm8gaGF5IHRyYWJham8gcXVlIGhhY2VyLlxyXG5cdFx0XHRpZiAoIXRoaXMuZW5hYmxlSG92ZXIpIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fdG9Mb2NhbChlKTtcclxuXHRcdFx0Y29uc3QgaHQgPSB0aGlzLl9oaXRUZXN0KHgsIHkpO1xyXG5cclxuXHRcdFx0Ly8gbnVldm8gaG92ZXIgY2FsY3VsYWRvXHJcblx0XHRcdGNvbnN0IG5ld0hvdmVyID1cclxuXHRcdFx0XHRodC5MICE9PSAtMSAmJiBodC5yZWFsXHJcblx0XHRcdFx0XHQ/IHsgbGV2ZWw6IGh0LkwsIGluZGV4OiBodC5pIH1cclxuXHRcdFx0XHRcdDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG5cdFx0XHQvLyBzb2xvIHJlcGludGFyIHNpIGNhbWJpYSByZWFsbWVudGUgZWwgaG92ZXJcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdG5ld0hvdmVyLmxldmVsID09PSB0aGlzLmhvdmVyLmxldmVsICYmXHJcblx0XHRcdFx0bmV3SG92ZXIuaW5kZXggPT09IHRoaXMuaG92ZXIuaW5kZXhcclxuXHRcdFx0KVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0dGhpcy5ob3ZlciA9IG5ld0hvdmVyO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcblx0XHRcdGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fdG9Mb2NhbChlKTtcclxuXHRcdFx0Y29uc3QgaHQgPSB0aGlzLl9oaXRUZXN0KHgsIHkpO1xyXG5cdFx0XHRpZiAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkge1xyXG5cdFx0XHRcdHRoaXMuX3NlbGVjdEF0KGh0LkwsIGh0LmkpO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlOyAvLyBzb2xvIHRydWUgc2kgcmVhbG1lbnRlIHNlIHNlbGVjY2lvbsOzIGFsZ29cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGUudHlwZSA9PT0gXCJtb3VzZXVwXCIpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIFNlbGVjY2nDs24gKyBhdXRvY29tcGxldGFkbyArIG5vdGlmaWNhY2nDs25cclxuXHRfc2VsZWN0QXQoTCwgaSkge1xyXG5cdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRjb25zdCBjaG9zZW4gPSBsdmwuaXRlbXNbaV07XHJcblx0XHRpZiAoIWNob3NlbiB8fCAhY2hvc2VuLmtleSkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IGJhc2UgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpO1xyXG5cdFx0YmFzZVtMXSA9IGNob3Nlbi5rZXk7XHJcblxyXG5cdFx0Y29uc3QgbmV3UGF0aCA9IHRoaXMuYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2UpO1xyXG5cclxuXHRcdC8vIPCflLggU2kgZWwgdXN1YXJpbyBzZWxlY2Npb25hIGV4cGzDrWNpdGFtZW50ZSBlbiBlbCBuaXZlbCBob2phLCByZWNvcmRhcmxvXHJcblx0XHRpZiAobHZsLnR5cGUgPT09IFwibGlzdFwiKSB7XHJcblx0XHRcdHRoaXMubGFzdExlYWYucGFyZW50UGF0aCA9IHRoaXMudmFsdWUuc2xpY2UoMCwgTCk7IC8vIHBhZHJlIGRlIGxhIGxpc3RhIGFjdHVhbFxyXG5cdFx0XHR0aGlzLmxhc3RMZWFmLmtleSA9IGNob3Nlbi5rZXk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy52YWx1ZSA9IG5ld1BhdGguc2xpY2UoKTtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdFx0Ly8gc2kgZXN0w6EgcmVmZXJlbmNpYWRvLCBwcm9wYWdhIGEgb2JqZXRvIGV4dGVybm9cclxuXHRcdHRoaXMuc2VuZChuZXdQYXRoKTtcclxuXHRcdHRoaXMuY2hhbmdlQ2IodGhpcy50YWJJbmRleCwgdGhpcy5pdGVtSW5kZXgsIG5ld1BhdGgpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBBUEkgcMO6YmxpY2EgPT09PT09PVxyXG5cdHNldFZhbHVlKHBhdGgpIHtcclxuXHRcdHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5zbGljZSgpIDogW107XHJcblx0XHQvLyBTaSBkZXNkZSBhZnVlcmEgbm9zIHNldGVhbiB1bmEgaG9qYSB2w6FsaWRhLCB0YW1iacOpbiBsYSByZWNvcmRhbW9zXHJcblx0XHR0aGlzLl9tYXliZVVwZGF0ZUxhc3RMZWFmRnJvbVZhbHVlKCk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0c2V0VHJlZSh0cmVlKSB7XHJcblx0XHR0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG5cdFx0dGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuXHRcdGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gXCJib29sZWFuXCIpIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheShmb2N1c1BhdGgpKSB0aGlzLmZvY3VzUGF0aCA9IGZvY3VzUGF0aC5zbGljZSgpO1xyXG5cdFx0aWYgKHR5cGVvZiBmb2N1c0xldmVsID09PSBcIm51bWJlclwiKSB0aGlzLmZvY3VzTGV2ZWwgPSBmb2N1c0xldmVsO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdF9tYXliZVVwZGF0ZUxhc3RMZWFmRnJvbVZhbHVlKCkge1xyXG5cdFx0Ly8gU2kgdmFsdWUgYXB1bnRhIGEgcGFkcmUraG9qYSAo4oCmLFtsZWFmXSkgeSBlcyB2w6FsaWRhLCByZWNvcmRhciBlc2EgaG9qYVxyXG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpIHx8IHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMudmFsdWUubGVuZ3RoIC0gMSk7XHJcblx0XHRjb25zdCBsZWFmID0gdGhpcy52YWx1ZVt0aGlzLnZhbHVlLmxlbmd0aCAtIDFdO1xyXG5cdFx0Y29uc3QgaW5mbyA9IHRoaXMuZ2V0Tm9kZUF0UGF0aChwYXJlbnQpO1xyXG5cdFx0aWYgKGluZm8gJiYgQXJyYXkuaXNBcnJheShpbmZvLm5vZGUpICYmIGluZm8ubm9kZS5pbmNsdWRlcyhsZWFmKSkge1xyXG5cdFx0XHR0aGlzLmxhc3RMZWFmID0geyBwYXJlbnRQYXRoOiBwYXJlbnQsIGtleTogbGVhZiB9O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBQdWJsaWNhY2nDs24gZGUgYWx0dXJhID09PT09PT1cclxuXHRfY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpIHtcclxuXHRcdGxldCBjID0gMDtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBpKyspXHJcblx0XHRcdGlmICh0aGlzLmxldmVsc1tpXS50eXBlID09PSBcIm1hcFwiKSBjKys7XHJcblx0XHRyZXR1cm4gYztcclxuXHR9XHJcblxyXG5cdF9nZXRDdXJyZW50TGVhZkxlbmd0aCgpIHtcclxuXHRcdGNvbnN0IGxhc3QgPSB0aGlzLmxldmVsc1t0aGlzLmxldmVscy5sZW5ndGggLSAxXTtcclxuXHRcdHJldHVybiBsYXN0ICYmIGxhc3QudHlwZSA9PT0gXCJsaXN0XCIgPyBsYXN0Lml0ZW1zLmxlbmd0aCA6IDA7XHJcblx0fVxyXG5cclxuXHRfcHVibGlzaEhlaWdodCgpIHtcclxuXHRcdGNvbnN0IGludGVyID0gdGhpcy5fY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpO1xyXG5cdFx0Y29uc3QgbGVhZkxlbiA9IE1hdGgubWF4KHRoaXMubGVhZk1heCwgdGhpcy5fZ2V0Q3VycmVudExlYWZMZW5ndGgoKSk7XHJcblx0XHRjb25zdCBsZWFmSCA9IGxlYWZMZW4gKiB0aGlzLmxpbmVIO1xyXG5cdFx0Y29uc3QgaW50ZXJIID0gaW50ZXIgKiAodGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXApO1xyXG5cdFx0Y29uc3QgdG90YWxIID0gaW50ZXIgPyBpbnRlckggKyB0aGlzLmxldmVsR2FwICsgbGVhZkggOiBsZWFmSDtcclxuXHJcblx0XHQvLyBOb3JtYWxpemFtb3MgYSBweCBlbnRlcm9zIHBhcmEgZXZpdGFyIGppdHRlciBwb3IgcmVkb25kZW9cclxuXHRcdGNvbnN0IG5ld0ggPSBNYXRoLmZsb29yKHRvdGFsSCk7XHJcblxyXG5cdFx0Ly8gQWN0dWFsaXphbW9zIG3DqXRyaWNhcyBsb2NhbGVzIHNpZW1wcmVcclxuXHRcdHRoaXMuaCA9IG5ld0g7XHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMubWFyZ2luO1xyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArIFwicHhcIjtcclxuXHJcblx0XHQvLyBTb2xvIGF2aXNhbW9zIGFsIEdVSSBzaSBsYSBhbHR1cmEgY2FtYmnDs1xyXG5cdFx0aWYgKG5ld0ggIT09IHRoaXMuX2xhc3RQdWJsaXNoZWRIKSB7XHJcblx0XHRcdHRoaXMuX2xhc3RQdWJsaXNoZWRIID0gbmV3SDtcclxuXHRcdFx0Um9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcblx0XHRcdGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYWluKSB0aGlzLm1haW4uY2FsYygpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIGNvbnNvbGUud2FybihcIkd1aS50cmlnZ2VyTW91c2VEb3duIGlzIGRlcHJlY2F0ZWQsIHVzZSB0cmlnZ2VyTW91c2VEb3duVVYgaW5zdGVhZFwiKTtcclxuICAgIC8qXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcmRvd25cIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7Ki9cclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJHdWkudHJpZ2dlck1vdXNlTW92ZSBpcyBkZXByZWNhdGVkLCB1c2UgdHJpZ2dlck1vdXNlTW92ZVVWIGluc3RlYWRcIik7XHJcbiAgICAvKlxyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJtb3ZlXCIsXHJcbiAgICAgIGNsaWVudFg6IC0xLFxyXG4gICAgICBjbGllbnRZOiAtMSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7Ki9cclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuXHJcbiAgICBjb25zb2xlLndhcm4oXCJHdWkudHJpZ2dlck1vdXNlVXAgaXMgZGVwcmVjYXRlZCwgdXNlIHRyaWdnZXJNb3VzZVVwVVYgaW5zdGVhZFwiKTtcclxuICAgIC8qXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcnVwXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pOyovXHJcbiAgfVxyXG5cclxuICAvLyBHdWkuanNcclxuICB0cmlnZ2VyTW91c2VEb3duVVYodSwgdiwgeyBmbGlwWSA9IHRydWUgfSA9IHt9KSB7XHJcbiAgICAvLyB1LCB2IGVuIFswLDFdIHJlbGF0aXZvcyBhbCByZWN0IGRlbCBHVUlcclxuICAgIGNvbnN0IHggPSB0aGlzLnpvbmUueCArIE1hdGgucm91bmQodSAqIHRoaXMuem9uZS53KTtcclxuICAgIGNvbnN0IHkgPSB0aGlzLnpvbmUueSArIE1hdGgucm91bmQoKGZsaXBZID8gMSAtIHYgOiB2KSAqIHRoaXMuem9uZS5oKTtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiBpc05hTih4KSA/IG51bGwgOiB4LFxyXG4gICAgICBjbGllbnRZOiBpc05hTih5KSA/IG51bGwgOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwVVYodSwgdiwgeyBmbGlwWSA9IHRydWUgfSA9IHt9KSB7XHJcbiAgICBjb25zdCB4ID0gdGhpcy56b25lLnggKyBNYXRoLnJvdW5kKHUgKiB0aGlzLnpvbmUudyk7XHJcbiAgICBjb25zdCB5ID0gdGhpcy56b25lLnkgKyBNYXRoLnJvdW5kKChmbGlwWSA/IDEgLSB2IDogdikgKiB0aGlzLnpvbmUuaCk7XHJcbiAgICBcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogaXNOYU4oeCkgPyBudWxsIDogeCxcclxuICAgICAgY2xpZW50WTogaXNOYU4oeSkgPyBudWxsIDogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VNb3ZlVVYodSwgdiwgeyBmbGlwWSA9IHRydWUgfSA9IHt9KSB7XHJcbiAgICBjb25zdCB4ID0gdGhpcy56b25lLnggKyBNYXRoLnJvdW5kKHUgKiB0aGlzLnpvbmUudyk7XHJcbiAgICBjb25zdCB5ID0gdGhpcy56b25lLnkgKyBNYXRoLnJvdW5kKChmbGlwWSA/IDEgLSB2IDogdikgKiB0aGlzLnpvbmUuaCk7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogaXNOYU4oeCkgPyBudWxsIDogeCxcclxuICAgICAgY2xpZW50WTogaXNOYU4oeSkgPyBudWxsIDogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiICsgdXYueCArIFwiIFwiICsgdXYueSk7XHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcobykge1xyXG4gICAgLy8gcmVzZXQgdG8gZGVmYXVsdCB0ZXh0XHJcbiAgICBUb29scy5zZXRUZXh0KCk7XHJcbiAgICB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29sb3JzKG8pIHtcclxuICAgIGZvciAobGV0IGMgaW4gbykge1xyXG4gICAgICBpZiAodGhpcy5jb2xvcnNbY10pIHRoaXMuY29sb3JzW2NdID0gb1tjXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdykge1xyXG4gICAgVG9vbHMuc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KTtcclxuICB9XHJcblxyXG4gIGhpZGUoYikge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSBiID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheSh2ID0gZmFsc2UpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gdiA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIjtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKGYpIHtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBmIHx8IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNUWUxFU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW9kZShuKSB7XHJcbiAgICBsZXQgbmVlZENoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgaWYgKG4gIT09IHRoaXMuY24pIHtcclxuICAgICAgdGhpcy5jbiA9IG47XHJcblxyXG4gICAgICBzd2l0Y2ggKG4pIHtcclxuICAgICAgICBjYXNlIFwiZGVmXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ3Njcm9sbERlZic6IHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zY3JvbGw7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxPdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJucy1yZXNpemVcIik7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbERvd25cIjpcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdib3R0b21EZWYnOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImJvdHRvbU92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcInBvaW50ZXJcIik7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9jYXNlICdib3R0b21Eb3duJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNlbGVjdDsgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSAnIzAwMCc7IGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuZWVkQ2hhbmdlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmVlZENoYW5nZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFRBUkdFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2xlYXJUYXJnZXQoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50ID09PSAtMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHRoaXMucHJvdG8ucykge1xyXG4gICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuXHJcbiAgICAvLy9jb25zb2xlLmxvZyh0aGlzLmlzRG93bikvL2lmKHRoaXMuaXNEb3duKVJvb3RzLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSb290cy5jdXJzb3IoKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgWk9ORSBURVNUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0ZXN0Wm9uZShlKSB7XHJcbiAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICBpZiAobC54ID09PSAtMSAmJiBsLnkgPT09IC0xKSByZXR1cm4gXCJcIjtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IFwiXCI7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLmlzU2Nyb2xsID8gdGhpcy56b25lLncgLSB0aGlzLnNpemUucyA6IHRoaXMuem9uZS53O1xyXG5cclxuICAgIGlmIChsLnkgPiB0aGlzLnpvbmUuaCAtIHRoaXMuYmggJiYgbC55IDwgdGhpcy56b25lLmgpIG5hbWUgPSBcImJvdHRvbVwiO1xyXG4gICAgZWxzZSBuYW1lID0gbC54ID4gcyA/IFwic2Nyb2xsXCIgOiBcImNvbnRlbnRcIjtcclxuXHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgLy9pZiggdGhpcy5jbGVhbm5pbmcgKSByZXR1cm5cclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwiR3VpLmhhbmRsZUV2ZW50XCIpXHJcbiAgICAvL2NvbnNvbGUubG9nKGUpO1xyXG4gICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IHByb3RvQ2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcIm1vdXNldXBcIiAmJiB0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmICF0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzRG93biAmJiB0aGlzLmlzTmV3VGFyZ2V0KSB7XHJcbiAgICAgIFJvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuO1xyXG5cclxuICAgIHN3aXRjaCAobmFtZSkge1xyXG4gICAgICBjYXNlIFwiY29udGVudFwiOlxyXG4gICAgICAgIGUuY2xpZW50WSA9IHRoaXMuaXNTY3JvbGwgPyBlLmNsaWVudFkgKyB0aGlzLmRlY2FsIDogZS5jbGllbnRZO1xyXG5cclxuICAgICAgICBpZiAoUm9vdHMuaXNNb2JpbGUgJiYgdHlwZSA9PT0gXCJtb3VzZWRvd25cIikgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByb3RvKSBwcm90b0NoYW5nZSA9IHRoaXMucHJvdG8uaGFuZGxlRXZlbnQoZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIiAmJiAhcHJvdG9DaGFuZ2UgJiYgdGhpcy5pc1Njcm9sbClcclxuICAgICAgICAgIGNoYW5nZSA9IHRoaXMub25XaGVlbChlKTtcclxuXHJcbiAgICAgICAgaWYgKCFSb290cy5sb2NrKSB7XHJcbiAgICAgICAgICB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJib3R0b21PdmVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRoaXMuaXNPcGVuID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICAgICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICAgICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgICAgICAgIC8vdGhpcy5zZXRIZWlnaHQoKTtcclxuICAgICAgICAgIHRoaXMuY2FsYygpO1xyXG4gICAgICAgICAgdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwic2Nyb2xsXCI6XHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJzY3JvbGxPdmVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJzY3JvbGxEb3duXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIpIGNoYW5nZSA9IHRoaXMub25XaGVlbChlKTtcclxuICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMudXBkYXRlKGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy5zaCAqIDAuNSk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmIChwcm90b0NoYW5nZSkgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXl1cFwiKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmIChjaGFuZ2UpIHRoaXMuZHJhdygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV4dChlLCBjaGFuZ2UpIHtcclxuICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCh0aGlzLnVpcywgZSk7XHJcblxyXG4gICAgaWYgKG5leHQgIT09IHRoaXMuY3VycmVudCkge1xyXG4gICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLnByb3RvID0gdGhpcy51aXNbdGhpcy5jdXJyZW50XTtcclxuICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uV2hlZWwoZSkge1xyXG4gICAgdGhpcy5veSArPSAyMCAqIGUuZGVsdGE7XHJcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLm95KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHJlc2V0KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5pc1Jlc2V0KSByZXR1cm47XHJcblxyXG4gICAgLy90aGlzLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgIC8vUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgbGV0IHIgPSB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICBsZXQgcjIgPSB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcblxyXG4gICAgaWYgKHIgfHwgcjIpIHRoaXMuZHJhdyh0cnVlKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG5cclxuICAgIC8vUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQUREIE5PREVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGFkZCgpIHtcclxuICAgIC8vaWYodGhpcy5jbGVhbm5pbmcpIHRoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICBsZXQgYSA9IGFyZ3VtZW50cztcclxuICAgIGxldCBvbnRvcCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0eXBlb2YgYVsxXSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICBhWzFdLmlzVUkgPSB0cnVlO1xyXG4gICAgICBhWzFdLm1haW4gPSB0aGlzO1xyXG5cclxuICAgICAgb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYVsxXSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBpZiAoYVsyXSA9PT0gdW5kZWZpbmVkKSBbXS5wdXNoLmNhbGwoYSwgeyBpc1VJOiB0cnVlLCBtYWluOiB0aGlzIH0pO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgIGFbMl0ubWFpbiA9IHRoaXM7XHJcbiAgICAgICAgLy9vbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgICAgb250b3AgPSBhWzJdLm9udG9wID8gYVsyXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHUgPSBhZGQuYXBwbHkodGhpcywgYSk7XHJcblxyXG4gICAgaWYgKHUgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBpZiAob250b3ApIHRoaXMudWlzLnVuc2hpZnQodSk7XHJcbiAgICBlbHNlIHRoaXMudWlzLnB1c2godSk7XHJcblxyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgdGhpcy5pc0VtcHR5ID0gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHU7XHJcbiAgfVxyXG5cclxuICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgcmVtb3ZlKG4pIHtcclxuICAgIGlmIChuLmRpc3Bvc2UpIG4uZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2FsbCBhZnRlciB1aXMgY2xlYXJcclxuXHJcbiAgY2xlYXJPbmUobikge1xyXG4gICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZihuKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIHtcclxuICAgICAgLy90aGlzLmNhbGMoIC0gKHRoaXMudWlzWyBpZCBdLmggKyAxICkgKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZCh0aGlzLnVpc1tpZF0uY1swXSk7XHJcbiAgICAgIHRoaXMudWlzLnNwbGljZShpZCwgMSk7XHJcbiAgICAgIHRoaXMuY2FsYygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gY2xlYXIgYWxsIGd1aVxyXG5cclxuICBlbXB0eSgpIHtcclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSB0cnVlXHJcblxyXG4gICAgLy90aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsXHJcbiAgICAgIGl0ZW07XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpdGVtID0gdGhpcy51aXMucG9wKCk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQoaXRlbS5jWzBdKTtcclxuICAgICAgaXRlbS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyKCkge1xyXG4gICAgdGhpcy5lbXB0eSgpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIyKCkge1xyXG4gICAgc2V0VGltZW91dCh0aGlzLmVtcHR5LmJpbmQodGhpcyksIDApO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5jb250ZW50KTtcclxuICAgIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElURU1TIFNQRUNJQUxcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHJlc2V0SXRlbSgpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5zZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbShuYW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIG5hbWUgPSBuYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZSgwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAodGhpcy51aXNbaV0udmFsdWUgPT09IG5hbWUpIHtcclxuICAgICAgICB0aGlzLnVpc1tpXS5zZWxlY3RlZCh0cnVlKTtcclxuICAgICAgICBpZiAodGhpcy5pc1Njcm9sbClcclxuICAgICAgICAgIHRoaXMudXBkYXRlKGkgKiAodGhpcy51aXNbaV0uaCArIHRoaXMubWFyZ2luKSAqIHRoaXMucmF0aW8pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTQ1JPTExcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHVwU2Nyb2xsKGIpIHtcclxuICAgIHRoaXMuc3cgPSBiID8gdGhpcy5zaXplLnMgOiAwO1xyXG4gICAgdGhpcy5veSA9IGIgPyB0aGlzLm95IDogMDtcclxuICAgIHRoaXMuc2Nyb2xsQkcuc3R5bGUuZGlzcGxheSA9IGIgPyBcImJsb2NrXCIgOiBcIm5vbmVcIjtcclxuXHJcbiAgICBpZiAoYikge1xyXG4gICAgICB0aGlzLnRvdGFsID0gdGhpcy5oO1xyXG5cclxuICAgICAgdGhpcy5tYXhWaWV3ID0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLnJhdGlvID0gdGhpcy5tYXhWaWV3IC8gdGhpcy50b3RhbDtcclxuICAgICAgdGhpcy5zaCA9IHRoaXMubWF4VmlldyAqIHRoaXMucmF0aW87XHJcblxyXG4gICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhWaWV3IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgIHRoaXMub3kgPSBUb29scy5jbGFtcCh0aGlzLm95LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICAgIHRoaXMuc2Nyb2xsQkcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhWaWV3ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLnNjcm9sbC5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLm95KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSh5KSB7XHJcbiAgICB5ID0gVG9vbHMuY2xhbXAoeSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgdGhpcy5kZWNhbCA9IE1hdGguZmxvb3IoeSAvIHRoaXMucmF0aW8pO1xyXG4gICAgdGhpcy5pbm5lci5zdHlsZS50b3AgPSAtdGhpcy5kZWNhbCArIFwicHhcIjtcclxuICAgIHRoaXMuc2Nyb2xsLnN0eWxlLnRvcCA9IE1hdGguZmxvb3IoeSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLm95ID0geTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0laRSBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpcygpIHtcclxuICAgIHJldHVybiBSb290cy5jYWxjVWlzKHRoaXMudWlzLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55KTtcclxuICB9XHJcblxyXG4gIGNhbGMoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG4gICAgdGhpcy50bXAgPSBzZXRUaW1lb3V0KHRoaXMuc2V0SGVpZ2h0LmJpbmQodGhpcyksIDEwKTtcclxuICB9XHJcblxyXG4gIHNldEhlaWdodCgpIHtcclxuICAgIGlmICh0aGlzLnRtcCkgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuXHJcbiAgICB0aGlzLnpvbmUuaCA9IHRoaXMuYmg7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHRoaXMuaCA9IHRoaXMuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbGV0IGhoaCA9IHRoaXMuZm9yY2VIZWlnaHRcclxuICAgICAgICA/IHRoaXMuZm9yY2VIZWlnaHQgKyB0aGlzLnpvbmUueVxyXG4gICAgICAgIDogd2luZG93LmlubmVySGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5tYXhIZWlnaHQgPSBoaGggLSB0aGlzLnpvbmUueSAtIHRoaXMuYmg7XHJcblxyXG4gICAgICBsZXQgZGlmZiA9IHRoaXMuaCAtIHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgaWYgKGRpZmYgPiAxKSB7XHJcbiAgICAgICAgdGhpcy5pc1Njcm9sbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLmJoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cFNjcm9sbCh0aGlzLmlzU2Nyb2xsKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCAtIHRoaXMuYmggKyBcInB4XCI7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggKyBcInB4XCI7XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS50b3AgPSB0aGlzLnpvbmUuaCAtIHRoaXMuYmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9yY2VIZWlnaHQgJiYgdGhpcy5sb2NrSGVpZ2h0KVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLmRyYXcodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNldFdpZHRoKHcpIHtcclxuICAgIGlmICh3KSB0aGlzLnpvbmUudyA9IHc7XHJcblxyXG4gICAgdGhpcy56b25lLncgPSBNYXRoLmZsb29yKHRoaXMuem9uZS53KTtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS53aWR0aCA9IHRoaXMuem9uZS53ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDZW50ZXIpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5tYXJnaW5MZWZ0ID0gLU1hdGguZmxvb3IodGhpcy56b25lLncgKiAwLjUpICsgXCJweFwiO1xyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW1XaWR0aCh3KSB7XHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdGhpcy51aXNbaV0uc2V0U2l6ZSh3KTtcclxuICAgICAgdGhpcy51aXNbaV0uclNpemUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztDQUFBO0NBQ0E7Q0FDQTtBQUNBO0FBQ1ksT0FBQyxRQUFRLEdBQUcsUUFBUTtBQUNoQztDQUNBO0FBQ0E7Q0FDQSxNQUFNLENBQUMsR0FBRztDQUNWLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDUjtDQUNBLEVBQUUsR0FBRyxFQUFFLElBQUk7QUFDWDtDQUNBLEVBQUUsRUFBRSxFQUFFLElBQUk7Q0FDVixFQUFFLElBQUksRUFBRSxLQUFLO0NBQ2IsRUFBRSxLQUFLLEVBQUUsS0FBSztDQUNk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QUFDO0NBQ25ELElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqRCxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztDQUNyQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLFlBQVksRUFBRSxZQUFZO0NBQzVCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Q0FDeEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRTtDQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztDQUN0RCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFNBQVMsRUFBRSxVQUFVLElBQUksRUFBRTtDQUM3QixJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7Q0FDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Q0FDeEMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Q0FDbkMsSUFBSSxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0NBQ3JDLEdBQUc7QUFDSDtDQUNBLEVBQUUsVUFBVSxFQUFFLFlBQVk7Q0FDMUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLE9BQU87Q0FDbEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQztDQUNBLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQ3BCLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QjtDQUNBO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0NBQ3BELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztDQUN2RDtDQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0NBQ0EsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztDQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3BCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQ3hDLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxFQUFFLFVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRTtDQUNyQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNuQjtDQUNBLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN0QjtDQUNBLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztDQUN2RCxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Q0FDdkQ7Q0FDQSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDaEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUNsQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtDQUN4QixJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsT0FBTztBQUNsQztDQUNBLElBQU8sSUFBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUMxQixNQUFnQixDQUFDLENBQUMsU0FBUztBQUMzQjtDQUNBO0FBQ0E7Q0FDQSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3pCO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDcEI7Q0FDQSxNQUFNLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNyQixNQUFNLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDNUIsS0FBSztBQUNMO0NBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDM0I7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRTtDQUN4QjtBQUNBO0NBQ0EsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDckI7Q0FDQTtBQUNBO0NBQ0E7Q0FDQSxLQUFLLE1BQU07Q0FDWCxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7Q0FDekIsUUFBUTtDQUNSLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUU7Q0FDM0MsV0FBVyxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztDQUM3QyxVQUFVLENBQUMsQ0FBQyxPQUFPLEtBQUssR0FBRztDQUMzQixVQUFVLENBQUMsQ0FBQyxPQUFPLEtBQUssR0FBRztDQUMzQixVQUFVLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQztDQUN6QixVQUFVLENBQUMsQ0FBQyxPQUFPLEtBQUssR0FBRztDQUMzQixVQUFVO0NBQ1YsVUFBVSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDekMsU0FBUyxNQUFNO0NBQ2YsVUFBVSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Q0FDeEMsU0FBUztDQUNULE9BQU8sTUFBTTtDQUNiLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0NBQ3ZDLE9BQU87Q0FDUCxLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUU7Q0FDdEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLE9BQU87QUFDbEM7Q0FDQSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25ELFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNyQztDQUNBLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQztDQUM5QyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzlFO0NBQ0EsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDckI7Q0FDQTtDQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztDQUN4QixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxJQUFJLEVBQUUsWUFBWTtDQUNwQjtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNoRCxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQy9CO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ2pELEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxFQUFFLFlBQVk7Q0FDdEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0NBQzdCLElBQUksSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO0NBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNoQjtDQUNBLE1BQU0sSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUNoRCxNQUFNLElBQUksVUFBVSxFQUFFLFdBQVcsR0FBRyxJQUFJLENBQUM7Q0FDekMsS0FBSztDQUNMLElBQUksT0FBTyxXQUFXLENBQUM7Q0FDdkIsR0FBRztBQUNIO0NBQ0EsRUFBRSxZQUFZLEVBQUUsVUFBVSxLQUFLLEVBQUU7Q0FDakMsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUN0QyxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQ2pELEdBQUc7QUFDSDtDQUNBLEVBQUUsU0FBUyxFQUFFLFVBQVUsS0FBSyxFQUFFO0NBQzlCLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7Q0FDQSxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQjtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7Q0FDbkIsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztDQUN0QixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNmLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxJQUFJLENBQUM7Q0FDaEIsR0FBRztDQUNILENBQUMsQ0FBQztBQUNGO0NBQ08sTUFBTSxLQUFLLEdBQUcsQ0FBQzs7Q0M5MEJ0QjtDQUNBO0NBQ0E7QUFHQTtDQUNBLE1BQU0sQ0FBQyxHQUFHO0FBQ1Y7Q0FDQSxJQUFJLFVBQVUsRUFBRSxHQUFHO0FBQ25CO0NBQ0EsSUFBSSxJQUFJLEVBQUUsUUFBUSxDQUFDLHNCQUFzQixFQUFFO0FBQzNDO0NBQ0EsSUFBSSxTQUFTLEVBQUUsSUFBSTtDQUNuQixJQUFJLFVBQVUsRUFBRSxJQUFJO0NBQ3BCLElBQUksVUFBVSxFQUFFLElBQUk7Q0FDcEIsSUFBSSxRQUFRLEVBQUUsSUFBSTtDQUNsQixJQUFJLElBQUksRUFBRSxJQUFJO0NBQ2QsSUFBSSxLQUFLLEVBQUUsSUFBSTtBQUNmO0NBQ0EsSUFBSSxLQUFLLEVBQUUsNEJBQTRCO0NBQ3ZDLElBQUksS0FBSyxFQUFFLDhCQUE4QjtDQUN6QyxJQUFJLEtBQUssRUFBRSw4QkFBOEI7QUFDekM7Q0FDQSxJQUFJLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQztDQUNsSSxJQUFJLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFO0NBQzVKLElBQUksVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUU7QUFDcEc7Q0FDQSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtDQUNmLElBQUksS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwQixJQUFJLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7Q0FDdkIsSUFBSSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ25CO0NBQ0EsSUFBSSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0NBQ3hCLElBQUksS0FBSyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRTtBQUN4QjtDQUNBLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU07QUFDOUI7Q0FDQSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDOUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQzlCLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE9BQU8sRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3JEO0NBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3pDO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sTUFBTTtBQUN6QztDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRTtBQUM3QjtDQUNBLFFBQVEsSUFBSSxVQUFVLEdBQUcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEdBQUU7Q0FDaEYsUUFBUSxJQUFJLFVBQVUsR0FBRyxNQUFLO0FBQzlCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSTtDQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFNO0NBQzlDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDOUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFTO0NBQzlDLFFBQVEsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQUs7QUFDdEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtDQUNwQixZQUFZLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUk7Q0FDL0IsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7Q0FDMUMsZ0JBQWdCLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxHQUFFO0NBQzFELGdCQUFnQixLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRTtDQUM1RCxhQUFhO0NBQ2IsWUFBWSxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUU7Q0FDeEQsWUFBWSxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEdBQUU7Q0FDekQsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7Q0FDdEIsWUFBWSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0NBQ25DLFlBQVksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFFO0NBQ3ZELFlBQVksS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFFO0NBQ3hELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO0NBQ3RCLFlBQVksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtDQUNuQyxZQUFZLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFFO0NBQ3RELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDeEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtDQUNwQixZQUFZLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUk7Q0FDL0IsWUFBWSxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRTtDQUN2RCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxXQUFVO0NBQzFELFFBQVEsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLFlBQVc7QUFDekQ7Q0FDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsT0FBTTtBQUN0RDtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUU7Q0FDN0IsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUM7Q0FDaEQsU0FBUztBQUNUO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtDQUN6QixZQUFZLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxVQUFVLEdBQUcsS0FBSTtDQUNoRSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxHQUFFO0FBQzlDO0NBQ0EsUUFBUSxPQUFPLEtBQUs7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sRUFBRTtBQUNaO0NBQ0EsUUFBUSxFQUFFLEVBQUUsQ0FBQztDQUNiLFFBQVEsRUFBRSxFQUFFLENBQUM7Q0FDYixRQUFRLE1BQU0sQ0FBQyxDQUFDO0FBQ2hCO0NBQ0EsUUFBUSxRQUFRLEdBQUcsQ0FBQztDQUNwQjtBQUNBO0NBQ0EsUUFBUSxPQUFPLENBQUMsTUFBTTtDQUN0QixRQUFRLFVBQVUsRUFBRSxxQkFBcUI7Q0FDekMsUUFBUSxjQUFjLEVBQUUsb0JBQW9CO0FBQzVDO0NBQ0EsUUFBUSxLQUFLLEdBQUcsTUFBTTtDQUN0QixRQUFRLFFBQVEsR0FBRyxNQUFNO0NBQ3pCLFFBQVEsSUFBSSxHQUFHLE1BQU07Q0FDckIsUUFBUSxRQUFRLEdBQUcsTUFBTTtDQUN6QixRQUFRLFVBQVUsR0FBRyxNQUFNO0NBQzNCO0NBQ0EsUUFBUSxJQUFJLENBQUMsaUJBQWlCO0NBQzlCLFFBQVEsT0FBTyxDQUFDLGlCQUFpQjtBQUNqQztDQUNBO0NBQ0EsUUFBUSxNQUFNLEdBQUcsU0FBUztDQUMxQixRQUFRLFVBQVUsR0FBRyxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxPQUFPLEdBQUcsTUFBTTtDQUN4QixRQUFRLE1BQU0sR0FBRyxNQUFNO0NBQ3ZCO0FBQ0E7Q0FDQSxRQUFRLE1BQU0sR0FBRyxTQUFTO0NBQzFCLFFBQVEsT0FBTyxHQUFHLFNBQVM7Q0FDM0IsUUFBUSxJQUFJLEdBQUcsU0FBUztDQUN4QixRQUFRLE1BQU0sR0FBRyxTQUFTO0NBQzFCLFFBQVEsTUFBTSxFQUFFLFNBQVM7Q0FDekI7Q0FDQTtDQUNBLFFBQVEsVUFBVSxFQUFFLHFCQUFxQjtDQUN6QztDQUNBLFFBQVEsVUFBVSxFQUFFLFFBQVE7Q0FDNUIsUUFBUSxVQUFVLEVBQUUsTUFBTTtDQUMxQixRQUFRLFFBQVEsQ0FBQyxFQUFFO0FBQ25CO0NBQ0EsUUFBUSxPQUFPLENBQUMsdUJBQXVCO0NBQ3ZDLFFBQVEsTUFBTSxFQUFFLHVCQUF1QjtDQUN2QyxRQUFRLFNBQVMsRUFBRSxTQUFTO0FBQzVCO0NBQ0E7Q0FDQSxRQUFRLElBQUksRUFBRSxlQUFlO0FBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBLElBQUksR0FBRyxHQUFHO0FBQ1Y7Q0FDQSxRQUFRLEtBQUssRUFBRSx1R0FBdUcsR0FBRyxzSEFBc0g7Q0FDL08sUUFBUSxNQUFNLENBQUMsOEVBQThFO0NBQzdGLFFBQVEsTUFBTSxDQUFDLHVHQUF1RztDQUN0SCxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxJQUFJLEVBQUU7QUFDVjtDQUNBLFFBQVEsRUFBRSxDQUFDLG1EQUFtRDtDQUM5RCxRQUFRLEVBQUUsQ0FBQyxtREFBbUQ7QUFDOUQ7Q0FDQSxRQUFRLEtBQUssQ0FBQywyTkFBMk47Q0FDek8sUUFBUSxLQUFLLENBQUMsdUJBQXVCO0FBQ3JDO0NBQ0EsUUFBUSxTQUFTLENBQUMsdUJBQXVCO0NBQ3pDLFFBQVEsT0FBTyxDQUFDLHVCQUF1QjtBQUN2QztDQUNBLFFBQVEsS0FBSyxDQUFDLGdGQUFnRjtDQUM5RixRQUFRLElBQUksQ0FBQyxvSEFBb0g7Q0FDakksUUFBUSxPQUFPLENBQUMsd0pBQXdKO0NBQ3hLLFFBQVEsWUFBWSxDQUFDLDRGQUE0RjtDQUNqSCxRQUFRLFNBQVMsQ0FBQyx1R0FBdUc7Q0FDekgsUUFBUSxPQUFPLENBQUMsa0pBQWtKO0NBQ2xLLFFBQVEsS0FBSyxDQUFDLGdkQUFnZDtDQUM5ZCxRQUFRLEdBQUcsQ0FBQyxvUEFBb1A7Q0FDaFEsUUFBUSxTQUFTLENBQUMsOEZBQThGO0NBQ2hILFFBQVEsR0FBRyxDQUFDLDZFQUE2RTtDQUN6RixRQUFRLFFBQVEsQ0FBQyw2RUFBNkU7Q0FDOUYsUUFBUSxPQUFPLENBQUMsZ0RBQWdEO0NBQ2hFLFFBQVEsTUFBTSxDQUFDLHFFQUFxRTtDQUNwRixRQUFRLElBQUksQ0FBQywyQkFBMkI7Q0FDeEMsUUFBUSxNQUFNLENBQUMsc0RBQXNEO0NBQ3JFLFFBQVEsSUFBSSxDQUFDLG1GQUFtRjtDQUNoRyxRQUFRLElBQUksQ0FBQyw2RkFBNkY7Q0FDMUcsUUFBUSxNQUFNLENBQUMseUZBQXlGO0FBQ3hHO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRztDQUNkLFFBQVEsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Q0FDaEMsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVTtBQUN4QjtDQUNBLFFBQVEsT0FBTyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLO0FBQ3pDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEdBQUcsV0FBVyxJQUFJLEVBQUU7QUFDaEM7Q0FDQSxRQUFRLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO0NBQzdCLFlBQVksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3BELFNBQVM7QUFDVDtDQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUM3QjtDQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUU7QUFDakY7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7QUFDMUQ7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDMUI7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLFdBQVU7Q0FDckQsUUFBUSxJQUFJLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0NBQ25ELFFBQVEsSUFBSSxNQUFNLEtBQUssU0FBUyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsV0FBVTtDQUN6RCxRQUFRLElBQUksTUFBTSxLQUFLLFNBQVMsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDLFdBQVU7Q0FDekQsUUFBUSxJQUFJLEtBQUssS0FBSyxTQUFTLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFJO0FBQ2pEO0NBQ0EsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksS0FBSSxDQUFDO0NBQ3JFLGFBQWEsSUFBSSxJQUFJLEtBQUk7Q0FDekI7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLGVBQWUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsNkhBQTZILENBQUM7Q0FDclEsUUFBUSxJQUFJLE1BQU0sS0FBSyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksNEJBQTRCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNyRjtDQUNBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcscUNBQXFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7Q0FDOUYsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRywwREFBeUQ7QUFDMUY7Q0FDQSxLQUFLO0FBQ0w7QUFDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxRQUFRLEVBQUUsWUFBWTtBQUMxQjtDQUNBO0NBQ0EsUUFBUSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssRUFBRSxXQUFXLENBQUMsR0FBRztBQUMxQjtDQUNBLFFBQVEsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ25DO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLEVBQUUsVUFBVSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO0FBQ2pEO0NBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7Q0FDaEUsYUFBYSxJQUFJLEdBQUcsS0FBSyxTQUFTLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztDQUMxSCxhQUFhLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzNFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLEVBQUUsVUFBVSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ2hDO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRTtDQUMzQixZQUFZLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzVFLGlCQUFpQixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN2QyxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDekI7Q0FDQSxRQUFRLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO0NBQzNCLFlBQVksSUFBSSxHQUFHLEtBQUssS0FBSyxHQUFHLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3pELFlBQVksSUFBSSxHQUFHLEtBQUssTUFBTSxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDckYsaUJBQWlCLENBQUMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUN6RCxTQUFTO0NBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEdBQUcsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLEVBQUU7QUFDNUI7Q0FDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxPQUFPLEdBQUcsQ0FBQztDQUMxQyxhQUFhLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQzVELGFBQWEsSUFBSSxFQUFFLFlBQVksS0FBSyxFQUFFO0NBQ3RDLFlBQVksR0FBRyxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ25GLFlBQVksR0FBRyxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUN2RyxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEdBQUcsR0FBRyxXQUFXLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUc7QUFDL0M7Q0FDQSxRQUFRLElBQUksR0FBRyxJQUFJLElBQUksS0FBSyxDQUFDO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3BGO0NBQ0EsWUFBWSxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDL0I7Q0FDQSxnQkFBZ0IsR0FBRyxHQUFHLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztDQUNqRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbEM7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsYUFBYSxNQUFNO0NBQ25CO0NBQ0EsZ0JBQWdCLElBQUksR0FBRyxLQUFLLFNBQVMsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0NBQ3pGLGdCQUFnQixDQUFDLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3REO0NBQ0EsYUFBYTtDQUNiO0NBQ0EsU0FBUyxNQUFNO0FBQ2Y7Q0FDQSxZQUFZLElBQUksR0FBRyxLQUFLLFNBQVMsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ3BGLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUNwRjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQzFDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsT0FBTyxHQUFHLENBQUM7Q0FDMUMsYUFBYSxPQUFPLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzlDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxhQUFhLEdBQUcsVUFBVSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztDQUMxRCxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3RCLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7Q0FDL0UsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHLFVBQVUsR0FBRyxFQUFFO0FBQzNCO0NBQ0EsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3ZCLFFBQVEsT0FBTyxHQUFHLENBQUMsVUFBVSxFQUFFO0NBQy9CLFlBQVksS0FBSyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztDQUN2RSxZQUFZLEdBQUcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO0NBQzlDLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxHQUFHLFdBQVcsR0FBRyxHQUFHO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDckMsUUFBUSxJQUFJLENBQUMsRUFBRTtDQUNmLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7Q0FDekIsWUFBWSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ3RCLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUM5QixnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNoRSxhQUFhO0NBQ2IsU0FBUztDQUNULFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsRUFBRTtDQUNmLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7Q0FDekIsWUFBWSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ3RCLGdCQUFnQixDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUM3QyxhQUFhO0NBQ2IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLGdCQUFnQixFQUFFLFlBQVk7QUFDbEM7Q0FDQSxRQUFRLEtBQUssUUFBUSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsS0FBSyxJQUFJLEdBQUcsT0FBTztBQUNuRTtDQUNBLFFBQVEsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQzNDO0NBQ0EsUUFBUSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDO0NBQ3BJLFFBQVEsQ0FBQyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUM7Q0FDbkgsUUFBUSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDakU7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUc7QUFDdEM7Q0FDQSxZQUFZLENBQUMsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDO0NBQ3pFO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxDQUFDLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQztBQUMzRTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksY0FBYyxFQUFFLFlBQVk7QUFDaEM7Q0FDQSxRQUFRLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUM7Q0FDbEU7Q0FDQSxRQUFRLEtBQUssU0FBUyxLQUFLLElBQUksR0FBRztDQUNsQztDQUNBLFlBQVksU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsR0FBRyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUNyRyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDO0NBQ25EO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUN6QjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxTQUFTLEdBQUcsV0FBVyxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ3BDO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDdkM7Q0FDQTtDQUNBLFFBQVEsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3JELFFBQVEsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtDQUM1QixZQUFZLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RCxTQUFTO0NBQ1QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQjtDQUNBO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ2hDLFlBQVksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDaEQsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNqRixZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUM3QyxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxhQUFhLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDbEM7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLENBQUM7Q0FDN0Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxHQUFHO0NBQzFDLFFBQVEsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0NBQzFCLFFBQVEsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRztDQUN0QyxVQUFVLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQztDQUNqRSxTQUFTO0NBQ1QsUUFBUSxPQUFPLFFBQVEsQ0FBQztDQUN4QixLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsRUFBRSxXQUFXLENBQUMsR0FBRztDQUM5QixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7Q0FDM0MsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzVEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDOUI7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDMUI7Q0FDQSxRQUFRLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEdBQUcsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDM0I7Q0FDQSxRQUFRLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN6QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMvRSxhQUFhLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUU7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRztDQUN6QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztDQUN6RCxRQUFRLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDeEMsUUFBUSxPQUFPLENBQUMsQ0FBQztDQUNqQixLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRztBQUN6QjtDQUNBLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDNUU7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUMxQjtDQUNBLFFBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakg7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtDQUN0QixRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDckMsUUFBUSxPQUFPLENBQUMsQ0FBQztDQUNqQixLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BELFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQztDQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0NBQ2xDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Q0FDbEUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDakosUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7Q0FDdkIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztDQUMzRCxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0NBQ2pFLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7Q0FDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ25CLFNBQVM7Q0FDVCxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQztDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFDLGFBQWE7Q0FDYixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Q0FDM0QsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDMUIsWUFBWSxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO0NBQ3pHLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxZQUFZLEVBQUUsV0FBVyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUc7QUFDOUQ7Q0FDQSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQ7Q0FDQSxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUI7Q0FDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9HO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLEVBQUUsV0FBVyxLQUFLLEdBQUc7QUFDaEM7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUc7Q0FDcEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxvQkFBb0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Q0FDcEosUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDcEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9GLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNySDtDQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDN0ksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM5SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ25JLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLEtBQUssR0FBRztBQUNqQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3BCLFFBQVEsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0NBQ3hCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0NBQ2hKLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDakksUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDMUgsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzFILFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsdUJBQXVCLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMxSixRQUFRLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxZQUFZLEVBQUUsV0FBVyxLQUFLLEdBQUc7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUNwQixRQUFRLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztDQUN4QixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztDQUNoSixRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUN6SCxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUN6SCxRQUFRLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxZQUFZLEVBQUUsV0FBVyxLQUFLLEdBQUc7QUFDckM7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDO0NBQ3pCLFFBQVEsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDNUMsUUFBUSxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNqRCxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztDQUNoSixRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDdkMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDekI7Q0FDQTtBQUNBO0NBQ0E7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsZUFBZSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzVILFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pIO0NBQ0E7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUN0RSxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtDQUNBO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7Q0FDMUUsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDMUU7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNIO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1SDtDQUNBO0FBQ0E7Q0FDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUN0RixZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNwRyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RjtDQUNBLFlBQVksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDL0I7Q0FDQSxTQUFTLE1BQU07Q0FDZjtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUM1RixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSDtDQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxD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QUFFLENBQUMsRUFBRSxDQUFDO0NBQ25HLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzlJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLG9GQUFvRixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQy9LO0FBQ0E7Q0FDQSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUc7Q0FDQSxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQzFCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtBQUNyQztDQUNBLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FD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O0FBQ0Y7Q0FDQSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDZCxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ2YsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNSO0NBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ2QsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNYO0NBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQzFDO0NBQ0EsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDWjtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2YsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZjtDQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Q7Q0FDQSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElB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QUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUMxRCxTQUFTLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7Q0FDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3ZEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0NBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztDQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDeEM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztDQUNwQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0M7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Q0FDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztDQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQzVCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ25DO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7Q0FDakUsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztDQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFlBQVksS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUM7Q0FDN0UsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDO0FBQ2hGO0NBQ0E7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7Q0FDNUUsTUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDNUUsS0FBSztBQUNMO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCO0NBQ0E7Q0FDQSxJ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QUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hDLE9BQU87Q0FDUCxNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3ZCLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7Q0FDekMsR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksR0FBRztDQUNULElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDckM7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztDQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0NBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUM1RDtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtDQUN6QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0NBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0NBQ2hDLEtBQUssTUFBTTtDQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0NBQ3pDLEtBQUs7QUFDTDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtDQUM5QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQ3hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDdEMsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzFCO0NBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0NBQzlCLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMvQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQzFCLE9BQU87Q0FDUCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksRUFBRTtDQUNWLE1BQU0sSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJO0NBQzFCLFVBQVUsSUFBSSxDQUFDLE1BQU07Q0FDckIsVUFBVSxJQUFJLENBQUMsSUFBSTtDQUNuQixVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztDQUN6QixVQUFVLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDeEI7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pFLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QjtDQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQjtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO0NBQ3BCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztDQUM3QyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdEIsS0FBSztDQUNMLEdBQUc7QUFDSDtDQUNBLEVBQUUsYUFBYSxHQUFHO0NBQ2xCLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtDQUNwRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7Q0FDOUUsS0FBSztDQUNMLEdBQUc7QUFDSDtDQUNBO0FBQ0E7Q0FDQSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0NBQy9CLElBQUksT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUM5QyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO0NBQ3BDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDNUMsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtDQUNuQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQzNCLEdBQUc7QUFDSDtDQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQ3pCLElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDeEMsR0FBRztBQUNIO0NBQ0EsRUFBRSxZQUFZLEdBQUc7Q0FDakIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7Q0FDaEQsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0NBQ3hDLEdBQUc7QUFDSDtDQUNBLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRTtDQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDL0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQ25ELEdBQUc7QUFDSDtDQUNBLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRTtDQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDbkQsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0NBQ3ZDLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRTtDQUNqQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDM0MsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ25DLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRTtDQUNsQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDM0MsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3BDLEdBQUc7QUFDSDtDQUNBO0FBQ0E7Q0FDQSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Q0FDZixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdkIsR0FBRztBQUNIO0NBQ0E7QUFDQTtDQUNBLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFDYjtDQUNBLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDWjtDQUNBO0FBQ0E7Q0FDQSxFQUFFLE9BQU8sR0FBRztDQUNaLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3JCLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxHQUFHO0NBQ1gsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckIsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO0NBQzFCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTztDQUNqQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztDQUM5RCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLE1BQU0sR0FBRztDQUNYLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU87Q0FDMUIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPO0NBQ2pDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO0NBQ2xFLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtDQUNaLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7Q0FDM0QsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLEdBQUc7Q0FDWCxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMxQyxJQUFJLE9BQU8sSUFBSSxDQUFDO0NBQ2hCLEdBQUc7QUFDSDtDQUNBLEVBQUUsU0FBUyxHQUFHO0NBQ2Q7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsT0FBTztDQUN6QyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPO0NBQzVCLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU87Q0FDNUI7Q0FDQSxJQUFJLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztDQUNwRSxJQUFJLE9BQU8sVUFBVSxDQUFDO0NBQ3RCLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtDQUNkLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQixJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckQ7Q0FDQSxTQUFTLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQ2xCLElBQUksSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0NBQzNCLElBQUksSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRTtDQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7Q0FDeEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLFVBQVUsQ0FBQztDQUN0QixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtDQUNkLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU87Q0FDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7Q0FDOUIsSUFBSSxPQUFPLElBQUksQ0FBQztDQUNoQixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRTtDQUNwQixJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPO0NBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Q0FDekIsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztDQUN6QixJQUFJLE9BQU8sSUFBSSxDQUFDO0NBQ2hCLEdBQUc7QUFDSDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0NBQ1osSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztDQUMxQixJQUFJLE9BQU8sSUFBSSxDQUFDO0NBQ2hCLEdBQUc7QUFDSDtDQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtDQUNiLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7Q0FDM0IsSUFBSSxPQUFPLElBQUksQ0FBQztDQUNoQixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtDQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ3hCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3ZCLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEUsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0NBQ3hELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0EsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0NBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0RSxHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsT0FBTyxHQUFHO0NBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtDQUNBLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7Q0FDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3pELFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlDLEtBQUssTUFBTTtDQUNYLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzlDLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hELEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0NBQ3pCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztDQUMxQixHQUFHO0FBQ0g7Q0FDQSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ1o7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsUUFBUSxHQUFHO0NBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2xDLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDeEIsR0FBRztBQUNIO0NBQ0EsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO0NBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPO0FBQ2hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQjtDQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0NBQ3JCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDakMsS0FBSyxNQUFNO0NBQ1gsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDdkM7Q0FDQTtDQUNBLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUNuQyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztDQUM3QyxLQUFLO0NBQ0wsR0FBRztBQUNIO0NBQ0EsRUFBRSxLQUFLLEdBQUc7Q0FDVixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU87Q0FDaEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNwRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ3ZELEdBQUc7QUFDSDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFO0NBQ25CLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDekI7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0NBQ25CLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtDQUMvQixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0NBQ2hFLFdBQVcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQ2hDLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQ3ZELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUN0RCxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDakU7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ1Y7Q0FDQSxJQUFJLFFBQVEsSUFBSSxDQUFDLFNBQVM7Q0FDMUIsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDZCxRQUFRLE1BQU07Q0FDZCxNQUFNLEtBQUssQ0FBQztDQUNaLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUNoQixRQUFRLE1BQU07Q0FDZCxNQUFNLEtBQUssQ0FBQztDQUNaLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNqQixRQUFRLE1BQU07Q0FDZCxNQUFNLEtBQUssQ0FBQztDQUNaLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztDQUNsQixRQUFRLE1BQU07Q0FDZCxNQUFNLEtBQUssQ0FBQztDQUNaLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztDQUNuQixRQUFRLE1BQU07Q0FDZCxNQUFNLEtBQUssQ0FBQztDQUNaLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQztDQUNwQixRQUFRLE1BQU07Q0FDZCxNQUFNLEtBQUssQ0FBQztDQUNaLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztDQUNyQixRQUFRLE1BQU07Q0FDZCxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Q0FDbEQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNyQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDM0MsR0FBRztBQUNIO0NBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0NBQ2QsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDcEMsSUFBSTtDQUNKLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztDQUMzRSxNQUFNO0NBQ04sR0FBRztBQUNIO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7Q0FDakIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTztDQUMxQixJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztDQUMzQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUNyQixNQUFNLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGdDQUFnQyxDQUFDLENBQUM7QUFDckU7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NB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QUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7Q0FDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFLO0NBQ3JDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUM7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBRztDQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0NBQzFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0NBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUU7QUFDOUI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0NBQzVCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0NBQzlCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDOUQsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFH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LENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTTtDQUN0RSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUk7Q0FDbkUsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNuRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7Q0FDQSxTQUFTO0FBQ1Q7QUFDQTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0NBQ3JELFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFFO0NBQ3BFLFNBQVM7Q0FDVDtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssR0FBRztBQUNaO0NBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUs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QUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakM7Q0FDQSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzlCO0NBQ0EsWUFBWSxRQUFRLENBQUM7QUFDckI7Q0FDQSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztDQUNoRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSztDQUNyRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSztDQUNsRixnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztBQUN0RjtDQUNBLGFBQWE7QUFDYjtDQUNBLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxNQUFNO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUM7Q0FDckIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0NBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzNCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHO0FBQ3hCO0NBQ0EsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNuQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE9BQU07QUFDdEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFlBQVksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0NBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0NBQ3hELEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNsQztDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUM7Q0FDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDckM7Q0FDQSxRQUFRLE9BQU8sSUFBSTtBQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDekIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUU7Q0FDL0I7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7Q0FDckIsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFJO0NBQ2xEO0NBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUM7Q0FDNUQsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0NBQ0E7Q0FDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztDQUNyRSxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0NBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJ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QUFXLEdBQUU7QUFDdEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7Q0FDekQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQzNFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQzVGO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ25CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRTtBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtD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QUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEM7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztDQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRTtDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3JDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQy9DO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVB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QUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xHO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0NBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtDQUNoQyxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Q0FDakosWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN6RDtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxFQUFFLEdB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RSxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDN0I7QUFDQTtDQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7Q0FDOUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQzNDO0NBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDdkI7Q0FDQSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtDQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDOUIsUUFBUTtBQUNSO0NBQ0EsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQzNCO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRztBQUNoQztDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7Q0FDQSxTQUFTLE1BQU07QUFDZjtDQUNBLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUNoQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMs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RyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQzVDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDM0UsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2pDO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRDtDQUNBLFNBQVM7Q0FDVCxLQUFLO0NBQ0wsSUFBSTtDQUNKLEdBQUc7QUFDSDtDQUNBLEVBQUU7QUFDRjtDQUNBO0FBQ0E7Q0FDQSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2Q7Q0FDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0NBQ2pFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0NBQ2xDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNsRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQztDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDVDtDQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Y7Q0FDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQjtDQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0NBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztDQUN0QztDQUNBLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QjtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtDQUNBLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0NBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUM7Q0FDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtDQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7Q0FDdEM7Q0FDQSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FB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SUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0NBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0EsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDMUM7Q0FDQSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0NBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMzQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztDQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztDQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0M7Q0FDQSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQztDQUNBO0NBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRTtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzVDO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDN0UsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtDQUNBLEVBQUU7QUFDRjtDQUNBLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDVjtDQUNBO0NBQ0EsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEI7Q0FDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDO0NBQ0E7QUFDQTtDQUNBLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0E7Q0FDQSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0NBQzVEO0NBQ0E7Q0FDQSxFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBO0NBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDaEM7QUFDQTtBQUNBO0NBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakI7Q0FDQTtDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztDQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRTtBQUM5QztDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtDQUM5RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0NBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7Q0FDcEM7Q0FDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNuQztDQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7Q0FDbEMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztDQUM1QyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUU7QUFDckI7Q0FDQSxFQUFFO0FBQ0Y7QUFDQTtDQUNBOztDQ3BhTyxNQUFNLEdBQUcsU0FBUyxLQUFLLENBQUM7QUFDL0I7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoQztDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDbkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7Q0FDL0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztDQUMxQztBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzlDLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0RDtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN4QztDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUNyQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztDQUN6QixRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0NBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN4QjtDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFFO0NBQ3RDLFlBQVksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Q0FDL0IsWUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztDQUM5QixZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUN4QixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDekIsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QjtDQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN4RjtDQUNBO0NBQ0E7QUFDQTtDQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzVCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3ZDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3JDO0NBQ0EsYUFBYTtBQUNiO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBSztBQUN0QztDQUNBLFNBQVM7QUFDVDtBQUNBO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdDLFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNoQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN6QztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztDQUMzQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksUUFBUSxHQUFHLCtCQUErQixFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsOEVBQThFLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7QUFDaE07Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsUUFBUSxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2pGO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ2xFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0NBQ2xELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0NBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDL0Q7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0NBQzdLO0FBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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QyxDQUFDLENBQUM7Q0FDdkUsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDbkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Q0FDMUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzFFLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbEMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQjtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWjtDQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRTtBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekM7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0NBQ2xFLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7Q0FDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7Q0FDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7Q0FDcEMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0NBQ25FLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzNEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztDQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztDQUNuQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztDQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7Q0FDakM7Q0FDQSxLQUFLO0FBQ0w7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3BDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxHQUFHLENBQUMsR0FBRztBQUNYO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3hDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDdkI7Q0FDQSxRQUFRLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHO0FBQzNDO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDdkY7Q0FDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0NBQ2pDLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxZQUFZLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRztBQUM5QjtDQUNBLGdCQUFnQixJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztDQUNqRSxnQkFBZ0IsSUFBSSxhQUFhLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7QUFDdkU7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztDQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDO0FBQ25EO0NBQ0EsYUFBYTtBQUNiO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0RDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ3pCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN2RDtDQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUN2RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDcEQ7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztDQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztDQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztDQUNuQztDQUNBLEtBQUs7Q0FDTDtDQUNBOztDQzNVTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JDO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0NBQ3JFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztDQUNsRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDbEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQ7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0NBQ3hFLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNqQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0NBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDakQ7Q0FDQSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0NBQy9CLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0NBQy9DLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtDQUN6RCxhQUFhO0NBQ2I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0NBQ0E7QUFDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHlEQUF5RCxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUM1TDtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQ7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Q0FDdEosUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0gsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEo7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3hELFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztDQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3JDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3RGLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDN0Q7Q0FDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5SDtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtDQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0NBQzFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUM7Q0FDOUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSTtDQUM5QyxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0NBQ3JDLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDM0MsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUM7Q0FDaEYsaUJBQWlCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7Q0FDM0QsU0FBUztDQUNULFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxXQUFXLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsa0NBQWlDO0NBQ3BFLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFHO0NBQzlCLFFBQVEsSUFBSSxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFJO0NBQ3JDLFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUNsQixZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLHFCQUFvQjtDQUNqRyxpQkFBaUIsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBTztDQUN0RSxZQUFZLENBQUMsR0FBRTtDQUNmLFNBQVM7Q0FDVCxRQUFRLE9BQU8sQ0FBQztDQUNoQixLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUU7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hDO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUNuRixZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3BILGlCQUFpQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BHO0NBQ0EsU0FBUztBQUNUO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNqRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDakQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3pCO0NBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0NBQ3hDLFNBQVMsT0FBTyxDQUFDLEVBQUUsRUFBRTtDQUNyQixhQUFhLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDdkQsVUFBVTtDQUNWLE1BQU07QUFDTjtDQUNBLFFBQVEsT0FBTyxFQUFFO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ3JCO0NBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0NBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNYO0NBQ0EsUUFBUSxPQUFPLENBQUM7Q0FDaEIsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTTtDQUNqQyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNO0NBQ2pDLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Q0FDL0IsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUM5RCxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCO0NBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLEtBQUssSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDO0NBQ3JCO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDekIsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQ2xCLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtDQUNyQyxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbEMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUNyRSxnQkFBZ0IsR0FBRyxHQUFHLElBQUksQ0FBQztDQUMzQixhQUFhO0NBQ2IsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztDQUM1QixRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN0RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztDQUN4QixRQUFRLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsS0FBSyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDckI7Q0FDQSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakM7Q0FDQSxLQUFLLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUN0QjtDQUNBLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMvQjtBQUNBO0NBQ0EsU0FBUyxNQUFNO0FBQ2Y7Q0FDQSxZQUFZLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztDQUN6RDtDQUNBLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQzNCLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM5RyxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDakMsYUFBYTtBQUNiO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtDQUNBLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFFO0NBQ3JDO0FBQ0E7Q0FDQSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JDO0NBQ0EsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFDO0NBQzVDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNwQztDQUNBLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUc7Q0FDMUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFFO0FBQ3RCO0NBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0NBQ3pELFdBQVcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztDQUN4RSxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0FBQ2xEO0NBQ0EsTUFBTSxFQUFFLEdBQUcsR0FBRTtDQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUM7QUFDWjtDQUNBLE1BQU07QUFDTjtDQUNBLEtBQUssT0FBTyxDQUFDO0FBQ2I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQztDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFFO0NBQzVCLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDO0NBQ2pELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRTtBQUNsQjtDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSTtBQUM5QjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0M7Q0FDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRTtDQUM5QyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUN2QztDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDbFRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxLQUFLLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSTtDQUNyQixRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBQztDQUNwQixRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRTtDQUN6QixRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7Q0FDbEIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ25CO0NBQ0EsS0FBSztDQUNMO0NBQ0E7O0NDVE8sTUFBTSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ2pDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFJO0FBQzlCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUU7Q0FDckIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBQztDQUN6QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtDQUN6QixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUMzQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFDO0NBQ3BDO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDakQ7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztBQUM1QztDQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtDQUMzQixRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsb0NBQW9DLEdBQUcsR0FBRTtBQUMvRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsNENBQTRDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQztDQUM1SCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDNUs7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUk7Q0FDMUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHNC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QyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0NBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7Q0FDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0NBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSTtBQUN2QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUU7QUFDN0M7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBOztDQzVjTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztDQUNwQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7Q0FDMUMsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0NBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87Q0FDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM1RDtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDN0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0M7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Q0FDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0NBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDbkksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2hFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ25ELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzVFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDN0Y7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQ3BCO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMzQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsT0FBTyxJQUFJO0NBQ25CLFlBQVksS0FBSyxDQUFDO0NBQ2xCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0NBQ2xDLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN4RSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDbEUsaUJBQWlCLE1BQU07Q0FDdkIsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNyRTtDQUNBLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDckUsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2hFLGlCQUFpQjtDQUNqQjtDQUNBLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssQ0FBQztDQUNsQixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztDQUNsQyxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDekUsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzNFLGlCQUFpQixNQUFNO0NBQ3ZCLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDdEU7Q0FDQSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3hFLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDcEUsaUJBQWlCO0NBQ2pCLFlBQVksTUFBTTtBQUdsQjtDQUNBLFNBQVM7Q0FDVCxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksV0FBVyxDQUFDLEVBQUU7Q0FDbEIsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztDQUN6RCxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPO0NBQ3ZDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ25GO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxZQUFZLENBQUMsRUFBRTtBQUNuQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksR0FBRyxPQUFPO0NBQzVDLFFBQVEsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztDQUN2QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDaEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FO0NBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHO0NBQ3hDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQzNELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0NBQzNELFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekU7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztDQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNwQztDQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQzVFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RTtDQUNBLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RTtDQUNBLGFBQWE7QUFDYjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDN0I7QUFDQTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Q0FDbEUsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFO0NBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0M7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDN0QsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdELFNBQVMsTUFBTTtDQUNmLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUQsU0FBUztBQUNUO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7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STtDQUMxQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQUs7Q0FDN0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUk7Q0FDeEIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRTtDQUMzQixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QjtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztDQUN0QyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztDQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDNUMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7Q0FDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUc7Q0FDOUI7Q0FDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQ3JEO0NBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0NBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7Q0FDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN4RCxhQUFhO0NBQ2I7Q0FDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7Q0FDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0NBQ3hCO0NBQ0EsU0FBUztDQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDekQsUUFBUSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDNUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDMUM7QUFDQTtDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixZQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDNUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxVQUFVLEdBQUcsUUFBUSxLQUFLLEtBQUssQ0FBQztDQUNyRCxTQUFTLE1BQU07Q0FDZixZQUFZLElBQUksR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3JELFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7Q0FDMUIsU0FBUztBQUNUO0NBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHO0FBQzNDO0NBQ0EsWUFBWSxDQUFDLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztDQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUNoRCxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDaEQsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDOUQ7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDM0MsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUQ7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3JFO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ2pDLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQztDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztDQUNuQyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNyRjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUM5QjtDQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7Q0FDbkMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ3BDLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pJO0NBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Q0FDbkssWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN6RDtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDbFFPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDaEM7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztDQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7Q0FDckM7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ3pELFFBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDckM7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzVDO0FBQ0E7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3RDO0NBQ0E7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksR0FBRTtDQUNuQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFLO0NBQzNDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQUs7QUFDN0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVE7Q0FDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU07Q0FDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFdBQVU7QUFDekU7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxD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QUFDLENBQUM7Q0FDakQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUMvQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzlDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDOUM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztDQUN2RCxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztDQUMvRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwRDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7Q0FDdkMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUN4QyxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQy9CLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHO0FBQzlCO0NBQ0EsWUFBWSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFDO0NBQzdELFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUM7Q0FDcEQsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQztDQUNyRCxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDO0NBQ3pELFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVE7Q0FDakQsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUM1RTtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0NBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUM7Q0FDQSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUM3TyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLEVBQUM7Q0FDakMsWUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUN4QixZ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LElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztDQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQzVCLFFBQVEsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0NBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNyQztDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzVCO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0I7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDNUQsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVDO0NBQ0EsS0FB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LENBQUMsR0FBRztBQUMxQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDdEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0NBQ3ZFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBSztDQUN0QyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFJO0NBQ2hELFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUk7Q0FDbEQsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSTtDQUMzQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0NBQzNDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDdEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU07Q0FDckIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRTtDQUM1QyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFJO0NBQ3pDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUk7QUFDekM7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRTtDQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQ3hCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLEtBQUk7QUFDdEM7Q0FDQSxRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDbEIsU0FBUyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQ2xELGdCQUFnQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQ3RFLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEdBQUcsR0FBRTtDQUNoRCxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0NBQ2xDLGFBQWEsTUFBTTtDQUNuQixnQkFBZ0IsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO0NBQzNELGFBQWE7QUFDYjtDQUNBLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7Q0FDM0MsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU07Q0FDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRTtBQUMvQztDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0NBQ3JCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFFO0NBQy9CLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0NBQ2xDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBRztDQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0NBQ3RCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUc7QUFDeEI7Q0FDQSxRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDbEI7Q0FDQSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFFO0NBQ2xFLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0NBQzVELFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0NBQ25ELFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FB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LENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzNCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDL0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BEO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0NBQzFCLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQztDQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDO0NBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztDQUNkLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztDQUN2QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEI7Q0FDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7Q0FDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7Q0FDaEMsT0FBTztBQUNQO0NBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDN0Q7Q0FDQSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFF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QUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDNUQsUUFBUSxNQUFNO0NBQ2QsS0FBSztDQUNMLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtDQUNiLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRDtDQUNBLElBQUksSUFBSSxPQUFPO0NBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RTtDQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0NBQzNDO0FBQ0E7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztDQUN0RCxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRTtDQUNBLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQ3hCLEdBQUc7QUFDSDtDQUNBLEVBQUUsS0FBSyxHQUFHO0NBQ1YsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtDQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztDQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3JELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0I7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0NBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3BDO0NBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztD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USxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQzlCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDeEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7Q0FDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0M7Q0FDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNERBQTRELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4TDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMs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QUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RELFNBQVM7QUFDVDtDQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0NBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0NBQzVELFNBQVM7QUFDVDtDQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDOUIsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDdEMsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFLO0NBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0NBQzdCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUM7Q0FDOUMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ3ZCLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLO0NBQ3RDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUNsQztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7Q0FDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFFO0FBQ3JDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7Q0FDN0IsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQztDQUNsQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0NBQzVELFNBQVMsTUFBTTtDQUNmLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMzQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLE9BQU8sRUFBRSxDQUFDO0FBQ2xCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFB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QUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUM3RCxhQUFhLE1BQU07Q0FDbkIsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDOUQsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUM3RCxhQUFhO0FBQ2I7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztDQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQzNELFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsRDtDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQzFUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0NBQy9CLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztDQUMzQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBQztBQUNwQztDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRTtBQUN4QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztDQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZEO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7Q0FDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25EO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMvQztDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0NBQ0E7QUFDQTtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckU7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM5RjtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztDQUNBO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0NBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0NBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztDQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Q0FDM0ksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUNqQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQzlDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0NBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2hEO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDckUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUN0RjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFHO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ25CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRTtBQUN2QjtDQUNBLEtBQUs7Q0FDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0NBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQztDQUM3RCxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxDQUFDO0NBQzFFLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDMUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUMxQztDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hDLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUU7Q0FDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtDQUN6RTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDL0I7Q0FDQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7Q0FDbEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCO0NBQ0EsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7Q0FDdkQsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDdkQ7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQ2pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxRQUFRLElBQUk7Q0FDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztDQUMzRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBQztDQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztDQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztDQUM3RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUM5RDtDQUNBLFlBQVksTUFBTTtDQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0NBQ2hELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0NBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0NBQzlELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0NBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDO0NBQ2hFLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFFO0NBQ3BFO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtDQUNBO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDL0I7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNqQjtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVDO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU07QUFDN0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEU7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0M7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUN2RyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFDcEg7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzFCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7O0NDclJBO0FBSUE7Q0FDTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7Q0FDcEMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtDQUNyQjtDQUNBO0NB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QUM7QUFDNUM7Q0FDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUMvQyxHQUFHLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDOUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0NBQzNCLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUM1QyxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ3BDLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ3BELElBQUksSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0NBQ3JCLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQy9DLEtBQUssTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QixLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNqRCxLQUFLLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzFDLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUs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QyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDaEMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNmO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQjtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUNqQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJ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QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZEO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtDQUNYLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0NBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEM7Q0FDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzdDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUM7Q0FDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFDO0NBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0NBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDdkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDaEQsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3pCLEdBQUc7QUFDSDtDQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtDQUNaLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDakQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNoQixHQUFHO0FBQ0g7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLEVBQUUsT0FBTyxHQUFHO0NBQ1osSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0QsR0FBRztBQUNIO0NBQ0EsRUFBRSxJQUFJLEdBQUc7Q0FDVCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN6RCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFNBQVMsR0FBRztDQUNkLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFD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QU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUM3QyxHQUFHO0FBQ0g7Q0FDQSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUU7Q0FDbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztDQUM1QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDaEIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3QixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDMUIsS0FBSztDQUNMLEdBQUc7Q0FDSDs7Ozs7Ozs7Ozs7Ozs7In0= +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY29yZS9Sb290cy5qcyIsIi4uL3NyYy9jb3JlL1Rvb2xzLmpzIiwiLi4vc3JjL2NvcmUvRmlsZXMuanMiLCIuLi9zcmMvY29yZS9WMi5qcyIsIi4uL3NyYy9jb3JlL1Byb3RvLmpzIiwiLi4vc3JjL3Byb3RvL0Jvb2wuanMiLCIuLi9zcmMvcHJvdG8vQnV0dG9uLmpzIiwiLi4vc3JjL3Byb3RvL0NpcmN1bGFyLmpzIiwiLi4vc3JjL3Byb3RvL0NvbG9yLmpzIiwiLi4vc3JjL3Byb3RvL0Zwcy5qcyIsIi4uL3NyYy9wcm90by9HcmFwaC5qcyIsIi4uL3NyYy9wcm90by9FbXB0eS5qcyIsIi4uL3NyYy9wcm90by9Hcm91cC5qcyIsIi4uL3NyYy9wcm90by9Kb3lzdGljay5qcyIsIi4uL3NyYy9wcm90by9Lbm9iLmpzIiwiLi4vc3JjL3Byb3RvL0xpc3QuanMiLCIuLi9zcmMvcHJvdG8vTnVtZXJpYy5qcyIsIi4uL3NyYy9wcm90by9TbGlkZS5qcyIsIi4uL3NyYy9wcm90by9UZXh0SW5wdXQuanMiLCIuLi9zcmMvcHJvdG8vVGl0bGUuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0LmpzIiwiLi4vc3JjL3Byb3RvL0JpdG1hcC5qcyIsIi4uL3NyYy9wcm90by9TZWxlY3Rvci5qcyIsIi4uL3NyYy9wcm90by9JdGVtLmpzIiwiLi4vc3JjL3Byb3RvL0dyaWQuanMiLCIuLi9zcmMvcHJvdG8vUGFkMkQuanMiLCIuLi9zcmMvcHJvdG8vVHJlZUxpc3QuanMiLCIuLi9zcmMvY29yZS9hZGQuanMiLCIuLi9zcmMvY29yZS9HdWkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFVklTSU9OID0gXCI0LjMuMFwiO1xyXG5cclxuLy8gSU5URU5BTCBGVU5DVElPTlxyXG5cclxuY29uc3QgUiA9IHtcclxuICB1aTogW10sXHJcblxyXG4gIGRvbTogbnVsbCxcclxuXHJcbiAgSUQ6IG51bGwsXHJcbiAgbG9jazogZmFsc2UsXHJcbiAgd2xvY2s6IGZhbHNlLFxyXG4gIGN1cnJlbnQ6IC0xLFxyXG5cclxuICBuZWVkUmVab25lOiB0cnVlLFxyXG4gIG5lZWRSZXNpemU6IGZhbHNlLFxyXG4gIGZvcmNlWm9uZTogZmFsc2UsXHJcbiAgaXNFdmVudHNJbml0OiBmYWxzZSxcclxuICBpc0xlYXZlOiBmYWxzZSxcclxuICBhZGRET01FdmVudExpc3RlbmVyczogdHJ1ZSxcclxuXHJcbiAgZG93blRpbWU6IDAsXHJcbiAgcHJldlRpbWU6IDAsXHJcblxyXG4gIC8vcHJldkRlZmF1bHQ6IFsnY29udGV4dG1lbnUnLCAnd2hlZWwnXSxcclxuICBwcmV2RGVmYXVsdDogW1wiY29udGV4dG1lbnVcIl0sXHJcbiAgcG9pbnRlckV2ZW50OiBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdLFxyXG4gIGV2ZW50T3V0OiBbXCJwb2ludGVyY2FuY2VsXCIsIFwicG9pbnRlcm91dFwiLCBcInBvaW50ZXJsZWF2ZVwiXSxcclxuXHJcbiAgeG1sc2VyaWFsaXplcjogbnVsbCxcclxuICB0bXBUaW1lOiBudWxsLFxyXG4gIHRtcEltYWdlOiBudWxsLFxyXG5cclxuICBvbGRDdXJzb3I6IFwiYXV0b1wiLFxyXG5cclxuICBpbnB1dDogbnVsbCxcclxuICBwYXJlbnQ6IG51bGwsXHJcbiAgZmlyc3RJbXB1dDogdHJ1ZSxcclxuXHJcbiAgaGlkZGVuSW1wdXQ6IG51bGwsXHJcbiAgaGlkZGVuU2l6ZXI6IG51bGwsXHJcbiAgaGFzRm9jdXM6IGZhbHNlLFxyXG4gIHN0YXJ0SW5wdXQ6IGZhbHNlLFxyXG4gIGlucHV0UmFuZ2U6IFswLCAwXSxcclxuICBjdXJzb3JJZDogMCxcclxuICBzdHI6IFwiXCIsXHJcbiAgcG9zOiAwLFxyXG4gIHN0YXJ0WDogLTEsXHJcbiAgbW92ZVg6IC0xLFxyXG5cclxuICBkZWJ1Z0lucHV0OiBmYWxzZSxcclxuXHJcbiAgaXNMb29wOiBmYWxzZSxcclxuICBsaXN0ZW5zOiBbXSxcclxuXHJcbiAgZToge1xyXG4gICAgdHlwZTogbnVsbCxcclxuICAgIGNsaWVudFg6IDAsXHJcbiAgICBjbGllbnRZOiAwLFxyXG4gICAga2V5Q29kZTogTmFOLFxyXG4gICAga2V5OiBudWxsLFxyXG4gICAgZGVsdGE6IDAsXHJcbiAgfSxcclxuXHJcbiAgaXNNb2JpbGU6IGZhbHNlLFxyXG5cclxuICBub3c6IG51bGwsXHJcbiAgbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICBnZXRUaW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm5vd1xyXG4gICAgICA/IHNlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpXHJcbiAgICAgIDogRGF0ZS5ub3c7XHJcbiAgfSxcclxuXHJcbiAgYWRkOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy8gUi51aVswXSBpcyBkZSBHVUkgb2JqZWN0IHRoYXQgaXMgYWRkZWQgZmlyc3QgYnkgdGhlIGNvbnN0cnVjdG9yXHJcbiAgICBSLnVpLnB1c2gobyk7XHJcbiAgICBSLmdldFpvbmUobyk7XHJcblxyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgUi5pbml0RXZlbnRzKCk7XHJcbiAgfSxcclxuXHJcbiAgdGVzdE1vYmlsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG4gPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICBuLm1hdGNoKC9BbmRyb2lkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL3dlYk9TL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQaG9uZS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGFkL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL2lQb2QvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvQmxhY2tCZXJyeS9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlOiBmdW5jdGlvbiAobykge1xyXG4gICAgbGV0IGkgPSBSLnVpLmluZGV4T2Yobyk7XHJcblxyXG4gICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgIFIucmVtb3ZlTGlzdGVuKG8pO1xyXG4gICAgICBSLnVpLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi51aS5sZW5ndGggPT09IDApIHtcclxuICAgICAgUi5yZW1vdmVFdmVudHMoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIFIuaXNNb2JpbGUgPSBSLnRlc3RNb2JpbGUoKTtcclxuICAgIFIubm93ID0gUi5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUiwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvbS5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiUi5hZGRET01FdmVudExpc3RlbmVycyBcIiArIFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpO1xyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20uYWRkRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSIClcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIFIpO1xyXG5cclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIFIsIGZhbHNlKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgIC8vd2luZG93Lm9uYmx1ciA9IFIub3V0O1xyXG4gICAgLy93aW5kb3cub25mb2N1cyA9IFIuaW47XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSB0cnVlO1xyXG4gICAgUi5kb20gPSBkb207XHJcbiAgfSxcclxuXHJcbiAgcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuaXNFdmVudHNJbml0KSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gICAgaWYgKCFSLmlzTW9iaWxlKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgUik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMpIHtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBSKTtcclxuICAgICAgLy9kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3BvaW50ZXJvdXQnLCBSICk7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBSKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIFIucmVzaXplKTtcclxuXHJcbiAgICBSLmlzRXZlbnRzSW5pdCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBpZiAodS5pc0d1aSAmJiAhdS5pc0NhbnZhc09ubHkgJiYgdS5hdXRvUmVzaXplKSB1LmNhbGMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gICAgUi5uZWVkUmVzaXplID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIG91dFwiKTtcclxuICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIGluOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImltIGFtIGluXCIpO1xyXG4gICAgLy8gIFIuY2xlYXJPbGRJRCgpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEhBTkRMRSBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZha2VVcDogZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudCh7IHR5cGU6IFwicG9pbnRlcnVwXCIgfSk7XHJcbiAgfSxcclxuXHJcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJvb3RzLmhhbmRsZUV2ZW50IFwiK2V2ZW50LnR5cGUpXHJcbiAgICAvL2lmKCFldmVudC50eXBlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIucHJldkRlZmF1bHQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKFIubmVlZFJlc2l6ZSkgUi5yZXNpemUoKTtcclxuXHJcbiAgICBSLmZpbmRab25lKFIuZm9yY2Vab25lKTtcclxuXHJcbiAgICBsZXQgZSA9IFIuZTtcclxuICAgIGxldCBsZWF2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgUi5rZXlkb3duKGV2ZW50KTtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIFIua2V5dXAoZXZlbnQpO1xyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSBcIndoZWVsXCIpIGUuZGVsdGEgPSBldmVudC5kZWx0YVkgPiAwID8gMSA6IC0xO1xyXG4gICAgZWxzZSBlLmRlbHRhID0gMDtcclxuXHJcbiAgICBsZXQgcHR5cGUgPSBldmVudC5wb2ludGVyVHlwZTsgLy8gbW91c2UsIHBlbiwgdG91Y2hcclxuXHJcbiAgICBlLmNsaWVudFggPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCkgfHwgMDtcclxuICAgIGUuY2xpZW50WSA9IChwdHlwZSA9PT0gXCJ0b3VjaFwiID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZKSB8fCAwO1xyXG5cclxuICAgIGUudHlwZSA9IGV2ZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKFIuZXZlbnRPdXQuaW5kZXhPZihldmVudC50eXBlKSAhPT0gLTEpIHtcclxuICAgICAgbGVhdmUgPSB0cnVlO1xyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVybGVhdmVcIikgUi5pc0xlYXZlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSBlLnR5cGUgPSBcIm1vdXNlZG93blwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcnVwXCIpIGUudHlwZSA9IFwibW91c2V1cFwiO1xyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcm1vdmVcIikge1xyXG4gICAgICBpZiAoUi5pc0xlYXZlKSB7XHJcbiAgICAgICAgLy8gaWYgdXNlciByZXNpemUgb3V0c2lkZSB0aGlzIGRvY3VtZW50XHJcbiAgICAgICAgUi5pc0xlYXZlID0gZmFsc2U7XHJcbiAgICAgICAgUi5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBlLnR5cGUgPSBcIm1vdXNlbW92ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZSBjbGljayB0ZXN0XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgIFIuZG93blRpbWUgPSBSLm5vdygpO1xyXG4gICAgICBsZXQgdGltZSA9IFIuZG93blRpbWUgLSBSLnByZXZUaW1lO1xyXG5cclxuICAgICAgLy8gZG91YmxlIGNsaWNrIG9uIGltcHV0XHJcbiAgICAgIGlmICh0aW1lIDwgMjAwKSB7XHJcbiAgICAgICAgUi5zZWxlY3RBbGwoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFIucHJldlRpbWUgPSBSLmRvd25UaW1lO1xyXG4gICAgICBSLmZvcmNlWm9uZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBpbXB1dFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgLy8gbW91c2UgbG9ja1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgUi5sb2NrID0gdHJ1ZTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvL2lmKCBSLmN1cnJlbnQgIT09IG51bGwgJiYgUi5jdXJyZW50Lm5ldmVybG9jayApIFIubG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8qaWYoIGUudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAxKXtcclxuICAgICAgICAgICAgUi5jdXJzb3IoKVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInA0IFwiK1IuaXNNb2JpbGUrXCIgXCIrZS50eXBlK1wiIFwiK1IubG9jaylcclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuZmluZElEKGUpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIiAmJiAhUi5sb2NrKSBSLmZpbmRJRChlKTtcclxuXHJcbiAgICBpZiAoUi5JRCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoUi5JRC5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICBlLmNsaWVudFggPSBSLklELm1vdXNlLng7XHJcbiAgICAgICAgZS5jbGllbnRZID0gUi5JRC5tb3VzZS55O1xyXG4gICAgICB9IGVsc2UgaWYgKFIuSUQuaXNDYW52YXMpIHtcclxuICAgICAgICAvLyBTb2xvIHVzYXIgbW91c2UgdmlydHVhbCBzaSBlbCBldmVudG8gZXMgXCJwcm9ncmFtw6F0aWNvXCIgKGNvb3JkcyAtMSlcclxuICAgICAgICAvLyB5IGFkZW3DoXMgZWwgbW91c2UgdmlydHVhbCB5YSBmdWUgc2V0ZWFkbyAoPj0wKS5cclxuICAgICAgICBjb25zdCB3YW50c1ZpcnR1YWwgPSAoZS5jbGllbnRYID09PSAtMSB8fCBlLmNsaWVudFkgPT09IC0xKTtcclxuICAgICAgICBjb25zdCBoYXNNb3VzZSA9IChSLklELm1vdXNlLnggPj0gMCAmJiBSLklELm1vdXNlLnkgPj0gMCk7XHJcbiAgICAgICAgaWYgKHdhbnRzVmlydHVhbCAmJiBoYXNNb3VzZSkge1xyXG4gICAgICAgICAgZS5jbGllbnRYID0gUi5JRC56b25lLnggKyBSLklELm1vdXNlLng7XHJcbiAgICAgICAgICBlLmNsaWVudFkgPSBSLklELnpvbmUueSArIFIuSUQubW91c2UueTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vaWYoIFIuSUQubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IFIuSUQubWFyZ2luICogMC41XHJcblxyXG4gICAgICBSLklELmhhbmRsZUV2ZW50KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmlzTW9iaWxlICYmIGUudHlwZSA9PT0gXCJtb3VzZXVwXCIpIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgaWYgKGxlYXZlKSBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJRFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZmluZElEOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgbGV0IGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgbmV4dCA9IC0xLFxyXG4gICAgICB1LFxyXG4gICAgICB4LFxyXG4gICAgICB5O1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdSA9IFIudWlbaV07XHJcblxyXG4gICAgICBpZiAodS5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgICB4ID0gdS5tb3VzZS54O1xyXG4gICAgICAgIHkgPSB1Lm1vdXNlLnk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgeCA9IGUuY2xpZW50WDtcclxuICAgICAgICB5ID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoUi5vblpvbmUodSwgeCwgeSkpIHtcclxuICAgICAgICBuZXh0ID0gaTtcclxuXHJcbiAgICAgICAgaWYgKG5leHQgIT09IFIuY3VycmVudCkge1xyXG4gICAgICAgICAgUi5jbGVhck9sZElEKCk7XHJcbiAgICAgICAgICBSLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICAgICAgUi5JRCA9IHU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5leHQgPT09IC0xKSBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBjbGVhck9sZElEOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIVIuSUQpIHJldHVybjtcclxuICAgIFIuY3VycmVudCA9IC0xO1xyXG4gICAgUi5JRC5yZXNldCgpO1xyXG4gICAgUi5JRCA9IG51bGw7XHJcbiAgICBSLmN1cnNvcigpO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEdVSSAvIEdST1VQIEZVTkNUSU9OXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjYWxjVWlzOiAodWlzLCB6b25lLCBweSwgZ3JvdXAgPSBmYWxzZSkgPT4ge1xyXG4gICAgLy9jb25zb2xlLmxvZygnY2FsY191aXMnKVxyXG5cclxuICAgIGxldCBpID0gdWlzLmxlbmd0aCxcclxuICAgICAgdSxcclxuICAgICAgcHggPSAwLFxyXG4gICAgICBuID0gMCxcclxuICAgICAgdHcsXHJcbiAgICAgIG0sXHJcbiAgICAgIGRpdjtcclxuXHJcbiAgICBsZXQgaGVpZ2h0ID0gMDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSB1aXNbbl07XHJcbiAgICAgIG4rKztcclxuXHJcbiAgICAgIGlmICghZ3JvdXAgJiYgdS5pc0dyb3VwKSB1LmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIG0gPSB1Lm1hcmdpbjtcclxuICAgICAgLy9kaXYgPSB1Lm1hcmdpbkRpdlxyXG5cclxuICAgICAgdS56b25lLncgPSB1Lnc7XHJcbiAgICAgIHUuem9uZS5oID0gdS5oICsgbTtcclxuXHJcbiAgICAgIGlmICghdS5hdXRvV2lkdGgpIHtcclxuICAgICAgICBpZiAocHggPT09IDApIGhlaWdodCArPSB1LmggKyBtO1xyXG5cclxuICAgICAgICB1LnpvbmUueCA9IHpvbmUueCArIHB4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7IC8vICsgdS5tdG9wXHJcbiAgICAgICAgLy9pZihkaXYpIHUuem9uZS55ICs9IG0gKiAwLjVcclxuXHJcbiAgICAgICAgdHcgPSBSLmdldFdpZHRoKHUpO1xyXG4gICAgICAgIGlmICh0dykgdS56b25lLncgPSB1LncgPSB0dztcclxuICAgICAgICBlbHNlIGlmICh1LmZ3KSB1LnpvbmUudyA9IHUudyA9IHUuZnc7XHJcblxyXG4gICAgICAgIHB4ICs9IHUuem9uZS53O1xyXG5cclxuICAgICAgICBpZiAocHggPj0gem9uZS53KSB7XHJcbiAgICAgICAgICBweSArPSB1LmggKyBtO1xyXG4gICAgICAgICAgLy9pZihkaXYpIHB5ICs9IG0gKiAwLjVcclxuICAgICAgICAgIHB4ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHggPSAwO1xyXG5cclxuICAgICAgICB1LnpvbmUueCA9IHpvbmUueCArIHUuZHg7XHJcbiAgICAgICAgdS56b25lLnkgPSBweTtcclxuICAgICAgICBweSArPSB1LmggKyBtO1xyXG5cclxuICAgICAgICBoZWlnaHQgKz0gdS5oICsgbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoZWlnaHQ7XHJcbiAgfSxcclxuXHJcbiAgZmluZFRhcmdldDogZnVuY3Rpb24gKHVpcywgZSkge1xyXG4gICAgbGV0IGkgPSB1aXMubGVuZ3RoO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKFIub25ab25lKHVpc1tpXSwgZS5jbGllbnRYLCBlLmNsaWVudFkpKSByZXR1cm4gaTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gLTE7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgWk9ORVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZmluZFpvbmU6IGZ1bmN0aW9uIChmb3JjZSkge1xyXG4gICAgaWYgKCFSLm5lZWRSZVpvbmUgJiYgIWZvcmNlKSByZXR1cm47XHJcblxyXG4gICAgdmFyIGkgPSBSLnVpLmxlbmd0aCxcclxuICAgICAgdTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG4gICAgICBSLmdldFpvbmUodSk7XHJcbiAgICAgIGlmICh1LmlzR3VpKSB1LmNhbGNVaXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLm5lZWRSZVpvbmUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBvblpvbmU6IGZ1bmN0aW9uIChvLCB4LCB5KSB7XHJcbiAgICBpZiAoeCA9PT0gdW5kZWZpbmVkIHx8IHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCB6ID0gby56b25lO1xyXG4gICAgbGV0IG14ID0geCAtIHoueDsgLy8gLSBvLmR4O1xyXG4gICAgbGV0IG15ID0geSAtIHoueTtcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAmJiBvLmdyb3VwLm1hcmdpbkRpdiApIG15ICs9IG8uZ3JvdXAubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCBvLmdyb3VwICE9PSBudWxsICkgbXggLT0gby5keFxyXG5cclxuICAgIGxldCBvdmVyID0gbXggPj0gMCAmJiBteSA+PSAwICYmIG14IDw9IHoudyAmJiBteSA8PSB6Lmg7XHJcblxyXG4gICAgLy9pZiggby5tYXJnaW5EaXYgKSBteSAtPSBvLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIGlmIChvdmVyKSBvLmxvY2FsLnNldChteCwgbXkpO1xyXG4gICAgZWxzZSBvLmxvY2FsLm5lZygpO1xyXG5cclxuICAgIHJldHVybiBvdmVyO1xyXG4gIH0sXHJcblxyXG4gIGdldFdpZHRoOiBmdW5jdGlvbiAobykge1xyXG4gICAgLy9yZXR1cm4gby5nZXREb20oKS5vZmZzZXRXaWR0aFxyXG4gICAgcmV0dXJuIG8uZ2V0RG9tKCkuY2xpZW50V2lkdGg7XHJcblxyXG4gICAgLy9sZXQgciA9IG8uZ2V0RG9tKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAvL3JldHVybiAoci53aWR0aClcclxuICAgIC8vcmV0dXJuIE1hdGguZmxvb3Ioci53aWR0aClcclxuICB9LFxyXG5cclxuICBnZXRab25lOiBmdW5jdGlvbiAobykge1xyXG4gICAgaWYgKG8uaXNDYW52YXNPbmx5KSByZXR1cm47XHJcbiAgICBsZXQgciA9IG8uZ2V0RG9tKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgLy9pZiggIXIud2lkdGggKSByZXR1cm5cclxuICAgIC8vby56b25lID0geyB4Ok1hdGguZmxvb3Ioci5sZWZ0KSwgeTpNYXRoLmZsb29yKHIudG9wKSwgdzpNYXRoLmZsb29yKHIud2lkdGgpLCBoOk1hdGguZmxvb3Ioci5oZWlnaHQpIH07XHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLnJvdW5kKHIubGVmdCksIHk6TWF0aC5yb3VuZChyLnRvcCksIHc6TWF0aC5yb3VuZChyLndpZHRoKSwgaDpNYXRoLnJvdW5kKHIuaGVpZ2h0KSB9O1xyXG4gICAgby56b25lID0geyB4OiByLmxlZnQsIHk6IHIudG9wLCB3OiByLndpZHRoLCBoOiByLmhlaWdodCB9O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coby5uYW1lLCBvLnpvbmUpXHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ1VSU09SXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjdXJzb3I6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICBuYW1lID0gbmFtZSA/IG5hbWUgOiBcImF1dG9cIjtcclxuICAgIGlmIChuYW1lICE9PSBSLm9sZEN1cnNvcikge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9IG5hbWU7XHJcbiAgICAgIFIub2xkQ3Vyc29yID0gbmFtZTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHRvQ2FudmFzOiBmdW5jdGlvbiAobywgdywgaCwgZm9yY2UpIHtcclxuICAgIGlmICghUi54bWxzZXJpYWxpemVyKSBSLnhtbHNlcmlhbGl6ZXIgPSBuZXcgWE1MU2VyaWFsaXplcigpO1xyXG5cclxuICAgIC8vIHByZXZlbnQgZXhlc2l2ZSByZWRyYXdcclxuXHJcbiAgICBpZiAoZm9yY2UgJiYgUi50bXBUaW1lICE9PSBudWxsKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dChSLnRtcFRpbWUpO1xyXG4gICAgICBSLnRtcFRpbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLnRtcFRpbWUgIT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBpZiAoUi5sb2NrKVxyXG4gICAgICBSLnRtcFRpbWUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBSLnRtcFRpbWUgPSBudWxsO1xyXG4gICAgICB9LCAxMCk7XHJcblxyXG4gICAgLy8vXHJcblxyXG4gICAgbGV0IGlzTmV3U2l6ZSA9IGZhbHNlO1xyXG4gICAgaWYgKHcgIT09IG8uY2FudmFzLndpZHRoIHx8IGggIT09IG8uY2FudmFzLmhlaWdodCkgaXNOZXdTaXplID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoUi50bXBJbWFnZSA9PT0gbnVsbCkgUi50bXBJbWFnZSA9IG5ldyBJbWFnZSgpO1xyXG5cclxuICAgIGxldCBpbWcgPSBSLnRtcEltYWdlOyAvL25ldyBJbWFnZSgpO1xyXG5cclxuICAgIGxldCBodG1sU3RyaW5nID0gUi54bWxzZXJpYWxpemVyLnNlcmlhbGl6ZVRvU3RyaW5nKG8uY29udGVudCk7XHJcblxyXG4gICAgbGV0IHN2ZyA9XHJcbiAgICAgICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIicgK1xyXG4gICAgICB3ICtcclxuICAgICAgJ1wiIGhlaWdodD1cIicgK1xyXG4gICAgICBoICtcclxuICAgICAgJ1wiPjxmb3JlaWduT2JqZWN0IHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmU7IGxlZnQ6MDtcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCI+JyArXHJcbiAgICAgIGh0bWxTdHJpbmcgK1xyXG4gICAgICBcIjwvZm9yZWlnbk9iamVjdD48L3N2Zz5cIjtcclxuXHJcbiAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBsZXQgY3R4ID0gby5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG5cclxuICAgICAgaWYgKGlzTmV3U2l6ZSkge1xyXG4gICAgICAgIG8uY2FudmFzLndpZHRoID0gdztcclxuICAgICAgICBvLmNhbnZhcy5oZWlnaHQgPSBoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgIH1cclxuICAgICAgY3R4LmRyYXdJbWFnZSh0aGlzLCAwLCAwKTtcclxuXHJcbiAgICAgIG8ub25EcmF3KCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGltZy5zcmMgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHN2Zyk7XHJcbiAgICAvL2ltZy5zcmMgPSAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwnKyB3aW5kb3cuYnRvYSggc3ZnICk7XHJcbiAgICBpbWcuY3Jvc3NPcmlnaW4gPSBcIlwiO1xyXG4gICAgUi5uZWVkc1VwZGF0ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElOUFVUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRIaWRkZW46IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSB7XHJcbiAgICAgIC8vbGV0IGNzcyA9IFIucGFyZW50LmNzcy50eHRzZWxlY3QgKyAncGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgJ1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IHRleHQtc2hhZG93Om5vbmU7J1xyXG4gICAgICAvL2NzcyArPSAnbGVmdDoxMHB4OyB0b3A6YXV0bzsgYm9yZGVyOm5vbmU7IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDsnICsgaGlkZTtcclxuXHJcbiAgICAgIFIuaGlkZGVuSW1wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgIFIuaGlkZGVuSW1wdXQudHlwZSA9IFwidGV4dFwiO1xyXG4gICAgICAvL1IuaGlkZGVuSW1wdXQuc3R5bGUuY3NzVGV4dCA9IGNzcyArICdib3R0b206MzBweDsnICsgKFIuZGVidWdJbnB1dCA/ICcnIDogJ3RyYW5zZm9ybTpzY2FsZSgwKTsnKTtcclxuXHJcbiAgICAgIFIuaGlkZGVuU2l6ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAvL1IuaGlkZGVuU2l6ZXIuc3R5bGUuY3NzVGV4dCA9IGNzcyArICdib3R0b206NjBweDsnO1xyXG5cclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChSLmhpZGRlbkltcHV0KTtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChSLmhpZGRlblNpemVyKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaGlkZSA9IFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcIm9wYWNpdHk6MDsgekluZGV4OjA7XCI7XHJcbiAgICBsZXQgY3NzID1cclxuICAgICAgUi5wYXJlbnQuY3NzLnR4dHNlbGVjdCArXHJcbiAgICAgIFwicGFkZGluZzowOyB3aWR0aDphdXRvOyBoZWlnaHQ6YXV0bzsgbGVmdDoxMHB4OyB0b3A6YXV0bzsgY29sb3I6I0ZGRjsgYmFja2dyb3VuZDojMDAwO1wiICtcclxuICAgICAgaGlkZTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUuY3NzVGV4dCA9XHJcbiAgICAgIGNzcyArIFwiYm90dG9tOjEwcHg7XCIgKyAoUi5kZWJ1Z0lucHV0ID8gXCJcIiA6IFwidHJhbnNmb3JtOnNjYWxlKDApO1wiKTtcclxuICAgIFIuaGlkZGVuU2l6ZXIuc3R5bGUuY3NzVGV4dCA9IGNzcyArIFwiYm90dG9tOjQwcHg7XCI7XHJcblxyXG4gICAgUi5oaWRkZW5JbXB1dC5zdHlsZS53aWR0aCA9IFIuaW5wdXQuY2xpZW50V2lkdGggKyBcInB4XCI7XHJcbiAgICBSLmhpZGRlbkltcHV0LnZhbHVlID0gUi5zdHI7XHJcbiAgICBSLmhpZGRlblNpemVyLmlubmVySFRNTCA9IFIuc3RyO1xyXG5cclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gIH0sXHJcblxyXG4gIGNsZWFySGlkZGVuOiBmdW5jdGlvbiAocCkge1xyXG4gICAgaWYgKFIuaGlkZGVuSW1wdXQgPT09IG51bGwpIHJldHVybjtcclxuICAgIFIuaGFzRm9jdXMgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBjbGlja1BvczogZnVuY3Rpb24gKHgpIHtcclxuICAgIGxldCBpID0gUi5zdHIubGVuZ3RoLFxyXG4gICAgICBsID0gMCxcclxuICAgICAgbiA9IDA7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGwgKz0gUi50ZXh0V2lkdGgoUi5zdHJbbl0pO1xyXG4gICAgICBpZiAobCA+PSB4KSBicmVhaztcclxuICAgICAgbisrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG47XHJcbiAgfSxcclxuXHJcbiAgdXBJbnB1dDogZnVuY3Rpb24gKHgsIGRvd24pIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCB1cCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChkb3duKSB7XHJcbiAgICAgIGxldCBpZCA9IFIuY2xpY2tQb3MoeCk7XHJcblxyXG4gICAgICBSLm1vdmVYID0gaWQ7XHJcblxyXG4gICAgICBpZiAoUi5zdGFydFggPT09IC0xKSB7XHJcbiAgICAgICAgUi5zdGFydFggPSBpZDtcclxuICAgICAgICBSLmN1cnNvcklkID0gaWQ7XHJcbiAgICAgICAgUi5pbnB1dFJhbmdlID0gW1Iuc3RhcnRYLCBSLnN0YXJ0WF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGlzU2VsZWN0aW9uID0gUi5tb3ZlWCAhPT0gUi5zdGFydFg7XHJcblxyXG4gICAgICAgIGlmIChpc1NlbGVjdGlvbikge1xyXG4gICAgICAgICAgaWYgKFIuc3RhcnRYID4gUi5tb3ZlWCkgUi5pbnB1dFJhbmdlID0gW1IubW92ZVgsIFIuc3RhcnRYXTtcclxuICAgICAgICAgIGVsc2UgUi5pbnB1dFJhbmdlID0gW1Iuc3RhcnRYLCBSLm1vdmVYXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHVwID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChSLnN0YXJ0WCAhPT0gLTEpIHtcclxuICAgICAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgICAgICBSLnN0YXJ0WCA9IC0xO1xyXG5cclxuICAgICAgICB1cCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodXApIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIHVwO1xyXG4gIH0sXHJcblxyXG4gIHNlbGVjdEFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLnBhcmVudCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuICAgIFIuaW5wdXRSYW5nZSA9IFswLCBSLnN0ci5sZW5ndGhdO1xyXG4gICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICBSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0ID0gUi5pbnB1dFJhbmdlWzBdO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICBSLmN1cnNvcklkID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5zZWxlY3RQYXJlbnQoKTtcclxuICB9LFxyXG5cclxuICBzZWxlY3RQYXJlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBjID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKDAsIFIuY3Vyc29ySWQpKTtcclxuICAgIHZhciBlID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKDAsIFIuaW5wdXRSYW5nZVswXSkpO1xyXG4gICAgdmFyIHMgPSBSLnRleHRXaWR0aChSLnN0ci5zdWJzdHJpbmcoUi5pbnB1dFJhbmdlWzBdLCBSLmlucHV0UmFuZ2VbMV0pKTtcclxuXHJcbiAgICBSLnBhcmVudC5zZWxlY3QoYywgZSwgcywgUi5oaWRkZW5TaXplci5pbm5lckhUTUwpO1xyXG4gIH0sXHJcblxyXG4gIHRleHRXaWR0aDogZnVuY3Rpb24gKHRleHQpIHtcclxuICAgIGlmIChSLmhpZGRlblNpemVyID09PSBudWxsKSByZXR1cm4gMDtcclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyAvZywgXCImbmJzcDtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLmlubmVySFRNTCA9IHRleHQ7XHJcbiAgICByZXR1cm4gUi5oaWRkZW5TaXplci5jbGllbnRXaWR0aDtcclxuICB9LFxyXG5cclxuICBjbGVhcklucHV0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICghUi5maXJzdEltcHV0KSBSLnBhcmVudC52YWxpZGF0ZSh0cnVlKTtcclxuXHJcbiAgICBSLmNsZWFySGlkZGVuKCk7XHJcbiAgICBSLnBhcmVudC51bnNlbGVjdCgpO1xyXG5cclxuICAgIC8vUi5pbnB1dC5zdHlsZS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5iYWNrZ3JvdW5kID0gUi5wYXJlbnQuY29sb3JzLmJhY2s7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJvcmRlckNvbG9yID0gUi5wYXJlbnQuY29sb3JzLmJvcmRlcjtcclxuICAgIC8vUi5pbnB1dC5zdHlsZS5jb2xvciA9IFIucGFyZW50LmNvbG9ycy50ZXh0O1xyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgUi5pbnB1dCA9IG51bGw7XHJcbiAgICBSLnBhcmVudCA9IG51bGw7XHJcbiAgICAoUi5zdHIgPSBcIlwiKSwgKFIuZmlyc3RJbXB1dCA9IHRydWUpO1xyXG4gIH0sXHJcblxyXG4gIHNldElucHV0OiBmdW5jdGlvbiAoSW5wdXQsIHBhcmVudCkge1xyXG4gICAgUi5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUi5pbnB1dCA9IElucHV0O1xyXG4gICAgUi5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG4gICAgUi5pbnB1dC5zdHlsZS5iYWNrZ3JvdW5kID0gUi5wYXJlbnQuY29sb3JzLmJhY2tvZmY7XHJcbiAgICBSLmlucHV0LnN0eWxlLmJvcmRlckNvbG9yID0gUi5wYXJlbnQuY29sb3JzLnNlbGVjdDtcclxuICAgIC8vUi5pbnB1dC5zdHlsZS5jb2xvciA9IFIucGFyZW50LmNvbG9ycy50ZXh0U2VsZWN0O1xyXG4gICAgUi5zdHIgPSBSLmlucHV0LnRleHRDb250ZW50O1xyXG5cclxuICAgIFIuc2V0SGlkZGVuKCk7XHJcbiAgfSxcclxuXHJcbiAga2V5ZG93bjogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBrZXlDb2RlID0gZS53aGljaCxcclxuICAgICAgaXNTaGlmdCA9IGUuc2hpZnRLZXk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZygga2V5Q29kZSApXHJcblxyXG4gICAgUi5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKFIuaGFzRm9jdXMpIHtcclxuICAgICAgLy8gaGFjayB0byBmaXggdG91Y2ggZXZlbnQgYnVnIGluIGlPUyBTYWZhcmlcclxuICAgICAgd2luZG93LmZvY3VzKCk7XHJcbiAgICAgIFIuaGlkZGVuSW1wdXQuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBSLnBhcmVudC5pc0VkaXQgPSB0cnVlO1xyXG5cclxuICAgIC8vIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAvLyBhZGQgc3VwcG9ydCBmb3IgQ3RybC9DbWQrQSBzZWxlY3Rpb25cclxuICAgIC8vaWYgKCBrZXlDb2RlID09PSA2NSAmJiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSApKSB7XHJcbiAgICAvL1Iuc2VsZWN0VGV4dCgpO1xyXG4gICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAvL3JldHVybiBzZWxmLnJlbmRlcigpO1xyXG4gICAgLy99XHJcblxyXG4gICAgaWYgKGtleUNvZGUgPT09IDEzKSB7XHJcbiAgICAgIC8vZW50ZXJcclxuXHJcbiAgICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgICAgLy99IGVsc2UgaWYoIGtleUNvZGUgPT09IDkgKXsgLy90YWIga2V5XHJcblxyXG4gICAgICAvLyBSLmlucHV0LnRleHRDb250ZW50ID0gJyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5pbnB1dC5pc051bSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIChlLmtleUNvZGUgPiA0NyAmJiBlLmtleUNvZGUgPCA1OCkgfHxcclxuICAgICAgICAgIChlLmtleUNvZGUgPiA5NSAmJiBlLmtleUNvZGUgPCAxMDYpIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDE5MCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxMTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gOCB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxMDlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgUi5oaWRkZW5JbXB1dC5yZWFkT25seSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIGtleXVwOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgUi5zdHIgPSBSLmhpZGRlbkltcHV0LnZhbHVlO1xyXG5cclxuICAgIGlmIChSLnBhcmVudC5hbGxFcXVhbCkgUi5wYXJlbnQuc2FtZVN0cihSLnN0cik7IC8vIG51bWVyaWMgc2Ftw7llIHZhbHVlXHJcbiAgICBlbHNlIFIuaW5wdXQudGV4dENvbnRlbnQgPSBSLnN0cjtcclxuXHJcbiAgICBSLmN1cnNvcklkID0gUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydDtcclxuICAgIFIuaW5wdXRSYW5nZSA9IFtSLmhpZGRlbkltcHV0LnNlbGVjdGlvblN0YXJ0LCBSLmhpZGRlbkltcHV0LnNlbGVjdGlvbkVuZF07XHJcblxyXG4gICAgUi5zZWxlY3RQYXJlbnQoKTtcclxuXHJcbiAgICAvL2lmKCBSLnBhcmVudC5hbGx3YXkgKVxyXG4gICAgUi5wYXJlbnQudmFsaWRhdGUoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy9cclxuICAvLyAgIExJU1RFTklOR1xyXG4gIC8vXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvKlxyXG4gICAgLy8gZXN0YSBlcmEgbGEgZnVuY2lvbiBvcmlnaW5hbFxyXG4gICAgbG9vcDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiggUi5pc0xvb3AgKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIFIubG9vcCApO1xyXG4gICAgICAgIFIudXBkYXRlKCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgKi9cclxuXHJcbiAgbG9vcDogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKFIuaXNMb29wKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUi5sb29wKTtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBSLnVwZGF0ZSgpO1xyXG4gICAgLy8gaWYgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gYSB2YWx1ZSBnZW5lcmF0ZWQgZXh0ZXJuYWxseSwgdGhlIEdVSSBuZWVkcyB0byBiZSByZWRyYXduXHJcbiAgICBpZiAoUi51aVswXSAmJiBSLm5lZWRzVXBkYXRlKSBSLnVpWzBdLmRyYXcoKTtcclxuICB9LFxyXG5cclxuICB1cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGxldCBpID0gUi5saXN0ZW5zLmxlbmd0aDtcclxuICAgIGxldCBuZWVkc1VwZGF0ZSA9IGZhbHNlO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAvL2NoZWNrIGlmIHRoZSB2YWx1ZSBvZiB0aGUgb2JqZWN0IGhhcyBjaGFuZ2VkXHJcbiAgICAgIGxldCBoYXNDaGFuZ2VkID0gUi5saXN0ZW5zW2ldLmxpc3RlbmluZygpO1xyXG4gICAgICBpZiAoaGFzQ2hhbmdlZCkgbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5lZWRzVXBkYXRlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUxpc3RlbjogZnVuY3Rpb24gKHByb3RvKSB7XHJcbiAgICBsZXQgaWQgPSBSLmxpc3RlbnMuaW5kZXhPZihwcm90byk7XHJcbiAgICBpZiAoaWQgIT09IC0xKSBSLmxpc3RlbnMuc3BsaWNlKGlkLCAxKTtcclxuICAgIGlmIChSLmxpc3RlbnMubGVuZ3RoID09PSAwKSBSLmlzTG9vcCA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGFkZExpc3RlbjogZnVuY3Rpb24gKHByb3RvKSB7XHJcbiAgICBsZXQgaWQgPSBSLmxpc3RlbnMuaW5kZXhPZihwcm90byk7XHJcblxyXG4gICAgaWYgKGlkICE9PSAtMSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFIubGlzdGVucy5wdXNoKHByb3RvKTtcclxuXHJcbiAgICBpZiAoIVIuaXNMb29wKSB7XHJcbiAgICAgIFIuaXNMb29wID0gdHJ1ZTtcclxuICAgICAgUi5sb29wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfSxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBSb290cyA9IFI7XHJcbiIsIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi9Sb290cy5qcyc7XHJcblxyXG5jb25zdCBUID0ge1xyXG5cclxuICAgIHRyYW5zaXRpb246IDAuMixcclxuXHJcbiAgICBmcmFnOiBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXHJcblxyXG4gICAgY29sb3JSaW5nOiBudWxsLFxyXG4gICAgam95c3RpY2tfMDogbnVsbCxcclxuICAgIGpveXN0aWNrXzE6IG51bGwsXHJcbiAgICBjaXJjdWxhcjogbnVsbCxcclxuICAgIGtub2I6IG51bGwsXHJcbiAgICBwYWQyZDogbnVsbCxcclxuXHJcbiAgICBzdmduczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxyXG4gICAgbGlua3M6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxyXG4gICAgaHRtbHM6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFxyXG5cclxuICAgIERPTV9TSVpFOiBbICdoZWlnaHQnLCAnd2lkdGgnLCAndG9wJywgJ2xlZnQnLCAnYm90dG9tJywgJ3JpZ2h0JywgJ21hcmdpbi1sZWZ0JywgJ21hcmdpbi1yaWdodCcsICdtYXJnaW4tdG9wJywgJ21hcmdpbi1ib3R0b20nXSxcclxuICAgIFNWR19UWVBFX0Q6IFsgJ3BhdHRlcm4nLCAnZGVmcycsICd0cmFuc2Zvcm0nLCAnc3RvcCcsICdhbmltYXRlJywgJ3JhZGlhbEdyYWRpZW50JywgJ2xpbmVhckdyYWRpZW50JywgJ2FuaW1hdGVNb3Rpb24nLCAndXNlJywgJ2ZpbHRlcicsICdmZUNvbG9yTWF0cml4JyBdLFxyXG4gICAgU1ZHX1RZUEVfRzogWyAnc3ZnJywgJ3JlY3QnLCAnY2lyY2xlJywgJ3BhdGgnLCAncG9seWdvbicsICd0ZXh0JywgJ2cnLCAnbGluZScsICdmb3JlaWduT2JqZWN0JyBdLFxyXG5cclxuICAgIFBJOiBNYXRoLlBJLFxyXG4gICAgVHdvUEk6IE1hdGguUEkqMixcclxuICAgIHBpOTA6IE1hdGguUEkgKiAwLjUsXHJcbiAgICBwaTYwOiBNYXRoLlBJLzMsXHJcbiAgICBcclxuICAgIHRvcmFkOiBNYXRoLlBJIC8gMTgwLFxyXG4gICAgdG9kZWc6IDE4MCAvIE1hdGguUEksXHJcblxyXG4gICAgY2xhbXA6ICggdiwgbWluLCBtYXggKSA9PiB7XHJcblxyXG4gICAgICAgIHYgPSB2IDwgbWluID8gbWluIDogdjtcclxuICAgICAgICB2ID0gdiA+IG1heCA/IG1heCA6IHY7XHJcbiAgICAgICAgcmV0dXJuIHY7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpc0RpdmlkOiAoIHYgKSA9PiAoIHYqMC41ID09PSBNYXRoLmZsb29yKHYqMC41KSApLFxyXG5cclxuICAgIHNpemU6IHsgIHc6IDI0MCwgaDogMjAsIHA6IDMwLCBzOiA4IH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBDT0xPUlxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZUNvbG9yOiAoIG8sIGNjID0gVC5jb2xvcnMgKSA9PiB7XHJcblxyXG4gICAgICAgIGxldCBjb2xvciA9IHsgLi4uY2MgfVxyXG5cclxuICAgICAgICBsZXQgdGV4dENoYW5nZSA9IFsnZm9udEZhbWlseScsICdmb250V2VpZ2h0JywgJ2ZvbnRTaGFkb3cnLCAnZm9udFNpemUnIF1cclxuICAgICAgICBsZXQgY2hhbmdlVGV4dCA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnQgKSBvLmZvbnRGYW1pbHkgPSBvLmZvbnRcclxuICAgICAgICBpZiggby5zaGFkb3cgKSBvLmZvbnRTaGFkb3cgPSBvLnNoYWRvd1xyXG4gICAgICAgIGlmKCBvLndlaWdodCApIG8uZm9udFdlaWdodCA9IG8ud2VpZ2h0XHJcblxyXG4gICAgICAgIGlmKCBvLmZvbnRDb2xvciApIG8udGV4dCA9IG8uZm9udENvbG9yXHJcbiAgICAgICAgaWYoIG8uY29sb3IgKSBvLnRleHQgPSBvLmNvbG9yXHJcblxyXG4gICAgICAgIGlmKCBvLnRleHQgKXtcclxuICAgICAgICAgICAgY29sb3IudGV4dCA9IG8udGV4dFxyXG4gICAgICAgICAgICBpZiggIW8uZm9udENvbG9yICYmICFvLmNvbG9yICl7IFxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGUgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC4yNSApXHJcbiAgICAgICAgICAgICAgICBjb2xvci50aXRsZW9mZiA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIC0wLjUgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHRPdmVyID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC4yNSApXHJcbiAgICAgICAgICAgIGNvbG9yLnRleHRTZWxlY3QgPSBULkNvbG9yTHVtYSggby50ZXh0LCAwLjUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uYnV0dG9uICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJ1dHRvbiA9IG8uYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbG9yLmJvcmRlciA9IFQuQ29sb3JMdW1hKCBvLmJ1dHRvbiwgMC4xIClcclxuICAgICAgICAgICAgY29sb3Iub3Zlcm9mZiA9IFQuQ29sb3JMdW1hKCBvLmJ1dHRvbiwgMC4yIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLnNlbGVjdCApe1xyXG4gICAgICAgICAgICBjb2xvci5zZWxlY3QgPSBvLnNlbGVjdFxyXG4gICAgICAgICAgICBjb2xvci5vdmVyID0gVC5Db2xvckx1bWEoIG8uc2VsZWN0LCAtMC4xIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLml0ZW1CZyApIG8uYmFjayA9IG8uaXRlbUJnXHJcblxyXG4gICAgICAgIGlmKCBvLmJhY2sgKXtcclxuICAgICAgICAgICAgY29sb3IuYmFjayA9IG8uYmFja1xyXG4gICAgICAgICAgICBjb2xvci5iYWNrb2ZmID0gVC5Db2xvckx1bWEoIG8uYmFjaywgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5mb250U2VsZWN0ICkgY29sb3IudGV4dFNlbGVjdCA9IG8uZm9udFNlbGVjdFxyXG4gICAgICAgIGlmKCBvLmdyb3VwQm9yZGVyICkgY29sb3IuZ2JvcmRlciA9IG8uZ3JvdXBCb3JkZXJcclxuXHJcbiAgICAgICAgLy9pZiggby50cmFuc3BhcmVudCApIG8uYmcgPSAnbm9uZSdcclxuICAgICAgICAvL2lmKCBvLmJnICkgY29sb3IuYmFja2dyb3VuZCA9IGNvbG9yLmJhY2tncm91bmRPdmVyID0gby5iZ1xyXG4gICAgICAgIGlmKCBvLmJnT3ZlciApIGNvbG9yLmJhY2tncm91bmRPdmVyID0gby5iZ092ZXJcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgbSBpbiBjb2xvciApe1xyXG4gICAgICAgICAgICBpZihvW21dIT09dW5kZWZpbmVkKSBjb2xvclttXSA9IG9bbV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gbyApe1xyXG4gICAgICAgICAgICBpZiggdGV4dENoYW5nZS5pbmRleE9mKG0pICE9PSAtMSApIGNoYW5nZVRleHQgPSB0cnVlIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNoYW5nZVRleHQgKSBULmRlZmluZVRleHQoIGNvbG9yIClcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbG9yXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjb2xvcnM6IHtcclxuXHJcbiAgICAgICAgc3g6IDQsLy80XHJcbiAgICAgICAgc3k6IDIsLy8yXHJcbiAgICAgICAgcmFkaXVzOjIsXHJcblxyXG4gICAgICAgIHNob3dPdmVyIDogMSxcclxuICAgICAgICAvL2dyb3VwT3ZlciA6IDEsXHJcblxyXG4gICAgICAgIGNvbnRlbnQ6J25vbmUnLFxyXG4gICAgICAgIGJhY2tncm91bmQ6ICdyZ2JhKDUwLDUwLDUwLDAuMTUpJyxcclxuICAgICAgICBiYWNrZ3JvdW5kT3ZlcjogJ3JnYmEoNTAsNTAsNTAsMC4zKScsXHJcblxyXG4gICAgICAgIHRpdGxlIDogJyNDQ0MnLFxyXG4gICAgICAgIHRpdGxlb2ZmIDogJyNCQkInLFxyXG4gICAgICAgIHRleHQgOiAnI0RERCcsXHJcbiAgICAgICAgdGV4dE92ZXIgOiAnI0VFRScsXHJcbiAgICAgICAgdGV4dFNlbGVjdCA6ICcjRkZGJyxcclxuICAgICAgICBcclxuICAgICAgICBiYWNrOidyZ2JhKDAsMCwwLDAuMiknLFxyXG4gICAgICAgIGJhY2tvZmY6J3JnYmEoMCwwLDAsMC4zKScsXHJcblxyXG4gICAgICAgIC8vIGlucHV0IGFuZCBidXR0b24gYm9yZGVyXHJcbiAgICAgICAgYm9yZGVyIDogJyM0YzRjNGMnLFxyXG4gICAgICAgIGJvcmRlclNpemUgOiAxLFxyXG5cclxuICAgICAgICBnYm9yZGVyIDogJ25vbmUnLFxyXG4gICAgICAgIGdyb3VwcyA6ICdub25lJyxcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgYnV0dG9uIDogJyMzYzNjM2MnLFxyXG4gICAgICAgIG92ZXJvZmYgOiAnIzVjNWM1YycsXHJcbiAgICAgICAgb3ZlciA6ICcjMDI0Njk5JyxcclxuICAgICAgICBzZWxlY3QgOiAnIzMwOEFGRicsXHJcbiAgICAgICAgYWN0aW9uOiAnI0ZGMzMwMCcsXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9mb250RmFtaWx5OiAnVGFob21hJyxcclxuICAgICAgICBmb250RmFtaWx5OiAnQ29uc29sYXMsIG1vbm9zcGFjZScsXHJcbiAgICAgICAgLy9mb250RmFtaWx5OiBcIidSb2JvdG8gTW9ubycsICdTb3VyY2UgQ29kZSBQcm8nLCBNZW5sbywgQ291cmllciwgbW9ub3NwYWNlXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogJ25vcm1hbCcsXHJcbiAgICAgICAgZm9udFNoYWRvdzogJ25vbmUnLC8vJyMwMDAnLFxyXG4gICAgICAgIGZvbnRTaXplOjEyLFxyXG5cclxuICAgICAgICBqb3lPdmVyOidyZ2JhKDQ4LDEzOCwyNTUsMC4yNSknLFxyXG4gICAgICAgIGpveU91dDogJ3JnYmEoMTAwLDEwMCwxMDAsMC41KScsXHJcbiAgICAgICAgam95U2VsZWN0OiAnIzMwOEFGRicsXHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIGhpZGU6ICdyZ2JhKDAsMCwwLDApJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN0eWxlIGNzc1xyXG5cclxuICAgIGNzcyA6IHtcclxuXHJcbiAgICAgICAgYmFzaWM6ICdwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsgYm94LXNpemluZzpib3JkZXItYm94OyBtYXJnaW46MDsgcGFkZGluZzowOyBvdmVyZmxvdzpoaWRkZW47ICcgKyAnLW8tdXNlci1zZWxlY3Q6bm9uZTsgLW1zLXVzZXItc2VsZWN0Om5vbmU7IC1raHRtbC11c2VyLXNlbGVjdDpub25lOyAtd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7IC1tb3otdXNlci1zZWxlY3Q6bm9uZTsnLFxyXG4gICAgICAgIGJ1dHRvbjonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOycsXHJcbiAgICAgICAgbWlkZGxlOidkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmxlZnQ7IHRleHQtYWxpZ246bGVmdDsgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOydcclxuICAgIH0sXHJcblxyXG4gICAgLy8gc3ZnIHBhdGhcclxuXHJcbiAgICBzdmdzOiB7XHJcblxyXG4gICAgICAgIGcxOidNIDYgNCBMIDAgNCAwIDYgNiA2IDYgNCBNIDYgMCBMIDAgMCAwIDIgNiAyIDYgMCBaJyxcclxuICAgICAgICBnMjonTSA2IDAgTCA0IDAgNCA2IDYgNiA2IDAgTSAyIDAgTCAwIDAgMCA2IDIgNiAyIDAgWicsXHJcblxyXG4gICAgICAgIGdyb3VwOidNIDcgNyBMIDcgOCA4IDggOCA3IDcgNyBNIDUgNyBMIDUgOCA2IDggNiA3IDUgNyBNIDMgNyBMIDMgOCA0IDggNCA3IDMgNyBNIDcgNSBMIDcgNiA4IDYgOCA1IDcgNSBNIDYgNiBMIDYgNSA1IDUgNSA2IDYgNiBNIDcgMyBMIDcgNCA4IDQgOCAzIDcgMyBNIDYgNCBMIDYgMyA1IDMgNSA0IDYgNCBNIDMgNSBMIDMgNiA0IDYgNCA1IDMgNSBNIDMgMyBMIDMgNCA0IDQgNCAzIDMgMyBaJyxcclxuICAgICAgICBhcnJvdzonTSAzIDggTCA4IDUgMyAyIDMgOCBaJyxcclxuXHJcbiAgICAgICAgYXJyb3dEb3duOidNIDUgOCBMIDggMyAyIDMgNSA4IFonLFxyXG4gICAgICAgIGFycm93VXA6J00gNSAyIEwgMiA3IDggNyA1IDIgWicsXHJcblxyXG4gICAgICAgIHNvbGlkOidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIFonLFxyXG4gICAgICAgIGJvZHk6J00gMTMgMTAgTCAxMyAxIDQgMSAxIDQgMSAxMyAxMCAxMyAxMyAxMCBNIDExIDMgTCAxMSA5IDkgMTEgMyAxMSAzIDUgNSAzIDExIDMgTSA1IDQgTCA0IDUgNCAxMCA5IDEwIDEwIDkgMTAgNCA1IDQgWicsXHJcbiAgICAgICAgdmVoaWNsZTonTSAxMyA2IEwgMTEgMSAzIDEgMSA2IDEgMTMgMyAxMyAzIDExIDExIDExIDExIDEzIDEzIDEzIDEzIDYgTSAyLjQgNiBMIDQgMiAxMCAyIDExLjYgNiAyLjQgNiBNIDEyIDggTCAxMiAxMCAxMCAxMCAxMCA4IDEyIDggTSA0IDggTCA0IDEwIDIgMTAgMiA4IDQgOCBaJyxcclxuICAgICAgICBhcnRpY3VsYXRpb246J00gMTMgOSBMIDEyIDkgOSAyIDkgMSA1IDEgNSAyIDIgOSAxIDkgMSAxMyA1IDEzIDUgOSA0IDkgNiA1IDggNSAxMCA5IDkgOSA5IDEzIDEzIDEzIDEzIDkgWicsXHJcbiAgICAgICAgY2hhcmFjdGVyOidNIDEzIDQgTCAxMiAzIDkgNCA1IDQgMiAzIDEgNCA1IDYgNSA4IDQgMTMgNiAxMyA3IDkgOCAxMyAxMCAxMyA5IDggOSA2IDEzIDQgTSA2IDEgTCA2IDMgOCAzIDggMSA2IDEgWicsXHJcbiAgICAgICAgdGVycmFpbjonTSAxMyA4IEwgMTIgNyBRIDkuMDYgLTMuNjcgNS45NSA0Ljg1IDQuMDQgMy4yNyAyIDcgTCAxIDggNyAxMyAxMyA4IE0gMyA4IFEgMy43OCA1LjQyMCA1LjQgNi42IDUuMjAgNy4yNSA1IDggTCA3IDggUSA4LjM5IC0wLjE2IDExIDggTCA3IDExIDMgOCBaJyxcclxuICAgICAgICBqb2ludDonTSA3LjcgNy43IFEgOCA3LjQ1IDggNyA4IDYuNiA3LjcgNi4zIDcuNDUgNiA3IDYgNi42IDYgNi4zIDYuMyA2IDYuNiA2IDcgNiA3LjQ1IDYuMyA3LjcgNi42IDggNyA4IDcuNDUgOCA3LjcgNy43IE0gMy4zNSA4LjY1IEwgMSAxMSAzIDEzIDUuMzUgMTAuNjUgUSA2LjEgMTEgNyAxMSA4LjI4IDExIDkuMjUgMTAuMjUgTCA3LjggOC44IFEgNy40NSA5IDcgOSA2LjE1IDkgNS41NSA4LjQgNSA3Ljg1IDUgNyA1IDYuNTQgNS4xNSA2LjE1IEwgMy43IDQuNyBRIDMgNS43MTIgMyA3IDMgNy45IDMuMzUgOC42NSBNIDEwLjI1IDkuMjUgUSAxMSA4LjI4IDExIDcgMTEgNi4xIDEwLjY1IDUuMzUgTCAxMyAzIDExIDEgOC42NSAzLjM1IFEgNy45IDMgNyAzIDUuNyAzIDQuNyAzLjcgTCA2LjE1IDUuMTUgUSA2LjU0IDUgNyA1IDcuODUgNSA4LjQgNS41NSA5IDYuMTUgOSA3IDkgNy40NSA4LjggNy44IEwgMTAuMjUgOS4yNSBaJyxcclxuICAgICAgICByYXk6J00gOSAxMSBMIDUgMTEgNSAxMiA5IDEyIDkgMTEgTSAxMiA1IEwgMTEgNSAxMSA5IDEyIDkgMTIgNSBNIDExLjUgMTAgUSAxMC45IDEwIDEwLjQ1IDEwLjQ1IDEwIDEwLjkgMTAgMTEuNSAxMCAxMi4yIDEwLjQ1IDEyLjU1IDEwLjkgMTMgMTEuNSAxMyAxMi4yIDEzIDEyLjU1IDEyLjU1IDEzIDEyLjIgMTMgMTEuNSAxMyAxMC45IDEyLjU1IDEwLjQ1IDEyLjIgMTAgMTEuNSAxMCBNIDkgMTAgTCAxMCA5IDIgMSAxIDIgOSAxMCBaJyxcclxuICAgICAgICBjb2xsaXNpb246J00gMTEgMTIgTCAxMyAxMCAxMCA3IDEzIDQgMTEgMiA3LjUgNS41IDkgNyA3LjUgOC41IDExIDEyIE0gMyAyIEwgMSA0IDQgNyAxIDEwIDMgMTIgOCA3IDMgMiBaJyxcclxuICAgICAgICBtYXA6J00gMTMgMSBMIDEgMSAxIDEzIDEzIDEzIDEzIDEgTSAxMiAyIEwgMTIgNyA3IDcgNyAxMiAyIDEyIDIgNyA3IDcgNyAyIDEyIDIgWicsXHJcbiAgICAgICAgbWF0ZXJpYWw6J00gMTMgMSBMIDEgMSAxIDEzIDEzIDEzIDEzIDEgTSAxMiAyIEwgMTIgNyA3IDcgNyAxMiAyIDEyIDIgNyA3IDcgNyAyIDEyIDIgWicsXHJcbiAgICAgICAgdGV4dHVyZTonTSAxMyA0IEwgMTMgMSAxIDEgMSA0IDUgNCA1IDEzIDkgMTMgOSA0IDEzIDQgWicsXHJcbiAgICAgICAgb2JqZWN0OidNIDEwIDEgTCA3IDQgNCAxIDEgMSAxIDEzIDQgMTMgNCA1IDcgOCAxMCA1IDEwIDEzIDEzIDEzIDEzIDEgMTAgMSBaJyxcclxuICAgICAgICBub25lOidNIDkgNSBMIDUgNSA1IDkgOSA5IDkgNSBaJyxcclxuICAgICAgICBjdXJzb3I6J00gNCA3IEwgMSAxMCAxIDEyIDIgMTMgNCAxMyA3IDEwIDkgMTQgMTQgMCAwIDUgNCA3IFonLFxyXG4gICAgICAgIGxvYWQ6J00gMTMgOCBMIDExLjUgNi41IDkgOSA5IDMgNSAzIDUgOSAyLjUgNi41IDEgOCA3IDE0IDEzIDggTSA5IDIgTCA5IDAgNSAwIDUgMiA5IDIgWicsXHJcbiAgICAgICAgc2F2ZTonTSA5IDEyIEwgNSAxMiA1IDE0IDkgMTQgOSAxMiBNIDExLjUgNy41IEwgMTMgNiA3IDAgMSA2IDIuNSA3LjUgNSA1IDUgMTEgOSAxMSA5IDUgMTEuNSA3LjUgWicsXHJcbiAgICAgICAgZXh0ZXJuOidNIDE0IDE0IEwgMTQgMCAwIDAgMCAxNCAxNCAxNCBNIDEyIDYgTCAxMiAxMiAyIDEyIDIgNiAxMiA2IE0gMTIgMiBMIDEyIDQgMiA0IDIgMiAxMiAyIFonLFxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcmV6b25lICgpIHtcclxuICAgICAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0SW1wdXQ6IGZ1bmN0aW9uKCl7XHJcblxyXG4gICAgICAgIHJldHVybiBSb290cy5pbnB1dCA/IHRydWUgOiBmYWxzZVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0U3R5bGUgOiBmdW5jdGlvbiAoIGRhdGEgKXtcclxuXHJcbiAgICAgICAgZm9yICggdmFyIG8gaW4gZGF0YSApe1xyXG4gICAgICAgICAgICBpZiggVC5jb2xvcnNbb10gKSBULmNvbG9yc1tvXSA9IGRhdGFbb107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULnNldFRleHQoKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIGN1c3RvbSB0ZXh0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgZGVmaW5lVGV4dDogZnVuY3Rpb24oIG8gKXtcclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCBvLmZvbnRTaXplLCBvLnRleHQsIG8uZm9udEZhbWlseSwgby5mb250U2hhZG93LCBvLmZvbnRXZWlnaHQgKVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0VGV4dDogZnVuY3Rpb24oIHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3csIHdlaWdodCApe1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBULmNvbG9ycztcclxuXHJcbiAgICAgICAgaWYoIGZvbnQgPT09IHVuZGVmaW5lZCApIGZvbnQgPSBjYy5mb250RmFtaWx5XHJcbiAgICAgICAgaWYoIHNpemUgPT09IHVuZGVmaW5lZCApIHNpemUgPSBjYy5mb250U2l6ZVxyXG4gICAgICAgIGlmKCBzaGFkb3cgPT09IHVuZGVmaW5lZCApIHNoYWRvdyA9IGNjLmZvbnRTaGFkb3dcclxuICAgICAgICBpZiggd2VpZ2h0ID09PSB1bmRlZmluZWQgKSB3ZWlnaHQgPSBjYy5mb250V2VpZ2h0XHJcbiAgICAgICAgaWYoIGNvbG9yID09PSB1bmRlZmluZWQgKSBjb2xvciA9IGNjLnRleHRcclxuXHJcbiAgICAgICAgaWYoIGlzTmFOKHNpemUpICl7IGlmKCBzaXplLnNlYXJjaCgnZW0nKT09PS0xICkgc2l6ZSArPSAncHgnfVxyXG4gICAgICAgIGVsc2Ugc2l6ZSArPSAncHgnXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vbGV0IGFsaWduID0gJ2Rpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmxlZnQ7IGFsaWduLWl0ZW1zOmNlbnRlcjsgdGV4dC1hbGlnbjpsZWZ0OydcclxuXHJcbiAgICAgICAgVC5jc3MudHh0ID0gVC5jc3MuYmFzaWMgKyBULmNzcy5taWRkbGUgKyAnIGZvbnQtZmFtaWx5OicrIGZvbnQgKyc7IGZvbnQtd2VpZ2h0Oicrd2VpZ2h0Kyc7IGZvbnQtc2l6ZTonK3NpemUrJzsgY29sb3I6JytjYy50ZXh0Kyc7IHBhZGRpbmc6MHB4IDhweDsgbGVmdDowOyB0b3A6MnB4OyBoZWlnaHQ6MTZweDsgd2lkdGg6MTAwcHg7IG92ZXJmbG93OmhpZGRlbjsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsnO1xyXG4gICAgICAgIGlmKCBzaGFkb3cgIT09ICdub25lJyApIFQuY3NzLnR4dCArPSAnIHRleHQtc2hhZG93OiAxcHggMXB4IDFweCAnK3NoYWRvdysnOyc7XHJcblxyXG4gICAgICAgIFQuY3NzLnR4dHNlbGVjdCA9IFQuY3NzLnR4dCArICdwYWRkaW5nOjBweCA0cHg7IGJvcmRlcjoxcHggZGFzaGVkICcgKyBjYy5ib3JkZXIgKyAnOyc7XHJcbiAgICAgICAgVC5jc3MuaXRlbSA9IFQuY3NzLnR4dCArICdwYWRkaW5nOjBweCA0cHg7IHBvc2l0aW9uOnJlbGF0aXZlOyBtYXJnaW4tYm90dG9tOjFweDsgJ1xyXG5cclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8vIG5vdGVcclxuXHJcbiAgICAvL2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0NTUy9jc3NfZmxleGlibGVfYm94X2xheW91dC9hbGlnbmluZ19pdGVtc19pbl9hX2ZsZXhfY29udGFpbmVyXHJcblxyXG4gICAgLypjbG9uZUNvbG9yOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IE9iamVjdC5hc3NpZ24oe30sIFQuY29sb3JzICk7XHJcbiAgICAgICAgcmV0dXJuIGNjO1xyXG5cclxuICAgIH0sKi9cclxuXHJcbiAgICAvLyBpbnRlcm4gZnVuY3Rpb25cclxuXHJcbiAgICBjbG9uZUNzczogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAvL2xldCBjYyA9IE9iamVjdC5hc3NpZ24oe30sIFQuY3NzICk7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4uVC5jc3MgfTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoIG8gKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBvLmNsb25lTm9kZSggdHJ1ZSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0U3ZnOiBmdW5jdGlvbiggZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMiApe1xyXG5cclxuICAgICAgICBpZiggaWQgPT09IC0xICkgZG9tLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG4gICAgICAgIGVsc2UgaWYoIGlkMiAhPT0gdW5kZWZpbmVkICkgZG9tLmNoaWxkTm9kZXNbIGlkIHx8IDAgXS5jaGlsZE5vZGVzWyBpZDIgfHwgMCBdLnNldEF0dHJpYnV0ZU5TKCBudWxsLCB0eXBlLCB2YWx1ZSApO1xyXG4gICAgICAgIGVsc2UgZG9tLmNoaWxkTm9kZXNbIGlkIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldENzczogZnVuY3Rpb24oIGRvbSwgY3NzICl7XHJcblxyXG4gICAgICAgIGZvciggbGV0IHIgaW4gY3NzICl7XHJcbiAgICAgICAgICAgIGlmKCBULkRPTV9TSVpFLmluZGV4T2YocikgIT09IC0xICkgZG9tLnN0eWxlW3JdID0gY3NzW3JdICsgJ3B4JztcclxuICAgICAgICAgICAgZWxzZSBkb20uc3R5bGVbcl0gPSBjc3Nbcl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbiggZywgbyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCBhdHQgaW4gbyApe1xyXG4gICAgICAgICAgICBpZiggYXR0ID09PSAndHh0JyApIGcudGV4dENvbnRlbnQgPSBvWyBhdHQgXTtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ2xpbmsnICkgZy5zZXRBdHRyaWJ1dGVOUyggVC5saW5rcywgJ3hsaW5rOmhyZWYnLCBvWyBhdHQgXSApO1xyXG4gICAgICAgICAgICBlbHNlIGcuc2V0QXR0cmlidXRlTlMoIG51bGwsIGF0dCwgb1sgYXR0IF0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oIGRvbSwgaWQgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tOyAvLyByb290XHJcbiAgICAgICAgZWxzZSBpZiggIWlzTmFOKCBpZCApICkgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCBdOyAvLyBmaXJzdCBjaGlsZFxyXG4gICAgICAgIGVsc2UgaWYoIGlkIGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgaWYoaWQubGVuZ3RoID09PSAyKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkWzBdIF0uY2hpbGROb2Rlc1sgaWRbMV0gXTtcclxuICAgICAgICAgICAgaWYoaWQubGVuZ3RoID09PSAzKSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkWzBdIF0uY2hpbGROb2Rlc1sgaWRbMV0gXS5jaGlsZE5vZGVzWyBpZFsyXSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGRvbSA6IGZ1bmN0aW9uICggdHlwZSwgY3NzLCBvYmosIGRvbSwgaWQgKSB7XHJcblxyXG4gICAgICAgIHR5cGUgPSB0eXBlIHx8ICdkaXYnO1xyXG5cclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9ELmluZGV4T2YodHlwZSkgIT09IC0xIHx8IFQuU1ZHX1RZUEVfRy5pbmRleE9mKHR5cGUpICE9PSAtMSApeyAvLyBpcyBzdmcgZWxlbWVudFxyXG5cclxuICAgICAgICAgICAgaWYoIHR5cGUgPT09J3N2ZycgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICdzdmcnICk7XHJcbiAgICAgICAgICAgICAgICBULnNldCggZG9tLCBvYmogKTtcclxuXHJcbiAgICAgICAgICAvKiAgfSBlbHNlIGlmICggdHlwZSA9PT0gJ3VzZScgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAndXNlJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcbiovXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjcmVhdGUgbmV3IHN2ZyBpZiBub3QgZGVmXHJcbiAgICAgICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsICdzdmcnICk7XHJcbiAgICAgICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGRvbSwgdHlwZSwgb2JqLCBpZCApO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9IGVsc2UgeyAvLyBpcyBodG1sIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCBkb20gPT09IHVuZGVmaW5lZCApIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApO1xyXG4gICAgICAgICAgICBlbHNlIGRvbSA9IGRvbS5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULmh0bWxzLCB0eXBlICkgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggY3NzICkgZG9tLnN0eWxlLmNzc1RleHQgPSBjc3M7IFxyXG5cclxuICAgICAgICBpZiggaWQgPT09IHVuZGVmaW5lZCApIHJldHVybiBkb207XHJcbiAgICAgICAgZWxzZSByZXR1cm4gZG9tLmNoaWxkTm9kZXNbIGlkIHx8IDAgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGFkZEF0dHJpYnV0ZXMgOiBmdW5jdGlvbiggZG9tLCB0eXBlLCBvLCBpZCApe1xyXG5cclxuICAgICAgICBsZXQgZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgdHlwZSApO1xyXG4gICAgICAgIFQuc2V0KCBnLCBvICk7XHJcbiAgICAgICAgVC5nZXQoIGRvbSwgaWQgKS5hcHBlbmRDaGlsZCggZyApO1xyXG4gICAgICAgIGlmKCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKSBnLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XHJcbiAgICAgICAgcmV0dXJuIGc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhciA6IGZ1bmN0aW9uKCBkb20gKXtcclxuXHJcbiAgICAgICAgVC5wdXJnZSggZG9tICk7XHJcbiAgICAgICAgd2hpbGUgKGRvbS5maXJzdENoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmICggZG9tLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCApIFQuY2xlYXIoIGRvbS5maXJzdENoaWxkICk7XHJcbiAgICAgICAgICAgIGRvbS5yZW1vdmVDaGlsZCggZG9tLmZpcnN0Q2hpbGQgKTsgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcHVyZ2UgOiBmdW5jdGlvbiAoIGRvbSApIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBkb20uYXR0cmlidXRlcywgaSwgbjtcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgICAgICBuID0gYVtpXS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkb21bbl0gPT09ICdmdW5jdGlvbicpIGRvbVtuXSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYSA9IGRvbS5jaGlsZE5vZGVzO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgIGkgPSBhLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgICAgICBULnB1cmdlKCBkb20uY2hpbGROb2Rlc1tpXSApOyBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIEVmZmVjdHMgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRTVkdHbG93RWZmZWN0OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGlmICggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxHbG93JykgIT09IG51bGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzdmdGaWx0ZXIgPSBULmluaXRVSUxFZmZlY3RzKCk7XHJcblxyXG4gICAgICAgIGxldCBmaWx0ZXIgPSBULmFkZEF0dHJpYnV0ZXMoIHN2Z0ZpbHRlciwgJ2ZpbHRlcicsIHsgaWQ6ICdVSUxHbG93JywgeDogJy0yMCUnLCB5OiAnLTIwJScsIHdpZHRoOiAnMTQwJScsIGhlaWdodDogJzE0MCUnIH0gKTtcclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZpbHRlciwgJ2ZlR2F1c3NpYW5CbHVyJywgeyBpbjogJ1NvdXJjZUdyYXBoaWMnLCBzdGREZXZpYXRpb246ICczJywgcmVzdWx0OiAndWlsQmx1cicgfSApO1xyXG4gICAgICAgIGxldCBmZU1lcmdlID0gVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZU1lcmdlJywgeyAgfSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDw9IDM7IGkrKyApIHtcclxuXHJcbiAgICAgICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmVNZXJnZSwgJ2ZlTWVyZ2VOb2RlJywgeyBpbjogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFQuYWRkQXR0cmlidXRlcyggZmVNZXJnZSwgJ2ZlTWVyZ2VOb2RlJywgeyBpbjogJ1NvdXJjZUdyYXBoaWMnIH0gKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGluaXRVSUxFZmZlY3RzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzdmdGaWx0ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ1VJTFNWR0VmZmVjdHMnKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIHN2Z0ZpbHRlciA9PT0gbnVsbCApIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHN2Z0ZpbHRlciA9IFQuZG9tKCAnc3ZnJywgdW5kZWZpbmVkICwgeyBpZDogJ1VJTFNWR0VmZmVjdHMnLCB3aWR0aDogJzAnLCBoZWlnaHQ6ICcwJyB9ICk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoIHN2Z0ZpbHRlciApO1xyXG4gXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3ZnRmlsdGVyO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBDb2xvciBmdW5jdGlvblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIENvbG9yTHVtYSA6IGZ1bmN0aW9uICggaGV4LCBsICkge1xyXG5cclxuICAgICAgICAvL2lmKCBoZXguc3Vic3RyaW5nKDAsIDMpID09PSAncmdiYScgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIGlmKCBoZXggPT09ICduJyApIGhleCA9ICcjMDAwJztcclxuXHJcbiAgICAgICAgLy8gdmFsaWRhdGUgaGV4IHN0cmluZ1xyXG4gICAgICAgIGhleCA9IFN0cmluZyhoZXgpLnJlcGxhY2UoL1teMC05YS1mXS9naSwgJycpO1xyXG4gICAgICAgIGlmIChoZXgubGVuZ3RoIDwgNikge1xyXG4gICAgICAgICAgICBoZXggPSBoZXhbMF0raGV4WzBdK2hleFsxXStoZXhbMV0raGV4WzJdK2hleFsyXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbCA9IGwgfHwgMDtcclxuXHJcbiAgICAgICAgLy8gY29udmVydCB0byBkZWNpbWFsIGFuZCBjaGFuZ2UgbHVtaW5vc2l0eVxyXG4gICAgICAgIGxldCByZ2IgPSBcIiNcIiwgYywgaTtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGMgPSBwYXJzZUludChoZXguc3Vic3RyKGkqMiwyKSwgMTYpO1xyXG4gICAgICAgICAgICBjID0gTWF0aC5yb3VuZChNYXRoLm1pbihNYXRoLm1heCgwLCBjICsgKGMgKiBsKSksIDI1NSkpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICAgICAgcmdiICs9IChcIjAwXCIrYykuc3Vic3RyKGMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZ2I7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBmaW5kRGVlcEludmVyOiBmdW5jdGlvbiAoIGMgKSB7IFxyXG5cclxuICAgICAgICByZXR1cm4gKGNbMF0gKiAwLjMgKyBjWzFdICogLjU5ICsgY1syXSAqIC4xMSkgPD0gMC42O1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBsZXJwQ29sb3I6IGZ1bmN0aW9uKCBjMSwgYzIsIGZhY3RvciApIHtcclxuICAgICAgICBsZXQgbmV3Q29sb3IgPSB7fTtcclxuICAgICAgICBmb3IgKCBsZXQgaSA9IDA7IGkgPCAzOyBpKysgKSB7XHJcbiAgICAgICAgICBuZXdDb2xvcltpXSA9IGMxWyBpIF0gKyAoIGMyWyBpIF0gLSBjMVsgaSBdICkgKiBmYWN0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXdDb2xvcjtcclxuICAgIH0sXHJcblxyXG4gICAgaGV4VG9IdG1sOiBmdW5jdGlvbiAoIHYgKSB7IFxyXG4gICAgICAgIHYgPSB2ID09PSB1bmRlZmluZWQgPyAweDAwMDAwMCA6IHY7XHJcbiAgICAgICAgcmV0dXJuIFwiI1wiICsgKFwiMDAwMDAwXCIgKyB2LnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFRvSGV4OiBmdW5jdGlvbiAoIHYgKSB7IFxyXG5cclxuICAgICAgICByZXR1cm4gdi50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoXCIjXCIsIFwiMHhcIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICB1MjU1OiBmdW5jdGlvbiAoYywgaSkge1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoYy5zdWJzdHJpbmcoaSwgaSArIDIpLCAxNikgLyAyNTU7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICB1MTY6IGZ1bmN0aW9uICggYywgaSApIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAxKSwgMTYpIC8gMTU7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICB1bnBhY2s6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIGlmIChjLmxlbmd0aCA9PSA3KSByZXR1cm4gWyBULnUyNTUoYywgMSksIFQudTI1NShjLCAzKSwgVC51MjU1KGMsIDUpIF07XHJcbiAgICAgICAgZWxzZSBpZiAoYy5sZW5ndGggPT0gNCkgcmV0dXJuIFsgVC51MTYoYywxKSwgVC51MTYoYywyKSwgVC51MTYoYywzKSBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcDI1NTogZnVuY3Rpb24gKCBjICkge1xyXG4gICAgICAgIGxldCBoID0gTWF0aC5yb3VuZCggKCBjICogMjU1ICkgKS50b1N0cmluZyggMTYgKTtcclxuICAgICAgICBpZiAoIGgubGVuZ3RoIDwgMiApIGggPSAnMCcgKyBoO1xyXG4gICAgICAgIHJldHVybiBoO1xyXG4gICAgfSxcclxuXHJcbiAgICBwYWNrOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiAnIycgKyBULnAyNTUoIGNbIDAgXSApICsgVC5wMjU1KCBjWyAxIF0gKSArIFQucDI1NSggY1sgMiBdICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodG1sUmdiOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICByZXR1cm4gJ3JnYignICsgTWF0aC5yb3VuZChjWzBdICogMjU1KSArICcsJysgTWF0aC5yb3VuZChjWzFdICogMjU1KSArICcsJysgTWF0aC5yb3VuZChjWzJdICogMjU1KSArICcpJztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHBhZDogZnVuY3Rpb24oIG4gKXtcclxuICAgICAgICBpZihuLmxlbmd0aCA9PSAxKW4gPSAnMCcgKyBuO1xyXG4gICAgICAgIHJldHVybiBuO1xyXG4gICAgfSxcclxuXHJcbiAgICByZ2JUb0hleCA6IGZ1bmN0aW9uKCBjICl7XHJcblxyXG4gICAgICAgIGxldCByID0gTWF0aC5yb3VuZChjWzBdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGcgPSBNYXRoLnJvdW5kKGNbMV0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBsZXQgYiA9IE1hdGgucm91bmQoY1syXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIHJldHVybiAnIycgKyBULnBhZChyKSArIFQucGFkKGcpICsgVC5wYWQoYik7XHJcblxyXG4gICAgICAgLy8gcmV0dXJuICcjJyArICggJzAwMDAwMCcgKyAoICggY1swXSAqIDI1NSApIDw8IDE2IF4gKCBjWzFdICogMjU1ICkgPDwgOCBeICggY1syXSAqIDI1NSApIDw8IDAgKS50b1N0cmluZyggMTYgKSApLnNsaWNlKCAtIDYgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGh1ZVRvUmdiOiBmdW5jdGlvbiggcCwgcSwgdCApe1xyXG5cclxuICAgICAgICBpZiAoIHQgPCAwICkgdCArPSAxO1xyXG4gICAgICAgIGlmICggdCA+IDEgKSB0IC09IDE7XHJcbiAgICAgICAgaWYgKCB0IDwgMSAvIDYgKSByZXR1cm4gcCArICggcSAtIHAgKSAqIDYgKiB0O1xyXG4gICAgICAgIGlmICggdCA8IDEgLyAyICkgcmV0dXJuIHE7XHJcbiAgICAgICAgaWYgKCB0IDwgMiAvIDMgKSByZXR1cm4gcCArICggcSAtIHAgKSAqIDYgKiAoIDIgLyAzIC0gdCApO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9Ic2w6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgbGV0IHIgPSBjWzBdLCBnID0gY1sxXSwgYiA9IGNbMl0sIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLCBtYXggPSBNYXRoLm1heChyLCBnLCBiKSwgZGVsdGEgPSBtYXggLSBtaW4sIGggPSAwLCBzID0gMCwgbCA9IChtaW4gKyBtYXgpIC8gMjtcclxuICAgICAgICBpZiAobCA+IDAgJiYgbCA8IDEpIHMgPSBkZWx0YSAvIChsIDwgMC41ID8gKDIgKiBsKSA6ICgyIC0gMiAqIGwpKTtcclxuICAgICAgICBpZiAoZGVsdGEgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChtYXggPT0gciAmJiBtYXggIT0gZykgaCArPSAoZyAtIGIpIC8gZGVsdGE7XHJcbiAgICAgICAgICAgIGlmIChtYXggPT0gZyAmJiBtYXggIT0gYikgaCArPSAoMiArIChiIC0gcikgLyBkZWx0YSk7XHJcbiAgICAgICAgICAgIGlmIChtYXggPT0gYiAmJiBtYXggIT0gcikgaCArPSAoNCArIChyIC0gZykgLyBkZWx0YSk7XHJcbiAgICAgICAgICAgIGggLz0gNjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFsgaCwgcywgbCBdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHNsVG9SZ2I6IGZ1bmN0aW9uICggYyApIHtcclxuXHJcbiAgICAgICAgbGV0IHAsIHEsIGggPSBjWzBdLCBzID0gY1sxXSwgbCA9IGNbMl07XHJcblxyXG4gICAgICAgIGlmICggcyA9PT0gMCApIHJldHVybiBbIGwsIGwsIGwgXTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcSA9IGwgPD0gMC41ID8gbCAqIChzICsgMSkgOiBsICsgcyAtICggbCAqIHMgKTtcclxuICAgICAgICAgICAgcCA9IGwgKiAyIC0gcTtcclxuICAgICAgICAgICAgcmV0dXJuIFsgVC5odWVUb1JnYihwLCBxLCBoICsgMC4zMzMzMyksIFQuaHVlVG9SZ2IocCwgcSwgaCksIFQuaHVlVG9SZ2IocCwgcSwgaCAtIDAuMzMzMzMpIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBTVkcgTU9ERUxcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtYWtlR3JhZGlhbnQ6IGZ1bmN0aW9uICggdHlwZSwgc2V0dGluZ3MsIHBhcmVudCwgY29sb3JzICkge1xyXG5cclxuICAgICAgICBULmRvbSggdHlwZSwgbnVsbCwgc2V0dGluZ3MsIHBhcmVudCwgMCApO1xyXG5cclxuICAgICAgICBsZXQgbiA9IHBhcmVudC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSwgYztcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCBjb2xvcnMubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIGMgPSBjb2xvcnNbaV07XHJcbiAgICAgICAgICAgIC8vVC5kb20oICdzdG9wJywgbnVsbCwgeyBvZmZzZXQ6Y1swXSsnJScsIHN0eWxlOidzdG9wLWNvbG9yOicrY1sxXSsnOyBzdG9wLW9wYWNpdHk6JytjWzJdKyc7JyB9LCBwYXJlbnQsIFswLG5dICk7XHJcbiAgICAgICAgICAgIFQuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCAnc3RvcC1jb2xvcic6Y1sxXSwgICdzdG9wLW9wYWNpdHknOmNbMl0gfSwgcGFyZW50LCBbMCxuXSApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKm1ha2VHcmFwaDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjQsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOididXR0JyB9LCBzdmcgKTsvLzBcclxuICAgICAgICAvL1QuZG9tKCAncmVjdCcsICcnLCB7IHg6MTAsIHk6MTAsIHdpZHRoOjEwOCwgaGVpZ2h0OjEwOCwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzFcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cys3LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjcgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMlxyXG4gICAgICAgIC8vVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOidyZ2JhKDI1NSwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnLCAnc3Ryb2tlLW9wYWNpdHknOjAuNSB9LCBzdmcgKTsvLzNcclxuICAgICAgICBULmdyYXBoID0gc3ZnO1xyXG5cclxuICAgIH0sKi9cclxuXHJcbiAgICBtYWtlUGFkOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgd3cgPSAyNTZcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3d3KycgJyt3dywgd2lkdGg6d3csIGhlaWdodDp3dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIGxldCB3ID0gMjAwOyBcclxuICAgICAgICBsZXQgZCA9ICh3dy13KSowLjUsIG0gPSAyMDtcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCwgeTogZCwgIHdpZHRoOiB3LCBoZWlnaHQ6IHcsIGZpbGw6VC5jb2xvcnMuYmFjayB9LCBzdmcgKTsgLy8gMFxyXG4gICAgICAgIFRvb2xzLmRvbSggJ3JlY3QnLCAnJywgeyB4OiBkK20qMC41LCB5OiBkK20qMC41LCB3aWR0aDogdyAtIG0gLCBoZWlnaHQ6IHcgLSBtLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiB9LCBzdmcgKTsgLy8gMVxyXG4gICAgICAgIC8vIFBvaW50ZXJcclxuICAgICAgICBUb29scy5kb20oICdsaW5lJywgJycsIHsgeDE6IGQrKG0qMC41KSwgeTE6IHd3ICowLjUsIHgyOiBkKyh3LW0qMC41KSwgeTI6IHd3ICogMC41LCBzdHJva2U6VC5jb2xvcnMuYmFjaywgJ3N0cm9rZS13aWR0aCc6IDIgfSwgc3ZnICk7IC8vIDJcclxuICAgICAgICBUb29scy5kb20oICdsaW5lJywgJycsIHsgeDE6IHd3ICogMC41LCB4Mjogd3cgKiAwLjUsIHkxOiBkKyhtKjAuNSksIHkyOiBkKyh3LW0qMC41KSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAzXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6IHd3ICogMC41LCBjeTogd3cgKiAwLjUsIHI6NSwgc3Ryb2tlOiBULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzogNSwgZmlsbDonbm9uZScgfSwgc3ZnICk7IC8vIDRcclxuICAgICAgICBULnBhZDJkID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUtub2I6IGZ1bmN0aW9uICggbW9kZWwgKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4O1xyXG4gICAgICAgIGxldCByYWRpdXMgPSAzNDtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOlQuY29sb3JzLmJ1dHRvbiwgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo4IH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnIH0sIHN2ZyApOy8vMVxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cys3LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4xKScsICdzdHJva2Utd2lkdGgnOjcgLCBmaWxsOidub25lJ30sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5rbm9iID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUNpcmN1bGFyOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gNDA7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzoxMCwgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOlQuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjcsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOididXR0JyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmNpcmN1bGFyID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUpveXN0aWNrOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICAvLysnIGJhY2tncm91bmQ6I2YwMDsnXHJcblxyXG4gICAgICAgIGxldCB3ID0gMTI4LCBjY2M7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IE1hdGguZmxvb3IoKHctMzApKjAuNSk7XHJcbiAgICAgICAgbGV0IGlubmVyUmFkaXVzID0gTWF0aC5mbG9vcihyYWRpdXMqMC42KTtcclxuICAgICAgICBsZXQgc3ZnID0gVC5kb20oICdzdmcnLCBULmNzcy5iYXNpYyArICdwb3NpdGlvbjpyZWxhdGl2ZTsnLCB7IHZpZXdCb3g6JzAgMCAnK3crJyAnK3csIHdpZHRoOncsIGhlaWdodDp3LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgVC5kb20oICdkZWZzJywgbnVsbCwge30sIHN2ZyApO1xyXG4gICAgICAgIFQuZG9tKCAnZycsIG51bGwsIHt9LCBzdmcgKTtcclxuXHJcbiAgICAgICAgaWYoIG1vZGVsID09PSAwICl7XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAgICAgLy8gZ3JhZGlhbiBiYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzQwLCAncmdiKDAsMCwwKScsIDAuM10sIFs4MCwgJ3JnYigwLDAsMCknLCAwXSwgWzkwLCAncmdiKDUwLDUwLDUwKScsIDAuNF0sIFsxMDAsICdyZ2IoNTAsNTAsNTApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWQnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhZGlhbiBzaGFkb3dcclxuICAgICAgICAgICAgY2NjID0gWyBbNjAsICdyZ2IoMCwwLDApJywgMC41XSwgWzEwMCwgJ3JnYigwLDAsMCknLCAwXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZFMnLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgLy8gZ3JhZGlhbiBzdGlja1xyXG4gICAgICAgICAgICBsZXQgY2MwID0gWydyZ2IoNDAsNDAsNDApJywgJ3JnYig0OCw0OCw0OCknLCAncmdiKDMwLDMwLDMwKSddO1xyXG4gICAgICAgICAgICBsZXQgY2MxID0gWydyZ2IoMSw5MCwxOTcpJywgJ3JnYigzLDk1LDIwNyknLCAncmdiKDAsNjUsMTY3KSddO1xyXG5cclxuICAgICAgICAgICAgY2NjID0gWyBbMzAsIGNjMFswXSwgMV0sIFs2MCwgY2MwWzFdLCAxXSwgWzgwLCBjYzBbMV0sIDFdLCBbMTAwLCBjYzBbMl0sIDFdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkSW4nLCBjeDonNTAlJywgY3k6JzUwJScsIHI6JzUwJScsIGZ4Oic1MCUnLCBmeTonNTAlJyB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgY2NjID0gWyBbMzAsIGNjMVswXSwgMV0sIFs2MCwgY2MxWzFdLCAxXSwgWzgwLCBjYzFbMV0sIDFdLCBbMTAwLCBjYzFbMl0sIDFdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkSW4yJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYXBoXHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J3VybCgjZ3JhZCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0KzUsIGN5OjY0KzEwLCByOmlubmVyUmFkaXVzKzEwLCBmaWxsOid1cmwoI2dyYWRTKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOid1cmwoI2dyYWRJbiknIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18wID0gc3ZnO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgLy8gZ3JhZGlhbiBzaGFkb3dcclxuICAgICAgICAgICAgY2NjID0gWyBbNjksICdyZ2IoMCwwLDApJywgMF0sWzcwLCAncmdiKDAsMCwwKScsIDAuM10sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRYJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDonbm9uZScsIHN0cm9rZToncmdiYSgxMDAsMTAwLDEwMCwwLjI1KScsICdzdHJva2Utd2lkdGgnOic0JyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMrMTQsIGZpbGw6J3VybCgjZ3JhZFgpJyB9LCBzdmcgKTsvLzNcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6aW5uZXJSYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYigxMDAsMTAwLDEwMCknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly80XHJcblxyXG4gICAgICAgICAgICBULmpveXN0aWNrXzEgPSBzdmc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDb2xvclJpbmc6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAyNTY7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGxldCBzID0gMzA7Ly9zdHJva2VcclxuICAgICAgICBsZXQgciA9KCB3LXMgKSowLjU7XHJcbiAgICAgICAgbGV0IG1pZCA9IHcqMC41O1xyXG4gICAgICAgIGxldCBuID0gMjQsIG51ZGdlID0gOCAvIHIgLyBuICogTWF0aC5QSSwgYTEgPSAwLCBkMTtcclxuICAgICAgICBsZXQgYW0sIHRhbiwgZDIsIGEyLCBhciwgaSwgaiwgcGF0aCwgY2NjO1xyXG4gICAgICAgIGxldCBjb2xvciA9IFtdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciAoIGkgPSAwOyBpIDw9IG47ICsraSkge1xyXG5cclxuICAgICAgICAgICAgZDIgPSBpIC8gbjtcclxuICAgICAgICAgICAgYTIgPSBkMiAqIFQuVHdvUEk7XHJcbiAgICAgICAgICAgIGFtID0gKGExICsgYTIpICogMC41O1xyXG4gICAgICAgICAgICB0YW4gPSAxIC8gTWF0aC5jb3MoKGEyIC0gYTEpICogMC41KTtcclxuXHJcbiAgICAgICAgICAgIGFyID0gW1xyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTEpLCAtTWF0aC5jb3MoYTEpLCBcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGFtKSAqIHRhbiwgLU1hdGguY29zKGFtKSAqIHRhbiwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhMiksIC1NYXRoLmNvcyhhMilcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbG9yWzFdID0gVC5yZ2JUb0hleCggVC5oc2xUb1JnYihbZDIsIDEsIDAuNV0pICk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBqID0gNjtcclxuICAgICAgICAgICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgICAgICAgICBhcltqXSA9ICgoYXJbal0qcikrbWlkKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHBhdGggPSAnIE0nICsgYXJbMF0gKyAnICcgKyBhclsxXSArICcgUScgKyBhclsyXSArICcgJyArIGFyWzNdICsgJyAnICsgYXJbNF0gKyAnICcgKyBhcls1XTtcclxuXHJcbiAgICAgICAgICAgICAgICBjY2MgPSBbIFswLGNvbG9yWzBdLDFdLCBbMTAwLGNvbG9yWzFdLDFdIF07XHJcbiAgICAgICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonRycraSwgeDE6YXJbMF0sIHkxOmFyWzFdLCB4Mjphcls0XSwgeTI6YXJbNV0sIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDpwYXRoLCAnc3Ryb2tlLXdpZHRoJzpzLCBzdHJva2U6J3VybCgjRycraSsnKScsICdzdHJva2UtbGluZWNhcCc6XCJidXR0XCIgfSwgc3ZnLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhMSA9IGEyIC0gbnVkZ2U7IFxyXG4gICAgICAgICAgICBjb2xvclswXSA9IGNvbG9yWzFdO1xyXG4gICAgICAgICAgICBkMSA9IGQyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGJyID0gKDEyOCAtIHMgKSArIDI7XHJcbiAgICAgICAgbGV0IGJ3ID0gNjA7XHJcblxyXG4gICAgICAgIGxldCB0dyA9IDg0LjkwO1xyXG5cclxuICAgICAgICAvLyBibGFjayAvIHdoaXRlXHJcbiAgICAgICAgY2NjID0gWyBbMCwgJyNGRkZGRkYnLCAxXSwgWzUwLCAnI0ZGRkZGRicsIDBdLCBbNTAsICcjMDAwMDAwJywgMF0sIFsxMDAsICcjMDAwMDAwJywgMV0gXTtcclxuICAgICAgICBULm1ha2VHcmFkaWFudCggJ2xpbmVhckdyYWRpZW50JywgeyBpZDonR0wwJywgeDE6MCwgeTE6bWlkLXR3LCB4MjowLCB5MjptaWQrdHcsIGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjN2Y3ZjdmJywgMV0sIFs1MCwgJyM3ZjdmN2YnLCAwLjVdLCBbMTAwLCAnIzdmN2Y3ZicsIDBdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMScsIHgxOm1pZC00OS4wNSwgeTE6MCwgeDI6bWlkKzk4LCB5MjowLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7ICd0cmFuc2Zvcm0tb3JpZ2luJzogJzEyOHB4IDEyOHB4JywgJ3RyYW5zZm9ybSc6J3JvdGF0ZSgwKScgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3JlZCcgIH0sIHN2ZywgMiApOy8vIDIsMFxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOid1cmwoI0dMMSknLCdzdHJva2Utd2lkdGgnOjEsIHN0cm9rZTondXJsKCNHTDEpJyAgfSwgc3ZnLCAyICk7Ly8yLDFcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDApJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wwKScgIH0sIHN2ZywgMiApOy8vMiwyXHJcbiAgICAgICAgVC5kb20oICdwYXRoJywgJycsIHsgZDonTSAyNTUuNzUgMTM2LjUgUSAyNTYgMTMyLjMgMjU2IDEyOCAyNTYgMTIzLjcgMjU1Ljc1IDExOS41IEwgMjQxIDEyOCAyNTUuNzUgMTM2LjUgWicsICBmaWxsOidub25lJywnc3Ryb2tlLXdpZHRoJzoyLCBzdHJva2U6JyMwMDAnICB9LCBzdmcsIDIgKTsvLzIsM1xyXG4gICAgICAgIC8vVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDoxMjgrMTEzLCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Mywgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnLCAyICk7Ly8yLjNcclxuXHJcbiAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDoxMjgsIGN5OjEyOCwgcjo2LCAnc3Ryb2tlLXdpZHRoJzoyLCBzdHJva2U6JyMwMDAnLCBmaWxsOidub25lJyB9LCBzdmcgKTsvLzNcclxuXHJcbiAgICAgICAgVC5jb2xvclJpbmcgPSBzdmc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpY29uOiBmdW5jdGlvbiAoIHR5cGUsIGNvbG9yLCB3ICl7XHJcblxyXG4gICAgICAgIHcgPSB3IHx8IDQwO1xyXG4gICAgICAgIC8vY29sb3IgPSBjb2xvciB8fCAnI0RFREVERSc7XHJcbiAgICAgICAgbGV0IHZpZXdCb3ggPSAnMCAwIDI1NiAyNTYnO1xyXG4gICAgICAgIC8vbGV0IHZpZXdCb3ggPSAnMCAwICcrIHcgKycgJysgdztcclxuICAgICAgICBsZXQgdCA9IFtcIjxzdmcgeG1sbnM9J1wiK1Quc3ZnbnMrXCInIHZlcnNpb249JzEuMScgeG1sbnM6eGxpbms9J1wiK1QuaHRtbHMrXCInIHN0eWxlPSdwb2ludGVyLWV2ZW50czpub25lOycgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pbllNYXggbWVldCcgeD0nMHB4JyB5PScwcHgnIHdpZHRoPSdcIit3K1wicHgnIGhlaWdodD0nXCIrdytcInB4JyB2aWV3Qm94PSdcIit2aWV3Qm94K1wiJz48Zz5cIl07XHJcbiAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICBjYXNlICdsb2dvJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb0ZpbGxfZCtcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZG9uYXRlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19kb25hdGUrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ25lbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fbmVvK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwaHknOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19waHkrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbmZpZyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBzdHJva2U9J1wiK2NvbG9yK1wiJyBzdHJva2Utd2lkdGg9JzQ5JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0nYnV0dCcgZmlsbD0nbm9uZScgZD0nXCIrVC5sb2dvX2NvbmZpZytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ2l0aHViJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIGZpbGw9J1wiK2NvbG9yK1wiJyBzdHJva2U9J25vbmUnIGQ9J1wiK1QubG9nb19naXRodWIrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NhdmUnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMjYuMTI1IDE3IEwgMjAgMjIuOTUgMTQuMDUgMTcgTSAyMCA5Ljk1IEwgMjAgMjIuOTUnLz48cGF0aCBzdHJva2U9J1wiK2NvbG9yO1xyXG4gICAgICAgICAgICB0WzFdKz1cIicgc3Ryb2tlLXdpZHRoPScyLjUnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgZmlsbD0nbm9uZScgZD0nTSAzMi42IDIzIEwgMzIuNiAyNS41IFEgMzIuNiAyOC41IDI5LjYgMjguNSBMIDEwLjYgMjguNSBRIDcuNiAyOC41IDcuNiAyNS41IEwgNy42IDIzJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0WzJdID0gXCI8L2c+PC9zdmc+XCI7XHJcbiAgICAgICAgcmV0dXJuIHQuam9pbihcIlxcblwiKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGxvZ29GaWxsX2Q6YFxyXG4gICAgTSAxNzEgMTUwLjc1IEwgMTcxIDMzLjI1IDE1NS41IDMzLjI1IDE1NS41IDE1MC43NSBRIDE1NS41IDE2Mi4yIDE0Ny40NSAxNzAuMiAxMzkuNDUgMTc4LjI1IDEyOCAxNzguMjUgMTE2LjYgMTc4LjI1IDEwOC41NSAxNzAuMiAxMDAuNSAxNjIuMiAxMDAuNSAxNTAuNzUgXHJcbiAgICBMIDEwMC41IDMzLjI1IDg1IDMzLjI1IDg1IDE1MC43NSBRIDg1IDE2OC42NSA5Ny41NSAxODEuMTUgMTEwLjE1IDE5My43NSAxMjggMTkzLjc1IDE0NS45IDE5My43NSAxNTguNCAxODEuMTUgMTcxIDE2OC42NSAxNzEgMTUwLjc1IFxyXG4gICAgTSAyMDAgMzMuMjUgTCAxODQgMzMuMjUgMTg0IDE1MC44IFEgMTg0IDE3NC4xIDE2Ny42IDE5MC40IDE1MS4zIDIwNi44IDEyOCAyMDYuOCAxMDQuNzUgMjA2LjggODguMyAxOTAuNCA3MiAxNzQuMSA3MiAxNTAuOCBMIDcyIDMzLjI1IDU2IDMzLjI1IDU2IDE1MC43NSBcclxuICAgIFEgNTYgMTgwLjU1IDc3LjA1IDIwMS42IDk4LjIgMjIyLjc1IDEyOCAyMjIuNzUgMTU3LjggMjIyLjc1IDE3OC45IDIwMS42IDIwMCAxODAuNTUgMjAwIDE1MC43NSBMIDIwMCAzMy4yNSBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fZ2l0aHViOmBcclxuICAgIE0gMTgwLjUgNzAgUSAxODYuMyA4Mi40IDE4MS41NSA5Ni41NSAxOTYuNSAxMTEuNSAxODkuNyAxNDAuNjUgMTgzLjY1IDE2OC4zNSAxNDYgMTcyLjcgMTUyLjUgMTc4LjcgMTUyLjU1IDE4NS45IEwgMTUyLjU1IDIxOC4xNSBRIDE1Mi44NCAyMjQuNTYgMTU5LjE1IDIyMy4zIFxyXG4gICAgMTU5LjIxIDIyMy4zIDE1OS4yNSAyMjMuMyAxODEuMTQgMjE2LjI1IDE5OC43IDE5OC43IDIyOCAxNjkuNCAyMjggMTI4IDIyOCA4Ni42IDE5OC43IDU3LjMgMTY5LjQgMjggMTI4IDI4IDg2LjYgMjggNTcuMyA1Ny4zIDI4IDg2LjYgMjggMTI4IDI4IDE2OS40IDU3LjMgMTk4LjcgNzQuODUgXHJcbiAgICAyMTYuMjUgOTYuNzUgMjIzLjMgOTYuNzggMjIzLjMgOTYuOCAyMjMuMyAxMDMuMTYgMjI0LjU0IDEwMy40NSAyMTguMTUgTCAxMDMuNDUgMjAwIFEgODIuOTcgMjAzLjEgNzUuMSAxOTYuMzUgNjkuODUgMTkxLjY1IDY4LjQgMTg1LjQ1IDY0LjI3IDE3Ny4wNTUgNTkuNCAxNzQuMTUgNDkuMjAgXHJcbiAgICAxNjYuODcgNjAuOCAxNjcuOCA2OS44NSAxNjkuNjEgNzUuNyAxODAgODEuMTMgMTg4LjA5IDkwIDE4OC41NSA5OC4xOCAxODguODYgMTAzLjQ1IDE4NS45IDEwMy40OSAxNzguNjcgMTEwIDE3Mi43IDcyLjMzIDE2OC4zMyA2Ni4zIDE0MC42NSA1OS40OCAxMTEuNDkgNzQuNDUgOTYuNTUgNjkuNyBcclxuICAgIDgyLjQxIDc1LjUgNzAgODQuODcgNjguNzQgMTAzLjE1IDgwIDExNS4xMjUgNzYuNjM1IDEyOCA3Ni44NSAxNDAuODUgNzYuNjUgMTUyLjg1IDgwIDE3MS4xIDY4Ljc1IDE4MC41IDcwIFpcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19uZW86YFxyXG4gICAgTSAyMTkgNTIgTCAyMDYgNTIgMjA2IDE2NiBRIDIwNiAxODMuNCAxOTMuNzUgMTk1LjY1IDE4MS40IDIwOCAxNjQgMjA4IDE0Ni42IDIwOCAxMzQuMzUgMTk1LjY1IDEyMiAxODMuNCAxMjIgMTY2IEwgMTIyIDkwIFEgMTIyIDc3LjYgMTEzLjE1IDY4Ljg1IDEwNC40IDYwIDkyIDYwIDc5LjU1IFxyXG4gICAgNjAgNzAuNzUgNjguODUgNjIgNzcuNiA2MiA5MCBMIDYyIDIwNCA3NSAyMDQgNzUgOTAgUSA3NSA4MyA3OS45NSA3OCA4NC45NSA3MyA5MiA3MyA5OSA3MyAxMDQgNzggMTA5IDgzIDEwOSA5MCBMIDEwOSAxNjYgUSAxMDkgMTg4LjggMTI1LjE1IDIwNC44NSAxNDEuMiAyMjEgMTY0IDIyMSBcclxuICAgIDE4Ni43NSAyMjEgMjAyLjk1IDIwNC44NSAyMTkgMTg4LjggMjE5IDE2NiBMIDIxOSA1MiBNIDE5NCA1MiBMIDE4MSA1MiAxODEgMTY2IFEgMTgxIDE3MyAxNzYuMDUgMTc4IDE3MS4wNSAxODMgMTY0IDE4MyAxNTcgMTgzIDE1MiAxNzggMTQ3IDE3MyAxNDcgMTY2IEwgMTQ3IDkwIFEgMTQ3IFxyXG4gICAgNjcuMiAxMzAuODUgNTEuMTUgMTE0LjggMzUgOTIgMzUgNjkuMjUgMzUgNTMuMDUgNTEuMTUgMzcgNjcuMiAzNyA5MCBMIDM3IDIwNCA1MCAyMDQgNTAgOTAgUSA1MCA3Mi42IDYyLjI1IDYwLjM1IDc0LjYgNDggOTIgNDggMTA5LjQgNDggMTIxLjY1IDYwLjM1IDEzNCA3Mi42IDEzNCA5MCBMIFxyXG4gICAgMTM0IDE2NiBRIDEzNCAxNzguNCAxNDIuODUgMTg3LjE1IDE1MS42IDE5NiAxNjQgMTk2IDE3Ni40NSAxOTYgMTg1LjI1IDE4Ny4xNSAxOTQgMTc4LjQgMTk0IDE2NiBMIDE5NCA1MiBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fcGh5OmBcclxuICAgIE0gMTAzLjU1IDM3Ljk1IEwgMTI3Ljk1IDM3Ljk1IFEgMTYyLjM1IDM3Ljk1IDE4Ni41IDU1IDIxMC45IDcyLjM1IDIxMC45IDk2LjUgMjEwLjkgMTIwLjY1IDE4Ni41IDEzNy43IDE2Mi4zNSAxNTUgMTI3Ljk1IDE1NSBMIDEyNy45NSAyMzcuOTUgTSAxMjcuOTUgMTU1IFxyXG4gICAgUSA5My41NSAxNTUgNjkuMTUgMTM3LjcgNDUgMTIwLjY1IDQ1IDk2LjUgNDUgNzIuMzUgNjkuMTUgNTUgNzAuOSA1My44IDcyLjg1IDUyLjg1IE0gMTI3Ljk1IDE1NSBMIDEyNy45NSAzNy45NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2NvbmZpZzpgXHJcbiAgICBNIDIwNC4zNSA1MS42NSBMIDE3My4yNSA4Mi43NSBRIDE5MiAxMDEuNSAxOTIgMTI4IEwgMjM2IDEyOCBNIDE5MiAxMjggUSAxOTIgMTU0LjU1IDE3My4yNSAxNzMuMjUgTCAyMDQuNCAyMDQuNCBNIDUxLjY1IDUxLjY1IEwgODIuNzUgODIuNzUgUSAxMDEuNSA2NCAxMjggNjQgXHJcbiAgICBMIDEyOCAyMCBNIDUxLjYgMjA0LjQgTCA4Mi43NSAxNzMuMjUgUSA2NCAxNTQuNTUgNjQgMTI4IEwgMjAgMTI4IE0gMTI4IDIzNiBMIDEyOCAxOTIgUSAxMDEuNSAxOTIgODIuNzUgMTczLjI1IE0gNjQgMTI4IFEgNjQgMTAxLjUgODIuNzUgODIuNzUgTSAxNzMuMjUgMTczLjI1IFxyXG4gICAgUSAxNTQuNTUgMTkyIDEyOCAxOTIgTSAxMjggNjQgUSAxNTQuNTUgNjQgMTczLjI1IDgyLjc1XHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fZG9uYXRlOmBcclxuICAgIE0gMTcxLjMgODAuMyBRIDE3OS41IDYyLjE1IDE3MS4zIDQ1LjggMTY0LjEgMzIuNSAxNDEuMzUgMzAuMSBMIDk0LjM1IDMwLjEgUSA4OS4zNSAzMC40IDg4LjMgMzUuMTUgTCA3MC41IDE0OC4wNSBRIDcwLjIgMTUyLjUgNzMuNyAxNTIuNiBMIDEwMC45NSAxNTIuNiAxMDcgMTExLjYgUSAxMDguNzUgXHJcbiAgICAxMDYuNTUgMTEyLjYgMTA2LjQ1IDEzMC40NSAxMDguMDUgMTQ1LjMgMTAzLjkgMTYzLjM1IDk4Ljc1IDE3MS4zIDgwLjMgTSAxNzkuOCA3MS41IFEgMTc4LjYgNzkuNzUgMTc0LjkgODcuODUgMTY4LjQ1IDEwMi45IDE1MS45IDEwOS4xNSAxNDAuNjUgMTEzLjk1IDExNy41NSAxMTMgMTEzLjE1IFxyXG4gICAgMTEyLjc1IDExMSAxMTcuNDUgTCAxMDIuNyAxNjkuOTUgUSAxMDIuNDUgMTczLjggMTA1LjUgMTczLjg1IEwgMTI4Ljk1IDE3My44NSBRIDEzMi4yIDE3NC4yIDEzMy4zNSAxNjkuNjUgTCAxMzguMyAxMzkuOTUgUSAxMzkuNzUgMTM1LjYgMTQzLjEgMTM1LjUgMTQ2LjYgMTM1Ljc1IDE1MC42IDEzNS42NSBcclxuICAgIDE1NC41NSAxMzUuNSAxNTcuMzUgMTM1LjEgMTYwLjE1IDEzNC43IDE2Ni43NSAxMzIuMzUgMTgxLjM1IDEyNy40IDE4Ny45IDExMS4yIDE5NC4yNSA5NS43NSAxODkuNSA4MS45NSAxODYuNzUgNzQuODUgMTc5LjggNzEuNSBNIDEwMy41IDIwOS45IFEgMTAzLjUgMjAyLjg1IDk5LjcgMTk4Ljg1IDk1Ljk1IFxyXG4gICAgMTk0Ljc1IDg5LjQgMTk0Ljc1IDgyLjggMTk0Ljc1IDc5LjA1IDE5OC44NSA3NS4zIDIwMi45IDc1LjMgMjA5LjkgNzUuMyAyMTYuODUgNzkuMDUgMjIwLjk1IDgyLjggMjI1LjA1IDg5LjQgMjI1LjA1IDk1Ljk1IDIyNS4wNSA5OS43IDIyMSAxMDMuNSAyMTYuOTUgMTAzLjUgMjA5LjkgTSA5NS40NSAyMDUuNSBcclxuICAgIFEgOTUuOTUgMjA3LjMgOTUuOTUgMjA5LjkgOTUuOTUgMjEyLjY1IDk1LjQ1IDIxNC4zNSA5NC45NSAyMTYgOTQgMjE3LjMgOTMuMSAyMTguNDUgOTEuOSAyMTkgOTAuNyAyMTkuNTUgODkuNCAyMTkuNTUgODguMTUgMjE5LjU1IDg2Ljk1IDIxOS4wNSA4NS43NSAyMTguNTUgODQuOCAyMTcuMyA4My45IDIxNi4xNSBcclxuICAgIDgzLjQgMjE0LjM1IDgyLjg1IDIxMi42IDgyLjg1IDIwOS45IDgyLjg1IDIwNy4zIDgzLjQgMjA1LjQ1IDgzLjk1IDIwMy41NSA4NC44NSAyMDIuNDUgODUuOSAyMDEuMiA4Ni45NSAyMDAuNzUgODguMDUgMjAwLjI1IDg5LjQgMjAwLjI1IDkwLjcgMjAwLjI1IDkxLjg1IDIwMC44IDkzLjA1IDIwMS4zIDk0IDIwMi41IFxyXG4gICAgOTQuOSAyMDMuNjUgOTUuNDUgMjA1LjUgTSAxNTMuMyAxOTUuMzUgTCAxNDUuMyAxOTUuMzUgMTM1LjUgMjI0LjQ1IDE0Mi44IDIyNC40NSAxNDQuNiAyMTguNSAxNTMuNzUgMjE4LjUgMTU1LjYgMjI0LjQ1IDE2My4xIDIyNC40NSAxNTMuMyAxOTUuMzUgTSAxNTIuMTUgMjEzLjI1IEwgMTQ2LjI1IDIxMy4yNSBcclxuICAgIDE0OS4yIDIwMy42NSAxNTIuMTUgMjEzLjI1IE0gMTE2Ljc1IDE5NS4zNSBMIDEwNy44IDE5NS4zNSAxMDcuOCAyMjQuNDUgMTE0LjUgMjI0LjQ1IDExNC41IDIwNC4yIDEyNS43IDIyNC40NSAxMzIuNzUgMjI0LjQ1IDEzMi43NSAxOTUuMzUgMTI2LjA1IDE5NS4zNSAxMjYuMDUgMjEyLjA1IDExNi43NSAxOTUuMzUgTSBcclxuICAgIDY2LjUgMTk3LjY1IFEgNjQuMTUgMTk2LjE1IDYxLjQ1IDE5NS43NSA1OC44IDE5NS4zNSA1NS43NSAxOTUuMzUgTCA0Ni43IDE5NS4zNSA0Ni43IDIyNC40NSA1NS44IDIyNC40NSBRIDU4LjggMjI0LjQ1IDYxLjUgMjI0LjA1IDY0LjE1IDIyMy42IDY2LjQgMjIyLjE1IDY5LjE1IDIyMC40NSA3MC45IDIxNy4yIFxyXG4gICAgNzIuNyAyMTQgNzIuNyAyMDkuOTUgNzIuNyAyMDUuNyA3MSAyMDIuNiA2OS4zNSAxOTkuNSA2Ni41IDE5Ny42NSBNIDY0LjIgMjA1IFEgNjUuMiAyMDcgNjUuMiAyMDkuOSA2NS4yIDIxMi43NSA2NC4yNSAyMTQuNzUgNjMuMyAyMTYuNzUgNjEuNSAyMTcuODUgNjAgMjE4Ljg1IDU4LjMgMjE4LjkgNTYuNiAyMTkgXHJcbiAgICA1NC4xNSAyMTkgTCA1NCAyMTkgNTQgMjAwLjggNTQuMTUgMjAwLjggUSA1Ni40IDIwMC44IDU4LjA1IDIwMC45IDU5LjcgMjAwLjk1IDYxLjE1IDIwMS43NSA2My4yIDIwMi45NSA2NC4yIDIwNSBNIDIxMC4yIDE5NS4zNSBMIDE5MC41IDE5NS4zNSAxOTAuNSAyMjQuNDUgMjEwLjIgMjI0LjQ1IDIxMC4yIDIxOC45IFxyXG4gICAgMTk3Ljc1IDIxOC45IDE5Ny43NSAyMTEuNTUgMjA5LjIgMjExLjU1IDIwOS4yIDIwNiAxOTcuNzUgMjA2IDE5Ny43NSAyMDAuOSAyMTAuMiAyMDAuOSAyMTAuMiAxOTUuMzUgTSAxODcuNSAxOTUuMzUgTCAxNjMgMTk1LjM1IDE2MyAyMDAuOSAxNzEuNiAyMDAuOSAxNzEuNiAyMjQuNDUgMTc4LjkgMjI0LjQ1IDE3OC45IFxyXG4gICAgMjAwLjkgMTg3LjUgMjAwLjkgMTg3LjUgMTk1LjM1IFpcclxuICAgIGAsXHJcblxyXG59XHJcblxyXG5ULnNldFRleHQoKTtcclxuXHJcbmV4cG9ydCBjb25zdCBUb29scyA9IFQ7IiwiLy8vaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9maWxlLXN5c3RlbS1hY2Nlc3MvI2FwaS1maWxlc3lzdGVtZmlsZWhhbmRsZS1nZXRmaWxlXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEZpbGVzIHtcclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgRklMRSBUWVBFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGF1dG9UeXBlcyggdHlwZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHQgPSBbXVxyXG5cclxuICAgICAgICBzd2l0Y2goIHR5cGUgKXtcclxuICAgICAgICAgICAgY2FzZSAnc3ZnJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ2ltYWdlL3N2Zyt4bWwnOiAnLnN2Zyd9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3dhdic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdhdWRpby93YXYnOiAnLndhdid9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21wMyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdhdWRpby9tcGVnJzogJy5tcDMnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAndmlkZW8vbXA0JzogJy5tcDQnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdiaW4nOiBjYXNlICdoZXgnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnQmluYXJ5IEZpbGVzJywgYWNjZXB0OiB7ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOiBbJy5iaW4nLCAnLmhleCddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGV4dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdUZXh0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L3BsYWluJzogWycudHh0JywgJy50ZXh0J10sICd0ZXh0L2h0bWwnOiBbJy5odG1sJywgJy5odG0nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pzb24nOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSlNPTiBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vanNvbic6IFsnLmpzb24nXSB9IH0sIF0vL3RleHQvcGxhaW5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2pzJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0phdmFTY3JpcHQgRmlsZXMnLCBhY2NlcHQ6IHsgJ3RleHQvamF2YXNjcmlwdCc6IFsnLmpzJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJbWFnZXMnLCBhY2NlcHQ6IHsgJ2ltYWdlLyonOiBbJy5wbmcnLCAnLmdpZicsICcuanBlZycsICcuanBnJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpY29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0ljb25zJywgYWNjZXB0OiB7ICdpbWFnZS94LWljbyc6IFsnLmljbyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbHV0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0x1dCcsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLmN1YmUnLCAnLjNkbCddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdFxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIExPQURcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0c3RhdGljIGFzeW5jIGxvYWQoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIgPSBGaWxlcy5zaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuXHJcbiAgICAgICAgXHRsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVBY2NlcHRBbGxPcHRpb246IHR5cGUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAvL3N0YXJ0SW46Jy4vYXNzZXRzJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IEZpbGVzLmF1dG9UeXBlcyggdHlwZSApXHJcblxyXG4gICAgICAgICAgICAvLyBjcmVhdGUgYSBuZXcgaGFuZGxlXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIoIG9wdGlvbnMgKVxyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlWzBdLmdldEZpbGUoKVxyXG4gICAgICAgICAgICAvL2xldCBjb250ZW50ID0gYXdhaXQgZmlsZS50ZXh0KClcclxuXHJcbiAgICAgICAgICAgIGlmKCAhZmlsZSApIHJldHVybiBudWxsXHJcblxyXG4gICAgICAgICAgICBsZXQgZm5hbWUgPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgICAgIGxldCBmdHlwZSA9IGZuYW1lLnN1YnN0cmluZyggZm5hbWUubGFzdEluZGV4T2YoJy4nKSsxLCBmbmFtZS5sZW5ndGggKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFVcmwgPSBbICdwbmcnLCAnanBnJywgJ2pwZWcnLCAnbXA0JywgJ3dlYm0nLCAnb2dnJywgJ21wMycgXTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YUJ1ZiA9IFsgJ3NlYScsICd6JywgJ2hleCcsICdidmgnLCAnQlZIJywgJ2dsYicsICdnbHRmJyBdO1xyXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRhdGFVcmwuaW5kZXhPZiggZnR5cGUgKSAhPT0gLTEgKSByZWFkZXIucmVhZEFzRGF0YVVSTCggZmlsZSApXHJcbiAgICAgICAgICAgIGVsc2UgaWYoIGRhdGFCdWYuaW5kZXhPZiggZnR5cGUgKSAhPT0gLTEgKSByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIHJlYWRlci5yZWFkQXNUZXh0KCBmaWxlIClcclxuXHJcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBlLnRhcmdldC5yZXN1bHRcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2godHlwZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1nID0gbmV3IEltYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggby5jYWxsYmFjayApIG8uY2FsbGJhY2soIGltZywgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWcuc3JjID0gY29udGVudFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2pzb24nOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiggby5jYWxsYmFjayApIG8uY2FsbGJhY2soIEpTT04ucGFyc2UoIGNvbnRlbnQgKSwgZm5hbWUsIGZ0eXBlIClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiggby5jYWxsYmFjayApIG8uY2FsbGJhY2soIGNvbnRlbnQsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSlcclxuICAgICAgICAgICAgaWYoIG8uYWx3YXlzICYmIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBudWxsIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblx0c3RhdGljIHNob3dPcGVuRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgICAgICAgaW5wdXQudHlwZSA9IFwiZmlsZVwiO1xyXG4gICAgICAgICAgICBpbnB1dC5tdWx0aXBsZSA9IG9wdGlvbnMubXVsdGlwbGU7XHJcbiAgICAgICAgICAgIGlucHV0LmFjY2VwdCA9IG9wdGlvbnMudHlwZXNcclxuICAgICAgICAgICAgICAgIC5tYXAoKHR5cGUpID0+IHR5cGUuYWNjZXB0KVxyXG4gICAgICAgICAgICAgICAgLmZsYXRNYXAoKGluc3QpID0+IE9iamVjdC5rZXlzKGluc3QpLmZsYXRNYXAoKGtleSkgPT4gaW5zdFtrZXldKSlcclxuICAgICAgICAgICAgICAgIC5qb2luKFwiLFwiKTtcclxuXHJcbiAgICAgICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShcclxuICAgICAgICAgICAgICAgICAgICBbLi4uaW5wdXQuZmlsZXNdLm1hcCgoZmlsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RmlsZTogYXN5bmMgKCkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlucHV0LmNsaWNrKCk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIFNBVkVcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzdGF0aWMgYXN5bmMgc2F2ZSggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBsZXQgdXNlUG9seSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlciA9IEZpbGVzLnNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsXHJcbiAgICAgICAgICAgIHVzZVBvbHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuXHJcbiAgICAgICAgICAgIGxldCB0eXBlID0gby50eXBlIHx8ICcnXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGVkTmFtZTogby5uYW1lIHx8ICdoZWxsbycsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBvLmRhdGEgfHwgJydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG4gICAgICAgICAgICBvcHRpb25zLmZpbmFsVHlwZSA9IE9iamVjdC5rZXlzKCBvcHRpb25zLnR5cGVzWzBdLmFjY2VwdCApWzBdXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc3VnZ2VzdGVkTmFtZSArPSBvcHRpb25zLnR5cGVzWzBdLmFjY2VwdFtvcHRpb25zLmZpbmFsVHlwZV1bMF1cclxuXHJcblxyXG4gICAgICAgICAgICAvLyBjcmVhdGUgYSBuZXcgaGFuZGxlXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIoIG9wdGlvbnMgKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB1c2VQb2x5ICkgcmV0dXJuXHJcblxyXG4gICAgICAgICAgICAvLyBjcmVhdGUgYSBGaWxlU3lzdGVtV3JpdGFibGVGaWxlU3RyZWFtIHRvIHdyaXRlIHRvXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBoYW5kbGUuY3JlYXRlV3JpdGFibGUoKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOiBvcHRpb25zLmZpbmFsVHlwZSB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIHdyaXRlIG91ciBmaWxlXHJcbiAgICAgICAgICAgIGF3YWl0IGZpbGUud3JpdGUoYmxvYik7XHJcblxyXG4gICAgICAgICAgICAvLyBjbG9zZSB0aGUgZmlsZSBhbmQgd3JpdGUgdGhlIGNvbnRlbnRzIHRvIGRpc2suXHJcbiAgICAgICAgICAgIGF3YWl0IGZpbGUuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgfSBjYXRjaChlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2hvd1NhdmVGaWxlUGlja2VyUG9seWZpbGwoIG9wdGlvbnMgKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuc3VnZ2VzdGVkTmFtZSB8fCBcIm15LWZpbGUudHh0XCJcclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbIG9wdGlvbnMuZGF0YSBdLCB7IHR5cGU6b3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcbiAgICAgICAgICAgIGEuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoIGJsb2IgKVxyXG5cclxuICAgICAgICAgICAgYS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiBVUkwucmV2b2tlT2JqZWN0VVJMKGEuaHJlZiksIDEwMDAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBhLmNsaWNrKClcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgRk9MREVSIG5vdCBwb3NzaWJsZSBpbiBwb2x5XHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIGdldEZvbGRlcigpIHtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgIFxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd0RpcmVjdG9yeVBpY2tlcigpO1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGVudHJ5IG9mIGhhbmRsZS52YWx1ZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGVudHJ5LmdldEZpbGUoKTtcclxuICAgICAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGZpbGVzKVxyXG4gICAgICAgICAgICByZXR1cm4gZmlsZXM7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICBcclxuXHJcbn0iLCJleHBvcnQgY2xhc3MgVjIge1xyXG5cclxuXHRjb25zdHJ1Y3RvciggeCA9IDAsIHkgPSAwICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cclxuXHR9XHJcblxyXG5cdHNldCAoIHgsIHkgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRkaXZpZGUgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCAvPSB2Lng7XHJcblx0XHR0aGlzLnkgLz0gdi55O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bXVsdGlwbHkgKCB2ICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSB2Lng7XHJcblx0XHR0aGlzLnkgKj0gdi55O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bXVsdGlwbHlTY2FsYXIgKCBzY2FsYXIgKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IHNjYWxhcjtcclxuXHRcdHRoaXMueSAqPSBzY2FsYXI7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRkaXZpZGVTY2FsYXIgKCBzY2FsYXIgKSB7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoIDEgLyBzY2FsYXIgKTtcclxuXHJcblx0fVxyXG5cclxuXHRsZW5ndGggKCkge1xyXG5cclxuXHRcdHJldHVybiBNYXRoLnNxcnQoIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGFuZ2xlICgpIHtcclxuXHJcblx0XHQvLyBjb21wdXRlcyB0aGUgYW5nbGUgaW4gcmFkaWFucyB3aXRoIHJlc3BlY3QgdG8gdGhlIHBvc2l0aXZlIHgtYXhpc1xyXG5cclxuXHRcdHZhciBhbmdsZSA9IE1hdGguYXRhbjIoIHRoaXMueSwgdGhpcy54ICk7XHJcblxyXG5cdFx0aWYgKCBhbmdsZSA8IDAgKSBhbmdsZSArPSAyICogTWF0aC5QSTtcclxuXHJcblx0XHRyZXR1cm4gYW5nbGU7XHJcblxyXG5cdH1cclxuXHJcblx0YWRkU2NhbGFyICggcyApIHtcclxuXHJcblx0XHR0aGlzLnggKz0gcztcclxuXHRcdHRoaXMueSArPSBzO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnYXRlICgpIHtcclxuXHJcblx0XHR0aGlzLnggKj0gLTE7XHJcblx0XHR0aGlzLnkgKj0gLTE7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRuZWcgKCkge1xyXG5cclxuXHRcdHRoaXMueCA9IC0xO1xyXG5cdFx0dGhpcy55ID0gLTE7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRpc1plcm8gKCkge1xyXG5cclxuXHRcdHJldHVybiAoIHRoaXMueCA9PT0gMCAmJiB0aGlzLnkgPT09IDAgKTtcclxuXHJcblx0fVxyXG5cclxuXHRjb3B5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggPSB2Lng7XHJcblx0XHR0aGlzLnkgPSB2Lnk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZXF1YWxzICggdiApIHtcclxuXHJcblx0XHRyZXR1cm4gKCAoIHYueCA9PT0gdGhpcy54ICkgJiYgKCB2LnkgPT09IHRoaXMueSApICk7XHJcblxyXG5cdH1cclxuXHJcblx0bmVhckVxdWFscyAoIHYsIG4gKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LngudG9GaXhlZChuKSA9PT0gdGhpcy54LnRvRml4ZWQobikgKSAmJiAoIHYueS50b0ZpeGVkKG4pID09PSB0aGlzLnkudG9GaXhlZChuKSApICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVycCAoIHYsIGFscGhhICkge1xyXG5cclxuXHRcdGlmKCB2ID09PSBudWxsICl7XHJcblx0XHRcdHRoaXMueCAtPSB0aGlzLnggKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgLT0gdGhpcy55ICogYWxwaGE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnggKz0gKCB2LnggLSB0aGlzLnggKSAqIGFscGhhO1xyXG5cdFx0ICAgIHRoaXMueSArPSAoIHYueSAtIHRoaXMueSApICogYWxwaGE7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gXCIuL1Jvb3RzLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4vVG9vbHMuanNcIjtcclxuaW1wb3J0IHsgVjIgfSBmcm9tIFwiLi9WMi5qc1wiO1xyXG5cclxuLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIFByb3RvIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIC8vIGRpc2FibGUgbW91c2UgY29udHJvbGVcclxuICAgIHRoaXMubG9jayA9IG8ubG9jayB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBmb3IgYnV0dG9uXHJcbiAgICB0aGlzLm5ldmVybG9jayA9IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgc2ltcGxlIHNwYWNlXHJcbiAgICB0aGlzLmlzU3BhY2UgPSBvLmlzU3BhY2UgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gaWYgaXMgb24gZ3VpIG9yIGdyb3VwXHJcbiAgICB0aGlzLm1haW4gPSBvLm1haW4gfHwgbnVsbDtcclxuICAgIHRoaXMuaXNVSSA9IG8uaXNVSSB8fCBmYWxzZTtcclxuICAgIHRoaXMuZ3JvdXAgPSBvLmdyb3VwIHx8IG51bGw7XHJcblxyXG4gICAgdGhpcy5pc0xpc3RlbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudG9wID0gMDtcclxuICAgIHRoaXMueXRvcCA9IDA7XHJcblxyXG4gICAgdGhpcy5keCA9IG8uZHggfHwgMDtcclxuXHJcbiAgICB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZSAhPT0gdW5kZWZpbmVkID8gby5zZWxlY3RhYmxlIDogZmFsc2U7XHJcbiAgICB0aGlzLnVuc2VsZWN0YWJsZSA9XHJcbiAgICAgIG8udW5zZWxlY3QgIT09IHVuZGVmaW5lZCA/IG8udW5zZWxlY3QgOiB0aGlzLmlzU2VsZWN0YWJsZTtcclxuXHJcbiAgICB0aGlzLm9udG9wID0gby5vbnRvcCA/IG8ub250b3AgOiBmYWxzZTsgLy8gJ2JlZm9yZWJlZ2luJyAnYWZ0ZXJiZWdpbicgJ2JlZm9yZWVuZCcgJ2FmdGVyZW5kJ1xyXG5cclxuICAgIHRoaXMuY3NzID0gdGhpcy5tYWluID8gdGhpcy5tYWluLmNzcyA6IFRvb2xzLmNzcztcclxuXHJcbiAgICB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKFxyXG4gICAgICBvLFxyXG4gICAgICB0aGlzLm1haW5cclxuICAgICAgICA/IHRoaXMuZ3JvdXBcclxuICAgICAgICAgID8gdGhpcy5ncm91cC5jb2xvcnNcclxuICAgICAgICAgIDogdGhpcy5tYWluLmNvbG9yc1xyXG4gICAgICAgIDogVG9vbHMuY29sb3JzXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMub3ZlckVmZmVjdCA9IHRoaXMuY29sb3JzLnNob3dPdmVyO1xyXG5cclxuICAgIHRoaXMuc3ZncyA9IFRvb2xzLnN2Z3M7XHJcblxyXG4gICAgdGhpcy56b25lID0geyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwLCBkOiAwIH07XHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcblxyXG4gICAgdGhpcy5pc0NhbnZhc09ubHkgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBwZXJjZW50IG9mIHRpdGxlXHJcbiAgICB0aGlzLnAgPSBvLnAgIT09IHVuZGVmaW5lZCA/IG8ucCA6IFRvb2xzLnNpemUucDtcclxuXHJcbiAgICB0aGlzLncgPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4uc2l6ZS53IDogVG9vbHMuc2l6ZS53O1xyXG4gICAgaWYgKG8udyAhPT0gdW5kZWZpbmVkKSB0aGlzLncgPSBvLnc7XHJcblxyXG4gICAgdGhpcy5oID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUuaCA6IFRvb2xzLnNpemUuaDtcclxuICAgIGlmIChvLmggIT09IHVuZGVmaW5lZCkgdGhpcy5oID0gby5oO1xyXG4gICAgaWYgKCF0aGlzLmlzU3BhY2UpIHRoaXMuaCA9IHRoaXMuaCA8IDExID8gMTEgOiB0aGlzLmg7XHJcbiAgICBlbHNlIHRoaXMubG9jayA9IHRydWU7XHJcblxyXG4gICAgLy8gZGVjYWxlIGZvciBjYW52YXMgb25seVxyXG4gICAgdGhpcy5mdyA9IG8uZncgfHwgMDtcclxuXHJcbiAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0byB8fCB0cnVlOyAvLyBhdXRvIHdpZHRoIG9yIGZsZXhcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7IC8vZmFsc2UvLyBvcGVuIHN0YXR1XHJcblxyXG4gICAgLy8gcmFkaXVzIGZvciB0b29sYm94XHJcbiAgICB0aGlzLnJhZGl1cyA9IG8ucmFkaXVzIHx8IHRoaXMuY29sb3JzLnJhZGl1cztcclxuXHJcbiAgICB0aGlzLnRyYW5zaXRpb24gPSBvLnRyYW5zaXRpb24gfHwgVG9vbHMudHJhbnNpdGlvbjtcclxuXHJcbiAgICAvLyBvbmx5IGZvciBudW1iZXJcclxuICAgIHRoaXMuaXNOdW1iZXIgPSBmYWxzZTtcclxuICAgIHRoaXMubm9OZWcgPSBvLm5vTmVnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5hbGxFcXVhbCA9IG8uYWxsRXF1YWwgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gb25seSBtb3N0IHNpbXBsZVxyXG4gICAgdGhpcy5tb25vID0gZmFsc2U7XHJcblxyXG4gICAgLy8gc3RvcCBsaXN0ZW5pbmcgZm9yIGVkaXQgc2xpZGUgdGV4dFxyXG4gICAgdGhpcy5pc0VkaXQgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBubyB0aXRsZVxyXG4gICAgdGhpcy5zaW1wbGUgPSBvLnNpbXBsZSB8fCBmYWxzZTtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYSA9IDA7XHJcblxyXG4gICAgLy8gZGVmaW5lIG9iaiBzaXplXHJcbiAgICB0aGlzLnNldFNpemUodGhpcy53KTtcclxuXHJcbiAgICAvLyB0aXRsZSBzaXplXHJcbiAgICBpZiAoby5zYSAhPT0gdW5kZWZpbmVkKSB0aGlzLnNhID0gby5zYTtcclxuICAgIGlmIChvLnNiICE9PSB1bmRlZmluZWQpIHRoaXMuc2IgPSBvLnNiO1xyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB0aGlzLnNiID0gdGhpcy53IC0gdGhpcy5zYTtcclxuXHJcbiAgICAvLyBsYXN0IG51bWJlciBzaXplIGZvciBzbGlkZVxyXG4gICAgdGhpcy5zYyA9IG8uc2MgPT09IHVuZGVmaW5lZCA/IDQ3IDogby5zYztcclxuXHJcbiAgICAvLyBmb3IgbGlzdGVuaW5nIG9iamVjdFxyXG4gICAgdGhpcy5vYmplY3RMaW5rID0gbnVsbDtcclxuICAgIHRoaXMuaXNTZW5kID0gZmFsc2U7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy50eHQgPSBvLm5hbWUgfHwgXCJcIjtcclxuICAgIHRoaXMubmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0O1xyXG4gICAgdGhpcy50YXJnZXQgPSBvLnRhcmdldCB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNhbGxiYWNrXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcbiAgICB0aGlzLmVuZENhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gby5vcGVuQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLm9wZW5DYWxsYmFjaztcclxuICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9IG8uY2xvc2VDYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2xvc2VDYWxsYmFjaztcclxuXHJcbiAgICAvLyBpZiBubyBjYWxsYmFjayB0YWtlIG9uZSBmcm9tIGdyb3VwIG9yIGd1aVxyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2sgPT09IG51bGwgJiYgdGhpcy5pc1VJICYmIHRoaXMubWFpbi5jYWxsYmFjayAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmNhbGxiYWNrID0gdGhpcy5ncm91cCA/IHRoaXMuZ3JvdXAuY2FsbGJhY2sgOiB0aGlzLm1haW4uY2FsbGJhY2s7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZWxlbWVudHNcclxuICAgIHRoaXMuYyA9IFtdO1xyXG5cclxuICAgIC8vIHN0eWxlXHJcbiAgICB0aGlzLnMgPSBbXTtcclxuXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0aGlzLmlzVUkgPyB0aGlzLm1haW4udXNlRmxleCA6IGZhbHNlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4XHJcbiAgICAgID8gXCJkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGFsaWduLWl0ZW1zOmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7IGZsZXg6IDEgMTAwJTtcIlxyXG4gICAgICA6IFwiZmxvYXQ6bGVmdDtcIjtcclxuXHJcbiAgICB0aGlzLmNbMF0gPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyBcInBvc2l0aW9uOnJlbGF0aXZlOyBoZWlnaHQ6MjBweDtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnNbMF0gPSB0aGlzLmNbMF0uc3R5bGU7XHJcblxyXG4gICAgLy8gYm90dG9tIG1hcmdpblxyXG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmNvbG9ycy5zeTtcclxuICAgIHRoaXMubXRvcCA9IDA7XHJcbiAgICBsZXQgbWFyZ2luRGl2ID0gVG9vbHMuaXNEaXZpZCh0aGlzLm1hcmdpbik7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSAmJiB0aGlzLm1hcmdpbikge1xyXG4gICAgICB0aGlzLnNbMF0uYm94U2l6aW5nID0gXCJjb250ZW50LWJveFwiO1xyXG4gICAgICBpZiAobWFyZ2luRGl2KSB7XHJcbiAgICAgICAgdGhpcy5tdG9wID0gdGhpcy5tYXJnaW4gKiAwLjU7XHJcbiAgICAgICAgLy90aGlzLnNbMF0uYm9yZGVyVG9wID0gJyR7dGhpcy5tdG9wfXB4IHNvbGlkIHRyYW5zcGFyZW50J1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coYCR7dGhpcy5tdG9wfXB4IHNvbGlkIHRyYW5zcGFyZW50YClcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyVG9wID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm10b3AgKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlckJvdHRvbSA9IHRoaXMubWFyZ2luICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gd2l0aCB0aXRsZVxyXG4gICAgaWYgKCF0aGlzLnNpbXBsZSkge1xyXG4gICAgICB0aGlzLmNbMV0gPSBUb29scy5kb20oXCJkaXZcIiwgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlKTtcclxuICAgICAgdGhpcy5zWzFdID0gdGhpcy5jWzFdLnN0eWxlO1xyXG4gICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLm5hbWU7XHJcbiAgICAgIHRoaXMuc1sxXS5jb2xvciA9IHRoaXMubG9jayA/IHRoaXMuY29sb3JzLnRpdGxlb2ZmIDogdGhpcy5jb2xvcnMudGl0bGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG8ucG9zKSB7XHJcbiAgICAgIHRoaXMuc1swXS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgZm9yIChsZXQgcCBpbiBvLnBvcykge1xyXG4gICAgICAgIHRoaXMuc1swXVtwXSA9IG8ucG9zW3BdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubW9ubyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG8uY3NzKSB0aGlzLnNbMF0uY3NzVGV4dCA9IG8uY3NzO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIG1ha2UgdGhlIG5vZGVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGluaXQoKSB7XHJcbiAgICB0aGlzLnl0b3AgPSB0aGlzLnRvcCArIHRoaXMubXRvcDtcclxuXHJcbiAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMubWFyZ2luO1xyXG4gICAgdGhpcy56b25lLncgPSB0aGlzLnc7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7IC8vIHN0eWxlIGNhY2hlXHJcbiAgICBsZXQgYyA9IHRoaXMuYzsgLy8gZGl2IGNhY2hcclxuXHJcbiAgICBzWzBdLmhlaWdodCA9IHRoaXMuaCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5pc1VJKSBzWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGggJiYgdGhpcy51c2VGbGV4KSB7XHJcbiAgICAgIHNbMF0uZmxleCA9IFwiMSAwIGF1dG9cIjtcclxuICAgICAgc1swXS5taW5XaWR0aCA9IHRoaXMubWludyArIFwicHhcIjtcclxuICAgICAgc1swXS50ZXh0QWxpZ24gPSBcImNlbnRlclwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgc1swXS53aWR0aCA9IFwiMTAwJVwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8vaWYoIHRoaXMuYXV0b0hlaWdodCApIHNbMF0udHJhbnNpdGlvbiA9ICdoZWlnaHQgMC4wMXMgZWFzZS1vdXQnO1xyXG4gICAgaWYgKGNbMV0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmF1dG9XaWR0aCkge1xyXG4gICAgICBzWzFdID0gY1sxXS5zdHlsZTtcclxuICAgICAgc1sxXS50b3AgPSAxICsgXCJweFwiO1xyXG4gICAgICBzWzFdLmhlaWdodCA9IHRoaXMuaCAtIDIgKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZyYWcgPSBUb29scy5mcmFnO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAxLCBsbmcgPSBjLmxlbmd0aDsgaSAhPT0gbG5nOyBpKyspIHtcclxuICAgICAgaWYgKGNbaV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoY1tpXSk7XHJcbiAgICAgICAgc1tpXSA9IGNbaV0uc3R5bGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHAgPVxyXG4gICAgICB0aGlzLnRhcmdldCAhPT0gbnVsbFxyXG4gICAgICAgID8gdGhpcy50YXJnZXRcclxuICAgICAgICA6IHRoaXMuaXNVSVxyXG4gICAgICAgID8gdGhpcy5tYWluLmlubmVyXHJcbiAgICAgICAgOiBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICh0aGlzLm9udG9wKSBwcC5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJhZnRlcmJlZ2luXCIsIGNbMF0pO1xyXG4gICAgZWxzZSBwcC5hcHBlbmRDaGlsZChjWzBdKTtcclxuXHJcbiAgICBjWzBdLmFwcGVuZENoaWxkKGZyYWcpO1xyXG5cclxuICAgIHRoaXMuclNpemUoKTtcclxuXHJcbiAgICAvLyAhIHNvbG8gcHJvdG9cclxuICAgIGlmICghdGhpcy5pc1VJKSB7XHJcbiAgICAgIHRoaXMuY1swXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJhdXRvXCI7XHJcbiAgICAgIFJvb3RzLmFkZCh0aGlzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZFRyYW5zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5iYXNlSCAmJiB0aGlzLnRyYW5zaXRpb24gJiYgdGhpcy5pc1VJKSB7XHJcbiAgICAgIHRoaXMuY1swXS5zdHlsZS50cmFuc2l0aW9uID0gXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGZyb20gVG9vbHNcclxuXHJcbiAgZG9tKHR5cGUsIGNzcywgb2JqLCBkb20sIGlkKSB7XHJcbiAgICByZXR1cm4gVG9vbHMuZG9tKHR5cGUsIGNzcywgb2JqLCBkb20sIGlkKTtcclxuICB9XHJcblxyXG4gIHNldFN2Zyhkb20sIHR5cGUsIHZhbHVlLCBpZCwgaWQyKSB7XHJcbiAgICBUb29scy5zZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMik7XHJcbiAgfVxyXG5cclxuICBzZXRDc3MoZG9tLCBjc3MpIHtcclxuICAgIFRvb2xzLnNldENzcyhkb20sIGNzcyk7XHJcbiAgfVxyXG5cclxuICBjbGFtcCh2YWx1ZSwgbWluLCBtYXgpIHtcclxuICAgIHJldHVybiBUb29scy5jbGFtcCh2YWx1ZSwgbWluLCBtYXgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sb3JSaW5nKCkge1xyXG4gICAgaWYgKCFUb29scy5jb2xvclJpbmcpIFRvb2xzLm1ha2VDb2xvclJpbmcoKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jb2xvclJpbmcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Sm95c3RpY2sobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSkgVG9vbHMubWFrZUpveXN0aWNrKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29sc1tcImpveXN0aWNrX1wiICsgbW9kZWxdKTtcclxuICB9XHJcblxyXG4gIGdldENpcmN1bGFyKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmNpcmN1bGFyKSBUb29scy5tYWtlQ2lyY3VsYXIobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmNpcmN1bGFyKTtcclxuICB9XHJcblxyXG4gIGdldEtub2IobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMua25vYikgVG9vbHMubWFrZUtub2IobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLmtub2IpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFkMmQobW9kZWwpIHtcclxuICAgIGlmICghVG9vbHMucGFkMmQpIFRvb2xzLm1ha2VQYWQobW9kZWwpO1xyXG4gICAgcmV0dXJuIFRvb2xzLmNsb25lKFRvb2xzLnBhZDJkKTtcclxuICB9XHJcblxyXG4gIC8vIGZyb20gUm9vdHNcclxuXHJcbiAgY3Vyc29yKG5hbWUpIHtcclxuICAgIFJvb3RzLmN1cnNvcihuYW1lKTtcclxuICB9XHJcblxyXG4gIC8vLy8vLy8vL1xyXG5cclxuICB1cGRhdGUoKSB7fVxyXG5cclxuICByZXNldCgpIHt9XHJcblxyXG4gIC8vLy8vLy8vL1xyXG5cclxuICBjb250ZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY1swXTtcclxuICB9XHJcblxyXG4gIGdldERvbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICB1aW91dCgpIHtcclxuICAgIGlmICh0aGlzLmxvY2spIHJldHVybjtcclxuICAgIGlmICghdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcbiAgfVxyXG5cclxuICB1aW92ZXIoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kT3ZlcjtcclxuICB9XHJcblxyXG4gIHJlbmFtZShzKSB7XHJcbiAgICBpZiAodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHM7XHJcbiAgfVxyXG5cclxuICBsaXN0ZW4oKSB7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gUm9vdHMuYWRkTGlzdGVuKHRoaXMpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBsaXN0ZW5pbmcoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc1NlbmQpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzRWRpdCkgcmV0dXJuO1xyXG4gICAgLy8gY2hlY2sgaWYgdmFsdWUgaGFzIGNoYW5nZWRcclxuICAgIGxldCBoYXNDaGFuZ2VkID0gdGhpcy5zZXRWYWx1ZSh0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldKTtcclxuICAgIHJldHVybiBoYXNDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWUodikge1xyXG4gICAgY29uc3Qgb2xkID0gdGhpcy52YWx1ZTtcclxuICAgIGlmICh0aGlzLmlzTnVtYmVyKSB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh2KTtcclxuICAgIC8vZWxzZSBpZiggdiBpbnN0YW5jZW9mIEFycmF5ICYmIHYubGVuZ3RoID09PSAxICkgdiA9IHZbMF07XHJcbiAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICAgIGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICBpZiAob2xkICE9PSB0aGlzLnZhbHVlKSB7XHJcbiAgICAgIGhhc0NoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoYXNDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHVwZGF0ZSBldmVyeSBjaGFuZ2VcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uQ2hhbmdlKGYpIHtcclxuICAgIGlmICh0aGlzLmlzU3BhY2UpIHJldHVybjtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBmIHx8IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgb25seSBvbiBlbmRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRmluaXNoQ2hhbmdlKGYpIHtcclxuICAgIGlmICh0aGlzLmlzU3BhY2UpIHJldHVybjtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBldmVudCBvbiBvcGVuIGNsb3NlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbk9wZW4oZikge1xyXG4gICAgdGhpcy5vcGVuQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBvbkNsb3NlKGYpIHtcclxuICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9IGY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgc2VuZCBiYWNrIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZW5kKHYpIHtcclxuICAgIHYgPSB2IHx8IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHYubGVuZ3RoID09PSAxKSB2ID0gdlswXTtcclxuXHJcbiAgICB0aGlzLmlzU2VuZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrKSB0aGlzLmNhbGxiYWNrKHYsIHRoaXMub2JqZWN0S2V5KTtcclxuICAgIHRoaXMuaXNTZW5kID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZW5kRW5kKHYpIHtcclxuICAgIHYgPSB2IHx8IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHYubGVuZ3RoID09PSAxKSB2ID0gdlswXTtcclxuXHJcbiAgICBpZiAodGhpcy5lbmRDYWxsYmFjaykgdGhpcy5lbmRDYWxsYmFjayh2KTtcclxuICAgIGlmICh0aGlzLm9iamVjdExpbmsgIT09IG51bGwpIHRoaXMub2JqZWN0TGlua1t0aGlzLm9iamVjdEtleV0gPSB2O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGNsZWFyIG5vZGVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICBpZiAodGhpcy5pc0xpc3RlbikgUm9vdHMucmVtb3ZlTGlzdGVuKHRoaXMpO1xyXG5cclxuICAgIFRvb2xzLmNsZWFyKHRoaXMuY1swXSk7XHJcblxyXG4gICAgaWYgKHRoaXMudGFyZ2V0ICE9PSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLmdyb3VwICE9PSBudWxsKSB0aGlzLmdyb3VwLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIHRoaXMudGFyZ2V0LnJlbW92ZUNoaWxkKHRoaXMuY1swXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc1VJKSB0aGlzLm1haW4uY2xlYXJPbmUodGhpcyk7XHJcbiAgICAgIGVsc2UgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pc1VJKSBSb290cy5yZW1vdmUodGhpcyk7XHJcblxyXG4gICAgdGhpcy5jID0gbnVsbDtcclxuICAgIHRoaXMucyA9IG51bGw7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNsZWFyKCkge31cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGNoYW5nZSBzaXplXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBnZXRXaWR0aCgpIHtcclxuICAgIGxldCBudyA9IFJvb3RzLmdldFdpZHRoKHRoaXMpO1xyXG4gICAgaWYgKG53KSB0aGlzLncgPSBudztcclxuICB9XHJcblxyXG4gIHNldFNpemUoc3gpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLncgPSBzeDtcclxuXHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgcHAgPSB0aGlzLncgKiAodGhpcy5wIC8gMTAwKTtcclxuICAgICAgLy90aGlzLnNhID0gTWF0aC5mbG9vciggcHAgKyAxMCApXHJcbiAgICAgIC8vdGhpcy5zYiA9IE1hdGguZmxvb3IoIHRoaXMudyAtIHBwIC0gMjAgKVxyXG4gICAgICB0aGlzLnNhID0gTWF0aC5mbG9vcihwcCArIDgpO1xyXG4gICAgICB0aGlzLnNiID0gTWF0aC5mbG9vcih0aGlzLncgLSBwcCAtIDE2KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9XaWR0aCkgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLmlzVUkpIHRoaXMuc1swXS53aWR0aCA9IHRoaXMudyArIFwicHhcIjtcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZm9yIG51bWVyaWMgdmFsdWVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNldFR5cGVOdW1iZXIobykge1xyXG4gICAgdGhpcy5pc051bWJlciA9IHRydWU7XHJcblxyXG4gICAgdGhpcy52YWx1ZSA9IDA7XHJcbiAgICBpZiAoby52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygby52YWx1ZSA9PT0gXCJzdHJpbmdcIikgdGhpcy52YWx1ZSA9IG8udmFsdWUgKiAxO1xyXG4gICAgICBlbHNlIHRoaXMudmFsdWUgPSBvLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWluID0gby5taW4gPT09IHVuZGVmaW5lZCA/IC1JbmZpbml0eSA6IG8ubWluO1xyXG4gICAgdGhpcy5tYXggPSBvLm1heCA9PT0gdW5kZWZpbmVkID8gSW5maW5pdHkgOiBvLm1heDtcclxuICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IDIgOiBvLnByZWNpc2lvbjtcclxuXHJcbiAgICBsZXQgcztcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMucHJlY2lzaW9uKSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBzID0gMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHMgPSAwLjE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBzID0gMC4wMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIHMgPSAwLjAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIHMgPSAwLjAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNTpcclxuICAgICAgICBzID0gMC4wMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA2OlxyXG4gICAgICAgIHMgPSAwLjAwMDAwMTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0ZXAgPSBvLnN0ZXAgPT09IHVuZGVmaW5lZCA/IHMgOiBvLnN0ZXA7XHJcbiAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXggLSB0aGlzLm1pbjtcclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKHRoaXMudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgbnVtVmFsdWUobikge1xyXG4gICAgaWYgKHRoaXMubm9OZWcpIG4gPSBNYXRoLmFicyhuKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIE1hdGgubWluKHRoaXMubWF4LCBNYXRoLm1heCh0aGlzLm1pbiwgbikpLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pICogMVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UUyBERUZBVUxUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBoYW5kbGVFdmVudChlKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5uZXZlcmxvY2spIFJvb3RzLmxvY2sgPSBmYWxzZTtcclxuICAgIGlmICghdGhpc1tlLnR5cGVdKVxyXG4gICAgICByZXR1cm4gY29uc29sZS5lcnJvcihlLnR5cGUsIFwidGhpcyB0eXBlIG9mIGV2ZW50IG5vIGV4aXN0ZSAhXCIpO1xyXG5cclxuICAgIC8vIFRPRE8gISEhIVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgei5kIC09IHRoaXMubWFyZ2luICogMC41XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5ncm91cC5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICByZXR1cm4gdGhpc1tlLnR5cGVdKGUpO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBtb3VzZXVwKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2V5ZG93bihlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleXVwKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBvYmplY3QgcmVmZXJlbmN5XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRSZWZlcmVuY3kob2JqLCBrZXkpIHtcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG9iajtcclxuICAgIHRoaXMub2JqZWN0S2V5ID0ga2V5O1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheSh2ID0gZmFsc2UpIHtcclxuICAgIHRoaXMuc1swXS52aXNpYmlsaXR5ID0gdiA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyByZXNpemUgaGVpZ2h0XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvcGVuKCkge1xyXG4gICAgaWYgKHRoaXMuaXNPcGVuKSByZXR1cm47XHJcbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm9wZW5DYWxsYmFjaykgdGhpcy5vcGVuQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICAgIFJvb3RzLm5lZWRSZXNpemUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuY2xvc2VDYWxsYmFjaykgdGhpcy5jbG9zZUNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBuZWVkWm9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIElOUFVUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZWxlY3QoKSB7fVxyXG5cclxuICB1bnNlbGVjdCgpIHt9XHJcblxyXG4gIHNldElucHV0KElucHV0KSB7XHJcbiAgICBSb290cy5zZXRJbnB1dChJbnB1dCwgdGhpcyk7XHJcbiAgfVxyXG5cclxuICB1cElucHV0KHgsIGRvd24pIHtcclxuICAgIHJldHVybiBSb290cy51cElucHV0KHgsIGRvd24pO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIHNwZWNpYWwgaXRlbVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0ZWQoYikge1xyXG4gICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQm9vbCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5tb2RlICE9PSB1bmRlZmluZWQgPyBvLm1vZGUgOiAwXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5yZW5hbWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby5vbk5hbWUgKSBvLm9ubmFtZSA9IG8ub25OYW1lXHJcbiAgICAgICAgaWYoIG8ub25uYW1lICkgdGhpcy5vbk5hbWUgPSBvLm9ubmFtZVxyXG5cclxuICAgICAgICB0aGlzLmluaCA9IG8uaW5oIHx8IE1hdGguZmxvb3IoIHRoaXMuaCowLjggKVxyXG4gICAgICAgIHRoaXMuaW53ID0gby5pbncgfHwgMzZcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgIFxyXG4gICAgICAgIGlmKCB0aGlzLm1vZGVsID09PSAwICl7XHJcbiAgICAgICAgICAgIGxldCB0ID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0oKHRoaXMuaW5oLTIpKjAuNSk7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnYmFja2dyb3VuZDonKyBjYy5pbnB1dEJnICsnOyBoZWlnaHQ6JysodGhpcy5pbmgtMikrJ3B4OyB3aWR0aDonK3RoaXMuaW53KydweDsgdG9wOicrdCsncHg7IGJvcmRlci1yYWRpdXM6MTBweDsgYm9yZGVyOjJweCBzb2xpZCAnKyBjYy5iYWNrIClcclxuICAgICAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdoZWlnaHQ6JysodGhpcy5pbmgtNikrJ3B4OyB3aWR0aDoxNnB4OyB0b3A6JysodCsyKSsncHg7IGJvcmRlci1yYWRpdXM6MTBweDsgYmFja2dyb3VuZDonKyBjYy5idXR0b24rJzsnIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnAgPSAwXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gLTFcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICF0aGlzLnZhbHVlXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0cnVlIClcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBNT0RFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZSAoIG92ZXIgKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5zLCBuLCB2ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBpZiggb3ZlciApIG4gPSB2ID8gNCA6IDNcclxuICAgICAgICBlbHNlIG4gPSB2ID8gMiA6IDFcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubW9kZWwgIT09IDAgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBzWzJdLmNvbG9yID0gY2MudGV4dDsgc1syXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzWzJdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzJdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB2ID8gdGhpcy5vbk5hbWUgOiB0aGlzLm5hbWVcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2tvZmY7IHNbM10uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7Ly8gb2ZmIG91dFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyBicmVhazsvLyBvbiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFjazsgc1szXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7Ly8gb2ZmIG92ZXJcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0U2VsZWN0OyBicmVhazsvLyBvbiBvdXRcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgc1szXS5tYXJnaW5MZWZ0ID0gdiA/ICcxN3B4JyA6ICcycHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB2ID8gdGhpcy5vbk5hbWUgOiB0aGlzLm5hbWVcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKClcclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKVxyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgdyA9ICh0aGlzLncgLSAxMCApIC0gdGhpcy5pbndcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB3ICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzNdLmxlZnQgPSB3ICsgJ3B4J1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnXHJcbiAgICAgICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICArICdweCdcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCdXR0b24gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gby52YWx1ZSB8fCB0aGlzLnR4dFxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApIHRoaXMudmFsdWVzID0gby52YWx1ZXNcclxuXHJcbiAgICAgICAgaWYoICFvLnZhbHVlcyAmJiAhby52YWx1ZSApIHRoaXMudHh0ID0gJydcclxuXHJcbiAgICAgICAgdGhpcy5vbk5hbWUgPSBvLm9uTmFtZSB8fCBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLm9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIGJ1dHRvbiB3aWR0aFxyXG4gICAgICAgIHRoaXMuYncgPSBvLmZvcmNlV2lkdGggfHwgMFxyXG4gICAgICAgIGlmKG8uYncpIHRoaXMuYncgPSBvLmJ3XHJcbiAgICAgICAgdGhpcy5zcGFjZSA9IG8uc3BhY2UgfHwgM1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm5ldmVybG9jayA9IHRydWVcclxuICAgICAgICB0aGlzLnJlcyA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlcy5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW11cclxuXHJcbiAgICAgICAgbGV0IHNlbCwgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBzZWwgPSBmYWxzZVxyXG4gICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbaV0gPT09IHRoaXMudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGFibGUgKSBzZWwgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKVxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uXHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLnN0eWxlLmNvbG9yID0gc2VsID8gY2MudGV4dFNlbGVjdCA6IGNjLnRleHRcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbaV07XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpXSA9IHNlbCA/IDM6MTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYoIHRoaXMudHh0PT09JycgKSB0aGlzLnAgPSAwIFxyXG5cclxuICAgICAgICBpZiggKCFvLnZhbHVlICYmICFvLnZhbHVlcykgfHwgdGhpcy5wID09PSAwICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9ICcnXHJcbiAgICAgICAgfSBcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9uT2ZmKCkge1xyXG5cclxuICAgICAgICB0aGlzLm9uID0gIXRoaXMub247XHJcbiAgICAgICAgdGhpcy5sYWJlbCggdGhpcy5vbiA/IHRoaXMub25OYW1lIDogdGhpcy52YWx1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICBcdGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gLTFcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdICYmIHRoaXMudW5zZWxlY3RhYmxlICkgdGhpcy52YWx1ZSA9ICcnXHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMucmVzXVxyXG4gICAgICAgICAgICBpZiggdGhpcy5vbk5hbWUgIT09IG51bGwgKSB0aGlzLm9uT2ZmKClcclxuICAgICAgICAgICAgdGhpcy5zZW5kKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgXHRyZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMucmVzID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIHRoaXMucmVzIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFx0dXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1vZGUoIG4sIGkgKSApIHIgPSB0cnVlXHJcbiAgICAgICAgICAgIHIgPSB0aGlzLm1vZGUoIG4sIGkgKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgLy9pZighdGhpcy5zKSByZXR1cm4gZmFsc2VcclxuIFxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMuc1xyXG4gICAgICAgIGxldCBpID0gaWQrMlxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiBzW2ldLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbaV0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSAtMVxyXG4gICAgICAgIHRoaXMuY3Vyc29yKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlcygpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICBuID0gbiB8fCAyO1xyXG4gICAgICAgIHRoaXMuY1tuXS50ZXh0Q29udGVudCA9IHN0cmluZ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2hWYWx1ZXMoIG4sIHN0cmluZyApe1xyXG4gICAgICAgIHRoaXMuY1tuKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dID0gc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHkgPSAwLCBuID0gMiApIHtcclxuXHJcbiAgICAgICAgLy9pZih5KSB0aGlzLnNbbl0ubWFyZ2luID0gKCB5ICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuc1tuXS5wYWRkaW5nID0gKCB5ICkgKydweCAwcHgnO1xyXG4gICAgICAgIHRoaXMuY1tuXS5pbm5lckhUTUwgPSBzdHJpbmc7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnNiO1xyXG4gICAgICAgIGxldCBkID0gdGhpcy5zYTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICBsZXQgc3ggPSB0aGlzLmNvbG9ycy5zeCAvL3RoaXMuc3BhY2U7XHJcbiAgICAgICAgLy9sZXQgc2l6ZSA9IE1hdGguZmxvb3IoICggdy0oZGMqKGktMSkpICkgLyBpICk7XHJcbiAgICAgICAgbGV0IHNpemUgPSAoIHctKHN4KihpLTEpKSApIC8gaSBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYncgKXsgXHJcbiAgICAgICAgICAgIHNpemUgPSB0aGlzLmJ3IDwgc2l6ZSA/IHRoaXMuYncgOiBzaXplXHJcbiAgICAgICAgICAgIC8vZCA9IE1hdGguZmxvb3IoKHRoaXMudy0oIChzaXplICogaSkgKyAoZGMgKiAoaS0xKSkgKSkqMC41KVxyXG4gICAgICAgICAgICBkID0gKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKHN4ICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgXHQvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCBkICsgKCBzaXplICogaSApICsgKCBkYyAqIGkgKSksIHNpemUgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggZCArICggc2l6ZSAqIGkgKSArICggc3ggKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgXHR0aGlzLnRtcFtpXVsyXSA9IHRoaXMudG1wW2ldWzBdICsgdGhpcy50bXBbaV1bMV07XHJcblxyXG4gICAgICAgICAgICBzW2krMl0ubGVmdCA9IHRoaXMudG1wW2ldWzBdICsgJ3B4J1xyXG4gICAgICAgICAgICBzW2krMl0ud2lkdGggPSB0aGlzLnRtcFtpXVsxXSArICdweCdcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENpcmN1bGFyIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMFxyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGVcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubWludyA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudHdvUGkgPSBUb29scy5Ud29QSVxyXG4gICAgICAgIHRoaXMucGk5MCA9IFRvb2xzLnBpOTBcclxuXHJcbiAgICAgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKVxyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTBcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMFxyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDBcclxuICAgICAgICB0aGlzLmNtb2RlID0gMFxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApXHJcblxyXG4gICAgICAgIC8vIHN2Z1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Q2lyY3VsYXIoKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxIClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5kaWFtKycgJyt0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIGxldCBjb2xvclxyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gZG93blxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDApO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLm1vZGVsID4gMCA/IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIGNjLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIGNjLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKSA6IGNjLnRleHRPdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBcclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdjaXJjdWxhcic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgwKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLm9sZHIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygnb3ZlcicpXHJcblxyXG4gICAgICAgIGxldCBvZmYgPSB0aGlzLm9mZnNldDtcclxuICAgICAgICBvZmYueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICBvZmYueSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gb2ZmLmFuZ2xlKCkgLSB0aGlzLnBpOTA7XHJcbiAgICAgICAgdGhpcy5yID0gKCgodGhpcy5yJXRoaXMudHdvUGkpK3RoaXMudHdvUGkpJXRoaXMudHdvUGkpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5vbGRyICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgbGV0IGRpZiA9IHRoaXMuciAtIHRoaXMub2xkcjtcclxuICAgICAgICAgICAgdGhpcy5yID0gTWF0aC5hYnMoZGlmKSA+IE1hdGguUEkgPyB0aGlzLm9sZHIgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgICAgICBpZiggZGlmID4gNiApIHRoaXMuciA9IDA7XHJcbiAgICAgICAgICAgIGlmKCBkaWYgPCAtNiApIHRoaXMuciA9IHRoaXMudHdvUGk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHN0ZXBzID0gMSAvIHRoaXMudHdvUGk7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5yICogc3RlcHM7XHJcblxyXG4gICAgICAgIGxldCBuID0gKCAoIHRoaXMucmFuZ2UgKiB2YWx1ZSApICsgdGhpcy5taW4gKSAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgICBpZihuID49IHRoaXMuc3RlcCB8fCBuIDw9IHRoaXMuc3RlcCl7IFxyXG4gICAgICAgICAgICBuID0gfn4gKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdjaXJjdWxhcicgKSB7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIHYgPiB0aGlzLm1heCApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5taW4gOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggdiA8IHRoaXMubWluICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSggdiApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtYWtlUGF0aCAoKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gNDA7XHJcbiAgICAgICAgbGV0IGQgPSAyNDtcclxuICAgICAgICBsZXQgYSA9IHRoaXMucGVyY2VudCAqIHRoaXMudHdvUGkgLSAwLjAwMTtcclxuICAgICAgICBsZXQgeDIgPSAociArIHIgKiBNYXRoLnNpbihhKSkgKyBkO1xyXG4gICAgICAgIGxldCB5MiA9IChyIC0gciAqIE1hdGguY29zKGEpKSArIGQ7XHJcbiAgICAgICAgbGV0IGJpZyA9IGEgPiBNYXRoLlBJID8gMSA6IDA7XHJcbiAgICAgICAgcmV0dXJuIFwiTSBcIiArIChyK2QpICsgXCIsXCIgKyBkICsgXCIgQSBcIiArIHIgKyBcIixcIiArIHIgKyBcIiAwIFwiICsgYmlnICsgXCIgMSBcIiArIHgyICsgXCIsXCIgKyB5MjtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gKCB0aGlzLnZhbHVlIC0gdGhpcy5taW4gKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxICk7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xvciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuXHQgICAgLy90aGlzLmF1dG9IZWlnaHQgPSB0cnVlO1xyXG5cclxuXHQgICAgdGhpcy5jdHlwZSA9IG8uY3R5cGUgfHwgJ2hleCc7XHJcblxyXG5cdCAgICB0aGlzLndmaXhlID0gMjU2O1xyXG5cclxuXHQgICAgdGhpcy5jdyA9IHRoaXMuc2IgPiAyNTYgPyAyNTYgOiB0aGlzLnNiO1xyXG5cdCAgICBpZihvLmN3ICE9IHVuZGVmaW5lZCApIHRoaXMuY3cgPSBvLmN3O1xyXG5cclxuXHJcblxyXG5cdCAgICAvLyBjb2xvciB1cCBvciBkb3duXHJcblx0ICAgIHRoaXMuc2lkZSA9IG8uc2lkZSB8fCAnZG93bic7XHJcblx0ICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcblx0ICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMuZGVjYWwgPSBuZXcgVjIoKTtcclxuXHQgICAgdGhpcy5wcCA9IG5ldyBWMigpO1xyXG5cclxuXHQgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcblx0ICAgLy8gdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5taWRkbGUgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7JyArICdib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OyB0ZXh0LXNoYWRvdzpub25lOyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOycgKVxyXG5cclxuXHQgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCBgJHt0aGlzLmNzcy50eHR9ICR7dGhpcy5jc3MubWlkZGxlfSB0b3A6MXB4OyBoZWlnaHQ6JHt0aGlzLmgtMn1weDsgYm9yZGVyLXJhZGl1czoke3RoaXMucmFkaXVzfXB4OyB0ZXh0LXNoYWRvdzpub25lOyBib3JkZXI6JHtjYy5ib3JkZXJTaXplfXB4IHNvbGlkICR7Y2MuYm9yZGVyfTtgIClcclxuXHQgICAgLy90aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG5cdCAgICAvL3RoaXMuc1syXS50ZXh0U2hhZG93ID0gJ25vbmUnXHJcblxyXG5cdCAgICAvKmlmKCB0aGlzLnVwICl7XHJcblx0ICAgICAgICB0aGlzLnNbMl0udG9wID0gJ2F1dG8nO1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLmJvdHRvbSA9ICcycHgnO1xyXG5cdCAgICB9Ki9cclxuXHJcblx0ICAgIC8vdGhpcy5jWzBdLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG5cdCAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcblx0ICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Q29sb3JSaW5nKClcclxuXHQgICAgdGhpcy5jWzNdLnN0eWxlLnZpc2liaWxpdHkgID0gJ2hpZGRlbidcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gbnVsbFxyXG5cdCAgICB0aGlzLnZhbHVlID0gJyNmZmZmZmYnXHJcblx0ICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuXHQgICAgICAgIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgKSB0aGlzLnZhbHVlID0gVG9vbHMucmdiVG9IZXgoIG8udmFsdWUgKVxyXG5cdCAgICAgICAgZWxzZSBpZighaXNOYU4oby52YWx1ZSkpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIG8udmFsdWUgKVxyXG5cdCAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cdCAgICB9XHJcblxyXG5cdCAgICB0aGlzLmJjb2xvciA9IG51bGxcclxuXHQgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG5cdCAgICB0aGlzLmZpc3REb3duID0gZmFsc2VcclxuXHJcblx0ICAgIHRoaXMubm90ZXh0ID0gby5ub3RleHQgfHwgZmFsc2VcclxuXHJcblx0ICAgIHRoaXMudHIgPSA5OFxyXG5cdCAgICB0aGlzLnRzbCA9IE1hdGguc3FydCgzKSAqIHRoaXMudHJcclxuXHJcblx0ICAgIHRoaXMuaHVlID0gMFxyXG5cdCAgICB0aGlzLmQgPSAyNTZcclxuXHJcblx0ICAgIHRoaXMuaW5pdCgpXHJcblxyXG5cdCAgICB0aGlzLnNldENvbG9yKCB0aGlzLnZhbHVlIClcclxuXHJcblx0ICAgIGlmKCBvLm9wZW4gIT09IHVuZGVmaW5lZCApIHRoaXMub3BlbigpXHJcblxyXG5cdH1cclxuXHJcblx0dGVzdFpvbmUgKCBteCwgbXkgKSB7XHJcblxyXG5cdFx0bGV0IGwgPSB0aGlzLmxvY2FsXHJcblx0XHRpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG5cdFx0aWYoIHRoaXMudXAgJiYgdGhpcy5pc09wZW4gKXtcclxuXHJcblx0XHRcdGlmKCBsLnkgPiB0aGlzLndmaXhlICkgcmV0dXJuICd0aXRsZSdcclxuXHRcdCAgICBlbHNlIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdGlmKCBsLnkgPCB0aGlzLmJhc2VIKzIgKSByZXR1cm4gJ3RpdGxlJ1xyXG5cdCAgICBcdGVsc2UgaWYoIHRoaXMuaXNPcGVuICkgcmV0dXJuICdjb2xvcidcclxuXHJcblx0XHR9XHJcblxyXG4gICAgfVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRtb3VzZXVwICggZSApIHtcclxuXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblx0ICAgIHRoaXMuZCA9IDI1NjtcclxuXHJcblx0fVxyXG5cclxuXHRtb3VzZWRvd24gKCBlICkge1xyXG5cclxuXHJcblx0XHRsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUuY2xpZW50WCwgZS5jbGllbnRZICk7XHJcblxyXG5cclxuXHRcdC8vaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cdFx0aWYobmFtZSA9PT0gJ3RpdGxlJyl7XHJcblx0XHRcdGlmKCAhdGhpcy5pc09wZW4gKSB0aGlzLm9wZW4oKTtcclxuXHQgICAgICAgIGVsc2UgdGhpcy5jbG9zZSgpO1xyXG5cdCAgICAgICAgcmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdFx0XHR0aGlzLmlzRG93biA9IHRydWU7XHJcblx0XHRcdHRoaXMuZmlzdERvd24gPSB0cnVlXHJcblx0XHRcdHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuXHQgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHQgICAgbGV0IG9mZiwgZCwgaHVlLCBzYXQsIGx1bSwgcmFkLCB4LCB5LCByciwgVCA9IFRvb2xzO1xyXG5cclxuXHQgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKSB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG5cclxuXHQgICAgaWYoIG5hbWUgPT09ICdjb2xvcicgKXtcclxuXHJcblx0ICAgIFx0b2ZmID0gdGhpcy5vZmZzZXQ7XHJcblx0XHQgICAgb2ZmLnggPSBlLmNsaWVudFggLSAoIHRoaXMuem9uZS54ICsgdGhpcy5kZWNhbC54ICsgdGhpcy5taWQgKTtcclxuXHRcdCAgICBvZmYueSA9IGUuY2xpZW50WSAtICggdGhpcy56b25lLnkgKyB0aGlzLmRlY2FsLnkgKyB0aGlzLm1pZCApIC0gdGhpcy55dG9wO1xyXG5cdFx0XHRkID0gb2ZmLmxlbmd0aCgpICogdGhpcy5yYXRpbztcclxuXHRcdFx0cnIgPSBvZmYuYW5nbGUoKTtcclxuXHRcdFx0aWYocnIgPCAwKSByciArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblxyXG5cdCAgICBcdGlmICggZCA8IDEyOCApIHRoaXMuY3Vyc29yKCdjcm9zc2hhaXInKTtcclxuXHQgICAgXHRlbHNlIGlmKCAhdGhpcy5pc0Rvd24gKSB0aGlzLmN1cnNvcigpXHJcblxyXG5cdCAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG5cclxuXHRcdFx0ICAgIGlmKCB0aGlzLmZpc3REb3duICl7XHJcblx0XHRcdCAgICBcdHRoaXMuZCA9IGQ7XHJcblx0XHRcdCAgICBcdHRoaXMuZmlzdERvd24gPSBmYWxzZTtcclxuXHRcdFx0ICAgIH1cclxuXHJcblx0XHRcdCAgICBpZiAoIHRoaXMuZCA8IDEyOCApIHtcclxuXHJcblx0XHRcdFx0ICAgIGlmICggdGhpcy5kID4gdGhpcy50ciApIHsgLy8gb3V0c2lkZSBodWVcclxuXHJcblx0XHRcdFx0ICAgICAgICBodWUgPSAoIHJyICsgVC5waTkwICkgLyBULlR3b1BJO1xyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5odWUgPSAoaHVlICsgMSkgJSAxO1xyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5zZXRIU0woWyhodWUgKyAxKSAlIDEsIHRoaXMuaHNsWzFdLCB0aGlzLmhzbFsyXV0pO1xyXG5cclxuXHRcdFx0XHQgICAgfSBlbHNlIHsgLy8gdHJpYW5nbGVcclxuXHJcblx0XHRcdFx0ICAgIFx0eCA9IG9mZi54ICogdGhpcy5yYXRpbztcclxuXHRcdFx0XHQgICAgXHR5ID0gb2ZmLnkgKiB0aGlzLnJhdGlvO1xyXG5cclxuXHRcdFx0XHQgICAgXHRsZXQgcnIgPSAodGhpcy5odWUgKiBULlR3b1BJKSArIFQuUEk7XHJcblx0XHRcdFx0ICAgIFx0aWYocnIgPCAwKSByciArPSAyICogVC5QSTtcclxuXHJcblx0XHRcdFx0ICAgIFx0cmFkID0gTWF0aC5hdGFuMigteSwgeCk7XHJcblx0XHRcdFx0ICAgIFx0aWYocmFkIDwgMCkgcmFkICs9IDIgKiBULlBJO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHQgICAgXHRsZXQgcmFkMCA9ICggcmFkICsgVC5waTkwICsgVC5Ud29QSSArIHJyICkgJSAoVC5Ud29QSSksXHJcblx0XHRcdFx0ICAgIFx0cmFkMSA9IHJhZDAgJSAoKDIvMykgKiBULlBJKSAtIChULnBpNjApLFxyXG5cdFx0XHRcdCAgICBcdGEgICAgPSAwLjUgKiB0aGlzLnRyLFxyXG5cdFx0XHRcdCAgICBcdGIgICAgPSBNYXRoLnRhbihyYWQxKSAqIGEsXHJcblx0XHRcdFx0ICAgIFx0ciAgICA9IE1hdGguc3FydCh4KnggKyB5KnkpLFxyXG5cdFx0XHRcdCAgICBcdG1heFIgPSBNYXRoLnNxcnQoYSphICsgYipiKTtcclxuXHJcblx0XHRcdFx0ICAgIFx0aWYoIHIgPiBtYXhSICkge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBkeCA9IE1hdGgudGFuKHJhZDEpICogcjtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcmFkMiA9IE1hdGguYXRhbihkeCAvIG1heFIpO1xyXG5cdFx0XHRcdFx0XHRcdGlmKHJhZDIgPiBULnBpNjApICByYWQyID0gVC5waTYwO1xyXG5cdFx0XHRcdFx0XHQgICAgZWxzZSBpZiggcmFkMiA8IC1ULnBpNjAgKSByYWQyID0gLVQucGk2MDtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0cmFkICs9IHJhZDIgLSByYWQxO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRyYWQwID0gKHJhZCArIFQucGk5MCAgKyBULlR3b1BJICsgcnIpICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdFx0XHRcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKTtcclxuXHRcdFx0XHRcdFx0XHRiID0gTWF0aC50YW4ocmFkMSkgKiBhO1xyXG5cdFx0XHRcdFx0XHRcdHIgPSBtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGx1bSA9ICgoTWF0aC5zaW4ocmFkMCkgKiByKSAvIHRoaXMudHNsKSArIDAuNTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0bGV0IHcgPSAxIC0gKE1hdGguYWJzKGx1bSAtIDAuNSkgKiAyKTtcclxuXHRcdFx0XHRcdFx0c2F0ID0gKCgoTWF0aC5jb3MocmFkMCkgKiByKSArICh0aGlzLnRyIC8gMikpIC8gKDEuNSAqIHRoaXMudHIpKSAvIHc7XHJcblx0XHRcdFx0XHRcdHNhdCA9IFQuY2xhbXAoIHNhdCwgMCwgMSApO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFt0aGlzLmhzbFswXSwgc2F0LCBsdW1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHNldEhlaWdodCAoKSB7XHJcblxyXG5cdFx0dGhpcy5oID0gdGhpcy5pc09wZW4gPyB0aGlzLndmaXhlICsgdGhpcy5iYXNlSCArIDUgOiB0aGlzLmJhc2VIXHJcblx0XHR0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cdFx0dGhpcy56b25lLmggPSB0aGlzLmhcclxuXHJcblx0fVxyXG5cclxuXHRwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuXHRcdGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG5cdCAgICBlbHNlIGlmICggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoIHQgKTtcclxuXHJcblx0fVxyXG5cclxuXHRvcGVuICgpIHtcclxuXHJcblx0XHRzdXBlci5vcGVuKCk7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0XHRpZiggdGhpcy51cCApIHRoaXMuem9uZS55IC09IHRoaXMud2ZpeGUgKyA1O1xyXG5cclxuXHRcdGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHQgICAgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcblx0fVxyXG5cclxuXHRjbG9zZSAoKSB7XHJcblxyXG5cdFx0c3VwZXIuY2xvc2UoKTtcclxuXHJcblx0XHRpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMud2ZpeGUgKyA1O1xyXG5cclxuXHRcdGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcblx0XHR0aGlzLnNldEhlaWdodCgpO1xyXG5cclxuXHQgICAgdGhpcy5zWzNdLnZpc2liaWxpdHkgID0gJ2hpZGRlbic7XHJcblx0ICAgIC8vdGhpcy5zWzNdLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCAtdCApO1xyXG5cclxuXHR9XHJcblxyXG5cdHVwZGF0ZSAoIHVwICkge1xyXG5cclxuXHQgICAgbGV0IGNjID0gVG9vbHMucmdiVG9IZXgoIFRvb2xzLmhzbFRvUmdiKFsgdGhpcy5oc2xbMF0sIDEsIDAuNSBdKSApO1xyXG5cclxuXHQgICAgdGhpcy5tb3ZlTWFya2VycygpO1xyXG5cdCAgICBcclxuXHQgICAgdGhpcy52YWx1ZSA9IHRoaXMuYmNvbG9yO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYywgMiwgMCApO1xyXG5cclxuXHQgICAgdGhpcy5zWzJdLmJhY2tncm91bmQgPSB0aGlzLmJjb2xvcjtcclxuXHQgICAgaWYoIXRoaXMubm90ZXh0KSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSBUb29scy5odG1sVG9IZXgoIHRoaXMuYmNvbG9yICk7XHJcblxyXG5cdCAgICB0aGlzLmludmVydCA9IFRvb2xzLmZpbmREZWVwSW52ZXIoIHRoaXMucmdiICk7XHJcblx0ICAgIHRoaXMuc1syXS5jb2xvciA9IHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnO1xyXG5cclxuXHQgICAgaWYoIXVwKSByZXR1cm47XHJcblxyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2FycmF5JyApIHRoaXMuc2VuZCggdGhpcy5yZ2IgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdyZ2InICkgdGhpcy5zZW5kKCBUb29scy5odG1sUmdiKCB0aGlzLnJnYiApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaGV4JyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFRvSGV4KCB0aGlzLnZhbHVlICkgKTtcclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdodG1sJyApIHRoaXMuc2VuZCgpO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldFZhbHVlICggdiApe1xyXG5cclxuXHRcdGlmKCB2IGluc3RhbmNlb2YgQXJyYXkgKSB0aGlzLnZhbHVlID0gVG9vbHMucmdiVG9IZXgoIHYgKTtcclxuICAgICAgICBlbHNlIGlmKCFpc05hTih2KSkgdGhpcy52YWx1ZSA9IFRvb2xzLmhleFRvSHRtbCggdiApO1xyXG4gICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IHY7XHJcblxyXG5cdFx0dGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRDb2xvciAoIGNvbG9yICkge1xyXG5cclxuXHQgICAgbGV0IHVucGFjayA9IFRvb2xzLnVucGFjayhjb2xvcik7XHJcblx0ICAgIGlmICh0aGlzLmJjb2xvciAhPT0gY29sb3IgJiYgdW5wYWNrKSB7XHJcblxyXG5cdCAgICAgICAgdGhpcy5iY29sb3IgPSBjb2xvclxyXG5cdCAgICAgICAgdGhpcy5yZ2IgPSB1bnBhY2tcclxuXHQgICAgICAgIHRoaXMuaHNsID0gVG9vbHMucmdiVG9Ic2woIHRoaXMucmdiIClcclxuXHJcblx0ICAgICAgICB0aGlzLmh1ZSA9IHRoaXMuaHNsWzBdO1xyXG5cclxuXHQgICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblx0ICAgIH1cclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0SFNMICggaHNsICkge1xyXG5cclxuXHQgICAgdGhpcy5oc2wgPSBoc2w7XHJcblx0ICAgIHRoaXMucmdiID0gVG9vbHMuaHNsVG9SZ2IoIGhzbCApO1xyXG5cdCAgICB0aGlzLmJjb2xvciA9IFRvb2xzLnJnYlRvSGV4KCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cdCAgICByZXR1cm4gdGhpcztcclxuXHJcblx0fVxyXG5cclxuXHRtb3ZlTWFya2VycyAoKSB7XHJcblxyXG5cdFx0bGV0IHAgPSB0aGlzLnBwXHJcblx0XHRsZXQgVCA9IFRvb2xzXHJcblxyXG5cdCAgICBsZXQgYzEgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHQgICAgbGV0IGEgPSB0aGlzLmhzbFswXSAqIFQuVHdvUEk7XHJcblx0ICAgIGxldCB0aGlyZCA9ICgyLzMpICogVC5QSTtcclxuXHQgICAgbGV0IHIgPSB0aGlzLnRyO1xyXG5cdCAgICBsZXQgaCA9IHRoaXMuaHNsWzBdO1xyXG5cdCAgICBsZXQgcyA9IHRoaXMuaHNsWzFdO1xyXG5cdCAgICBsZXQgbCA9IHRoaXMuaHNsWzJdO1xyXG5cclxuXHQgICAgbGV0IGFuZ2xlID0gKCBhIC0gVC5waTkwICkgKiBULnRvZGVnO1xyXG5cclxuXHQgICAgaCA9IC0gYSArIFQucGk5MDtcclxuXHJcblx0XHRsZXQgaHggPSBNYXRoLmNvcyhoKSAqIHI7XHJcblx0XHRsZXQgaHkgPSAtTWF0aC5zaW4oaCkgKiByO1xyXG5cdFx0bGV0IHN4ID0gTWF0aC5jb3MoaCAtIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgc3kgPSAtTWF0aC5zaW4oaCAtIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnggPSBNYXRoLmNvcyhoICsgdGhpcmQpICogcjtcclxuXHRcdGxldCB2eSA9IC1NYXRoLnNpbihoICsgdGhpcmQpICogcjtcclxuXHRcdGxldCBteCA9IChzeCArIHZ4KSAvIDIsIG15ID0gKHN5ICsgdnkpIC8gMjtcclxuXHRcdGEgID0gKDEgLSAyICogTWF0aC5hYnMobCAtIC41KSkgKiBzO1xyXG5cdFx0bGV0IHggPSBzeCArICh2eCAtIHN4KSAqIGwgKyAoaHggLSBteCkgKiBhO1xyXG5cdFx0bGV0IHkgPSBzeSArICh2eSAtIHN5KSAqIGwgKyAoaHkgLSBteSkgKiBhO1xyXG5cclxuXHQgICAgcC5zZXQoIHgsIHkgKS5hZGRTY2FsYXIoMTI4KTtcclxuXHJcblx0ICAgIC8vbGV0IGZmID0gKDEtbCkqMjU1O1xyXG5cdCAgICAvLyB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYignK2ZmKycsJytmZisnLCcrZmYrJyknLCAzICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndHJhbnNmb3JtJywgJ3JvdGF0ZSgnK2FuZ2xlKycgKScsIDIgKTtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHAueCwgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCBwLnksIDMgKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJywgMiwgMyApO1xyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLHRoaXMuYmNvbG9yLCAzICk7XHJcblxyXG5cdH1cclxuXHJcblx0clNpemUgKCkge1xyXG5cclxuXHQgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cdCAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuXHQgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG5cdCAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblx0ICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG5cclxuXHQgICAgLy9jb25zb2xlLmxvZyh0aGlzLnNiKVxyXG5cclxuXHQgICAgdGhpcy5jdyA9IHRoaXMuc2IgPiAyNTYgPyAyNTYgOiB0aGlzLnNiO1xyXG5cclxuXHJcblxyXG5cdCAgICB0aGlzLnJTaXplQ29sb3IoIHRoaXMuY3cgKTtcclxuXHJcblx0ICAgIHRoaXMuZGVjYWwueCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIHRoaXMud2ZpeGUpICogMC41KTtcclxuXHQgICAgLy9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBcclxuXHR9XHJcblxyXG5cdHJTaXplQ29sb3IgKCB3ICkge1xyXG5cclxuXHJcblx0XHRpZiggdyA9PT0gdGhpcy53Zml4ZSApIHJldHVybjtcclxuXHJcblxyXG5cclxuXHRcdHRoaXMud2ZpeGUgPSB3O1xyXG5cclxuXHJcblxyXG5cdFx0bGV0IHMgPSB0aGlzLnM7XHJcblxyXG5cdFx0Ly90aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIHRoaXMuZGVjYWwueSA9IHRoaXMuc2lkZSA9PT0gJ3VwJyA/IDIgOiB0aGlzLmJhc2VIICsgMlxyXG5cdCAgICB0aGlzLm1pZCA9IE1hdGguZmxvb3IoIHRoaXMud2ZpeGUgKiAwLjUgKVxyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcrIHRoaXMud2ZpeGUgKyAnICcrIHRoaXMud2ZpeGUgKVxyXG5cdCAgICBzWzNdLndpZHRoID0gdGhpcy53Zml4ZSArICdweCdcclxuXHQgICAgc1szXS5oZWlnaHQgPSB0aGlzLndmaXhlICsgJ3B4J1xyXG4gICAgXHQvL3NbM10ubGVmdCA9IHRoaXMuZGVjYWwueCArICdweCc7XHJcblx0ICAgIHNbM10udG9wID0gdGhpcy5kZWNhbC55ICsgJ3B4J1xyXG5cclxuXHQgICAgdGhpcy5yYXRpbyA9IDI1NiAvIHRoaXMud2ZpeGVcclxuXHQgICAgdGhpcy5zcXVhcmUgPSAxIC8gKDYwKih0aGlzLndmaXhlLzI1NikpXHJcblx0ICAgIHRoaXMuc2V0SGVpZ2h0KClcclxuXHJcblx0fVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZwcyBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLnJvdW5kID0gTWF0aC5yb3VuZDtcclxuXHJcbiAgICAgICAgLy90aGlzLmF1dG9IZWlnaHQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG4gICAgICAgIHRoaXMuaHBsdXMgPSBvLmhwbHVzIHx8IDUwO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IG8ucmVzIHx8IDQwO1xyXG4gICAgICAgIHRoaXMubCA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMDtcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5jdXN0b20gPSBvLmN1c3RvbSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm5hbWVzID0gby5uYW1lcyB8fCBbJ0ZQUycsICdNUyddO1xyXG4gICAgICAgIGxldCBjYyA9IG8uY2MgfHwgWycyMjAsMjIwLDIyMCcsICcyNTUsMjU1LDAnXTtcclxuXHJcbiAgICAgICAvLyB0aGlzLmRpdmlkID0gWyAxMDAsIDEwMCwgMTAwIF07XHJcbiAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgIHRoaXMuYWRkaW5nID0gby5hZGRpbmcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSBvLnJhbmdlIHx8IFsgMTY1LCAxMDAsIDEwMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFscGhhID0gby5hbHBoYSB8fCAwLjI1O1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucG9pbnRzID0gW107XHJcbiAgICAgICAgdGhpcy50ZXh0RGlzcGxheSA9IFtdO1xyXG5cclxuICAgICAgICBpZighdGhpcy5jdXN0b20pe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5ub3cgPSBSb290cy5nZXRUaW1lKClcclxuICAgICAgICAgICAgdGhpcy5zdGFydFRpbWUgPSAwOy8vdGhpcy5ub3coKVxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gMDsvL3RoaXMuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lcyA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1zID0gMDtcclxuICAgICAgICAgICAgdGhpcy5mcHMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1lbSA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubW0gPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc01lbSA9ICggc2VsZi5wZXJmb3JtYW5jZSAmJiBzZWxmLnBlcmZvcm1hbmNlLm1lbW9yeSApID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAvLyB0aGlzLmRpdmlkID0gWyAxMDAsIDIwMCwgMSBdO1xyXG4gICAgICAgICAgIC8vIHRoaXMubXVsdHkgPSBbIDMwLCAzMCwgMzAgXTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzTWVtICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5uYW1lcy5wdXNoKCdNRU0nKTtcclxuICAgICAgICAgICAgICAgIGNjLnB1c2goJzAsMjU1LDI1NScpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy50eHQgPSBvLm5hbWUgfHwgJ0ZwcydcclxuXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGNvbnN0IGNjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0aGlzLnR4dDtcclxuICAgICAgICAvL3RoaXMuY1sxXS5pbm5lckhUTUwgPSAnJiMxNjA7JyArIHRoaXMudHh0XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgbGV0IHBhbmVsQ3NzID0gJ2Rpc3BsYXk6bm9uZTsgbGVmdDoxMHB4OyB0b3A6JysgdGhpcy5oICsgJ3B4OyBoZWlnaHQ6JysodGhpcy5ocGx1cyAtIDgpKydweDsgYm94LXNpemluZzpib3JkZXItYm94OyBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7IGJvcmRlcjoxcHggc29saWQgJysgY2NjLmJvcmRlciArJzsnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5yYWRpdXMgIT09IDAgKSBwYW5lbENzcyArPSAnYm9yZGVyLXJhZGl1czonICsgdGhpcy5yYWRpdXMrJ3B4Oyc7IFxyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArIHBhbmVsQ3NzICwge30gKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgndmlld0JveCcsICcwIDAgJyt0aGlzLnJlcysnIDUwJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzEwMCUnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnNldEF0dHJpYnV0ZSgncHJlc2VydmVBc3BlY3RSYXRpbycsICdub25lJyApO1xyXG5cclxuXHJcbiAgICAgICAgLy90aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoMjU1LDI1NSwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6JyNGRjAnLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgLy90aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoMCwyNTUsMjU1LDAuMyknLCAnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6JyMwRkYnLCAndmVjdG9yLWVmZmVjdCc6J25vbi1zY2FsaW5nLXN0cm9rZScgfSwgdGhpcy5jWzJdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gYXJyb3dcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuICAgICAgICAvL3RoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxMHB4OyBoZWlnaHQ6MTBweDsgbGVmdDo0cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmFycm93LCBmaWxsOnRoaXMuY29sb3JzLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgLy8gcmVzdWx0IHRlc3RcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxMHB4OyB0b3A6JysodGhpcy5oKzIpICsncHg7IGRpc3BsYXk6bm9uZTsgd2lkdGg6MTAwJTsgdGV4dC1hbGlnbjpjZW50ZXI7JyApO1xyXG5cclxuICAgICAgICAvLyBib3R0b20gbGluZVxyXG4gICAgICAgIGlmKCBvLmJvdHRvbUxpbmUgKSB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGJvdHRvbTowcHg7IGhlaWdodDoxcHg7IGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsnKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1Nob3cgPSBmYWxzZTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgLy9zWzFdLm1hcmdpbkxlZnQgPSAnMTBweCc7XHJcbiAgICAgICAgc1sxXS5saW5lSGVpZ2h0ID0gdGhpcy5oLTQ7XHJcbiAgICAgICAgc1sxXS5jb2xvciA9IGNjYy50ZXh0O1xyXG4gICAgICAgIC8vc1sxXS5wYWRkaW5nTGVmdCA9ICcxOHB4JztcclxuICAgICAgICAvL3NbMV0uZm9udFdlaWdodCA9ICdib2xkJztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgIHNbMF0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4JztcclxuICAgICAgICBpZiggdGhpcy5jb2xvcnMuZ2JvcmRlciE9PSdub25lJykgc1swXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyBjY2MuZ2JvcmRlcjtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGogPSAwO1xyXG5cclxuICAgICAgICBmb3IoIGo9MDsgajx0aGlzLm5hbWVzLmxlbmd0aDsgaisrICl7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmFzZSA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgaSA9IHRoaXMucmVzKzE7XHJcbiAgICAgICAgICAgIHdoaWxlKCBpLS0gKSBiYXNlLnB1c2goNTApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yYW5nZVtqXSA9ICggMSAvIHRoaXMucmFuZ2Vbal0gKSAqIDQ5O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5wb2ludHMucHVzaCggYmFzZSApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKDApO1xyXG4gICAgICAgICAgIC8vICB0aGlzLmRvbSggJ3BhdGgnLCBudWxsLCB7IGZpbGw6J3JnYmEoJytjY1tqXSsnLDAuNSknLCAnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3JnYmEoJytjY1tqXSsnLDEpJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICB0aGlzLnRleHREaXNwbGF5LnB1c2goIFwiPHNwYW4gc3R5bGU9J2NvbG9yOnJnYihcIitjY1tqXStcIiknPiBcIiArIHRoaXMubmFtZXNbal0gK1wiIFwiKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBqID0gdGhpcy5uYW1lcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoai0tKXtcclxuICAgICAgICAgICAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywnK3RoaXMuYWxwaGErJyknLCAnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3JnYmEoJytjY1tqXSsnLDEpJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICAvL2lmKCB0aGlzLmlzU2hvdyApIHRoaXMuc2hvdygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2hvdyApIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICBlbHNlIHRoaXMub3BlbigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgLyptb2RlOiBmdW5jdGlvbiAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgc1sxXS5jb2xvciA9ICcjRkZGJztcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSBVSUwuU0VMRUNURE9XTjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0sKi9cclxuXHJcbiAgICB0aWNrICggdiApIHtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB2O1xyXG4gICAgICAgIGlmKCAhdGhpcy5pc1Nob3cgKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgICB0aGlzLnVwVGV4dCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGF0aCAoIHBvaW50ICkge1xyXG5cclxuICAgICAgICBsZXQgcCA9ICcnO1xyXG4gICAgICAgIHAgKz0gJ00gJyArICgtMSkgKyAnICcgKyA1MDtcclxuICAgICAgICBmb3IgKCBsZXQgaSA9IDA7IGkgPCB0aGlzLnJlcyArIDE7IGkgKysgKSB7IHAgKz0gJyBMICcgKyBpICsgJyAnICsgcG9pbnRbaV07IH1cclxuICAgICAgICBwICs9ICcgTCAnICsgKHRoaXMucmVzICsgMSkgKyAnICcgKyA1MDtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBUZXh0ICggdmFsICkge1xyXG5cclxuICAgICAgICBsZXQgdiA9IHZhbCB8fCB0aGlzLnZhbHVlcywgdCA9ICcnO1xyXG4gICAgICAgIGZvciggbGV0IGo9MCwgbG5nID10aGlzLm5hbWVzLmxlbmd0aDsgajxsbmc7IGorKyApIHQgKz0gdGhpcy50ZXh0RGlzcGxheVtqXSArICh2W2pdKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSArICc8L3NwYW4+JztcclxuICAgICAgICB0aGlzLmNbNF0uaW5uZXJIVE1MID0gdDtcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdHcmFwaCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzdmcgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLm5hbWVzLmxlbmd0aCwgdiwgb2xkID0gMCwgbiA9IDA7XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYWRkaW5nICkgdiA9ICh0aGlzLnZhbHVlc1tuXStvbGQpICogdGhpcy5yYW5nZVtuXTtcclxuICAgICAgICAgICAgZWxzZSAgdiA9ICh0aGlzLnZhbHVlc1tuXSAqIHRoaXMucmFuZ2Vbbl0pO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50c1tuXS5zaGlmdCgpO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50c1tuXS5wdXNoKCA1MCAtIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHN2ZywgJ2QnLCB0aGlzLm1ha2VQYXRoKCB0aGlzLnBvaW50c1tuXSApLCBpKzEgKTtcclxuICAgICAgICAgICAgb2xkICs9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICBuKys7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbiAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmhwbHVzICsgdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCB0aGlzLmhwbHVzICk7fVxyXG4gICAgICAgIGVsc2UgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0aGlzLmhwbHVzICk7XHJcblxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKydweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnYmxvY2snOyBcclxuICAgICAgICB0aGlzLnNbNF0uZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgdGhpcy5pc1Nob3cgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgUm9vdHMuYWRkTGlzdGVuKCB0aGlzICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMSApO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5ncm91cCAhPT0gbnVsbCApeyB0aGlzLmdyb3VwLmNhbGMoIC10aGlzLmhwbHVzICk7fVxyXG4gICAgICAgIGVsc2UgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCAtdGhpcy5ocGx1cyApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKydweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy5pc1Nob3cgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLnJlbW92ZUxpc3RlbiggdGhpcyApO1xyXG5cclxuICAgICAgICB0aGlzLmNbNF0uaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLy8vIEFVVE8gRlBTIC8vLy8vL1xyXG5cclxuICAgIGJlZ2luICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSB0aGlzLm5vdygpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGVuZCAoKSB7XHJcblxyXG4gICAgICAgIGxldCB0aW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICB0aGlzLm1zID0gdGltZSAtIHRoaXMuc3RhcnRUaW1lO1xyXG5cclxuICAgICAgICB0aGlzLmZyYW1lcyArKztcclxuXHJcbiAgICAgICAgaWYgKCB0aW1lID4gdGhpcy5wcmV2VGltZSArIDEwMDAgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZwcyA9IHRoaXMucm91bmQoICggdGhpcy5mcmFtZXMgKiAxMDAwICkgLyAoIHRpbWUgLSB0aGlzLnByZXZUaW1lICkgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJldlRpbWUgPSB0aW1lO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lcyA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMuaXNNZW0gKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGhlYXBTaXplID0gcGVyZm9ybWFuY2UubWVtb3J5LnVzZWRKU0hlYXBTaXplO1xyXG4gICAgICAgICAgICAgICAgbGV0IGhlYXBTaXplTGltaXQgPSBwZXJmb3JtYW5jZS5tZW1vcnkuanNIZWFwU2l6ZUxpbWl0O1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubWVtID0gdGhpcy5yb3VuZCggaGVhcFNpemUgKiAwLjAwMDAwMDk1NCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tbSA9IGhlYXBTaXplIC8gaGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFsgdGhpcy5mcHMsIHRoaXMubXMgLCB0aGlzLm1tIF07XHJcblxyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoIFsgdGhpcy5mcHMsIHRoaXMubXMsIHRoaXMubWVtIF0gKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRpbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxpc3RlbmluZyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSB0aGlzLnN0YXJ0VGltZSA9IHRoaXMuZW5kKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMudztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKCB0aGlzLnNhICsgdGhpcy5zYiAtIDYgKSArICdweCdcclxuXHJcbiAgICAgICAgc1swXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbMV0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzJdLmxlZnQgPSAxMCArICdweCc7XHJcbiAgICAgICAgc1syXS53aWR0aCA9ICh3LTIwKSArICdweCc7XHJcbiAgICAgICAgc1s0XS53aWR0aCA9ICh3LTIwKSArICdweCc7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcbiAgICBcclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgR3JhcGggZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICBcdHRoaXMudmFsdWUgPSBvLnZhbHVlICE9PSB1bmRlZmluZWQgPyBvLnZhbHVlIDogWzAsMCwwXTtcclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uICE9PSB1bmRlZmluZWQgPyBvLnByZWNpc2lvbiA6IDI7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBsaWNhdG9yID0gby5tdWx0aXBsaWNhdG9yIHx8IDE7XHJcbiAgICAgICAgdGhpcy5uZWcgPSBvLm5lZyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5saW5lID0gby5saW5lICE9PSB1bmRlZmluZWQgPyAgby5saW5lIDogdHJ1ZTtcclxuXHJcbiAgICAgICAgLy9pZih0aGlzLm5lZyl0aGlzLm11bHRpcGxpY2F0b3IqPTI7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gby5hdXRvV2lkdGggIT09IHVuZGVmaW5lZCA/IG8uYXV0b1dpZHRoIDogdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCAxMjggKyAxMDtcclxuICAgICAgICB0aGlzLnJoID0gdGhpcy5oIC0gMTA7XHJcbiAgICAgICAgdGhpcy50b3AgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuYXV0b1dpZHRoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvL3RoaXMuY1sxXS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmZjAwMDAnO1xyXG4gICAgICAgICAgICAvL3RoaXMuY1sxXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2ggPSB0aGlzLnJoIC0gMjg7XHJcbiAgICAgICAgdGhpcy5ndyA9IHRoaXMudyAtIDI4O1xyXG5cclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRleHQtYWxpZ246IGp1c3RpZnk7IGNvbHVtbi1jb3VudDonK3RoaXMubG5nKyc7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG5cclxuICAgICAgICAvL2xldCBjb2x1bSA9ICdjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyBjb2x1bW46Jyt0aGlzLmxuZysnOyBicmVhay1pbnNpZGU6IGNvbHVtbjsgdG9wOidcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdkaXNwbGF5OmJsb2NrOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZzowcHggMHB4OyB0b3A6JysodGhpcy5oLTIwKSsncHg7IGxlZnQ6MTRweDsgd2lkdGg6Jyt0aGlzLmd3KydweDsgIGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5kb20oICdzdmcnLCB0aGlzLmNzcy5iYXNpYyAsIHsgdmlld0JveDonMCAwICcrdGhpcy53KycgJyt0aGlzLnJoLCB3aWR0aDp0aGlzLncsIGhlaWdodDp0aGlzLnJoLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOidub25lJyB9ICk7XHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHN2ZywgeyB3aWR0aDp0aGlzLncsIGhlaWdodDp0aGlzLnJoLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5kb20oICdwYXRoJywgJycsIHsgZDonJywgc3Ryb2tlOnRoaXMuY29sb3JzLnRleHQsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOididXR0JyB9LCBzdmcgKTtcclxuICAgICAgICB0aGlzLmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDp0aGlzLmd3KzgsIGhlaWdodDp0aGlzLmdoKzgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSAsIGZpbGw6J25vbmUnfSwgc3ZnICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXcgPSAoKHRoaXMuZ3ctKDQqKHRoaXMubG5nLTEpKSkvdGhpcy5sbmcpO1xyXG4gICAgICAgIGxldCB0ID0gW107XHJcbiAgICAgICAgdGhpcy5jTW9kZSA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnYgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgIFx0dFtpXSA9IFsgMTQgKyAoaSp0aGlzLml3KSArIChpKjQpLCB0aGlzLml3IF07XHJcbiAgICAgICAgXHR0W2ldWzJdID0gdFtpXVswXSArIHRbaV1bMV07XHJcbiAgICAgICAgXHR0aGlzLmNNb2RlW2ldID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm5lZyApIHRoaXMudltpXSA9ICgoMSsodGhpcy52YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcikpKjAuNSk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMudltpXSA9IHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3I7XHJcblxyXG4gICAgICAgIFx0dGhpcy5kb20oICdyZWN0JywgJycsIHsgeDp0W2ldWzBdLCB5OjE0LCB3aWR0aDp0W2ldWzFdLCBoZWlnaHQ6MSwgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCAnZmlsbC1vcGFjaXR5JzowLjMgfSwgc3ZnICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0O1xyXG4gICAgICAgIHRoaXMuY1szXSA9IHN2ZztcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLncpXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLnRvcCA9IDAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5oZWlnaHQgPSAyMCArJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLmxpbmVIZWlnaHQgPSAoMjAtNSkrJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIGZhbHNlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdmFsdWUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5uZWcpIHRoaXMudltpXSA9ICgxICsgdmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpICogMC41O1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudltpXSA9IHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWx1ZVRvSHRtbCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgbj0wLCByID0gJzx0YWJsZSBzdHlsZT1cIndpZHRoOjEwMCU7XCI+PHRyPidcclxuICAgICAgICBsZXQgdyA9IDEwMCAvIHRoaXMubG5nXHJcbiAgICAgICAgbGV0IHN0eWxlID0gJ3dpZHRoOicrIHcgKyclOycvLycgdGV4dC1hbGlnbjpjZW50ZXI7J1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKG49PT10aGlzLmxuZy0xKSByICs9ICc8dGQgc3R5bGU9JytzdHlsZSsnPicgKyB0aGlzLnZhbHVlW25dICsgJzwvdGQ+PC90cj48L3RhYmxlPidcclxuICAgICAgICAgICAgZWxzZSByICs9ICc8dGQgc3R5bGU9JytzdHlsZSsnPicgKyB0aGlzLnZhbHVlW25dICsgJzwvdGQ+J1xyXG4gICAgICAgICAgICBuKytcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5saW5lICkgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLm1ha2VQYXRoKCksIDAgKTtcclxuXHJcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaTx0aGlzLmxuZzsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnaGVpZ2h0JywgdGhpcy52W2ldKnRoaXMuZ2gsIGkrMiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneScsIDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naCksIGkrMiApO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZhbHVlW2ldID0gKCAoKHRoaXMudltpXSoyKS0xKSAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWVbaV0gPSAoICh0aGlzLnZbaV0gKiB0aGlzLm11bHRpcGxpY2F0b3IpICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY1syXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlVG9IdG1sKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLnRtcDtcclxuICAgICAgICBcclxuXHQgICAgaWYoIGwueT50aGlzLnRvcCAmJiBsLnk8dGhpcy5oLTIwICl7XHJcblx0ICAgICAgICB3aGlsZSggaS0tICl7XHJcblx0ICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGk7XHJcblx0ICAgICAgICB9XHJcblx0ICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBuYW1lICkge1xyXG5cclxuICAgIFx0aWYoIG4gPT09IHRoaXMuY01vZGVbbmFtZV0gKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgXHRsZXQgYTtcclxuXHJcbiAgICAgICAgc3dpdGNoKG4pe1xyXG4gICAgICAgICAgICBjYXNlIDA6IGE9MC4zOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiBhPTAuNjsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogYT0xOyBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwtb3BhY2l0eScsIGEsIG5hbWUgKyAyICk7XHJcbiAgICAgICAgdGhpcy5jTW9kZVtuYW1lXSA9IG47XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgIFx0bGV0IG51cCA9IGZhbHNlO1xyXG4gICAgICAgIC8vdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZztcclxuICAgICAgICB3aGlsZShpLS0peyBcclxuICAgICAgICAgICAgaWYoIHRoaXMuY01vZGVbaV0gIT09IDAgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY01vZGVbaV0gPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwtb3BhY2l0eScsIDAuMywgaSArIDIgKTtcclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgcmV0dXJuIHRoaXMucmVzZXQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgIFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgIFx0bGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIFx0aWYoIG5hbWUgPT09ICcnICl7XHJcblxyXG4gICAgICAgICAgICBudXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHsgXHJcblxyXG4gICAgICAgICAgICBudXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMiA6IDEsIG5hbWUgKTtcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5jdXJyZW50ICE9PSAtMSA/ICdtb3ZlJyA6ICdwb2ludGVyJyApO1xyXG4gICAgICAgICAgICBpZih0aGlzLmlzRG93bil7XHJcbiAgICAgICAgICAgIFx0dGhpcy52W25hbWVdID0gdGhpcy5jbGFtcCggMSAtICgoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wIC0gMTAgKSAvIHRoaXMuZ2gpICwgMCwgMSApO1xyXG4gICAgICAgICAgICBcdHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgXHR0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgIFx0bGV0IHAgPSBcIlwiLCBoLCB3LCB3biwgd20sIG93LCBvaFxyXG4gICAgXHQvL2xldCBnID0gdGhpcy5pdyowLjVcclxuXHJcbiAgICBcdGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgIFx0XHRoID0gMTQgKyAodGhpcy5naCAtIHRoaXMudltpXSp0aGlzLmdoKVxyXG4gICAgXHRcdHcgPSAoMTQgKyAoaSp0aGlzLml3KSArIChpKjQpKVxyXG5cclxuICAgIFx0XHR3bSA9IHcgKyB0aGlzLml3KjAuNVxyXG4gICAgXHRcdHduID0gdyArIHRoaXMuaXdcclxuXHJcbiAgICBcdFx0aWYoIGkgPT09IDAgKSBwKz0nTSAnK3crJyAnKyBoICsgJyBUICcgKyB3bSArJyAnKyBoXHJcbiAgICBcdFx0ZWxzZSBwICs9ICcgQyAnICsgb3cgKycgJysgb2ggKyAnLCcgKyB3ICsnICcrIGggKyAnLCcgKyB3bSArJyAnKyBoXHJcbiAgICBcdFx0aWYoIGkgPT09IHRoaXMubG5nLTEgKSBwKz0nIFQgJyArIHduICsnICcrIGhcclxuXHJcbiAgICBcdFx0b3cgPSB3blxyXG4gICAgXHRcdG9oID0gaCBcclxuXHJcbiAgICBcdH1cclxuXHJcbiAgICBcdHJldHVybiBwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgc1sxXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzNdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG5cclxuICAgICAgICBsZXQgZ3cgPSB0aGlzLncgLSAyOFxyXG4gICAgICAgIGxldCBpdyA9ICgoZ3ctKDQqKHRoaXMubG5nLTEpKSkvdGhpcy5sbmcpXHJcbiAgICAgICAgbGV0IHQgPSBbXVxyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gZ3cgKyAncHgnXHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdFtpXSA9IFsgMTQgKyAoaSppdykgKyAoaSo0KSwgaXcgXVxyXG4gICAgICAgICAgICB0W2ldWzJdID0gdFtpXVswXSArIHRbaV1bMV1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IHRcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFbXB0eSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuXHQgICAgby5pc1NwYWNlID0gdHJ1ZVxyXG4gICAgICAgIG8ubWFyZ2luID0gMFxyXG4gICAgICAgIGlmKCFvLmgpIG8uaCA9IDEwXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG4gICAgXHJcbn1cclxuIiwiXHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IEVtcHR5IH0gZnJvbSAnLi9FbXB0eS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgR3JvdXAgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0dyb3VwID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLkFERCA9IG8uYWRkO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9IZWlnaHQgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMudWlzID0gW11cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSAtMVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmRlY2FsID0gby5ncm91cCA/IDggOiAwXHJcbiAgICAgICAgLy90aGlzLmRkID0gby5ncm91cCA/IG8uZ3JvdXAuZGVjYWwgKyA4IDogMFxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIID0gdGhpcy5oXHJcblxyXG4gICAgICAgIHRoaXMuc3BhY2VZID0gbmV3IEVtcHR5KHtoOnRoaXMubWFyZ2lufSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy51c2VGbGV4ID0gdHJ1ZSBcclxuICAgICAgICBsZXQgZmxleGlibGUgPSB0aGlzLnVzZUZsZXggPyAnZGlzcGxheTpmbGV4OyBmbGV4LWZsb3c6IHJvdyB3cmFwOycgOiAnJ1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgZmxleGlibGUgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyAgb3ZlcmZsb3c6aGlkZGVuOyB0b3A6JysodGhpcy5oKSsncHgnKVxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IGxlZnQ6MDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3MuZzEsIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIGxldCBiaCA9IHRoaXMubXRvcCA9PT0gMCA/IHRoaXMubWFyZ2luIDogdGhpcy5tdG9wXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7IGhlaWdodDonKyhiaCsxKSsncHg7IHRvcDonKygodGhpcy5oLTEpKSsncHg7IGJhY2tncm91bmQ6bm9uZTsnKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICB0aGlzLmNbMV0ubmFtZSA9ICdncm91cCdcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0QkcoIG8uYmcgKVxyXG5cclxuICAgICAgICBpZiggby5vcGVuICkgdGhpcy5vcGVuKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0QkcgKCBiZyApIHtcclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuXHJcbiAgICAgICAgaWYoIGJnICE9PSB1bmRlZmluZWQgKSBjYy5ncm91cHMgPSBiZ1xyXG4gICAgICAgIGlmKGNjLmdyb3VwcyA9PT0gJ25vbmUnKSBjYy5ncm91cHMgPSBjYy5iYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgIGNjLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgc1swXS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xyXG4gICAgICAgIHNbMV0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwc1xyXG4gICAgICAgIHNbMl0uYmFja2dyb3VuZCA9IGNjLmdyb3Vwc1xyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLypsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICB0aGlzLnVpc1tpXS5zZXRCRyggJ25vbmUnICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy51aXNbaV0uc2V0QkcoIHRoaXMuY29sb3JzLmJhY2tncm91bmQgKTtcclxuICAgICAgICB9Ki9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgaWYoIGwueSA8IHRoaXMuYmFzZUggKyB0aGlzLm1hcmdpbiApIG5hbWUgPSAndGl0bGUnO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKSBuYW1lID0gJ2NvbnRlbnQnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhuYW1lKVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJUYXJnZXQgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ID09PSAtMSApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5wcm90by5zICl7XHJcbiAgICAgICAgICAgIC8vIGlmIG5vIHMgdGFyZ2V0IGlzIGRlbGV0ZSAhIVxyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8ucmVzZXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBoYW5kbGVFdmVudCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHByb3RvQ2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHN3aXRjaCggbmFtZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnY29udGVudCc6XHJcblxyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKClcclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcblxyXG4gICAgICAgICAgICBpZiggUm9vdHMuaXNNb2JpbGUgJiYgdHlwZSA9PT0gJ21vdXNlZG93bicgKSB0aGlzLmdldE5leHQoIGUsIGNoYW5nZSApXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5wcm90byApeyBcclxuICAgICAgICAgICAgICAgIC8vZS5jbGllbnRZIC09IHRoaXMubWFyZ2luXHJcbiAgICAgICAgICAgICAgICBwcm90b0NoYW5nZSA9IHRoaXMucHJvdG8uaGFuZGxlRXZlbnQoIGUgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggIVJvb3RzLmxvY2sgKSB0aGlzLmdldE5leHQoIGUsIGNoYW5nZSApXHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGl0bGUnOlxyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCB0aGlzLmlzT3BlbiA/ICduLXJlc2l6ZSc6J3MtcmVzaXplJyApO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbW91c2Vkb3duJyApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgaWYoIHByb3RvQ2hhbmdlICkgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TmV4dCAoIGUsIGNoYW5nZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5leHQgPSBSb290cy5maW5kVGFyZ2V0KCB0aGlzLnVpcywgZSApO1xyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gdGhpcy5jdXJyZW50ICl7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuZXh0ICE9PSAtMSApeyBcclxuICAgICAgICAgICAgdGhpcy5wcm90byAgPSB0aGlzLnVpc1sgdGhpcy5jdXJyZW50IF07XHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgXHJcblxyXG4gICAgYWRkKCkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGFyZ3VtZW50cztcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzFdID09PSAnb2JqZWN0JyApeyBcclxuICAgICAgICAgICAgYVsxXS5pc1VJID0gdGhpcy5pc1VJXHJcbiAgICAgICAgICAgIGFbMV0udGFyZ2V0ID0gdGhpcy5jWzJdXHJcbiAgICAgICAgICAgIGFbMV0ubWFpbiA9IHRoaXMubWFpblxyXG4gICAgICAgICAgICBhWzFdLmdyb3VwID0gdGhpc1xyXG4gICAgICAgIH0gZWxzZSBpZiggdHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gJ3N0cmluZycgKXtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbCggYSwgeyBpc1VJOnRydWUsIHRhcmdldDp0aGlzLmNbMl0sIG1haW46dGhpcy5tYWluIH0pO1xyXG4gICAgICAgICAgICBlbHNleyBcclxuICAgICAgICAgICAgICAgIGFbMl0uaXNVSSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBhWzJdLnRhcmdldCA9IHRoaXMuY1syXTtcclxuICAgICAgICAgICAgICAgIGFbMl0ubWFpbiA9IHRoaXMubWFpbjtcclxuICAgICAgICAgICAgICAgIGFbMl0uZ3JvdXAgPSB0aGlzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdSA9IHRoaXMuQURELmFwcGx5KCB0aGlzLCBhIClcclxuXHJcbiAgICAgICAgaWYoIHUuaXNHcm91cCApeyBcclxuICAgICAgICAgICAgLy9vLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgdS5keCA9IDhcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy91LmR4ICs9IDRcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuZGVjYWwpXHJcbiAgICAgICAgLy91LnpvbmUuZCAtPSA4XHJcbiAgICAgICAgUm9vdHMuZm9yY2Vab25lID0gdHJ1ZVxyXG4gICAgICAgIC8vdS5tYXJnaW4gKz0gdGhpcy5tYXJnaW5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyggdS5tYXJnaW4gKVxyXG4gICAgICAgIC8vUm9vdHMubmVlZFJlWm9uZSA9IHRydWVcclxuXHJcbiAgICAgICAgLy9Sb290cy5yZXNpemUoKVxyXG4gICAgICAgICAvL2NvbnNvbGUubG9nKFJvb3RzLm5lZWRSZXNpemUpXHJcblxyXG4gICAgICAgIHRoaXMudWlzLnB1c2goIHUgKVxyXG5cclxuICAgICAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZVxyXG5cclxuICAgICAgICByZXR1cm4gdTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gICAgcmVtb3ZlICggbiApIHtcclxuXHJcbiAgICAgICAgaWYoIG4uZGlzcG9zZSApIG4uZGlzcG9zZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBjbGVhciBhbGwgaW5lciBcclxuXHJcbiAgICBkaXNwb3NlKCkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyKClcclxuICAgICAgICBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoKVxyXG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhcigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5lbXB0eSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGVtcHR5ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aCwgaXRlbTtcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpdGVtID0gdGhpcy51aXMucG9wKClcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnJlbW92ZUNoaWxkKCBpdGVtLmNbMF0gKVxyXG4gICAgICAgICAgICBpdGVtLmNsZWFyKCB0cnVlIClcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy51aXNbaV0uY2xlYXIoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBjbGVhciBvbmUgZWxlbWVudFxyXG5cclxuICAgIGNsZWFyT25lICggbiApIHsgXHJcblxyXG4gICAgICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2YoIG4gKTtcclxuXHJcbiAgICAgICAgaWYgKCBpZCAhPT0gLTEgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsYyggLSAoIHRoaXMudWlzWyBpZCBdLmggKyB0aGlzLm1hcmdpbiApIClcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnJlbW92ZUNoaWxkKCB0aGlzLnVpc1sgaWQgXS5jWzBdIClcclxuICAgICAgICAgICAgdGhpcy51aXMuc3BsaWNlKCBpZCwgMSApXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy51aXMubGVuZ3RoID09PSAwICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgXHJcblxyXG4gICAgb3BlbiAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMiApXHJcbiAgICAgICAgdGhpcy5yU2l6ZUNvbnRlbnQoKVxyXG5cclxuICAgICAgICAvL2xldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvL3NbMl0udG9wID0gKHRoaXMuaC0xKSArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSBjYy5ncm91cHMvLycjMGYwJ1xyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cyl7XHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gJzBweCdcclxuXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJUb3BSaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJMZWZ0ID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlclJpZ2h0ID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG5cclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyVG9wID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlckJvdHRvbSA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkIHJnYmEoMCwwLDAsMCknXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCgpXHJcblxyXG4gICAgICAgIC8vUm9vdHMuaXNMZWF2ZSA9IHRydWVcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZXNpemUgPSB0cnVlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuY2xvc2UoKVxyXG5cclxuICAgICAgICAvL2xldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMuc3Zncy5nMSApXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBcclxuICAgICAgICBzWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICAvL3NbMV0uaGVpZ2h0ID0gKHRoaXMuaC0yKSArICdweCdcclxuICAgICAgICAvL3NbMl0udG9wID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIHNbMl0udG9wID0gKHRoaXMuaCt0aGlzLm10b3ApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9ICdub25lJ1xyXG5cclxuICAgICAgICBpZiggY2MuZ2JvcmRlciAhPT0gJ25vbmUnICl7XHJcblxyXG4gICAgICAgICAgICBzWzRdLmJvcmRlciA9ICdub25lJ1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlciA9ICdub25lJ1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHRoaXMucmFkaXVzKSBzWzFdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjYWxjVWlzICgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzT3BlbiB8fCB0aGlzLmlzRW1wdHkgKSB0aGlzLmggPSB0aGlzLmJhc2VIXHJcbiAgICAgICAgLy9lbHNlIHRoaXMuaCA9IFJvb3RzLmNhbGNVaXMoIHRoaXMudWlzLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55ICsgdGhpcy5iYXNlSCApICsgdGhpcy5iYXNlSDtcclxuICAgICAgICBlbHNlIHRoaXMuaCA9IFJvb3RzLmNhbGNVaXMoIFsuLi50aGlzLnVpcywgdGhpcy5zcGFjZVkgXSwgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKyB0aGlzLm1hcmdpbiwgdHJ1ZSApICsgdGhpcy5iYXNlSFxyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuc1syXS5oZWlnaHQgPSggdGhpcy5oIC0gdGhpcy5iYXNlSCApKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApXHJcbiAgICAgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0IClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsYyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gKSByZXR1cm5cclxuICAgICAgICBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLmNhbGMoKVxyXG4gICAgICAgIGVsc2UgdGhpcy5jYWxjVWlzKClcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG4gICAgICAgIHRoaXMuc1syXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0U2l6ZSggdGhpcy53IClcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uclNpemUoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIHRoaXMudyA9IHRoaXMudyAtIHRoaXMuZGVjYWxcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKCB0aGlzLnNhICsgdGhpcy5zYiAtIDYgKSArICdweCdcclxuXHJcbiAgICAgICAgc1sxXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy53ICsgJ3B4J1xyXG4gICAgICAgIHNbMV0ubGVmdCA9ICh0aGlzLmRlY2FsKSArICdweCdcclxuICAgICAgICBzWzJdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuLypcclxuICAgIHVpb3V0KCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5sb2NrICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgICAgICBpZih0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdmVyKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5sb2NrICkgcmV0dXJuO1xyXG4gICAgICAgIGlmKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgICAgICAvL2lmKCB0aGlzLmlzT3BlbiApIHJldHVybjtcclxuICAgICAgICBpZih0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcblxyXG4gICAgfVxyXG4qL1xyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBKb3lzdGljayBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gWzAsMF07XHJcblxyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLmpveVR5cGUgPSAnYW5hbG9naXF1ZSc7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiB8fCAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigpO1xyXG4gICAgICAgIHRoaXMudG1wID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG4gICAgICAgIHRoaXMuaGF2ZVRleHQgPSBvLnRleHQgIT09IHVuZGVmaW5lZCA/IG8udGV4dCA6IHRydWUgXHJcblxyXG4gICAgICAgIC8vdGhpcy5yYWRpdXMgPSB0aGlzLncgKiAwLjU7XHJcbiAgICAgICAgLy90aGlzLmRpc3RhbmNlID0gdGhpcy5yYWRpdXMqMC4yNTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlID0gKHRoaXMuZGlhbSowLjUpKjAuMjU7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAodGhpcy5oYXZlVGV4dCA/IDEwIDogMCk7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0ICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy5oYXZlVGV4dCA/IHRoaXMudmFsdWUgOiAnJztcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5nZXRKb3lzdGljayggdGhpcy5tb2RlbCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtICk7XHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoMClcclxuXHJcblxyXG4gICAgICAgIHRoaXMucmF0aW8gPSAxMjgvdGhpcy53O1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoZmFsc2UpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5tb2RlbD09PTApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgJ3VybCgjZ3JhZEluKScsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJyMwMDAnLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMSknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU91dCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgJ25vbmUnLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5tb2RlbD09PTApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgJ3VybCgjZ3JhZEluMiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2JhKDAsMCwwLDApJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3ZlciwgMiApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoMCwwLDAsMC4zKScsIDMgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95U2VsZWN0LCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5qb3lPdmVyLCA0ICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXRcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGFkZEludGVydmFsICgpe1xyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICkgdGhpcy5zdG9wSW50ZXJ2YWwoKTtcclxuICAgICAgICBpZiggdGhpcy5wb3MuaXNaZXJvKCkgKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCBmdW5jdGlvbigpeyB0aGlzLnVwZGF0ZSgpOyB9LmJpbmQodGhpcyksIDEwICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0b3BJbnRlcnZhbCAoKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgPT09IG51bGwgKSByZXR1cm47XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbCggdGhpcy5pbnRlcnZhbCApO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkSW50ZXJ2YWwoKTtcclxuICAgICAgICB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHRoaXMubW9kZSggMiApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vdGhpcy50bXAueCA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIC8vdGhpcy50bXAueSA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMudG1wLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgdGhpcy50bXAueSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKTtcclxuXHJcbiAgICAgICAgbGV0IGRpc3RhbmNlID0gdGhpcy50bXAubGVuZ3RoKCk7XHJcblxyXG4gICAgICAgIGlmICggZGlzdGFuY2UgPiB0aGlzLmRpc3RhbmNlICkge1xyXG4gICAgICAgICAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKHRoaXMudG1wLngsIHRoaXMudG1wLnkpO1xyXG4gICAgICAgICAgICB0aGlzLnRtcC54ID0gTWF0aC5zaW4oIGFuZ2xlICkgKiB0aGlzLmRpc3RhbmNlO1xyXG4gICAgICAgICAgICB0aGlzLnRtcC55ID0gTWF0aC5jb3MoIGFuZ2xlICkgKiB0aGlzLmRpc3RhbmNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wb3MuY29weSggdGhpcy50bXAgKS5kaXZpZGVTY2FsYXIoIHRoaXMuZGlzdGFuY2UgKS5uZWdhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2ICkge1xyXG5cclxuICAgICAgICBpZih2PT09dW5kZWZpbmVkKSB2PVswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHZbMF0gfHwgMCwgdlsxXSAgfHwgMCApO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICBpZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaW50ZXJ2YWwgIT09IG51bGwgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy5sZXJwKCBudWxsLCAwLjMgKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy54ID0gTWF0aC5hYnMoIHRoaXMucG9zLnggKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueDtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zLnkgPSBNYXRoLmFicyggdGhpcy5wb3MueSApIDwgMC4wMSA/IDAgOiB0aGlzLnBvcy55O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzVUkgJiYgdGhpcy5tYWluLmlzQ2FudmFzICkgdGhpcy5tYWluLmRyYXcoKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgdGhpcy5zdG9wSW50ZXJ2YWwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgeCA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueCAqIHRoaXMuZGlzdGFuY2UgKTtcclxuICAgICAgICAvL2xldCB5ID0gdGhpcy5yYWRpdXMgLSAoIC10aGlzLnBvcy55ICogdGhpcy5kaXN0YW5jZSApO1xyXG5cclxuICAgICAgICBsZXQgeCA9ICh0aGlzLmRpYW0qMC41KSAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgbGV0IHkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy55ICogdGhpcy5kaXN0YW5jZSApO1xyXG5cclxuICAgICAgICBpZih0aGlzLm1vZGVsID09PSAwKXtcclxuXHJcbiAgICAgICAgICAgIGxldCBzeCA9IHggKyAoKHRoaXMucG9zLngpKjUpICsgNTtcclxuICAgICAgICAgICAgbGV0IHN5ID0geSArICgodGhpcy5wb3MueSkqNSkgKyAxMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHN4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5Jywgc3kqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeCcsIHgqdGhpcy5yYXRpbywgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDQgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3knLCB5KnRoaXMucmF0aW8sIDQgKTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9ICAoIHRoaXMucG9zLnggKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gICggdGhpcy5wb3MueSAqIHRoaXMubXVsdGlwbGljYXRvciApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICBpZih0aGlzLmhhdmVUZXh0KSB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhciAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zdG9wSW50ZXJ2YWwoKTtcclxuICAgICAgICBzdXBlci5jbGVhcigpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEtub2IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0N5Y2xpYyA9IG8uY3ljbGljIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDA7XHJcbiAgICAgICAgaWYoIG8ubW9kZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUeXBlTnVtYmVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMubWludyAgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLm1QSSA9IE1hdGguUEkgKiAwLjg7XHJcbiAgICAgICAgdGhpcy50b0RlZyA9IDE4MCAvIE1hdGguUEk7XHJcbiAgICAgICAgdGhpcy5jaXJSYW5nZSA9IHRoaXMubVBJICogMjtcclxuXHJcbiAgICAgICAgdGhpcy5vZmZzZXQgPSBuZXcgVjIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCdcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuXHJcbiAgICAgICAgaWYodGhpcy5jWzFdICE9PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnanVzdGlmeS1jb250ZW50OmNlbnRlcjsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonKyBjYy50ZXh0ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0S25vYigpO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDMgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlR3JhZCgpLCAzIClcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyArIHRoaXMuZGlhbSArICcgJyArIHRoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHRoaXMuY1szXSwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA+IDAgKSB7XHJcblxyXG4gICAgICAgICAgICBUb29scy5kb20oICdwYXRoJywgJycsIHsgZDogJycsIHN0cm9rZTpjYy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzogMiwgZmlsbDogJ25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOiAncm91bmQnIH0sIHRoaXMuY1szXSApOyAvLzRcclxuXHJcbiAgICAgICAgICAgIGlmICggdGhpcy5tb2RlbCA9PSAyKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgVG9vbHMuYWRkU1ZHR2xvd0VmZmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0eWxlJywgJ2ZpbHRlcjogdXJsKFwiI1VJTEdsb3dcIik7JywgNCApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuciA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApIHtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDApO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywncmdiYSgyNTUsMCwwLDAuMiknLCAyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5zZWxlY3QsIDApO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywncmdiYSgwLDAsMCwwLjYpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dE92ZXIsIDEgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdrbm9iJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbmRFbmQoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlXHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbFxyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBvZmYgPSB0aGlzLm9mZnNldDtcclxuXHJcbiAgICAgICAgLy9vZmYueCA9IHRoaXMucmFkaXVzIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIC8vb2ZmLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICBvZmYueCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICBvZmYueSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKTtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gLSBNYXRoLmF0YW4yKCBvZmYueCwgb2ZmLnkgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApIHRoaXMuciA9IE1hdGguYWJzKHRoaXMuciAtIHRoaXMub2xkcikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPiB0aGlzLm1QSSA/IHRoaXMubVBJIDogdGhpcy5yO1xyXG4gICAgICAgIHRoaXMuciA9IHRoaXMuciA8IC10aGlzLm1QSSA/IC10aGlzLm1QSSA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgbGV0IHN0ZXBzID0gMSAvIHRoaXMuY2lyUmFuZ2U7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gKHRoaXMuciArIHRoaXMubVBJKSAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IE1hdGguZmxvb3IoIG4gLyB0aGlzLnN0ZXAgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUoIHRoaXMub2xkICsgKCBuICogdGhpcy5zdGVwICkgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9sZHIgPSB0aGlzLnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2tub2InICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYWtlR3JhZCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBkID0gJycsIHN0ZXAsIHJhbmdlLCBhLCB4LCB5LCB4MiwgeTIsIHIgPSA2NDtcclxuICAgICAgICBsZXQgc3RhcnRhbmdsZSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZW5kYW5nbGUgPSBNYXRoLlBJIC0gdGhpcy5tUEk7XHJcbiAgICAgICAgLy9sZXQgc3RlcCA9IHRoaXMuc3RlcD41ID8gdGhpcy5zdGVwIDogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5zdGVwPjUpe1xyXG4gICAgICAgICAgICByYW5nZSA9ICB0aGlzLnJhbmdlIC8gdGhpcy5zdGVwO1xyXG4gICAgICAgICAgICBzdGVwID0gKCBzdGFydGFuZ2xlIC0gZW5kYW5nbGUgKSAvIHJhbmdlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0ZXAgPSAoKCBzdGFydGFuZ2xlIC0gZW5kYW5nbGUgKSAvIHIpKjI7XHJcbiAgICAgICAgICAgIHJhbmdlID0gciowLjU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKCBsZXQgaSA9IDA7IGkgPD0gcmFuZ2U7ICsraSApIHtcclxuXHJcbiAgICAgICAgICAgIGEgPSBzdGFydGFuZ2xlIC0gKCBzdGVwICogaSApO1xyXG4gICAgICAgICAgICB4ID0gciArIE1hdGguc2luKCBhICkgKiAoIHIgLSAyMCApO1xyXG4gICAgICAgICAgICB5ID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyMCApO1xyXG4gICAgICAgICAgICB4MiA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjQgKTtcclxuICAgICAgICAgICAgeTIgPSByICsgTWF0aC5jb3MoIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIGQgKz0gJ00nICsgeCArICcgJyArIHkgKyAnIEwnICsgeDIgKyAnICcreTIgKyAnICc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gdGhpcy5yYW5nZTtcclxuXHJcbiAgICAgICAgbGV0IHNhID0gTWF0aC5QSSArIHRoaXMubVBJO1xyXG4gICAgICAgIGxldCBlYSA9ICggKCB0aGlzLnBlcmNlbnQgKiB0aGlzLmNpclJhbmdlICkgLSAoIHRoaXMubVBJICkgKTtcclxuXHJcbiAgICAgICAgbGV0IHNpbiA9IE1hdGguc2luKCBlYSApO1xyXG4gICAgICAgIGxldCBjb3MgPSBNYXRoLmNvcyggZWEgKTtcclxuXHJcbiAgICAgICAgbGV0IHgxID0gKCAyNSAqIHNpbiApICsgNjQ7XHJcbiAgICAgICAgbGV0IHkxID0gLSggMjUgKiBjb3MgKSArIDY0O1xyXG4gICAgICAgIGxldCB4MiA9ICggMjAgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MiA9IC0oIDIwICogY29zICkgKyA2NDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCAnTSAnICsgeDEgKycgJyArIHkxICsgJyBMICcgKyB4MiArJyAnICsgeTIsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHgxID0gMzYgKiBNYXRoLnNpbiggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTEgPSAzNiAqIE1hdGguY29zKCBzYSApICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB4MiA9IDM2ICogc2luICsgNjQ7XHJcbiAgICAgICAgICAgIGxldCB5MiA9IC0zNiAqIGNvcyArIDY0O1xyXG4gICAgICAgICAgICBsZXQgYmlnID0gZWEgPD0gTWF0aC5QSSAtIHRoaXMubVBJID8gMCA6IDE7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsgJywnICsgeTEgKyAnIEEgJyArIDM2ICsgJywnICsgMzYgKyAnIDEgJyArIGJpZyArICcgMSAnICsgeDIgKyAnLCcgKyB5MiwgNCApO1xyXG5cclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggdGhpcy5jb2xvcnMudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggdGhpcy5jb2xvcnMudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDQgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSAnLi4vY29yZS9Sb290cy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICAvLyBUT0RPIG5vdCB3b3JrXHJcbiAgICAgICAgdGhpcy5oaWRlQ3VycmVudCA9IGZhbHNlXHJcblxyXG4gICAgICAgIC8vIGltYWdlc1xyXG4gICAgICAgIHRoaXMucGF0aCA9IG8ucGF0aCB8fCAnJztcclxuICAgICAgICB0aGlzLmZvcm1hdCA9IG8uZm9ybWF0IHx8ICcnO1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmlzV2l0aEltYWdlID0gdGhpcy5wYXRoICE9PSAnJyA/IHRydWU6ZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wcmVMb2FkQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZSA9IHt9O1xyXG4gICAgICAgIHRoaXMudG1wVXJsID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubSA9IG8ubSAhPT0gdW5kZWZpbmVkID8gby5tIDogNVxyXG5cclxuXHJcbiAgICAgICAgbGV0IGFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcblxyXG4gICAgICAgIC8vIHNjcm9sbCBzaXplXHJcbiAgICAgICAgbGV0IHNzID0gby5zY3JvbGxTaXplIHx8IDEwXHJcbiAgICAgICAgdGhpcy5zcyA9IHNzKzFcclxuXHJcbiAgICAgICAgdGhpcy5zTW9kZSA9IDA7XHJcbiAgICAgICAgdGhpcy50TW9kZSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdE9ubHkgPSBvLmxpc3RPbmx5IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5zdGF0aWNUb3AgPSBvLnN0YXRpY1RvcCB8fCBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0YWJsZSA9IHRoaXMubGlzdE9ubHlcclxuICAgICAgICBpZiggby5zZWxlY3QgIT09IHVuZGVmaW5lZCApIG8uc2VsZWN0YWJsZSA9IG8uc2VsZWN0XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0YWJsZSAhPT0gdW5kZWZpbmVkICkgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGVcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudHh0ID09PSAnJyApIHRoaXMucCA9IDA7XHJcblxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTM7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MDsgZGlzcGxheTpub25lOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLml0ZW0gKyAncGFkZGluZzowcHggJyt0aGlzLm0rJ3B4OyBtYXJnaW4tYm90dG9tOjBweDsgcG9zaXRpb246YWJzb2x1dGU7IGp1c3RpZnktY29udGVudDonK2FsaWduKyc7IHRleHQtYWxpZ246JythbGlnbisnOyBsaW5lLWhlaWdodDonKyh0aGlzLmgtNCkrJ3B4OyB0b3A6MXB4OyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OyBib3JkZXI6MXB4IHNvbGlkICcrY2MuYm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo2cHg7IGhlaWdodDo2cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zY3JvbGxlckJhY2sgPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3JpZ2h0OjBweDsgd2lkdGg6JytzcysncHg7IGJhY2tncm91bmQ6JytjYy5iYWNrKyc7IGRpc3BsYXk6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLnNjcm9sbGVyID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDonKygoc3MtKHNzKjAuMjUpKSowLjUpKydweDsgd2lkdGg6Jysoc3MqMC4yNSkrJ3B4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOyBkaXNwbGF5Om5vbmU7ICcpO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10uc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gW11cclxuICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG51bGxcclxuXHJcbiAgICAgICAgaWYoIG8ubGlzdCApe1xyXG4gICAgICAgICAgICBpZiggby5saXN0IGluc3RhbmNlb2YgQXJyYXkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdCA9IG8ubGlzdFxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgICAgIGZvciggbGV0IGcgaW4gdGhpcy5yZWZPYmplY3QgKSB0aGlzLmxpc3QucHVzaCggZyApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9ICcnO1xyXG5cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnRtcElkID0gMFxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLml0ZW1IZWlnaHQgPSBvLml0ZW1IZWlnaHQgfHwgdGhpcy5oLy8odGhpcy5oLTMpO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBmdWxsIGxpc3QgXHJcbiAgICAgICAgdGhpcy5mdWxsID0gby5mdWxsIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnB5ID0gMDtcclxuICAgICAgICB0aGlzLnd3ID0gdGhpcy5zYjtcclxuICAgICAgICB0aGlzLnNjcm9sbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIGxpc3QgdXAgb3IgZG93blxyXG4gICAgICAgIHRoaXMuc2lkZSA9IG8uc2lkZSB8fCAnZG93bic7XHJcbiAgICAgICAgdGhpcy51cCA9IHRoaXMuc2lkZSA9PT0gJ2Rvd24nID8gMCA6IDE7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudG9wID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICB0aGlzLmNbNF0uc3R5bGUudG9wID0gJ2F1dG8nO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLmJvdHRvbSA9IHRoaXMuaC0yICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmJvdHRvbSA9ICcxcHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbNF0uc3R5bGUuYm90dG9tID0gZmx0b3AgKyAncHgnO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gdGhpcy5iYXNlSCArICdweCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxpc3RJbiA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnbGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgYmFja2dyb3VuZDpub25lOycpO1xyXG4gICAgICAgIHRoaXMubGlzdEluLm5hbWUgPSAnbGlzdCc7XHJcblxyXG4gICAgICAgIHRoaXMudG9wTGlzdCA9IDA7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLmxpc3RJbiApO1xyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5zY3JvbGxlckJhY2sgKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXIgKTtcclxuXHJcbiAgICAgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICBpZighaXNOYU4oby52YWx1ZSkpIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbIG8udmFsdWUgXTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNPcGVuT25TdGFydCA9IG8ub3BlbiB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGlzdE9ubHkgKXtcclxuICAgICAgICAgICAgdGhpcy5iYXNlSCA9IDU7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbNF0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUgrJ3B4J1xyXG4gICAgICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHRoaXMubWluaUNhbnZhcyA9IG8ubWluaUNhbnZhcyB8fCBmYWxzZSBcclxuICAgICAgICB0aGlzLmNhbnZhc0JnID0gby5jYW52YXNCZyB8fCAncmdiYSgwLDAsMCwwKSdcclxuICAgICAgICB0aGlzLmltYWdlU2l6ZSA9IG8uaW1hZ2VTaXplIHx8IFsyMCwyMF07XHJcblxyXG4gICAgICAgIC8vIGRyYWdvdXQgZnVuY3Rpb25cclxuICAgICAgICB0aGlzLmRyYWcgPSBvLmRyYWcgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLmRyYWdvdXQgPSBvLmRyYWdvdXQgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLmRyYWdzdGFydCA9IG8uZHJhZ3N0YXJ0IHx8IG51bGxcclxuICAgICAgICB0aGlzLmRyYWdlbmQgPSBvLmRyYWdlbmQgfHwgbnVsbFxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMF0uc3R5bGUuYmFja2dyb3VuZCA9ICcjRkYwMDAwJ1xyXG4gICAgICAgIC8vL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgdGhpcy5wcmVsb2FkSW1hZ2UoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRMaXN0KCB0aGlzLmxpc3QgKTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICBpZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNPcGVuT25TdGFydCApIHRoaXMub3BlbiggdHJ1ZSApXHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUggKz0gdGhpcy5tdG9wXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGltYWdlIGxpc3RcclxuXHJcbiAgICBwcmVsb2FkSW1hZ2UgKCkge1xyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5saXN0Lmxlbmd0aDsgaSsrICkgdGhpcy50bXBVcmwucHVzaCggdGhpcy5saXN0W2ldICk7XHJcbiAgICAgICAgdGhpcy5sb2FkT25lKCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbmV4dEltZyAoKSB7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuYyA9PT0gbnVsbCkgcmV0dXJuXHJcblxyXG4gICAgICAgIHRoaXMudG1wVXJsLnNoaWZ0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMudG1wVXJsLmxlbmd0aCA9PT0gMCApeyBcclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYWRkSW1hZ2VzKCk7XHJcbiAgICAgICAgICAgIC8qdGhpcy5zZXRMaXN0KCB0aGlzLmxpc3QgKTtcclxuICAgICAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oKTsqL1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB0aGlzLmxvYWRPbmUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbG9hZE9uZSgpe1xyXG5cclxuICAgICAgICBsZXQgc2VsZiA9IHRoaXNcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudG1wVXJsWzBdO1xyXG4gICAgICAgIGxldCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuICAgICAgICBpbWcuc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6JytzZWxmLmltYWdlU2l6ZVswXSsncHg7IGhlaWdodDonK3NlbGYuaW1hZ2VTaXplWzFdKydweCc7XHJcbiAgICAgICAgaW1nLnNldEF0dHJpYnV0ZSgnc3JjJywgdGhpcy5wYXRoICsgbmFtZSArIHRoaXMuZm9ybWF0ICk7XHJcblxyXG4gICAgICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgICAgICBzZWxmLmltYWdlU2l6ZVsyXSA9IGltZy53aWR0aDtcclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbM10gPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgICAgICBzZWxmLnRtcEltYWdlW25hbWVdID0gaW1nO1xyXG4gICAgICAgICAgICBzZWxmLm5leHRJbWcoKTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgJiYgdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgaWYoIGwueSA+IHRoaXMuaCAtIHRoaXMuYmFzZUggKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnNjcm9sbCAmJiAoIGwueCA+ICh0aGlzLnNhK3RoaXMuc2ItdGhpcy5zcykpICkgcmV0dXJuICdzY3JvbGwnO1xyXG4gICAgICAgICAgICAgICAgaWYobC54ID4gdGhpcy5zYSkgcmV0dXJuIHRoaXMudGVzdEl0ZW1zKCBsLnktdGhpcy5iYXNlSCApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIKzIgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnNjcm9sbCAmJiAoIGwueCA+ICh0aGlzLnNhK3RoaXMuc2ItdGhpcy5zcykpICkgcmV0dXJuICdzY3JvbGwnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdEl0ZW1zICggeSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy5pdGVtc1xyXG5cclxuICAgICAgICAvKmlmKHRoaXMuaGlkZUN1cnJlbnQpe1xyXG4gICAgICAgICAgICAvL2l0ZW1zID0gWy4uLnRoaXMuaXRlbXNdXHJcbiAgICAgICAgICAgIGl0ZW1zID0gdGhpcy5pdGVtcy5zbGljZSh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICB9Ki9cclxuXHJcbiAgICAgICAgbGV0IGkgPSBpdGVtcy5sZW5ndGgsIGl0ZW0sIGEsIGI7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBhID0gaXRlbS5wb3N5ICsgdGhpcy50b3BMaXN0O1xyXG4gICAgICAgICAgICBiID0gaXRlbS5wb3N5ICsgdGhpcy5pdGVtSGVpZ2h0ICsgMSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgaWYoIHkgPj0gYSAmJiB5IDw9IGIgKXsgXHJcbiAgICAgICAgICAgICAgICBuYW1lID0gJ2l0ZW0nICsgaTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZUl0ZW0oMClcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDEpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlSXRlbSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQuc2VsZWN0ICYmIG1vZGU9PT0wKSBtb2RlID0gMlxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1blNlbGVjdGVkKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMClcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG4gICAgICAgIHRoaXMucmVzZXRJdGVtcygpXHJcbiAgICAgICAgdGhpcy5tb2RlSXRlbSgyKVxyXG4gICAgICAgIHRoaXMuY3VycmVudC5zZWxlY3QgPSB0cnVlXHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldEl0ZW1zKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGhpZGVBY3RpdmUoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5oaWRlQ3VycmVudCApIHJldHVyblxyXG4gICAgICAgIC8vaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl0aGlzLnRtcElkID0gdGhpcy5jdXJyZW50LmlkXHJcbiAgICAgICAgdGhpcy5yZXNldEhpZGUoKVxyXG4gICAgICAgIC8vdGhpcy5pdGVtc1t0aGlzLnRtcElkXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByZXNldEhpZGUoKSB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMudG1wSWQpXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5pdGVtcy5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihpPT09dGhpcy50bXBJZCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmhlaWdodCA9IDArJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gLTE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnN0eWxlLmhlaWdodCA9IHRoaXMuaXRlbUhlaWdodCsncHgnXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKihpLTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vdGhpcy5pdGVtc1tpXS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvKnRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7Ki9cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3Njcm9sbCcgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgyKVxyXG4gICAgICAgICAgICBpZiggIXRoaXMubGlzdE9ubHkgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZUFjdGl2ZSgpXHJcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKClcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpcyBpdGVtXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyB0aGlzLmN1cnJlbnQuaWQgXVxyXG4gICAgICAgICAgICAgICAgLy90aGlzLnRtcElkID0gdGhpcy5jdXJyZW50LmlkXHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3RhYmxlICkgdGhpcy5zZWxlY3RlZCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy90aGlzLnNlbmQoIHRoaXMucmVmT2JqZWN0ICE9PSBudWxsID8gdGhpcy5yZWZPYmplY3RbIHRoaXMubGlzdFt0aGlzLmN1cnJlbnQuaWRdXSA6IHRoaXMudmFsdWUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZCggdGhpcy52YWx1ZSApXHJcblxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpXHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIG51cDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0aXRsZScgKXtcclxuICAgICAgICAgICAgdGhpcy51blNlbGVjdGVkKCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVRpdGxlKDEpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncy1yZXNpemUnKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDEpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgyKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy51cGRhdGUoICggZS5jbGllbnRZIC0gdG9wICApIC0gKCB0aGlzLnNoKjAuNSApICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdG9wID0gdGhpcy56b25lLnkrdGhpcy5iYXNlSC0yO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGUoICggZS5jbGllbnRZIC0gdG9wICApIC0gKCB0aGlzLnNoKjAuNSApICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9pZih0aGlzLmlzRG93bikgdGhpcy5saXN0bW92ZShlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlU2Nyb2xsKDApO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG5hbWUgIT09IHRoaXMucHJldk5hbWUgKSBudXAgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSBuYW1lO1xyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aGVlbCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgcmV0dXJuIGZhbHNlOyBcclxuICAgICAgICB0aGlzLnB5ICs9IGUuZGVsdGEqMTA7XHJcbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5weSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5wcmV2TmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgIHRoaXMubW9kZVRpdGxlKDApO1xyXG4gICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygndGhpcyBpcyByZXNldCcpXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZVNjcm9sbCAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnNNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc2Nyb2xsZXIuc3R5bGU7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHMuYmFja2dyb3VuZCA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHMuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHMuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zTW9kZSA9IG1vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kZVRpdGxlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIG1vZGUgPT09IHRoaXMudE1vZGUgKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjogLy8gZWRpdCAvIGRvd25cclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICAgICAgc1szXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50TW9kZSA9IG1vZGU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyTGlzdCAoKSB7XHJcblxyXG4gICAgICAgIHdoaWxlICggdGhpcy5saXN0SW4uY2hpbGRyZW4ubGVuZ3RoICkgdGhpcy5saXN0SW4ucmVtb3ZlQ2hpbGQoIHRoaXMubGlzdEluLmxhc3RDaGlsZCApO1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGlzdCAoIGxpc3QgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJMaXN0KCk7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IGxpc3Q7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG5cclxuICAgICAgICBsZXQgbG5nID0gdGhpcy5oaWRlQ3VycmVudD8gdGhpcy5sZW5ndGgtMSA6IHRoaXMubGVuZ3RoXHJcblxyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IHRoaXMuZnVsbCA/IGxuZyA6IDU7XHJcbiAgICAgICAgdGhpcy5tYXhJdGVtID0gbG5nIDwgdGhpcy5tYXhJdGVtID8gbG5nIDogdGhpcy5tYXhJdGVtO1xyXG5cclxuICAgICAgICB0aGlzLm1heEhlaWdodCA9IHRoaXMubWF4SXRlbSAqICh0aGlzLml0ZW1IZWlnaHQrMSkgKyAyO1xyXG4gICAgICAgIFxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5tYXggPSBsbmcgKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICB0aGlzLnJhdGlvID0gdGhpcy5tYXhIZWlnaHQgLyB0aGlzLm1heDtcclxuICAgICAgICB0aGlzLnNoID0gdGhpcy5tYXhIZWlnaHQgKiB0aGlzLnJhdGlvO1xyXG4gICAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLm1heEhlaWdodCAtIHRoaXMuc2g7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zdHlsZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArICdweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1heCA+IHRoaXMubWF4SGVpZ2h0ICl7IFxyXG4gICAgICAgICAgICB0aGlzLnd3ID0gdGhpcy5zYiAtIHRoaXMuc3M7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgdGhpcy50bXBDdHggPSB0aGlzLnRtcENhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFN0eWxlID0gdGhpcy5jYW52YXNCZ1xyXG4gICAgICAgICAgICB0aGlzLnRtcEN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGl0ZW0sIG47Ly8sIGwgPSB0aGlzLnNiO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTx0aGlzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBuID0gdGhpcy5saXN0W2ldO1xyXG4gICAgICAgICAgICBpdGVtID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrKHRoaXMubSsxKSsncHg7IHdpZHRoOicrdGhpcy53dysncHg7IGhlaWdodDonK3RoaXMuaXRlbUhlaWdodCsncHg7IGxpbmUtaGVpZ2h0OicrKHRoaXMuaXRlbUhlaWdodC0yKSsncHg7IGNvbG9yOicrdGhpcy5jb2xvcnMudGV4dCsnOyBiYWNrZ3JvdW5kOicrdGhpcy5jb2xvcnMuYmFjaysnOycgKTtcclxuICAgICAgICAgICAgaXRlbS5uYW1lID0gJ2l0ZW0nKyBpXHJcbiAgICAgICAgICAgIGl0ZW0uaWQgPSBpO1xyXG4gICAgICAgICAgICBpdGVtLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGl0ZW0ucG9zeSA9ICh0aGlzLml0ZW1IZWlnaHQrMSkqaTtcclxuICAgICAgICAgICAgdGhpcy5saXN0SW4uYXBwZW5kQ2hpbGQoIGl0ZW0gKTtcclxuICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKCBpdGVtICk7XHJcblxyXG4gICAgICAgICAgICBpZiggbiA9PT0gdGhpcy52YWx1ZSApIHRoaXMuY3VycmVudCA9IGl0ZW1cclxuXHJcbiAgICAgICAgICAgIC8vaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW25dICk7XHJcbiAgICAgICAgICAgIGlmKCAhdGhpcy5pc1dpdGhJbWFnZSApIGl0ZW0udGV4dENvbnRlbnQgPSBuO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjID0gbmV3IEltYWdlKClcclxuICAgICAgICAgICAgICAgIGMuc3JjID0gdGhpcy50bXBDYW52YXMudG9EYXRhVVJMKClcclxuXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uc3R5bGUubWFyZ2luTGVmdCA9ICh0aGlzLmltYWdlU2l6ZVswXSs4KSsncHgnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8qbGV0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG5cclxuICAgICAgICAgICAgICAgIGMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXVxyXG4gICAgICAgICAgICAgICAgYy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgbGV0IGN0eCA9IGMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gdGhpcy5jYW52YXNCZ1xyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSkqL1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvL2Muc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjpyZWxhdGl2ZTsgcG9pbnRlci1ldmVudHM6bm9uZTsgZGlzcGxheTppbmxpbmUtYmxvY2s7IGZsb2F0OmxlZnQ7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXJpZ2h0OjVweDsgdG9wOjJweCdcclxuICAgICAgICAgICAgICAgLy8gYy5zdHlsZS5jc3NUZXh0ID0nIGZsZXgtc2hyaW5rOiAwOydcclxuXHJcbiAgICAgICAgICAgICAgICBjLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAnZGlzcGxheTpmbGV4OyBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OyBmbGV4LXdyYXA6IHdyYXA7J1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLmZsb2F0ID0gJ3JpZ2h0J1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hcHBlbmRDaGlsZCggYyApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBJbWFnZVtuXSA9IGNcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmRyYWdvdXQgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmltZyA9IHRoaXMudG1wSW1hZ2Vbbl1cclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmRyYWdnYWJsZSA9IFwidHJ1ZVwiXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnc3RhcnQnLCB0aGlzLmRyYWdzdGFydCB8fCBmdW5jdGlvbigpeyAvKmNvbnNvbGUubG9nKCdkcmFnIHN0YXJ0JykqL30pXHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWcnLCB0aGlzLmRyYWcgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIGZ1bmN0aW9uKCl7IFJvb3RzLmZha2VVcCgpOyB9ICk7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCB0aGlzLmRyYWdlbmQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBlbmQnKSovIH0uYmluZCh0aGlzKSApXHJcbiAgICAgICAgICAgICAgICAvL2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIGZ1bmN0aW9uKCl7Y29uc29sZS5sb2coJ2Ryb3AnKX0pXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3RhYmxlICkgdGhpcy5zZWxlY3RlZCgpXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZHJhd0ltYWdlKCBuYW1lLCBpbWFnZSwgeCx5LHcsaCApe1xyXG5cclxuICAgICAgICB0aGlzLnRtcEN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKTtcclxuICAgICAgICB0aGlzLnRtcEN0eC5kcmF3SW1hZ2UoaW1hZ2UsIHgsIHksIHcsIGgsIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSlcclxuICAgICAgICB0aGlzLnRtcEltYWdlW25hbWVdLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG5cclxuICAgICAgICAvKmxldCBjID0gdGhpcy50bXBJbWFnZVtuYW1lXVxyXG4gICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIHgsIHksIHcsIGgsIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSkqL1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhZGRJbWFnZXMgKCl7XHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMubGlzdC5sZW5ndGg7XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPGxuZzsgaSsrICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uYXBwZW5kQ2hpbGQoIHRoaXMudG1wSW1hZ2VbdGhpcy5saXN0W2ldXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICBpZighaXNOYU4odmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyB2YWx1ZSBdO1xyXG4gICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wSWQgPSB2YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VG9wSXRlbSAoKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdGljVG9wICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1dpdGhJbWFnZSApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMucHJlTG9hZENvbXBsZXRlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50ZXh0QWxpZ24gPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLmFwcGVuZENoaWxkKCB0aGlzLmNhbnZhcyApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgaW1nID0gdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdO1xyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCwgdGhpcy5pbWFnZVNpemVbMl0sIHRoaXMuaW1hZ2VTaXplWzNdLCAwLDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSApO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICl7XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5jWzNdLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlU2l6ZVswXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS50ZXh0QWxpZ24gPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdsZWZ0J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzNdLmFwcGVuZENoaWxkKCB0aGlzLmNhbnZhcyApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSggdGhpcy50bXBJbWFnZVsgdGhpcy52YWx1ZSBdLCAwLCAwICk7XHJcblxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyAtLS0tLSBMSVNUXHJcblxyXG4gICAgdXBkYXRlICggeSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLnNjcm9sbCApIHJldHVybjtcclxuXHJcbiAgICAgICAgeSA9IHkgPCAwID8gMCA6IHk7XHJcbiAgICAgICAgeSA9IHkgPiB0aGlzLnJhbmdlID8gdGhpcy5yYW5nZSA6IHk7XHJcblxyXG4gICAgICAgIHRoaXMudG9wTGlzdCA9IC1NYXRoLmZsb29yKCB5IC8gdGhpcy5yYXRpbyApO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RJbi5zdHlsZS50b3AgPSB0aGlzLnRvcExpc3QrJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLnRvcCA9IE1hdGguZmxvb3IoIHkgKSAgKyAncHgnO1xyXG5cclxuICAgICAgICB0aGlzLnB5ID0geTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLmdyb3VwICE9PSBudWxsICkgdGhpcy5ncm91cC5jYWxjKCB0ICk7XHJcbiAgICAgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCBmaXJzdCApIHtcclxuXHJcbiAgICAgICAgc3VwZXIub3BlbigpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSggMCApXHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMubWF4SGVpZ2h0ICsgdGhpcy5iYXNlSCArIDU7XHJcbiAgICAgICAgaWYoICF0aGlzLnNjcm9sbCApe1xyXG4gICAgICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIICsgNSArIHRoaXMubWF4O1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlckJhY2suc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMudXAgKXsgXHJcbiAgICAgICAgICAgIHRoaXMuem9uZS55IC09IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzRdLCAnZCcsIHRoaXMuc3Zncy5nMiApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yU2l6ZUNvbnRlbnQoKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUuaCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgaWYoIWZpcnN0KSB0aGlzLnBhcmVudEhlaWdodCggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICkgdGhpcy56b25lLnkgKz0gdGhpcy5oIC0gKHRoaXMuYmFzZUgtMTApO1xyXG5cclxuICAgICAgICBsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IHRoaXMuYmFzZUg7XHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KCAtdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemVDb250ZW50ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMubGlzdEluLmNoaWxkcmVuW2ldLnN0eWxlLndpZHRoID0gdGhpcy53dyArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICAvL1Byb3RvLnByb3RvdHlwZS5yU2l6ZS5jYWxsKCB0aGlzICk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGlmKHNbMl09PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgICAgIHNbMl0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzJdLmxlZnQgPSBkICsncHgnO1xyXG5cclxuICAgICAgICBzWzNdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1szXS5sZWZ0ID0gZCArICdweCc7XHJcblxyXG4gICAgICAgIHNbNF0ubGVmdCA9IGQgKyB3IC0gMTUgKyAncHgnO1xyXG5cclxuICAgICAgICB0aGlzLnd3ID0gdztcclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApIHRoaXMud3cgPSB3LXRoaXMuc3M7XHJcbiAgICAgICAgaWYodGhpcy5pc09wZW4pIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgTnVtZXJpYyBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbMF1cclxuICAgICAgICB0aGlzLm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaW52bXVsdHkgPSAxXHJcbiAgICAgICAgdGhpcy5pc1NpbmdsZSA9IHRydWVcclxuICAgICAgICB0aGlzLmlzQW5nbGUgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMuaXNWZWN0b3IgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5pc0FuZ2xlICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNBbmdsZSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5tdWx0eSA9IFRvb2xzLnRvcmFkXHJcbiAgICAgICAgICAgIHRoaXMuaW52bXVsdHkgPSBUb29scy50b2RlZ1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc0RyYWcgPSBvLmRyYWcgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8udmFsdWUgIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICBpZiggIWlzTmFOKG8udmFsdWUpICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW28udmFsdWVdXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTaW5nbGUgPSBmYWxzZVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgKXsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW11cclxuICAgICAgICAgICAgICAgIGlmKCBvLnZhbHVlLnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSBvLnZhbHVlLnhcclxuICAgICAgICAgICAgICAgIGlmKCBvLnZhbHVlLnkgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMV0gPSBvLnZhbHVlLnlcclxuICAgICAgICAgICAgICAgIGlmKCBvLnZhbHVlLnogIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMl0gPSBvLnZhbHVlLnpcclxuICAgICAgICAgICAgICAgIGlmKCBvLnZhbHVlLncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSBvLnZhbHVlLndcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTaW5nbGUgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZlY3RvciA9IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG4gICAgICAgIHRoaXMudG1wID0gW11cclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIGJnXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICcgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgdG9wOjRweDsgd2lkdGg6MHB4OyBoZWlnaHQ6JyArICh0aGlzLmgtOCkgKyAncHg7JyApXHJcblxyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXVxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNBbmdsZSApIHRoaXMudmFsdWVbaV0gPSAodGhpcy52YWx1ZVtpXSAqIDE4MCAvIE1hdGguUEkpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uIClcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgY29sb3I6JyArIGNjLnRleHQgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5iYWNrICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycpXHJcbiAgICAgICAgICAgIGlmKG8uY2VudGVyKSB0aGlzLmNbMitpXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICAgICAgdGhpcy5jWzMraV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLmlzTnVtID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMFxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGlvblxyXG4gICAgICAgIHRoaXMuc2VsZWN0SWQgPSAzICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jdXJzb3JJZCA9IDQgKyB0aGlzLmxuZztcclxuICAgICAgICB0aGlzLmNbIHRoaXMuY3Vyc29ySWQgXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyB3aWR0aDowcHg7IGJhY2tncm91bmQ6JytjYy50ZXh0Kyc7JyApO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbFxyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJydcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgaWYoIG5hbWUgIT09ICcnICl7IFxyXG4gICAgICAgICAgICBcdHRoaXMuY3VycmVudCA9IG5hbWVcclxuICAgICAgICAgICAgXHR0aGlzLnByZXYgPSB7IHg6ZS5jbGllbnRYLCB5OmUuY2xpZW50WSwgZDowLCB2OiB0aGlzLmlzU2luZ2xlID8gcGFyc2VGbG9hdCh0aGlzLnZhbHVlKSA6IHBhcnNlRmxvYXQoIHRoaXMudmFsdWVbIHRoaXMuY3VycmVudCBdICkgfVxyXG4gICAgICAgICAgICBcdHRoaXMuc2V0SW5wdXQoIHRoaXMuY1sgMyArIHRoaXMuY3VycmVudCBdIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgIFx0aWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMucHJldiA9IHsgeDowLCB5OjAsIGQ6MCwgdjowIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG51cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IHggPSAwXHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnJyApIHRoaXMuY3Vyc29yKClcclxuICAgICAgICBlbHNleyBcclxuICAgICAgICBcdGlmKCF0aGlzLmlzRHJhZykgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICBcdGVsc2UgdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0RyYWcgKXtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApe1xyXG5cclxuICAgICAgICAgICAgXHR0aGlzLnByZXYuZCArPSAoIGUuY2xpZW50WCAtIHRoaXMucHJldi54ICkgLSAoIGUuY2xpZW50WSAtIHRoaXMucHJldi55IClcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgbiA9IHRoaXMucHJldi52ICsgKCB0aGlzLnByZXYuZCAqIHRoaXMuc3RlcClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSA9IHRoaXMubnVtVmFsdWUobilcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIHRoaXMuY3VycmVudCBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVt0aGlzLmN1cnJlbnRdXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZSgpXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2LnggPSBlLmNsaWVudFhcclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi55ID0gZS5jbGllbnRZXHJcblxyXG4gICAgICAgICAgICAgICAgbnVwID0gdHJ1ZVxyXG4gICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICBcdGlmKCB0aGlzLmlzRG93biApIHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueCAtM1xyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKSB4IC09IHRoaXMudG1wW3RoaXMuY3VycmVudF1bMF1cclxuICAgICAgICBcdHJldHVybiB0aGlzLnVwSW5wdXQoIHgsIHRoaXMuaXNEb3duIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIHJldHVybiBudXBcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVswXSA9IHYueFxyXG4gICAgICAgICAgICBpZiggdi55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gdi55XHJcbiAgICAgICAgICAgIGlmKCB2LnogIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMl0gPSB2LnpcclxuICAgICAgICAgICAgaWYoIHYudyAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVszXSA9IHYud1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzU2luZ2xlID8gW3ZdIDogdiAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNhbWVTdHIgKCBzdHIgKXtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gc3RyXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudmFsdWUubGVuZ3RoXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgICB0aGlzLnZhbHVlW2ldID0gdGhpcy5udW1WYWx1ZSggdGhpcy52YWx1ZVtpXSAqIHRoaXMuaW52bXVsdHkgKVxyXG4gICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVtpXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VuZCAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSB0cnVlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9iamVjdExpbmsgIT09IG51bGwgKXsgXHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc1ZlY3RvciApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdLmZyb21BcnJheSggdiApXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdExpbmtbIHRoaXMub2JqZWN0S2V5IF0gPSB2XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5jYWxsYmFjayApIHRoaXMuY2FsbGJhY2soIHYsIHRoaXMub2JqZWN0S2V5IClcclxuICAgICAgICB0aGlzLmlzU2VuZCA9IGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgZCA9IHRoaXMuY3VycmVudCAhPT0gLTEgPyB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdICsgNSA6IDBcclxuICAgICAgICBzW3RoaXMuY3Vyc29ySWRdLndpZHRoID0gJzFweCdcclxuICAgICAgICBzW3RoaXMuY3Vyc29ySWRdLmxlZnQgPSAoIGQgKyBjICkgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9ICB3ICArICdweCdcclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0uaW5uZXJIVE1MID0gdFxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgdW5zZWxlY3QgKCkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm5cclxuICAgICAgICB0aGlzLmNbdGhpcy5zZWxlY3RJZF0uaW5uZXJIVE1MID0gJydcclxuICAgICAgICBzW3RoaXMuc2VsZWN0SWRdLndpZHRoID0gMCArICdweCdcclxuICAgICAgICBzW3RoaXMuY3Vyc29ySWRdLndpZHRoID0gMCArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGFyID0gW11cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmFsbHdheSApIGZvcmNlID0gdHJ1ZVxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgIFx0aWYoIWlzTmFOKCB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgKSl7IFxyXG4gICAgICAgICAgICAgICAgbGV0IG54ID0gdGhpcy5udW1WYWx1ZSggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSBueFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IG54XHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIG5vdCBudW1iZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICBcdGFyW2ldID0gdGhpcy52YWx1ZVtpXSAqIHRoaXMubXVsdHlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCAhZm9yY2UgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnNlbmQoIHRoaXMuaXNTaW5nbGUgPyBhclswXSA6IGFyIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBSRVpJU0VcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuICAgICAgICBsZXQgc3ggPSB0aGlzLmNvbG9ycy5zeFxyXG4gICAgICAgIGxldCBzcyA9IHN4ICogKHRoaXMubG5nLTEpXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy5zYi1zcykgLyB0aGlzLmxuZy8vKCggdGhpcy5zYiArIHN4ICkgLyB0aGlzLmxuZyApLXN4XHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcblxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIC8vdGhpcy50bXBbaV0gPSBbIE1hdGguZmxvb3IoIHRoaXMuc2EgKyAoIHcgKiBpICkrKCA1ICogaSApKSwgdyBdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcFtpXSA9IFsgKCB0aGlzLnNhICsgKCB3ICogaSApKyggc3ggKiBpICkpLCB3IF1cclxuICAgICAgICAgICAgdGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdXHJcbiAgICAgICAgICAgIHNbIDMgKyBpIF0ubGVmdCA9IHRoaXMudG1wW2ldWzBdICsgJ3B4J1xyXG4gICAgICAgICAgICBzWyAzICsgaSBdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gXCIuLi9jb3JlL1Byb3RvLmpzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4uL2NvcmUvVG9vbHMuanNcIjtcclxuXHJcbmZ1bmN0aW9uIGVhc2UoeCwgbWluLCBtYXgsIHBvd2VyKSB7XHJcbiAgbGV0IG4gPSBtaW4gKyBNYXRoLnBvdygoeCAtIG1pbikgLyAobWF4IC0gbWluKSwgcG93ZXIpICogKG1heCAtIG1pbik7XHJcbiAgcmV0dXJuIG47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTbGlkZSBleHRlbmRzIFByb3RvIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHN1cGVyKG8pO1xyXG5cclxuICAgIGlmIChvLmVhc2luZyA8PSAwKSB0aHJvdyBcIkVhc2luZyBtdXN0IGJlID4gMFwiO1xyXG4gICAgdGhpcy5lYXNpbmcgPSBvLmVhc2luZyB8fCAxO1xyXG5cclxuICAgIHRoaXMuc2V0VHlwZU51bWJlcihvKTtcclxuXHJcbiAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgaWYgKG8ubW9kZSAhPT0gdW5kZWZpbmVkKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgIC8vdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IgPSB0aGlzLmNvbG9ycy5oaWRlO1xyXG5cclxuICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzT3ZlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5hbGx3YXkgPSBvLmFsbHdheSB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmlzRGVnID0gby5pc0RlZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmZpcnN0SW1wdXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ2xldHRlci1zcGFjaW5nOi0xcHg7IHRleHQtYWxpZ246cmlnaHQ7IHdpZHRoOjQ3cHg7IGJvcmRlcjoxcHggZGFzaGVkICcrdGhpcy5kZWZhdWx0Qm9yZGVyQ29sb3IrJzsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICAgIFwiYm9yZGVyOm5vbmU7IGJhY2tncm91bmQ6bm9uZTsgd2lkdGg6NDdweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbM10gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBcIiB0b3A6MDsgaGVpZ2h0OlwiICsgdGhpcy5oICsgXCJweDtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYmFjayArXHJcbiAgICAgICAgXCI7IHRvcDoycHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuaCAtIDQpICtcclxuICAgICAgICBcInB4O1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jWzVdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImxlZnQ6NHB4OyB0b3A6NXB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSAxMCkgK1xyXG4gICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY1syXS5pc051bSA9IHRydWU7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5oZWlnaHQgPSAodGhpcy5oLTQpICsgJ3B4JztcclxuICAgIC8vdGhpcy5jWzJdLnN0eWxlLmxpbmVIZWlnaHQgPSAodGhpcy5oLTgpICsgJ3B4JztcclxuICAgIHRoaXMuY1syXS5zdHlsZS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnN0eWxlLmxpbmVIZWlnaHQgPSB0aGlzLmggLSAxMCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkge1xyXG4gICAgICBsZXQgcjEgPSA0LFxyXG4gICAgICAgIGgxID0gNCxcclxuICAgICAgICBoMiA9IDgsXHJcbiAgICAgICAgd3cgPSB0aGlzLmggLSA2LFxyXG4gICAgICAgIHJhID0gMTY7XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlbCA9PT0gMikge1xyXG4gICAgICAgIHIxID0gMDtcclxuICAgICAgICBoMSA9IDI7XHJcbiAgICAgICAgaDIgPSA0O1xyXG4gICAgICAgIHJhID0gMjtcclxuICAgICAgICB3dyA9ICh0aGlzLmggLSA2KSAqIDAuNTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDMpIHRoaXMuY1s1XS5zdHlsZS52aXNpYmxlID0gXCJub25lXCI7XHJcblxyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuYm9yZGVyUmFkaXVzID0gcjEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS5oZWlnaHQgPSBoMiArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9IHRoaXMuaCAqIDAuNSAtIGgxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuYm9yZGVyUmFkaXVzID0gcjEgKiAwLjUgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS5oZWlnaHQgPSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLnRvcCA9IHRoaXMuaCAqIDAuNSAtIGgxICogMC41ICsgXCJweFwiO1xyXG5cclxuICAgICAgLy90aGlzLmNbNl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JvcmRlci1yYWRpdXM6JytyYSsncHg7IG1hcmdpbi1sZWZ0OicrKC13dyowLjUpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBiYWNrZ3JvdW5kOicrY2MuYnV0dG9uKyc7IGxlZnQ6NHB4OyB0b3A6MnB4OyBoZWlnaHQ6JysodGhpcy5oLTQpKydweDsgd2lkdGg6Jyt3dysncHg7JyApO1xyXG4gICAgICB0aGlzLmNbNl0gPSB0aGlzLmRvbShcclxuICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICAgIFwiYm9yZGVyLXJhZGl1czpcIiArXHJcbiAgICAgICAgICByYSArXHJcbiAgICAgICAgICBcInB4OyBtYXJnaW4tbGVmdDpcIiArXHJcbiAgICAgICAgICAtd3cgKiAwLjUgK1xyXG4gICAgICAgICAgXCJweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICAgIFwiOyBsZWZ0OjRweDsgdG9wOjNweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAgICh0aGlzLmggLSA2KSArXHJcbiAgICAgICAgICBcInB4OyB3aWR0aDpcIiArXHJcbiAgICAgICAgICB3dyArXHJcbiAgICAgICAgICBcInB4O1wiXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG5cclxuICB0ZXN0Wm9uZShlKSB7XHJcbiAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICBpZiAobC54ID09PSAtMSAmJiBsLnkgPT09IC0xKSByZXR1cm4gXCJcIjtcclxuXHJcbiAgICBpZiAobC54ID49IHRoaXMudHhsKSByZXR1cm4gXCJ0ZXh0XCI7XHJcbiAgICBlbHNlIGlmIChsLnggPj0gdGhpcy5zYSkgcmV0dXJuIFwic2Nyb2xsXCI7XHJcbiAgICBlbHNlIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBtb3VzZXVwKGUpIHtcclxuICAgIGlmICh0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG1vdXNlZG93bihlKSB7XHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIHRoaXMubW91c2Vtb3ZlKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qaWYoIG5hbWUgPT09ICd0ZXh0JyApe1xyXG4gICAgICAgICAgICB0aGlzLnNldElucHV0KCB0aGlzLmNbMl0sIGZ1bmN0aW9uKCl7IHRoaXMudmFsaWRhdGUoKSB9LmJpbmQodGhpcykgKTtcclxuICAgICAgICB9Ki9cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG1vdXNlbW92ZShlKSB7XHJcbiAgICBsZXQgbnVwID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMubW9kZSgxKTtcclxuICAgICAgdGhpcy5jdXJzb3IoXCJ3LXJlc2l6ZVwiKTtcclxuICAgICAgLy99IGVsc2UgaWYobmFtZSA9PT0gJ3RleHQnKXtcclxuICAgICAgLy90aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHtcclxuICAgICAgbGV0IG5Ob3JtYWxpemVkID0gKGUuY2xpZW50WCAtICh0aGlzLnpvbmUueCArIHRoaXMuc2EpIC0gMykgLyB0aGlzLnd3O1xyXG5cclxuICAgICAgLy8gbG8gbWFwZW8gYWwgcmFuZ28gMCAuLi4gMVxyXG4gICAgICBuTm9ybWFsaXplZCA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIG5Ob3JtYWxpemVkKSk7XHJcblxyXG4gICAgICAvLyBhcGxpY28gZWFzaW5nXHJcbiAgICAgIGxldCBuRWFzZWQgPSBNYXRoLnBvdyhuTm9ybWFsaXplZCwgdGhpcy5lYXNpbmcpOyAvLyBlYXNpbmdcclxuXHJcbiAgICAgIGxldCBuTmV3ID0gbkVhc2VkICogdGhpcy5yYW5nZSArIHRoaXMubWluO1xyXG4gICAgICBsZXQgbk5ld1NsaWRlciA9IG5Ob3JtYWxpemVkICogdGhpcy5yYW5nZSArIHRoaXMubWluO1xyXG5cclxuICAgICAgdGhpcy5zbGlkZXJWYWx1ZSA9IHRoaXMubnVtVmFsdWUobk5ld1NsaWRlcik7XHJcblxyXG4gICAgICBsZXQgZGVsdGEgPSBuTmV3IC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICBsZXQgc3RlcHM7XHJcbiAgICAgIGlmIChkZWx0YSA+PSB0aGlzLnN0ZXAgfHwgZGVsdGEgPD0gdGhpcy5zdGVwKSB7XHJcbiAgICAgICAgc3RlcHMgPSBNYXRoLmZsb29yKGRlbHRhIC8gdGhpcy5zdGVwKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLm9sZCArIHN0ZXBzICogdGhpcy5zdGVwKTtcclxuICAgICAgICAvLyB2YWx1ZSB3aXRob3V0IGVhc2luZyBhcHBsaWVkXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgICAvL2NvbnNvbGUubG9nKFwibiwgbm9ybWFsaXplZCwgdmFsdWVcIiwgbk5ldywgbk5vcm1hbGl6ZWQsIHRoaXMudmFsdWUpO1xyXG4gICAgICBudXAgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudXA7XHJcbiAgfVxyXG5cclxuICB3aGVlbChlKSB7XHJcbiAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoZSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09IFwic2Nyb2xsXCIpIHtcclxuICAgICAgbGV0IHYgPSB0aGlzLnZhbHVlIC0gdGhpcy5zdGVwICogZS5kZWx0YTtcclxuXHJcbiAgICAgIGlmICh2ID4gdGhpcy5tYXgpIHtcclxuICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgIH0gZWxzZSBpZiAodiA8IHRoaXMubWluKSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1heCA6IHRoaXMubWluO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNldFZhbHVlKHYpO1xyXG4gICAgICB0aGlzLm9sZCA9IHY7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy9rZXlkb3duOiBmdW5jdGlvbiAoIGUgKSB7IHJldHVybiB0cnVlOyB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHZhbGlkYXRlKCkge1xyXG4gICAgbGV0IG4gPSB0aGlzLmNbMl0udGV4dENvbnRlbnQ7XHJcblxyXG4gICAgaWYgKCFpc05hTihuKSkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZShuKTtcclxuICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICB9IGVsc2UgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIC8vdGhpcy5jbGVhcklucHV0KCk7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5tb2RlKDApO1xyXG4gIH1cclxuXHJcbiAgbW9kZShtb2RlKSB7XHJcbiAgICBsZXQgcyA9IHRoaXMucztcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAvLyBzWzJdLmJvcmRlciA9ICcxcHggc29saWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuICAgICAgICBzWzVdLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9PSAwKSBzWzZdLmJhY2tncm91bmQgPSBjYy50ZXh0OyAvL2NjLmJ1dHRvbjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOiAvLyBzY3JvbGwgb3ZlclxyXG4gICAgICAgIC8vc1syXS5ib3JkZXIgPSAnMXB4IGRhc2hlZCAnICsgdGhpcy5jb2xvcnMuaGlkZTtcclxuICAgICAgICBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuYmFjaztcclxuICAgICAgICBzWzVdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7IC8vY2Mub3Zlcm9mZjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZSh1cCkge1xyXG4gICAgbGV0IG5vcm1hbGl6ZWQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgbGV0IHVuZWFzZWQgPVxyXG4gICAgICB0aGlzLmVhc2luZyA9PSAxID8gbm9ybWFsaXplZCA6IE1hdGgucG93KG5vcm1hbGl6ZWQsIDEgLyB0aGlzLmVhc2luZyk7XHJcblxyXG4gICAgbGV0IHd3ID0gTWF0aC5mbG9vcih0aGlzLnd3ICogdW5lYXNlZCk7XHJcbiAgICAvL2xldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqICgodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2UpKTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gMykgdGhpcy5zWzVdLndpZHRoID0gd3cgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5zWzZdKSB0aGlzLnNbNl0ubGVmdCA9IHRoaXMuc2EgKyB3dyArIDMgKyBcInB4XCI7XHJcbiAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlICsgKHRoaXMuaXNEZWcgPyBcIsKwXCIgOiBcIlwiKTtcclxuXHJcbiAgICBpZiAodXApIHRoaXMuc2VuZCgpO1xyXG4gIH1cclxuXHJcbiAgclNpemUoKSB7XHJcbiAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy5zYiAtIHRoaXMuc2M7XHJcbiAgICB0aGlzLnd3ID0gdyAtIDY7XHJcblxyXG4gICAgbGV0IHR4ID0gdGhpcy5zYztcclxuICAgIGlmICh0aGlzLmlzVUkgfHwgIXRoaXMuc2ltcGxlKSB0eCA9IHRoaXMuc2MgKyAxMDtcclxuICAgIHRoaXMudHhsID0gdGhpcy53IC0gdHggKyAyO1xyXG5cclxuICAgIC8vbGV0IHR5ID0gTWF0aC5mbG9vcih0aGlzLmggKiAwLjUpIC0gODtcclxuXHJcbiAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICBzWzJdLndpZHRoID0gdGhpcy5zYyAtIDYgKyBcInB4XCI7XHJcbiAgICBzWzJdLmxlZnQgPSB0aGlzLnR4bCArIDQgKyBcInB4XCI7XHJcbiAgICAvL3NbMl0udG9wID0gdHkgKyAncHgnO1xyXG4gICAgc1szXS5sZWZ0ID0gdGhpcy5zYSArIFwicHhcIjtcclxuICAgIHNbM10ud2lkdGggPSB3ICsgXCJweFwiO1xyXG4gICAgc1s0XS5sZWZ0ID0gdGhpcy5zYSArIFwicHhcIjtcclxuICAgIHNbNF0ud2lkdGggPSB3ICsgXCJweFwiO1xyXG4gICAgc1s1XS5sZWZ0ID0gdGhpcy5zYSArIDMgKyBcInB4XCI7XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUZXh0SW5wdXQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlICE9PSB1bmRlZmluZWQgPyBvLnZhbHVlIDogJyc7XHJcbiAgICAgICAgdGhpcy5wbGFjZUhvbGRlciA9IG8ucGxhY2VIb2xkZXIgfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZSA9IG8uZWRpdCAhPT0gdW5kZWZpbmVkID8gby5lZGl0IDogdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy8gdGV4dFxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonICsgKHRoaXMuaC0yKSArICdweDsgY29sb3I6JyArIGNjLnRleHQgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5iYWNrICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAncG9zaXRpb246YWJzb2x1dGU7IHRvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgcGFkZGluZzowcHggMHB4OyB3aWR0aDowcHg7IGNvbG9yOicgKyBjYy50ZXh0U2VsZWN0ICsgJzsgYmFja2dyb3VuZDonICsgY2Muc2VsZWN0ICsgJzsgYm9yZGVyOm5vbmU7IGJvcmRlci1yYWRpdXM6MHB4OycpO1xyXG5cclxuICAgICAgICAvLyBjdXJzb3JcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgLy8gZmFrZVxyXG4gICAgICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3RvcDoxcHg7IGhlaWdodDonICsgKHRoaXMuaC0yKSArICdweDsgYm9yZGVyOm5vbmU7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOicrY2MuYm9yZGVyKyc7JyApO1xyXG4gICAgICAgIGlmKCB0aGlzLnZhbHVlID09PSAnJyApIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9IHRoaXMucGxhY2VIb2xkZXI7XHJcblxyXG4gICAgICAgIFxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+PSB0aGlzLnNhICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiggbmFtZSA9PT0gJ3RleHQnICkgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgLy9pZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICl7IHJldHVybjt9XHJcblxyXG4gICAgICAgIC8vaWYoIGwueCA+PSB0aGlzLnNhICkgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICAvL2Vsc2UgdGhpcy5jdXJzb3IoKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAwO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RleHQnICkgdGhpcy5jdXJzb3IoJ3RleHQnKTtcclxuICAgICAgICBlbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBJbnB1dCggeCAtIHRoaXMuc2EgLTMsIHRoaXMuaXNEb3duICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgSU5QVVRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBzZWxlY3QgKCBjLCBlLCB3LCB0ICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2EgKyA1O1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAnMXB4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAoIGQgKyBlICkgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzNdLmxlZnQgPSAgKCBkICsgZSApICArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICB3ICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgaWYoIXMpIHJldHVybjtcclxuICAgICAgICBzWzNdLndpZHRoID0gIDAgICsgJ3B4JztcclxuICAgICAgICB0aGlzLmNbM10uaW5uZXJIVE1MID0gJ3QnXHJcbiAgICAgICAgc1s0XS53aWR0aCA9IDAgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSAoIGZvcmNlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWU7IFxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgICAgICBpZih0aGlzLnZhbHVlICE9PSAnJykgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgZWxzZSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBSRVpJU0VcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1s1XS5sZWZ0ID0gdGhpcy5zYSArICdweCc7XHJcbiAgICAgICAgc1s1XS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBUaXRsZSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICBsZXQgcHJlZml4ID0gby5wcmVmaXggfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpyaWdodDsgd2lkdGg6NjBweDsgbGluZS1oZWlnaHQ6JysgKHRoaXMuaC04KSArICdweDsgY29sb3I6JyArIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaCA9PT0gMzEgKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnNbMV0udG9wID0gOCArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSA4ICsgJ3B4JztcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc1sxXS5qdXN0aWZ5Q29udGVudCA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgIC8vc1sxXS50ZXh0QWxpZ24gPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICBzWzFdLmZvbnRXZWlnaHQgPSBvLmZvbnRXZWlnaHQgfHwgJ2JvbGQnO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQuc3Vic3RyaW5nKDAsMSkudG9VcHBlckNhc2UoKSArIHRoaXMudHh0LnN1YnN0cmluZygxKS5yZXBsYWNlKFwiLVwiLCBcIiBcIik7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gcHJlZml4O1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQyKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcbiAgICAgICAgdGhpcy5zWzFdLndpZHRoID0gdGhpcy53ICsgJ3B4JzsgLy8tIDUwICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0ubGVmdCA9IHRoaXMudyArICdweCc7Ly8tICggNTAgKyAyNiApICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q29sb3IoIGMgKSB7XHJcbiAgICAgICAgdGhpcy5zWzFdLmNvbG9yID0gY1xyXG4gICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8ICcnXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMub25BY3RpZiA9IG8ub25BY3RpZiB8fCBmdW5jdGlvbigpe31cclxuXHJcbiAgICAgICAgLy9sZXQgcHJlZml4ID0gby5wcmVmaXggfHwgJyc7XHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICcgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrIGNjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuICAgICAgICAvL3RoaXMuY1syXS5zdHlsZS5jb2xvciA9IHRoaXMuZm9udENvbG9yO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IGJhY2tncm91bmQ6JyArIGNjLmlucHV0QmcgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuaW5wdXRCb3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktN1xyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzWyAnY3Vyc29yJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcbiAgICAgICAgdGhpcy5pc0FjdGlmID0gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3ZlcidcclxuICAgICAgICByZXR1cm4gJzAnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcbiAgICBcclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgLy90aGlzLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgLy90aGlzLnNlbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggIW5hbWUgKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgLy90aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbIG5hbWUtMiBdO1xyXG4gICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJyk7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDMgOiAyIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMucmVzZXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhcHBseSAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8ICcnO1xyXG5cclxuICAgICAgICBpZiggdiAhPT0gdGhpcy52YWx1ZSApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSggMyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0xICkgdGhpcy5pc0FjdGlmID0gZmFsc2U7O1xyXG5cclxuICAgICAgICAgICAgaWYoIG49PT0zICl7IFxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzQWN0aWYgKXsgdGhpcy5pc0FjdGlmID0gdHJ1ZTsgbj00OyB0aGlzLm9uQWN0aWYoIHRoaXMgKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7IHRoaXMuaXNBY3RpZiA9IGZhbHNlOyB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MiAmJiB0aGlzLmlzQWN0aWYgKSBuID0gNDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYWN0aW9uOyBicmVhazsgLy8gYWN0aWZcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gKHRoaXMuc2EgKyA0MCkgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4J1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICh0aGlzLnNhKzgpICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBGaWxlcyB9IGZyb20gJy4uL2NvcmUvRmlsZXMuanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBCaXRtYXAgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMucmVmVGV4dHVyZSA9IG8udGV4dHVyZSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcblxyXG5cclxuXHJcbiAgICAgICAgY29uc3QgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICcgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYnV0dG9uQm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6MTVweDsgd2lkdGg6MzBweDsgbGVmdDoxMHB4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IGJhY2tncm91bmQ6JyArIGNjLmlucHV0QmcgKyAnOyBib3JkZXJDb2xvcjonICsgY2MuaW5wdXRCb3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2xvYWQnIF0sIGZpbGw6Y2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IDFcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuICAgICAgICBpZiggbC54ID4gdGhpcy5zYSAmJiBsLnggPCB0aGlzLnNhKzMwICkgcmV0dXJuICdvdmVyJztcclxuICAgICAgICByZXR1cm4gJzAnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcbiAgICBcclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgLy90aGlzLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ292ZXInICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgICAgICBGaWxlcy5sb2FkKCB7IGNhbGxiYWNrOnRoaXMuY2hhbmdlQml0bWFwLmJpbmQodGhpcykgfSApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy90aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbIG5hbWUtMiBdO1xyXG4gICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBjaGFuZ2VCaXRtYXAoIGltZywgZm5hbWUgKXtcclxuXHJcbiAgICAgICAgaWYoIGltZyApe1xyXG4gICAgICAgICAgICB0aGlzLmltZyA9IGltZ1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCBmbmFtZSApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBudWxsXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHkoICdudWxsJyApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhcHBseSAoIHYgKSB7XHJcblxyXG4gICAgICAgIHYgPSB2IHx8ICcnO1xyXG5cclxuICAgICAgICBpZiggdiAhPT0gdGhpcy52YWx1ZSApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pbWcgIT09IG51bGwgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLm9iamVjdExpbmsgIT09IG51bGwgKSB0aGlzLm9iamVjdExpbmtbIHRoaXMudmFsIF0gPSB2XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5jYWxsYmFjayApIHRoaXMuY2FsbGJhY2soIHRoaXMudmFsdWUsIHRoaXMuaW1nLCB0aGlzLm5hbWUgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSggMyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdCAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ID0gblxyXG5cclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHQ7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOyAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhazsgLy8gb3ZlclxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhazsgLy8gYWN0aWZcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdGhpcy5pc0FjdGlmID8gNCA6IDEgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCAoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIHNbMl0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4JztcclxuICAgICAgICBzWzNdLndpZHRoID0gKHRoaXMuc2IgLSA0MCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ubGVmdCA9ICh0aGlzLnNhKzgpICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG59IiwiLy9pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0b3IgZXh0ZW5kcyBCdXR0b24ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgPT09IHVuZGVmaW5lZCApIG8uc2VsZWN0YWJsZSA9IHRydWVcclxuICAgICAgICBzdXBlciggbyApO1xyXG4gICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbSBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLnAgPSAxMDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudHh0O1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5pdHlwZSA9IG8uaXR5cGUgfHwgJ25vbmUnO1xyXG4gICAgICAgIHRoaXMudmFsID0gdGhpcy5pdHlwZTtcclxuXHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IHRoaXMuc3Znc1sgdGhpcy5pdHlwZSBdO1xyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTc7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAncGF0aCcsIHRoaXMuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgbGVmdDo1cHg7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5ncmFwaCwgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc1sxXS5tYXJnaW5MZWZ0ID0gMjAgKyAncHgnO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG5cclxuICAgICAgICAvL3VwID0gdGhpcy5tb2RlcyggdGhpcy5pc0Rvd24gPyAzIDogMiwgbmFtZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1VJICkgdGhpcy5tYWluLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkKCB0cnVlICk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdXQgKCkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgzKTtcclxuICAgICAgICBlbHNlIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdWlvdmVyICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoNCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMik7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8qclNpemUgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgfSovXHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdHVzICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IG47XHJcbiAgICAgICAgICAgIGxldCBzID0gdGhpcy5zLCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zdGF0dXMgPSAxOyBzWzFdLmNvbG9yID0gY2MudGV4dDsgc1swXS5iYWNrZ3JvdW5kID0gJ25vbmUnOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zdGF0dXMgPSAyOyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLnN0YXR1cyA9IDM7IHNbMV0uY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzWzBdLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB0aGlzLnN0YXR1cyA9IDQ7IHNbMV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1swXS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgIC8vIHJldHVybiB0aGlzLm1vZGUoIDEgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWQgKCBiICl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0ID0gYiB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcydcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnXHJcblxyXG5leHBvcnQgY2xhc3MgR3JpZCBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApO1xyXG5cclxuICAgICAgICAvKnRoaXMudmFsdWVzID0gby52YWx1ZXMgfHwgW107XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgdGhpcy52YWx1ZXMgPT09ICdzdHJpbmcnICkgdGhpcy52YWx1ZXMgPSBbIHRoaXMudmFsdWVzIF07Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIG8udmFsdWVzICl7XHJcbiAgICAgICAgICAgIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBTdHJpbmcgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gWyBvLnZhbHVlcyBdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZk9iamVjdCA9IG8udmFsdWVzXHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy52YWx1ZXMucHVzaCggZyApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoO1xyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IG51bGw7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cclxuICAgICAgICB0aGlzLmlzU2VsZWN0YWJsZSA9IG8uc2VsZWN0YWJsZSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3BhY2VzID0gby5zcGFjZXMgfHwgWyBjYy5zeCwgY2Muc3kgXVxyXG4gICAgICAgIHRoaXMuYnNpemUgPSBvLmJzaXplIHx8IFsgOTAsIHRoaXMuaCBdO1xyXG5cclxuICAgICAgICB0aGlzLmJzaXplTWF4ID0gdGhpcy5ic2l6ZVswXVxyXG5cclxuICAgICAgICB0aGlzLnRtcCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ3JpZCA9IFsgMiwgTWF0aC5yb3VuZCggdGhpcy5sbmcgKiAwLjUgKSBdO1xyXG5cclxuICAgICAgICB0aGlzLmggPSAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuYnNpemVbMV0gKSArICggdGhpcy5ncmlkWzFdICogdGhpcy5zcGFjZXNbMV0gKSAvLysgNCAtICh0aGlzLm10b3AqMikgLy8rICh0aGlzLnNwYWNlc1sxXSAtIHRoaXMubXRvcCk7XHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICd0YWJsZScsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IHRvcDonKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7IGhlaWdodDphdXRvOyBib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7IGJvcmRlcjpub25lOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdLTIpKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICd0YWJsZScsIHRoaXMuY3NzLmJhc2ljICsgJ3dpZHRoOjEwMCU7IGJvcmRlci1zcGFjaW5nOiAnKyh0aGlzLnNwYWNlc1swXS0yKSsncHggJysodGhpcy5zcGFjZXNbMV0pKydweDsgYm9yZGVyOm5vbmU7JyApO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZCwgdGQsIHRyLCBzZWw7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IFtdOyBcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFggPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFkgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdHIgPSB0aGlzLmNbMl0uaW5zZXJ0Um93KCk7XHJcbiAgICAgICAgICAgIHRyLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6bm9uZTsnO1xyXG4gICAgICAgICAgICBmb3IoIGxldCBqID0gMDsgaiA8IHRoaXMuZ3JpZFswXTsgaisrICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGQgPSB0ci5pbnNlcnRDZWxsKCk7XHJcbiAgICAgICAgICAgICAgICB0ZC5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy52YWx1ZXNbbl0gKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MuYnV0dG9uICsgJ3Bvc2l0aW9uOnN0YXRpYzsgdG9wOjFweDsgd2lkdGg6Jyt0aGlzLmJzaXplWzBdKydweDsgaGVpZ2h0OicrKHRoaXMuYnNpemVbMV0tMikrJ3B4OyBib3JkZXI6JytjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBsZWZ0OmF1dG87IHJpZ2h0OmF1dG87IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JztcclxuICAgICAgICAgICAgICAgICAgICBiLnN0eWxlLmJhY2tncm91bmQgPSBzZWwgPyBjYy5zZWxlY3QgOiBjYy5idXR0b247XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgIGIuaW5uZXJIVE1MID0gdGhpcy52YWx1ZXNbbl07XHJcbiAgICAgICAgICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoIGIgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25zLnB1c2goYilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXQucHVzaCgxKVxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApXHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3MudHh0ICsgJ3Bvc2l0aW9uOnN0YXRpYzsgd2lkdGg6Jyt0aGlzLmJzaXplWzBdKydweDsgaGVpZ2h0OicrdGhpcy5ic2l6ZVsxXSsncHg7IHRleHQtYWxpZ246Y2VudGVyOyBsZWZ0OmF1dG87IHJpZ2h0OmF1dG87IGJhY2tncm91bmQ6bm9uZTsnXHJcbiAgICAgICAgICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoIGIgKVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZihqPT09MCkgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpyaWdodDsnO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBiLnN0eWxlLmNzc1RleHQgKz0gJ2Zsb2F0OmxlZnQ7JztcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBuKys7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuIC0xO1xyXG5cclxuICAgICAgICBsLnkgKz0gdGhpcy5tdG9wXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IHR4ID0gdGhpcy50bXBYO1xyXG4gICAgICAgIGxldCB0eSA9IHRoaXMudG1wWTtcclxuXHJcbiAgICAgICAgbGV0IGlkID0gLTE7XHJcbiAgICAgICAgbGV0IGMgPSAtMTtcclxuICAgICAgICBsZXQgbGluZSA9IC0xO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5ncmlkWzBdO1xyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICBcdGlmKCBsLnggPiB0eFtpXVswXSAmJiBsLnggPCB0eFtpXVsxXSApIGMgPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaSA9IHRoaXMuZ3JpZFsxXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0eVtpXVswXSAmJiBsLnkgPCB0eVtpXVsxXSApIGxpbmUgPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoYyE9PS0xICYmIGxpbmUhPT0tMSl7XHJcbiAgICAgICAgICAgIGlkID0gYyArIChsaW5lKjIpO1xyXG4gICAgICAgICAgICBpZihpZD50aGlzLmxuZy0xKSBpZCA9IC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgdGhpcy5zZW5kKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIHRoaXMucmVzIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFx0dXAgPSB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb2RlcyAoIE4gPSAxLCBpZCA9IC0xICkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nLCB3LCBuLCByID0gZmFsc2VcclxuXHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cclxuICAgICAgICAgICAgbiA9IE5cclxuICAgICAgICAgICAgdyA9IHRoaXMuaXNTZWxlY3RhYmxlID8gdGhpcy52YWx1ZXNbIGkgXSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiggaSA9PT0gaWQgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB3ICYmIG4gPT09IDIgKSBuID0gMyBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG4gPSAxXHJcbiAgICAgICAgICAgICAgICBpZiggdyApIG4gPSA0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGUoIG4sIGkgKSApIHIgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4sIGlkICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLmJ1dHRvbnNcclxuICAgICAgICBsZXQgaSA9IGlkXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRbaWRdICE9PSBuICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaWRdID0gbjtcclxuICAgICAgICBcclxuICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiBzW2ldLnN0eWxlLmNvbG9yID0gY2MudGV4dDsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyb2ZmOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgbGFiZWwgKCBzdHJpbmcsIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS50ZXh0Q29udGVudCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaWNvbiAoIHN0cmluZywgeSwgbiApIHtcclxuXHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLnN0eWxlLnBhZGRpbmcgPSAoIHkgfHwgMCApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0VyAoKSB7XHJcblxyXG4gICAgICAgIGxldCB2dyA9IHRoaXMuc3BhY2VzWzBdKjMgKyB0aGlzLmJzaXplTWF4KjIsIHJ6ID0gZmFsc2U7XHJcbiAgICAgICAgaWYoIHZ3ID4gdGhpcy53ICkge1xyXG4gICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gKCB0aGlzLnctKHRoaXMuc3BhY2VzWzBdKjMpICkgKiAwLjU7XHJcbiAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggdGhpcy5ic2l6ZVswXSAhPT0gdGhpcy5ic2l6ZU1heCApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnNpemVbMF0gPSB0aGlzLmJzaXplTWF4O1xyXG4gICAgICAgICAgICAgICAgcnogPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIXJ6ICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuYnV0dG9ucy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmJ1dHRvbnNbaV0uc3R5bGUud2lkdGggPSB0aGlzLmJzaXplWzBdICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnRlc3RXKCk7XHJcblxyXG4gICAgICAgIGxldCBuID0gMCwgYiwgbWlkO1xyXG5cclxuICAgICAgICB0aGlzLnRtcFggPSBbXTtcclxuICAgICAgICB0aGlzLnRtcFkgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgaWYoaj09PTApe1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgLSAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLXRoaXMuYnNpemVbMF0sIG1pZCBdICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtaWQgPSAoIHRoaXMudyowLjUgKSArICggdGhpcy5zcGFjZXNbMF0qMC41ICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRtcFgucHVzaCggWyBtaWQsIG1pZCt0aGlzLmJzaXplWzBdIF0gKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1pZCA9IHRoaXMuc3BhY2VzWzFdO1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZFsxXTsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRtcFkucHVzaCggWyBtaWQsIG1pZCArIHRoaXMuYnNpemVbMV0gXSApO1xyXG4gICAgICAgICAgICBtaWQgKz0gdGhpcy5ic2l6ZVsxXSArIHRoaXMuc3BhY2VzWzFdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFkMkQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgLy90aGlzLm1hcmdpbiA9IDE1O1xyXG4gICAgICAgIHRoaXMucG9zID0gbmV3IFYyKDAsMCk7XHJcbiAgICAgICAgdGhpcy5tYXhQb3MgPSA5MFxyXG5cclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMubWluID0gby5taW4gPT09IHVuZGVmaW5lZCA/IC0xIDogby5taW47XHJcbiAgICAgICAgdGhpcy5tYXggPSBvLm1heCA9PT0gdW5kZWZpbmVkID8gMSA6IG8ubWF4O1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gKHRoaXMubWF4IC0gdGhpcy5taW4pKjAuNTsgIFxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gMDtcclxuXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5yYW5nZSlcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIFxyXG5cclxuXHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IDIgOiBvLnByZWNpc2lvbjtcclxuXHJcbiAgICAgICAgLyp0aGlzLmJvdW5kcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuYm91bmRzLngxID0gby54MSB8fCAtMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MiA9IG8ueDIgfHwgMTtcclxuICAgICAgICB0aGlzLmJvdW5kcy55MSA9IG8ueTEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTIgPSBvLnkyIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMubGVycFggPSB0aGlzLmxlcnAoIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiAsIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiApO1xyXG4gICAgICAgIHRoaXMubGVycFkgPSB0aGlzLmxlcnAoIHRoaXMubWFyZ2luLCB0aGlzLncgLSB0aGlzLm1hcmdpbiAsIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiApO1xyXG5cclxuICAgICAgICB0aGlzLmFsZXJwWCA9IHRoaXMubGVycCggdGhpcy5ib3VuZHMueDEsIHRoaXMuYm91bmRzLngyLCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gKTtcclxuICAgICAgICB0aGlzLmFsZXJwWSA9IHRoaXMubGVycCggdGhpcy5ib3VuZHMueTEsIHRoaXMuYm91bmRzLnkyLCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gKTsqL1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gKCBBcnJheS5pc0FycmF5KCBvLnZhbHVlICkgJiYgby52YWx1ZS5sZW5ndGggPT0gMiApID8gby52YWx1ZSA6IFsgMCwgMCBdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsgJ3B4JztcclxuXHJcbiAgICAgICAgLy8gVGl0bGVcclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3RoaXMudG9wIC09IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cclxuICAgICAgICAvLyBWYWx1ZVxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyAoIHRoaXMuaCAtIDIwICkgKyAncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicgKyBjYy50ZXh0ICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gUGFkXHJcblxyXG4gICAgICAgIGxldCBwYWQgPSB0aGlzLmdldFBhZDJkKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5iYWNrLCAwIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMSApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLmJhY2ssIDIgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MudGV4dCwgNCApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggcGFkLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gcGFkXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSgpXHJcblxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG5cclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGlmKCBsLnkgPD0gdGhpcy5jWyAxIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoIGwueSA+IHRoaXMuaCAtIHRoaXMuY1sgMiBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ3BhZCc7XHJcblxyXG4gICAgICAgIC8qaWYoICggbC54ID49IHRoaXMubWFyZ2luICkgJiYgKCBsLnggPD0gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSAmJiAoIGwueSA+PSB0aGlzLnRvcCArIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPD0gdGhpcy50b3AgKyB0aGlzLncgLSB0aGlzLm1hcmdpbiApICkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BhZCc7XHJcbiAgICAgICAgfSovXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9yZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy50ZXN0Wm9uZShlKSA9PT0gJ3BhZCcgKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgeCA9ICh0aGlzLncqMC41KSAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKVxyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCApXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGxldCByID0gMjU2IC8gdGhpcy5kaWFtXHJcblxyXG4gICAgICAgIHggPSAtKHgqcilcclxuICAgICAgICB5ID0gLSh5KnIpXHJcblxyXG4gICAgICAgIHggPSBUb29scy5jbGFtcCggeCwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcbiAgICAgICAgeSA9IFRvb2xzLmNsYW1wKCB5LCAtdGhpcy5tYXhQb3MsIHRoaXMubWF4UG9zIClcclxuXHJcbiAgICAgICAgLy9sZXQgeCA9IGUuY2xpZW50WCAtIHRoaXMuem9uZS54O1xyXG4gICAgICAgIC8vbGV0IHkgPSBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMudG9wO1xyXG5cclxuICAgICAgICAvKmlmKCB4IDwgdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHggPiB0aGlzLncgLSB0aGlzLm1hcmdpbiApIHggPSB0aGlzLncgLSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA8IHRoaXMubWFyZ2luICkgeSA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB5ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB5ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47Ki9cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh4LHkpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zKCBbIHggLCB5IF0gKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY21vZGUgPT09IG1vZGUgKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaCggbW9kZSApe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5iYWNrLCAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5idXR0b24sIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrLCAzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5iYWNrb2ZmLCAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2ZpbGwnLCBjYy5vdmVyb2ZmLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFja29mZiwgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0U2VsZWN0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICAvL2lmKCB1cCA9PT0gdW5kZWZpbmVkICkgdXAgPSB0cnVlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU1ZHKCk7XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTVkcoKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5tb2RlbCA9PSAxICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kxJywgdGhpcy5wb3MueSwgMiApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneTInLCB0aGlzLnBvcy55LCAyICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDEnLCB0aGlzLnBvcy54LCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd4MicsIHRoaXMucG9zLngsIDMgKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB0aGlzLnBvcy54LCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgdGhpcy5wb3MueSwgNCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRQb3MgKCBwICkge1xyXG5cclxuICAgICAgICAvL2lmKCBwID09PSB1bmRlZmluZWQgKSBwID0gWyB0aGlzLncgLyAyLCB0aGlzLncgLyAyIF07XHJcblxyXG4gICAgICAgIHRoaXMucG9zLnNldCggcFswXSsxMjggLCBwWzFdKzEyOCApO1xyXG5cclxuICAgICAgICBsZXQgciA9IDEvdGhpcy5tYXhQb3NcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9ICgocFswXSpyKSp0aGlzLnJhbmdlKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApO1xyXG4gICAgICAgIHRoaXMudmFsdWVbMV0gPSAoKHBbMV0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2LCB1cCA9IGZhbHNlICkge1xyXG5cclxuICAgICAgICBpZiggdiA9PT0gdW5kZWZpbmVkICkgdiA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8qaWYgKCB2WzBdIDwgdGhpcy5ib3VuZHMueDEgKSB2WzBdID0gdGhpcy5ib3VuZHMueDE7XHJcbiAgICAgICAgaWYgKCB2WzBdID4gdGhpcy5ib3VuZHMueDIgKSB2WzBdID0gdGhpcy5ib3VuZHMueDI7XHJcbiAgICAgICAgaWYgKCB2WzFdIDwgdGhpcy5ib3VuZHMueTEgKSB2WzFdID0gdGhpcy5ib3VuZHMueTE7XHJcbiAgICAgICAgaWYgKCB2WzFdID4gdGhpcy5ib3VuZHMueTIgKSB2WzFdID0gdGhpcy5ib3VuZHMueTI7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZVswXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzBdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gTWF0aC5taW4oIHRoaXMubWF4LCBNYXRoLm1heCggdGhpcy5taW4sIHZbMV0gKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoICgodGhpcy52YWx1ZVswXS90aGlzLnJhbmdlKSp0aGlzLm1heFBvcykrMTI4ICAsICgodGhpcy52YWx1ZVsxXS90aGlzLnJhbmdlKSp0aGlzLm1heFBvcykrMTI4IClcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnBvcylcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHVwICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qbGVycCggczEsIHMyLCBkMSwgZDIsIGMgPSB0cnVlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9ICggZDIgLSBkMSApIC8gKCBzMiAtIHMxICk7XHJcblxyXG4gICAgICAgIHJldHVybiBjID8gKCB2ICkgPT4geyBcclxuICAgICAgICAgICAgcmV0dXJuICggKCB2IDwgczEgPyBzMSA6IHYgPiBzMiA/IHMyIDogdiApIC0gczEgKSAqIHMgKyBkMVxyXG4gICAgICAgIH0gOiAoIHYgKSA9PiB7IFxyXG4gICAgICAgICAgcmV0dXJuICggdiAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9XHJcblxyXG4gICAgfSovXHJcblxyXG59IiwiLy8gcHJvdG8vVHJlZUxpc3QuanNcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4uL2NvcmUvUm9vdHMuanNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUcmVlTGlzdCBleHRlbmRzIFByb3RvIHtcclxuXHRjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuXHRcdC8vIEFQSSBww7pibGljYSBlc3BlcmFkYTpcclxuXHRcdC8vIG8udHJlZSAob2JqL2FycmF5KSwgby52YWx1ZSAoYXJyYXkpXHJcblx0XHQvLyBvLmZvY3VzZWQgKGJvb2wpLCBvLmZvY3VzUGF0aCAoYXJyYXkpLCBvLmZvY3VzTGV2ZWwgKG51bWJlcilcclxuXHRcdC8vIG8udGFiSW5kZXgsIG8uaXRlbUluZGV4LCBvLm9uQ2hhbmdlIChmbilcclxuXHRcdG8uc2VsZWN0YWJsZSA9IHRydWU7XHJcblx0XHRvLm5hbWUgPSBvLm5hbWUgfHwgXCJUcmVlTGlzdFwiO1xyXG5cclxuXHRcdHN1cGVyKG8pO1xyXG5cdFx0dGhpcy5lbmFibGVIb3ZlciA9IG8uZW5hYmxlSG92ZXIgIT09IGZhbHNlO1xyXG5cclxuXHRcdC8vIERhdG9zICYgZXN0YWRvXHJcblx0XHR0aGlzLnRyZWUgPSBvLnRyZWUgfHwge307XHJcblx0XHR0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheShvLnZhbHVlKSA/IG8udmFsdWUuc2xpY2UoKSA6IFtdO1xyXG5cdFx0dGhpcy5mb2N1c2VkID0gISFvLmZvY3VzZWQ7XHJcblx0XHR0aGlzLmZvY3VzUGF0aCA9IEFycmF5LmlzQXJyYXkoby5mb2N1c1BhdGgpID8gby5mb2N1c1BhdGguc2xpY2UoKSA6IFtdO1xyXG5cdFx0dGhpcy5mb2N1c0xldmVsID0gdHlwZW9mIG8uZm9jdXNMZXZlbCA9PT0gXCJudW1iZXJcIiA/IG8uZm9jdXNMZXZlbCA6IC0xO1xyXG5cclxuXHRcdHRoaXMudGFiSW5kZXggPSBvLnRhYkluZGV4ID8/IG51bGw7XHJcblx0XHR0aGlzLml0ZW1JbmRleCA9IG8uaXRlbUluZGV4ID8/IG51bGw7XHJcblxyXG5cdFx0Ly8gQ2FsbGJhY2tcclxuXHRcdHRoaXMuY2hhbmdlQ2IgPVxyXG5cdFx0XHR0eXBlb2Ygby5vbkNoYW5nZSA9PT0gXCJmdW5jdGlvblwiID8gby5vbkNoYW5nZSA6ICgpID0+IHt9O1xyXG5cclxuXHRcdC8vIExheW91dCBpbnRlcm5vIC8gcHVibGljYWNpw7NuIGRlIGFsdHVyYVxyXG5cdFx0dGhpcy5saW5lSCA9IHRoaXMuaDsgLy8gYWx0byBkZSBVTkEgZmlsYVxyXG5cdFx0dGhpcy5sZXZlbEdhcCA9IHRoaXMuY29sb3JzLnN5IHx8IDI7IC8vIHNlcGFyYWNpw7NuIHZlcnRpY2FsIGVudHJlIG5pdmVsZXNcclxuXHRcdHRoaXMubGVhZk1heCA9IDA7IC8vIHNlIGNhbGN1bGEgZW4gclNpemUoKVxyXG5cclxuXHRcdC8vIE1vZGVsbyB2aXN1YWxcclxuXHRcdHRoaXMubGV2ZWxzID0gW107IC8vIFt7dHlwZTonbWFwJ3wnbGlzdCcsIGl0ZW1zOlt7a2V5LGxhYmVsLHpvbmV9XSwgem9uZTp7eCx5LHcsaH19Li4uXVxyXG5cdFx0dGhpcy5pdGVtc0RvbSA9IFtdOyAvLyBlc3Blam8gRE9NIHBvciBuaXZlbFxyXG5cdFx0dGhpcy5ob3ZlciA9IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHJcblx0XHQvLyDwn5S4IE5VRVZPOiByZWNvcmRhciBsYSDDumx0aW1hIGhvamEgc2VsZWNjaW9uYWRhIChwZXJzaXN0ZW50ZSlcclxuXHRcdHRoaXMubGFzdExlYWYgPSB7IHBhcmVudFBhdGg6IFtdLCBrZXk6IG51bGwgfTsgLy8gcGFyZW50UGF0aCBlcyBsYSBydXRhIGhhc3RhIGVsIG1hcGEgcGFkcmVcclxuXHJcblx0XHQvLyBDb250ZW5lZG9yIGludGVybm8gKGFic29sdXRvKVxyXG5cdFx0dGhpcy5jWzJdID0gdGhpcy5kb20oXHJcblx0XHRcdFwiZGl2XCIsXHJcblx0XHRcdHRoaXMuY3NzLmJhc2ljICsgXCJsZWZ0OjA7IHRvcDowOyB3aWR0aDoxMDAlOyBoZWlnaHQ6MTAwJTtcIlxyXG5cdFx0KTtcclxuXHRcdHRoaXMuc1syXSA9IHRoaXMuY1syXS5zdHlsZTtcclxuXHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHJcblx0XHQvLyBTaSBlbCB2YWxvciBpbmljaWFsIHlhIGFwdW50YSBhIHVuYSBob2phIHbDoWxpZGEsIHJlY29yZGFyIGVzYSBob2phXHJcblx0XHR0aGlzLl9tYXliZVVwZGF0ZUxhc3RMZWFmRnJvbVZhbHVlKCk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IEhlbHBlcnMgZGUgdGlwbyA9PT09PT09XHJcblx0c3RhdGljIGlzTWFwKG5vZGUpIHtcclxuXHRcdHJldHVybiBub2RlICYmIHR5cGVvZiBub2RlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG5vZGUpO1xyXG5cdH1cclxuXHRzdGF0aWMgaXNMaXN0KG5vZGUpIHtcclxuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KG5vZGUpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBSZWNvcnJpZG8gZGUgZGF0b3MgPT09PT09PVxyXG5cdGdldE5vZGVBdFBhdGgocGF0aCkge1xyXG5cdFx0bGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcblx0XHRcdFx0aWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgcGF0aFtpXSkpXHJcblx0XHRcdFx0XHRyZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG5cdFx0XHRcdG5vZGUgPSBub2RlW3BhdGhbaV1dO1xyXG5cdFx0XHR9IGVsc2UgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkge1xyXG5cdFx0XHRcdC8vIExsZWdhbW9zIGEgdW5hIGxpc3RhOiB5YSBubyBoYXkgbcOhcyBjbGF2ZXMgdsOhbGlkYXNcclxuXHRcdFx0XHRpZiAoaSA8IHBhdGgubGVuZ3RoKSByZXR1cm4geyBub2RlLCBkZXB0aDogaSB9O1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiB7IG5vZGU6IG51bGwsIGRlcHRoOiBpIH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB7IG5vZGUsIGRlcHRoOiBwYXRoLmxlbmd0aCB9O1xyXG5cdH1cclxuXHJcblx0Ly8gQXV0b2NvbXBsZXRhcjogYmFqYSBwb3IgcHJpbWVyYXMgY2xhdmVzIGRlIGNhZGEgbWFwYSBoYXN0YSBhbGNhbnphciB1bmEgbGlzdGFcclxuXHRhdXRvQ29tcGxldGVUb0xlYWYoYmFzZVBhdGgpIHtcclxuXHRcdGxldCB7IG5vZGUgfSA9IHRoaXMuZ2V0Tm9kZUF0UGF0aChiYXNlUGF0aCk7XHJcblx0XHRjb25zdCBwYXRoID0gYmFzZVBhdGguc2xpY2UoKTtcclxuXHRcdHdoaWxlIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcblx0XHRcdGlmICgha2V5cy5sZW5ndGgpIGJyZWFrO1xyXG5cdFx0XHRjb25zdCBrMCA9IGtleXNbMF07XHJcblx0XHRcdHBhdGgucHVzaChrMCk7XHJcblx0XHRcdG5vZGUgPSBub2RlW2swXTtcclxuXHRcdH1cclxuXHRcdC8vIFNpIHRlcm1pbmEgZW4gbGlzdGEsIE5PIGFncmVnYSB1biDDrXRlbSBmaW5hbCBkZSBsYSBob2phXHJcblx0XHRyZXR1cm4gcGF0aDtcclxuXHR9XHJcblxyXG5cdC8vIFJ1dGEgYWN0aXZhIChmb2N1c1BhdGggc2kgZm9jdXNlZCwgc2lubyB2YWx1ZSlcclxuXHRnZXRBY3RpdmVQYXRoKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZm9jdXNlZCA/IHRoaXMuZm9jdXNQYXRoIDogdGhpcy52YWx1ZTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gVGFtYcOxbyBkZSBob2phIG3DoXhpbW8gKHBhcmEgbGF5b3V0IGVzdGFibGUpID09PT09PT1cclxuXHRjb21wdXRlTGVhZk1heChub2RlID0gdGhpcy50cmVlKSB7XHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheShub2RlKSkgcmV0dXJuIG5vZGUubGVuZ3RoO1xyXG5cdFx0aWYgKCFub2RlIHx8IHR5cGVvZiBub2RlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gMDtcclxuXHRcdGxldCBtID0gMDtcclxuXHRcdGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG5cdFx0XHRtID0gTWF0aC5tYXgobSwgdGhpcy5jb21wdXRlTGVhZk1heChub2RlW2tdKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gQ29uc3RydWNjacOzbiBkZSBuaXZlbGVzIChtb2RlbG8gbMOzZ2ljbykgPT09PT09PVxyXG5cdGJ1aWxkTGV2ZWxzKCkge1xyXG5cdFx0dGhpcy5sZXZlbHMubGVuZ3RoID0gMDtcclxuXHRcdGNvbnN0IGFjdGl2ZVBhdGggPSB0aGlzLmdldEFjdGl2ZVBhdGgoKTtcclxuXHJcblx0XHRsZXQgbm9kZSA9IHRoaXMudHJlZTtcclxuXHRcdGxldCBsZXZlbCA9IDA7XHJcblxyXG5cdFx0d2hpbGUgKG5vZGUpIHtcclxuXHRcdFx0aWYgKFRyZWVMaXN0LmlzTWFwKG5vZGUpKSB7XHJcblx0XHRcdFx0Ly8gTml2ZWwgaW50ZXJtZWRpbzogY2xhdmVzIGRlbCBtYXBhIChob3Jpem9udGFsKVxyXG5cdFx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcclxuXHRcdFx0XHRpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuXHRcdFx0XHR0aGlzLmxldmVscy5wdXNoKHtcclxuXHRcdFx0XHRcdHR5cGU6IFwibWFwXCIsXHJcblx0XHRcdFx0XHRpdGVtczoga2V5cy5tYXAoKGspID0+ICh7XHJcblx0XHRcdFx0XHRcdGtleTogayxcclxuXHRcdFx0XHRcdFx0bGFiZWw6IGssXHJcblx0XHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCB9LFxyXG5cdFx0XHRcdFx0fSkpLFxyXG5cdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiB0aGlzLmxpbmVIIH0sXHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IG5leHRLZXkgPSBhY3RpdmVQYXRoW2xldmVsXTtcclxuXHRcdFx0XHRpZiAoIW5leHRLZXkgfHwgIW5vZGUuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIGJyZWFrO1xyXG5cdFx0XHRcdG5vZGUgPSBub2RlW25leHRLZXldO1xyXG5cdFx0XHR9IGVsc2UgaWYgKFRyZWVMaXN0LmlzTGlzdChub2RlKSkge1xyXG5cdFx0XHRcdC8vIE5pdmVsIGhvamE6IGxpc3RhIHZlcnRpY2FsXHJcblx0XHRcdFx0Y29uc3QgaXRlbXMgPSBub2RlLm1hcCgobGFiZWwpID0+ICh7XHJcblx0XHRcdFx0XHRrZXk6IGxhYmVsLFxyXG5cdFx0XHRcdFx0bGFiZWwsXHJcblx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAgfSxcclxuXHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0Y29uc3QgaExpc3QgPSBNYXRoLm1heChpdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCkgKiB0aGlzLmxpbmVIO1xyXG5cdFx0XHRcdHRoaXMubGV2ZWxzLnB1c2goe1xyXG5cdFx0XHRcdFx0dHlwZTogXCJsaXN0XCIsXHJcblx0XHRcdFx0XHRpdGVtcyxcclxuXHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogaExpc3QgfSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0XHRsZXZlbCsrO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBMYXlvdXQgKHpvbmFzICYgRE9NKSA9PT09PT09XHJcblx0bGF5b3V0TGV2ZWxzKCkge1xyXG5cdFx0Y29uc3QgY29udGVudFggPSAodGhpcy5zYSB8fCAxMDApICsgODsgLy8gY29sdW1uYSBkZSBsYWJlbCArIHBhZGRpbmdcclxuXHRcdGNvbnN0IHBhZFJpZ2h0ID0gODtcclxuXHRcdGNvbnN0IHcgPSB0aGlzLnpvbmUudyAtIGNvbnRlbnRYIC0gcGFkUmlnaHQ7XHJcblxyXG5cdFx0bGV0IHkgPSAwO1xyXG5cclxuXHRcdC8vIEFqdXN0YXIgaXRlbXNEb20gYSBjYW50aWRhZCBkZSBuaXZlbGVzXHJcblx0XHR3aGlsZSAodGhpcy5pdGVtc0RvbS5sZW5ndGggPCB0aGlzLmxldmVscy5sZW5ndGgpXHJcblx0XHRcdHRoaXMuaXRlbXNEb20ucHVzaChbXSk7XHJcblx0XHRmb3IgKGxldCBMID0gdGhpcy5sZXZlbHMubGVuZ3RoOyBMIDwgdGhpcy5pdGVtc0RvbS5sZW5ndGg7IEwrKykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHRoaXMuaXRlbXNEb21bTF0pXHJcblx0XHRcdFx0aWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5pdGVtc0RvbS5sZW5ndGggPSB0aGlzLmxldmVscy5sZW5ndGg7XHJcblxyXG5cdFx0Zm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG5cdFx0XHRjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuXHRcdFx0aWYgKGx2bC50eXBlID09PSBcIm1hcFwiKSB7XHJcblx0XHRcdFx0Y29uc3QgbiA9IE1hdGgubWF4KDEsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG5cdFx0XHRcdGNvbnN0IGNlbGxXID0gTWF0aC5mbG9vcih3IC8gbik7XHJcblx0XHRcdFx0bHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiB0aGlzLmxpbmVIIH07XHJcblx0XHRcdFx0bGV0IHggPSBjb250ZW50WDtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGx2bC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXQgPSBsdmwuaXRlbXNbaV07XHJcblx0XHRcdFx0XHRpdC56b25lID0geyB4LCB5LCB3OiBjZWxsVywgaDogdGhpcy5saW5lSCB9O1xyXG5cdFx0XHRcdFx0Y29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG5cdFx0XHRcdFx0dGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgXCJtYXBcIik7XHJcblx0XHRcdFx0XHR4ICs9IGNlbGxXO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBlbGltaW5hciBET00gc29icmFudGUgc2kgYW50ZXMgaGFiw61hIG3DoXMgY2VsZGFzXHJcblx0XHRcdFx0dGhpcy5fcHJ1bmVSb3coTCwgbHZsLml0ZW1zLmxlbmd0aCk7XHJcblx0XHRcdFx0eSArPSB0aGlzLmxpbmVIICsgdGhpcy5sZXZlbEdhcDtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBsaXN0YS9ob2phOiByZXNlcnZhciBoIHNlZ8O6biBsZWFmTWF4XHJcblx0XHRcdFx0Y29uc3QgbiA9IGx2bC5pdGVtcy5sZW5ndGg7XHJcblx0XHRcdFx0Y29uc3QgaExpc3QgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuXHRcdFx0XHRsdmwuem9uZSA9IHsgeDogY29udGVudFgsIHksIHcsIGg6IGhMaXN0IH07XHJcblxyXG5cdFx0XHRcdGNvbnN0IHJvd3MgPSBNYXRoLm1heChuLCB0aGlzLmxlYWZNYXgpO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpc1JlYWwgPSBpIDwgbjtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ID0gaXNSZWFsXHJcblx0XHRcdFx0XHRcdD8gbHZsLml0ZW1zW2ldXHJcblx0XHRcdFx0XHRcdDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OiBudWxsLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAgfSxcclxuXHRcdFx0XHRcdFx0ICB9O1xyXG5cdFx0XHRcdFx0aXQuem9uZSA9IHtcclxuXHRcdFx0XHRcdFx0eDogY29udGVudFgsXHJcblx0XHRcdFx0XHRcdHk6IHkgKyBpICogdGhpcy5saW5lSCxcclxuXHRcdFx0XHRcdFx0dyxcclxuXHRcdFx0XHRcdFx0aDogdGhpcy5saW5lSCxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRjb25zdCBkb20gPSB0aGlzLmVuc3VyZUl0ZW1Eb20oTCwgaSk7XHJcblx0XHRcdFx0XHR0aGlzLnBhaW50SXRlbURvbShkb20sIEwsIGksIGl0LCBcImxpc3RcIiwgaXNSZWFsKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGZpbGFzXHJcblx0XHRcdFx0dGhpcy5fcHJ1bmVSb3coTCwgcm93cyk7XHJcblx0XHRcdFx0eSArPSBoTGlzdDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFqdXN0ZXMgZGUgYWx0byBpbnRlcm5vIGRlbCBjb250ZW5lZG9yIHZpc3VhbFxyXG5cdFx0Y29uc3QgdG90YWxIID0geTtcclxuXHRcdHRoaXMuem9uZS5oID0gdG90YWxIICsgdGhpcy5tYXJnaW47XHJcblx0XHR0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy56b25lLmggKyBcInB4XCI7XHJcblx0XHR0aGlzLnNbMl0uaGVpZ2h0ID0gdG90YWxIICsgXCJweFwiO1xyXG5cclxuXHRcdC8vIFB1YmxpY2FyIGFsdG8gdG90YWwgYWwgR1VJIChzdW1hcsOhIHUuaClcclxuXHRcdHRoaXMuX3B1Ymxpc2hIZWlnaHQoKTtcclxuXHR9XHJcblxyXG5cdC8vIEVsaW1pbmEgbm9kb3MgRE9NIHNvYnJhbnRlcyBlbiBsYSBmaWxhIEwgYSBwYXJ0aXIgZGVsIMOtbmRpY2Uga2VlcFxyXG5cdF9wcnVuZVJvdyhMLCBrZWVwKSB7XHJcblx0XHRjb25zdCByb3cgPSB0aGlzLml0ZW1zRG9tW0xdO1xyXG5cdFx0aWYgKCFyb3cpIHJldHVybjtcclxuXHRcdGZvciAobGV0IGogPSBrZWVwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdGNvbnN0IGVsID0gcm93W2pdO1xyXG5cdFx0XHRpZiAoZWwgJiYgZWwucGFyZW50Tm9kZSkgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XHJcblx0XHR9XHJcblx0XHRyb3cubGVuZ3RoID0ga2VlcDtcclxuXHR9XHJcblxyXG5cdGVuc3VyZUl0ZW1Eb20oTCwgaSkge1xyXG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuXHRcdHdoaWxlIChyb3cubGVuZ3RoIDw9IGkpIHJvdy5wdXNoKG51bGwpO1xyXG5cdFx0aWYgKCFyb3dbaV0pIHtcclxuXHRcdFx0Y29uc3QgZGl2ID0gdGhpcy5kb20oXHJcblx0XHRcdFx0XCJkaXZcIixcclxuXHRcdFx0XHRUb29scy5jc3MudHh0ICsgXCJwb3NpdGlvbjphYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6bm9uZTtcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHR0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoZGl2KTtcclxuXHRcdFx0cm93W2ldID0gZGl2O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJvd1tpXTtcclxuXHR9XHJcblxyXG5cdHBhaW50SXRlbURvbShkaXYsIEwsIGksIGl0LCBraW5kLCBpc1JlYWwgPSB0cnVlKSB7XHJcblx0XHRjb25zdCBzID0gZGl2LnN0eWxlO1xyXG5cdFx0Y29uc3QgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcblx0XHQvLyBQb3NpY2nDs25cclxuXHRcdHMubGVmdCA9IGl0LnpvbmUueCArIFwicHhcIjtcclxuXHRcdHMudG9wID0gaXQuem9uZS55ICsgXCJweFwiO1xyXG5cdFx0cy53aWR0aCA9IGl0LnpvbmUudyArIFwicHhcIjtcclxuXHRcdHMuaGVpZ2h0ID0gaXQuem9uZS5oIC0gMiArIFwicHhcIjtcclxuXHJcblx0XHQvLyBUZXh0b1xyXG5cdFx0ZGl2LnRleHRDb250ZW50ID0gaXNSZWFsID8gaXQubGFiZWwgOiBcIlwiO1xyXG5cclxuXHRcdC8vIEVzdGFkb3NcclxuXHRcdGNvbnN0IHNlbGVjdGVkID1cclxuXHRcdFx0aXNSZWFsICYmIHRoaXMudmFsdWVbTF0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLnZhbHVlW0xdID09PSBpdC5rZXk7XHJcblx0XHRjb25zdCBpbkZvY3VzTHZsID0gdGhpcy5mb2N1c2VkICYmIHRoaXMuZm9jdXNMZXZlbCA9PT0gTDtcclxuXHRcdGNvbnN0IGZvY3VzTWF0Y2ggPSBpc1JlYWwgJiYgaW5Gb2N1c0x2bCAmJiB0aGlzLmZvY3VzUGF0aFtMXSA9PT0gaXQua2V5O1xyXG5cdFx0Y29uc3QgaXNIb3ZlciA9XHJcblx0XHRcdHRoaXMuZW5hYmxlSG92ZXIgJiZcclxuXHRcdFx0aXNSZWFsICYmXHJcblx0XHRcdHRoaXMuaG92ZXIubGV2ZWwgPT09IEwgJiZcclxuXHRcdFx0dGhpcy5ob3Zlci5pbmRleCA9PT0gaTtcclxuXHJcblx0XHQvLyDwn5S4IE5VRVZPOiDCv2VzdGEgZmlsYSBlcyBsYSDDumx0aW1hIGhvamEgc2VsZWNjaW9uYWRhP1xyXG5cdFx0bGV0IGlzTGFzdExlYWYgPSBmYWxzZTtcclxuXHRcdGlmIChpc1JlYWwgJiYga2luZCA9PT0gXCJsaXN0XCIgJiYgdGhpcy5sYXN0TGVhZi5rZXkgIT0gbnVsbCkge1xyXG5cdFx0XHQvLyBMYSBob2phIHZpc2libGUgY29ycmVzcG9uZGUgc2kgZWwgcGFkcmUgZGUgZXN0YSBsaXN0YSBjb2luY2lkZSBjb24gcGFyZW50UGF0aCBndWFyZGFkb1xyXG5cdFx0XHQvLyBFbCBwYWRyZSBhY3R1YWwgZXMgdGhpcy52YWx1ZS5zbGljZSgwLCBMKSBjdWFuZG8gbGEgbGlzdGEgZXN0w6EgZGVzcGxlZ2FkYSBwb3IgdmFsdWUvZm9jdXNcclxuXHRcdFx0Y29uc3QgcGFyZW50Tm93ID0gdGhpcy5nZXRBY3RpdmVQYXRoKCkuc2xpY2UoMCwgTCk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLl9wYXRoc0VxdWFsKHBhcmVudE5vdywgdGhpcy5sYXN0TGVhZi5wYXJlbnRQYXRoKSAmJlxyXG5cdFx0XHRcdGl0LmtleSA9PT0gdGhpcy5sYXN0TGVhZi5rZXlcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0aXNMYXN0TGVhZiA9IHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBFc3RpbG9zIGJhc2VcclxuXHRcdHMuYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcblx0XHRzLmNvbG9yID0gY2MudGV4dDtcclxuXHRcdHMuYm9yZGVyID0gXCIxcHggc29saWQgXCIgKyBjYy5ib3JkZXI7XHJcblx0XHRzLnRleHRBbGlnbiA9IGtpbmQgPT09IFwibWFwXCIgPyBcImNlbnRlclwiIDogXCJsZWZ0XCI7XHJcblxyXG5cdFx0Ly8gUHJpb3JpZGFkIHZpc3VhbDpcclxuXHRcdC8vIDEpIHNlbGVjY2lvbmFkbyAoYXp1bClcclxuXHRcdC8vIDIpIMO6bHRpbWEgaG9qYSAobnVldm8gY29sb3IpXHJcblx0XHQvLyAzKSBmb2NvXHJcblx0XHQvLyA0KSBob3ZlclxyXG5cdFx0aWYgKHNlbGVjdGVkKSB7XHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcblx0XHR9IGVsc2UgaWYgKGlzTGFzdExlYWYpIHtcclxuXHRcdFx0Ly8gY29sb3IgZGlzdGludGl2byBwYXJhIFwiw7psdGltYSBob2phXCIgKGFtYXJpbGxvIHN1YXZlKVxyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBcInJnYmEoMjU1LCAyMDAsIDAsIDAuMjUpXCI7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0O1xyXG5cdFx0fSBlbHNlIGlmIChmb2N1c01hdGNoKSB7XHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dE92ZXI7XHJcblx0XHR9IGVsc2UgaWYgKGlzSG92ZXIpIHtcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEZpbGFzIGRlIHBhZGRpbmcgaW52aXNpYmxlcyBlbiBob2phXHJcblx0XHRzLm9wYWNpdHkgPSBpc1JlYWwgPyBcIjFcIiA6IFwiMFwiO1xyXG5cdH1cclxuXHJcblx0X3BhdGhzRXF1YWwoYSwgYikge1xyXG5cdFx0aWYgKCFhIHx8ICFiIHx8IGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IENpY2xvIGRlIHZpZGEgPT09PT09PVxyXG5cdHJTaXplKCkge1xyXG5cdFx0dGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG5cdFx0dGhpcy5idWlsZExldmVscygpO1xyXG5cdFx0dGhpcy5sYXlvdXRMZXZlbHMoKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZSgpIHtcclxuXHRcdHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuXHRcdHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IEludGVyYWNjacOzbiA9PT09PT09XHJcblx0X3RvTG9jYWwoZSkge1xyXG5cdFx0Y29uc3QgbXggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuXHRcdGNvbnN0IG15ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnk7XHJcblx0XHRyZXR1cm4geyB4OiBteCwgeTogbXkgfTtcclxuXHR9XHJcblxyXG5cdF9oaXRUZXN0KG14LCBteSkge1xyXG5cdFx0Zm9yIChsZXQgTCA9IDA7IEwgPCB0aGlzLmxldmVscy5sZW5ndGg7IEwrKykge1xyXG5cdFx0XHRjb25zdCBsdmwgPSB0aGlzLmxldmVsc1tMXTtcclxuXHRcdFx0Y29uc3QgeiA9IGx2bC56b25lOyAvLyB4IHkgdyB5YSBpbmNsdXllbiBjb250ZW50WFxyXG5cclxuXHRcdFx0aWYgKG14IDwgei54IHx8IG15IDwgei55IHx8IG14ID4gei54ICsgei53IHx8IG15ID4gei55ICsgei5oKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKGx2bC50eXBlID09PSBcIm1hcFwiKSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0eiA9IGx2bC5pdGVtc1tpXS56b25lO1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRteCA+PSBpdHoueCAmJlxyXG5cdFx0XHRcdFx0XHRteSA+PSBpdHoueSAmJlxyXG5cdFx0XHRcdFx0XHRteCA8PSBpdHoueCArIGl0ei53ICYmXHJcblx0XHRcdFx0XHRcdG15IDw9IGl0ei55ICsgaXR6LmhcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4geyBMLCBpLCByZWFsOiB0cnVlIH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbnN0IG5Sb3dzID0gTWF0aC5tYXgobHZsLml0ZW1zLmxlbmd0aCwgdGhpcy5sZWFmTWF4KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGlzUmVhbCA9IGkgPCBsdmwuaXRlbXMubGVuZ3RoO1xyXG5cdFx0XHRcdFx0Y29uc3QgaXR6ID0gaXNSZWFsXHJcblx0XHRcdFx0XHRcdD8gbHZsLml0ZW1zW2ldLnpvbmVcclxuXHRcdFx0XHRcdFx0OiB7XHJcblx0XHRcdFx0XHRcdFx0XHR4OiB6LngsXHJcblx0XHRcdFx0XHRcdFx0XHR5OiB6LnkgKyBpICogdGhpcy5saW5lSCxcclxuXHRcdFx0XHRcdFx0XHRcdHc6IHoudyxcclxuXHRcdFx0XHRcdFx0XHRcdGg6IHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdCAgfTtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0bXggPj0gaXR6LnggJiZcclxuXHRcdFx0XHRcdFx0bXkgPj0gaXR6LnkgJiZcclxuXHRcdFx0XHRcdFx0bXggPD0gaXR6LnggKyBpdHoudyAmJlxyXG5cdFx0XHRcdFx0XHRteSA8PSBpdHoueSArIGl0ei5oXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHsgTCwgaSwgcmVhbDogaXNSZWFsIH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4geyBMOiAtMSwgaTogLTEsIHJlYWw6IGZhbHNlIH07XHJcblx0fVxyXG5cclxuXHRoYW5kbGVFdmVudChlKSB7XHJcblx0XHRpZiAodGhpcy5sb2NrKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0aWYgKGUudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xyXG5cdFx0XHQvLyBTaSBlbCBob3ZlciBlc3TDoSBkZXNhY3RpdmFkbywgbm8gaGF5IHRyYWJham8gcXVlIGhhY2VyLlxyXG5cdFx0XHRpZiAoIXRoaXMuZW5hYmxlSG92ZXIpIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fdG9Mb2NhbChlKTtcclxuXHRcdFx0Y29uc3QgaHQgPSB0aGlzLl9oaXRUZXN0KHgsIHkpO1xyXG5cclxuXHRcdFx0Ly8gbnVldm8gaG92ZXIgY2FsY3VsYWRvXHJcblx0XHRcdGNvbnN0IG5ld0hvdmVyID1cclxuXHRcdFx0XHRodC5MICE9PSAtMSAmJiBodC5yZWFsXHJcblx0XHRcdFx0XHQ/IHsgbGV2ZWw6IGh0LkwsIGluZGV4OiBodC5pIH1cclxuXHRcdFx0XHRcdDogeyBsZXZlbDogLTEsIGluZGV4OiAtMSB9O1xyXG5cdFx0XHQvLyBzb2xvIHJlcGludGFyIHNpIGNhbWJpYSByZWFsbWVudGUgZWwgaG92ZXJcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdG5ld0hvdmVyLmxldmVsID09PSB0aGlzLmhvdmVyLmxldmVsICYmXHJcblx0XHRcdFx0bmV3SG92ZXIuaW5kZXggPT09IHRoaXMuaG92ZXIuaW5kZXhcclxuXHRcdFx0KVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0dGhpcy5ob3ZlciA9IG5ld0hvdmVyO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZS50eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcblx0XHRcdGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fdG9Mb2NhbChlKTtcclxuXHRcdFx0Y29uc3QgaHQgPSB0aGlzLl9oaXRUZXN0KHgsIHkpO1xyXG5cdFx0XHRpZiAoaHQuTCAhPT0gLTEgJiYgaHQucmVhbCkge1xyXG5cdFx0XHRcdHRoaXMuX3NlbGVjdEF0KGh0LkwsIGh0LmkpO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlOyAvLyBzb2xvIHRydWUgc2kgcmVhbG1lbnRlIHNlIHNlbGVjY2lvbsOzIGFsZ29cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGUudHlwZSA9PT0gXCJtb3VzZXVwXCIpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIFNlbGVjY2nDs24gKyBhdXRvY29tcGxldGFkbyArIG5vdGlmaWNhY2nDs25cclxuXHRfc2VsZWN0QXQoTCwgaSkge1xyXG5cdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRjb25zdCBjaG9zZW4gPSBsdmwuaXRlbXNbaV07XHJcblx0XHRpZiAoIWNob3NlbiB8fCAhY2hvc2VuLmtleSkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IGJhc2UgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpO1xyXG5cdFx0YmFzZVtMXSA9IGNob3Nlbi5rZXk7XHJcblxyXG5cdFx0Y29uc3QgbmV3UGF0aCA9IHRoaXMuYXV0b0NvbXBsZXRlVG9MZWFmKGJhc2UpO1xyXG5cclxuXHRcdC8vIPCflLggU2kgZWwgdXN1YXJpbyBzZWxlY2Npb25hIGV4cGzDrWNpdGFtZW50ZSBlbiBlbCBuaXZlbCBob2phLCByZWNvcmRhcmxvXHJcblx0XHRpZiAobHZsLnR5cGUgPT09IFwibGlzdFwiKSB7XHJcblx0XHRcdHRoaXMubGFzdExlYWYucGFyZW50UGF0aCA9IHRoaXMudmFsdWUuc2xpY2UoMCwgTCk7IC8vIHBhZHJlIGRlIGxhIGxpc3RhIGFjdHVhbFxyXG5cdFx0XHR0aGlzLmxhc3RMZWFmLmtleSA9IGNob3Nlbi5rZXk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy52YWx1ZSA9IG5ld1BhdGguc2xpY2UoKTtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdFx0Ly8gc2kgZXN0w6EgcmVmZXJlbmNpYWRvLCBwcm9wYWdhIGEgb2JqZXRvIGV4dGVybm9cclxuXHRcdHRoaXMuc2VuZChuZXdQYXRoKTtcclxuXHRcdHRoaXMuY2hhbmdlQ2IodGhpcy50YWJJbmRleCwgdGhpcy5pdGVtSW5kZXgsIG5ld1BhdGgpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBBUEkgcMO6YmxpY2EgPT09PT09PVxyXG5cdHNldFZhbHVlKHBhdGgpIHtcclxuXHRcdHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5zbGljZSgpIDogW107XHJcblx0XHQvLyBTaSBkZXNkZSBhZnVlcmEgbm9zIHNldGVhbiB1bmEgaG9qYSB2w6FsaWRhLCB0YW1iacOpbiBsYSByZWNvcmRhbW9zXHJcblx0XHR0aGlzLl9tYXliZVVwZGF0ZUxhc3RMZWFmRnJvbVZhbHVlKCk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0c2V0VHJlZSh0cmVlKSB7XHJcblx0XHR0aGlzLnRyZWUgPSB0cmVlIHx8IHt9O1xyXG5cdFx0dGhpcy5sZWFmTWF4ID0gdGhpcy5jb21wdXRlTGVhZk1heCh0aGlzLnRyZWUpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdHNldEZvY3VzKHsgZm9jdXNlZCwgZm9jdXNQYXRoLCBmb2N1c0xldmVsIH0pIHtcclxuXHRcdGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gXCJib29sZWFuXCIpIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheShmb2N1c1BhdGgpKSB0aGlzLmZvY3VzUGF0aCA9IGZvY3VzUGF0aC5zbGljZSgpO1xyXG5cdFx0aWYgKHR5cGVvZiBmb2N1c0xldmVsID09PSBcIm51bWJlclwiKSB0aGlzLmZvY3VzTGV2ZWwgPSBmb2N1c0xldmVsO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdF9tYXliZVVwZGF0ZUxhc3RMZWFmRnJvbVZhbHVlKCkge1xyXG5cdFx0Ly8gU2kgdmFsdWUgYXB1bnRhIGEgcGFkcmUraG9qYSAo4oCmLFtsZWFmXSkgeSBlcyB2w6FsaWRhLCByZWNvcmRhciBlc2EgaG9qYVxyXG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpIHx8IHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMudmFsdWUubGVuZ3RoIC0gMSk7XHJcblx0XHRjb25zdCBsZWFmID0gdGhpcy52YWx1ZVt0aGlzLnZhbHVlLmxlbmd0aCAtIDFdO1xyXG5cdFx0Y29uc3QgaW5mbyA9IHRoaXMuZ2V0Tm9kZUF0UGF0aChwYXJlbnQpO1xyXG5cdFx0aWYgKGluZm8gJiYgQXJyYXkuaXNBcnJheShpbmZvLm5vZGUpICYmIGluZm8ubm9kZS5pbmNsdWRlcyhsZWFmKSkge1xyXG5cdFx0XHR0aGlzLmxhc3RMZWFmID0geyBwYXJlbnRQYXRoOiBwYXJlbnQsIGtleTogbGVhZiB9O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBQdWJsaWNhY2nDs24gZGUgYWx0dXJhID09PT09PT1cclxuXHRfY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpIHtcclxuXHRcdGxldCBjID0gMDtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBpKyspXHJcblx0XHRcdGlmICh0aGlzLmxldmVsc1tpXS50eXBlID09PSBcIm1hcFwiKSBjKys7XHJcblx0XHRyZXR1cm4gYztcclxuXHR9XHJcblxyXG5cdF9nZXRDdXJyZW50TGVhZkxlbmd0aCgpIHtcclxuXHRcdGNvbnN0IGxhc3QgPSB0aGlzLmxldmVsc1t0aGlzLmxldmVscy5sZW5ndGggLSAxXTtcclxuXHRcdHJldHVybiBsYXN0ICYmIGxhc3QudHlwZSA9PT0gXCJsaXN0XCIgPyBsYXN0Lml0ZW1zLmxlbmd0aCA6IDA7XHJcblx0fVxyXG5cclxuXHRfcHVibGlzaEhlaWdodCgpIHtcclxuXHRcdGNvbnN0IGludGVyID0gdGhpcy5fY291bnRWaXNpYmxlSW50ZXJtZWRpYXRlcygpO1xyXG5cdFx0Y29uc3QgbGVhZkxlbiA9IE1hdGgubWF4KHRoaXMubGVhZk1heCwgdGhpcy5fZ2V0Q3VycmVudExlYWZMZW5ndGgoKSk7XHJcblx0XHRjb25zdCBsZWFmSCA9IGxlYWZMZW4gKiB0aGlzLmxpbmVIO1xyXG5cdFx0Y29uc3QgaW50ZXJIID0gaW50ZXIgKiAodGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXApO1xyXG5cdFx0Y29uc3QgdG90YWxIID0gaW50ZXIgPyBpbnRlckggKyB0aGlzLmxldmVsR2FwICsgbGVhZkggOiBsZWFmSDtcclxuXHJcblx0XHQvLyBOb3JtYWxpemFtb3MgYSBweCBlbnRlcm9zIHBhcmEgZXZpdGFyIGppdHRlciBwb3IgcmVkb25kZW9cclxuXHRcdGNvbnN0IG5ld0ggPSBNYXRoLmZsb29yKHRvdGFsSCk7XHJcblxyXG5cdFx0Ly8gQWN0dWFsaXphbW9zIG3DqXRyaWNhcyBsb2NhbGVzIHNpZW1wcmVcclxuXHRcdHRoaXMuaCA9IG5ld0g7XHJcblx0XHR0aGlzLnpvbmUuaCA9IHRoaXMuaCArIHRoaXMubWFyZ2luO1xyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArIFwicHhcIjtcclxuXHJcblx0XHQvLyBTb2xvIGF2aXNhbW9zIGFsIEdVSSBzaSBsYSBhbHR1cmEgY2FtYmnDs1xyXG5cdFx0aWYgKG5ld0ggIT09IHRoaXMuX2xhc3RQdWJsaXNoZWRIKSB7XHJcblx0XHRcdHRoaXMuX2xhc3RQdWJsaXNoZWRIID0gbmV3SDtcclxuXHRcdFx0Um9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcblx0XHRcdGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYWluKSB0aGlzLm1haW4uY2FsYygpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4uL3Byb3RvL0Jvb2wuanMnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9wcm90by9CdXR0b24uanMnO1xyXG5pbXBvcnQgeyBDaXJjdWxhciB9IGZyb20gJy4uL3Byb3RvL0NpcmN1bGFyLmpzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9wcm90by9Db2xvci5qcyc7XHJcbmltcG9ydCB7IEZwcyB9IGZyb20gJy4uL3Byb3RvL0Zwcy5qcyc7XHJcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vcHJvdG8vR3JhcGguanMnO1xyXG5pbXBvcnQgeyBHcm91cCAgfSBmcm9tICcuLi9wcm90by9Hcm91cC5qcyc7XHJcbmltcG9ydCB7IEpveXN0aWNrIH0gZnJvbSAnLi4vcHJvdG8vSm95c3RpY2suanMnO1xyXG5pbXBvcnQgeyBLbm9iIH0gZnJvbSAnLi4vcHJvdG8vS25vYi5qcyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi9wcm90by9MaXN0LmpzJztcclxuaW1wb3J0IHsgTnVtZXJpYyB9IGZyb20gJy4uL3Byb3RvL051bWVyaWMuanMnO1xyXG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4uL3Byb3RvL1NsaWRlLmpzJztcclxuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSAnLi4vcHJvdG8vVGV4dElucHV0LmpzJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9wcm90by9UaXRsZS5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdC5qcyc7XHJcbmltcG9ydCB7IEJpdG1hcCB9IGZyb20gJy4uL3Byb3RvL0JpdG1hcC5qcyc7XHJcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnLi4vcHJvdG8vU2VsZWN0b3IuanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uL3Byb3RvL0VtcHR5LmpzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uL3Byb3RvL0l0ZW0uanMnO1xyXG5pbXBvcnQgeyBHcmlkIH0gZnJvbSAnLi4vcHJvdG8vR3JpZC5qcyc7XHJcbmltcG9ydCB7IFBhZDJEIH0gZnJvbSAnLi4vcHJvdG8vUGFkMkQuanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBUcmVlTGlzdCB9IGZyb20gJy4uL3Byb3RvL1RyZWVMaXN0LmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBhZGQgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gYXJndW1lbnRzOyBcclxuXHJcbiAgICAgICAgbGV0IHR5cGUsIG8sIHJlZiA9IGZhbHNlLCBuID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiBhWzBdID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzBdO1xyXG4gICAgICAgICAgICBvID0gYVsxXSB8fCB7fTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGFbMF0gPT09ICdvYmplY3QnICl7IC8vIGxpa2UgZGF0IGd1aVxyXG5cclxuICAgICAgICAgICAgcmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIGFbMl0gPT09IHVuZGVmaW5lZCApIFtdLnB1c2guY2FsbChhLCB7fSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdHlwZSA9IGFbMl0udHlwZSA/IGFbMl0udHlwZSA6IGF1dG9UeXBlKCBhWzBdW2FbMV1dLCBhWzJdICk7XHJcblxyXG4gICAgICAgICAgICBvID0gYVsyXTtcclxuICAgICAgICAgICAgby5uYW1lID0gYVsxXTtcclxuICAgICAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5TmFtZVwiKSkgby5uYW1lID0gby5kaXNwbGF5TmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSAnbGlzdCcgJiYgIW8ubGlzdCApeyBvLmxpc3QgPSBhWzBdW2FbMV1dOyB9XHJcbiAgICAgICAgICAgIGVsc2Ugby52YWx1ZSA9IGFbMF1bYVsxXV07XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnZ3JvdXAnICl7IFxyXG4gICAgICAgICAgICBvLmFkZCA9IGFkZDtcclxuICAgICAgICAgICAgLy9vLmR4ID0gOFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKCBuYW1lICl7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdib29sJzogY2FzZSAnYm9vbGVhbic6IG4gPSBuZXcgQm9vbChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2J1dHRvbic6IG4gPSBuZXcgQnV0dG9uKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2lyY3VsYXInOiBuID0gbmV3IENpcmN1bGFyKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29sb3InOiBuID0gbmV3IENvbG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnBzJzogbiA9IG5ldyBGcHMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncmFwaCc6IG4gPSBuZXcgR3JhcGgobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6IG4gPSBuZXcgR3JvdXAobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqb3lzdGljayc6IG4gPSBuZXcgSm95c3RpY2sobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdrbm9iJzogbiA9IG5ldyBLbm9iKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlzdCc6IG4gPSBuZXcgTGlzdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOiBjYXNlICdudW1iZXInOiBuID0gbmV3IE51bWVyaWMobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzbGlkZSc6IG4gPSBuZXcgU2xpZGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0SW5wdXQnOiBjYXNlICdzdHJpbmcnOiBuID0gbmV3IFRleHRJbnB1dChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzogY2FzZSAndGV4dCc6IG4gPSBuZXcgVGl0bGUobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOiBuID0gbmV3IFNlbGVjdChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JpdG1hcCc6IG4gPSBuZXcgQml0bWFwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOiBuID0gbmV3IFNlbGVjdG9yKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW1wdHknOiBjYXNlICdzcGFjZSc6IG4gPSBuZXcgRW1wdHkobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzogbiA9IG5ldyBJdGVtKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JpZCc6IG4gPSBuZXcgR3JpZChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhZDJkJzogY2FzZSAncGFkJzogbiA9IG5ldyBQYWQyRChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVsaXN0JzogbiA9IG5ldyBUcmVlTGlzdChvKTsgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBuICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYoIHJlZiApIG4uc2V0UmVmZXJlbmN5KCBhWzBdLCBhWzFdICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0b1R5cGUgPSBmdW5jdGlvbiAoIHYsIG8gKSB7XHJcblxyXG4gICAgbGV0IHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgaWYoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB0eXBlID0gJ2Jvb2wnIFxyXG4gICAgZWxzZSBpZiggdHlwZW9mIHYgPT09ICdzdHJpbmcnICl7IFxyXG5cclxuICAgICAgICBpZiggdi5zdWJzdHJpbmcoMCwxKSA9PT0gJyMnICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc3RyaW5nJyBcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnbnVtYmVyJyApeyBcclxuXHJcbiAgICAgICAgaWYoIG8uY3R5cGUgKSB0eXBlID0gJ2NvbG9yJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdzbGlkZSdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnYXJyYXknICYmIHYgaW5zdGFuY2VvZiBBcnJheSApe1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHZbMF0gPT09ICdudW1iZXInICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSBpZiggdHlwZW9mIHZbMF0gPT09ICdzdHJpbmcnICkgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH0gZWxzZSBpZiggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuXHJcbiAgICAgICAgaWYoIHYueCAhPT0gdW5kZWZpbmVkICkgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ2xpc3QnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IGFkZCB9IGZyb20gXCIuL2FkZC5qc1wiO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gXCIuL1YyLmpzXCI7XHJcblxyXG4vKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgR3VpIHtcclxuICBjb25zdHJ1Y3RvcihvID0ge30pIHtcclxuICAgIHRoaXMuaXNHdWkgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IFwiZ3VpXCI7XHJcblxyXG4gICAgLy8gZm9yIDNkXHJcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XHJcbiAgICB0aGlzLnNjcmVlbiA9IG51bGw7XHJcbiAgICB0aGlzLnBsYW5lID0gby5wbGFuZSB8fCBudWxsO1xyXG5cclxuICAgIC8vIGNvbG9yXHJcbiAgICBpZiAoby5jb25maWcpIG8uY29sb3JzID0gby5jb25maWc7XHJcbiAgICBpZiAoby5jb2xvcnMpIHRoaXMuc2V0Q29uZmlnKG8uY29sb3JzKTtcclxuICAgIGVsc2UgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuXHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5jc3MgPSBUb29scy5jbG9uZUNzcygpO1xyXG5cclxuICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLnRtcEFkZCA9IG51bGw7XHJcbiAgICAvL3RoaXMudG1wSCA9IDBcclxuXHJcbiAgICB0aGlzLmlzQ2FudmFzID0gby5pc0NhbnZhcyB8fCBmYWxzZTtcclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgLy8gb3B0aW9uIHRvIGRlZmluZSB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGFkZGVkIG9yIG5vdFxyXG4gICAgUm9vdHMuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgPSBvLmhhc093blByb3BlcnR5KFwiYWRkRE9NRXZlbnRMaXN0ZW5lcnNcIilcclxuICAgICAgPyBvLmFkZERPTUV2ZW50TGlzdGVuZXJzXHJcbiAgICAgIDogdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrID0gby5jYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG8uY2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5mb3JjZUhlaWdodCA9IG8ubWF4SGVpZ2h0IHx8IDA7XHJcbiAgICB0aGlzLmxvY2tIZWlnaHQgPSBvLmxvY2tIZWlnaHQgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0l0ZW1Nb2RlID0gby5pdGVtTW9kZSAhPT0gdW5kZWZpbmVkID8gby5pdGVtTW9kZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY24gPSBcIlwiO1xyXG5cclxuICAgIC8vIHNpemUgZGVmaW5lXHJcbiAgICB0aGlzLnNpemUgPSBUb29scy5zaXplO1xyXG4gICAgaWYgKG8ucCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucCA9IG8ucDtcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLncgPSBvLnc7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS5oID0gby5oO1xyXG4gICAgaWYgKG8ucyAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUucyA9IG8ucztcclxuXHJcbiAgICB0aGlzLnNpemUuaCA9IHRoaXMuc2l6ZS5oIDwgMTEgPyAxMSA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIC8vIGxvY2FsIG1vdXNlIGFuZCB6b25lXHJcbiAgICB0aGlzLmxvY2FsID0gbmV3IFYyKCkubmVnKCk7XHJcbiAgICB0aGlzLnpvbmUgPSB7IHg6IDAsIHk6IDAsIHc6IHRoaXMuc2l6ZS53LCBoOiAwIH07XHJcblxyXG4gICAgLy8gdmlydHVhbCBtb3VzZVxyXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaCA9IDA7XHJcbiAgICAvL3RoaXMucHJldlkgPSAtMTtcclxuICAgIHRoaXMuc3cgPSAwO1xyXG5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGJvdHRvbSBhbmQgY2xvc2UgaGVpZ2h0XHJcbiAgICB0aGlzLmlzV2l0aENsb3NlID0gby5jbG9zZSAhPT0gdW5kZWZpbmVkID8gby5jbG9zZSA6IHRydWU7XHJcbiAgICB0aGlzLmJoID0gIXRoaXMuaXNXaXRoQ2xvc2UgPyAwIDogdGhpcy5zaXplLmg7XHJcblxyXG4gICAgdGhpcy5hdXRvUmVzaXplID0gby5hdXRvUmVzaXplID09PSB1bmRlZmluZWQgPyB0cnVlIDogby5hdXRvUmVzaXplO1xyXG5cclxuICAgIC8vIGRlZmF1bHQgcG9zaXRpb25cclxuICAgIHRoaXMuaXNDZW50ZXIgPSBvLmNlbnRlciB8fCBmYWxzZTtcclxuICAgIHRoaXMuY3NzR3VpID1cclxuICAgICAgby5jc3MgIT09IHVuZGVmaW5lZCA/IG8uY3NzIDogdGhpcy5pc0NlbnRlciA/IFwiXCIgOiBcInJpZ2h0OjEwcHg7XCI7XHJcblxyXG4gICAgdGhpcy5pc09wZW4gPSBvLm9wZW4gIT09IHVuZGVmaW5lZCA/IG8ub3BlbiA6IHRydWU7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVjYWwgPSAwO1xyXG4gICAgdGhpcy5yYXRpbyA9IDE7XHJcbiAgICB0aGlzLm95ID0gMDtcclxuXHJcbiAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCIgd2lkdGg6MHB4OyBoZWlnaHQ6YXV0bzsgdG9wOjBweDsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuY29udGVudCArXHJcbiAgICAgICAgXCI7IFwiICtcclxuICAgICAgICB0aGlzLmNzc0d1aVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwid2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIHRoaXMuY3NzLmJ1dHRvbiArICd3aWR0aDoxMDAlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6aGlkZGVuOycpO1xyXG4gICAgdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXJDb250ZW50KTtcclxuXHJcbiAgICAvL3RoaXMuaW5uZXIgPSBUb29scy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBsZWZ0OjA7ICcpXHJcbiAgICB0aGlzLnVzZUZsZXggPSB0cnVlO1xyXG4gICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gXCJkaXNwbGF5OmZsZXg7IGZsZXgtZmxvdzogcm93IHdyYXA7XCIgOiBcIlwiOyAvLycgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7IGFsaWduLWl0ZW1zOnN0YXJ0O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyc7XHJcbiAgICB0aGlzLmlubmVyID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJ3aWR0aDoxMDAlOyBsZWZ0OjA7IFwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lcik7XHJcblxyXG4gICAgLy8gc2Nyb2xsXHJcbiAgICB0aGlzLnNjcm9sbEJHID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJyaWdodDowOyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDEpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy5iYWNrZ3JvdW5kICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbEJHKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYnV0dG9uICtcclxuICAgICAgICBcIjsgcmlnaHQ6MnB4OyB0b3A6MDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICh0aGlzLnNpemUucyAtIDQpICtcclxuICAgICAgICBcInB4OyBoZWlnaHQ6MTBweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuc2Nyb2xsQkcuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGwpO1xyXG5cclxuICAgIC8vIGJvdHRvbSBidXR0b25cclxuICAgIHRoaXMuYm90dG9tVGV4dCA9IG8uYm90dG9tVGV4dCB8fCBbXCJvcGVuXCIsIFwiY2xvc2VcIl07XHJcblxyXG4gICAgbGV0IHIgPSBjYy5yYWRpdXM7XHJcbiAgICB0aGlzLmJvdHRvbSA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0ICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDphdXRvOyBib3R0b206MDsgbGVmdDowOyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpcIiArXHJcbiAgICAgICAgciArXHJcbiAgICAgICAgXCJweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgaGVpZ2h0OlwiICtcclxuICAgICAgICB0aGlzLmJoICtcclxuICAgICAgICBcInB4OyBsaW5lLWhlaWdodDpcIiArXHJcbiAgICAgICAgKHRoaXMuYmggLSA1KSArXHJcbiAgICAgICAgXCJweDsgY29sb3I6XCIgK1xyXG4gICAgICAgIGNjLnRleHQgK1xyXG4gICAgICAgIFwiO1wiXHJcbiAgICApOyAvLyBib3JkZXItdG9wOjFweCBzb2xpZCAnK1Rvb2xzLmNvbG9ycy5zdHJva2UrJzsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmJvdHRvbSk7XHJcbiAgICB0aGlzLmJvdHRvbS50ZXh0Q29udGVudCA9IHRoaXMuaXNPcGVuXHJcbiAgICAgID8gdGhpcy5ib3R0b21UZXh0WzFdXHJcbiAgICAgIDogdGhpcy5ib3R0b21UZXh0WzBdO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcblxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLnBhcmVudCA9IG8ucGFyZW50ICE9PSB1bmRlZmluZWQgPyBvLnBhcmVudCA6IG51bGw7XHJcbiAgICB0aGlzLnBhcmVudCA9IG8udGFyZ2V0ICE9PSB1bmRlZmluZWQgPyBvLnRhcmdldCA6IHRoaXMucGFyZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCAmJiAhdGhpcy5pc0NhbnZhcykge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzICYmIHRoaXMucGFyZW50ID09PSBudWxsKSB0aGlzLmlzQ2FudmFzT25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQ2FudmFzT25seSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgby50cmFuc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoZWlnaHQgdHJhbnNpdGlvblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID1cclxuICAgICAgby50cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgPyBvLnRyYW5zaXRpb24gOiBUb29scy50cmFuc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikgc2V0VGltZW91dCh0aGlzLmFkZFRyYW5zaXRpb24uYmluZCh0aGlzKSwgMTAwMCk7XHJcblxyXG4gICAgdGhpcy5zZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLm1ha2VDYW52YXMoKTtcclxuXHJcbiAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VEb3duKHgsIHkpIHtcclxuICAgIGNvbnNvbGUud2FybihcIkd1aS50cmlnZ2VyTW91c2VEb3duIGlzIGRlcHJlY2F0ZWQsIHVzZSB0cmlnZ2VyTW91c2VEb3duVVYgaW5zdGVhZFwiKTtcclxuICAgIC8qXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcmRvd25cIixcclxuICAgICAgY2xpZW50WDogeCxcclxuICAgICAgY2xpZW50WTogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7Ki9cclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZU1vdmUoKSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJHdWkudHJpZ2dlck1vdXNlTW92ZSBpcyBkZXByZWNhdGVkLCB1c2UgdHJpZ2dlck1vdXNlTW92ZVVWIGluc3RlYWRcIik7XHJcbiAgICAvKlxyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJtb3ZlXCIsXHJcbiAgICAgIGNsaWVudFg6IC0xLFxyXG4gICAgICBjbGllbnRZOiAtMSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7Ki9cclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwKHgsIHkpIHtcclxuXHJcbiAgICBjb25zb2xlLndhcm4oXCJHdWkudHJpZ2dlck1vdXNlVXAgaXMgZGVwcmVjYXRlZCwgdXNlIHRyaWdnZXJNb3VzZVVwVVYgaW5zdGVhZFwiKTtcclxuICAgIC8qXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcnVwXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pOyovXHJcbiAgfVxyXG5cclxuICAvLyBHdWkuanNcclxuICB0cmlnZ2VyTW91c2VEb3duVVYodSwgdiwgeyBmbGlwWSA9IHRydWUgfSA9IHt9KSB7XHJcbiAgICAvLyB1LCB2IGVuIFswLDFdIHJlbGF0aXZvcyBhbCByZWN0IGRlbCBHVUlcclxuICAgIGNvbnN0IHggPSB0aGlzLnpvbmUueCArIE1hdGgucm91bmQodSAqIHRoaXMuem9uZS53KTtcclxuICAgIGNvbnN0IHkgPSB0aGlzLnpvbmUueSArIE1hdGgucm91bmQoKGZsaXBZID8gMSAtIHYgOiB2KSAqIHRoaXMuem9uZS5oKTtcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVyZG93blwiLFxyXG4gICAgICBjbGllbnRYOiBpc05hTih4KSA/IG51bGwgOiB4LFxyXG4gICAgICBjbGllbnRZOiBpc05hTih5KSA/IG51bGwgOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJNb3VzZVVwVVYodSwgdiwgeyBmbGlwWSA9IHRydWUgfSA9IHt9KSB7XHJcbiAgICBjb25zdCB4ID0gdGhpcy56b25lLnggKyBNYXRoLnJvdW5kKHUgKiB0aGlzLnpvbmUudyk7XHJcbiAgICBjb25zdCB5ID0gdGhpcy56b25lLnkgKyBNYXRoLnJvdW5kKChmbGlwWSA/IDEgLSB2IDogdikgKiB0aGlzLnpvbmUuaCk7XHJcbiAgICBcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVydXBcIixcclxuICAgICAgY2xpZW50WDogaXNOYU4oeCkgPyBudWxsIDogeCxcclxuICAgICAgY2xpZW50WTogaXNOYU4oeSkgPyBudWxsIDogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VNb3ZlVVYodSwgdiwgeyBmbGlwWSA9IHRydWUgfSA9IHt9KSB7XHJcbiAgICBjb25zdCB4ID0gdGhpcy56b25lLnggKyBNYXRoLnJvdW5kKHUgKiB0aGlzLnpvbmUudyk7XHJcbiAgICBjb25zdCB5ID0gdGhpcy56b25lLnkgKyBNYXRoLnJvdW5kKChmbGlwWSA/IDEgLSB2IDogdikgKiB0aGlzLnpvbmUuaCk7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcm1vdmVcIixcclxuICAgICAgY2xpZW50WDogaXNOYU4oeCkgPyBudWxsIDogeCxcclxuICAgICAgY2xpZW50WTogaXNOYU4oeSkgPyBudWxsIDogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUb3AodCwgaCkge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnRvcCA9IHQgKyBcInB4XCI7XHJcbiAgICBpZiAoaCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcmNlSGVpZ2h0ID0gaDtcclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhbnNpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24gJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9XHJcbiAgICAgICAgXCJoZWlnaHQgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuYm90dG9tLnN0eWxlLnRyYW5zaXRpb24gPSBcInRvcCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICAvL3RoaXMuYm90dG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIFJvb3RzLnJlc2l6ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5hZGRUcmFuc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBDQU5WQVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG9uRHJhdygpIHt9XHJcblxyXG4gIG1ha2VDYW52YXMoKSB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcclxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXHJcbiAgICAgIFwiY2FudmFzXCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuem9uZS53O1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCA/IHRoaXMuZm9yY2VIZWlnaHQgOiB0aGlzLnpvbmUuaDtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0IClcclxuICB9XHJcblxyXG4gIGRyYXcoZm9yY2UpIHtcclxuICAgIGlmICh0aGlzLmNhbnZhcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB3ID0gdGhpcy56b25lLnc7XHJcbiAgICBsZXQgaCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcbiAgICBSb290cy50b0NhbnZhcyh0aGlzLCB3LCBoLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy9cclxuXHJcbiAgZ2V0RG9tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcclxuICB9XHJcblxyXG4gIG5vTW91c2UoKSB7XHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2UodXYsIGZsaXAgPSB0cnVlKSB7XHJcbiAgICBpZiAoZmxpcClcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5tb3VzZS5zZXQoXHJcbiAgICAgICAgTWF0aC5yb3VuZCh1di54ICogdGhpcy5jYW52YXMud2lkdGgpLFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueSAqIHRoaXMuY2FudmFzLmhlaWdodClcclxuICAgICAgKTtcclxuICAgIC8vdGhpcy5tb3VzZS5zZXQoIG0ueCwgbS55ICk7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1vdXNlIFwiICsgdXYueCArIFwiIFwiICsgdXYueSk7XHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcobykge1xyXG4gICAgLy8gcmVzZXQgdG8gZGVmYXVsdCB0ZXh0XHJcbiAgICBUb29scy5zZXRUZXh0KCk7XHJcbiAgICB0aGlzLmNvbG9ycyA9IFRvb2xzLmRlZmluZUNvbG9yKG8pO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29sb3JzKG8pIHtcclxuICAgIGZvciAobGV0IGMgaW4gbykge1xyXG4gICAgICBpZiAodGhpcy5jb2xvcnNbY10pIHRoaXMuY29sb3JzW2NdID0gb1tjXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdykge1xyXG4gICAgVG9vbHMuc2V0VGV4dChzaXplLCBjb2xvciwgZm9udCwgc2hhZG93KTtcclxuICB9XHJcblxyXG4gIGhpZGUoYikge1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLnZpc2liaWxpdHkgPSBiID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheSh2ID0gZmFsc2UpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gdiA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIjtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKGYpIHtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBmIHx8IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFNUWUxFU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW9kZShuKSB7XHJcbiAgICBsZXQgbmVlZENoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgaWYgKG4gIT09IHRoaXMuY24pIHtcclxuICAgICAgdGhpcy5jbiA9IG47XHJcblxyXG4gICAgICBzd2l0Y2ggKG4pIHtcclxuICAgICAgICBjYXNlIFwiZGVmXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZDtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAvL2Nhc2UgJ3Njcm9sbERlZic6IHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zY3JvbGw7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxPdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJucy1yZXNpemVcIik7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNjcm9sbERvd25cIjpcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdib3R0b21EZWYnOiB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImJvdHRvbU92ZXJcIjpcclxuICAgICAgICAgIFJvb3RzLmN1cnNvcihcInBvaW50ZXJcIik7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYmFja2dyb3VuZE92ZXI7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9jYXNlICdib3R0b21Eb3duJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLnNlbGVjdDsgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSAnIzAwMCc7IGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuZWVkQ2hhbmdlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmVlZENoYW5nZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFRBUkdFVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2xlYXJUYXJnZXQoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50ID09PSAtMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHRoaXMucHJvdG8ucykge1xyXG4gICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcm90byA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnQgPSAtMTtcclxuXHJcbiAgICAvLy9jb25zb2xlLmxvZyh0aGlzLmlzRG93bikvL2lmKHRoaXMuaXNEb3duKVJvb3RzLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICBSb290cy5jdXJzb3IoKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgWk9ORSBURVNUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0ZXN0Wm9uZShlKSB7XHJcbiAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICBpZiAobC54ID09PSAtMSAmJiBsLnkgPT09IC0xKSByZXR1cm4gXCJcIjtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgbmFtZSA9IFwiXCI7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLmlzU2Nyb2xsID8gdGhpcy56b25lLncgLSB0aGlzLnNpemUucyA6IHRoaXMuem9uZS53O1xyXG5cclxuICAgIGlmIChsLnkgPiB0aGlzLnpvbmUuaCAtIHRoaXMuYmggJiYgbC55IDwgdGhpcy56b25lLmgpIG5hbWUgPSBcImJvdHRvbVwiO1xyXG4gICAgZWxzZSBuYW1lID0gbC54ID4gcyA/IFwic2Nyb2xsXCIgOiBcImNvbnRlbnRcIjtcclxuXHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgLy9pZiggdGhpcy5jbGVhbm5pbmcgKSByZXR1cm5cclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwiR3VpLmhhbmRsZUV2ZW50XCIpXHJcbiAgICAvL2NvbnNvbGUubG9nKGUpO1xyXG4gICAgbGV0IHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IHByb3RvQ2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBcIm1vdXNldXBcIiAmJiB0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmICF0aGlzLmlzRG93bikgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzRG93biAmJiB0aGlzLmlzTmV3VGFyZ2V0KSB7XHJcbiAgICAgIFJvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuO1xyXG5cclxuICAgIHN3aXRjaCAobmFtZSkge1xyXG4gICAgICBjYXNlIFwiY29udGVudFwiOlxyXG4gICAgICAgIGUuY2xpZW50WSA9IHRoaXMuaXNTY3JvbGwgPyBlLmNsaWVudFkgKyB0aGlzLmRlY2FsIDogZS5jbGllbnRZO1xyXG5cclxuICAgICAgICBpZiAoUm9vdHMuaXNNb2JpbGUgJiYgdHlwZSA9PT0gXCJtb3VzZWRvd25cIikgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByb3RvKSBwcm90b0NoYW5nZSA9IHRoaXMucHJvdG8uaGFuZGxlRXZlbnQoZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwid2hlZWxcIiAmJiAhcHJvdG9DaGFuZ2UgJiYgdGhpcy5pc1Njcm9sbClcclxuICAgICAgICAgIGNoYW5nZSA9IHRoaXMub25XaGVlbChlKTtcclxuXHJcbiAgICAgICAgaWYgKCFSb290cy5sb2NrKSB7XHJcbiAgICAgICAgICB0aGlzLmdldE5leHQoZSwgY2hhbmdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJib3R0b21PdmVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSB7XHJcbiAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRoaXMuaXNPcGVuID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICAgICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICAgICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgICAgICAgIC8vdGhpcy5zZXRIZWlnaHQoKTtcclxuICAgICAgICAgIHRoaXMuY2FsYygpO1xyXG4gICAgICAgICAgdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwic2Nyb2xsXCI6XHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlbW92ZVwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJzY3JvbGxPdmVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSBjaGFuZ2UgPSB0aGlzLm1vZGUoXCJzY3JvbGxEb3duXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIpIGNoYW5nZSA9IHRoaXMub25XaGVlbChlKTtcclxuICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMudXBkYXRlKGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy5zaCAqIDAuNSk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmIChwcm90b0NoYW5nZSkgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJrZXl1cFwiKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgIGlmIChjaGFuZ2UpIHRoaXMuZHJhdygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV4dChlLCBjaGFuZ2UpIHtcclxuICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCh0aGlzLnVpcywgZSk7XHJcblxyXG4gICAgaWYgKG5leHQgIT09IHRoaXMuY3VycmVudCkge1xyXG4gICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLnByb3RvID0gdGhpcy51aXNbdGhpcy5jdXJyZW50XTtcclxuICAgICAgdGhpcy5wcm90by51aW92ZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uV2hlZWwoZSkge1xyXG4gICAgdGhpcy5veSArPSAyMCAqIGUuZGVsdGE7XHJcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLm95KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgUkVTRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHJlc2V0KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5pc1Jlc2V0KSByZXR1cm47XHJcblxyXG4gICAgLy90aGlzLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgIHRoaXMubW91c2UubmVnKCk7XHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgIC8vUm9vdHMuY2xlYXJJbnB1dCgpO1xyXG4gICAgbGV0IHIgPSB0aGlzLm1vZGUoXCJkZWZcIik7XHJcbiAgICBsZXQgcjIgPSB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcblxyXG4gICAgaWYgKHIgfHwgcjIpIHRoaXMuZHJhdyh0cnVlKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG5cclxuICAgIC8vUm9vdHMubG9jayA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQUREIE5PREVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGFkZCgpIHtcclxuICAgIC8vaWYodGhpcy5jbGVhbm5pbmcpIHRoaXMuY2xlYW5uaW5nID0gZmFsc2VcclxuXHJcbiAgICBsZXQgYSA9IGFyZ3VtZW50cztcclxuICAgIGxldCBvbnRvcCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0eXBlb2YgYVsxXSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICBhWzFdLmlzVUkgPSB0cnVlO1xyXG4gICAgICBhWzFdLm1haW4gPSB0aGlzO1xyXG5cclxuICAgICAgb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYVsxXSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBpZiAoYVsyXSA9PT0gdW5kZWZpbmVkKSBbXS5wdXNoLmNhbGwoYSwgeyBpc1VJOiB0cnVlLCBtYWluOiB0aGlzIH0pO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgIGFbMl0ubWFpbiA9IHRoaXM7XHJcbiAgICAgICAgLy9vbnRvcCA9IGFbMV0ub250b3AgPyBhWzFdLm9udG9wIDogZmFsc2U7XHJcbiAgICAgICAgb250b3AgPSBhWzJdLm9udG9wID8gYVsyXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHUgPSBhZGQuYXBwbHkodGhpcywgYSk7XHJcblxyXG4gICAgaWYgKHUgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBpZiAob250b3ApIHRoaXMudWlzLnVuc2hpZnQodSk7XHJcbiAgICBlbHNlIHRoaXMudWlzLnB1c2godSk7XHJcblxyXG4gICAgdGhpcy5jYWxjKCk7XHJcblxyXG4gICAgdGhpcy5pc0VtcHR5ID0gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHU7XHJcbiAgfVxyXG5cclxuICAvLyByZW1vdmUgb25lIG5vZGVcclxuXHJcbiAgcmVtb3ZlKG4pIHtcclxuICAgIGlmIChuLmRpc3Bvc2UpIG4uZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2FsbCBhZnRlciB1aXMgY2xlYXJcclxuXHJcbiAgY2xlYXJPbmUobikge1xyXG4gICAgbGV0IGlkID0gdGhpcy51aXMuaW5kZXhPZihuKTtcclxuICAgIGlmIChpZCAhPT0gLTEpIHtcclxuICAgICAgLy90aGlzLmNhbGMoIC0gKHRoaXMudWlzWyBpZCBdLmggKyAxICkgKTtcclxuICAgICAgdGhpcy5pbm5lci5yZW1vdmVDaGlsZCh0aGlzLnVpc1tpZF0uY1swXSk7XHJcbiAgICAgIHRoaXMudWlzLnNwbGljZShpZCwgMSk7XHJcbiAgICAgIHRoaXMuY2FsYygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gY2xlYXIgYWxsIGd1aVxyXG5cclxuICBlbXB0eSgpIHtcclxuICAgIC8vdGhpcy5jbGVhbm5pbmcgPSB0cnVlXHJcblxyXG4gICAgLy90aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsXHJcbiAgICAgIGl0ZW07XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpdGVtID0gdGhpcy51aXMucG9wKCk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQoaXRlbS5jWzBdKTtcclxuICAgICAgaXRlbS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51aXMgPSBbXTtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyKCkge1xyXG4gICAgdGhpcy5lbXB0eSgpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIyKCkge1xyXG4gICAgc2V0VGltZW91dCh0aGlzLmVtcHR5LmJpbmQodGhpcyksIDApO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5jb250ZW50KTtcclxuICAgIFJvb3RzLnJlbW92ZSh0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIElURU1TIFNQRUNJQUxcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHJlc2V0SXRlbSgpIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB0aGlzLnVpc1tpXS5zZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbShuYW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIG5hbWUgPSBuYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLnJlc2V0SXRlbSgpO1xyXG5cclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZSgwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAodGhpcy51aXNbaV0udmFsdWUgPT09IG5hbWUpIHtcclxuICAgICAgICB0aGlzLnVpc1tpXS5zZWxlY3RlZCh0cnVlKTtcclxuICAgICAgICBpZiAodGhpcy5pc1Njcm9sbClcclxuICAgICAgICAgIHRoaXMudXBkYXRlKGkgKiAodGhpcy51aXNbaV0uaCArIHRoaXMubWFyZ2luKSAqIHRoaXMucmF0aW8pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTQ1JPTExcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHVwU2Nyb2xsKGIpIHtcclxuICAgIHRoaXMuc3cgPSBiID8gdGhpcy5zaXplLnMgOiAwO1xyXG4gICAgdGhpcy5veSA9IGIgPyB0aGlzLm95IDogMDtcclxuICAgIHRoaXMuc2Nyb2xsQkcuc3R5bGUuZGlzcGxheSA9IGIgPyBcImJsb2NrXCIgOiBcIm5vbmVcIjtcclxuXHJcbiAgICBpZiAoYikge1xyXG4gICAgICB0aGlzLnRvdGFsID0gdGhpcy5oO1xyXG5cclxuICAgICAgdGhpcy5tYXhWaWV3ID0gdGhpcy5tYXhIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLnJhdGlvID0gdGhpcy5tYXhWaWV3IC8gdGhpcy50b3RhbDtcclxuICAgICAgdGhpcy5zaCA9IHRoaXMubWF4VmlldyAqIHRoaXMucmF0aW87XHJcblxyXG4gICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhWaWV3IC0gdGhpcy5zaDtcclxuXHJcbiAgICAgIHRoaXMub3kgPSBUb29scy5jbGFtcCh0aGlzLm95LCAwLCB0aGlzLnJhbmdlKTtcclxuXHJcbiAgICAgIHRoaXMuc2Nyb2xsQkcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhWaWV3ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLnNjcm9sbC5zdHlsZS5oZWlnaHQgPSB0aGlzLnNoICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLm95KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSh5KSB7XHJcbiAgICB5ID0gVG9vbHMuY2xhbXAoeSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgdGhpcy5kZWNhbCA9IE1hdGguZmxvb3IoeSAvIHRoaXMucmF0aW8pO1xyXG4gICAgdGhpcy5pbm5lci5zdHlsZS50b3AgPSAtdGhpcy5kZWNhbCArIFwicHhcIjtcclxuICAgIHRoaXMuc2Nyb2xsLnN0eWxlLnRvcCA9IE1hdGguZmxvb3IoeSkgKyBcInB4XCI7XHJcbiAgICB0aGlzLm95ID0geTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0laRSBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpcygpIHtcclxuICAgIHJldHVybiBSb290cy5jYWxjVWlzKHRoaXMudWlzLCB0aGlzLnpvbmUsIHRoaXMuem9uZS55KTtcclxuICB9XHJcblxyXG4gIGNhbGMoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy50bXApO1xyXG4gICAgdGhpcy50bXAgPSBzZXRUaW1lb3V0KHRoaXMuc2V0SGVpZ2h0LmJpbmQodGhpcyksIDEwKTtcclxuICB9XHJcblxyXG4gIHNldEhlaWdodCgpIHtcclxuICAgIGlmICh0aGlzLnRtcCkgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuXHJcbiAgICB0aGlzLnpvbmUuaCA9IHRoaXMuYmg7XHJcbiAgICB0aGlzLmlzU2Nyb2xsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHRoaXMuaCA9IHRoaXMuY2FsY1VpcygpO1xyXG5cclxuICAgICAgbGV0IGhoaCA9IHRoaXMuZm9yY2VIZWlnaHRcclxuICAgICAgICA/IHRoaXMuZm9yY2VIZWlnaHQgKyB0aGlzLnpvbmUueVxyXG4gICAgICAgIDogd2luZG93LmlubmVySGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5tYXhIZWlnaHQgPSBoaGggLSB0aGlzLnpvbmUueSAtIHRoaXMuYmg7XHJcblxyXG4gICAgICBsZXQgZGlmZiA9IHRoaXMuaCAtIHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgaWYgKGRpZmYgPiAxKSB7XHJcbiAgICAgICAgdGhpcy5pc1Njcm9sbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLmJoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cFNjcm9sbCh0aGlzLmlzU2Nyb2xsKTtcclxuXHJcbiAgICB0aGlzLmlubmVyQ29udGVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnpvbmUuaCAtIHRoaXMuYmggKyBcInB4XCI7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggKyBcInB4XCI7XHJcbiAgICB0aGlzLmJvdHRvbS5zdHlsZS50b3AgPSB0aGlzLnpvbmUuaCAtIHRoaXMuYmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9yY2VIZWlnaHQgJiYgdGhpcy5sb2NrSGVpZ2h0KVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5mb3JjZUhlaWdodCArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2FudmFzKSB0aGlzLmRyYXcodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICByZXpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNldFdpZHRoKHcpIHtcclxuICAgIGlmICh3KSB0aGlzLnpvbmUudyA9IHc7XHJcblxyXG4gICAgdGhpcy56b25lLncgPSBNYXRoLmZsb29yKHRoaXMuem9uZS53KTtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS53aWR0aCA9IHRoaXMuem9uZS53ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuaXNDZW50ZXIpXHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5tYXJnaW5MZWZ0ID0gLU1hdGguZmxvb3IodGhpcy56b25lLncgKiAwLjUpICsgXCJweFwiO1xyXG4gICAgdGhpcy5zZXRJdGVtV2lkdGgodGhpcy56b25lLncgLSB0aGlzLnN3KTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW1XaWR0aCh3KSB7XHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgdGhpcy51aXNbaV0uc2V0U2l6ZSh3KTtcclxuICAgICAgdGhpcy51aXNbaV0uclNpemUoKTtcclxuICAgIH1c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O0NBQ25CLE9BQU87Q0FDUCxNQUFNLENBQUMsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO0NBQzNCLEtBQUs7QUFDTDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO0NBQ2hDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDM0IsTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDekM7Q0FDQTtDQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFO0NBQ3RCLFFBQVEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ3RCLFFBQVEsT0FBTyxLQUFLLENBQUM7Q0FDckIsT0FBTztBQUNQO0NBQ0EsTUFBTSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7Q0FDOUIsTUFBTSxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztDQUMxQixLQUFLO0FBQ0w7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDL0M7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUM5QyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDN0M7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUss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LEVBQUUsQ0FBQztDQUMxQixRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUc7Q0FDdEMsVUFBVSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUM7Q0FDakUsU0FBUztDQUNULFFBQVEsT0FBTyxRQUFRLENBQUM7Q0FDeEIsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7Q0FDOUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0NBQzNDLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM1RDtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzlCO0NBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFCO0NBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzNCO0NBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hEO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDekI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDL0UsYUFBYSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7Q0FDekIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDekQsUUFBUSxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3hDLFFBQVEsT0FBTyxDQUFDLENBQUM7Q0FDakIsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDekI7Q0FDQSxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzVFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDMUI7Q0FDQSxRQUFRLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pIO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7Q0FDdEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3JDLFFBQVEsT0FBTyxDQUFDLENBQUM7Q0FDakIsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNwRCxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0NBQ0E7QUFDQTtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakM7Q0FDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RELFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztDQUNsQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQ2xFLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQ2pKLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFFLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0NBQ3ZCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7Q0FDM0QsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztDQUNqRSxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0NBQ2pFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNuQixTQUFTO0NBQ1QsUUFBUSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMzQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0M7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxQyxhQUFhO0NBQ2IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzNELFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzFCLFlBQVksT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztDQUN6RyxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksWUFBWSxFQUFFLFdBQVcsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHO0FBQzlEO0NBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hEO0NBQ0EsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRztDQUNBLFNBQVM7QUFDVDtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBLElBQUksT0FBTyxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ2hDO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFHO0NBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0NBQ3BKLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ25DLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvRixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDckg7Q0FDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQzdJLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVB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WSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDdEUsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7Q0FDQTtDQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0NBQzFFLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzFFO0NBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzSDtDQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDNUg7Q0FDQTtBQUNBO0NBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDdEYsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDcEcsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0Y7Q0FDQSxZQUFZLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQy9CO0NBQ0EsU0FBUyxNQUFNO0NBQ2Y7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDNUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7Q0FDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLHdCQUF3QixFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNySSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0YsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEk7Q0FDQSxZQUFZLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0NBQy9CLFNBQVM7QUFDVDtDQUNBO0FBQ0E7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLGFBQWEsRUFBRSxZQUFZO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDcEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxvQkFBb0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Q0FDaEosUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ3ZDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ25CLFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUMzQixRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7Q0FDeEIsUUFBVyxJQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUs7Q0FDNUQsUUFBUSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDO0NBQ2pELFFBQVEsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0NBQ3ZCO0NBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsQztDQUNBLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkIsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDOUIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztDQUNqQyxZQUFZLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUM7QUFDaEQ7Q0FDQSxZQUFZLEVBQUUsR0FBRztDQUNqQixnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzNDLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRztDQUN2RCxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0NBQzNDLGFBQWEsQ0FBQztDQUNkO0NBQ0EsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFB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LENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUMzQztDQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzNCO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDakQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0NBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0NBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEM7Q0FDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN4QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDMUQsU0FBUyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hCO0NBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0NBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2pEO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztBQUN2RDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztDQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7Q0FDbEMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO0FBQ3hDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7Q0FDcEMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakM7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMzQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0NBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUMxQjtDQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztDQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztBQUNuQztDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLElBQUksR0FB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QUNWO0NBQ0EsSUFBSSxRQUFRLElBQUksQ0FBQyxTQUFTO0NBQzFCLE1BQU0sS0FBSyxDQUFDO0NBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2QsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDaEIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDakIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7Q0FDbEIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7Q0FDbkIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxPQUFPLENBQUM7Q0FDcEIsUUFBUSxNQUFNO0NBQ2QsTUFBTSxLQUFLLENBQUM7Q0FDWixRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7Q0FDckIsUUFBUSxNQUFNO0NBQ2QsS0FBSztBQUNMO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQ2xELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzNDLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtDQUNkLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3BDLElBQUk7Q0FDSixNQUFNLElBQUks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QyxJQUFHO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07QUFDN0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUU7QUFDakQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDdkM7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxFQUFDO0NBQ25DLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUU7Q0FDL0IsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBQztBQUNqQztDQUNBLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQzNFO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7Q0FDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7Q0FDN0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUM7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFNO0NBQ3JDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFFO0FBQ3RCO0NBQ0EsUUFBUSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNsQztDQUNBLFFB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LEdBQUcsS0FBSTtDQUNsRDtDQUNBLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFDO0NBQzVELFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQjtDQUNBO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7Q0FDckUsU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRDtDQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0NBQy9DLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2hEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0E7O0NDcFBPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUU7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFLO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUM7Q0FDakMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUk7QUFDdEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBSztDQUM5QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUM7Q0FDMUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxRQUFRLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFFO0FBQy9CO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFLO0NBQ2hDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsR0FBRTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRTtBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSTtDQUM1QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDO0NBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3BDO0NBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTTtDQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxTQUFRO0NBQ3JELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0NBQ3pCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFFO0FBQ3hCO0NBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFDO0NBQ3hCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0NBQ3RCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0FBQ2xJO0NBQ0E7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFFO0FBQ3RDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0NBQ3pELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtDQUMzRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUM1RjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNuQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDckI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztBQUMvQztDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07Q0FDNUIsUUFBUSxJQUFJLE1BQUs7QUFDakI7Q0FDQSxRQUFRLFFBQVEsSUFBSTtDQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtDQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDOUQsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDNUssZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDOUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNqRSxnQkFBZ0IsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVE7Q0FDL0ssZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdEO0NBQ0EsWUFBWSxNQUFNO0NBQ2xCLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0NBQ2pEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxPQUFPLENBQUM7Q0FDN0QsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztDQUMxRSxhQUFhLE9BQU8sVUFBVSxDQUFDO0FBQy9CO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDdkIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN6QixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDOUIsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9EO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ2hDO0NBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDekMsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEU7Q0FDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNyQyxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvQztDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbkMsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtDQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztDQUM1QyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNyQyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztDQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDL0IsU0FBUztBQUNUO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7Q0FDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7Q0FDQSxRQUFRLElBQUksSUFBSSxLQUFLLFVBQVUsR0FBRztDQUNsQztDQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDckQ7Q0FDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7Q0FDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUN4RCxhQUFhLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztDQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3hELGFBQWE7Q0FDYjtDQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMvQixZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQztDQUNBLFlBQVksT0FBTyxJQUFJLENBQUM7Q0FDeEI7Q0FDQSxTQUFTO0NBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkIsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQ2xELFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QyxRQUFRLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNsRztDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlEO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElB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QUcsS0FBSyxDQUFDO0NBQzlCLFFBQVE7QUFDUjtDQUNBLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRztBQUMzQjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUc7QUFDaEM7Q0FDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDNUMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDckMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FO0NBQ0EsU0FBUyxNQUFNO0FBQ2Y7Q0FDQSxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDaEMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hDO0NBQ0EsU0FBUyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQzlDLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNuQztDQUNBLFNBQVMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDakMsU0FBUyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3JDO0NBQ0EsU0FBUyxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDL0QsU0FBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztDQUNoRCxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUU7Q0FDN0IsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ2xDLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3BDLFNBQVMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7Q0FDQSxTQUFTLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRztDQUN4QixPQUFPLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDdkMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQ3hDLGVBQWUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Q0FDbkQ7Q0FDQSxPQUFPLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0NBQ0EsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0NBQ3hELE9BQU8sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMvQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5QixPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN2QyxPQUFPO0FBQ1A7Q0FDQSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7Q0FDcEQ7Q0FDQSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUM1QyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNFLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNqQztDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUs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LElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDaEQ7Q0FDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDeEMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM3RTtDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNuRCxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyRDtDQUNBLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPO0FBQ3BCO0NBQ0EsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3hELEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDdkUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztDQUMzRSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUks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S0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzFDO0NBQ0EsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN0QjtDQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDM0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzVCLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDN0MsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN0QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDN0MsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDO0NBQ0EsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEM7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEU7Q0FDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM1QztDQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDMUUsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElB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QUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMxRSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xDLFlBQVksQ0FBQyxFQUFFLENBQUM7QUFDaEI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksQ0FBQyxHQUFHO0FBQ1o7Q0FDQSxRQUFRLEtBQUssQ0FBQyxJQUFJLEdBQUU7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztDQUNsRSxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0NBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3BDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDbkQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7Q0FDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztDQUNuRSxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUMzRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7Q0FDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN0RDtDQUNBLFFBQVEsSUFBSSxDQUFD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QUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDdEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNyQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUN0RixjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQzdEO0NBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUg7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7Q0FDckMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQztDQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDO0NBQzlDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUk7Q0FDOUMsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDdkI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztDQUNyQyxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQzNDLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksR0FBRyxDQUFDO0NBQ2hGLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUss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QUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQ2pDLGFBQWE7QUFDYjtDQUNBLFNBQVM7QUFDVDtDQUNBLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRTtDQUNyQztBQUNBO0NBQ0EsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyQztDQUNBLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBQztDQUM1QyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDcEM7Q0FDQSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFHO0NBQzFCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRTtBQUN0QjtDQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztDQUN6RCxXQUFXLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUM7Q0FDeEUsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBQztBQUNsRDtDQUNBLE1BQU0sRUFBRSxHQUFHLEdBQUU7Q0FDYixNQUFNLEVBQUUsR0FBRyxFQUFDO0FBQ1o7Q0FDQSxNQUFNO0FBQ047Q0FDQSxLQUFLLE9BQU8sQ0FBQztBQUNiO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0NBQ2hFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEM7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRTtDQUM1QixRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQztDQUNqRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDbEI7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUk7QUFDOUI7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0NBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUU7Q0FDOUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDdkM7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBOztDQ2xUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsS0FBSyxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUk7Q0FDckIsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUM7Q0FDcEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7Q0FDekIsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0NBQ2xCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQjtDQUNBLEtBQUs7Q0FDTDtDQUNBOztDQ1RPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztDQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7Q0FDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0FBQzNCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSTtBQUM5QjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0NBQ3JCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7Q0FDekIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7QUFDM0I7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBQztDQUNwQztBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQzNCO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7QUFDNUM7Q0FDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzlCO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7Q0FDM0IsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLG9DQUFvQyxHQUFHLEdBQUU7QUFDL0U7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLDRDQUE0QyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUM7Q0FDNUgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQzVLO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFJO0NBQzFEO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFBQztBQUMxSTtDQUNBLFFBQWdCLElBQUksQ0FBQyxFQUFFO0NBQ3ZCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBTztBQUNoQztDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUU7QUFDMUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ2hDO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDakI7Q0FDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLElB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QUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0NBQ3pDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUk7QUFDNUQ7Q0FDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRDtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0NBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0NBQzNDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztDQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQzFCLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxH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QUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMvRTtDQUNBLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6QztDQUNBLFFBQVEsS0FBSyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRztDQUN4QyxZQUFZLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMzRCxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztDQUMzRCxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztDQUMzRCxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pFO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtDQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Q0FDOUMsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtDQUNBLFFBQVEsSUFBSSxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekM7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7QUFDcEM7Q0FDQSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzlCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzQztDQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUM1RSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUU7Q0FDQSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdkU7Q0FDQSxhQUFhO0FBQ2I7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzdCO0FBQ0E7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDcEQ7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0NBQ2xFLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRTtDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUM1QjtDQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzdELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFD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QUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ25JO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUNuQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0NBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtDQUN6RDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNqRixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxH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Q0FDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlDO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RztDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZELFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RDtDQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Q0FDdEMsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDaEQ7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7Q0FDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7Q0FDNUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzVDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0NBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztDQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUMvQixTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztDQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHO0NBQzlCO0NBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUNyRDtDQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztDQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0NBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDeEQsYUFBYTtDQUNiO0NBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0NBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztDQUN4QjtDQUNBLFNBQVM7Q0FDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ3pELFFBQVEsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQzVDLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQzFDO0FBQ0E7Q0FDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsWUFBWSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQzVDLFlBQVksSUFBSSxHQUFHLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxLQUFLLENBQUM7Q0FDckQsU0FBUyxNQUFNO0NBQ2YsWUFBWSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNyRCxZQUFZLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQzFCLFNBQVM7QUFDVDtDQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRztBQUMzQztDQUNBLFlBQVksQ0FBQyxHQUFHLFVBQVUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7Q0FDMUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQy9DLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUMvQyxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDaEQsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQ2hELFlBQVksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQzlEO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVEO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDcEMsUUFBUSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNyRTtDQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztDQUNqQyxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDakM7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7Q0FDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDcEMsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0NBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDckY7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7Q0FDQSxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0NBQ25DLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUNwQyxZQUFZLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqSTtDQUNBLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO0NBQ25LLFlBQVksSUFBSSxD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QVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDekIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZDO0NBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQy9EO0NBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDL0Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNoRTtBQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2pELFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDL0MsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUM5QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzlDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Q0FDdkQsUUFBUSxJQUFJLENBQUMsWUFBWSxD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QUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNwQixLQUFLO0FBQ0w7Q0FDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUNyQixNQUFNLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDNUU7Q0FDQTtDQUNBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7Q0FDQTtDQUNBLE1BQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3REO0NBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ2hELE1BQU0sSUFBSSxVQUFVLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMzRDtDQUNBLE1BQU0sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ25EO0NBQ0EsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNsQztDQUNBLE1BQU0sSUFBSSxLQUFLLENBQUM7Q0FDaEIsTUFBTSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0NBQ3BELFFBQVEsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM5QyxRQUFR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QztDQUM3QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQ3hELFFBQVEsTUFBTTtDQUNkLE1BQU0sS0FBSyxDQUFDO0NBQ1o7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUNqQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUN0QyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0NBQzVELFFBQVEsTUFBTTtDQUNkLEtBQUs7Q0FDTCxHQUFHO0FBQ0g7Q0FDQSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7Q0FDYixJQUFJLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUQ7Q0FDQSxJQUFJLElBQUksT0FBTztDQUNmLE1BQU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUU7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztDQUMzQztBQUNBO0NBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDdEQsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM1RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDakU7Q0FDQSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUN4QixHQUFHO0FBQ0g7Q0FDQSxFQUFFLEtBQUssR0FBRztDQUNWLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xCO0NBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDOUIsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEI7Q0FDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDckIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNyRCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FB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QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQzVCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDM0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDckM7Q0FDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQztDQUN2QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztDQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUM7Q0FDL0I7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3ZCLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPO0NBQ3RCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO0NBQ2hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBRztDQUNqQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN2QztDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztBQUMzQztDQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7Q0FDekQsYUFBYSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ3REO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDNUI7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwQztDQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztDQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDcEM7Q0FDQSxLQUFLO0FBQ0w7QUFDQTtDQUNBOztDQ2pMTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7Q0FDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0NBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7Q0FDQSxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLGlEQUFpRCxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdEo7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7QUFDM0I7Q0FDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzdDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0NBQ2hEO0NBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDO0FBQ2pEO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVB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QVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7Q0FDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDdkw7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBQztBQUNyQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7Q0FDakQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sTUFBTSxDQUFDO0NBQzlELFFBQVEsT0FBTyxHQUFHO0FBQ2xCO0NBQ0EsS0FBSztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztDQUNsQjtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0NBQ3pCO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFH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QUssRUFBRSxDQUFDO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEw7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekM7Q0FDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0I7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzlDO0NBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzlCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7Q0FDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFB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O0FBQ3RFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0NBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQjtDQUNBLFFBQVcsSUFBVyxJQUFJO0FBQzFCO0NBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztDQUN2QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQztDQUNBLFlBQVksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3JCLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzlELGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDN0QsYUFBYSxNQUFNO0NBQ25CLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzlELGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDN0QsYUFBYTtBQUNiO0NBQ0EsU0FBUztBQUNUO0NBQ0EsUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QjtDQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0M7Q0FDQSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUMzRCxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbEQ7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQTs7Q0MxVE8sTUFBTSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ2pDO0NBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtDQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztDQUMvQixRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7Q0FDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUU7QUFDeEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Q0FDbEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2RDtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0NBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNuRDtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDL0M7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztDQUNBO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3JFO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDOUY7Q0FDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUM7Q0FDQTtDQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztDQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztDQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7Q0FDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztDQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0NBQ0EsU0FBUztBQUNUO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsd0JBQXdCLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzNJLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUU7QUFDakM7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUM5QyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtDQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtDQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNoRDtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0NBQ3JFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDdEY7Q0FDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBRztBQUN2QjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtDQUNuQixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUU7QUFDdkI7Q0FDQSxLQUFLO0NBQ0w7Q0FDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztDQUNuQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQjtDQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDakQ7QUFDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxPQUFPLENBQUM7Q0FDN0QsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztDQUMxRSxhQUFhLE9BQU8sS0FBSyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7Q0FDQSxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFDMUM7Q0FDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQy9CLFlBQVksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNoQyxZQUFZLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoQyxTQUFTO0FBQ1Q7Q0FDQSxLQUFLO0FBQ0w7Q0FDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtDQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFFO0NBQzFELFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7Q0FDekU7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQy9CO0NBQ0EsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0NBQ2xCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNsQjtDQUNBLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0NBQ3ZELFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3ZEO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0FBQ0E7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUNqQztDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0NBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0NBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtDQUNBLFFBQVEsUUFBUSxJQUFJO0NBQ3BCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0NBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Q0FDMUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7Q0FDM0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUM7Q0FDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7Q0FDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7Q0FDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7Q0FDOUQ7Q0FDQSxZQUFZLE1BQU07Q0FDbEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7Q0FDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztDQUNoRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztDQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRTtDQUNwRTtDQUNBLFlBQVksTUFBTTtDQUNsQixTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0NBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQTtBQUNBO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7Q0FDQTtDQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0NBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7Q0FDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtDQUNBLEtBQUs7QUFDTDtDQUNBLElBQUksU0FBUyxHQUFHO0FBQ2hCO0NBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHO0FBQy9CO0NBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtDQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7Q0FDQSxTQUFTO0FBQ1Q7Q0FDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3REO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7Q0FDQTtBQUNBO0NBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFNO0FBQzdCO0NBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUN4RSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFO0NBQ0EsS0FBSztBQUNMO0NBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRztBQUMvQjtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDdkcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RztDQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFFO0FBQ3BIO0NBQ0E7QUFDQTtDQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMxQjtDQUNBLEtBQUs7QUFDTDtDQUNBO0FBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7QUFDQTtDQUNBOztDQ3JSQTtBQUlBO0NBQ08sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0NBQ3BDLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Q0FDckI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0NBQ3RCLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQztBQUNoQztDQUNBLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ1gsRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDO0FBQzdDO0NBQ0E7Q0FDQSxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDM0IsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FB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QyxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDOUM7Q0FDQSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaO0NBQ0E7Q0FDQSxFQUFFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0NBQ2xELEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDMUIsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNsRSxHQUFHLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Q0FDcEMsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzNELEdBQUc7Q0FDSCxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzVDO0NBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDL0MsR0FBRyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlCLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtDQUMzQixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDNUMsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENB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RSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzNCLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDN0IsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEM7Q0FDQTtDQUNBLEVBQUUsR0FBRyxDQUFDLFdBQVcsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDM0M7Q0FDQTtDQUNBLEVBQUUsTUFBTSxRQUFRO0NBQ2hCLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztDQUNyRSxFQUFFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUM7Q0FDM0QsRUFBRSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztDQUMxRSxFQUFFLE1BQU0sT0FBTztDQUNmLEdBQUcsSUFBSSxDQUFDLFdBQVc7Q0FDbkIsR0FBRyxNQUFNO0NBQ1QsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDO0NBQ3pCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQSxFQUFFLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztDQUN6QixFQUFFLElBQUksTUFBTSxJQUFJLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFO0NBQzlEO0NBQ0E7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LEVBQUU7QUFDRjtDQUNBO0NBQ0EsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0NBQ2IsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3JDLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNyQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztDQUMxQixFQUFFO0FBQ0Y7Q0FDQSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0NBQ2xCLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQy9DLEdBQUcsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM5QixHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDdEI7Q0FDQSxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUMvRCxJQUFJLFNBQVM7QUFDYjtDQUNBLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtDQUMzQixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUMvQyxLQUFLLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFL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SUFBSSxDQUFDO0FBQ2I7Q0FDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDakU7Q0FDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7Q0FDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO0FBQzVDO0NBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3BFO0NBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQjtDQUNBO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7Q0FDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7Q0FDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztDQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDZjtDQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7Q0FDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0NBQ0E7Q0FDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Q0FDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEQ7Q0FDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDdkU7Q0FDQTtDQUNBLElBQUksSUFBSSxDQUFDLFFBQVEs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LENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0NBQzFELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDdkMsR0FBRztBQUNIO0NBQ0EsRUFBRSxNQUFNLEdBQUc7Q0FDWCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0NBQzVCLEdBQUc7QUFDSDtDQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtDQUNkLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0NBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ2xELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUTtDQUNyQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzVFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDN0MsR0FBRztBQUNIO0NBQ0EsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFO0NBQ2xCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Q0FDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0NBQ2hCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0IsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzFCLEtBQUs7Q0FDTCxHQUFHO0NBQ0g7Ozs7Ozs7Ozs7Ozs7OyJ9 diff --git a/build/uil.min.js b/build/uil.min.js index 5014eca..eae3ccf 100644 --- a/build/uil.min.js +++ b/build/uil.min.js @@ -300,9 +300,14 @@ e.clientX = R.ID.mouse.x; e.clientY = R.ID.mouse.y; } else if (R.ID.isCanvas) { - // NUEVO: si es canvas con parent, usar mouse virtual + offset del GUI - e.clientX = R.ID.zone.x + R.ID.mouse.x; - e.clientY = R.ID.zone.y + R.ID.mouse.y; + // Solo usar mouse virtual si el evento es "programático" (coords -1) + // y además el mouse virtual ya fue seteado (>=0). + const wantsVirtual = (e.clientX === -1 || e.clientY === -1); + const hasMouse = (R.ID.mouse.x >= 0 && R.ID.mouse.y >= 0); + if (wantsVirtual && hasMouse) { + e.clientX = R.ID.zone.x + R.ID.mouse.x; + e.clientY = R.ID.zone.y + R.ID.mouse.y; + } } //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 @@ -9661,4 +9666,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfSBlbHNlIGlmIChSLklELmlzQ2FudmFzKSB7XHJcbiAgICAgICAgLy8gTlVFVk86IHNpIGVzIGNhbnZhcyBjb24gcGFyZW50LCB1c2FyIG1vdXNlIHZpcnR1YWwgKyBvZmZzZXQgZGVsIEdVSVxyXG4gICAgICAgIGUuY2xpZW50WCA9IFIuSUQuem9uZS54ICsgUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQuem9uZS55ICsgUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gXCIuLi9jb3JlL1Jvb3RzLmpzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcblx0Y29uc3RydWN0b3IobyA9IHt9KSB7XHJcblx0XHQvLyBBUEkgcMO6YmxpY2EgZXNwZXJhZGE6XHJcblx0XHQvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KVxyXG5cdFx0Ly8gby5mb2N1c2VkIChib29sKSwgby5mb2N1c1BhdGggKGFycmF5KSwgby5mb2N1c0xldmVsIChudW1iZXIpXHJcblx0XHQvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcblx0XHRvLnNlbGVjdGFibGUgPSB0cnVlO1xyXG5cdFx0by5uYW1lID0gby5uYW1lIHx8IFwiVHJlZUxpc3RcIjtcclxuXHJcblx0XHRzdXBlcihvKTtcclxuXHRcdHRoaXMuZW5hYmxlSG92ZXIgPSBvLmVuYWJsZUhvdmVyICE9PSBmYWxzZTtcclxuXHJcblx0XHQvLyBEYXRvcyAmIGVzdGFkb1xyXG5cdFx0dGhpcy50cmVlID0gby50cmVlIHx8IHt9O1xyXG5cdFx0dGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNlZCA9ICEhby5mb2N1c2VkO1xyXG5cdFx0dGhpcy5mb2N1c1BhdGggPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09IFwibnVtYmVyXCIgPyBvLmZvY3VzTGV2ZWwgOiAtMTtcclxuXHJcblx0XHR0aGlzLnRhYkluZGV4ID0gby50YWJJbmRleCA/PyBudWxsO1xyXG5cdFx0dGhpcy5pdGVtSW5kZXggPSBvLml0ZW1JbmRleCA/PyBudWxsO1xyXG5cclxuXHRcdC8vIENhbGxiYWNrXHJcblx0XHR0aGlzLmNoYW5nZUNiID1cclxuXHRcdFx0dHlwZW9mIG8ub25DaGFuZ2UgPT09IFwiZnVuY3Rpb25cIiA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcblx0XHQvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuXHRcdHRoaXMubGluZUggPSB0aGlzLmg7IC8vIGFsdG8gZGUgVU5BIGZpbGFcclxuXHRcdHRoaXMubGV2ZWxHYXAgPSB0aGlzLmNvbG9ycy5zeSB8fCAyOyAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcblx0XHR0aGlzLmxlYWZNYXggPSAwOyAvLyBzZSBjYWxjdWxhIGVuIHJTaXplKClcclxuXHJcblx0XHQvLyBNb2RlbG8gdmlzdWFsXHJcblx0XHR0aGlzLmxldmVscyA9IFtdOyAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuXHRcdHRoaXMuaXRlbXNEb20gPSBbXTsgLy8gZXNwZWpvIERPTSBwb3Igbml2ZWxcclxuXHRcdHRoaXMuaG92ZXIgPSB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogcmVjb3JkYXIgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYSAocGVyc2lzdGVudGUpXHJcblx0XHR0aGlzLmxhc3RMZWFmID0geyBwYXJlbnRQYXRoOiBbXSwga2V5OiBudWxsIH07IC8vIHBhcmVudFBhdGggZXMgbGEgcnV0YSBoYXN0YSBlbCBtYXBhIHBhZHJlXHJcblxyXG5cdFx0Ly8gQ29udGVuZWRvciBpbnRlcm5vIChhYnNvbHV0bylcclxuXHRcdHRoaXMuY1syXSA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcImRpdlwiLFxyXG5cdFx0XHR0aGlzLmNzcy5iYXNpYyArIFwibGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7XCJcclxuXHRcdCk7XHJcblx0XHR0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG5cdFx0dGhpcy5pbml0KCk7XHJcblxyXG5cdFx0Ly8gU2kgZWwgdmFsb3IgaW5pY2lhbCB5YSBhcHVudGEgYSB1bmEgaG9qYSB2w6FsaWRhLCByZWNvcmRhciBlc2EgaG9qYVxyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG5cdHN0YXRpYyBpc01hcChub2RlKSB7XHJcblx0XHRyZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblx0c3RhdGljIGlzTGlzdChub2RlKSB7XHJcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUmVjb3JyaWRvIGRlIGRhdG9zID09PT09PT1cclxuXHRnZXROb2RlQXRQYXRoKHBhdGgpIHtcclxuXHRcdGxldCBub2RlID0gdGhpcy50cmVlO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIHBhdGhbaV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuXHRcdFx0XHRub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBMbGVnYW1vcyBhIHVuYSBsaXN0YTogeWEgbm8gaGF5IG3DoXMgY2xhdmVzIHbDoWxpZGFzXHJcblx0XHRcdFx0aWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuXHR9XHJcblxyXG5cdC8vIEF1dG9jb21wbGV0YXI6IGJhamEgcG9yIHByaW1lcmFzIGNsYXZlcyBkZSBjYWRhIG1hcGEgaGFzdGEgYWxjYW56YXIgdW5hIGxpc3RhXHJcblx0YXV0b0NvbXBsZXRlVG9MZWFmKGJhc2VQYXRoKSB7XHJcblx0XHRsZXQgeyBub2RlIH0gPSB0aGlzLmdldE5vZGVBdFBhdGgoYmFzZVBhdGgpO1xyXG5cdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLnNsaWNlKCk7XHJcblx0XHR3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG5cdFx0XHRpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuXHRcdFx0Y29uc3QgazAgPSBrZXlzWzBdO1xyXG5cdFx0XHRwYXRoLnB1c2goazApO1xyXG5cdFx0XHRub2RlID0gbm9kZVtrMF07XHJcblx0XHR9XHJcblx0XHQvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2EgdW4gw610ZW0gZmluYWwgZGUgbGEgaG9qYVxyXG5cdFx0cmV0dXJuIHBhdGg7XHJcblx0fVxyXG5cclxuXHQvLyBSdXRhIGFjdGl2YSAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpbm8gdmFsdWUpXHJcblx0Z2V0QWN0aXZlUGF0aCgpIHtcclxuXHRcdHJldHVybiB0aGlzLmZvY3VzZWQgPyB0aGlzLmZvY3VzUGF0aCA6IHRoaXMudmFsdWU7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFRhbWHDsW8gZGUgaG9qYSBtw6F4aW1vIChwYXJhIGxheW91dCBlc3RhYmxlKSA9PT09PT09XHJcblx0Y29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBub2RlLmxlbmd0aDtcclxuXHRcdGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIDA7XHJcblx0XHRsZXQgbSA9IDA7XHJcblx0XHRmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcclxuXHRcdFx0bSA9IE1hdGgubWF4KG0sIHRoaXMuY29tcHV0ZUxlYWZNYXgobm9kZVtrXSkpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG07XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IENvbnN0cnVjY2nDs24gZGUgbml2ZWxlcyAobW9kZWxvIGzDs2dpY28pID09PT09PT1cclxuXHRidWlsZExldmVscygpIHtcclxuXHRcdHRoaXMubGV2ZWxzLmxlbmd0aCA9IDA7XHJcblx0XHRjb25zdCBhY3RpdmVQYXRoID0gdGhpcy5nZXRBY3RpdmVQYXRoKCk7XHJcblxyXG5cdFx0bGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcblx0XHRsZXQgbGV2ZWwgPSAwO1xyXG5cclxuXHRcdHdoaWxlIChub2RlKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdC8vIE5pdmVsIGludGVybWVkaW86IGNsYXZlcyBkZWwgbWFwYSAoaG9yaXpvbnRhbClcclxuXHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcblx0XHRcdFx0aWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcblx0XHRcdFx0dGhpcy5sZXZlbHMucHVzaCh7XHJcblx0XHRcdFx0XHR0eXBlOiBcIm1hcFwiLFxyXG5cdFx0XHRcdFx0aXRlbXM6IGtleXMubWFwKChrKSA9PiAoe1xyXG5cdFx0XHRcdFx0XHRrZXk6IGssXHJcblx0XHRcdFx0XHRcdGxhYmVsOiBrLFxyXG5cdFx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAgfSxcclxuXHRcdFx0XHRcdH0pKSxcclxuXHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogdGhpcy5saW5lSCB9LFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcblx0XHRcdFx0aWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuXHRcdFx0XHRub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAoKGxhYmVsKSA9PiAoe1xyXG5cdFx0XHRcdFx0a2V5OiBsYWJlbCxcclxuXHRcdFx0XHRcdGxhYmVsLFxyXG5cdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuXHRcdFx0XHR0aGlzLmxldmVscy5wdXNoKHtcclxuXHRcdFx0XHRcdHR5cGU6IFwibGlzdFwiLFxyXG5cdFx0XHRcdFx0aXRlbXMsXHJcblx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IGhMaXN0IH0sXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV2ZWwrKztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gTGF5b3V0ICh6b25hcyAmIERPTSkgPT09PT09PVxyXG5cdGxheW91dExldmVscygpIHtcclxuXHRcdGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7IC8vIGNvbHVtbmEgZGUgbGFiZWwgKyBwYWRkaW5nXHJcblx0XHRjb25zdCBwYWRSaWdodCA9IDg7XHJcblx0XHRjb25zdCB3ID0gdGhpcy56b25lLncgLSBjb250ZW50WCAtIHBhZFJpZ2h0O1xyXG5cclxuXHRcdGxldCB5ID0gMDtcclxuXHJcblx0XHQvLyBBanVzdGFyIGl0ZW1zRG9tIGEgY2FudGlkYWQgZGUgbml2ZWxlc1xyXG5cdFx0d2hpbGUgKHRoaXMuaXRlbXNEb20ubGVuZ3RoIDwgdGhpcy5sZXZlbHMubGVuZ3RoKVxyXG5cdFx0XHR0aGlzLml0ZW1zRG9tLnB1c2goW10pO1xyXG5cdFx0Zm9yIChsZXQgTCA9IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCA8IHRoaXMuaXRlbXNEb20ubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiB0aGlzLml0ZW1zRG9tW0xdKVxyXG5cdFx0XHRcdGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuXHRcdFx0XHRjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cdFx0XHRcdGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG5cdFx0XHRcdGxldCB4ID0gY29udGVudFg7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0XHRcdFx0aXQuem9uZSA9IHsgeCwgeSwgdzogY2VsbFcsIGg6IHRoaXMubGluZUggfTtcclxuXHRcdFx0XHRcdGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuXHRcdFx0XHRcdHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsIFwibWFwXCIpO1xyXG5cdFx0XHRcdFx0eCArPSBjZWxsVztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG5cdFx0XHRcdHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG5cdFx0XHRcdGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcblx0XHRcdFx0bHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuXHRcdFx0XHRjb25zdCByb3dzID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNSZWFsID0gaSA8IG47XHJcblx0XHRcdFx0XHRjb25zdCBpdCA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXVxyXG5cdFx0XHRcdFx0XHQ6IHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTogbnVsbCxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0XHRcdCAgfTtcclxuXHRcdFx0XHRcdGl0LnpvbmUgPSB7XHJcblx0XHRcdFx0XHRcdHg6IGNvbnRlbnRYLFxyXG5cdFx0XHRcdFx0XHR5OiB5ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdHcsXHJcblx0XHRcdFx0XHRcdGg6IHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Y29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG5cdFx0XHRcdFx0dGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgXCJsaXN0XCIsIGlzUmVhbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBmaWxhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIHJvd3MpO1xyXG5cdFx0XHRcdHkgKz0gaExpc3Q7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBBanVzdGVzIGRlIGFsdG8gaW50ZXJubyBkZWwgY29udGVuZWRvciB2aXN1YWxcclxuXHRcdGNvbnN0IHRvdGFsSCA9IHk7XHJcblx0XHR0aGlzLnpvbmUuaCA9IHRvdGFsSCArIHRoaXMubWFyZ2luO1xyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG5cdFx0dGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArIFwicHhcIjtcclxuXHJcblx0XHQvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcblx0XHR0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcblx0fVxyXG5cclxuXHQvLyBFbGltaW5hIG5vZG9zIERPTSBzb2JyYW50ZXMgZW4gbGEgZmlsYSBMIGEgcGFydGlyIGRlbCDDrW5kaWNlIGtlZXBcclxuXHRfcHJ1bmVSb3coTCwga2VlcCkge1xyXG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuXHRcdGlmICghcm93KSByZXR1cm47XHJcblx0XHRmb3IgKGxldCBqID0ga2VlcDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRjb25zdCBlbCA9IHJvd1tqXTtcclxuXHRcdFx0aWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG5cdFx0fVxyXG5cdFx0cm93Lmxlbmd0aCA9IGtlZXA7XHJcblx0fVxyXG5cclxuXHRlbnN1cmVJdGVtRG9tKEwsIGkpIHtcclxuXHRcdGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcblx0XHR3aGlsZSAocm93Lmxlbmd0aCA8PSBpKSByb3cucHVzaChudWxsKTtcclxuXHRcdGlmICghcm93W2ldKSB7XHJcblx0XHRcdGNvbnN0IGRpdiA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcdFwiZGl2XCIsXHJcblx0XHRcdFx0VG9vbHMuY3NzLnR4dCArIFwicG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7XCJcclxuXHRcdFx0KTtcclxuXHRcdFx0dGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcblx0XHRcdHJvd1tpXSA9IGRpdjtcclxuXHRcdH1cclxuXHRcdHJldHVybiByb3dbaV07XHJcblx0fVxyXG5cclxuXHRwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG5cdFx0Y29uc3QgcyA9IGRpdi5zdHlsZTtcclxuXHRcdGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG5cdFx0Ly8gUG9zaWNpw7NuXHJcblx0XHRzLmxlZnQgPSBpdC56b25lLnggKyBcInB4XCI7XHJcblx0XHRzLnRvcCA9IGl0LnpvbmUueSArIFwicHhcIjtcclxuXHRcdHMud2lkdGggPSBpdC56b25lLncgKyBcInB4XCI7XHJcblx0XHRzLmhlaWdodCA9IGl0LnpvbmUuaCAtIDIgKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gVGV4dG9cclxuXHRcdGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogXCJcIjtcclxuXHJcblx0XHQvLyBFc3RhZG9zXHJcblx0XHRjb25zdCBzZWxlY3RlZCA9XHJcblx0XHRcdGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG5cdFx0Y29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiB0aGlzLmZvY3VzTGV2ZWwgPT09IEw7XHJcblx0XHRjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgdGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleTtcclxuXHRcdGNvbnN0IGlzSG92ZXIgPVxyXG5cdFx0XHR0aGlzLmVuYWJsZUhvdmVyICYmXHJcblx0XHRcdGlzUmVhbCAmJlxyXG5cdFx0XHR0aGlzLmhvdmVyLmxldmVsID09PSBMICYmXHJcblx0XHRcdHRoaXMuaG92ZXIuaW5kZXggPT09IGk7XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogwr9lc3RhIGZpbGEgZXMgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYT9cclxuXHRcdGxldCBpc0xhc3RMZWFmID0gZmFsc2U7XHJcblx0XHRpZiAoaXNSZWFsICYmIGtpbmQgPT09IFwibGlzdFwiICYmIHRoaXMubGFzdExlYWYua2V5ICE9IG51bGwpIHtcclxuXHRcdFx0Ly8gTGEgaG9qYSB2aXNpYmxlIGNvcnJlc3BvbmRlIHNpIGVsIHBhZHJlIGRlIGVzdGEgbGlzdGEgY29pbmNpZGUgY29uIHBhcmVudFBhdGggZ3VhcmRhZG9cclxuXHRcdFx0Ly8gRWwgcGFkcmUgYWN0dWFsIGVzIHRoaXMudmFsdWUuc2xpY2UoMCwgTCkgY3VhbmRvIGxhIGxpc3RhIGVzdMOhIGRlc3BsZWdhZGEgcG9yIHZhbHVlL2ZvY3VzXHJcblx0XHRcdGNvbnN0IHBhcmVudE5vdyA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpLnNsaWNlKDAsIEwpO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5fcGF0aHNFcXVhbChwYXJlbnROb3csIHRoaXMubGFzdExlYWYucGFyZW50UGF0aCkgJiZcclxuXHRcdFx0XHRpdC5rZXkgPT09IHRoaXMubGFzdExlYWYua2V5XHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGlzTGFzdExlYWYgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRXN0aWxvcyBiYXNlXHJcblx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG5cdFx0cy5jb2xvciA9IGNjLnRleHQ7XHJcblx0XHRzLmJvcmRlciA9IFwiMXB4IHNvbGlkIFwiICsgY2MuYm9yZGVyO1xyXG5cdFx0cy50ZXh0QWxpZ24gPSBraW5kID09PSBcIm1hcFwiID8gXCJjZW50ZXJcIiA6IFwibGVmdFwiO1xyXG5cclxuXHRcdC8vIFByaW9yaWRhZCB2aXN1YWw6XHJcblx0XHQvLyAxKSBzZWxlY2Npb25hZG8gKGF6dWwpXHJcblx0XHQvLyAyKSDDumx0aW1hIGhvamEgKG51ZXZvIGNvbG9yKVxyXG5cdFx0Ly8gMykgZm9jb1xyXG5cdFx0Ly8gNCkgaG92ZXJcclxuXHRcdGlmIChzZWxlY3RlZCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG5cdFx0fSBlbHNlIGlmIChpc0xhc3RMZWFmKSB7XHJcblx0XHRcdC8vIGNvbG9yIGRpc3RpbnRpdm8gcGFyYSBcIsO6bHRpbWEgaG9qYVwiIChhbWFyaWxsbyBzdWF2ZSlcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gXCJyZ2JhKDI1NSwgMjAwLCAwLCAwLjI1KVwiO1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dDtcclxuXHRcdH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG5cdFx0fSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG5cdFx0cy5vcGFjaXR5ID0gaXNSZWFsID8gXCIxXCIgOiBcIjBcIjtcclxuXHR9XHJcblxyXG5cdF9wYXRoc0VxdWFsKGEsIGIpIHtcclxuXHRcdGlmICghYSB8fCAhYiB8fCBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuXHRyU2l6ZSgpIHtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuXHRcdHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGUoKSB7XHJcblx0XHR0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcblx0XHR0aGlzLmxheW91dExldmVscygpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG5cdF90b0xvY2FsKGUpIHtcclxuXHRcdGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblx0XHRjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG5cdFx0cmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcblx0fVxyXG5cclxuXHRfaGl0VGVzdChteCwgbXkpIHtcclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGNvbnN0IHogPSBsdmwuem9uZTsgLy8geCB5IHcgeWEgaW5jbHV5ZW4gY29udGVudFhcclxuXHJcblx0XHRcdGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0bXggPj0gaXR6LnggJiZcclxuXHRcdFx0XHRcdFx0bXkgPj0gaXR6LnkgJiZcclxuXHRcdFx0XHRcdFx0bXggPD0gaXR6LnggKyBpdHoudyAmJlxyXG5cdFx0XHRcdFx0XHRteSA8PSBpdHoueSArIGl0ei5oXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuXHRcdFx0XHRcdGNvbnN0IGl0eiA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXS56b25lXHJcblx0XHRcdFx0XHRcdDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0eDogei54LFxyXG5cdFx0XHRcdFx0XHRcdFx0eTogei55ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdFx0XHR3OiB6LncsXHJcblx0XHRcdFx0XHRcdFx0XHRoOiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHQgIH07XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdG14ID49IGl0ei54ICYmXHJcblx0XHRcdFx0XHRcdG15ID49IGl0ei55ICYmXHJcblx0XHRcdFx0XHRcdG14IDw9IGl0ei54ICsgaXR6LncgJiZcclxuXHRcdFx0XHRcdFx0bXkgPD0gaXR6LnkgKyBpdHouaFxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IEwsIGksIHJlYWw6IGlzUmVhbCB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgTDogLTEsIGk6IC0xLCByZWFsOiBmYWxzZSB9O1xyXG5cdH1cclxuXHJcblx0aGFuZGxlRXZlbnQoZSkge1xyXG5cdFx0aWYgKHRoaXMubG9jaykgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcclxuXHRcdFx0Ly8gU2kgZWwgaG92ZXIgZXN0w6EgZGVzYWN0aXZhZG8sIG5vIGhheSB0cmFiYWpvIHF1ZSBoYWNlci5cclxuXHRcdFx0aWYgKCF0aGlzLmVuYWJsZUhvdmVyKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHJcblx0XHRcdC8vIG51ZXZvIGhvdmVyIGNhbGN1bGFkb1xyXG5cdFx0XHRjb25zdCBuZXdIb3ZlciA9XHJcblx0XHRcdFx0aHQuTCAhPT0gLTEgJiYgaHQucmVhbFxyXG5cdFx0XHRcdFx0PyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9XHJcblx0XHRcdFx0XHQ6IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHRcdFx0Ly8gc29sbyByZXBpbnRhciBzaSBjYW1iaWEgcmVhbG1lbnRlIGVsIGhvdmVyXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRuZXdIb3Zlci5sZXZlbCA9PT0gdGhpcy5ob3Zlci5sZXZlbCAmJlxyXG5cdFx0XHRcdG5ld0hvdmVyLmluZGV4ID09PSB0aGlzLmhvdmVyLmluZGV4XHJcblx0XHRcdClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdHRoaXMuaG92ZXIgPSBuZXdIb3ZlcjtcclxuXHRcdFx0dGhpcy51cGRhdGUoKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHRcdFx0aWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuXHRcdFx0XHR0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLy8gc29sbyB0cnVlIHNpIHJlYWxtZW50ZSBzZSBzZWxlY2Npb27DsyBhbGdvXHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcblx0X3NlbGVjdEF0KEwsIGkpIHtcclxuXHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0Y29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0aWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuXHRcdGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuXHRcdGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcblx0XHQvLyDwn5S4IFNpIGVsIHVzdWFyaW8gc2VsZWNjaW9uYSBleHBsw61jaXRhbWVudGUgZW4gZWwgbml2ZWwgaG9qYSwgcmVjb3JkYXJsb1xyXG5cdFx0aWYgKGx2bC50eXBlID09PSBcImxpc3RcIikge1xyXG5cdFx0XHR0aGlzLmxhc3RMZWFmLnBhcmVudFBhdGggPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpOyAvLyBwYWRyZSBkZSBsYSBsaXN0YSBhY3R1YWxcclxuXHRcdFx0dGhpcy5sYXN0TGVhZi5rZXkgPSBjaG9zZW4ua2V5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMudmFsdWUgPSBuZXdQYXRoLnNsaWNlKCk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHRcdC8vIHNpIGVzdMOhIHJlZmVyZW5jaWFkbywgcHJvcGFnYSBhIG9iamV0byBleHRlcm5vXHJcblx0XHR0aGlzLnNlbmQobmV3UGF0aCk7XHJcblx0XHR0aGlzLmNoYW5nZUNiKHRoaXMudGFiSW5kZXgsIHRoaXMuaXRlbUluZGV4LCBuZXdQYXRoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gQVBJIHDDumJsaWNhID09PT09PT1cclxuXHRzZXRWYWx1ZShwYXRoKSB7XHJcblx0XHR0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguc2xpY2UoKSA6IFtdO1xyXG5cdFx0Ly8gU2kgZGVzZGUgYWZ1ZXJhIG5vcyBzZXRlYW4gdW5hIGhvamEgdsOhbGlkYSwgdGFtYmnDqW4gbGEgcmVjb3JkYW1vc1xyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdHNldFRyZWUodHJlZSkge1xyXG5cdFx0dGhpcy50cmVlID0gdHJlZSB8fCB7fTtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRzZXRGb2N1cyh7IGZvY3VzZWQsIGZvY3VzUGF0aCwgZm9jdXNMZXZlbCB9KSB7XHJcblx0XHRpZiAodHlwZW9mIGZvY3VzZWQgPT09IFwiYm9vbGVhblwiKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuXHRcdGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gXCJudW1iZXJcIikgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRfbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpIHtcclxuXHRcdC8vIFNpIHZhbHVlIGFwdW50YSBhIHBhZHJlK2hvamEgKOKApixbbGVhZl0pIHkgZXMgdsOhbGlkYSwgcmVjb3JkYXIgZXNhIGhvamFcclxuXHRcdGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLnZhbHVlLmxlbmd0aCAtIDEpO1xyXG5cdFx0Y29uc3QgbGVhZiA9IHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdGNvbnN0IGluZm8gPSB0aGlzLmdldE5vZGVBdFBhdGgocGFyZW50KTtcclxuXHRcdGlmIChpbmZvICYmIEFycmF5LmlzQXJyYXkoaW5mby5ub2RlKSAmJiBpbmZvLm5vZGUuaW5jbHVkZXMobGVhZikpIHtcclxuXHRcdFx0dGhpcy5sYXN0TGVhZiA9IHsgcGFyZW50UGF0aDogcGFyZW50LCBrZXk6IGxlYWYgfTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUHVibGljYWNpw7NuIGRlIGFsdHVyYSA9PT09PT09XHJcblx0X2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKSB7XHJcblx0XHRsZXQgYyA9IDA7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgaSsrKVxyXG5cdFx0XHRpZiAodGhpcy5sZXZlbHNbaV0udHlwZSA9PT0gXCJtYXBcIikgYysrO1xyXG5cdFx0cmV0dXJuIGM7XHJcblx0fVxyXG5cclxuXHRfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcblx0XHRjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcblx0XHRyZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09IFwibGlzdFwiID8gbGFzdC5pdGVtcy5sZW5ndGggOiAwO1xyXG5cdH1cclxuXHJcblx0X3B1Ymxpc2hIZWlnaHQoKSB7XHJcblx0XHRjb25zdCBpbnRlciA9IHRoaXMuX2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKTtcclxuXHRcdGNvbnN0IGxlYWZMZW4gPSBNYXRoLm1heCh0aGlzLmxlYWZNYXgsIHRoaXMuX2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkpO1xyXG5cdFx0Y29uc3QgbGVhZkggPSBsZWFmTGVuICogdGhpcy5saW5lSDtcclxuXHRcdGNvbnN0IGludGVySCA9IGludGVyICogKHRoaXMubGluZUggKyB0aGlzLmxldmVsR2FwKTtcclxuXHRcdGNvbnN0IHRvdGFsSCA9IGludGVyID8gaW50ZXJIICsgdGhpcy5sZXZlbEdhcCArIGxlYWZIIDogbGVhZkg7XHJcblxyXG5cdFx0Ly8gTm9ybWFsaXphbW9zIGEgcHggZW50ZXJvcyBwYXJhIGV2aXRhciBqaXR0ZXIgcG9yIHJlZG9uZGVvXHJcblx0XHRjb25zdCBuZXdIID0gTWF0aC5mbG9vcih0b3RhbEgpO1xyXG5cclxuXHRcdC8vIEFjdHVhbGl6YW1vcyBtw6l0cmljYXMgbG9jYWxlcyBzaWVtcHJlXHJcblx0XHR0aGlzLmggPSBuZXdIO1xyXG5cdFx0dGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gU29sbyBhdmlzYW1vcyBhbCBHVUkgc2kgbGEgYWx0dXJhIGNhbWJpw7NcclxuXHRcdGlmIChuZXdIICE9PSB0aGlzLl9sYXN0UHVibGlzaGVkSCkge1xyXG5cdFx0XHR0aGlzLl9sYXN0UHVibGlzaGVkSCA9IG5ld0g7XHJcblx0XHRcdFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG5cdFx0XHRpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiXHJcbmltcG9ydCB7IEJvb2wgfSBmcm9tICcuLi9wcm90by9Cb29sLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vcHJvdG8vQnV0dG9uLmpzJztcclxuaW1wb3J0IHsgQ2lyY3VsYXIgfSBmcm9tICcuLi9wcm90by9DaXJjdWxhci5qcyc7XHJcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnLi4vcHJvdG8vQ29sb3IuanMnO1xyXG5pbXBvcnQgeyBGcHMgfSBmcm9tICcuLi9wcm90by9GcHMuanMnO1xyXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL3Byb3RvL0dyYXBoLmpzJztcclxuaW1wb3J0IHsgR3JvdXAgIH0gZnJvbSAnLi4vcHJvdG8vR3JvdXAuanMnO1xyXG5pbXBvcnQgeyBKb3lzdGljayB9IGZyb20gJy4uL3Byb3RvL0pveXN0aWNrLmpzJztcclxuaW1wb3J0IHsgS25vYiB9IGZyb20gJy4uL3Byb3RvL0tub2IuanMnO1xyXG5pbXBvcnQgeyBMaXN0IH0gZnJvbSAnLi4vcHJvdG8vTGlzdC5qcyc7XHJcbmltcG9ydCB7IE51bWVyaWMgfSBmcm9tICcuLi9wcm90by9OdW1lcmljLmpzJztcclxuaW1wb3J0IHsgU2xpZGUgfSBmcm9tICcuLi9wcm90by9TbGlkZS5qcyc7XHJcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gJy4uL3Byb3RvL1RleHRJbnB1dC5qcyc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vcHJvdG8vVGl0bGUuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuLi9wcm90by9TZWxlY3QuanMnO1xyXG5pbXBvcnQgeyBCaXRtYXAgfSBmcm9tICcuLi9wcm90by9CaXRtYXAuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdG9yLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuLi9wcm90by9FbXB0eS5qcyc7XHJcbmltcG9ydCB7IEl0ZW0gfSBmcm9tICcuLi9wcm90by9JdGVtLmpzJztcclxuaW1wb3J0IHsgR3JpZCB9IGZyb20gJy4uL3Byb3RvL0dyaWQuanMnO1xyXG5pbXBvcnQgeyBQYWQyRCB9IGZyb20gJy4uL3Byb3RvL1BhZDJELmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgVHJlZUxpc3QgfSBmcm9tICcuLi9wcm90by9UcmVlTGlzdC5qcyc7XHJcblxyXG5leHBvcnQgY29uc3QgYWRkID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGFyZ3VtZW50czsgXHJcblxyXG4gICAgICAgIGxldCB0eXBlLCBvLCByZWYgPSBmYWxzZSwgbiA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVswXSA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgICAgICB0eXBlID0gYVswXTtcclxuICAgICAgICAgICAgbyA9IGFbMV0gfHwge307XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBhWzBdID09PSAnb2JqZWN0JyApeyAvLyBsaWtlIGRhdCBndWlcclxuXHJcbiAgICAgICAgICAgIHJlZiA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoYSwge30pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzJdLnR5cGUgPyBhWzJdLnR5cGUgOiBhdXRvVHlwZSggYVswXVthWzFdXSwgYVsyXSApO1xyXG5cclxuICAgICAgICAgICAgbyA9IGFbMl07XHJcbiAgICAgICAgICAgIG8ubmFtZSA9IGFbMV07XHJcbiAgICAgICAgICAgIGlmIChvLmhhc093blByb3BlcnR5KFwiZGlzcGxheU5hbWVcIikpIG8ubmFtZSA9IG8uZGlzcGxheU5hbWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ2xpc3QnICYmICFvLmxpc3QgKXsgby5saXN0ID0gYVswXVthWzFdXTsgfVxyXG4gICAgICAgICAgICBlbHNlIG8udmFsdWUgPSBhWzBdW2FbMV1dO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2dyb3VwJyApeyBcclxuICAgICAgICAgICAgby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIC8vby5keCA9IDhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCggbmFtZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnYm9vbCc6IGNhc2UgJ2Jvb2xlYW4nOiBuID0gbmV3IEJvb2wobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdidXR0b24nOiBuID0gbmV3IEJ1dHRvbihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NpcmN1bGFyJzogbiA9IG5ldyBDaXJjdWxhcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzogbiA9IG5ldyBDb2xvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Zwcyc6IG4gPSBuZXcgRnBzKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JhcGgnOiBuID0gbmV3IEdyYXBoKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOiBuID0gbmV3IEdyb3VwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnam95c3RpY2snOiBuID0gbmV3IEpveXN0aWNrKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAna25vYic6IG4gPSBuZXcgS25vYihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xpc3QnOiBuID0gbmV3IExpc3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdudW1lcmljJzogY2FzZSAnbnVtYmVyJzogbiA9IG5ldyBOdW1lcmljKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2xpZGUnOiBuID0gbmV3IFNsaWRlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGV4dElucHV0JzogY2FzZSAnc3RyaW5nJzogbiA9IG5ldyBUZXh0SW5wdXQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6IGNhc2UgJ3RleHQnOiBuID0gbmV3IFRpdGxlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzogbiA9IG5ldyBTZWxlY3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdiaXRtYXAnOiBuID0gbmV3IEJpdG1hcChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdG9yJzogbiA9IG5ldyBTZWxlY3RvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzogY2FzZSAnc3BhY2UnOiBuID0gbmV3IEVtcHR5KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaXRlbSc6IG4gPSBuZXcgSXRlbShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyaWQnOiBuID0gbmV3IEdyaWQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwYWQyZCc6IGNhc2UgJ3BhZCc6IG4gPSBuZXcgUGFkMkQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0cmVlbGlzdCc6IG4gPSBuZXcgVHJlZUxpc3Qobyk7IGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggbiAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGlmKCByZWYgKSBuLnNldFJlZmVyZW5jeSggYVswXSwgYVsxXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gbjtcclxuXHJcbiAgICAgICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGF1dG9UeXBlID0gZnVuY3Rpb24gKCB2LCBvICkge1xyXG5cclxuICAgIGxldCB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIGlmKCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkgdHlwZSA9ICdib29sJyBcclxuICAgIGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgaWYoIHYuc3Vic3RyaW5nKDAsMSkgPT09ICcjJyApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3N0cmluZycgXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ251bWJlcicgKXsgXHJcblxyXG4gICAgICAgIGlmKCBvLmN0eXBlICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ2FycmF5JyAmJiB2IGluc3RhbmNlb2YgQXJyYXkgKXtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB2WzBdID09PSAnbnVtYmVyJyApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgaWYoIHR5cGVvZiB2WzBdID09PSAnc3RyaW5nJyApIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcblxyXG4gICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHlwZVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBhZGQgfSBmcm9tIFwiLi9hZGQuanNcIjtcclxuaW1wb3J0IHsgVjIgfSBmcm9tIFwiLi9WMi5qc1wiO1xyXG5cclxuLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIEd1aSB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICB0aGlzLmlzR3VpID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBcImd1aVwiO1xyXG5cclxuICAgIC8vIGZvciAzZFxyXG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xyXG4gICAgdGhpcy5zY3JlZW4gPSBudWxsO1xyXG4gICAgdGhpcy5wbGFuZSA9IG8ucGxhbmUgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjb2xvclxyXG4gICAgaWYgKG8uY29uZmlnKSBvLmNvbG9ycyA9IG8uY29uZmlnO1xyXG4gICAgaWYgKG8uY29sb3JzKSB0aGlzLnNldENvbmZpZyhvLmNvbG9ycyk7XHJcbiAgICBlbHNlIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcblxyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMuY3NzID0gVG9vbHMuY2xvbmVDc3MoKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG4gICAgdGhpcy50bXBBZGQgPSBudWxsO1xyXG4gICAgLy90aGlzLnRtcEggPSAwXHJcblxyXG4gICAgdGhpcy5pc0NhbnZhcyA9IG8uaXNDYW52YXMgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIE1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIC8vIG9wdGlvbiB0byBkZWZpbmUgd2hldGhlciB0aGUgZXZlbnQgbGlzdGVuZXJzIHNob3VsZCBiZSBhZGRlZCBvciBub3RcclxuICAgIFJvb3RzLmFkZERPTUV2ZW50TGlzdGVuZXJzID0gby5oYXNPd25Qcm9wZXJ0eShcImFkZERPTUV2ZW50TGlzdGVuZXJzXCIpXHJcbiAgICAgID8gby5hZGRET01FdmVudExpc3RlbmVyc1xyXG4gICAgICA6IHRydWU7XHJcblxyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG5cclxuICAgIHRoaXMuZm9yY2VIZWlnaHQgPSBvLm1heEhlaWdodCB8fCAwO1xyXG4gICAgdGhpcy5sb2NrSGVpZ2h0ID0gby5sb2NrSGVpZ2h0IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNJdGVtTW9kZSA9IG8uaXRlbU1vZGUgIT09IHVuZGVmaW5lZCA/IG8uaXRlbU1vZGUgOiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmNuID0gXCJcIjtcclxuXHJcbiAgICAvLyBzaXplIGRlZmluZVxyXG4gICAgdGhpcy5zaXplID0gVG9vbHMuc2l6ZTtcclxuICAgIGlmIChvLnAgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnAgPSBvLnA7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS53ID0gby53O1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUuaCA9IG8uaDtcclxuICAgIGlmIChvLnMgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnMgPSBvLnM7XHJcblxyXG4gICAgdGhpcy5zaXplLmggPSB0aGlzLnNpemUuaCA8IDExID8gMTEgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICAvLyBsb2NhbCBtb3VzZSBhbmQgem9uZVxyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG4gICAgdGhpcy56b25lID0geyB4OiAwLCB5OiAwLCB3OiB0aGlzLnNpemUudywgaDogMCB9O1xyXG5cclxuICAgIC8vIHZpcnR1YWwgbW91c2VcclxuICAgIHRoaXMubW91c2UgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmggPSAwO1xyXG4gICAgLy90aGlzLnByZXZZID0gLTE7XHJcbiAgICB0aGlzLnN3ID0gMDtcclxuXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICAvLyBib3R0b20gYW5kIGNsb3NlIGhlaWdodFxyXG4gICAgdGhpcy5pc1dpdGhDbG9zZSA9IG8uY2xvc2UgIT09IHVuZGVmaW5lZCA/IG8uY2xvc2UgOiB0cnVlO1xyXG4gICAgdGhpcy5iaCA9ICF0aGlzLmlzV2l0aENsb3NlID8gMCA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG8uYXV0b1Jlc2l6ZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG8uYXV0b1Jlc2l6ZTtcclxuXHJcbiAgICAvLyBkZWZhdWx0IHBvc2l0aW9uXHJcbiAgICB0aGlzLmlzQ2VudGVyID0gby5jZW50ZXIgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmNzc0d1aSA9XHJcbiAgICAgIG8uY3NzICE9PSB1bmRlZmluZWQgPyBvLmNzcyA6IHRoaXMuaXNDZW50ZXIgPyBcIlwiIDogXCJyaWdodDoxMHB4O1wiO1xyXG5cclxuICAgIHRoaXMuaXNPcGVuID0gby5vcGVuICE9PSB1bmRlZmluZWQgPyBvLm9wZW4gOiB0cnVlO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmRlY2FsID0gMDtcclxuICAgIHRoaXMucmF0aW8gPSAxO1xyXG4gICAgdGhpcy5veSA9IDA7XHJcblxyXG4gICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIHRoaXMuY29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiIHdpZHRoOjBweDsgaGVpZ2h0OmF1dG87IHRvcDowcHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmNvbnRlbnQgK1xyXG4gICAgICAgIFwiOyBcIiArXHJcbiAgICAgICAgdGhpcy5jc3NHdWlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyB0aGlzLmNzcy5idXR0b24gKyAnd2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyQ29udGVudCk7XHJcblxyXG4gICAgLy90aGlzLmlubmVyID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyAnKVxyXG4gICAgdGhpcy51c2VGbGV4ID0gdHJ1ZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/IFwiZGlzcGxheTpmbGV4OyBmbGV4LWZsb3c6IHJvdyB3cmFwO1wiIDogXCJcIjsgLy8nIGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnN0YXJ0OyBhbGlnbi1pdGVtczpzdGFydDtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYWxpZ24taXRlbXM6IGNlbnRlcjsnO1xyXG4gICAgdGhpcy5pbm5lciA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwid2lkdGg6MTAwJTsgbGVmdDowOyBcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuaW5uZXJDb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXIpO1xyXG5cclxuICAgIC8vIHNjcm9sbFxyXG4gICAgdGhpcy5zY3JvbGxCRyA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwicmlnaHQ6MDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSAxKSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7IGRpc3BsYXk6bm9uZTsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYmFja2dyb3VuZCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxCRyk7XHJcblxyXG4gICAgdGhpcy5zY3JvbGwgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJ1dHRvbiArXHJcbiAgICAgICAgXCI7IHJpZ2h0OjJweDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSA0KSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLnNjcm9sbEJHLmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsKTtcclxuXHJcbiAgICAvLyBib3R0b20gYnV0dG9uXHJcbiAgICB0aGlzLmJvdHRvbVRleHQgPSBvLmJvdHRvbVRleHQgfHwgW1wib3BlblwiLCBcImNsb3NlXCJdO1xyXG5cclxuICAgIGxldCByID0gY2MucmFkaXVzO1xyXG4gICAgdGhpcy5ib3R0b20gPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dCArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6YXV0bzsgYm90dG9tOjA7IGxlZnQ6MDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGhlaWdodDpcIiArXHJcbiAgICAgICAgdGhpcy5iaCArXHJcbiAgICAgICAgXCJweDsgbGluZS1oZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmJoIC0gNSkgK1xyXG4gICAgICAgIFwicHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTsgLy8gYm9yZGVyLXRvcDoxcHggc29saWQgJytUb29scy5jb2xvcnMuc3Ryb2tlKyc7Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5ib3R0b20pO1xyXG4gICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIC8vXHJcblxyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnBhcmVudCAhPT0gdW5kZWZpbmVkID8gby5wYXJlbnQgOiBudWxsO1xyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnRhcmdldCAhPT0gdW5kZWZpbmVkID8gby50YXJnZXQgOiB0aGlzLnBhcmVudDtcclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgPT09IG51bGwgJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5wYXJlbnQgPSBkb2N1bWVudC5ib2R5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcyAmJiB0aGlzLnBhcmVudCA9PT0gbnVsbCkgdGhpcy5pc0NhbnZhc09ubHkgPSB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XHJcbiAgICAgIG8udHJhbnNpdGlvbiA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGVpZ2h0IHRyYW5zaXRpb25cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9XHJcbiAgICAgIG8udHJhbnNpdGlvbiAhPT0gdW5kZWZpbmVkID8gby50cmFuc2l0aW9uIDogVG9vbHMudHJhbnNpdGlvbjtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24pIHNldFRpbWVvdXQodGhpcy5hZGRUcmFuc2l0aW9uLmJpbmQodGhpcyksIDEwMDApO1xyXG5cclxuICAgIHRoaXMuc2V0V2lkdGgoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5tYWtlQ2FudmFzKCk7XHJcblxyXG4gICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlRG93bih4LCB5KSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJHdWkudHJpZ2dlck1vdXNlRG93biBpcyBkZXByZWNhdGVkLCB1c2UgdHJpZ2dlck1vdXNlRG93blVWIGluc3RlYWRcIik7XHJcbiAgICAvKlxyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pOyovXHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VNb3ZlKCkge1xyXG4gICAgY29uc29sZS53YXJuKFwiR3VpLnRyaWdnZXJNb3VzZU1vdmUgaXMgZGVwcmVjYXRlZCwgdXNlIHRyaWdnZXJNb3VzZU1vdmVVViBpbnN0ZWFkXCIpO1xyXG4gICAgLypcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pOyovXHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcCh4LCB5KSB7XHJcblxyXG4gICAgY29uc29sZS53YXJuKFwiR3VpLnRyaWdnZXJNb3VzZVVwIGlzIGRlcHJlY2F0ZWQsIHVzZSB0cmlnZ2VyTW91c2VVcFVWIGluc3RlYWRcIik7XHJcbiAgICAvKlxyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTsqL1xyXG4gIH1cclxuXHJcbiAgLy8gR3VpLmpzXHJcbiAgdHJpZ2dlck1vdXNlRG93blVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgLy8gdSwgdiBlbiBbMCwxXSByZWxhdGl2b3MgYWwgcmVjdCBkZWwgR1VJXHJcbiAgICBjb25zdCB4ID0gdGhpcy56b25lLnggKyBNYXRoLnJvdW5kKHUgKiB0aGlzLnpvbmUudyk7XHJcbiAgICBjb25zdCB5ID0gdGhpcy56b25lLnkgKyBNYXRoLnJvdW5kKChmbGlwWSA/IDEgLSB2IDogdikgKiB0aGlzLnpvbmUuaCk7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcmRvd25cIixcclxuICAgICAgY2xpZW50WDogaXNOYU4oeCkgPyBudWxsIDogeCxcclxuICAgICAgY2xpZW50WTogaXNOYU4oeSkgPyBudWxsIDogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcFVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgY29uc3QgeCA9IHRoaXMuem9uZS54ICsgTWF0aC5yb3VuZCh1ICogdGhpcy56b25lLncpO1xyXG4gICAgY29uc3QgeSA9IHRoaXMuem9uZS55ICsgTWF0aC5yb3VuZCgoZmxpcFkgPyAxIC0gdiA6IHYpICogdGhpcy56b25lLmgpO1xyXG4gICAgXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcnVwXCIsXHJcbiAgICAgIGNsaWVudFg6IGlzTmFOKHgpID8gbnVsbCA6IHgsXHJcbiAgICAgIGNsaWVudFk6IGlzTmFOKHkpID8gbnVsbCA6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZVVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgY29uc3QgeCA9IHRoaXMuem9uZS54ICsgTWF0aC5yb3VuZCh1ICogdGhpcy56b25lLncpO1xyXG4gICAgY29uc3QgeSA9IHRoaXMuem9uZS55ICsgTWF0aC5yb3VuZCgoZmxpcFkgPyAxIC0gdiA6IHYpICogdGhpcy56b25lLmgpO1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJtb3ZlXCIsXHJcbiAgICAgIGNsaWVudFg6IGlzTmFOKHgpID8gbnVsbCA6IHgsXHJcbiAgICAgIGNsaWVudFk6IGlzTmFOKHkpID8gbnVsbCA6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0VG9wKHQsIGgpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS50b3AgPSB0ICsgXCJweFwiO1xyXG4gICAgaWYgKGggIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JjZUhlaWdodCA9IGg7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFkZFRyYW5zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmJvdHRvbS5zdHlsZS50cmFuc2l0aW9uID0gXCJ0b3AgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgLy90aGlzLmJvdHRvbS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBSb290cy5yZXNpemUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uYWRkVHJhbnNpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkRyYXcoKSB7fVxyXG5cclxuICBtYWtlQ2FudmFzKCkge1xyXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXHJcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFxyXG4gICAgICBcImNhbnZhc1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLnpvbmUudztcclxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyggdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCApXHJcbiAgfVxyXG5cclxuICBkcmF3KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5jYW52YXMgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuem9uZS53O1xyXG4gICAgbGV0IGggPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG4gICAgUm9vdHMudG9DYW52YXModGhpcywgdywgaCwgZm9yY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vXHJcblxyXG4gIGdldERvbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBub01vdXNlKCkge1xyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICB9XHJcblxyXG4gIHNldE1vdXNlKHV2LCBmbGlwID0gdHJ1ZSkge1xyXG4gICAgaWYgKGZsaXApXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgLSBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICAvL3RoaXMubW91c2Uuc2V0KCBtLngsIG0ueSApO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJzZXRNb3VzZSBcIiArIHV2LnggKyBcIiBcIiArIHV2LnkpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7RUFBQTtFQUNBO0VBQ0E7QUFDQTtBQUNZLFFBQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7RUFDQTtBQUNBO0VBQ0EsTUFBTSxDQUFDLEdBQUc7RUFDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7RUFDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7RUFDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0VBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSztFQUNiLEVBQUUsS0FBSyxFQUFFLEtBQUs7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QUksSUFBSSxHQUFHLEdBQUcsRUFBRTtFQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztFQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0VBQ3JCLE9BQU87QUFDUDtFQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0VBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7RUFDMUIsS0FBSztBQUNMO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtFQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7RUFDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUNqQyxRQUFRLENBQUMsQ0FBQyxPQUFP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QUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDekQsU0FBUztFQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxHQUFHLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxFQUFFO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsT0FBTyxHQUFHLENBQUM7RUFDMUMsYUFBYSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUM1RCxhQUFhLElBQUksRUFBRSxZQUFZLEtBQUssRUFBRTtFQUN0QyxZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUNuRixZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDdkcsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxHQUFHLEdBQUcsV0FBVyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLEdBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFB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TUFBTSxDQUFDLENBQUM7RUFDN0MsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksYUFBYSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ2xDO0VBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDO0VBQzdEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sR0FBRztFQUMxQyxRQUFRLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztFQUMxQixRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUc7RUFDdEMsVUFBVSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUM7RUFDakUsU0FBUztFQUNULFFBQVEsT0FBTyxRQUFRLENBQUM7RUFDeEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7RUFDOUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQzNDLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzlCO0VBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFCO0VBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzNCO0VBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDL0UsYUFBYSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlFO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7RUFDekIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDekQsUUFBUSxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3hDLFFBQVEsT0FBTyxDQUFDLENBQUM7RUFDakIsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDekI7RUFDQSxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzVFO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDMUI7RUFDQSxRQUFRLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pIO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7RUFDdEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3JDLFFBQVEsT0FBTyxDQUFDLENBQUM7RUFDakIsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwRCxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakM7RUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RELFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztFQUNsQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0VBQ2xFLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0VBQ2pKLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFFLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0VBQ3ZCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7RUFDM0QsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztFQUNqRSxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0VBQ2pFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNuQixTQUFTO0VBQ1QsUUFBUSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMzQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0M7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxQyxhQUFhO0VBQ2IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0VBQzNELFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLFlBQVksT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztFQUN6RyxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksWUFBWSxFQUFFLFdBQVcsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHO0FBQzlEO0VBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hEO0VBQ0EsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCO0VBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRztFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksT0FBTyxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ2hDO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFHO0VBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0VBQ3BKLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25DLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvRixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckg7RUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzdJLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDOUksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNuSSxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3RCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxLQUFLLEdBQUc7QUFDakM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFH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RyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUM1SCxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN6SDtFQUNBO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDdEUsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7RUFDQTtFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0VBQzFFLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzFFO0VBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzSDtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDNUg7RUFDQTtBQUNBO0VBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDdEYsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEcsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0Y7RUFDQSxZQUFZLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQy9CO0VBQ0EsU0FBUyxNQUFNO0VBQ2Y7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDNUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7RUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVB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QUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNuRyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM5SSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM5SSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxvRkFBb0YsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMvSztBQUNBO0VBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFHO0VBQ0EsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUMxQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDckM7RUFDQSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFD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QUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDckQ7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVc7RUFDbkMsTUFBTSxDQUFDO0VBQ1AsTUFBTSxJQUFJLENBQUMsSUFBSTtFQUNmLFVBQVUsSUFBSSxDQUFDLEtBQUs7RUFDcEIsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07RUFDN0IsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07RUFDNUIsVUFBVSxLQUFLLENBQUMsTUFBTTtFQUN0QixLQUFLLENBQUM7QUFDTjtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUMzQztFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzNCO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDakQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0VBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEM7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN4QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDMUQsU0FBUyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0VBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2pEO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztBQUN2RDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztFQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7RUFDbEMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO0FBQ3hDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7RUFDcEMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0VBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUMxQjtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztBQUNuQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0VBQ2pFLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7RUFDNUIsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxZQUFZLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO0VBQzdFLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQztBQUNoRjtFQUNBO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0VBQzVFLE1BQU0sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQzVFLEtBQUs7QUFDTDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQjtFQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztFQUN6RCxJQUFJLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPO0VBQy9CLFFBQVEsNEZBQTRGO0VBQ3BHLFFBQVEsYUFBYSxDQUFDO0FBQ3RCO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHO0VBQ3pCLE1BQU0sS0FBSztFQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLGlDQUFpQztFQUNuRSxLQUFLLENBQUM7QUFDTjtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNoQztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2pDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7RUFDbEIsSUFBSSxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQztFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDbEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUM7RUFDMUMsTUFBTSxJQUFJLFNBQVMsRUFBRTtFQUNyQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7RUFDdEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztFQUNqRSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUM7RUFDcEUsT0FBTyxNQUFNO0VBQ2IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLHNCQUFzQixDQUFDO0VBQ3RFLE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDdEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDbkUsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ2xDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN4QyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDN0UsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7RUFDZixNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztFQUN0QyxNQUFNLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRTtFQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQyxPQUFPO0VBQ1AsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztFQUN2QixLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQ3pDLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxJQUFJLEdBQUc7RUFDVCxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3JDO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7RUFDdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ25CLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuQjtFQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDNUQ7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7RUFDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztFQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDdkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztFQUNoQyxLQUFLLE1BQU07RUFDWCxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztFQUN6QyxLQUFLO0FBQ0w7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7RUFDOUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUN4QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMxQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3RDLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMxQjtFQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUNwRCxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtFQUM5QixRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDL0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUMxQixPQUFPO0VBQ1AsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLEVBQUU7RUFDVixNQUFNLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSTtFQUMxQixVQUFVLElBQUksQ0FBQyxNQUFNO0VBQ3JCLFVBQVUsSUFBSSxDQUFDLElBQUk7RUFDbkIsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7RUFDekIsVUFBVSxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQ3hCO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqRSxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUI7RUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0I7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtFQUNwQixNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7RUFDN0MsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3RCLEtBQUs7RUFDTCxHQUFHO0FBQ0g7RUFDQSxFQUFFLGFBQWEsR0FBRztFQUNsQixJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7RUFDcEQsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO0VBQzlFLEtBQUs7RUFDTCxHQUFHO0FBQ0g7RUFDQTtBQUNBO0VBQ0EsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtFQUMvQixJQUFJLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDOUMsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRTtFQUNwQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzVDLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDbkIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHO0FBQ0g7RUFDQSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUN6QixJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3hDLEdBQUc7QUFDSDtFQUNBLEVBQUUsWUFBWSxHQUFHO0VBQ2pCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0VBQ2hELElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztFQUN4QyxHQUFHO0FBQ0g7RUFDQSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUU7RUFDckIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQy9ELElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUNuRCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUU7RUFDckIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ25ELElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUN2QyxHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUU7RUFDakIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzNDLElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNuQyxHQUFHO0FBQ0g7RUFDQSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUU7RUFDbEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzNDLElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUNwQyxHQUFHO0FBQ0g7RUFDQTtBQUNBO0VBQ0EsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFO0VBQ2YsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3ZCLEdBQUc7QUFDSDtFQUNBO0FBQ0E7RUFDQSxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQ2I7RUFDQSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ1o7RUFDQTtBQUNBO0VBQ0EsRUFBRSxPQUFPLEdBQUc7RUFDWixJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sR0FBRztFQUNYLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUc7QUFDSDtFQUNBLEVBQUUsS0FBSyxHQUFHO0VBQ1YsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTztFQUMxQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU87RUFDakMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7RUFDOUQsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLEdBQUc7RUFDWCxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO0VBQzFCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTztFQUNqQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztFQUNsRSxHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUU7RUFDWixJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0VBQzNELEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxHQUFHO0VBQ1gsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDMUMsSUFBSSxPQUFPLElBQUksQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsR0FBRztFQUNkO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLE9BQU87RUFDekMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTztFQUM1QixJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPO0VBQzVCO0VBQ0EsSUFBSSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7RUFDcEUsSUFBSSxPQUFPLFVBQVUsQ0FBQztFQUN0QixHQUFHO0FBQ0g7RUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDZCxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JEO0VBQ0EsU0FBUyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNsQixJQUFJLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztFQUMzQixJQUFJLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUU7RUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDO0VBQ3hCLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxVQUFVLENBQUM7RUFDdEIsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDZCxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPO0VBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO0VBQzlCLElBQUksT0FBTyxJQUFJLENBQUM7RUFDaEIsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUU7RUFDcEIsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTztFQUM3QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQ3pCLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7RUFDekIsSUFBSSxPQUFPLElBQUksQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtFQUNaLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7RUFDMUIsSUFBSSxPQUFPLElBQUksQ0FBQztFQUNoQixHQUFHO0FBQ0g7RUFDQSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDYixJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLElBQUksT0FBTyxJQUFJLENBQUM7RUFDaEIsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7RUFDVixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztFQUN4QixJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztFQUN2QixJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RFLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztFQUN4RCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEUsR0FBRztBQUNIO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLE9BQU8sR0FBRztFQUNaLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEQ7RUFDQSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO0VBQzlCLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN6RCxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QyxLQUFLLE1BQU07RUFDWCxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM5QyxXQUFXLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoRCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkM7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2xCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDbEIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztFQUN6QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7RUFDMUIsR0FBRztBQUNIO0VBQ0EsRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUNaO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxFQUFFLFFBQVEsR0FBRztFQUNiLElBQUksSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNsQyxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNkLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEI7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtFQUNyQixNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQ2pDLEtBQUssTUFBTTtFQUNYLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZDO0VBQ0E7RUFDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDbkMsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDN0MsS0FBSztFQUNMLEdBQUc7QUFDSDtFQUNBLEVBQUUsS0FBSyxHQUFHO0VBQ1YsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPO0VBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDcEQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUN2RCxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRTtFQUNuQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3pCO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUNuQixJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7RUFDL0IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUNoRSxXQUFXLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNoQyxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN2RCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDdEQsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pFO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNWO0VBQ0EsSUFBSSxRQUFRLElBQUksQ0FBQyxTQUFTO0VBQzFCLE1BQU0sS0FBSyxDQUFDO0VBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2QsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWixRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDaEIsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDakIsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWixRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDbEIsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWixRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7RUFDbkIsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWixRQUFRLENBQUMsR0FBRyxPQUFPLENBQUM7RUFDcEIsUUFBUSxNQUFNO0VBQ2QsTUFBTSxLQUFLLENBQUM7RUFDWixRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7RUFDckIsUUFBUSxNQUFNO0VBQ2QsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQ2xELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDckMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzNDLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNkLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BDLElBQUk7RUFDSixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7RUFDM0UsTUFBTTtFQUNOLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ2pCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU87RUFDMUIsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7RUFDM0MsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDckIsTUFBTSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ3JFO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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QVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0VBQ2xCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBSztFQUNyQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3REO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUc7RUFDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtFQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRTtFQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFFO0FBQzlCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtFQUM1QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtFQUM5QixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzlELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMs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QUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQzNFO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7RUFDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7RUFDN0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUM7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFNO0VBQ3JDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0VBQ3JCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFFO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNsQztFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0M7RUFDQSxZQUFZLEdBQUcsR0FBRyxNQUFLO0VBQ3ZCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsS0FBSTtBQUMvRTtFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRTtFQUNsTSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMs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QUFFLENBQUM7RUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3pCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFFO0VBQy9CO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQztBQUN2QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0VBQ3JCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSTtFQUNsRDtFQUNBLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFDO0VBQzVELFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQjtFQUNBO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7RUFDckUsU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRDtFQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcs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QUMsV0FBVyxHQUFFO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0VBQ3pELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtFQUMzRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUM1RjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtFQUNuQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztBQUMvQztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9B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LENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztFQUMxRSxhQUFhLE9BQU8sVUFBVSxDQUFDO0FBQy9CO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7RUFDdkIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztFQUN6QixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7RUFDOUIsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9EO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ2hDO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDekMsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEU7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNyQyxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvQztFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDbkMsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuQztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtFQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztFQUM1QyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNyQyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztFQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDL0IsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLFVBQVUsR0FBRztFQUNsQztFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDckQ7RUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN4RCxhQUFhLE1BQU0sS0FB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QUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hDO0VBQ0EsU0FBUyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzlDLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNuQztFQUNBLFNBQVMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDakMsU0FBUyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ3JDO0VBQ0EsU0FBUyxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDL0QsU0FBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztFQUNoRCxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUU7RUFDN0IsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ2xDLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BDLFNBQVMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7RUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRztFQUN4QixPQUFPLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ25DLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDdkMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQ3hDLGVBQWUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDbkQ7RUFDQSxPQUFPLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0VBQ0EsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3hELE9BQU8sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMvQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM5QixPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2QyxPQUFPO0FBQ1A7RUFDQSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDcEQ7RUFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUM1QyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzNFLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNqQztFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQ7RUFDQSxTQUFTO0VBQ1QsS0FBSztFQUNMLElBQUk7RUFDSixHQUFHO0FBQ0g7RUFDQSxFQUFFO0FBQ0Y7RUFDQTtBQUNBO0VBQ0EsQ0FBQyxTQUFTLENBQUMsR0FBRztBQUNkO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztFQUNqRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtFQUNsQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDbEQs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LEtBQUssT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3hELEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDdkUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztFQUMzRSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdDO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDZjtFQUNBLEVBQUUsSUFBSSxDQUFDLFlBQVksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxhQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdELGFBQWEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDNUI7RUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUM3QixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3BCO0VBQ0EsS0FBSyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3RDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxNQUFNLEVBQUU7QUFDMUM7RUFDQSxTQUFTLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztFQUM1QixTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTTtFQUMxQixTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQzlDO0VBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEM7RUFDQSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUN2QixNQUFNO0VBQ04sS0FBSyxPQUFPLElBQUksQ0FBQztBQUNqQjtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0VBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN0QyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDOUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ3pCLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLFdBQVcsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRTtFQUNqQixFQUFFLElBQUksQ0FBQyxHQUFHLE1BQUs7QUFDZjtFQUNBLEtBQWMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTztFQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNuQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtFQUNBLEtBQUssSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzFDO0VBQ0EsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN0QjtFQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzVCLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDN0MsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN0QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDN0MsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDO0VBQ0EsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEM7RUFDQTtFQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEU7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1QztFQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUUsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckQ7RUFDQSxFQUFFO0FBQ0Y7RUFDQSxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQ1Y7RUFDQTtFQUNBLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25CO0VBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BCO0VBQ0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ2pDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNoQztFQUNBO0FBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNoQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQztFQUM1RDtFQUNBO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPO0FBQ2hDO0FBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pCO0VBQ0E7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUM7RUFDM0QsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUU7QUFDOUM7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7RUFDOUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtFQUNuQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQ3BDO0VBQ0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbkM7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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDdkU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNsRSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztFQUNsRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztFQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQy9EO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyx3REFBd0QsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztFQUM3SztBQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsb0NBQW9DLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxrREFBa0QsRUFBRSxDQUFDO0FBQzFKO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDJFQUEyRSxDQUFDLENBQUM7QUFDdEo7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QjtFQUNBO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0VBQzlCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0VBQ3RFLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxZQUFZLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUNuRjtBQUNBO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0VBQ0EsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDO0VBQ0EsWUFBWSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMvQixZQUFZLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QztFQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUN2RDtFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDckMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQztFQUNBLFlBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUseUJBQXlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hHO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7RUFDOUIsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2xCLFlBQVksSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMvSyxTQUFTO0FBQ1Q7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDdkMsYUFBYSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDeEIsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0VBQ2xDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLFFBQVEsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0VBQ3RGLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDL0MsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQzNDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLENBQUM7RUFDakksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7RUFDaEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyRDtFQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNwQixZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3ZFLGtCQUFrQixDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ25DLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0VBQzFDLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMxRSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xDLFlBQVksQ0FBQyxFQUFFLENBQUM7QUFDaEI7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHO0FBQ1o7RUFDQSxRQUFRLEtBQUssQ0FBQyxJQUFJLEdBQUU7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDcEQ7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztFQUNsRSxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0VBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0VBQ3BDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0VBQ3BDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDM0I7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDbkQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztFQUNuRSxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUMzRDtFQUNBLFFBQVEs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QztBQUNyQztFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNyRSxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7RUFDbEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFEO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztFQUN4RSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzlCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDakMsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQzlCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMs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QUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4RCxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0M7RUFDQSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDdEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN0RixjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQzdEO0VBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUg7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3JCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEI7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7RUFDckMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQztFQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDO0VBQzlDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUk7RUFDOUMsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzdCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdB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QUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQ2hFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEM7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRTtFQUM1QixRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQztFQUNqRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDbEI7RUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUk7QUFDOUI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0VBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUU7RUFDOUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDdkM7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBQztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQ2xUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsS0FBSyxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUk7RUFDckIsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUM7RUFDcEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7RUFDekIsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0VBQ2xCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQjtFQUNBLEtBQUs7RUFDTDtFQUNBOztFQ1RPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSTtBQUM5QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0VBQ3JCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUM7RUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDekIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7QUFDM0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBQztFQUNwQztBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7QUFDNUM7RUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzlCO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7RUFDM0IsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLG9DQUFvQyxHQUFHLEdBQUU7QUFDL0U7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLDRDQUE0QyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUM7RUFDNUgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQzVLO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFJO0VBQzFEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FB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LENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZEO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0VBQzFDLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztBQUNsRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQzVCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztFQUM3QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0VBQ3pDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUk7QUFDNUQ7RUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtB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QUMsQ0FBQztFQUM1RSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUU7RUFDQSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdkU7RUFDQSxhQUFhO0FBQ2I7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzdCO0FBQ0E7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDcEQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0VBQ2xFLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRTtFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUM1QjtFQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzdELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RCxTQUFTLE1BQU07RUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVELFNBQVM7QUFDVDtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDeEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxD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LEtBQUk7RUFDMUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQzdCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFJO0VBQ3hCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUU7RUFDM0IsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RDtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDdEMsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDaEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7RUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDNUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzVDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMvQixTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHO0VBQzlCO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNyRDtFQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztFQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYTtFQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztFQUN4QjtFQUNBLFNBQVM7RUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3pELFFBQVEsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQzVDLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQzFDO0FBQ0E7RUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkIsWUFBWSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQzVDLFlBQVksSUFBSSxHQUFHLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxLQUFLLENBQUM7RUFDckQsU0FBUyxNQUFNO0VBQ2YsWUFBWSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNyRCxZQUFZLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQzFCLFNBQVM7QUFDVDtFQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRztBQUMzQztFQUNBLFlBQVksQ0FBQyxHQUFHLFVBQVUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDMUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQy9DLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUMvQyxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDaEQsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQ2hELFlBQVksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQzlEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVEO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDcEMsUUFBUSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNyRTtFQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUNqQyxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDakM7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEMsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0VBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDckY7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7RUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25DLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNwQyxZQUFZLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqSTtFQUNBLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO0VBQ25LLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDekQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM3QjtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQ2xRTyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUM7QUFDaEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFLO0FBQ2hDO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7RUFDakMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0VBQ3JDO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUN6RCxRQUFRLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUM1QztBQUNBO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztBQUN0QztFQUNBO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEdBQUU7RUFDbkMsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksTUFBSztFQUMzQyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxNQUFLO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFRO0VBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFNO0VBQzVELFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxXQUFVO0FBQ3pFO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdB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QUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUNsRSxhQUFhO0VBQ2IsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDM0I7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsRUFBQztBQUNoRDtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNwQixRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUMxQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQzVCO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7RUFDckMsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUNyQjtFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztFQUN6QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7RUFDekMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3pDO0VBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3JELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztFQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2xEO0VBQ0EsU0FBUyxNQUFNO0VBQ2YsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDcEQsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDZDQUE2QyxDQUFDLENBQUM7RUFDdkcsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDbEM7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQ3pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDN0MsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFB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QUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7RUFDckIsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDeEQsU0FBUyxNQUFNO0VBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDeEQsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwQztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtFQUNBLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFDO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMs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RUFBRSxDQUFDLEdBQUc7QUFDMUI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0VBQ3RCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztFQUN2RSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQUs7RUFDdEMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSTtFQUNoRCxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFJO0VBQ2xELFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUk7RUFDM0MsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBQztFQUMzQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0VBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNO0VBQ3JCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUU7RUFDNUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSTtFQUN6QyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENB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QVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQzVELFFBQVEsTUFBTTtFQUNkLEtBQUs7RUFDTCxHQUFHO0FBQ0g7RUFDQSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7RUFDYixJQUFJLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUQ7RUFDQSxJQUFJLElBQUksT0FBTztFQUNmLE1BQU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUU7RUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztFQUMzQztBQUNBO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDdEQsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM1RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDakU7RUFDQSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUN4QixHQUFHO0FBQ0g7RUFDQSxFQUFFLEtBQUssR0FBRztFQUNWLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xCO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDOUIsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEI7RUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDckIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNyRCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9CO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuQjtFQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDcEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNwQztFQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENB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LFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNyQixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUM5QixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0VBQ3ZDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEw7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0I7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzlDO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzlCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHO0FBQ2Q7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEdBQUc7RUFDZDtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Y7RUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQjtFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDNUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtFQUM1QztFQUNBLFlBQVksUUFBUSxDQUFDO0FBQ3JCO0VBQ0EsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxNQUFNO0VBQy9GLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07RUFDcEcsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtFQUN4RyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO0FBQ3BHO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsWUFB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QUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNwQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztFQUM1RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMvQixZQUFZLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLFlBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3RDLFNBQVM7QUFDVDtFQUNBLFFBQVEsT0FBTyxFQUFFLENBQUM7QUFDbEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEtBQUs7QUFDdkM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztFQUMzQixRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtFQUM3QixZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFDO0VBQzlD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TUFBTSxHQUFFO0VBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzNCO0VBQ0EsS0FBSztBQUNMO0FBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUc7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUM3QztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDO0VBQzdELFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQzNDO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDO0VBQ2hFLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRztFQUMxQixZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDO0VBQ2hFLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQztFQUN0QixTQUFTLE1BQU07RUFDZixZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxHQUFH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Q0FBQztFQUMvQixRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDL0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUU7QUFDeEI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7RUFDbEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNuRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztFQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3JFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDOUY7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUM7RUFDQTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztFQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7RUFDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsU0FBUztBQUNUO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsd0JBQXdCLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzNJLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUU7QUFDakM7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUM5QyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtFQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNoRDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0VBQ3JFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDdEY7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBRztBQUN2QjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtFQUNuQixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUU7QUFDdkI7RUFDQSxLQUFLO0VBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztFQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDakQ7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxPQUFPLENBQUM7RUFDN0QsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztFQUMxRSxhQUFhLE9BQU8sS0FBSyxDQUFDO0FBQzFCO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFDMUM7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQy9CLFlBQVksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNoQyxZQUFZLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQyxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFFO0VBQzFELFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDekU7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQy9CO0VBQ0EsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0VBQ2xCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNsQjtFQUNBLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0VBQ3ZELFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3ZEO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUNqQztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtFQUNBLFFBQVEsUUFBUSxJQUFJO0VBQ3BCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDMUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7RUFDM0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUM7RUFDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7RUFDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7RUFDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDOUQ7RUFDQSxZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztFQUNoRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztFQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztFQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztFQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztFQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRTtFQUNwRTtFQUNBLFlBQVksTUFBTTtFQUNsQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQTtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHO0FBQy9CO0VBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3REO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFNO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztFQUN4RSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRztBQUMvQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDdkcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFFO0FBQ3BIO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMxQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBOztFQ3JSQTtBQUlBO0VBQ08sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0VBQ3BDLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7RUFDckI7RUFDQTtFQUNBO0VBQ0E7RUFDQSxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0VBQ3RCLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQztBQUNoQztFQUNBLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1gsRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDO0FBQzdDO0VBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7RUFDM0IsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzdELEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztFQUM3QixFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDekUsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFVBQVUsS0FBSyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RTtFQUNBLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQztFQUNyQyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUM7QUFDdkM7RUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLFFBQVE7RUFDZixHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM1RDtFQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdEIsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUN0QyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ25CO0VBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0VBQ25CLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7RUFDckIsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3hDO0VBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoRDtFQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHO0VBQ3RCLEdBQUcsS0FBSztFQUNSLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcseUNBQXlDO0VBQzdELEdBQUcsQ0FBQztFQUNKLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2Q7RUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7RUFDdkMsRUFBRTtBQUNGO0VBQ0E7RUFDQSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRTtFQUNwQixFQUFFLE9BQU8sSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDbEUsRUFBRTtFQUNGLENBQUMsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFO0VBQ3JCLEVBQUUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzdCLEVBQUU7QUFDRjtFQUNBO0VBQ0EsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFO0VBQ3JCLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN2QixFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQ3hDLEdBQUcsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0VBQzdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVELEtBQUssT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3JDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixJQUFJLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0VBQ3JDO0VBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ25ELElBQUksTUFBTTtFQUNWLElBQUksT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3BDLElBQUk7RUFDSixHQUFHO0VBQ0gsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDdEMsRUFBRTtBQUNGO0VBQ0E7RUFDQSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtFQUM5QixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQzlDLEVBQUUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ2hDLEVBQUUsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0VBQy9CLEdBQUcsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNsQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU07RUFDM0IsR0FBRyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdEIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2pCLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNuQixHQUFHO0VBQ0g7RUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0VBQ2QsRUFBRTtBQUNGO0VBQ0E7RUFDQSxDQUFDLGFBQWEsR0FBRztFQUNqQixFQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDcEQsRUFBRTtBQUNGO0VBQ0E7RUFDQSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRTtFQUNsQyxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7RUFDOUMsRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztFQUNsRCxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEVBQUUsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0VBQ3JDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqRCxHQUFHO0VBQ0gsRUFBRSxPQUFPLENBQUMsQ0FBQztFQUNYLEVBQUU7QUFDRjtFQUNBO0VBQ0EsQ0FBQyxXQUFXLEdBQUc7RUFDZixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUN6QixFQUFFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUMxQztFQUNBLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN2QixFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNoQjtFQUNBLEVBQUUsT0FBTyxJQUFJLEVBQUU7RUFDZixHQUFHLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtFQUM3QjtFQUNBLElBQUksTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNuQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU07RUFDNUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztFQUNyQixLQUFLLElBQUksRUFBRSxLQUFLO0VBQ2hCLEtBQUssS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDN0IsTUFBTSxHQUFHLEVBQUUsQ0FBQztFQUNaLE1BQU0sS0FBSyxFQUFFLENBQUM7RUFDZCxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDdEMsTUFBTSxDQUFDLENBQUM7RUFDUixLQUFLLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFO0VBQzlDLEtBQUssQ0FBQyxDQUFDO0FBQ1A7RUFDQSxJQUFJLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUN0QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU07RUFDekQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0VBQ3pCLElBQUksTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7RUFDckM7RUFDQSxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU07RUFDdkMsS0FBSyxHQUFHLEVBQUUsS0FBSztFQUNmLEtBQUssS0FBSztFQUNWLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNyQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ1IsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDcEUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztFQUNyQixLQUFLLElBQUksRUFBRSxNQUFNO0VBQ2pCLEtBQUssS0FBSztFQUNWLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtFQUN6QyxLQUFLLENBQUMsQ0FBQztFQUNQLElBQUksTUFBTTtFQUNWLElBQUksTUFBTTtFQUNWLElBQUksTUFBTTtFQUNWLElBQUk7RUFDSixHQUFHLEtBQUssRUFBRSxDQUFDO0VBQ1gsR0FBRztFQUNILEVBQUU7QUFDRjtFQUNBO0VBQ0EsQ0FBQyxZQUFZLEdBQUc7RUFDaEIsRUFBRSxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztFQUN4QyxFQUFFLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztFQUNyQixFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDOUM7RUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaO0VBQ0E7RUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO0VBQ2xELEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDMUIsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUNsRSxHQUFHLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7RUFDcEMsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzNELEdBQUc7RUFDSCxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzVDO0VBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDL0MsR0FBRyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtFQUMzQixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDNUMsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNwQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNwRCxJQUFJLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztFQUNyQixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUMvQyxLQUFLLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsS0FBSyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDakQsS0FBSyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUMxQyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxF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LENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN4QjtFQUNBLFNBQVM7QUFDVDtFQUNBLFFBQVEsUUFBUSxJQUFJO0FBQ3BCO0VBQ0EsWUFBWSxLQUFLLE1BQU0sQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDaEUsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ3BELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUN4RCxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDbEQsWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQzlDLFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNsRCxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDbEQsWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0VBQ3hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUNoRCxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07RUFDaEQsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENB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LENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZjtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMs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QUUsT0FBTztBQUNyQztFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDeEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDOUQsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0VBQ3RDLEdBQUc7QUFDSDtFQUNBO0FBQ0E7RUFDQSxFQUFFLE1BQU0sR0FBRztFQUNYLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0VBQ3hCLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxHQUFHO0VBQ1osSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3JCLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFO0VBQzVCLElBQUksSUFBSSxJQUFJO0VBQ1osTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7RUFDcEIsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDNUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7RUFDbEUsT0FBTyxDQUFDO0VBQ1I7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztFQUNwQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUM1QyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMs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QUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkQsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDOUU7RUFDQSxRQUFRLE1BQU07RUFDZCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ25DLElBQUksSUFBSSxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQztFQUNBLElBQUksSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDeEMsSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQztFQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzVCLEdBQUc7QUFDSDtFQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7RUFDckIsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0M7RUFDQSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7RUFDL0IsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDekIsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUUxQixNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0VBQzlCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUU7RUFDckIsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENB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LElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ2xFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNuRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6RDtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVO0VBQzNDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0VBQzFELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdkMsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLEdBQUc7RUFDWCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0VBQzVCLEdBQUc7QUFDSDtFQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNkLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2xELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUTtFQUNyQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzVFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDN0MsR0FBRztBQUNIO0VBQ0EsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFO0VBQ2xCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7RUFDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ2hCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzFCLEtBQUs7RUFDTCxHQUFHO0VBQ0g7Ozs7Ozs7Ozs7Ozs7OyJ9 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfSBlbHNlIGlmIChSLklELmlzQ2FudmFzKSB7XHJcbiAgICAgICAgLy8gU29sbyB1c2FyIG1vdXNlIHZpcnR1YWwgc2kgZWwgZXZlbnRvIGVzIFwicHJvZ3JhbcOhdGljb1wiIChjb29yZHMgLTEpXHJcbiAgICAgICAgLy8geSBhZGVtw6FzIGVsIG1vdXNlIHZpcnR1YWwgeWEgZnVlIHNldGVhZG8gKD49MCkuXHJcbiAgICAgICAgY29uc3Qgd2FudHNWaXJ0dWFsID0gKGUuY2xpZW50WCA9PT0gLTEgfHwgZS5jbGllbnRZID09PSAtMSk7XHJcbiAgICAgICAgY29uc3QgaGFzTW91c2UgPSAoUi5JRC5tb3VzZS54ID49IDAgJiYgUi5JRC5tb3VzZS55ID49IDApO1xyXG4gICAgICAgIGlmICh3YW50c1ZpcnR1YWwgJiYgaGFzTW91c2UpIHtcclxuICAgICAgICAgIGUuY2xpZW50WCA9IFIuSUQuem9uZS54ICsgUi5JRC5tb3VzZS54O1xyXG4gICAgICAgICAgZS5jbGllbnRZID0gUi5JRC56b25lLnkgKyBSLklELm1vdXNlLnk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gXCIuLi9jb3JlL1Jvb3RzLmpzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcblx0Y29uc3RydWN0b3IobyA9IHt9KSB7XHJcblx0XHQvLyBBUEkgcMO6YmxpY2EgZXNwZXJhZGE6XHJcblx0XHQvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KVxyXG5cdFx0Ly8gby5mb2N1c2VkIChib29sKSwgby5mb2N1c1BhdGggKGFycmF5KSwgby5mb2N1c0xldmVsIChudW1iZXIpXHJcblx0XHQvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcblx0XHRvLnNlbGVjdGFibGUgPSB0cnVlO1xyXG5cdFx0by5uYW1lID0gby5uYW1lIHx8IFwiVHJlZUxpc3RcIjtcclxuXHJcblx0XHRzdXBlcihvKTtcclxuXHRcdHRoaXMuZW5hYmxlSG92ZXIgPSBvLmVuYWJsZUhvdmVyICE9PSBmYWxzZTtcclxuXHJcblx0XHQvLyBEYXRvcyAmIGVzdGFkb1xyXG5cdFx0dGhpcy50cmVlID0gby50cmVlIHx8IHt9O1xyXG5cdFx0dGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNlZCA9ICEhby5mb2N1c2VkO1xyXG5cdFx0dGhpcy5mb2N1c1BhdGggPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09IFwibnVtYmVyXCIgPyBvLmZvY3VzTGV2ZWwgOiAtMTtcclxuXHJcblx0XHR0aGlzLnRhYkluZGV4ID0gby50YWJJbmRleCA/PyBudWxsO1xyXG5cdFx0dGhpcy5pdGVtSW5kZXggPSBvLml0ZW1JbmRleCA/PyBudWxsO1xyXG5cclxuXHRcdC8vIENhbGxiYWNrXHJcblx0XHR0aGlzLmNoYW5nZUNiID1cclxuXHRcdFx0dHlwZW9mIG8ub25DaGFuZ2UgPT09IFwiZnVuY3Rpb25cIiA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcblx0XHQvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuXHRcdHRoaXMubGluZUggPSB0aGlzLmg7IC8vIGFsdG8gZGUgVU5BIGZpbGFcclxuXHRcdHRoaXMubGV2ZWxHYXAgPSB0aGlzLmNvbG9ycy5zeSB8fCAyOyAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcblx0XHR0aGlzLmxlYWZNYXggPSAwOyAvLyBzZSBjYWxjdWxhIGVuIHJTaXplKClcclxuXHJcblx0XHQvLyBNb2RlbG8gdmlzdWFsXHJcblx0XHR0aGlzLmxldmVscyA9IFtdOyAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuXHRcdHRoaXMuaXRlbXNEb20gPSBbXTsgLy8gZXNwZWpvIERPTSBwb3Igbml2ZWxcclxuXHRcdHRoaXMuaG92ZXIgPSB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogcmVjb3JkYXIgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYSAocGVyc2lzdGVudGUpXHJcblx0XHR0aGlzLmxhc3RMZWFmID0geyBwYXJlbnRQYXRoOiBbXSwga2V5OiBudWxsIH07IC8vIHBhcmVudFBhdGggZXMgbGEgcnV0YSBoYXN0YSBlbCBtYXBhIHBhZHJlXHJcblxyXG5cdFx0Ly8gQ29udGVuZWRvciBpbnRlcm5vIChhYnNvbHV0bylcclxuXHRcdHRoaXMuY1syXSA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcImRpdlwiLFxyXG5cdFx0XHR0aGlzLmNzcy5iYXNpYyArIFwibGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7XCJcclxuXHRcdCk7XHJcblx0XHR0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG5cdFx0dGhpcy5pbml0KCk7XHJcblxyXG5cdFx0Ly8gU2kgZWwgdmFsb3IgaW5pY2lhbCB5YSBhcHVudGEgYSB1bmEgaG9qYSB2w6FsaWRhLCByZWNvcmRhciBlc2EgaG9qYVxyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG5cdHN0YXRpYyBpc01hcChub2RlKSB7XHJcblx0XHRyZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblx0c3RhdGljIGlzTGlzdChub2RlKSB7XHJcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUmVjb3JyaWRvIGRlIGRhdG9zID09PT09PT1cclxuXHRnZXROb2RlQXRQYXRoKHBhdGgpIHtcclxuXHRcdGxldCBub2RlID0gdGhpcy50cmVlO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIHBhdGhbaV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuXHRcdFx0XHRub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBMbGVnYW1vcyBhIHVuYSBsaXN0YTogeWEgbm8gaGF5IG3DoXMgY2xhdmVzIHbDoWxpZGFzXHJcblx0XHRcdFx0aWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuXHR9XHJcblxyXG5cdC8vIEF1dG9jb21wbGV0YXI6IGJhamEgcG9yIHByaW1lcmFzIGNsYXZlcyBkZSBjYWRhIG1hcGEgaGFzdGEgYWxjYW56YXIgdW5hIGxpc3RhXHJcblx0YXV0b0NvbXBsZXRlVG9MZWFmKGJhc2VQYXRoKSB7XHJcblx0XHRsZXQgeyBub2RlIH0gPSB0aGlzLmdldE5vZGVBdFBhdGgoYmFzZVBhdGgpO1xyXG5cdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLnNsaWNlKCk7XHJcblx0XHR3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG5cdFx0XHRpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuXHRcdFx0Y29uc3QgazAgPSBrZXlzWzBdO1xyXG5cdFx0XHRwYXRoLnB1c2goazApO1xyXG5cdFx0XHRub2RlID0gbm9kZVtrMF07XHJcblx0XHR9XHJcblx0XHQvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2EgdW4gw610ZW0gZmluYWwgZGUgbGEgaG9qYVxyXG5cdFx0cmV0dXJuIHBhdGg7XHJcblx0fVxyXG5cclxuXHQvLyBSdXRhIGFjdGl2YSAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpbm8gdmFsdWUpXHJcblx0Z2V0QWN0aXZlUGF0aCgpIHtcclxuXHRcdHJldHVybiB0aGlzLmZvY3VzZWQgPyB0aGlzLmZvY3VzUGF0aCA6IHRoaXMudmFsdWU7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFRhbWHDsW8gZGUgaG9qYSBtw6F4aW1vIChwYXJhIGxheW91dCBlc3RhYmxlKSA9PT09PT09XHJcblx0Y29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBub2RlLmxlbmd0aDtcclxuXHRcdGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIDA7XHJcblx0XHRsZXQgbSA9IDA7XHJcblx0XHRmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcclxuXHRcdFx0bSA9IE1hdGgubWF4KG0sIHRoaXMuY29tcHV0ZUxlYWZNYXgobm9kZVtrXSkpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG07XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IENvbnN0cnVjY2nDs24gZGUgbml2ZWxlcyAobW9kZWxvIGzDs2dpY28pID09PT09PT1cclxuXHRidWlsZExldmVscygpIHtcclxuXHRcdHRoaXMubGV2ZWxzLmxlbmd0aCA9IDA7XHJcblx0XHRjb25zdCBhY3RpdmVQYXRoID0gdGhpcy5nZXRBY3RpdmVQYXRoKCk7XHJcblxyXG5cdFx0bGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcblx0XHRsZXQgbGV2ZWwgPSAwO1xyXG5cclxuXHRcdHdoaWxlIChub2RlKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdC8vIE5pdmVsIGludGVybWVkaW86IGNsYXZlcyBkZWwgbWFwYSAoaG9yaXpvbnRhbClcclxuXHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcblx0XHRcdFx0aWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcblx0XHRcdFx0dGhpcy5sZXZlbHMucHVzaCh7XHJcblx0XHRcdFx0XHR0eXBlOiBcIm1hcFwiLFxyXG5cdFx0XHRcdFx0aXRlbXM6IGtleXMubWFwKChrKSA9PiAoe1xyXG5cdFx0XHRcdFx0XHRrZXk6IGssXHJcblx0XHRcdFx0XHRcdGxhYmVsOiBrLFxyXG5cdFx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAgfSxcclxuXHRcdFx0XHRcdH0pKSxcclxuXHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogdGhpcy5saW5lSCB9LFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcblx0XHRcdFx0aWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuXHRcdFx0XHRub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAoKGxhYmVsKSA9PiAoe1xyXG5cdFx0XHRcdFx0a2V5OiBsYWJlbCxcclxuXHRcdFx0XHRcdGxhYmVsLFxyXG5cdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuXHRcdFx0XHR0aGlzLmxldmVscy5wdXNoKHtcclxuXHRcdFx0XHRcdHR5cGU6IFwibGlzdFwiLFxyXG5cdFx0XHRcdFx0aXRlbXMsXHJcblx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IGhMaXN0IH0sXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV2ZWwrKztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gTGF5b3V0ICh6b25hcyAmIERPTSkgPT09PT09PVxyXG5cdGxheW91dExldmVscygpIHtcclxuXHRcdGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7IC8vIGNvbHVtbmEgZGUgbGFiZWwgKyBwYWRkaW5nXHJcblx0XHRjb25zdCBwYWRSaWdodCA9IDg7XHJcblx0XHRjb25zdCB3ID0gdGhpcy56b25lLncgLSBjb250ZW50WCAtIHBhZFJpZ2h0O1xyXG5cclxuXHRcdGxldCB5ID0gMDtcclxuXHJcblx0XHQvLyBBanVzdGFyIGl0ZW1zRG9tIGEgY2FudGlkYWQgZGUgbml2ZWxlc1xyXG5cdFx0d2hpbGUgKHRoaXMuaXRlbXNEb20ubGVuZ3RoIDwgdGhpcy5sZXZlbHMubGVuZ3RoKVxyXG5cdFx0XHR0aGlzLml0ZW1zRG9tLnB1c2goW10pO1xyXG5cdFx0Zm9yIChsZXQgTCA9IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCA8IHRoaXMuaXRlbXNEb20ubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiB0aGlzLml0ZW1zRG9tW0xdKVxyXG5cdFx0XHRcdGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuXHRcdFx0XHRjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cdFx0XHRcdGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG5cdFx0XHRcdGxldCB4ID0gY29udGVudFg7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0XHRcdFx0aXQuem9uZSA9IHsgeCwgeSwgdzogY2VsbFcsIGg6IHRoaXMubGluZUggfTtcclxuXHRcdFx0XHRcdGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuXHRcdFx0XHRcdHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsIFwibWFwXCIpO1xyXG5cdFx0XHRcdFx0eCArPSBjZWxsVztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG5cdFx0XHRcdHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG5cdFx0XHRcdGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcblx0XHRcdFx0bHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuXHRcdFx0XHRjb25zdCByb3dzID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNSZWFsID0gaSA8IG47XHJcblx0XHRcdFx0XHRjb25zdCBpdCA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXVxyXG5cdFx0XHRcdFx0XHQ6IHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTogbnVsbCxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0XHRcdCAgfTtcclxuXHRcdFx0XHRcdGl0LnpvbmUgPSB7XHJcblx0XHRcdFx0XHRcdHg6IGNvbnRlbnRYLFxyXG5cdFx0XHRcdFx0XHR5OiB5ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdHcsXHJcblx0XHRcdFx0XHRcdGg6IHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Y29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG5cdFx0XHRcdFx0dGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgXCJsaXN0XCIsIGlzUmVhbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBmaWxhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIHJvd3MpO1xyXG5cdFx0XHRcdHkgKz0gaExpc3Q7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBBanVzdGVzIGRlIGFsdG8gaW50ZXJubyBkZWwgY29udGVuZWRvciB2aXN1YWxcclxuXHRcdGNvbnN0IHRvdGFsSCA9IHk7XHJcblx0XHR0aGlzLnpvbmUuaCA9IHRvdGFsSCArIHRoaXMubWFyZ2luO1xyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG5cdFx0dGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArIFwicHhcIjtcclxuXHJcblx0XHQvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcblx0XHR0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcblx0fVxyXG5cclxuXHQvLyBFbGltaW5hIG5vZG9zIERPTSBzb2JyYW50ZXMgZW4gbGEgZmlsYSBMIGEgcGFydGlyIGRlbCDDrW5kaWNlIGtlZXBcclxuXHRfcHJ1bmVSb3coTCwga2VlcCkge1xyXG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuXHRcdGlmICghcm93KSByZXR1cm47XHJcblx0XHRmb3IgKGxldCBqID0ga2VlcDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRjb25zdCBlbCA9IHJvd1tqXTtcclxuXHRcdFx0aWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG5cdFx0fVxyXG5cdFx0cm93Lmxlbmd0aCA9IGtlZXA7XHJcblx0fVxyXG5cclxuXHRlbnN1cmVJdGVtRG9tKEwsIGkpIHtcclxuXHRcdGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcblx0XHR3aGlsZSAocm93Lmxlbmd0aCA8PSBpKSByb3cucHVzaChudWxsKTtcclxuXHRcdGlmICghcm93W2ldKSB7XHJcblx0XHRcdGNvbnN0IGRpdiA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcdFwiZGl2XCIsXHJcblx0XHRcdFx0VG9vbHMuY3NzLnR4dCArIFwicG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7XCJcclxuXHRcdFx0KTtcclxuXHRcdFx0dGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcblx0XHRcdHJvd1tpXSA9IGRpdjtcclxuXHRcdH1cclxuXHRcdHJldHVybiByb3dbaV07XHJcblx0fVxyXG5cclxuXHRwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG5cdFx0Y29uc3QgcyA9IGRpdi5zdHlsZTtcclxuXHRcdGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG5cdFx0Ly8gUG9zaWNpw7NuXHJcblx0XHRzLmxlZnQgPSBpdC56b25lLnggKyBcInB4XCI7XHJcblx0XHRzLnRvcCA9IGl0LnpvbmUueSArIFwicHhcIjtcclxuXHRcdHMud2lkdGggPSBpdC56b25lLncgKyBcInB4XCI7XHJcblx0XHRzLmhlaWdodCA9IGl0LnpvbmUuaCAtIDIgKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gVGV4dG9cclxuXHRcdGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogXCJcIjtcclxuXHJcblx0XHQvLyBFc3RhZG9zXHJcblx0XHRjb25zdCBzZWxlY3RlZCA9XHJcblx0XHRcdGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG5cdFx0Y29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiB0aGlzLmZvY3VzTGV2ZWwgPT09IEw7XHJcblx0XHRjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgdGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleTtcclxuXHRcdGNvbnN0IGlzSG92ZXIgPVxyXG5cdFx0XHR0aGlzLmVuYWJsZUhvdmVyICYmXHJcblx0XHRcdGlzUmVhbCAmJlxyXG5cdFx0XHR0aGlzLmhvdmVyLmxldmVsID09PSBMICYmXHJcblx0XHRcdHRoaXMuaG92ZXIuaW5kZXggPT09IGk7XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogwr9lc3RhIGZpbGEgZXMgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYT9cclxuXHRcdGxldCBpc0xhc3RMZWFmID0gZmFsc2U7XHJcblx0XHRpZiAoaXNSZWFsICYmIGtpbmQgPT09IFwibGlzdFwiICYmIHRoaXMubGFzdExlYWYua2V5ICE9IG51bGwpIHtcclxuXHRcdFx0Ly8gTGEgaG9qYSB2aXNpYmxlIGNvcnJlc3BvbmRlIHNpIGVsIHBhZHJlIGRlIGVzdGEgbGlzdGEgY29pbmNpZGUgY29uIHBhcmVudFBhdGggZ3VhcmRhZG9cclxuXHRcdFx0Ly8gRWwgcGFkcmUgYWN0dWFsIGVzIHRoaXMudmFsdWUuc2xpY2UoMCwgTCkgY3VhbmRvIGxhIGxpc3RhIGVzdMOhIGRlc3BsZWdhZGEgcG9yIHZhbHVlL2ZvY3VzXHJcblx0XHRcdGNvbnN0IHBhcmVudE5vdyA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpLnNsaWNlKDAsIEwpO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5fcGF0aHNFcXVhbChwYXJlbnROb3csIHRoaXMubGFzdExlYWYucGFyZW50UGF0aCkgJiZcclxuXHRcdFx0XHRpdC5rZXkgPT09IHRoaXMubGFzdExlYWYua2V5XHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGlzTGFzdExlYWYgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRXN0aWxvcyBiYXNlXHJcblx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG5cdFx0cy5jb2xvciA9IGNjLnRleHQ7XHJcblx0XHRzLmJvcmRlciA9IFwiMXB4IHNvbGlkIFwiICsgY2MuYm9yZGVyO1xyXG5cdFx0cy50ZXh0QWxpZ24gPSBraW5kID09PSBcIm1hcFwiID8gXCJjZW50ZXJcIiA6IFwibGVmdFwiO1xyXG5cclxuXHRcdC8vIFByaW9yaWRhZCB2aXN1YWw6XHJcblx0XHQvLyAxKSBzZWxlY2Npb25hZG8gKGF6dWwpXHJcblx0XHQvLyAyKSDDumx0aW1hIGhvamEgKG51ZXZvIGNvbG9yKVxyXG5cdFx0Ly8gMykgZm9jb1xyXG5cdFx0Ly8gNCkgaG92ZXJcclxuXHRcdGlmIChzZWxlY3RlZCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG5cdFx0fSBlbHNlIGlmIChpc0xhc3RMZWFmKSB7XHJcblx0XHRcdC8vIGNvbG9yIGRpc3RpbnRpdm8gcGFyYSBcIsO6bHRpbWEgaG9qYVwiIChhbWFyaWxsbyBzdWF2ZSlcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gXCJyZ2JhKDI1NSwgMjAwLCAwLCAwLjI1KVwiO1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dDtcclxuXHRcdH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG5cdFx0fSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG5cdFx0cy5vcGFjaXR5ID0gaXNSZWFsID8gXCIxXCIgOiBcIjBcIjtcclxuXHR9XHJcblxyXG5cdF9wYXRoc0VxdWFsKGEsIGIpIHtcclxuXHRcdGlmICghYSB8fCAhYiB8fCBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuXHRyU2l6ZSgpIHtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuXHRcdHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGUoKSB7XHJcblx0XHR0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcblx0XHR0aGlzLmxheW91dExldmVscygpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG5cdF90b0xvY2FsKGUpIHtcclxuXHRcdGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblx0XHRjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG5cdFx0cmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcblx0fVxyXG5cclxuXHRfaGl0VGVzdChteCwgbXkpIHtcclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGNvbnN0IHogPSBsdmwuem9uZTsgLy8geCB5IHcgeWEgaW5jbHV5ZW4gY29udGVudFhcclxuXHJcblx0XHRcdGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0bXggPj0gaXR6LnggJiZcclxuXHRcdFx0XHRcdFx0bXkgPj0gaXR6LnkgJiZcclxuXHRcdFx0XHRcdFx0bXggPD0gaXR6LnggKyBpdHoudyAmJlxyXG5cdFx0XHRcdFx0XHRteSA8PSBpdHoueSArIGl0ei5oXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuXHRcdFx0XHRcdGNvbnN0IGl0eiA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXS56b25lXHJcblx0XHRcdFx0XHRcdDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0eDogei54LFxyXG5cdFx0XHRcdFx0XHRcdFx0eTogei55ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdFx0XHR3OiB6LncsXHJcblx0XHRcdFx0XHRcdFx0XHRoOiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHQgIH07XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdG14ID49IGl0ei54ICYmXHJcblx0XHRcdFx0XHRcdG15ID49IGl0ei55ICYmXHJcblx0XHRcdFx0XHRcdG14IDw9IGl0ei54ICsgaXR6LncgJiZcclxuXHRcdFx0XHRcdFx0bXkgPD0gaXR6LnkgKyBpdHouaFxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IEwsIGksIHJlYWw6IGlzUmVhbCB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgTDogLTEsIGk6IC0xLCByZWFsOiBmYWxzZSB9O1xyXG5cdH1cclxuXHJcblx0aGFuZGxlRXZlbnQoZSkge1xyXG5cdFx0aWYgKHRoaXMubG9jaykgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcclxuXHRcdFx0Ly8gU2kgZWwgaG92ZXIgZXN0w6EgZGVzYWN0aXZhZG8sIG5vIGhheSB0cmFiYWpvIHF1ZSBoYWNlci5cclxuXHRcdFx0aWYgKCF0aGlzLmVuYWJsZUhvdmVyKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHJcblx0XHRcdC8vIG51ZXZvIGhvdmVyIGNhbGN1bGFkb1xyXG5cdFx0XHRjb25zdCBuZXdIb3ZlciA9XHJcblx0XHRcdFx0aHQuTCAhPT0gLTEgJiYgaHQucmVhbFxyXG5cdFx0XHRcdFx0PyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9XHJcblx0XHRcdFx0XHQ6IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHRcdFx0Ly8gc29sbyByZXBpbnRhciBzaSBjYW1iaWEgcmVhbG1lbnRlIGVsIGhvdmVyXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRuZXdIb3Zlci5sZXZlbCA9PT0gdGhpcy5ob3Zlci5sZXZlbCAmJlxyXG5cdFx0XHRcdG5ld0hvdmVyLmluZGV4ID09PSB0aGlzLmhvdmVyLmluZGV4XHJcblx0XHRcdClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdHRoaXMuaG92ZXIgPSBuZXdIb3ZlcjtcclxuXHRcdFx0dGhpcy51cGRhdGUoKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHRcdFx0aWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuXHRcdFx0XHR0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLy8gc29sbyB0cnVlIHNpIHJlYWxtZW50ZSBzZSBzZWxlY2Npb27DsyBhbGdvXHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcblx0X3NlbGVjdEF0KEwsIGkpIHtcclxuXHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0Y29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0aWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuXHRcdGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuXHRcdGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcblx0XHQvLyDwn5S4IFNpIGVsIHVzdWFyaW8gc2VsZWNjaW9uYSBleHBsw61jaXRhbWVudGUgZW4gZWwgbml2ZWwgaG9qYSwgcmVjb3JkYXJsb1xyXG5cdFx0aWYgKGx2bC50eXBlID09PSBcImxpc3RcIikge1xyXG5cdFx0XHR0aGlzLmxhc3RMZWFmLnBhcmVudFBhdGggPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpOyAvLyBwYWRyZSBkZSBsYSBsaXN0YSBhY3R1YWxcclxuXHRcdFx0dGhpcy5sYXN0TGVhZi5rZXkgPSBjaG9zZW4ua2V5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMudmFsdWUgPSBuZXdQYXRoLnNsaWNlKCk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHRcdC8vIHNpIGVzdMOhIHJlZmVyZW5jaWFkbywgcHJvcGFnYSBhIG9iamV0byBleHRlcm5vXHJcblx0XHR0aGlzLnNlbmQobmV3UGF0aCk7XHJcblx0XHR0aGlzLmNoYW5nZUNiKHRoaXMudGFiSW5kZXgsIHRoaXMuaXRlbUluZGV4LCBuZXdQYXRoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gQVBJIHDDumJsaWNhID09PT09PT1cclxuXHRzZXRWYWx1ZShwYXRoKSB7XHJcblx0XHR0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguc2xpY2UoKSA6IFtdO1xyXG5cdFx0Ly8gU2kgZGVzZGUgYWZ1ZXJhIG5vcyBzZXRlYW4gdW5hIGhvamEgdsOhbGlkYSwgdGFtYmnDqW4gbGEgcmVjb3JkYW1vc1xyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdHNldFRyZWUodHJlZSkge1xyXG5cdFx0dGhpcy50cmVlID0gdHJlZSB8fCB7fTtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRzZXRGb2N1cyh7IGZvY3VzZWQsIGZvY3VzUGF0aCwgZm9jdXNMZXZlbCB9KSB7XHJcblx0XHRpZiAodHlwZW9mIGZvY3VzZWQgPT09IFwiYm9vbGVhblwiKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuXHRcdGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gXCJudW1iZXJcIikgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRfbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpIHtcclxuXHRcdC8vIFNpIHZhbHVlIGFwdW50YSBhIHBhZHJlK2hvamEgKOKApixbbGVhZl0pIHkgZXMgdsOhbGlkYSwgcmVjb3JkYXIgZXNhIGhvamFcclxuXHRcdGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLnZhbHVlLmxlbmd0aCAtIDEpO1xyXG5cdFx0Y29uc3QgbGVhZiA9IHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdGNvbnN0IGluZm8gPSB0aGlzLmdldE5vZGVBdFBhdGgocGFyZW50KTtcclxuXHRcdGlmIChpbmZvICYmIEFycmF5LmlzQXJyYXkoaW5mby5ub2RlKSAmJiBpbmZvLm5vZGUuaW5jbHVkZXMobGVhZikpIHtcclxuXHRcdFx0dGhpcy5sYXN0TGVhZiA9IHsgcGFyZW50UGF0aDogcGFyZW50LCBrZXk6IGxlYWYgfTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUHVibGljYWNpw7NuIGRlIGFsdHVyYSA9PT09PT09XHJcblx0X2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKSB7XHJcblx0XHRsZXQgYyA9IDA7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgaSsrKVxyXG5cdFx0XHRpZiAodGhpcy5sZXZlbHNbaV0udHlwZSA9PT0gXCJtYXBcIikgYysrO1xyXG5cdFx0cmV0dXJuIGM7XHJcblx0fVxyXG5cclxuXHRfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcblx0XHRjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcblx0XHRyZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09IFwibGlzdFwiID8gbGFzdC5pdGVtcy5sZW5ndGggOiAwO1xyXG5cdH1cclxuXHJcblx0X3B1Ymxpc2hIZWlnaHQoKSB7XHJcblx0XHRjb25zdCBpbnRlciA9IHRoaXMuX2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKTtcclxuXHRcdGNvbnN0IGxlYWZMZW4gPSBNYXRoLm1heCh0aGlzLmxlYWZNYXgsIHRoaXMuX2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkpO1xyXG5cdFx0Y29uc3QgbGVhZkggPSBsZWFmTGVuICogdGhpcy5saW5lSDtcclxuXHRcdGNvbnN0IGludGVySCA9IGludGVyICogKHRoaXMubGluZUggKyB0aGlzLmxldmVsR2FwKTtcclxuXHRcdGNvbnN0IHRvdGFsSCA9IGludGVyID8gaW50ZXJIICsgdGhpcy5sZXZlbEdhcCArIGxlYWZIIDogbGVhZkg7XHJcblxyXG5cdFx0Ly8gTm9ybWFsaXphbW9zIGEgcHggZW50ZXJvcyBwYXJhIGV2aXRhciBqaXR0ZXIgcG9yIHJlZG9uZGVvXHJcblx0XHRjb25zdCBuZXdIID0gTWF0aC5mbG9vcih0b3RhbEgpO1xyXG5cclxuXHRcdC8vIEFjdHVhbGl6YW1vcyBtw6l0cmljYXMgbG9jYWxlcyBzaWVtcHJlXHJcblx0XHR0aGlzLmggPSBuZXdIO1xyXG5cdFx0dGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gU29sbyBhdmlzYW1vcyBhbCBHVUkgc2kgbGEgYWx0dXJhIGNhbWJpw7NcclxuXHRcdGlmIChuZXdIICE9PSB0aGlzLl9sYXN0UHVibGlzaGVkSCkge1xyXG5cdFx0XHR0aGlzLl9sYXN0UHVibGlzaGVkSCA9IG5ld0g7XHJcblx0XHRcdFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG5cdFx0XHRpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiXHJcbmltcG9ydCB7IEJvb2wgfSBmcm9tICcuLi9wcm90by9Cb29sLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vcHJvdG8vQnV0dG9uLmpzJztcclxuaW1wb3J0IHsgQ2lyY3VsYXIgfSBmcm9tICcuLi9wcm90by9DaXJjdWxhci5qcyc7XHJcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnLi4vcHJvdG8vQ29sb3IuanMnO1xyXG5pbXBvcnQgeyBGcHMgfSBmcm9tICcuLi9wcm90by9GcHMuanMnO1xyXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL3Byb3RvL0dyYXBoLmpzJztcclxuaW1wb3J0IHsgR3JvdXAgIH0gZnJvbSAnLi4vcHJvdG8vR3JvdXAuanMnO1xyXG5pbXBvcnQgeyBKb3lzdGljayB9IGZyb20gJy4uL3Byb3RvL0pveXN0aWNrLmpzJztcclxuaW1wb3J0IHsgS25vYiB9IGZyb20gJy4uL3Byb3RvL0tub2IuanMnO1xyXG5pbXBvcnQgeyBMaXN0IH0gZnJvbSAnLi4vcHJvdG8vTGlzdC5qcyc7XHJcbmltcG9ydCB7IE51bWVyaWMgfSBmcm9tICcuLi9wcm90by9OdW1lcmljLmpzJztcclxuaW1wb3J0IHsgU2xpZGUgfSBmcm9tICcuLi9wcm90by9TbGlkZS5qcyc7XHJcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gJy4uL3Byb3RvL1RleHRJbnB1dC5qcyc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vcHJvdG8vVGl0bGUuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuLi9wcm90by9TZWxlY3QuanMnO1xyXG5pbXBvcnQgeyBCaXRtYXAgfSBmcm9tICcuLi9wcm90by9CaXRtYXAuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdG9yLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuLi9wcm90by9FbXB0eS5qcyc7XHJcbmltcG9ydCB7IEl0ZW0gfSBmcm9tICcuLi9wcm90by9JdGVtLmpzJztcclxuaW1wb3J0IHsgR3JpZCB9IGZyb20gJy4uL3Byb3RvL0dyaWQuanMnO1xyXG5pbXBvcnQgeyBQYWQyRCB9IGZyb20gJy4uL3Byb3RvL1BhZDJELmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgVHJlZUxpc3QgfSBmcm9tICcuLi9wcm90by9UcmVlTGlzdC5qcyc7XHJcblxyXG5leHBvcnQgY29uc3QgYWRkID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGFyZ3VtZW50czsgXHJcblxyXG4gICAgICAgIGxldCB0eXBlLCBvLCByZWYgPSBmYWxzZSwgbiA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVswXSA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgICAgICB0eXBlID0gYVswXTtcclxuICAgICAgICAgICAgbyA9IGFbMV0gfHwge307XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBhWzBdID09PSAnb2JqZWN0JyApeyAvLyBsaWtlIGRhdCBndWlcclxuXHJcbiAgICAgICAgICAgIHJlZiA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoYSwge30pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzJdLnR5cGUgPyBhWzJdLnR5cGUgOiBhdXRvVHlwZSggYVswXVthWzFdXSwgYVsyXSApO1xyXG5cclxuICAgICAgICAgICAgbyA9IGFbMl07XHJcbiAgICAgICAgICAgIG8ubmFtZSA9IGFbMV07XHJcbiAgICAgICAgICAgIGlmIChvLmhhc093blByb3BlcnR5KFwiZGlzcGxheU5hbWVcIikpIG8ubmFtZSA9IG8uZGlzcGxheU5hbWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ2xpc3QnICYmICFvLmxpc3QgKXsgby5saXN0ID0gYVswXVthWzFdXTsgfVxyXG4gICAgICAgICAgICBlbHNlIG8udmFsdWUgPSBhWzBdW2FbMV1dO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2dyb3VwJyApeyBcclxuICAgICAgICAgICAgby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIC8vby5keCA9IDhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCggbmFtZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnYm9vbCc6IGNhc2UgJ2Jvb2xlYW4nOiBuID0gbmV3IEJvb2wobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdidXR0b24nOiBuID0gbmV3IEJ1dHRvbihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NpcmN1bGFyJzogbiA9IG5ldyBDaXJjdWxhcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzogbiA9IG5ldyBDb2xvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Zwcyc6IG4gPSBuZXcgRnBzKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JhcGgnOiBuID0gbmV3IEdyYXBoKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOiBuID0gbmV3IEdyb3VwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnam95c3RpY2snOiBuID0gbmV3IEpveXN0aWNrKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAna25vYic6IG4gPSBuZXcgS25vYihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xpc3QnOiBuID0gbmV3IExpc3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdudW1lcmljJzogY2FzZSAnbnVtYmVyJzogbiA9IG5ldyBOdW1lcmljKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2xpZGUnOiBuID0gbmV3IFNsaWRlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGV4dElucHV0JzogY2FzZSAnc3RyaW5nJzogbiA9IG5ldyBUZXh0SW5wdXQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6IGNhc2UgJ3RleHQnOiBuID0gbmV3IFRpdGxlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzogbiA9IG5ldyBTZWxlY3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdiaXRtYXAnOiBuID0gbmV3IEJpdG1hcChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdG9yJzogbiA9IG5ldyBTZWxlY3RvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzogY2FzZSAnc3BhY2UnOiBuID0gbmV3IEVtcHR5KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaXRlbSc6IG4gPSBuZXcgSXRlbShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyaWQnOiBuID0gbmV3IEdyaWQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwYWQyZCc6IGNhc2UgJ3BhZCc6IG4gPSBuZXcgUGFkMkQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0cmVlbGlzdCc6IG4gPSBuZXcgVHJlZUxpc3Qobyk7IGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggbiAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGlmKCByZWYgKSBuLnNldFJlZmVyZW5jeSggYVswXSwgYVsxXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gbjtcclxuXHJcbiAgICAgICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGF1dG9UeXBlID0gZnVuY3Rpb24gKCB2LCBvICkge1xyXG5cclxuICAgIGxldCB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIGlmKCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkgdHlwZSA9ICdib29sJyBcclxuICAgIGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgaWYoIHYuc3Vic3RyaW5nKDAsMSkgPT09ICcjJyApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3N0cmluZycgXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ251bWJlcicgKXsgXHJcblxyXG4gICAgICAgIGlmKCBvLmN0eXBlICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ2FycmF5JyAmJiB2IGluc3RhbmNlb2YgQXJyYXkgKXtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB2WzBdID09PSAnbnVtYmVyJyApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgaWYoIHR5cGVvZiB2WzBdID09PSAnc3RyaW5nJyApIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcblxyXG4gICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHlwZVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBhZGQgfSBmcm9tIFwiLi9hZGQuanNcIjtcclxuaW1wb3J0IHsgVjIgfSBmcm9tIFwiLi9WMi5qc1wiO1xyXG5cclxuLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIEd1aSB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICB0aGlzLmlzR3VpID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBcImd1aVwiO1xyXG5cclxuICAgIC8vIGZvciAzZFxyXG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xyXG4gICAgdGhpcy5zY3JlZW4gPSBudWxsO1xyXG4gICAgdGhpcy5wbGFuZSA9IG8ucGxhbmUgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjb2xvclxyXG4gICAgaWYgKG8uY29uZmlnKSBvLmNvbG9ycyA9IG8uY29uZmlnO1xyXG4gICAgaWYgKG8uY29sb3JzKSB0aGlzLnNldENvbmZpZyhvLmNvbG9ycyk7XHJcbiAgICBlbHNlIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcblxyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMuY3NzID0gVG9vbHMuY2xvbmVDc3MoKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG4gICAgdGhpcy50bXBBZGQgPSBudWxsO1xyXG4gICAgLy90aGlzLnRtcEggPSAwXHJcblxyXG4gICAgdGhpcy5pc0NhbnZhcyA9IG8uaXNDYW52YXMgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIE1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIC8vIG9wdGlvbiB0byBkZWZpbmUgd2hldGhlciB0aGUgZXZlbnQgbGlzdGVuZXJzIHNob3VsZCBiZSBhZGRlZCBvciBub3RcclxuICAgIFJvb3RzLmFkZERPTUV2ZW50TGlzdGVuZXJzID0gby5oYXNPd25Qcm9wZXJ0eShcImFkZERPTUV2ZW50TGlzdGVuZXJzXCIpXHJcbiAgICAgID8gby5hZGRET01FdmVudExpc3RlbmVyc1xyXG4gICAgICA6IHRydWU7XHJcblxyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG5cclxuICAgIHRoaXMuZm9yY2VIZWlnaHQgPSBvLm1heEhlaWdodCB8fCAwO1xyXG4gICAgdGhpcy5sb2NrSGVpZ2h0ID0gby5sb2NrSGVpZ2h0IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNJdGVtTW9kZSA9IG8uaXRlbU1vZGUgIT09IHVuZGVmaW5lZCA/IG8uaXRlbU1vZGUgOiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmNuID0gXCJcIjtcclxuXHJcbiAgICAvLyBzaXplIGRlZmluZVxyXG4gICAgdGhpcy5zaXplID0gVG9vbHMuc2l6ZTtcclxuICAgIGlmIChvLnAgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnAgPSBvLnA7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS53ID0gby53O1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUuaCA9IG8uaDtcclxuICAgIGlmIChvLnMgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnMgPSBvLnM7XHJcblxyXG4gICAgdGhpcy5zaXplLmggPSB0aGlzLnNpemUuaCA8IDExID8gMTEgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICAvLyBsb2NhbCBtb3VzZSBhbmQgem9uZVxyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG4gICAgdGhpcy56b25lID0geyB4OiAwLCB5OiAwLCB3OiB0aGlzLnNpemUudywgaDogMCB9O1xyXG5cclxuICAgIC8vIHZpcnR1YWwgbW91c2VcclxuICAgIHRoaXMubW91c2UgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmggPSAwO1xyXG4gICAgLy90aGlzLnByZXZZID0gLTE7XHJcbiAgICB0aGlzLnN3ID0gMDtcclxuXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICAvLyBib3R0b20gYW5kIGNsb3NlIGhlaWdodFxyXG4gICAgdGhpcy5pc1dpdGhDbG9zZSA9IG8uY2xvc2UgIT09IHVuZGVmaW5lZCA/IG8uY2xvc2UgOiB0cnVlO1xyXG4gICAgdGhpcy5iaCA9ICF0aGlzLmlzV2l0aENsb3NlID8gMCA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG8uYXV0b1Jlc2l6ZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG8uYXV0b1Jlc2l6ZTtcclxuXHJcbiAgICAvLyBkZWZhdWx0IHBvc2l0aW9uXHJcbiAgICB0aGlzLmlzQ2VudGVyID0gby5jZW50ZXIgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmNzc0d1aSA9XHJcbiAgICAgIG8uY3NzICE9PSB1bmRlZmluZWQgPyBvLmNzcyA6IHRoaXMuaXNDZW50ZXIgPyBcIlwiIDogXCJyaWdodDoxMHB4O1wiO1xyXG5cclxuICAgIHRoaXMuaXNPcGVuID0gby5vcGVuICE9PSB1bmRlZmluZWQgPyBvLm9wZW4gOiB0cnVlO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmRlY2FsID0gMDtcclxuICAgIHRoaXMucmF0aW8gPSAxO1xyXG4gICAgdGhpcy5veSA9IDA7XHJcblxyXG4gICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIHRoaXMuY29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiIHdpZHRoOjBweDsgaGVpZ2h0OmF1dG87IHRvcDowcHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmNvbnRlbnQgK1xyXG4gICAgICAgIFwiOyBcIiArXHJcbiAgICAgICAgdGhpcy5jc3NHdWlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyB0aGlzLmNzcy5idXR0b24gKyAnd2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyQ29udGVudCk7XHJcblxyXG4gICAgLy90aGlzLmlubmVyID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyAnKVxyXG4gICAgdGhpcy51c2VGbGV4ID0gdHJ1ZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/IFwiZGlzcGxheTpmbGV4OyBmbGV4LWZsb3c6IHJvdyB3cmFwO1wiIDogXCJcIjsgLy8nIGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnN0YXJ0OyBhbGlnbi1pdGVtczpzdGFydDtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYWxpZ24taXRlbXM6IGNlbnRlcjsnO1xyXG4gICAgdGhpcy5pbm5lciA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwid2lkdGg6MTAwJTsgbGVmdDowOyBcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuaW5uZXJDb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXIpO1xyXG5cclxuICAgIC8vIHNjcm9sbFxyXG4gICAgdGhpcy5zY3JvbGxCRyA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwicmlnaHQ6MDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSAxKSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7IGRpc3BsYXk6bm9uZTsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYmFja2dyb3VuZCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxCRyk7XHJcblxyXG4gICAgdGhpcy5zY3JvbGwgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJ1dHRvbiArXHJcbiAgICAgICAgXCI7IHJpZ2h0OjJweDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSA0KSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLnNjcm9sbEJHLmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsKTtcclxuXHJcbiAgICAvLyBib3R0b20gYnV0dG9uXHJcbiAgICB0aGlzLmJvdHRvbVRleHQgPSBvLmJvdHRvbVRleHQgfHwgW1wib3BlblwiLCBcImNsb3NlXCJdO1xyXG5cclxuICAgIGxldCByID0gY2MucmFkaXVzO1xyXG4gICAgdGhpcy5ib3R0b20gPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dCArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6YXV0bzsgYm90dG9tOjA7IGxlZnQ6MDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGhlaWdodDpcIiArXHJcbiAgICAgICAgdGhpcy5iaCArXHJcbiAgICAgICAgXCJweDsgbGluZS1oZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmJoIC0gNSkgK1xyXG4gICAgICAgIFwicHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTsgLy8gYm9yZGVyLXRvcDoxcHggc29saWQgJytUb29scy5jb2xvcnMuc3Ryb2tlKyc7Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5ib3R0b20pO1xyXG4gICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIC8vXHJcblxyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnBhcmVudCAhPT0gdW5kZWZpbmVkID8gby5wYXJlbnQgOiBudWxsO1xyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnRhcmdldCAhPT0gdW5kZWZpbmVkID8gby50YXJnZXQgOiB0aGlzLnBhcmVudDtcclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgPT09IG51bGwgJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5wYXJlbnQgPSBkb2N1bWVudC5ib2R5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcyAmJiB0aGlzLnBhcmVudCA9PT0gbnVsbCkgdGhpcy5pc0NhbnZhc09ubHkgPSB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XHJcbiAgICAgIG8udHJhbnNpdGlvbiA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGVpZ2h0IHRyYW5zaXRpb25cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9XHJcbiAgICAgIG8udHJhbnNpdGlvbiAhPT0gdW5kZWZpbmVkID8gby50cmFuc2l0aW9uIDogVG9vbHMudHJhbnNpdGlvbjtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24pIHNldFRpbWVvdXQodGhpcy5hZGRUcmFuc2l0aW9uLmJpbmQodGhpcyksIDEwMDApO1xyXG5cclxuICAgIHRoaXMuc2V0V2lkdGgoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5tYWtlQ2FudmFzKCk7XHJcblxyXG4gICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlRG93bih4LCB5KSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJHdWkudHJpZ2dlck1vdXNlRG93biBpcyBkZXByZWNhdGVkLCB1c2UgdHJpZ2dlck1vdXNlRG93blVWIGluc3RlYWRcIik7XHJcbiAgICAvKlxyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pOyovXHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VNb3ZlKCkge1xyXG4gICAgY29uc29sZS53YXJuKFwiR3VpLnRyaWdnZXJNb3VzZU1vdmUgaXMgZGVwcmVjYXRlZCwgdXNlIHRyaWdnZXJNb3VzZU1vdmVVViBpbnN0ZWFkXCIpO1xyXG4gICAgLypcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pOyovXHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcCh4LCB5KSB7XHJcblxyXG4gICAgY29uc29sZS53YXJuKFwiR3VpLnRyaWdnZXJNb3VzZVVwIGlzIGRlcHJlY2F0ZWQsIHVzZSB0cmlnZ2VyTW91c2VVcFVWIGluc3RlYWRcIik7XHJcbiAgICAvKlxyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTsqL1xyXG4gIH1cclxuXHJcbiAgLy8gR3VpLmpzXHJcbiAgdHJpZ2dlck1vdXNlRG93blVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgLy8gdSwgdiBlbiBbMCwxXSByZWxhdGl2b3MgYWwgcmVjdCBkZWwgR1VJXHJcbiAgICBjb25zdCB4ID0gdGhpcy56b25lLnggKyBNYXRoLnJvdW5kKHUgKiB0aGlzLnpvbmUudyk7XHJcbiAgICBjb25zdCB5ID0gdGhpcy56b25lLnkgKyBNYXRoLnJvdW5kKChmbGlwWSA/IDEgLSB2IDogdikgKiB0aGlzLnpvbmUuaCk7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcmRvd25cIixcclxuICAgICAgY2xpZW50WDogaXNOYU4oeCkgPyBudWxsIDogeCxcclxuICAgICAgY2xpZW50WTogaXNOYU4oeSkgPyBudWxsIDogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcFVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgY29uc3QgeCA9IHRoaXMuem9uZS54ICsgTWF0aC5yb3VuZCh1ICogdGhpcy56b25lLncpO1xyXG4gICAgY29uc3QgeSA9IHRoaXMuem9uZS55ICsgTWF0aC5yb3VuZCgoZmxpcFkgPyAxIC0gdiA6IHYpICogdGhpcy56b25lLmgpO1xyXG4gICAgXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcnVwXCIsXHJcbiAgICAgIGNsaWVudFg6IGlzTmFOKHgpID8gbnVsbCA6IHgsXHJcbiAgICAgIGNsaWVudFk6IGlzTmFOKHkpID8gbnVsbCA6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZVVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgY29uc3QgeCA9IHRoaXMuem9uZS54ICsgTWF0aC5yb3VuZCh1ICogdGhpcy56b25lLncpO1xyXG4gICAgY29uc3QgeSA9IHRoaXMuem9uZS55ICsgTWF0aC5yb3VuZCgoZmxpcFkgPyAxIC0gdiA6IHYpICogdGhpcy56b25lLmgpO1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJtb3ZlXCIsXHJcbiAgICAgIGNsaWVudFg6IGlzTmFOKHgpID8gbnVsbCA6IHgsXHJcbiAgICAgIGNsaWVudFk6IGlzTmFOKHkpID8gbnVsbCA6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0VG9wKHQsIGgpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS50b3AgPSB0ICsgXCJweFwiO1xyXG4gICAgaWYgKGggIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JjZUhlaWdodCA9IGg7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFkZFRyYW5zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmJvdHRvbS5zdHlsZS50cmFuc2l0aW9uID0gXCJ0b3AgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgLy90aGlzLmJvdHRvbS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBSb290cy5yZXNpemUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uYWRkVHJhbnNpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkRyYXcoKSB7fVxyXG5cclxuICBtYWtlQ2FudmFzKCkge1xyXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXHJcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFxyXG4gICAgICBcImNhbnZhc1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLnpvbmUudztcclxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyggdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCApXHJcbiAgfVxyXG5cclxuICBkcmF3KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5jYW52YXMgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuem9uZS53O1xyXG4gICAgbGV0IGggPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG4gICAgUm9vdHMudG9DYW52YXModGhpcywgdywgaCwgZm9yY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vXHJcblxyXG4gIGdldERvbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBub01vdXNlKCkge1xyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICB9XHJcblxyXG4gIHNldE1vdXNlKHV2LCBmbGlwID0gdHJ1ZSkge1xyXG4gICAgaWYgKGZsaXApXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgLSBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICAvL3RoaXMubW91c2Uuc2V0KCBtLngsIG0ueSApO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJzZXRNb3VzZSBcIiArIHV2LnggKyBcIiBcIiArIHV2LnkpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAg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QyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0VBQ2pCLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0VBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0VBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0VBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0VBQ2pCLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0VBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7RUFDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztFQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtFQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0VBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7RUFDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztFQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDbkIsU0FBUztFQUNULFFBQVEsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDM0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENB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QUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JIO0VBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM3SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FB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LFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0VBQ0E7RUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztFQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtFQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7RUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0VBQ0E7QUFDQTtFQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFB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QUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0VBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztFQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztFQUN2QjtFQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7RUFDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7RUFDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0VBQ0EsWUFBWSxFQUFFLEdBQUc7RUFDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7RUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUMzQyxhQUFhLENBQUM7RUFDZDtFQUNBLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlEO0VBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkI7RUFDQSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixnQkFBZ0IsTUFBTSxDQUFDLEVBQUUsQ0FBQztFQUMxQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdEQsaUJBQWlCO0FBQ2pCO0VBQ0EsZ0JBQWdCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRztFQUNBLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0QsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMs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SUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDM0M7RUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMzQjtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ2pELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztFQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQzFELFNBQVMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QjtFQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztFQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqRDtFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDdkQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7RUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0VBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUN4QztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7RUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDbkM7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxJQUFJ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QyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQzdFLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0VBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7RUFDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEMsT0FBTztFQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDdkIsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN6QyxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxHQUFH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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDakUsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0VBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7RUFDcEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0VBQzdDLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN0QixLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0EsRUFBRSxhQUFhLEdBQUc7RUFDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0VBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztFQUM5RSxLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0E7QUFDQTtFQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7RUFDL0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQzlDLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7RUFDcEMsSUFBSSxLQUFLLENBQUMsTUFB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QUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO0VBQzNFLE1BQU07RUFDTixHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUNqQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO0VBQzFCLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0VBQzNDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQ3JCLE1BQU0sT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztBQUNyRTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0IsR0FBRztBQUNIO0VBQ0EsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQ1gsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0VBQ0gsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0VBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0VBQ0gsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0VBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0VBQ0gsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ2IsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0VBQ0gsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ2IsSUFBSSxPQUFPLEtBQUssQ0FBQztFQUNqQixHQUFHO0VB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QU07RUFDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7RUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07RUFDNUI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7RUFDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0VBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMs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RUFBRSxHQUFHLEtBQUk7RUFDbEQ7RUFDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztFQUM1RCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7RUFDQTtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0VBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7RUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtFQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtFQUNBLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztFQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0VBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFJO0FBQ3REO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7RUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFDO0VBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztFQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUU7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDbkM7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUk7RUFDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwQztFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU07RUFDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtFQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtFQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRTtBQUN4QjtFQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQztFQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUN0QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUNsSTtFQUNBO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUN0QztFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtFQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0VBQ0EsUUFBUSxRQUFRLElBQUk7RUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RDtFQUNBLFlBQVksTUFBTTtFQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtFQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0VBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0VBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RDtFQUNBLFlBQVksTUFBTTtFQUNsQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztFQUNqRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0VBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7RUFDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztFQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0VBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7RUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDckMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7RUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxVQUFVLEdBQUc7RUFDbEM7RUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQ3JEO0VBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0VBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN4RCxhQUFhO0VBQ2I7RUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7RUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0VBQ3hCO0VBQ0EsU0FBUztFQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztFQUNsRCxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMzQyxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMzQyxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEMsUUFBUSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbEc7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5RDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7RUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0VBQ2hDLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztFQUNqSixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3pEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNqT08sTUFBTSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ2pDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNuQztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7RUFDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7RUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztFQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM1QztFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7RUFDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7RUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0VBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtFQUN2TTtBQUNBO0VBQ0E7QUFDQTtFQUNB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LE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztFQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkMsT0FBTztBQUNQO0VBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3BEO0VBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDakM7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxF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QUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMxQztFQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7RUFDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztFQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDNUM7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0VBQ0EsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0VBQ0E7RUFDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtFQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7RUFDQTtBQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtFQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7RUFDNUQ7RUFDQTtFQUNBLEVBQUU7QUFDRjtFQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtFQUNBO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0VBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0VBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0VBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtFQUNwQztFQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0VBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztFQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0VBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtFQUNBLEVBQUU7QUFDRjtBQUNBO0VBQ0E7O0VDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQztBQUMvQjtFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtB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QVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0VBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0VBQ25DO0VBQ0EsS0FBSztFQUNMO0VBQ0E7O0VDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7RUFDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0VBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxRDtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FB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QUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtFQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0VBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7RUFDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQztFQUM5QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFJO0VBQzlDLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7RUFDckMsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUMzQyxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQztFQUNoRixpQkFBaUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztFQUMzRCxTQUFTO0VBQ1QsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFdBQVcsR0FBRztBQUNsQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQ0FBaUM7RUFDcEUsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUc7RUFDOUIsUUFBUSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUk7RUFDckMsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2xCLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQW9CO0VBQ2pHLGlCQUFpQixDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFPO0VBQ3RFLFlBQVksQ0FBQyxHQUFFO0VBQ2YsU0FBUztFQUNULFFBQVEsT0FBTyxDQUFDO0VBQ2hCLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEM7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ25GLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDcEgsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEc7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN6QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDekI7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7RUFDeEMsU0FBUyxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3JCLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztFQUN2RCxVQUFVO0VBQ1YsTUFBTTtBQUNOO0VBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDckI7RUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7RUFDQSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ1g7RUFDQSxRQUFRLE9BQU8sQ0FBQztFQUNoQixZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNO0VBQ2pDLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU07RUFDakMsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtFQUMvQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO0VBQzlELFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0I7RUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsS0FBSyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7RUFDckI7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN6QixRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDbEIsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0VBQ3JDLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0VBQ3JFLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxDQUFDO0VBQzNCLGFBQWE7RUFDYixTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzVCLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ3REO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ3hCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25DO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxLQUFLLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztBQUNyQjtFQUNBLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQztFQUNBLEtBQUssSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ3RCO0VBQ0EsWUFBWSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQy9CO0FBQ0E7RUFDQSxTQUFTLE1BQU07QUFDZjtFQUNBLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ3pEO0VBQ0EsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7RUFDM0IsYUFBYSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzlHLGFBQWEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNqQyxhQUFhO0FBQ2I7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CO0VBQ0EsS0FBSztBQUNMO0VBQ0E7QUFDQTtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0VBQ0EsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUU7RUFDckM7QUFDQTtFQUNBLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckM7RUFDQSxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUM7RUFDNUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ3BDO0VBQ0EsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBRztFQUMxQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUU7QUFDdEI7RUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUM7RUFDekQsV0FBVyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDO0VBQ3hFLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUM7QUFDbEQ7RUFDQSxNQUFNLEVBQUUsR0FBRyxHQUFFO0VBQ2IsTUFBTSxFQUFFLEdBQUcsRUFBQztBQUNaO0VBQ0EsTUFBTTtBQUNOO0VBQ0EsS0FBSyxPQUFPLENBQUM7QUFDYjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtFQUNoRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2xDO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7RUFDNUIsUUFBUSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUM7RUFDakQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQ2xCO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxLQUFJO0FBQzlCO0VBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQztFQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFFO0VBQzlDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ3ZDO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNsVE8sTUFBTSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ2pDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLEtBQUssQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFJO0VBQ3JCLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFDO0VBQ3BCLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFO0VBQ3pCLFFBQVEsS0FBSyxFQUFFLENBQUMsR0FBRTtFQUNsQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkI7RUFDQSxLQUFLO0VBQ0w7RUFDQTs7RUNUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUMzQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUk7QUFDOUI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtFQUNyQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFDO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQ3pCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0FBQzNCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQUM7RUFDcEM7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0FBQzVDO0VBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM5QjtFQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0VBQzNCLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxvQ0FBb0MsR0FBRyxHQUFFO0FBQy9FO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyw0Q0FBNEMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDO0VBQzVILFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyx3REFBd0QsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUM1SztFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSTtFQUMxRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw2QkFBNkIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLEVBQUM7QUFDMUk7RUFDQSxRQUFnQixJQUFJLENBQUMsRUFBRTtFQUN2QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQU87QUFDaEM7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFFO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNoQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2pCO0VBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtFQUM5QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3hCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxHQUFFO0VBQzdDLFFBQVEsR0FBRyxFQUFFLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxXQUFVO0VBQzFELFlBQVksRUFBRSxDQUFDLFVBQVUsR0FBRyxPQUFNO0FBQ2xDO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztFQUNqQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU07RUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFNO0FBQ25DO0VBQ0EsUUFBUSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO0VBQ25DLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsUUFBTztFQUMvRCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0I7RUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0VBQ2hELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7QUFDaEQ7RUFDQSxTQUFTO0FBQ1Q7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0FBQ2pEO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQztFQUM1RCxhQUFhO0VBQ2IsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQztFQUMvQyxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksV0FBVyxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEtBQUssQ0FBQztFQUMvQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7RUFDMUI7RUFDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDL0IsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQy9CLFNBQVM7RUFDVCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzFCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxQixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUN0QixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFFO0FBQzFCO0VBQ0EsS0FBSztBQUNMO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUN0QjtFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMxQjtFQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzNCLFFBQVEsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ2hDO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU87QUFDM0I7RUFDQSxRQUFRLFFBQVEsSUFBSTtBQUNwQjtFQUNBLFlBQVksS0FBSyxTQUFTO0FBQzFCO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQSxZQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRTtBQUNsRjtFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0VBQzVCO0VBQ0EsZ0JBQWdCLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUU7RUFDekQsYUFBYTtBQUNiO0VBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUU7QUFDdkQ7RUFDQSxZQUFZLE1BQU07RUFDbEIsWUFBWSxLQUFLLE9BQU87RUFDeEI7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFDO0VBQ2xDLFlBQVksSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFO0VBQ3RDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUM5QyxxQkFBcUIsSUFBSSxDQUFDLElBQUksR0FBRTtFQUNoQyxhQUFhO0VBQ2IsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7RUFDQSxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ3hDLFFBQVEsSUFBSSxXQUFXLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN4QztFQUNBLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUc7QUFDMUI7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuRDtFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtFQUNuQyxZQUFZLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztFQUMvQixZQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBRWhDLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUU7RUFDekIsWUFBWSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0VBQ25ELFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNoQyxTQUFTO0FBQ1Q7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksR0FBRyxHQUFHO0FBQ1Y7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUMxQjtFQUNBLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7RUFDdEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFJO0VBQ2pDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztFQUNuQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUk7RUFDakMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDN0IsU0FBUyxNQUFNLElBQUksT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0VBQ3JELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3ZHLGlCQUFnQjtFQUNoQixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7RUFDakMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN4QyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ3RDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztFQUNsQyxhQUFhO0VBQ2IsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUU7RUFDdkI7RUFDQSxZQUFZLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBQztFQUNwQixTQUFTO0VBQ1Q7RUFDQTtFQUNBO0VBQ0E7RUFDQSxRQUFRLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSTtFQUM5QjtBQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDMUI7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBSztBQUM1QjtFQUNBLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEM7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxPQUFPLEdBQUc7QUFDZDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRTtFQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtFQUN4QyxRQUFRLEtBQUssQ0FBQyxPQUFPLEdBQUU7QUFDdkI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssR0FBRztBQUNaO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztBQUN0QztFQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNwQixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRTtFQUNqQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUU7RUFDOUMsWUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksR0FBRTtBQUM5QjtFQUNBO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QjtFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdkM7RUFDQSxRQUFRLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHO0VBQ3pCLFlBQVksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRTtFQUM3RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFO0VBQ3hELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRTtBQUNwQztFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7RUFDdkMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQ3BDLGdCQUFnQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDN0IsYUFBYTtFQUNiLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHO0FBQ1o7RUFDQSxRQUFRLEtBQUssQ0FBQyxJQUFJLEdBQUU7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUU7RUFDbkQsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFFO0FBQzNCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7RUFDeEIsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM5QjtFQUNBO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUk7RUFDNUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFNO0FBQ25DO0VBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDdkI7RUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsTUFBSztFQUNyQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsTUFBSztBQUNyQztFQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtFQUN2RCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUk7RUFDeEQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0VBQzFELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtFQUMzRCxTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7QUFDbkM7RUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFFBQU87RUFDbkUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0FBQ3BFO0VBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0VBQy9ELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7RUFDcEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMseUJBQXdCO0FBQ3RFO0VBQ0EsU0FBUztFQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFFO0FBQzNCO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0VBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRTtBQUNuRDtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUMzQjtFQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7RUFDeEIsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtFQUM5QjtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDbkM7RUFDQTtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFJO0VBQzVDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxPQUFNO0FBQ2hDO0VBQ0EsUUFBUSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO0FBQ25DO0VBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE9BQU07RUFDaEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE9BQU07RUFDaEMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFPO0VBQy9ELFNBQVM7QUFDVDtFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJO0FBQzVEO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFFO0FBQzNCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRztBQUNmO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7RUFDOUQ7RUFDQSxhQUFhLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDeEk7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtFQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7QUFDdkQ7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRztBQUN2QjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdkQsYUFBYSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ2pEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDZjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTTtFQUNqQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtFQUN4QyxhQUFhLElBQUksQ0FBQyxPQUFPLEdBQUU7RUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDeEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU07RUFDL0IsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2xCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRTtFQUN6QyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFFO0VBQy9CLFNBQVM7QUFDVDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtFQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNwQztFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtFQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtFQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7RUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VDNWNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDL0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7RUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO0VBQ3BDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN2RDtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztFQUMxQyxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7QUFDbEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztFQUM1QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7RUFDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztFQUN6QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFJO0FBQzVEO0VBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztFQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztFQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7RUFDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzNCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7RUFD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QyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7RUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7RUFDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7RUFDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDM0QsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtFQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0VBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7RUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtFQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7RUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0VBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0VBQ0EsYUFBYTtBQUNiO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM3QjtBQUNBO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztFQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7RUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7RUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDN0QsU0FBUyxNQUFNO0VBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxTQUFTO0FBQ1Q7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRjtFQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FB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Ryw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7RUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtFQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7RUFDekQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDakYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENB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QUNBO0VBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7RUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0VBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztFQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDL0IsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7RUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7RUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztFQUM5QjtFQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7RUFDckQ7RUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7RUFDaEMsZ0JBQWdC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Q0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0VBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7RUFDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztFQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3pEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQTs7RUNsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0VBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtFQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztFQUNyQztBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7RUFDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7RUFDQTtFQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0VBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7RUFDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtFQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtFQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0VBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcscUNBQXFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNERBQTRELENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNyVSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsZ0RBQWdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNySztFQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0VBQ2xJLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcs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RUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEM7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksWUFBWSxDQUFDLEdBQUc7QUFDcEI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7RUFDNUIsUUFBUSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDeEU7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7RUFDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxPQUFPO0FBQ3JDO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENB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LENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtFQUN0RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0VBQ3BDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzdCO0VBQ0EsU0FBUztBQUNUO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDckMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztBQUMxUDtFQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pKO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDcEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0VBQzFCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ2hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztFQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQ3hCO0VBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0VBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7RUFDckQsU0FBUztBQUNUO0VBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRTtBQUNyQztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDMUIsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7RUFDOUIsWUFBWSxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7RUFDN0IsYUFBYSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7RUFDaEMsYUFBYSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFVB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RUFBRSxHQUFHLENBQUM7RUFDZCxRQUFRLEVBQUUsR0FBRyxDQUFDO0VBQ2QsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQ3ZCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoQjtFQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtFQUM1QixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztFQUNoQyxPQUFPO0FBQ1A7RUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUM3RDtFQUNBLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDL0MsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztFQUN6QyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0VBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxD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Q1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDcEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDckIsTUFBTSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVFO0VBQ0E7RUFDQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0VBQ0E7RUFDQSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RDtFQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNoRCxNQUFNLElBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDM0Q7RUFDQSxNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRDtFQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEM7RUFDQSxNQUFNLElBQUksS0FBSyxDQUFDO0VBQ2hCLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtFQUNwRCxRQUFRLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDOUMs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LENBQUM7RUFDN0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDbEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUN4RCxRQUFRLE1BQU07RUFDZCxNQUFNLEtBQUssQ0FBQztFQUNaO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDdEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztFQUM1RCxRQUFRLE1BQU07RUFDZCxLQUFLO0VBQ0wsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO0VBQ2IsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFEO0VBQ0EsSUFBSSxJQUFJLE9BQU87RUFDZixNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7RUFDM0M7QUFDQTtFQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0VBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDeEIsR0FBRztBQUNIO0VBQ0EsRUFBRSxLQUFLLEdBQUc7RUFDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtFQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtFQUNBO0FBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7RUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDcEM7RUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7RUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNsQixHQUFHO0VBQ0g7O0VDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FB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R0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0VBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0VBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMzQztFQUNBLEtBQUs7QUFDTDtFQUNBO0FBQ0E7RUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtFQUNBLEtBQUs7QUFDTDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0VBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0VBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7RUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7RUFDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0VBQy9CO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztFQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztFQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7RUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtFQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdkM7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7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VyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsS0FBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7RUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7RUFDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBQztFQUMzQixLQUFLO0FBQ0w7RUFDQTs7RUMxRE8sTUFB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QUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztFQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7RUFDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDL0xBO0FBRUE7RUFDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7RUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtFQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNuQjtFQUNBLEtBQUs7QUFDTDtFQUNBOztFQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztFQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0VBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0VBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztFQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM5QjtFQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0VBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtFQUNBLEtBQUs7QUFDTDtFQUNB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Q0E7QUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0VBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztFQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtFQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7RUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7RUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ25DO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElB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LElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7RUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0VBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDM0QsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsS0FBSztBQUNMO0VBQ0E7O0VDMVRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztFQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7RUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7RUFDL0IsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0VBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFFO0FBQ3hCO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0VBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7RUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzlGO0VBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0VBQ0E7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7RUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7RUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0VBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtFQUNBLFNBQVM7QUFDVDtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7RUFDQTtBQUNBO0VBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7RUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtFQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0VBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7RUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7RUFDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0VBQ0EsS0FBSztFQUNMO0VBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7RUFDbkI7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0I7RUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFD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LE9BQU07QUFDNUI7RUFDQSxRQUFRLFFBQVEsSUFBSTtFQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtFQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0VBQzNELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0VBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0VBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0VBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0VBQzlEO0VBQ0EsWUFBWSxNQUFNO0VBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7RUFDaEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7RUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7RUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7RUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7RUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUU7RUFDcEU7RUFDQSxZQUFZLE1BQU07RUFDbEIsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztFQUMxQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0VBQ0E7RUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztFQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0VBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7RUFDQSxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtFQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtFQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7RUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0VBQ0EsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0VBQ0E7QUFDQTtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtFQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7RUFDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtFQUNBLEtBQUs7QUFDTDtFQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkc7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNwSDtFQUNBO0FBQ0E7RUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDMUI7RUFDQSxLQUFLO0FBQ0w7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0FBQ0E7RUFDQTs7RUNyUkE7QUFJQTtFQUNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztFQUNwQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0VBQ3JCO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUN0QixFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUM7QUFDaEM7RUFDQSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNYLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQztBQUM3QztFQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzNCLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM3RCxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7RUFDN0IsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3pFLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekU7RUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7RUFDckMsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0VBQ0E7RUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRO0VBQ2YsR0FBRyxPQUFPLENBQUMsQ0FBQyxRQUFRLEtBQUssVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDNUQ7RUFDQTtFQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3RCLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDdEMsRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNuQjtFQUNBO0VBQ0EsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztFQUNuQixFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0VBQ3JCLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENB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LENBQUMsR0FBRyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzlDO0VBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWjtFQUNBO0VBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtFQUNsRCxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzFCLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDbEUsR0FBRyxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0VBQ3BDLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUMzRCxHQUFHO0VBQ0gsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM1QztFQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQy9DLEdBQUcsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7RUFDM0IsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQzVDLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDcEMsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDcEQsSUFBSSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7RUFDckIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDL0MsS0FBSyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ2pELEtBQUssTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDMUMsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztFQUM3QyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7RUFDaEIsS0FBSztFQUNMO0VBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQ3hDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUNwQyxJQUFJLE1BQU07RUFDVjtFQUNBLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7RUFDL0IsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxD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QUN0QixFQUFFO0FBQ0Y7RUFDQTtFQUNBLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNiLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUNyQyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDckMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDMUIsRUFBRTtBQUNGO0VBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtFQUNsQixFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUMvQyxHQUFHLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0VBQ0EsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDL0QsSUFBSSxTQUFTO0FBQ2I7RUFDQSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7RUFDM0IsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDL0MsS0FBSyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMs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QUFRLElBQUksQ0FBQztBQUNiO0VBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ2pFO0VBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0VBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztBQUM1QztFQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNwRTtFQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakI7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0VBQzNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0VBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7RUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2Y7RUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0VBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0VBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0VBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3ZFO0VBQ0E7RUFDQSxJQUFJLElBQUksQ0FBQyxR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LElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztFQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7RUFDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7RUFDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztFQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNoRCxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDekIsR0FBRztBQUNIO0VBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0VBQ1osSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztFQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDNUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztFQUM5QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNqRCxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2hCLEdBQUc7QUFDSDtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsRUFBRSxPQUFPLEdBQUc7RUFDWixJQUFJLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMzRCxHQUFHO0FBQ0g7RUFDQSxFQUFFLElBQUksR0FBRztFQUNULElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQ3pELEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyxHQUFHO0VBQ2QsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDckIsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QjtFQUNBLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVc7RUFDaEMsVUFBVSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN4QyxVQUFVLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFDN0I7RUFDQSxNQUFNLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDbkQ7RUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN6QztFQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO0VBQ3BCLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7RUFDN0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDL0MsT0FBTyxNQUFNO0VBQ2IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDdkMsT0FBTztFQUNQLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakM7RUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztFQUNsRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDbkQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekQ7RUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVTtFQUMzQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztFQUMxRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3ZDLEdBQUc7QUFDSDtFQUNBLEVBQUUsTUFBTSxHQUFHO0VBQ1gsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztFQUM1QixHQUFHO0FBQ0g7RUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDZCxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtFQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNsRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVE7RUFDckIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUM1RSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzdDLEdBQUc7QUFDSDtFQUNBLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRTtFQUNsQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0VBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtFQUNoQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUMxQixLQUFLO0VBQ0wsR0FBRztFQUNIOzs7Ozs7Ozs7Ozs7OzsifQ== diff --git a/build/uil.module.js b/build/uil.module.js index e92b45c..83488ad 100644 --- a/build/uil.module.js +++ b/build/uil.module.js @@ -294,9 +294,14 @@ const R = { e.clientX = R.ID.mouse.x; e.clientY = R.ID.mouse.y; } else if (R.ID.isCanvas) { - // NUEVO: si es canvas con parent, usar mouse virtual + offset del GUI - e.clientX = R.ID.zone.x + R.ID.mouse.x; - e.clientY = R.ID.zone.y + R.ID.mouse.y; + // Solo usar mouse virtual si el evento es "programático" (coords -1) + // y además el mouse virtual ya fue seteado (>=0). + const wantsVirtual = (e.clientX === -1 || e.clientY === -1); + const hasMouse = (R.ID.mouse.x >= 0 && R.ID.mouse.y >= 0); + if (wantsVirtual && hasMouse) { + e.clientX = R.ID.zone.x + R.ID.mouse.x; + e.clientY = R.ID.zone.y + R.ID.mouse.y; + } } //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5 @@ -9647,4 +9652,4 @@ class Gui { } export { Files, Gui, REVISION, Tools, add }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfSBlbHNlIGlmIChSLklELmlzQ2FudmFzKSB7XHJcbiAgICAgICAgLy8gTlVFVk86IHNpIGVzIGNhbnZhcyBjb24gcGFyZW50LCB1c2FyIG1vdXNlIHZpcnR1YWwgKyBvZmZzZXQgZGVsIEdVSVxyXG4gICAgICAgIGUuY2xpZW50WCA9IFIuSUQuem9uZS54ICsgUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQuem9uZS55ICsgUi5JRC5tb3VzZS55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gXCIuLi9jb3JlL1Jvb3RzLmpzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcblx0Y29uc3RydWN0b3IobyA9IHt9KSB7XHJcblx0XHQvLyBBUEkgcMO6YmxpY2EgZXNwZXJhZGE6XHJcblx0XHQvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KVxyXG5cdFx0Ly8gby5mb2N1c2VkIChib29sKSwgby5mb2N1c1BhdGggKGFycmF5KSwgby5mb2N1c0xldmVsIChudW1iZXIpXHJcblx0XHQvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcblx0XHRvLnNlbGVjdGFibGUgPSB0cnVlO1xyXG5cdFx0by5uYW1lID0gby5uYW1lIHx8IFwiVHJlZUxpc3RcIjtcclxuXHJcblx0XHRzdXBlcihvKTtcclxuXHRcdHRoaXMuZW5hYmxlSG92ZXIgPSBvLmVuYWJsZUhvdmVyICE9PSBmYWxzZTtcclxuXHJcblx0XHQvLyBEYXRvcyAmIGVzdGFkb1xyXG5cdFx0dGhpcy50cmVlID0gby50cmVlIHx8IHt9O1xyXG5cdFx0dGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNlZCA9ICEhby5mb2N1c2VkO1xyXG5cdFx0dGhpcy5mb2N1c1BhdGggPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09IFwibnVtYmVyXCIgPyBvLmZvY3VzTGV2ZWwgOiAtMTtcclxuXHJcblx0XHR0aGlzLnRhYkluZGV4ID0gby50YWJJbmRleCA/PyBudWxsO1xyXG5cdFx0dGhpcy5pdGVtSW5kZXggPSBvLml0ZW1JbmRleCA/PyBudWxsO1xyXG5cclxuXHRcdC8vIENhbGxiYWNrXHJcblx0XHR0aGlzLmNoYW5nZUNiID1cclxuXHRcdFx0dHlwZW9mIG8ub25DaGFuZ2UgPT09IFwiZnVuY3Rpb25cIiA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcblx0XHQvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuXHRcdHRoaXMubGluZUggPSB0aGlzLmg7IC8vIGFsdG8gZGUgVU5BIGZpbGFcclxuXHRcdHRoaXMubGV2ZWxHYXAgPSB0aGlzLmNvbG9ycy5zeSB8fCAyOyAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcblx0XHR0aGlzLmxlYWZNYXggPSAwOyAvLyBzZSBjYWxjdWxhIGVuIHJTaXplKClcclxuXHJcblx0XHQvLyBNb2RlbG8gdmlzdWFsXHJcblx0XHR0aGlzLmxldmVscyA9IFtdOyAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuXHRcdHRoaXMuaXRlbXNEb20gPSBbXTsgLy8gZXNwZWpvIERPTSBwb3Igbml2ZWxcclxuXHRcdHRoaXMuaG92ZXIgPSB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogcmVjb3JkYXIgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYSAocGVyc2lzdGVudGUpXHJcblx0XHR0aGlzLmxhc3RMZWFmID0geyBwYXJlbnRQYXRoOiBbXSwga2V5OiBudWxsIH07IC8vIHBhcmVudFBhdGggZXMgbGEgcnV0YSBoYXN0YSBlbCBtYXBhIHBhZHJlXHJcblxyXG5cdFx0Ly8gQ29udGVuZWRvciBpbnRlcm5vIChhYnNvbHV0bylcclxuXHRcdHRoaXMuY1syXSA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcImRpdlwiLFxyXG5cdFx0XHR0aGlzLmNzcy5iYXNpYyArIFwibGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7XCJcclxuXHRcdCk7XHJcblx0XHR0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG5cdFx0dGhpcy5pbml0KCk7XHJcblxyXG5cdFx0Ly8gU2kgZWwgdmFsb3IgaW5pY2lhbCB5YSBhcHVudGEgYSB1bmEgaG9qYSB2w6FsaWRhLCByZWNvcmRhciBlc2EgaG9qYVxyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG5cdHN0YXRpYyBpc01hcChub2RlKSB7XHJcblx0XHRyZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblx0c3RhdGljIGlzTGlzdChub2RlKSB7XHJcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUmVjb3JyaWRvIGRlIGRhdG9zID09PT09PT1cclxuXHRnZXROb2RlQXRQYXRoKHBhdGgpIHtcclxuXHRcdGxldCBub2RlID0gdGhpcy50cmVlO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIHBhdGhbaV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuXHRcdFx0XHRub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBMbGVnYW1vcyBhIHVuYSBsaXN0YTogeWEgbm8gaGF5IG3DoXMgY2xhdmVzIHbDoWxpZGFzXHJcblx0XHRcdFx0aWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuXHR9XHJcblxyXG5cdC8vIEF1dG9jb21wbGV0YXI6IGJhamEgcG9yIHByaW1lcmFzIGNsYXZlcyBkZSBjYWRhIG1hcGEgaGFzdGEgYWxjYW56YXIgdW5hIGxpc3RhXHJcblx0YXV0b0NvbXBsZXRlVG9MZWFmKGJhc2VQYXRoKSB7XHJcblx0XHRsZXQgeyBub2RlIH0gPSB0aGlzLmdldE5vZGVBdFBhdGgoYmFzZVBhdGgpO1xyXG5cdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLnNsaWNlKCk7XHJcblx0XHR3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG5cdFx0XHRpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuXHRcdFx0Y29uc3QgazAgPSBrZXlzWzBdO1xyXG5cdFx0XHRwYXRoLnB1c2goazApO1xyXG5cdFx0XHRub2RlID0gbm9kZVtrMF07XHJcblx0XHR9XHJcblx0XHQvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2EgdW4gw610ZW0gZmluYWwgZGUgbGEgaG9qYVxyXG5cdFx0cmV0dXJuIHBhdGg7XHJcblx0fVxyXG5cclxuXHQvLyBSdXRhIGFjdGl2YSAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpbm8gdmFsdWUpXHJcblx0Z2V0QWN0aXZlUGF0aCgpIHtcclxuXHRcdHJldHVybiB0aGlzLmZvY3VzZWQgPyB0aGlzLmZvY3VzUGF0aCA6IHRoaXMudmFsdWU7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFRhbWHDsW8gZGUgaG9qYSBtw6F4aW1vIChwYXJhIGxheW91dCBlc3RhYmxlKSA9PT09PT09XHJcblx0Y29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBub2RlLmxlbmd0aDtcclxuXHRcdGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIDA7XHJcblx0XHRsZXQgbSA9IDA7XHJcblx0XHRmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcclxuXHRcdFx0bSA9IE1hdGgubWF4KG0sIHRoaXMuY29tcHV0ZUxlYWZNYXgobm9kZVtrXSkpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG07XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IENvbnN0cnVjY2nDs24gZGUgbml2ZWxlcyAobW9kZWxvIGzDs2dpY28pID09PT09PT1cclxuXHRidWlsZExldmVscygpIHtcclxuXHRcdHRoaXMubGV2ZWxzLmxlbmd0aCA9IDA7XHJcblx0XHRjb25zdCBhY3RpdmVQYXRoID0gdGhpcy5nZXRBY3RpdmVQYXRoKCk7XHJcblxyXG5cdFx0bGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcblx0XHRsZXQgbGV2ZWwgPSAwO1xyXG5cclxuXHRcdHdoaWxlIChub2RlKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdC8vIE5pdmVsIGludGVybWVkaW86IGNsYXZlcyBkZWwgbWFwYSAoaG9yaXpvbnRhbClcclxuXHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcblx0XHRcdFx0aWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcblx0XHRcdFx0dGhpcy5sZXZlbHMucHVzaCh7XHJcblx0XHRcdFx0XHR0eXBlOiBcIm1hcFwiLFxyXG5cdFx0XHRcdFx0aXRlbXM6IGtleXMubWFwKChrKSA9PiAoe1xyXG5cdFx0XHRcdFx0XHRrZXk6IGssXHJcblx0XHRcdFx0XHRcdGxhYmVsOiBrLFxyXG5cdFx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAgfSxcclxuXHRcdFx0XHRcdH0pKSxcclxuXHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogdGhpcy5saW5lSCB9LFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcblx0XHRcdFx0aWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuXHRcdFx0XHRub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAoKGxhYmVsKSA9PiAoe1xyXG5cdFx0XHRcdFx0a2V5OiBsYWJlbCxcclxuXHRcdFx0XHRcdGxhYmVsLFxyXG5cdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuXHRcdFx0XHR0aGlzLmxldmVscy5wdXNoKHtcclxuXHRcdFx0XHRcdHR5cGU6IFwibGlzdFwiLFxyXG5cdFx0XHRcdFx0aXRlbXMsXHJcblx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IGhMaXN0IH0sXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV2ZWwrKztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gTGF5b3V0ICh6b25hcyAmIERPTSkgPT09PT09PVxyXG5cdGxheW91dExldmVscygpIHtcclxuXHRcdGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7IC8vIGNvbHVtbmEgZGUgbGFiZWwgKyBwYWRkaW5nXHJcblx0XHRjb25zdCBwYWRSaWdodCA9IDg7XHJcblx0XHRjb25zdCB3ID0gdGhpcy56b25lLncgLSBjb250ZW50WCAtIHBhZFJpZ2h0O1xyXG5cclxuXHRcdGxldCB5ID0gMDtcclxuXHJcblx0XHQvLyBBanVzdGFyIGl0ZW1zRG9tIGEgY2FudGlkYWQgZGUgbml2ZWxlc1xyXG5cdFx0d2hpbGUgKHRoaXMuaXRlbXNEb20ubGVuZ3RoIDwgdGhpcy5sZXZlbHMubGVuZ3RoKVxyXG5cdFx0XHR0aGlzLml0ZW1zRG9tLnB1c2goW10pO1xyXG5cdFx0Zm9yIChsZXQgTCA9IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCA8IHRoaXMuaXRlbXNEb20ubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiB0aGlzLml0ZW1zRG9tW0xdKVxyXG5cdFx0XHRcdGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuXHRcdFx0XHRjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cdFx0XHRcdGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG5cdFx0XHRcdGxldCB4ID0gY29udGVudFg7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0XHRcdFx0aXQuem9uZSA9IHsgeCwgeSwgdzogY2VsbFcsIGg6IHRoaXMubGluZUggfTtcclxuXHRcdFx0XHRcdGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuXHRcdFx0XHRcdHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsIFwibWFwXCIpO1xyXG5cdFx0XHRcdFx0eCArPSBjZWxsVztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG5cdFx0XHRcdHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG5cdFx0XHRcdGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcblx0XHRcdFx0bHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuXHRcdFx0XHRjb25zdCByb3dzID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNSZWFsID0gaSA8IG47XHJcblx0XHRcdFx0XHRjb25zdCBpdCA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXVxyXG5cdFx0XHRcdFx0XHQ6IHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTogbnVsbCxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0XHRcdCAgfTtcclxuXHRcdFx0XHRcdGl0LnpvbmUgPSB7XHJcblx0XHRcdFx0XHRcdHg6IGNvbnRlbnRYLFxyXG5cdFx0XHRcdFx0XHR5OiB5ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdHcsXHJcblx0XHRcdFx0XHRcdGg6IHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Y29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG5cdFx0XHRcdFx0dGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgXCJsaXN0XCIsIGlzUmVhbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBmaWxhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIHJvd3MpO1xyXG5cdFx0XHRcdHkgKz0gaExpc3Q7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBBanVzdGVzIGRlIGFsdG8gaW50ZXJubyBkZWwgY29udGVuZWRvciB2aXN1YWxcclxuXHRcdGNvbnN0IHRvdGFsSCA9IHk7XHJcblx0XHR0aGlzLnpvbmUuaCA9IHRvdGFsSCArIHRoaXMubWFyZ2luO1xyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG5cdFx0dGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArIFwicHhcIjtcclxuXHJcblx0XHQvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcblx0XHR0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcblx0fVxyXG5cclxuXHQvLyBFbGltaW5hIG5vZG9zIERPTSBzb2JyYW50ZXMgZW4gbGEgZmlsYSBMIGEgcGFydGlyIGRlbCDDrW5kaWNlIGtlZXBcclxuXHRfcHJ1bmVSb3coTCwga2VlcCkge1xyXG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuXHRcdGlmICghcm93KSByZXR1cm47XHJcblx0XHRmb3IgKGxldCBqID0ga2VlcDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRjb25zdCBlbCA9IHJvd1tqXTtcclxuXHRcdFx0aWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG5cdFx0fVxyXG5cdFx0cm93Lmxlbmd0aCA9IGtlZXA7XHJcblx0fVxyXG5cclxuXHRlbnN1cmVJdGVtRG9tKEwsIGkpIHtcclxuXHRcdGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcblx0XHR3aGlsZSAocm93Lmxlbmd0aCA8PSBpKSByb3cucHVzaChudWxsKTtcclxuXHRcdGlmICghcm93W2ldKSB7XHJcblx0XHRcdGNvbnN0IGRpdiA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcdFwiZGl2XCIsXHJcblx0XHRcdFx0VG9vbHMuY3NzLnR4dCArIFwicG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7XCJcclxuXHRcdFx0KTtcclxuXHRcdFx0dGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcblx0XHRcdHJvd1tpXSA9IGRpdjtcclxuXHRcdH1cclxuXHRcdHJldHVybiByb3dbaV07XHJcblx0fVxyXG5cclxuXHRwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG5cdFx0Y29uc3QgcyA9IGRpdi5zdHlsZTtcclxuXHRcdGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG5cdFx0Ly8gUG9zaWNpw7NuXHJcblx0XHRzLmxlZnQgPSBpdC56b25lLnggKyBcInB4XCI7XHJcblx0XHRzLnRvcCA9IGl0LnpvbmUueSArIFwicHhcIjtcclxuXHRcdHMud2lkdGggPSBpdC56b25lLncgKyBcInB4XCI7XHJcblx0XHRzLmhlaWdodCA9IGl0LnpvbmUuaCAtIDIgKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gVGV4dG9cclxuXHRcdGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogXCJcIjtcclxuXHJcblx0XHQvLyBFc3RhZG9zXHJcblx0XHRjb25zdCBzZWxlY3RlZCA9XHJcblx0XHRcdGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG5cdFx0Y29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiB0aGlzLmZvY3VzTGV2ZWwgPT09IEw7XHJcblx0XHRjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgdGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleTtcclxuXHRcdGNvbnN0IGlzSG92ZXIgPVxyXG5cdFx0XHR0aGlzLmVuYWJsZUhvdmVyICYmXHJcblx0XHRcdGlzUmVhbCAmJlxyXG5cdFx0XHR0aGlzLmhvdmVyLmxldmVsID09PSBMICYmXHJcblx0XHRcdHRoaXMuaG92ZXIuaW5kZXggPT09IGk7XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogwr9lc3RhIGZpbGEgZXMgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYT9cclxuXHRcdGxldCBpc0xhc3RMZWFmID0gZmFsc2U7XHJcblx0XHRpZiAoaXNSZWFsICYmIGtpbmQgPT09IFwibGlzdFwiICYmIHRoaXMubGFzdExlYWYua2V5ICE9IG51bGwpIHtcclxuXHRcdFx0Ly8gTGEgaG9qYSB2aXNpYmxlIGNvcnJlc3BvbmRlIHNpIGVsIHBhZHJlIGRlIGVzdGEgbGlzdGEgY29pbmNpZGUgY29uIHBhcmVudFBhdGggZ3VhcmRhZG9cclxuXHRcdFx0Ly8gRWwgcGFkcmUgYWN0dWFsIGVzIHRoaXMudmFsdWUuc2xpY2UoMCwgTCkgY3VhbmRvIGxhIGxpc3RhIGVzdMOhIGRlc3BsZWdhZGEgcG9yIHZhbHVlL2ZvY3VzXHJcblx0XHRcdGNvbnN0IHBhcmVudE5vdyA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpLnNsaWNlKDAsIEwpO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5fcGF0aHNFcXVhbChwYXJlbnROb3csIHRoaXMubGFzdExlYWYucGFyZW50UGF0aCkgJiZcclxuXHRcdFx0XHRpdC5rZXkgPT09IHRoaXMubGFzdExlYWYua2V5XHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGlzTGFzdExlYWYgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRXN0aWxvcyBiYXNlXHJcblx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG5cdFx0cy5jb2xvciA9IGNjLnRleHQ7XHJcblx0XHRzLmJvcmRlciA9IFwiMXB4IHNvbGlkIFwiICsgY2MuYm9yZGVyO1xyXG5cdFx0cy50ZXh0QWxpZ24gPSBraW5kID09PSBcIm1hcFwiID8gXCJjZW50ZXJcIiA6IFwibGVmdFwiO1xyXG5cclxuXHRcdC8vIFByaW9yaWRhZCB2aXN1YWw6XHJcblx0XHQvLyAxKSBzZWxlY2Npb25hZG8gKGF6dWwpXHJcblx0XHQvLyAyKSDDumx0aW1hIGhvamEgKG51ZXZvIGNvbG9yKVxyXG5cdFx0Ly8gMykgZm9jb1xyXG5cdFx0Ly8gNCkgaG92ZXJcclxuXHRcdGlmIChzZWxlY3RlZCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG5cdFx0fSBlbHNlIGlmIChpc0xhc3RMZWFmKSB7XHJcblx0XHRcdC8vIGNvbG9yIGRpc3RpbnRpdm8gcGFyYSBcIsO6bHRpbWEgaG9qYVwiIChhbWFyaWxsbyBzdWF2ZSlcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gXCJyZ2JhKDI1NSwgMjAwLCAwLCAwLjI1KVwiO1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dDtcclxuXHRcdH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG5cdFx0fSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG5cdFx0cy5vcGFjaXR5ID0gaXNSZWFsID8gXCIxXCIgOiBcIjBcIjtcclxuXHR9XHJcblxyXG5cdF9wYXRoc0VxdWFsKGEsIGIpIHtcclxuXHRcdGlmICghYSB8fCAhYiB8fCBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuXHRyU2l6ZSgpIHtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuXHRcdHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGUoKSB7XHJcblx0XHR0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcblx0XHR0aGlzLmxheW91dExldmVscygpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG5cdF90b0xvY2FsKGUpIHtcclxuXHRcdGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblx0XHRjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG5cdFx0cmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcblx0fVxyXG5cclxuXHRfaGl0VGVzdChteCwgbXkpIHtcclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGNvbnN0IHogPSBsdmwuem9uZTsgLy8geCB5IHcgeWEgaW5jbHV5ZW4gY29udGVudFhcclxuXHJcblx0XHRcdGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0bXggPj0gaXR6LnggJiZcclxuXHRcdFx0XHRcdFx0bXkgPj0gaXR6LnkgJiZcclxuXHRcdFx0XHRcdFx0bXggPD0gaXR6LnggKyBpdHoudyAmJlxyXG5cdFx0XHRcdFx0XHRteSA8PSBpdHoueSArIGl0ei5oXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuXHRcdFx0XHRcdGNvbnN0IGl0eiA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXS56b25lXHJcblx0XHRcdFx0XHRcdDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0eDogei54LFxyXG5cdFx0XHRcdFx0XHRcdFx0eTogei55ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdFx0XHR3OiB6LncsXHJcblx0XHRcdFx0XHRcdFx0XHRoOiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHQgIH07XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdG14ID49IGl0ei54ICYmXHJcblx0XHRcdFx0XHRcdG15ID49IGl0ei55ICYmXHJcblx0XHRcdFx0XHRcdG14IDw9IGl0ei54ICsgaXR6LncgJiZcclxuXHRcdFx0XHRcdFx0bXkgPD0gaXR6LnkgKyBpdHouaFxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IEwsIGksIHJlYWw6IGlzUmVhbCB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgTDogLTEsIGk6IC0xLCByZWFsOiBmYWxzZSB9O1xyXG5cdH1cclxuXHJcblx0aGFuZGxlRXZlbnQoZSkge1xyXG5cdFx0aWYgKHRoaXMubG9jaykgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcclxuXHRcdFx0Ly8gU2kgZWwgaG92ZXIgZXN0w6EgZGVzYWN0aXZhZG8sIG5vIGhheSB0cmFiYWpvIHF1ZSBoYWNlci5cclxuXHRcdFx0aWYgKCF0aGlzLmVuYWJsZUhvdmVyKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHJcblx0XHRcdC8vIG51ZXZvIGhvdmVyIGNhbGN1bGFkb1xyXG5cdFx0XHRjb25zdCBuZXdIb3ZlciA9XHJcblx0XHRcdFx0aHQuTCAhPT0gLTEgJiYgaHQucmVhbFxyXG5cdFx0XHRcdFx0PyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9XHJcblx0XHRcdFx0XHQ6IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHRcdFx0Ly8gc29sbyByZXBpbnRhciBzaSBjYW1iaWEgcmVhbG1lbnRlIGVsIGhvdmVyXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRuZXdIb3Zlci5sZXZlbCA9PT0gdGhpcy5ob3Zlci5sZXZlbCAmJlxyXG5cdFx0XHRcdG5ld0hvdmVyLmluZGV4ID09PSB0aGlzLmhvdmVyLmluZGV4XHJcblx0XHRcdClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdHRoaXMuaG92ZXIgPSBuZXdIb3ZlcjtcclxuXHRcdFx0dGhpcy51cGRhdGUoKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHRcdFx0aWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuXHRcdFx0XHR0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLy8gc29sbyB0cnVlIHNpIHJlYWxtZW50ZSBzZSBzZWxlY2Npb27DsyBhbGdvXHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcblx0X3NlbGVjdEF0KEwsIGkpIHtcclxuXHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0Y29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0aWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuXHRcdGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuXHRcdGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcblx0XHQvLyDwn5S4IFNpIGVsIHVzdWFyaW8gc2VsZWNjaW9uYSBleHBsw61jaXRhbWVudGUgZW4gZWwgbml2ZWwgaG9qYSwgcmVjb3JkYXJsb1xyXG5cdFx0aWYgKGx2bC50eXBlID09PSBcImxpc3RcIikge1xyXG5cdFx0XHR0aGlzLmxhc3RMZWFmLnBhcmVudFBhdGggPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpOyAvLyBwYWRyZSBkZSBsYSBsaXN0YSBhY3R1YWxcclxuXHRcdFx0dGhpcy5sYXN0TGVhZi5rZXkgPSBjaG9zZW4ua2V5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMudmFsdWUgPSBuZXdQYXRoLnNsaWNlKCk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHRcdC8vIHNpIGVzdMOhIHJlZmVyZW5jaWFkbywgcHJvcGFnYSBhIG9iamV0byBleHRlcm5vXHJcblx0XHR0aGlzLnNlbmQobmV3UGF0aCk7XHJcblx0XHR0aGlzLmNoYW5nZUNiKHRoaXMudGFiSW5kZXgsIHRoaXMuaXRlbUluZGV4LCBuZXdQYXRoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gQVBJIHDDumJsaWNhID09PT09PT1cclxuXHRzZXRWYWx1ZShwYXRoKSB7XHJcblx0XHR0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguc2xpY2UoKSA6IFtdO1xyXG5cdFx0Ly8gU2kgZGVzZGUgYWZ1ZXJhIG5vcyBzZXRlYW4gdW5hIGhvamEgdsOhbGlkYSwgdGFtYmnDqW4gbGEgcmVjb3JkYW1vc1xyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdHNldFRyZWUodHJlZSkge1xyXG5cdFx0dGhpcy50cmVlID0gdHJlZSB8fCB7fTtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRzZXRGb2N1cyh7IGZvY3VzZWQsIGZvY3VzUGF0aCwgZm9jdXNMZXZlbCB9KSB7XHJcblx0XHRpZiAodHlwZW9mIGZvY3VzZWQgPT09IFwiYm9vbGVhblwiKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuXHRcdGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gXCJudW1iZXJcIikgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRfbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpIHtcclxuXHRcdC8vIFNpIHZhbHVlIGFwdW50YSBhIHBhZHJlK2hvamEgKOKApixbbGVhZl0pIHkgZXMgdsOhbGlkYSwgcmVjb3JkYXIgZXNhIGhvamFcclxuXHRcdGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLnZhbHVlLmxlbmd0aCAtIDEpO1xyXG5cdFx0Y29uc3QgbGVhZiA9IHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdGNvbnN0IGluZm8gPSB0aGlzLmdldE5vZGVBdFBhdGgocGFyZW50KTtcclxuXHRcdGlmIChpbmZvICYmIEFycmF5LmlzQXJyYXkoaW5mby5ub2RlKSAmJiBpbmZvLm5vZGUuaW5jbHVkZXMobGVhZikpIHtcclxuXHRcdFx0dGhpcy5sYXN0TGVhZiA9IHsgcGFyZW50UGF0aDogcGFyZW50LCBrZXk6IGxlYWYgfTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUHVibGljYWNpw7NuIGRlIGFsdHVyYSA9PT09PT09XHJcblx0X2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKSB7XHJcblx0XHRsZXQgYyA9IDA7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgaSsrKVxyXG5cdFx0XHRpZiAodGhpcy5sZXZlbHNbaV0udHlwZSA9PT0gXCJtYXBcIikgYysrO1xyXG5cdFx0cmV0dXJuIGM7XHJcblx0fVxyXG5cclxuXHRfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcblx0XHRjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcblx0XHRyZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09IFwibGlzdFwiID8gbGFzdC5pdGVtcy5sZW5ndGggOiAwO1xyXG5cdH1cclxuXHJcblx0X3B1Ymxpc2hIZWlnaHQoKSB7XHJcblx0XHRjb25zdCBpbnRlciA9IHRoaXMuX2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKTtcclxuXHRcdGNvbnN0IGxlYWZMZW4gPSBNYXRoLm1heCh0aGlzLmxlYWZNYXgsIHRoaXMuX2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkpO1xyXG5cdFx0Y29uc3QgbGVhZkggPSBsZWFmTGVuICogdGhpcy5saW5lSDtcclxuXHRcdGNvbnN0IGludGVySCA9IGludGVyICogKHRoaXMubGluZUggKyB0aGlzLmxldmVsR2FwKTtcclxuXHRcdGNvbnN0IHRvdGFsSCA9IGludGVyID8gaW50ZXJIICsgdGhpcy5sZXZlbEdhcCArIGxlYWZIIDogbGVhZkg7XHJcblxyXG5cdFx0Ly8gTm9ybWFsaXphbW9zIGEgcHggZW50ZXJvcyBwYXJhIGV2aXRhciBqaXR0ZXIgcG9yIHJlZG9uZGVvXHJcblx0XHRjb25zdCBuZXdIID0gTWF0aC5mbG9vcih0b3RhbEgpO1xyXG5cclxuXHRcdC8vIEFjdHVhbGl6YW1vcyBtw6l0cmljYXMgbG9jYWxlcyBzaWVtcHJlXHJcblx0XHR0aGlzLmggPSBuZXdIO1xyXG5cdFx0dGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gU29sbyBhdmlzYW1vcyBhbCBHVUkgc2kgbGEgYWx0dXJhIGNhbWJpw7NcclxuXHRcdGlmIChuZXdIICE9PSB0aGlzLl9sYXN0UHVibGlzaGVkSCkge1xyXG5cdFx0XHR0aGlzLl9sYXN0UHVibGlzaGVkSCA9IG5ld0g7XHJcblx0XHRcdFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG5cdFx0XHRpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiXHJcbmltcG9ydCB7IEJvb2wgfSBmcm9tICcuLi9wcm90by9Cb29sLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vcHJvdG8vQnV0dG9uLmpzJztcclxuaW1wb3J0IHsgQ2lyY3VsYXIgfSBmcm9tICcuLi9wcm90by9DaXJjdWxhci5qcyc7XHJcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnLi4vcHJvdG8vQ29sb3IuanMnO1xyXG5pbXBvcnQgeyBGcHMgfSBmcm9tICcuLi9wcm90by9GcHMuanMnO1xyXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL3Byb3RvL0dyYXBoLmpzJztcclxuaW1wb3J0IHsgR3JvdXAgIH0gZnJvbSAnLi4vcHJvdG8vR3JvdXAuanMnO1xyXG5pbXBvcnQgeyBKb3lzdGljayB9IGZyb20gJy4uL3Byb3RvL0pveXN0aWNrLmpzJztcclxuaW1wb3J0IHsgS25vYiB9IGZyb20gJy4uL3Byb3RvL0tub2IuanMnO1xyXG5pbXBvcnQgeyBMaXN0IH0gZnJvbSAnLi4vcHJvdG8vTGlzdC5qcyc7XHJcbmltcG9ydCB7IE51bWVyaWMgfSBmcm9tICcuLi9wcm90by9OdW1lcmljLmpzJztcclxuaW1wb3J0IHsgU2xpZGUgfSBmcm9tICcuLi9wcm90by9TbGlkZS5qcyc7XHJcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gJy4uL3Byb3RvL1RleHRJbnB1dC5qcyc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vcHJvdG8vVGl0bGUuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuLi9wcm90by9TZWxlY3QuanMnO1xyXG5pbXBvcnQgeyBCaXRtYXAgfSBmcm9tICcuLi9wcm90by9CaXRtYXAuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdG9yLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuLi9wcm90by9FbXB0eS5qcyc7XHJcbmltcG9ydCB7IEl0ZW0gfSBmcm9tICcuLi9wcm90by9JdGVtLmpzJztcclxuaW1wb3J0IHsgR3JpZCB9IGZyb20gJy4uL3Byb3RvL0dyaWQuanMnO1xyXG5pbXBvcnQgeyBQYWQyRCB9IGZyb20gJy4uL3Byb3RvL1BhZDJELmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgVHJlZUxpc3QgfSBmcm9tICcuLi9wcm90by9UcmVlTGlzdC5qcyc7XHJcblxyXG5leHBvcnQgY29uc3QgYWRkID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGFyZ3VtZW50czsgXHJcblxyXG4gICAgICAgIGxldCB0eXBlLCBvLCByZWYgPSBmYWxzZSwgbiA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVswXSA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgICAgICB0eXBlID0gYVswXTtcclxuICAgICAgICAgICAgbyA9IGFbMV0gfHwge307XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBhWzBdID09PSAnb2JqZWN0JyApeyAvLyBsaWtlIGRhdCBndWlcclxuXHJcbiAgICAgICAgICAgIHJlZiA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoYSwge30pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzJdLnR5cGUgPyBhWzJdLnR5cGUgOiBhdXRvVHlwZSggYVswXVthWzFdXSwgYVsyXSApO1xyXG5cclxuICAgICAgICAgICAgbyA9IGFbMl07XHJcbiAgICAgICAgICAgIG8ubmFtZSA9IGFbMV07XHJcbiAgICAgICAgICAgIGlmIChvLmhhc093blByb3BlcnR5KFwiZGlzcGxheU5hbWVcIikpIG8ubmFtZSA9IG8uZGlzcGxheU5hbWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ2xpc3QnICYmICFvLmxpc3QgKXsgby5saXN0ID0gYVswXVthWzFdXTsgfVxyXG4gICAgICAgICAgICBlbHNlIG8udmFsdWUgPSBhWzBdW2FbMV1dO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2dyb3VwJyApeyBcclxuICAgICAgICAgICAgby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIC8vby5keCA9IDhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCggbmFtZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnYm9vbCc6IGNhc2UgJ2Jvb2xlYW4nOiBuID0gbmV3IEJvb2wobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdidXR0b24nOiBuID0gbmV3IEJ1dHRvbihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NpcmN1bGFyJzogbiA9IG5ldyBDaXJjdWxhcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzogbiA9IG5ldyBDb2xvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Zwcyc6IG4gPSBuZXcgRnBzKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JhcGgnOiBuID0gbmV3IEdyYXBoKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOiBuID0gbmV3IEdyb3VwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnam95c3RpY2snOiBuID0gbmV3IEpveXN0aWNrKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAna25vYic6IG4gPSBuZXcgS25vYihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xpc3QnOiBuID0gbmV3IExpc3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdudW1lcmljJzogY2FzZSAnbnVtYmVyJzogbiA9IG5ldyBOdW1lcmljKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2xpZGUnOiBuID0gbmV3IFNsaWRlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGV4dElucHV0JzogY2FzZSAnc3RyaW5nJzogbiA9IG5ldyBUZXh0SW5wdXQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6IGNhc2UgJ3RleHQnOiBuID0gbmV3IFRpdGxlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzogbiA9IG5ldyBTZWxlY3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdiaXRtYXAnOiBuID0gbmV3IEJpdG1hcChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdG9yJzogbiA9IG5ldyBTZWxlY3RvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzogY2FzZSAnc3BhY2UnOiBuID0gbmV3IEVtcHR5KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaXRlbSc6IG4gPSBuZXcgSXRlbShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyaWQnOiBuID0gbmV3IEdyaWQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwYWQyZCc6IGNhc2UgJ3BhZCc6IG4gPSBuZXcgUGFkMkQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0cmVlbGlzdCc6IG4gPSBuZXcgVHJlZUxpc3Qobyk7IGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggbiAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGlmKCByZWYgKSBuLnNldFJlZmVyZW5jeSggYVswXSwgYVsxXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gbjtcclxuXHJcbiAgICAgICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGF1dG9UeXBlID0gZnVuY3Rpb24gKCB2LCBvICkge1xyXG5cclxuICAgIGxldCB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIGlmKCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkgdHlwZSA9ICdib29sJyBcclxuICAgIGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgaWYoIHYuc3Vic3RyaW5nKDAsMSkgPT09ICcjJyApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3N0cmluZycgXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ251bWJlcicgKXsgXHJcblxyXG4gICAgICAgIGlmKCBvLmN0eXBlICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ2FycmF5JyAmJiB2IGluc3RhbmNlb2YgQXJyYXkgKXtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB2WzBdID09PSAnbnVtYmVyJyApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgaWYoIHR5cGVvZiB2WzBdID09PSAnc3RyaW5nJyApIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcblxyXG4gICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHlwZVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBhZGQgfSBmcm9tIFwiLi9hZGQuanNcIjtcclxuaW1wb3J0IHsgVjIgfSBmcm9tIFwiLi9WMi5qc1wiO1xyXG5cclxuLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIEd1aSB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICB0aGlzLmlzR3VpID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBcImd1aVwiO1xyXG5cclxuICAgIC8vIGZvciAzZFxyXG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xyXG4gICAgdGhpcy5zY3JlZW4gPSBudWxsO1xyXG4gICAgdGhpcy5wbGFuZSA9IG8ucGxhbmUgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjb2xvclxyXG4gICAgaWYgKG8uY29uZmlnKSBvLmNvbG9ycyA9IG8uY29uZmlnO1xyXG4gICAgaWYgKG8uY29sb3JzKSB0aGlzLnNldENvbmZpZyhvLmNvbG9ycyk7XHJcbiAgICBlbHNlIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcblxyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMuY3NzID0gVG9vbHMuY2xvbmVDc3MoKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG4gICAgdGhpcy50bXBBZGQgPSBudWxsO1xyXG4gICAgLy90aGlzLnRtcEggPSAwXHJcblxyXG4gICAgdGhpcy5pc0NhbnZhcyA9IG8uaXNDYW52YXMgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIE1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIC8vIG9wdGlvbiB0byBkZWZpbmUgd2hldGhlciB0aGUgZXZlbnQgbGlzdGVuZXJzIHNob3VsZCBiZSBhZGRlZCBvciBub3RcclxuICAgIFJvb3RzLmFkZERPTUV2ZW50TGlzdGVuZXJzID0gby5oYXNPd25Qcm9wZXJ0eShcImFkZERPTUV2ZW50TGlzdGVuZXJzXCIpXHJcbiAgICAgID8gby5hZGRET01FdmVudExpc3RlbmVyc1xyXG4gICAgICA6IHRydWU7XHJcblxyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG5cclxuICAgIHRoaXMuZm9yY2VIZWlnaHQgPSBvLm1heEhlaWdodCB8fCAwO1xyXG4gICAgdGhpcy5sb2NrSGVpZ2h0ID0gby5sb2NrSGVpZ2h0IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNJdGVtTW9kZSA9IG8uaXRlbU1vZGUgIT09IHVuZGVmaW5lZCA/IG8uaXRlbU1vZGUgOiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmNuID0gXCJcIjtcclxuXHJcbiAgICAvLyBzaXplIGRlZmluZVxyXG4gICAgdGhpcy5zaXplID0gVG9vbHMuc2l6ZTtcclxuICAgIGlmIChvLnAgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnAgPSBvLnA7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS53ID0gby53O1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUuaCA9IG8uaDtcclxuICAgIGlmIChvLnMgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnMgPSBvLnM7XHJcblxyXG4gICAgdGhpcy5zaXplLmggPSB0aGlzLnNpemUuaCA8IDExID8gMTEgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICAvLyBsb2NhbCBtb3VzZSBhbmQgem9uZVxyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG4gICAgdGhpcy56b25lID0geyB4OiAwLCB5OiAwLCB3OiB0aGlzLnNpemUudywgaDogMCB9O1xyXG5cclxuICAgIC8vIHZpcnR1YWwgbW91c2VcclxuICAgIHRoaXMubW91c2UgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmggPSAwO1xyXG4gICAgLy90aGlzLnByZXZZID0gLTE7XHJcbiAgICB0aGlzLnN3ID0gMDtcclxuXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICAvLyBib3R0b20gYW5kIGNsb3NlIGhlaWdodFxyXG4gICAgdGhpcy5pc1dpdGhDbG9zZSA9IG8uY2xvc2UgIT09IHVuZGVmaW5lZCA/IG8uY2xvc2UgOiB0cnVlO1xyXG4gICAgdGhpcy5iaCA9ICF0aGlzLmlzV2l0aENsb3NlID8gMCA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG8uYXV0b1Jlc2l6ZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG8uYXV0b1Jlc2l6ZTtcclxuXHJcbiAgICAvLyBkZWZhdWx0IHBvc2l0aW9uXHJcbiAgICB0aGlzLmlzQ2VudGVyID0gby5jZW50ZXIgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmNzc0d1aSA9XHJcbiAgICAgIG8uY3NzICE9PSB1bmRlZmluZWQgPyBvLmNzcyA6IHRoaXMuaXNDZW50ZXIgPyBcIlwiIDogXCJyaWdodDoxMHB4O1wiO1xyXG5cclxuICAgIHRoaXMuaXNPcGVuID0gby5vcGVuICE9PSB1bmRlZmluZWQgPyBvLm9wZW4gOiB0cnVlO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmRlY2FsID0gMDtcclxuICAgIHRoaXMucmF0aW8gPSAxO1xyXG4gICAgdGhpcy5veSA9IDA7XHJcblxyXG4gICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIHRoaXMuY29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiIHdpZHRoOjBweDsgaGVpZ2h0OmF1dG87IHRvcDowcHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmNvbnRlbnQgK1xyXG4gICAgICAgIFwiOyBcIiArXHJcbiAgICAgICAgdGhpcy5jc3NHdWlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyB0aGlzLmNzcy5idXR0b24gKyAnd2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyQ29udGVudCk7XHJcblxyXG4gICAgLy90aGlzLmlubmVyID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyAnKVxyXG4gICAgdGhpcy51c2VGbGV4ID0gdHJ1ZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/IFwiZGlzcGxheTpmbGV4OyBmbGV4LWZsb3c6IHJvdyB3cmFwO1wiIDogXCJcIjsgLy8nIGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnN0YXJ0OyBhbGlnbi1pdGVtczpzdGFydDtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYWxpZ24taXRlbXM6IGNlbnRlcjsnO1xyXG4gICAgdGhpcy5pbm5lciA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwid2lkdGg6MTAwJTsgbGVmdDowOyBcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuaW5uZXJDb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXIpO1xyXG5cclxuICAgIC8vIHNjcm9sbFxyXG4gICAgdGhpcy5zY3JvbGxCRyA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwicmlnaHQ6MDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSAxKSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7IGRpc3BsYXk6bm9uZTsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYmFja2dyb3VuZCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxCRyk7XHJcblxyXG4gICAgdGhpcy5zY3JvbGwgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJ1dHRvbiArXHJcbiAgICAgICAgXCI7IHJpZ2h0OjJweDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSA0KSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLnNjcm9sbEJHLmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsKTtcclxuXHJcbiAgICAvLyBib3R0b20gYnV0dG9uXHJcbiAgICB0aGlzLmJvdHRvbVRleHQgPSBvLmJvdHRvbVRleHQgfHwgW1wib3BlblwiLCBcImNsb3NlXCJdO1xyXG5cclxuICAgIGxldCByID0gY2MucmFkaXVzO1xyXG4gICAgdGhpcy5ib3R0b20gPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dCArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6YXV0bzsgYm90dG9tOjA7IGxlZnQ6MDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGhlaWdodDpcIiArXHJcbiAgICAgICAgdGhpcy5iaCArXHJcbiAgICAgICAgXCJweDsgbGluZS1oZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmJoIC0gNSkgK1xyXG4gICAgICAgIFwicHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTsgLy8gYm9yZGVyLXRvcDoxcHggc29saWQgJytUb29scy5jb2xvcnMuc3Ryb2tlKyc7Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5ib3R0b20pO1xyXG4gICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIC8vXHJcblxyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnBhcmVudCAhPT0gdW5kZWZpbmVkID8gby5wYXJlbnQgOiBudWxsO1xyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnRhcmdldCAhPT0gdW5kZWZpbmVkID8gby50YXJnZXQgOiB0aGlzLnBhcmVudDtcclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgPT09IG51bGwgJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5wYXJlbnQgPSBkb2N1bWVudC5ib2R5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcyAmJiB0aGlzLnBhcmVudCA9PT0gbnVsbCkgdGhpcy5pc0NhbnZhc09ubHkgPSB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XHJcbiAgICAgIG8udHJhbnNpdGlvbiA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGVpZ2h0IHRyYW5zaXRpb25cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9XHJcbiAgICAgIG8udHJhbnNpdGlvbiAhPT0gdW5kZWZpbmVkID8gby50cmFuc2l0aW9uIDogVG9vbHMudHJhbnNpdGlvbjtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24pIHNldFRpbWVvdXQodGhpcy5hZGRUcmFuc2l0aW9uLmJpbmQodGhpcyksIDEwMDApO1xyXG5cclxuICAgIHRoaXMuc2V0V2lkdGgoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5tYWtlQ2FudmFzKCk7XHJcblxyXG4gICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlRG93bih4LCB5KSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJHdWkudHJpZ2dlck1vdXNlRG93biBpcyBkZXByZWNhdGVkLCB1c2UgdHJpZ2dlck1vdXNlRG93blVWIGluc3RlYWRcIik7XHJcbiAgICAvKlxyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pOyovXHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VNb3ZlKCkge1xyXG4gICAgY29uc29sZS53YXJuKFwiR3VpLnRyaWdnZXJNb3VzZU1vdmUgaXMgZGVwcmVjYXRlZCwgdXNlIHRyaWdnZXJNb3VzZU1vdmVVViBpbnN0ZWFkXCIpO1xyXG4gICAgLypcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pOyovXHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcCh4LCB5KSB7XHJcblxyXG4gICAgY29uc29sZS53YXJuKFwiR3VpLnRyaWdnZXJNb3VzZVVwIGlzIGRlcHJlY2F0ZWQsIHVzZSB0cmlnZ2VyTW91c2VVcFVWIGluc3RlYWRcIik7XHJcbiAgICAvKlxyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTsqL1xyXG4gIH1cclxuXHJcbiAgLy8gR3VpLmpzXHJcbiAgdHJpZ2dlck1vdXNlRG93blVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgLy8gdSwgdiBlbiBbMCwxXSByZWxhdGl2b3MgYWwgcmVjdCBkZWwgR1VJXHJcbiAgICBjb25zdCB4ID0gdGhpcy56b25lLnggKyBNYXRoLnJvdW5kKHUgKiB0aGlzLnpvbmUudyk7XHJcbiAgICBjb25zdCB5ID0gdGhpcy56b25lLnkgKyBNYXRoLnJvdW5kKChmbGlwWSA/IDEgLSB2IDogdikgKiB0aGlzLnpvbmUuaCk7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcmRvd25cIixcclxuICAgICAgY2xpZW50WDogaXNOYU4oeCkgPyBudWxsIDogeCxcclxuICAgICAgY2xpZW50WTogaXNOYU4oeSkgPyBudWxsIDogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcFVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgY29uc3QgeCA9IHRoaXMuem9uZS54ICsgTWF0aC5yb3VuZCh1ICogdGhpcy56b25lLncpO1xyXG4gICAgY29uc3QgeSA9IHRoaXMuem9uZS55ICsgTWF0aC5yb3VuZCgoZmxpcFkgPyAxIC0gdiA6IHYpICogdGhpcy56b25lLmgpO1xyXG4gICAgXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcnVwXCIsXHJcbiAgICAgIGNsaWVudFg6IGlzTmFOKHgpID8gbnVsbCA6IHgsXHJcbiAgICAgIGNsaWVudFk6IGlzTmFOKHkpID8gbnVsbCA6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZVVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgY29uc3QgeCA9IHRoaXMuem9uZS54ICsgTWF0aC5yb3VuZCh1ICogdGhpcy56b25lLncpO1xyXG4gICAgY29uc3QgeSA9IHRoaXMuem9uZS55ICsgTWF0aC5yb3VuZCgoZmxpcFkgPyAxIC0gdiA6IHYpICogdGhpcy56b25lLmgpO1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJtb3ZlXCIsXHJcbiAgICAgIGNsaWVudFg6IGlzTmFOKHgpID8gbnVsbCA6IHgsXHJcbiAgICAgIGNsaWVudFk6IGlzTmFOKHkpID8gbnVsbCA6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0VG9wKHQsIGgpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS50b3AgPSB0ICsgXCJweFwiO1xyXG4gICAgaWYgKGggIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JjZUhlaWdodCA9IGg7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFkZFRyYW5zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmJvdHRvbS5zdHlsZS50cmFuc2l0aW9uID0gXCJ0b3AgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgLy90aGlzLmJvdHRvbS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBSb290cy5yZXNpemUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uYWRkVHJhbnNpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkRyYXcoKSB7fVxyXG5cclxuICBtYWtlQ2FudmFzKCkge1xyXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXHJcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFxyXG4gICAgICBcImNhbnZhc1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLnpvbmUudztcclxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyggdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCApXHJcbiAgfVxyXG5cclxuICBkcmF3KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5jYW52YXMgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuem9uZS53O1xyXG4gICAgbGV0IGggPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG4gICAgUm9vdHMudG9DYW52YXModGhpcywgdywgaCwgZm9yY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vXHJcblxyXG4gIGdldERvbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBub01vdXNlKCkge1xyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICB9XHJcblxyXG4gIHNldE1vdXNlKHV2LCBmbGlwID0gdHJ1ZSkge1xyXG4gICAgaWYgKGZsaXApXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgLSBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICAvL3RoaXMubW91c2Uuc2V0KCBtLngsIG0ueSApO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJzZXRNb3VzZSBcIiArIHV2LnggKyBcIiBcIiArIHV2LnkpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNZLE1BQUMsUUFBUSxHQUFHLFFBQVE7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsTUFBTSxDQUFDLEdBQUc7QUFDVixFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1I7QUFDQSxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQ1g7QUFDQSxFQUFFLEVBQUUsRUFBRSxJQUFJO0FBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSztBQUNiLEVBQUUsS0FBSyxFQUFFLEtBQUs7QUFD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SUFBSSxHQUFHLEdBQUcsRUFBRTtBQUN0QixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzlCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDMUIsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9DO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtBQUN2QixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7QUFDN0IsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNqQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdB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Q0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDekQsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxHQUFHLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxFQUFFO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxTQUFTLEdBQUcsT0FBTyxHQUFHLENBQUM7QUFDMUMsYUFBYSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUM1RCxhQUFhLElBQUksRUFBRSxZQUFZLEtBQUssRUFBRTtBQUN0QyxZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNuRixZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdkcsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxHQUFHLEdBQUcsV0FBVyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLEdBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtB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TSxDQUFDLENBQUM7QUFDN0MsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksYUFBYSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ2xDO0FBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDO0FBQzdEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sR0FBRztBQUMxQyxRQUFRLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMxQixRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUc7QUFDdEMsVUFBVSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUM7QUFDakUsU0FBUztBQUNULFFBQVEsT0FBTyxRQUFRLENBQUM7QUFDeEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDOUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzlCO0FBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFCO0FBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQzNCO0FBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDekI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0UsYUFBYSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDekIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDekQsUUFBUSxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDekI7QUFDQSxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzVFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDMUI7QUFDQSxRQUFRLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pIO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDdEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakIsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRCxRQUFRLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakM7QUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUNsQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ2xFLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRztBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2pKLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDM0QsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUNqRSxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQixTQUFTO0FBQ1QsUUFBUSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMzQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0M7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQyxhQUFhO0FBQ2IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQzNELFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFlBQVksT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUN6RyxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksWUFBWSxFQUFFLFdBQVcsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHO0FBQzlEO0FBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hEO0FBQ0EsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRztBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFHO0FBQ3BCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0FBQ3BKLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25DLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMvRixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckg7QUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdJLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUksUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuSSxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3RCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxLQUFLLEdBQUc7QUFDakM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdB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QUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM1SCxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN6SDtBQUNBO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEUsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7QUFDQTtBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzFFLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzFFO0FBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxRixZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzSDtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDNUg7QUFDQTtBQUNBO0FBQ0EsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdEYsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEcsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0Y7QUFDQSxZQUFZLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQy9CO0FBQ0EsU0FBUyxNQUFNO0FBQ2Y7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDNUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUg7QUFDQSxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUs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RUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuRyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5SSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5SSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxvRkFBb0YsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvSztBQUNBO0FBQ0EsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFHO0FBQ0EsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDckM7QUFDQSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FB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LEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDckQ7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVc7QUFDbkMsTUFBTSxDQUFDO0FBQ1AsTUFBTSxJQUFJLENBQUMsSUFBSTtBQUNmLFVBQVUsSUFBSSxDQUFDLEtBQUs7QUFDcEIsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDN0IsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07QUFDNUIsVUFBVSxLQUFLLENBQUMsTUFBTTtBQUN0QixLQUFLLENBQUM7QUFDTjtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUMzQztBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEM7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUQsU0FBUyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2pEO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztBQUN2RDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDbEMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO0FBQ3hDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDcEMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzNCLElB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LEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNoQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN2RCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDdEQsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pFO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNWO0FBQ0EsSUFBSSxRQUFRLElBQUksQ0FBQyxTQUFTO0FBQzFCLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbEIsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDcEIsUUFBUSxNQUFNO0FBQ2QsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDckIsUUFBUSxNQUFNO0FBQ2QsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2xELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNDLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNkLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLElBQUk7QUFDSixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7QUFDM0UsTUFBTTtBQUNOLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFO0FBQ2pCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU87QUFDMUIsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDM0MsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDckIsTUFBTSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztB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RUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBSztBQUNyQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFDO0FBQ3REO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUc7QUFDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRTtBQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFFO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtBQUM5QixZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FB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LEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQzNFO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUs7QUFDM0IsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUk7QUFDN0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFNO0FBQ3JDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFFO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNsQztBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0M7QUFDQSxZQUFZLEdBQUcsR0FBRyxNQUFLO0FBQ3ZCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsS0FBSTtBQUMvRTtBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRTtBQUNsTSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FB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LENBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFFO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQztBQUN2QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ3JCLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSTtBQUNsRDtBQUNBLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFDO0FBQzVELFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQjtBQUNBO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDckUsU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRDtBQUNBLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFB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V0FBVyxHQUFFO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQ3pELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtBQUMzRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQztBQUM1RjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUU7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07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QUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztBQUMxRSxhQUFhLE9BQU8sVUFBVSxDQUFDO0FBQy9CO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdkIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUIsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ2hDO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekMsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEU7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQyxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvQztBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDbkMsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuQztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqRTtBQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUM1QyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0IsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLFVBQVUsR0FBRztBQUNsQztBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDckQ7QUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7QUFDaEMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN4RCxhQUFhLE1BQU0sS0FBSyxD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LENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hDO0FBQ0EsU0FBUyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlDLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNuQztBQUNBLFNBQVMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakMsU0FBUyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JDO0FBQ0EsU0FBUyxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDL0QsU0FBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNoRCxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUU7QUFDN0IsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFNBQVMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRztBQUN4QixPQUFPLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdkMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3hDLGVBQWUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbkQ7QUFDQSxPQUFPLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3hELE9BQU8sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDcEQ7QUFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNFLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQ7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUk7QUFDSixHQUFHO0FBQ0g7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxTQUFTLENBQUMsR0FBRztBQUNkO0FBQ0EsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNqRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbEQsVUFB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QUssT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hELEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDdkUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztBQUMzRSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdDO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDZjtBQUNBLEVBQUUsSUFBSSxDQUFDLFlBQVksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxhQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELGFBQWEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDNUI7QUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRTtBQUM3QixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3BCO0FBQ0EsS0FBSyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxNQUFNLEVBQUU7QUFDMUM7QUFDQSxTQUFTLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUM1QixTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTTtBQUMxQixTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFFO0FBQzlDO0FBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEM7QUFDQSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN2QixNQUFNO0FBQ04sS0FBSyxPQUFPLElBQUksQ0FBQztBQUNqQjtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0FBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0QyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3pCLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDakI7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFdBQVcsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRTtBQUNqQixFQUFFLElBQUksQ0FBQyxHQUFHLE1BQUs7QUFDZjtBQUNBLEtBQWMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTztBQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNuQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBLEtBQUssSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzFDO0FBQ0EsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN0QjtBQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEU7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1QztBQUNBLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUUsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckQ7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxDQUFDLEtBQUssQ0FBQyxHQUFHO0FBQ1Y7QUFDQTtBQUNBLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25CO0FBQ0EsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNoQztBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNoQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM1RDtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUM7QUFDM0QsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUU7QUFDOUM7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUU7QUFDOUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtBQUNuQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ3BDO0FBQ0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbkM7QUFD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LENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDdkU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsRSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNsRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyx3REFBd0QsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQztBQUM3SztBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsb0NBQW9DLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENB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LElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDbkQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNuRSxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMzRDtBQUNBLFFBQVEsSUFB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QUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNyRSxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7QUFDbEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUN4RSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDakMsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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SUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4RCxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0M7QUFDQSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0RixjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQzdEO0FBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUg7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDckMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDO0FBQzlDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUk7QUFDOUMsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcs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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2hFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEM7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRTtBQUM1QixRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQztBQUNqRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUU7QUFDbEI7QUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUk7QUFDOUI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDO0FBQ0EsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUU7QUFDOUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7QUFDdkM7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ2xUTyxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDakM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsS0FBSyxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUk7QUFDckIsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUM7QUFDcEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDekIsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ1RPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFJO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSTtBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFFO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDekIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7QUFDM0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBQztBQUNwQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7QUFDNUM7QUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7QUFDM0IsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLG9DQUFvQyxHQUFHLEdBQUU7QUFDL0U7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLDRDQUE0QyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUM7QUFDNUgsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLHdEQUF3RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDO0FBQzVLO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQzFEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxz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QUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQzFDLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztBQUNsRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzVCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUM3QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFPO0FBQ3pDLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUk7QUFDNUQ7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUss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Q0FBQztBQUM1RSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUU7QUFDQSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdkU7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0E7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDcEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRTtBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUM1QjtBQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RCxTQUFTLE1BQU07QUFDZixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVELFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFD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QUk7QUFDMUIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQzdCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFJO0FBQ3hCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUU7QUFDM0IsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0QsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RDtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDdEMsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDaEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7QUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVDLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3ZFLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNyRDtBQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztBQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hELGFBQWEsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9CLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekIsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QjtBQUNBLFNBQVM7QUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3pELFFBQVEsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzVDLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzFDO0FBQ0E7QUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkIsWUFBWSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVDLFlBQVksSUFBSSxHQUFHLEVBQUUsVUFBVSxHQUFHLFFBQVEsS0FBSyxLQUFLLENBQUM7QUFDckQsU0FBUyxNQUFNO0FBQ2YsWUFBWSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyRCxZQUFZLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzFCLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRztBQUMzQztBQUNBLFlBQVksQ0FBQyxHQUFHLFVBQVUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDMUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQy9DLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUMvQyxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDaEQsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ2hELFlBQVksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQzlEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVEO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDcEMsUUFBUSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNyRTtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqQyxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDakM7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEMsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckY7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7QUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ25DLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNwQyxZQUFZLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqSTtBQUNBLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO0FBQ25LLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDekQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ2xRTyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUM7QUFDaEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFLO0FBQ2hDO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDakMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUN6RCxRQUFRLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQztBQUM1QztBQUNBO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztBQUN0QztBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEdBQUU7QUFDbkMsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksTUFBSztBQUMzQyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxNQUFLO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFRO0FBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFNO0FBQzVELFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxXQUFVO0FBQ3pFO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcs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QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDekMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3pDO0FBQ0EsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2xEO0FBQ0EsU0FBUyxNQUFNO0FBQ2YsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDcEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDZDQUE2QyxDQUFDLENBQUM7QUFDdkcsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDN0MsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJ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LElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDckIsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEQsU0FBUyxNQUFNO0FBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QjtBQUNBLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FB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RSxDQUFDLEdBQUc7QUFDMUI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQztBQUN2RSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQUs7QUFDdEMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNoRCxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFJO0FBQ2xELFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUk7QUFDM0MsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBQztBQUMzQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUU7QUFDNUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSTtBQUN6QyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMs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R0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQzVELFFBQVEsTUFBTTtBQUNkLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7QUFDYixJQUFJLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUQ7QUFDQSxJQUFJLElBQUksT0FBTztBQUNmLE1BQU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUU7QUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUMzQztBQUNBO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEQsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM1RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDakU7QUFDQSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4QixHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssR0FBRztBQUNWLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xCO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEI7QUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDckIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNyRCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuQjtBQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwQztBQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7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QVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3ZDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEw7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekM7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzlDO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHO0FBQ2Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEdBQUc7QUFDZDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Y7QUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQjtBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QztBQUNBLFlBQVksUUFBUSxDQUFDO0FBQ3JCO0FBQ0EsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxNQUFNO0FBQy9GLGdCQUFnQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07QUFDcEcsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUN4RyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO0FBQ3BHO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsWUFBWSxN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Q0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM1RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQixZQUFZLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFlBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxFQUFFLENBQUM7QUFDbEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEtBQUs7QUFDdkM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBSztBQUMzQixRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUM3QixZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFDO0FBQzlDLFlB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TSxHQUFFO0FBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUc7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUM3QztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDO0FBQzdELFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQzNDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQ2hFLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRztBQUMxQixZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDO0FBQ2hFLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QixTQUFTLE1BQU07QUFDZixZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxHQUFHO0FB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QztBQUMvQixRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUU7QUFDeEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDbEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNuRDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDOUY7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUM7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsd0JBQXdCLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNJLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUU7QUFDakM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUM5QyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRTtBQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNoRCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUNoRDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFFO0FBQ3JFLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDdEY7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBRztBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNuQixRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUU7QUFDdkI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxPQUFPLENBQUM7QUFDN0QsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztBQUMxRSxhQUFhLE9BQU8sS0FBSyxDQUFDO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFDMUM7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQy9CLFlBQVksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoQyxZQUFZLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFFO0FBQzFELFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDekU7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQy9CO0FBQ0EsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDO0FBQ2xCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUNsQjtBQUNBLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3ZELFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNqQztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBLFFBQVEsUUFBUSxJQUFJO0FBQ3BCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDMUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7QUFDM0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUM7QUFDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7QUFDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7QUFDN0QsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDOUQ7QUFDQSxZQUFZLE1BQU07QUFDbEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztBQUNoRCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztBQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztBQUM5RCxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztBQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztBQUNoRSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRTtBQUNwRTtBQUNBLFlBQVksTUFBTTtBQUNsQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHO0FBQy9CO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRDtBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3REO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDakI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFNO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRztBQUMvQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFFO0FBQ3BIO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JSQTtBQUlBO0FBQ08sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDO0FBQ3BDLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDckI7QUFDQTtB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QUFDO0FBQzVDO0FBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0MsR0FBRyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtBQUMzQixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUMsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwRCxJQUFJLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNyQixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQyxLQUFLLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsS0FBSyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakQsS0FBSyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFF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QUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsUUFBUSxJQUFJO0FBQ3BCO0FBQ0EsWUFBWSxLQUFLLE1BQU0sQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDaEUsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3BELFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN4RCxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDbEQsWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQzlDLFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNsRCxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDbEQsWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3hELFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNoRCxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDaEQsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMs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QUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZjtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDOUQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEQ7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDdkU7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNO0FBQ2YsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLGFBQWEsQ0FBQztBQUN2RTtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2RCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNuQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzdCO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pCO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHO0FBQzVCLE1BQU0sS0FBSztBQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO0FBQ3BCLFFBQVEsK0NBQStDO0FBQ3ZELFFBQVEsRUFBRSxDQUFDLE9BQU87QUFDbEIsUUFBUSxJQUFJO0FBQ1osUUFBUSxJQUFJLENBQUMsTUFBTTtBQUNuQixLQUFLLENBQUM7QUFDTjtBQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsR0FBRztBQUNqQyxNQUFNLEtBQUs7QUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztBQUNwQixRQUFRLDBEQUEwRDtBQUNsRSxLQUFLLENBQUM7QUFDTjtBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxvQ0FBb0MsR0FBRyxFQUFFLENBQUM7QUFDNUUsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHO0FBQzFCLE1BQU0sS0FBSztBQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLHNCQUFzQjtBQUN4RCxLQUFLLENBQUM7QUFDTixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHO0FBQzdCLE1BQU0sS0FBSztBQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO0FBQ3BCLFFBQVEsd0JBQXdCO0FBQ2hDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsNENBQTRDO0FBQ3BELFFBQVEsRUFBRSxDQUFDLFVBQVU7QUFDckIsUUFBUSxHQUFHO0FBQ1gsS0FBSyxDQUFDO0FBQ04sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUM7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUc7QUFDM0IsTUFBTSxLQUFLO0FBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7QUFDcEIsUUFBUSxhQUFhO0FBQ3JCLFFBQVEsRUFBRSxDQUFDLE1BQU07QUFDakIsUUFBUSw0QkFBNEI7QUFDcEMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsUUFBUSxrQkFBa0I7QUFDMUIsS0FBSyxDQUFDO0FBQ04sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0M7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3hEO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0FBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRztBQUMzQixNQUFNLEtBQUs7QUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRztBQUNsQixRQUFRLHFFQUFxRTtBQUM3RSxRQUFRLENBQUM7QUFDVCxRQUFRLGdDQUFnQztBQUN4QyxRQUFRLENBQUM7QUFDVCxRQUFRLHFDQUFxQztBQUM3QyxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2YsUUFBUSxrQkFBa0I7QUFDMUIsU0FBUyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNyQixRQUFRLFlBQVk7QUFDcEIsUUFBUSxFQUFFLENBQUMsSUFBSTtBQUNmLFFBQVEsR0FBRztBQUNYLEtBQUssQ0FBQztBQUNOLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU07QUFDekMsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDM0QsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNsRTtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDaEQsTUFBTSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDbEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwRTtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3hFO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtBQUM1QixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7QUFDaEQsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3RDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVTtBQUNuQixNQUFNLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztBQUNuRSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekU7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNwQjtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN6QztBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDekIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLG9FQUFvRSxDQUFDLENBQUM7QUFDdkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxnQkFBZ0IsR0FBRztBQUNyQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLENBQUMsQ0FBQztBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZCO0FBQ0EsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLGdFQUFnRSxDQUFDLENBQUM7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO0FBQ2xEO0FBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUN0QixNQUFNLElBQUksRUFBRSxhQUFhO0FBQ3pCLE1BQU0sT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUNsQyxNQUFNLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDbEMsTUFBTSxLQUFLLEVBQUUsQ0FBQztBQUNkLE1BQU0sR0FBRyxFQUFFLElBQUk7QUFDZixNQUFNLE9BQU8sRUFBRSxHQUFHO0FBQ2xCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUU7QUFDQSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDdEIsTUFBTSxJQUFJLEVBQUUsV0FBVztBQUN2QixNQUFNLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDbEMsTUFBTSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ2xDLE1BQU0sS0FBSyxFQUFFLENBQUM7QUFDZCxNQUFNLEdBQUcsRUFBRSxJQUFJO0FBQ2YsTUFBTSxPQUFPLEVBQUUsR0FBRztBQUNsQixLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7QUFDbEQsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUN0QixNQUFNLElBQUksRUFBRSxhQUFhO0FBQ3pCLE1BQU0sT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUNsQyxNQUFNLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDbEMsTUFBTSxLQUFLLEVBQUUsQ0FBQztBQUNkLE1BQU0sR0FBRyxFQUFFLElBQUk7QUFDZixNQUFNLE9BQU8sRUFBRSxHQUFHO0FBQ2xCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNmLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDaEI7QUFDQSxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxHQUFHO0FBQ2xCLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMzQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVU7QUFDeEMsUUFBUSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFDbkQsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVO0FBQ25DLFFBQVEsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO0FBQ25ELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztBQUM3RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDNUMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQ2I7QUFDQSxFQUFFLFVBQVUsR0FBRztBQUNmLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsZUFBZTtBQUMxQyxNQUFNLDhCQUE4QjtBQUNwQyxNQUFNLFFBQVE7QUFDZCxLQUFLLENBQUM7QUFDTixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDZCxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsT0FBTztBQUNyQztBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUQsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFO0FBQzVCLElBQUksSUFBSSxJQUFJO0FBQ1osTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDcEIsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDNUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDbEUsT0FBTyxDQUFDO0FBQ1I7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNwQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FB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LElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDOUU7QUFDQSxRQUFRLE1BQU07QUFDZCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ25DLElBQUksSUFBSSxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQztBQUNBLElBQUksSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDeEMsSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQztBQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7QUFDckIsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDL0IsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDekIsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUUxQixNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzlCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDckIsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMs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QUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2xFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNuRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6RDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVO0FBQzNDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzFELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLEdBQUc7QUFDWCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNkLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2xELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUTtBQUNyQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFO0FBQ2xCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ2hCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzFCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7Ozs7In0= +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlsLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvUm9vdHMuanMiLCIuLi9zcmMvY29yZS9Ub29scy5qcyIsIi4uL3NyYy9jb3JlL0ZpbGVzLmpzIiwiLi4vc3JjL2NvcmUvVjIuanMiLCIuLi9zcmMvY29yZS9Qcm90by5qcyIsIi4uL3NyYy9wcm90by9Cb29sLmpzIiwiLi4vc3JjL3Byb3RvL0J1dHRvbi5qcyIsIi4uL3NyYy9wcm90by9DaXJjdWxhci5qcyIsIi4uL3NyYy9wcm90by9Db2xvci5qcyIsIi4uL3NyYy9wcm90by9GcHMuanMiLCIuLi9zcmMvcHJvdG8vR3JhcGguanMiLCIuLi9zcmMvcHJvdG8vRW1wdHkuanMiLCIuLi9zcmMvcHJvdG8vR3JvdXAuanMiLCIuLi9zcmMvcHJvdG8vSm95c3RpY2suanMiLCIuLi9zcmMvcHJvdG8vS25vYi5qcyIsIi4uL3NyYy9wcm90by9MaXN0LmpzIiwiLi4vc3JjL3Byb3RvL051bWVyaWMuanMiLCIuLi9zcmMvcHJvdG8vU2xpZGUuanMiLCIuLi9zcmMvcHJvdG8vVGV4dElucHV0LmpzIiwiLi4vc3JjL3Byb3RvL1RpdGxlLmpzIiwiLi4vc3JjL3Byb3RvL1NlbGVjdC5qcyIsIi4uL3NyYy9wcm90by9CaXRtYXAuanMiLCIuLi9zcmMvcHJvdG8vU2VsZWN0b3IuanMiLCIuLi9zcmMvcHJvdG8vSXRlbS5qcyIsIi4uL3NyYy9wcm90by9HcmlkLmpzIiwiLi4vc3JjL3Byb3RvL1BhZDJELmpzIiwiLi4vc3JjL3Byb3RvL1RyZWVMaXN0LmpzIiwiLi4vc3JjL2NvcmUvYWRkLmpzIiwiLi4vc3JjL2NvcmUvR3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBSRVZJU0lPTiA9IFwiNC4zLjBcIjtcclxuXHJcbi8vIElOVEVOQUwgRlVOQ1RJT05cclxuXHJcbmNvbnN0IFIgPSB7XHJcbiAgdWk6IFtdLFxyXG5cclxuICBkb206IG51bGwsXHJcblxyXG4gIElEOiBudWxsLFxyXG4gIGxvY2s6IGZhbHNlLFxyXG4gIHdsb2NrOiBmYWxzZSxcclxuICBjdXJyZW50OiAtMSxcclxuXHJcbiAgbmVlZFJlWm9uZTogdHJ1ZSxcclxuICBuZWVkUmVzaXplOiBmYWxzZSxcclxuICBmb3JjZVpvbmU6IGZhbHNlLFxyXG4gIGlzRXZlbnRzSW5pdDogZmFsc2UsXHJcbiAgaXNMZWF2ZTogZmFsc2UsXHJcbiAgYWRkRE9NRXZlbnRMaXN0ZW5lcnM6IHRydWUsXHJcblxyXG4gIGRvd25UaW1lOiAwLFxyXG4gIHByZXZUaW1lOiAwLFxyXG5cclxuICAvL3ByZXZEZWZhdWx0OiBbJ2NvbnRleHRtZW51JywgJ3doZWVsJ10sXHJcbiAgcHJldkRlZmF1bHQ6IFtcImNvbnRleHRtZW51XCJdLFxyXG4gIHBvaW50ZXJFdmVudDogW1wicG9pbnRlcmRvd25cIiwgXCJwb2ludGVybW92ZVwiLCBcInBvaW50ZXJ1cFwiXSxcclxuICBldmVudE91dDogW1wicG9pbnRlcmNhbmNlbFwiLCBcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVybGVhdmVcIl0sXHJcblxyXG4gIHhtbHNlcmlhbGl6ZXI6IG51bGwsXHJcbiAgdG1wVGltZTogbnVsbCxcclxuICB0bXBJbWFnZTogbnVsbCxcclxuXHJcbiAgb2xkQ3Vyc29yOiBcImF1dG9cIixcclxuXHJcbiAgaW5wdXQ6IG51bGwsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIGZpcnN0SW1wdXQ6IHRydWUsXHJcblxyXG4gIGhpZGRlbkltcHV0OiBudWxsLFxyXG4gIGhpZGRlblNpemVyOiBudWxsLFxyXG4gIGhhc0ZvY3VzOiBmYWxzZSxcclxuICBzdGFydElucHV0OiBmYWxzZSxcclxuICBpbnB1dFJhbmdlOiBbMCwgMF0sXHJcbiAgY3Vyc29ySWQ6IDAsXHJcbiAgc3RyOiBcIlwiLFxyXG4gIHBvczogMCxcclxuICBzdGFydFg6IC0xLFxyXG4gIG1vdmVYOiAtMSxcclxuXHJcbiAgZGVidWdJbnB1dDogZmFsc2UsXHJcblxyXG4gIGlzTG9vcDogZmFsc2UsXHJcbiAgbGlzdGVuczogW10sXHJcblxyXG4gIGU6IHtcclxuICAgIHR5cGU6IG51bGwsXHJcbiAgICBjbGllbnRYOiAwLFxyXG4gICAgY2xpZW50WTogMCxcclxuICAgIGtleUNvZGU6IE5hTixcclxuICAgIGtleTogbnVsbCxcclxuICAgIGRlbHRhOiAwLFxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlOiBmYWxzZSxcclxuXHJcbiAgbm93OiBudWxsLFxyXG4gIG5lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgZ2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5ub3dcclxuICAgICAgPyBzZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKVxyXG4gICAgICA6IERhdGUubm93O1xyXG4gIH0sXHJcblxyXG4gIGFkZDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vIFIudWlbMF0gaXMgZGUgR1VJIG9iamVjdCB0aGF0IGlzIGFkZGVkIGZpcnN0IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgUi51aS5wdXNoKG8pO1xyXG4gICAgUi5nZXRab25lKG8pO1xyXG5cclxuICAgIGlmICghUi5pc0V2ZW50c0luaXQpIFIuaW5pdEV2ZW50cygpO1xyXG4gIH0sXHJcblxyXG4gIHRlc3RNb2JpbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBuID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGlmIChcclxuICAgICAgbi5tYXRjaCgvQW5kcm9pZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC93ZWJPUy9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUGhvbmUvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvaVBhZC9pKSB8fFxyXG4gICAgICBuLm1hdGNoKC9pUG9kL2kpIHx8XHJcbiAgICAgIG4ubWF0Y2goL0JsYWNrQmVycnkvaSkgfHxcclxuICAgICAgbi5tYXRjaCgvV2luZG93cyBQaG9uZS9pKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGxldCBpID0gUi51aS5pbmRleE9mKG8pO1xyXG5cclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICBSLnJlbW92ZUxpc3RlbihvKTtcclxuICAgICAgUi51aS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFIudWkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIFIucmVtb3ZlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5pc0V2ZW50c0luaXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZG9tID0gZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBSLmlzTW9iaWxlID0gUi50ZXN0TW9iaWxlKCk7XHJcbiAgICBSLm5vdyA9IFIuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb20uc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlIuYWRkRE9NRXZlbnRMaXN0ZW5lcnMgXCIgKyBSLmFkZERPTUV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLmFkZEV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApXHJcblxyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIFIpO1xyXG4gICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBSKTtcclxuXHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBSLCBmYWxzZSk7XHJcbiAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUiwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgUi5yZXNpemUsIGZhbHNlKTtcclxuXHJcbiAgICAvL3dpbmRvdy5vbmJsdXIgPSBSLm91dDtcclxuICAgIC8vd2luZG93Lm9uZm9jdXMgPSBSLmluO1xyXG5cclxuICAgIFIuaXNFdmVudHNJbml0ID0gdHJ1ZTtcclxuICAgIFIuZG9tID0gZG9tO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLmlzRXZlbnRzSW5pdCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkb20gPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgIGlmICghUi5pc01vYmlsZSkge1xyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSLmFkZERPTUV2ZW50TGlzdGVuZXJzKSB7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgUik7XHJcbiAgICAgIC8vZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdwb2ludGVyb3V0JywgUiApO1xyXG5cclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBSKTtcclxuICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgUik7XHJcblxyXG4gICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgUik7XHJcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgUik7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBSLnJlc2l6ZSk7XHJcblxyXG4gICAgUi5pc0V2ZW50c0luaXQgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICByZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgaWYgKHUuaXNHdWkgJiYgIXUuaXNDYW52YXNPbmx5ICYmIHUuYXV0b1Jlc2l6ZSkgdS5jYWxjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gdHJ1ZTtcclxuICAgIFIubmVlZFJlc2l6ZSA9IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIG91dDogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBvdXRcIik7XHJcbiAgICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICBpbjogZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJpbSBhbSBpblwiKTtcclxuICAgIC8vICBSLmNsZWFyT2xkSUQoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBIQU5ETEUgRVZFTlRTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBmYWtlVXA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0eXBlOiBcInBvaW50ZXJ1cFwiIH0pO1xyXG4gIH0sXHJcblxyXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJSb290cy5oYW5kbGVFdmVudCBcIitldmVudC50eXBlKVxyXG4gICAgLy9pZighZXZlbnQudHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChSLnByZXZEZWZhdWx0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChSLm5lZWRSZXNpemUpIFIucmVzaXplKCk7XHJcblxyXG4gICAgUi5maW5kWm9uZShSLmZvcmNlWm9uZSk7XHJcblxyXG4gICAgbGV0IGUgPSBSLmU7XHJcbiAgICBsZXQgbGVhdmUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIFIua2V5ZG93bihldmVudCk7XHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSBSLmtleXVwKGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ3aGVlbFwiKSBlLmRlbHRhID0gZXZlbnQuZGVsdGFZID4gMCA/IDEgOiAtMTtcclxuICAgIGVsc2UgZS5kZWx0YSA9IDA7XHJcblxyXG4gICAgbGV0IHB0eXBlID0gZXZlbnQucG9pbnRlclR5cGU7IC8vIG1vdXNlLCBwZW4sIHRvdWNoXHJcblxyXG4gICAgZS5jbGllbnRYID0gKHB0eXBlID09PSBcInRvdWNoXCIgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgpIHx8IDA7XHJcbiAgICBlLmNsaWVudFkgPSAocHR5cGUgPT09IFwidG91Y2hcIiA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSkgfHwgMDtcclxuXHJcbiAgICBlLnR5cGUgPSBldmVudC50eXBlO1xyXG5cclxuICAgIGlmIChSLmV2ZW50T3V0LmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIGxlYXZlID0gdHJ1ZTtcclxuICAgICAgZS50eXBlID0gXCJtb3VzZXVwXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmxlYXZlXCIpIFIuaXNMZWF2ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikgZS50eXBlID0gXCJtb3VzZWRvd25cIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJ1cFwiKSBlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuICAgIGlmIChldmVudC50eXBlID09PSBcInBvaW50ZXJtb3ZlXCIpIHtcclxuICAgICAgaWYgKFIuaXNMZWF2ZSkge1xyXG4gICAgICAgIC8vIGlmIHVzZXIgcmVzaXplIG91dHNpZGUgdGhpcyBkb2N1bWVudFxyXG4gICAgICAgIFIuaXNMZWF2ZSA9IGZhbHNlO1xyXG4gICAgICAgIFIucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgZS50eXBlID0gXCJtb3VzZW1vdmVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGUgY2xpY2sgdGVzdFxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICBSLmRvd25UaW1lID0gUi5ub3coKTtcclxuICAgICAgbGV0IHRpbWUgPSBSLmRvd25UaW1lIC0gUi5wcmV2VGltZTtcclxuXHJcbiAgICAgIC8vIGRvdWJsZSBjbGljayBvbiBpbXB1dFxyXG4gICAgICBpZiAodGltZSA8IDIwMCkge1xyXG4gICAgICAgIFIuc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSLnByZXZUaW1lID0gUi5kb3duVGltZTtcclxuICAgICAgUi5mb3JjZVpvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgaW1wdXRcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIC8vIG1vdXNlIGxvY2tcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vkb3duXCIpIFIubG9jayA9IHRydWU7XHJcbiAgICBpZiAoZS50eXBlID09PSBcIm1vdXNldXBcIikgUi5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgLy9pZiggUi5jdXJyZW50ICE9PSBudWxsICYmIFIuY3VycmVudC5uZXZlcmxvY2sgKSBSLmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKmlmKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiA9PT0gMSl7XHJcbiAgICAgICAgICAgIFIuY3Vyc29yKClcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJwNCBcIitSLmlzTW9iaWxlK1wiIFwiK2UudHlwZStcIiBcIitSLmxvY2spXHJcblxyXG4gICAgaWYgKFIuaXNNb2JpbGUgJiYgZS50eXBlID09PSBcIm1vdXNlZG93blwiKSBSLmZpbmRJRChlKTtcclxuICAgIGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIgJiYgIVIubG9jaykgUi5maW5kSUQoZSk7XHJcblxyXG4gICAgaWYgKFIuSUQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKFIuSUQuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgZS5jbGllbnRYID0gUi5JRC5tb3VzZS54O1xyXG4gICAgICAgIGUuY2xpZW50WSA9IFIuSUQubW91c2UueTtcclxuICAgICAgfSBlbHNlIGlmIChSLklELmlzQ2FudmFzKSB7XHJcbiAgICAgICAgLy8gU29sbyB1c2FyIG1vdXNlIHZpcnR1YWwgc2kgZWwgZXZlbnRvIGVzIFwicHJvZ3JhbcOhdGljb1wiIChjb29yZHMgLTEpXHJcbiAgICAgICAgLy8geSBhZGVtw6FzIGVsIG1vdXNlIHZpcnR1YWwgeWEgZnVlIHNldGVhZG8gKD49MCkuXHJcbiAgICAgICAgY29uc3Qgd2FudHNWaXJ0dWFsID0gKGUuY2xpZW50WCA9PT0gLTEgfHwgZS5jbGllbnRZID09PSAtMSk7XHJcbiAgICAgICAgY29uc3QgaGFzTW91c2UgPSAoUi5JRC5tb3VzZS54ID49IDAgJiYgUi5JRC5tb3VzZS55ID49IDApO1xyXG4gICAgICAgIGlmICh3YW50c1ZpcnR1YWwgJiYgaGFzTW91c2UpIHtcclxuICAgICAgICAgIGUuY2xpZW50WCA9IFIuSUQuem9uZS54ICsgUi5JRC5tb3VzZS54O1xyXG4gICAgICAgICAgZS5jbGllbnRZID0gUi5JRC56b25lLnkgKyBSLklELm1vdXNlLnk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2lmKCBSLklELm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSBSLklELm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgUi5JRC5oYW5kbGVFdmVudChlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi5pc01vYmlsZSAmJiBlLnR5cGUgPT09IFwibW91c2V1cFwiKSBSLmNsZWFyT2xkSUQoKTtcclxuICAgIGlmIChsZWF2ZSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgSURcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRJRDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGxldCBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIG5leHQgPSAtMSxcclxuICAgICAgdSxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHUgPSBSLnVpW2ldO1xyXG5cclxuICAgICAgaWYgKHUuaXNDYW52YXNPbmx5KSB7XHJcbiAgICAgICAgeCA9IHUubW91c2UueDtcclxuICAgICAgICB5ID0gdS5tb3VzZS55O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFIub25ab25lKHUsIHgsIHkpKSB7XHJcbiAgICAgICAgbmV4dCA9IGk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICE9PSBSLmN1cnJlbnQpIHtcclxuICAgICAgICAgIFIuY2xlYXJPbGRJRCgpO1xyXG4gICAgICAgICAgUi5jdXJyZW50ID0gbmV4dDtcclxuICAgICAgICAgIFIuSUQgPSB1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXh0ID09PSAtMSkgUi5jbGVhck9sZElEKCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJPbGRJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFSLklEKSByZXR1cm47XHJcbiAgICBSLmN1cnJlbnQgPSAtMTtcclxuICAgIFIuSUQucmVzZXQoKTtcclxuICAgIFIuSUQgPSBudWxsO1xyXG4gICAgUi5jdXJzb3IoKTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBHVUkgLyBHUk9VUCBGVU5DVElPTlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY2FsY1VpczogKHVpcywgem9uZSwgcHksIGdyb3VwID0gZmFsc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2NhbGNfdWlzJylcclxuXHJcbiAgICBsZXQgaSA9IHVpcy5sZW5ndGgsXHJcbiAgICAgIHUsXHJcbiAgICAgIHB4ID0gMCxcclxuICAgICAgbiA9IDAsXHJcbiAgICAgIHR3LFxyXG4gICAgICBtLFxyXG4gICAgICBkaXY7XHJcblxyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gdWlzW25dO1xyXG4gICAgICBuKys7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwICYmIHUuaXNHcm91cCkgdS5jYWxjVWlzKCk7XHJcblxyXG4gICAgICBtID0gdS5tYXJnaW47XHJcbiAgICAgIC8vZGl2ID0gdS5tYXJnaW5EaXZcclxuXHJcbiAgICAgIHUuem9uZS53ID0gdS53O1xyXG4gICAgICB1LnpvbmUuaCA9IHUuaCArIG07XHJcblxyXG4gICAgICBpZiAoIXUuYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgaWYgKHB4ID09PSAwKSBoZWlnaHQgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyBweDtcclxuICAgICAgICB1LnpvbmUueSA9IHB5OyAvLyArIHUubXRvcFxyXG4gICAgICAgIC8vaWYoZGl2KSB1LnpvbmUueSArPSBtICogMC41XHJcblxyXG4gICAgICAgIHR3ID0gUi5nZXRXaWR0aCh1KTtcclxuICAgICAgICBpZiAodHcpIHUuem9uZS53ID0gdS53ID0gdHc7XHJcbiAgICAgICAgZWxzZSBpZiAodS5mdykgdS56b25lLncgPSB1LncgPSB1LmZ3O1xyXG5cclxuICAgICAgICBweCArPSB1LnpvbmUudztcclxuXHJcbiAgICAgICAgaWYgKHB4ID49IHpvbmUudykge1xyXG4gICAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuICAgICAgICAgIC8vaWYoZGl2KSBweSArPSBtICogMC41XHJcbiAgICAgICAgICBweCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB4ID0gMDtcclxuXHJcbiAgICAgICAgdS56b25lLnggPSB6b25lLnggKyB1LmR4O1xyXG4gICAgICAgIHUuem9uZS55ID0gcHk7XHJcbiAgICAgICAgcHkgKz0gdS5oICsgbTtcclxuXHJcbiAgICAgICAgaGVpZ2h0ICs9IHUuaCArIG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH0sXHJcblxyXG4gIGZpbmRUYXJnZXQ6IGZ1bmN0aW9uICh1aXMsIGUpIHtcclxuICAgIGxldCBpID0gdWlzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGlmIChSLm9uWm9uZSh1aXNbaV0sIGUuY2xpZW50WCwgZS5jbGllbnRZKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGZpbmRab25lOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgIGlmICghUi5uZWVkUmVab25lICYmICFmb3JjZSkgcmV0dXJuO1xyXG5cclxuICAgIHZhciBpID0gUi51aS5sZW5ndGgsXHJcbiAgICAgIHU7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB1ID0gUi51aVtpXTtcclxuICAgICAgUi5nZXRab25lKHUpO1xyXG4gICAgICBpZiAodS5pc0d1aSkgdS5jYWxjVWlzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5uZWVkUmVab25lID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgb25ab25lOiBmdW5jdGlvbiAobywgeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgeiA9IG8uem9uZTtcclxuICAgIGxldCBteCA9IHggLSB6Lng7IC8vIC0gby5keDtcclxuICAgIGxldCBteSA9IHkgLSB6Lnk7XHJcblxyXG4gICAgLy9pZiggdGhpcy5tYXJnaW5EaXYgKSBlLmNsaWVudFkgLT0gdGhpcy5tYXJnaW4gKiAwLjVcclxuICAgIC8vaWYoIG8uZ3JvdXAgJiYgby5ncm91cC5tYXJnaW5EaXYgKSBteSArPSBvLmdyb3VwLm1hcmdpbiAqIDAuNVxyXG4gICAgLy9pZiggby5ncm91cCAhPT0gbnVsbCApIG14IC09IG8uZHhcclxuXHJcbiAgICBsZXQgb3ZlciA9IG14ID49IDAgJiYgbXkgPj0gMCAmJiBteCA8PSB6LncgJiYgbXkgPD0gei5oO1xyXG5cclxuICAgIC8vaWYoIG8ubWFyZ2luRGl2ICkgbXkgLT0gby5tYXJnaW4gKiAwLjVcclxuXHJcbiAgICBpZiAob3Zlcikgby5sb2NhbC5zZXQobXgsIG15KTtcclxuICAgIGVsc2Ugby5sb2NhbC5uZWcoKTtcclxuXHJcbiAgICByZXR1cm4gb3ZlcjtcclxuICB9LFxyXG5cclxuICBnZXRXaWR0aDogZnVuY3Rpb24gKG8pIHtcclxuICAgIC8vcmV0dXJuIG8uZ2V0RG9tKCkub2Zmc2V0V2lkdGhcclxuICAgIHJldHVybiBvLmdldERvbSgpLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIC8vbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgLy9yZXR1cm4gKHIud2lkdGgpXHJcbiAgICAvL3JldHVybiBNYXRoLmZsb29yKHIud2lkdGgpXHJcbiAgfSxcclxuXHJcbiAgZ2V0Wm9uZTogZnVuY3Rpb24gKG8pIHtcclxuICAgIGlmIChvLmlzQ2FudmFzT25seSkgcmV0dXJuO1xyXG4gICAgbGV0IHIgPSBvLmdldERvbSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vaWYoICFyLndpZHRoICkgcmV0dXJuXHJcbiAgICAvL28uem9uZSA9IHsgeDpNYXRoLmZsb29yKHIubGVmdCksIHk6TWF0aC5mbG9vcihyLnRvcCksIHc6TWF0aC5mbG9vcihyLndpZHRoKSwgaDpNYXRoLmZsb29yKHIuaGVpZ2h0KSB9O1xyXG4gICAgLy9vLnpvbmUgPSB7IHg6TWF0aC5yb3VuZChyLmxlZnQpLCB5Ok1hdGgucm91bmQoci50b3ApLCB3Ok1hdGgucm91bmQoci53aWR0aCksIGg6TWF0aC5yb3VuZChyLmhlaWdodCkgfTtcclxuICAgIG8uem9uZSA9IHsgeDogci5sZWZ0LCB5OiByLnRvcCwgdzogci53aWR0aCwgaDogci5oZWlnaHQgfTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKG8ubmFtZSwgby56b25lKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIENVUlNPUlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY3Vyc29yOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogXCJhdXRvXCI7XHJcbiAgICBpZiAobmFtZSAhPT0gUi5vbGRDdXJzb3IpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBuYW1lO1xyXG4gICAgICBSLm9sZEN1cnNvciA9IG5hbWU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB0b0NhbnZhczogZnVuY3Rpb24gKG8sIHcsIGgsIGZvcmNlKSB7XHJcbiAgICBpZiAoIVIueG1sc2VyaWFsaXplcikgUi54bWxzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuXHJcbiAgICAvLyBwcmV2ZW50IGV4ZXNpdmUgcmVkcmF3XHJcblxyXG4gICAgaWYgKGZvcmNlICYmIFIudG1wVGltZSAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoUi50bXBUaW1lKTtcclxuICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoUi50bXBUaW1lICE9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFIubG9jaylcclxuICAgICAgUi50bXBUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgUi50bXBUaW1lID0gbnVsbDtcclxuICAgICAgfSwgMTApO1xyXG5cclxuICAgIC8vL1xyXG5cclxuICAgIGxldCBpc05ld1NpemUgPSBmYWxzZTtcclxuICAgIGlmICh3ICE9PSBvLmNhbnZhcy53aWR0aCB8fCBoICE9PSBvLmNhbnZhcy5oZWlnaHQpIGlzTmV3U2l6ZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKFIudG1wSW1hZ2UgPT09IG51bGwpIFIudG1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaW1nID0gUi50bXBJbWFnZTsgLy9uZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBsZXQgaHRtbFN0cmluZyA9IFIueG1sc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhvLmNvbnRlbnQpO1xyXG5cclxuICAgIGxldCBzdmcgPVxyXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcclxuICAgICAgdyArXHJcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcclxuICAgICAgaCArXHJcbiAgICAgICdcIj48Zm9yZWlnbk9iamVjdCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lOyBsZWZ0OjA7XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicgK1xyXG4gICAgICBodG1sU3RyaW5nICtcclxuICAgICAgXCI8L2ZvcmVpZ25PYmplY3Q+PC9zdmc+XCI7XHJcblxyXG4gICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbGV0IGN0eCA9IG8uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgIGlmIChpc05ld1NpemUpIHtcclxuICAgICAgICBvLmNhbnZhcy53aWR0aCA9IHc7XHJcbiAgICAgICAgby5jYW52YXMuaGVpZ2h0ID0gaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcywgMCwgMCk7XHJcblxyXG4gICAgICBvLm9uRHJhdygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmcpO1xyXG4gICAgLy9pbWcuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJysgd2luZG93LmJ0b2EoIHN2ZyApO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gXCJcIjtcclxuICAgIFIubmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0SGlkZGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoUi5oaWRkZW5JbXB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAvL2xldCBjc3MgPSBSLnBhcmVudC5jc3MudHh0c2VsZWN0ICsgJ3BhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87ICdcclxuICAgICAgLy9sZXQgY3NzID0gUi5wYXJlbnQuY3NzLnR4dCArICdwYWRkaW5nOjA7IHdpZHRoOmF1dG87IGhlaWdodDphdXRvOyB0ZXh0LXNoYWRvdzpub25lOydcclxuICAgICAgLy9jc3MgKz0gJ2xlZnQ6MTBweDsgdG9wOmF1dG87IGJvcmRlcjpub25lOyBjb2xvcjojRkZGOyBiYWNrZ3JvdW5kOiMwMDA7JyArIGhpZGU7XHJcblxyXG4gICAgICBSLmhpZGRlbkltcHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgLy9SLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjMwcHg7JyArIChSLmRlYnVnSW5wdXQgPyAnJyA6ICd0cmFuc2Zvcm06c2NhbGUoMCk7Jyk7XHJcblxyXG4gICAgICBSLmhpZGRlblNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgLy9SLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyAnYm90dG9tOjYwcHg7JztcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5JbXB1dCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUi5oaWRkZW5TaXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhpZGUgPSBSLmRlYnVnSW5wdXQgPyBcIlwiIDogXCJvcGFjaXR5OjA7IHpJbmRleDowO1wiO1xyXG4gICAgbGV0IGNzcyA9XHJcbiAgICAgIFIucGFyZW50LmNzcy50eHRzZWxlY3QgK1xyXG4gICAgICBcInBhZGRpbmc6MDsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGxlZnQ6MTBweDsgdG9wOmF1dG87IGNvbG9yOiNGRkY7IGJhY2tncm91bmQ6IzAwMDtcIiArXHJcbiAgICAgIGhpZGU7XHJcbiAgICBSLmhpZGRlbkltcHV0LnN0eWxlLmNzc1RleHQgPVxyXG4gICAgICBjc3MgKyBcImJvdHRvbToxMHB4O1wiICsgKFIuZGVidWdJbnB1dCA/IFwiXCIgOiBcInRyYW5zZm9ybTpzY2FsZSgwKTtcIik7XHJcbiAgICBSLmhpZGRlblNpemVyLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcImJvdHRvbTo0MHB4O1wiO1xyXG5cclxuICAgIFIuaGlkZGVuSW1wdXQuc3R5bGUud2lkdGggPSBSLmlucHV0LmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG4gICAgUi5oaWRkZW5JbXB1dC52YWx1ZSA9IFIuc3RyO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSBSLnN0cjtcclxuXHJcbiAgICBSLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBjbGVhckhpZGRlbjogZnVuY3Rpb24gKHApIHtcclxuICAgIGlmIChSLmhpZGRlbkltcHV0ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBSLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgfSxcclxuXHJcbiAgY2xpY2tQb3M6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICBsZXQgaSA9IFIuc3RyLmxlbmd0aCxcclxuICAgICAgbCA9IDAsXHJcbiAgICAgIG4gPSAwO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBsICs9IFIudGV4dFdpZHRoKFIuc3RyW25dKTtcclxuICAgICAgaWYgKGwgPj0geCkgYnJlYWs7XHJcbiAgICAgIG4rKztcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH0sXHJcblxyXG4gIHVwSW5wdXQ6IGZ1bmN0aW9uICh4LCBkb3duKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZG93bikge1xyXG4gICAgICBsZXQgaWQgPSBSLmNsaWNrUG9zKHgpO1xyXG5cclxuICAgICAgUi5tb3ZlWCA9IGlkO1xyXG5cclxuICAgICAgaWYgKFIuc3RhcnRYID09PSAtMSkge1xyXG4gICAgICAgIFIuc3RhcnRYID0gaWQ7XHJcbiAgICAgICAgUi5jdXJzb3JJZCA9IGlkO1xyXG4gICAgICAgIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5zdGFydFhdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IFIubW92ZVggIT09IFIuc3RhcnRYO1xyXG5cclxuICAgICAgICBpZiAoaXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGlmIChSLnN0YXJ0WCA+IFIubW92ZVgpIFIuaW5wdXRSYW5nZSA9IFtSLm1vdmVYLCBSLnN0YXJ0WF07XHJcbiAgICAgICAgICBlbHNlIFIuaW5wdXRSYW5nZSA9IFtSLnN0YXJ0WCwgUi5tb3ZlWF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoUi5zdGFydFggIT09IC0xKSB7XHJcbiAgICAgICAgUi5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQgPSBSLmlucHV0UmFuZ2VbMF07XHJcbiAgICAgICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmQgPSBSLmlucHV0UmFuZ2VbMV07XHJcbiAgICAgICAgUi5zdGFydFggPSAtMTtcclxuXHJcbiAgICAgICAgdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwKSBSLnNlbGVjdFBhcmVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cDtcclxuICB9LFxyXG5cclxuICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghUi5wYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICBSLnN0ciA9IFIuaW5wdXQudGV4dENvbnRlbnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbMCwgUi5zdHIubGVuZ3RoXTtcclxuICAgIFIuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5mb2N1cygpO1xyXG4gICAgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCA9IFIuaW5wdXRSYW5nZVswXTtcclxuICAgIFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uRW5kID0gUi5pbnB1dFJhbmdlWzFdO1xyXG4gICAgUi5jdXJzb3JJZCA9IFIuaW5wdXRSYW5nZVsxXTtcclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcbiAgfSxcclxuXHJcbiAgc2VsZWN0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYyA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmN1cnNvcklkKSk7XHJcbiAgICB2YXIgZSA9IFIudGV4dFdpZHRoKFIuc3RyLnN1YnN0cmluZygwLCBSLmlucHV0UmFuZ2VbMF0pKTtcclxuICAgIHZhciBzID0gUi50ZXh0V2lkdGgoUi5zdHIuc3Vic3RyaW5nKFIuaW5wdXRSYW5nZVswXSwgUi5pbnB1dFJhbmdlWzFdKSk7XHJcblxyXG4gICAgUi5wYXJlbnQuc2VsZWN0KGMsIGUsIHMsIFIuaGlkZGVuU2l6ZXIuaW5uZXJIVE1MKTtcclxuICB9LFxyXG5cclxuICB0ZXh0V2lkdGg6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICBpZiAoUi5oaWRkZW5TaXplciA9PT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xyXG4gICAgUi5oaWRkZW5TaXplci5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgcmV0dXJuIFIuaGlkZGVuU2l6ZXIuY2xpZW50V2lkdGg7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXJJbnB1dDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKFIucGFyZW50ID09PSBudWxsKSByZXR1cm47XHJcbiAgICBpZiAoIVIuZmlyc3RJbXB1dCkgUi5wYXJlbnQudmFsaWRhdGUodHJ1ZSk7XHJcblxyXG4gICAgUi5jbGVhckhpZGRlbigpO1xyXG4gICAgUi5wYXJlbnQudW5zZWxlY3QoKTtcclxuXHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5ib3JkZXI7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dDtcclxuICAgIFIucGFyZW50LmlzRWRpdCA9IGZhbHNlO1xyXG5cclxuICAgIFIuaW5wdXQgPSBudWxsO1xyXG4gICAgUi5wYXJlbnQgPSBudWxsO1xyXG4gICAgKFIuc3RyID0gXCJcIiksIChSLmZpcnN0SW1wdXQgPSB0cnVlKTtcclxuICB9LFxyXG5cclxuICBzZXRJbnB1dDogZnVuY3Rpb24gKElucHV0LCBwYXJlbnQpIHtcclxuICAgIFIuY2xlYXJJbnB1dCgpO1xyXG5cclxuICAgIFIuaW5wdXQgPSBJbnB1dDtcclxuICAgIFIucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgIFIuaW5wdXQuc3R5bGUuYmFja2dyb3VuZCA9IFIucGFyZW50LmNvbG9ycy5iYWNrb2ZmO1xyXG4gICAgUi5pbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IFIucGFyZW50LmNvbG9ycy5zZWxlY3Q7XHJcbiAgICAvL1IuaW5wdXQuc3R5bGUuY29sb3IgPSBSLnBhcmVudC5jb2xvcnMudGV4dFNlbGVjdDtcclxuICAgIFIuc3RyID0gUi5pbnB1dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICBSLnNldEhpZGRlbigpO1xyXG4gIH0sXHJcblxyXG4gIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICBpZiAoUi5wYXJlbnQgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQga2V5Q29kZSA9IGUud2hpY2gsXHJcbiAgICAgIGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coIGtleUNvZGUgKVxyXG5cclxuICAgIFIuZmlyc3RJbXB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChSLmhhc0ZvY3VzKSB7XHJcbiAgICAgIC8vIGhhY2sgdG8gZml4IHRvdWNoIGV2ZW50IGJ1ZyBpbiBpT1MgU2FmYXJpXHJcbiAgICAgIHdpbmRvdy5mb2N1cygpO1xyXG4gICAgICBSLmhpZGRlbkltcHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgUi5wYXJlbnQuaXNFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEN0cmwvQ21kK0Egc2VsZWN0aW9uXHJcbiAgICAvL2lmICgga2V5Q29kZSA9PT0gNjUgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgKSkge1xyXG4gICAgLy9SLnNlbGVjdFRleHQoKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy9yZXR1cm4gc2VsZi5yZW5kZXIoKTtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvL2VudGVyXHJcblxyXG4gICAgICBSLmNsZWFySW5wdXQoKTtcclxuXHJcbiAgICAgIC8vfSBlbHNlIGlmKCBrZXlDb2RlID09PSA5ICl7IC8vdGFiIGtleVxyXG5cclxuICAgICAgLy8gUi5pbnB1dC50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFIuaW5wdXQuaXNOdW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gNDcgJiYgZS5rZXlDb2RlIDwgNTgpIHx8XHJcbiAgICAgICAgICAoZS5rZXlDb2RlID4gOTUgJiYgZS5rZXlDb2RlIDwgMTA2KSB8fFxyXG4gICAgICAgICAgZS5rZXlDb2RlID09PSAxOTAgfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTEwIHx8XHJcbiAgICAgICAgICBlLmtleUNvZGUgPT09IDggfHxcclxuICAgICAgICAgIGUua2V5Q29kZSA9PT0gMTA5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFIuaGlkZGVuSW1wdXQucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBSLmhpZGRlbkltcHV0LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBrZXl1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmIChSLnBhcmVudCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIFIuc3RyID0gUi5oaWRkZW5JbXB1dC52YWx1ZTtcclxuXHJcbiAgICBpZiAoUi5wYXJlbnQuYWxsRXF1YWwpIFIucGFyZW50LnNhbWVTdHIoUi5zdHIpOyAvLyBudW1lcmljIHNhbcO5ZSB2YWx1ZVxyXG4gICAgZWxzZSBSLmlucHV0LnRleHRDb250ZW50ID0gUi5zdHI7XHJcblxyXG4gICAgUi5jdXJzb3JJZCA9IFIuaGlkZGVuSW1wdXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBSLmlucHV0UmFuZ2UgPSBbUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25TdGFydCwgUi5oaWRkZW5JbXB1dC5zZWxlY3Rpb25FbmRdO1xyXG5cclxuICAgIFIuc2VsZWN0UGFyZW50KCk7XHJcblxyXG4gICAgLy9pZiggUi5wYXJlbnQuYWxsd2F5IClcclxuICAgIFIucGFyZW50LnZhbGlkYXRlKCk7XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gICBMSVNURU5JTkdcclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLypcclxuICAgIC8vIGVzdGEgZXJhIGxhIGZ1bmNpb24gb3JpZ2luYWxcclxuICAgIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgaWYoIFIuaXNMb29wICkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBSLmxvb3AgKTtcclxuICAgICAgICBSLnVwZGF0ZSgpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICovXHJcblxyXG4gIGxvb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIG1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIGlmIChSLmlzTG9vcCkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIubG9vcCk7XHJcbiAgICBSLm5lZWRzVXBkYXRlID0gUi51cGRhdGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgdmFsdWUgZ2VuZXJhdGVkIGV4dGVybmFsbHksIHRoZSBHVUkgbmVlZHMgdG8gYmUgcmVkcmF3blxyXG4gICAgaWYgKFIudWlbMF0gJiYgUi5uZWVkc1VwZGF0ZSkgUi51aVswXS5kcmF3KCk7XHJcbiAgfSxcclxuXHJcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBtb2RpZmllZCBieSBGZWRlbWFyaW5vXHJcbiAgICBsZXQgaSA9IFIubGlzdGVucy5sZW5ndGg7XHJcbiAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgLy9jaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBoYXMgY2hhbmdlZFxyXG4gICAgICBsZXQgaGFzQ2hhbmdlZCA9IFIubGlzdGVuc1tpXS5saXN0ZW5pbmcoKTtcclxuICAgICAgaWYgKGhhc0NoYW5nZWQpIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZWVkc1VwZGF0ZTtcclxuICB9LFxyXG5cclxuICByZW1vdmVMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG4gICAgaWYgKGlkICE9PSAtMSkgUi5saXN0ZW5zLnNwbGljZShpZCwgMSk7XHJcbiAgICBpZiAoUi5saXN0ZW5zLmxlbmd0aCA9PT0gMCkgUi5pc0xvb3AgPSBmYWxzZTtcclxuICB9LFxyXG5cclxuICBhZGRMaXN0ZW46IGZ1bmN0aW9uIChwcm90bykge1xyXG4gICAgbGV0IGlkID0gUi5saXN0ZW5zLmluZGV4T2YocHJvdG8pO1xyXG5cclxuICAgIGlmIChpZCAhPT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBSLmxpc3RlbnMucHVzaChwcm90byk7XHJcblxyXG4gICAgaWYgKCFSLmlzTG9vcCkge1xyXG4gICAgICBSLmlzTG9vcCA9IHRydWU7XHJcbiAgICAgIFIubG9vcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUm9vdHMgPSBSO1xyXG4iLCIvKipcclxuICogQGF1dGhvciBsdGggLyBodHRwczovL2dpdGh1Yi5jb20vbG8tdGhcclxuICovXHJcblxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4vUm9vdHMuanMnO1xyXG5cclxuY29uc3QgVCA9IHtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiAwLjIsXHJcblxyXG4gICAgZnJhZzogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cclxuICAgIGNvbG9yUmluZzogbnVsbCxcclxuICAgIGpveXN0aWNrXzA6IG51bGwsXHJcbiAgICBqb3lzdGlja18xOiBudWxsLFxyXG4gICAgY2lyY3VsYXI6IG51bGwsXHJcbiAgICBrbm9iOiBudWxsLFxyXG4gICAgcGFkMmQ6IG51bGwsXHJcblxyXG4gICAgc3ZnbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgIGxpbmtzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcclxuICAgIGh0bWxzOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcclxuXHJcbiAgICBET01fU0laRTogWyAnaGVpZ2h0JywgJ3dpZHRoJywgJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCcsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tYm90dG9tJ10sXHJcbiAgICBTVkdfVFlQRV9EOiBbICdwYXR0ZXJuJywgJ2RlZnMnLCAndHJhbnNmb3JtJywgJ3N0b3AnLCAnYW5pbWF0ZScsICdyYWRpYWxHcmFkaWVudCcsICdsaW5lYXJHcmFkaWVudCcsICdhbmltYXRlTW90aW9uJywgJ3VzZScsICdmaWx0ZXInLCAnZmVDb2xvck1hdHJpeCcgXSxcclxuICAgIFNWR19UWVBFX0c6IFsgJ3N2ZycsICdyZWN0JywgJ2NpcmNsZScsICdwYXRoJywgJ3BvbHlnb24nLCAndGV4dCcsICdnJywgJ2xpbmUnLCAnZm9yZWlnbk9iamVjdCcgXSxcclxuXHJcbiAgICBQSTogTWF0aC5QSSxcclxuICAgIFR3b1BJOiBNYXRoLlBJKjIsXHJcbiAgICBwaTkwOiBNYXRoLlBJICogMC41LFxyXG4gICAgcGk2MDogTWF0aC5QSS8zLFxyXG4gICAgXHJcbiAgICB0b3JhZDogTWF0aC5QSSAvIDE4MCxcclxuICAgIHRvZGVnOiAxODAgLyBNYXRoLlBJLFxyXG5cclxuICAgIGNsYW1wOiAoIHYsIG1pbiwgbWF4ICkgPT4ge1xyXG5cclxuICAgICAgICB2ID0gdiA8IG1pbiA/IG1pbiA6IHY7XHJcbiAgICAgICAgdiA9IHYgPiBtYXggPyBtYXggOiB2O1xyXG4gICAgICAgIHJldHVybiB2O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXZpZDogKCB2ICkgPT4gKCB2KjAuNSA9PT0gTWF0aC5mbG9vcih2KjAuNSkgKSxcclxuXHJcbiAgICBzaXplOiB7ICB3OiAyNDAsIGg6IDIwLCBwOiAzMCwgczogOCB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ09MT1JcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBkZWZpbmVDb2xvcjogKCBvLCBjYyA9IFQuY29sb3JzICkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY29sb3IgPSB7IC4uLmNjIH1cclxuXHJcbiAgICAgICAgbGV0IHRleHRDaGFuZ2UgPSBbJ2ZvbnRGYW1pbHknLCAnZm9udFdlaWdodCcsICdmb250U2hhZG93JywgJ2ZvbnRTaXplJyBdXHJcbiAgICAgICAgbGV0IGNoYW5nZVRleHQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiggby5mb250ICkgby5mb250RmFtaWx5ID0gby5mb250XHJcbiAgICAgICAgaWYoIG8uc2hhZG93ICkgby5mb250U2hhZG93ID0gby5zaGFkb3dcclxuICAgICAgICBpZiggby53ZWlnaHQgKSBvLmZvbnRXZWlnaHQgPSBvLndlaWdodFxyXG5cclxuICAgICAgICBpZiggby5mb250Q29sb3IgKSBvLnRleHQgPSBvLmZvbnRDb2xvclxyXG4gICAgICAgIGlmKCBvLmNvbG9yICkgby50ZXh0ID0gby5jb2xvclxyXG5cclxuICAgICAgICBpZiggby50ZXh0ICl7XHJcbiAgICAgICAgICAgIGNvbG9yLnRleHQgPSBvLnRleHRcclxuICAgICAgICAgICAgaWYoICFvLmZvbnRDb2xvciAmJiAhby5jb2xvciApeyBcclxuICAgICAgICAgICAgICAgIGNvbG9yLnRpdGxlID0gVC5Db2xvckx1bWEoIG8udGV4dCwgLTAuMjUgKVxyXG4gICAgICAgICAgICAgICAgY29sb3IudGl0bGVvZmYgPSBULkNvbG9yTHVtYSggby50ZXh0LCAtMC41IClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0T3ZlciA9IFQuQ29sb3JMdW1hKCBvLnRleHQsIDAuMjUgKVxyXG4gICAgICAgICAgICBjb2xvci50ZXh0U2VsZWN0ID0gVC5Db2xvckx1bWEoIG8udGV4dCwgMC41IClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBvLmJ1dHRvbiApe1xyXG4gICAgICAgICAgICBjb2xvci5idXR0b24gPSBvLmJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvci5ib3JkZXIgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMSApXHJcbiAgICAgICAgICAgIGNvbG9yLm92ZXJvZmYgPSBULkNvbG9yTHVtYSggby5idXR0b24sIDAuMiApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5zZWxlY3QgKXtcclxuICAgICAgICAgICAgY29sb3Iuc2VsZWN0ID0gby5zZWxlY3RcclxuICAgICAgICAgICAgY29sb3Iub3ZlciA9IFQuQ29sb3JMdW1hKCBvLnNlbGVjdCwgLTAuMSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggby5pdGVtQmcgKSBvLmJhY2sgPSBvLml0ZW1CZ1xyXG5cclxuICAgICAgICBpZiggby5iYWNrICl7XHJcbiAgICAgICAgICAgIGNvbG9yLmJhY2sgPSBvLmJhY2tcclxuICAgICAgICAgICAgY29sb3IuYmFja29mZiA9IFQuQ29sb3JMdW1hKCBvLmJhY2ssIC0wLjEgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIG8uZm9udFNlbGVjdCApIGNvbG9yLnRleHRTZWxlY3QgPSBvLmZvbnRTZWxlY3RcclxuICAgICAgICBpZiggby5ncm91cEJvcmRlciApIGNvbG9yLmdib3JkZXIgPSBvLmdyb3VwQm9yZGVyXHJcblxyXG4gICAgICAgIC8vaWYoIG8udHJhbnNwYXJlbnQgKSBvLmJnID0gJ25vbmUnXHJcbiAgICAgICAgLy9pZiggby5iZyApIGNvbG9yLmJhY2tncm91bmQgPSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdcclxuICAgICAgICBpZiggby5iZ092ZXIgKSBjb2xvci5iYWNrZ3JvdW5kT3ZlciA9IG8uYmdPdmVyXHJcblxyXG4gICAgICAgIGZvciggbGV0IG0gaW4gY29sb3IgKXtcclxuICAgICAgICAgICAgaWYob1ttXSE9PXVuZGVmaW5lZCkgY29sb3JbbV0gPSBvW21dXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoIGxldCBtIGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIHRleHRDaGFuZ2UuaW5kZXhPZihtKSAhPT0gLTEgKSBjaGFuZ2VUZXh0ID0gdHJ1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjaGFuZ2VUZXh0ICkgVC5kZWZpbmVUZXh0KCBjb2xvciApXHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY29sb3JzOiB7XHJcblxyXG4gICAgICAgIHN4OiA0LC8vNFxyXG4gICAgICAgIHN5OiAyLC8vMlxyXG4gICAgICAgIHJhZGl1czoyLFxyXG5cclxuICAgICAgICBzaG93T3ZlciA6IDEsXHJcbiAgICAgICAgLy9ncm91cE92ZXIgOiAxLFxyXG5cclxuICAgICAgICBjb250ZW50Oidub25lJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSg1MCw1MCw1MCwwLjE1KScsXHJcbiAgICAgICAgYmFja2dyb3VuZE92ZXI6ICdyZ2JhKDUwLDUwLDUwLDAuMyknLFxyXG5cclxuICAgICAgICB0aXRsZSA6ICcjQ0NDJyxcclxuICAgICAgICB0aXRsZW9mZiA6ICcjQkJCJyxcclxuICAgICAgICB0ZXh0IDogJyNEREQnLFxyXG4gICAgICAgIHRleHRPdmVyIDogJyNFRUUnLFxyXG4gICAgICAgIHRleHRTZWxlY3QgOiAnI0ZGRicsXHJcbiAgICAgICAgXHJcbiAgICAgICAgYmFjazoncmdiYSgwLDAsMCwwLjIpJyxcclxuICAgICAgICBiYWNrb2ZmOidyZ2JhKDAsMCwwLDAuMyknLFxyXG5cclxuICAgICAgICAvLyBpbnB1dCBhbmQgYnV0dG9uIGJvcmRlclxyXG4gICAgICAgIGJvcmRlciA6ICcjNGM0YzRjJyxcclxuICAgICAgICBib3JkZXJTaXplIDogMSxcclxuXHJcbiAgICAgICAgZ2JvcmRlciA6ICdub25lJyxcclxuICAgICAgICBncm91cHMgOiAnbm9uZScsXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGJ1dHRvbiA6ICcjM2MzYzNjJyxcclxuICAgICAgICBvdmVyb2ZmIDogJyM1YzVjNWMnLFxyXG4gICAgICAgIG92ZXIgOiAnIzAyNDY5OScsXHJcbiAgICAgICAgc2VsZWN0IDogJyMzMDhBRkYnLFxyXG4gICAgICAgIGFjdGlvbjogJyNGRjMzMDAnLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogJ1RhaG9tYScsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ0NvbnNvbGFzLCBtb25vc3BhY2UnLFxyXG4gICAgICAgIC8vZm9udEZhbWlseTogXCInUm9ib3RvIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgIGZvbnRTaGFkb3c6ICdub25lJywvLycjMDAwJyxcclxuICAgICAgICBmb250U2l6ZToxMixcclxuXHJcbiAgICAgICAgam95T3ZlcjoncmdiYSg0OCwxMzgsMjU1LDAuMjUpJyxcclxuICAgICAgICBqb3lPdXQ6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuNSknLFxyXG4gICAgICAgIGpveVNlbGVjdDogJyMzMDhBRkYnLFxyXG5cclxuICAgICAgICBcclxuICAgICAgICBoaWRlOiAncmdiYSgwLDAsMCwwKScsXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzdHlsZSBjc3NcclxuXHJcbiAgICBjc3MgOiB7XHJcblxyXG4gICAgICAgIGJhc2ljOiAncG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgb3ZlcmZsb3c6aGlkZGVuOyAnICsgJy1vLXVzZXItc2VsZWN0Om5vbmU7IC1tcy11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7JyxcclxuICAgICAgICBidXR0b246J2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsnLFxyXG4gICAgICAgIG1pZGRsZTonZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpsZWZ0OyB0ZXh0LWFsaWduOmxlZnQ7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsnXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHN2ZyBwYXRoXHJcblxyXG4gICAgc3Znczoge1xyXG5cclxuICAgICAgICBnMTonTSA2IDQgTCAwIDQgMCA2IDYgNiA2IDQgTSA2IDAgTCAwIDAgMCAyIDYgMiA2IDAgWicsXHJcbiAgICAgICAgZzI6J00gNiAwIEwgNCAwIDQgNiA2IDYgNiAwIE0gMiAwIEwgMCAwIDAgNiAyIDYgMiAwIFonLFxyXG5cclxuICAgICAgICBncm91cDonTSA3IDcgTCA3IDggOCA4IDggNyA3IDcgTSA1IDcgTCA1IDggNiA4IDYgNyA1IDcgTSAzIDcgTCAzIDggNCA4IDQgNyAzIDcgTSA3IDUgTCA3IDYgOCA2IDggNSA3IDUgTSA2IDYgTCA2IDUgNSA1IDUgNiA2IDYgTSA3IDMgTCA3IDQgOCA0IDggMyA3IDMgTSA2IDQgTCA2IDMgNSAzIDUgNCA2IDQgTSAzIDUgTCAzIDYgNCA2IDQgNSAzIDUgTSAzIDMgTCAzIDQgNCA0IDQgMyAzIDMgWicsXHJcbiAgICAgICAgYXJyb3c6J00gMyA4IEwgOCA1IDMgMiAzIDggWicsXHJcblxyXG4gICAgICAgIGFycm93RG93bjonTSA1IDggTCA4IDMgMiAzIDUgOCBaJyxcclxuICAgICAgICBhcnJvd1VwOidNIDUgMiBMIDIgNyA4IDcgNSAyIFonLFxyXG5cclxuICAgICAgICBzb2xpZDonTSAxMyAxMCBMIDEzIDEgNCAxIDEgNCAxIDEzIDEwIDEzIDEzIDEwIE0gMTEgMyBMIDExIDkgOSAxMSAzIDExIDMgNSA1IDMgMTEgMyBaJyxcclxuICAgICAgICBib2R5OidNIDEzIDEwIEwgMTMgMSA0IDEgMSA0IDEgMTMgMTAgMTMgMTMgMTAgTSAxMSAzIEwgMTEgOSA5IDExIDMgMTEgMyA1IDUgMyAxMSAzIE0gNSA0IEwgNCA1IDQgMTAgOSAxMCAxMCA5IDEwIDQgNSA0IFonLFxyXG4gICAgICAgIHZlaGljbGU6J00gMTMgNiBMIDExIDEgMyAxIDEgNiAxIDEzIDMgMTMgMyAxMSAxMSAxMSAxMSAxMyAxMyAxMyAxMyA2IE0gMi40IDYgTCA0IDIgMTAgMiAxMS42IDYgMi40IDYgTSAxMiA4IEwgMTIgMTAgMTAgMTAgMTAgOCAxMiA4IE0gNCA4IEwgNCAxMCAyIDEwIDIgOCA0IDggWicsXHJcbiAgICAgICAgYXJ0aWN1bGF0aW9uOidNIDEzIDkgTCAxMiA5IDkgMiA5IDEgNSAxIDUgMiAyIDkgMSA5IDEgMTMgNSAxMyA1IDkgNCA5IDYgNSA4IDUgMTAgOSA5IDkgOSAxMyAxMyAxMyAxMyA5IFonLFxyXG4gICAgICAgIGNoYXJhY3RlcjonTSAxMyA0IEwgMTIgMyA5IDQgNSA0IDIgMyAxIDQgNSA2IDUgOCA0IDEzIDYgMTMgNyA5IDggMTMgMTAgMTMgOSA4IDkgNiAxMyA0IE0gNiAxIEwgNiAzIDggMyA4IDEgNiAxIFonLFxyXG4gICAgICAgIHRlcnJhaW46J00gMTMgOCBMIDEyIDcgUSA5LjA2IC0zLjY3IDUuOTUgNC44NSA0LjA0IDMuMjcgMiA3IEwgMSA4IDcgMTMgMTMgOCBNIDMgOCBRIDMuNzggNS40MjAgNS40IDYuNiA1LjIwIDcuMjUgNSA4IEwgNyA4IFEgOC4zOSAtMC4xNiAxMSA4IEwgNyAxMSAzIDggWicsXHJcbiAgICAgICAgam9pbnQ6J00gNy43IDcuNyBRIDggNy40NSA4IDcgOCA2LjYgNy43IDYuMyA3LjQ1IDYgNyA2IDYuNiA2IDYuMyA2LjMgNiA2LjYgNiA3IDYgNy40NSA2LjMgNy43IDYuNiA4IDcgOCA3LjQ1IDggNy43IDcuNyBNIDMuMzUgOC42NSBMIDEgMTEgMyAxMyA1LjM1IDEwLjY1IFEgNi4xIDExIDcgMTEgOC4yOCAxMSA5LjI1IDEwLjI1IEwgNy44IDguOCBRIDcuNDUgOSA3IDkgNi4xNSA5IDUuNTUgOC40IDUgNy44NSA1IDcgNSA2LjU0IDUuMTUgNi4xNSBMIDMuNyA0LjcgUSAzIDUuNzEyIDMgNyAzIDcuOSAzLjM1IDguNjUgTSAxMC4yNSA5LjI1IFEgMTEgOC4yOCAxMSA3IDExIDYuMSAxMC42NSA1LjM1IEwgMTMgMyAxMSAxIDguNjUgMy4zNSBRIDcuOSAzIDcgMyA1LjcgMyA0LjcgMy43IEwgNi4xNSA1LjE1IFEgNi41NCA1IDcgNSA3Ljg1IDUgOC40IDUuNTUgOSA2LjE1IDkgNyA5IDcuNDUgOC44IDcuOCBMIDEwLjI1IDkuMjUgWicsXHJcbiAgICAgICAgcmF5OidNIDkgMTEgTCA1IDExIDUgMTIgOSAxMiA5IDExIE0gMTIgNSBMIDExIDUgMTEgOSAxMiA5IDEyIDUgTSAxMS41IDEwIFEgMTAuOSAxMCAxMC40NSAxMC40NSAxMCAxMC45IDEwIDExLjUgMTAgMTIuMiAxMC40NSAxMi41NSAxMC45IDEzIDExLjUgMTMgMTIuMiAxMyAxMi41NSAxMi41NSAxMyAxMi4yIDEzIDExLjUgMTMgMTAuOSAxMi41NSAxMC40NSAxMi4yIDEwIDExLjUgMTAgTSA5IDEwIEwgMTAgOSAyIDEgMSAyIDkgMTAgWicsXHJcbiAgICAgICAgY29sbGlzaW9uOidNIDExIDEyIEwgMTMgMTAgMTAgNyAxMyA0IDExIDIgNy41IDUuNSA5IDcgNy41IDguNSAxMSAxMiBNIDMgMiBMIDEgNCA0IDcgMSAxMCAzIDEyIDggNyAzIDIgWicsXHJcbiAgICAgICAgbWFwOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIG1hdGVyaWFsOidNIDEzIDEgTCAxIDEgMSAxMyAxMyAxMyAxMyAxIE0gMTIgMiBMIDEyIDcgNyA3IDcgMTIgMiAxMiAyIDcgNyA3IDcgMiAxMiAyIFonLFxyXG4gICAgICAgIHRleHR1cmU6J00gMTMgNCBMIDEzIDEgMSAxIDEgNCA1IDQgNSAxMyA5IDEzIDkgNCAxMyA0IFonLFxyXG4gICAgICAgIG9iamVjdDonTSAxMCAxIEwgNyA0IDQgMSAxIDEgMSAxMyA0IDEzIDQgNSA3IDggMTAgNSAxMCAxMyAxMyAxMyAxMyAxIDEwIDEgWicsXHJcbiAgICAgICAgbm9uZTonTSA5IDUgTCA1IDUgNSA5IDkgOSA5IDUgWicsXHJcbiAgICAgICAgY3Vyc29yOidNIDQgNyBMIDEgMTAgMSAxMiAyIDEzIDQgMTMgNyAxMCA5IDE0IDE0IDAgMCA1IDQgNyBaJyxcclxuICAgICAgICBsb2FkOidNIDEzIDggTCAxMS41IDYuNSA5IDkgOSAzIDUgMyA1IDkgMi41IDYuNSAxIDggNyAxNCAxMyA4IE0gOSAyIEwgOSAwIDUgMCA1IDIgOSAyIFonLFxyXG4gICAgICAgIHNhdmU6J00gOSAxMiBMIDUgMTIgNSAxNCA5IDE0IDkgMTIgTSAxMS41IDcuNSBMIDEzIDYgNyAwIDEgNiAyLjUgNy41IDUgNSA1IDExIDkgMTEgOSA1IDExLjUgNy41IFonLFxyXG4gICAgICAgIGV4dGVybjonTSAxNCAxNCBMIDE0IDAgMCAwIDAgMTQgMTQgMTQgTSAxMiA2IEwgMTIgMTIgMiAxMiAyIDYgMTIgNiBNIDEyIDIgTCAxMiA0IDIgNCAyIDIgMTIgMiBaJyxcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlem9uZSAoKSB7XHJcbiAgICAgICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEltcHV0OiBmdW5jdGlvbigpe1xyXG5cclxuICAgICAgICByZXR1cm4gUm9vdHMuaW5wdXQgPyB0cnVlIDogZmFsc2VcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN0eWxlIDogZnVuY3Rpb24gKCBkYXRhICl7XHJcblxyXG4gICAgICAgIGZvciAoIHZhciBvIGluIGRhdGEgKXtcclxuICAgICAgICAgICAgaWYoIFQuY29sb3JzW29dICkgVC5jb2xvcnNbb10gPSBkYXRhW29dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgVC5zZXRUZXh0KCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBjdXN0b20gdGV4dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGRlZmluZVRleHQ6IGZ1bmN0aW9uKCBvICl7XHJcblxyXG4gICAgICAgIFQuc2V0VGV4dCggby5mb250U2l6ZSwgby50ZXh0LCBvLmZvbnRGYW1pbHksIG8uZm9udFNoYWRvdywgby5mb250V2VpZ2h0IClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRleHQ6IGZ1bmN0aW9uKCBzaXplLCBjb2xvciwgZm9udCwgc2hhZG93LCB3ZWlnaHQgKXtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gVC5jb2xvcnM7XHJcblxyXG4gICAgICAgIGlmKCBmb250ID09PSB1bmRlZmluZWQgKSBmb250ID0gY2MuZm9udEZhbWlseVxyXG4gICAgICAgIGlmKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gY2MuZm9udFNpemVcclxuICAgICAgICBpZiggc2hhZG93ID09PSB1bmRlZmluZWQgKSBzaGFkb3cgPSBjYy5mb250U2hhZG93XHJcbiAgICAgICAgaWYoIHdlaWdodCA9PT0gdW5kZWZpbmVkICkgd2VpZ2h0ID0gY2MuZm9udFdlaWdodFxyXG4gICAgICAgIGlmKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSBjYy50ZXh0XHJcblxyXG4gICAgICAgIGlmKCBpc05hTihzaXplKSApeyBpZiggc2l6ZS5zZWFyY2goJ2VtJyk9PT0tMSApIHNpemUgKz0gJ3B4J31cclxuICAgICAgICBlbHNlIHNpemUgKz0gJ3B4J1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL2xldCBhbGlnbiA9ICdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpsZWZ0OyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246bGVmdDsnXHJcblxyXG4gICAgICAgIFQuY3NzLnR4dCA9IFQuY3NzLmJhc2ljICsgVC5jc3MubWlkZGxlICsgJyBmb250LWZhbWlseTonKyBmb250ICsnOyBmb250LXdlaWdodDonK3dlaWdodCsnOyBmb250LXNpemU6JytzaXplKyc7IGNvbG9yOicrY2MudGV4dCsnOyBwYWRkaW5nOjBweCA4cHg7IGxlZnQ6MDsgdG9wOjJweDsgaGVpZ2h0OjE2cHg7IHdpZHRoOjEwMHB4OyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7JztcclxuICAgICAgICBpZiggc2hhZG93ICE9PSAnbm9uZScgKSBULmNzcy50eHQgKz0gJyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggJytzaGFkb3crJzsnO1xyXG5cclxuICAgICAgICBULmNzcy50eHRzZWxlY3QgPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBib3JkZXI6MXB4IGRhc2hlZCAnICsgY2MuYm9yZGVyICsgJzsnO1xyXG4gICAgICAgIFQuY3NzLml0ZW0gPSBULmNzcy50eHQgKyAncGFkZGluZzowcHggNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxcHg7ICdcclxuXHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyBub3RlXHJcblxyXG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9DU1MvY3NzX2ZsZXhpYmxlX2JveF9sYXlvdXQvYWxpZ25pbmdfaXRlbXNfaW5fYV9mbGV4X2NvbnRhaW5lclxyXG5cclxuICAgIC8qY2xvbmVDb2xvcjogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNvbG9ycyApO1xyXG4gICAgICAgIHJldHVybiBjYztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgLy8gaW50ZXJuIGZ1bmN0aW9uXHJcblxyXG4gICAgY2xvbmVDc3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgLy9sZXQgY2MgPSBPYmplY3QuYXNzaWduKHt9LCBULmNzcyApO1xyXG4gICAgICAgIHJldHVybiB7IC4uLlQuY3NzIH07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCBvICkge1xyXG5cclxuICAgICAgICByZXR1cm4gby5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN2ZzogZnVuY3Rpb24oIGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIgKXtcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSAtMSApIGRvbS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGlmKCBpZDIgIT09IHVuZGVmaW5lZCApIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uY2hpbGROb2Rlc1sgaWQyIHx8IDAgXS5zZXRBdHRyaWJ1dGVOUyggbnVsbCwgdHlwZSwgdmFsdWUgKTtcclxuICAgICAgICBlbHNlIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF0uc2V0QXR0cmlidXRlTlMoIG51bGwsIHR5cGUsIHZhbHVlICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDc3M6IGZ1bmN0aW9uKCBkb20sIGNzcyApe1xyXG5cclxuICAgICAgICBmb3IoIGxldCByIGluIGNzcyApe1xyXG4gICAgICAgICAgICBpZiggVC5ET01fU0laRS5pbmRleE9mKHIpICE9PSAtMSApIGRvbS5zdHlsZVtyXSA9IGNzc1tyXSArICdweCc7XHJcbiAgICAgICAgICAgIGVsc2UgZG9tLnN0eWxlW3JdID0gY3NzW3JdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oIGcsIG8gKXtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgYXR0IGluIG8gKXtcclxuICAgICAgICAgICAgaWYoIGF0dCA9PT0gJ3R4dCcgKSBnLnRleHRDb250ZW50ID0gb1sgYXR0IF07XHJcbiAgICAgICAgICAgIGlmKCBhdHQgPT09ICdsaW5rJyApIGcuc2V0QXR0cmlidXRlTlMoIFQubGlua3MsICd4bGluazpocmVmJywgb1sgYXR0IF0gKTtcclxuICAgICAgICAgICAgZWxzZSBnLnNldEF0dHJpYnV0ZU5TKCBudWxsLCBhdHQsIG9bIGF0dCBdICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCBkb20sIGlkICl7XHJcblxyXG4gICAgICAgIGlmKCBpZCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuIGRvbTsgLy8gcm9vdFxyXG4gICAgICAgIGVsc2UgaWYoICFpc05hTiggaWQgKSApIHJldHVybiBkb20uY2hpbGROb2Rlc1sgaWQgXTsgLy8gZmlyc3QgY2hpbGRcclxuICAgICAgICBlbHNlIGlmKCBpZCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMikgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF07XHJcbiAgICAgICAgICAgIGlmKGlkLmxlbmd0aCA9PT0gMykgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZFswXSBdLmNoaWxkTm9kZXNbIGlkWzFdIF0uY2hpbGROb2Rlc1sgaWRbMl0gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBkb20gOiBmdW5jdGlvbiAoIHR5cGUsIGNzcywgb2JqLCBkb20sIGlkICkge1xyXG5cclxuICAgICAgICB0eXBlID0gdHlwZSB8fCAnZGl2JztcclxuXHJcbiAgICAgICAgaWYoIFQuU1ZHX1RZUEVfRC5pbmRleE9mKHR5cGUpICE9PSAtMSB8fCBULlNWR19UWVBFX0cuaW5kZXhPZih0eXBlKSAhPT0gLTEgKXsgLy8gaXMgc3ZnIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmKCB0eXBlID09PSdzdmcnICl7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5zZXQoIGRvbSwgb2JqICk7XHJcblxyXG4gICAgICAgICAgLyogIH0gZWxzZSBpZiAoIHR5cGUgPT09ICd1c2UnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5zdmducywgJ3VzZScgKTtcclxuICAgICAgICAgICAgICAgIFQuc2V0KCBkb20sIG9iaiApO1xyXG4qL1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzdmcgaWYgbm90IGRlZlxyXG4gICAgICAgICAgICAgICAgaWYoIGRvbSA9PT0gdW5kZWZpbmVkICkgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCBULnN2Z25zLCAnc3ZnJyApO1xyXG4gICAgICAgICAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBkb20sIHR5cGUsIG9iaiwgaWQgKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHsgLy8gaXMgaHRtbCBlbGVtZW50XHJcblxyXG4gICAgICAgICAgICBpZiggZG9tID09PSB1bmRlZmluZWQgKSBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuaHRtbHMsIHR5cGUgKTtcclxuICAgICAgICAgICAgZWxzZSBkb20gPSBkb20uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggVC5odG1scywgdHlwZSApICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGNzcyApIGRvbS5zdHlsZS5jc3NUZXh0ID0gY3NzOyBcclxuXHJcbiAgICAgICAgaWYoIGlkID09PSB1bmRlZmluZWQgKSByZXR1cm4gZG9tO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGRvbS5jaGlsZE5vZGVzWyBpZCB8fCAwIF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRBdHRyaWJ1dGVzIDogZnVuY3Rpb24oIGRvbSwgdHlwZSwgbywgaWQgKXtcclxuXHJcbiAgICAgICAgbGV0IGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIFQuc3ZnbnMsIHR5cGUgKTtcclxuICAgICAgICBULnNldCggZywgbyApO1xyXG4gICAgICAgIFQuZ2V0KCBkb20sIGlkICkuYXBwZW5kQ2hpbGQoIGcgKTtcclxuICAgICAgICBpZiggVC5TVkdfVFlQRV9HLmluZGV4T2YodHlwZSkgIT09IC0xICkgZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgIHJldHVybiBnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXIgOiBmdW5jdGlvbiggZG9tICl7XHJcblxyXG4gICAgICAgIFQucHVyZ2UoIGRvbSApO1xyXG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIGRvbS5maXJzdENoaWxkLmZpcnN0Q2hpbGQgKSBULmNsZWFyKCBkb20uZmlyc3RDaGlsZCApO1xyXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQoIGRvbS5maXJzdENoaWxkICk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHB1cmdlIDogZnVuY3Rpb24gKCBkb20gKSB7XHJcblxyXG4gICAgICAgIGxldCBhID0gZG9tLmF0dHJpYnV0ZXMsIGksIG47XHJcbiAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgICAgbiA9IGFbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tW25dID09PSAnZnVuY3Rpb24nKSBkb21bbl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGEgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICBpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlKGktLSl7IFxyXG4gICAgICAgICAgICAgICAgVC5wdXJnZSggZG9tLmNoaWxkTm9kZXNbaV0gKTsgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIFNWRyBFZmZlY3RzIGZ1bmN0aW9uXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYWRkU1ZHR2xvd0VmZmVjdDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnVUlMR2xvdycpICE9PSBudWxsICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gVC5pbml0VUlMRWZmZWN0cygpO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyID0gVC5hZGRBdHRyaWJ1dGVzKCBzdmdGaWx0ZXIsICdmaWx0ZXInLCB7IGlkOiAnVUlMR2xvdycsIHg6ICctMjAlJywgeTogJy0yMCUnLCB3aWR0aDogJzE0MCUnLCBoZWlnaHQ6ICcxNDAlJyB9ICk7XHJcbiAgICAgICAgVC5hZGRBdHRyaWJ1dGVzKCBmaWx0ZXIsICdmZUdhdXNzaWFuQmx1cicsIHsgaW46ICdTb3VyY2VHcmFwaGljJywgc3RkRGV2aWF0aW9uOiAnMycsIHJlc3VsdDogJ3VpbEJsdXInIH0gKTtcclxuICAgICAgICBsZXQgZmVNZXJnZSA9IFQuYWRkQXR0cmlidXRlcyggZmlsdGVyLCAnZmVNZXJnZScsIHsgIH0gKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8PSAzOyBpKysgKSB7XHJcblxyXG4gICAgICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICd1aWxCbHVyJyB9ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBULmFkZEF0dHJpYnV0ZXMoIGZlTWVyZ2UsICdmZU1lcmdlTm9kZScsIHsgaW46ICdTb3VyY2VHcmFwaGljJyB9ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0VUlMRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnRmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdVSUxTVkdFZmZlY3RzJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCBzdmdGaWx0ZXIgPT09IG51bGwgKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzdmdGaWx0ZXIgPSBULmRvbSggJ3N2ZycsIHVuZGVmaW5lZCAsIHsgaWQ6ICdVSUxTVkdFZmZlY3RzJywgd2lkdGg6ICcwJywgaGVpZ2h0OiAnMCcgfSApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBzdmdGaWx0ZXIgKTtcclxuIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN2Z0ZpbHRlcjtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgQ29sb3IgZnVuY3Rpb25cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBDb2xvckx1bWEgOiBmdW5jdGlvbiAoIGhleCwgbCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggaGV4LnN1YnN0cmluZygwLCAzKSA9PT0gJ3JnYmEnICkgaGV4ID0gJyMwMDAnO1xyXG5cclxuICAgICAgICBpZiggaGV4ID09PSAnbicgKSBoZXggPSAnIzAwMCc7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIGhleCBzdHJpbmdcclxuICAgICAgICBoZXggPSBTdHJpbmcoaGV4KS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksICcnKTtcclxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGwgPSBsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZGVjaW1hbCBhbmQgY2hhbmdlIGx1bWlub3NpdHlcclxuICAgICAgICBsZXQgcmdiID0gXCIjXCIsIGMsIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpKjIsMiksIDE2KTtcclxuICAgICAgICAgICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIChjICogbCkpLCAyNTUpKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIHJnYiArPSAoXCIwMFwiK2MpLnN1YnN0cihjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmdiO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZmluZERlZXBJbnZlcjogZnVuY3Rpb24gKCBjICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIChjWzBdICogMC4zICsgY1sxXSAqIC41OSArIGNbMl0gKiAuMTEpIDw9IDAuNjtcclxuICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgbGVycENvbG9yOiBmdW5jdGlvbiggYzEsIGMyLCBmYWN0b3IgKSB7XHJcbiAgICAgICAgbGV0IG5ld0NvbG9yID0ge307XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgMzsgaSsrICkge1xyXG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjMVsgaSBdICsgKCBjMlsgaSBdIC0gYzFbIGkgXSApICogZmFjdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3Q29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGhleFRvSHRtbDogZnVuY3Rpb24gKCB2ICkgeyBcclxuICAgICAgICB2ID0gdiA9PT0gdW5kZWZpbmVkID8gMHgwMDAwMDAgOiB2O1xyXG4gICAgICAgIHJldHVybiBcIiNcIiArIChcIjAwMDAwMFwiICsgdi50b1N0cmluZygxNikpLnN1YnN0cigtNik7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWxUb0hleDogZnVuY3Rpb24gKCB2ICkgeyBcclxuXHJcbiAgICAgICAgcmV0dXJuIHYudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiI1wiLCBcIjB4XCIpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTI1NTogZnVuY3Rpb24gKGMsIGkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGMuc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIC8gMjU1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdTE2OiBmdW5jdGlvbiAoIGMsIGkgKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjLnN1YnN0cmluZyhpLCBpICsgMSksIDE2KSAvIDE1O1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdW5wYWNrOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBpZiAoYy5sZW5ndGggPT0gNykgcmV0dXJuIFsgVC51MjU1KGMsIDEpLCBULnUyNTUoYywgMyksIFQudTI1NShjLCA1KSBdO1xyXG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoID09IDQpIHJldHVybiBbIFQudTE2KGMsMSksIFQudTE2KGMsMiksIFQudTE2KGMsMykgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHAyNTU6IGZ1bmN0aW9uICggYyApIHtcclxuICAgICAgICBsZXQgaCA9IE1hdGgucm91bmQoICggYyAqIDI1NSApICkudG9TdHJpbmcoIDE2ICk7XHJcbiAgICAgICAgaWYgKCBoLmxlbmd0aCA8IDIgKSBoID0gJzAnICsgaDtcclxuICAgICAgICByZXR1cm4gaDtcclxuICAgIH0sXHJcblxyXG4gICAgcGFjazogZnVuY3Rpb24gKCBjICkge1xyXG5cclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wMjU1KCBjWyAwIF0gKSArIFQucDI1NSggY1sgMSBdICkgKyBULnAyNTUoIGNbIDIgXSApO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaHRtbFJnYjogZnVuY3Rpb24oIGMgKXtcclxuXHJcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQoY1swXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1sxXSAqIDI1NSkgKyAnLCcrIE1hdGgucm91bmQoY1syXSAqIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwYWQ6IGZ1bmN0aW9uKCBuICl7XHJcbiAgICAgICAgaWYobi5sZW5ndGggPT0gMSluID0gJzAnICsgbjtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH0sXHJcblxyXG4gICAgcmdiVG9IZXggOiBmdW5jdGlvbiggYyApe1xyXG5cclxuICAgICAgICBsZXQgciA9IE1hdGgucm91bmQoY1swXSAqIDI1NSkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGxldCBnID0gTWF0aC5yb3VuZChjWzFdICogMjU1KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgbGV0IGIgPSBNYXRoLnJvdW5kKGNbMl0gKiAyNTUpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gJyMnICsgVC5wYWQocikgKyBULnBhZChnKSArIFQucGFkKGIpO1xyXG5cclxuICAgICAgIC8vIHJldHVybiAnIycgKyAoICcwMDAwMDAnICsgKCAoIGNbMF0gKiAyNTUgKSA8PCAxNiBeICggY1sxXSAqIDI1NSApIDw8IDggXiAoIGNbMl0gKiAyNTUgKSA8PCAwICkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBodWVUb1JnYjogZnVuY3Rpb24oIHAsIHEsIHQgKXtcclxuXHJcbiAgICAgICAgaWYgKCB0IDwgMCApIHQgKz0gMTtcclxuICAgICAgICBpZiAoIHQgPiAxICkgdCAtPSAxO1xyXG4gICAgICAgIGlmICggdCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDtcclxuICAgICAgICBpZiAoIHQgPCAxIC8gMiApIHJldHVybiBxO1xyXG4gICAgICAgIGlmICggdCA8IDIgLyAzICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogKCAyIC8gMyAtIHQgKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJnYlRvSHNsOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCByID0gY1swXSwgZyA9IGNbMV0sIGIgPSBjWzJdLCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGRlbHRhID0gbWF4IC0gbWluLCBoID0gMCwgcyA9IDAsIGwgPSAobWluICsgbWF4KSAvIDI7XHJcbiAgICAgICAgaWYgKGwgPiAwICYmIGwgPCAxKSBzID0gZGVsdGEgLyAobCA8IDAuNSA/ICgyICogbCkgOiAoMiAtIDIgKiBsKSk7XHJcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IHIgJiYgbWF4ICE9IGcpIGggKz0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGcgJiYgbWF4ICE9IGIpIGggKz0gKDIgKyAoYiAtIHIpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBpZiAobWF4ID09IGIgJiYgbWF4ICE9IHIpIGggKz0gKDQgKyAociAtIGcpIC8gZGVsdGEpO1xyXG4gICAgICAgICAgICBoIC89IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbIGgsIHMsIGwgXTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhzbFRvUmdiOiBmdW5jdGlvbiAoIGMgKSB7XHJcblxyXG4gICAgICAgIGxldCBwLCBxLCBoID0gY1swXSwgcyA9IGNbMV0sIGwgPSBjWzJdO1xyXG5cclxuICAgICAgICBpZiAoIHMgPT09IDAgKSByZXR1cm4gWyBsLCBsLCBsIF07XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHEgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSAoIGwgKiBzICk7XHJcbiAgICAgICAgICAgIHAgPSBsICogMiAtIHE7XHJcbiAgICAgICAgICAgIHJldHVybiBbIFQuaHVlVG9SZ2IocCwgcSwgaCArIDAuMzMzMzMpLCBULmh1ZVRvUmdiKHAsIHEsIGgpLCBULmh1ZVRvUmdiKHAsIHEsIGggLSAwLjMzMzMzKSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgU1ZHIE1PREVMXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZUdyYWRpYW50OiBmdW5jdGlvbiAoIHR5cGUsIHNldHRpbmdzLCBwYXJlbnQsIGNvbG9ycyApIHtcclxuXHJcbiAgICAgICAgVC5kb20oIHR5cGUsIG51bGwsIHNldHRpbmdzLCBwYXJlbnQsIDAgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSBwYXJlbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIGM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrICl7XHJcblxyXG4gICAgICAgICAgICBjID0gY29sb3JzW2ldO1xyXG4gICAgICAgICAgICAvL1QuZG9tKCAnc3RvcCcsIG51bGwsIHsgb2Zmc2V0OmNbMF0rJyUnLCBzdHlsZTonc3RvcC1jb2xvcjonK2NbMV0rJzsgc3RvcC1vcGFjaXR5OicrY1syXSsnOycgfSwgcGFyZW50LCBbMCxuXSApO1xyXG4gICAgICAgICAgICBULmRvbSggJ3N0b3AnLCBudWxsLCB7IG9mZnNldDpjWzBdKyclJywgJ3N0b3AtY29sb3InOmNbMV0sICAnc3RvcC1vcGFjaXR5JzpjWzJdIH0sIHBhcmVudCwgWzAsbl0gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyptYWtlR3JhcGg6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDM0O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICwgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo0LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgLy9ULmRvbSggJ3JlY3QnLCAnJywgeyB4OjEwLCB5OjEwLCB3aWR0aDoxMDgsIGhlaWdodDoxMDgsIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiAsIGZpbGw6J25vbmUnfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6VC5jb2xvcnMuYnV0dG9uLCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjggfSwgc3ZnICk7Ly8wXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9ULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMyknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICAvL1QuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZToncmdiYSgyNTUsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MiwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJywgJ3N0cm9rZS1vcGFjaXR5JzowLjUgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgVC5ncmFwaCA9IHN2ZztcclxuXHJcbiAgICB9LCovXHJcblxyXG4gICAgbWFrZVBhZDogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHd3ID0gMjU2XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3dysnICcrd3csIHdpZHRoOnd3LCBoZWlnaHQ6d3csIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBsZXQgdyA9IDIwMDsgXHJcbiAgICAgICAgbGV0IGQgPSAod3ctdykqMC41LCBtID0gMjA7XHJcbiAgICAgICAgVG9vbHMuZG9tKCAncmVjdCcsICcnLCB7IHg6IGQsIHk6IGQsICB3aWR0aDogdywgaGVpZ2h0OiB3LCBmaWxsOlQuY29sb3JzLmJhY2sgfSwgc3ZnICk7IC8vIDBcclxuICAgICAgICBUb29scy5kb20oICdyZWN0JywgJycsIHsgeDogZCttKjAuNSwgeTogZCttKjAuNSwgd2lkdGg6IHcgLSBtICwgaGVpZ2h0OiB3IC0gbSwgZmlsbDpULmNvbG9ycy5idXR0b24gfSwgc3ZnICk7IC8vIDFcclxuICAgICAgICAvLyBQb2ludGVyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiBkKyhtKjAuNSksIHkxOiB3dyAqMC41LCB4MjogZCsody1tKjAuNSksIHkyOiB3dyAqIDAuNSwgc3Ryb2tlOlQuY29sb3JzLmJhY2ssICdzdHJva2Utd2lkdGgnOiAyIH0sIHN2ZyApOyAvLyAyXHJcbiAgICAgICAgVG9vbHMuZG9tKCAnbGluZScsICcnLCB7IHgxOiB3dyAqIDAuNSwgeDI6IHd3ICogMC41LCB5MTogZCsobSowLjUpLCB5MjogZCsody1tKjAuNSksIHN0cm9rZTpULmNvbG9ycy5iYWNrLCAnc3Ryb2tlLXdpZHRoJzogMiB9LCBzdmcgKTsgLy8gM1xyXG4gICAgICAgIFRvb2xzLmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OiB3dyAqIDAuNSwgY3k6IHd3ICogMC41LCByOjUsIHN0cm9rZTogVC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDUsIGZpbGw6J25vbmUnIH0sIHN2ZyApOyAvLyA0XHJcbiAgICAgICAgVC5wYWQyZCA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VLbm9iOiBmdW5jdGlvbiAoIG1vZGVsICkge1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyODtcclxuICAgICAgICBsZXQgcmFkaXVzID0gMzQ7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOnJhZGl1cywgZmlsbDpULmNvbG9ycy5idXR0b24sIHN0cm9rZToncmdiYSgwLDAsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6OCB9LCBzdmcgKTsvLzBcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6VC5jb2xvcnMudGV4dCwgJ3N0cm9rZS13aWR0aCc6NCwgZmlsbDonbm9uZScsICdzdHJva2UtbGluZWNhcCc6J3JvdW5kJyB9LCBzdmcgKTsvLzFcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMrNywgc3Ryb2tlOidyZ2JhKDAsMCwwLDAuMSknLCAnc3Ryb2tlLXdpZHRoJzo3ICwgZmlsbDonbm9uZSd9LCBzdmcgKTsvLzJcclxuICAgICAgICBULmRvbSggJ3BhdGgnLCAnJywgeyBkOicnLCBzdHJva2U6J3JnYmEoMjU1LDI1NSwyNTUsMC4zKScsICdzdHJva2Utd2lkdGgnOjIsIGZpbGw6J25vbmUnLCAnc3Ryb2tlLWxpbmVjYXAnOidyb3VuZCcsICdzdHJva2Utb3BhY2l0eSc6MC41IH0sIHN2ZyApOy8vM1xyXG4gICAgICAgIFQua25vYiA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VDaXJjdWxhcjogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHcgPSAxMjg7XHJcbiAgICAgICAgbGV0IHJhZGl1cyA9IDQwO1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIHN0cm9rZToncmdiYSgwLDAsMCwwLjEpJywgJ3N0cm9rZS13aWR0aCc6MTAsIGZpbGw6J25vbmUnIH0sIHN2ZyApOy8vMFxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTpULmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzo3LCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7Ly8xXHJcbiAgICAgICAgVC5jaXJjdWxhciA9IHN2ZztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VKb3lzdGljazogZnVuY3Rpb24gKCBtb2RlbCApIHtcclxuXHJcbiAgICAgICAgLy8rJyBiYWNrZ3JvdW5kOiNmMDA7J1xyXG5cclxuICAgICAgICBsZXQgdyA9IDEyOCwgY2NjO1xyXG4gICAgICAgIGxldCByYWRpdXMgPSBNYXRoLmZsb29yKCh3LTMwKSowLjUpO1xyXG4gICAgICAgIGxldCBpbm5lclJhZGl1cyA9IE1hdGguZmxvb3IocmFkaXVzKjAuNik7XHJcbiAgICAgICAgbGV0IHN2ZyA9IFQuZG9tKCAnc3ZnJywgVC5jc3MuYmFzaWMgKyAncG9zaXRpb246cmVsYXRpdmU7JywgeyB2aWV3Qm94OicwIDAgJyt3KycgJyt3LCB3aWR0aDp3LCBoZWlnaHQ6dywgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIFQuZG9tKCAnZGVmcycsIG51bGwsIHt9LCBzdmcgKTtcclxuICAgICAgICBULmRvbSggJ2cnLCBudWxsLCB7fSwgc3ZnICk7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlbCA9PT0gMCApe1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjY2MgPSBbIFs0MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbODAsICdyZ2IoMCwwLDApJywgMF0sIFs5MCwgJ3JnYig1MCw1MCw1MCknLCAwLjRdLCBbMTAwLCAncmdiKDUwLDUwLDUwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzYwLCAncmdiKDAsMCwwKScsIDAuNV0sIFsxMDAsICdyZ2IoMCwwLDApJywgMF0gXTtcclxuICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdyYWRpYWxHcmFkaWVudCcsIHsgaWQ6J2dyYWRTJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdyYWRpYW4gc3RpY2tcclxuICAgICAgICAgICAgbGV0IGNjMCA9IFsncmdiKDQwLDQwLDQwKScsICdyZ2IoNDgsNDgsNDgpJywgJ3JnYigzMCwzMCwzMCknXTtcclxuICAgICAgICAgICAgbGV0IGNjMSA9IFsncmdiKDEsOTAsMTk3KScsICdyZ2IoMyw5NSwyMDcpJywgJ3JnYigwLDY1LDE2NyknXTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzBbMF0sIDFdLCBbNjAsIGNjMFsxXSwgMV0sIFs4MCwgY2MwWzFdLCAxXSwgWzEwMCwgY2MwWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluJywgY3g6JzUwJScsIGN5Oic1MCUnLCByOic1MCUnLCBmeDonNTAlJywgZnk6JzUwJScgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzMwLCBjYzFbMF0sIDFdLCBbNjAsIGNjMVsxXSwgMV0sIFs4MCwgY2MxWzFdLCAxXSwgWzEwMCwgY2MxWzJdLCAxXSBdO1xyXG4gICAgICAgICAgICBULm1ha2VHcmFkaWFudCggJ3JhZGlhbEdyYWRpZW50JywgeyBpZDonZ3JhZEluMicsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICAvLyBncmFwaFxyXG5cclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCwgY3k6NjQsIHI6cmFkaXVzLCBmaWxsOid1cmwoI2dyYWQpJyB9LCBzdmcgKTsvLzJcclxuICAgICAgICAgICAgVC5kb20oICdjaXJjbGUnLCAnJywgeyBjeDo2NCs1LCBjeTo2NCsxMCwgcjppbm5lclJhZGl1cysxMCwgZmlsbDondXJsKCNncmFkUyknIH0sIHN2ZyApOy8vM1xyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjppbm5lclJhZGl1cywgZmlsbDondXJsKCNncmFkSW4pJyB9LCBzdmcgKTsvLzRcclxuXHJcbiAgICAgICAgICAgIFQuam95c3RpY2tfMCA9IHN2ZztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIC8vIGdyYWRpYW4gc2hhZG93XHJcbiAgICAgICAgICAgIGNjYyA9IFsgWzY5LCAncmdiKDAsMCwwKScsIDBdLFs3MCwgJ3JnYigwLDAsMCknLCAwLjNdLCBbMTAwLCAncmdiKDAsMCwwKScsIDBdIF07XHJcbiAgICAgICAgICAgIFQubWFrZUdyYWRpYW50KCAncmFkaWFsR3JhZGllbnQnLCB7IGlkOidncmFkWCcsIGN4Oic1MCUnLCBjeTonNTAlJywgcjonNTAlJywgZng6JzUwJScsIGZ5Oic1MCUnIH0sIHN2ZywgY2NjICk7XHJcblxyXG4gICAgICAgICAgICBULmRvbSggJ2NpcmNsZScsICcnLCB7IGN4OjY0LCBjeTo2NCwgcjpyYWRpdXMsIGZpbGw6J25vbmUnLCBzdHJva2U6J3JnYmEoMTAwLDEwMCwxMDAsMC4yNSknLCAnc3Ryb2tlLXdpZHRoJzonNCcgfSwgc3ZnICk7Ly8yXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzKzE0LCBmaWxsOid1cmwoI2dyYWRYKScgfSwgc3ZnICk7Ly8zXHJcbiAgICAgICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6NjQsIGN5OjY0LCByOmlubmVyUmFkaXVzLCBmaWxsOidub25lJywgc3Ryb2tlOidyZ2IoMTAwLDEwMCwxMDApJywgJ3N0cm9rZS13aWR0aCc6JzQnIH0sIHN2ZyApOy8vNFxyXG5cclxuICAgICAgICAgICAgVC5qb3lzdGlja18xID0gc3ZnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlQ29sb3JSaW5nOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIGxldCB3ID0gMjU2O1xyXG4gICAgICAgIGxldCBzdmcgPSBULmRvbSggJ3N2ZycsIFQuY3NzLmJhc2ljICsgJ3Bvc2l0aW9uOnJlbGF0aXZlOycsIHsgdmlld0JveDonMCAwICcrdysnICcrdywgd2lkdGg6dywgaGVpZ2h0OncsIHByZXNlcnZlQXNwZWN0UmF0aW86J25vbmUnIH0gKTtcclxuICAgICAgICBULmRvbSggJ2RlZnMnLCBudWxsLCB7fSwgc3ZnICk7XHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwge30sIHN2ZyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IDMwOy8vc3Ryb2tlXHJcbiAgICAgICAgbGV0IHIgPSggdy1zICkqMC41O1xyXG4gICAgICAgIGxldCBtaWQgPSB3KjAuNTtcclxuICAgICAgICBsZXQgbiA9IDI0LCBudWRnZSA9IDggLyByIC8gbiAqIE1hdGguUEksIGExID0gMCwgZDE7XHJcbiAgICAgICAgbGV0IGFtLCB0YW4sIGQyLCBhMiwgYXIsIGksIGosIHBhdGgsIGNjYztcclxuICAgICAgICBsZXQgY29sb3IgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBuOyArK2kpIHtcclxuXHJcbiAgICAgICAgICAgIGQyID0gaSAvIG47XHJcbiAgICAgICAgICAgIGEyID0gZDIgKiBULlR3b1BJO1xyXG4gICAgICAgICAgICBhbSA9IChhMSArIGEyKSAqIDAuNTtcclxuICAgICAgICAgICAgdGFuID0gMSAvIE1hdGguY29zKChhMiAtIGExKSAqIDAuNSk7XHJcblxyXG4gICAgICAgICAgICBhciA9IFtcclxuICAgICAgICAgICAgICAgIE1hdGguc2luKGExKSwgLU1hdGguY29zKGExKSwgXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbihhbSkgKiB0YW4sIC1NYXRoLmNvcyhhbSkgKiB0YW4sIFxyXG4gICAgICAgICAgICAgICAgTWF0aC5zaW4oYTIpLCAtTWF0aC5jb3MoYTIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb2xvclsxXSA9IFQucmdiVG9IZXgoIFQuaHNsVG9SZ2IoW2QyLCAxLCAwLjVdKSApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IDY7XHJcbiAgICAgICAgICAgICAgICB3aGlsZShqLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgYXJbal0gPSAoKGFyW2pdKnIpK21pZCkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXRoID0gJyBNJyArIGFyWzBdICsgJyAnICsgYXJbMV0gKyAnIFEnICsgYXJbMl0gKyAnICcgKyBhclszXSArICcgJyArIGFyWzRdICsgJyAnICsgYXJbNV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2NjID0gWyBbMCxjb2xvclswXSwxXSwgWzEwMCxjb2xvclsxXSwxXSBdO1xyXG4gICAgICAgICAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0cnK2ksIHgxOmFyWzBdLCB5MTphclsxXSwgeDI6YXJbNF0sIHkyOmFyWzVdLCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICAgICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6cGF0aCwgJ3N0cm9rZS13aWR0aCc6cywgc3Ryb2tlOid1cmwoI0cnK2krJyknLCAnc3Ryb2tlLWxpbmVjYXAnOlwiYnV0dFwiIH0sIHN2ZywgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYTEgPSBhMiAtIG51ZGdlOyBcclxuICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXTtcclxuICAgICAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBiciA9ICgxMjggLSBzICkgKyAyO1xyXG4gICAgICAgIGxldCBidyA9IDYwO1xyXG5cclxuICAgICAgICBsZXQgdHcgPSA4NC45MDtcclxuXHJcbiAgICAgICAgLy8gYmxhY2sgLyB3aGl0ZVxyXG4gICAgICAgIGNjYyA9IFsgWzAsICcjRkZGRkZGJywgMV0sIFs1MCwgJyNGRkZGRkYnLCAwXSwgWzUwLCAnIzAwMDAwMCcsIDBdLCBbMTAwLCAnIzAwMDAwMCcsIDFdIF07XHJcbiAgICAgICAgVC5tYWtlR3JhZGlhbnQoICdsaW5lYXJHcmFkaWVudCcsIHsgaWQ6J0dMMCcsIHgxOjAsIHkxOm1pZC10dywgeDI6MCwgeTI6bWlkK3R3LCBncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIiB9LCBzdmcsIGNjYyApO1xyXG5cclxuICAgICAgICBjY2MgPSBbIFswLCAnIzdmN2Y3ZicsIDFdLCBbNTAsICcjN2Y3ZjdmJywgMC41XSwgWzEwMCwgJyM3ZjdmN2YnLCAwXSBdO1xyXG4gICAgICAgIFQubWFrZUdyYWRpYW50KCAnbGluZWFyR3JhZGllbnQnLCB7IGlkOidHTDEnLCB4MTptaWQtNDkuMDUsIHkxOjAsIHgyOm1pZCs5OCwgeTI6MCwgZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIgfSwgc3ZnLCBjY2MgKTtcclxuXHJcbiAgICAgICAgVC5kb20oICdnJywgbnVsbCwgeyAndHJhbnNmb3JtLW9yaWdpbic6ICcxMjhweCAxMjhweCcsICd0cmFuc2Zvcm0nOidyb3RhdGUoMCknIH0sIHN2ZyApOy8vMlxyXG4gICAgICAgIFQuZG9tKCAncG9seWdvbicsICcnLCB7IHBvaW50czonNzguOTUgNDMuMSA3OC45NSAyMTIuODUgMjI2IDEyOCcsICBmaWxsOidyZWQnICB9LCBzdmcsIDIgKTsvLyAyLDBcclxuICAgICAgICBULmRvbSggJ3BvbHlnb24nLCAnJywgeyBwb2ludHM6Jzc4Ljk1IDQzLjEgNzguOTUgMjEyLjg1IDIyNiAxMjgnLCAgZmlsbDondXJsKCNHTDEpJywnc3Ryb2tlLXdpZHRoJzoxLCBzdHJva2U6J3VybCgjR0wxKScgIH0sIHN2ZywgMiApOy8vMiwxXHJcbiAgICAgICAgVC5kb20oICdwb2x5Z29uJywgJycsIHsgcG9pbnRzOic3OC45NSA0My4xIDc4Ljk1IDIxMi44NSAyMjYgMTI4JywgIGZpbGw6J3VybCgjR0wwKScsJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOid1cmwoI0dMMCknICB9LCBzdmcsIDIgKTsvLzIsMlxyXG4gICAgICAgIFQuZG9tKCAncGF0aCcsICcnLCB7IGQ6J00gMjU1Ljc1IDEzNi41IFEgMjU2IDEzMi4zIDI1NiAxMjggMjU2IDEyMy43IDI1NS43NSAxMTkuNSBMIDI0MSAxMjggMjU1Ljc1IDEzNi41IFonLCAgZmlsbDonbm9uZScsJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJyAgfSwgc3ZnLCAyICk7Ly8yLDNcclxuICAgICAgICAvL1QuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4KzExMywgY3k6MTI4LCByOjYsICdzdHJva2Utd2lkdGgnOjMsIHN0cm9rZTonIzAwMCcsIGZpbGw6J25vbmUnIH0sIHN2ZywgMiApOy8vMi4zXHJcblxyXG4gICAgICAgIFQuZG9tKCAnY2lyY2xlJywgJycsIHsgY3g6MTI4LCBjeToxMjgsIHI6NiwgJ3N0cm9rZS13aWR0aCc6Miwgc3Ryb2tlOicjMDAwJywgZmlsbDonbm9uZScgfSwgc3ZnICk7Ly8zXHJcblxyXG4gICAgICAgIFQuY29sb3JSaW5nID0gc3ZnO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgaWNvbjogZnVuY3Rpb24gKCB0eXBlLCBjb2xvciwgdyApe1xyXG5cclxuICAgICAgICB3ID0gdyB8fCA0MDtcclxuICAgICAgICAvL2NvbG9yID0gY29sb3IgfHwgJyNERURFREUnO1xyXG4gICAgICAgIGxldCB2aWV3Qm94ID0gJzAgMCAyNTYgMjU2JztcclxuICAgICAgICAvL2xldCB2aWV3Qm94ID0gJzAgMCAnKyB3ICsnICcrIHc7XHJcbiAgICAgICAgbGV0IHQgPSBbXCI8c3ZnIHhtbG5zPSdcIitULnN2Z25zK1wiJyB2ZXJzaW9uPScxLjEnIHhtbG5zOnhsaW5rPSdcIitULmh0bWxzK1wiJyBzdHlsZT0ncG9pbnRlci1ldmVudHM6bm9uZTsnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWF4IG1lZXQnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nXCIrdytcInB4JyBoZWlnaHQ9J1wiK3crXCJweCcgdmlld0JveD0nXCIrdmlld0JveCtcIic+PGc+XCJdO1xyXG4gICAgICAgIHN3aXRjaCh0eXBlKXtcclxuICAgICAgICAgICAgY2FzZSAnbG9nbyc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29GaWxsX2QrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvbmF0ZSc6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZG9uYXRlK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICduZW8nOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgZmlsbD0nXCIrY29sb3IrXCInIHN0cm9rZT0nbm9uZScgZD0nXCIrVC5sb2dvX25lbytcIicvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncGh5JzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIGlkPSdsb2dvaW4nIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNDknIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS1saW5lY2FwPSdidXR0JyBmaWxsPSdub25lJyBkPSdcIitULmxvZ29fcGh5K1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb25maWcnOlxyXG4gICAgICAgICAgICB0WzFdPVwiPHBhdGggaWQ9J2xvZ29pbicgc3Ryb2tlPSdcIitjb2xvcitcIicgc3Ryb2tlLXdpZHRoPSc0OScgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J2J1dHQnIGZpbGw9J25vbmUnIGQ9J1wiK1QubG9nb19jb25maWcrXCInLz5cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dpdGh1Yic6XHJcbiAgICAgICAgICAgIHRbMV09XCI8cGF0aCBpZD0nbG9nb2luJyBmaWxsPSdcIitjb2xvcitcIicgc3Ryb2tlPSdub25lJyBkPSdcIitULmxvZ29fZ2l0aHViK1wiJy8+XCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgdFsxXT1cIjxwYXRoIHN0cm9rZT0nXCIrY29sb3IrXCInIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBmaWxsPSdub25lJyBkPSdNIDI2LjEyNSAxNyBMIDIwIDIyLjk1IDE0LjA1IDE3IE0gMjAgOS45NSBMIDIwIDIyLjk1Jy8+PHBhdGggc3Ryb2tlPSdcIitjb2xvcjtcclxuICAgICAgICAgICAgdFsxXSs9XCInIHN0cm9rZS13aWR0aD0nMi41JyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIGZpbGw9J25vbmUnIGQ9J00gMzIuNiAyMyBMIDMyLjYgMjUuNSBRIDMyLjYgMjguNSAyOS42IDI4LjUgTCAxMC42IDI4LjUgUSA3LjYgMjguNSA3LjYgMjUuNSBMIDcuNiAyMycvPlwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdFsyXSA9IFwiPC9nPjwvc3ZnPlwiO1xyXG4gICAgICAgIHJldHVybiB0LmpvaW4oXCJcXG5cIik7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBsb2dvRmlsbF9kOmBcclxuICAgIE0gMTcxIDE1MC43NSBMIDE3MSAzMy4yNSAxNTUuNSAzMy4yNSAxNTUuNSAxNTAuNzUgUSAxNTUuNSAxNjIuMiAxNDcuNDUgMTcwLjIgMTM5LjQ1IDE3OC4yNSAxMjggMTc4LjI1IDExNi42IDE3OC4yNSAxMDguNTUgMTcwLjIgMTAwLjUgMTYyLjIgMTAwLjUgMTUwLjc1IFxyXG4gICAgTCAxMDAuNSAzMy4yNSA4NSAzMy4yNSA4NSAxNTAuNzUgUSA4NSAxNjguNjUgOTcuNTUgMTgxLjE1IDExMC4xNSAxOTMuNzUgMTI4IDE5My43NSAxNDUuOSAxOTMuNzUgMTU4LjQgMTgxLjE1IDE3MSAxNjguNjUgMTcxIDE1MC43NSBcclxuICAgIE0gMjAwIDMzLjI1IEwgMTg0IDMzLjI1IDE4NCAxNTAuOCBRIDE4NCAxNzQuMSAxNjcuNiAxOTAuNCAxNTEuMyAyMDYuOCAxMjggMjA2LjggMTA0Ljc1IDIwNi44IDg4LjMgMTkwLjQgNzIgMTc0LjEgNzIgMTUwLjggTCA3MiAzMy4yNSA1NiAzMy4yNSA1NiAxNTAuNzUgXHJcbiAgICBRIDU2IDE4MC41NSA3Ny4wNSAyMDEuNiA5OC4yIDIyMi43NSAxMjggMjIyLjc1IDE1Ny44IDIyMi43NSAxNzguOSAyMDEuNiAyMDAgMTgwLjU1IDIwMCAxNTAuNzUgTCAyMDAgMzMuMjUgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2dpdGh1YjpgXHJcbiAgICBNIDE4MC41IDcwIFEgMTg2LjMgODIuNCAxODEuNTUgOTYuNTUgMTk2LjUgMTExLjUgMTg5LjcgMTQwLjY1IDE4My42NSAxNjguMzUgMTQ2IDE3Mi43IDE1Mi41IDE3OC43IDE1Mi41NSAxODUuOSBMIDE1Mi41NSAyMTguMTUgUSAxNTIuODQgMjI0LjU2IDE1OS4xNSAyMjMuMyBcclxuICAgIDE1OS4yMSAyMjMuMyAxNTkuMjUgMjIzLjMgMTgxLjE0IDIxNi4yNSAxOTguNyAxOTguNyAyMjggMTY5LjQgMjI4IDEyOCAyMjggODYuNiAxOTguNyA1Ny4zIDE2OS40IDI4IDEyOCAyOCA4Ni42IDI4IDU3LjMgNTcuMyAyOCA4Ni42IDI4IDEyOCAyOCAxNjkuNCA1Ny4zIDE5OC43IDc0Ljg1IFxyXG4gICAgMjE2LjI1IDk2Ljc1IDIyMy4zIDk2Ljc4IDIyMy4zIDk2LjggMjIzLjMgMTAzLjE2IDIyNC41NCAxMDMuNDUgMjE4LjE1IEwgMTAzLjQ1IDIwMCBRIDgyLjk3IDIwMy4xIDc1LjEgMTk2LjM1IDY5Ljg1IDE5MS42NSA2OC40IDE4NS40NSA2NC4yNyAxNzcuMDU1IDU5LjQgMTc0LjE1IDQ5LjIwIFxyXG4gICAgMTY2Ljg3IDYwLjggMTY3LjggNjkuODUgMTY5LjYxIDc1LjcgMTgwIDgxLjEzIDE4OC4wOSA5MCAxODguNTUgOTguMTggMTg4Ljg2IDEwMy40NSAxODUuOSAxMDMuNDkgMTc4LjY3IDExMCAxNzIuNyA3Mi4zMyAxNjguMzMgNjYuMyAxNDAuNjUgNTkuNDggMTExLjQ5IDc0LjQ1IDk2LjU1IDY5LjcgXHJcbiAgICA4Mi40MSA3NS41IDcwIDg0Ljg3IDY4Ljc0IDEwMy4xNSA4MCAxMTUuMTI1IDc2LjYzNSAxMjggNzYuODUgMTQwLjg1IDc2LjY1IDE1Mi44NSA4MCAxNzEuMSA2OC43NSAxODAuNSA3MCBaXHJcbiAgICBgLFxyXG5cclxuICAgIGxvZ29fbmVvOmBcclxuICAgIE0gMjE5IDUyIEwgMjA2IDUyIDIwNiAxNjYgUSAyMDYgMTgzLjQgMTkzLjc1IDE5NS42NSAxODEuNCAyMDggMTY0IDIwOCAxNDYuNiAyMDggMTM0LjM1IDE5NS42NSAxMjIgMTgzLjQgMTIyIDE2NiBMIDEyMiA5MCBRIDEyMiA3Ny42IDExMy4xNSA2OC44NSAxMDQuNCA2MCA5MiA2MCA3OS41NSBcclxuICAgIDYwIDcwLjc1IDY4Ljg1IDYyIDc3LjYgNjIgOTAgTCA2MiAyMDQgNzUgMjA0IDc1IDkwIFEgNzUgODMgNzkuOTUgNzggODQuOTUgNzMgOTIgNzMgOTkgNzMgMTA0IDc4IDEwOSA4MyAxMDkgOTAgTCAxMDkgMTY2IFEgMTA5IDE4OC44IDEyNS4xNSAyMDQuODUgMTQxLjIgMjIxIDE2NCAyMjEgXHJcbiAgICAxODYuNzUgMjIxIDIwMi45NSAyMDQuODUgMjE5IDE4OC44IDIxOSAxNjYgTCAyMTkgNTIgTSAxOTQgNTIgTCAxODEgNTIgMTgxIDE2NiBRIDE4MSAxNzMgMTc2LjA1IDE3OCAxNzEuMDUgMTgzIDE2NCAxODMgMTU3IDE4MyAxNTIgMTc4IDE0NyAxNzMgMTQ3IDE2NiBMIDE0NyA5MCBRIDE0NyBcclxuICAgIDY3LjIgMTMwLjg1IDUxLjE1IDExNC44IDM1IDkyIDM1IDY5LjI1IDM1IDUzLjA1IDUxLjE1IDM3IDY3LjIgMzcgOTAgTCAzNyAyMDQgNTAgMjA0IDUwIDkwIFEgNTAgNzIuNiA2Mi4yNSA2MC4zNSA3NC42IDQ4IDkyIDQ4IDEwOS40IDQ4IDEyMS42NSA2MC4zNSAxMzQgNzIuNiAxMzQgOTAgTCBcclxuICAgIDEzNCAxNjYgUSAxMzQgMTc4LjQgMTQyLjg1IDE4Ny4xNSAxNTEuNiAxOTYgMTY0IDE5NiAxNzYuNDUgMTk2IDE4NS4yNSAxODcuMTUgMTk0IDE3OC40IDE5NCAxNjYgTCAxOTQgNTIgWlxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX3BoeTpgXHJcbiAgICBNIDEwMy41NSAzNy45NSBMIDEyNy45NSAzNy45NSBRIDE2Mi4zNSAzNy45NSAxODYuNSA1NSAyMTAuOSA3Mi4zNSAyMTAuOSA5Ni41IDIxMC45IDEyMC42NSAxODYuNSAxMzcuNyAxNjIuMzUgMTU1IDEyNy45NSAxNTUgTCAxMjcuOTUgMjM3Ljk1IE0gMTI3Ljk1IDE1NSBcclxuICAgIFEgOTMuNTUgMTU1IDY5LjE1IDEzNy43IDQ1IDEyMC42NSA0NSA5Ni41IDQ1IDcyLjM1IDY5LjE1IDU1IDcwLjkgNTMuOCA3Mi44NSA1Mi44NSBNIDEyNy45NSAxNTUgTCAxMjcuOTUgMzcuOTVcclxuICAgIGAsXHJcblxyXG4gICAgbG9nb19jb25maWc6YFxyXG4gICAgTSAyMDQuMzUgNTEuNjUgTCAxNzMuMjUgODIuNzUgUSAxOTIgMTAxLjUgMTkyIDEyOCBMIDIzNiAxMjggTSAxOTIgMTI4IFEgMTkyIDE1NC41NSAxNzMuMjUgMTczLjI1IEwgMjA0LjQgMjA0LjQgTSA1MS42NSA1MS42NSBMIDgyLjc1IDgyLjc1IFEgMTAxLjUgNjQgMTI4IDY0IFxyXG4gICAgTCAxMjggMjAgTSA1MS42IDIwNC40IEwgODIuNzUgMTczLjI1IFEgNjQgMTU0LjU1IDY0IDEyOCBMIDIwIDEyOCBNIDEyOCAyMzYgTCAxMjggMTkyIFEgMTAxLjUgMTkyIDgyLjc1IDE3My4yNSBNIDY0IDEyOCBRIDY0IDEwMS41IDgyLjc1IDgyLjc1IE0gMTczLjI1IDE3My4yNSBcclxuICAgIFEgMTU0LjU1IDE5MiAxMjggMTkyIE0gMTI4IDY0IFEgMTU0LjU1IDY0IDE3My4yNSA4Mi43NVxyXG4gICAgYCxcclxuXHJcbiAgICBsb2dvX2RvbmF0ZTpgXHJcbiAgICBNIDE3MS4zIDgwLjMgUSAxNzkuNSA2Mi4xNSAxNzEuMyA0NS44IDE2NC4xIDMyLjUgMTQxLjM1IDMwLjEgTCA5NC4zNSAzMC4xIFEgODkuMzUgMzAuNCA4OC4zIDM1LjE1IEwgNzAuNSAxNDguMDUgUSA3MC4yIDE1Mi41IDczLjcgMTUyLjYgTCAxMDAuOTUgMTUyLjYgMTA3IDExMS42IFEgMTA4Ljc1IFxyXG4gICAgMTA2LjU1IDExMi42IDEwNi40NSAxMzAuNDUgMTA4LjA1IDE0NS4zIDEwMy45IDE2My4zNSA5OC43NSAxNzEuMyA4MC4zIE0gMTc5LjggNzEuNSBRIDE3OC42IDc5Ljc1IDE3NC45IDg3Ljg1IDE2OC40NSAxMDIuOSAxNTEuOSAxMDkuMTUgMTQwLjY1IDExMy45NSAxMTcuNTUgMTEzIDExMy4xNSBcclxuICAgIDExMi43NSAxMTEgMTE3LjQ1IEwgMTAyLjcgMTY5Ljk1IFEgMTAyLjQ1IDE3My44IDEwNS41IDE3My44NSBMIDEyOC45NSAxNzMuODUgUSAxMzIuMiAxNzQuMiAxMzMuMzUgMTY5LjY1IEwgMTM4LjMgMTM5Ljk1IFEgMTM5Ljc1IDEzNS42IDE0My4xIDEzNS41IDE0Ni42IDEzNS43NSAxNTAuNiAxMzUuNjUgXHJcbiAgICAxNTQuNTUgMTM1LjUgMTU3LjM1IDEzNS4xIDE2MC4xNSAxMzQuNyAxNjYuNzUgMTMyLjM1IDE4MS4zNSAxMjcuNCAxODcuOSAxMTEuMiAxOTQuMjUgOTUuNzUgMTg5LjUgODEuOTUgMTg2Ljc1IDc0Ljg1IDE3OS44IDcxLjUgTSAxMDMuNSAyMDkuOSBRIDEwMy41IDIwMi44NSA5OS43IDE5OC44NSA5NS45NSBcclxuICAgIDE5NC43NSA4OS40IDE5NC43NSA4Mi44IDE5NC43NSA3OS4wNSAxOTguODUgNzUuMyAyMDIuOSA3NS4zIDIwOS45IDc1LjMgMjE2Ljg1IDc5LjA1IDIyMC45NSA4Mi44IDIyNS4wNSA4OS40IDIyNS4wNSA5NS45NSAyMjUuMDUgOTkuNyAyMjEgMTAzLjUgMjE2Ljk1IDEwMy41IDIwOS45IE0gOTUuNDUgMjA1LjUgXHJcbiAgICBRIDk1Ljk1IDIwNy4zIDk1Ljk1IDIwOS45IDk1Ljk1IDIxMi42NSA5NS40NSAyMTQuMzUgOTQuOTUgMjE2IDk0IDIxNy4zIDkzLjEgMjE4LjQ1IDkxLjkgMjE5IDkwLjcgMjE5LjU1IDg5LjQgMjE5LjU1IDg4LjE1IDIxOS41NSA4Ni45NSAyMTkuMDUgODUuNzUgMjE4LjU1IDg0LjggMjE3LjMgODMuOSAyMTYuMTUgXHJcbiAgICA4My40IDIxNC4zNSA4Mi44NSAyMTIuNiA4Mi44NSAyMDkuOSA4Mi44NSAyMDcuMyA4My40IDIwNS40NSA4My45NSAyMDMuNTUgODQuODUgMjAyLjQ1IDg1LjkgMjAxLjIgODYuOTUgMjAwLjc1IDg4LjA1IDIwMC4yNSA4OS40IDIwMC4yNSA5MC43IDIwMC4yNSA5MS44NSAyMDAuOCA5My4wNSAyMDEuMyA5NCAyMDIuNSBcclxuICAgIDk0LjkgMjAzLjY1IDk1LjQ1IDIwNS41IE0gMTUzLjMgMTk1LjM1IEwgMTQ1LjMgMTk1LjM1IDEzNS41IDIyNC40NSAxNDIuOCAyMjQuNDUgMTQ0LjYgMjE4LjUgMTUzLjc1IDIxOC41IDE1NS42IDIyNC40NSAxNjMuMSAyMjQuNDUgMTUzLjMgMTk1LjM1IE0gMTUyLjE1IDIxMy4yNSBMIDE0Ni4yNSAyMTMuMjUgXHJcbiAgICAxNDkuMiAyMDMuNjUgMTUyLjE1IDIxMy4yNSBNIDExNi43NSAxOTUuMzUgTCAxMDcuOCAxOTUuMzUgMTA3LjggMjI0LjQ1IDExNC41IDIyNC40NSAxMTQuNSAyMDQuMiAxMjUuNyAyMjQuNDUgMTMyLjc1IDIyNC40NSAxMzIuNzUgMTk1LjM1IDEyNi4wNSAxOTUuMzUgMTI2LjA1IDIxMi4wNSAxMTYuNzUgMTk1LjM1IE0gXHJcbiAgICA2Ni41IDE5Ny42NSBRIDY0LjE1IDE5Ni4xNSA2MS40NSAxOTUuNzUgNTguOCAxOTUuMzUgNTUuNzUgMTk1LjM1IEwgNDYuNyAxOTUuMzUgNDYuNyAyMjQuNDUgNTUuOCAyMjQuNDUgUSA1OC44IDIyNC40NSA2MS41IDIyNC4wNSA2NC4xNSAyMjMuNiA2Ni40IDIyMi4xNSA2OS4xNSAyMjAuNDUgNzAuOSAyMTcuMiBcclxuICAgIDcyLjcgMjE0IDcyLjcgMjA5Ljk1IDcyLjcgMjA1LjcgNzEgMjAyLjYgNjkuMzUgMTk5LjUgNjYuNSAxOTcuNjUgTSA2NC4yIDIwNSBRIDY1LjIgMjA3IDY1LjIgMjA5LjkgNjUuMiAyMTIuNzUgNjQuMjUgMjE0Ljc1IDYzLjMgMjE2Ljc1IDYxLjUgMjE3Ljg1IDYwIDIxOC44NSA1OC4zIDIxOC45IDU2LjYgMjE5IFxyXG4gICAgNTQuMTUgMjE5IEwgNTQgMjE5IDU0IDIwMC44IDU0LjE1IDIwMC44IFEgNTYuNCAyMDAuOCA1OC4wNSAyMDAuOSA1OS43IDIwMC45NSA2MS4xNSAyMDEuNzUgNjMuMiAyMDIuOTUgNjQuMiAyMDUgTSAyMTAuMiAxOTUuMzUgTCAxOTAuNSAxOTUuMzUgMTkwLjUgMjI0LjQ1IDIxMC4yIDIyNC40NSAyMTAuMiAyMTguOSBcclxuICAgIDE5Ny43NSAyMTguOSAxOTcuNzUgMjExLjU1IDIwOS4yIDIxMS41NSAyMDkuMiAyMDYgMTk3Ljc1IDIwNiAxOTcuNzUgMjAwLjkgMjEwLjIgMjAwLjkgMjEwLjIgMTk1LjM1IE0gMTg3LjUgMTk1LjM1IEwgMTYzIDE5NS4zNSAxNjMgMjAwLjkgMTcxLjYgMjAwLjkgMTcxLjYgMjI0LjQ1IDE3OC45IDIyNC40NSAxNzguOSBcclxuICAgIDIwMC45IDE4Ny41IDIwMC45IDE4Ny41IDE5NS4zNSBaXHJcbiAgICBgLFxyXG5cclxufVxyXG5cclxuVC5zZXRUZXh0KCk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSBUOyIsIi8vL2h0dHBzOi8vd2ljZy5naXRodWIuaW8vZmlsZS1zeXN0ZW0tYWNjZXNzLyNhcGktZmlsZXN5c3RlbWZpbGVoYW5kbGUtZ2V0ZmlsZVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlcyB7XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZJTEUgVFlQRVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhdXRvVHlwZXMoIHR5cGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc3dpdGNoKCB0eXBlICl7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N2Zyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgYWNjZXB0OiB7ICdpbWFnZS9zdmcreG1sJzogJy5zdmcnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXYnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vd2F2JzogJy53YXYnfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtcDMnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGFjY2VwdDogeyAnYXVkaW8vbXBlZyc6ICcubXAzJ30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbXA0JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBhY2NlcHQ6IHsgJ3ZpZGVvL21wNCc6ICcubXA0J30gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmluJzogY2FzZSAnaGV4JzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0JpbmFyeSBGaWxlcycsIGFjY2VwdDogeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogWycuYmluJywgJy5oZXgnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnVGV4dCBGaWxlcycsIGFjY2VwdDogeyAndGV4dC9wbGFpbic6IFsnLnR4dCcsICcudGV4dCddLCAndGV4dC9odG1sJzogWycuaHRtbCcsICcuaHRtJ10gfSB9LCBdXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgdCA9IFsgeyBkZXNjcmlwdGlvbjogJ0pTT04gRmlsZXMnLCBhY2NlcHQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJy5qc29uJ10gfSB9LCBdLy90ZXh0L3BsYWluXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdqcyc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IEZpbGVzJywgYWNjZXB0OiB7ICd0ZXh0L2phdmFzY3JpcHQnOiBbJy5qcyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgICAgICB0ID0gWyB7IGRlc2NyaXB0aW9uOiAnSW1hZ2VzJywgYWNjZXB0OiB7ICdpbWFnZS8qJzogWycucG5nJywgJy5naWYnLCAnLmpwZWcnLCAnLmpwZyddIH0gfSwgXVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWNvbic6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdJY29ucycsIGFjY2VwdDogeyAnaW1hZ2UveC1pY28nOiBbJy5pY28nXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x1dCc6XHJcbiAgICAgICAgICAgIHQgPSBbIHsgZGVzY3JpcHRpb246ICdMdXQnLCBhY2NlcHQ6IHsgJ3RleHQvcGxhaW4nOiBbJy5jdWJlJywgJy4zZGwnXSB9IH0sIF1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBMT0FEXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHN0YXRpYyBhc3luYyBsb2FkKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyID0gRmlsZXMuc2hvd09wZW5GaWxlUGlja2VyUG9seWZpbGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIFx0bGV0IHR5cGUgPSBvLnR5cGUgfHwgJydcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0eXBlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy9zdGFydEluOicuL2Fzc2V0cydcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZXMgPSBGaWxlcy5hdXRvVHlwZXMoIHR5cGUgKVxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKCBvcHRpb25zIClcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZVswXS5nZXRGaWxlKClcclxuICAgICAgICAgICAgLy9sZXQgY29udGVudCA9IGF3YWl0IGZpbGUudGV4dCgpXHJcblxyXG4gICAgICAgICAgICBpZiggIWZpbGUgKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICAgICAgbGV0IGZuYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS5zdWJzdHJpbmcoIGZuYW1lLmxhc3RJbmRleE9mKCcuJykrMSwgZm5hbWUubGVuZ3RoICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gWyAncG5nJywgJ2pwZycsICdqcGVnJywgJ21wNCcsICd3ZWJtJywgJ29nZycsICdtcDMnIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWYgPSBbICdzZWEnLCAneicsICdoZXgnLCAnYnZoJywgJ0JWSCcsICdnbGInLCAnZ2x0ZicgXTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCBkYXRhVXJsLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0RhdGFVUkwoIGZpbGUgKVxyXG4gICAgICAgICAgICBlbHNlIGlmKCBkYXRhQnVmLmluZGV4T2YoIGZ0eXBlICkgIT09IC0xICkgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCBmaWxlIClcclxuICAgICAgICAgICAgZWxzZSByZWFkZXIucmVhZEFzVGV4dCggZmlsZSApXHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gZS50YXJnZXQucmVzdWx0XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBpbWcsIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBKU09OLnBhcnNlKCBjb250ZW50ICksIGZuYW1lLCBmdHlwZSApXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIG8uY2FsbGJhY2sgKSBvLmNhbGxiYWNrKCBjb250ZW50LCBmbmFtZSwgZnR5cGUgKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIGlmKCBvLmFsd2F5cyAmJiBvLmNhbGxiYWNrICkgby5jYWxsYmFjayggbnVsbCApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cdHN0YXRpYyBzaG93T3BlbkZpbGVQaWNrZXJQb2x5ZmlsbCggb3B0aW9ucyApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgICAgICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLnR5cGVzXHJcbiAgICAgICAgICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlLmFjY2VwdClcclxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChpbnN0KSA9PiBPYmplY3Qua2V5cyhpbnN0KS5mbGF0TWFwKChrZXkpID0+IGluc3Rba2V5XSkpXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIixcIik7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgWy4uLmlucHV0LmZpbGVzXS5tYXAoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGU6IGFzeW5jICgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICBTQVZFXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc3RhdGljIGFzeW5jIHNhdmUoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVzZVBvbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgPSBGaWxlcy5zaG93U2F2ZUZpbGVQaWNrZXJQb2x5ZmlsbFxyXG4gICAgICAgICAgICB1c2VQb2x5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IG8udHlwZSB8fCAnJ1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHN1Z2dlc3RlZE5hbWU6IG8ubmFtZSB8fCAnaGVsbG8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogby5kYXRhIHx8ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvcHRpb25zLnR5cGVzID0gRmlsZXMuYXV0b1R5cGVzKCB0eXBlIClcclxuICAgICAgICAgICAgb3B0aW9ucy5maW5hbFR5cGUgPSBPYmplY3Qua2V5cyggb3B0aW9ucy50eXBlc1swXS5hY2NlcHQgKVswXVxyXG4gICAgICAgICAgICBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgKz0gb3B0aW9ucy50eXBlc1swXS5hY2NlcHRbb3B0aW9ucy5maW5hbFR5cGVdWzBdXHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGhhbmRsZVxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKCBvcHRpb25zICk7XHJcblxyXG4gICAgICAgICAgICBpZiggdXNlUG9seSApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSB0byB3cml0ZSB0b1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmNyZWF0ZVdyaXRhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFsgb3B0aW9ucy5kYXRhIF0sIHsgdHlwZTogb3B0aW9ucy5maW5hbFR5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSBvdXIgZmlsZVxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLndyaXRlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgYW5kIHdyaXRlIHRoZSBjb250ZW50cyB0byBkaXNrLlxyXG4gICAgICAgICAgICBhd2FpdCBmaWxlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dTYXZlRmlsZVBpY2tlclBvbHlmaWxsKCBvcHRpb25zICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLnN1Z2dlc3RlZE5hbWUgfHwgXCJteS1maWxlLnR4dFwiXHJcbiAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoWyBvcHRpb25zLmRhdGEgXSwgeyB0eXBlOm9wdGlvbnMuZmluYWxUeXBlIH0pO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKCBibG9iIClcclxuXHJcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpLCAxMDAwIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYS5jbGljaygpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gIEZPTERFUiBub3QgcG9zc2libGUgaW4gcG9seVxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyBnZXRGb2xkZXIoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgd2luZG93LnNob3dEaXJlY3RvcnlQaWNrZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBoYW5kbGUudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBlbnRyeS5nZXRGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlcylcclxuICAgICAgICAgICAgcmV0dXJuIGZpbGVzO1xyXG5cclxuICAgICAgICB9IGNhdGNoKGUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgXHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIFYyIHtcclxuXHJcblx0Y29uc3RydWN0b3IoIHggPSAwLCB5ID0gMCApIHtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXQgKCB4LCB5ICkge1xyXG5cclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggLz0gdi54O1xyXG5cdFx0dGhpcy55IC89IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5ICggdiApIHtcclxuXHJcblx0XHR0aGlzLnggKj0gdi54O1xyXG5cdFx0dGhpcy55ICo9IHYueTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG11bHRpcGx5U2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHRoaXMueCAqPSBzY2FsYXI7XHJcblx0XHR0aGlzLnkgKj0gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0ZGl2aWRlU2NhbGFyICggc2NhbGFyICkge1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7XHJcblxyXG5cdH1cclxuXHJcblx0bGVuZ3RoICgpIHtcclxuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKTtcclxuXHJcblx0fVxyXG5cclxuXHRhbmdsZSAoKSB7XHJcblxyXG5cdFx0Ly8gY29tcHV0ZXMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGl2ZSB4LWF4aXNcclxuXHJcblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKCB0aGlzLnksIHRoaXMueCApO1xyXG5cclxuXHRcdGlmICggYW5nbGUgPCAwICkgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcblxyXG5cdFx0cmV0dXJuIGFuZ2xlO1xyXG5cclxuXHR9XHJcblxyXG5cdGFkZFNjYWxhciAoIHMgKSB7XHJcblxyXG5cdFx0dGhpcy54ICs9IHM7XHJcblx0XHR0aGlzLnkgKz0gcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lZ2F0ZSAoKSB7XHJcblxyXG5cdFx0dGhpcy54ICo9IC0xO1xyXG5cdFx0dGhpcy55ICo9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bmVnICgpIHtcclxuXHJcblx0XHR0aGlzLnggPSAtMTtcclxuXHRcdHRoaXMueSA9IC0xO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0aXNaZXJvICgpIHtcclxuXHJcblx0XHRyZXR1cm4gKCB0aGlzLnggPT09IDAgJiYgdGhpcy55ID09PSAwICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y29weSAoIHYgKSB7XHJcblxyXG5cdFx0dGhpcy54ID0gdi54O1xyXG5cdFx0dGhpcy55ID0gdi55O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdGVxdWFscyAoIHYgKSB7XHJcblxyXG5cdFx0cmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdG5lYXJFcXVhbHMgKCB2LCBuICkge1xyXG5cclxuXHRcdHJldHVybiAoICggdi54LnRvRml4ZWQobikgPT09IHRoaXMueC50b0ZpeGVkKG4pICkgJiYgKCB2LnkudG9GaXhlZChuKSA9PT0gdGhpcy55LnRvRml4ZWQobikgKSApO1xyXG5cclxuXHR9XHJcblxyXG5cdGxlcnAgKCB2LCBhbHBoYSApIHtcclxuXHJcblx0XHRpZiggdiA9PT0gbnVsbCApe1xyXG5cdFx0XHR0aGlzLnggLT0gdGhpcy54ICogYWxwaGE7XHJcblx0XHQgICAgdGhpcy55IC09IHRoaXMueSAqIGFscGhhO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy54ICs9ICggdi54IC0gdGhpcy54ICkgKiBhbHBoYTtcclxuXHRcdCAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tIFwiLi9Sb290cy5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuL1Rvb2xzLmpzXCI7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSBcIi4vVjIuanNcIjtcclxuXHJcbi8qKlxyXG4gKiBAYXV0aG9yIGx0aCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9sby10aFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICAvLyBkaXNhYmxlIG1vdXNlIGNvbnRyb2xlXHJcbiAgICB0aGlzLmxvY2sgPSBvLmxvY2sgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gZm9yIGJ1dHRvblxyXG4gICAgdGhpcy5uZXZlcmxvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBvbmx5IHNpbXBsZSBzcGFjZVxyXG4gICAgdGhpcy5pc1NwYWNlID0gby5pc1NwYWNlIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIGlzIG9uIGd1aSBvciBncm91cFxyXG4gICAgdGhpcy5tYWluID0gby5tYWluIHx8IG51bGw7XHJcbiAgICB0aGlzLmlzVUkgPSBvLmlzVUkgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwID0gby5ncm91cCB8fCBudWxsO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0ZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnRvcCA9IDA7XHJcbiAgICB0aGlzLnl0b3AgPSAwO1xyXG5cclxuICAgIHRoaXMuZHggPSBvLmR4IHx8IDA7XHJcblxyXG4gICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCA/IG8uc2VsZWN0YWJsZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51bnNlbGVjdGFibGUgPVxyXG4gICAgICBvLnVuc2VsZWN0ICE9PSB1bmRlZmluZWQgPyBvLnVuc2VsZWN0IDogdGhpcy5pc1NlbGVjdGFibGU7XHJcblxyXG4gICAgdGhpcy5vbnRvcCA9IG8ub250b3AgPyBvLm9udG9wIDogZmFsc2U7IC8vICdiZWZvcmViZWdpbicgJ2FmdGVyYmVnaW4nICdiZWZvcmVlbmQnICdhZnRlcmVuZCdcclxuXHJcbiAgICB0aGlzLmNzcyA9IHRoaXMubWFpbiA/IHRoaXMubWFpbi5jc3MgOiBUb29scy5jc3M7XHJcblxyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihcclxuICAgICAgbyxcclxuICAgICAgdGhpcy5tYWluXHJcbiAgICAgICAgPyB0aGlzLmdyb3VwXHJcbiAgICAgICAgICA/IHRoaXMuZ3JvdXAuY29sb3JzXHJcbiAgICAgICAgICA6IHRoaXMubWFpbi5jb2xvcnNcclxuICAgICAgICA6IFRvb2xzLmNvbG9yc1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJFZmZlY3QgPSB0aGlzLmNvbG9ycy5zaG93T3ZlcjtcclxuXHJcbiAgICB0aGlzLnN2Z3MgPSBUb29scy5zdmdzO1xyXG5cclxuICAgIHRoaXMuem9uZSA9IHsgeDogMCwgeTogMCwgdzogMCwgaDogMCwgZDogMCB9O1xyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG5cclxuICAgIHRoaXMuaXNDYW52YXNPbmx5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcGVyY2VudCBvZiB0aXRsZVxyXG4gICAgdGhpcy5wID0gby5wICE9PSB1bmRlZmluZWQgPyBvLnAgOiBUb29scy5zaXplLnA7XHJcblxyXG4gICAgdGhpcy53ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnNpemUudyA6IFRvb2xzLnNpemUudztcclxuICAgIGlmIChvLncgIT09IHVuZGVmaW5lZCkgdGhpcy53ID0gby53O1xyXG5cclxuICAgIHRoaXMuaCA9IHRoaXMuaXNVSSA/IHRoaXMubWFpbi5zaXplLmggOiBUb29scy5zaXplLmg7XHJcbiAgICBpZiAoby5oICE9PSB1bmRlZmluZWQpIHRoaXMuaCA9IG8uaDtcclxuICAgIGlmICghdGhpcy5pc1NwYWNlKSB0aGlzLmggPSB0aGlzLmggPCAxMSA/IDExIDogdGhpcy5oO1xyXG4gICAgZWxzZSB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlY2FsZSBmb3IgY2FudmFzIG9ubHlcclxuICAgIHRoaXMuZncgPSBvLmZ3IHx8IDA7XHJcblxyXG4gICAgdGhpcy5hdXRvV2lkdGggPSBvLmF1dG8gfHwgdHJ1ZTsgLy8gYXV0byB3aWR0aCBvciBmbGV4XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAvL2ZhbHNlLy8gb3BlbiBzdGF0dVxyXG5cclxuICAgIC8vIHJhZGl1cyBmb3IgdG9vbGJveFxyXG4gICAgdGhpcy5yYWRpdXMgPSBvLnJhZGl1cyB8fCB0aGlzLmNvbG9ycy5yYWRpdXM7XHJcblxyXG4gICAgdGhpcy50cmFuc2l0aW9uID0gby50cmFuc2l0aW9uIHx8IFRvb2xzLnRyYW5zaXRpb247XHJcblxyXG4gICAgLy8gb25seSBmb3IgbnVtYmVyXHJcbiAgICB0aGlzLmlzTnVtYmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm5vTmVnID0gby5ub05lZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuYWxsRXF1YWwgPSBvLmFsbEVxdWFsIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIG9ubHkgbW9zdCBzaW1wbGVcclxuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciBlZGl0IHNsaWRlIHRleHRcclxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gbm8gdGl0bGVcclxuICAgIHRoaXMuc2ltcGxlID0gby5zaW1wbGUgfHwgZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zaW1wbGUpIHRoaXMuc2EgPSAwO1xyXG5cclxuICAgIC8vIGRlZmluZSBvYmogc2l6ZVxyXG4gICAgdGhpcy5zZXRTaXplKHRoaXMudyk7XHJcblxyXG4gICAgLy8gdGl0bGUgc2l6ZVxyXG4gICAgaWYgKG8uc2EgIT09IHVuZGVmaW5lZCkgdGhpcy5zYSA9IG8uc2E7XHJcbiAgICBpZiAoby5zYiAhPT0gdW5kZWZpbmVkKSB0aGlzLnNiID0gby5zYjtcclxuICAgIGlmICh0aGlzLnNpbXBsZSkgdGhpcy5zYiA9IHRoaXMudyAtIHRoaXMuc2E7XHJcblxyXG4gICAgLy8gbGFzdCBudW1iZXIgc2l6ZSBmb3Igc2xpZGVcclxuICAgIHRoaXMuc2MgPSBvLnNjID09PSB1bmRlZmluZWQgPyA0NyA6IG8uc2M7XHJcblxyXG4gICAgLy8gZm9yIGxpc3RlbmluZyBvYmplY3RcclxuICAgIHRoaXMub2JqZWN0TGluayA9IG51bGw7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vYmplY3RLZXkgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudHh0ID0gby5uYW1lIHx8IFwiXCI7XHJcbiAgICB0aGlzLm5hbWUgPSBvLnJlbmFtZSB8fCB0aGlzLnR4dDtcclxuICAgIHRoaXMudGFyZ2V0ID0gby50YXJnZXQgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjYWxsYmFja1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG4gICAgdGhpcy5lbmRDYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DYWxsYmFjayA9IG8ub3BlbkNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogby5vcGVuQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBvLmNsb3NlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNsb3NlQ2FsbGJhY2s7XHJcblxyXG4gICAgLy8gaWYgbm8gY2FsbGJhY2sgdGFrZSBvbmUgZnJvbSBncm91cCBvciBndWlcclxuICAgIGlmICh0aGlzLmNhbGxiYWNrID09PSBudWxsICYmIHRoaXMuaXNVSSAmJiB0aGlzLm1haW4uY2FsbGJhY2sgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jYWxsYmFjayA9IHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmNhbGxiYWNrIDogdGhpcy5tYWluLmNhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsZW1lbnRzXHJcbiAgICB0aGlzLmMgPSBbXTtcclxuXHJcbiAgICAvLyBzdHlsZVxyXG4gICAgdGhpcy5zID0gW107XHJcblxyXG4gICAgdGhpcy51c2VGbGV4ID0gdGhpcy5pc1VJID8gdGhpcy5tYWluLnVzZUZsZXggOiBmYWxzZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleFxyXG4gICAgICA/IFwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBhbGlnbi1pdGVtczpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyBmbGV4OiAxIDEwMCU7XCJcclxuICAgICAgOiBcImZsb2F0OmxlZnQ7XCI7XHJcblxyXG4gICAgdGhpcy5jWzBdID0gVG9vbHMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgXCJwb3NpdGlvbjpyZWxhdGl2ZTsgaGVpZ2h0OjIwcHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zWzBdID0gdGhpcy5jWzBdLnN0eWxlO1xyXG5cclxuICAgIC8vIGJvdHRvbSBtYXJnaW5cclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5jb2xvcnMuc3k7XHJcbiAgICB0aGlzLm10b3AgPSAwO1xyXG4gICAgbGV0IG1hcmdpbkRpdiA9IFRvb2xzLmlzRGl2aWQodGhpcy5tYXJnaW4pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVUkgJiYgdGhpcy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5zWzBdLmJveFNpemluZyA9IFwiY29udGVudC1ib3hcIjtcclxuICAgICAgaWYgKG1hcmdpbkRpdikge1xyXG4gICAgICAgIHRoaXMubXRvcCA9IHRoaXMubWFyZ2luICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5zWzBdLmJvcmRlclRvcCA9ICcke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudCdcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAke3RoaXMubXRvcH1weCBzb2xpZCB0cmFuc3BhcmVudGApXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlclRvcCA9IHRoaXMubXRvcCArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgICB0aGlzLnNbMF0uYm9yZGVyQm90dG9tID0gdGhpcy5tdG9wICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc1swXS5ib3JkZXJCb3R0b20gPSB0aGlzLm1hcmdpbiArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHdpdGggdGl0bGVcclxuICAgIGlmICghdGhpcy5zaW1wbGUpIHtcclxuICAgICAgdGhpcy5jWzFdID0gVG9vbHMuZG9tKFwiZGl2XCIsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLm1pZGRsZSk7XHJcbiAgICAgIHRoaXMuc1sxXSA9IHRoaXMuY1sxXS5zdHlsZTtcclxuICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy5uYW1lO1xyXG4gICAgICB0aGlzLnNbMV0uY29sb3IgPSB0aGlzLmxvY2sgPyB0aGlzLmNvbG9ycy50aXRsZW9mZiA6IHRoaXMuY29sb3JzLnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLnBvcykge1xyXG4gICAgICB0aGlzLnNbMF0ucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgIGZvciAobGV0IHAgaW4gby5wb3MpIHtcclxuICAgICAgICB0aGlzLnNbMF1bcF0gPSBvLnBvc1twXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vbm8gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvLmNzcykgdGhpcy5zWzBdLmNzc1RleHQgPSBvLmNzcztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBtYWtlIHRoZSBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy55dG9wID0gdGhpcy50b3AgKyB0aGlzLm10b3A7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuICAgIHRoaXMuem9uZS53ID0gdGhpcy53O1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5zOyAvLyBzdHlsZSBjYWNoZVxyXG4gICAgbGV0IGMgPSB0aGlzLmM7IC8vIGRpdiBjYWNoXHJcblxyXG4gICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVSSkgc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoICYmIHRoaXMudXNlRmxleCkge1xyXG4gICAgICBzWzBdLmZsZXggPSBcIjEgMCBhdXRvXCI7XHJcbiAgICAgIHNbMF0ubWluV2lkdGggPSB0aGlzLm1pbncgKyBcInB4XCI7XHJcbiAgICAgIHNbMF0udGV4dEFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVUkpIHNbMF0ud2lkdGggPSBcIjEwMCVcIjtcclxuICAgIH1cclxuXHJcbiAgICAvL2lmKCB0aGlzLmF1dG9IZWlnaHQgKSBzWzBdLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuMDFzIGVhc2Utb3V0JztcclxuICAgIGlmIChjWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hdXRvV2lkdGgpIHtcclxuICAgICAgc1sxXSA9IGNbMV0uc3R5bGU7XHJcbiAgICAgIHNbMV0udG9wID0gMSArIFwicHhcIjtcclxuICAgICAgc1sxXS5oZWlnaHQgPSB0aGlzLmggLSAyICsgXCJweFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcmFnID0gVG9vbHMuZnJhZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMSwgbG5nID0gYy5sZW5ndGg7IGkgIT09IGxuZzsgaSsrKSB7XHJcbiAgICAgIGlmIChjW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNbaV0pO1xyXG4gICAgICAgIHNbaV0gPSBjW2ldLnN0eWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBwID1cclxuICAgICAgdGhpcy50YXJnZXQgIT09IG51bGxcclxuICAgICAgICA/IHRoaXMudGFyZ2V0XHJcbiAgICAgICAgOiB0aGlzLmlzVUlcclxuICAgICAgICA/IHRoaXMubWFpbi5pbm5lclxyXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgICBpZiAodGhpcy5vbnRvcCkgcHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBjWzBdKTtcclxuICAgIGVsc2UgcHAuYXBwZW5kQ2hpbGQoY1swXSk7XHJcblxyXG4gICAgY1swXS5hcHBlbmRDaGlsZChmcmFnKTtcclxuXHJcbiAgICB0aGlzLnJTaXplKCk7XHJcblxyXG4gICAgLy8gISBzb2xvIHByb3RvXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xyXG4gICAgICBSb290cy5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUcmFuc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYmFzZUggJiYgdGhpcy50cmFuc2l0aW9uICYmIHRoaXMuaXNVSSkge1xyXG4gICAgICB0aGlzLmNbMF0uc3R5bGUudHJhbnNpdGlvbiA9IFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFRvb2xzXHJcblxyXG4gIGRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCkge1xyXG4gICAgcmV0dXJuIFRvb2xzLmRvbSh0eXBlLCBjc3MsIG9iaiwgZG9tLCBpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdmcoZG9tLCB0eXBlLCB2YWx1ZSwgaWQsIGlkMikge1xyXG4gICAgVG9vbHMuc2V0U3ZnKGRvbSwgdHlwZSwgdmFsdWUsIGlkLCBpZDIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzKGRvbSwgY3NzKSB7XHJcbiAgICBUb29scy5zZXRDc3MoZG9tLCBjc3MpO1xyXG4gIH1cclxuXHJcbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yUmluZygpIHtcclxuICAgIGlmICghVG9vbHMuY29sb3JSaW5nKSBUb29scy5tYWtlQ29sb3JSaW5nKCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHMuY29sb3JSaW5nKTtcclxuICB9XHJcblxyXG4gIGdldEpveXN0aWNrKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzW1wiam95c3RpY2tfXCIgKyBtb2RlbF0pIFRvb2xzLm1ha2VKb3lzdGljayhtb2RlbCk7XHJcbiAgICByZXR1cm4gVG9vbHMuY2xvbmUoVG9vbHNbXCJqb3lzdGlja19cIiArIG1vZGVsXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXJjdWxhcihtb2RlbCkge1xyXG4gICAgaWYgKCFUb29scy5jaXJjdWxhcikgVG9vbHMubWFrZUNpcmN1bGFyKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5jaXJjdWxhcik7XHJcbiAgfVxyXG5cclxuICBnZXRLbm9iKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLmtub2IpIFRvb2xzLm1ha2VLbm9iKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5rbm9iKTtcclxuICB9XHJcblxyXG4gIGdldFBhZDJkKG1vZGVsKSB7XHJcbiAgICBpZiAoIVRvb2xzLnBhZDJkKSBUb29scy5tYWtlUGFkKG1vZGVsKTtcclxuICAgIHJldHVybiBUb29scy5jbG9uZShUb29scy5wYWQyZCk7XHJcbiAgfVxyXG5cclxuICAvLyBmcm9tIFJvb3RzXHJcblxyXG4gIGN1cnNvcihuYW1lKSB7XHJcbiAgICBSb290cy5jdXJzb3IobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgdXBkYXRlKCkge31cclxuXHJcbiAgcmVzZXQoKSB7fVxyXG5cclxuICAvLy8vLy8vLy9cclxuXHJcbiAgY29udGVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNbMF07XHJcbiAgfVxyXG5cclxuICBnZXREb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jWzBdO1xyXG4gIH1cclxuXHJcbiAgdWlvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NrKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMub3ZlckVmZmVjdCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucykgdGhpcy5zWzBdLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kO1xyXG4gIH1cclxuXHJcbiAgdWlvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLm92ZXJFZmZlY3QpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnMpIHRoaXMuc1swXS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFja2dyb3VuZE92ZXI7XHJcbiAgfVxyXG5cclxuICByZW5hbWUocykge1xyXG4gICAgaWYgKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSBzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKCkge1xyXG4gICAgdGhpcy5pc0xpc3RlbiA9IFJvb3RzLmFkZExpc3Rlbih0aGlzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuaW5nKCkge1xyXG4gICAgLy8gbW9kaWZpZWQgYnkgRmVkZW1hcmlub1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNTZW5kKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXQpIHJldHVybjtcclxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIGhhcyBjaGFuZ2VkXHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IHRoaXMuc2V0VmFsdWUodGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSk7XHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHYpIHtcclxuICAgIGNvbnN0IG9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICBpZiAodGhpcy5pc051bWJlcikgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodik7XHJcbiAgICAvL2Vsc2UgaWYoIHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSApIHYgPSB2WzBdO1xyXG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdjtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9sZCAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyB1cGRhdGUgZXZlcnkgY2hhbmdlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdXBkYXRlIG9ubHkgb24gZW5kXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkZpbmlzaENoYW5nZShmKSB7XHJcbiAgICBpZiAodGhpcy5pc1NwYWNlKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxuICAgIHRoaXMuZW5kQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gZXZlbnQgb24gb3BlbiBjbG9zZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb25PcGVuKGYpIHtcclxuICAgIHRoaXMub3BlbkNhbGxiYWNrID0gZjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZShmKSB7XHJcbiAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSBmO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIHNlbmQgYmFjayB2YWx1ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0TGluayAhPT0gbnVsbCkgdGhpcy5vYmplY3RMaW5rW3RoaXMub2JqZWN0S2V5XSA9IHY7XHJcbiAgICBpZiAodGhpcy5jYWxsYmFjaykgdGhpcy5jYWxsYmFjayh2LCB0aGlzLm9iamVjdEtleSk7XHJcbiAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VuZEVuZCh2KSB7XHJcbiAgICB2ID0gdiB8fCB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2Lmxlbmd0aCA9PT0gMSkgdiA9IHZbMF07XHJcblxyXG4gICAgaWYgKHRoaXMuZW5kQ2FsbGJhY2spIHRoaXMuZW5kQ2FsbGJhY2sodik7XHJcbiAgICBpZiAodGhpcy5vYmplY3RMaW5rICE9PSBudWxsKSB0aGlzLm9iamVjdExpbmtbdGhpcy5vYmplY3RLZXldID0gdjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjbGVhciBub2RlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW4pIFJvb3RzLnJlbW92ZUxpc3Rlbih0aGlzKTtcclxuXHJcbiAgICBUb29scy5jbGVhcih0aGlzLmNbMF0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cCAhPT0gbnVsbCkgdGhpcy5ncm91cC5jbGVhck9uZSh0aGlzKTtcclxuICAgICAgZWxzZSB0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLmNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNVSSkgdGhpcy5tYWluLmNsZWFyT25lKHRoaXMpO1xyXG4gICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNVSSkgUm9vdHMucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYyA9IG51bGw7XHJcbiAgICB0aGlzLnMgPSBudWxsO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLmlzTGlzdGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHt9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBjaGFuZ2Ugc2l6ZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgbncgPSBSb290cy5nZXRXaWR0aCh0aGlzKTtcclxuICAgIGlmIChudykgdGhpcy53ID0gbnc7XHJcbiAgfVxyXG5cclxuICBzZXRTaXplKHN4KSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1dpZHRoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy53ID0gc3g7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XHJcbiAgICAgIHRoaXMuc2IgPSB0aGlzLncgLSB0aGlzLnNhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBwID0gdGhpcy53ICogKHRoaXMucCAvIDEwMCk7XHJcbiAgICAgIC8vdGhpcy5zYSA9IE1hdGguZmxvb3IoIHBwICsgMTAgKVxyXG4gICAgICAvL3RoaXMuc2IgPSBNYXRoLmZsb29yKCB0aGlzLncgLSBwcCAtIDIwIClcclxuICAgICAgdGhpcy5zYSA9IE1hdGguZmxvb3IocHAgKyA4KTtcclxuICAgICAgdGhpcy5zYiA9IE1hdGguZmxvb3IodGhpcy53IC0gcHAgLSAxNik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5hdXRvV2lkdGgpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pc1VJKSB0aGlzLnNbMF0ud2lkdGggPSB0aGlzLncgKyBcInB4XCI7XHJcbiAgICBpZiAoIXRoaXMuc2ltcGxlKSB0aGlzLnNbMV0ud2lkdGggPSB0aGlzLnNhICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGZvciBudW1lcmljIHZhbHVlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBzZXRUeXBlTnVtYmVyKG8pIHtcclxuICAgIHRoaXMuaXNOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgaWYgKG8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIG8udmFsdWUgPT09IFwic3RyaW5nXCIpIHRoaXMudmFsdWUgPSBvLnZhbHVlICogMTtcclxuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gby52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtSW5maW5pdHkgOiBvLm1pbjtcclxuICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogby5tYXg7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgbGV0IHM7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnByZWNpc2lvbikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBzID0gMC4xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcyA9IDAuMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBzID0gMC4wMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBzID0gMC4wMDAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDU6XHJcbiAgICAgICAgcyA9IDAuMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNjpcclxuICAgICAgICBzID0gMC4wMDAwMDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwID0gby5zdGVwID09PSB1bmRlZmluZWQgPyBzIDogby5zdGVwO1xyXG4gICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG51bVZhbHVlKG4pIHtcclxuICAgIGlmICh0aGlzLm5vTmVnKSBuID0gTWF0aC5hYnMobik7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIG4pKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSAqIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFMgREVGQVVMVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZSkge1xyXG4gICAgaWYgKHRoaXMubG9jaykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMubmV2ZXJsb2NrKSBSb290cy5sb2NrID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXNbZS50eXBlXSlcclxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS50eXBlLCBcInRoaXMgdHlwZSBvZiBldmVudCBubyBleGlzdGUgIVwiKTtcclxuXHJcbiAgICAvLyBUT0RPICEhISFcclxuXHJcbiAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIHouZCAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgIC8vaWYoIHRoaXMubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMubWFyZ2luICogMC41XHJcbiAgICAvL2lmKCB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubWFyZ2luRGl2ICkgZS5jbGllbnRZIC09IHRoaXMuZ3JvdXAubWFyZ2luICogMC41XHJcblxyXG4gICAgcmV0dXJuIHRoaXNbZS50eXBlXShlKTtcclxuICB9XHJcblxyXG4gIHdoZWVsKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vkb3duKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2Vtb3ZlKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZXl1cChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gb2JqZWN0IHJlZmVyZW5jeVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2V0UmVmZXJlbmN5KG9iaiwga2V5KSB7XHJcbiAgICB0aGlzLm9iamVjdExpbmsgPSBvYmo7XHJcbiAgICB0aGlzLm9iamVjdEtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNbMF0udmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gcmVzaXplIGhlaWdodFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbikgcmV0dXJuO1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5vcGVuQ2FsbGJhY2spIHRoaXMub3BlbkNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICBSb290cy5uZWVkUmVzaXplID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2spIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgbmVlZFpvbmUoKSB7XHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlem9uZSgpIHtcclxuICAgIFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBJTlBVVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc2VsZWN0KCkge31cclxuXHJcbiAgdW5zZWxlY3QoKSB7fVxyXG5cclxuICBzZXRJbnB1dChJbnB1dCkge1xyXG4gICAgUm9vdHMuc2V0SW5wdXQoSW5wdXQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdXBJbnB1dCh4LCBkb3duKSB7XHJcbiAgICByZXR1cm4gUm9vdHMudXBJbnB1dCh4LCBkb3duKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBzcGVjaWFsIGl0ZW1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNlbGVjdGVkKGIpIHtcclxuICAgIHRoaXMuaXNTZWxlY3QgPSBiIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvb2wgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8ubW9kZSAhPT0gdW5kZWZpbmVkID8gby5tb2RlIDogMFxyXG5cclxuICAgICAgICB0aGlzLm9uTmFtZSA9IG8ucmVuYW1lIHx8IHRoaXMudHh0XHJcbiAgICAgICAgaWYoIG8ub25OYW1lICkgby5vbm5hbWUgPSBvLm9uTmFtZVxyXG4gICAgICAgIGlmKCBvLm9ubmFtZSApIHRoaXMub25OYW1lID0gby5vbm5hbWVcclxuXHJcbiAgICAgICAgdGhpcy5pbmggPSBvLmluaCB8fCBNYXRoLmZsb29yKCB0aGlzLmgqMC44IClcclxuICAgICAgICB0aGlzLmludyA9IG8uaW53IHx8IDM2XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICBcclxuICAgICAgICBpZiggdGhpcy5tb2RlbCA9PT0gMCApe1xyXG4gICAgICAgICAgICBsZXQgdCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktKCh0aGlzLmluaC0yKSowLjUpO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2JhY2tncm91bmQ6JysgY2MuaW5wdXRCZyArJzsgaGVpZ2h0OicrKHRoaXMuaW5oLTIpKydweDsgd2lkdGg6Jyt0aGlzLmludysncHg7IHRvcDonK3QrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJvcmRlcjoycHggc29saWQgJysgY2MuYmFjayApXHJcbiAgICAgICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnaGVpZ2h0OicrKHRoaXMuaW5oLTYpKydweDsgd2lkdGg6MTZweDsgdG9wOicrKHQrMikrJ3B4OyBib3JkZXItcmFkaXVzOjEwcHg7IGJhY2tncm91bmQ6JysgY2MuYnV0dG9uKyc7JyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wID0gMFxyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAndG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdCA9IC0xXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB0cnVlIClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSggdHJ1ZSApXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgTU9ERVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGUgKCBvdmVyICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2VcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycywgcyA9IHRoaXMucywgbiwgdiA9IHRoaXMudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIG92ZXIgKSBuID0gdiA/IDQgOiAzXHJcbiAgICAgICAgZWxzZSBuID0gdiA/IDIgOiAxXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1vZGVsICE9PSAwICl7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoKCBuICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogc1syXS5jb2xvciA9IGNjLnRleHQ7IHNbMl0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBzWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1syXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHNbMl0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1syXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMl0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrb2ZmOyBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrOy8vIG9mZiBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHNbMl0uYmFja2dyb3VuZCA9IHNbMl0uYm9yZGVyQ29sb3IgPSBjYy5iYWNrOyBzWzNdLmJhY2tncm91bmQgPSBjYy50ZXh0T3ZlcjsgYnJlYWs7Ly8gb24gb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogc1syXS5iYWNrZ3JvdW5kID0gc1syXS5ib3JkZXJDb2xvciA9IGNjLmJhY2s7IHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOy8vIG9mZiBvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBzWzJdLmJhY2tncm91bmQgPSBzWzJdLmJvcmRlckNvbG9yID0gY2MuYmFja29mZjsgc1szXS5iYWNrZ3JvdW5kID0gY2MudGV4dFNlbGVjdDsgYnJlYWs7Ly8gb24gb3V0XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNbM10ubWFyZ2luTGVmdCA9IHYgPyAnMTdweCcgOiAnMnB4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdiA/IHRoaXMub25OYW1lIDogdGhpcy5uYW1lXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdXBkYXRlICggdXAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSgpXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKClcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IHcgPSAodGhpcy53IC0gMTAgKSAtIHRoaXMuaW53XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZWwgPT09IDAgKXtcclxuICAgICAgICAgICAgc1syXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICAgICAgc1szXS5sZWZ0ID0gdyArICdweCdcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiAgKyAncHgnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlID0gby52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG8udmFsdWUgfHwgdGhpcy50eHRcclxuICAgICAgICBpZiggby52YWx1ZXMgKSB0aGlzLnZhbHVlcyA9IG8udmFsdWVzXHJcblxyXG4gICAgICAgIGlmKCAhby52YWx1ZXMgJiYgIW8udmFsdWUgKSB0aGlzLnR4dCA9ICcnXHJcblxyXG4gICAgICAgIHRoaXMub25OYW1lID0gby5vbk5hbWUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBmb3JjZSBidXR0b24gd2lkdGhcclxuICAgICAgICB0aGlzLmJ3ID0gby5mb3JjZVdpZHRoIHx8IDBcclxuICAgICAgICBpZihvLmJ3KSB0aGlzLmJ3ID0gby5id1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBvLnNwYWNlIHx8IDNcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB0aGlzLnZhbHVlcyA9PT0gJ3N0cmluZycgKSB0aGlzLnZhbHVlcyA9IFsgdGhpcy52YWx1ZXMgXVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5uZXZlcmxvY2sgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5yZXMgPSAwXHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXVxyXG4gICAgICAgIHRoaXMuc3RhdCA9IFtdXHJcblxyXG4gICAgICAgIGxldCBzZWwsIGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgc2VsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW2ldID09PSB0aGlzLnZhbHVlICYmIHRoaXMuaXNTZWxlY3RhYmxlICkgc2VsID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jW2krMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICd0b3A6MXB4OyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnIClcclxuICAgICAgICAgICAgdGhpcy5jW2krMl0uc3R5bGUuYmFja2dyb3VuZCA9IHNlbCA/IGNjLnNlbGVjdCA6IGNjLmJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLmNbaSsyXS5zdHlsZS5jb2xvciA9IHNlbCA/IGNjLnRleHRTZWxlY3QgOiBjYy50ZXh0XHJcbiAgICAgICAgICAgIHRoaXMuY1tpKzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRbaV0gPSBzZWwgPyAzOjE7XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dD09PScnICkgdGhpcy5wID0gMCBcclxuXHJcbiAgICAgICAgaWYoICghby52YWx1ZSAmJiAhby52YWx1ZXMpIHx8IHRoaXMucCA9PT0gMCApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJ1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbk9mZigpIHtcclxuXHJcbiAgICAgICAgdGhpcy5vbiA9ICF0aGlzLm9uO1xyXG4gICAgICAgIHRoaXMubGFiZWwoIHRoaXMub24gPyB0aGlzLm9uTmFtZSA6IHRoaXMudmFsdWUgKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gLTFcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXBcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54PnRbaV1bMF0gJiYgbC54PHRbaV1bMl0gKSByZXR1cm4gaVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIGlmKCB0aGlzLnJlcyAhPT0gLTEgKXtcclxuICAgICAgICAgICAgaWYoIHRoaXMudmFsdWUgPT09IHRoaXMudmFsdWVzW3RoaXMucmVzXSAmJiB0aGlzLnVuc2VsZWN0YWJsZSApIHRoaXMudmFsdWUgPSAnJ1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnJlc11cclxuICAgICAgICAgICAgaWYoIHRoaXMub25OYW1lICE9PSBudWxsICkgdGhpcy5vbk9mZigpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgIFx0cmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHVwID0gZmFsc2VcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vZGVzICggTiA9IDEsIGlkID0gLTEgKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIHcsIG4sIHIgPSBmYWxzZVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgICAgICBuID0gTlxyXG4gICAgICAgICAgICB3ID0gdGhpcy5pc1NlbGVjdGFibGUgPyB0aGlzLnZhbHVlc1sgaSBdID09PSB0aGlzLnZhbHVlIDogZmFsc2VcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCBpID09PSBpZCApe1xyXG4gICAgICAgICAgICAgICAgaWYoIHcgJiYgbiA9PT0gMiApIG4gPSAzIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbiA9IDFcclxuICAgICAgICAgICAgICAgIGlmKCB3ICkgbiA9IDRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG4gICAgICAgICAgICByID0gdGhpcy5tb2RlKCBuLCBpIClcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gclxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgaWQgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoIXRoaXMucykgcmV0dXJuIGZhbHNlXHJcbiBcclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnMsIHMgPSB0aGlzLnNcclxuICAgICAgICBsZXQgaSA9IGlkKzJcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuc3RhdFtpZF0gIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdFtpZF0gPSBuO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHNbaV0uY29sb3IgPSBjYy50ZXh0OyBzW2ldLmJhY2tncm91bmQgPSBjYy5idXR0b247IGJyZWFrXHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogc1tpXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzW2ldLmJhY2tncm91bmQgPSBjYy5vdmVyOyBicmVha1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBzW2ldLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1tpXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVha1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVzID0gLTFcclxuICAgICAgICB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXMoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCAoIHN0cmluZywgbiApIHtcclxuXHJcbiAgICAgICAgbiA9IG4gfHwgMjtcclxuICAgICAgICB0aGlzLmNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmdcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoVmFsdWVzKCBuLCBzdHJpbmcgKXtcclxuICAgICAgICB0aGlzLmNbbisyXS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlc1tuXSA9IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpY29uICggc3RyaW5nLCB5ID0gMCwgbiA9IDIgKSB7XHJcblxyXG4gICAgICAgIC8vaWYoeSkgdGhpcy5zW25dLm1hcmdpbiA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLnNbbl0ucGFkZGluZyA9ICggeSApICsncHggMHB4JztcclxuICAgICAgICB0aGlzLmNbbl0uaW5uZXJIVE1MID0gc3RyaW5nO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGxldCB3ID0gdGhpcy5zYjtcclxuICAgICAgICBsZXQgZCA9IHRoaXMuc2E7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3ggLy90aGlzLnNwYWNlO1xyXG4gICAgICAgIC8vbGV0IHNpemUgPSBNYXRoLmZsb29yKCAoIHctKGRjKihpLTEpKSApIC8gaSApO1xyXG4gICAgICAgIGxldCBzaXplID0gKCB3LShzeCooaS0xKSkgKSAvIGkgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmJ3ICl7IFxyXG4gICAgICAgICAgICBzaXplID0gdGhpcy5idyA8IHNpemUgPyB0aGlzLmJ3IDogc2l6ZVxyXG4gICAgICAgICAgICAvL2QgPSBNYXRoLmZsb29yKCh0aGlzLnctKCAoc2l6ZSAqIGkpICsgKGRjICogKGktMSkpICkpKjAuNSlcclxuICAgICAgICAgICAgZCA9ICgodGhpcy53LSggKHNpemUgKiBpKSArIChzeCAqIChpLTEpKSApKSowLjUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcblxyXG4gICAgICAgIFx0Ly90aGlzLnRtcFtpXSA9IFsgTWF0aC5mbG9vciggZCArICggc2l6ZSAqIGkgKSArICggZGMgKiBpICkpLCBzaXplIF07XHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldID0gWyAoIGQgKyAoIHNpemUgKiBpICkgKyAoIHN4ICogaSApKSwgc2l6ZSBdO1xyXG4gICAgICAgIFx0dGhpcy50bXBbaV1bMl0gPSB0aGlzLnRtcFtpXVswXSArIHRoaXMudG1wW2ldWzFdO1xyXG5cclxuICAgICAgICAgICAgc1tpKzJdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1tpKzJdLndpZHRoID0gdGhpcy50bXBbaV1bMV0gKyAncHgnXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjdWxhciBleHRlbmRzIFByb3RvIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBzdXBlciggbyApXHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLnN0eXBlIHx8IDBcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlXHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2VcclxuICAgICAgICB0aGlzLm1pbncgPSB0aGlzLndcclxuICAgICAgICB0aGlzLmRpYW0gPSBvLmRpYW0gfHwgdGhpcy53IFxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnR3b1BpID0gVG9vbHMuVHdvUElcclxuICAgICAgICB0aGlzLnBpOTAgPSBUb29scy5waTkwXHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gby5oIHx8IHRoaXMudyArIDEwXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4J1xyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBpZih0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInXHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTBcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAwXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDBcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIGNjLnRleHQgKVxyXG5cclxuICAgICAgICAvLyBzdmdcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldENpcmN1bGFyKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDAgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAxIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnK3RoaXMuZGlhbSsnICcrdGhpcy5kaWFtIClcclxuICAgICAgICB0aGlzLnNldENzcyggdGhpcy5jWzNdLCB7IHdpZHRoOnRoaXMuZGlhbSwgaGVpZ2h0OnRoaXMuZGlhbSwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jbW9kZSA9PT0gbW9kZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBsZXQgY29sb3JcclxuXHJcbiAgICAgICAgc3dpdGNoKCBtb2RlICl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc1syXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMubW9kZWwgPiAwID8gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApIDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjb2xvciwgMSApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIGRvd25cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAwKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5tb2RlbCA+IDAgPyBUb29scy5wYWNrKCBUb29scy5sZXJwQ29sb3IoIFRvb2xzLnVucGFjayggVG9vbHMuQ29sb3JMdW1hKCBjYy50ZXh0LCAtMC43NSkgKSwgVG9vbHMudW5wYWNrKCBjYy50ZXh0ICksIHRoaXMucGVyY2VudCApICkgOiBjYy50ZXh0T3ZlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCAxICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAnY2lyY3VsYXInO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbGRyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ292ZXInKVxyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IG9mZi5hbmdsZSgpIC0gdGhpcy5waTkwO1xyXG4gICAgICAgIHRoaXMuciA9ICgoKHRoaXMuciV0aGlzLnR3b1BpKSt0aGlzLnR3b1BpKSV0aGlzLnR3b1BpKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMub2xkciAhPT0gbnVsbCApeyBcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWYgPSB0aGlzLnIgLSB0aGlzLm9sZHI7XHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGguYWJzKGRpZikgPiBNYXRoLlBJID8gdGhpcy5vbGRyIDogdGhpcy5yO1xyXG5cclxuICAgICAgICAgICAgaWYoIGRpZiA+IDYgKSB0aGlzLnIgPSAwO1xyXG4gICAgICAgICAgICBpZiggZGlmIDwgLTYgKSB0aGlzLnIgPSB0aGlzLnR3b1BpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLnR3b1BpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuciAqIHN0ZXBzO1xyXG5cclxuICAgICAgICBsZXQgbiA9ICggKCB0aGlzLnJhbmdlICogdmFsdWUgKSArIHRoaXMubWluICkgLSB0aGlzLm9sZDtcclxuXHJcbiAgICAgICAgaWYobiA+PSB0aGlzLnN0ZXAgfHwgbiA8PSB0aGlzLnN0ZXApeyBcclxuICAgICAgICAgICAgbiA9IH5+ICggbiAvIHRoaXMuc3RlcCApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1WYWx1ZSggdGhpcy5vbGQgKyAoIG4gKiB0aGlzLnN0ZXAgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub2xkciA9IHRoaXMucjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdoZWVsICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnY2lyY3VsYXInICkge1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCB2ID4gdGhpcy5tYXggKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWluIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHYgPCB0aGlzLm1pbiApIHtcclxuICAgICAgICAgICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHYgKTtcclxuICAgICAgICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbWFrZVBhdGggKCkge1xyXG5cclxuICAgICAgICBsZXQgciA9IDQwO1xyXG4gICAgICAgIGxldCBkID0gMjQ7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBlcmNlbnQgKiB0aGlzLnR3b1BpIC0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHgyID0gKHIgKyByICogTWF0aC5zaW4oYSkpICsgZDtcclxuICAgICAgICBsZXQgeTIgPSAociAtIHIgKiBNYXRoLmNvcyhhKSkgKyBkO1xyXG4gICAgICAgIGxldCBiaWcgPSBhID4gTWF0aC5QSSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBcIk0gXCIgKyAocitkKSArIFwiLFwiICsgZCArIFwiIEEgXCIgKyByICsgXCIsXCIgKyByICsgXCIgMCBcIiArIGJpZyArIFwiIDEgXCIgKyB4MiArIFwiLFwiICsgeTI7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9ICggdGhpcy52YWx1ZSAtIHRoaXMubWluICkgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZVBhdGgoKSwgMSApO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICAgICAgbGV0IGNvbG9yID0gVG9vbHMucGFjayggVG9vbHMubGVycENvbG9yKCBUb29scy51bnBhY2soIFRvb2xzLkNvbG9yTHVtYSggY2MudGV4dCwgLTAuNzUpICksIFRvb2xzLnVucGFjayggY2MudGV4dCApLCB0aGlzLnBlcmNlbnQgKSApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY29sb3IsIDEgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vY29yZS9Ub29scy5qcyc7XHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3IgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcblx0ICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcblx0ICAgIHRoaXMuY3R5cGUgPSBvLmN0eXBlIHx8ICdoZXgnO1xyXG5cclxuXHQgICAgdGhpcy53Zml4ZSA9IDI1NjtcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHQgICAgaWYoby5jdyAhPSB1bmRlZmluZWQgKSB0aGlzLmN3ID0gby5jdztcclxuXHJcblxyXG5cclxuXHQgICAgLy8gY29sb3IgdXAgb3IgZG93blxyXG5cdCAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG5cdCAgICB0aGlzLnVwID0gdGhpcy5zaWRlID09PSAnZG93bicgPyAwIDogMTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMuYmFzZUggPSB0aGlzLmg7XHJcblxyXG5cdCAgICB0aGlzLm9mZnNldCA9IG5ldyBWMigpO1xyXG5cdCAgICB0aGlzLmRlY2FsID0gbmV3IFYyKCk7XHJcblx0ICAgIHRoaXMucHAgPSBuZXcgVjIoKTtcclxuXHJcblx0ICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG5cdCAgIC8vIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgdGhpcy5jc3MubWlkZGxlICsgJ3RvcDoxcHg7IGhlaWdodDonKyh0aGlzLmgtMikrJ3B4OycgKyAnYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsnIClcclxuXHJcblx0ICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgYCR7dGhpcy5jc3MudHh0fSAke3RoaXMuY3NzLm1pZGRsZX0gdG9wOjFweDsgaGVpZ2h0OiR7dGhpcy5oLTJ9cHg7IGJvcmRlci1yYWRpdXM6JHt0aGlzLnJhZGl1c31weDsgdGV4dC1zaGFkb3c6bm9uZTsgYm9yZGVyOiR7Y2MuYm9yZGVyU2l6ZX1weCBzb2xpZCAke2NjLmJvcmRlcn07YCApXHJcblx0ICAgIC8vdGhpcy5zWzJdID0gdGhpcy5jWzJdLnN0eWxlO1xyXG5cclxuXHQgICAgLy90aGlzLnNbMl0udGV4dFNoYWRvdyA9ICdub25lJ1xyXG5cclxuXHQgICAgLyppZiggdGhpcy51cCApe1xyXG5cdCAgICAgICAgdGhpcy5zWzJdLnRvcCA9ICdhdXRvJztcclxuXHQgICAgICAgIHRoaXMuc1syXS5ib3R0b20gPSAnMnB4JztcclxuXHQgICAgfSovXHJcblxyXG5cdCAgICAvL3RoaXMuY1swXS5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHQgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG5cdCAgICB0aGlzLmNbM10gPSB0aGlzLmdldENvbG9yUmluZygpXHJcblx0ICAgIHRoaXMuY1szXS5zdHlsZS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nXHJcblxyXG5cdCAgICB0aGlzLmhzbCA9IG51bGxcclxuXHQgICAgdGhpcy52YWx1ZSA9ICcjZmZmZmZmJ1xyXG5cdCAgICBpZiggby52YWx1ZSAhPT0gdW5kZWZpbmVkICl7XHJcblx0ICAgICAgICBpZiggby52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gVG9vbHMuaGV4VG9IdG1sKCBvLnZhbHVlIClcclxuXHQgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWVcclxuXHQgICAgfVxyXG5cclxuXHQgICAgdGhpcy5iY29sb3IgPSBudWxsXHJcblx0ICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuXHQgICAgdGhpcy5maXN0RG93biA9IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLm5vdGV4dCA9IG8ubm90ZXh0IHx8IGZhbHNlXHJcblxyXG5cdCAgICB0aGlzLnRyID0gOThcclxuXHQgICAgdGhpcy50c2wgPSBNYXRoLnNxcnQoMykgKiB0aGlzLnRyXHJcblxyXG5cdCAgICB0aGlzLmh1ZSA9IDBcclxuXHQgICAgdGhpcy5kID0gMjU2XHJcblxyXG5cdCAgICB0aGlzLmluaXQoKVxyXG5cclxuXHQgICAgdGhpcy5zZXRDb2xvciggdGhpcy52YWx1ZSApXHJcblxyXG5cdCAgICBpZiggby5vcGVuICE9PSB1bmRlZmluZWQgKSB0aGlzLm9wZW4oKVxyXG5cclxuXHR9XHJcblxyXG5cdHRlc3Rab25lICggbXgsIG15ICkge1xyXG5cclxuXHRcdGxldCBsID0gdGhpcy5sb2NhbFxyXG5cdFx0aWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG5cclxuXHRcdGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcblxyXG5cdFx0XHRpZiggbC55ID4gdGhpcy53Zml4ZSApIHJldHVybiAndGl0bGUnXHJcblx0XHQgICAgZWxzZSByZXR1cm4gJ2NvbG9yJ1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSdcclxuXHQgICAgXHRlbHNlIGlmKCB0aGlzLmlzT3BlbiApIHJldHVybiAnY29sb3InXHJcblxyXG5cdFx0fVxyXG5cclxuICAgIH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0bW91c2V1cCAoIGUgKSB7XHJcblxyXG5cdCAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cdCAgICB0aGlzLmQgPSAyNTY7XHJcblxyXG5cdH1cclxuXHJcblx0bW91c2Vkb3duICggZSApIHtcclxuXHJcblxyXG5cdFx0bGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlLmNsaWVudFgsIGUuY2xpZW50WSApO1xyXG5cclxuXHJcblx0XHQvL2lmKCAhbmFtZSApIHJldHVybjtcclxuXHRcdGlmKG5hbWUgPT09ICd0aXRsZScpe1xyXG5cdFx0XHRpZiggIXRoaXMuaXNPcGVuICkgdGhpcy5vcGVuKCk7XHJcblx0ICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKTtcclxuXHQgICAgICAgIHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZiggbmFtZSA9PT0gJ2NvbG9yJyApe1xyXG5cclxuXHRcdFx0dGhpcy5pc0Rvd24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmZpc3REb3duID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bW91c2Vtb3ZlICggZSApIHtcclxuXHJcblx0ICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZS5jbGllbnRYLCBlLmNsaWVudFkgKTtcclxuXHJcblx0ICAgIGxldCBvZmYsIGQsIGh1ZSwgc2F0LCBsdW0sIHJhZCwgeCwgeSwgcnIsIFQgPSBUb29scztcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAndGl0bGUnICkgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcblx0ICAgIGlmKCBuYW1lID09PSAnY29sb3InICl7XHJcblxyXG5cdCAgICBcdG9mZiA9IHRoaXMub2Zmc2V0O1xyXG5cdFx0ICAgIG9mZi54ID0gZS5jbGllbnRYIC0gKCB0aGlzLnpvbmUueCArIHRoaXMuZGVjYWwueCArIHRoaXMubWlkICk7XHJcblx0XHQgICAgb2ZmLnkgPSBlLmNsaWVudFkgLSAoIHRoaXMuem9uZS55ICsgdGhpcy5kZWNhbC55ICsgdGhpcy5taWQgKSAtIHRoaXMueXRvcDtcclxuXHRcdFx0ZCA9IG9mZi5sZW5ndGgoKSAqIHRoaXMucmF0aW87XHJcblx0XHRcdHJyID0gb2ZmLmFuZ2xlKCk7XHJcblx0XHRcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblx0XHRcdFx0XHRcdFxyXG5cclxuXHQgICAgXHRpZiAoIGQgPCAxMjggKSB0aGlzLmN1cnNvcignY3Jvc3NoYWlyJyk7XHJcblx0ICAgIFx0ZWxzZSBpZiggIXRoaXMuaXNEb3duICkgdGhpcy5jdXJzb3IoKVxyXG5cclxuXHQgICAgXHRpZiggdGhpcy5pc0Rvd24gKXtcclxuXHJcblx0XHRcdCAgICBpZiggdGhpcy5maXN0RG93biApe1xyXG5cdFx0XHQgICAgXHR0aGlzLmQgPSBkO1xyXG5cdFx0XHQgICAgXHR0aGlzLmZpc3REb3duID0gZmFsc2U7XHJcblx0XHRcdCAgICB9XHJcblxyXG5cdFx0XHQgICAgaWYgKCB0aGlzLmQgPCAxMjggKSB7XHJcblxyXG5cdFx0XHRcdCAgICBpZiAoIHRoaXMuZCA+IHRoaXMudHIgKSB7IC8vIG91dHNpZGUgaHVlXHJcblxyXG5cdFx0XHRcdCAgICAgICAgaHVlID0gKCByciArIFQucGk5MCApIC8gVC5Ud29QSTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuaHVlID0gKGh1ZSArIDEpICUgMTtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuc2V0SFNMKFsoaHVlICsgMSkgJSAxLCB0aGlzLmhzbFsxXSwgdGhpcy5oc2xbMl1dKTtcclxuXHJcblx0XHRcdFx0ICAgIH0gZWxzZSB7IC8vIHRyaWFuZ2xlXHJcblxyXG5cdFx0XHRcdCAgICBcdHggPSBvZmYueCAqIHRoaXMucmF0aW87XHJcblx0XHRcdFx0ICAgIFx0eSA9IG9mZi55ICogdGhpcy5yYXRpbztcclxuXHJcblx0XHRcdFx0ICAgIFx0bGV0IHJyID0gKHRoaXMuaHVlICogVC5Ud29QSSkgKyBULlBJO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJyIDwgMCkgcnIgKz0gMiAqIFQuUEk7XHJcblxyXG5cdFx0XHRcdCAgICBcdHJhZCA9IE1hdGguYXRhbjIoLXksIHgpO1xyXG5cdFx0XHRcdCAgICBcdGlmKHJhZCA8IDApIHJhZCArPSAyICogVC5QSTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgIFx0bGV0IHJhZDAgPSAoIHJhZCArIFQucGk5MCArIFQuVHdvUEkgKyByciApICUgKFQuVHdvUEkpLFxyXG5cdFx0XHRcdCAgICBcdHJhZDEgPSByYWQwICUgKCgyLzMpICogVC5QSSkgLSAoVC5waTYwKSxcclxuXHRcdFx0XHQgICAgXHRhICAgID0gMC41ICogdGhpcy50cixcclxuXHRcdFx0XHQgICAgXHRiICAgID0gTWF0aC50YW4ocmFkMSkgKiBhLFxyXG5cdFx0XHRcdCAgICBcdHIgICAgPSBNYXRoLnNxcnQoeCp4ICsgeSp5KSxcclxuXHRcdFx0XHQgICAgXHRtYXhSID0gTWF0aC5zcXJ0KGEqYSArIGIqYik7XHJcblxyXG5cdFx0XHRcdCAgICBcdGlmKCByID4gbWF4UiApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZHggPSBNYXRoLnRhbihyYWQxKSAqIHI7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJhZDIgPSBNYXRoLmF0YW4oZHggLyBtYXhSKTtcclxuXHRcdFx0XHRcdFx0XHRpZihyYWQyID4gVC5waTYwKSAgcmFkMiA9IFQucGk2MDtcclxuXHRcdFx0XHRcdFx0ICAgIGVsc2UgaWYoIHJhZDIgPCAtVC5waTYwICkgcmFkMiA9IC1ULnBpNjA7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJhZCArPSByYWQyIC0gcmFkMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmFkMCA9IChyYWQgKyBULnBpOTAgICsgVC5Ud29QSSArIHJyKSAlIChULlR3b1BJKSxcclxuXHRcdFx0XHRcdFx0XHRyYWQxID0gcmFkMCAlICgoMi8zKSAqIFQuUEkpIC0gKFQucGk2MCk7XHJcblx0XHRcdFx0XHRcdFx0YiA9IE1hdGgudGFuKHJhZDEpICogYTtcclxuXHRcdFx0XHRcdFx0XHRyID0gbWF4UiA9IE1hdGguc3FydChhKmEgKyBiKmIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRsdW0gPSAoKE1hdGguc2luKHJhZDApICogcikgLyB0aGlzLnRzbCkgKyAwLjU7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGxldCB3ID0gMSAtIChNYXRoLmFicyhsdW0gLSAwLjUpICogMik7XHJcblx0XHRcdFx0XHRcdHNhdCA9ICgoKE1hdGguY29zKHJhZDApICogcikgKyAodGhpcy50ciAvIDIpKSAvICgxLjUgKiB0aGlzLnRyKSkgLyB3O1xyXG5cdFx0XHRcdFx0XHRzYXQgPSBULmNsYW1wKCBzYXQsIDAsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLnNldEhTTChbdGhpcy5oc2xbMF0sIHNhdCwgbHVtXSk7XHJcblxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRzZXRIZWlnaHQgKCkge1xyXG5cclxuXHRcdHRoaXMuaCA9IHRoaXMuaXNPcGVuID8gdGhpcy53Zml4ZSArIHRoaXMuYmFzZUggKyA1IDogdGhpcy5iYXNlSFxyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuXHRcdHRoaXMuem9uZS5oID0gdGhpcy5oXHJcblxyXG5cdH1cclxuXHJcblx0cGFyZW50SGVpZ2h0ICggdCApIHtcclxuXHJcblx0XHRpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKTtcclxuXHQgICAgZWxzZSBpZiAoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0b3BlbiAoKSB7XHJcblxyXG5cdFx0c3VwZXIub3BlbigpO1xyXG5cclxuXHRcdHRoaXMuc2V0SGVpZ2h0KCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSAtPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdCAgICB0aGlzLnNbM10udmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHQgICAgLy90aGlzLnNbM10uZGlzcGxheSA9ICdibG9jayc7XHJcblx0ICAgIHRoaXMucGFyZW50SGVpZ2h0KCB0ICk7XHJcblxyXG5cdH1cclxuXHJcblx0Y2xvc2UgKCkge1xyXG5cclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblxyXG5cdFx0aWYoIHRoaXMudXAgKSB0aGlzLnpvbmUueSArPSB0aGlzLndmaXhlICsgNTtcclxuXHJcblx0XHRsZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUg7XHJcblxyXG5cdFx0dGhpcy5zZXRIZWlnaHQoKTtcclxuXHJcblx0ICAgIHRoaXMuc1szXS52aXNpYmlsaXR5ICA9ICdoaWRkZW4nO1xyXG5cdCAgICAvL3RoaXMuc1szXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdCAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcblx0fVxyXG5cclxuXHR1cGRhdGUgKCB1cCApIHtcclxuXHJcblx0ICAgIGxldCBjYyA9IFRvb2xzLnJnYlRvSGV4KCBUb29scy5oc2xUb1JnYihbIHRoaXMuaHNsWzBdLCAxLCAwLjUgXSkgKTtcclxuXHJcblx0ICAgIHRoaXMubW92ZU1hcmtlcnMoKTtcclxuXHQgICAgXHJcblx0ICAgIHRoaXMudmFsdWUgPSB0aGlzLmJjb2xvcjtcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MsIDIsIDAgKTtcclxuXHJcblx0ICAgIHRoaXMuc1syXS5iYWNrZ3JvdW5kID0gdGhpcy5iY29sb3I7XHJcblx0ICAgIGlmKCF0aGlzLm5vdGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gVG9vbHMuaHRtbFRvSGV4KCB0aGlzLmJjb2xvciApO1xyXG5cclxuXHQgICAgdGhpcy5pbnZlcnQgPSBUb29scy5maW5kRGVlcEludmVyKCB0aGlzLnJnYiApO1xyXG5cdCAgICB0aGlzLnNbMl0uY29sb3IgPSB0aGlzLmludmVydCA/ICcjZmZmJyA6ICcjMDAwJztcclxuXHJcblx0ICAgIGlmKCF1cCkgcmV0dXJuO1xyXG5cclxuXHQgICAgaWYoIHRoaXMuY3R5cGUgPT09ICdhcnJheScgKSB0aGlzLnNlbmQoIHRoaXMucmdiICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAncmdiJyApIHRoaXMuc2VuZCggVG9vbHMuaHRtbFJnYiggdGhpcy5yZ2IgKSApO1xyXG5cdCAgICBpZiggdGhpcy5jdHlwZSA9PT0gJ2hleCcgKSB0aGlzLnNlbmQoIFRvb2xzLmh0bWxUb0hleCggdGhpcy52YWx1ZSApICk7XHJcblx0ICAgIGlmKCB0aGlzLmN0eXBlID09PSAnaHRtbCcgKSB0aGlzLnNlbmQoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoIHYgKXtcclxuXHJcblx0XHRpZiggdiBpbnN0YW5jZW9mIEFycmF5ICkgdGhpcy52YWx1ZSA9IFRvb2xzLnJnYlRvSGV4KCB2ICk7XHJcbiAgICAgICAgZWxzZSBpZighaXNOYU4odikpIHRoaXMudmFsdWUgPSBUb29scy5oZXhUb0h0bWwoIHYgKTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2O1xyXG5cclxuXHRcdHRoaXMuc2V0Q29sb3IoIHRoaXMudmFsdWUgKVxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG5cdH1cclxuXHJcblx0c2V0Q29sb3IgKCBjb2xvciApIHtcclxuXHJcblx0ICAgIGxldCB1bnBhY2sgPSBUb29scy51bnBhY2soY29sb3IpO1xyXG5cdCAgICBpZiAodGhpcy5iY29sb3IgIT09IGNvbG9yICYmIHVucGFjaykge1xyXG5cclxuXHQgICAgICAgIHRoaXMuYmNvbG9yID0gY29sb3JcclxuXHQgICAgICAgIHRoaXMucmdiID0gdW5wYWNrXHJcblx0ICAgICAgICB0aGlzLmhzbCA9IFRvb2xzLnJnYlRvSHNsKCB0aGlzLnJnYiApXHJcblxyXG5cdCAgICAgICAgdGhpcy5odWUgPSB0aGlzLmhzbFswXTtcclxuXHJcblx0ICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cdCAgICB9XHJcblx0ICAgIHJldHVybiB0aGlzO1xyXG5cclxuXHR9XHJcblxyXG5cdHNldEhTTCAoIGhzbCApIHtcclxuXHJcblx0ICAgIHRoaXMuaHNsID0gaHNsO1xyXG5cdCAgICB0aGlzLnJnYiA9IFRvb2xzLmhzbFRvUmdiKCBoc2wgKTtcclxuXHQgICAgdGhpcy5iY29sb3IgPSBUb29scy5yZ2JUb0hleCggdGhpcy5yZ2IgKTtcclxuXHQgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHQgICAgcmV0dXJuIHRoaXM7XHJcblxyXG5cdH1cclxuXHJcblx0bW92ZU1hcmtlcnMgKCkge1xyXG5cclxuXHRcdGxldCBwID0gdGhpcy5wcFxyXG5cdFx0bGV0IFQgPSBUb29sc1xyXG5cclxuXHQgICAgbGV0IGMxID0gdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCc7XHJcblx0ICAgIGxldCBhID0gdGhpcy5oc2xbMF0gKiBULlR3b1BJO1xyXG5cdCAgICBsZXQgdGhpcmQgPSAoMi8zKSAqIFQuUEk7XHJcblx0ICAgIGxldCByID0gdGhpcy50cjtcclxuXHQgICAgbGV0IGggPSB0aGlzLmhzbFswXTtcclxuXHQgICAgbGV0IHMgPSB0aGlzLmhzbFsxXTtcclxuXHQgICAgbGV0IGwgPSB0aGlzLmhzbFsyXTtcclxuXHJcblx0ICAgIGxldCBhbmdsZSA9ICggYSAtIFQucGk5MCApICogVC50b2RlZztcclxuXHJcblx0ICAgIGggPSAtIGEgKyBULnBpOTA7XHJcblxyXG5cdFx0bGV0IGh4ID0gTWF0aC5jb3MoaCkgKiByO1xyXG5cdFx0bGV0IGh5ID0gLU1hdGguc2luKGgpICogcjtcclxuXHRcdGxldCBzeCA9IE1hdGguY29zKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHN5ID0gLU1hdGguc2luKGggLSB0aGlyZCkgKiByO1xyXG5cdFx0bGV0IHZ4ID0gTWF0aC5jb3MoaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgdnkgPSAtTWF0aC5zaW4oaCArIHRoaXJkKSAqIHI7XHJcblx0XHRsZXQgbXggPSAoc3ggKyB2eCkgLyAyLCBteSA9IChzeSArIHZ5KSAvIDI7XHJcblx0XHRhICA9ICgxIC0gMiAqIE1hdGguYWJzKGwgLSAuNSkpICogcztcclxuXHRcdGxldCB4ID0gc3ggKyAodnggLSBzeCkgKiBsICsgKGh4IC0gbXgpICogYTtcclxuXHRcdGxldCB5ID0gc3kgKyAodnkgLSBzeSkgKiBsICsgKGh5IC0gbXkpICogYTtcclxuXHJcblx0ICAgIHAuc2V0KCB4LCB5ICkuYWRkU2NhbGFyKDEyOCk7XHJcblxyXG5cdCAgICAvL2xldCBmZiA9ICgxLWwpKjI1NTtcclxuXHQgICAgLy8gdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICdyZ2IoJytmZisnLCcrZmYrJywnK2ZmKycpJywgMyApO1xyXG5cclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3RyYW5zZm9ybScsICdyb3RhdGUoJythbmdsZSsnICknLCAyICk7XHJcblxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBwLngsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgcC55LCAzICk7XHJcblx0ICAgIFxyXG5cdCAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgdGhpcy5pbnZlcnQgPyAnI2ZmZicgOiAnIzAwMCcsIDIsIDMgKTtcclxuXHQgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIHRoaXMuaW52ZXJ0ID8gJyNmZmYnIDogJyMwMDAnLCAzICk7XHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJyx0aGlzLmJjb2xvciwgMyApO1xyXG5cclxuXHR9XHJcblxyXG5cdHJTaXplICgpIHtcclxuXHJcblx0ICAgIC8vUHJvdG8ucHJvdG90eXBlLnJTaXplLmNhbGwoIHRoaXMgKTtcclxuXHQgICAgc3VwZXIuclNpemUoKTtcclxuXHJcblx0ICAgIGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHQgICAgc1syXS53aWR0aCA9IHRoaXMuc2IgKyAncHgnO1xyXG5cdCAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuXHJcblx0ICAgIC8vY29uc29sZS5sb2codGhpcy5zYilcclxuXHJcblx0ICAgIHRoaXMuY3cgPSB0aGlzLnNiID4gMjU2ID8gMjU2IDogdGhpcy5zYjtcclxuXHJcblxyXG5cclxuXHQgICAgdGhpcy5yU2l6ZUNvbG9yKCB0aGlzLmN3ICk7XHJcblxyXG5cdCAgICB0aGlzLmRlY2FsLnggPSBNYXRoLmZsb29yKCh0aGlzLncgLSB0aGlzLndmaXhlKSAqIDAuNSk7XHJcblx0ICAgIC8vc1szXS5sZWZ0ID0gdGhpcy5kZWNhbC54ICsgJ3B4JztcclxuXHQgICAgXHJcblx0fVxyXG5cclxuXHRyU2l6ZUNvbG9yICggdyApIHtcclxuXHJcblxyXG5cdFx0aWYoIHcgPT09IHRoaXMud2ZpeGUgKSByZXR1cm47XHJcblxyXG5cclxuXHJcblx0XHR0aGlzLndmaXhlID0gdztcclxuXHJcblxyXG5cclxuXHRcdGxldCBzID0gdGhpcy5zO1xyXG5cclxuXHRcdC8vdGhpcy5kZWNhbC54ID0gTWF0aC5mbG9vcigodGhpcy53IC0gdGhpcy53Zml4ZSkgKiAwLjUpO1xyXG5cdCAgICB0aGlzLmRlY2FsLnkgPSB0aGlzLnNpZGUgPT09ICd1cCcgPyAyIDogdGhpcy5iYXNlSCArIDJcclxuXHQgICAgdGhpcy5taWQgPSBNYXRoLmZsb29yKCB0aGlzLndmaXhlICogMC41IClcclxuXHJcblx0ICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd2aWV3Qm94JywgJzAgMCAnKyB0aGlzLndmaXhlICsgJyAnKyB0aGlzLndmaXhlIClcclxuXHQgICAgc1szXS53aWR0aCA9IHRoaXMud2ZpeGUgKyAncHgnXHJcblx0ICAgIHNbM10uaGVpZ2h0ID0gdGhpcy53Zml4ZSArICdweCdcclxuICAgIFx0Ly9zWzNdLmxlZnQgPSB0aGlzLmRlY2FsLnggKyAncHgnO1xyXG5cdCAgICBzWzNdLnRvcCA9IHRoaXMuZGVjYWwueSArICdweCdcclxuXHJcblx0ICAgIHRoaXMucmF0aW8gPSAyNTYgLyB0aGlzLndmaXhlXHJcblx0ICAgIHRoaXMuc3F1YXJlID0gMSAvICg2MCoodGhpcy53Zml4ZS8yNTYpKVxyXG5cdCAgICB0aGlzLnNldEhlaWdodCgpXHJcblxyXG5cdH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuLi9jb3JlL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGcHMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG4gICAgICAgIC8vdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuICAgICAgICB0aGlzLmhwbHVzID0gby5ocGx1cyB8fCA1MDtcclxuXHJcbiAgICAgICAgdGhpcy5yZXMgPSBvLnJlcyB8fCA0MDtcclxuICAgICAgICB0aGlzLmwgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uIHx8IDA7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gby5jdXN0b20gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYW1lcyA9IG8ubmFtZXMgfHwgWydGUFMnLCAnTVMnXTtcclxuICAgICAgICBsZXQgY2MgPSBvLmNjIHx8IFsnMjIwLDIyMCwyMjAnLCAnMjU1LDI1NSwwJ107XHJcblxyXG4gICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAxMDAsIDEwMCBdO1xyXG4gICAgICAgLy8gdGhpcy5tdWx0eSA9IFsgMzAsIDMwLCAzMCBdO1xyXG5cclxuICAgICAgICB0aGlzLmFkZGluZyA9IG8uYWRkaW5nIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJhbmdlID0gby5yYW5nZSB8fCBbIDE2NSwgMTAwLCAxMDAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IG8uYWxwaGEgfHwgMC4yNTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dERpc3BsYXkgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY3VzdG9tKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubm93ID0gUm9vdHMuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsvL3RoaXMubm93KClcclxuICAgICAgICAgICAgdGhpcy5wcmV2VGltZSA9IDA7Ly90aGlzLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZnBzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5tZW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1tID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW0gPSAoIHNlbGYucGVyZm9ybWFuY2UgJiYgc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkgKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgLy8gdGhpcy5kaXZpZCA9IFsgMTAwLCAyMDAsIDEgXTtcclxuICAgICAgICAgICAvLyB0aGlzLm11bHR5ID0gWyAzMCwgMzAsIDMwIF07XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5pc01lbSApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmFtZXMucHVzaCgnTUVNJyk7XHJcbiAgICAgICAgICAgICAgICBjYy5wdXNoKCcwLDI1NSwyNTUnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudHh0ID0gby5uYW1lIHx8ICdGcHMnXHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktMztcclxuICAgICAgICBjb25zdCBjY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdGhpcy50eHQ7XHJcbiAgICAgICAgLy90aGlzLmNbMV0uaW5uZXJIVE1MID0gJyYjMTYwOycgKyB0aGlzLnR4dFxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XHJcblxyXG4gICAgICAgIGxldCBwYW5lbENzcyA9ICdkaXNwbGF5Om5vbmU7IGxlZnQ6MTBweDsgdG9wOicrIHRoaXMuaCArICdweDsgaGVpZ2h0OicrKHRoaXMuaHBsdXMgLSA4KSsncHg7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOyBib3JkZXI6MXB4IHNvbGlkICcrIGNjYy5ib3JkZXIgKyc7JztcclxuXHJcbiAgICAgICAgaWYoIHRoaXMucmFkaXVzICE9PSAwICkgcGFuZWxDc3MgKz0gJ2JvcmRlci1yYWRpdXM6JyArIHRoaXMucmFkaXVzKydweDsnOyBcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyBwYW5lbENzcyAsIHt9ICk7XHJcblxyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwICcrdGhpcy5yZXMrJyA1MCcgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScgKTtcclxuICAgICAgICB0aGlzLmNbMl0uc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAlJyApO1xyXG4gICAgICAgIHRoaXMuY1syXS5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScgKTtcclxuXHJcblxyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDI1NSwyNTUsMCwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjRkYwJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIC8vdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKDAsMjU1LDI1NSwwLjMpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOicjMEZGJywgJ3ZlY3Rvci1lZmZlY3QnOidub24tc2NhbGluZy1zdHJva2UnIH0sIHRoaXMuY1syXSApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGFycm93XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjZweDsgaGVpZ2h0OjZweDsgbGVmdDowOyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjY2MudGV4dCwgc3Ryb2tlOidub25lJ30pXHJcbiAgICAgICAgLy90aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IGxlZnQ6NHB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5hcnJvdywgZmlsbDp0aGlzLmNvbG9ycy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIC8vIHJlc3VsdCB0ZXN0XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTBweDsgdG9wOicrKHRoaXMuaCsyKSArJ3B4OyBkaXNwbGF5Om5vbmU7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOycgKTtcclxuXHJcbiAgICAgICAgLy8gYm90dG9tIGxpbmVcclxuICAgICAgICBpZiggby5ib3R0b21MaW5lICkgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3R0b206MHB4OyBoZWlnaHQ6MXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIC8vc1sxXS5tYXJnaW5MZWZ0ID0gJzEwcHgnO1xyXG4gICAgICAgIHNbMV0ubGluZUhlaWdodCA9IHRoaXMuaC00O1xyXG4gICAgICAgIHNbMV0uY29sb3IgPSBjY2MudGV4dDtcclxuICAgICAgICAvL3NbMV0ucGFkZGluZ0xlZnQgPSAnMThweCc7XHJcbiAgICAgICAgLy9zWzFdLmZvbnRXZWlnaHQgPSAnYm9sZCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApICBzWzBdLmJvcmRlclJhZGl1cyA9IHRoaXMucmFkaXVzKydweCc7XHJcbiAgICAgICAgaWYoIHRoaXMuY29sb3JzLmdib3JkZXIhPT0nbm9uZScpIHNbMF0uYm9yZGVyID0gJzFweCBzb2xpZCAnICsgY2NjLmdib3JkZXI7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgZm9yKCBqPTA7IGo8dGhpcy5uYW1lcy5sZW5ndGg7IGorKyApe1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhc2UgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnJlcysxO1xyXG4gICAgICAgICAgICB3aGlsZSggaS0tICkgYmFzZS5wdXNoKDUwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2Vbal0gPSAoIDEgLyB0aGlzLnJhbmdlW2pdICkgKiA0OTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIGJhc2UgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCgwKTtcclxuICAgICAgICAgICAvLyAgdGhpcy5kb20oICdwYXRoJywgbnVsbCwgeyBmaWxsOidyZ2JhKCcrY2Nbal0rJywwLjUpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0RGlzcGxheS5wdXNoKCBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZ2IoXCIrY2Nbal0rXCIpJz4gXCIgKyB0aGlzLm5hbWVzW2pdICtcIiBcIik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaiA9IHRoaXMubmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGotLSl7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tKCAncGF0aCcsIG51bGwsIHsgZmlsbDoncmdiYSgnK2NjW2pdKycsJyt0aGlzLmFscGhhKycpJywgJ3N0cm9rZS13aWR0aCc6MSwgc3Ryb2tlOidyZ2JhKCcrY2Nbal0rJywxKScsICd2ZWN0b3ItZWZmZWN0Jzonbm9uLXNjYWxpbmctc3Ryb2tlJyB9LCB0aGlzLmNbMl0gKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy9pZiggdGhpcy5pc1Nob3cgKSB0aGlzLnNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1Nob3cgKSB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm9wZW4oKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qbW9kZTogZnVuY3Rpb24gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgLy9zWzFdLmJhY2tncm91bmQgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbMV0uY29sb3IgPSAnI0ZGRic7XHJcbiAgICAgICAgICAgICAgICAvL3NbMV0uYmFja2dyb3VuZCA9IFVJTC5TRUxFQ1Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzFdLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dDtcclxuICAgICAgICAgICAgICAgIC8vc1sxXS5iYWNrZ3JvdW5kID0gVUlMLlNFTEVDVERPV047XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LCovXHJcblxyXG4gICAgdGljayAoIHYgKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdjtcclxuICAgICAgICBpZiggIXRoaXMuaXNTaG93ICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgICAgdGhpcy51cFRleHQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBhdGggKCBwb2ludCApIHtcclxuXHJcbiAgICAgICAgbGV0IHAgPSAnJztcclxuICAgICAgICBwICs9ICdNICcgKyAoLTEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdGhpcy5yZXMgKyAxOyBpICsrICkgeyBwICs9ICcgTCAnICsgaSArICcgJyArIHBvaW50W2ldOyB9XHJcbiAgICAgICAgcCArPSAnIEwgJyArICh0aGlzLnJlcyArIDEpICsgJyAnICsgNTA7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwVGV4dCAoIHZhbCApIHtcclxuXHJcbiAgICAgICAgbGV0IHYgPSB2YWwgfHwgdGhpcy52YWx1ZXMsIHQgPSAnJztcclxuICAgICAgICBmb3IoIGxldCBqPTAsIGxuZyA9dGhpcy5uYW1lcy5sZW5ndGg7IGo8bG5nOyBqKysgKSB0ICs9IHRoaXMudGV4dERpc3BsYXlbal0gKyAodltqXSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9IHQ7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBkcmF3R3JhcGggKCkge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdGhpcy5jWzJdO1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5uYW1lcy5sZW5ndGgsIHYsIG9sZCA9IDAsIG4gPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmFkZGluZyApIHYgPSAodGhpcy52YWx1ZXNbbl0rb2xkKSAqIHRoaXMucmFuZ2Vbbl07XHJcbiAgICAgICAgICAgIGVsc2UgIHYgPSAodGhpcy52YWx1ZXNbbl0gKiB0aGlzLnJhbmdlW25dKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0uc2hpZnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludHNbbl0ucHVzaCggNTAgLSB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCBzdmcsICdkJywgdGhpcy5tYWtlUGF0aCggdGhpcy5wb2ludHNbbl0gKSwgaSsxICk7XHJcbiAgICAgICAgICAgIG9sZCArPSB0aGlzLnZhbHVlc1tuXTtcclxuICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5ocGx1cyArIHRoaXMuYmFzZUg7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5zdmdzLmcyICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmdyb3VwICE9PSBudWxsICl7IHRoaXMuZ3JvdXAuY2FsYyggdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdGhpcy5ocGx1cyApO1xyXG5cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ2Jsb2NrJzsgXHJcbiAgICAgICAgdGhpcy5zWzRdLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1c3RvbSApIFJvb3RzLmFkZExpc3RlbiggdGhpcyApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZ3JvdXAgIT09IG51bGwgKXsgdGhpcy5ncm91cC5jYWxjKCAtdGhpcy5ocGx1cyApO31cclxuICAgICAgICBlbHNlIGlmKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggLXRoaXMuaHBsdXMgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc1s0XS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5jdXN0b20gKSBSb290cy5yZW1vdmVMaXN0ZW4oIHRoaXMgKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzRdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy8vLyBBVVRPIEZQUyAvLy8vLy9cclxuXHJcbiAgICBiZWdpbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5ub3coKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmQgKCkge1xyXG5cclxuICAgICAgICBsZXQgdGltZSA9IHRoaXMubm93KCk7XHJcbiAgICAgICAgdGhpcy5tcyA9IHRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMgKys7XHJcblxyXG4gICAgICAgIGlmICggdGltZSA+IHRoaXMucHJldlRpbWUgKyAxMDAwICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcHMgPSB0aGlzLnJvdW5kKCAoIHRoaXMuZnJhbWVzICogMTAwMCApIC8gKCB0aW1lIC0gdGhpcy5wcmV2VGltZSApICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXZUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVtICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeS51c2VkSlNIZWFwU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBoZWFwU2l6ZUxpbWl0ID0gcGVyZm9ybWFuY2UubWVtb3J5LmpzSGVhcFNpemVMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbSA9IHRoaXMucm91bmQoIGhlYXBTaXplICogMC4wMDAwMDA5NTQgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW0gPSBoZWFwU2l6ZSAvIGhlYXBTaXplTGltaXQ7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbIHRoaXMuZnBzLCB0aGlzLm1zICwgdGhpcy5tbSBdO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICAgIHRoaXMudXBUZXh0KCBbIHRoaXMuZnBzLCB0aGlzLm1zLCB0aGlzLm1lbSBdICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5pbmcgKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VzdG9tICkgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmVuZCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMF0ud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICBzWzFdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gMTAgKyAncHgnO1xyXG4gICAgICAgIHNbMl0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAody0yMCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgXHR0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6IFswLDAsMF07XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkID8gby5wcmVjaXNpb24gOiAyO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGljYXRvciA9IG8ubXVsdGlwbGljYXRvciB8fCAxO1xyXG4gICAgICAgIHRoaXMubmVnID0gby5uZWcgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubGluZSA9IG8ubGluZSAhPT0gdW5kZWZpbmVkID8gIG8ubGluZSA6IHRydWU7XHJcblxyXG4gICAgICAgIC8vaWYodGhpcy5uZWcpdGhpcy5tdWx0aXBsaWNhdG9yKj0yO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9XaWR0aCA9IG8uYXV0b1dpZHRoICE9PSB1bmRlZmluZWQgPyBvLmF1dG9XaWR0aCA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc051bWJlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgMTI4ICsgMTA7XHJcbiAgICAgICAgdGhpcy5yaCA9IHRoaXMuaCAtIDEwO1xyXG4gICAgICAgIHRoaXMudG9wID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5jWzFdICE9PSB1bmRlZmluZWQgKSB7IC8vIHdpdGggdGl0bGVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS53aWR0aCA9IHRoaXMudyArJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dG9XaWR0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmYwMDAwJztcclxuICAgICAgICAgICAgLy90aGlzLmNbMV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHRoaXMudG9wID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuaCArPSAxMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdoID0gdGhpcy5yaCAtIDI4O1xyXG4gICAgICAgIHRoaXMuZ3cgPSB0aGlzLncgLSAyODtcclxuXHJcbiAgICAgICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBjb2x1bW4tY291bnQ6Jyt0aGlzLmxuZysnOyB0b3A6JysodGhpcy5oLTIwKSsncHg7IHdpZHRoOjEwMCU7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuXHJcbiAgICAgICAgLy9sZXQgY29sdW0gPSAnY29sdW1uLWNvdW50OicrdGhpcy5sbmcrJzsgY29sdW1uOicrdGhpcy5sbmcrJzsgYnJlYWstaW5zaWRlOiBjb2x1bW47IHRvcDonXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyAnZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MHB4IDBweDsgdG9wOicrKHRoaXMuaC0yMCkrJ3B4OyBsZWZ0OjE0cHg7IHdpZHRoOicrdGhpcy5ndysncHg7ICBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICAgICBcclxuICAgICAgICAvL3RoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy5jWzJdLmlubmVySFRNTCA9IHRoaXMudmFsdWVUb0h0bWwoKTtcclxuXHJcbiAgICAgICAgbGV0IHN2ZyA9IHRoaXMuZG9tKCAnc3ZnJywgdGhpcy5jc3MuYmFzaWMgLCB7IHZpZXdCb3g6JzAgMCAnK3RoaXMudysnICcrdGhpcy5yaCwgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgcHJlc2VydmVBc3BlY3RSYXRpbzonbm9uZScgfSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCBzdmcsIHsgd2lkdGg6dGhpcy53LCBoZWlnaHQ6dGhpcy5yaCwgbGVmdDowLCB0b3A6dGhpcy50b3AgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tKCAncGF0aCcsICcnLCB7IGQ6JycsIHN0cm9rZTp0aGlzLmNvbG9ycy50ZXh0LCAnc3Ryb2tlLXdpZHRoJzoyLCBmaWxsOidub25lJywgJ3N0cm9rZS1saW5lY2FwJzonYnV0dCcgfSwgc3ZnICk7XHJcbiAgICAgICAgdGhpcy5kb20oICdyZWN0JywgJycsIHsgeDoxMCwgeToxMCwgd2lkdGg6dGhpcy5ndys4LCBoZWlnaHQ6dGhpcy5naCs4LCBzdHJva2U6J3JnYmEoMCwwLDAsMC4zKScsICdzdHJva2Utd2lkdGgnOjEgLCBmaWxsOidub25lJ30sIHN2ZyApO1xyXG5cclxuICAgICAgICB0aGlzLml3ID0gKCh0aGlzLmd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKTtcclxuICAgICAgICBsZXQgdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY01vZGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy52ID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICBcdHRbaV0gPSBbIDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSwgdGhpcy5pdyBdO1xyXG4gICAgICAgIFx0dFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdO1xyXG4gICAgICAgIFx0dGhpcy5jTW9kZVtpXSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5uZWcgKSB0aGlzLnZbaV0gPSAoKDErKHRoaXMudmFsdWVbaV0gLyB0aGlzLm11bHRpcGxpY2F0b3IpKSowLjUpO1xyXG4gICAgICAgIFx0ZWxzZSB0aGlzLnZbaV0gPSB0aGlzLnZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yO1xyXG5cclxuICAgICAgICBcdHRoaXMuZG9tKCAncmVjdCcsICcnLCB7IHg6dFtpXVswXSwgeToxNCwgd2lkdGg6dFtpXVsxXSwgaGVpZ2h0OjEsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgJ2ZpbGwtb3BhY2l0eSc6MC4zIH0sIHN2ZyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG1wID0gdDtcclxuICAgICAgICB0aGlzLmNbM10gPSBzdmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy53KVxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS50b3AgPSAwICsncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuaGVpZ2h0ID0gMjAgKydweCc7XHJcbiAgICAgICAgICAgIHRoaXMuc1sxXS5saW5lSGVpZ2h0ID0gKDIwLTUpKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCBmYWxzZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHZhbHVlICkge1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sbmcgPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG5nOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVnKSB0aGlzLnZbaV0gPSAoMSArIHZhbHVlW2ldIC8gdGhpcy5tdWx0aXBsaWNhdG9yKSAqIDAuNTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZbaV0gPSB2YWx1ZVtpXSAvIHRoaXMubXVsdGlwbGljYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVUb0h0bWwoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmcsIG49MCwgciA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPjx0cj4nXHJcbiAgICAgICAgbGV0IHcgPSAxMDAgLyB0aGlzLmxuZ1xyXG4gICAgICAgIGxldCBzdHlsZSA9ICd3aWR0aDonKyB3ICsnJTsnLy8nIHRleHQtYWxpZ246Y2VudGVyOydcclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICBpZihuPT09dGhpcy5sbmctMSkgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPjwvdHI+PC90YWJsZT4nXHJcbiAgICAgICAgICAgIGVsc2UgciArPSAnPHRkIHN0eWxlPScrc3R5bGUrJz4nICsgdGhpcy52YWx1ZVtuXSArICc8L3RkPidcclxuICAgICAgICAgICAgbisrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubGluZSApIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgdGhpcy5tYWtlUGF0aCgpLCAwICk7XHJcblxyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGk8dGhpcy5sbmc7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2hlaWdodCcsIHRoaXMudltpXSp0aGlzLmdoLCBpKzIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3knLCAxNCArICh0aGlzLmdoIC0gdGhpcy52W2ldKnRoaXMuZ2gpLCBpKzIgKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMubmVnICkgdGhpcy52YWx1ZVtpXSA9ICggKCh0aGlzLnZbaV0qMiktMSkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnZhbHVlW2ldID0gKCAodGhpcy52W2ldICogdGhpcy5tdWx0aXBsaWNhdG9yKSApLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICkgKiAxO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNbMl0uaW5uZXJIVE1MID0gdGhpcy52YWx1ZVRvSHRtbCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nO1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy50bXA7XHJcbiAgICAgICAgXHJcblx0ICAgIGlmKCBsLnk+dGhpcy50b3AgJiYgbC55PHRoaXMuaC0yMCApe1xyXG5cdCAgICAgICAgd2hpbGUoIGktLSApe1xyXG5cdCAgICAgICAgICAgIGlmKCBsLng+dFtpXVswXSAmJiBsLng8dFtpXVsyXSApIHJldHVybiBpO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbiwgbmFtZSApIHtcclxuXHJcbiAgICBcdGlmKCBuID09PSB0aGlzLmNNb2RlW25hbWVdICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIFx0bGV0IGE7XHJcblxyXG4gICAgICAgIHN3aXRjaChuKXtcclxuICAgICAgICAgICAgY2FzZSAwOiBhPTAuMzsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTogYT0wLjY7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IGE9MTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCBhLCBuYW1lICsgMiApO1xyXG4gICAgICAgIHRoaXMuY01vZGVbbmFtZV0gPSBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmc7XHJcbiAgICAgICAgd2hpbGUoaS0tKXsgXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmNNb2RlW2ldICE9PSAwICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNNb2RlW2ldID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsLW9wYWNpdHknLCAwLjMsIGkgKyAyICk7XHJcbiAgICAgICAgICAgICAgICBudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ICE9PSAtMSApIHJldHVybiB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICBcdHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICBcdGxldCBudXAgPSBmYWxzZTtcclxuXHJcbiAgICBcdGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBcdGlmKCBuYW1lID09PSAnJyApe1xyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL3RoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7IFxyXG5cclxuICAgICAgICAgICAgbnVwID0gdGhpcy5tb2RlKCB0aGlzLmlzRG93biA/IDIgOiAxLCBuYW1lICk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5jdXJzb3IoIHRoaXMuY3VycmVudCAhPT0gLTEgPyAnbW92ZScgOiAncG9pbnRlcicgKTtcclxuICAgICAgICAgICAgaWYodGhpcy5pc0Rvd24pe1xyXG4gICAgICAgICAgICBcdHRoaXMudltuYW1lXSA9IHRoaXMuY2xhbXAoIDEgLSAoKCBlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMueXRvcCAtIDEwICkgLyB0aGlzLmdoKSAsIDAsIDEgKTtcclxuICAgICAgICAgICAgXHR0aGlzLnVwZGF0ZSggdHJ1ZSApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHVwZGF0ZSAoIHVwICkge1xyXG5cclxuICAgIFx0dGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXRoICgpIHtcclxuXHJcbiAgICBcdGxldCBwID0gXCJcIiwgaCwgdywgd24sIHdtLCBvdywgb2hcclxuICAgIFx0Ly9sZXQgZyA9IHRoaXMuaXcqMC41XHJcblxyXG4gICAgXHRmb3IobGV0IGkgPSAwOyBpPHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICBcdFx0aCA9IDE0ICsgKHRoaXMuZ2ggLSB0aGlzLnZbaV0qdGhpcy5naClcclxuICAgIFx0XHR3ID0gKDE0ICsgKGkqdGhpcy5pdykgKyAoaSo0KSlcclxuXHJcbiAgICBcdFx0d20gPSB3ICsgdGhpcy5pdyowLjVcclxuICAgIFx0XHR3biA9IHcgKyB0aGlzLml3XHJcblxyXG4gICAgXHRcdGlmKCBpID09PSAwICkgcCs9J00gJyt3KycgJysgaCArICcgVCAnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGVsc2UgcCArPSAnIEMgJyArIG93ICsnICcrIG9oICsgJywnICsgdyArJyAnKyBoICsgJywnICsgd20gKycgJysgaFxyXG4gICAgXHRcdGlmKCBpID09PSB0aGlzLmxuZy0xICkgcCs9JyBUICcgKyB3biArJyAnKyBoXHJcblxyXG4gICAgXHRcdG93ID0gd25cclxuICAgIFx0XHRvaCA9IGggXHJcblxyXG4gICAgXHR9XHJcblxyXG4gICAgXHRyZXR1cm4gcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuXHJcbiAgICAgICAgbGV0IGd3ID0gdGhpcy53IC0gMjhcclxuICAgICAgICBsZXQgaXcgPSAoKGd3LSg0Kih0aGlzLmxuZy0xKSkpL3RoaXMubG5nKVxyXG4gICAgICAgIGxldCB0ID0gW11cclxuXHJcbiAgICAgICAgc1syXS53aWR0aCA9IGd3ICsgJ3B4J1xyXG5cclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMubG5nOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRbaV0gPSBbIDE0ICsgKGkqaXcpICsgKGkqNCksIGl3IF1cclxuICAgICAgICAgICAgdFtpXVsyXSA9IHRbaV1bMF0gKyB0W2ldWzFdXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSB0XHJcblxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHkgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcblx0ICAgIG8uaXNTcGFjZSA9IHRydWVcclxuICAgICAgICBvLm1hcmdpbiA9IDBcclxuICAgICAgICBpZighby5oKSBvLmggPSAxMFxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuICAgICAgICB0aGlzLmluaXQoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5pbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4vRW1wdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHcm91cCA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5BREQgPSBvLmFkZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvSGVpZ2h0ID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLnVpcyA9IFtdXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gLTFcclxuICAgICAgICB0aGlzLnByb3RvID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5kZWNhbCA9IG8uZ3JvdXAgPyA4IDogMFxyXG4gICAgICAgIC8vdGhpcy5kZCA9IG8uZ3JvdXAgPyBvLmdyb3VwLmRlY2FsICsgOCA6IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaFxyXG5cclxuICAgICAgICB0aGlzLnNwYWNlWSA9IG5ldyBFbXB0eSh7aDp0aGlzLm1hcmdpbn0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBmbHRvcCA9IE1hdGguZmxvb3IodGhpcy5oKjAuNSktM1xyXG5cclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMudXNlRmxleCA9IHRydWUgXHJcbiAgICAgICAgbGV0IGZsZXhpYmxlID0gdGhpcy51c2VGbGV4ID8gJ2Rpc3BsYXk6ZmxleDsgZmxleC1mbG93OiByb3cgd3JhcDsnIDogJydcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArIGZsZXhpYmxlICsgJ3dpZHRoOjEwMCU7IGxlZnQ6MDsgIG92ZXJmbG93OmhpZGRlbjsgdG9wOicrKHRoaXMuaCkrJ3B4JylcclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyBsZWZ0OjA7IHRvcDonK2ZsdG9wKydweDsnLCB7IGQ6dGhpcy5zdmdzLmcxLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICBsZXQgYmggPSB0aGlzLm10b3AgPT09IDAgPyB0aGlzLm1hcmdpbiA6IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1s0XSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyBoZWlnaHQ6JysoYmgrMSkrJ3B4OyB0b3A6JysoKHRoaXMuaC0xKSkrJ3B4OyBiYWNrZ3JvdW5kOm5vbmU7JylcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgdGhpcy5jWzFdLm5hbWUgPSAnZ3JvdXAnXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJHKCBvLmJnIClcclxuXHJcbiAgICAgICAgaWYoIG8ub3BlbiApIHRoaXMub3BlbigpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldEJHICggYmcgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuICAgICAgICBjb25zdCBzID0gdGhpcy5zXHJcblxyXG4gICAgICAgIGlmKCBiZyAhPT0gdW5kZWZpbmVkICkgY2MuZ3JvdXBzID0gYmdcclxuICAgICAgICBpZihjYy5ncm91cHMgPT09ICdub25lJykgY2MuZ3JvdXBzID0gY2MuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBjYy5iYWNrZ3JvdW5kID0gJ25vbmUnXHJcblxyXG4gICAgICAgIHNbMF0uYmFja2dyb3VuZCA9ICdub25lJztcclxuICAgICAgICBzWzFdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuICAgICAgICBzWzJdLmJhY2tncm91bmQgPSBjYy5ncm91cHNcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG4gICAgICAgICAgICBzWzFdLmJvcmRlciA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnJhZGl1cyAhPT0gMCApe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyUmFkaXVzID0gdGhpcy5yYWRpdXMrJ3B4J1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgdGhpcy51aXNbaV0uc2V0QkcoICdub25lJyApO1xyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLnNldEJHKCB0aGlzLmNvbG9ycy5iYWNrZ3JvdW5kICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGlmKCBsLnkgPCB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4gKSBuYW1lID0gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNPcGVuICkgbmFtZSA9ICdjb250ZW50JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2cobmFtZSlcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGFyZ2V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCA9PT0gLTEgKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYoIHRoaXMucHJvdG8ucyApe1xyXG4gICAgICAgICAgICAvLyBpZiBubyBzIHRhcmdldCBpcyBkZWxldGUgISFcclxuICAgICAgICAgICAgdGhpcy5wcm90by51aW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaGFuZGxlRXZlbnQgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG5hbWUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxyXG5cclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvcigpXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLm1hcmdpbkRpdiApIGUuY2xpZW50WSAtPSB0aGlzLm1hcmdpbiAqIDAuNVxyXG5cclxuICAgICAgICAgICAgaWYoIFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09ICdtb3VzZWRvd24nICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMucHJvdG8gKXsgXHJcbiAgICAgICAgICAgICAgICAvL2UuY2xpZW50WSAtPSB0aGlzLm1hcmdpblxyXG4gICAgICAgICAgICAgICAgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KCBlIClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoICFSb290cy5sb2NrICkgdGhpcy5nZXROZXh0KCBlLCBjaGFuZ2UgKVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpdGxlJzpcclxuICAgICAgICAgICAgLy90aGlzLmN1cnNvciggdGhpcy5pc09wZW4gPyAnbi1yZXNpemUnOidzLXJlc2l6ZScgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKVxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ21vdXNlZG93bicgKXtcclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzT3BlbiApIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW4oKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKCBwcm90b0NoYW5nZSApIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE5leHQgKCBlLCBjaGFuZ2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBuZXh0ID0gUm9vdHMuZmluZFRhcmdldCggdGhpcy51aXMsIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5leHQgIT09IHRoaXMuY3VycmVudCApe1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggbmV4dCAhPT0gLTEgKXsgXHJcbiAgICAgICAgICAgIHRoaXMucHJvdG8gID0gdGhpcy51aXNbIHRoaXMuY3VycmVudCBdO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvLnVpb3ZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIFxyXG5cclxuICAgIGFkZCgpIHtcclxuXHJcbiAgICAgICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVsxXSA9PT0gJ29iamVjdCcgKXsgXHJcbiAgICAgICAgICAgIGFbMV0uaXNVSSA9IHRoaXMuaXNVSVxyXG4gICAgICAgICAgICBhWzFdLnRhcmdldCA9IHRoaXMuY1syXVxyXG4gICAgICAgICAgICBhWzFdLm1haW4gPSB0aGlzLm1haW5cclxuICAgICAgICAgICAgYVsxXS5ncm91cCA9IHRoaXNcclxuICAgICAgICB9IGVsc2UgaWYoIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdzdHJpbmcnICl7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoIGEsIHsgaXNVSTp0cnVlLCB0YXJnZXQ6dGhpcy5jWzJdLCBtYWluOnRoaXMubWFpbiB9KTtcclxuICAgICAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgICAgICAgICBhWzJdLmlzVUkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYVsyXS50YXJnZXQgPSB0aGlzLmNbMl07XHJcbiAgICAgICAgICAgICAgICBhWzJdLm1haW4gPSB0aGlzLm1haW47XHJcbiAgICAgICAgICAgICAgICBhWzJdLmdyb3VwID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHUgPSB0aGlzLkFERC5hcHBseSggdGhpcywgYSApXHJcblxyXG4gICAgICAgIGlmKCB1LmlzR3JvdXAgKXsgXHJcbiAgICAgICAgICAgIC8vby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIHUuZHggPSA4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdS5keCArPSA0XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRlY2FsKVxyXG4gICAgICAgIC8vdS56b25lLmQgLT0gOFxyXG4gICAgICAgIFJvb3RzLmZvcmNlWm9uZSA9IHRydWVcclxuICAgICAgICAvL3UubWFyZ2luICs9IHRoaXMubWFyZ2luXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coIHUubWFyZ2luIClcclxuICAgICAgICAvL1Jvb3RzLm5lZWRSZVpvbmUgPSB0cnVlXHJcblxyXG4gICAgICAgIC8vUm9vdHMucmVzaXplKClcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhSb290cy5uZWVkUmVzaXplKVxyXG5cclxuICAgICAgICB0aGlzLnVpcy5wdXNoKCB1IClcclxuXHJcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gZmFsc2VcclxuXHJcbiAgICAgICAgcmV0dXJuIHU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSBvbmUgbm9kZVxyXG5cclxuICAgIHJlbW92ZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGlmKCBuLmRpc3Bvc2UgKSBuLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgYWxsIGluZXIgXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBzdXBlci5kaXNwb3NlKClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wdHkoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBlbXB0eSAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGgsIGl0ZW07XHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggaXRlbS5jWzBdIClcclxuICAgICAgICAgICAgaXRlbS5jbGVhciggdHJ1ZSApXHJcblxyXG4gICAgICAgICAgICAvL3RoaXMudWlzW2ldLmNsZWFyKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgb25lIGVsZW1lbnRcclxuXHJcbiAgICBjbGVhck9uZSAoIG4gKSB7IFxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLnVpcy5pbmRleE9mKCBuICk7XHJcblxyXG4gICAgICAgIGlmICggaWQgIT09IC0xICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGMoIC0gKCB0aGlzLnVpc1sgaWQgXS5oICsgdGhpcy5tYXJnaW4gKSApXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5yZW1vdmVDaGlsZCggdGhpcy51aXNbIGlkIF0uY1swXSApXHJcbiAgICAgICAgICAgIHRoaXMudWlzLnNwbGljZSggaWQsIDEgKVxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMudWlzLmxlbmd0aCA9PT0gMCApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIG9wZW4gKCkge1xyXG5cclxuICAgICAgICBzdXBlci5vcGVuKClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKVxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuc1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9ICh0aGlzLmgtMSkgKyAncHgnXHJcbiAgICAgICAgc1syXS50b3AgPSAodGhpcy5oK3RoaXMubXRvcCkgKyAncHgnXHJcbiAgICAgICAgc1s0XS5iYWNrZ3JvdW5kID0gY2MuZ3JvdXBzLy8nIzBmMCdcclxuXHJcbiAgICAgICAgaWYodGhpcy5yYWRpdXMpe1xyXG5cclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJSYWRpdXMgPSAnMHB4J1xyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclJhZGl1cyA9ICcwcHgnXHJcblxyXG4gICAgICAgICAgICBzWzFdLmJvcmRlclRvcExlZnRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMV0uYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IHRoaXMucmFkaXVzKydweCdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBjYy5nYm9yZGVyICE9PSAnbm9uZScgKXtcclxuXHJcbiAgICAgICAgICAgIHNbNF0uYm9yZGVyTGVmdCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuICAgICAgICAgICAgc1s0XS5ib3JkZXJSaWdodCA9IGNjLmJvcmRlclNpemUrJ3B4IHNvbGlkICcrIGNjLmdib3JkZXJcclxuXHJcbiAgICAgICAgICAgIHNbMl0uYm9yZGVyID0gY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJysgY2MuZ2JvcmRlclxyXG4gICAgICAgICAgICBzWzJdLmJvcmRlclRvcCA9ICdub25lJztcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXJCb3R0b20gPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCByZ2JhKDAsMCwwLDApJ1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQoKVxyXG5cclxuICAgICAgICAvL1Jvb3RzLmlzTGVhdmUgPSB0cnVlXHJcbiAgICAgICAgLy9Sb290cy5uZWVkUmVzaXplID0gdHJ1ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLmNsb3NlKClcclxuXHJcbiAgICAgICAgLy9sZXQgdCA9IHRoaXMuaCAtIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2QnLCB0aGlzLnN2Z3MuZzEgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIXHJcblxyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnNcclxuICAgICAgICBjb25zdCBjYyA9IHRoaXMuY29sb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnXHJcbiAgICAgICAgLy9zWzFdLmhlaWdodCA9ICh0aGlzLmgtMikgKyAncHgnXHJcbiAgICAgICAgLy9zWzJdLnRvcCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICBzWzJdLnRvcCA9ICh0aGlzLmgrdGhpcy5tdG9wKSArICdweCdcclxuICAgICAgICBzWzRdLmJhY2tncm91bmQgPSAnbm9uZSdcclxuXHJcbiAgICAgICAgaWYoIGNjLmdib3JkZXIgIT09ICdub25lJyApe1xyXG5cclxuICAgICAgICAgICAgc1s0XS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1syXS5ib3JkZXIgPSAnbm9uZSdcclxuICAgICAgICAgICAgc1sxXS5ib3JkZXIgPSBjYy5ib3JkZXJTaXplKydweCBzb2xpZCAnKyBjYy5nYm9yZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnJhZGl1cykgc1sxXS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cysncHgnXHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2FsY1VpcyAoKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc09wZW4gfHwgdGhpcy5pc0VtcHR5ICkgdGhpcy5oID0gdGhpcy5iYXNlSFxyXG4gICAgICAgIC8vZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCB0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSArIHRoaXMuYmFzZUggKSArIHRoaXMuYmFzZUg7XHJcbiAgICAgICAgZWxzZSB0aGlzLmggPSBSb290cy5jYWxjVWlzKCBbLi4udGhpcy51aXMsIHRoaXMuc3BhY2VZIF0sIHRoaXMuem9uZSwgdGhpcy56b25lLnkgKyB0aGlzLmJhc2VIICsgdGhpcy5tYXJnaW4sIHRydWUgKSArIHRoaXMuYmFzZUhcclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0oIHRoaXMuaCAtIHRoaXMuYmFzZUggKSsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnRIZWlnaHQgKCB0ICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZ3JvdXAgIT09IG51bGwgKSB0aGlzLmdyb3VwLmNhbGMoIHQgKVxyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGMgKCB5ICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNPcGVuICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5jYWxjKClcclxuICAgICAgICBlbHNlIHRoaXMuY2FsY1VpcygpXHJcbiAgICAgICAgdGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuaCArICdweCdcclxuICAgICAgICB0aGlzLnNbMl0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZUNvbnRlbnQgKCkge1xyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnNldFNpemUoIHRoaXMudyApXHJcbiAgICAgICAgICAgIHRoaXMudWlzW2ldLnJTaXplKClcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMuc1xyXG5cclxuICAgICAgICB0aGlzLncgPSB0aGlzLncgLSB0aGlzLmRlY2FsXHJcblxyXG4gICAgICAgIHNbM10ubGVmdCA9ICggdGhpcy5zYSArIHRoaXMuc2IgLSA2ICkgKyAncHgnXHJcblxyXG4gICAgICAgIHNbMV0ud2lkdGggPSB0aGlzLncgKyAncHgnXHJcbiAgICAgICAgc1syXS53aWR0aCA9IHRoaXMudyArICdweCdcclxuICAgICAgICBzWzFdLmxlZnQgPSAodGhpcy5kZWNhbCkgKyAncHgnXHJcbiAgICAgICAgc1syXS5sZWZ0ID0gKHRoaXMuZGVjYWwpICsgJ3B4J1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc09wZW4gKSB0aGlzLnJTaXplQ29udGVudCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbi8qXHJcbiAgICB1aW91dCgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlcigpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubG9jayApIHJldHVybjtcclxuICAgICAgICBpZighdGhpcy5vdmVyRWZmZWN0KSByZXR1cm47XHJcbiAgICAgICAgLy9pZiggdGhpcy5pc09wZW4gKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5zKSB0aGlzLnNbMF0uYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmRPdmVyO1xyXG5cclxuICAgIH1cclxuKi9cclxufSIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcbmltcG9ydCB7IFYyIH0gZnJvbSAnLi4vY29yZS9WMi5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSm95c3RpY2sgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFswLDBdO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5qb3lUeXBlID0gJ2FuYWxvZ2lxdWUnO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBvLm1vZGUgIT09IHVuZGVmaW5lZCA/IG8ubW9kZSA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gby5wcmVjaXNpb24gfHwgMjtcclxuICAgICAgICB0aGlzLm11bHRpcGxpY2F0b3IgPSBvLm11bHRpcGxpY2F0b3IgfHwgMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3MgPSBuZXcgVjIoKTtcclxuICAgICAgICB0aGlzLnRtcCA9IG5ldyBWMigpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcclxuICAgICAgICB0aGlzLmhhdmVUZXh0ID0gby50ZXh0ICE9PSB1bmRlZmluZWQgPyBvLnRleHQgOiB0cnVlIFxyXG5cclxuICAgICAgICAvL3RoaXMucmFkaXVzID0gdGhpcy53ICogMC41O1xyXG4gICAgICAgIC8vdGhpcy5kaXN0YW5jZSA9IHRoaXMucmFkaXVzKjAuMjU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICh0aGlzLmRpYW0qMC41KSowLjI1O1xyXG5cclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgKHRoaXMuaGF2ZVRleHQgPyAxMCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMF0uc3R5bGUud2lkdGggPSB0aGlzLncgKydweCc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNbMV0gIT09IHVuZGVmaW5lZCApIHsgLy8gd2l0aCB0aXRsZVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMuaGF2ZVRleHQgPyB0aGlzLnZhbHVlIDogJyc7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHRoaXMuZ2V0Sm95c3RpY2soIHRoaXMubW9kZWwgKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApO1xyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDApXHJcblxyXG5cclxuICAgICAgICB0aGlzLnJhdGlvID0gMTI4L3RoaXMudztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb2RlICggbW9kZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgc3dpdGNoKG1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlIDA6IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbiknLCA0ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsICcjMDAwJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2Muam95T3V0LCAyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgJ3JnYigwLDAsMCwwLjEpJywgMyApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5qb3lPdXQsIDQgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICdub25lJywgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW9kZWw9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsICd1cmwoI2dyYWRJbjIpJywgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiYSgwLDAsMCwwKScsIDQgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveU92ZXIsIDIgKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCAncmdiKDAsMCwwLDAuMyknLCAzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmpveVNlbGVjdCwgNCApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muam95T3ZlciwgNCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBhZGRJbnRlcnZhbCAoKXtcclxuICAgICAgICBpZiggdGhpcy5pbnRlcnZhbCAhPT0gbnVsbCApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgaWYoIHRoaXMucG9zLmlzWmVybygpICkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKXsgdGhpcy51cGRhdGUoKTsgfS5iaW5kKHRoaXMpLCAxMCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wSW50ZXJ2YWwgKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsID09PSBudWxsICkgcmV0dXJuO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoIHRoaXMuaW50ZXJ2YWwgKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmFkZEludGVydmFsKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRJbnRlcnZhbCgpO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB0aGlzLm1vZGUoIDIgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL3RoaXMudG1wLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL3RoaXMudG1wLnkgPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcCApO1xyXG5cclxuICAgICAgICB0aGlzLnRtcC54ID0gKHRoaXMudyowLjUpIC0gKCBlLmNsaWVudFggLSB0aGlzLnpvbmUueCApO1xyXG4gICAgICAgIHRoaXMudG1wLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMudG1wLmxlbmd0aCgpO1xyXG5cclxuICAgICAgICBpZiAoIGRpc3RhbmNlID4gdGhpcy5kaXN0YW5jZSApIHtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0aGlzLnRtcC54LCB0aGlzLnRtcC55KTtcclxuICAgICAgICAgICAgdGhpcy50bXAueCA9IE1hdGguc2luKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy50bXAueSA9IE1hdGguY29zKCBhbmdsZSApICogdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9zLmNvcHkoIHRoaXMudG1wICkuZGl2aWRlU2NhbGFyKCB0aGlzLmRpc3RhbmNlICkubmVnYXRlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiApIHtcclxuXHJcbiAgICAgICAgaWYodj09PXVuZGVmaW5lZCkgdj1bMCwwXTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCB2WzBdIHx8IDAsIHZbMV0gIHx8IDAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgaWYoIHVwID09PSB1bmRlZmluZWQgKSB1cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmludGVydmFsICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MubGVycCggbnVsbCwgMC4zICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MueCA9IE1hdGguYWJzKCB0aGlzLnBvcy54ICkgPCAwLjAxID8gMCA6IHRoaXMucG9zLng7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcy55ID0gTWF0aC5hYnMoIHRoaXMucG9zLnkgKSA8IDAuMDEgPyAwIDogdGhpcy5wb3MueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc1VJICYmIHRoaXMubWFpbi5pc0NhbnZhcyApIHRoaXMubWFpbi5kcmF3KCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTVkcoKTtcclxuXHJcbiAgICAgICAgaWYoIHVwICkgdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnBvcy5pc1plcm8oKSApIHRoaXMuc3RvcEludGVydmFsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNWRyAoKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IHggPSB0aGlzLnJhZGl1cyAtICggLXRoaXMucG9zLnggKiB0aGlzLmRpc3RhbmNlICk7XHJcbiAgICAgICAgLy9sZXQgeSA9IHRoaXMucmFkaXVzIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5kaWFtKjAuNSkgLSAoIC10aGlzLnBvcy54ICogdGhpcy5kaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCB5ID0gKHRoaXMuZGlhbSowLjUpIC0gKCAtdGhpcy5wb3MueSAqIHRoaXMuZGlzdGFuY2UgKTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbCA9PT0gMCl7XHJcblxyXG4gICAgICAgICAgICBsZXQgc3ggPSB4ICsgKCh0aGlzLnBvcy54KSo1KSArIDU7XHJcbiAgICAgICAgICAgIGxldCBzeSA9IHkgKyAoKHRoaXMucG9zLnkpKjUpICsgMTA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCBzeCp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHN5KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnY3gnLCB4KnRoaXMucmF0aW8sIDMgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCAzICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgeCp0aGlzLnJhdGlvLCA0ICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N5JywgeSp0aGlzLnJhdGlvLCA0ICk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAgKCB0aGlzLnBvcy54ICogdGhpcy5tdWx0aXBsaWNhdG9yICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9ICAoIHRoaXMucG9zLnkgKiB0aGlzLm11bHRpcGxpY2F0b3IgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5oYXZlVGV4dCkgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIgKCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XHJcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9jb3JlL1Rvb2xzLmpzJztcclxuaW1wb3J0IHsgVjIgfSBmcm9tICcuLi9jb3JlL1YyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLbm9iIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDeWNsaWMgPSBvLmN5Y2xpYyB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gby5zdHlwZSB8fCAwO1xyXG4gICAgICAgIGlmKCBvLm1vZGUgIT09IHVuZGVmaW5lZCApIHRoaXMubW9kZWwgPSBvLm1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VHlwZU51bWJlciggbyApO1xyXG5cclxuICAgICAgICB0aGlzLm1pbncgID0gdGhpcy53XHJcbiAgICAgICAgdGhpcy5kaWFtID0gby5kaWFtIHx8IHRoaXMudyBcclxuXHJcbiAgICAgICAgdGhpcy5tUEkgPSBNYXRoLlBJICogMC44O1xyXG4gICAgICAgIHRoaXMudG9EZWcgPSAxODAgLyBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuY2lyUmFuZ2UgPSB0aGlzLm1QSSAqIDI7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFYyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaCA9IG8uaCB8fCB0aGlzLncgKyAxMDtcclxuXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLndpZHRoID0gdGhpcy53ICsncHgnXHJcbiAgICAgICAgdGhpcy5jWzBdLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcblxyXG4gICAgICAgIGlmKHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSdcclxuICAgICAgICAgICAgdGhpcy5jWzFdLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy50b3AgPSAxMDtcclxuICAgICAgICAgICAgdGhpcy5oICs9IDEwO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MudHh0ICsgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7IHRvcDonKyh0aGlzLmgtMjApKydweDsgd2lkdGg6MTAwJTsgY29sb3I6JysgY2MudGV4dCApO1xyXG5cclxuICAgICAgICB0aGlzLmNbM10gPSB0aGlzLmdldEtub2IoKTtcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZmlsbCcsIGNjLmJ1dHRvbiwgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHQsIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCAzIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsIHRoaXMubWFrZUdyYWQoKSwgMyApXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3ZpZXdCb3gnLCAnMCAwICcgKyB0aGlzLmRpYW0gKyAnICcgKyB0aGlzLmRpYW0gKVxyXG4gICAgICAgIHRoaXMuc2V0Q3NzKCB0aGlzLmNbM10sIHsgd2lkdGg6dGhpcy5kaWFtLCBoZWlnaHQ6dGhpcy5kaWFtLCBsZWZ0OjAsIHRvcDp0aGlzLnRvcCB9KVxyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPiAwICkge1xyXG5cclxuICAgICAgICAgICAgVG9vbHMuZG9tKCAncGF0aCcsICcnLCB7IGQ6ICcnLCBzdHJva2U6Y2MudGV4dCwgJ3N0cm9rZS13aWR0aCc6IDIsIGZpbGw6ICdub25lJywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyB9LCB0aGlzLmNbM10gKTsgLy80XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFRvb2xzLmFkZFNWR0dsb3dFZmZlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHlsZScsICdmaWx0ZXI6IHVybChcIiNVSUxHbG93XCIpOycsIDQgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMjU1LDAsMCwwLjIpJywgMik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dCwgMSApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Muc2VsZWN0LCAwKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsJ3JnYmEoMCwwLDAsMC42KScsIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLnRleHRPdmVyLCAxICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueSA8PSB0aGlzLmNbIDEgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBlbHNlIGlmICggbC55ID4gdGhpcy5oIC0gdGhpcy5jWyAyIF0ub2Zmc2V0SGVpZ2h0ICkgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICBlbHNlIHJldHVybiAna25vYic7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2V1cCAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kRW5kKClcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZVxyXG4gICAgICAgIHRoaXMub2xkciA9IG51bGxcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSgxKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb2ZmID0gdGhpcy5vZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vb2ZmLnggPSB0aGlzLnJhZGl1cyAtICggZS5jbGllbnRYIC0gdGhpcy56b25lLnggKTtcclxuICAgICAgICAvL29mZi55ID0gdGhpcy5yYWRpdXMgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy50b3AgKTtcclxuXHJcbiAgICAgICAgb2ZmLnggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54ICk7XHJcbiAgICAgICAgb2ZmLnkgPSAodGhpcy5kaWFtKjAuNSkgLSAoIGUuY2xpZW50WSAtIHRoaXMuem9uZS55IC0gdGhpcy55dG9wICk7XHJcblxyXG4gICAgICAgIHRoaXMuciA9IC0gTWF0aC5hdGFuMiggb2ZmLngsIG9mZi55ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLm9sZHIgIT09IG51bGwgKSB0aGlzLnIgPSBNYXRoLmFicyh0aGlzLnIgLSB0aGlzLm9sZHIpID4gTWF0aC5QSSA/IHRoaXMub2xkciA6IHRoaXMucjtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gdGhpcy5yID4gdGhpcy5tUEkgPyB0aGlzLm1QSSA6IHRoaXMucjtcclxuICAgICAgICB0aGlzLnIgPSB0aGlzLnIgPCAtdGhpcy5tUEkgPyAtdGhpcy5tUEkgOiB0aGlzLnI7XHJcblxyXG4gICAgICAgIGxldCBzdGVwcyA9IDEgLyB0aGlzLmNpclJhbmdlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICh0aGlzLnIgKyB0aGlzLm1QSSkgKiBzdGVwcztcclxuXHJcbiAgICAgICAgbGV0IG4gPSAoICggdGhpcy5yYW5nZSAqIHZhbHVlICkgKyB0aGlzLm1pbiApIC0gdGhpcy5vbGQ7XHJcblxyXG4gICAgICAgIGlmKG4gPj0gdGhpcy5zdGVwIHx8IG4gPD0gdGhpcy5zdGVwKXsgXHJcbiAgICAgICAgICAgIG4gPSBNYXRoLmZsb29yKCBuIC8gdGhpcy5zdGVwICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm51bVZhbHVlKCB0aGlzLm9sZCArICggbiAqIHRoaXMuc3RlcCApICk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCB0cnVlICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbGRyID0gdGhpcy5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdrbm9iJyApIHtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgKiBlLmRlbHRhO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICggdiA+IHRoaXMubWF4ICkge1xyXG4gICAgICAgICAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB2IDwgdGhpcy5taW4gKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdGhpcy5pc0N5Y2xpYyA/IHRoaXMubWF4IDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKCB2ICk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkID0gdjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUdyYWQgKCkge1xyXG5cclxuICAgICAgICBsZXQgZCA9ICcnLCBzdGVwLCByYW5nZSwgYSwgeCwgeSwgeDIsIHkyLCByID0gNjQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0YW5nbGUgPSBNYXRoLlBJICsgdGhpcy5tUEk7XHJcbiAgICAgICAgbGV0IGVuZGFuZ2xlID0gTWF0aC5QSSAtIHRoaXMubVBJO1xyXG4gICAgICAgIC8vbGV0IHN0ZXAgPSB0aGlzLnN0ZXA+NSA/IHRoaXMuc3RlcCA6IDE7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc3RlcD41KXtcclxuICAgICAgICAgICAgcmFuZ2UgPSAgdGhpcy5yYW5nZSAvIHRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RlcCA9ICggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByYW5nZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwID0gKCggc3RhcnRhbmdsZSAtIGVuZGFuZ2xlICkgLyByKSoyO1xyXG4gICAgICAgICAgICByYW5nZSA9IHIqMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDw9IHJhbmdlOyArK2kgKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gc3RhcnRhbmdsZSAtICggc3RlcCAqIGkgKTtcclxuICAgICAgICAgICAgeCA9IHIgKyBNYXRoLnNpbiggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeSA9IHIgKyBNYXRoLmNvcyggYSApICogKCByIC0gMjAgKTtcclxuICAgICAgICAgICAgeDIgPSByICsgTWF0aC5zaW4oIGEgKSAqICggciAtIDI0ICk7XHJcbiAgICAgICAgICAgIHkyID0gciArIE1hdGguY29zKCBhICkgKiAoIHIgLSAyNCApO1xyXG4gICAgICAgICAgICBkICs9ICdNJyArIHggKyAnICcgKyB5ICsgJyBMJyArIHgyICsgJyAnK3kyICsgJyAnO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLnBlcmNlbnQgPSAodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIHRoaXMucmFuZ2U7XHJcblxyXG4gICAgICAgIGxldCBzYSA9IE1hdGguUEkgKyB0aGlzLm1QSTtcclxuICAgICAgICBsZXQgZWEgPSAoICggdGhpcy5wZXJjZW50ICogdGhpcy5jaXJSYW5nZSApIC0gKCB0aGlzLm1QSSApICk7XHJcblxyXG4gICAgICAgIGxldCBzaW4gPSBNYXRoLnNpbiggZWEgKTtcclxuICAgICAgICBsZXQgY29zID0gTWF0aC5jb3MoIGVhICk7XHJcblxyXG4gICAgICAgIGxldCB4MSA9ICggMjUgKiBzaW4gKSArIDY0O1xyXG4gICAgICAgIGxldCB5MSA9IC0oIDI1ICogY29zICkgKyA2NDtcclxuICAgICAgICBsZXQgeDIgPSAoIDIwICogc2luICkgKyA2NDtcclxuICAgICAgICBsZXQgeTIgPSAtKCAyMCAqIGNvcyApICsgNjQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdkJywgJ00gJyArIHgxICsnICcgKyB5MSArICcgTCAnICsgeDIgKycgJyArIHkyLCAxICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCB0aGlzLm1vZGVsID4gMCApIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB4MSA9IDM2ICogTWF0aC5zaW4oIHNhICkgKyA2NDtcclxuICAgICAgICAgICAgbGV0IHkxID0gMzYgKiBNYXRoLmNvcyggc2EgKSArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeDIgPSAzNiAqIHNpbiArIDY0O1xyXG4gICAgICAgICAgICBsZXQgeTIgPSAtMzYgKiBjb3MgKyA2NDtcclxuICAgICAgICAgICAgbGV0IGJpZyA9IGVhIDw9IE1hdGguUEkgLSB0aGlzLm1QSSA/IDAgOiAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnZCcsICdNICcgKyB4MSArICcsJyArIHkxICsgJyBBICcgKyAzNiArICcsJyArIDM2ICsgJyAxICcgKyBiaWcgKyAnIDEgJyArIHgyICsgJywnICsgeTIsIDQgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2xvciA9IFRvb2xzLnBhY2soIFRvb2xzLmxlcnBDb2xvciggVG9vbHMudW5wYWNrKCBUb29scy5Db2xvckx1bWEoIHRoaXMuY29sb3JzLnRleHQsIC0wLjc1KSApLCBUb29scy51bnBhY2soIHRoaXMuY29sb3JzLnRleHQgKSwgdGhpcy5wZXJjZW50ICkgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNvbG9yLCA0ICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gJy4uL2NvcmUvUm9vdHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBub3Qgd29ya1xyXG4gICAgICAgIHRoaXMuaGlkZUN1cnJlbnQgPSBmYWxzZVxyXG5cclxuICAgICAgICAvLyBpbWFnZXNcclxuICAgICAgICB0aGlzLnBhdGggPSBvLnBhdGggfHwgJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBvLmZvcm1hdCB8fCAnJztcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5pc1dpdGhJbWFnZSA9IHRoaXMucGF0aCAhPT0gJycgPyB0cnVlOmZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlTG9hZENvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudG1wSW1hZ2UgPSB7fTtcclxuICAgICAgICB0aGlzLnRtcFVybCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm0gPSBvLm0gIT09IHVuZGVmaW5lZCA/IG8ubSA6IDVcclxuXHJcblxyXG4gICAgICAgIGxldCBhbGlnbiA9IG8uYWxpZ24gfHwgJ2xlZnQnO1xyXG5cclxuICAgICAgICAvLyBzY3JvbGwgc2l6ZVxyXG4gICAgICAgIGxldCBzcyA9IG8uc2Nyb2xsU2l6ZSB8fCAxMFxyXG4gICAgICAgIHRoaXMuc3MgPSBzcysxXHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudE1vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3RPbmx5ID0gby5saXN0T25seSB8fCBmYWxzZVxyXG4gICAgICAgIHRoaXMuc3RhdGljVG9wID0gby5zdGF0aWNUb3AgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSB0aGlzLmxpc3RPbmx5XHJcbiAgICAgICAgaWYoIG8uc2VsZWN0ICE9PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSBvLnNlbGVjdFxyXG4gICAgICAgIGlmKCBvLnNlbGVjdGFibGUgIT09IHVuZGVmaW5lZCApIHRoaXMuaXNTZWxlY3RhYmxlID0gby5zZWxlY3RhYmxlXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnR4dCA9PT0gJycgKSB0aGlzLnAgPSAwO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS0zO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAndG9wOjA7IGRpc3BsYXk6bm9uZTsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5pdGVtICsgJ3BhZGRpbmc6MHB4ICcrdGhpcy5tKydweDsgbWFyZ2luLWJvdHRvbTowcHg7IHBvc2l0aW9uOmFic29sdXRlOyBqdXN0aWZ5LWNvbnRlbnQ6JythbGlnbisnOyB0ZXh0LWFsaWduOicrYWxpZ24rJzsgbGluZS1oZWlnaHQ6JysodGhpcy5oLTQpKydweDsgdG9wOjFweDsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBoZWlnaHQ6JysodGhpcy5oLTIpKydweDsgYm9yZGVyOjFweCBzb2xpZCAnK2NjLmJvcmRlcisnOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4OycgKTtcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6NnB4OyBoZWlnaHQ6NnB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Zncy5nMSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdyaWdodDowcHg7IHdpZHRoOicrc3MrJ3B4OyBiYWNrZ3JvdW5kOicrY2MuYmFjaysnOyBkaXNwbGF5Om5vbmU7Jyk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAncmlnaHQ6JysoKHNzLShzcyowLjI1KSkqMC41KSsncHg7IHdpZHRoOicrKHNzKjAuMjUpKydweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsgZGlzcGxheTpub25lOyAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdLnN0eWxlLmNvbG9yID0gY2MudGV4dDtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IFtdXHJcbiAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBudWxsXHJcblxyXG4gICAgICAgIGlmKCBvLmxpc3QgKXtcclxuICAgICAgICAgICAgaWYoIG8ubGlzdCBpbnN0YW5jZW9mIEFycmF5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBvLmxpc3RcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLmxpc3QgaW5zdGFuY2VvZiBPYmplY3QgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmT2JqZWN0ID0gby5saXN0XHJcbiAgICAgICAgICAgICAgICBmb3IoIGxldCBnIGluIHRoaXMucmVmT2JqZWN0ICkgdGhpcy5saXN0LnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy50bXBJZCA9IDBcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSCA9IHRoaXMuaDtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gby5pdGVtSGVpZ2h0IHx8IHRoaXMuaC8vKHRoaXMuaC0zKTtcclxuXHJcbiAgICAgICAgLy8gZm9yY2UgZnVsbCBsaXN0IFxyXG4gICAgICAgIHRoaXMuZnVsbCA9IG8uZnVsbCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy53dyA9IHRoaXMuc2I7XHJcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBsaXN0IHVwIG9yIGRvd25cclxuICAgICAgICB0aGlzLnNpZGUgPSBvLnNpZGUgfHwgJ2Rvd24nO1xyXG4gICAgICAgIHRoaXMudXAgPSB0aGlzLnNpZGUgPT09ICdkb3duJyA/IDAgOiAxO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzNdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLnRvcCA9ICdhdXRvJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS5ib3R0b20gPSB0aGlzLmgtMiArICdweCc7XHJcbiAgICAgICAgICAgIHRoaXMuY1szXS5zdHlsZS5ib3R0b20gPSAnMXB4JztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvdHRvbSA9IGZsdG9wICsgJ3B4JztcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jWzJdLnN0eWxlLnRvcCA9IHRoaXMuYmFzZUggKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ2xlZnQ6MDsgdG9wOjA7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6bm9uZTsnKTtcclxuICAgICAgICB0aGlzLmxpc3RJbi5uYW1lID0gJ2xpc3QnO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY1syXS5hcHBlbmRDaGlsZCggdGhpcy5saXN0SW4gKTtcclxuICAgICAgICB0aGlzLmNbMl0uYXBwZW5kQ2hpbGQoIHRoaXMuc2Nyb2xsZXJCYWNrICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLmFwcGVuZENoaWxkKCB0aGlzLnNjcm9sbGVyICk7XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoIWlzTmFOKG8udmFsdWUpKSB0aGlzLnZhbHVlID0gdGhpcy5saXN0WyBvLnZhbHVlIF07XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG8udmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzT3Blbk9uU3RhcnQgPSBvLm9wZW4gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZUggPSA1O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jWzRdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1syXS5zdHlsZS50b3AgPSB0aGlzLmJhc2VIKydweCdcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5PblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLm1pbmlDYW52YXMgPSBvLm1pbmlDYW52YXMgfHwgZmFsc2UgXHJcbiAgICAgICAgdGhpcy5jYW52YXNCZyA9IG8uY2FudmFzQmcgfHwgJ3JnYmEoMCwwLDAsMCknXHJcbiAgICAgICAgdGhpcy5pbWFnZVNpemUgPSBvLmltYWdlU2l6ZSB8fCBbMjAsMjBdO1xyXG5cclxuICAgICAgICAvLyBkcmFnb3V0IGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5kcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnb3V0ID0gby5kcmFnb3V0IHx8IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kcmFnc3RhcnQgPSBvLmRyYWdzdGFydCB8fCBudWxsXHJcbiAgICAgICAgdGhpcy5kcmFnZW5kID0gby5kcmFnZW5kIHx8IG51bGxcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vdGhpcy5jWzBdLnN0eWxlLmJhY2tncm91bmQgPSAnI0ZGMDAwMCdcclxuICAgICAgICAvLy9pZiggdGhpcy5pc1dpdGhJbWFnZSApIHRoaXMucHJlbG9hZEltYWdlKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKSB0aGlzLnByZWxvYWRJbWFnZSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzT3Blbk9uU3RhcnQgKSB0aGlzLm9wZW4oIHRydWUgKVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VIICs9IHRoaXMubXRvcFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbWFnZSBsaXN0XHJcblxyXG4gICAgcHJlbG9hZEltYWdlICgpIHtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnRtcEltYWdlID0ge307XHJcbiAgICAgICAgZm9yKCBsZXQgaT0wOyBpPHRoaXMubGlzdC5sZW5ndGg7IGkrKyApIHRoaXMudG1wVXJsLnB1c2goIHRoaXMubGlzdFtpXSApO1xyXG4gICAgICAgIHRoaXMubG9hZE9uZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5leHRJbWcgKCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLmMgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRtcFVybC5zaGlmdCgpO1xyXG4gICAgICAgIGlmKCB0aGlzLnRtcFVybC5sZW5ndGggPT09IDAgKXsgXHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZUxvYWRDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlcygpO1xyXG4gICAgICAgICAgICAvKnRoaXMuc2V0TGlzdCggdGhpcy5saXN0ICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5pc09wZW5PblN0YXJ0ICkgdGhpcy5vcGVuKCk7Ki9cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5sb2FkT25lKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRPbmUoKXtcclxuXHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRtcFVybFswXTtcclxuICAgICAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOicrc2VsZi5pbWFnZVNpemVbMF0rJ3B4OyBoZWlnaHQ6JytzZWxmLmltYWdlU2l6ZVsxXSsncHgnO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMucGF0aCArIG5hbWUgKyB0aGlzLmZvcm1hdCApO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5pbWFnZVNpemVbMl0gPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VTaXplWzNdID0gaW1nLmhlaWdodDtcclxuICAgICAgICAgICAgc2VsZi50bXBJbWFnZVtuYW1lXSA9IGltZztcclxuICAgICAgICAgICAgc2VsZi5uZXh0SW1nKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICYmIHRoaXMuaXNPcGVuICl7XHJcbiAgICAgICAgICAgIGlmKCBsLnkgPiB0aGlzLmggLSB0aGlzLmJhc2VIICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgIGlmKGwueCA+IHRoaXMuc2EpIHJldHVybiB0aGlzLnRlc3RJdGVtcyggbC55LXRoaXMuYmFzZUggKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiggbC55IDwgdGhpcy5iYXNlSCsyICkgcmV0dXJuICd0aXRsZSc7XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5pc09wZW4gKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiggdGhpcy5zY3JvbGwgJiYgKCBsLnggPiAodGhpcy5zYSt0aGlzLnNiLXRoaXMuc3MpKSApIHJldHVybiAnc2Nyb2xsJztcclxuICAgICAgICAgICAgICAgICAgICBpZihsLnggPiB0aGlzLnNhKSByZXR1cm4gdGhpcy50ZXN0SXRlbXMoIGwueS10aGlzLmJhc2VIICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3RJdGVtcyAoIHkgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcblxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXNcclxuXHJcbiAgICAgICAgLyppZih0aGlzLmhpZGVDdXJyZW50KXtcclxuICAgICAgICAgICAgLy9pdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UodGhpcy50bXBJZClcclxuXHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoLCBpdGVtLCBhLCBiO1xyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgYSA9IGl0ZW0ucG9zeSArIHRoaXMudG9wTGlzdDtcclxuICAgICAgICAgICAgYiA9IGl0ZW0ucG9zeSArIHRoaXMuaXRlbUhlaWdodCArIDEgKyB0aGlzLnRvcExpc3Q7XHJcbiAgICAgICAgICAgIGlmKCB5ID49IGEgJiYgeSA8PSBiICl7IFxyXG4gICAgICAgICAgICAgICAgbmFtZSA9ICdpdGVtJyArIGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlSXRlbSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZUl0ZW0gKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuY3VycmVudCApIHJldHVyblxyXG5cclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50LnNlbGVjdCAmJiBtb2RlPT09MCkgbW9kZSA9IDJcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNjLm92ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOiAvLyBlZGl0IC8gZG93blxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3RcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHlsZS5jb2xvciA9IGNjLnRleHRTZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5TZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLm1vZGVJdGVtKDApXHJcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZCgpIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJlc2V0SXRlbXMoKVxyXG4gICAgICAgIHRoaXMubW9kZUl0ZW0oMilcclxuICAgICAgICB0aGlzLmN1cnJlbnQuc2VsZWN0ID0gdHJ1ZVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJdGVtcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2VsZWN0ID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuYmFjaztcclxuICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5jb2xvciA9IHRoaXMuY29sb3JzLnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWN0aXZlKCkge1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaGlkZUN1cnJlbnQgKSByZXR1cm5cclxuICAgICAgICAvL2lmKCAhdGhpcy5jdXJyZW50ICkgcmV0dXJuXHJcbiAgICAgICAgaWYoIHRoaXMuY3VycmVudCApdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG4gICAgICAgIHRoaXMucmVzZXRIaWRlKClcclxuICAgICAgICAvL3RoaXMuaXRlbXNbdGhpcy50bXBJZF0uc3R5bGUuaGVpZ2h0ID0gMCsncHgnXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRIaWRlKCkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRtcElkKVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaXRlbXMubGVuZ3RoXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICAgICAgaWYoaT09PXRoaXMudG1wSWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSAwKydweCdcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucG9zeSA9IC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5zdHlsZS5oZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQrJ3B4J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpXS5wb3N5ID0gKHRoaXMuaXRlbUhlaWdodCsxKSooaS0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXNbaV0uc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyp0aGlzLml0ZW1zW2ldLnNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9ycy50ZXh0OyovXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdzY3JvbGwnICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiggbmFtZSA9PT0gJ3RpdGxlJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMilcclxuICAgICAgICAgICAgaWYoICF0aGlzLmxpc3RPbmx5ICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBY3RpdmUoKVxyXG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLmlzT3BlbiApIHRoaXMub3BlbigpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgaXRlbVxyXG4gICAgICAgICAgICBpZiggdGhpcy5jdXJyZW50ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdGhpcy5jdXJyZW50LmlkIF1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy50bXBJZCA9IHRoaXMuY3VycmVudC5pZFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG5cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5zZW5kKCB0aGlzLnJlZk9iamVjdCAhPT0gbnVsbCA/IHRoaXMucmVmT2JqZWN0WyB0aGlzLmxpc3RbdGhpcy5jdXJyZW50LmlkXV0gOiB0aGlzLnZhbHVlICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoIHRoaXMudmFsdWUgKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5saXN0T25seSApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRvcEl0ZW0oKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5oaWRlQWN0aXZlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBudXA7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAndGl0bGUnICl7XHJcbiAgICAgICAgICAgIHRoaXMudW5TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVUaXRsZSgxKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmKCBuYW1lID09PSAnc2Nyb2xsJyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3MtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgxKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IHRoaXMuem9uZS55K3RoaXMuYmFzZUgtMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCAoIGUuY2xpZW50WSAtIHRvcCAgKSAtICggdGhpcy5zaCowLjUgKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5pc0Rvd24pIHRoaXMubGlzdG1vdmUoZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlzIGl0ZW1cclxuICAgICAgICAgICAgdGhpcy5tb2RlVGl0bGUoMCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZVNjcm9sbCgwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCBuYW1lICE9PSB0aGlzLnByZXZOYW1lICkgbnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXZOYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51cDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2hlZWwgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKTtcclxuICAgICAgICBpZiggbmFtZSA9PT0gJ3RpdGxlJyApIHJldHVybiBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy5weSArPSBlLmRlbHRhKjEwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucHkpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMucHJldk5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnVuU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVUaXRsZSgwKTtcclxuICAgICAgICB0aGlzLm1vZGVTY3JvbGwoMCk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMgaXMgcmVzZXQnKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG1vZGVTY3JvbGwgKCBtb2RlICkge1xyXG5cclxuICAgICAgICBpZiggbW9kZSA9PT0gdGhpcy5zTW9kZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNjcm9sbGVyLnN0eWxlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIHN3aXRjaChtb2RlKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy50ZXh0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGVUaXRsZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCBtb2RlID09PSB0aGlzLnRNb2RlICkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2gobW9kZSl7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgc1szXS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICAgICAgICBzWzNdLmJhY2tncm91bmQgPSBjYy5idXR0b247XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIHNbM10uY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIGVkaXQgLyBkb3duXHJcbiAgICAgICAgICAgICAgICBzWzNdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHNbM10uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudE1vZGUgPSBtb2RlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxpc3QgKCkge1xyXG5cclxuICAgICAgICB3aGlsZSAoIHRoaXMubGlzdEluLmNoaWxkcmVuLmxlbmd0aCApIHRoaXMubGlzdEluLnJlbW92ZUNoaWxkKCB0aGlzLmxpc3RJbi5sYXN0Q2hpbGQgKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldExpc3QgKCBsaXN0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGxuZyA9IHRoaXMuaGlkZUN1cnJlbnQ/IHRoaXMubGVuZ3RoLTEgOiB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICB0aGlzLm1heEl0ZW0gPSB0aGlzLmZ1bGwgPyBsbmcgOiA1O1xyXG4gICAgICAgIHRoaXMubWF4SXRlbSA9IGxuZyA8IHRoaXMubWF4SXRlbSA/IGxuZyA6IHRoaXMubWF4SXRlbTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSB0aGlzLm1heEl0ZW0gKiAodGhpcy5pdGVtSGVpZ2h0KzEpICsgMjtcclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMubWF4ID0gbG5nICogKHRoaXMuaXRlbUhlaWdodCsxKSArIDI7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4SGVpZ2h0IC8gdGhpcy5tYXg7XHJcbiAgICAgICAgdGhpcy5zaCA9IHRoaXMubWF4SGVpZ2h0ICogdGhpcy5yYXRpbztcclxuICAgICAgICB0aGlzLnJhbmdlID0gdGhpcy5tYXhIZWlnaHQgLSB0aGlzLnNoO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuc2ggKyAncHgnO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5tYXggPiB0aGlzLm1heEhlaWdodCApeyBcclxuICAgICAgICAgICAgdGhpcy53dyA9IHRoaXMuc2IgLSB0aGlzLnNzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggdGhpcy5taW5pQ2FudmFzICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgICAgICAgICB0aGlzLnRtcENhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2VTaXplWzFdXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4ID0gdGhpcy50bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgIHRoaXMudG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgdGhpcy50bXBDdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5pbWFnZVNpemVbMF0sIHRoaXMuaW1hZ2VTaXplWzFdKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtLCBuOy8vLCBsID0gdGhpcy5zYjtcclxuICAgICAgICBmb3IoIGxldCBpPTA7IGk8dGhpcy5sZW5ndGg7IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgbiA9IHRoaXMubGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuaXRlbSArICdwYWRkaW5nOjBweCAnKyh0aGlzLm0rMSkrJ3B4OyB3aWR0aDonK3RoaXMud3crJ3B4OyBoZWlnaHQ6Jyt0aGlzLml0ZW1IZWlnaHQrJ3B4OyBsaW5lLWhlaWdodDonKyh0aGlzLml0ZW1IZWlnaHQtMikrJ3B4OyBjb2xvcjonK3RoaXMuY29sb3JzLnRleHQrJzsgYmFja2dyb3VuZDonK3RoaXMuY29sb3JzLmJhY2srJzsnICk7XHJcbiAgICAgICAgICAgIGl0ZW0ubmFtZSA9ICdpdGVtJysgaVxyXG4gICAgICAgICAgICBpdGVtLmlkID0gaTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBmYWxzZVxyXG4gICAgICAgICAgICBpdGVtLnBvc3kgPSAodGhpcy5pdGVtSGVpZ2h0KzEpKmk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdEluLmFwcGVuZENoaWxkKCBpdGVtICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCggaXRlbSApO1xyXG5cclxuICAgICAgICAgICAgaWYoIG4gPT09IHRoaXMudmFsdWUgKSB0aGlzLmN1cnJlbnQgPSBpdGVtXHJcblxyXG4gICAgICAgICAgICAvL2lmKCB0aGlzLmlzV2l0aEltYWdlICkgaXRlbS5hcHBlbmRDaGlsZCggdGhpcy50bXBJbWFnZVtuXSApO1xyXG4gICAgICAgICAgICBpZiggIXRoaXMuaXNXaXRoSW1hZ2UgKSBpdGVtLnRleHRDb250ZW50ID0gbjtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLm1pbmlDYW52YXMgKXtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG5ldyBJbWFnZSgpXHJcbiAgICAgICAgICAgICAgICBjLnNyYyA9IHRoaXMudG1wQ2FudmFzLnRvRGF0YVVSTCgpXHJcblxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLnN0eWxlLm1hcmdpbkxlZnQgPSAodGhpcy5pbWFnZVNpemVbMF0rOCkrJ3B4J1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKmxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuXHJcbiAgICAgICAgICAgICAgICBjLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF1cclxuICAgICAgICAgICAgICAgIGMuaGVpZ2h0ID0gdGhpcy5pbWFnZVNpemVbMV1cclxuICAgICAgICAgICAgICAgIGxldCBjdHggPSBjLmdldENvbnRleHQoXCIyZFwiKVxyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuY2FudmFzQmdcclxuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9jLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246cmVsYXRpdmU7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDo1cHg7IHRvcDoycHgnXHJcbiAgICAgICAgICAgICAgIC8vIGMuc3R5bGUuY3NzVGV4dCA9JyBmbGV4LXNocmluazogMDsnXHJcblxyXG4gICAgICAgICAgICAgICAgYy5zdHlsZS5jc3NUZXh0ID0nbWFyZ2luLXJpZ2h0OjRweDsnXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vYy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsgZmxleC13cmFwOiB3cmFwOydcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5zdHlsZS5mbG9hdCA9ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoIGMgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudG1wSW1hZ2Vbbl0gPSBjXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5kcmFnb3V0ICl7XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pbWcgPSB0aGlzLnRtcEltYWdlW25dXHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kcmFnZ2FibGUgPSBcInRydWVcIlxyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5kcmFnc3RhcnQgfHwgZnVuY3Rpb24oKXsgLypjb25zb2xlLmxvZygnZHJhZyBzdGFydCcpKi99KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnJywgdGhpcy5kcmFnIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgc3RhcnQnKSovfSlcclxuICAgICAgICAgICAgICAgIC8vaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbigpeyBSb290cy5mYWtlVXAoKTsgfSApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5kcmFnZW5kIHx8IGZ1bmN0aW9uKCl7IC8qY29uc29sZS5sb2coJ2RyYWcgZW5kJykqLyB9LmJpbmQodGhpcykgKVxyXG4gICAgICAgICAgICAgICAgLy9pdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbigpe2NvbnNvbGUubG9nKCdkcm9wJyl9KVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9wSXRlbSgpO1xyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0YWJsZSApIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGRyYXdJbWFnZSggbmFtZSwgaW1hZ2UsIHgseSx3LGggKXtcclxuXHJcbiAgICAgICAgdGhpcy50bXBDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuaW1hZ2VTaXplWzBdLCB0aGlzLmltYWdlU2l6ZVsxXSk7XHJcbiAgICAgICAgdGhpcy50bXBDdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pXHJcbiAgICAgICAgdGhpcy50bXBJbWFnZVtuYW1lXS5zcmMgPSB0aGlzLnRtcENhbnZhcy50b0RhdGFVUkwoKVxyXG5cclxuXHJcbiAgICAgICAgLypsZXQgYyA9IHRoaXMudG1wSW1hZ2VbbmFtZV1cclxuICAgICAgICBsZXQgY3R4ID0gYy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3LCBoLCAwLCAwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0pKi9cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkSW1hZ2VzICgpe1xyXG4gICAgICAgIGxldCBsbmcgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciggbGV0IGk9MDsgaTxsbmc7IGkrKyApe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmFwcGVuZENoaWxkKCB0aGlzLnRtcEltYWdlW3RoaXMubGlzdFtpXV0gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUgKCB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgaWYoIWlzTmFOKHZhbHVlKSkgdGhpcy52YWx1ZSA9IHRoaXMubGlzdFsgdmFsdWUgXTtcclxuICAgICAgICBlbHNlIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLnRtcElkID0gdmFsdWVcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb3BJdGVtKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFRvcEl0ZW0gKCl7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXRpY1RvcCApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNXaXRoSW1hZ2UgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnByZUxvYWRDb21wbGV0ZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNbM10uY2hpbGRyZW4ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3NzVGV4dCA9J21hcmdpbi1yaWdodDo0cHg7J1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGltZyA9IHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKCB0aGlzLnRtcEltYWdlWyB0aGlzLnZhbHVlIF0sIDAsIDAsIHRoaXMuaW1hZ2VTaXplWzJdLCB0aGlzLmltYWdlU2l6ZVszXSwgMCwwLCB0aGlzLmltYWdlU2l6ZVswXSwgdGhpcy5pbWFnZVNpemVbMV0gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMubWluaUNhbnZhcyApe1xyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMuY1szXS5jaGlsZHJlbi5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5pbWFnZVNpemVbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmltYWdlU2l6ZVsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmNzc1RleHQgPSdtYXJnaW4tcmlnaHQ6NHB4OydcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbM10uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnbGVmdCdcclxuICAgICAgICAgICAgICAgIHRoaXMuY1szXS5hcHBlbmRDaGlsZCggdGhpcy5jYW52YXMgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoIHRoaXMudG1wSW1hZ2VbIHRoaXMudmFsdWUgXSwgMCwgMCApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0gTElTVFxyXG5cclxuICAgIHVwZGF0ZSAoIHkgKSB7XHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKSByZXR1cm47XHJcblxyXG4gICAgICAgIHkgPSB5IDwgMCA/IDAgOiB5O1xyXG4gICAgICAgIHkgPSB5ID4gdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2UgOiB5O1xyXG5cclxuICAgICAgICB0aGlzLnRvcExpc3QgPSAtTWF0aC5mbG9vciggeSAvIHRoaXMucmF0aW8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0SW4uc3R5bGUudG9wID0gdGhpcy50b3BMaXN0KydweCc7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS50b3AgPSBNYXRoLmZsb29yKCB5ICkgICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5weSA9IHk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudEhlaWdodCAoIHQgKSB7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5ncm91cCAhPT0gbnVsbCApIHRoaXMuZ3JvdXAuY2FsYyggdCApO1xyXG4gICAgICAgIGVsc2UgaWYgKCB0aGlzLmlzVUkgKSB0aGlzLm1haW4uY2FsYyggdCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuICggZmlyc3QgKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLm9wZW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIDAgKVxyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLm1heEhlaWdodCArIHRoaXMuYmFzZUggKyA1O1xyXG4gICAgICAgIGlmKCAhdGhpcy5zY3JvbGwgKXtcclxuICAgICAgICAgICAgdGhpcy50b3BMaXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5oID0gdGhpcy5iYXNlSCArIDUgKyB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyQmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXJCYWNrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICB0aGlzLnNbMl0uZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnVwICl7IFxyXG4gICAgICAgICAgICB0aGlzLnpvbmUueSAtPSB0aGlzLmggLSAodGhpcy5iYXNlSC0xMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1s0XSwgJ2QnLCB0aGlzLnN2Z3MuZzIgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuclNpemVDb250ZW50KCk7XHJcblxyXG4gICAgICAgIGxldCB0ID0gdGhpcy5oIC0gdGhpcy5iYXNlSDtcclxuXHJcbiAgICAgICAgdGhpcy56b25lLmggPSB0aGlzLmg7XHJcblxyXG4gICAgICAgIGlmKCFmaXJzdCkgdGhpcy5wYXJlbnRIZWlnaHQoIHQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy51cCApIHRoaXMuem9uZS55ICs9IHRoaXMuaCAtICh0aGlzLmJhc2VILTEwKTtcclxuXHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLmggLSB0aGlzLmJhc2VIO1xyXG5cclxuICAgICAgICB0aGlzLmggPSB0aGlzLmJhc2VIO1xyXG4gICAgICAgIHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuc1syXS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbNF0sICdkJywgdGhpcy5zdmdzLmcxICk7XHJcblxyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCggLXQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS1cclxuXHJcbiAgICB0ZXh0ICggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplQ29udGVudCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUoaS0tKSB0aGlzLmxpc3RJbi5jaGlsZHJlbltpXS5zdHlsZS53aWR0aCA9IHRoaXMud3cgKyAncHgnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgLy9Qcm90by5wcm90b3R5cGUuclNpemUuY2FsbCggdGhpcyApO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBsZXQgdyA9IHRoaXMuc2I7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhO1xyXG5cclxuICAgICAgICBpZihzWzJdPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzWzJdLndpZHRoID0gdyArICdweCc7XHJcbiAgICAgICAgc1syXS5sZWZ0ID0gZCArJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgIHNbM10ubGVmdCA9IGQgKyAncHgnO1xyXG5cclxuICAgICAgICBzWzRdLmxlZnQgPSBkICsgdyAtIDE1ICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy53dyA9IHc7XHJcbiAgICAgICAgaWYoIHRoaXMubWF4ID4gdGhpcy5tYXhIZWlnaHQgKSB0aGlzLnd3ID0gdy10aGlzLnNzO1xyXG4gICAgICAgIGlmKHRoaXMuaXNPcGVuKSB0aGlzLnJTaXplQ29udGVudCgpO1xyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE51bWVyaWMgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnNldFR5cGVOdW1iZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLnZhbHVlID0gWzBdXHJcbiAgICAgICAgdGhpcy5tdWx0eSA9IDFcclxuICAgICAgICB0aGlzLmludm11bHR5ID0gMVxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGUgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5pc0FuZ2xlID0gZmFsc2VcclxuICAgICAgICB0aGlzLmlzVmVjdG9yID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoIG8uaXNBbmdsZSApe1xyXG4gICAgICAgICAgICB0aGlzLmlzQW5nbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMubXVsdHkgPSBUb29scy50b3JhZFxyXG4gICAgICAgICAgICB0aGlzLmludm11bHR5ID0gVG9vbHMudG9kZWdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEcmFnID0gby5kcmFnIHx8IGZhbHNlXHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlICE9PSB1bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgaWYoICFpc05hTihvLnZhbHVlKSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtvLnZhbHVlXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWUgaW5zdGFuY2VvZiBBcnJheSApeyBcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICl7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS54ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzBdID0gby52YWx1ZS54XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS55ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzFdID0gby52YWx1ZS55XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gby52YWx1ZS56XHJcbiAgICAgICAgICAgICAgICBpZiggby52YWx1ZS53ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzNdID0gby52YWx1ZS53XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNWZWN0b3IgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG5nID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB0aGlzLnRtcCA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IC0xXHJcbiAgICAgICAgdGhpcy5wcmV2ID0geyB4OjAsIHk6MCwgZDowLCB2OjAgfVxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICAvLyBiZ1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnIGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IHRvcDo0cHg7IHdpZHRoOjBweDsgaGVpZ2h0OicgKyAodGhpcy5oLTgpICsgJ3B4OycgKVxyXG5cclxuICAgICAgICB0aGlzLmNNb2RlID0gW11cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaSA9IHRoaXMubG5nXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCB0aGlzLmlzQW5nbGUgKSB0aGlzLnZhbHVlW2ldID0gKHRoaXMudmFsdWVbaV0gKiAxODAgLyBNYXRoLlBJKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndG9wOjFweDsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnKVxyXG4gICAgICAgICAgICBpZihvLmNlbnRlcikgdGhpcy5jWzIraV0uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcidcclxuICAgICAgICAgICAgdGhpcy5jWzMraV0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIHRoaXMuY1szK2ldLnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcnMudGV4dFxyXG4gICAgICAgICAgICB0aGlzLmNbMytpXS5pc051bSA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jTW9kZVtpXSA9IDBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdElkID0gMyArIHRoaXMubG5nO1xyXG4gICAgICAgIHRoaXMuY1t0aGlzLnNlbGVjdElkXSA9IHRoaXMuZG9tKCAgJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjJweDsgaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBwYWRkaW5nOjBweCAwcHg7IHdpZHRoOjBweDsgY29sb3I6JyArIGNjLnRleHRTZWxlY3QgKyAnOyBiYWNrZ3JvdW5kOicgKyBjYy5zZWxlY3QgKyAnOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czowcHg7Jyk7XHJcblxyXG4gICAgICAgIC8vIGN1cnNvclxyXG4gICAgICAgIHRoaXMuY3Vyc29ySWQgPSA0ICsgdGhpcy5sbmc7XHJcbiAgICAgICAgdGhpcy5jWyB0aGlzLmN1cnNvcklkIF0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLmJhc2ljICsgJ3RvcDoycHg7IGhlaWdodDonICsgKHRoaXMuaC00KSArICdweDsgd2lkdGg6MHB4OyBiYWNrZ3JvdW5kOicrY2MudGV4dCsnOycgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWxcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnXHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy5sbmdcclxuICAgICAgICBsZXQgdCA9IHRoaXMudG1wXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuICAgICAgICAgICAgaWYoIGwueD50W2ldWzBdICYmIGwueDx0W2ldWzJdICkgcmV0dXJuIGlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApXHJcblxyXG4gICAgICAgIGlmKCAhdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlXHJcbiAgICAgICAgICAgIGlmKCBuYW1lICE9PSAnJyApeyBcclxuICAgICAgICAgICAgXHR0aGlzLmN1cnJlbnQgPSBuYW1lXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2ID0geyB4OmUuY2xpZW50WCwgeTplLmNsaWVudFksIGQ6MCwgdjogdGhpcy5pc1NpbmdsZSA/IHBhcnNlRmxvYXQodGhpcy52YWx1ZSkgOiBwYXJzZUZsb2F0KCB0aGlzLnZhbHVlWyB0aGlzLmN1cnJlbnQgXSApIH1cclxuICAgICAgICAgICAgXHR0aGlzLnNldElucHV0KCB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXSApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICBcdGlmKCB0aGlzLmlzRG93biApe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByZXYgPSB7IHg6MCwgeTowLCBkOjAsIHY6MCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBudXAgPSBmYWxzZVxyXG4gICAgICAgIGxldCB4ID0gMFxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJycgKSB0aGlzLmN1cnNvcigpXHJcbiAgICAgICAgZWxzZXsgXHJcbiAgICAgICAgXHRpZighdGhpcy5pc0RyYWcpIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgXHRlbHNlIHRoaXMuY3Vyc29yKCB0aGlzLmN1cnJlbnQgIT09IC0xID8gJ21vdmUnIDogJ3BvaW50ZXInICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEcmFnICl7XHJcblxyXG4gICAgICAgIFx0aWYoIHRoaXMuY3VycmVudCAhPT0gLTEgKXtcclxuXHJcbiAgICAgICAgICAgIFx0dGhpcy5wcmV2LmQgKz0gKCBlLmNsaWVudFggLSB0aGlzLnByZXYueCApIC0gKCBlLmNsaWVudFkgLSB0aGlzLnByZXYueSApXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0aGlzLnByZXYudiArICggdGhpcy5wcmV2LmQgKiB0aGlzLnN0ZXApXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVsgdGhpcy5jdXJyZW50IF0gPSB0aGlzLm51bVZhbHVlKG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyB0aGlzLmN1cnJlbnQgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbdGhpcy5jdXJyZW50XVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucHJldi54ID0gZS5jbGllbnRYXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYueSA9IGUuY2xpZW50WVxyXG5cclxuICAgICAgICAgICAgICAgIG51cCA9IHRydWVcclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgXHRpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLnggLTNcclxuICAgICAgICBcdGlmKCB0aGlzLmN1cnJlbnQgIT09IC0xICkgeCAtPSB0aGlzLnRtcFt0aGlzLmN1cnJlbnRdWzBdXHJcbiAgICAgICAgXHRyZXR1cm4gdGhpcy51cElucHV0KCB4LCB0aGlzLmlzRG93biApXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICBsZXQgbnVwID0gZmFsc2VcclxuICAgICAgICByZXR1cm4gbnVwXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZSAoIHYgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzVmVjdG9yICl7XHJcbiAgICAgICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbMF0gPSB2LnhcclxuICAgICAgICAgICAgaWYoIHYueSAhPT0gdW5kZWZpbmVkICkgdGhpcy52YWx1ZVsxXSA9IHYueVxyXG4gICAgICAgICAgICBpZiggdi56ICE9PSB1bmRlZmluZWQgKSB0aGlzLnZhbHVlWzJdID0gdi56XHJcbiAgICAgICAgICAgIGlmKCB2LncgIT09IHVuZGVmaW5lZCApIHRoaXMudmFsdWVbM10gPSB2LndcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1NpbmdsZSA/IFt2XSA6IHYgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzYW1lU3RyICggc3RyICl7XHJcblxyXG4gICAgICAgIGxldCBpID0gdGhpcy52YWx1ZS5sZW5ndGhcclxuICAgICAgICB3aGlsZShpLS0pIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHN0clxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAgdGhpcy52YWx1ZVtpXSA9IHRoaXMubnVtVmFsdWUoIHRoaXMudmFsdWVbaV0gKiB0aGlzLmludm11bHR5IClcclxuICAgICAgICAgICAgIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWVbaV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB1cCApIHRoaXMuc2VuZCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbmQgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCB0aGlzLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuaXNTZW5kID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICl7IFxyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaXNWZWN0b3IgKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TGlua1sgdGhpcy5vYmplY3RLZXkgXS5mcm9tQXJyYXkoIHYgKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RMaW5rWyB0aGlzLm9iamVjdEtleSBdID0gdlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB2LCB0aGlzLm9iamVjdEtleSApXHJcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBJTlBVVFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHNlbGVjdCAoIGMsIGUsIHcsIHQgKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmN1cnJlbnQgIT09IC0xID8gdGhpcy50bXBbdGhpcy5jdXJyZW50XVswXSArIDUgOiAwXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9ICcxcHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS5sZWZ0ID0gKCBkICsgYyApICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ubGVmdCA9ICAoIGQgKyBlICkgICsgJ3B4J1xyXG4gICAgICAgIHNbdGhpcy5zZWxlY3RJZF0ud2lkdGggPSAgdyAgKyAncHgnXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9IHRcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHVuc2VsZWN0ICgpIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBpZighcykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jW3RoaXMuc2VsZWN0SWRdLmlubmVySFRNTCA9ICcnXHJcbiAgICAgICAgc1t0aGlzLnNlbGVjdElkXS53aWR0aCA9IDAgKyAncHgnXHJcbiAgICAgICAgc1t0aGlzLmN1cnNvcklkXS53aWR0aCA9IDAgKyAncHgnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlICggZm9yY2UgKSB7XHJcblxyXG4gICAgICAgIGxldCBhciA9IFtdXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICBpZiggdGhpcy5hbGx3YXkgKSBmb3JjZSA9IHRydWVcclxuXHJcbiAgICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICBcdGlmKCFpc05hTiggdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ICkpeyBcclxuICAgICAgICAgICAgICAgIGxldCBueCA9IHRoaXMubnVtVmFsdWUoIHRoaXMuY1sgMyArIGkgXS50ZXh0Q29udGVudCApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jWyAzICsgaSBdLnRleHRDb250ZW50ID0gbnhcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaV0gPSBueFxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBub3QgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNbIDMgKyBpIF0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlW2ldXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgXHRhcltpXSA9IHRoaXMudmFsdWVbaV0gKiB0aGlzLm11bHR5XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiggIWZvcmNlICkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZW5kKCB0aGlzLmlzU2luZ2xlID8gYXJbMF0gOiBhciApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpXHJcbiAgICAgICAgbGV0IHN4ID0gdGhpcy5jb2xvcnMuc3hcclxuICAgICAgICBsZXQgc3MgPSBzeCAqICh0aGlzLmxuZy0xKVxyXG4gICAgICAgIGxldCB3ID0gKHRoaXMuc2Itc3MpIC8gdGhpcy5sbmcvLygoIHRoaXMuc2IgKyBzeCApIC8gdGhpcy5sbmcgKS1zeFxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZ1xyXG5cclxuICAgICAgICB3aGlsZShpLS0pe1xyXG4gICAgICAgICAgICAvL3RoaXMudG1wW2ldID0gWyBNYXRoLmZsb29yKCB0aGlzLnNhICsgKCB3ICogaSApKyggNSAqIGkgKSksIHcgXTtcclxuICAgICAgICAgICAgdGhpcy50bXBbaV0gPSBbICggdGhpcy5zYSArICggdyAqIGkgKSsoIHN4ICogaSApKSwgdyBdXHJcbiAgICAgICAgICAgIHRoaXMudG1wW2ldWzJdID0gdGhpcy50bXBbaV1bMF0gKyB0aGlzLnRtcFtpXVsxXVxyXG4gICAgICAgICAgICBzWyAzICsgaSBdLmxlZnQgPSB0aGlzLnRtcFtpXVswXSArICdweCdcclxuICAgICAgICAgICAgc1sgMyArIGkgXS53aWR0aCA9IHRoaXMudG1wW2ldWzFdICsgJ3B4J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tIFwiLi4vY29yZS9Qcm90by5qc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9jb3JlL1Rvb2xzLmpzXCI7XHJcblxyXG5mdW5jdGlvbiBlYXNlKHgsIG1pbiwgbWF4LCBwb3dlcikge1xyXG4gIGxldCBuID0gbWluICsgTWF0aC5wb3coKHggLSBtaW4pIC8gKG1heCAtIG1pbiksIHBvd2VyKSAqIChtYXggLSBtaW4pO1xyXG4gIHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGUgZXh0ZW5kcyBQcm90byB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICBzdXBlcihvKTtcclxuXHJcbiAgICBpZiAoby5lYXNpbmcgPD0gMCkgdGhyb3cgXCJFYXNpbmcgbXVzdCBiZSA+IDBcIjtcclxuICAgIHRoaXMuZWFzaW5nID0gby5lYXNpbmcgfHwgMTtcclxuXHJcbiAgICB0aGlzLnNldFR5cGVOdW1iZXIobyk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgIGlmIChvLm1vZGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tb2RlbCA9IG8ubW9kZTtcclxuXHJcbiAgICAvL3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yID0gdGhpcy5jb2xvcnMuaGlkZTtcclxuXHJcbiAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWxsd2F5ID0gby5hbGx3YXkgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5pc0RlZyA9IG8uaXNEZWcgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ3ljbGljID0gby5jeWNsaWMgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5maXJzdEltcHV0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG4gICAgLy90aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICdsZXR0ZXItc3BhY2luZzotMXB4OyB0ZXh0LWFsaWduOnJpZ2h0OyB3aWR0aDo0N3B4OyBib3JkZXI6MXB4IGRhc2hlZCAnK3RoaXMuZGVmYXVsdEJvcmRlckNvbG9yKyc7IGNvbG9yOicrIHRoaXMuY29sb3JzLnRleHQgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAndGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgYm9yZGVyOjFweCBkYXNoZWQgJyt0aGlzLmRlZmF1bHRCb3JkZXJDb2xvcisnOyBjb2xvcjonKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcbiAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MudHh0c2VsZWN0ICtcclxuICAgICAgICBcImJvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IHdpZHRoOjQ3cHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuICAgIC8vdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnbGV0dGVyLXNwYWNpbmc6LTFweDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NDdweDsgY29sb3I6JysgdGhpcy5jb2xvcnMudGV4dCApO1xyXG4gICAgdGhpcy5jWzNdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICsgXCIgdG9wOjA7IGhlaWdodDpcIiArIHRoaXMuaCArIFwicHg7XCJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jWzRdID0gdGhpcy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJhY2sgK1xyXG4gICAgICAgIFwiOyB0b3A6MnB4OyBoZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmggLSA0KSArXHJcbiAgICAgICAgXCJweDtcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuY1s1XSA9IHRoaXMuZG9tKFxyXG4gICAgICBcImRpdlwiLFxyXG4gICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgXCJsZWZ0OjRweDsgdG9wOjVweDsgaGVpZ2h0OlwiICtcclxuICAgICAgICAodGhpcy5oIC0gMTApICtcclxuICAgICAgICBcInB4OyBiYWNrZ3JvdW5kOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNbMl0uaXNOdW0gPSB0cnVlO1xyXG4gICAgLy90aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaC00KSArICdweCc7XHJcbiAgICAvL3RoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gKHRoaXMuaC04KSArICdweCc7XHJcbiAgICB0aGlzLmNbMl0uc3R5bGUuaGVpZ2h0ID0gdGhpcy5oIC0gMiArIFwicHhcIjtcclxuICAgIHRoaXMuY1syXS5zdHlsZS5saW5lSGVpZ2h0ID0gdGhpcy5oIC0gMTAgKyBcInB4XCI7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHtcclxuICAgICAgbGV0IHIxID0gNCxcclxuICAgICAgICBoMSA9IDQsXHJcbiAgICAgICAgaDIgPSA4LFxyXG4gICAgICAgIHd3ID0gdGhpcy5oIC0gNixcclxuICAgICAgICByYSA9IDE2O1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZWwgPT09IDIpIHtcclxuICAgICAgICByMSA9IDA7XHJcbiAgICAgICAgaDEgPSAyO1xyXG4gICAgICAgIGgyID0gNDtcclxuICAgICAgICByYSA9IDI7XHJcbiAgICAgICAgd3cgPSAodGhpcy5oIC0gNikgKiAwLjU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGVsID09PSAzKSB0aGlzLmNbNV0uc3R5bGUudmlzaWJsZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgdGhpcy5jWzRdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNF0uc3R5bGUuaGVpZ2h0ID0gaDIgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s0XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSArIFwicHhcIjtcclxuICAgICAgdGhpcy5jWzVdLnN0eWxlLmJvcmRlclJhZGl1cyA9IHIxICogMC41ICsgXCJweFwiO1xyXG4gICAgICB0aGlzLmNbNV0uc3R5bGUuaGVpZ2h0ID0gaDEgKyBcInB4XCI7XHJcbiAgICAgIHRoaXMuY1s1XS5zdHlsZS50b3AgPSB0aGlzLmggKiAwLjUgLSBoMSAqIDAuNSArIFwicHhcIjtcclxuXHJcbiAgICAgIC8vdGhpcy5jWzZdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICdib3JkZXItcmFkaXVzOicrcmErJ3B4OyBtYXJnaW4tbGVmdDonKygtd3cqMC41KSsncHg7IGJvcmRlcjoxcHggc29saWQgJytjYy5ib3JkZXIrJzsgYmFja2dyb3VuZDonK2NjLmJ1dHRvbisnOyBsZWZ0OjRweDsgdG9wOjJweDsgaGVpZ2h0OicrKHRoaXMuaC00KSsncHg7IHdpZHRoOicrd3crJ3B4OycgKTtcclxuICAgICAgdGhpcy5jWzZdID0gdGhpcy5kb20oXHJcbiAgICAgICAgXCJkaXZcIixcclxuICAgICAgICB0aGlzLmNzcy5iYXNpYyArXHJcbiAgICAgICAgICBcImJvcmRlci1yYWRpdXM6XCIgK1xyXG4gICAgICAgICAgcmEgK1xyXG4gICAgICAgICAgXCJweDsgbWFyZ2luLWxlZnQ6XCIgK1xyXG4gICAgICAgICAgLXd3ICogMC41ICtcclxuICAgICAgICAgIFwicHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgICAgY2MudGV4dCArXHJcbiAgICAgICAgICBcIjsgbGVmdDo0cHg7IHRvcDozcHg7IGhlaWdodDpcIiArXHJcbiAgICAgICAgICAodGhpcy5oIC0gNikgK1xyXG4gICAgICAgICAgXCJweDsgd2lkdGg6XCIgK1xyXG4gICAgICAgICAgd3cgK1xyXG4gICAgICAgICAgXCJweDtcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgaWYgKGwueCA+PSB0aGlzLnR4bCkgcmV0dXJuIFwidGV4dFwiO1xyXG4gICAgZWxzZSBpZiAobC54ID49IHRoaXMuc2EpIHJldHVybiBcInNjcm9sbFwiO1xyXG4gICAgZWxzZSByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEVWRU5UU1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbW91c2V1cChlKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24oZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbGQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKmlmKCBuYW1lID09PSAndGV4dCcgKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dCggdGhpcy5jWzJdLCBmdW5jdGlvbigpeyB0aGlzLnZhbGlkYXRlKCkgfS5iaW5kKHRoaXMpICk7XHJcbiAgICAgICAgfSovXHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3VzZW1vdmUoZSkge1xyXG4gICAgbGV0IG51cCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAobmFtZSA9PT0gXCJzY3JvbGxcIikge1xyXG4gICAgICB0aGlzLm1vZGUoMSk7XHJcbiAgICAgIHRoaXMuY3Vyc29yKFwidy1yZXNpemVcIik7XHJcbiAgICAgIC8vfSBlbHNlIGlmKG5hbWUgPT09ICd0ZXh0Jyl7XHJcbiAgICAgIC8vdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgIGxldCBuTm9ybWFsaXplZCA9IChlLmNsaWVudFggLSAodGhpcy56b25lLnggKyB0aGlzLnNhKSAtIDMpIC8gdGhpcy53dztcclxuXHJcbiAgICAgIC8vIGxvIG1hcGVvIGFsIHJhbmdvIDAgLi4uIDFcclxuICAgICAgbk5vcm1hbGl6ZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBuTm9ybWFsaXplZCkpO1xyXG5cclxuICAgICAgLy8gYXBsaWNvIGVhc2luZ1xyXG4gICAgICBsZXQgbkVhc2VkID0gTWF0aC5wb3cobk5vcm1hbGl6ZWQsIHRoaXMuZWFzaW5nKTsgLy8gZWFzaW5nXHJcblxyXG4gICAgICBsZXQgbk5ldyA9IG5FYXNlZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuICAgICAgbGV0IG5OZXdTbGlkZXIgPSBuTm9ybWFsaXplZCAqIHRoaXMucmFuZ2UgKyB0aGlzLm1pbjtcclxuXHJcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB0aGlzLm51bVZhbHVlKG5OZXdTbGlkZXIpO1xyXG5cclxuICAgICAgbGV0IGRlbHRhID0gbk5ldyAtIHRoaXMub2xkO1xyXG5cclxuICAgICAgbGV0IHN0ZXBzO1xyXG4gICAgICBpZiAoZGVsdGEgPj0gdGhpcy5zdGVwIHx8IGRlbHRhIDw9IHRoaXMuc3RlcCkge1xyXG4gICAgICAgIHN0ZXBzID0gTWF0aC5mbG9vcihkZWx0YSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUodGhpcy5vbGQgKyBzdGVwcyAqIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgLy8gdmFsdWUgd2l0aG91dCBlYXNpbmcgYXBwbGllZFxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB0aGlzLm9sZCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIm4sIG5vcm1hbGl6ZWQsIHZhbHVlXCIsIG5OZXcsIG5Ob3JtYWxpemVkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgbnVwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVwO1xyXG4gIH1cclxuXHJcbiAgd2hlZWwoZSkge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKGUpO1xyXG5cclxuICAgIGlmIChuYW1lID09PSBcInNjcm9sbFwiKSB7XHJcbiAgICAgIGxldCB2ID0gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCAqIGUuZGVsdGE7XHJcblxyXG4gICAgICBpZiAodiA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdiA9IHRoaXMuaXNDeWNsaWMgPyB0aGlzLm1pbiA6IHRoaXMubWF4O1xyXG4gICAgICB9IGVsc2UgaWYgKHYgPCB0aGlzLm1pbikge1xyXG4gICAgICAgIHYgPSB0aGlzLmlzQ3ljbGljID8gdGhpcy5tYXggOiB0aGlzLm1pbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2KTtcclxuICAgICAgdGhpcy5vbGQgPSB2O1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8va2V5ZG93bjogZnVuY3Rpb24gKCBlICkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5jWzJdLnRleHRDb250ZW50O1xyXG5cclxuICAgIGlmICghaXNOYU4obikpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubnVtVmFsdWUobik7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSBlbHNlIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUgKyAodGhpcy5pc0RlZyA/IFwiwrBcIiA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICAvL3RoaXMuY2xlYXJJbnB1dCgpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZSgwKTtcclxuICB9XHJcblxyXG4gIG1vZGUobW9kZSkge1xyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICBsZXQgY2MgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcbiAgICAgICAgLy8gc1syXS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyB0aGlzLmNvbG9ycy5oaWRlO1xyXG4gICAgICAgIHNbMl0uY29sb3IgPSBjYy50ZXh0O1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAhPT0gMCkgc1s2XS5iYWNrZ3JvdW5kID0gY2MudGV4dDsgLy9jYy5idXR0b247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gc2Nyb2xsIG92ZXJcclxuICAgICAgICAvL3NbMl0uYm9yZGVyID0gJzFweCBkYXNoZWQgJyArIHRoaXMuY29sb3JzLmhpZGU7XHJcbiAgICAgICAgc1syXS5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG4gICAgICAgIHNbNF0uYmFja2dyb3VuZCA9IGNjLmJhY2s7XHJcbiAgICAgICAgc1s1XS5iYWNrZ3JvdW5kID0gY2MudGV4dE92ZXI7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgIT09IDApIHNbNl0uYmFja2dyb3VuZCA9IGNjLnRleHRPdmVyOyAvL2NjLm92ZXJvZmY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXApIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGxldCB1bmVhc2VkID1cclxuICAgICAgdGhpcy5lYXNpbmcgPT0gMSA/IG5vcm1hbGl6ZWQgOiBNYXRoLnBvdyhub3JtYWxpemVkLCAxIC8gdGhpcy5lYXNpbmcpO1xyXG5cclxuICAgIGxldCB3dyA9IE1hdGguZmxvb3IodGhpcy53dyAqIHVuZWFzZWQpO1xyXG4gICAgLy9sZXQgd3cgPSBNYXRoLmZsb29yKHRoaXMud3cgKiAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnJhbmdlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IDMpIHRoaXMuc1s1XS53aWR0aCA9IHd3ICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMuc1s2XSkgdGhpcy5zWzZdLmxlZnQgPSB0aGlzLnNhICsgd3cgKyAzICsgXCJweFwiO1xyXG4gICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZSArICh0aGlzLmlzRGVnID8gXCLCsFwiIDogXCJcIik7XHJcblxyXG4gICAgaWYgKHVwKSB0aGlzLnNlbmQoKTtcclxuICB9XHJcblxyXG4gIHJTaXplKCkge1xyXG4gICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuc2IgLSB0aGlzLnNjO1xyXG4gICAgdGhpcy53dyA9IHcgLSA2O1xyXG5cclxuICAgIGxldCB0eCA9IHRoaXMuc2M7XHJcbiAgICBpZiAodGhpcy5pc1VJIHx8ICF0aGlzLnNpbXBsZSkgdHggPSB0aGlzLnNjICsgMTA7XHJcbiAgICB0aGlzLnR4bCA9IHRoaXMudyAtIHR4ICsgMjtcclxuXHJcbiAgICAvL2xldCB0eSA9IE1hdGguZmxvb3IodGhpcy5oICogMC41KSAtIDg7XHJcblxyXG4gICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgc1syXS53aWR0aCA9IHRoaXMuc2MgLSA2ICsgXCJweFwiO1xyXG4gICAgc1syXS5sZWZ0ID0gdGhpcy50eGwgKyA0ICsgXCJweFwiO1xyXG4gICAgLy9zWzJdLnRvcCA9IHR5ICsgJ3B4JztcclxuICAgIHNbM10ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzNdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNF0ubGVmdCA9IHRoaXMuc2EgKyBcInB4XCI7XHJcbiAgICBzWzRdLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAzICsgXCJweFwiO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFByb3RvIH0gZnJvbSAnLi4vY29yZS9Qcm90by5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuY21vZGUgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSAhPT0gdW5kZWZpbmVkID8gby52YWx1ZSA6ICcnO1xyXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXIgPSBvLnBsYWNlSG9sZGVyIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmFsbHdheSA9IG8uYWxsd2F5IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBvLmVkaXQgIT09IHVuZGVmaW5lZCA/IG8uZWRpdCA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIC8vIHRleHRcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGNvbG9yOicgKyBjYy50ZXh0ICsgJzsgYmFja2dyb3VuZDonICsgY2MuYmFjayArICc7IGJvcmRlckNvbG9yOicgKyBjYy5ib3JkZXIrJzsgYm9yZGVyLXJhZGl1czonK3RoaXMucmFkaXVzKydweDsnICk7XHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICAnZGl2JywgdGhpcy5jc3MudHh0c2VsZWN0ICsgJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHBhZGRpbmc6MHB4IDBweDsgd2lkdGg6MHB4OyBjb2xvcjonICsgY2MudGV4dFNlbGVjdCArICc7IGJhY2tncm91bmQ6JyArIGNjLnNlbGVjdCArICc7IGJvcmRlcjpub25lOyBib3JkZXItcmFkaXVzOjBweDsnKTtcclxuXHJcbiAgICAgICAgLy8gY3Vyc29yXHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy5iYXNpYyArICd0b3A6MnB4OyBoZWlnaHQ6JyArICh0aGlzLmgtNCkgKyAncHg7IHdpZHRoOjBweDsgYmFja2dyb3VuZDonK2NjLnRleHQrJzsnICk7XHJcblxyXG4gICAgICAgIC8vIGZha2VcclxuICAgICAgICB0aGlzLmNbNV0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dHNlbGVjdCArICd0b3A6MXB4OyBoZWlnaHQ6JyArICh0aGlzLmgtMikgKyAncHg7IGJvcmRlcjpub25lOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjonK2NjLmJvcmRlcisnOycgKTtcclxuICAgICAgICBpZiggdGhpcy52YWx1ZSA9PT0gJycgKSB0aGlzLmNbNV0udGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlSG9sZGVyO1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXN0Wm9uZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuICAgICAgICBpZiggbC54ID09PSAtMSAmJiBsLnkgPT09IC0xICkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmKCBsLnggPj0gdGhpcy5zYSApIHJldHVybiAndGV4dCc7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG5cclxuICAgICAgICBpZighdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKXtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2Vtb3ZlKCBlICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlZG93biAoIGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZSggZSApO1xyXG5cclxuICAgICAgICBpZiggIXRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuc2V0SW5wdXQoIHRoaXMuY1syXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZWRpdGFibGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIC8vbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIC8vaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApeyByZXR1cm47fVxyXG5cclxuICAgICAgICAvL2lmKCBsLnggPj0gdGhpcy5zYSApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgLy9lbHNlIHRoaXMuY3Vyc29yKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICd0ZXh0JyApIHRoaXMuY3Vyc29yKCd0ZXh0Jyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSB4ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwSW5wdXQoIHggLSB0aGlzLnNhIC0zLCB0aGlzLmlzRG93biApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIElOUFVUXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgc2VsZWN0ICggYywgZSwgdywgdCApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLnNhICsgNTtcclxuICAgICAgICBzWzRdLndpZHRoID0gJzFweCc7XHJcbiAgICAgICAgc1s0XS5sZWZ0ID0gKCBkICsgZSApICsgJ3B4JztcclxuXHJcbiAgICAgICAgc1szXS5sZWZ0ID0gICggZCArIGUgKSAgKyAncHgnO1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAgdyAgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuY1szXS5pbm5lckhUTUwgPSB0XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICB1bnNlbGVjdCAoKSB7XHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5zO1xyXG4gICAgICAgIGlmKCFzKSByZXR1cm47XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICAwICArICdweCc7XHJcbiAgICAgICAgdGhpcy5jWzNdLmlubmVySFRNTCA9ICd0J1xyXG4gICAgICAgIHNbNF0ud2lkdGggPSAwICsgJ3B4JztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUgKCBmb3JjZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuYWxsd2F5ICkgZm9yY2UgPSB0cnVlOyBcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY1syXS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYodGhpcy52YWx1ZSAhPT0gJycpIHRoaXMuY1s1XS50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgIGVsc2UgdGhpcy5jWzVdLnRleHRDb250ZW50ID0gdGhpcy5wbGFjZUhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoICFmb3JjZSApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgUkVaSVNFXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzJdLndpZHRoID0gdGhpcy5zYiArICdweCc7XHJcblxyXG4gICAgICAgIHNbNV0ubGVmdCA9IHRoaXMuc2EgKyAncHgnO1xyXG4gICAgICAgIHNbNV0ud2lkdGggPSB0aGlzLnNiICsgJ3B4JztcclxuICAgICBcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6cmlnaHQ7IHdpZHRoOjYwcHg7IGxpbmUtaGVpZ2h0OicrICh0aGlzLmgtOCkgKyAncHg7IGNvbG9yOicgKyB0aGlzLmNvbG9ycy50ZXh0ICk7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmggPT09IDMxICl7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNbMF0uaGVpZ2h0ID0gdGhpcy5oICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5zWzFdLnRvcCA9IDggKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNbMl0uc3R5bGUudG9wID0gOCArICdweCc7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnM7XHJcblxyXG4gICAgICAgIHNbMV0uanVzdGlmeUNvbnRlbnQgPSBvLmFsaWduIHx8ICdsZWZ0JztcclxuICAgICAgICAvL3NbMV0udGV4dEFsaWduID0gby5hbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgc1sxXS5mb250V2VpZ2h0ID0gby5mb250V2VpZ2h0IHx8ICdib2xkJztcclxuXHJcblxyXG4gICAgICAgIHRoaXMuY1sxXS50ZXh0Q29udGVudCA9IHRoaXMudHh0LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnR4dC5zdWJzdHJpbmcoMSkucmVwbGFjZShcIi1cIiwgXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHByZWZpeDtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQoIHR4dCApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jWzFdLnRleHRDb250ZW50ID0gdHh0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0MiggdHh0ICkge1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0eHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuc1sxXS53aWR0aCA9IHRoaXMudyArICdweCc7IC8vLSA1MCArICdweCc7XHJcbiAgICAgICAgdGhpcy5zWzJdLmxlZnQgPSB0aGlzLncgKyAncHgnOy8vLSAoIDUwICsgMjYgKSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldENvbG9yKCBjICkge1xyXG4gICAgICAgIHRoaXMuc1sxXS5jb2xvciA9IGNcclxuICAgICAgICB0aGlzLnNbMl0uY29sb3IgPSBjXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCAnJ1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9uQWN0aWYgPSBvLm9uQWN0aWYgfHwgZnVuY3Rpb24oKXt9XHJcblxyXG4gICAgICAgIC8vbGV0IHByZWZpeCA9IG8ucHJlZml4IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonKyBjYy5idXR0b25Cb3JkZXIrJzsgYm9yZGVyLXJhZGl1czoxNXB4OyB3aWR0aDozMHB4OyBsZWZ0OjEwcHg7JyApXHJcbiAgICAgICAgLy90aGlzLmNbMl0uc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvcjtcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG5cclxuICAgICAgICBsZXQgZmx0b3AgPSBNYXRoLmZsb29yKHRoaXMuaCowLjUpLTdcclxuICAgICAgICB0aGlzLmNbNF0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuc3Znc1sgJ2N1cnNvcicgXSwgZmlsbDpjYy50ZXh0LCBzdHJva2U6J25vbmUnfSlcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gMVxyXG4gICAgICAgIHRoaXMuaXNBY3RpZiA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJ1xyXG4gICAgICAgIGlmKCBsLnggPiB0aGlzLnNhICYmIGwueCA8IHRoaXMuc2ErMzAgKSByZXR1cm4gJ292ZXInXHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgICAgIC8vdGhpcy5zZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoICFuYW1lICkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZVxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlbW92ZSAoIGUgKSB7XHJcblxyXG4gICAgICAgIGxldCB1cCA9IGZhbHNlXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlIClcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvcigncG9pbnRlcicpO1xyXG4gICAgICAgICAgICB1cCA9IHRoaXMubW9kZSggdGhpcy5pc0Rvd24gPyAzIDogMiApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLnJlc2V0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1cFxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MSApIHRoaXMuaXNBY3RpZiA9IGZhbHNlOztcclxuXHJcbiAgICAgICAgICAgIGlmKCBuPT09MyApeyBcclxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5pc0FjdGlmICl7IHRoaXMuaXNBY3RpZiA9IHRydWU7IG49NDsgdGhpcy5vbkFjdGlmKCB0aGlzICk7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyB0aGlzLmlzQWN0aWYgPSBmYWxzZTsgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggbj09PTIgJiYgdGhpcy5pc0FjdGlmICkgbiA9IDQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXQgPSBuXHJcblxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7IC8vIGJhc2VcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7IGJyZWFrOyAvLyBvdmVyXHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dE92ZXI7IHRoaXMuc1sgMiBdLmJhY2tncm91bmQgPSBjYy5hY3Rpb247IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLmFjdGlvbjsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0ICgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKCB0aGlzLmlzQWN0aWYgPyA0IDogMSApXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dFxyXG5cclxuICAgIH1cclxuXHJcbiAgICByU2l6ZSAoKSB7XHJcblxyXG4gICAgICAgIHN1cGVyLnJTaXplKClcclxuXHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLnNcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4J1xyXG4gICAgICAgIHNbM10ubGVmdCA9ICh0aGlzLnNhICsgNDApICsgJ3B4J1xyXG4gICAgICAgIHNbM10ud2lkdGggPSAodGhpcy5zYiAtIDQwKSArICdweCdcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCdcclxuXHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgRmlsZXMgfSBmcm9tICcuLi9jb3JlL0ZpbGVzLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvIClcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG8udmFsdWUgfHwgJydcclxuICAgICAgICB0aGlzLnJlZlRleHR1cmUgPSBvLnRleHR1cmUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmltZyA9IG51bGxcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNjID0gdGhpcy5jb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5jWzJdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHQgKyB0aGlzLmNzcy5idXR0b24gKyAnIHRvcDoxcHg7IGJhY2tncm91bmQ6JytjYy5idXR0b24rJzsgaGVpZ2h0OicrKHRoaXMuaC0yKSsncHg7IGJvcmRlcjonK2NjLmJ1dHRvbkJvcmRlcisnOyBib3JkZXItcmFkaXVzOjE1cHg7IHdpZHRoOjMwcHg7IGxlZnQ6MTBweDsnIClcclxuXHJcbiAgICAgICAgdGhpcy5jWzNdID0gdGhpcy5kb20oICdkaXYnLCB0aGlzLmNzcy50eHRzZWxlY3QgKyAnaGVpZ2h0OicgKyAodGhpcy5oLTQpICsgJ3B4OyBiYWNrZ3JvdW5kOicgKyBjYy5pbnB1dEJnICsgJzsgYm9yZGVyQ29sb3I6JyArIGNjLmlucHV0Qm9yZGVyKyc7IGJvcmRlci1yYWRpdXM6Jyt0aGlzLnJhZGl1cysncHg7JyApXHJcbiAgICAgICAgdGhpcy5jWzNdLnRleHRDb250ZW50ID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03XHJcbiAgICAgICAgdGhpcy5jWzRdID0gdGhpcy5kb20oICdwYXRoJywgdGhpcy5jc3MuYmFzaWMgKyAncG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjE0cHg7IGhlaWdodDoxNHB4OyBsZWZ0OjVweDsgdG9wOicrZmx0b3ArJ3B4OycsIHsgZDp0aGlzLnN2Z3NbICdsb2FkJyBdLCBmaWxsOmNjLnRleHQsIHN0cm9rZTonbm9uZSd9KVxyXG5cclxuICAgICAgICB0aGlzLnN0YXQgPSAxXHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRlc3Rab25lICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgICAgIGlmKCBsLnggPT09IC0xICYmIGwueSA9PT0gLTEgKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYoIGwueCA+IHRoaXMuc2EgJiYgbC54IDwgdGhpcy5zYSszMCApIHJldHVybiAnb3Zlcic7XHJcbiAgICAgICAgcmV0dXJuICcwJ1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIEVWRU5UU1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG1vdXNldXAgKCBlICkge1xyXG4gICAgXHJcbiAgICAgICAgaWYoIHRoaXMuaXNEb3duICl7XHJcbiAgICAgICAgICAgIC8vdGhpcy52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCAhbmFtZSApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYoIG5hbWUgPT09ICdvdmVyJyApe1xyXG4gICAgICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICAgICAgRmlsZXMubG9hZCggeyBjYWxsYmFjazp0aGlzLmNoYW5nZUJpdG1hcC5iaW5kKHRoaXMpIH0gKVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVzWyBuYW1lLTIgXTtcclxuICAgICAgICAvL3RoaXMuc2VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLnRlc3Rab25lKCBlICk7XHJcblxyXG4gICAgICAgIGlmKCBuYW1lID09PSAnb3ZlcicgKXtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGUoIHRoaXMuaXNEb3duID8gMyA6IDIgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgY2hhbmdlQml0bWFwKCBpbWcsIGZuYW1lICl7XHJcblxyXG4gICAgICAgIGlmKCBpbWcgKXtcclxuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWdcclxuICAgICAgICAgICAgdGhpcy5hcHBseSggZm5hbWUgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5KCAnbnVsbCcgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgYXBwbHkgKCB2ICkge1xyXG5cclxuICAgICAgICB2ID0gdiB8fCAnJztcclxuXHJcbiAgICAgICAgaWYoIHYgIT09IHRoaXMudmFsdWUgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLmNbM10udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYoIHRoaXMuaW1nICE9PSBudWxsICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdGhpcy5vYmplY3RMaW5rICE9PSBudWxsICkgdGhpcy5vYmplY3RMaW5rWyB0aGlzLnZhbCBdID0gdlxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuY2FsbGJhY2sgKSB0aGlzLmNhbGxiYWNrKCB0aGlzLnZhbHVlLCB0aGlzLmltZywgdGhpcy5uYW1lIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tb2RlKDEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUoIDMgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG4gKSB7XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZVxyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzXHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXQgIT09IG4gKXtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdCA9IG5cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0OyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uOyBicmVhazsgLy8gYmFzZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiB0aGlzLnNbIDIgXS5jb2xvciA9IGNjLnRleHRPdmVyOyB0aGlzLnNbIDIgXS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7IC8vIG92ZXJcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zWyAyIF0uY29sb3IgPSBjYy50ZXh0T3ZlcjsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrOyAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHRoaXMuc1sgMiBdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgdGhpcy5zWyAyIF0uYmFja2dyb3VuZCA9IGNjLnNlbGVjdDsgYnJlYWs7IC8vIGFjdGlmXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2U7XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLmN1cnNvcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUoIHRoaXMuaXNBY3RpZiA/IDQgOiAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRleHQgKCB0eHQgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY1szXS50ZXh0Q29udGVudCA9IHR4dDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgclNpemUgKCkge1xyXG5cclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucztcclxuICAgICAgICBzWzJdLmxlZnQgPSB0aGlzLnNhICsgJ3B4JztcclxuICAgICAgICBzWzNdLmxlZnQgPSAodGhpcy5zYSArIDQwKSArICdweCc7XHJcbiAgICAgICAgc1szXS53aWR0aCA9ICh0aGlzLnNiIC0gNDApICsgJ3B4JztcclxuICAgICAgICBzWzRdLmxlZnQgPSAodGhpcy5zYSs4KSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxufSIsIi8vaW1wb3J0IHsgUHJvdG8gfSBmcm9tICcuLi9jb3JlL1Byb3RvLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQnV0dG9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggbyA9IHt9ICkge1xyXG5cclxuICAgICAgICBpZiggby5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgKSBvLnNlbGVjdGFibGUgPSB0cnVlXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5wID0gMTAwO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnR4dDtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuaXR5cGUgPSBvLml0eXBlIHx8ICdub25lJztcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMuaXR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLnN2Z3NbIHRoaXMuaXR5cGUgXTtcclxuXHJcbiAgICAgICAgbGV0IGZsdG9wID0gTWF0aC5mbG9vcih0aGlzLmgqMC41KS03O1xyXG5cclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ3BhdGgnLCB0aGlzLmNzcy5iYXNpYyArICdwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGxlZnQ6NXB4OyB0b3A6JytmbHRvcCsncHg7JywgeyBkOnRoaXMuZ3JhcGgsIGZpbGw6dGhpcy5jb2xvcnMudGV4dCwgc3Ryb2tlOidub25lJ30pO1xyXG5cclxuICAgICAgICB0aGlzLnNbMV0ubWFyZ2luTGVmdCA9IDIwICsgJ3B4JztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vICAgRVZFTlRTXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgLy91cCA9IHRoaXMubW9kZXMoIHRoaXMuaXNEb3duID8gMyA6IDIsIG5hbWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vkb3duICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNVSSApIHRoaXMubWFpbi5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCggdHJ1ZSApO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3V0ICgpIHtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuaXNTZWxlY3QgKSB0aGlzLm1vZGUoMyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLm1vZGUoMSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVpb3ZlciAoKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5tb2RlKDIpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCkge1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKnJTaXplICgpIHtcclxuICAgICAgICBcclxuICAgICAgICBzdXBlci5yU2l6ZSgpO1xyXG5cclxuICAgIH0qL1xyXG5cclxuICAgIG1vZGUgKCBuICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLnN0YXR1cyAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBuO1xyXG4gICAgICAgICAgICBsZXQgcyA9IHRoaXMucywgY2MgPSB0aGlzLmNvbG9yc1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBzd2l0Y2goIG4gKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMuc3RhdHVzID0gMTsgc1sxXS5jb2xvciA9IGNjLnRleHQ7IHNbMF0uYmFja2dyb3VuZCA9ICdub25lJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMuc3RhdHVzID0gMjsgc1sxXS5jb2xvciA9IGNjLnRleHRPdmVyOyBzWzBdLmJhY2tncm91bmQgPSBjYy5iYWNrOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzogdGhpcy5zdGF0dXMgPSAzOyBzWzFdLmNvbG9yID0gY2MudGV4dFNlbGVjdDsgc1swXS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0OyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogdGhpcy5zdGF0dXMgPSA0OyBzWzFdLmNvbG9yID0gY2MudGV4dE92ZXI7IHNbMF0uYmFja2dyb3VuZCA9IGNjLm92ZXI7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXNldCAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3Vyc29yKCk7XHJcbiAgICAgICAvLyByZXR1cm4gdGhpcy5tb2RlKCAxICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkICggYiApe1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc1NlbGVjdCApIHRoaXMubW9kZSgxKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdCA9IGIgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmlzU2VsZWN0ICkgdGhpcy5tb2RlKDMpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWQgZXh0ZW5kcyBQcm90byB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIG8gPSB7fSApIHtcclxuXHJcbiAgICAgICAgc3VwZXIoIG8gKTtcclxuXHJcbiAgICAgICAgLyp0aGlzLnZhbHVlcyA9IG8udmFsdWVzIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiggdHlwZW9mIHRoaXMudmFsdWVzID09PSAnc3RyaW5nJyApIHRoaXMudmFsdWVzID0gWyB0aGlzLnZhbHVlcyBdOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcblxyXG4gICAgICAgIGlmKCBvLnZhbHVlcyApe1xyXG4gICAgICAgICAgICBpZiggby52YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYoIG8udmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nICl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsgby52YWx1ZXMgXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKCBvLnZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZPYmplY3QgPSBvLnZhbHVlc1xyXG4gICAgICAgICAgICAgICAgZm9yKCBsZXQgZyBpbiB0aGlzLnJlZk9iamVjdCApIHRoaXMudmFsdWVzLnB1c2goIGcgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxuZyA9IHRoaXMudmFsdWVzLmxlbmd0aDtcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gby52YWx1ZSB8fCBudWxsO1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGFibGUgPSBvLnNlbGVjdGFibGUgfHwgZmFsc2VcclxuICAgICAgICB0aGlzLnNwYWNlcyA9IG8uc3BhY2VzIHx8IFsgY2Muc3gsIGNjLnN5IF1cclxuICAgICAgICB0aGlzLmJzaXplID0gby5ic2l6ZSB8fCBbIDkwLCB0aGlzLmggXTtcclxuXHJcbiAgICAgICAgdGhpcy5ic2l6ZU1heCA9IHRoaXMuYnNpemVbMF1cclxuXHJcbiAgICAgICAgdGhpcy50bXAgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXQgPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQgPSBbIDIsIE1hdGgucm91bmQoIHRoaXMubG5nICogMC41ICkgXTtcclxuXHJcbiAgICAgICAgdGhpcy5oID0gKCB0aGlzLmdyaWRbMV0gKiB0aGlzLmJzaXplWzFdICkgKyAoIHRoaXMuZ3JpZFsxXSAqIHRoaXMuc3BhY2VzWzFdICkgLy8rIDQgLSAodGhpcy5tdG9wKjIpIC8vKyAodGhpcy5zcGFjZXNbMV0gLSB0aGlzLm10b3ApO1xyXG5cclxuICAgICAgICB0aGlzLmNbMV0udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAvL3RoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyB0b3A6JysodGhpcy5zcGFjZXNbMV0tMikrJ3B4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXNwYWNpbmc6ICcrKHRoaXMuc3BhY2VzWzBdLTIpKydweCAnKyh0aGlzLnNwYWNlc1sxXS0yKSsncHg7JyApO1xyXG4gICAgICAgIHRoaXMuY1syXSA9IHRoaXMuZG9tKCAndGFibGUnLCB0aGlzLmNzcy5iYXNpYyArICd3aWR0aDoxMDAlOyBib3JkZXItc3BhY2luZzogJysodGhpcy5zcGFjZXNbMF0tMikrJ3B4ICcrKHRoaXMuc3BhY2VzWzFdKSsncHg7IGJvcmRlcjpub25lOycgKTtcclxuXHJcbiAgICAgICAgbGV0IG4gPSAwLCBiLCBtaWQsIHRkLCB0ciwgc2VsO1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMubmV2ZXJsb2NrID0gdHJ1ZVxyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTsgXHJcbiAgICAgICAgdGhpcy5zdGF0ID0gW107XHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdGhpcy5ncmlkWzFdOyBpKysgKXtcclxuXHJcbiAgICAgICAgICAgIHRyID0gdGhpcy5jWzJdLmluc2VydFJvdygpO1xyXG4gICAgICAgICAgICB0ci5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOm5vbmU7JztcclxuICAgICAgICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCB0aGlzLmdyaWRbMF07IGorKyApe1xyXG5cclxuICAgICAgICAgICAgICAgIHRkID0gdHIuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czpub25lOyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMudmFsdWVzW25dICl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0aGlzLnZhbHVlc1tuXSA9PT0gdGhpcy52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0YWJsZSApIHNlbCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArIHRoaXMuY3NzLmJ1dHRvbiArICdwb3NpdGlvbjpzdGF0aWM7IHRvcDoxcHg7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonKyh0aGlzLmJzaXplWzFdLTIpKydweDsgYm9yZGVyOicrY2MuYm9yZGVyU2l6ZSsncHggc29saWQgJytjYy5ib3JkZXIrJzsgbGVmdDphdXRvOyByaWdodDphdXRvOyBib3JkZXItcmFkaXVzOicrdGhpcy5yYWRpdXMrJ3B4Oyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYi5zdHlsZS5iYWNrZ3JvdW5kID0gc2VsID8gY2Muc2VsZWN0IDogY2MuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY29sb3IgPSBzZWwgPyBjYy50ZXh0U2VsZWN0IDogY2MudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9IHRoaXMudmFsdWVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5wdXNoKGIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0LnB1c2goMSlcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKVxyXG4gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzLnR4dCArICdwb3NpdGlvbjpzdGF0aWM7IHdpZHRoOicrdGhpcy5ic2l6ZVswXSsncHg7IGhlaWdodDonK3RoaXMuYnNpemVbMV0rJ3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDphdXRvOyByaWdodDphdXRvOyBiYWNrZ3JvdW5kOm5vbmU7J1xyXG4gICAgICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKCBiIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoaj09PTApIGIuc3R5bGUuY3NzVGV4dCArPSAnZmxvYXQ6cmlnaHQ7JztcclxuICAgICAgICAgICAgICAgIGVsc2UgYi5zdHlsZS5jc3NUZXh0ICs9ICdmbG9hdDpsZWZ0Oyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zWzBdLmJvcmRlciA9ICdub25lJ1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgbCA9IHRoaXMubG9jYWw7XHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAtMTtcclxuXHJcbiAgICAgICAgbC55ICs9IHRoaXMubXRvcFxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0eCA9IHRoaXMudG1wWDtcclxuICAgICAgICBsZXQgdHkgPSB0aGlzLnRtcFk7XHJcblxyXG4gICAgICAgIGxldCBpZCA9IC0xO1xyXG4gICAgICAgIGxldCBjID0gLTE7XHJcbiAgICAgICAgbGV0IGxpbmUgPSAtMTtcclxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZFswXTtcclxuICAgICAgICB3aGlsZSggaS0tICl7XHJcbiAgICAgICAgXHRpZiggbC54ID4gdHhbaV1bMF0gJiYgbC54IDwgdHhbaV1bMV0gKSBjID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSB0aGlzLmdyaWRbMV07XHJcbiAgICAgICAgd2hpbGUoIGktLSApe1xyXG4gICAgICAgICAgICBpZiggbC55ID4gdHlbaV1bMF0gJiYgbC55IDwgdHlbaV1bMV0gKSBsaW5lID0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGMhPT0tMSAmJiBsaW5lIT09LTEpe1xyXG4gICAgICAgICAgICBpZCA9IGMgKyAobGluZSoyKTtcclxuICAgICAgICAgICAgaWYoaWQ+dGhpcy5sbmctMSkgaWQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gICBFVkVOVFNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlXHJcbiAgICAgICAgaWYoIHRoaXMucmVzICE9PSAtMSApe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNbdGhpcy5yZXNdXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiggdGhpcy5pc0Rvd24gKSByZXR1cm4gZmFsc2VcclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWVcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZW1vdmUoIGUgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZW1vdmUgKCBlICkge1xyXG5cclxuICAgICAgICBsZXQgdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcyA9IHRoaXMudGVzdFpvbmUoIGUgKVxyXG5cclxuICAgICAgICBpZiggdGhpcy5yZXMgIT09IC0xICl7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yKCdwb2ludGVyJylcclxuICAgICAgICAgICAgdXAgPSB0aGlzLm1vZGVzKCB0aGlzLmlzRG93biA/IDMgOiAyLCB0aGlzLnJlcyApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHVwID0gdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIE1PREVcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbW9kZXMgKCBOID0gMSwgaWQgPSAtMSApIHtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmxuZywgdywgbiwgciA9IGZhbHNlXHJcblxyXG4gICAgICAgIHdoaWxlKCBpLS0gKXtcclxuXHJcbiAgICAgICAgICAgIG4gPSBOXHJcbiAgICAgICAgICAgIHcgPSB0aGlzLmlzU2VsZWN0YWJsZSA/IHRoaXMudmFsdWVzWyBpIF0gPT09IHRoaXMudmFsdWUgOiBmYWxzZVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGkgPT09IGlkICl7XHJcbiAgICAgICAgICAgICAgICBpZiggdyAmJiBuID09PSAyICkgbiA9IDMgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuID0gMVxyXG4gICAgICAgICAgICAgICAgaWYoIHcgKSBuID0gNFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiggdGhpcy5tb2RlKCBuLCBpICkgKSByID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByXHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1vZGUgKCBuLCBpZCApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjYyA9IHRoaXMuY29sb3JzLCBzID0gdGhpcy5idXR0b25zXHJcbiAgICAgICAgbGV0IGkgPSBpZFxyXG5cclxuICAgICAgICBpZiggdGhpcy5zdGF0W2lkXSAhPT0gbiApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0W2lkXSA9IG47XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHN3aXRjaCggbiApe1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgMTogc1tpXS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7IHNbaV0uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJ1dHRvbjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3Zlcm9mZjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3Zlcjsgc1tpXS5zdHlsZS5iYWNrZ3JvdW5kID0gY2Mub3ZlcjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHNbaV0uc3R5bGUuY29sb3IgPSBjYy50ZXh0U2VsZWN0OyBzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7IGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhbmdlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcmVzZXQgKCkge1xyXG5cclxuICAgICAgICB0aGlzLnJlcyA9IC0xXHJcbiAgICAgICAgdGhpcy5jdXJzb3IoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVzKClcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxhYmVsICggc3RyaW5nLCBuICkge1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbnNbbl0udGV4dENvbnRlbnQgPSBzdHJpbmc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGljb24gKCBzdHJpbmcsIHksIG4gKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uc1tuXS5zdHlsZS5wYWRkaW5nID0gKCB5IHx8IDAgKSArJ3B4IDBweCc7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW25dLmlubmVySFRNTCA9IHN0cmluZztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFcgKCkge1xyXG5cclxuICAgICAgICBsZXQgdncgPSB0aGlzLnNwYWNlc1swXSozICsgdGhpcy5ic2l6ZU1heCoyLCByeiA9IGZhbHNlO1xyXG4gICAgICAgIGlmKCB2dyA+IHRoaXMudyApIHtcclxuICAgICAgICAgICAgdGhpcy5ic2l6ZVswXSA9ICggdGhpcy53LSh0aGlzLnNwYWNlc1swXSozKSApICogMC41O1xyXG4gICAgICAgICAgICByeiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYoIHRoaXMuYnNpemVbMF0gIT09IHRoaXMuYnNpemVNYXggKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJzaXplWzBdID0gdGhpcy5ic2l6ZU1heDtcclxuICAgICAgICAgICAgICAgIHJ6ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoICFyeiApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmJ1dHRvbnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlKGktLSkgdGhpcy5idXR0b25zW2ldLnN0eWxlLndpZHRoID0gdGhpcy5ic2l6ZVswXSArICdweCc7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJTaXplICgpIHtcclxuXHJcbiAgICAgICAgc3VwZXIuclNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0VygpO1xyXG5cclxuICAgICAgICBsZXQgbiA9IDAsIGIsIG1pZDtcclxuXHJcbiAgICAgICAgdGhpcy50bXBYID0gW107XHJcbiAgICAgICAgdGhpcy50bXBZID0gW107XHJcblxyXG4gICAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgdGhpcy5ncmlkWzBdOyBqKysgKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGo9PT0wKXtcclxuICAgICAgICAgICAgICAgIG1pZCA9ICggdGhpcy53KjAuNSApIC0gKCB0aGlzLnNwYWNlc1swXSowLjUgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG1wWC5wdXNoKCBbIG1pZC10aGlzLmJzaXplWzBdLCBtaWQgXSApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWlkID0gKCB0aGlzLncqMC41ICkgKyAoIHRoaXMuc3BhY2VzWzBdKjAuNSApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50bXBYLnB1c2goIFsgbWlkLCBtaWQrdGhpcy5ic2l6ZVswXSBdICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaWQgPSB0aGlzLnNwYWNlc1sxXTtcclxuXHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRbMV07IGkrKyApe1xyXG5cclxuICAgICAgICAgICAgdGhpcy50bXBZLnB1c2goIFsgbWlkLCBtaWQgKyB0aGlzLmJzaXplWzFdIF0gKTtcclxuICAgICAgICAgICAgbWlkICs9IHRoaXMuYnNpemVbMV0gKyB0aGlzLnNwYWNlc1sxXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBQcm90byB9IGZyb20gJy4uL2NvcmUvUHJvdG8uanMnO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gJy4uL2NvcmUvVG9vbHMuanMnO1xyXG5pbXBvcnQgeyBWMiB9IGZyb20gJy4uL2NvcmUvVjIuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZDJEIGV4dGVuZHMgUHJvdG8ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBvID0ge30gKSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCBvICk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b1dpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5taW53ICA9IHRoaXMud1xyXG4gICAgICAgIHRoaXMuZGlhbSA9IG8uZGlhbSB8fCB0aGlzLncgXHJcblxyXG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSAxNTtcclxuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWMigwLDApO1xyXG4gICAgICAgIHRoaXMubWF4UG9zID0gOTBcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG8uc3R5cGUgfHwgMDtcclxuICAgICAgICBpZiggby5tb2RlICE9PSB1bmRlZmluZWQgKSB0aGlzLm1vZGVsID0gby5tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLm1pbiA9IG8ubWluID09PSB1bmRlZmluZWQgPyAtMSA6IG8ubWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gby5tYXggPT09IHVuZGVmaW5lZCA/IDEgOiBvLm1heDtcclxuXHJcbiAgICAgICAgdGhpcy5yYW5nZSA9ICh0aGlzLm1heCAtIHRoaXMubWluKSowLjU7ICBcclxuXHJcbiAgICAgICAgdGhpcy5jbW9kZSA9IDA7XHJcblxyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmFuZ2UpXHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xyXG5cclxuICAgICAgICBcclxuXHJcblxyXG5cclxuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IG8ucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAyIDogby5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIC8qdGhpcy5ib3VuZHMgPSB7fTtcclxuICAgICAgICB0aGlzLmJvdW5kcy54MSA9IG8ueDEgfHwgLTE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueDIgPSBvLngyIHx8IDE7XHJcbiAgICAgICAgdGhpcy5ib3VuZHMueTEgPSBvLnkxIHx8IC0xO1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnkyID0gby55MiB8fCAxO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnBYID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy54MSwgdGhpcy5ib3VuZHMueDIgKTtcclxuICAgICAgICB0aGlzLmxlcnBZID0gdGhpcy5sZXJwKCB0aGlzLm1hcmdpbiwgdGhpcy53IC0gdGhpcy5tYXJnaW4gLCB0aGlzLmJvdW5kcy55MSwgdGhpcy5ib3VuZHMueTIgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVycFggPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLngxLCB0aGlzLmJvdW5kcy54MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7XHJcbiAgICAgICAgdGhpcy5hbGVycFkgPSB0aGlzLmxlcnAoIHRoaXMuYm91bmRzLnkxLCB0aGlzLmJvdW5kcy55MiwgdGhpcy5tYXJnaW4sIHRoaXMudyAtIHRoaXMubWFyZ2luICk7Ki9cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICggQXJyYXkuaXNBcnJheSggby52YWx1ZSApICYmIG8udmFsdWUubGVuZ3RoID09IDIgKSA/IG8udmFsdWUgOiBbIDAsIDAgXTtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmggPSBvLmggfHwgdGhpcy53ICsgMTA7XHJcblxyXG4gICAgICAgIHRoaXMuY1swXS5zdHlsZS53aWR0aCA9IHRoaXMudyArICdweCc7XHJcblxyXG4gICAgICAgIC8vIFRpdGxlXHJcbiAgICAgICAgaWYoIHRoaXMuY1sxXSAhPT0gdW5kZWZpbmVkICkgeyAvLyB3aXRoIHRpdGxlXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNbMV0uc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMuY1sxXS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB0aGlzLnRvcCA9IDEwO1xyXG4gICAgICAgICAgICB0aGlzLmggKz0gMTA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy90aGlzLnRvcCAtPSB0aGlzLm1hcmdpblxyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuXHJcbiAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICB0aGlzLmNbMl0gPSB0aGlzLmRvbSggJ2RpdicsIHRoaXMuY3NzLnR4dCArICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB0b3A6JysgKCB0aGlzLmggLSAyMCApICsgJ3B4OyB3aWR0aDoxMDAlOyBjb2xvcjonICsgY2MudGV4dCApO1xyXG4gICAgICAgIHRoaXMuY1syXS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFBhZFxyXG5cclxuICAgICAgICBsZXQgcGFkID0gdGhpcy5nZXRQYWQyZCgpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdmaWxsJywgY2MuYmFjaywgMCApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ2ZpbGwnLCBjYy5idXR0b24sIDEgKVxyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCBwYWQsICdzdHJva2UnLCBjYy5iYWNrLCAyIClcclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAnc3Ryb2tlJywgY2MuYmFjaywgMyApXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHBhZCwgJ3N0cm9rZScsIGNjLnRleHQsIDQgKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN2ZyggcGFkLCAndmlld0JveCcsICcwIDAgJyt0aGlzLmRpYW0rJyAnK3RoaXMuZGlhbSApXHJcbiAgICAgICAgdGhpcy5zZXRDc3MoIHBhZCwgeyB3aWR0aDp0aGlzLmRpYW0sIGhlaWdodDp0aGlzLmRpYW0sIGxlZnQ6MCwgdG9wOnRoaXMudG9wIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY1szXSA9IHBhZFxyXG5cclxuICAgICAgICB0aGlzLmluaXQoKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKVxyXG5cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGVzdFpvbmUgKCBlICkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBsID0gdGhpcy5sb2NhbDtcclxuXHJcbiAgICAgICAgaWYoIGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSApIHJldHVybiAnJztcclxuXHJcblxyXG5cclxuICAgICAgICBpZiggbC55IDw9IHRoaXMuY1sgMSBdLm9mZnNldEhlaWdodCApIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGVsc2UgaWYgKCBsLnkgPiB0aGlzLmggLSB0aGlzLmNbIDIgXS5vZmZzZXRIZWlnaHQgKSByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdwYWQnO1xyXG5cclxuICAgICAgICAvKmlmKCAoIGwueCA+PSB0aGlzLm1hcmdpbiApICYmICggbC54IDw9IHRoaXMudyAtIHRoaXMubWFyZ2luICkgJiYgKCBsLnkgPj0gdGhpcy50b3AgKyB0aGlzLm1hcmdpbiApICYmICggbC55IDw9IHRoaXMudG9wICsgdGhpcy53IC0gdGhpcy5tYXJnaW4gKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwYWQnO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vcmV0dXJuICcnO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwICggZSApIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWRvd24gKCBlICkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMudGVzdFpvbmUoZSkgPT09ICdwYWQnICkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Rvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZSggZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW91c2Vtb3ZlICggZSApIHtcclxuXHJcbiAgICAgICAgaWYoICF0aGlzLmlzRG93biApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IHggPSAodGhpcy53KjAuNSkgLSAoIGUuY2xpZW50WCAtIHRoaXMuem9uZS54IClcclxuICAgICAgICBsZXQgeSA9ICh0aGlzLmRpYW0qMC41KSAtICggZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnl0b3AgKVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBsZXQgciA9IDI1NiAvIHRoaXMuZGlhbVxyXG5cclxuICAgICAgICB4ID0gLSh4KnIpXHJcbiAgICAgICAgeSA9IC0oeSpyKVxyXG5cclxuICAgICAgICB4ID0gVG9vbHMuY2xhbXAoIHgsIC10aGlzLm1heFBvcywgdGhpcy5tYXhQb3MgKVxyXG4gICAgICAgIHkgPSBUb29scy5jbGFtcCggeSwgLXRoaXMubWF4UG9zLCB0aGlzLm1heFBvcyApXHJcblxyXG4gICAgICAgIC8vbGV0IHggPSBlLmNsaWVudFggLSB0aGlzLnpvbmUueDtcclxuICAgICAgICAvL2xldCB5ID0gZS5jbGllbnRZIC0gdGhpcy56b25lLnkgLSB0aGlzLnRvcDtcclxuXHJcbiAgICAgICAgLyppZiggeCA8IHRoaXMubWFyZ2luICkgeCA9IHRoaXMubWFyZ2luO1xyXG4gICAgICAgIGlmKCB4ID4gdGhpcy53IC0gdGhpcy5tYXJnaW4gKSB4ID0gdGhpcy53IC0gdGhpcy5tYXJnaW47XHJcbiAgICAgICAgaWYoIHkgPCB0aGlzLm1hcmdpbiApIHkgPSB0aGlzLm1hcmdpbjtcclxuICAgICAgICBpZiggeSA+IHRoaXMudyAtIHRoaXMubWFyZ2luICkgeSA9IHRoaXMudyAtIHRoaXMubWFyZ2luOyovXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coeCx5KVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvcyggWyB4ICwgeSBdICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy51cGRhdGUoIHRydWUgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbW9kZSAoIG1vZGUgKSB7XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmNtb2RlID09PSBtb2RlICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2MgPSB0aGlzLmNvbG9yc1xyXG5cclxuICAgICAgICBzd2l0Y2goIG1vZGUgKXtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBiYXNlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFjaywgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYnV0dG9uLCAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2ssIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MuYmFjaywgMylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy50ZXh0LCA0IClcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOiAvLyBkb3duXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zWzJdLmNvbG9yID0gY2MudGV4dFNlbGVjdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2MuYmFja29mZiwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdmaWxsJywgY2Mub3Zlcm9mZiwgMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdzdHJva2UnLCBjYy5iYWNrb2ZmLCAyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3N0cm9rZScsIGNjLmJhY2tvZmYsIDMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAnc3Ryb2tlJywgY2MudGV4dFNlbGVjdCwgNCApXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNtb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgKCB1cCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggdXAgPT09IHVuZGVmaW5lZCApIHVwID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNbMl0udGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNWRygpO1xyXG5cclxuICAgICAgICBpZiggdXAgKSB0aGlzLnNlbmQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU1ZHKCkge1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMubW9kZWwgPT0gMSApIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICd5MScsIHRoaXMucG9zLnksIDIgKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3kyJywgdGhpcy5wb3MueSwgMiApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ3gxJywgdGhpcy5wb3MueCwgMyApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN2ZyggdGhpcy5jWzNdLCAneDInLCB0aGlzLnBvcy54LCAzICk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdmcoIHRoaXMuY1szXSwgJ2N4JywgdGhpcy5wb3MueCwgNCApO1xyXG4gICAgICAgIHRoaXMuc2V0U3ZnKCB0aGlzLmNbM10sICdjeScsIHRoaXMucG9zLnksIDQgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UG9zICggcCApIHtcclxuXHJcbiAgICAgICAgLy9pZiggcCA9PT0gdW5kZWZpbmVkICkgcCA9IFsgdGhpcy53IC8gMiwgdGhpcy53IC8gMiBdO1xyXG5cclxuICAgICAgICB0aGlzLnBvcy5zZXQoIHBbMF0rMTI4ICwgcFsxXSsxMjggKTtcclxuXHJcbiAgICAgICAgbGV0IHIgPSAxL3RoaXMubWF4UG9zXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSAoKHBbMF0qcikqdGhpcy5yYW5nZSkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKTtcclxuICAgICAgICB0aGlzLnZhbHVlWzFdID0gKChwWzFdKnIpKnRoaXMucmFuZ2UpLnRvRml4ZWQoIHRoaXMucHJlY2lzaW9uICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlICggdiwgdXAgPSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgaWYoIHYgPT09IHVuZGVmaW5lZCApIHYgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAvKmlmICggdlswXSA8IHRoaXMuYm91bmRzLngxICkgdlswXSA9IHRoaXMuYm91bmRzLngxO1xyXG4gICAgICAgIGlmICggdlswXSA+IHRoaXMuYm91bmRzLngyICkgdlswXSA9IHRoaXMuYm91bmRzLngyO1xyXG4gICAgICAgIGlmICggdlsxXSA8IHRoaXMuYm91bmRzLnkxICkgdlsxXSA9IHRoaXMuYm91bmRzLnkxO1xyXG4gICAgICAgIGlmICggdlsxXSA+IHRoaXMuYm91bmRzLnkyICkgdlsxXSA9IHRoaXMuYm91bmRzLnkyOyovXHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVbMF0gPSBNYXRoLm1pbiggdGhpcy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgdlswXSApICkudG9GaXhlZCggdGhpcy5wcmVjaXNpb24gKSAqIDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVsxXSA9IE1hdGgubWluKCB0aGlzLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCB2WzFdICkgKS50b0ZpeGVkKCB0aGlzLnByZWNpc2lvbiApICogMTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3Muc2V0KCAoKHRoaXMudmFsdWVbMF0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCAgLCAoKHRoaXMudmFsdWVbMV0vdGhpcy5yYW5nZSkqdGhpcy5tYXhQb3MpKzEyOCApXHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5wb3MpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCB1cCApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKmxlcnAoIHMxLCBzMiwgZDEsIGQyLCBjID0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgbGV0IHMgPSAoIGQyIC0gZDEgKSAvICggczIgLSBzMSApO1xyXG5cclxuICAgICAgICByZXR1cm4gYyA/ICggdiApID0+IHsgXHJcbiAgICAgICAgICAgIHJldHVybiAoICggdiA8IHMxID8gczEgOiB2ID4gczIgPyBzMiA6IHYgKSAtIHMxICkgKiBzICsgZDFcclxuICAgICAgICB9IDogKCB2ICkgPT4geyBcclxuICAgICAgICAgIHJldHVybiAoIHYgLSBzMSApICogcyArIGQxXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0qL1xyXG5cclxufSIsIi8vIHByb3RvL1RyZWVMaXN0LmpzXHJcbmltcG9ydCB7IFByb3RvIH0gZnJvbSBcIi4uL2NvcmUvUHJvdG8uanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi4vY29yZS9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBSb290cyB9IGZyb20gXCIuLi9jb3JlL1Jvb3RzLmpzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZUxpc3QgZXh0ZW5kcyBQcm90byB7XHJcblx0Y29uc3RydWN0b3IobyA9IHt9KSB7XHJcblx0XHQvLyBBUEkgcMO6YmxpY2EgZXNwZXJhZGE6XHJcblx0XHQvLyBvLnRyZWUgKG9iai9hcnJheSksIG8udmFsdWUgKGFycmF5KVxyXG5cdFx0Ly8gby5mb2N1c2VkIChib29sKSwgby5mb2N1c1BhdGggKGFycmF5KSwgby5mb2N1c0xldmVsIChudW1iZXIpXHJcblx0XHQvLyBvLnRhYkluZGV4LCBvLml0ZW1JbmRleCwgby5vbkNoYW5nZSAoZm4pXHJcblx0XHRvLnNlbGVjdGFibGUgPSB0cnVlO1xyXG5cdFx0by5uYW1lID0gby5uYW1lIHx8IFwiVHJlZUxpc3RcIjtcclxuXHJcblx0XHRzdXBlcihvKTtcclxuXHRcdHRoaXMuZW5hYmxlSG92ZXIgPSBvLmVuYWJsZUhvdmVyICE9PSBmYWxzZTtcclxuXHJcblx0XHQvLyBEYXRvcyAmIGVzdGFkb1xyXG5cdFx0dGhpcy50cmVlID0gby50cmVlIHx8IHt9O1xyXG5cdFx0dGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkoby52YWx1ZSkgPyBvLnZhbHVlLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNlZCA9ICEhby5mb2N1c2VkO1xyXG5cdFx0dGhpcy5mb2N1c1BhdGggPSBBcnJheS5pc0FycmF5KG8uZm9jdXNQYXRoKSA/IG8uZm9jdXNQYXRoLnNsaWNlKCkgOiBbXTtcclxuXHRcdHRoaXMuZm9jdXNMZXZlbCA9IHR5cGVvZiBvLmZvY3VzTGV2ZWwgPT09IFwibnVtYmVyXCIgPyBvLmZvY3VzTGV2ZWwgOiAtMTtcclxuXHJcblx0XHR0aGlzLnRhYkluZGV4ID0gby50YWJJbmRleCA/PyBudWxsO1xyXG5cdFx0dGhpcy5pdGVtSW5kZXggPSBvLml0ZW1JbmRleCA/PyBudWxsO1xyXG5cclxuXHRcdC8vIENhbGxiYWNrXHJcblx0XHR0aGlzLmNoYW5nZUNiID1cclxuXHRcdFx0dHlwZW9mIG8ub25DaGFuZ2UgPT09IFwiZnVuY3Rpb25cIiA/IG8ub25DaGFuZ2UgOiAoKSA9PiB7fTtcclxuXHJcblx0XHQvLyBMYXlvdXQgaW50ZXJubyAvIHB1YmxpY2FjacOzbiBkZSBhbHR1cmFcclxuXHRcdHRoaXMubGluZUggPSB0aGlzLmg7IC8vIGFsdG8gZGUgVU5BIGZpbGFcclxuXHRcdHRoaXMubGV2ZWxHYXAgPSB0aGlzLmNvbG9ycy5zeSB8fCAyOyAvLyBzZXBhcmFjacOzbiB2ZXJ0aWNhbCBlbnRyZSBuaXZlbGVzXHJcblx0XHR0aGlzLmxlYWZNYXggPSAwOyAvLyBzZSBjYWxjdWxhIGVuIHJTaXplKClcclxuXHJcblx0XHQvLyBNb2RlbG8gdmlzdWFsXHJcblx0XHR0aGlzLmxldmVscyA9IFtdOyAvLyBbe3R5cGU6J21hcCd8J2xpc3QnLCBpdGVtczpbe2tleSxsYWJlbCx6b25lfV0sIHpvbmU6e3gseSx3LGh9fS4uLl1cclxuXHRcdHRoaXMuaXRlbXNEb20gPSBbXTsgLy8gZXNwZWpvIERPTSBwb3Igbml2ZWxcclxuXHRcdHRoaXMuaG92ZXIgPSB7IGxldmVsOiAtMSwgaW5kZXg6IC0xIH07XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogcmVjb3JkYXIgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYSAocGVyc2lzdGVudGUpXHJcblx0XHR0aGlzLmxhc3RMZWFmID0geyBwYXJlbnRQYXRoOiBbXSwga2V5OiBudWxsIH07IC8vIHBhcmVudFBhdGggZXMgbGEgcnV0YSBoYXN0YSBlbCBtYXBhIHBhZHJlXHJcblxyXG5cdFx0Ly8gQ29udGVuZWRvciBpbnRlcm5vIChhYnNvbHV0bylcclxuXHRcdHRoaXMuY1syXSA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcImRpdlwiLFxyXG5cdFx0XHR0aGlzLmNzcy5iYXNpYyArIFwibGVmdDowOyB0b3A6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7XCJcclxuXHRcdCk7XHJcblx0XHR0aGlzLnNbMl0gPSB0aGlzLmNbMl0uc3R5bGU7XHJcblxyXG5cdFx0dGhpcy5pbml0KCk7XHJcblxyXG5cdFx0Ly8gU2kgZWwgdmFsb3IgaW5pY2lhbCB5YSBhcHVudGEgYSB1bmEgaG9qYSB2w6FsaWRhLCByZWNvcmRhciBlc2EgaG9qYVxyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBIZWxwZXJzIGRlIHRpcG8gPT09PT09PVxyXG5cdHN0YXRpYyBpc01hcChub2RlKSB7XHJcblx0XHRyZXR1cm4gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblx0c3RhdGljIGlzTGlzdChub2RlKSB7XHJcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShub2RlKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUmVjb3JyaWRvIGRlIGRhdG9zID09PT09PT1cclxuXHRnZXROb2RlQXRQYXRoKHBhdGgpIHtcclxuXHRcdGxldCBub2RlID0gdGhpcy50cmVlO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIHBhdGhbaV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHsgbm9kZTogbnVsbCwgZGVwdGg6IGkgfTtcclxuXHRcdFx0XHRub2RlID0gbm9kZVtwYXRoW2ldXTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBMbGVnYW1vcyBhIHVuYSBsaXN0YTogeWEgbm8gaGF5IG3DoXMgY2xhdmVzIHbDoWxpZGFzXHJcblx0XHRcdFx0aWYgKGkgPCBwYXRoLmxlbmd0aCkgcmV0dXJuIHsgbm9kZSwgZGVwdGg6IGkgfTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4geyBub2RlOiBudWxsLCBkZXB0aDogaSB9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4geyBub2RlLCBkZXB0aDogcGF0aC5sZW5ndGggfTtcclxuXHR9XHJcblxyXG5cdC8vIEF1dG9jb21wbGV0YXI6IGJhamEgcG9yIHByaW1lcmFzIGNsYXZlcyBkZSBjYWRhIG1hcGEgaGFzdGEgYWxjYW56YXIgdW5hIGxpc3RhXHJcblx0YXV0b0NvbXBsZXRlVG9MZWFmKGJhc2VQYXRoKSB7XHJcblx0XHRsZXQgeyBub2RlIH0gPSB0aGlzLmdldE5vZGVBdFBhdGgoYmFzZVBhdGgpO1xyXG5cdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLnNsaWNlKCk7XHJcblx0XHR3aGlsZSAoVHJlZUxpc3QuaXNNYXAobm9kZSkpIHtcclxuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG5cdFx0XHRpZiAoIWtleXMubGVuZ3RoKSBicmVhaztcclxuXHRcdFx0Y29uc3QgazAgPSBrZXlzWzBdO1xyXG5cdFx0XHRwYXRoLnB1c2goazApO1xyXG5cdFx0XHRub2RlID0gbm9kZVtrMF07XHJcblx0XHR9XHJcblx0XHQvLyBTaSB0ZXJtaW5hIGVuIGxpc3RhLCBOTyBhZ3JlZ2EgdW4gw610ZW0gZmluYWwgZGUgbGEgaG9qYVxyXG5cdFx0cmV0dXJuIHBhdGg7XHJcblx0fVxyXG5cclxuXHQvLyBSdXRhIGFjdGl2YSAoZm9jdXNQYXRoIHNpIGZvY3VzZWQsIHNpbm8gdmFsdWUpXHJcblx0Z2V0QWN0aXZlUGF0aCgpIHtcclxuXHRcdHJldHVybiB0aGlzLmZvY3VzZWQgPyB0aGlzLmZvY3VzUGF0aCA6IHRoaXMudmFsdWU7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IFRhbWHDsW8gZGUgaG9qYSBtw6F4aW1vIChwYXJhIGxheW91dCBlc3RhYmxlKSA9PT09PT09XHJcblx0Y29tcHV0ZUxlYWZNYXgobm9kZSA9IHRoaXMudHJlZSkge1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBub2RlLmxlbmd0aDtcclxuXHRcdGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIDA7XHJcblx0XHRsZXQgbSA9IDA7XHJcblx0XHRmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcclxuXHRcdFx0bSA9IE1hdGgubWF4KG0sIHRoaXMuY29tcHV0ZUxlYWZNYXgobm9kZVtrXSkpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG07XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09IENvbnN0cnVjY2nDs24gZGUgbml2ZWxlcyAobW9kZWxvIGzDs2dpY28pID09PT09PT1cclxuXHRidWlsZExldmVscygpIHtcclxuXHRcdHRoaXMubGV2ZWxzLmxlbmd0aCA9IDA7XHJcblx0XHRjb25zdCBhY3RpdmVQYXRoID0gdGhpcy5nZXRBY3RpdmVQYXRoKCk7XHJcblxyXG5cdFx0bGV0IG5vZGUgPSB0aGlzLnRyZWU7XHJcblx0XHRsZXQgbGV2ZWwgPSAwO1xyXG5cclxuXHRcdHdoaWxlIChub2RlKSB7XHJcblx0XHRcdGlmIChUcmVlTGlzdC5pc01hcChub2RlKSkge1xyXG5cdFx0XHRcdC8vIE5pdmVsIGludGVybWVkaW86IGNsYXZlcyBkZWwgbWFwYSAoaG9yaXpvbnRhbClcclxuXHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcblx0XHRcdFx0aWYgKCFrZXlzLmxlbmd0aCkgYnJlYWs7XHJcblx0XHRcdFx0dGhpcy5sZXZlbHMucHVzaCh7XHJcblx0XHRcdFx0XHR0eXBlOiBcIm1hcFwiLFxyXG5cdFx0XHRcdFx0aXRlbXM6IGtleXMubWFwKChrKSA9PiAoe1xyXG5cdFx0XHRcdFx0XHRrZXk6IGssXHJcblx0XHRcdFx0XHRcdGxhYmVsOiBrLFxyXG5cdFx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAgfSxcclxuXHRcdFx0XHRcdH0pKSxcclxuXHRcdFx0XHRcdHpvbmU6IHsgeDogMCwgeTogMCwgdzogMCwgaDogdGhpcy5saW5lSCB9LFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRjb25zdCBuZXh0S2V5ID0gYWN0aXZlUGF0aFtsZXZlbF07XHJcblx0XHRcdFx0aWYgKCFuZXh0S2V5IHx8ICFub2RlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSBicmVhaztcclxuXHRcdFx0XHRub2RlID0gbm9kZVtuZXh0S2V5XTtcclxuXHRcdFx0fSBlbHNlIGlmIChUcmVlTGlzdC5pc0xpc3Qobm9kZSkpIHtcclxuXHRcdFx0XHQvLyBOaXZlbCBob2phOiBsaXN0YSB2ZXJ0aWNhbFxyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zID0gbm9kZS5tYXAoKGxhYmVsKSA9PiAoe1xyXG5cdFx0XHRcdFx0a2V5OiBsYWJlbCxcclxuXHRcdFx0XHRcdGxhYmVsLFxyXG5cdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgoaXRlbXMubGVuZ3RoLCB0aGlzLmxlYWZNYXgpICogdGhpcy5saW5lSDtcclxuXHRcdFx0XHR0aGlzLmxldmVscy5wdXNoKHtcclxuXHRcdFx0XHRcdHR5cGU6IFwibGlzdFwiLFxyXG5cdFx0XHRcdFx0aXRlbXMsXHJcblx0XHRcdFx0XHR6b25lOiB7IHg6IDAsIHk6IDAsIHc6IDAsIGg6IGhMaXN0IH0sXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV2ZWwrKztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gTGF5b3V0ICh6b25hcyAmIERPTSkgPT09PT09PVxyXG5cdGxheW91dExldmVscygpIHtcclxuXHRcdGNvbnN0IGNvbnRlbnRYID0gKHRoaXMuc2EgfHwgMTAwKSArIDg7IC8vIGNvbHVtbmEgZGUgbGFiZWwgKyBwYWRkaW5nXHJcblx0XHRjb25zdCBwYWRSaWdodCA9IDg7XHJcblx0XHRjb25zdCB3ID0gdGhpcy56b25lLncgLSBjb250ZW50WCAtIHBhZFJpZ2h0O1xyXG5cclxuXHRcdGxldCB5ID0gMDtcclxuXHJcblx0XHQvLyBBanVzdGFyIGl0ZW1zRG9tIGEgY2FudGlkYWQgZGUgbml2ZWxlc1xyXG5cdFx0d2hpbGUgKHRoaXMuaXRlbXNEb20ubGVuZ3RoIDwgdGhpcy5sZXZlbHMubGVuZ3RoKVxyXG5cdFx0XHR0aGlzLml0ZW1zRG9tLnB1c2goW10pO1xyXG5cdFx0Zm9yIChsZXQgTCA9IHRoaXMubGV2ZWxzLmxlbmd0aDsgTCA8IHRoaXMuaXRlbXNEb20ubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiB0aGlzLml0ZW1zRG9tW0xdKVxyXG5cdFx0XHRcdGlmIChlbCAmJiBlbC5wYXJlbnROb2RlKSBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuaXRlbXNEb20ubGVuZ3RoID0gdGhpcy5sZXZlbHMubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGNvbnN0IG4gPSBNYXRoLm1heCgxLCBsdmwuaXRlbXMubGVuZ3RoKTtcclxuXHRcdFx0XHRjb25zdCBjZWxsVyA9IE1hdGguZmxvb3IodyAvIG4pO1xyXG5cdFx0XHRcdGx2bC56b25lID0geyB4OiBjb250ZW50WCwgeSwgdywgaDogdGhpcy5saW5lSCB9O1xyXG5cdFx0XHRcdGxldCB4ID0gY29udGVudFg7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsdmwuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0XHRcdFx0aXQuem9uZSA9IHsgeCwgeSwgdzogY2VsbFcsIGg6IHRoaXMubGluZUggfTtcclxuXHRcdFx0XHRcdGNvbnN0IGRvbSA9IHRoaXMuZW5zdXJlSXRlbURvbShMLCBpKTtcclxuXHRcdFx0XHRcdHRoaXMucGFpbnRJdGVtRG9tKGRvbSwgTCwgaSwgaXQsIFwibWFwXCIpO1xyXG5cdFx0XHRcdFx0eCArPSBjZWxsVztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZWxpbWluYXIgRE9NIHNvYnJhbnRlIHNpIGFudGVzIGhhYsOtYSBtw6FzIGNlbGRhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIGx2bC5pdGVtcy5sZW5ndGgpO1xyXG5cdFx0XHRcdHkgKz0gdGhpcy5saW5lSCArIHRoaXMubGV2ZWxHYXA7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbGlzdGEvaG9qYTogcmVzZXJ2YXIgaCBzZWfDum4gbGVhZk1heFxyXG5cdFx0XHRcdGNvbnN0IG4gPSBsdmwuaXRlbXMubGVuZ3RoO1xyXG5cdFx0XHRcdGNvbnN0IGhMaXN0ID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KSAqIHRoaXMubGluZUg7XHJcblx0XHRcdFx0bHZsLnpvbmUgPSB7IHg6IGNvbnRlbnRYLCB5LCB3LCBoOiBoTGlzdCB9O1xyXG5cclxuXHRcdFx0XHRjb25zdCByb3dzID0gTWF0aC5tYXgobiwgdGhpcy5sZWFmTWF4KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNSZWFsID0gaSA8IG47XHJcblx0XHRcdFx0XHRjb25zdCBpdCA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXVxyXG5cdFx0XHRcdFx0XHQ6IHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTogbnVsbCxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0em9uZTogeyB4OiAwLCB5OiAwLCB3OiAwLCBoOiAwIH0sXHJcblx0XHRcdFx0XHRcdCAgfTtcclxuXHRcdFx0XHRcdGl0LnpvbmUgPSB7XHJcblx0XHRcdFx0XHRcdHg6IGNvbnRlbnRYLFxyXG5cdFx0XHRcdFx0XHR5OiB5ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdHcsXHJcblx0XHRcdFx0XHRcdGg6IHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Y29uc3QgZG9tID0gdGhpcy5lbnN1cmVJdGVtRG9tKEwsIGkpO1xyXG5cdFx0XHRcdFx0dGhpcy5wYWludEl0ZW1Eb20oZG9tLCBMLCBpLCBpdCwgXCJsaXN0XCIsIGlzUmVhbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGVsaW1pbmFyIERPTSBzb2JyYW50ZSBzaSBhbnRlcyBoYWLDrWEgbcOhcyBmaWxhc1xyXG5cdFx0XHRcdHRoaXMuX3BydW5lUm93KEwsIHJvd3MpO1xyXG5cdFx0XHRcdHkgKz0gaExpc3Q7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBBanVzdGVzIGRlIGFsdG8gaW50ZXJubyBkZWwgY29udGVuZWRvciB2aXN1YWxcclxuXHRcdGNvbnN0IHRvdGFsSCA9IHk7XHJcblx0XHR0aGlzLnpvbmUuaCA9IHRvdGFsSCArIHRoaXMubWFyZ2luO1xyXG5cdFx0dGhpcy5zWzBdLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG5cdFx0dGhpcy5zWzJdLmhlaWdodCA9IHRvdGFsSCArIFwicHhcIjtcclxuXHJcblx0XHQvLyBQdWJsaWNhciBhbHRvIHRvdGFsIGFsIEdVSSAoc3VtYXLDoSB1LmgpXHJcblx0XHR0aGlzLl9wdWJsaXNoSGVpZ2h0KCk7XHJcblx0fVxyXG5cclxuXHQvLyBFbGltaW5hIG5vZG9zIERPTSBzb2JyYW50ZXMgZW4gbGEgZmlsYSBMIGEgcGFydGlyIGRlbCDDrW5kaWNlIGtlZXBcclxuXHRfcHJ1bmVSb3coTCwga2VlcCkge1xyXG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5pdGVtc0RvbVtMXTtcclxuXHRcdGlmICghcm93KSByZXR1cm47XHJcblx0XHRmb3IgKGxldCBqID0ga2VlcDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRjb25zdCBlbCA9IHJvd1tqXTtcclxuXHRcdFx0aWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xyXG5cdFx0fVxyXG5cdFx0cm93Lmxlbmd0aCA9IGtlZXA7XHJcblx0fVxyXG5cclxuXHRlbnN1cmVJdGVtRG9tKEwsIGkpIHtcclxuXHRcdGNvbnN0IHJvdyA9IHRoaXMuaXRlbXNEb21bTF07XHJcblx0XHR3aGlsZSAocm93Lmxlbmd0aCA8PSBpKSByb3cucHVzaChudWxsKTtcclxuXHRcdGlmICghcm93W2ldKSB7XHJcblx0XHRcdGNvbnN0IGRpdiA9IHRoaXMuZG9tKFxyXG5cdFx0XHRcdFwiZGl2XCIsXHJcblx0XHRcdFx0VG9vbHMuY3NzLnR4dCArIFwicG9zaXRpb246YWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOm5vbmU7XCJcclxuXHRcdFx0KTtcclxuXHRcdFx0dGhpcy5jWzJdLmFwcGVuZENoaWxkKGRpdik7XHJcblx0XHRcdHJvd1tpXSA9IGRpdjtcclxuXHRcdH1cclxuXHRcdHJldHVybiByb3dbaV07XHJcblx0fVxyXG5cclxuXHRwYWludEl0ZW1Eb20oZGl2LCBMLCBpLCBpdCwga2luZCwgaXNSZWFsID0gdHJ1ZSkge1xyXG5cdFx0Y29uc3QgcyA9IGRpdi5zdHlsZTtcclxuXHRcdGNvbnN0IGNjID0gdGhpcy5jb2xvcnM7XHJcblxyXG5cdFx0Ly8gUG9zaWNpw7NuXHJcblx0XHRzLmxlZnQgPSBpdC56b25lLnggKyBcInB4XCI7XHJcblx0XHRzLnRvcCA9IGl0LnpvbmUueSArIFwicHhcIjtcclxuXHRcdHMud2lkdGggPSBpdC56b25lLncgKyBcInB4XCI7XHJcblx0XHRzLmhlaWdodCA9IGl0LnpvbmUuaCAtIDIgKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gVGV4dG9cclxuXHRcdGRpdi50ZXh0Q29udGVudCA9IGlzUmVhbCA/IGl0LmxhYmVsIDogXCJcIjtcclxuXHJcblx0XHQvLyBFc3RhZG9zXHJcblx0XHRjb25zdCBzZWxlY3RlZCA9XHJcblx0XHRcdGlzUmVhbCAmJiB0aGlzLnZhbHVlW0xdICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZVtMXSA9PT0gaXQua2V5O1xyXG5cdFx0Y29uc3QgaW5Gb2N1c0x2bCA9IHRoaXMuZm9jdXNlZCAmJiB0aGlzLmZvY3VzTGV2ZWwgPT09IEw7XHJcblx0XHRjb25zdCBmb2N1c01hdGNoID0gaXNSZWFsICYmIGluRm9jdXNMdmwgJiYgdGhpcy5mb2N1c1BhdGhbTF0gPT09IGl0LmtleTtcclxuXHRcdGNvbnN0IGlzSG92ZXIgPVxyXG5cdFx0XHR0aGlzLmVuYWJsZUhvdmVyICYmXHJcblx0XHRcdGlzUmVhbCAmJlxyXG5cdFx0XHR0aGlzLmhvdmVyLmxldmVsID09PSBMICYmXHJcblx0XHRcdHRoaXMuaG92ZXIuaW5kZXggPT09IGk7XHJcblxyXG5cdFx0Ly8g8J+UuCBOVUVWTzogwr9lc3RhIGZpbGEgZXMgbGEgw7psdGltYSBob2phIHNlbGVjY2lvbmFkYT9cclxuXHRcdGxldCBpc0xhc3RMZWFmID0gZmFsc2U7XHJcblx0XHRpZiAoaXNSZWFsICYmIGtpbmQgPT09IFwibGlzdFwiICYmIHRoaXMubGFzdExlYWYua2V5ICE9IG51bGwpIHtcclxuXHRcdFx0Ly8gTGEgaG9qYSB2aXNpYmxlIGNvcnJlc3BvbmRlIHNpIGVsIHBhZHJlIGRlIGVzdGEgbGlzdGEgY29pbmNpZGUgY29uIHBhcmVudFBhdGggZ3VhcmRhZG9cclxuXHRcdFx0Ly8gRWwgcGFkcmUgYWN0dWFsIGVzIHRoaXMudmFsdWUuc2xpY2UoMCwgTCkgY3VhbmRvIGxhIGxpc3RhIGVzdMOhIGRlc3BsZWdhZGEgcG9yIHZhbHVlL2ZvY3VzXHJcblx0XHRcdGNvbnN0IHBhcmVudE5vdyA9IHRoaXMuZ2V0QWN0aXZlUGF0aCgpLnNsaWNlKDAsIEwpO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5fcGF0aHNFcXVhbChwYXJlbnROb3csIHRoaXMubGFzdExlYWYucGFyZW50UGF0aCkgJiZcclxuXHRcdFx0XHRpdC5rZXkgPT09IHRoaXMubGFzdExlYWYua2V5XHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGlzTGFzdExlYWYgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRXN0aWxvcyBiYXNlXHJcblx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrO1xyXG5cdFx0cy5jb2xvciA9IGNjLnRleHQ7XHJcblx0XHRzLmJvcmRlciA9IFwiMXB4IHNvbGlkIFwiICsgY2MuYm9yZGVyO1xyXG5cdFx0cy50ZXh0QWxpZ24gPSBraW5kID09PSBcIm1hcFwiID8gXCJjZW50ZXJcIiA6IFwibGVmdFwiO1xyXG5cclxuXHRcdC8vIFByaW9yaWRhZCB2aXN1YWw6XHJcblx0XHQvLyAxKSBzZWxlY2Npb25hZG8gKGF6dWwpXHJcblx0XHQvLyAyKSDDumx0aW1hIGhvamEgKG51ZXZvIGNvbG9yKVxyXG5cdFx0Ly8gMykgZm9jb1xyXG5cdFx0Ly8gNCkgaG92ZXJcclxuXHRcdGlmIChzZWxlY3RlZCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5zZWxlY3Q7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0U2VsZWN0O1xyXG5cdFx0fSBlbHNlIGlmIChpc0xhc3RMZWFmKSB7XHJcblx0XHRcdC8vIGNvbG9yIGRpc3RpbnRpdm8gcGFyYSBcIsO6bHRpbWEgaG9qYVwiIChhbWFyaWxsbyBzdWF2ZSlcclxuXHRcdFx0cy5iYWNrZ3JvdW5kID0gXCJyZ2JhKDI1NSwgMjAwLCAwLCAwLjI1KVwiO1xyXG5cdFx0XHRzLmNvbG9yID0gY2MudGV4dDtcclxuXHRcdH0gZWxzZSBpZiAoZm9jdXNNYXRjaCkge1xyXG5cdFx0XHRzLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kT3ZlcjtcclxuXHRcdFx0cy5jb2xvciA9IGNjLnRleHRPdmVyO1xyXG5cdFx0fSBlbHNlIGlmIChpc0hvdmVyKSB7XHJcblx0XHRcdHMuYmFja2dyb3VuZCA9IGNjLm92ZXJvZmY7XHJcblx0XHRcdHMuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGaWxhcyBkZSBwYWRkaW5nIGludmlzaWJsZXMgZW4gaG9qYVxyXG5cdFx0cy5vcGFjaXR5ID0gaXNSZWFsID8gXCIxXCIgOiBcIjBcIjtcclxuXHR9XHJcblxyXG5cdF9wYXRoc0VxdWFsKGEsIGIpIHtcclxuXHRcdGlmICghYSB8fCAhYiB8fCBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBDaWNsbyBkZSB2aWRhID09PT09PT1cclxuXHRyU2l6ZSgpIHtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMuYnVpbGRMZXZlbHMoKTtcclxuXHRcdHRoaXMubGF5b3V0TGV2ZWxzKCk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGUoKSB7XHJcblx0XHR0aGlzLmJ1aWxkTGV2ZWxzKCk7XHJcblx0XHR0aGlzLmxheW91dExldmVscygpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PSBJbnRlcmFjY2nDs24gPT09PT09PVxyXG5cdF90b0xvY2FsKGUpIHtcclxuXHRcdGNvbnN0IG14ID0gZS5jbGllbnRYIC0gdGhpcy56b25lLng7XHJcblx0XHRjb25zdCBteSA9IGUuY2xpZW50WSAtIHRoaXMuem9uZS55O1xyXG5cdFx0cmV0dXJuIHsgeDogbXgsIHk6IG15IH07XHJcblx0fVxyXG5cclxuXHRfaGl0VGVzdChteCwgbXkpIHtcclxuXHRcdGZvciAobGV0IEwgPSAwOyBMIDwgdGhpcy5sZXZlbHMubGVuZ3RoOyBMKyspIHtcclxuXHRcdFx0Y29uc3QgbHZsID0gdGhpcy5sZXZlbHNbTF07XHJcblx0XHRcdGNvbnN0IHogPSBsdmwuem9uZTsgLy8geCB5IHcgeWEgaW5jbHV5ZW4gY29udGVudFhcclxuXHJcblx0XHRcdGlmIChteCA8IHoueCB8fCBteSA8IHoueSB8fCBteCA+IHoueCArIHoudyB8fCBteSA+IHoueSArIHouaClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChsdmwudHlwZSA9PT0gXCJtYXBcIikge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbHZsLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdHogPSBsdmwuaXRlbXNbaV0uem9uZTtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0bXggPj0gaXR6LnggJiZcclxuXHRcdFx0XHRcdFx0bXkgPj0gaXR6LnkgJiZcclxuXHRcdFx0XHRcdFx0bXggPD0gaXR6LnggKyBpdHoudyAmJlxyXG5cdFx0XHRcdFx0XHRteSA8PSBpdHoueSArIGl0ei5oXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHsgTCwgaSwgcmVhbDogdHJ1ZSB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb25zdCBuUm93cyA9IE1hdGgubWF4KGx2bC5pdGVtcy5sZW5ndGgsIHRoaXMubGVhZk1heCk7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpc1JlYWwgPSBpIDwgbHZsLml0ZW1zLmxlbmd0aDtcclxuXHRcdFx0XHRcdGNvbnN0IGl0eiA9IGlzUmVhbFxyXG5cdFx0XHRcdFx0XHQ/IGx2bC5pdGVtc1tpXS56b25lXHJcblx0XHRcdFx0XHRcdDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0eDogei54LFxyXG5cdFx0XHRcdFx0XHRcdFx0eTogei55ICsgaSAqIHRoaXMubGluZUgsXHJcblx0XHRcdFx0XHRcdFx0XHR3OiB6LncsXHJcblx0XHRcdFx0XHRcdFx0XHRoOiB0aGlzLmxpbmVILFxyXG5cdFx0XHRcdFx0XHQgIH07XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdG14ID49IGl0ei54ICYmXHJcblx0XHRcdFx0XHRcdG15ID49IGl0ei55ICYmXHJcblx0XHRcdFx0XHRcdG14IDw9IGl0ei54ICsgaXR6LncgJiZcclxuXHRcdFx0XHRcdFx0bXkgPD0gaXR6LnkgKyBpdHouaFxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IEwsIGksIHJlYWw6IGlzUmVhbCB9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgTDogLTEsIGk6IC0xLCByZWFsOiBmYWxzZSB9O1xyXG5cdH1cclxuXHJcblx0aGFuZGxlRXZlbnQoZSkge1xyXG5cdFx0aWYgKHRoaXMubG9jaykgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcclxuXHRcdFx0Ly8gU2kgZWwgaG92ZXIgZXN0w6EgZGVzYWN0aXZhZG8sIG5vIGhheSB0cmFiYWpvIHF1ZSBoYWNlci5cclxuXHRcdFx0aWYgKCF0aGlzLmVuYWJsZUhvdmVyKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHJcblx0XHRcdC8vIG51ZXZvIGhvdmVyIGNhbGN1bGFkb1xyXG5cdFx0XHRjb25zdCBuZXdIb3ZlciA9XHJcblx0XHRcdFx0aHQuTCAhPT0gLTEgJiYgaHQucmVhbFxyXG5cdFx0XHRcdFx0PyB7IGxldmVsOiBodC5MLCBpbmRleDogaHQuaSB9XHJcblx0XHRcdFx0XHQ6IHsgbGV2ZWw6IC0xLCBpbmRleDogLTEgfTtcclxuXHRcdFx0Ly8gc29sbyByZXBpbnRhciBzaSBjYW1iaWEgcmVhbG1lbnRlIGVsIGhvdmVyXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRuZXdIb3Zlci5sZXZlbCA9PT0gdGhpcy5ob3Zlci5sZXZlbCAmJlxyXG5cdFx0XHRcdG5ld0hvdmVyLmluZGV4ID09PSB0aGlzLmhvdmVyLmluZGV4XHJcblx0XHRcdClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdHRoaXMuaG92ZXIgPSBuZXdIb3ZlcjtcclxuXHRcdFx0dGhpcy51cGRhdGUoKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGUudHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IHRoaXMuX3RvTG9jYWwoZSk7XHJcblx0XHRcdGNvbnN0IGh0ID0gdGhpcy5faGl0VGVzdCh4LCB5KTtcclxuXHRcdFx0aWYgKGh0LkwgIT09IC0xICYmIGh0LnJlYWwpIHtcclxuXHRcdFx0XHR0aGlzLl9zZWxlY3RBdChodC5MLCBodC5pKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLy8gc29sbyB0cnVlIHNpIHJlYWxtZW50ZSBzZSBzZWxlY2Npb27DsyBhbGdvXHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlLnR5cGUgPT09IFwibW91c2V1cFwiKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBTZWxlY2Npw7NuICsgYXV0b2NvbXBsZXRhZG8gKyBub3RpZmljYWNpw7NuXHJcblx0X3NlbGVjdEF0KEwsIGkpIHtcclxuXHRcdGNvbnN0IGx2bCA9IHRoaXMubGV2ZWxzW0xdO1xyXG5cdFx0Y29uc3QgY2hvc2VuID0gbHZsLml0ZW1zW2ldO1xyXG5cdFx0aWYgKCFjaG9zZW4gfHwgIWNob3Nlbi5rZXkpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBiYXNlID0gdGhpcy52YWx1ZS5zbGljZSgwLCBMKTtcclxuXHRcdGJhc2VbTF0gPSBjaG9zZW4ua2V5O1xyXG5cclxuXHRcdGNvbnN0IG5ld1BhdGggPSB0aGlzLmF1dG9Db21wbGV0ZVRvTGVhZihiYXNlKTtcclxuXHJcblx0XHQvLyDwn5S4IFNpIGVsIHVzdWFyaW8gc2VsZWNjaW9uYSBleHBsw61jaXRhbWVudGUgZW4gZWwgbml2ZWwgaG9qYSwgcmVjb3JkYXJsb1xyXG5cdFx0aWYgKGx2bC50eXBlID09PSBcImxpc3RcIikge1xyXG5cdFx0XHR0aGlzLmxhc3RMZWFmLnBhcmVudFBhdGggPSB0aGlzLnZhbHVlLnNsaWNlKDAsIEwpOyAvLyBwYWRyZSBkZSBsYSBsaXN0YSBhY3R1YWxcclxuXHRcdFx0dGhpcy5sYXN0TGVhZi5rZXkgPSBjaG9zZW4ua2V5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMudmFsdWUgPSBuZXdQYXRoLnNsaWNlKCk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cclxuXHRcdC8vIHNpIGVzdMOhIHJlZmVyZW5jaWFkbywgcHJvcGFnYSBhIG9iamV0byBleHRlcm5vXHJcblx0XHR0aGlzLnNlbmQobmV3UGF0aCk7XHJcblx0XHR0aGlzLmNoYW5nZUNiKHRoaXMudGFiSW5kZXgsIHRoaXMuaXRlbUluZGV4LCBuZXdQYXRoKTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gQVBJIHDDumJsaWNhID09PT09PT1cclxuXHRzZXRWYWx1ZShwYXRoKSB7XHJcblx0XHR0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguc2xpY2UoKSA6IFtdO1xyXG5cdFx0Ly8gU2kgZGVzZGUgYWZ1ZXJhIG5vcyBzZXRlYW4gdW5hIGhvamEgdsOhbGlkYSwgdGFtYmnDqW4gbGEgcmVjb3JkYW1vc1xyXG5cdFx0dGhpcy5fbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdHNldFRyZWUodHJlZSkge1xyXG5cdFx0dGhpcy50cmVlID0gdHJlZSB8fCB7fTtcclxuXHRcdHRoaXMubGVhZk1heCA9IHRoaXMuY29tcHV0ZUxlYWZNYXgodGhpcy50cmVlKTtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRzZXRGb2N1cyh7IGZvY3VzZWQsIGZvY3VzUGF0aCwgZm9jdXNMZXZlbCB9KSB7XHJcblx0XHRpZiAodHlwZW9mIGZvY3VzZWQgPT09IFwiYm9vbGVhblwiKSB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZm9jdXNQYXRoKSkgdGhpcy5mb2N1c1BhdGggPSBmb2N1c1BhdGguc2xpY2UoKTtcclxuXHRcdGlmICh0eXBlb2YgZm9jdXNMZXZlbCA9PT0gXCJudW1iZXJcIikgdGhpcy5mb2N1c0xldmVsID0gZm9jdXNMZXZlbDtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHRfbWF5YmVVcGRhdGVMYXN0TGVhZkZyb21WYWx1ZSgpIHtcclxuXHRcdC8vIFNpIHZhbHVlIGFwdW50YSBhIHBhZHJlK2hvamEgKOKApixbbGVhZl0pIHkgZXMgdsOhbGlkYSwgcmVjb3JkYXIgZXNhIGhvamFcclxuXHRcdGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLnZhbHVlLmxlbmd0aCAtIDEpO1xyXG5cdFx0Y29uc3QgbGVhZiA9IHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdGNvbnN0IGluZm8gPSB0aGlzLmdldE5vZGVBdFBhdGgocGFyZW50KTtcclxuXHRcdGlmIChpbmZvICYmIEFycmF5LmlzQXJyYXkoaW5mby5ub2RlKSAmJiBpbmZvLm5vZGUuaW5jbHVkZXMobGVhZikpIHtcclxuXHRcdFx0dGhpcy5sYXN0TGVhZiA9IHsgcGFyZW50UGF0aDogcGFyZW50LCBrZXk6IGxlYWYgfTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT0gUHVibGljYWNpw7NuIGRlIGFsdHVyYSA9PT09PT09XHJcblx0X2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKSB7XHJcblx0XHRsZXQgYyA9IDA7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGV2ZWxzLmxlbmd0aDsgaSsrKVxyXG5cdFx0XHRpZiAodGhpcy5sZXZlbHNbaV0udHlwZSA9PT0gXCJtYXBcIikgYysrO1xyXG5cdFx0cmV0dXJuIGM7XHJcblx0fVxyXG5cclxuXHRfZ2V0Q3VycmVudExlYWZMZW5ndGgoKSB7XHJcblx0XHRjb25zdCBsYXN0ID0gdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV07XHJcblx0XHRyZXR1cm4gbGFzdCAmJiBsYXN0LnR5cGUgPT09IFwibGlzdFwiID8gbGFzdC5pdGVtcy5sZW5ndGggOiAwO1xyXG5cdH1cclxuXHJcblx0X3B1Ymxpc2hIZWlnaHQoKSB7XHJcblx0XHRjb25zdCBpbnRlciA9IHRoaXMuX2NvdW50VmlzaWJsZUludGVybWVkaWF0ZXMoKTtcclxuXHRcdGNvbnN0IGxlYWZMZW4gPSBNYXRoLm1heCh0aGlzLmxlYWZNYXgsIHRoaXMuX2dldEN1cnJlbnRMZWFmTGVuZ3RoKCkpO1xyXG5cdFx0Y29uc3QgbGVhZkggPSBsZWFmTGVuICogdGhpcy5saW5lSDtcclxuXHRcdGNvbnN0IGludGVySCA9IGludGVyICogKHRoaXMubGluZUggKyB0aGlzLmxldmVsR2FwKTtcclxuXHRcdGNvbnN0IHRvdGFsSCA9IGludGVyID8gaW50ZXJIICsgdGhpcy5sZXZlbEdhcCArIGxlYWZIIDogbGVhZkg7XHJcblxyXG5cdFx0Ly8gTm9ybWFsaXphbW9zIGEgcHggZW50ZXJvcyBwYXJhIGV2aXRhciBqaXR0ZXIgcG9yIHJlZG9uZGVvXHJcblx0XHRjb25zdCBuZXdIID0gTWF0aC5mbG9vcih0b3RhbEgpO1xyXG5cclxuXHRcdC8vIEFjdHVhbGl6YW1vcyBtw6l0cmljYXMgbG9jYWxlcyBzaWVtcHJlXHJcblx0XHR0aGlzLmggPSBuZXdIO1xyXG5cdFx0dGhpcy56b25lLmggPSB0aGlzLmggKyB0aGlzLm1hcmdpbjtcclxuXHRcdHRoaXMuc1swXS5oZWlnaHQgPSB0aGlzLmggKyBcInB4XCI7XHJcblxyXG5cdFx0Ly8gU29sbyBhdmlzYW1vcyBhbCBHVUkgc2kgbGEgYWx0dXJhIGNhbWJpw7NcclxuXHRcdGlmIChuZXdIICE9PSB0aGlzLl9sYXN0UHVibGlzaGVkSCkge1xyXG5cdFx0XHR0aGlzLl9sYXN0UHVibGlzaGVkSCA9IG5ld0g7XHJcblx0XHRcdFJvb3RzLm5lZWRSZVpvbmUgPSB0cnVlO1xyXG5cdFx0XHRpZiAodGhpcy5pc1VJICYmIHRoaXMubWFpbikgdGhpcy5tYWluLmNhbGMoKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiXHJcbmltcG9ydCB7IEJvb2wgfSBmcm9tICcuLi9wcm90by9Cb29sLmpzJztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vcHJvdG8vQnV0dG9uLmpzJztcclxuaW1wb3J0IHsgQ2lyY3VsYXIgfSBmcm9tICcuLi9wcm90by9DaXJjdWxhci5qcyc7XHJcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnLi4vcHJvdG8vQ29sb3IuanMnO1xyXG5pbXBvcnQgeyBGcHMgfSBmcm9tICcuLi9wcm90by9GcHMuanMnO1xyXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL3Byb3RvL0dyYXBoLmpzJztcclxuaW1wb3J0IHsgR3JvdXAgIH0gZnJvbSAnLi4vcHJvdG8vR3JvdXAuanMnO1xyXG5pbXBvcnQgeyBKb3lzdGljayB9IGZyb20gJy4uL3Byb3RvL0pveXN0aWNrLmpzJztcclxuaW1wb3J0IHsgS25vYiB9IGZyb20gJy4uL3Byb3RvL0tub2IuanMnO1xyXG5pbXBvcnQgeyBMaXN0IH0gZnJvbSAnLi4vcHJvdG8vTGlzdC5qcyc7XHJcbmltcG9ydCB7IE51bWVyaWMgfSBmcm9tICcuLi9wcm90by9OdW1lcmljLmpzJztcclxuaW1wb3J0IHsgU2xpZGUgfSBmcm9tICcuLi9wcm90by9TbGlkZS5qcyc7XHJcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gJy4uL3Byb3RvL1RleHRJbnB1dC5qcyc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vcHJvdG8vVGl0bGUuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuLi9wcm90by9TZWxlY3QuanMnO1xyXG5pbXBvcnQgeyBCaXRtYXAgfSBmcm9tICcuLi9wcm90by9CaXRtYXAuanMnO1xyXG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gJy4uL3Byb3RvL1NlbGVjdG9yLmpzJztcclxuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuLi9wcm90by9FbXB0eS5qcyc7XHJcbmltcG9ydCB7IEl0ZW0gfSBmcm9tICcuLi9wcm90by9JdGVtLmpzJztcclxuaW1wb3J0IHsgR3JpZCB9IGZyb20gJy4uL3Byb3RvL0dyaWQuanMnO1xyXG5pbXBvcnQgeyBQYWQyRCB9IGZyb20gJy4uL3Byb3RvL1BhZDJELmpzJztcclxuaW1wb3J0IHsgUm9vdHMgfSBmcm9tICcuL1Jvb3RzLmpzJztcclxuaW1wb3J0IHsgVHJlZUxpc3QgfSBmcm9tICcuLi9wcm90by9UcmVlTGlzdC5qcyc7XHJcblxyXG5leHBvcnQgY29uc3QgYWRkID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgYSA9IGFyZ3VtZW50czsgXHJcblxyXG4gICAgICAgIGxldCB0eXBlLCBvLCByZWYgPSBmYWxzZSwgbiA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmKCB0eXBlb2YgYVswXSA9PT0gJ3N0cmluZycgKXsgXHJcblxyXG4gICAgICAgICAgICB0eXBlID0gYVswXTtcclxuICAgICAgICAgICAgbyA9IGFbMV0gfHwge307XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBhWzBdID09PSAnb2JqZWN0JyApeyAvLyBsaWtlIGRhdCBndWlcclxuXHJcbiAgICAgICAgICAgIHJlZiA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKCBhWzJdID09PSB1bmRlZmluZWQgKSBbXS5wdXNoLmNhbGwoYSwge30pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHR5cGUgPSBhWzJdLnR5cGUgPyBhWzJdLnR5cGUgOiBhdXRvVHlwZSggYVswXVthWzFdXSwgYVsyXSApO1xyXG5cclxuICAgICAgICAgICAgbyA9IGFbMl07XHJcbiAgICAgICAgICAgIG8ubmFtZSA9IGFbMV07XHJcbiAgICAgICAgICAgIGlmIChvLmhhc093blByb3BlcnR5KFwiZGlzcGxheU5hbWVcIikpIG8ubmFtZSA9IG8uZGlzcGxheU5hbWU7XHJcblxyXG4gICAgICAgICAgICBpZiggdHlwZSA9PT0gJ2xpc3QnICYmICFvLmxpc3QgKXsgby5saXN0ID0gYVswXVthWzFdXTsgfVxyXG4gICAgICAgICAgICBlbHNlIG8udmFsdWUgPSBhWzBdW2FbMV1dO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICBpZiggbmFtZSA9PT0gJ2dyb3VwJyApeyBcclxuICAgICAgICAgICAgby5hZGQgPSBhZGQ7XHJcbiAgICAgICAgICAgIC8vby5keCA9IDhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCggbmFtZSApe1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnYm9vbCc6IGNhc2UgJ2Jvb2xlYW4nOiBuID0gbmV3IEJvb2wobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdidXR0b24nOiBuID0gbmV3IEJ1dHRvbihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NpcmN1bGFyJzogbiA9IG5ldyBDaXJjdWxhcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzogbiA9IG5ldyBDb2xvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Zwcyc6IG4gPSBuZXcgRnBzKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JhcGgnOiBuID0gbmV3IEdyYXBoKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOiBuID0gbmV3IEdyb3VwKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnam95c3RpY2snOiBuID0gbmV3IEpveXN0aWNrKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAna25vYic6IG4gPSBuZXcgS25vYihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xpc3QnOiBuID0gbmV3IExpc3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdudW1lcmljJzogY2FzZSAnbnVtYmVyJzogbiA9IG5ldyBOdW1lcmljKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2xpZGUnOiBuID0gbmV3IFNsaWRlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGV4dElucHV0JzogY2FzZSAnc3RyaW5nJzogbiA9IG5ldyBUZXh0SW5wdXQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0aXRsZSc6IGNhc2UgJ3RleHQnOiBuID0gbmV3IFRpdGxlKG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzogbiA9IG5ldyBTZWxlY3Qobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdiaXRtYXAnOiBuID0gbmV3IEJpdG1hcChvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdG9yJzogbiA9IG5ldyBTZWxlY3RvcihvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzogY2FzZSAnc3BhY2UnOiBuID0gbmV3IEVtcHR5KG8pOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaXRlbSc6IG4gPSBuZXcgSXRlbShvKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyaWQnOiBuID0gbmV3IEdyaWQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwYWQyZCc6IGNhc2UgJ3BhZCc6IG4gPSBuZXcgUGFkMkQobyk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0cmVlbGlzdCc6IG4gPSBuZXcgVHJlZUxpc3Qobyk7IGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggbiAhPT0gbnVsbCApe1xyXG5cclxuICAgICAgICAgICAgUm9vdHMubmVlZFJlc2l6ZSA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGlmKCByZWYgKSBuLnNldFJlZmVyZW5jeSggYVswXSwgYVsxXSApO1xyXG4gICAgICAgICAgICByZXR1cm4gbjtcclxuXHJcbiAgICAgICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGF1dG9UeXBlID0gZnVuY3Rpb24gKCB2LCBvICkge1xyXG5cclxuICAgIGxldCB0eXBlID0gJ3NsaWRlJ1xyXG5cclxuICAgIGlmKCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkgdHlwZSA9ICdib29sJyBcclxuICAgIGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnc3RyaW5nJyApeyBcclxuXHJcbiAgICAgICAgaWYoIHYuc3Vic3RyaW5nKDAsMSkgPT09ICcjJyApIHR5cGUgPSAnY29sb3InXHJcbiAgICAgICAgZWxzZSB0eXBlID0gJ3N0cmluZycgXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ251bWJlcicgKXsgXHJcblxyXG4gICAgICAgIGlmKCBvLmN0eXBlICkgdHlwZSA9ICdjb2xvcidcclxuICAgICAgICBlbHNlIHR5cGUgPSAnc2xpZGUnXHJcblxyXG4gICAgfSBlbHNlIGlmKCB0eXBlb2YgdiA9PT0gJ2FycmF5JyAmJiB2IGluc3RhbmNlb2YgQXJyYXkgKXtcclxuXHJcbiAgICAgICAgaWYoIHR5cGVvZiB2WzBdID09PSAnbnVtYmVyJyApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgaWYoIHR5cGVvZiB2WzBdID09PSAnc3RyaW5nJyApIHR5cGUgPSAnbGlzdCdcclxuXHJcbiAgICB9IGVsc2UgaWYoIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2IGluc3RhbmNlb2YgT2JqZWN0ICl7XHJcblxyXG4gICAgICAgIGlmKCB2LnggIT09IHVuZGVmaW5lZCApIHR5cGUgPSAnbnVtYmVyJ1xyXG4gICAgICAgIGVsc2UgdHlwZSA9ICdsaXN0J1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHlwZVxyXG5cclxufSIsImltcG9ydCB7IFJvb3RzIH0gZnJvbSBcIi4vUm9vdHMuanNcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiLi9Ub29scy5qc1wiO1xyXG5pbXBvcnQgeyBhZGQgfSBmcm9tIFwiLi9hZGQuanNcIjtcclxuaW1wb3J0IHsgVjIgfSBmcm9tIFwiLi9WMi5qc1wiO1xyXG5cclxuLyoqXHJcbiAqIEBhdXRob3IgbHRoIC8gaHR0cHM6Ly9naXRodWIuY29tL2xvLXRoXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIEd1aSB7XHJcbiAgY29uc3RydWN0b3IobyA9IHt9KSB7XHJcbiAgICB0aGlzLmlzR3VpID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBcImd1aVwiO1xyXG5cclxuICAgIC8vIGZvciAzZFxyXG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xyXG4gICAgdGhpcy5zY3JlZW4gPSBudWxsO1xyXG4gICAgdGhpcy5wbGFuZSA9IG8ucGxhbmUgfHwgbnVsbDtcclxuXHJcbiAgICAvLyBjb2xvclxyXG4gICAgaWYgKG8uY29uZmlnKSBvLmNvbG9ycyA9IG8uY29uZmlnO1xyXG4gICAgaWYgKG8uY29sb3JzKSB0aGlzLnNldENvbmZpZyhvLmNvbG9ycyk7XHJcbiAgICBlbHNlIHRoaXMuY29sb3JzID0gVG9vbHMuZGVmaW5lQ29sb3Iobyk7XHJcblxyXG4gICAgLy90aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgLy8gc3R5bGVcclxuICAgIHRoaXMuY3NzID0gVG9vbHMuY2xvbmVDc3MoKTtcclxuXHJcbiAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xyXG4gICAgdGhpcy50bXBBZGQgPSBudWxsO1xyXG4gICAgLy90aGlzLnRtcEggPSAwXHJcblxyXG4gICAgdGhpcy5pc0NhbnZhcyA9IG8uaXNDYW52YXMgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmlzQ2FudmFzT25seSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIE1vZGlmaWVkIGJ5IEZlZGVtYXJpbm9cclxuICAgIC8vIG9wdGlvbiB0byBkZWZpbmUgd2hldGhlciB0aGUgZXZlbnQgbGlzdGVuZXJzIHNob3VsZCBiZSBhZGRlZCBvciBub3RcclxuICAgIFJvb3RzLmFkZERPTUV2ZW50TGlzdGVuZXJzID0gby5oYXNPd25Qcm9wZXJ0eShcImFkZERPTUV2ZW50TGlzdGVuZXJzXCIpXHJcbiAgICAgID8gby5hZGRET01FdmVudExpc3RlbmVyc1xyXG4gICAgICA6IHRydWU7XHJcblxyXG4gICAgdGhpcy5jYWxsYmFjayA9IG8uY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvLmNhbGxiYWNrO1xyXG5cclxuICAgIHRoaXMuZm9yY2VIZWlnaHQgPSBvLm1heEhlaWdodCB8fCAwO1xyXG4gICAgdGhpcy5sb2NrSGVpZ2h0ID0gby5sb2NrSGVpZ2h0IHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXNJdGVtTW9kZSA9IG8uaXRlbU1vZGUgIT09IHVuZGVmaW5lZCA/IG8uaXRlbU1vZGUgOiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmNuID0gXCJcIjtcclxuXHJcbiAgICAvLyBzaXplIGRlZmluZVxyXG4gICAgdGhpcy5zaXplID0gVG9vbHMuc2l6ZTtcclxuICAgIGlmIChvLnAgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnAgPSBvLnA7XHJcbiAgICBpZiAoby53ICE9PSB1bmRlZmluZWQpIHRoaXMuc2l6ZS53ID0gby53O1xyXG4gICAgaWYgKG8uaCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNpemUuaCA9IG8uaDtcclxuICAgIGlmIChvLnMgIT09IHVuZGVmaW5lZCkgdGhpcy5zaXplLnMgPSBvLnM7XHJcblxyXG4gICAgdGhpcy5zaXplLmggPSB0aGlzLnNpemUuaCA8IDExID8gMTEgOiB0aGlzLnNpemUuaDtcclxuXHJcbiAgICAvLyBsb2NhbCBtb3VzZSBhbmQgem9uZVxyXG4gICAgdGhpcy5sb2NhbCA9IG5ldyBWMigpLm5lZygpO1xyXG4gICAgdGhpcy56b25lID0geyB4OiAwLCB5OiAwLCB3OiB0aGlzLnNpemUudywgaDogMCB9O1xyXG5cclxuICAgIC8vIHZpcnR1YWwgbW91c2VcclxuICAgIHRoaXMubW91c2UgPSBuZXcgVjIoKS5uZWcoKTtcclxuXHJcbiAgICB0aGlzLmggPSAwO1xyXG4gICAgLy90aGlzLnByZXZZID0gLTE7XHJcbiAgICB0aGlzLnN3ID0gMDtcclxuXHJcbiAgICB0aGlzLm1hcmdpbiA9IHRoaXMuY29sb3JzLnN5O1xyXG4gICAgdGhpcy5tYXJnaW5EaXYgPSBUb29scy5pc0RpdmlkKHRoaXMubWFyZ2luKTtcclxuXHJcbiAgICAvLyBib3R0b20gYW5kIGNsb3NlIGhlaWdodFxyXG4gICAgdGhpcy5pc1dpdGhDbG9zZSA9IG8uY2xvc2UgIT09IHVuZGVmaW5lZCA/IG8uY2xvc2UgOiB0cnVlO1xyXG4gICAgdGhpcy5iaCA9ICF0aGlzLmlzV2l0aENsb3NlID8gMCA6IHRoaXMuc2l6ZS5oO1xyXG5cclxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IG8uYXV0b1Jlc2l6ZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG8uYXV0b1Jlc2l6ZTtcclxuXHJcbiAgICAvLyBkZWZhdWx0IHBvc2l0aW9uXHJcbiAgICB0aGlzLmlzQ2VudGVyID0gby5jZW50ZXIgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmNzc0d1aSA9XHJcbiAgICAgIG8uY3NzICE9PSB1bmRlZmluZWQgPyBvLmNzcyA6IHRoaXMuaXNDZW50ZXIgPyBcIlwiIDogXCJyaWdodDoxMHB4O1wiO1xyXG5cclxuICAgIHRoaXMuaXNPcGVuID0gby5vcGVuICE9PSB1bmRlZmluZWQgPyBvLm9wZW4gOiB0cnVlO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnVpcyA9IFtdO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcbiAgICB0aGlzLnByb3RvID0gbnVsbDtcclxuICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICB0aGlzLmRlY2FsID0gMDtcclxuICAgIHRoaXMucmF0aW8gPSAxO1xyXG4gICAgdGhpcy5veSA9IDA7XHJcblxyXG4gICAgdGhpcy5pc05ld1RhcmdldCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIHRoaXMuY29udGVudCA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwiIHdpZHRoOjBweDsgaGVpZ2h0OmF1dG87IHRvcDowcHg7IGJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmNvbnRlbnQgK1xyXG4gICAgICAgIFwiOyBcIiArXHJcbiAgICAgICAgdGhpcy5jc3NHdWlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcIndpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IGhlaWdodDphdXRvOyBvdmVyZmxvdzpoaWRkZW47XCJcclxuICAgICk7XHJcbiAgICAvL3RoaXMuaW5uZXJDb250ZW50ID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyB0aGlzLmNzcy5idXR0b24gKyAnd2lkdGg6MTAwJTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OmF1dG87IG92ZXJmbG93OmhpZGRlbjsnKTtcclxuICAgIHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyQ29udGVudCk7XHJcblxyXG4gICAgLy90aGlzLmlubmVyID0gVG9vbHMuZG9tKCAnZGl2JywgdGhpcy5jc3MuYmFzaWMgKyAnd2lkdGg6MTAwJTsgbGVmdDowOyAnKVxyXG4gICAgdGhpcy51c2VGbGV4ID0gdHJ1ZTtcclxuICAgIGxldCBmbGV4aWJsZSA9IHRoaXMudXNlRmxleCA/IFwiZGlzcGxheTpmbGV4OyBmbGV4LWZsb3c6IHJvdyB3cmFwO1wiIDogXCJcIjsgLy8nIGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnN0YXJ0OyBhbGlnbi1pdGVtczpzdGFydDtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYWxpZ24taXRlbXM6IGNlbnRlcjsnO1xyXG4gICAgdGhpcy5pbm5lciA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgKyBmbGV4aWJsZSArIFwid2lkdGg6MTAwJTsgbGVmdDowOyBcIlxyXG4gICAgKTtcclxuICAgIHRoaXMuaW5uZXJDb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXIpO1xyXG5cclxuICAgIC8vIHNjcm9sbFxyXG4gICAgdGhpcy5zY3JvbGxCRyA9IFRvb2xzLmRvbShcclxuICAgICAgXCJkaXZcIixcclxuICAgICAgdGhpcy5jc3MuYmFzaWMgK1xyXG4gICAgICAgIFwicmlnaHQ6MDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSAxKSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7IGRpc3BsYXk6bm9uZTsgYmFja2dyb3VuZDpcIiArXHJcbiAgICAgICAgY2MuYmFja2dyb3VuZCArXHJcbiAgICAgICAgXCI7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxCRyk7XHJcblxyXG4gICAgdGhpcy5zY3JvbGwgPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLmJhc2ljICtcclxuICAgICAgICBcImJhY2tncm91bmQ6XCIgK1xyXG4gICAgICAgIGNjLmJ1dHRvbiArXHJcbiAgICAgICAgXCI7IHJpZ2h0OjJweDsgdG9wOjA7IHdpZHRoOlwiICtcclxuICAgICAgICAodGhpcy5zaXplLnMgLSA0KSArXHJcbiAgICAgICAgXCJweDsgaGVpZ2h0OjEwcHg7XCJcclxuICAgICk7XHJcbiAgICB0aGlzLnNjcm9sbEJHLmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsKTtcclxuXHJcbiAgICAvLyBib3R0b20gYnV0dG9uXHJcbiAgICB0aGlzLmJvdHRvbVRleHQgPSBvLmJvdHRvbVRleHQgfHwgW1wib3BlblwiLCBcImNsb3NlXCJdO1xyXG5cclxuICAgIGxldCByID0gY2MucmFkaXVzO1xyXG4gICAgdGhpcy5ib3R0b20gPSBUb29scy5kb20oXHJcbiAgICAgIFwiZGl2XCIsXHJcbiAgICAgIHRoaXMuY3NzLnR4dCArXHJcbiAgICAgICAgXCJ3aWR0aDoxMDAlOyB0b3A6YXV0bzsgYm90dG9tOjA7IGxlZnQ6MDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6XCIgK1xyXG4gICAgICAgIHIgK1xyXG4gICAgICAgIFwicHg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGhlaWdodDpcIiArXHJcbiAgICAgICAgdGhpcy5iaCArXHJcbiAgICAgICAgXCJweDsgbGluZS1oZWlnaHQ6XCIgK1xyXG4gICAgICAgICh0aGlzLmJoIC0gNSkgK1xyXG4gICAgICAgIFwicHg7IGNvbG9yOlwiICtcclxuICAgICAgICBjYy50ZXh0ICtcclxuICAgICAgICBcIjtcIlxyXG4gICAgKTsgLy8gYm9yZGVyLXRvcDoxcHggc29saWQgJytUb29scy5jb2xvcnMuc3Ryb2tlKyc7Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5ib3R0b20pO1xyXG4gICAgdGhpcy5ib3R0b20udGV4dENvbnRlbnQgPSB0aGlzLmlzT3BlblxyXG4gICAgICA/IHRoaXMuYm90dG9tVGV4dFsxXVxyXG4gICAgICA6IHRoaXMuYm90dG9tVGV4dFswXTtcclxuICAgIHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSBjYy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIC8vXHJcblxyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnBhcmVudCAhPT0gdW5kZWZpbmVkID8gby5wYXJlbnQgOiBudWxsO1xyXG4gICAgdGhpcy5wYXJlbnQgPSBvLnRhcmdldCAhPT0gdW5kZWZpbmVkID8gby50YXJnZXQgOiB0aGlzLnBhcmVudDtcclxuXHJcbiAgICBpZiAodGhpcy5wYXJlbnQgPT09IG51bGwgJiYgIXRoaXMuaXNDYW52YXMpIHtcclxuICAgICAgdGhpcy5wYXJlbnQgPSBkb2N1bWVudC5ib2R5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcyAmJiB0aGlzLnBhcmVudCA9PT0gbnVsbCkgdGhpcy5pc0NhbnZhc09ubHkgPSB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0NhbnZhc09ubHkpIHtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XHJcbiAgICAgIG8udHJhbnNpdGlvbiA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGVpZ2h0IHRyYW5zaXRpb25cclxuICAgIHRoaXMudHJhbnNpdGlvbiA9XHJcbiAgICAgIG8udHJhbnNpdGlvbiAhPT0gdW5kZWZpbmVkID8gby50cmFuc2l0aW9uIDogVG9vbHMudHJhbnNpdGlvbjtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb24pIHNldFRpbWVvdXQodGhpcy5hZGRUcmFuc2l0aW9uLmJpbmQodGhpcyksIDEwMDApO1xyXG5cclxuICAgIHRoaXMuc2V0V2lkdGgoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5tYWtlQ2FudmFzKCk7XHJcblxyXG4gICAgUm9vdHMuYWRkKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlRG93bih4LCB5KSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJHdWkudHJpZ2dlck1vdXNlRG93biBpcyBkZXByZWNhdGVkLCB1c2UgdHJpZ2dlck1vdXNlRG93blVWIGluc3RlYWRcIik7XHJcbiAgICAvKlxyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJkb3duXCIsXHJcbiAgICAgIGNsaWVudFg6IHgsXHJcbiAgICAgIGNsaWVudFk6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pOyovXHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VNb3ZlKCkge1xyXG4gICAgY29uc29sZS53YXJuKFwiR3VpLnRyaWdnZXJNb3VzZU1vdmUgaXMgZGVwcmVjYXRlZCwgdXNlIHRyaWdnZXJNb3VzZU1vdmVVViBpbnN0ZWFkXCIpO1xyXG4gICAgLypcclxuICAgIFJvb3RzLmhhbmRsZUV2ZW50KHtcclxuICAgICAgdHlwZTogXCJwb2ludGVybW92ZVwiLFxyXG4gICAgICBjbGllbnRYOiAtMSxcclxuICAgICAgY2xpZW50WTogLTEsXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pOyovXHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcCh4LCB5KSB7XHJcblxyXG4gICAgY29uc29sZS53YXJuKFwiR3VpLnRyaWdnZXJNb3VzZVVwIGlzIGRlcHJlY2F0ZWQsIHVzZSB0cmlnZ2VyTW91c2VVcFVWIGluc3RlYWRcIik7XHJcbiAgICAvKlxyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJ1cFwiLFxyXG4gICAgICBjbGllbnRYOiB4LFxyXG4gICAgICBjbGllbnRZOiB5LFxyXG4gICAgICBkZWx0YTogMCxcclxuICAgICAga2V5OiBudWxsLFxyXG4gICAgICBrZXlDb2RlOiBOYU4sXHJcbiAgICB9KTsqL1xyXG4gIH1cclxuXHJcbiAgLy8gR3VpLmpzXHJcbiAgdHJpZ2dlck1vdXNlRG93blVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgLy8gdSwgdiBlbiBbMCwxXSByZWxhdGl2b3MgYWwgcmVjdCBkZWwgR1VJXHJcbiAgICBjb25zdCB4ID0gdGhpcy56b25lLnggKyBNYXRoLnJvdW5kKHUgKiB0aGlzLnpvbmUudyk7XHJcbiAgICBjb25zdCB5ID0gdGhpcy56b25lLnkgKyBNYXRoLnJvdW5kKChmbGlwWSA/IDEgLSB2IDogdikgKiB0aGlzLnpvbmUuaCk7XHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcmRvd25cIixcclxuICAgICAgY2xpZW50WDogaXNOYU4oeCkgPyBudWxsIDogeCxcclxuICAgICAgY2xpZW50WTogaXNOYU4oeSkgPyBudWxsIDogeSxcclxuICAgICAgZGVsdGE6IDAsXHJcbiAgICAgIGtleTogbnVsbCxcclxuICAgICAga2V5Q29kZTogTmFOLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTW91c2VVcFVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgY29uc3QgeCA9IHRoaXMuem9uZS54ICsgTWF0aC5yb3VuZCh1ICogdGhpcy56b25lLncpO1xyXG4gICAgY29uc3QgeSA9IHRoaXMuem9uZS55ICsgTWF0aC5yb3VuZCgoZmxpcFkgPyAxIC0gdiA6IHYpICogdGhpcy56b25lLmgpO1xyXG4gICAgXHJcbiAgICBSb290cy5oYW5kbGVFdmVudCh7XHJcbiAgICAgIHR5cGU6IFwicG9pbnRlcnVwXCIsXHJcbiAgICAgIGNsaWVudFg6IGlzTmFOKHgpID8gbnVsbCA6IHgsXHJcbiAgICAgIGNsaWVudFk6IGlzTmFOKHkpID8gbnVsbCA6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlck1vdXNlTW92ZVVWKHUsIHYsIHsgZmxpcFkgPSB0cnVlIH0gPSB7fSkge1xyXG4gICAgY29uc3QgeCA9IHRoaXMuem9uZS54ICsgTWF0aC5yb3VuZCh1ICogdGhpcy56b25lLncpO1xyXG4gICAgY29uc3QgeSA9IHRoaXMuem9uZS55ICsgTWF0aC5yb3VuZCgoZmxpcFkgPyAxIC0gdiA6IHYpICogdGhpcy56b25lLmgpO1xyXG4gICAgUm9vdHMuaGFuZGxlRXZlbnQoe1xyXG4gICAgICB0eXBlOiBcInBvaW50ZXJtb3ZlXCIsXHJcbiAgICAgIGNsaWVudFg6IGlzTmFOKHgpID8gbnVsbCA6IHgsXHJcbiAgICAgIGNsaWVudFk6IGlzTmFOKHkpID8gbnVsbCA6IHksXHJcbiAgICAgIGRlbHRhOiAwLFxyXG4gICAgICBrZXk6IG51bGwsXHJcbiAgICAgIGtleUNvZGU6IE5hTixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0VG9wKHQsIGgpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS50b3AgPSB0ICsgXCJweFwiO1xyXG4gICAgaWYgKGggIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JjZUhlaWdodCA9IGg7XHJcbiAgICB0aGlzLmNhbGMoKTtcclxuXHJcbiAgICBSb290cy5uZWVkUmVab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFkZFRyYW5zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uICYmICF0aGlzLmlzQ2FudmFzKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJDb250ZW50LnN0eWxlLnRyYW5zaXRpb24gPVxyXG4gICAgICAgIFwiaGVpZ2h0IFwiICsgdGhpcy50cmFuc2l0aW9uICsgXCJzIGVhc2Utb3V0XCI7XHJcbiAgICAgIHRoaXMuY29udGVudC5zdHlsZS50cmFuc2l0aW9uID1cclxuICAgICAgICBcImhlaWdodCBcIiArIHRoaXMudHJhbnNpdGlvbiArIFwicyBlYXNlLW91dFwiO1xyXG4gICAgICB0aGlzLmJvdHRvbS5zdHlsZS50cmFuc2l0aW9uID0gXCJ0b3AgXCIgKyB0aGlzLnRyYW5zaXRpb24gKyBcInMgZWFzZS1vdXRcIjtcclxuICAgICAgLy90aGlzLmJvdHRvbS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBSb290cy5yZXNpemUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uYWRkVHJhbnNpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgQ0FOVkFTXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBvbkRyYXcoKSB7fVxyXG5cclxuICBtYWtlQ2FudmFzKCkge1xyXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXHJcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFxyXG4gICAgICBcImNhbnZhc1wiXHJcbiAgICApO1xyXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLnpvbmUudztcclxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgPyB0aGlzLmZvcmNlSGVpZ2h0IDogdGhpcy56b25lLmg7XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyggdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCApXHJcbiAgfVxyXG5cclxuICBkcmF3KGZvcmNlKSB7XHJcbiAgICBpZiAodGhpcy5jYW52YXMgPT09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQgdyA9IHRoaXMuem9uZS53O1xyXG4gICAgbGV0IGggPSB0aGlzLmZvcmNlSGVpZ2h0ID8gdGhpcy5mb3JjZUhlaWdodCA6IHRoaXMuem9uZS5oO1xyXG4gICAgUm9vdHMudG9DYW52YXModGhpcywgdywgaCwgZm9yY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vXHJcblxyXG4gIGdldERvbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBub01vdXNlKCkge1xyXG4gICAgdGhpcy5tb3VzZS5uZWcoKTtcclxuICB9XHJcblxyXG4gIHNldE1vdXNlKHV2LCBmbGlwID0gdHJ1ZSkge1xyXG4gICAgaWYgKGZsaXApXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgLSBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubW91c2Uuc2V0KFxyXG4gICAgICAgIE1hdGgucm91bmQodXYueCAqIHRoaXMuY2FudmFzLndpZHRoKSxcclxuICAgICAgICBNYXRoLnJvdW5kKHV2LnkgKiB0aGlzLmNhbnZhcy5oZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICAvL3RoaXMubW91c2Uuc2V0KCBtLngsIG0ueSApO1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJzZXRNb3VzZSBcIiArIHV2LnggKyBcIiBcIiArIHV2LnkpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKG8pIHtcclxuICAgIC8vIHJlc2V0IHRvIGRlZmF1bHQgdGV4dFxyXG4gICAgVG9vbHMuc2V0VGV4dCgpO1xyXG4gICAgdGhpcy5jb2xvcnMgPSBUb29scy5kZWZpbmVDb2xvcihvKTtcclxuICB9XHJcblxyXG4gIHNldENvbG9ycyhvKSB7XHJcbiAgICBmb3IgKGxldCBjIGluIG8pIHtcclxuICAgICAgaWYgKHRoaXMuY29sb3JzW2NdKSB0aGlzLmNvbG9yc1tjXSA9IG9bY107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0KHNpemUsIGNvbG9yLCBmb250LCBzaGFkb3cpIHtcclxuICAgIFRvb2xzLnNldFRleHQoc2l6ZSwgY29sb3IsIGZvbnQsIHNoYWRvdyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKGIpIHtcclxuICAgIHRoaXMuY29udGVudC5zdHlsZS52aXNpYmlsaXR5ID0gYiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkodiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShmKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gZiB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBTVFlMRVNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG1vZGUobikge1xyXG4gICAgbGV0IG5lZWRDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBjYyA9IHRoaXMuY29sb3JzO1xyXG5cclxuICAgIGlmIChuICE9PSB0aGlzLmNuKSB7XHJcbiAgICAgIHRoaXMuY24gPSBuO1xyXG5cclxuICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgY2FzZSBcImRlZlwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2MuYnV0dG9uO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbS5zdHlsZS5jb2xvciA9IGNjLnRleHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy9jYXNlICdzY3JvbGxEZWYnOiB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5jb2xvcnMuc2Nyb2xsOyBicmVhaztcclxuICAgICAgICBjYXNlIFwic2Nyb2xsT3ZlclwiOlxyXG4gICAgICAgICAgUm9vdHMuY3Vyc29yKFwibnMtcmVzaXplXCIpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNjLnNlbGVjdDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzY3JvbGxEb3duXCI6XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbC5zdHlsZS5iYWNrZ3JvdW5kID0gY2Muc2VsZWN0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRGVmJzogdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuY29sb3JzLmJhY2tncm91bmQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21PdmVyXCI6XHJcbiAgICAgICAgICBSb290cy5jdXJzb3IoXCJwb2ludGVyXCIpO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuYmFja2dyb3VuZCA9IGNjLmJhY2tncm91bmRPdmVyO1xyXG4gICAgICAgICAgdGhpcy5ib3R0b20uc3R5bGUuY29sb3IgPSBjYy50ZXh0T3ZlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vY2FzZSAnYm90dG9tRG93bic6IHRoaXMuYm90dG9tLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmNvbG9ycy5zZWxlY3Q7IHRoaXMuYm90dG9tLnN0eWxlLmNvbG9yID0gJyMwMDAnOyBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVlZENoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5lZWRDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBUQVJHRVRcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNsZWFyVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudCA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLnByb3RvLnMpIHtcclxuICAgICAgLy8gaWYgbm8gcyB0YXJnZXQgaXMgZGVsZXRlICEhXHJcbiAgICAgIHRoaXMucHJvdG8udWlvdXQoKTtcclxuICAgICAgdGhpcy5wcm90by5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvdG8gPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gLTE7XHJcblxyXG4gICAgLy8vY29uc29sZS5sb2codGhpcy5pc0Rvd24pLy9pZih0aGlzLmlzRG93bilSb290cy5jbGVhcklucHV0KCk7XHJcblxyXG4gICAgUm9vdHMuY3Vyc29yKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFpPTkUgVEVTVFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdGVzdFpvbmUoZSkge1xyXG4gICAgbGV0IGwgPSB0aGlzLmxvY2FsO1xyXG4gICAgaWYgKGwueCA9PT0gLTEgJiYgbC55ID09PSAtMSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5hbWUgPSBcIlwiO1xyXG5cclxuICAgIGxldCBzID0gdGhpcy5pc1Njcm9sbCA/IHRoaXMuem9uZS53IC0gdGhpcy5zaXplLnMgOiB0aGlzLnpvbmUudztcclxuXHJcbiAgICBpZiAobC55ID4gdGhpcy56b25lLmggLSB0aGlzLmJoICYmIGwueSA8IHRoaXMuem9uZS5oKSBuYW1lID0gXCJib3R0b21cIjtcclxuICAgIGVsc2UgbmFtZSA9IGwueCA+IHMgPyBcInNjcm9sbFwiIDogXCJjb250ZW50XCI7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBFVkVOVFNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGhhbmRsZUV2ZW50KGUpIHtcclxuICAgIC8vaWYoIHRoaXMuY2xlYW5uaW5nICkgcmV0dXJuXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIkd1aS5oYW5kbGVFdmVudFwiKVxyXG4gICAgLy9jb25zb2xlLmxvZyhlKTtcclxuICAgIGxldCB0eXBlID0gZS50eXBlO1xyXG5cclxuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcclxuICAgIGxldCBwcm90b0NoYW5nZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuYW1lID0gdGhpcy50ZXN0Wm9uZShlKTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIgJiYgdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiAhdGhpcy5pc0Rvd24pIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24gJiYgdGhpcy5pc05ld1RhcmdldCkge1xyXG4gICAgICBSb290cy5jbGVhcklucHV0KCk7XHJcbiAgICAgIHRoaXMuaXNOZXdUYXJnZXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSBcImNvbnRlbnRcIjpcclxuICAgICAgICBlLmNsaWVudFkgPSB0aGlzLmlzU2Nyb2xsID8gZS5jbGllbnRZICsgdGhpcy5kZWNhbCA6IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgaWYgKFJvb3RzLmlzTW9iaWxlICYmIHR5cGUgPT09IFwibW91c2Vkb3duXCIpIHRoaXMuZ2V0TmV4dChlLCBjaGFuZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm90bykgcHJvdG9DaGFuZ2UgPSB0aGlzLnByb3RvLmhhbmRsZUV2ZW50KGUpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBcIndoZWVsXCIgJiYgIXByb3RvQ2hhbmdlICYmIHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcblxyXG4gICAgICAgIGlmICghUm9vdHMubG9jaykge1xyXG4gICAgICAgICAgdGhpcy5nZXROZXh0KGUsIGNoYW5nZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwiYm90dG9tT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikge1xyXG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0aGlzLmlzT3BlbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYm90dG9tLnRleHRDb250ZW50ID0gdGhpcy5pc09wZW5cclxuICAgICAgICAgICAgPyB0aGlzLmJvdHRvbVRleHRbMV1cclxuICAgICAgICAgICAgOiB0aGlzLmJvdHRvbVRleHRbMF07XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmNhbGMoKTtcclxuICAgICAgICAgIHRoaXMubW9kZShcImRlZlwiKTtcclxuICAgICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInNjcm9sbFwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJUYXJnZXQoKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW1vdmVcIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsT3ZlclwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgY2hhbmdlID0gdGhpcy5tb2RlKFwic2Nyb2xsRG93blwiKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gXCJ3aGVlbFwiKSBjaGFuZ2UgPSB0aGlzLm9uV2hlZWwoZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB0aGlzLnVwZGF0ZShlLmNsaWVudFkgLSB0aGlzLnpvbmUueSAtIHRoaXMuc2ggKiAwLjUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd24pIGNoYW5nZSA9IHRydWU7XHJcbiAgICBpZiAocHJvdG9DaGFuZ2UpIGNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFwia2V5dXBcIikgY2hhbmdlID0gdHJ1ZTtcclxuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgY2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY2hhbmdlKSB0aGlzLmRyYXcoKTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZSwgY2hhbmdlKSB7XHJcbiAgICBsZXQgbmV4dCA9IFJvb3RzLmZpbmRUYXJnZXQodGhpcy51aXMsIGUpO1xyXG5cclxuICAgIGlmIChuZXh0ICE9PSB0aGlzLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5jbGVhclRhcmdldCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBuZXh0O1xyXG4gICAgICBjaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTmV3VGFyZ2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV4dCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wcm90byA9IHRoaXMudWlzW3RoaXMuY3VycmVudF07XHJcbiAgICAgIHRoaXMucHJvdG8udWlvdmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbldoZWVsKGUpIHtcclxuICAgIHRoaXMub3kgKz0gMjAgKiBlLmRlbHRhO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIFJFU0VUXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldChmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXNldCkgcmV0dXJuO1xyXG5cclxuICAgIC8vdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLm1vdXNlLm5lZygpO1xyXG4gICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAvL1Jvb3RzLmNsZWFySW5wdXQoKTtcclxuICAgIGxldCByID0gdGhpcy5tb2RlKFwiZGVmXCIpO1xyXG4gICAgbGV0IHIyID0gdGhpcy5jbGVhclRhcmdldCgpO1xyXG5cclxuICAgIGlmIChyIHx8IHIyKSB0aGlzLmRyYXcodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAvL1Jvb3RzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgIEFERCBOT0RFXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBhZGQoKSB7XHJcbiAgICAvL2lmKHRoaXMuY2xlYW5uaW5nKSB0aGlzLmNsZWFubmluZyA9IGZhbHNlXHJcblxyXG4gICAgbGV0IGEgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgb250b3AgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGFbMV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgYVsxXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgYVsxXS5tYWluID0gdGhpcztcclxuXHJcbiAgICAgIG9udG9wID0gYVsxXS5vbnRvcCA/IGFbMV0ub250b3AgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFbMV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGFbMl0gPT09IHVuZGVmaW5lZCkgW10ucHVzaC5jYWxsKGEsIHsgaXNVSTogdHJ1ZSwgbWFpbjogdGhpcyB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYVsyXS5pc1VJID0gdHJ1ZTtcclxuICAgICAgICBhWzJdLm1haW4gPSB0aGlzO1xyXG4gICAgICAgIC8vb250b3AgPSBhWzFdLm9udG9wID8gYVsxXS5vbnRvcCA6IGZhbHNlO1xyXG4gICAgICAgIG9udG9wID0gYVsyXS5vbnRvcCA/IGFbMl0ub250b3AgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB1ID0gYWRkLmFwcGx5KHRoaXMsIGEpO1xyXG5cclxuICAgIGlmICh1ID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9udG9wKSB0aGlzLnVpcy51bnNoaWZ0KHUpO1xyXG4gICAgZWxzZSB0aGlzLnVpcy5wdXNoKHUpO1xyXG5cclxuICAgIHRoaXMuY2FsYygpO1xyXG5cclxuICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB1O1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9uZSBub2RlXHJcblxyXG4gIHJlbW92ZShuKSB7XHJcbiAgICBpZiAobi5kaXNwb3NlKSBuLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgYWZ0ZXIgdWlzIGNsZWFyXHJcblxyXG4gIGNsZWFyT25lKG4pIHtcclxuICAgIGxldCBpZCA9IHRoaXMudWlzLmluZGV4T2Yobik7XHJcbiAgICBpZiAoaWQgIT09IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5jYWxjKCAtICh0aGlzLnVpc1sgaWQgXS5oICsgMSApICk7XHJcbiAgICAgIHRoaXMuaW5uZXIucmVtb3ZlQ2hpbGQodGhpcy51aXNbaWRdLmNbMF0pO1xyXG4gICAgICB0aGlzLnVpcy5zcGxpY2UoaWQsIDEpO1xyXG4gICAgICB0aGlzLmNhbGMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNsZWFyIGFsbCBndWlcclxuXHJcbiAgZW1wdHkoKSB7XHJcbiAgICAvL3RoaXMuY2xlYW5uaW5nID0gdHJ1ZVxyXG5cclxuICAgIC8vdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoLFxyXG4gICAgICBpdGVtO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaXRlbSA9IHRoaXMudWlzLnBvcCgpO1xyXG4gICAgICB0aGlzLmlubmVyLnJlbW92ZUNoaWxkKGl0ZW0uY1swXSk7XHJcbiAgICAgIGl0ZW0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlzID0gW107XHJcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyMigpIHtcclxuICAgIHNldFRpbWVvdXQodGhpcy5lbXB0eS5iaW5kKHRoaXMpLCAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCk7XHJcbiAgICBSb290cy5yZW1vdmUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBJVEVNUyBTUEVDSUFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICByZXNldEl0ZW0oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJdGVtTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBpID0gdGhpcy51aXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkgdGhpcy51aXNbaV0uc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW0obmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzSXRlbU1vZGUpIHJldHVybjtcclxuXHJcbiAgICBuYW1lID0gbmFtZSB8fCBcIlwiO1xyXG4gICAgdGhpcy5yZXNldEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgdGhpcy51cGRhdGUoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaSA9IHRoaXMudWlzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKHRoaXMudWlzW2ldLnZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgdGhpcy51aXNbaV0uc2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGwpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZShpICogKHRoaXMudWlzW2ldLmggKyB0aGlzLm1hcmdpbikgKiB0aGlzLnJhdGlvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICAgU0NST0xMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICB1cFNjcm9sbChiKSB7XHJcbiAgICB0aGlzLnN3ID0gYiA/IHRoaXMuc2l6ZS5zIDogMDtcclxuICAgIHRoaXMub3kgPSBiID8gdGhpcy5veSA6IDA7XHJcbiAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmRpc3BsYXkgPSBiID8gXCJibG9ja1wiIDogXCJub25lXCI7XHJcblxyXG4gICAgaWYgKGIpIHtcclxuICAgICAgdGhpcy50b3RhbCA9IHRoaXMuaDtcclxuXHJcbiAgICAgIHRoaXMubWF4VmlldyA9IHRoaXMubWF4SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5yYXRpbyA9IHRoaXMubWF4VmlldyAvIHRoaXMudG90YWw7XHJcbiAgICAgIHRoaXMuc2ggPSB0aGlzLm1heFZpZXcgKiB0aGlzLnJhdGlvO1xyXG5cclxuICAgICAgdGhpcy5yYW5nZSA9IHRoaXMubWF4VmlldyAtIHRoaXMuc2g7XHJcblxyXG4gICAgICB0aGlzLm95ID0gVG9vbHMuY2xhbXAodGhpcy5veSwgMCwgdGhpcy5yYW5nZSk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbEJHLnN0eWxlLmhlaWdodCA9IHRoaXMubWF4VmlldyArIFwicHhcIjtcclxuICAgICAgdGhpcy5zY3JvbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zaCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLnpvbmUudyAtIHRoaXMuc3cpO1xyXG4gICAgdGhpcy51cGRhdGUodGhpcy5veSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoeSkge1xyXG4gICAgeSA9IFRvb2xzLmNsYW1wKHksIDAsIHRoaXMucmFuZ2UpO1xyXG5cclxuICAgIHRoaXMuZGVjYWwgPSBNYXRoLmZsb29yKHkgLyB0aGlzLnJhdGlvKTtcclxuICAgIHRoaXMuaW5uZXIuc3R5bGUudG9wID0gLXRoaXMuZGVjYWwgKyBcInB4XCI7XHJcbiAgICB0aGlzLnNjcm9sbC5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHkpICsgXCJweFwiO1xyXG4gICAgdGhpcy5veSA9IHk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gICBSRVNJWkUgRlVOQ1RJT05cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNhbGNVaXMoKSB7XHJcbiAgICByZXR1cm4gUm9vdHMuY2FsY1Vpcyh0aGlzLnVpcywgdGhpcy56b25lLCB0aGlzLnpvbmUueSk7XHJcbiAgfVxyXG5cclxuICBjYWxjKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudG1wKTtcclxuICAgIHRoaXMudG1wID0gc2V0VGltZW91dCh0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50bXApIGNsZWFyVGltZW91dCh0aGlzLnRtcCk7XHJcblxyXG4gICAgdGhpcy56b25lLmggPSB0aGlzLmJoO1xyXG4gICAgdGhpcy5pc1Njcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmggPSB0aGlzLmNhbGNVaXMoKTtcclxuXHJcbiAgICAgIGxldCBoaGggPSB0aGlzLmZvcmNlSGVpZ2h0XHJcbiAgICAgICAgPyB0aGlzLmZvcmNlSGVpZ2h0ICsgdGhpcy56b25lLnlcclxuICAgICAgICA6IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGhoIC0gdGhpcy56b25lLnkgLSB0aGlzLmJoO1xyXG5cclxuICAgICAgbGV0IGRpZmYgPSB0aGlzLmggLSB0aGlzLm1heEhlaWdodDtcclxuXHJcbiAgICAgIGlmIChkaWZmID4gMSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5tYXhIZWlnaHQgKyB0aGlzLmJoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZS5oID0gdGhpcy5oICsgdGhpcy5iaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBTY3JvbGwodGhpcy5pc1Njcm9sbCk7XHJcblxyXG4gICAgdGhpcy5pbm5lckNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG4gICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuem9uZS5oICsgXCJweFwiO1xyXG4gICAgdGhpcy5ib3R0b20uc3R5bGUudG9wID0gdGhpcy56b25lLmggLSB0aGlzLmJoICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlSGVpZ2h0ICYmIHRoaXMubG9ja0hlaWdodClcclxuICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZm9yY2VIZWlnaHQgKyBcInB4XCI7XHJcbiAgICBpZiAodGhpcy5pc0NhbnZhcykgdGhpcy5kcmF3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmV6b25lKCkge1xyXG4gICAgUm9vdHMubmVlZFJlWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRXaWR0aCh3KSB7XHJcbiAgICBpZiAodykgdGhpcy56b25lLncgPSB3O1xyXG5cclxuICAgIHRoaXMuem9uZS53ID0gTWF0aC5mbG9vcih0aGlzLnpvbmUudyk7XHJcbiAgICB0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGggPSB0aGlzLnpvbmUudyArIFwicHhcIjtcclxuICAgIGlmICh0aGlzLmlzQ2VudGVyKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdCA9IC1NYXRoLmZsb29yKHRoaXMuem9uZS53ICogMC41KSArIFwicHhcIjtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMuem9uZS53IC0gdGhpcy5zdyk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtV2lkdGgodykge1xyXG4gICAgbGV0IGkgPSB0aGlzLnVpcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHRoaXMudWlzW2ldLnNldFNpemUodyk7XHJcbiAgICAgIHRoaXMudWlzW2ldLnJTaXplKCk7XHJc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QUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9FLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3pELFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN4QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxHQUFHO0FBQ3pCO0FBQ0EsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0FBQ0EsUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3RCLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsUUFBUSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDbEMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNsRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7QUFDN0I7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNqSixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtBQUN2QixZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQzNELFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDakUsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkIsU0FBUztBQUNULFFBQVEsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDM0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxXQUFXLENBQUMs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RUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDL0YsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JIO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3SSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlJLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkksUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEIsUUFBUSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDeEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxvQkFBb0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDaEosUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqSSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxSCxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUgsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFKLFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksRUFBRSxXQUFXLEtBQUssR0FBRztBQUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0FBQ2hKLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pILFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pILFFBQVEsQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDekI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksRUFBRSxXQUFXLEtBQUssR0FBRztBQUNyQztBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDekIsUUFBUSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QyxRQUFRLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0FBQ2hKLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN2QyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxlQUFlLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDNUgsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekg7QUFDQTtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3RFLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFIO0FBQ0E7QUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRTtBQUNBLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDMUYsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0g7QUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFGLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVIO0FBQ0E7QUFDQTtBQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RGLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxF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Q0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFLO0FBQzVELFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUNqRCxRQUFRLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN2QjtBQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEM7QUFDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDakMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsWUFBWSxFQUFFLEdBQUc7QUFDakIsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7QUFDdkQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMzQyxhQUFhLENBQUM7QUFDZDtBQUNBLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlEO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkI7QUFDQSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixnQkFBZ0IsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUMxQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRztBQUNBLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0QsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FB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SSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDM0M7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMzQjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2pELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFELFNBQVMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QjtBQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztBQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqRDtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDdkQ7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUN4QztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3BDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQ7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDbkM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdB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QUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25FLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNsQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDeEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzdFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO0FBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDdEMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsT0FBTztBQUNQLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN6QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxHQUFHO0FB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LENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDcEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBQzdDLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxhQUFhLEdBQUc7QUFDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3BELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztBQUM5RSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7QUFDL0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7QUFDcEMsSUFBSSxLQUFLLENBQUMsTUFBTSxD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LENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO0FBQzNFLE1BQU07QUFDTixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRTtBQUNqQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO0FBQzFCLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzNDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3JCLE1BQU0sT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ1gsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0FBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0FBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0FBQ2IsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0FBQ2IsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gs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QUFDMUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDcEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRTtBQUM5QjtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDOUIsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFFO0FBQ3ZNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FB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RSxHQUFHLEtBQUk7QUFDbEQ7QUFDQSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQztBQUM1RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEI7QUFDQTtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0FBQ3JFLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUMvQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRDtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ3BQTyxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUM7QUFDcEM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLEVBQUUsQ0FBQyxHQUFFO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBSztBQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFJO0FBQ3REO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7QUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRTtBQUMvQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBSztBQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUU7QUFDOUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUU7QUFDbkM7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUk7QUFDNUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QztBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwQztBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU07QUFDMUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUTtBQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRTtBQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRTtBQUN4QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQztBQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUN0QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRTtBQUNsSTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRTtBQUN0QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRTtBQUN6RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDM0UsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFFO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCLFFBQVEsSUFBSSxNQUFLO0FBQ2pCO0FBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUMxQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlELGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzVLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RDtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLEtBQUssQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakUsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFRO0FBQy9LLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RDtBQUNBLFlBQVksTUFBTTtBQUNsQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNqRDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0FBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFDMUUsYUFBYSxPQUFPLFVBQVUsQ0FBQztBQUMvQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzlCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDbEM7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxRTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUNoQztBQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3pDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0FBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25DLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakU7QUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckMsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7QUFDdkUsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2xDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxVQUFVLEdBQUc7QUFDbEM7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JEO0FBQ0EsWUFBWSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHO0FBQ2hDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDeEQsYUFBYSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7QUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN4RCxhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6QixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEM7QUFDQSxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCO0FBQ0EsU0FBUztBQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNsRCxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsUUFBUSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbEc7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRztBQUNsQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5RDtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7QUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ2hDLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztBQUNqSixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3pEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNqT08sTUFBTSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUNuQztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEI7QUFDQSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDN0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztBQUNsQyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QztBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDNUIsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7QUFDeEI7QUFDQSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUN2TTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN4RCxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsT0FBTztBQUNQO0FBQ0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakM7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFF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LEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMxQztBQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEI7QUFDQSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztBQUNBLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BFO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUM7QUFDQSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JEO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxLQUFLLENBQUMsR0FBRztBQUNWO0FBQ0E7QUFDQSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQjtBQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEM7QUFDQSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7QUFDNUQ7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2xCO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTztBQUNoQztBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtBQUNBO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFDO0FBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFFO0FBQzlDO0FBQ0EsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFFO0FBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSTtBQUNwQztBQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ25DO0FBQ0EsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNsQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDO0FBQzVDLEtBQUssSUFBSSxDQUFDLFNBQVMsR0FBRTtBQUNyQjtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FDcGFPLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQztBQUMvQjtBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUNuQztBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQzFDO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDeEMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUMsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3hDO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2xEO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDOUI7QUFDQSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3hCO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLEdBQUU7QUFDdEMsWUFBWSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUMvQixZQUFZLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUI7QUFDQSxZQUFZLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekIsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6QixZQUFZLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDNUI7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDckM7QUFDQSxhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFLO0FBQ3RDO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsUUFBUSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO0FBQzNDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxRQUFRLEdBQUcsK0JBQStCLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyw4RUFBOEUsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztBQUNoTTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxRQUFRLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDakY7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3ZFO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDbEQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDakQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0RBQXdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUM7QUFDN0s7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLG9DQUFvQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0RBQWtELEVBQUUsQ0FBQztBQUMxSjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRywyRUFBMkUsQ0FBQyxDQUFDO0FBQ3RKO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQTtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM5QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztBQUN0RSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QztBQUNBLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0IsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkM7QUFDQSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkQ7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEM7QUFDQSxZQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRztBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzlCLFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNsQixZQUFZLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0ssU0FBUztBQUNUO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZDLGFBQWEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2Y7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTztBQUNsQyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQ3ZCO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkIsUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNwQyxRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN0RixRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQy9DLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMzQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ2pJLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQ7QUFDQSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDcEIsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RSxrQkFBa0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMxQyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDMUUsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxZQUFZLENBQUMsRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRztBQUNaO0FBQ0EsUUFBUSxLQUFLLENBQUMsSUFBSSxHQUFFO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDbEUsYUFBYSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzFEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUNwQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUNwQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ25EO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFFO0FBQ3JCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDbkUsYUFBYSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDM0Q7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDdEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNqQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEdBQUcsQ0FBQyxHQUFHO0FBQ1g7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDeEM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztBQUN2QjtBQUNBLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUc7QUFDM0M7QUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztBQUN2RjtBQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDakMsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM1QjtBQUNBLFlBQVksS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHO0FBQzlCO0FBQ0EsZ0JBQWdCLElBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO0FBQ2pFLGdCQUFnQixJQUFJLGFBQWEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztBQUN2RTtBQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxHQUFHLFdBQVcsRUFBRSxDQUFDO0FBQ2hFLGdCQUFnQixJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsR0FBRyxhQUFhLENBQUM7QUFDbkQ7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3REO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3ZEO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3ZEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRztBQUNiO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QjtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ25DO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDM1VPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDckUsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2xELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNsQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxT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Q0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEYsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM3RDtBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlIO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FB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R0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU07QUFDL0IsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2xCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRTtBQUN6QyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFFO0FBQy9CLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDYjtBQUNBLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRTtBQUNyQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBSztBQUNwQztBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNwRDtBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUk7QUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJO0FBQ3ZDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRTtBQUM3QztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDL0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN2RDtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztBQUMxQyxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7QUFDbEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDN0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBTztBQUN6QyxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFJO0FBQzVEO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN0QztBQUNBLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFDdEQsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMxQixZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEU7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDcEI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxR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QUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0U7QUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekM7QUFDQSxRQUFRLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUc7QUFDeEMsWUFBWSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDM0QsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDM0QsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQzlDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3BDO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QjtBQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0M7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0FBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZFO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsR0FBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEU7QUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUI7QUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsU0FBUyxNQUFNO0FBQ2YsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVELFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0YsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRjtBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxD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QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuSTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRTtBQUN0RCxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUU7QUFDekQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDakYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUM7QUFDNUY7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDOUI7QUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0STtBQUNBLFlBQVksS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRTtBQUNsQztBQUNBLGdCQUFnQixLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUN6QyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRjtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEIsWUFBWSxLQUFLLENBQUM7QUFDbEIsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDMUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RDtBQUNBLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDL0QsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQzlDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUQ7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25FLFlBQVksTUFBTTtBQUNsQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLE9BQU8sT0FBTyxDQUFDO0FBQzdELGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsT0FBTyxNQUFNLENBQUM7QUFDMUUsYUFBYSxPQUFPLE1BQU0sQ0FBQztBQUMzQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbEI7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRTtBQUN0QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztBQUNwQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFJO0FBQzFCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBSztBQUM3QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUN4QixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFFO0FBQzNCLFFBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNELFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQ7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFO0FBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUN2RSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDbEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0IsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDaEI7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRztBQUM5QjtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDckQ7QUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7QUFDaEMsZ0JBQWdCLENB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QyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQzlCO0FBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNuQyxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDcEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakk7QUFDQSxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztBQUNuSyxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3pEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUNsUU8sTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUMxQjtBQUNBLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25CO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUNyQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekQsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDNUM7QUFDQTtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7QUFDdEM7QUFDQTtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFFO0FBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQUs7QUFDM0MsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBSztBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUTtBQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTTtBQUM1RCxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsV0FBVTtBQUN6RTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU07QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcscUNBQXFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNERBQTRELENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyVSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsZ0RBQWdELENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNySztBQUNBLFFBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2xJLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FB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LFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzNCLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDM0IsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQzdDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUk7QUFDakQsWUFBWSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztBQUN0QyxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQUs7QUFDL0MsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksZ0JBQWU7QUFDckQsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQUs7QUFDbkMsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksTUFBSztBQUN6QyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxLQUFJO0FBQzVD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RSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksWUFBWSxDQUFDLEdBQUc7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDNUIsUUFBUSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUU7QUFDckI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEI7QUFDQSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxPQUFPO0FBQ3JDO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMs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QUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSTtBQUN0RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJO0FBQ3BDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO0FBQzdCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDckMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztBQUMxUDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3JDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pKO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQzFCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBRztBQUN4QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFHO0FBQ3hCO0FBQ0EsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ3BCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDckQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEVBQUU7QUFDakI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRTtBQUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDMUIsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUk7QUFDOUIsWUFBWSxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDN0IsYUFBYSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUk7QUFDaEMsYUFBYSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFVBQVUs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RSxHQUFHLENBQUM7QUFDZCxRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ2QsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3ZCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoQjtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtBQUM1QixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUNoQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUM3RDtBQUNBLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0MsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3JELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDM0Q7QUFDQTtBQUNBLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRztBQUMxQixRQUFRLEtBQUs7QUFDYixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztBQUN0QixVQUFVLGdCQUFnQjtBQUMxQixVQUFVLEVBQUU7QUFDWixVQUFVLGtCQUFrQjtBQUM1QixVQUFVLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDbkIsVUFBVSxpQkFBaUI7QUFDM0IsVUFBVSxFQUFFLENBQUMsSUFBSTtBQUNqQixVQUFVLDhCQUE4QjtBQUN4QyxXQUFXLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLFVBQVUsWUFBWTtBQUN0QixVQUFVLEVBQUU7QUFDWixVQUFVLEtBQUs7QUFDZixPQUFPLENBQUM7QUFDUixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDZCxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUM1QztBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDdkMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFPLFFBQVEsQ0FBQztBQUM3QyxTQUFTLE9BQU8sRUFBRSxDQUFDO0FBQ25CLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO0FBQ2IsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDekMsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0FBQ2YsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVCO0FBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDM0IsTUFBTSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM1QixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRTtBQUNmLElBQUksSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDM0IsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25CLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM5QjtBQUNBO0FBQ0EsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDckIsTUFBTSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVFO0FBQ0E7QUFDQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0E7QUFDQSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RDtBQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNoRCxNQUFNLElBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDM0Q7QUFDQSxNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRDtBQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbEM7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ2hCLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUNwRCxRQUFRLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsUUFB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QUM7QUFDN0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUN4RCxRQUFRLE1BQU07QUFDZCxNQUFNLEtBQUssQ0FBQztBQUNaO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDdEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztBQUM1RCxRQUFRLE1BQU07QUFDZCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO0FBQ2IsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFEO0FBQ0EsSUFBSSxJQUFJLE9BQU87QUFDZixNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDM0M7QUFDQTtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RELElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDNUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0FBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLEdBQUc7QUFDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQjtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3JCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkI7QUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEM7QUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkM7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsQixHQUFHO0FBQ0g7O0FDN1NPLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNyQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxD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RyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTztBQUNsQztBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRCxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzRDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLElBQUk7QUFDZjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ2I7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDMUI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7QUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFDO0FBQy9CO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsR0FBRztBQUNoQjtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTztBQUN0QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztBQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUc7QUFDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUN2QjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdkM7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7QUFD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QUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoSCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUN2QztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7QUFDakI7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUNwQztBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxHQUFHO0FBQ1o7QUFDQSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxDQUFDLEdBQUc7QUFDbEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUMzQixLQUFLO0FBQ0w7QUFDQTs7QUMxRE8sTUFBTSxN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LEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQztBQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDM0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDL0xBO0FBRUE7QUFDTyxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFDckM7QUFDQSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSTtBQUM1RCxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQ1ZPLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNoQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztBQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hMO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QztBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBLElB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QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTTtBQUM1QjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBSztBQUNqRCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRTtBQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0M7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDckM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRTtBQUNyRjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUks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QUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDM0QsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FDMVRPLE1BQU0sS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNqQztBQUNBLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFDMUI7QUFDQSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuQjtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFDO0FBQ3BDO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFFO0FBQ3hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNwRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQy9DO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzlGO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0FBQ0E7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUc7QUFDdEM7QUFDQSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFNO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUU7QUFDaEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRTtBQUNyRSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO0FBQ3RGO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUc7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUU7QUFDbkIsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFFO0FBQ3ZCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUc7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0I7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENB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QU07QUFDNUI7QUFDQSxRQUFRLFFBQVEsSUFBSTtBQUNwQixZQUFZLEtBQUssQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzFDLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0FBQzNELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0FBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0FBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0FBQzdELGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQzlEO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLFlBQVksS0FBSyxDQUFDO0FBQ2xCO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7QUFDaEQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDOUQsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUM7QUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUU7QUFDcEU7QUFDQSxZQUFZLE1BQU07QUFDbEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUMxQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQztBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsR0FBRztBQUNoQjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUMvQjtBQUNBLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQ7QUFDQSxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDMUQsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFEO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN0RDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTTtBQUM3QjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4RTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUc7QUFDL0I7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkc7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRTtBQUNwSDtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDMUI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyUkE7QUFJQTtBQUNPLE1BQU0sUUFBUSxTQUFTLEtBQUssQ0FBQztBQUNwQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN0QixFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUM7QUFDaEM7QUFDQSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNYLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQztBQUM3QztBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzNCLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3RCxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDN0IsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pFLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekU7QUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDckMsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0FBQ3ZDO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxRQUFRO0FBQ2YsR0FBRyxPQUFPLENBQUMsQ0FBQyxRQUFRLEtBQUssVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDNUQ7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNuQjtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMs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QUMsR0FBRyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzlDO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWjtBQUNBO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUNsRCxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEUsR0FBRyxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzRCxHQUFHO0FBQ0gsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM1QztBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DLEdBQUcsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7QUFDM0IsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEMsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEQsSUFBSSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDckIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0MsS0FBSyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pELEtBQUssTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUMsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3QyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDaEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNwQyxJQUFJLE1BQU07QUFDVjtBQUNBLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDL0IsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFD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QixFQUFFO0FBQ0Y7QUFDQTtBQUNBLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNiLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNyQyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDMUIsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNsQixFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQyxHQUFHLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ3RCO0FBQ0EsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsSUFBSSxTQUFTO0FBQ2I7QUFDQSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7QUFDM0IsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0MsS0FBSyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FB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LElBQUksQ0FBQztBQUNiO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ2pFO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztBQUM1QztBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNwRTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3ZFO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFR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QUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQztBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUM7QUFDQSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNoRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQ1osSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUM5QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxPQUFPLEdBQUc7QUFDWixJQUFJLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksR0FBRztBQUNULElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxHQUFHO0FBQ2QsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDckIsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QjtBQUNBLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVc7QUFDaEMsVUFBVSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QyxVQUFVLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFDN0I7QUFDQSxNQUFNLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDbkQ7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN6QztBQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO0FBQ3BCLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDN0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDL0MsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDdkMsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakM7QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNsRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekQ7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVTtBQUMzQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUMxRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxHQUFHO0FBQ1gsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUM1QixHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDZCxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVE7QUFDckIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM1RSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRTtBQUNsQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQzVCLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNoQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxQixLQUFLO0FBQ0wsR0FBRztBQUNIOzs7OyJ9 diff --git a/examples/uil_treelist.html b/examples/uil_treelist.html index 2674a54..f991286 100644 --- a/examples/uil_treelist.html +++ b/examples/uil_treelist.html @@ -91,7 +91,7 @@ }; - document.body.appendChild(ui.canvas); + //document.body.appendChild(ui.canvas); function log(msg){ document.getElementById('log').textContent = msg; } g.open(); diff --git a/src/core/Roots.js b/src/core/Roots.js index 830748b..cf88a34 100644 --- a/src/core/Roots.js +++ b/src/core/Roots.js @@ -294,9 +294,14 @@ const R = { e.clientX = R.ID.mouse.x; e.clientY = R.ID.mouse.y; } else if (R.ID.isCanvas) { - // NUEVO: si es canvas con parent, usar mouse virtual + offset del GUI - e.clientX = R.ID.zone.x + R.ID.mouse.x; - e.clientY = R.ID.zone.y + R.ID.mouse.y; + // Solo usar mouse virtual si el evento es "programático" (coords -1) + // y además el mouse virtual ya fue seteado (>=0). + const wantsVirtual = (e.clientX === -1 || e.clientY === -1); + const hasMouse = (R.ID.mouse.x >= 0 && R.ID.mouse.y >= 0); + if (wantsVirtual && hasMouse) { + e.clientX = R.ID.zone.x + R.ID.mouse.x; + e.clientY = R.ID.zone.y + R.ID.mouse.y; + } } //if( R.ID.marginDiv ) e.clientY -= R.ID.margin * 0.5